Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthieu Aubry <mattab@users.noreply.github.com>2017-09-20 14:06:08 +0300
committerGitHub <noreply@github.com>2017-09-20 14:06:08 +0300
commit4a18b35fb3f37189b999997bd90884aa0ceb6e75 (patch)
tree2020b521ec738402a0c522c081a10f4ef56ddbdb
parenta54f62f55e500644372fa342738483a6fd3dfaa3 (diff)
parente4750236c6668b9126271cc6eef02256a64ec9f0 (diff)
Merge pull request #12085 from piwik/3.x-dev3.1.1
Release Piwik 3.1.1
-rw-r--r--.gitattributes1
-rw-r--r--.travis.yml2
-rw-r--r--CHANGELOG.md37
-rw-r--r--LICENSE675
-rw-r--r--README.md8
-rw-r--r--bower.json17
-rw-r--r--composer.lock337
-rw-r--r--config/global.ini.php23
-rw-r--r--config/global.php1
-rw-r--r--core/Archive.php54
-rw-r--r--core/Archive/ArchiveQuery.php49
-rw-r--r--core/Archive/ArchiveQueryFactory.php127
-rw-r--r--core/ArchiveProcessor/Parameters.php26
-rw-r--r--core/ArchiveProcessor/PluginsArchiver.php4
-rw-r--r--core/ArchiveProcessor/Rules.php21
-rw-r--r--core/AssetManager/UIAssetCacheBuster.php32
-rw-r--r--core/AssetManager/UIAssetFetcher.php2
-rw-r--r--core/AssetManager/UIAssetMerger/StylesheetUIAssetMerger.php4
-rw-r--r--core/CliMulti/Process.php2
-rw-r--r--core/Common.php4
-rw-r--r--core/Config.php1
-rw-r--r--core/CronArchive.php12
-rw-r--r--core/DataAccess/ArchiveSelector.php3
-rw-r--r--core/DataAccess/LogAggregator.php22
-rw-r--r--core/DataAccess/RawLogDao.php65
-rw-r--r--core/DataTable/Renderer/Console.php3
-rw-r--r--core/DataTable/Renderer/Html.php2
-rw-r--r--core/Date.php44
-rw-r--r--core/ErrorHandler.php2
-rw-r--r--core/FileIntegrity.php21
-rw-r--r--core/Filesystem.php6
-rw-r--r--core/Http.php22
-rw-r--r--core/Intl/Data/Provider/DateTimeFormatProvider.php10
-rw-r--r--core/Intl/Data/Resources/countries.php1
-rw-r--r--core/Intl/Data/Resources/languages-to-countries.php2
-rw-r--r--core/Mail.php5
-rw-r--r--core/Period.php20
-rw-r--r--core/Period/Factory.php76
-rw-r--r--core/Scheduler/Scheduler.php29
-rw-r--r--core/Settings/Storage/Backend/MeasurableSettingsTable.php22
-rw-r--r--core/Settings/Storage/Backend/PluginSettingsTable.php22
-rw-r--r--core/SettingsPiwik.php18
-rw-r--r--core/Tracker.php5
-rw-r--r--core/Tracker/LogTable.php10
-rw-r--r--core/Tracker/Response.php1
-rw-r--r--core/Tracker/VisitorRecognizer.php6
-rw-r--r--core/Translation/Translator.php2
-rwxr-xr-xcore/Twig.php2
-rw-r--r--core/Version.php2
-rw-r--r--core/View.php9
-rw-r--r--core/ViewDataTable/Config.php9
-rw-r--r--core/testMinimumPhpVersion.php14
-rw-r--r--js/piwik.js93
-rw-r--r--js/piwik.min.js107
-rw-r--r--lang/da.json18
-rw-r--r--lang/de.json16
-rw-r--r--lang/he.json15
-rw-r--r--lang/id.json78
-rw-r--r--lang/lv.json47
-rw-r--r--lang/nb.json3
-rw-r--r--lang/pl.json81
-rw-r--r--lang/ru.json16
-rw-r--r--lang/sk.json4
-rw-r--r--lang/sv.json16
-rw-r--r--lang/vi.json1
-rw-r--r--lang/zh-cn.json7
-rw-r--r--libs/Zend/Validate/Hostname.php14
-rw-r--r--libs/bower_components/angular-animate/.bower.json12
-rw-r--r--libs/bower_components/angular-animate/LICENSE.md21
-rw-r--r--libs/bower_components/angular-animate/angular-animate.js668
-rw-r--r--libs/bower_components/angular-animate/angular-animate.min.js104
-rw-r--r--libs/bower_components/angular-animate/angular-animate.min.js.map6
-rw-r--r--libs/bower_components/angular-animate/bower.json4
-rw-r--r--libs/bower_components/angular-animate/package.json11
-rw-r--r--libs/bower_components/angular-cookies/.bower.json12
-rw-r--r--libs/bower_components/angular-cookies/LICENSE.md21
-rw-r--r--libs/bower_components/angular-cookies/angular-cookies.js35
-rw-r--r--libs/bower_components/angular-cookies/angular-cookies.min.js8
-rw-r--r--libs/bower_components/angular-cookies/angular-cookies.min.js.map4
-rw-r--r--libs/bower_components/angular-cookies/bower.json4
-rw-r--r--libs/bower_components/angular-cookies/package.json11
-rw-r--r--libs/bower_components/angular-mocks/.bower.json12
-rw-r--r--libs/bower_components/angular-mocks/LICENSE.md21
-rw-r--r--libs/bower_components/angular-mocks/README.md2
-rw-r--r--libs/bower_components/angular-mocks/angular-mocks.js1361
-rw-r--r--libs/bower_components/angular-mocks/bower.json4
-rw-r--r--libs/bower_components/angular-mocks/package.json11
-rw-r--r--libs/bower_components/angular-sanitize/.bower.json12
-rw-r--r--libs/bower_components/angular-sanitize/LICENSE.md21
-rw-r--r--libs/bower_components/angular-sanitize/angular-sanitize.js883
-rw-r--r--libs/bower_components/angular-sanitize/angular-sanitize.min.js25
-rw-r--r--libs/bower_components/angular-sanitize/angular-sanitize.min.js.map6
-rw-r--r--libs/bower_components/angular-sanitize/bower.json4
-rw-r--r--libs/bower_components/angular-sanitize/package.json11
-rw-r--r--libs/bower_components/angular/.bower.json10
-rw-r--r--libs/bower_components/angular/LICENSE.md21
-rw-r--r--libs/bower_components/angular/angular.js11752
-rw-r--r--libs/bower_components/angular/angular.min.js627
-rw-r--r--libs/bower_components/angular/angular.min.js.gzipbin51629 -> 58811 bytes
-rw-r--r--libs/bower_components/angular/angular.min.js.map6
-rw-r--r--libs/bower_components/angular/bower.json2
-rw-r--r--libs/bower_components/angular/package.json2
-rw-r--r--libs/bower_components/ngDialog/.bower.json22
-rw-r--r--libs/bower_components/ngDialog/CHANGELOG.md109
-rw-r--r--libs/bower_components/ngDialog/CONTRIBUTING.md37
-rw-r--r--libs/bower_components/ngDialog/README.md530
-rw-r--r--libs/bower_components/ngDialog/bower.json17
-rw-r--r--libs/bower_components/ngDialog/css/ngDialog-custom-width.css3
-rw-r--r--libs/bower_components/ngDialog/css/ngDialog-theme-default.css5
-rw-r--r--libs/bower_components/ngDialog/css/ngDialog-theme-default.min.css4
-rw-r--r--libs/bower_components/ngDialog/css/ngDialog-theme-plain.css1
-rw-r--r--libs/bower_components/ngDialog/css/ngDialog-theme-plain.min.css4
-rw-r--r--libs/bower_components/ngDialog/css/ngDialog.css22
-rw-r--r--libs/bower_components/ngDialog/css/ngDialog.min.css4
-rw-r--r--libs/bower_components/ngDialog/js/ngDialog.js1291
-rw-r--r--libs/bower_components/ngDialog/js/ngDialog.min.js4
-rw-r--r--libs/bower_components/ngDialog/karma.conf.js46
-rw-r--r--libs/bower_components/ngDialog/package.json43
-rw-r--r--libs/bower_components/ngDialog/protractor.conf.js75
-rw-r--r--libs/bower_components/ngDialog/server.js9
-rw-r--r--libs/bower_components/ngDialog/yarn.lock3281
m---------misc/log-analytics0
-rw-r--r--piwik.js107
-rw-r--r--plugins/API/Controller.php2
-rw-r--r--plugins/API/lang/de.json2
-rw-r--r--plugins/API/lang/id.json7
-rw-r--r--plugins/API/lang/pl.json5
-rw-r--r--plugins/API/lang/ru.json1
-rw-r--r--plugins/API/lang/sv.json1
-rw-r--r--plugins/API/lang/tr.json5
-rw-r--r--plugins/API/tests/Unit/ConsoleRendererTest.php18
-rw-r--r--plugins/API/tests/Unit/HtmlRendererTest.php48
-rw-r--r--plugins/Actions/Actions.php8
-rw-r--r--plugins/Actions/ArchivingHelper.php2
-rw-r--r--plugins/Actions/VisitorDetails.php360
-rw-r--r--plugins/Actions/javascripts/actionsDataTable.js2
-rw-r--r--plugins/Actions/lang/de.json2
-rw-r--r--plugins/Actions/lang/el.json2
-rw-r--r--plugins/Actions/lang/en.json2
-rw-r--r--plugins/Actions/lang/id.json4
-rw-r--r--plugins/Actions/lang/ja.json3
-rw-r--r--plugins/Actions/lang/ko.json1
-rw-r--r--plugins/Actions/lang/pl.json11
-rw-r--r--plugins/Actions/lang/ru.json4
-rw-r--r--plugins/Actions/lang/sv.json5
-rw-r--r--plugins/Actions/lang/tr.json33
-rw-r--r--plugins/Actions/lang/zh-cn.json102
-rw-r--r--plugins/Actions/lang/zh-tw.json2
-rw-r--r--plugins/Actions/templates/_profileSummary.twig25
-rw-r--r--plugins/Annotations/lang/de.json4
-rw-r--r--plugins/Annotations/lang/zh-cn.json32
m---------plugins/AnonymousPiwikUsageMeasurement0
m---------plugins/Bandwidth0
-rw-r--r--plugins/Contents/Columns/ContentInteraction.php6
-rw-r--r--plugins/Contents/Columns/ContentName.php9
-rw-r--r--plugins/Contents/Columns/ContentPiece.php6
-rw-r--r--plugins/Contents/Columns/ContentTarget.php5
-rw-r--r--plugins/Contents/Contents.php18
-rw-r--r--plugins/Contents/VisitorDetails.php50
-rw-r--r--plugins/Contents/lang/el.json1
-rw-r--r--plugins/Contents/lang/en.json1
-rw-r--r--plugins/Contents/lang/id.json11
-rw-r--r--plugins/Contents/lang/pl.json13
-rw-r--r--plugins/Contents/lang/ru.json2
-rw-r--r--plugins/Contents/lang/sv.json2
-rw-r--r--plugins/Contents/lang/zh-cn.json14
-rw-r--r--plugins/Contents/lang/zh-tw.json1
-rw-r--r--plugins/Contents/templates/_actionContent.twig15
-rw-r--r--plugins/Contents/templates/_actionTooltip.twig9
-rw-r--r--plugins/Contents/tests/System/expected/test_Contents__Live.getLastVisitsDetails_day.xml456
-rw-r--r--plugins/Contents/tests/System/expected/test_Contents__Live.getLastVisitsDetails_month.xml456
-rw-r--r--plugins/Contents/tests/System/expected/test_Contents_contentInteractionMatch__Live.getLastVisitsDetails_day.xml456
-rw-r--r--plugins/Contents/tests/System/expected/test_Contents_contentTargetMatch__Live.getLastVisitsDetails_day.xml456
-rw-r--r--plugins/Contents/tests/System/expected/test_ContentscontentNameOrPieceMatch__Live.getLastVisitsDetails_day.xml456
-rw-r--r--plugins/CoreAdminHome/Commands/SetConfig.php21
-rw-r--r--plugins/CoreAdminHome/Controller.php4
-rw-r--r--plugins/CoreAdminHome/Tasks.php5
-rw-r--r--plugins/CoreAdminHome/lang/da.json3
-rw-r--r--plugins/CoreAdminHome/lang/de.json8
-rw-r--r--plugins/CoreAdminHome/lang/id.json4
-rw-r--r--plugins/CoreAdminHome/lang/ja.json1
-rw-r--r--plugins/CoreAdminHome/lang/nl.json1
-rw-r--r--plugins/CoreAdminHome/lang/pl.json45
-rw-r--r--plugins/CoreAdminHome/lang/ru.json5
-rw-r--r--plugins/CoreAdminHome/lang/sk.json8
-rw-r--r--plugins/CoreAdminHome/lang/sv.json9
-rw-r--r--plugins/CoreAdminHome/lang/tr.json30
-rw-r--r--plugins/CoreAdminHome/lang/zh-cn.json158
-rw-r--r--plugins/CoreAdminHome/templates/home.twig6
-rw-r--r--plugins/CoreHome/Controller.php4
-rw-r--r--plugins/CoreHome/CoreHome.php20
-rw-r--r--plugins/CoreHome/Tracker/LogTable/Action.php5
-rw-r--r--plugins/CoreHome/Tracker/LogTable/Conversion.php5
-rw-r--r--plugins/CoreHome/Tracker/LogTable/ConversionItem.php5
-rw-r--r--plugins/CoreHome/Tracker/LogTable/LinkVisitAction.php5
-rw-r--r--plugins/CoreHome/Tracker/LogTable/Visit.php5
-rw-r--r--plugins/CoreHome/Visitor.php114
-rw-r--r--plugins/CoreHome/VisitorDetails.php119
-rw-r--r--plugins/CoreHome/angularjs/common/directives/field-condition.js2
-rw-r--r--plugins/CoreHome/angularjs/common/services/reporting-pages-model.js20
-rw-r--r--plugins/CoreHome/angularjs/content-block/content-block.directive.js6
-rw-r--r--plugins/CoreHome/angularjs/piwikApp.js4
-rw-r--r--plugins/CoreHome/angularjs/reporting-page/reportingpage.controller.js15
-rw-r--r--plugins/CoreHome/angularjs/selector/selector.directive.js4
-rw-r--r--plugins/CoreHome/angularjs/siteselector/siteselector.directive.less9
-rw-r--r--plugins/CoreHome/angularjs/widget-loader/widgetloader.directive.js13
-rw-r--r--plugins/CoreHome/javascripts/broadcast.js7
-rw-r--r--plugins/CoreHome/javascripts/dataTable.js20
-rw-r--r--plugins/CoreHome/javascripts/dataTable_rowactions.js6
-rw-r--r--plugins/CoreHome/lang/da.json13
-rw-r--r--plugins/CoreHome/lang/de.json6
-rw-r--r--plugins/CoreHome/lang/id.json6
-rw-r--r--plugins/CoreHome/lang/pl.json29
-rw-r--r--plugins/CoreHome/lang/ru.json5
-rw-r--r--plugins/CoreHome/lang/sv.json6
-rw-r--r--plugins/CoreHome/stylesheets/layout.less1
-rw-r--r--plugins/CoreHome/templates/_dataTableActions.twig12
-rw-r--r--plugins/CoreHome/templates/_dataTableFooter.twig2
-rwxr-xr-xplugins/CoreHome/templates/widgetContainer.twig2
-rw-r--r--plugins/CorePluginsAdmin/Commands/ActivatePlugin.php26
-rw-r--r--plugins/CorePluginsAdmin/Commands/DeactivatePlugin.php18
-rw-r--r--plugins/CorePluginsAdmin/angularjs/form-field/form-field.directive.js13
-rw-r--r--plugins/CorePluginsAdmin/lang/cs.json5
-rw-r--r--plugins/CorePluginsAdmin/lang/de.json11
-rw-r--r--plugins/CorePluginsAdmin/lang/el.json2
-rw-r--r--plugins/CorePluginsAdmin/lang/es.json1
-rw-r--r--plugins/CorePluginsAdmin/lang/fr.json5
-rw-r--r--plugins/CorePluginsAdmin/lang/id.json9
-rw-r--r--plugins/CorePluginsAdmin/lang/it.json1
-rw-r--r--plugins/CorePluginsAdmin/lang/ja.json5
-rw-r--r--plugins/CorePluginsAdmin/lang/nl.json3
-rw-r--r--plugins/CorePluginsAdmin/lang/pl.json28
-rw-r--r--plugins/CorePluginsAdmin/lang/ru.json6
-rw-r--r--plugins/CorePluginsAdmin/lang/sq.json2
-rw-r--r--plugins/CorePluginsAdmin/lang/sr.json1
-rw-r--r--plugins/CorePluginsAdmin/lang/uk.json1
-rw-r--r--plugins/CorePluginsAdmin/lang/zh-cn.json57
-rw-r--r--plugins/CorePluginsAdmin/lang/zh-tw.json2
-rw-r--r--plugins/CoreUpdater/SystemSettings.php4
-rw-r--r--plugins/CoreUpdater/UpdateCommunication.php8
-rw-r--r--plugins/CoreUpdater/lang/de.json2
-rw-r--r--plugins/CoreUpdater/lang/id.json1
-rw-r--r--plugins/CoreUpdater/lang/pl.json27
-rw-r--r--plugins/CoreUpdater/lang/ru.json2
-rw-r--r--plugins/CoreUpdater/lang/zh-cn.json94
-rw-r--r--plugins/CoreVisualizations/javascripts/seriesPicker.js4
-rw-r--r--plugins/CoreVisualizations/stylesheets/jqplot.css7
m---------plugins/CustomAlerts0
m---------plugins/CustomDimensions0
-rw-r--r--plugins/CustomPiwikJs/API.php3
-rw-r--r--plugins/CustomPiwikJs/Commands/UpdateTracker.php3
-rw-r--r--plugins/CustomPiwikJs/CustomPiwikJs.php7
-rw-r--r--plugins/CustomPiwikJs/File.php5
-rw-r--r--plugins/CustomPiwikJs/Tasks.php4
-rw-r--r--plugins/CustomPiwikJs/TrackerUpdater.php53
-rw-r--r--plugins/CustomPiwikJs/TrackingCode/PluginTrackerFiles.php25
-rw-r--r--plugins/CustomPiwikJs/lang/id.json5
-rw-r--r--plugins/CustomPiwikJs/lang/pl.json8
-rw-r--r--plugins/CustomPiwikJs/lang/sv.json8
-rw-r--r--plugins/CustomPiwikJs/lang/tr.json5
-rw-r--r--plugins/CustomPiwikJs/lang/zh-cn.json8
-rw-r--r--plugins/CustomPiwikJs/tests/Integration/FileTest.php5
-rw-r--r--plugins/CustomPiwikJs/tests/Integration/PluginTrackerFilesTest.php19
-rw-r--r--plugins/CustomPiwikJs/tests/Integration/TrackerUpdaterTest.php47
-rw-r--r--plugins/CustomVariables/CustomVariables.php29
-rw-r--r--plugins/CustomVariables/ProfileSummary/VisitScopeSummary.php56
-rw-r--r--plugins/CustomVariables/VisitorDetails.php207
-rw-r--r--plugins/CustomVariables/lang/de.json2
-rw-r--r--plugins/CustomVariables/lang/id.json5
-rw-r--r--plugins/CustomVariables/lang/zh-cn.json2
-rw-r--r--plugins/CustomVariables/templates/_actionTooltip.twig10
-rw-r--r--plugins/CustomVariables/templates/_profileSummary.twig13
-rw-r--r--plugins/CustomVariables/templates/_visitorDetails.twig11
-rw-r--r--plugins/CustomVariables/tests/System/expected/test_CustomVariablesSystemTest__Live.getLastVisitsDetails_day.xml34
-rw-r--r--plugins/DBStats/lang/pl.json9
-rw-r--r--plugins/Dashboard/javascripts/dashboardObject.js4
-rwxr-xr-xplugins/Dashboard/javascripts/dashboardWidget.js4
-rw-r--r--plugins/Dashboard/lang/fr.json2
-rw-r--r--plugins/Dashboard/lang/lv.json14
-rw-r--r--plugins/Dashboard/lang/sv.json16
-rw-r--r--plugins/Dashboard/lang/zh-cn.json24
-rw-r--r--plugins/Dashboard/templates/index.twig2
-rw-r--r--plugins/DevicePlugins/Archiver.php27
-rw-r--r--plugins/DevicePlugins/Columns/DevicePluginColumn.php25
-rw-r--r--plugins/DevicePlugins/Columns/PluginCookie.php3
-rw-r--r--plugins/DevicePlugins/Columns/PluginDirector.php3
-rw-r--r--plugins/DevicePlugins/Columns/PluginFlash.php3
-rw-r--r--plugins/DevicePlugins/Columns/PluginGears.php3
-rw-r--r--plugins/DevicePlugins/Columns/PluginJava.php3
-rw-r--r--plugins/DevicePlugins/Columns/PluginPdf.php3
-rw-r--r--plugins/DevicePlugins/Columns/PluginQuickTime.php3
-rw-r--r--plugins/DevicePlugins/Columns/PluginRealPlayer.php3
-rw-r--r--plugins/DevicePlugins/Columns/PluginSilverlight.php3
-rw-r--r--plugins/DevicePlugins/Columns/PluginWindowsMedia.php3
-rw-r--r--plugins/DevicePlugins/DevicePlugins.php52
-rw-r--r--plugins/DevicePlugins/Reports/GetPlugin.php3
-rw-r--r--plugins/DevicePlugins/VisitorDetails.php (renamed from plugins/DevicePlugins/Visitor.php)35
-rw-r--r--plugins/DevicePlugins/functions.php17
-rw-r--r--plugins/DevicePlugins/lang/pl.json7
-rw-r--r--plugins/DevicePlugins/lang/zh-cn.json10
-rw-r--r--plugins/DevicesDetection/Columns/DeviceBrand.php1
-rw-r--r--plugins/DevicesDetection/DevicesDetection.php34
-rw-r--r--plugins/DevicesDetection/ProfileSummary/DevicesSummary.php52
-rw-r--r--plugins/DevicesDetection/Visitor.php101
-rw-r--r--plugins/DevicesDetection/VisitorDetails.php175
-rw-r--r--plugins/DevicesDetection/lang/el.json1
-rw-r--r--plugins/DevicesDetection/lang/en.json1
-rw-r--r--plugins/DevicesDetection/lang/id.json18
-rw-r--r--plugins/DevicesDetection/lang/pl.json18
-rw-r--r--plugins/DevicesDetection/lang/zh-cn.json42
-rw-r--r--plugins/DevicesDetection/lang/zh-tw.json1
-rw-r--r--plugins/DevicesDetection/templates/_profileSummary.twig21
-rw-r--r--plugins/Diagnostics/Commands/Run.php6
-rw-r--r--plugins/Diagnostics/Diagnostic/PageSpeedCheck.php2
-rw-r--r--plugins/Diagnostics/lang/de.json2
-rw-r--r--plugins/Diagnostics/lang/id.json6
-rw-r--r--plugins/Diagnostics/lang/pl.json8
-rw-r--r--plugins/Ecommerce/Controller.php13
-rw-r--r--plugins/Ecommerce/ProfileSummary/EcommerceSummary.php54
-rw-r--r--plugins/Ecommerce/VisitorDetails.php216
-rw-r--r--plugins/Ecommerce/lang/de.json2
-rw-r--r--plugins/Ecommerce/lang/id.json7
-rw-r--r--plugins/Ecommerce/lang/pl.json13
-rw-r--r--plugins/Ecommerce/lang/zh-cn.json8
-rw-r--r--plugins/Ecommerce/templates/_profileSummary.twig14
-rw-r--r--plugins/Events/Columns/EventAction.php5
-rw-r--r--plugins/Events/Columns/EventCategory.php5
-rw-r--r--plugins/Events/Columns/EventName.php2
-rw-r--r--plugins/Events/Events.php18
-rw-r--r--plugins/Events/VisitorDetails.php74
-rw-r--r--plugins/Events/lang/de.json2
-rw-r--r--plugins/Events/lang/id.json8
-rw-r--r--plugins/Events/lang/pl.json3
-rw-r--r--plugins/Events/templates/_actionEvent.twig25
-rw-r--r--plugins/Feedback/lang/id.json3
-rw-r--r--plugins/Feedback/lang/nl.json1
-rw-r--r--plugins/Feedback/lang/pl.json29
-rw-r--r--plugins/Goals/VisitorDetails.php124
-rw-r--r--plugins/Goals/Widgets/AddNewGoal.php2
-rw-r--r--plugins/Goals/lang/de.json8
-rw-r--r--plugins/Goals/lang/id.json5
-rw-r--r--plugins/Goals/lang/pl.json131
-rw-r--r--plugins/Goals/lang/sv.json5
-rw-r--r--plugins/Goals/lang/zh-cn.json41
-rw-r--r--plugins/Goals/templates/_listGoalEdit.twig2
-rw-r--r--plugins/ImageGraph/ImageGraph.php1
-rw-r--r--plugins/ImageGraph/lang/id.json3
-rw-r--r--plugins/ImageGraph/lang/pl.json6
-rw-r--r--plugins/Insights/lang/de.json2
-rw-r--r--plugins/Insights/lang/id.json11
-rw-r--r--plugins/Insights/lang/pl.json24
-rw-r--r--plugins/Installation/Installation.php5
-rw-r--r--plugins/Installation/javascripts/installation.js2
-rw-r--r--plugins/Installation/lang/ar.json1
-rw-r--r--plugins/Installation/lang/cs.json1
-rw-r--r--plugins/Installation/lang/da.json3
-rw-r--r--plugins/Installation/lang/de.json23
-rw-r--r--plugins/Installation/lang/el.json2
-rw-r--r--plugins/Installation/lang/en.json2
-rw-r--r--plugins/Installation/lang/es.json1
-rw-r--r--plugins/Installation/lang/fr.json2
-rw-r--r--plugins/Installation/lang/hi.json1
-rw-r--r--plugins/Installation/lang/id.json2
-rw-r--r--plugins/Installation/lang/it.json1
-rw-r--r--plugins/Installation/lang/ja.json1
-rw-r--r--plugins/Installation/lang/ko.json1
-rw-r--r--plugins/Installation/lang/nb.json1
-rw-r--r--plugins/Installation/lang/nl.json7
-rw-r--r--plugins/Installation/lang/pl.json90
-rw-r--r--plugins/Installation/lang/pt-br.json1
-rw-r--r--plugins/Installation/lang/ru.json2
-rw-r--r--plugins/Installation/lang/sq.json1
-rw-r--r--plugins/Installation/lang/sr.json1
-rw-r--r--plugins/Installation/lang/sv.json11
-rw-r--r--plugins/Installation/lang/uk.json1
-rw-r--r--plugins/Installation/lang/zh-cn.json207
-rw-r--r--plugins/Installation/lang/zh-tw.json2
-rw-r--r--plugins/Intl/Commands/GenerateIntl.php2
-rw-r--r--plugins/Intl/DateTimeFormatProvider.php20
-rw-r--r--plugins/Intl/lang/am.json4
-rw-r--r--plugins/Intl/lang/ar.json4
-rw-r--r--plugins/Intl/lang/be.json2
-rw-r--r--plugins/Intl/lang/bg.json6
-rw-r--r--plugins/Intl/lang/bn.json4
-rw-r--r--plugins/Intl/lang/bs.json4
-rw-r--r--plugins/Intl/lang/ca.json4
-rw-r--r--plugins/Intl/lang/cs.json4
-rw-r--r--plugins/Intl/lang/cy.json4
-rw-r--r--plugins/Intl/lang/da.json2
-rw-r--r--plugins/Intl/lang/de.json4
-rw-r--r--plugins/Intl/lang/el.json4
-rw-r--r--plugins/Intl/lang/en.json4
-rw-r--r--plugins/Intl/lang/es.json4
-rw-r--r--plugins/Intl/lang/et.json4
-rw-r--r--plugins/Intl/lang/eu.json4
-rw-r--r--plugins/Intl/lang/fa.json2
-rw-r--r--plugins/Intl/lang/fi.json4
-rw-r--r--plugins/Intl/lang/fr.json4
-rw-r--r--plugins/Intl/lang/gl.json4
-rw-r--r--plugins/Intl/lang/he.json4
-rw-r--r--plugins/Intl/lang/hi.json4
-rw-r--r--plugins/Intl/lang/hr.json4
-rw-r--r--plugins/Intl/lang/hu.json6
-rw-r--r--plugins/Intl/lang/id.json4
-rw-r--r--plugins/Intl/lang/is.json2
-rw-r--r--plugins/Intl/lang/it.json6
-rw-r--r--plugins/Intl/lang/ja.json4
-rw-r--r--plugins/Intl/lang/ka.json4
-rw-r--r--plugins/Intl/lang/ko.json2
-rw-r--r--plugins/Intl/lang/lt.json2
-rw-r--r--plugins/Intl/lang/lv.json8
-rw-r--r--plugins/Intl/lang/nb.json4
-rw-r--r--plugins/Intl/lang/nl.json4
-rw-r--r--plugins/Intl/lang/nn.json2
-rw-r--r--plugins/Intl/lang/pl.json2
-rw-r--r--plugins/Intl/lang/pt-br.json4
-rw-r--r--plugins/Intl/lang/pt.json2
-rw-r--r--plugins/Intl/lang/ro.json4
-rw-r--r--plugins/Intl/lang/ru.json2
-rw-r--r--plugins/Intl/lang/sk.json4
-rw-r--r--plugins/Intl/lang/sl.json4
-rw-r--r--plugins/Intl/lang/sq.json4
-rw-r--r--plugins/Intl/lang/sr.json2
-rw-r--r--plugins/Intl/lang/sv.json2
-rw-r--r--plugins/Intl/lang/ta.json4
-rw-r--r--plugins/Intl/lang/te.json4
-rw-r--r--plugins/Intl/lang/th.json4
-rw-r--r--plugins/Intl/lang/tl.json4
-rw-r--r--plugins/Intl/lang/tr.json4
-rw-r--r--plugins/Intl/lang/uk.json4
-rw-r--r--plugins/Intl/lang/vi.json4
-rw-r--r--plugins/Intl/lang/zh-cn.json4
-rw-r--r--plugins/Intl/lang/zh-tw.json4
-rw-r--r--plugins/LanguagesManager/lang/id.json3
-rw-r--r--plugins/LanguagesManager/lang/pl.json3
-rw-r--r--plugins/LanguagesManager/lang/tr.json3
-rw-r--r--plugins/Live/API.php38
-rw-r--r--plugins/Live/Controller.php111
-rw-r--r--plugins/Live/Live.php64
-rw-r--r--plugins/Live/Model.php194
-rw-r--r--plugins/Live/ProfileSummary/ImportantVisits.php47
-rw-r--r--plugins/Live/ProfileSummary/ProfileSummaryAbstract.php67
-rw-r--r--plugins/Live/ProfileSummary/Summary.php52
-rw-r--r--plugins/Live/Visitor.php337
-rw-r--r--plugins/Live/VisitorDetails.php252
-rw-r--r--plugins/Live/VisitorDetailsAbstract.php275
-rw-r--r--plugins/Live/VisitorProfile.php347
-rw-r--r--plugins/Live/images/avatar_frame.pngbin5375 -> 0 bytes
-rw-r--r--plugins/Live/images/paperclip.pngbin10924 -> 0 bytes
-rw-r--r--plugins/Live/images/visitor_profile_close.pngbin4734 -> 0 bytes
-rw-r--r--plugins/Live/images/visitor_profile_gradient.pngbin2840 -> 0 bytes
-rw-r--r--plugins/Live/javascripts/SegmentedVisitorLog.js4
-rw-r--r--plugins/Live/javascripts/rowaction.js2
-rw-r--r--plugins/Live/javascripts/visitorLog.js50
-rw-r--r--plugins/Live/javascripts/visitorProfile.js63
-rw-r--r--plugins/Live/lang/cs.json2
-rw-r--r--plugins/Live/lang/de.json6
-rw-r--r--plugins/Live/lang/el.json6
-rw-r--r--plugins/Live/lang/en.json4
-rw-r--r--plugins/Live/lang/fr.json4
-rw-r--r--plugins/Live/lang/id.json11
-rw-r--r--plugins/Live/lang/it.json2
-rw-r--r--plugins/Live/lang/ja.json3
-rw-r--r--plugins/Live/lang/nl.json4
-rw-r--r--plugins/Live/lang/pl.json37
-rw-r--r--plugins/Live/lang/pt-br.json2
-rw-r--r--plugins/Live/lang/ru.json3
-rw-r--r--plugins/Live/lang/sq.json2
-rw-r--r--plugins/Live/lang/sr.json2
-rw-r--r--plugins/Live/lang/sv.json2
-rw-r--r--plugins/Live/lang/uk.json2
-rw-r--r--plugins/Live/lang/zh-cn.json6
-rw-r--r--plugins/Live/lang/zh-tw.json6
-rw-r--r--plugins/Live/stylesheets/live.less93
-rw-r--r--plugins/Live/stylesheets/visitor_profile.less775
-rw-r--r--plugins/Live/templates/_actionCommon.twig38
-rw-r--r--plugins/Live/templates/_actionEcommerce.twig54
-rw-r--r--plugins/Live/templates/_actionGoal.twig11
-rw-r--r--plugins/Live/templates/_actionTooltip.twig8
-rw-r--r--plugins/Live/templates/_actionsList.twig135
-rw-r--r--plugins/Live/templates/_dataTableViz_visitorLog.twig187
-rw-r--r--plugins/Live/templates/_profileSummary.twig40
-rw-r--r--plugins/Live/templates/_profileSummaryVisits.twig39
-rw-r--r--plugins/Live/templates/_visitorDetails.twig17
-rw-r--r--plugins/Live/templates/_visitorLogIcons.twig84
-rw-r--r--plugins/Live/templates/getLastVisitsStart.twig3
-rw-r--r--plugins/Live/templates/getSingleVisitSummary.twig68
-rw-r--r--plugins/Live/templates/getVisitList.twig42
-rw-r--r--plugins/Live/templates/getVisitorProfilePopup.twig204
-rw-r--r--plugins/Live/tests/Fixtures/VisitsWithAllActionsAndDevices.php221
-rw-r--r--plugins/Live/tests/System/expected/test___Live.getVisitorProfile.xml456
-rw-r--r--plugins/Live/tests/System/expected/test_higherLimit__Live.getVisitorProfile.xml786
-rw-r--r--plugins/Live/tests/UI/Live_spec.js58
-rw-r--r--plugins/Live/tests/UI/expected-ui-screenshots/Live_visitor_log.pngbin0 -> 417726 bytes
-rw-r--r--plugins/Live/tests/UI/expected-ui-screenshots/Live_visitor_profile.pngbin0 -> 436620 bytes
-rw-r--r--plugins/Live/tests/UI/expected-ui-screenshots/Live_visitor_profile_action_details.pngbin0 -> 301651 bytes
-rw-r--r--plugins/Live/tests/UI/expected-ui-screenshots/Live_visitor_profile_action_tooltip.pngbin0 -> 11399 bytes
-rw-r--r--plugins/Live/tests/UI/expected-ui-screenshots/Live_visitor_profile_actions_hidden.pngbin0 -> 261870 bytes
-rw-r--r--plugins/Live/tests/UI/expected-ui-screenshots/Live_visitor_profile_visit_details.pngbin0 -> 271958 bytes
m---------plugins/LogViewer0
-rw-r--r--plugins/Login/SessionInitializer.php3
-rw-r--r--plugins/Login/lang/de.json2
-rw-r--r--plugins/Login/lang/id.json4
-rw-r--r--plugins/Login/lang/nb.json1
-rw-r--r--plugins/Login/lang/pl.json11
-rw-r--r--plugins/Login/lang/sv.json3
-rw-r--r--plugins/Login/lang/zh-cn.json2
-rw-r--r--plugins/Login/templates/login.twig4
m---------plugins/LoginHttpAuth0
m---------plugins/LoginLdap0
m---------plugins/MarketingCampaignsReporting0
-rw-r--r--plugins/Marketplace/Controller.php6
-rw-r--r--plugins/Marketplace/Marketplace.php8
-rw-r--r--plugins/Marketplace/UpdateCommunication.php9
-rw-r--r--plugins/Marketplace/lang/id.json19
-rw-r--r--plugins/Marketplace/lang/ja.json1
-rw-r--r--plugins/Marketplace/lang/nb.json2
-rw-r--r--plugins/Marketplace/lang/pl.json85
-rw-r--r--plugins/Marketplace/lang/tr.json7
-rw-r--r--plugins/MobileAppMeasurable/lang/id.json6
-rw-r--r--plugins/MobileAppMeasurable/lang/ru.json3
-rw-r--r--plugins/MobileMessaging/CountryCallingCodes.php1
-rw-r--r--plugins/MobileMessaging/lang/de.json2
-rw-r--r--plugins/MobileMessaging/lang/id.json1
-rw-r--r--plugins/MobileMessaging/lang/ja.json3
-rw-r--r--plugins/MobileMessaging/lang/nl.json2
-rw-r--r--plugins/Monolog/Formatter/LineMessageFormatter.php2
-rw-r--r--plugins/Monolog/tests/Unit/Formatter/LineMessageFormatterTest.php2
m---------plugins/Morpheus/icons0
-rw-r--r--plugins/Morpheus/images/event.pngbin164 -> 2843 bytes
-rw-r--r--plugins/Morpheus/images/logo-header.pngbin2215 -> 2579 bytes
-rw-r--r--plugins/Morpheus/javascripts/piwikHelper.js2
-rw-r--r--plugins/Morpheus/stylesheets/general/_default.less1
-rw-r--r--plugins/Morpheus/stylesheets/main.less154
-rw-r--r--plugins/MultiSites/lang/id.json4
-rw-r--r--plugins/MultiSites/lang/pl.json2
-rw-r--r--plugins/MultiSites/lang/ru.json1
-rw-r--r--plugins/Overlay/client/client.js4
-rw-r--r--plugins/Overlay/client/followingpages.js16
-rw-r--r--plugins/Overlay/javascripts/Piwik_Overlay.js2
-rw-r--r--plugins/Overlay/lang/de.json2
-rw-r--r--plugins/Overlay/lang/pl.json13
-rw-r--r--plugins/PrivacyManager/lang/de.json6
-rw-r--r--plugins/PrivacyManager/lang/id.json1
-rw-r--r--plugins/PrivacyManager/lang/nb.json1
-rw-r--r--plugins/PrivacyManager/lang/nl.json2
-rw-r--r--plugins/PrivacyManager/lang/pl.json37
-rw-r--r--plugins/PrivacyManager/lang/sv.json1
-rw-r--r--plugins/ProfessionalServices/ProfessionalServices.php12
-rw-r--r--plugins/ProfessionalServices/templates/promoBelowCampaigns.twig7
-rw-r--r--plugins/ProfessionalServices/templates/promoSessionRecordings.twig2
-rw-r--r--plugins/Provider/Provider.php19
-rw-r--r--plugins/Provider/Visitor.php41
-rw-r--r--plugins/Provider/VisitorDetails.php57
-rw-r--r--plugins/Provider/lang/pl.json5
-rw-r--r--plugins/Provider/lang/ru.json3
-rw-r--r--plugins/Provider/templates/_visitorDetails.twig9
m---------plugins/QueuedTracking0
-rw-r--r--plugins/Referrers/Referrers.php15
-rw-r--r--plugins/Referrers/Reports/GetCampaigns.php15
-rw-r--r--plugins/Referrers/Tasks.php7
-rw-r--r--plugins/Referrers/VisitorDetails.php (renamed from plugins/Referrers/Visitor.php)65
-rw-r--r--plugins/Referrers/lang/de.json2
-rw-r--r--plugins/Referrers/lang/pl.json42
-rw-r--r--plugins/Referrers/lang/sv.json1
-rw-r--r--plugins/Referrers/lang/zh-cn.json4
-rw-r--r--plugins/Referrers/templates/_visitorDetails.twig35
-rw-r--r--plugins/Resolution/Resolution.php19
-rw-r--r--plugins/Resolution/VisitorDetails.php (renamed from plugins/Resolution/Visitor.php)14
-rw-r--r--plugins/Resolution/lang/pl.json6
-rw-r--r--plugins/SEO/lang/pl.json5
-rw-r--r--plugins/ScheduledReports/lang/de.json2
-rw-r--r--plugins/ScheduledReports/lang/id.json3
-rw-r--r--plugins/ScheduledReports/lang/ja.json1
-rw-r--r--plugins/ScheduledReports/lang/pl.json36
-rw-r--r--plugins/ScheduledReports/lang/ru.json21
-rw-r--r--plugins/ScheduledReports/lang/sk.json5
-rw-r--r--plugins/ScheduledReports/lang/sv.json3
-rw-r--r--plugins/ScheduledReports/templates/_addReport.twig2
-rw-r--r--plugins/ScheduledReports/templates/_listReports.twig2
-rw-r--r--plugins/ScheduledReports/templates/reportParametersScheduledReports.twig2
m---------plugins/SecurityInfo0
-rw-r--r--plugins/SegmentEditor/SegmentList.php1
-rw-r--r--plugins/SegmentEditor/javascripts/Segmentation.js10
-rw-r--r--plugins/SegmentEditor/lang/de.json6
-rw-r--r--plugins/SegmentEditor/lang/id.json6
-rw-r--r--plugins/SegmentEditor/lang/pl.json43
-rw-r--r--plugins/SegmentEditor/lang/sv.json1
-rw-r--r--plugins/SitesManager/Controller.php5
-rw-r--r--plugins/SitesManager/lang/cs.json1
-rw-r--r--plugins/SitesManager/lang/de.json13
-rw-r--r--plugins/SitesManager/lang/el.json1
-rw-r--r--plugins/SitesManager/lang/fr.json5
-rw-r--r--plugins/SitesManager/lang/id.json2
-rw-r--r--plugins/SitesManager/lang/ja.json7
-rw-r--r--plugins/SitesManager/lang/pl.json61
-rw-r--r--plugins/SitesManager/lang/sq.json1
-rw-r--r--plugins/SitesManager/lang/zh-tw.json1
m---------plugins/TasksTimetable0
-rw-r--r--plugins/Transitions/javascripts/transitions.js8
-rw-r--r--plugins/Transitions/lang/id.json1
-rw-r--r--plugins/Transitions/lang/pl.json17
m---------plugins/TreemapVisualization0
-rw-r--r--plugins/UserCountry/API.php41
-rwxr-xr-xplugins/UserCountry/GeoIPAutoUpdater.php6
-rwxr-xr-xplugins/UserCountry/LocationProvider/GeoIp.php22
-rw-r--r--plugins/UserCountry/ProfileSummary/LocationSummary.php80
-rw-r--r--plugins/UserCountry/Tasks.php3
-rw-r--r--plugins/UserCountry/UserCountry.php18
-rw-r--r--plugins/UserCountry/Visitor.php115
-rw-r--r--plugins/UserCountry/VisitorDetails.php198
-rw-r--r--plugins/UserCountry/functions.php8
-rw-r--r--plugins/UserCountry/lang/cs.json5
-rw-r--r--plugins/UserCountry/lang/da.json4
-rw-r--r--plugins/UserCountry/lang/de.json16
-rw-r--r--plugins/UserCountry/lang/el.json4
-rw-r--r--plugins/UserCountry/lang/en.json4
-rw-r--r--plugins/UserCountry/lang/es.json4
-rw-r--r--plugins/UserCountry/lang/et.json4
-rw-r--r--plugins/UserCountry/lang/fi.json1
-rw-r--r--plugins/UserCountry/lang/fr.json4
-rw-r--r--plugins/UserCountry/lang/gl.json1
-rw-r--r--plugins/UserCountry/lang/hi.json1
-rw-r--r--plugins/UserCountry/lang/id.json1
-rw-r--r--plugins/UserCountry/lang/it.json4
-rw-r--r--plugins/UserCountry/lang/ja.json12
-rw-r--r--plugins/UserCountry/lang/ko.json4
-rw-r--r--plugins/UserCountry/lang/nl.json4
-rw-r--r--plugins/UserCountry/lang/pl.json63
-rw-r--r--plugins/UserCountry/lang/pt-br.json4
-rw-r--r--plugins/UserCountry/lang/sq.json4
-rw-r--r--plugins/UserCountry/lang/sr.json4
-rw-r--r--plugins/UserCountry/lang/sv.json1
-rw-r--r--plugins/UserCountry/lang/uk.json4
-rw-r--r--plugins/UserCountry/lang/zh-cn.json4
-rw-r--r--plugins/UserCountry/lang/zh-tw.json4
-rw-r--r--plugins/UserCountry/templates/_profileSummary.twig40
-rw-r--r--plugins/UserCountry/tests/System/expected/test_AttributeHistoricalDataWithLocationsTest_testExecute_ShouldReturnLogAfterWorkingWithSomeData__UserCountry.getCity_month.xml14
-rw-r--r--plugins/UserCountry/tests/System/expected/test_AttributeHistoricalDataWithLocationsTest_testExecute_ShouldReturnLogAfterWorkingWithSomeData__UserCountry.getCountry_month.xml51
-rw-r--r--plugins/UserCountry/tests/System/expected/test_AttributeHistoricalDataWithLocationsTest_testExecute_ShouldReturnLogAfterWorkingWithSomeData__UserCountry.getRegion_month.xml14
-rw-r--r--plugins/UserCountry/tests/System/expected/test___UserCountry.getCountryCodeMapping.xml3
-rw-r--r--plugins/UserCountryMap/javascripts/vendor/kartograph.min.js4
-rw-r--r--plugins/UserCountryMap/javascripts/visitor-map.js8
-rw-r--r--plugins/UserCountryMap/lang/pl.json6
-rw-r--r--plugins/UserCountryMap/svg/AS.svg3
-rw-r--r--plugins/UserCountryMap/svg/BGD.svg3
-rw-r--r--plugins/UserCountryMap/svg/CHN.svg3
-rw-r--r--plugins/UserCountryMap/svg/IND.svg3
-rw-r--r--plugins/UserCountryMap/svg/MMR.svg3
-rw-r--r--plugins/UserCountryMap/svg/NPL.svg3
-rw-r--r--plugins/UserCountryMap/svg/PAK.svg3
-rw-r--r--plugins/UserCountryMap/svg/TIB.svg1
-rw-r--r--plugins/UserCountryMap/svg/world.svg2
-rw-r--r--plugins/UserId/lang/id.json4
-rw-r--r--plugins/UserId/lang/pl.json4
-rw-r--r--plugins/UserLanguage/UserLanguage.php18
-rw-r--r--plugins/UserLanguage/VisitorDetails.php (renamed from plugins/UserLanguage/Visitor.php)17
-rw-r--r--plugins/UserLanguage/tests/System/expected/test___UserLanguage.getLanguageCode_day.xml2
-rw-r--r--plugins/UsersManager/angularjs/give-user-view-access/give-user-view-access.controller.js10
-rw-r--r--plugins/UsersManager/angularjs/manage-user-access/manage-user-access.controller.js15
-rw-r--r--plugins/UsersManager/lang/cs.json1
-rw-r--r--plugins/UsersManager/lang/de.json4
-rw-r--r--plugins/UsersManager/lang/el.json1
-rw-r--r--plugins/UsersManager/lang/en.json1
-rw-r--r--plugins/UsersManager/lang/fr.json1
-rw-r--r--plugins/UsersManager/lang/id.json3
-rw-r--r--plugins/UsersManager/lang/ja.json2
-rw-r--r--plugins/UsersManager/lang/pl.json44
-rw-r--r--plugins/UsersManager/lang/ru.json2
-rw-r--r--plugins/UsersManager/lang/zh-cn.json4
-rw-r--r--plugins/UsersManager/lang/zh-tw.json1
-rw-r--r--plugins/UsersManager/templates/index.twig6
-rw-r--r--plugins/VisitFrequency/lang/pl.json13
-rw-r--r--plugins/VisitFrequency/lang/zh-cn.json4
-rw-r--r--plugins/VisitTime/VisitTime.php16
-rw-r--r--plugins/VisitTime/VisitorDetails.php20
-rw-r--r--plugins/VisitTime/functions.php11
-rw-r--r--plugins/VisitTime/lang/pl.json9
m---------plugins/VisitorGenerator0
-rw-r--r--plugins/VisitorInterest/VisitorDetails.php19
-rw-r--r--plugins/VisitorInterest/VisitorInterest.php17
-rw-r--r--plugins/VisitorInterest/lang/pl.json15
-rw-r--r--plugins/VisitsSummary/lang/id.json9
-rw-r--r--plugins/VisitsSummary/lang/nb.json1
-rw-r--r--plugins/VisitsSummary/lang/pl.json20
-rw-r--r--plugins/VisitsSummary/lang/sv.json16
-rw-r--r--plugins/VisitsSummary/lang/zh-cn.json6
-rw-r--r--plugins/WebsiteMeasurable/lang/id.json6
-rw-r--r--plugins/WebsiteMeasurable/lang/pl.json7
-rw-r--r--plugins/WebsiteMeasurable/lang/zh-cn.json7
-rw-r--r--plugins/Widgetize/lang/pl.json4
-rw-r--r--tests/PHPUnit/Fixtures/ManyVisitsWithGeoIP.php14
-rw-r--r--tests/PHPUnit/Fixtures/OneVisitorTwoVisits.php8
-rw-r--r--tests/PHPUnit/Fixtures/SomeVisitsCustomVariablesCampaignsNotHeuristics.php4
-rw-r--r--tests/PHPUnit/Fixtures/ThreeVisitsWithCustomEvents.php2
-rw-r--r--tests/PHPUnit/Framework/TestRequest/Response.php11
-rw-r--r--tests/PHPUnit/Integration/ArchiveTest.php28
-rw-r--r--tests/PHPUnit/Integration/CronArchiveTest.php2
-rw-r--r--tests/PHPUnit/Integration/Http/AdditionalHeaders.php7
-rw-r--r--tests/PHPUnit/Integration/HttpTest.php29
-rw-r--r--tests/PHPUnit/Integration/Period/FactoryTest.php128
-rw-r--r--tests/PHPUnit/Integration/ReleaseCheckListTest.php1
-rw-r--r--tests/PHPUnit/System/AutoSuggestAPITest.php6
-rw-r--r--tests/PHPUnit/System/BackwardsCompatibility1XTest.php4
-rw-r--r--tests/PHPUnit/System/CliMultiTest.php2
-rwxr-xr-xtests/PHPUnit/System/CsvExportTest.php2
-rw-r--r--tests/PHPUnit/System/DuplicateActionsTest.php2
-rwxr-xr-xtests/PHPUnit/System/OneVisitorTwoVisitsTest.php10
-rw-r--r--tests/PHPUnit/System/RawLogDaoTest.php62
-rwxr-xr-xtests/PHPUnit/System/TrackerResponseTest.php10
-rw-r--r--tests/PHPUnit/System/expected/test_ArchiveCronTest_archive_php_cron_output.txt2
-rw-r--r--tests/PHPUnit/System/expected/test_ArchiveCronTest_preArchivedSegment_noOptions__Live.getLastVisitsDetails_day.xml305
-rw-r--r--tests/PHPUnit/System/expected/test_ArchiveCronTest_preArchivedSegment_noOptions__Live.getLastVisitsDetails_year.xml532
-rw-r--r--tests/PHPUnit/System/expected/test_AutoSuggestAPITest__Live.getLastVisitsDetails_range.xml1779
-rw-r--r--tests/PHPUnit/System/expected/test_AutoSuggestAPITest_browserCode__API.getSuggestedValuesForSegment.xml7
-rw-r--r--tests/PHPUnit/System/expected/test_AutoSuggestAPITest_browserVersion__API.getSuggestedValuesForSegment.xml8
-rw-r--r--tests/PHPUnit/System/expected/test_AutoSuggestAPITest_countryCode__API.getSuggestedValuesForSegment.xml2
-rw-r--r--tests/PHPUnit/System/expected/test_AutoSuggestAPITest_deviceBrand__API.getSuggestedValuesForSegment.xml2
-rw-r--r--tests/PHPUnit/System/expected/test_AutoSuggestAPITest_deviceBrand__VisitsSummary.get_range.xml14
-rw-r--r--tests/PHPUnit/System/expected/test_AutoSuggestAPITest_deviceType__VisitsSummary.get_range.xml14
-rw-r--r--tests/PHPUnit/System/expected/test_AutoSuggestAPITest_operatingSystemCode__API.getSuggestedValuesForSegment.xml1
-rw-r--r--tests/PHPUnit/System/expected/test_AutoSuggestAPITest_operatingSystemCode__VisitsSummary.get_range.xml14
-rw-r--r--tests/PHPUnit/System/expected/test_AutoSuggestAPITest_operatingSystemVersion__API.getSuggestedValuesForSegment.xml7
-rw-r--r--tests/PHPUnit/System/expected/test_AutoSuggestAPITest_regionCode__API.getSuggestedValuesForSegment.xml2
-rw-r--r--tests/PHPUnit/System/expected/test_CustomEvents__Live.getLastVisitsDetails_day.xml790
-rw-r--r--tests/PHPUnit/System/expected/test_CustomEvents__Live.getLastVisitsDetails_month.xml790
-rw-r--r--tests/PHPUnit/System/expected/test_ImportLogs__CorePluginsAdmin.getSystemSettings.xml4
-rw-r--r--tests/PHPUnit/System/expected/test_ImportLogs__DevicesDetection.getBrand_month.xml2
-rw-r--r--tests/PHPUnit/System/expected/test_ImportLogs__DevicesDetection.getBrowserFamilies_month.xml2
-rw-r--r--tests/PHPUnit/System/expected/test_ImportLogs__DevicesDetection.getBrowserVersions_month.xml2
-rw-r--r--tests/PHPUnit/System/expected/test_ImportLogs__DevicesDetection.getBrowsers_month.xml2
-rw-r--r--tests/PHPUnit/System/expected/test_ImportLogs__Live.getLastVisitsDetails_range.xml2272
-rw-r--r--tests/PHPUnit/System/expected/test_ImportLogs__Resolution.getConfiguration_month.xml2
-rw-r--r--tests/PHPUnit/System/expected/test_ImportLogs__VisitTime.getVisitInformationPerLocalTime_month.xml48
-rw-r--r--tests/PHPUnit/System/expected/test_ImportLogs__VisitTime.getVisitInformationPerServerTime_month.xml48
-rw-r--r--tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Live.getLastVisitsDetails_range.xml777
-rw-r--r--tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_offsetAndLimit_1__Live.getLastVisitsDetails_month.xml162
-rw-r--r--tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_offsetAndLimit_2__Live.getLastVisitsDetails_month.xml147
-rw-r--r--tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_sortByIdVisit__Live.getLastVisitsDetails_month.xml342
-rw-r--r--tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_sortDesc__Live.getLastVisitsDetails_month.xml342
-rw-r--r--tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest__Live.getLastVisitsDetails_month.xml504
-rw-r--r--tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest__UserCountry.getCity_month.xml14
-rw-r--r--tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest__UserCountry.getCountry_month.xml56
-rw-r--r--tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest__UserCountry.getRegion_month.xml14
-rw-r--r--tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_sortByProcessedMetric_constantRowsCountShouldKeepEmptyRows__API.getProcessedReport_day.xml48
-rw-r--r--tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__CorePluginsAdmin.getSystemSettings.xml10
-rw-r--r--tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__DevicesDetection.getBrand_day.xml2
-rw-r--r--tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__DevicesDetection.getModel_day.xml8
-rw-r--r--tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__DevicesDetection.getType_day.xml35
-rw-r--r--tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__UserCountry.getCountry_day.xml3
-rw-r--r--tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__VisitTime.getVisitInformationPerLocalTime_day.xml48
-rw-r--r--tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__VisitTime.getVisitInformationPerServerTime_day.xml48
-rw-r--r--tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__subtable__API.getProcessedReport_week.xml10
-rw-r--r--tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_csv__API.get_month.csvbin1922 -> 1938 bytes
-rw-r--r--tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_showColumnsWithProcessedMetrics___API.getProcessedReport_day.xml50
-rw-r--r--tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_showColumns_onlyOne__API.getProcessedReport_day.xml2
-rw-r--r--tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__DevicesDetection.getBrand_day.xml2
-rw-r--r--tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__Live.getLastVisitsDetails_day.xml107
-rw-r--r--tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__VisitTime.getVisitInformationPerLocalTime_day.xml48
-rw-r--r--tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__VisitTime.getVisitInformationPerServerTime_day.xml48
-rw-r--r--tests/PHPUnit/System/expected/test_OneVisitor_NoKeywordSpecified__Live.getLastVisitsDetails_day.xml72
-rw-r--r--tests/PHPUnit/System/expected/test_OneVisitor_SeveralDays_ImportedInRandomOrderTest_shouldShowOneVisit_InEachOfThreeDays__Live.getLastVisitsDetails_month.xml99
-rw-r--r--tests/PHPUnit/System/expected/test_TimezonesTest__Live.getLastVisitsDetails_day.xml33
-rw-r--r--tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_csv__ScheduledReports.generateReport_month.original.csv96
-rw-r--r--tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_html_tables_and_graph__ScheduledReports.generateReport_month.original.html104
-rw-r--r--tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_html_tables_only__ScheduledReports.generateReport_month.original.html96
-rw-r--r--tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_pdf_tables_only__ScheduledReports.generateReport_month.original.pdfbin552307 -> 552251 bytes
-rw-r--r--tests/PHPUnit/System/expected/test_UserId_VisitorId__Live.getLastVisitsDetails_month.xml46
-rw-r--r--tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getSegmentsMetadata.xml2
-rw-r--r--tests/PHPUnit/System/expected/test_csvExport__Live.getLastVisitsDetails_day.csvbin8460 -> 9084 bytes
-rwxr-xr-xtests/PHPUnit/System/expected/test_ecommerceOrderWithItems_LiveEcommerceStatusOrdered__Live.getLastVisitsDetails_day.xml99
-rwxr-xr-xtests/PHPUnit/System/expected/test_ecommerceOrderWithItems_Metadata_VisitTime.getVisitInformationPerServerTime__API.getProcessedReport_day.xml48
-rwxr-xr-xtests/PHPUnit/System/expected/test_ecommerceOrderWithItems__Live.getLastVisitsDetails_day.xml255
-rw-r--r--tests/PHPUnit/System/expected/test_ecommerceOrderWithItems__VisitTime.getVisitInformationPerLocalTime_day.xml48
-rwxr-xr-xtests/PHPUnit/System/expected/test_ecommerceOrderWithItems__VisitTime.getVisitInformationPerServerTime_day.xml48
-rw-r--r--tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_csv__ScheduledReports.generateReport_week.original.csv96
-rw-r--r--tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_tables_and_graph__ScheduledReports.generateReport_week.original.html110
-rw-r--r--tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_tables_only__ScheduledReports.generateReport_week.original.html96
-rw-r--r--tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_pdf_tables_only__ScheduledReports.generateReport_week.original.pdfbin568847 -> 569020 bytes
-rw-r--r--tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__CorePluginsAdmin.getSystemSettings.xml4
-rw-r--r--tests/PHPUnit/System/expected/test_noVisit__CorePluginsAdmin.getSystemSettings.xml4
-rw-r--r--tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange__VisitTime.getVisitInformationPerServerTime_range.xml48
-rw-r--r--tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getLastVisits.xml125
-rw-r--r--tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getLastVisitsDetails_range.xml125
-rw-r--r--tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getVisitorProfile.xml179
-rw-r--r--tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getLastVisits.xml125
-rw-r--r--tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getLastVisitsDetails_range.xml125
-rw-r--r--tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getVisitorProfile.xml179
-rw-r--r--tests/PHPUnit/System/expected/test_trackGoals_allowMultipleConversionsPerVisit__VisitTime.getVisitInformationPerServerTime_day.xml48
-rw-r--r--tests/PHPUnit/Unit/PeriodTest.php37
-rw-r--r--tests/UI/expected-screenshots/ActionsDataTable_segmented_visitor_log.png4
-rw-r--r--tests/UI/expected-screenshots/DashboardManager_create_new.png4
-rw-r--r--tests/UI/expected-screenshots/DashboardManager_removed.png4
-rw-r--r--tests/UI/expected-screenshots/Dashboard_loaded_token_auth.png4
-rw-r--r--tests/UI/expected-screenshots/Dashboard_removed.png4
-rw-r--r--tests/UI/expected-screenshots/Dashboard_reset.png4
-rw-r--r--tests/UI/expected-screenshots/Dashboard_rowevolution.png3
-rw-r--r--tests/UI/expected-screenshots/EmptySite_emptySiteDashboard_ignored.png4
-rw-r--r--tests/UI/expected-screenshots/EvolutionGraph_bounce_rate.png4
-rw-r--r--tests/UI/expected-screenshots/EvolutionGraph_initial.png4
-rw-r--r--tests/UI/expected-screenshots/Morpheus_load.png4
-rw-r--r--tests/UI/expected-screenshots/MultiSitesTest_all_websites.png4
-rw-r--r--tests/UI/expected-screenshots/MultiSitesTest_all_websites_page_1.png4
-rw-r--r--tests/UI/expected-screenshots/Overlay_page_new_links.png4
-rw-r--r--tests/UI/expected-screenshots/RowEvolution_multirow_evolution.png4
-rw-r--r--tests/UI/expected-screenshots/RowEvolution_multirow_evolution_other_metric.png4
-rw-r--r--tests/UI/expected-screenshots/Theme_home.png4
-rw-r--r--tests/UI/expected-screenshots/UIIntegrationTest_admin_diagnostics_configfile.png4
-rw-r--r--tests/UI/expected-screenshots/UIIntegrationTest_admin_settings_general.png4
-rw-r--r--tests/UI/expected-screenshots/UIIntegrationTest_admin_settings_mobilemessaging_provider.png4
-rw-r--r--tests/UI/expected-screenshots/UIIntegrationTest_dashboard1.png4
-rw-r--r--tests/UI/expected-screenshots/UIIntegrationTest_dashboard2.png4
-rw-r--r--tests/UI/expected-screenshots/UIIntegrationTest_dashboard3.png4
-rw-r--r--tests/UI/expected-screenshots/UIIntegrationTest_dashboard4.png4
-rw-r--r--tests/UI/expected-screenshots/UIIntegrationTest_dashboard5_mobile.png4
-rw-r--r--tests/UI/expected-screenshots/UIIntegrationTest_ecommerce_log.png4
-rw-r--r--tests/UI/expected-screenshots/UIIntegrationTest_ecommerce_log_segmented.png3
-rw-r--r--tests/UI/expected-screenshots/UIIntegrationTest_fatal_error_safemode.png4
-rw-r--r--tests/UI/expected-screenshots/UIIntegrationTest_invalid_idsite.png3
-rw-r--r--tests/UI/expected-screenshots/UIIntegrationTest_invalid_idsite_superuser.png3
-rw-r--r--tests/UI/expected-screenshots/UIIntegrationTest_period_select_date_range_click.png4
-rw-r--r--tests/UI/expected-screenshots/UIIntegrationTest_referrers_campaigns.png4
-rw-r--r--tests/UI/expected-screenshots/UIIntegrationTest_referrers_search_engines_keywords.png4
-rw-r--r--tests/UI/expected-screenshots/UIIntegrationTest_segmented_visitorlog.png4
-rw-r--r--tests/UI/expected-screenshots/UIIntegrationTest_visitor_profile_popup.png4
-rw-r--r--tests/UI/expected-screenshots/UIIntegrationTest_visitors_devices.png4
-rw-r--r--tests/UI/expected-screenshots/UIIntegrationTest_visitors_locations_provider.png4
-rw-r--r--tests/UI/expected-screenshots/UIIntegrationTest_visitors_realtime_map.png4
-rw-r--r--tests/UI/expected-screenshots/UIIntegrationTest_visitors_software.png4
-rw-r--r--tests/UI/expected-screenshots/UIIntegrationTest_visitors_times.png4
-rw-r--r--tests/UI/expected-screenshots/UIIntegrationTest_visitors_with_site_search_visitorlog.png4
-rw-r--r--tests/UI/expected-screenshots/UIIntegrationTest_widgetize_allwebsites.png4
-rw-r--r--tests/UI/expected-screenshots/UIIntegrationTest_widgetize_ecommercelog.png4
-rw-r--r--tests/UI/expected-screenshots/UIIntegrationTest_widgetize_visitor_log.png4
-rw-r--r--tests/UI/expected-screenshots/UsersManager_adminuser_give_view_access_form_opened.png4
-rw-r--r--tests/UI/expected-screenshots/UsersManager_adminuser_give_view_access_no_user_entered.png4
-rw-r--r--tests/UI/expected-screenshots/UsersManager_adminuser_give_view_access_user_already_has_access.png4
-rw-r--r--tests/UI/expected-screenshots/UsersManager_adminuser_give_view_access_user_not_found.png4
-rw-r--r--tests/UI/expected-screenshots/UsersManager_adminuser_give_view_access_via_email.png4
-rw-r--r--tests/UI/expected-screenshots/UsersManager_adminuser_give_view_access_via_login.png4
-rw-r--r--tests/UI/expected-screenshots/UsersManager_loaded_as_admin.png4
-rw-r--r--tests/UI/expected-screenshots/ViewDataTableTest_11_flattened.png4
-rw-r--r--tests/UI/expected-screenshots/ViewDataTableTest_12_aggregate_shown.png4
-rw-r--r--tests/UI/expected-screenshots/ViewDataTableTest_related_report_click.png4
-rw-r--r--tests/UI/expected-screenshots/ViewDataTableTest_subtables_loaded.png4
-rw-r--r--tests/UI/specs/ActionsDataTable_spec.js1
-rw-r--r--tests/UI/specs/Dashboard_spec.js9
-rw-r--r--tests/UI/specs/Installation_spec.js9
-rw-r--r--tests/UI/specs/Overlay_spec.js15
-rw-r--r--tests/UI/specs/UIIntegration_spec.js33
-rw-r--r--tests/angularjs/bootstrap.js2
-rw-r--r--tests/javascript/index.php24
-rw-r--r--tests/javascript/piwiktest.js4
-rw-r--r--tests/lib/screenshot-testing/support/app.js2
-rw-r--r--tests/lib/screenshot-testing/support/page-renderer.js4
-rw-r--r--tests/resources/screenshot-override/override.css4
m---------tests/travis0
857 files changed, 35165 insertions, 15700 deletions
diff --git a/.gitattributes b/.gitattributes
index 3468683b50..179559cf08 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -55,3 +55,4 @@ tests/ export-ignore
.phpstorm.meta.php export-ignore
.scrutinizer.yml export-ignore
.travis.yml export-ignore
+PULL_REQUEST_TEMPLATE export-ignore
diff --git a/.travis.yml b/.travis.yml
index 08672b09a2..050511a795 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -79,6 +79,8 @@ matrix:
- php: 5.5
env: TEST_SUITE=AngularJSTests MYSQL_ADAPTER=PDO_MYSQL SKIP_COMPOSER_INSTALL=1
+dist: precise
+
sudo: required
script: $PIWIK_ROOT_DIR/tests/travis/travis.sh
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 3d53f51515..71156289ac 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,7 +2,24 @@
This is the Developer Changelog for Piwik platform developers. All changes in our HTTP API's, Plugins, Themes, SDKs, etc. are listed below.
-The Product Changelog at **[piwik.org/changelog](http://piwik.org/changelog)** lets you see more details about any Piwik release, such as the list of new guides and FAQs, security fixes, and links to all closed issues.
+The Product Changelog at **[piwik.org/changelog](https://piwik.org/changelog)** lets you see more details about any Piwik release, such as the list of new guides and FAQs, security fixes, and links to all closed issues.
+
+## Piwik 3.1.0
+
+### Breaking Changes
+* The event `Live.getAllVisitorDetails` has been deprecated and will be removed in Piwik 4. Use a `VisitorDetails` class instead (see Live plugin).
+
+### New Features
+* New method `setSecureCookie` that sets the cookie's secure parameter
+
+### New APIs
+* The events `ScheduledTasks.shouldExecuteTask`, `ScheduledTasks.execute`, `ScheduledTasks.execute.end` have been added to customize the behaviour of scheduled tasks.
+* A new event `CustomPiwikJs.shouldAddTrackerFile` has been added to let plugins customize which tracker files should be included in piwik.js JavaScript tracker
+* A new event `Login.authenticate.successful` has been added, which is triggered when a user successful signs in
+* A new API class `Piwik\Plugins\CustomPiwikJs\TrackerUpdater` has been added to update the piwik.js JavaScript tracker
+
+### New commands
+* The commands `plugin:activate` and `plugin:deactivate` can now activate and deactivate multiple plugins at once
## Piwik 3.0.4
@@ -30,7 +47,7 @@ The Product Changelog at **[piwik.org/changelog](http://piwik.org/changelog)** l
## Piwik 3.0.2
### New Features
-* A new SMS provider for sms reports has been added: [ASPSMS.com](http://www.aspsms.com/en/?REF=227830)
+* A new SMS provider for sms reports has been added: [ASPSMS.com](https://www.aspsms.com/en/?REF=227830)
### New APIs
* The JavaScript Tracker now supports CrossDomain tracking. The following tracker methods were added for this: `enableCrossDomainLinking`, `disableCrossDomainLinking`, `isCrossDomainLinkingEnabled`
@@ -48,7 +65,7 @@ The Product Changelog at **[piwik.org/changelog](http://piwik.org/changelog)** l
## Piwik 3.0.1
### New APIs
-* Live API responses now return a new field ‘generationTimeMilliseconds’ (the generation time for this page, in milliseconds) which is internally used to process the Average generation time in the [Visitor Profile](http://piwik.org/docs/user-profile/)
+* Live API responses now return a new field ‘generationTimeMilliseconds’ (the generation time for this page, in milliseconds) which is internally used to process the Average generation time in the [Visitor Profile](https://piwik.org/docs/user-profile/)
* Added new event `MultiSites.filterRowsForTotalsCalculation` to filter which sites will be included in the All Websites Dashboard totals calculation.
* The method `Piwik\Plugin\Archiver::shouldRunEvenWhenNoVisits()` has been added. By overwriting this method and returning true, a plugin archiver can force the archiving to run even when there was no visit for the website/date/period/segment combination (by default, archivers are skipped when there is no visit).
@@ -56,7 +73,7 @@ The Product Changelog at **[piwik.org/changelog](http://piwik.org/changelog)** l
### New guide
-Read more about migrating a plugin from Piwik 2.X to Piwik 3 in [our Migration guide](http://developer.piwik.org/guides/migrate-piwik-2-to-3).
+Read more about migrating a plugin from Piwik 2.X to Piwik 3 in [our Migration guide](https://developer.piwik.org/guides/migrate-piwik-2-to-3).
### Breaking Changes
* When using the Piwik JavaScript Tracking via `_paq.push`, it is now required to configure the tracker (eg calling `setSiteId` and `setTrackerUrl`) before the `piwik.js` JavaScript tracker is loaded to ensure the tracker works correctly.
@@ -88,17 +105,17 @@ If the tracker is not initialised correctly, the browser console will display th
* It is no longer possible to define an introduction text for settings.
* If requesting multipe periods for one report, the keys that define the range are no longer translated. For example before 3.0 an API response may contain: `<result date="From 2010-02-01 to 2010-02-07">` which is now `<result date="2010-02-01,2010-02-07">`.
* The following deprecated events have been removed as mentioned.
- * `Tracker.existingVisitInformation` Use [dimensions](http://developer.piwik.org/guides/dimensions) instead of using `Tracker` events.
+ * `Tracker.existingVisitInformation` Use [dimensions](https://developer.piwik.org/guides/dimensions) instead of using `Tracker` events.
* `Tracker.newVisitorInformation`
* `Tracker.recordAction`
* `Tracker.recordEcommerceGoal`
* `Tracker.recordStandardGoals`
- * `API.getSegmentDimensionMetadata` Define segments in [Dimension](http://developer.piwik.org/guides/dimensions) instead
- * `Menu.Admin.addItems` Create a [Menu](http://developer.piwik.org/guides/menus) instead of using `Menu` events
+ * `API.getSegmentDimensionMetadata` Define segments in [Dimension](https://developer.piwik.org/guides/dimensions) instead
+ * `Menu.Admin.addItems` Create a [Menu](https://developer.piwik.org/guides/menus) instead of using `Menu` events
* `Menu.Reporting.addItems`
* `Menu.Top.addItems`
- * `ViewDataTable.addViewDataTable` Create a [Visualization](http://developer.piwik.org/guides/visualizing-report-data) instead
- * `ViewDataTable.getDefaultType` Specify the default type in a [Report](http://developer.piwik.org/guides/custom-reports) instead
+ * `ViewDataTable.addViewDataTable` Create a [Visualization](https://developer.piwik.org/guides/visualizing-report-data) instead
+ * `ViewDataTable.getDefaultType` Specify the default type in a [Report](https://developer.piwik.org/guides/custom-reports) instead
* `Login.authenticate` Create a custom SessionInitializer instead of using `Login` events
* `Login.initSession.end`
* `Login.authenticate.successful`
@@ -629,5 +646,5 @@ We are using `@since` annotations in case we are introducing new API's to make i
### Internal change
-->
-Find the general Piwik Changelogs for each release at [piwik.org/changelog](http://piwik.org/changelog/)
+Find the general Piwik Changelogs for each release at [piwik.org/changelog](https://piwik.org/changelog/)
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000000..0ac7021205
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,675 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ {one line to give the program's name and a brief idea of what it does.}
+ Copyright (C) {year} {name of author}
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+ Piwik Copyright (C) 2007-2017 Piwik.org
+
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/README.md b/README.md
index 40f7fbe51f..2bdaa3f773 100644
--- a/README.md
+++ b/README.md
@@ -53,7 +53,13 @@ See http://piwik.org/docs/requirements/
See http://piwik.org/docs/installation/
-If you do not have a server, consider our Piwik Hosting partner: https://www.innocraft.cloud/
+## Free trial
+
+If you do not have a server or don't want to host yourself you can use our Piwik Cloud partner service (30 day free trial): https://www.innocraft.cloud/
+
+## Online Demo
+
+Check out the online demo for Piwik at [demo.piwik.org](https://demo.piwik.org/)
## Changelog
diff --git a/bower.json b/bower.json
index bf88bc001c..15444c6a7f 100644
--- a/bower.json
+++ b/bower.json
@@ -15,12 +15,12 @@
"dependencies": {
"jquery-ui": "1.10.4",
"jquery": "~2.2.0",
- "angular": "~1.4.0",
- "angular-sanitize": "~1.4.0",
- "angular-animate": "~1.4.0",
- "angular-cookies": "~1.4.0",
- "angular-mocks": "~1.4.0",
- "ngDialog": "~0.2.0",
+ "angular": "~1.6.0",
+ "angular-sanitize": "~1.6.0",
+ "angular-animate": "~1.6.0",
+ "angular-cookies": "~1.6.0",
+ "angular-mocks": "~1.6.0",
+ "ngDialog": "~1.3.0",
"html5shiv": "~3.7.0",
"mousetrap": "~1.4.0",
"sprintf": "~1.0.0",
@@ -37,5 +37,8 @@
"**/.*",
"node_modules",
"tests"
- ]
+ ],
+ "resolutions": {
+ "angular": "~1.6.0"
+ }
}
diff --git a/composer.lock b/composer.lock
index d17e00a4f0..1001cb8a26 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,6 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
"This file is @generated automatically"
],
- "hash": "28cc5fd9b5400da4b1e2d40969c2511d",
"content-hash": "39dbe45e9a9ada455d5b38be7e6f5fad",
"packages": [
{
@@ -67,22 +66,25 @@
"validation",
"versioning"
],
- "time": "2016-02-25 22:23:39"
+ "time": "2016-02-25T22:23:39+00:00"
},
{
"name": "container-interop/container-interop",
- "version": "1.1.0",
+ "version": "1.2.0",
"source": {
"type": "git",
"url": "https://github.com/container-interop/container-interop.git",
- "reference": "fc08354828f8fd3245f77a66b9e23a6bca48297e"
+ "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/container-interop/container-interop/zipball/fc08354828f8fd3245f77a66b9e23a6bca48297e",
- "reference": "fc08354828f8fd3245f77a66b9e23a6bca48297e",
+ "url": "https://api.github.com/repos/container-interop/container-interop/zipball/79cbf1341c22ec75643d841642dd5d6acd83bdb8",
+ "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8",
"shasum": ""
},
+ "require": {
+ "psr/container": "^1.0"
+ },
"type": "library",
"autoload": {
"psr-4": {
@@ -94,7 +96,8 @@
"MIT"
],
"description": "Promoting the interoperability of container objects (DIC, SL, etc.)",
- "time": "2014-12-30 15:22:37"
+ "homepage": "https://github.com/container-interop/container-interop",
+ "time": "2017-02-14T19:40:03+00:00"
},
{
"name": "doctrine/cache",
@@ -164,7 +167,7 @@
"cache",
"caching"
],
- "time": "2016-10-29 11:16:17"
+ "time": "2016-10-29T11:16:17+00:00"
},
{
"name": "leafo/lessphp",
@@ -205,20 +208,20 @@
],
"description": "lessphp is a compiler for LESS written in PHP.",
"homepage": "http://leafo.net/lessphp/",
- "time": "2014-11-24 18:39:20"
+ "time": "2014-11-24T18:39:20+00:00"
},
{
"name": "monolog/monolog",
- "version": "1.22.0",
+ "version": "1.22.1",
"source": {
"type": "git",
"url": "https://github.com/Seldaek/monolog.git",
- "reference": "bad29cb8d18ab0315e6c477751418a82c850d558"
+ "reference": "1e044bc4b34e91743943479f1be7a1d5eb93add0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Seldaek/monolog/zipball/bad29cb8d18ab0315e6c477751418a82c850d558",
- "reference": "bad29cb8d18ab0315e6c477751418a82c850d558",
+ "url": "https://api.github.com/repos/Seldaek/monolog/zipball/1e044bc4b34e91743943479f1be7a1d5eb93add0",
+ "reference": "1e044bc4b34e91743943479f1be7a1d5eb93add0",
"shasum": ""
},
"require": {
@@ -283,7 +286,7 @@
"logging",
"psr-3"
],
- "time": "2016-11-26 00:15:39"
+ "time": "2017-03-13T07:08:03+00:00"
},
{
"name": "mustangostang/spyc",
@@ -330,7 +333,7 @@
"yaml",
"yml"
],
- "time": "2013-02-21 10:52:01"
+ "time": "2013-02-21T10:52:01+00:00"
},
{
"name": "pear/archive_tar",
@@ -396,7 +399,7 @@
"archive",
"tar"
],
- "time": "2016-02-25 10:30:39"
+ "time": "2016-02-25T10:30:39+00:00"
},
{
"name": "pear/console_getopt",
@@ -443,24 +446,24 @@
}
],
"description": "More info available on: http://pear.php.net/package/Console_Getopt",
- "time": "2015-07-20 20:28:12"
+ "time": "2015-07-20T20:28:12+00:00"
},
{
"name": "pear/pear-core-minimal",
- "version": "v1.10.1",
+ "version": "v1.10.3",
"source": {
"type": "git",
"url": "https://github.com/pear/pear-core-minimal.git",
- "reference": "cae0f1ce0cb5bddb611b0a652d322905a65a5896"
+ "reference": "070f0b600b2caca2501e2c9b7e553016e4b0d115"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/pear/pear-core-minimal/zipball/cae0f1ce0cb5bddb611b0a652d322905a65a5896",
- "reference": "cae0f1ce0cb5bddb611b0a652d322905a65a5896",
+ "url": "https://api.github.com/repos/pear/pear-core-minimal/zipball/070f0b600b2caca2501e2c9b7e553016e4b0d115",
+ "reference": "070f0b600b2caca2501e2c9b7e553016e4b0d115",
"shasum": ""
},
"require": {
- "pear/console_getopt": "~1.3",
+ "pear/console_getopt": "~1.4",
"pear/pear_exception": "~1.0"
},
"replace": {
@@ -487,7 +490,7 @@
}
],
"description": "Minimal set of PEAR core files to be used as composer dependency",
- "time": "2015-10-17 11:41:19"
+ "time": "2017-02-28T16:46:11+00:00"
},
{
"name": "pear/pear_exception",
@@ -542,7 +545,7 @@
"keywords": [
"exception"
],
- "time": "2015-02-10 20:07:52"
+ "time": "2015-02-10T20:07:52+00:00"
},
{
"name": "php-di/invoker",
@@ -585,30 +588,32 @@
"invoke",
"invoker"
],
- "time": "2016-07-14 13:09:58"
+ "time": "2016-07-14T13:09:58+00:00"
},
{
"name": "php-di/php-di",
- "version": "5.4.0",
+ "version": "5.4.3",
"source": {
"type": "git",
"url": "https://github.com/PHP-DI/PHP-DI.git",
- "reference": "e348393488fa909e4bc0707ba5c9c44cd602a1cb"
+ "reference": "8ecded470bb0255c93f2996f78bb3b644c06599a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/PHP-DI/PHP-DI/zipball/e348393488fa909e4bc0707ba5c9c44cd602a1cb",
- "reference": "e348393488fa909e4bc0707ba5c9c44cd602a1cb",
+ "url": "https://api.github.com/repos/PHP-DI/PHP-DI/zipball/8ecded470bb0255c93f2996f78bb3b644c06599a",
+ "reference": "8ecded470bb0255c93f2996f78bb3b644c06599a",
"shasum": ""
},
"require": {
- "container-interop/container-interop": "~1.0",
+ "container-interop/container-interop": "~1.2",
"php": ">=5.5.0",
"php-di/invoker": "^1.3.2",
- "php-di/phpdoc-reader": "^2.0.1"
+ "php-di/phpdoc-reader": "^2.0.1",
+ "psr/container": "~1.0"
},
"provide": {
- "container-interop/container-interop-implementation": "^1.0"
+ "container-interop/container-interop-implementation": "^1.0",
+ "psr/container-implementation": "^1.0"
},
"replace": {
"mnapoli/php-di": "*"
@@ -645,7 +650,7 @@
"dependency injection",
"di"
],
- "time": "2016-08-23 20:18:00"
+ "time": "2017-04-11T19:42:20+00:00"
},
{
"name": "php-di/phpdoc-reader",
@@ -682,7 +687,7 @@
"phpdoc",
"reflection"
],
- "time": "2015-11-29 10:34:25"
+ "time": "2015-11-29T10:34:25+00:00"
},
{
"name": "piwik/cache",
@@ -729,20 +734,20 @@
"file",
"redis"
],
- "time": "2016-11-15 02:33:06"
+ "time": "2016-11-15T02:33:06+00:00"
},
{
"name": "piwik/decompress",
- "version": "1.2.1",
+ "version": "1.2.2",
"source": {
"type": "git",
"url": "https://github.com/piwik/component-decompress.git",
- "reference": "73203590e061fe1c143454dc9c76c077871c4fa1"
+ "reference": "15088059c38378939db8a3490b67b569797a6a3a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/piwik/component-decompress/zipball/73203590e061fe1c143454dc9c76c077871c4fa1",
- "reference": "73203590e061fe1c143454dc9c76c077871c4fa1",
+ "url": "https://api.github.com/repos/piwik/component-decompress/zipball/15088059c38378939db8a3490b67b569797a6a3a",
+ "reference": "15088059c38378939db8a3490b67b569797a6a3a",
"shasum": ""
},
"require": {
@@ -765,20 +770,20 @@
"license": [
"LGPL-3.0"
],
- "time": "2017-02-18 10:07:00"
+ "time": "2017-07-14T10:45:10+00:00"
},
{
"name": "piwik/device-detector",
- "version": "3.7.6",
+ "version": "3.8.1",
"source": {
"type": "git",
"url": "https://github.com/piwik/device-detector.git",
- "reference": "f5b6ffc44e4092b1964d32f21142dc721f5a0899"
+ "reference": "91e17ecbd7ad6fe3085d5508aacdf858281087e5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/piwik/device-detector/zipball/f5b6ffc44e4092b1964d32f21142dc721f5a0899",
- "reference": "f5b6ffc44e4092b1964d32f21142dc721f5a0899",
+ "url": "https://api.github.com/repos/piwik/device-detector/zipball/91e17ecbd7ad6fe3085d5508aacdf858281087e5",
+ "reference": "91e17ecbd7ad6fe3085d5508aacdf858281087e5",
"shasum": ""
},
"require": {
@@ -816,7 +821,7 @@
"parser",
"useragent"
],
- "time": "2017-02-27 17:14:38"
+ "time": "2017-07-25T21:21:36+00:00"
},
{
"name": "piwik/ini",
@@ -849,7 +854,7 @@
"license": [
"LGPL-3.0"
],
- "time": "2016-01-14 21:13:33"
+ "time": "2016-01-14T21:13:33+00:00"
},
{
"name": "piwik/network",
@@ -881,7 +886,7 @@
"license": [
"LGPL-3.0"
],
- "time": "2016-07-18 04:10:33"
+ "time": "2016-07-18T04:10:33+00:00"
},
{
"name": "piwik/piwik-php-tracker",
@@ -921,20 +926,20 @@
"piwik",
"tracker"
],
- "time": "2017-02-18 09:41:30"
+ "time": "2017-02-18T09:41:30+00:00"
},
{
"name": "piwik/referrer-spam-blacklist",
- "version": "1.0.12",
+ "version": "1.0.13",
"source": {
"type": "git",
"url": "https://github.com/piwik/referrer-spam-blacklist.git",
- "reference": "0f2c50d94def37f66e389e04f809741cbac2d7cd"
+ "reference": "ad7c2296d5bac58c5bea771f355dc49dd4fc8141"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/piwik/referrer-spam-blacklist/zipball/0f2c50d94def37f66e389e04f809741cbac2d7cd",
- "reference": "0f2c50d94def37f66e389e04f809741cbac2d7cd",
+ "url": "https://api.github.com/repos/piwik/referrer-spam-blacklist/zipball/ad7c2296d5bac58c5bea771f355dc49dd4fc8141",
+ "reference": "ad7c2296d5bac58c5bea771f355dc49dd4fc8141",
"shasum": ""
},
"type": "library",
@@ -943,20 +948,20 @@
"Public Domain"
],
"description": "Community-contributed list of referrer spammers",
- "time": "2017-02-27 16:54:54"
+ "time": "2017-03-28T04:31:29+00:00"
},
{
"name": "piwik/searchengine-and-social-list",
- "version": "1.3.6",
+ "version": "1.3.9",
"source": {
"type": "git",
"url": "https://github.com/piwik/searchengine-and-social-list.git",
- "reference": "2d9efdabd2133ffdef0b607999b49ba59491cc43"
+ "reference": "1c3b662bdf6aabaf2cec10229c826a698ac3c226"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/piwik/searchengine-and-social-list/zipball/2d9efdabd2133ffdef0b607999b49ba59491cc43",
- "reference": "2d9efdabd2133ffdef0b607999b49ba59491cc43",
+ "url": "https://api.github.com/repos/piwik/searchengine-and-social-list/zipball/1c3b662bdf6aabaf2cec10229c826a698ac3c226",
+ "reference": "1c3b662bdf6aabaf2cec10229c826a698ac3c226",
"shasum": ""
},
"type": "library",
@@ -965,7 +970,56 @@
"Public Domain"
],
"description": "Search engine and social network definitions used by Piwik",
- "time": "2017-02-28 16:33:02"
+ "time": "2017-08-30T19:29:07+00:00"
+ },
+ {
+ "name": "psr/container",
+ "version": "1.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/container.git",
+ "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
+ "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Container\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Common Container Interface (PHP FIG PSR-11)",
+ "homepage": "https://github.com/php-fig/container",
+ "keywords": [
+ "PSR-11",
+ "container",
+ "container-interface",
+ "container-interop",
+ "psr"
+ ],
+ "time": "2017-02-14T16:28:37+00:00"
},
{
"name": "psr/log",
@@ -1012,7 +1066,7 @@
"psr",
"psr-3"
],
- "time": "2016-10-10 12:19:37"
+ "time": "2016-10-10T12:19:37+00:00"
},
{
"name": "symfony/console",
@@ -1070,7 +1124,7 @@
],
"description": "Symfony Console Component",
"homepage": "https://symfony.com",
- "time": "2015-07-26 09:08:40"
+ "time": "2015-07-26T09:08:40+00:00"
},
{
"name": "symfony/event-dispatcher",
@@ -1129,7 +1183,7 @@
],
"description": "Symfony EventDispatcher Component",
"homepage": "https://symfony.com",
- "time": "2015-05-02 15:18:45"
+ "time": "2015-05-02T15:18:45+00:00"
},
{
"name": "symfony/monolog-bridge",
@@ -1188,20 +1242,20 @@
],
"description": "Symfony Monolog Bridge",
"homepage": "https://symfony.com",
- "time": "2015-06-25 11:21:15"
+ "time": "2015-06-25T11:21:15+00:00"
},
{
"name": "szymach/c-pchart",
- "version": "2.0.4",
+ "version": "2.0.6",
"source": {
"type": "git",
"url": "https://github.com/szymach/c-pchart.git",
- "reference": "ed1a876c907c0610eae72592e563e1792e2d455a"
+ "reference": "ca5c3d9403d398eb7033857185d393d39a99fb8f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/szymach/c-pchart/zipball/ed1a876c907c0610eae72592e563e1792e2d455a",
- "reference": "ed1a876c907c0610eae72592e563e1792e2d455a",
+ "url": "https://api.github.com/repos/szymach/c-pchart/zipball/ca5c3d9403d398eb7033857185d393d39a99fb8f",
+ "reference": "ca5c3d9403d398eb7033857185d393d39a99fb8f",
"shasum": ""
},
"require": {
@@ -1255,7 +1309,7 @@
"pchart",
"statistics"
],
- "time": "2017-03-08 22:32:31"
+ "time": "2017-06-03T10:42:12+00:00"
},
{
"name": "tecnickcom/tcpdf",
@@ -1318,7 +1372,7 @@
"pdf417",
"qrcode"
],
- "time": "2015-09-12 10:08:34"
+ "time": "2015-09-12T10:08:34+00:00"
},
{
"name": "tedivm/jshrink",
@@ -1359,38 +1413,42 @@
"javascript",
"minifier"
],
- "time": "2014-01-14 22:23:53"
+ "time": "2014-01-14T22:23:53+00:00"
},
{
"name": "twig/twig",
- "version": "v1.30.0",
+ "version": "v1.34.3",
"source": {
"type": "git",
"url": "https://github.com/twigphp/Twig.git",
- "reference": "c6ff71094fde15d12398eaba029434b013dc5e59"
+ "reference": "451c6f4197e113e24c1c85bc3fc8c2d77adeff2e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/twigphp/Twig/zipball/c6ff71094fde15d12398eaba029434b013dc5e59",
- "reference": "c6ff71094fde15d12398eaba029434b013dc5e59",
+ "url": "https://api.github.com/repos/twigphp/Twig/zipball/451c6f4197e113e24c1c85bc3fc8c2d77adeff2e",
+ "reference": "451c6f4197e113e24c1c85bc3fc8c2d77adeff2e",
"shasum": ""
},
"require": {
- "php": ">=5.2.7"
+ "php": ">=5.3.3"
},
"require-dev": {
+ "psr/container": "^1.0",
"symfony/debug": "~2.7",
- "symfony/phpunit-bridge": "~3.2@dev"
+ "symfony/phpunit-bridge": "~3.3@dev"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.30-dev"
+ "dev-master": "1.34-dev"
}
},
"autoload": {
"psr-0": {
"Twig_": "lib/"
+ },
+ "psr-4": {
+ "Twig\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -1420,7 +1478,7 @@
"keywords": [
"templating"
],
- "time": "2016-12-23 11:06:22"
+ "time": "2017-06-07T18:45:17+00:00"
}
],
"packages-dev": [
@@ -1489,7 +1547,7 @@
"s3",
"sdk"
],
- "time": "2014-10-16 21:37:55"
+ "time": "2014-10-16T21:37:55+00:00"
},
{
"name": "doctrine/instantiator",
@@ -1543,7 +1601,7 @@
"constructor",
"instantiate"
],
- "time": "2015-06-14 21:17:01"
+ "time": "2015-06-14T21:17:01+00:00"
},
{
"name": "facebook/xhprof",
@@ -1668,7 +1726,7 @@
"web service"
],
"abandoned": "guzzlehttp/guzzle",
- "time": "2015-03-18 18:23:50"
+ "time": "2015-03-18T18:23:50+00:00"
},
{
"name": "phpdocumentor/reflection-common",
@@ -1722,7 +1780,7 @@
"reflection",
"static analysis"
],
- "time": "2015-12-27 11:43:31"
+ "time": "2015-12-27T11:43:31+00:00"
},
{
"name": "phpdocumentor/reflection-docblock",
@@ -1767,7 +1825,7 @@
}
],
"description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
- "time": "2016-09-30 07:12:33"
+ "time": "2016-09-30T07:12:33+00:00"
},
{
"name": "phpdocumentor/type-resolver",
@@ -1814,7 +1872,7 @@
"email": "me@mikevanriel.com"
}
],
- "time": "2016-11-25 06:54:22"
+ "time": "2016-11-25T06:54:22+00:00"
},
{
"name": "phpseclib/phpseclib",
@@ -1912,31 +1970,31 @@
"x.509",
"x509"
],
- "time": "2015-01-28 21:50:33"
+ "time": "2015-01-28T21:50:33+00:00"
},
{
"name": "phpspec/prophecy",
- "version": "v1.6.2",
+ "version": "v1.7.0",
"source": {
"type": "git",
"url": "https://github.com/phpspec/prophecy.git",
- "reference": "6c52c2722f8460122f96f86346600e1077ce22cb"
+ "reference": "93d39f1f7f9326d746203c7c056f300f7f126073"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpspec/prophecy/zipball/6c52c2722f8460122f96f86346600e1077ce22cb",
- "reference": "6c52c2722f8460122f96f86346600e1077ce22cb",
+ "url": "https://api.github.com/repos/phpspec/prophecy/zipball/93d39f1f7f9326d746203c7c056f300f7f126073",
+ "reference": "93d39f1f7f9326d746203c7c056f300f7f126073",
"shasum": ""
},
"require": {
"doctrine/instantiator": "^1.0.2",
"php": "^5.3|^7.0",
"phpdocumentor/reflection-docblock": "^2.0|^3.0.2",
- "sebastian/comparator": "^1.1",
- "sebastian/recursion-context": "^1.0|^2.0"
+ "sebastian/comparator": "^1.1|^2.0",
+ "sebastian/recursion-context": "^1.0|^2.0|^3.0"
},
"require-dev": {
- "phpspec/phpspec": "^2.0",
+ "phpspec/phpspec": "^2.5|^3.2",
"phpunit/phpunit": "^4.8 || ^5.6.5"
},
"type": "library",
@@ -1975,7 +2033,7 @@
"spy",
"stub"
],
- "time": "2016-11-21 14:58:47"
+ "time": "2017-03-02T20:05:34+00:00"
},
{
"name": "phpunit/php-code-coverage",
@@ -2037,7 +2095,7 @@
"testing",
"xunit"
],
- "time": "2015-10-06 15:47:00"
+ "time": "2015-10-06T15:47:00+00:00"
},
{
"name": "phpunit/php-file-iterator",
@@ -2084,7 +2142,7 @@
"filesystem",
"iterator"
],
- "time": "2016-10-03 07:40:28"
+ "time": "2016-10-03T07:40:28+00:00"
},
{
"name": "phpunit/php-text-template",
@@ -2125,29 +2183,34 @@
"keywords": [
"template"
],
- "time": "2015-06-21 13:50:34"
+ "time": "2015-06-21T13:50:34+00:00"
},
{
"name": "phpunit/php-timer",
- "version": "1.0.8",
+ "version": "1.0.9",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-timer.git",
- "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260"
+ "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/38e9124049cf1a164f1e4537caf19c99bf1eb260",
- "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f",
+ "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f",
"shasum": ""
},
"require": {
- "php": ">=5.3.3"
+ "php": "^5.3.3 || ^7.0"
},
"require-dev": {
- "phpunit/phpunit": "~4|~5"
+ "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
},
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0-dev"
+ }
+ },
"autoload": {
"classmap": [
"src/"
@@ -2169,20 +2232,20 @@
"keywords": [
"timer"
],
- "time": "2016-05-12 18:03:57"
+ "time": "2017-02-26T11:10:40+00:00"
},
{
"name": "phpunit/php-token-stream",
- "version": "1.4.9",
+ "version": "1.4.11",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-token-stream.git",
- "reference": "3b402f65a4cc90abf6e1104e388b896ce209631b"
+ "reference": "e03f8f67534427a787e21a385a67ec3ca6978ea7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/3b402f65a4cc90abf6e1104e388b896ce209631b",
- "reference": "3b402f65a4cc90abf6e1104e388b896ce209631b",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/e03f8f67534427a787e21a385a67ec3ca6978ea7",
+ "reference": "e03f8f67534427a787e21a385a67ec3ca6978ea7",
"shasum": ""
},
"require": {
@@ -2218,20 +2281,20 @@
"keywords": [
"tokenizer"
],
- "time": "2016-11-15 14:06:22"
+ "time": "2017-02-27T10:12:30+00:00"
},
{
"name": "phpunit/phpunit",
- "version": "4.8.31",
+ "version": "4.8.35",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
- "reference": "98b2b39a520766bec663ff5b7ff1b729db9dbfe3"
+ "reference": "791b1a67c25af50e230f841ee7a9c6eba507dc87"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/98b2b39a520766bec663ff5b7ff1b729db9dbfe3",
- "reference": "98b2b39a520766bec663ff5b7ff1b729db9dbfe3",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/791b1a67c25af50e230f841ee7a9c6eba507dc87",
+ "reference": "791b1a67c25af50e230f841ee7a9c6eba507dc87",
"shasum": ""
},
"require": {
@@ -2290,7 +2353,7 @@
"testing",
"xunit"
],
- "time": "2016-12-09 02:45:31"
+ "time": "2017-02-06T05:18:07+00:00"
},
{
"name": "phpunit/phpunit-mock-objects",
@@ -2346,20 +2409,20 @@
"mock",
"xunit"
],
- "time": "2015-10-02 06:51:40"
+ "time": "2015-10-02T06:51:40+00:00"
},
{
"name": "sebastian/comparator",
- "version": "1.2.2",
+ "version": "1.2.4",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/comparator.git",
- "reference": "6a1ed12e8b2409076ab22e3897126211ff8b1f7f"
+ "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/6a1ed12e8b2409076ab22e3897126211ff8b1f7f",
- "reference": "6a1ed12e8b2409076ab22e3897126211ff8b1f7f",
+ "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2b7424b55f5047b47ac6e5ccb20b2aea4011d9be",
+ "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be",
"shasum": ""
},
"require": {
@@ -2410,27 +2473,27 @@
"compare",
"equality"
],
- "time": "2016-11-19 09:18:40"
+ "time": "2017-01-29T09:50:25+00:00"
},
{
"name": "sebastian/diff",
- "version": "1.4.1",
+ "version": "1.4.3",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/diff.git",
- "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e"
+ "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/13edfd8706462032c2f52b4b862974dd46b71c9e",
- "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e",
+ "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7f066a26a962dbe58ddea9f72a4e82874a3975a4",
+ "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4",
"shasum": ""
},
"require": {
- "php": ">=5.3.3"
+ "php": "^5.3.3 || ^7.0"
},
"require-dev": {
- "phpunit/phpunit": "~4.8"
+ "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
},
"type": "library",
"extra": {
@@ -2462,7 +2525,7 @@
"keywords": [
"diff"
],
- "time": "2015-12-08 07:14:41"
+ "time": "2017-05-22T07:24:03+00:00"
},
{
"name": "sebastian/environment",
@@ -2512,7 +2575,7 @@
"environment",
"hhvm"
],
- "time": "2016-08-18 05:49:44"
+ "time": "2016-08-18T05:49:44+00:00"
},
{
"name": "sebastian/exporter",
@@ -2579,7 +2642,7 @@
"export",
"exporter"
],
- "time": "2016-06-17 09:04:28"
+ "time": "2016-06-17T09:04:28+00:00"
},
{
"name": "sebastian/global-state",
@@ -2630,20 +2693,20 @@
"keywords": [
"global state"
],
- "time": "2015-10-12 03:26:01"
+ "time": "2015-10-12T03:26:01+00:00"
},
{
"name": "sebastian/recursion-context",
- "version": "1.0.2",
+ "version": "1.0.5",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/recursion-context.git",
- "reference": "913401df809e99e4f47b27cdd781f4a258d58791"
+ "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/913401df809e99e4f47b27cdd781f4a258d58791",
- "reference": "913401df809e99e4f47b27cdd781f4a258d58791",
+ "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/b19cc3298482a335a95f3016d2f8a6950f0fbcd7",
+ "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7",
"shasum": ""
},
"require": {
@@ -2683,7 +2746,7 @@
],
"description": "Provides functionality to recursively process PHP variables",
"homepage": "http://www.github.com/sebastianbergmann/recursion-context",
- "time": "2015-11-11 19:50:13"
+ "time": "2016-10-03T07:41:43+00:00"
},
{
"name": "sebastian/version",
@@ -2718,7 +2781,7 @@
],
"description": "Library that helps with managing the version number of Git-hosted PHP projects",
"homepage": "https://github.com/sebastianbergmann/version",
- "time": "2015-06-21 13:59:46"
+ "time": "2015-06-21T13:59:46+00:00"
},
{
"name": "symfony/var-dumper",
@@ -2778,7 +2841,7 @@
"debug",
"dump"
],
- "time": "2015-07-01 10:03:42"
+ "time": "2015-07-01T10:03:42+00:00"
},
{
"name": "symfony/yaml",
@@ -2828,7 +2891,7 @@
],
"description": "Symfony Yaml Component",
"homepage": "https://symfony.com",
- "time": "2015-07-26 08:59:42"
+ "time": "2015-07-26T08:59:42+00:00"
},
{
"name": "webmozart/assert",
@@ -2878,7 +2941,7 @@
"check",
"validate"
],
- "time": "2016-11-23 20:04:58"
+ "time": "2016-11-23T20:04:58+00:00"
}
],
"aliases": [],
diff --git a/config/global.ini.php b/config/global.ini.php
index d12f73c1c0..4ea60cdde4 100644
--- a/config/global.ini.php
+++ b/config/global.ini.php
@@ -276,6 +276,20 @@ default_period = day
; This setting is only used if it hasn't been overriden via the UI yet, or if enable_general_settings_admin=0
time_before_today_archive_considered_outdated = 150
+; Time in seconds after which an archive will be computed again. This setting is used only for week's statistics.
+; If set to "-1" (default), it will fall back to the UI setting under "General settings" unless enable_general_settings_admin=0
+; is set. In this case it will default to "time_before_today_archive_considered_outdated";
+time_before_week_archive_considered_outdated = -1
+
+; Same as config setting "time_before_week_archive_considered_outdated" but it is only applied to monthly archives
+time_before_month_archive_considered_outdated = -1
+
+; Same as config setting "time_before_week_archive_considered_outdated" but it is only applied to yearly archives
+time_before_year_archive_considered_outdated = -1
+
+; Same as config setting "time_before_week_archive_considered_outdated" but it is only applied to range archives
+time_before_range_archive_considered_outdated = -1
+
; This setting is overriden in the UI, under "General Settings".
; The default value is to allow browsers to trigger the Piwik archiving process.
; This setting is only used if it hasn't been overridden via the UI yet, or if enable_general_settings_admin=0
@@ -544,6 +558,9 @@ enable_plugins_admin = 1
; an attacker who gained Super User access could execute custom PHP code in a Piwik plugin.
enable_plugin_upload = 0
+; By setting this option to 0 (e.g. in common.config.ini.php) the installer will be disabled.
+enable_installer = 1
+
; By setting this option to 0, you can prevent Super User from editing the Geolocation settings.
enable_geolocation_admin = 1
@@ -557,6 +574,10 @@ enable_delete_old_data_settings_admin = 1
; - "Email server settings"
enable_general_settings_admin = 1
+; Disabling this will disable features like automatic updates for Piwik,
+; its plugins and components like the GeoIP database, referrer spam blacklist or search engines and social network definitions
+enable_internet_features = 1
+
; By setting this option to 0, it will disable the "Auto update" feature
enable_auto_update = 1
@@ -564,6 +585,8 @@ enable_auto_update = 1
; If set to 0 it also disables the "sent plugin update emails" feature in general and the related setting in the UI.
enable_update_communication = 1
+
+
; Comma separated list of plugin names for which console commands should be loaded (applies when Piwik is not installed yet)
always_load_commands_from_plugin=
diff --git a/config/global.php b/config/global.php
index cd10f72370..710c35eb66 100644
--- a/config/global.php
+++ b/config/global.php
@@ -88,5 +88,4 @@ return array(
'Piwik\Tracker\Settings' => DI\object()
->constructorParameter('isSameFingerprintsAcrossWebsites', DI\get('ini.Tracker.enable_fingerprinting_across_websites')),
-
);
diff --git a/core/Archive.php b/core/Archive.php
index 4fc7e219bc..3a598eae88 100644
--- a/core/Archive.php
+++ b/core/Archive.php
@@ -8,12 +8,13 @@
*/
namespace Piwik;
+use Piwik\Archive\ArchiveQuery;
+use Piwik\Archive\ArchiveQueryFactory;
use Piwik\Archive\Parameters;
use Piwik\ArchiveProcessor\Rules;
use Piwik\Archive\ArchiveInvalidator;
use Piwik\Container\StaticContainer;
use Piwik\DataAccess\ArchiveSelector;
-use Piwik\Period\Factory as PeriodFactory;
/**
* The **Archive** class is used to query cached analytics statistics
@@ -106,7 +107,7 @@ use Piwik\Period\Factory as PeriodFactory;
*
* @api
*/
-class Archive
+class Archive implements ArchiveQuery
{
const REQUEST_ALL_WEBSITES_FLAG = 'all';
const ARCHIVE_ALL_PLUGINS_FLAG = 'all';
@@ -176,7 +177,7 @@ class Archive
* @param bool $forceIndexedBySite Whether to force index the result of a query by site ID.
* @param bool $forceIndexedByDate Whether to force index the result of a query by period.
*/
- protected function __construct(Parameters $params, $forceIndexedBySite = false,
+ public function __construct(Parameters $params, $forceIndexedBySite = false,
$forceIndexedByDate = false)
{
$this->params = $params;
@@ -203,30 +204,12 @@ class Archive
* or date range (ie, 'YYYY-MM-DD,YYYY-MM-DD').
* @param bool|false|string $segment Segment definition or false if no segment should be used. {@link Piwik\Segment}
* @param bool|false|string $_restrictSitesToLogin Used only when running as a scheduled task.
- * @return static
+ * @return ArchiveQuery
*/
public static function build($idSites, $period, $strDate, $segment = false, $_restrictSitesToLogin = false)
{
- $websiteIds = Site::getIdSitesFromIdSitesString($idSites, $_restrictSitesToLogin);
-
- $timezone = false;
- if (count($websiteIds) == 1) {
- $timezone = Site::getTimezoneFor($websiteIds[0]);
- }
-
- if (Period::isMultiplePeriod($strDate, $period)) {
- $oPeriod = PeriodFactory::build($period, $strDate, $timezone);
- $allPeriods = $oPeriod->getSubperiods();
- } else {
- $oPeriod = PeriodFactory::makePeriodFromQueryParams($timezone, $period, $strDate);
- $allPeriods = array($oPeriod);
- }
-
- $segment = new Segment($segment, $websiteIds);
- $idSiteIsAll = $idSites == self::REQUEST_ALL_WEBSITES_FLAG;
- $isMultipleDate = Period::isMultiplePeriod($strDate, $period);
-
- return static::factory($segment, $allPeriods, $websiteIds, $idSiteIsAll, $isMultipleDate);
+ return StaticContainer::get(ArchiveQueryFactory::class)->build($idSites, $period, $strDate, $segment,
+ $_restrictSitesToLogin);
}
/**
@@ -249,24 +232,13 @@ class Archive
* the result of querying functions will be indexed by period,
* regardless of whether `count($periods) == 1`.
*
- * @return Archive
+ * @return ArchiveQuery
*/
- public static function factory(Segment $segment, array $periods, array $idSites, $idSiteIsAll = false, $isMultipleDate = false)
+ public static function factory(Segment $segment, array $periods, array $idSites, $idSiteIsAll = false,
+ $isMultipleDate = false)
{
- $forceIndexedBySite = false;
- $forceIndexedByDate = false;
-
- if ($idSiteIsAll || count($idSites) > 1) {
- $forceIndexedBySite = true;
- }
-
- if (count($periods) > 1 || $isMultipleDate) {
- $forceIndexedByDate = true;
- }
-
- $params = new Parameters($idSites, $periods, $segment);
-
- return new static($params, $forceIndexedBySite, $forceIndexedByDate);
+ return StaticContainer::get(ArchiveQueryFactory::class)->factory($segment, $periods, $idSites, $idSiteIsAll,
+ $isMultipleDate);
}
/**
@@ -838,7 +810,7 @@ class Archive
* @throws \Exception If a plugin cannot be found or if the plugin for the report isn't
* activated.
*/
- private static function getPluginForReport($report)
+ public static function getPluginForReport($report)
{
// Core metrics are always processed in Core, for the requested date/period/segment
if (in_array($report, Metrics::getVisitsMetricNames())) {
diff --git a/core/Archive/ArchiveQuery.php b/core/Archive/ArchiveQuery.php
new file mode 100644
index 0000000000..acd6bbf29e
--- /dev/null
+++ b/core/Archive/ArchiveQuery.php
@@ -0,0 +1,49 @@
+<?php
+/**
+ * Piwik - free/libre analytics platform
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+namespace Piwik\Archive;
+
+
+use Piwik\DataTable;
+
+interface ArchiveQuery
+{
+ /**
+ * @param string|string[] $names
+ * @return false|number|array
+ */
+ public function getNumeric($names);
+
+ /**
+ * @param string|string[] $names
+ * @return DataTable|DataTable\Map
+ */
+ public function getDataTableFromNumeric($names);
+
+ /**
+ * @param $names
+ * @return mixed
+ */
+ public function getDataTableFromNumericAndMergeChildren($names);
+
+ /**
+ * @param string $name
+ * @param int|string|null $idSubtable
+ * @return DataTable|DataTable\Map
+ */
+ public function getDataTable($name, $idSubtable = null);
+
+ /**
+ * @param string $name
+ * @param int|string|null $idSubtable
+ * @param int|null $depth
+ * @param bool $addMetadataSubtableId
+ * @return DataTable|DataTable\Map
+ */
+ public function getDataTableExpanded($name, $idSubtable = null, $depth = null, $addMetadataSubtableId = true);
+} \ No newline at end of file
diff --git a/core/Archive/ArchiveQueryFactory.php b/core/Archive/ArchiveQueryFactory.php
new file mode 100644
index 0000000000..ddf3db6b87
--- /dev/null
+++ b/core/Archive/ArchiveQueryFactory.php
@@ -0,0 +1,127 @@
+<?php
+/**
+ * Piwik - free/libre analytics platform
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+
+namespace Piwik\Archive;
+
+use Piwik\Archive;
+use Piwik\Period;
+use Piwik\Segment;
+use Piwik\Site;
+use Piwik\Period\Factory as PeriodFactory;
+
+class ArchiveQueryFactory
+{
+ public function __construct()
+ {
+ // empty
+ }
+
+ /**
+ * @see \Piwik\Archive::build()
+ */
+ public function build($idSites, $strPeriod, $strDate, $strSegment = false, $_restrictSitesToLogin = false)
+ {
+ list($websiteIds, $timezone, $idSiteIsAll) = $this->getSiteInfoFromQueryParam($idSites, $_restrictSitesToLogin);
+ list($allPeriods, $isMultipleDate) = $this->getPeriodInfoFromQueryParam($strDate, $strPeriod, $timezone);
+ $segment = $this->getSegmentFromQueryParam($strSegment, $websiteIds);
+
+ return $this->factory($segment, $allPeriods, $websiteIds, $idSiteIsAll, $isMultipleDate);
+ }
+
+ /**
+ * @see \Piwik\Archive::factory()
+ */
+ public function factory(Segment $segment, array $periods, array $idSites, $idSiteIsAll = false, $isMultipleDate = false)
+ {
+ $forceIndexedBySite = false;
+ $forceIndexedByDate = false;
+
+ if ($idSiteIsAll || count($idSites) > 1) {
+ $forceIndexedBySite = true;
+ }
+
+ if (count($periods) > 1 || $isMultipleDate) {
+ $forceIndexedByDate = true;
+ }
+
+ $params = new Parameters($idSites, $periods, $segment);
+
+ return $this->newInstance($params, $forceIndexedBySite, $forceIndexedByDate);
+ }
+
+ public function newInstance(Parameters $params, $forceIndexedBySite, $forceIndexedByDate)
+ {
+ return new Archive($params, $forceIndexedBySite, $forceIndexedByDate);
+ }
+
+ /**
+ * Parses the site ID string provided in the 'idSite' query parameter to a list of
+ * website IDs.
+ *
+ * @param string $idSites the value of the 'idSite' query parameter
+ * @param bool $_restrictSitesToLogin
+ * @return array an array containing three elements:
+ * - an array of website IDs
+ * - string timezone to use (or false to use no timezone) when creating periods.
+ * - true if the request was for all websites (this forces the archive result to
+ * be indexed by site, even if there is only one site in Piwik)
+ */
+ protected function getSiteInfoFromQueryParam($idSites, $_restrictSitesToLogin)
+ {
+ $websiteIds = Site::getIdSitesFromIdSitesString($idSites, $_restrictSitesToLogin);
+
+ $timezone = false;
+ if (count($websiteIds) == 1) {
+ $timezone = Site::getTimezoneFor($websiteIds[0]);
+ }
+
+ $idSiteIsAll = $idSites == Archive::REQUEST_ALL_WEBSITES_FLAG;
+
+ return [$websiteIds, $timezone, $idSiteIsAll];
+ }
+
+ /**
+ * Parses the date & period query parameters into a list of periods.
+ *
+ * @param string $strDate the value of the 'date' query parameter
+ * @param string $strPeriod the value of the 'period' query parameter
+ * @param string $timezone the timezone to use when constructing periods.
+ * @return array an array containing two elements:
+ * - the list of period objects to query archive data for
+ * - true if the request was for multiple periods (ie, two months, two weeks, etc.), false if otherwise.
+ * (this forces the archive result to be indexed by period, even if the list of periods
+ * has only one period).
+ */
+ protected function getPeriodInfoFromQueryParam($strDate, $strPeriod, $timezone)
+ {
+ if (Period::isMultiplePeriod($strDate, $strPeriod)) {
+ $oPeriod = PeriodFactory::build($strPeriod, $strDate, $timezone);
+ $allPeriods = $oPeriod->getSubperiods();
+ } else {
+ $oPeriod = PeriodFactory::makePeriodFromQueryParams($timezone, $strPeriod, $strDate);
+ $allPeriods = array($oPeriod);
+ }
+
+ $isMultipleDate = Period::isMultiplePeriod($strDate, $strPeriod);
+
+ return [$allPeriods, $isMultipleDate];
+ }
+
+ /**
+ * Parses the segment query parameter into a Segment object.
+ *
+ * @param string $strSegment the value of the 'segment' query parameter.
+ * @param int[] $websiteIds the list of sites being queried.
+ * @return Segment
+ */
+ protected function getSegmentFromQueryParam($strSegment, $websiteIds)
+ {
+ return new Segment($strSegment, $websiteIds);
+ }
+} \ No newline at end of file
diff --git a/core/ArchiveProcessor/Parameters.php b/core/ArchiveProcessor/Parameters.php
index 4edd1f4b58..752557a868 100644
--- a/core/ArchiveProcessor/Parameters.php
+++ b/core/ArchiveProcessor/Parameters.php
@@ -154,12 +154,36 @@ class Parameters
}
/**
+ * Returns the start day of the period in the site's timezone (includes the time of day).
+ *
+ * @return Date
+ */
+ public function getDateTimeStart()
+ {
+ return $this->getPeriod()->getDateTimeStart()->setTimezone($this->getSite()->getTimezone());
+ }
+
+ /**
+ * Returns the end day of the period in the site's timezone (includes the time of day).
+ *
+ * @return Date
+ */
+ public function getDateTimeEnd()
+ {
+ return $this->getPeriod()->getDateTimeEnd()->setTimezone($this->getSite()->getTimezone());
+ }
+
+ /**
* @return bool
*/
public function isSingleSiteDayArchive()
{
$oneSite = $this->isSingleSite();
- $oneDay = $this->getPeriod()->getLabel() == 'day';
+
+ $period = $this->getPeriod();
+ $secondsInPeriod = $period->getDateEnd()->getTimestampUTC() - $period->getDateStart()->getTimestampUTC();
+ $oneDay = $secondsInPeriod <= Date::NUM_SECONDS_IN_DAY;
+
return $oneDay && $oneSite;
}
diff --git a/core/ArchiveProcessor/PluginsArchiver.php b/core/ArchiveProcessor/PluginsArchiver.php
index f251551a6d..4c963e17bc 100644
--- a/core/ArchiveProcessor/PluginsArchiver.php
+++ b/core/ArchiveProcessor/PluginsArchiver.php
@@ -49,11 +49,11 @@ class PluginsArchiver
*/
public static $archivers = array();
- public function __construct(Parameters $params, $isTemporaryArchive)
+ public function __construct(Parameters $params, $isTemporaryArchive, ArchiveWriter $archiveWriter = null)
{
$this->params = $params;
$this->isTemporaryArchive = $isTemporaryArchive;
- $this->archiveWriter = new ArchiveWriter($this->params, $this->isTemporaryArchive);
+ $this->archiveWriter = $archiveWriter ?: new ArchiveWriter($this->params, $this->isTemporaryArchive);
$this->archiveWriter->initNewArchive();
$this->logAggregator = new LogAggregator($params);
diff --git a/core/ArchiveProcessor/Rules.php b/core/ArchiveProcessor/Rules.php
index 4f8391c281..09be79eea2 100644
--- a/core/ArchiveProcessor/Rules.php
+++ b/core/ArchiveProcessor/Rules.php
@@ -115,8 +115,10 @@ class Rules
public static function getMinTimeProcessedForTemporaryArchive(
Date $dateStart, \Piwik\Period $period, Segment $segment, Site $site)
{
+ $todayArchiveTimeToLive = self::getPeriodArchiveTimeToLiveDefault($period->getLabel());
+
$now = time();
- $minimumArchiveTime = $now - Rules::getTodayArchiveTimeToLive();
+ $minimumArchiveTime = $now - $todayArchiveTimeToLive;
$idSites = array($site->getId());
$isArchivingDisabled = Rules::isArchivingDisabledFor($idSites, $segment, $period->getLabel());
@@ -158,6 +160,23 @@ class Rules
return self::getTodayArchiveTimeToLiveDefault();
}
+ public static function getPeriodArchiveTimeToLiveDefault($periodLabel)
+ {
+ if (empty($periodLabel) || strtolower($periodLabel) === 'day') {
+ return self::getTodayArchiveTimeToLive();
+ }
+
+ $config = Config::getInstance();
+ $general = $config->General;
+
+ $key = sprintf('time_before_%s_archive_considered_outdated', $periodLabel);
+ if (isset($general[$key]) && is_numeric($general[$key]) && $general[$key] > 0) {
+ return $general[$key];
+ }
+
+ return self::getTodayArchiveTimeToLive();
+ }
+
public static function getTodayArchiveTimeToLiveDefault()
{
return Config::getInstance()->General['time_before_today_archive_considered_outdated'];
diff --git a/core/AssetManager/UIAssetCacheBuster.php b/core/AssetManager/UIAssetCacheBuster.php
index fcbd0720a9..15b55943b9 100644
--- a/core/AssetManager/UIAssetCacheBuster.php
+++ b/core/AssetManager/UIAssetCacheBuster.php
@@ -27,20 +27,32 @@ class UIAssetCacheBuster extends Singleton
*/
public function piwikVersionBasedCacheBuster($pluginNames = false)
{
- $masterFile = PIWIK_INCLUDE_PATH . '/.git/refs/heads/master';
- $currentGitHash = file_exists($masterFile) ? @file_get_contents($masterFile) : null;
+ static $cachedCacheBuster = null;
- $pluginNames = !$pluginNames ? Manager::getInstance()->getLoadedPluginsName() : $pluginNames;
- sort($pluginNames);
+ if (empty($cachedCacheBuster) || $pluginNames !== false) {
- $pluginsInfo = '';
- foreach ($pluginNames as $pluginName) {
- $plugin = Manager::getInstance()->getLoadedPlugin($pluginName);
- $pluginsInfo .= $plugin->getPluginName() . $plugin->getVersion() . ',';
+ $masterFile = PIWIK_INCLUDE_PATH . '/.git/refs/heads/master';
+ $currentGitHash = file_exists($masterFile) ? @file_get_contents($masterFile) : null;
+
+ $plugins = !$pluginNames ? Manager::getInstance()->getLoadedPluginsName() : $pluginNames;
+ sort($plugins);
+
+ $pluginsInfo = '';
+ foreach ($plugins as $pluginName) {
+ $plugin = Manager::getInstance()->getLoadedPlugin($pluginName);
+ $pluginsInfo .= $plugin->getPluginName() . $plugin->getVersion() . ',';
+ }
+
+ $cacheBuster = md5($pluginsInfo . PHP_VERSION . Version::VERSION . trim($currentGitHash));
+
+ if ($pluginNames !== false) {
+ return $cacheBuster;
+ }
+
+ $cachedCacheBuster = $cacheBuster;
}
- $cacheBuster = md5($pluginsInfo . PHP_VERSION . Version::VERSION . trim($currentGitHash));
- return $cacheBuster;
+ return $cachedCacheBuster;
}
/**
diff --git a/core/AssetManager/UIAssetFetcher.php b/core/AssetManager/UIAssetFetcher.php
index 6d710e1387..0b8e9b3a55 100644
--- a/core/AssetManager/UIAssetFetcher.php
+++ b/core/AssetManager/UIAssetFetcher.php
@@ -106,7 +106,7 @@ abstract class UIAssetFetcher
private function getBaseDirectory()
{
// served by web server directly, so must be a public path
- return PIWIK_USER_PATH;
+ return PIWIK_DOCUMENT_ROOT;
}
/**
diff --git a/core/AssetManager/UIAssetMerger/StylesheetUIAssetMerger.php b/core/AssetManager/UIAssetMerger/StylesheetUIAssetMerger.php
index 3d5cad72b6..1d4fb4d4d2 100644
--- a/core/AssetManager/UIAssetMerger/StylesheetUIAssetMerger.php
+++ b/core/AssetManager/UIAssetMerger/StylesheetUIAssetMerger.php
@@ -38,7 +38,7 @@ class StylesheetUIAssetMerger extends UIAssetMerger
protected function getMergedAssets()
{
// note: we're using setImportDir on purpose (not addImportDir)
- $this->lessCompiler->setImportDir(PIWIK_USER_PATH);
+ $this->lessCompiler->setImportDir(PIWIK_DOCUMENT_ROOT);
$concatenatedAssets = $this->getConcatenatedAssets();
$this->lessCompiler->setFormatter('classic');
@@ -183,7 +183,7 @@ class StylesheetUIAssetMerger extends UIAssetMerger
$baseDirectory = dirname($uiAsset->getRelativeLocation());
return function ($matches) use ($baseDirectory) {
- $absolutePath = PIWIK_USER_PATH . "/$baseDirectory/" . $matches[2];
+ $absolutePath = PIWIK_DOCUMENT_ROOT . "/$baseDirectory/" . $matches[2];
// Allow to import extension less file
if (strpos($matches[2], '.') === false) {
diff --git a/core/CliMulti/Process.php b/core/CliMulti/Process.php
index db2d5b2cd0..c95c5af40e 100644
--- a/core/CliMulti/Process.php
+++ b/core/CliMulti/Process.php
@@ -245,7 +245,7 @@ class Process
*/
public static function getRunningProcesses()
{
- $ids = explode("\n", trim(`ps ex 2>/dev/null | awk '{print $1}' 2>/dev/null`));
+ $ids = explode("\n", trim(`ps ex 2>/dev/null | awk '! /defunct/ {print $1}' 2>/dev/null`));
$ids = array_map('intval', $ids);
$ids = array_filter($ids, function ($id) {
diff --git a/core/Common.php b/core/Common.php
index 1616e56505..f884d9fe2f 100644
--- a/core/Common.php
+++ b/core/Common.php
@@ -1026,6 +1026,10 @@ class Common
$countryList = $dataProvider->getCountryList();
+ if ($country == 'ti') {
+ $country = 'cn';
+ }
+
return isset($countryList[$country]) ? $countryList[$country] : 'unk';
}
diff --git a/core/Config.php b/core/Config.php
index f9a95feed0..b23c2a810a 100644
--- a/core/Config.php
+++ b/core/Config.php
@@ -157,6 +157,7 @@ class Config
return array(
'action_url_category_delimiter' => $general['action_url_category_delimiter'],
+ 'action_title_category_delimiter' => $general['action_title_category_delimiter'],
'autocomplete_min_sites' => $general['autocomplete_min_sites'],
'datatable_export_range_as_day' => $general['datatable_export_range_as_day'],
'datatable_row_limits' => $this->getDatatableRowLimits(),
diff --git a/core/CronArchive.php b/core/CronArchive.php
index d9ed8c6311..b1489b27dd 100644
--- a/core/CronArchive.php
+++ b/core/CronArchive.php
@@ -1279,9 +1279,19 @@ class CronArchive
}
$this->logger->info("- Reports for today will be processed at most every " . $this->todayArchiveTimeToLive
. " seconds. You can change this value in Piwik UI > Settings > General Settings.");
- $this->logger->info("- Reports for the current week/month/year will be refreshed at most every "
+
+ $this->logger->info("- Reports for the current week/month/year will be requested at most every "
. $this->processPeriodsMaximumEverySeconds . " seconds.");
+ foreach (array('week', 'month', 'year', 'range') as $period) {
+ $ttl = Rules::getPeriodArchiveTimeToLiveDefault($period);
+
+ if (!empty($ttl) && $ttl !== $this->todayArchiveTimeToLive) {
+ $this->logger->info("- Reports for the current $period will be processed at most every " . $ttl
+ . " seconds. You can change this value in config/config.ini.php by editing 'time_before_" . $period . "_archive_considered_outdated' in the '[General]' section.");
+ }
+ }
+
// Try and not request older data we know is already archived
if ($this->lastSuccessRunTimestamp !== false) {
$dateLast = time() - $this->lastSuccessRunTimestamp;
diff --git a/core/DataAccess/ArchiveSelector.php b/core/DataAccess/ArchiveSelector.php
index 7be972bdb8..123b6c51ee 100644
--- a/core/DataAccess/ArchiveSelector.php
+++ b/core/DataAccess/ArchiveSelector.php
@@ -178,8 +178,7 @@ class ArchiveSelector
$bind = array();
if ($firstPeriod instanceof Range) {
- $dateCondition = "period = ? AND date1 = ? AND date2 = ?";
- $bind[] = $firstPeriod->getId();
+ $dateCondition = "date1 = ? AND date2 = ?";
$bind[] = $firstPeriod->getDateStart()->toString('Y-m-d');
$bind[] = $firstPeriod->getDateEnd()->toString('Y-m-d');
} else {
diff --git a/core/DataAccess/LogAggregator.php b/core/DataAccess/LogAggregator.php
index 4651394556..c30132f41e 100644
--- a/core/DataAccess/LogAggregator.php
+++ b/core/DataAccess/LogAggregator.php
@@ -10,10 +10,14 @@ namespace Piwik\DataAccess;
use Piwik\ArchiveProcessor\Parameters;
use Piwik\Common;
+use Piwik\Container\StaticContainer;
use Piwik\DataArray;
+use Piwik\Date;
use Piwik\Db;
use Piwik\Metrics;
+use Piwik\Period;
use Piwik\Tracker\GoalManager;
+use Psr\Log\LoggerInterface;
/**
* Contains methods that calculate metrics by aggregating log data (visits, actions, conversions,
@@ -141,16 +145,23 @@ class LogAggregator
private $queryOriginHint = '';
/**
+ * @var LoggerInterface
+ */
+ private $logger;
+
+
+ /**
* Constructor.
*
* @param \Piwik\ArchiveProcessor\Parameters $params
*/
- public function __construct(Parameters $params)
+ public function __construct(Parameters $params, LoggerInterface $logger = null)
{
- $this->dateStart = $params->getDateStart();
- $this->dateEnd = $params->getDateEnd();
+ $this->dateStart = $params->getDateTimeStart();
+ $this->dateEnd = $params->getDateTimeEnd();
$this->segment = $params->getSegment();
$this->sites = $params->getIdSites();
+ $this->logger = $logger ?: StaticContainer::get('Psr\Log\LoggerInterface');
}
public function setQueryOriginHint($nameOfOrigiin)
@@ -169,6 +180,9 @@ class LogAggregator
$query['sql'] = 'SELECT /* ' . $this->queryOriginHint . ' */' . substr($query['sql'], strlen($select));
}
+ // Uncomment to log on DEBUG level all archiving queries
+ // $this->logger->debug($query['sql']);
+
return $query;
}
@@ -503,7 +517,7 @@ class LogAggregator
*/
protected function getGeneralQueryBindParams()
{
- $bind = array($this->dateStart->getDateStartUTC(), $this->dateEnd->getDateEndUTC());
+ $bind = array($this->dateStart->toString(Date::DATE_TIME_FORMAT), $this->dateEnd->toString(Date::DATE_TIME_FORMAT));
$bind = array_merge($bind, $this->sites);
return $bind;
diff --git a/core/DataAccess/RawLogDao.php b/core/DataAccess/RawLogDao.php
index c933d17f63..27bb33563b 100644
--- a/core/DataAccess/RawLogDao.php
+++ b/core/DataAccess/RawLogDao.php
@@ -12,6 +12,7 @@ use Piwik\Common;
use Piwik\Container\StaticContainer;
use Piwik\Db;
use Piwik\Plugin\Dimension\DimensionMetadataProvider;
+use Piwik\Plugin\LogTablesProvider;
/**
* DAO that queries log tables.
@@ -25,9 +26,15 @@ class RawLogDao
*/
private $dimensionMetadataProvider;
- public function __construct(DimensionMetadataProvider $provider = null)
+ /**
+ * @var LogTablesProvider
+ */
+ private $logTablesProvider;
+
+ public function __construct(DimensionMetadataProvider $provider = null, LogTablesProvider $logTablesProvider = null)
{
$this->dimensionMetadataProvider = $provider ?: StaticContainer::get('Piwik\Plugin\Dimension\DimensionMetadataProvider');
+ $this->logTablesProvider = $logTablesProvider ?: StaticContainer::get('Piwik\Plugin\LogTablesProvider');
}
/**
@@ -226,22 +233,15 @@ class RawLogDao
return Db::query($sql, array_merge(array_values($values), array($idVisit)));
}
- private function getIdFieldForLogTable($logTable)
+ protected function getIdFieldForLogTable($logTable)
{
- switch ($logTable) {
- case 'log_visit':
- return 'idvisit';
- case 'log_link_visit_action':
- return 'idlink_va';
- case 'log_conversion':
- return 'idvisit';
- case 'log_conversion_item':
- return 'idvisit';
- case 'log_action':
- return 'idaction';
- default:
- throw new \InvalidArgumentException("Unknown log table '$logTable'.");
+ $idColumns = $this->getTableIdColumns();
+
+ if (isset($idColumns[$logTable])) {
+ return $idColumns[$logTable];
}
+
+ throw new \InvalidArgumentException("Unknown log table '$logTable'.");
}
// TODO: instead of creating a log query like this, we should re-use segments. to do this, however, there must be a 1-1
@@ -291,11 +291,10 @@ class RawLogDao
return $sql;
}
-
- private function getMaxIdsInLogTables()
+ protected function getMaxIdsInLogTables()
{
- $tables = array('log_conversion', 'log_link_visit_action', 'log_visit', 'log_conversion_item');
$idColumns = $this->getTableIdColumns();
+ $tables = array_keys($idColumns);
$result = array();
foreach ($tables as $table) {
@@ -349,8 +348,17 @@ class RawLogDao
private function lockLogTables()
{
+ $tables = $this->getTableIdColumns();
+ unset($tables['log_action']); // we write lock it
+ $tableNames = array_keys($tables);
+
+ $readLocks = array();
+ foreach ($tableNames as $tableName) {
+ $readLocks[] = Common::prefixTable($tableName);
+ }
+
Db::lockTables(
- $readLocks = Common::prefixTables('log_conversion', 'log_link_visit_action', 'log_visit', 'log_conversion_item'),
+ $readLocks,
$writeLocks = Common::prefixTables('log_action')
);
}
@@ -367,13 +375,18 @@ class RawLogDao
Db::query($deleteSql);
}
- private function getTableIdColumns()
+ protected function getTableIdColumns()
{
- return array(
- 'log_link_visit_action' => 'idlink_va',
- 'log_conversion' => 'idvisit',
- 'log_visit' => 'idvisit',
- 'log_conversion_item' => 'idvisit'
- );
+ $columns = array();
+
+ foreach ($this->logTablesProvider->getAllLogTables() as $logTable) {
+ $idColumn = $logTable->getIdColumn();
+
+ if (!empty($idColumn)) {
+ $columns[$logTable->getName()] = $idColumn;
+ }
+ }
+
+ return $columns;
}
}
diff --git a/core/DataTable/Renderer/Console.php b/core/DataTable/Renderer/Console.php
index bd16e93c4f..7a796b7dae 100644
--- a/core/DataTable/Renderer/Console.php
+++ b/core/DataTable/Renderer/Console.php
@@ -146,6 +146,9 @@ class Console extends Renderer
$output .= $prefix . " <b>$id</b><br />";
if (is_array($metadataIn)) {
foreach ($metadataIn as $name => $value) {
+ if (is_object($value) && !method_exists( $value, '__toString' )) {
+ $value = 'Object [' . get_class($value) . ']';
+ }
$output .= $prefix . $prefix . "$name => $value";
}
}
diff --git a/core/DataTable/Renderer/Html.php b/core/DataTable/Renderer/Html.php
index f27dc51768..cf887b8167 100644
--- a/core/DataTable/Renderer/Html.php
+++ b/core/DataTable/Renderer/Html.php
@@ -117,6 +117,8 @@ class Html extends Renderer
foreach ($row->getMetadata() as $name => $value) {
if (is_string($value)) {
$value = "'$value'";
+ } else if (is_array($value)) {
+ $value = var_export($value, true);
}
$metadata[] = "'$name' => $value";
}
diff --git a/core/Date.php b/core/Date.php
index dd2051a1a0..3415af6f95 100644
--- a/core/Date.php
+++ b/core/Date.php
@@ -178,17 +178,34 @@ class Date
}
/**
+ * @return string
+ * @deprecated
+ */
+ public function getDateStartUTC()
+ {
+ return $this->getStartOfDay()->toString(self::DATE_TIME_FORMAT);
+ }
+
+ /**
* Returns the start of the day of the current timestamp in UTC. For example,
* if the current timestamp is `'2007-07-24 14:04:24'` in UTC, the result will
- * be `'2007-07-24'`.
+ * be `'2007-07-24'` as a Date.
*
- * @return string
+ * @return Date
*/
- public function getDateStartUTC()
+ public function getStartOfDay()
{
$dateStartUTC = gmdate('Y-m-d', $this->timestamp);
- $date = Date::factory($dateStartUTC)->setTimezone($this->timezone);
- return $date->toString(self::DATE_TIME_FORMAT);
+ return Date::factory($dateStartUTC)->setTimezone($this->timezone);
+ }
+
+ /**
+ * @return string
+ * @deprecated
+ */
+ public function getDateEndUTC()
+ {
+ return $this->getEndOfDay()->toString(self::DATE_TIME_FORMAT);
}
/**
@@ -196,13 +213,12 @@ class Date
* if the current timestamp is `'2007-07-24 14:03:24'` in UTC, the result will
* be `'2007-07-24 23:59:59'`.
*
- * @return string
+ * @return Date
*/
- public function getDateEndUTC()
+ public function getEndOfDay()
{
$dateEndUTC = gmdate('Y-m-d 23:59:59', $this->timestamp);
- $date = Date::factory($dateEndUTC)->setTimezone($this->timezone);
- return $date->toString(self::DATE_TIME_FORMAT);
+ return Date::factory($dateEndUTC)->setTimezone($this->timezone);
}
/**
@@ -725,6 +741,14 @@ class Date
return $this->toString('h');
case "h":
return $this->toString('g');
+ case "KK": // 00 .. 11
+ return str_pad($this->toString('g') - 1, 2, '0');
+ case "K": // 0 .. 11
+ return $this->toString('g') - 1;
+ case "kk": // 01 .. 24
+ return str_pad($this->toString('G') + 1, 2, '0');
+ case "k": // 1 .. 24
+ return $this->toString('G') + 1;
// minute
case "mm":
case "m":
@@ -755,7 +779,7 @@ class Date
}
protected static $tokens = array(
- 'G', 'y', 'M', 'L', 'd', 'h', 'H', 'm', 's', 'E', 'c', 'e', 'D', 'F', 'w', 'W', 'a', 'z', 'Z', 'v',
+ 'G', 'y', 'M', 'L', 'd', 'h', 'H', 'k', 'K', 'm', 's', 'E', 'c', 'e', 'D', 'F', 'w', 'W', 'a', 'z', 'Z', 'v',
);
/**
diff --git a/core/ErrorHandler.php b/core/ErrorHandler.php
index 965257c8db..6694d2cba3 100644
--- a/core/ErrorHandler.php
+++ b/core/ErrorHandler.php
@@ -123,7 +123,7 @@ class ErrorHandler
$message = ErrorHandler::getErrNoString($errno) . ' - ' . $errstr;
$html = "<p>There is an error. Please report the message (Piwik " . (class_exists('Piwik\Version') ? Version::VERSION : '') . ")
- and full backtrace in the <a href='?module=Proxy&action=redirect&url=http://forum.piwik.org' target='_blank'>Piwik forums</a> (please do a Search firit might have been reported already!).</p>";
+ and full backtrace in the <a href='?module=Proxy&action=redirect&url=http://forum.piwik.org' target='_blank'>Piwik forums</a> (please do a search first as it might have been reported already!).</p>";
$html .= "<p><strong>{$message}</strong> in <em>{$errfile}</em>";
$html .= " on line {$errline}</p>";
$html .= "Backtrace:<pre>";
diff --git a/core/FileIntegrity.php b/core/FileIntegrity.php
index ee37ca9887..b63d18f1fc 100644
--- a/core/FileIntegrity.php
+++ b/core/FileIntegrity.php
@@ -79,7 +79,12 @@ class FileIntegrity
'plugins/ImageGraph/fonts/unifont.ttf',
'vendor/autoload.php',
'vendor/composer/autoload_real.php',
+ 'vendor/szymach/c-pchart/app/*',
'tmp/*',
+ // Search engine sites verification
+ 'google*.html',
+ 'BingSiteAuth.xml',
+ 'yandex*.html',
// Files below are not expected but they used to be present in older Piwik versions and may be still here
// As they are not going to cause any trouble we won't report them as 'File to delete'
'*.coveralls.yml',
@@ -111,8 +116,14 @@ class FileIntegrity
$deleteAllAtOnce = array();
$chunks = array_chunk($directories, 50);
+ $command = 'rm -Rf';
+
+ if (SettingsServer::isWindows()) {
+ $command = 'rmdir /s /q';
+ }
+
foreach ($chunks as $directories) {
- $deleteAllAtOnce[] = sprintf('rm -Rf %s', implode(' ', $directories));
+ $deleteAllAtOnce[] = sprintf('%s %s', $command, implode(' ', $directories));
}
$messages[] = Piwik::translate('General_ExceptionUnexpectedDirectory')
@@ -153,8 +164,14 @@ class FileIntegrity
$deleteAllAtOnce = array();
$chunks = array_chunk($files, 50);
+ $command = 'rm';
+
+ if (SettingsServer::isWindows()) {
+ $command = 'del';
+ }
+
foreach ($chunks as $files) {
- $deleteAllAtOnce[] = sprintf('rm %s', implode(' ', $files));
+ $deleteAllAtOnce[] = sprintf('%s %s', $command, implode(' ', $files));
}
$messages[] = Piwik::translate('General_ExceptionUnexpectedFile')
diff --git a/core/Filesystem.php b/core/Filesystem.php
index 513dcd68a8..7fbd63be39 100644
--- a/core/Filesystem.php
+++ b/core/Filesystem.php
@@ -31,6 +31,12 @@ class Filesystem
TrackerCache::deleteTrackerCache();
PiwikCache::flushAll();
self::clearPhpCaches();
+
+ $pluginManager = Plugin\Manager::getInstance();
+ $plugins = $pluginManager->getLoadedPlugins();
+ foreach ($plugins as $plugin) {
+ $plugin->reloadPluginInformation();
+ }
}
/**
diff --git a/core/Http.php b/core/Http.php
index 48e1fa14fa..59628852ab 100644
--- a/core/Http.php
+++ b/core/Http.php
@@ -133,6 +133,7 @@ class Http
* @param string $httpUsername HTTP Auth username
* @param string $httpPassword HTTP Auth password
* @param array|string $requestBody If $httpMethod is 'POST' this may accept an array of variables or a string that needs to be posted
+ * @param array $additionalHeaders List of additional headers to set for the request
*
* @throws Exception
* @return bool true (or string/array) on success; false on HTTP response error code (1xx or 4xx)
@@ -152,7 +153,8 @@ class Http
$httpMethod = 'GET',
$httpUsername = null,
$httpPassword = null,
- $requestBody = null
+ $requestBody = null,
+ $additionalHeaders = array()
) {
if ($followDepth > 5) {
throw new Exception('Too many redirects (' . $followDepth . ')');
@@ -211,7 +213,7 @@ class Http
throw new Exception('Invalid protocol/scheme: ' . $url['scheme']);
}
$host = $url['host'];
- $port = isset($url['port']) ? $url['port'] : 80;
+ $port = isset($url['port']) ? $url['port'] : ('https' == $url['scheme'] ? 443 : 80);
$path = isset($url['path']) ? $url['path'] : '/';
if (isset($url['query'])) {
$path .= '?' . $url['query'];
@@ -239,6 +241,10 @@ class Http
$connectHost = $host;
$connectPort = $port;
$requestHeader = "$httpMethod $path HTTP/$httpVer\r\n";
+
+ if ('https' == $url['scheme']) {
+ $connectHost = 'ssl://' . $connectHost;
+ }
}
// connection attempt
@@ -256,7 +262,7 @@ class Http
// send HTTP request header
$requestHeader .=
- "Host: $host" . ($port != 80 ? ':' . $port : '') . "\r\n"
+ "Host: $host" . ($port != 80 && ('https' == $url['scheme'] && $port != 443) ? ':' . $port : '') . "\r\n"
. ($httpAuth ? $httpAuth : '')
. ($proxyAuth ? $proxyAuth : '')
. 'User-Agent: ' . $userAgent . "\r\n"
@@ -264,6 +270,7 @@ class Http
. $xff . "\r\n"
. $via . "\r\n"
. $rangeHeader
+ . (!empty($additionalHeaders) ? implode("\r\n", $additionalHeaders) . "\r\n" : '')
. "Connection: close\r\n";
fwrite($fsock, $requestHeader);
@@ -358,7 +365,9 @@ class Http
$getExtendedInfo,
$httpMethod,
$httpUsername,
- $httpPassword
+ $httpPassword,
+ $requestBody,
+ $additionalHeaders
);
}
@@ -427,6 +436,7 @@ class Http
. ($acceptLanguage ? $acceptLanguage . "\r\n" : '')
. $xff . "\r\n"
. $via . "\r\n"
+ . (!empty($additionalHeaders) ? implode("\r\n", $additionalHeaders) . "\r\n" : '')
. $rangeHeader,
'max_redirects' => 5, // PHP 5.1.0
'timeout' => $timeout, // PHP 5.2.1
@@ -504,12 +514,12 @@ class Http
// curl options (sorted oldest to newest)
CURLOPT_URL => $aUrl,
CURLOPT_USERAGENT => $userAgent,
- CURLOPT_HTTPHEADER => array(
+ CURLOPT_HTTPHEADER => array_merge(array(
$xff,
$via,
$rangeHeader,
$acceptLanguage
- ),
+ ), $additionalHeaders),
// only get header info if not saving directly to file
CURLOPT_HEADER => is_resource($file) ? false : true,
CURLOPT_CONNECTTIMEOUT => $timeout,
diff --git a/core/Intl/Data/Provider/DateTimeFormatProvider.php b/core/Intl/Data/Provider/DateTimeFormatProvider.php
index 90ffad609f..daf22b0b8c 100644
--- a/core/Intl/Data/Provider/DateTimeFormatProvider.php
+++ b/core/Intl/Data/Provider/DateTimeFormatProvider.php
@@ -65,6 +65,16 @@ class DateTimeFormatProvider
}
/**
+ * Returns if time is present as 12 hour clock (eg am/pm)
+ *
+ * @return bool
+ */
+ public function uses12HourClock()
+ {
+ return false;
+ }
+
+ /**
* Returns interval format pattern for the given format type
*
* @param bool $short whether to return short or long format pattern
diff --git a/core/Intl/Data/Resources/countries.php b/core/Intl/Data/Resources/countries.php
index 9048509525..e000900296 100644
--- a/core/Intl/Data/Resources/countries.php
+++ b/core/Intl/Data/Resources/countries.php
@@ -237,7 +237,6 @@ return array(
'tf' => 'ant',
'tg' => 'afr',
'th' => 'asi',
- 'ti' => 'asi', // Tibet (no iso 3166 code)
'tj' => 'asi',
'tk' => 'oce',
'tl' => 'asi',
diff --git a/core/Intl/Data/Resources/languages-to-countries.php b/core/Intl/Data/Resources/languages-to-countries.php
index 91ab0940c5..5e50cd4ea3 100644
--- a/core/Intl/Data/Resources/languages-to-countries.php
+++ b/core/Intl/Data/Resources/languages-to-countries.php
@@ -54,7 +54,7 @@ return array(
'sr' => 'rs', // Serbian => Serbia
'sv' => 'se', // Swedish => Sweden
'th' => 'th', // Thai => Thailand
- 'bo' => 'ti', // Tibetan => Tibet
+ 'bo' => 'cn', // Tibetan => China
'tr' => 'tr', // Turkish => Turkey
'uk' => 'ua', // Ukrainian => Ukraine
);
diff --git a/core/Mail.php b/core/Mail.php
index c6c8623cfd..a3771f536d 100644
--- a/core/Mail.php
+++ b/core/Mail.php
@@ -111,11 +111,14 @@ class Mail extends Zend_Mail
if (!empty($mailConfig['encryption'])) {
$smtpConfig['ssl'] = $mailConfig['encryption'];
}
+
+ if (!empty($mailConfig['port'])) {
+ $smtpConfig['port'] = $mailConfig['port'];
+ }
$host = trim($mailConfig['host']);
$tr = new \Zend_Mail_Transport_Smtp($host, $smtpConfig);
Mail::setDefaultTransport($tr);
- @ini_set("smtp_port", $mailConfig['port']);
}
public function send($transport = null)
diff --git a/core/Period.php b/core/Period.php
index 0abd1f4ba3..ebcad4896d 100644
--- a/core/Period.php
+++ b/core/Period.php
@@ -135,6 +135,26 @@ abstract class Period
}
/**
+ * Returns the start date & time of this period.
+ *
+ * @return Date
+ */
+ public function getDateTimeStart()
+ {
+ return $this->getDateStart()->getStartOfDay();
+ }
+
+ /**
+ * Returns the end date & time of this period.
+ *
+ * @return Date
+ */
+ public function getDateTimeEnd()
+ {
+ return $this->getDateEnd()->getEndOfDay();
+ }
+
+ /**
* Returns the last day of the period.
*
* @return Date
diff --git a/core/Period/Factory.php b/core/Period/Factory.php
index 88c29a92e2..60e5bc9b07 100644
--- a/core/Period/Factory.php
+++ b/core/Period/Factory.php
@@ -9,12 +9,55 @@
namespace Piwik\Period;
use Exception;
+use Piwik\Container\StaticContainer;
use Piwik\Date;
use Piwik\Period;
use Piwik\Piwik;
+use Piwik\Plugin;
-class Factory
+/**
+ * Creates Period instances using the values used for the 'period' and 'date'
+ * query parameters.
+ *
+ * ## Custom Periods
+ *
+ * Plugins can define their own period factories all plugins to define new period types, in addition
+ * to "day", "week", "month", "year" and "range".
+ *
+ * To define a new period type:
+ *
+ * 1. create a new period class that derives from {@see \Piwik\Period}.
+ * 2. extend this class in a new PeriodFactory class and put it in /path/to/piwik/plugins/MyPlugin/PeriodFactory.php
+ *
+ * Period name collisions:
+ *
+ * If two plugins try to handle the same period label, the first one encountered will
+ * be used. In other words, avoid using another plugin's period label.
+ */
+abstract class Factory
{
+ public function __construct()
+ {
+ // empty
+ }
+
+ /**
+ * Returns true if this factory should handle the period/date string combination.
+ *
+ * @return bool
+ */
+ public abstract function shouldHandle($strPeriod, $strDate);
+
+ /**
+ * Creates a period using the value of the 'date' query parameter.
+ *
+ * @param string $strPeriod
+ * @param string|Date $date
+ * @param string $timezone
+ * @return Period
+ */
+ public abstract function make($strPeriod, $date, $timezone);
+
/**
* Creates a new Period instance with a period ID and {@link Date} instance.
*
@@ -35,26 +78,33 @@ class Factory
|| $period == 'range') {
return new Range($period, $date, $timezone);
}
- $date = Date::factory($date);
+
+ $dateObject = Date::factory($date);
+ } else {
+ $dateObject = $date;
}
switch ($period) {
case 'day':
- return new Day($date);
- break;
-
+ return new Day($dateObject);
case 'week':
- return new Week($date);
- break;
-
+ return new Week($dateObject);
case 'month':
- return new Month($date);
- break;
-
+ return new Month($dateObject);
case 'year':
- return new Year($date);
- break;
+ return new Year($dateObject);
}
+
+ /** @var string[] $customPeriodFactories */
+ $customPeriodFactories = Plugin\Manager::getInstance()->findComponents('PeriodFactory', self::class);
+ foreach ($customPeriodFactories as $customPeriodFactoryClass) {
+ $customPeriodFactory = StaticContainer::get($customPeriodFactoryClass);
+ if ($customPeriodFactory->shouldHandle($period, $date)) {
+ return $customPeriodFactory->make($period, $date, $timezone);
+ }
+ }
+
+ throw new \Exception("Don't know how to create a '$period' period!");
}
public static function checkPeriodIsEnabled($period)
diff --git a/core/Scheduler/Scheduler.php b/core/Scheduler/Scheduler.php
index 86b8f44614..44971ab4a0 100644
--- a/core/Scheduler/Scheduler.php
+++ b/core/Scheduler/Scheduler.php
@@ -9,6 +9,7 @@
namespace Piwik\Scheduler;
use Exception;
+use Piwik\Piwik;
use Piwik\Timer;
use Psr\Log\LoggerInterface;
@@ -120,6 +121,17 @@ class Scheduler
$this->logger->debug("Task {task} is scheduled to run again for {date}.", array('task' => $taskName, 'date' => $rescheduledDate));
}
+ /**
+ * Triggered before a task is executed.
+ *
+ * A plugin can listen to it and modify whether a specific task should be executed or not. This way
+ * you can force certain tasks to be executed more often or for example to be never executed.
+ *
+ * @param bool &$shouldExecuteTask Decides whether the task will be executed.
+ * @param Task $task The task that is about to be executed.
+ */
+ Piwik::postEvent('ScheduledTasks.shouldExecuteTask', array(&$shouldExecuteTask, $task));
+
if ($shouldExecuteTask) {
$message = $this->executeTask($task);
@@ -222,6 +234,13 @@ class Scheduler
$timer = new Timer();
+ /**
+ * Triggered directly before a scheduled task is executed
+ *
+ * @param Task $task The task that is about to be executed
+ */
+ Piwik::postEvent('ScheduledTasks.execute', array(&$task));
+
try {
$callable = array($task->getObjectInstance(), $task->getMethodName());
call_user_func($callable, $task->getMethodParameter());
@@ -232,6 +251,16 @@ class Scheduler
$this->isRunningTask = false;
+ /**
+ * Triggered after a scheduled task is successfully executed.
+ *
+ * You can use the event to execute for example another task whenever a specific task is executed or to clean up
+ * certain resources.
+ *
+ * @param Task $task The task that was just executed
+ */
+ Piwik::postEvent('ScheduledTasks.execute.end', array(&$task));
+
$this->logger->info("Scheduler: finished. {timeElapsed}", array(
'timeElapsed' => $timer,
));
diff --git a/core/Settings/Storage/Backend/MeasurableSettingsTable.php b/core/Settings/Storage/Backend/MeasurableSettingsTable.php
index 22452288c8..e91a7ac9cd 100644
--- a/core/Settings/Storage/Backend/MeasurableSettingsTable.php
+++ b/core/Settings/Storage/Backend/MeasurableSettingsTable.php
@@ -150,8 +150,15 @@ class MeasurableSettingsTable implements BackendInterface
*/
public static function removeAllSettingsForSite($idSite)
{
- $query = sprintf('DELETE FROM %s WHERE idsite = ?', Common::prefixTable('site_setting'));
- Db::query($query, array($idSite));
+ try {
+ $query = sprintf('DELETE FROM %s WHERE idsite = ?', Common::prefixTable('site_setting'));
+ Db::query($query, array($idSite));
+ } catch (Exception $e) {
+ if ($e->getCode() != 42) {
+ // ignore table not found error, which might occur when updating from an older version of Piwik
+ throw $e;
+ }
+ }
}
/**
@@ -161,7 +168,14 @@ class MeasurableSettingsTable implements BackendInterface
*/
public static function removeAllSettingsForPlugin($pluginName)
{
- $query = sprintf('DELETE FROM %s WHERE plugin_name = ?', Common::prefixTable('site_setting'));
- Db::query($query, array($pluginName));
+ try {
+ $query = sprintf('DELETE FROM %s WHERE plugin_name = ?', Common::prefixTable('site_setting'));
+ Db::query($query, array($pluginName));
+ } catch (Exception $e) {
+ if ($e->getCode() != 42) {
+ // ignore table not found error, which might occur when updating from an older version of Piwik
+ throw $e;
+ }
+ }
}
}
diff --git a/core/Settings/Storage/Backend/PluginSettingsTable.php b/core/Settings/Storage/Backend/PluginSettingsTable.php
index 87476ff8fb..0f49d6b68e 100644
--- a/core/Settings/Storage/Backend/PluginSettingsTable.php
+++ b/core/Settings/Storage/Backend/PluginSettingsTable.php
@@ -155,8 +155,15 @@ class PluginSettingsTable implements BackendInterface
throw new Exception('No userLogin specified. Cannot remove all settings for this user');
}
- $table = Common::prefixTable('plugin_setting');
- Db::get()->query(sprintf('DELETE FROM %s WHERE user_login = ?', $table), array($userLogin));
+ try {
+ $table = Common::prefixTable('plugin_setting');
+ Db::get()->query(sprintf('DELETE FROM %s WHERE user_login = ?', $table), array($userLogin));
+ } catch (Exception $e) {
+ if ($e->getCode() != 42) {
+ // ignore table not found error, which might occur when updating from an older version of Piwik
+ throw $e;
+ }
+ }
}
/**
@@ -169,7 +176,14 @@ class PluginSettingsTable implements BackendInterface
*/
public static function removeAllSettingsForPlugin($pluginName)
{
- $table = Common::prefixTable('plugin_setting');
- Db::get()->query(sprintf('DELETE FROM %s WHERE plugin_name = ?', $table), array($pluginName));
+ try {
+ $table = Common::prefixTable('plugin_setting');
+ Db::get()->query(sprintf('DELETE FROM %s WHERE plugin_name = ?', $table), array($pluginName));
+ } catch (Exception $e) {
+ if ($e->getCode() != 42) {
+ // ignore table not found error, which might occur when updating from an older version of Piwik
+ throw $e;
+ }
+ }
}
}
diff --git a/core/SettingsPiwik.php b/core/SettingsPiwik.php
index f8f5d37c68..d8a04ec27a 100644
--- a/core/SettingsPiwik.php
+++ b/core/SettingsPiwik.php
@@ -235,6 +235,17 @@ class SettingsPiwik
}
/**
+ * Check if outgoing internet connections are enabled
+ * This is often disable in an intranet environment
+ *
+ * @return bool
+ */
+ public static function isInternetEnabled()
+ {
+ return (bool) Config::getInstance()->General['enable_internet_features'];
+ }
+
+ /**
* Detect whether user has enabled auto updates. Please note this config is a bit misleading. It is currently
* actually used for 2 things: To disable making any connections back to Piwik, and to actually disable the auto
* update of core and plugins.
@@ -242,7 +253,12 @@ class SettingsPiwik
*/
public static function isAutoUpdateEnabled()
{
- return (bool) Config::getInstance()->General['enable_auto_update'];
+ $enableAutoUpdate = (bool) Config::getInstance()->General['enable_auto_update'];
+ if(self::isInternetEnabled() === true && $enableAutoUpdate === true){
+ return true;
+ }
+
+ return false;
}
/**
diff --git a/core/Tracker.php b/core/Tracker.php
index 3ed757c638..43310c06a6 100644
--- a/core/Tracker.php
+++ b/core/Tracker.php
@@ -264,6 +264,11 @@ class Tracker
TrackerConfig::setConfigValue('enable_fingerprinting_across_websites', 1);
}
+ // Tests can simulate the tracker API maintenance mode
+ if (Common::getRequestVar('forceEnableTrackerMaintenanceMode', false, null, $args) == 1) {
+ TrackerConfig::setConfigValue('record_statistics', 0);
+ }
+
// Tests can force the use of 3rd party cookie for ID visitor
if (Common::getRequestVar('forceUseThirdPartyCookie', false, null, $args) == 1) {
TrackerConfig::setConfigValue('use_third_party_id_cookie', 1);
diff --git a/core/Tracker/LogTable.php b/core/Tracker/LogTable.php
index 8e66f43463..3fedba6945 100644
--- a/core/Tracker/LogTable.php
+++ b/core/Tracker/LogTable.php
@@ -21,6 +21,16 @@ abstract class LogTable {
abstract public function getName();
/**
+ * Get the name of the column that represents the primary key. For example "idvisit" or "idlink_va". If the table
+ * does not have a unique ID for each row, you may choose a column that comes closest to it, for example "idvisit".
+ * @return string
+ */
+ public function getIdColumn()
+ {
+ return '';
+ }
+
+ /**
* Get the name of the column that can be used to join a visit with another table. This is the name of the column
* that represents the "idvisit".
* @return string
diff --git a/core/Tracker/Response.php b/core/Tracker/Response.php
index 7927666511..d5a01d7c24 100644
--- a/core/Tracker/Response.php
+++ b/core/Tracker/Response.php
@@ -71,6 +71,7 @@ class Response
public function outputResponse(Tracker $tracker)
{
if (!$tracker->shouldRecordStatistics()) {
+ Common::sendResponseCode(503);
$this->outputApiResponse($tracker);
Common::printDebug("Logging disabled, display transparent logo");
} elseif (!$tracker->hasLoggedRequests()) {
diff --git a/core/Tracker/VisitorRecognizer.php b/core/Tracker/VisitorRecognizer.php
index 498329b51c..7727156727 100644
--- a/core/Tracker/VisitorRecognizer.php
+++ b/core/Tracker/VisitorRecognizer.php
@@ -101,6 +101,12 @@ class VisitorRecognizer
$isNewVisitForced = $request->getParam('new_visit');
$isNewVisitForced = !empty($isNewVisitForced);
$enforceNewVisit = $isNewVisitForced || $this->trackerAlwaysNewVisitor;
+ if($isNewVisitForced) {
+ Common::printDebug("-> New visit forced: &new_visit=1 in request");
+ }
+ if($this->trackerAlwaysNewVisitor) {
+ Common::printDebug("-> New visit forced: Debug.tracker_always_new_visitor = 1 in config.ini.php");
+ }
if (!$enforceNewVisit
&& $visitRow
diff --git a/core/Translation/Translator.php b/core/Translation/Translator.php
index 98b3759f3b..9ed366c7ba 100644
--- a/core/Translation/Translator.php
+++ b/core/Translation/Translator.php
@@ -194,7 +194,7 @@ class Translator
public function reset()
{
$this->currentLanguage = $this->getDefaultLanguage();
- $this->directories = array();
+ $this->directories = array(PIWIK_INCLUDE_PATH . '/lang');
$this->translations = array();
}
diff --git a/core/Twig.php b/core/Twig.php
index ce8085f23c..827c0c411f 100755
--- a/core/Twig.php
+++ b/core/Twig.php
@@ -356,7 +356,7 @@ class Twig
$template .= '>';
if (!empty($options['raw'])) {
- $template .= $message;
+ $template .= piwik_fix_lbrace($message);
} else {
$template .= twig_escape_filter($twigEnv, $message, 'html');
}
diff --git a/core/Version.php b/core/Version.php
index 43a1226b8b..cb95e51ab3 100644
--- a/core/Version.php
+++ b/core/Version.php
@@ -20,7 +20,7 @@ final class Version
* The current Piwik version.
* @var string
*/
- const VERSION = '3.0.4-rc2';
+ const VERSION = '3.1.1';
public function isStableVersion($version)
{
diff --git a/core/View.php b/core/View.php
index e74eae6201..3c90b5f9a7 100644
--- a/core/View.php
+++ b/core/View.php
@@ -212,10 +212,15 @@ class View implements ViewInterface
return isset($this->templateVars[$name]);
}
+ /** @var Twig */
+ static $twigCached = null;
+
private function initializeTwig()
{
- $piwikTwig = new Twig();
- $this->twig = $piwikTwig->getTwigEnvironment();
+ if (empty(static::$twigCached)) {
+ static::$twigCached = new Twig();
+ }
+ $this->twig = static::$twigCached->getTwigEnvironment();
}
/**
diff --git a/core/ViewDataTable/Config.php b/core/ViewDataTable/Config.php
index 77331390be..150c3f42d7 100644
--- a/core/ViewDataTable/Config.php
+++ b/core/ViewDataTable/Config.php
@@ -121,7 +121,6 @@ class Config
'show_pagination_control',
'show_offset_information',
'hide_annotations_view',
- 'export_limit',
'columns_to_display'
);
@@ -456,13 +455,6 @@ class Config
public $hide_annotations_view = true;
/**
- * The filter_limit query parameter value to use in export links.
- *
- * Defaulted to the value of the `[General] API_datatable_default_limit` INI config option.
- */
- public $export_limit = '';
-
- /**
* Message to show if not data is available for the report
* Defaults to `CoreHome_ThereIsNoDataForThisReport` if not set
*
@@ -492,7 +484,6 @@ class Config
*/
public function __construct()
{
- $this->export_limit = \Piwik\Config::getInstance()->General['API_datatable_default_limit'];
$this->translations = array_merge(
Metrics::getDefaultMetrics(),
Metrics::getDefaultProcessedMetrics()
diff --git a/core/testMinimumPhpVersion.php b/core/testMinimumPhpVersion.php
index ca276b1de3..a841724606 100644
--- a/core/testMinimumPhpVersion.php
+++ b/core/testMinimumPhpVersion.php
@@ -29,7 +29,7 @@ if ($minimumPhpInvalid) {
<p>Unfortunately it seems your webserver is using PHP version $piwik_currentPHPVersion. </p>
<p>Please try to update your PHP version, Piwik is really worth it! Nowadays most web hosts
support PHP $piwik_minimumPHPVersion.</p>
- <p>Also see the FAQ: <a href='http://piwik.org/faq/how-to-install/#faq_77'>My Web host supports PHP4 by default. How can I enable PHP5?</a></p>";
+ <p>Also see the FAQ: <a href='https://piwik.org/faq/how-to-install/#faq_77'>My Web host supports PHP4 by default. How can I enable PHP5?</a></p>";
} else {
if (!extension_loaded('session')) {
$piwik_errorMessage .= "<p><strong>Piwik and Zend_Session require the session extension</strong></p>
@@ -66,9 +66,9 @@ if ($minimumPhpInvalid) {
"<br/>" . $composerInstall.
" This will initialize composer for Piwik and download libraries we use in vendor/* directory.".
"\n\n<br/><br/>Then reload this page to access your analytics reports." .
- "\n\n<br/><br/>For more information check out this FAQ: <a href='http://piwik.org/faq/how-to-install/faq_18271/' rel='noreferrer' target='_blank'>How do I use Piwik from the Git repository?</a>." .
+ "\n\n<br/><br/>For more information check out this FAQ: <a href='https://piwik.org/faq/how-to-install/faq_18271/' rel='noreferrer' target='_blank'>How do I use Piwik from the Git repository?</a>." .
"\n\n<br/><br/>Note: if for some reasons you cannot install composer, instead install the latest Piwik release from ".
- "<a href='http://builds.piwik.org/piwik.zip'>builds.piwik.org</a>.</p>";
+ "<a href='https://builds.piwik.org/piwik.zip'>builds.piwik.org</a>.</p>";
}
}
@@ -142,10 +142,10 @@ if (!function_exists('Piwik_GetErrorMessagePage')) {
if ($optionalLinks) {
$optionalLinks = '<ul>
- <li><a rel="noreferrer" target="_blank" href="http://piwik.org">Piwik.org homepage</a></li>
- <li><a rel="noreferrer" target="_blank" href="http://piwik.org/faq/">Piwik Frequently Asked Questions</a></li>
- <li><a rel="noreferrer" target="_blank" href="http://piwik.org/docs/">Piwik Documentation</a></li>
- <li><a rel="noreferrer" target="_blank" href="http://forum.piwik.org/">Piwik Forums</a></li>
+ <li><a rel="noreferrer" target="_blank" href="https://piwik.org">Piwik.org homepage</a></li>
+ <li><a rel="noreferrer" target="_blank" href="https://piwik.org/faq/">Piwik Frequently Asked Questions</a></li>
+ <li><a rel="noreferrer" target="_blank" href="https://piwik.org/docs/">Piwik Documentation</a></li>
+ <li><a rel="noreferrer" target="_blank" href="https://forum.piwik.org/">Piwik Forums</a></li>
<li><a rel="noreferrer" target="_blank" href="https://piwik.org/support/?pk_campaign=App_AnErrorOccured&pk_source=Piwik_App&pk_medium=ProfessionalServicesLink">Professional help for Piwik</a></li>
</ul>';
}
diff --git a/js/piwik.js b/js/piwik.js
index 69c95ffe36..e9596d3cdc 100644
--- a/js/piwik.js
+++ b/js/piwik.js
@@ -986,12 +986,12 @@ if (typeof JSON_PIWIK !== 'object' && typeof window.JSON === 'object' && window.
setDownloadClasses, setLinkClasses,
setCampaignNameKey, setCampaignKeywordKey,
discardHashTag,
- setCookieNamePrefix, setCookieDomain, setCookiePath, setVisitorIdCookie, getCookieDomain, hasCookies, setSessionCookie,
+ setCookieNamePrefix, setCookieDomain, setCookiePath, setSecureCookie, isSecureCookie, setVisitorIdCookie, getCookieDomain, hasCookies, setSessionCookie,
setVisitorCookieTimeout, setSessionCookieTimeout, setReferralCookieTimeout, getCookie, getCookiePath, getSessionCookieTimeout,
setConversionAttributionFirstReferrer, tracker, request,
disablePerformanceTracking, setGenerationTimeMs,
- doNotTrack, setDoNotTrack, msDoNotTrack, getValuesFromVisitorIdCookie, enableCrossDomainLinking,
- disableCrossDomainLinking, isCrossDomainLinkingEnabled,
+ doNotTrack, setDoNotTrack, msDoNotTrack, getValuesFromVisitorIdCookie,
+ enableCrossDomainLinking, disableCrossDomainLinking, isCrossDomainLinkingEnabled, setCrossDomainLinkingTimeout,
addListener, enableLinkTracking, enableJSErrorTracking, setLinkTrackingTimer, getLinkTrackingTimer,
enableHeartBeatTimer, disableHeartBeatTimer, killFrame, redirectFile, setCountPreRendered,
trackGoal, trackLink, trackPageView, getNumTrackedPageViews, trackRequest, trackSiteSearch, trackEvent,
@@ -1198,7 +1198,7 @@ if (typeof window.Piwik !== 'object') {
var isStaticPluginCall = isString(f) && f.indexOf('::') > 0;
if (isStaticPluginCall) {
- // a static method will not be called on a tracker and is not dependent on the existance of a
+ // a static method will not be called on a tracker and is not dependent on the existence of a
// tracker etc
fParts = f.split('::');
context = fParts[0];
@@ -1590,6 +1590,15 @@ if (typeof window.Piwik !== 'object') {
return results ? decodeWrapper(results[1]) : '';
}
+ function trim(text)
+ {
+ if (text && String(text) === text) {
+ return text.replace(/^\s+|\s+$/g, '');
+ }
+
+ return text;
+ }
+
/*
* UTF-8 encoding
*/
@@ -2625,11 +2634,7 @@ if (typeof window.Piwik !== 'object') {
},
trim: function (text)
{
- if (text && String(text) === text) {
- return text.replace(/^\s+|\s+$/g, '');
- }
-
- return text;
+ return trim(text);
},
isOrWasNodeInViewport: function (node)
{
@@ -3089,6 +3094,9 @@ if (typeof window.Piwik !== 'object') {
// VDI = visitor device identifier
configVisitorIdUrlParameter = 'pk_vid',
+ // Cross domain linking, the visitor ID is transmitted only in the 180 seconds following the click.
+ configVisitorIdUrlParameterTimeoutInSeconds = 180,
+
// First-party cookie domain
// User agent defaults to origin hostname
configCookieDomain,
@@ -3194,7 +3202,9 @@ if (typeof window.Piwik !== 'object') {
// pageview was already tracked or not
numTrackedPageviews = 0,
- configCookiesToDelete = ['id', 'ses', 'cvar', 'ref'];
+ configCookiesToDelete = ['id', 'ses', 'cvar', 'ref'],
+
+ secureCookie = false;
// Document title
try {
@@ -3206,7 +3216,7 @@ if (typeof window.Piwik !== 'object') {
/*
* Set cookie value
*/
- function setCookie(cookieName, value, msToExpire, path, domain, secure) {
+ function setCookie(cookieName, value, msToExpire, path, domain) {
if (configCookiesDisabled) {
return;
}
@@ -3223,7 +3233,21 @@ if (typeof window.Piwik !== 'object') {
(msToExpire ? ';expires=' + expiryDate.toGMTString() : '') +
';path=' + (path || '/') +
(domain ? ';domain=' + domain : '') +
- (secure ? ';secure' : '');
+ (secureCookie ? ';secure' : '');
+ }
+
+ /*
+ * Set cookie secure flag
+ */
+ function setSecureCookie(value) {
+ secureCookie = !!value;
+ }
+
+ /**
+ * Get secure cookie flag value
+ */
+ function isSecureCookie() {
+ return secureCookie;
}
/*
@@ -3799,11 +3823,13 @@ if (typeof window.Piwik !== 'object') {
// we only reuse visitorId when used on same device / browser
var currentTimestampInSeconds = getCurrentTimestampInSeconds();
- var timeoutInSeconds = 45;
+ if (configVisitorIdUrlParameterTimeoutInSeconds <= 0) {
+ return true;
+ }
if (currentTimestampInSeconds >= timestampInUrl
- && currentTimestampInSeconds <= (timestampInUrl + timeoutInSeconds)) {
- // we only use visitorId if it was generated max 45 seconds ago
+ && currentTimestampInSeconds <= (timestampInUrl + configVisitorIdUrlParameterTimeoutInSeconds)) {
+ // we only use visitorId if it was generated max 180 seconds ago
return true;
}
}
@@ -4957,7 +4983,8 @@ if (typeof window.Piwik !== 'object') {
function logEvent(category, action, name, value, customData, callback)
{
// Category and Action are required parameters
- if (String(category).length === 0 || String(action).length === 0) {
+ if (trim(String(category)).length === 0 || trim(String(action)).length === 0) {
+ logConsoleError('Error while logging event: Parameters `category` and `action` must not be empty or filled with whitespaces');
return false;
}
var request = getRequest(
@@ -5323,7 +5350,7 @@ if (typeof window.Piwik !== 'object') {
}
- function enableTrackOnlyVisibleContent (checkOnSroll, timeIntervalInMs, tracker) {
+ function enableTrackOnlyVisibleContent (checkOnScroll, timeIntervalInMs, tracker) {
if (isTrackOnlyVisibleContentEnabled) {
// already enabled, do not register intervals again
@@ -5366,7 +5393,7 @@ if (typeof window.Piwik !== 'object') {
}, intervalInMs);
}
- if (checkOnSroll) {
+ if (checkOnScroll) {
// scroll event is executed after each pixel, so we make sure not to
// execute event too often. otherwise FPS goes down a lot!
@@ -6110,6 +6137,15 @@ if (typeof window.Piwik !== 'object') {
};
/**
+ * By default, the two visits across domains will be linked together
+ * when the link is click and the page is loaded within 180 seconds.
+ * @param timeout in seconds
+ */
+ this.setCrossDomainLinkingTimeout = function (timeout) {
+ configVisitorIdUrlParameterTimeoutInSeconds = timeout;
+ };
+
+ /**
* Set array of classes to be ignored if present in link
*
* @param string|array ignoreClasses
@@ -6701,20 +6737,20 @@ if (typeof window.Piwik !== 'object') {
* In case your frames per second goes down you might want to increase
* this value or disable it by passing the value `0`.
*/
- this.trackVisibleContentImpressions = function (checkOnSroll, timeIntervalInMs) {
+ this.trackVisibleContentImpressions = function (checkOnScroll, timeIntervalInMs) {
if (isOverlaySession(configTrackerSiteId)) {
return;
}
- if (!isDefined(checkOnSroll)) {
- checkOnSroll = true;
+ if (!isDefined(checkOnScroll)) {
+ checkOnScroll = true;
}
if (!isDefined(timeIntervalInMs)) {
timeIntervalInMs = 750;
}
- enableTrackOnlyVisibleContent(checkOnSroll, timeIntervalInMs, this);
+ enableTrackOnlyVisibleContent(checkOnScroll, timeIntervalInMs, this);
trackCallback(function () {
trackCallbackOnLoad(function () {
@@ -6740,6 +6776,10 @@ if (typeof window.Piwik !== 'object') {
return;
}
+ contentName = trim(contentName);
+ contentPiece = trim(contentPiece);
+ contentTarget = trim(contentTarget);
+
if (!contentName) {
return;
}
@@ -6801,6 +6841,11 @@ if (typeof window.Piwik !== 'object') {
return;
}
+ contentInteraction = trim(contentInteraction);
+ contentName = trim(contentName);
+ contentPiece = trim(contentPiece);
+ contentTarget = trim(contentTarget);
+
if (!contentInteraction || !contentName) {
return;
}
@@ -7048,7 +7093,7 @@ if (typeof window.Piwik !== 'object') {
* Constructor
************************************************************/
- var applyFirst = ['addTracker', 'disableCookies', 'setTrackerUrl', 'setAPIUrl', 'enableCrossDomainLinking', 'setCookiePath', 'setCookieDomain', 'setDomains', 'setUserId', 'setSiteId', 'enableLinkTracking'];
+ var applyFirst = ['addTracker', 'disableCookies', 'setTrackerUrl', 'setAPIUrl', 'enableCrossDomainLinking', 'setCrossDomainLinkingTimeout', 'setCookiePath', 'setCookieDomain', 'setDomains', 'setUserId', 'setSiteId', 'enableLinkTracking', 'setSecureCookie'];
function createFirstTracker(piwikUrl, siteId)
{
@@ -7262,7 +7307,7 @@ if (typeof window.Piwik !== 'object') {
}
if (!siteId && !piwikUrl) {
- // for BC and by default we just return the initally created tracker
+ // for BC and by default we just return the initially created tracker
return firstTracker;
}
diff --git a/js/piwik.min.js b/js/piwik.min.js
index 0a50b8285e..4a6a602662 100644
--- a/js/piwik.min.js
+++ b/js/piwik.min.js
@@ -18,59 +18,60 @@ var I="000000";var t=function(ac,ad){return(I+(ad||0)).slice(-ac)};var z="\\u00"
}else{at=null}}else{if(typeof at.toJSON=="function"&&((ae!=N&&ae!=O&&ae!=E)||r.call(at,"toJSON"))){at=at.toJSON(ai)}}}if(ag){at=ag.call(aA,ai,at)}if(at===null){return"null"}ae=u.call(at);if(ae==A){return""+at}else{if(ae==N){return at>-1/0&&at<1/0?""+at:"null"}else{if(ae==O){return C(""+at)}}}if(typeof at=="object"){for(af=aj.length;af--;){if(aj[af]===at){throw aa()}}aj.push(at);ar=[];av=ac;ac+=ax;if(ae==E){for(ah=0,af=at.length;ah<af;ah++){ad=p(ah,at,ag,al,ax,ac,aj);ar.push(ad===L?"null":ad)}ao=ar.length?(ax?"[\n"+ac+ar.join(",\n"+ac)+"\n"+av+"]":("["+ar.join(",")+"]")):"[]"}else{m(al||at,function(aC){var aB=p(aC,at,ag,al,ax,ac,aj);if(aB!==L){ar.push(C(aC)+":"+(ax?" ":"")+aB)}});ao=ar.length?(ax?"{\n"+ac+ar.join(",\n"+ac)+"\n"+av+"}":("{"+ar.join(",")+"}")):"{}"}aj.pop();return ao}};V.stringify=function(ac,ae,af){var ad,al,aj,ai;if(e[typeof ae]&&ae){if((ai=u.call(ae))==U){al=ae}else{if(ai==E){aj={};for(var ah=0,ag=ae.length,ak;ah<ag;ak=ae[ah++],((ai=u.call(ak)),ai==O||ai==N)&&(aj[ak]=1)){}}}}if(af){if((ai=u.call(af))==N){if((af-=af%1)>0){for(ad="",af>10&&(af=10);
ad.length<af;ad+=" "){}}}else{if(ai==O){ad=af.length<=10?af:af.slice(0,10)}}}return p("",(ak={},ak[""]=ac,ak),al,aj,ad,"",[])}}if(!o("json-parse")){var M=R.fromCharCode;var l={92:"\\",34:'"',47:"/",98:"\b",116:"\t",110:"\n",102:"\f",114:"\r"};var G,X;var H=function(){G=X=null;throw T()};var y=function(){var ah=X,af=ah.length,ag,ae,ac,ai,ad;while(G<af){ad=ah.charCodeAt(G);switch(ad){case 9:case 10:case 13:case 32:G++;break;case 123:case 125:case 91:case 93:case 58:case 44:ag=F?ah.charAt(G):ah[G];G++;return ag;case 34:for(ag="@",G++;G<af;){ad=ah.charCodeAt(G);if(ad<32){H()}else{if(ad==92){ad=ah.charCodeAt(++G);switch(ad){case 92:case 34:case 47:case 98:case 116:case 110:case 102:case 114:ag+=l[ad];G++;break;case 117:ae=++G;for(ac=G+4;G<ac;G++){ad=ah.charCodeAt(G);if(!(ad>=48&&ad<=57||ad>=97&&ad<=102||ad>=65&&ad<=70)){H()}}ag+=M("0x"+ah.slice(ae,G));break;default:H()}}else{if(ad==34){break}ad=ah.charCodeAt(G);ae=G;while(ad>=32&&ad!=92&&ad!=34){ad=ah.charCodeAt(++G)}ag+=ah.slice(ae,G)}}}if(ah.charCodeAt(G)==34){G++;
return ag}H();default:ae=G;if(ad==45){ai=true;ad=ah.charCodeAt(++G)}if(ad>=48&&ad<=57){if(ad==48&&((ad=ah.charCodeAt(G+1)),ad>=48&&ad<=57)){H()}ai=false;for(;G<af&&((ad=ah.charCodeAt(G)),ad>=48&&ad<=57);G++){}if(ah.charCodeAt(G)==46){ac=++G;for(;ac<af&&((ad=ah.charCodeAt(ac)),ad>=48&&ad<=57);ac++){}if(ac==G){H()}G=ac}ad=ah.charCodeAt(G);if(ad==101||ad==69){ad=ah.charCodeAt(++G);if(ad==43||ad==45){G++}for(ac=G;ac<af&&((ad=ah.charCodeAt(ac)),ad>=48&&ad<=57);ac++){}if(ac==G){H()}G=ac}return +ah.slice(ae,G)}if(ai){H()}if(ah.slice(G,G+4)=="true"){G+=4;return true}else{if(ah.slice(G,G+5)=="false"){G+=5;return false}else{if(ah.slice(G,G+4)=="null"){G+=4;return null}}}H()}}return"$"};var W=function(ad){var ac,ae;if(ad=="$"){H()}if(typeof ad=="string"){if((F?ad.charAt(0):ad[0])=="@"){return ad.slice(1)}if(ad=="["){ac=[];for(;;ae||(ae=true)){ad=y();if(ad=="]"){break}if(ae){if(ad==","){ad=y();if(ad=="]"){H()}}else{H()}}if(ad==","){H()}ac.push(W(ad))}return ac}else{if(ad=="{"){ac={};for(;;ae||(ae=true)){ad=y();
-if(ad=="}"){break}if(ae){if(ad==","){ad=y();if(ad=="}"){H()}}else{H()}}if(ad==","||typeof ad!="string"||(F?ad.charAt(0):ad[0])!="@"||y()!=":"){H()}ac[ad.slice(1)]=W(y())}return ac}}H()}return ad};var P=function(ae,ad,af){var ac=w(ae,ad,af);if(ac===L){delete ae[ad]}else{ae[ad]=ac}};var w=function(af,ae,ag){var ad=af[ae],ac;if(typeof ad=="object"&&ad){if(u.call(ad)==E){for(ac=ad.length;ac--;){P(ad,ac,ag)}}else{m(ad,function(ah){P(ad,ah,ag)})}}return ag.call(af,ae,ad)};V.parse=function(ae,af){var ac,ad;G=0;X=""+ae;ac=W(y());if(y()!="$"){H()}G=X=null;return af&&u.call(af)==U?w((ad={},ad[""]=ac,ad),"",af):ac}}}V.runInContext=j;return V}if(h&&!c){j(i,h)}else{var f=i.JSON,k=i.JSON3,d=false;var g=j(i,(i.JSON3={noConflict:function(){if(!d){d=true;i.JSON=f;i.JSON3=k;f=k=null}return g}}));i.JSON={parse:g.parse,stringify:g.stringify}}if(c){define(function(){return g})}}).call(this);JSON_PIWIK=a})()}if(typeof _paq!=="object"){_paq=[]}if(typeof window.Piwik!=="object"){window.Piwik=(function(){var p,a={},v={},D=document,g=navigator,T=screen,Q=window,h=Q.performance||Q.mozPerformance||Q.msPerformance||Q.webkitPerformance,r=Q.encodeURIComponent,P=Q.decodeURIComponent,k=unescape,F=[],B,d,aa=[];
-function n(ah){try{return P(ah)}catch(ai){return unescape(ah)}}function G(ai){var ah=typeof ai;return ah!=="undefined"}function x(ah){return typeof ah==="function"}function S(ah){return typeof ah==="object"}function u(ah){return typeof ah==="string"||ah instanceof String}function y(ai){if(!ai){return true}var ah;var aj=true;for(ah in ai){if(Object.prototype.hasOwnProperty.call(ai,ah)){aj=false}}return aj}function ad(ah){var ai=typeof console;if(ai!=="undefined"&&console&&console.error){console.error(ah)}}function Z(){var am,al,ao,ai,ah;for(am=0;am<arguments.length;am+=1){ah=null;if(arguments[am]&&arguments[am].slice){ah=arguments[am].slice()}ai=arguments[am];ao=ai.shift();var an,aj;var ak=u(ao)&&ao.indexOf("::")>0;if(ak){an=ao.split("::");aj=an[0];ao=an[1];if("object"===typeof d[aj]&&"function"===typeof d[aj][ao]){d[aj][ao].apply(d[aj],ai)}else{if(ah){aa.push(ah)}}}else{for(al=0;al<F.length;al++){if(u(ao)){aj=F[al];var ap=ao.indexOf(".")>0;if(ap){an=ao.split(".");if(aj&&"object"===typeof aj[an[0]]){aj=aj[an[0]];
-ao=an[1]}else{if(ah){aa.push(ah);break}}}if(aj[ao]){aj[ao].apply(aj,ai)}else{var aq="The method '"+ao+'\' was not found in "_paq" variable. Please have a look at the Piwik tracker documentation: http://developer.piwik.org/api-reference/tracking-javascript';ad(aq);if(!ap){throw new TypeError(aq)}}if(ao==="addTracker"){break}if(ao==="setTrackerUrl"||ao==="setSiteId"){break}}else{ao.apply(F[al],ai)}}}}}function ag(ak,aj,ai,ah){if(ak.addEventListener){ak.addEventListener(aj,ai,ah);return true}if(ak.attachEvent){return ak.attachEvent("on"+aj,ai)}ak["on"+aj]=ai}function l(ah){if(D.readyState==="complete"){ah()}else{if(Q.addEventListener){Q.addEventListener("load",ah)}else{if(Q.attachEvent){Q.attachEvent("onload",ah)}}}}function o(ak){var ah=false;if(D.attachEvent){ah=D.readyState==="complete"}else{ah=D.readyState!=="loading"}if(ah){ak();return}var aj;if(D.addEventListener){ag(D,"DOMContentLoaded",function ai(){D.removeEventListener("DOMContentLoaded",ai,false);if(!ah){ah=true;ak()}})}else{if(D.attachEvent){D.attachEvent("onreadystatechange",function ai(){if(D.readyState==="complete"){D.detachEvent("onreadystatechange",ai);
-if(!ah){ah=true;ak()}}});if(D.documentElement.doScroll&&Q===Q.top){(function ai(){if(!ah){try{D.documentElement.doScroll("left")}catch(al){setTimeout(ai,0);return}ah=true;ak()}}())}}}ag(Q,"load",function(){if(!ah){ah=true;ak()}},false)}function W(ai,an,ao){if(!ai){return""}var ah="",ak,aj,al,am;for(ak in a){if(Object.prototype.hasOwnProperty.call(a,ak)){am=a[ak]&&"function"===typeof a[ak][ai];if(am){aj=a[ak][ai];al=aj(an||{},ao);if(al){ah+=al}}}}return ah}function ab(){var ah;W("unload");if(p){do{ah=new Date()}while(ah.getTimeAlias()<p)}}function m(aj,ai){var ah=D.createElement("script");ah.type="text/javascript";ah.src=aj;if(ah.readyState){ah.onreadystatechange=function(){var ak=this.readyState;if(ak==="loaded"||ak==="complete"){ah.onreadystatechange=null;ai()}}}else{ah.onload=ai}D.getElementsByTagName("head")[0].appendChild(ah)}function H(){var ah="";try{ah=Q.top.document.referrer}catch(aj){if(Q.parent){try{ah=Q.parent.document.referrer}catch(ai){ah=""}}}if(ah===""){ah=D.referrer}return ah
-}function q(ah){var aj=new RegExp("^([a-z]+):"),ai=aj.exec(ah);return ai?ai[1]:null}function c(ah){var aj=new RegExp("^(?:(?:https?|ftp):)/*(?:[^@]+@)?([^:/#]+)"),ai=aj.exec(ah);return ai?ai[1]:ah}function ac(ai,ah){ai=String(ai);return ai.lastIndexOf(ah,0)===0}function O(ai,ah){ai=String(ai);return ai.indexOf(ah,ai.length-ah.length)!==-1}function w(ai,ah){ai=String(ai);return ai.indexOf(ah)!==-1}function f(ai,ah){ai=String(ai);return ai.substr(0,ai.length-ah)}function C(ak,aj,am){ak=String(ak);if(!am){am=""}var ah=ak.indexOf("#");var an=ak.length;if(ah===-1){ah=an}var al=ak.substr(0,ah);var ai=ak.substr(ah,an-ah);if(al.indexOf("?")===-1){al+="?"}else{if(!O(al,"?")){al+="&"}}return al+r(aj)+"="+r(am)+ai}function j(ai,aj){ai=String(ai);if(ai.indexOf("?"+aj+"=")===-1&&ai.indexOf("&"+aj+"=")===-1){return ai}var ak=ai.indexOf("?");if(ak===-1){return ai}var ah=ai.substr(ak+1);var ao=ai.substr(0,ak);if(ah){var ap="";var ar=ah.indexOf("#");if(ar!==-1){ap=ah.substr(ar+1);ah=ah.substr(0,ar)}var al;
-var an=ah.split("&");var am=an.length-1;for(am;am>=0;am--){al=an[am].split("=")[0];if(al===aj){an.splice(am,1)}}var aq=an.join("&");if(aq){ao=ao+"?"+aq}if(ap){ao+="#"+ap}}return ao}function e(aj,ai){var ah="[\\?&#]"+ai+"=([^&#]*)";var al=new RegExp(ah);var ak=al.exec(aj);return ak?P(ak[1]):""}function A(ah){return unescape(r(ah))}function af(ax){var aj=function(aD,aC){return(aD<<aC)|(aD>>>(32-aC))},ay=function(aF){var aD="",aE,aC;for(aE=7;aE>=0;aE--){aC=(aF>>>(aE*4))&15;aD+=aC.toString(16)}return aD},am,aA,az,ai=[],aq=1732584193,ao=4023233417,an=2562383102,al=271733878,ak=3285377520,aw,av,au,at,ar,aB,ah,ap=[];ax=A(ax);ah=ax.length;for(aA=0;aA<ah-3;aA+=4){az=ax.charCodeAt(aA)<<24|ax.charCodeAt(aA+1)<<16|ax.charCodeAt(aA+2)<<8|ax.charCodeAt(aA+3);ap.push(az)}switch(ah&3){case 0:aA=2147483648;break;case 1:aA=ax.charCodeAt(ah-1)<<24|8388608;break;case 2:aA=ax.charCodeAt(ah-2)<<24|ax.charCodeAt(ah-1)<<16|32768;break;case 3:aA=ax.charCodeAt(ah-3)<<24|ax.charCodeAt(ah-2)<<16|ax.charCodeAt(ah-1)<<8|128;
-break}ap.push(aA);while((ap.length&15)!==14){ap.push(0)}ap.push(ah>>>29);ap.push((ah<<3)&4294967295);for(am=0;am<ap.length;am+=16){for(aA=0;aA<16;aA++){ai[aA]=ap[am+aA]}for(aA=16;aA<=79;aA++){ai[aA]=aj(ai[aA-3]^ai[aA-8]^ai[aA-14]^ai[aA-16],1)}aw=aq;av=ao;au=an;at=al;ar=ak;for(aA=0;aA<=19;aA++){aB=(aj(aw,5)+((av&au)|(~av&at))+ar+ai[aA]+1518500249)&4294967295;ar=at;at=au;au=aj(av,30);av=aw;aw=aB}for(aA=20;aA<=39;aA++){aB=(aj(aw,5)+(av^au^at)+ar+ai[aA]+1859775393)&4294967295;ar=at;at=au;au=aj(av,30);av=aw;aw=aB}for(aA=40;aA<=59;aA++){aB=(aj(aw,5)+((av&au)|(av&at)|(au&at))+ar+ai[aA]+2400959708)&4294967295;ar=at;at=au;au=aj(av,30);av=aw;aw=aB}for(aA=60;aA<=79;aA++){aB=(aj(aw,5)+(av^au^at)+ar+ai[aA]+3395469782)&4294967295;ar=at;at=au;au=aj(av,30);av=aw;aw=aB}aq=(aq+aw)&4294967295;ao=(ao+av)&4294967295;an=(an+au)&4294967295;al=(al+at)&4294967295;ak=(ak+ar)&4294967295}aB=ay(aq)+ay(ao)+ay(an)+ay(al)+ay(ak);return aB.toLowerCase()}function V(aj,ah,ai){if(!aj){aj=""}if(!ah){ah=""}if(aj==="translate.googleusercontent.com"){if(ai===""){ai=ah
-}ah=e(ah,"u");aj=c(ah)}else{if(aj==="cc.bingj.com"||aj==="webcache.googleusercontent.com"||aj.slice(0,5)==="74.6."){ah=D.links[0].href;aj=c(ah)}}return[aj,ah,ai]}function I(ai){var ah=ai.length;if(ai.charAt(--ah)==="."){ai=ai.slice(0,ah)}if(ai.slice(0,2)==="*."){ai=ai.slice(1)}if(ai.indexOf("/")!==-1){ai=ai.substr(0,ai.indexOf("/"))}return ai}function ae(ai){ai=ai&&ai.text?ai.text:ai;if(!u(ai)){var ah=D.getElementsByTagName("title");if(ah&&G(ah[0])){ai=ah[0].text}}return ai}function M(ah){if(!ah){return[]}if(!G(ah.children)&&G(ah.childNodes)){return ah.children}if(G(ah.children)){return ah.children}return[]}function R(ai,ah){if(!ai||!ah){return false}if(ai.contains){return ai.contains(ah)}if(ai===ah){return true}if(ai.compareDocumentPosition){return !!(ai.compareDocumentPosition(ah)&16)}return false}function J(aj,ak){if(aj&&aj.indexOf){return aj.indexOf(ak)}if(!G(aj)||aj===null){return -1}if(!aj.length){return -1}var ah=aj.length;if(ah===0){return -1}var ai=0;while(ai<ah){if(aj[ai]===ak){return ai
-}ai++}return -1}function i(aj){if(!aj){return false}function ah(al,am){if(Q.getComputedStyle){return D.defaultView.getComputedStyle(al,null)[am]}if(al.currentStyle){return al.currentStyle[am]}}function ak(al){al=al.parentNode;while(al){if(al===D){return true}al=al.parentNode}return false}function ai(an,au,al,aq,ao,ar,ap){var am=an.parentNode,at=1;if(!ak(an)){return false}if(9===am.nodeType){return true}if("0"===ah(an,"opacity")||"none"===ah(an,"display")||"hidden"===ah(an,"visibility")){return false}if(!G(au)||!G(al)||!G(aq)||!G(ao)||!G(ar)||!G(ap)){au=an.offsetTop;ao=an.offsetLeft;aq=au+an.offsetHeight;al=ao+an.offsetWidth;ar=an.offsetWidth;ap=an.offsetHeight}if(aj===an&&(0===ap||0===ar)&&"hidden"===ah(an,"overflow")){return false}if(am){if(("hidden"===ah(am,"overflow")||"scroll"===ah(am,"overflow"))){if(ao+at>am.offsetWidth+am.scrollLeft||ao+ar-at<am.scrollLeft||au+at>am.offsetHeight+am.scrollTop||au+ap-at<am.scrollTop){return false}}if(an.offsetParent===am){ao+=am.offsetLeft;au+=am.offsetTop
-}return ai(am,au,al,aq,ao,ar,ap)}return true}return ai(aj)}var Y={htmlCollectionToArray:function(aj){var ah=[],ai;if(!aj||!aj.length){return ah}for(ai=0;ai<aj.length;ai++){ah.push(aj[ai])}return ah},find:function(ah){if(!document.querySelectorAll||!ah){return[]}var ai=document.querySelectorAll(ah);return this.htmlCollectionToArray(ai)},findMultiple:function(aj){if(!aj||!aj.length){return[]}var ai,ak;var ah=[];for(ai=0;ai<aj.length;ai++){ak=this.find(aj[ai]);ah=ah.concat(ak)}ah=this.makeNodesUnique(ah);return ah},findNodesByTagName:function(ai,ah){if(!ai||!ah||!ai.getElementsByTagName){return[]}var aj=ai.getElementsByTagName(ah);return this.htmlCollectionToArray(aj)},makeNodesUnique:function(ah){var am=[].concat(ah);ah.sort(function(ao,an){if(ao===an){return 0}var aq=J(am,ao);var ap=J(am,an);if(aq===ap){return 0}return aq>ap?-1:1});if(ah.length<=1){return ah}var ai=0;var ak=0;var al=[];var aj;aj=ah[ai++];while(aj){if(aj===ah[ai]){ak=al.push(ai)}aj=ah[ai++]||null}while(ak--){ah.splice(al[ak],1)
-}return ah},getAttributeValueFromNode:function(al,aj){if(!this.hasNodeAttribute(al,aj)){return}if(al&&al.getAttribute){return al.getAttribute(aj)}if(!al||!al.attributes){return}var ak=(typeof al.attributes[aj]);if("undefined"===ak){return}if(al.attributes[aj].value){return al.attributes[aj].value}if(al.attributes[aj].nodeValue){return al.attributes[aj].nodeValue}var ai;var ah=al.attributes;if(!ah){return}for(ai=0;ai<ah.length;ai++){if(ah[ai].nodeName===aj){return ah[ai].nodeValue}}return null},hasNodeAttributeWithValue:function(ai,ah){var aj=this.getAttributeValueFromNode(ai,ah);return !!aj},hasNodeAttribute:function(aj,ah){if(aj&&aj.hasAttribute){return aj.hasAttribute(ah)}if(aj&&aj.attributes){var ai=(typeof aj.attributes[ah]);return"undefined"!==ai}return false},hasNodeCssClass:function(aj,ah){if(aj&&ah&&aj.className){var ai=typeof aj.className==="string"?aj.className.split(" "):[];if(-1!==J(ai,ah)){return true}}return false},findNodesHavingAttribute:function(al,aj,ah){if(!ah){ah=[]}if(!al||!aj){return ah
-}var ak=M(al);if(!ak||!ak.length){return ah}var ai,am;for(ai=0;ai<ak.length;ai++){am=ak[ai];if(this.hasNodeAttribute(am,aj)){ah.push(am)}ah=this.findNodesHavingAttribute(am,aj,ah)}return ah},findFirstNodeHavingAttribute:function(aj,ai){if(!aj||!ai){return}if(this.hasNodeAttribute(aj,ai)){return aj}var ah=this.findNodesHavingAttribute(aj,ai);if(ah&&ah.length){return ah[0]}},findFirstNodeHavingAttributeWithValue:function(ak,aj){if(!ak||!aj){return}if(this.hasNodeAttributeWithValue(ak,aj)){return ak}var ah=this.findNodesHavingAttribute(ak,aj);if(!ah||!ah.length){return}var ai;for(ai=0;ai<ah.length;ai++){if(this.getAttributeValueFromNode(ah[ai],aj)){return ah[ai]}}},findNodesHavingCssClass:function(al,ak,ah){if(!ah){ah=[]}if(!al||!ak){return ah}if(al.getElementsByClassName){var am=al.getElementsByClassName(ak);return this.htmlCollectionToArray(am)}var aj=M(al);if(!aj||!aj.length){return[]}var ai,an;for(ai=0;ai<aj.length;ai++){an=aj[ai];if(this.hasNodeCssClass(an,ak)){ah.push(an)}ah=this.findNodesHavingCssClass(an,ak,ah)
-}return ah},findFirstNodeHavingClass:function(aj,ai){if(!aj||!ai){return}if(this.hasNodeCssClass(aj,ai)){return aj}var ah=this.findNodesHavingCssClass(aj,ai);if(ah&&ah.length){return ah[0]}},isLinkElement:function(ai){if(!ai){return false}var ah=String(ai.nodeName).toLowerCase();var ak=["a","area"];var aj=J(ak,ah);return aj!==-1},setAnyAttribute:function(ai,ah,aj){if(!ai||!ah){return}if(ai.setAttribute){ai.setAttribute(ah,aj)}else{ai[ah]=aj}}};var t={CONTENT_ATTR:"data-track-content",CONTENT_CLASS:"piwikTrackContent",CONTENT_NAME_ATTR:"data-content-name",CONTENT_PIECE_ATTR:"data-content-piece",CONTENT_PIECE_CLASS:"piwikContentPiece",CONTENT_TARGET_ATTR:"data-content-target",CONTENT_TARGET_CLASS:"piwikContentTarget",CONTENT_IGNOREINTERACTION_ATTR:"data-content-ignoreinteraction",CONTENT_IGNOREINTERACTION_CLASS:"piwikContentIgnoreInteraction",location:undefined,findContentNodes:function(){var ai="."+this.CONTENT_CLASS;var ah="["+this.CONTENT_ATTR+"]";var aj=Y.findMultiple([ai,ah]);return aj
-},findContentNodesWithinNode:function(ak){if(!ak){return[]}var ai=Y.findNodesHavingCssClass(ak,this.CONTENT_CLASS);var ah=Y.findNodesHavingAttribute(ak,this.CONTENT_ATTR);if(ah&&ah.length){var aj;for(aj=0;aj<ah.length;aj++){ai.push(ah[aj])}}if(Y.hasNodeAttribute(ak,this.CONTENT_ATTR)){ai.push(ak)}else{if(Y.hasNodeCssClass(ak,this.CONTENT_CLASS)){ai.push(ak)}}ai=Y.makeNodesUnique(ai);return ai},findParentContentNode:function(ai){if(!ai){return}var aj=ai;var ah=0;while(aj&&aj!==D&&aj.parentNode){if(Y.hasNodeAttribute(aj,this.CONTENT_ATTR)){return aj}if(Y.hasNodeCssClass(aj,this.CONTENT_CLASS)){return aj}aj=aj.parentNode;if(ah>1000){break}ah++}},findPieceNode:function(ai){var ah;ah=Y.findFirstNodeHavingAttribute(ai,this.CONTENT_PIECE_ATTR);if(!ah){ah=Y.findFirstNodeHavingClass(ai,this.CONTENT_PIECE_CLASS)}if(ah){return ah}return ai},findTargetNodeNoDefault:function(ah){if(!ah){return}var ai=Y.findFirstNodeHavingAttributeWithValue(ah,this.CONTENT_TARGET_ATTR);if(ai){return ai}ai=Y.findFirstNodeHavingAttribute(ah,this.CONTENT_TARGET_ATTR);
-if(ai){return ai}ai=Y.findFirstNodeHavingClass(ah,this.CONTENT_TARGET_CLASS);if(ai){return ai}},findTargetNode:function(ah){var ai=this.findTargetNodeNoDefault(ah);if(ai){return ai}return ah},findContentName:function(ai){if(!ai){return}var al=Y.findFirstNodeHavingAttributeWithValue(ai,this.CONTENT_NAME_ATTR);if(al){return Y.getAttributeValueFromNode(al,this.CONTENT_NAME_ATTR)}var ah=this.findContentPiece(ai);if(ah){return this.removeDomainIfIsInLink(ah)}if(Y.hasNodeAttributeWithValue(ai,"title")){return Y.getAttributeValueFromNode(ai,"title")}var aj=this.findPieceNode(ai);if(Y.hasNodeAttributeWithValue(aj,"title")){return Y.getAttributeValueFromNode(aj,"title")}var ak=this.findTargetNode(ai);if(Y.hasNodeAttributeWithValue(ak,"title")){return Y.getAttributeValueFromNode(ak,"title")}},findContentPiece:function(ai){if(!ai){return}var ak=Y.findFirstNodeHavingAttributeWithValue(ai,this.CONTENT_PIECE_ATTR);if(ak){return Y.getAttributeValueFromNode(ak,this.CONTENT_PIECE_ATTR)}var ah=this.findPieceNode(ai);
-var aj=this.findMediaUrlInNode(ah);if(aj){return this.toAbsoluteUrl(aj)}},findContentTarget:function(aj){if(!aj){return}var ak=this.findTargetNode(aj);if(Y.hasNodeAttributeWithValue(ak,this.CONTENT_TARGET_ATTR)){return Y.getAttributeValueFromNode(ak,this.CONTENT_TARGET_ATTR)}var ai;if(Y.hasNodeAttributeWithValue(ak,"href")){ai=Y.getAttributeValueFromNode(ak,"href");return this.toAbsoluteUrl(ai)}var ah=this.findPieceNode(aj);if(Y.hasNodeAttributeWithValue(ah,"href")){ai=Y.getAttributeValueFromNode(ah,"href");return this.toAbsoluteUrl(ai)}},isSameDomain:function(ah){if(!ah||!ah.indexOf){return false}if(0===ah.indexOf(this.getLocation().origin)){return true}var ai=ah.indexOf(this.getLocation().host);if(8>=ai&&0<=ai){return true}return false},removeDomainIfIsInLink:function(aj){var ai="^https?://[^/]+";var ah="^.*//[^/]+";if(aj&&aj.search&&-1!==aj.search(new RegExp(ai))&&this.isSameDomain(aj)){aj=aj.replace(new RegExp(ah),"");if(!aj){aj="/"}}return aj},findMediaUrlInNode:function(al){if(!al){return
-}var aj=["img","embed","video","audio"];var ah=al.nodeName.toLowerCase();if(-1!==J(aj,ah)&&Y.findFirstNodeHavingAttributeWithValue(al,"src")){var ak=Y.findFirstNodeHavingAttributeWithValue(al,"src");return Y.getAttributeValueFromNode(ak,"src")}if(ah==="object"&&Y.hasNodeAttributeWithValue(al,"data")){return Y.getAttributeValueFromNode(al,"data")}if(ah==="object"){var am=Y.findNodesByTagName(al,"param");if(am&&am.length){var ai;for(ai=0;ai<am.length;ai++){if("movie"===Y.getAttributeValueFromNode(am[ai],"name")&&Y.hasNodeAttributeWithValue(am[ai],"value")){return Y.getAttributeValueFromNode(am[ai],"value")}}}var an=Y.findNodesByTagName(al,"embed");if(an&&an.length){return this.findMediaUrlInNode(an[0])}}},trim:function(ah){if(ah&&String(ah)===ah){return ah.replace(/^\s+|\s+$/g,"")}return ah},isOrWasNodeInViewport:function(am){if(!am||!am.getBoundingClientRect||am.nodeType!==1){return true}var al=am.getBoundingClientRect();var ak=D.documentElement||{};var aj=al.top<0;if(aj&&am.offsetTop){aj=(am.offsetTop+al.height)>0
-}var ai=ak.clientWidth;if(Q.innerWidth&&ai>Q.innerWidth){ai=Q.innerWidth}var ah=ak.clientHeight;if(Q.innerHeight&&ah>Q.innerHeight){ah=Q.innerHeight}return((al.bottom>0||aj)&&al.right>0&&al.left<ai&&((al.top<ah)||aj))},isNodeVisible:function(ai){var ah=i(ai);var aj=this.isOrWasNodeInViewport(ai);return ah&&aj},buildInteractionRequestParams:function(ah,ai,aj,ak){var al="";if(ah){al+="c_i="+r(ah)}if(ai){if(al){al+="&"}al+="c_n="+r(ai)}if(aj){if(al){al+="&"}al+="c_p="+r(aj)}if(ak){if(al){al+="&"}al+="c_t="+r(ak)}return al},buildImpressionRequestParams:function(ah,ai,aj){var ak="c_n="+r(ah)+"&c_p="+r(ai);if(aj){ak+="&c_t="+r(aj)}return ak},buildContentBlock:function(aj){if(!aj){return}var ah=this.findContentName(aj);var ai=this.findContentPiece(aj);var ak=this.findContentTarget(aj);ah=this.trim(ah);ai=this.trim(ai);ak=this.trim(ak);return{name:ah||"Unknown",piece:ai||"Unknown",target:ak||""}},collectContent:function(ak){if(!ak||!ak.length){return[]}var aj=[];var ah,ai;for(ah=0;ah<ak.length;
-ah++){ai=this.buildContentBlock(ak[ah]);if(G(ai)){aj.push(ai)}}return aj},setLocation:function(ah){this.location=ah},getLocation:function(){var ah=this.location||Q.location;if(!ah.origin){ah.origin=ah.protocol+"//"+ah.hostname+(ah.port?":"+ah.port:"")}return ah},toAbsoluteUrl:function(ai){if((!ai||String(ai)!==ai)&&ai!==""){return ai}if(""===ai){return this.getLocation().href}if(ai.search(/^\/\//)!==-1){return this.getLocation().protocol+ai}if(ai.search(/:\/\//)!==-1){return ai}if(0===ai.indexOf("#")){return this.getLocation().origin+this.getLocation().pathname+ai}if(0===ai.indexOf("?")){return this.getLocation().origin+this.getLocation().pathname+ai}if(0===ai.search("^[a-zA-Z]{2,11}:")){return ai}if(ai.search(/^\//)!==-1){return this.getLocation().origin+ai}var ah="(.*/)";var aj=this.getLocation().origin+this.getLocation().pathname.match(new RegExp(ah))[0];return aj+ai},isUrlToCurrentDomain:function(ai){var aj=this.toAbsoluteUrl(ai);if(!aj){return false}var ah=this.getLocation().origin;
-if(ah===aj){return true}if(0===String(aj).indexOf(ah)){if(":"===String(aj).substr(ah.length,1)){return false}return true}return false},setHrefAttribute:function(ai,ah){if(!ai||!ah){return}Y.setAnyAttribute(ai,"href",ah)},shouldIgnoreInteraction:function(aj){var ai=Y.hasNodeAttribute(aj,this.CONTENT_IGNOREINTERACTION_ATTR);var ah=Y.hasNodeCssClass(aj,this.CONTENT_IGNOREINTERACTION_CLASS);return ai||ah}};function L(ai,al){if(al){return al}ai=t.toAbsoluteUrl(ai);if(w(ai,"?")){var ak=ai.indexOf("?");ai=ai.slice(0,ak)}if(O(ai,"piwik.php")){ai=f(ai,"piwik.php".length)}else{if(O(ai,".php")){var ah=ai.lastIndexOf("/");var aj=1;ai=ai.slice(0,ah+aj)}}if(O(ai,"/js/")){ai=f(ai,"js/".length)}return ai}function K(an){var ap="Piwik_Overlay";var ai=new RegExp("index\\.php\\?module=Overlay&action=startOverlaySession&idSite=([0-9]+)&period=([^&]+)&date=([^&]+)(&segment=.*)?$");var aj=ai.exec(D.referrer);if(aj){var al=aj[1];if(al!==String(an)){return false}var am=aj[2],ah=aj[3],ak=aj[4];if(!ak){ak=""}else{if(ak.indexOf("&segment=")===0){ak=ak.substr("&segment=".length)
-}}Q.name=ap+"###"+am+"###"+ah+"###"+ak}var ao=Q.name.split("###");return ao.length===4&&ao[0]===ap}function U(ai,ao,ak){var an=Q.name.split("###"),am=an[1],ah=an[2],al=an[3],aj=L(ai,ao);m(aj+"plugins/Overlay/client/client.js?v=1",function(){Piwik_Overlay_Client.initialize(aj,ak,am,ah,al)})}function s(){var aj;try{aj=Q.frameElement}catch(ai){return true}if(G(aj)){return(aj&&String(aj.nodeName).toLowerCase()==="iframe")?true:false}try{return Q.self!==Q.top}catch(ah){return true}}function N(bW,bR){var br=this,bM=V(D.domain,Q.location.href,H()),cy=I(bM[0]),bw=n(bM[1]),a9=n(bM[2]),cw=false,b0="GET",cL=b0,az="application/x-www-form-urlencoded; charset=UTF-8",cf=az,av=bW||"",bq="",cC="",bO=bR||"",bj="",bx="",aT,a5="",cI=["7z","aac","apk","arc","arj","asf","asx","avi","azw3","bin","csv","deb","dmg","doc","docx","epub","exe","flv","gif","gz","gzip","hqx","ibooks","jar","jpg","jpeg","js","mobi","mp2","mp3","mp4","mpg","mpeg","mov","movie","msi","msp","odb","odf","odg","ods","odt","ogg","ogv","pdf","phps","png","ppt","pptx","qt","qtm","ra","ram","rar","rpm","sea","sit","tar","tbz","tbz2","bz","bz2","tgz","torrent","txt","wav","wma","wmv","wpd","xls","xlsx","xml","z","zip"],ao=[cy],bk=[],bu=[],aW=[],bs=500,co,aU,bA,by,ah,b9=["pk_campaign","piwik_campaign","utm_campaign","utm_source","utm_medium"],bp=["pk_kwd","piwik_kwd","utm_term"],a6="_pk_",an="pk_vid",cA,bb,a7=false,cu,a1,bg,cp=33955200000,b7=1800000,cH=15768000000,aR=true,b5=0,bz=false,aG=false,bT,bE={},b4={},a8={},be=200,cD={},cJ={},bS=[],bX=false,ci=false,ai=false,cK=false,cr=false,aE=false,a0=s(),cB=null,bU,aH,bl,bP=af,ba,aB,ca=0,bf=["id","ses","cvar","ref"];
-try{a5=D.title}catch(cg){a5=""}function cO(cZ,cW,cV,cY,cU,cX){if(a7){return}var cT;if(cV){cT=new Date();cT.setTime(cT.getTime()+cV)}D.cookie=cZ+"="+r(cW)+(cV?";expires="+cT.toGMTString():"")+";path="+(cY||"/")+(cU?";domain="+cU:"")+(cX?";secure":"")}function au(cV){if(a7){return 0}var cT=new RegExp("(^|;)[ ]*"+cV+"=([^;]*)"),cU=cT.exec(D.cookie);return cU?P(cU[2]):0}function bK(cT){var cU;cT=j(cT,an);if(by){cU=new RegExp("#.*");return cT.replace(cU,"")}return cT}function bD(cV,cT){var cW=q(cT),cU;if(cW){return cT}if(cT.slice(0,1)==="/"){return q(cV)+"://"+c(cV)+cT}cV=bK(cV);cU=cV.indexOf("?");if(cU>=0){cV=cV.slice(0,cU)}cU=cV.lastIndexOf("/");if(cU!==cV.length-1){cV=cV.slice(0,cU+1)}return cV+cT}function cn(cV,cT){var cU;cV=String(cV).toLowerCase();cT=String(cT).toLowerCase();if(cV===cT){return true}if(cT.slice(0,1)==="."){if(cV===cT.slice(1)){return true}cU=cV.length-cT.length;if((cU>0)&&(cV.slice(cU)===cT)){return true}}return false}function b3(cT){var cU=document.createElement("a");if(cT.indexOf("//")!==0&&cT.indexOf("http")!==0){if(cT.indexOf("*")===0){cT=cT.substr(1)
-}if(cT.indexOf(".")===0){cT=cT.substr(1)}cT="http://"+cT}cU.href=t.toAbsoluteUrl(cT);if(cU.pathname){return cU.pathname}return""}function aS(cU,cT){if(!ac(cT,"/")){cT="/"+cT}if(!ac(cU,"/")){cU="/"+cU}var cV=(cT==="/"||cT==="/*");if(cV){return true}if(cU===cT){return true}cT=String(cT).toLowerCase();cU=String(cU).toLowerCase();if(O(cT,"*")){cT=cT.slice(0,-1);cV=(!cT||cT==="/");if(cV){return true}if(cU===cT){return true}return cU.indexOf(cT)===0}if(!O(cU,"/")){cU+="/"}if(!O(cT,"/")){cT+="/"}return cU.indexOf(cT)===0}function ak(cX,cZ){var cU,cT,cV,cW,cY;for(cU=0;cU<ao.length;cU++){cW=I(ao[cU]);cY=b3(ao[cU]);if(cn(cX,cW)&&aS(cZ,cY)){return true}}return false}function aL(cW){var cU,cT,cV;for(cU=0;cU<ao.length;cU++){cT=I(ao[cU].toLowerCase());if(cW===cT){return true}if(cT.slice(0,1)==="."){if(cW===cT.slice(1)){return true}cV=cW.length-cT.length;if((cV>0)&&(cW.slice(cV)===cT)){return true}}}return false}function b8(cT,cV){var cU=new Image(1,1);cU.onload=function(){B=0;if(typeof cV==="function"){cV()
-}};cT=cT.replace("send_image=0","send_image=1");cU.src=av+(av.indexOf("?")<0?"?":"&")+cT}function cG(cU,cX,cT){if(!G(cT)||null===cT){cT=true}try{var cW=Q.XMLHttpRequest?new Q.XMLHttpRequest():Q.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):null;cW.open("POST",av,true);cW.onreadystatechange=function(){if(this.readyState===4&&!(this.status>=200&&this.status<300)&&cT){b8(cU,cX)}else{if(this.readyState===4&&(typeof cX==="function")){cX()}}};cW.setRequestHeader("Content-Type",cf);cW.send(cU)}catch(cV){if(cT){b8(cU,cX)}}}function bY(cU){var cT=new Date();var cV=cT.getTime()+cU;if(!p||cV>p){p=cV}}function b6(cT){if(bU||!aU){return}bU=setTimeout(function cU(){bU=null;if(!a0){a0=(!D.hasFocus||D.hasFocus())}if(!a0){b6(aU);return}if(bA()){return}var cV=new Date(),cW=aU-(cV.getTime()-cB);cW=Math.min(aU,cW);b6(cW)},cT||aU)}function bt(){if(!bU){return}clearTimeout(bU);bU=null}function aY(){a0=true;if(bA()){return}b6()}function ap(){bt()}function cQ(){if(aE||!aU){return}aE=true;ag(Q,"focus",aY);
-ag(Q,"blur",ap);b6()}function cj(cX){var cU=new Date();var cT=cU.getTime();cB=cT;if(ci&&cT<ci){var cV=ci-cT;setTimeout(cX,cV);bY(cV+50);ci+=50;return}if(ci===false){var cW=800;ci=cT+cW}cX()}function bo(cU,cT,cV){if(!cu&&cU){cj(function(){if(cL==="POST"||String(cU).length>2000){cG(cU,cV)}else{b8(cU,cV)}bY(cT)})}if(!aE){cQ()}else{b6()}}function b2(cT){if(cu){return false}return(cT&&cT.length)}function cP(cV,cT){if(!b2(cV)){return}var cU='{"requests":["?'+cV.join('","?')+'"]}';cj(function(){cG(cU,null,false);bY(cT)})}function aJ(cT){return a6+cT+"."+bO+"."+ba}function bN(){if(a7){return"0"}if(!G(g.cookieEnabled)){var cT=aJ("testcookie");cO(cT,"1");return au(cT)==="1"?"1":"0"}return g.cookieEnabled?"1":"0"}function a4(){ba=bP((cA||cy)+(bb||"/")).slice(0,4)}function bF(){var cU=aJ("cvar"),cT=au(cU);if(cT.length){cT=JSON_PIWIK.parse(cT);if(S(cT)){return cT}}return{}}function ck(){if(aG===false){aG=bF()}}function cv(){return bP((g.userAgent||"")+(g.platform||"")+JSON_PIWIK.stringify(cJ)+(new Date()).getTime()+Math.random()).slice(0,16)
-}function aq(){return bP((g.userAgent||"")+(g.platform||"")+JSON_PIWIK.stringify(cJ)).slice(0,6)}function a2(){return Math.floor((new Date()).getTime()/1000)}function aA(){var cU=a2();var cV=aq();var cT=String(cU)+cV;return cT}function cF(cW){cW=String(cW);var cZ=aq();var cX=cZ.length;var cY=cW.substr(-1*cX,cX);var cV=parseInt(cW.substr(0,cW.length-cX),10);if(cV&&cY&&cY===cZ){var cT=a2();var cU=45;if(cT>=cV&&cT<=(cV+cU)){return true}}return false}function cR(cT){if(!cr){return""}var cX=e(cT,an);if(!cX){return""}cX=String(cX);var cV=new RegExp("^[a-zA-Z0-9]+$");if(cX.length===32&&cV.test(cX)){var cU=cX.substr(16,32);if(cF(cU)){var cW=cX.substr(0,16);return cW}}return""}function cs(){if(!bx){bx=cR(bw)}var cV=new Date(),cT=Math.round(cV.getTime()/1000),cU=aJ("id"),cY=au(cU),cX,cW;if(cY){cX=cY.split(".");cX.unshift("0");if(bx.length){cX[1]=bx}return cX}if(bx.length){cW=bx}else{if("0"===bN()){cW=""}else{cW=cv()}}cX=["1",cW,cT,0,cT,"",""];return cX}function aN(){var c0=cs(),cW=c0[0],cX=c0[1],cU=c0[2],cT=c0[3],cY=c0[4],cV=c0[5];
-if(!G(c0[6])){c0[6]=""}var cZ=c0[6];return{newVisitor:cW,uuid:cX,createTs:cU,visitCount:cT,currentVisitTs:cY,lastVisitTs:cV,lastEcommerceOrderTs:cZ}}function ay(){var cW=new Date(),cU=cW.getTime(),cX=aN().createTs;var cT=parseInt(cX,10);var cV=(cT*1000)+cp-cU;return cV}function aC(cT){if(!bO){return}var cV=new Date(),cU=Math.round(cV.getTime()/1000);if(!G(cT)){cT=aN()}var cW=cT.uuid+"."+cT.createTs+"."+cT.visitCount+"."+cU+"."+cT.lastVisitTs+"."+cT.lastEcommerceOrderTs;cO(aJ("id"),cW,ay(),bb,cA)}function bv(){var cT=au(aJ("ref"));if(cT.length){try{cT=JSON_PIWIK.parse(cT);if(S(cT)){return cT}}catch(cU){}}return["","",0,""]}function bG(cV,cU,cT){cO(cV,"",-86400,cU,cT)}function bh(cU){var cT="testvalue";cO("test",cT,10000,null,cU);if(au("test")===cT){bG("test",null,cU);return true}return false}function aw(){var cU=a7;a7=false;var cT,cV;for(cT=0;cT<bf.length;cT++){cV=aJ(bf[cT]);if(0!==au(cV)){bG(cV,bb,cA)}}a7=cU}function bL(cT){bO=cT;aC()}function cS(cX){if(!cX||!S(cX)){return}var cW=[];var cV;
-for(cV in cX){if(Object.prototype.hasOwnProperty.call(cX,cV)){cW.push(cV)}}var cY={};cW.sort();var cT=cW.length;var cU;for(cU=0;cU<cT;cU++){cY[cW[cU]]=cX[cW[cU]]}return cY}function bV(){cO(aJ("ses"),"*",b7,bb,cA)}function a3(){var cW="";var cU="abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";var cV=cU.length;var cT;for(cT=0;cT<6;cT++){cW+=cU.charAt(Math.floor(Math.random()*cV))}return cW}function cb(cV,dg,dh,cW){var df,cU=new Date(),c3=Math.round(cU.getTime()/1000),c0,de,cX=1024,dm,c4,dc=aG,cY=aJ("ses"),da=aJ("ref"),c7=aJ("cvar"),c8=au(cY),dd=bv(),dj=aT||bw,c1,cT;if(a7){aw()}if(cu){return""}var c9=aN();if(!G(cW)){cW=""}var c6=D.characterSet||D.charset;if(!c6||c6.toLowerCase()==="utf-8"){c6=null}c1=dd[0];cT=dd[1];c0=dd[2];de=dd[3];if(!c8){var di=b7/1000;if(!c9.lastVisitTs||(c3-c9.lastVisitTs)>di){c9.visitCount++;c9.lastVisitTs=c9.currentVisitTs}if(!bg||!c1.length){for(df in b9){if(Object.prototype.hasOwnProperty.call(b9,df)){c1=e(dj,b9[df]);if(c1.length){break}}}for(df in bp){if(Object.prototype.hasOwnProperty.call(bp,df)){cT=e(dj,bp[df]);
-if(cT.length){break}}}}dm=c(a9);c4=de.length?c(de):"";if(dm.length&&!aL(dm)&&(!bg||!c4.length||aL(c4))){de=a9}if(de.length||c1.length){c0=c3;dd=[c1,cT,c0,bK(de.slice(0,cX))];cO(da,JSON_PIWIK.stringify(dd),cH,bb,cA)}}cV+="&idsite="+bO+"&rec=1&r="+String(Math.random()).slice(2,8)+"&h="+cU.getHours()+"&m="+cU.getMinutes()+"&s="+cU.getSeconds()+"&url="+r(bK(dj))+(a9.length?"&urlref="+r(bK(a9)):"")+((bj&&bj.length)?"&uid="+r(bj):"")+"&_id="+c9.uuid+"&_idts="+c9.createTs+"&_idvc="+c9.visitCount+"&_idn="+c9.newVisitor+(c1.length?"&_rcn="+r(c1):"")+(cT.length?"&_rck="+r(cT):"")+"&_refts="+c0+"&_viewts="+c9.lastVisitTs+(String(c9.lastEcommerceOrderTs).length?"&_ects="+c9.lastEcommerceOrderTs:"")+(String(de).length?"&_ref="+r(bK(de.slice(0,cX))):"")+(c6?"&cs="+r(c6):"")+"&send_image=0";for(df in cJ){if(Object.prototype.hasOwnProperty.call(cJ,df)){cV+="&"+df+"="+cJ[df]}}var dl=[];if(dg){for(df in dg){if(Object.prototype.hasOwnProperty.call(dg,df)&&/^dimension\d+$/.test(df)){var cZ=df.replace("dimension","");
-dl.push(parseInt(cZ,10));dl.push(String(cZ));cV+="&"+df+"="+dg[df];delete dg[df]}}}if(dg&&y(dg)){dg=null}for(df in a8){if(Object.prototype.hasOwnProperty.call(a8,df)){var c5=(-1===J(dl,df));if(c5){cV+="&dimension"+df+"="+a8[df]}}}if(dg){cV+="&data="+r(JSON_PIWIK.stringify(dg))}else{if(ah){cV+="&data="+r(JSON_PIWIK.stringify(ah))}}function c2(dn,dp){var dq=JSON_PIWIK.stringify(dn);if(dq.length>2){return"&"+dp+"="+r(dq)}return""}var dk=cS(bE);var db=cS(b4);cV+=c2(dk,"cvar");cV+=c2(db,"e_cvar");if(aG){cV+=c2(aG,"_cvar");for(df in dc){if(Object.prototype.hasOwnProperty.call(dc,df)){if(aG[df][0]===""||aG[df][1]===""){delete aG[df]}}}if(bz){cO(c7,JSON_PIWIK.stringify(aG),b7,bb,cA)}}if(aR){if(b5){cV+="&gt_ms="+b5}else{if(h&&h.timing&&h.timing.requestStart&&h.timing.responseEnd){cV+="&gt_ms="+(h.timing.responseEnd-h.timing.requestStart)}}}if(aB){cV+="&pv_id="+aB}c9.lastEcommerceOrderTs=G(cW)&&String(cW).length?cW:c9.lastEcommerceOrderTs;aC(c9);bV();cV+=W(dh,{tracker:br,request:cV});if(cC.length){cV+="&"+cC
-}if(x(bT)){cV=bT(cV)}return cV}bA=function aV(){var cT=new Date();if(cB+aU<=cT.getTime()){var cU=cb("ping=1",null,"ping");bo(cU,bs);return true}return false};function bc(cW,cV,c1,cX,cT,c4){var cZ="idgoal=0",c0,cU=new Date(),c2=[],c3,cY=String(cW).length;if(cY){cZ+="&ec_id="+r(cW);c0=Math.round(cU.getTime()/1000)}cZ+="&revenue="+cV;if(String(c1).length){cZ+="&ec_st="+c1}if(String(cX).length){cZ+="&ec_tx="+cX}if(String(cT).length){cZ+="&ec_sh="+cT}if(String(c4).length){cZ+="&ec_dt="+c4}if(cD){for(c3 in cD){if(Object.prototype.hasOwnProperty.call(cD,c3)){if(!G(cD[c3][1])){cD[c3][1]=""}if(!G(cD[c3][2])){cD[c3][2]=""}if(!G(cD[c3][3])||String(cD[c3][3]).length===0){cD[c3][3]=0}if(!G(cD[c3][4])||String(cD[c3][4]).length===0){cD[c3][4]=1}c2.push(cD[c3])}}cZ+="&ec_items="+r(JSON_PIWIK.stringify(c2))}cZ=cb(cZ,ah,"ecommerce",c0);bo(cZ,bs);if(cY){cD={}}}function bH(cT,cX,cW,cV,cU,cY){if(String(cT).length&&G(cX)){bc(cT,cX,cW,cV,cU,cY)}}function bd(cT){if(G(cT)){bc("",cT,"","","","")}}function bI(cU,cW,cV){aB=a3();
-var cT=cb("action_name="+r(ae(cU||a5)),cW,"log");bo(cT,bs,cV)}function aP(cV,cU){var cW,cT="(^| )(piwik[_-]"+cU;if(cV){for(cW=0;cW<cV.length;cW++){cT+="|"+cV[cW]}}cT+=")( |$)";return new RegExp(cT)}function aK(cT){return(av&&cT&&0===String(cT).indexOf(av))}function cc(cX,cT,cY,cU){if(aK(cT)){return 0}var cW=aP(bu,"download"),cV=aP(aW,"link"),cZ=new RegExp("\\.("+cI.join("|")+")([?&#]|$)","i");if(cV.test(cX)){return"link"}if(cU||cW.test(cX)||cZ.test(cT)){return"download"}if(cY){return 0}return"link"}function am(cU){var cT;cT=cU.parentNode;while(cT!==null&&G(cT)){if(Y.isLinkElement(cU)){break}cU=cT;cT=cU.parentNode}return cU}function cM(cY){cY=am(cY);if(!Y.hasNodeAttribute(cY,"href")){return}if(!G(cY.href)){return}var cX=Y.getAttributeValueFromNode(cY,"href");if(aK(cX)){return}var cU=cY.pathname||b3(cY.href);var cZ=cY.hostname||c(cY.href);var c0=cZ.toLowerCase();var cV=cY.href.replace(cZ,c0);var cW=new RegExp("^(javascript|vbscript|jscript|mocha|livescript|ecmascript|mailto|tel):","i");if(!cW.test(cV)){var cT=cc(cY.className,cV,ak(c0,cU),Y.hasNodeAttribute(cY,"download"));
-if(cT){return{type:cT,href:cV}}}}function aF(cT,cU,cV,cW){var cX=t.buildInteractionRequestParams(cT,cU,cV,cW);if(!cX){return}return cb(cX,null,"contentInteraction")}function cq(cV,cW,c0,cT,cU){if(!G(cV)){return}if(aK(cV)){return cV}var cY=t.toAbsoluteUrl(cV);var cX="redirecturl="+r(cY)+"&";cX+=aF(cW,c0,cT,(cU||cV));var cZ="&";if(av.indexOf("?")<0){cZ="?"}return av+cZ+cX}function aZ(cT,cU){if(!cT||!cU){return false}var cV=t.findTargetNode(cT);if(t.shouldIgnoreInteraction(cV)){return false}cV=t.findTargetNodeNoDefault(cT);if(cV&&!R(cV,cU)){return false}return true}function cd(cV,cU,cX){if(!cV){return}var cT=t.findParentContentNode(cV);if(!cT){return}if(!aZ(cT,cV)){return}var cW=t.buildContentBlock(cT);if(!cW){return}if(!cW.target&&cX){cW.target=cX}return t.buildInteractionRequestParams(cU,cW.name,cW.piece,cW.target)}function aM(cU){if(!bS||!bS.length){return false}var cT,cV;for(cT=0;cT<bS.length;cT++){cV=bS[cT];if(cV&&cV.name===cU.name&&cV.piece===cU.piece&&cV.target===cU.target){return true
-}}return false}function bn(cW){if(!cW){return false}var cZ=t.findTargetNode(cW);if(!cZ||t.shouldIgnoreInteraction(cZ)){return false}var c0=cM(cZ);if(cK&&c0&&c0.type){return false}if(Y.isLinkElement(cZ)&&Y.hasNodeAttributeWithValue(cZ,"href")){var cT=String(Y.getAttributeValueFromNode(cZ,"href"));if(0===cT.indexOf("#")){return false}if(aK(cT)){return true}if(!t.isUrlToCurrentDomain(cT)){return false}var cX=t.buildContentBlock(cW);if(!cX){return}var cV=cX.name;var c1=cX.piece;var cY=cX.target;if(!Y.hasNodeAttributeWithValue(cZ,t.CONTENT_TARGET_ATTR)||cZ.wasContentTargetAttrReplaced){cZ.wasContentTargetAttrReplaced=true;cY=t.toAbsoluteUrl(cT);Y.setAnyAttribute(cZ,t.CONTENT_TARGET_ATTR,cY)}var cU=cq(cT,"click",cV,c1,cY);t.setHrefAttribute(cZ,cU);return true}return false}function aD(cU){if(!cU||!cU.length){return}var cT;for(cT=0;cT<cU.length;cT++){bn(cU[cT])}}function aO(cT){return function(cU){if(!cT){return}var cX=t.findParentContentNode(cT);var cY;if(cU){cY=cU.target||cU.srcElement}if(!cY){cY=cT
-}if(!aZ(cX,cY)){return}bY(bs);if(Y.isLinkElement(cT)&&Y.hasNodeAttributeWithValue(cT,"href")&&Y.hasNodeAttributeWithValue(cT,t.CONTENT_TARGET_ATTR)){var cV=Y.getAttributeValueFromNode(cT,"href");if(!aK(cV)&&cT.wasContentTargetAttrReplaced){Y.setAnyAttribute(cT,t.CONTENT_TARGET_ATTR,"")}}var c2=cM(cT);if(ai&&c2&&c2.type){return c2.type}if(bn(cX)){return"href"}var cZ=t.buildContentBlock(cX);if(!cZ){return}var cW=cZ.name;var c3=cZ.piece;var c1=cZ.target;var c0=aF("click",cW,c3,c1);bo(c0,bs);return c0}}function bJ(cV){if(!cV||!cV.length){return}var cT,cU;for(cT=0;cT<cV.length;cT++){cU=t.findTargetNode(cV[cT]);if(cU&&!cU.contentInteractionTrackingSetupDone){cU.contentInteractionTrackingSetupDone=true;ag(cU,"click",aO(cU))}}}function bi(cV,cW){if(!cV||!cV.length){return[]}var cT,cU;for(cT=0;cT<cV.length;cT++){if(aM(cV[cT])){cV.splice(cT,1);cT--}else{bS.push(cV[cT])}}if(!cV||!cV.length){return[]}aD(cW);bJ(cW);var cX=[];for(cT=0;cT<cV.length;cT++){cU=cb(t.buildImpressionRequestParams(cV[cT].name,cV[cT].piece,cV[cT].target),undefined,"contentImpressions");
-if(cU){cX.push(cU)}}return cX}function ch(cU){var cT=t.collectContent(cU);return bi(cT,cU)}function aX(cU){if(!cU||!cU.length){return[]}var cT;for(cT=0;cT<cU.length;cT++){if(!t.isNodeVisible(cU[cT])){cU.splice(cT,1);cT--}}if(!cU||!cU.length){return[]}return ch(cU)}function ax(cV,cT,cU){var cW=t.buildImpressionRequestParams(cV,cT,cU);return cb(cW,null,"contentImpression")}function cN(cW,cU){if(!cW){return}var cT=t.findParentContentNode(cW);var cV=t.buildContentBlock(cT);if(!cV){return}if(!cU){cU="Unknown"}return aF(cU,cV.name,cV.piece,cV.target)}function ct(cU,cW,cT,cV){return"e_c="+r(cU)+"&e_a="+r(cW)+(G(cT)?"&e_n="+r(cT):"")+(G(cV)?"&e_v="+r(cV):"")}function al(cV,cX,cT,cW,cZ,cY){if(String(cV).length===0||String(cX).length===0){return false}var cU=cb(ct(cV,cX,cT,cW),cZ,"event");bo(cU,bs,cY)}function bQ(cT,cW,cU,cX){var cV=cb("search="+r(cT)+(cW?"&search_cat="+r(cW):"")+(G(cU)?"&search_count="+cU:""),cX,"sitesearch");bo(cV,bs)}function cx(cT,cW,cV){var cU=cb("idgoal="+cT+(cW?"&revenue="+cW:""),cV,"goal");
-bo(cU,bs)}function cE(cW,cT,c0,cZ,cV){var cY=cT+"="+r(bK(cW));var cU=cd(cV,"click",cW);if(cU){cY+="&"+cU}var cX=cb(cY,c0,"link");bo(cX,bs,cZ)}function bC(cU,cT){if(cU!==""){return cU+cT.charAt(0).toUpperCase()+cT.slice(1)}return cT}function bZ(cY){var cX,cT,cW=["","webkit","ms","moz"],cV;if(!a1){for(cT=0;cT<cW.length;cT++){cV=cW[cT];if(Object.prototype.hasOwnProperty.call(D,bC(cV,"hidden"))){if(D[bC(cV,"visibilityState")]==="prerender"){cX=true}break}}}if(cX){ag(D,cV+"visibilitychange",function cU(){D.removeEventListener(cV+"visibilitychange",cU,false);cY()});return}cY()}function b1(cT){if(!cT){return}if(!Y.hasNodeAttribute(cT,"href")){return}var cU=Y.getAttributeValueFromNode(cT,"href");if(!cU||aK(cU)){return}cU=j(cU,an);if(cU.indexOf("?")>0){cU+="&"}else{cU+="?"}var cW=aN().uuid;var cV=aA();cU=C(cU,an,cW+cV);Y.setAnyAttribute(cT,"href",cU)}function ar(cW){var cX=Y.getAttributeValueFromNode(cW,"href");if(!cX){return false}cX=String(cX);var cU=cX.indexOf("//")===0||cX.indexOf("http://")===0||cX.indexOf("https://")===0;
-if(!cU){return false}var cT=cW.pathname||b3(cW.href);var cV=(cW.hostname||c(cW.href)).toLowerCase();if(ak(cV,cT)){if(!cn(cy,I(cV))){return true}return false}return false}function cm(cT){var cU=cM(cT);if(cU&&cU.type){cU.href=n(cU.href);cE(cU.href,cU.type,undefined,null,cT);return}if(cr){cT=am(cT);if(ar(cT)){b1(cT)}}}function ce(){return D.all&&!D.addEventListener}function cz(cT){var cV=cT.which;var cU=(typeof cT.button);if(!cV&&cU!=="undefined"){if(ce()){if(cT.button&1){cV=1}else{if(cT.button&2){cV=3}else{if(cT.button&4){cV=2}}}}else{if(cT.button===0||cT.button==="0"){cV=1}else{if(cT.button&1){cV=2}else{if(cT.button&2){cV=3}}}}}return cV}function bB(cT){switch(cz(cT)){case 1:return"left";case 2:return"middle";case 3:return"right"}}function aQ(cT){return cT.target||cT.srcElement}function at(cT){return function(cW){cW=cW||Q.event;var cV=bB(cW);var cX=aQ(cW);if(cW.type==="click"){var cU=false;if(cT&&cV==="middle"){cU=true}if(cX&&!cU){cm(cX)}}else{if(cW.type==="mousedown"){if(cV==="middle"&&cX){aH=cV;
-bl=cX}else{aH=bl=null}}else{if(cW.type==="mouseup"){if(cV===aH&&cX===bl){cm(cX)}aH=bl=null}else{if(cW.type==="contextmenu"){cm(cX)}}}}}}function aj(cV,cU){var cT=typeof cU;if(cT==="undefined"){cU=true}ag(cV,"click",at(cU),false);if(cU){ag(cV,"mouseup",at(cU),false);ag(cV,"mousedown",at(cU),false);ag(cV,"contextmenu",at(cU),false)}}function bm(cV,cX){ai=true;var cW,cU=aP(bk,"ignore"),cY=D.links,cT=null,cZ=null;if(cY){for(cW=0;cW<cY.length;cW++){cT=cY[cW];if(!cU.test(cT.className)){cZ=typeof cT.piwikTrackers;if("undefined"===cZ){cT.piwikTrackers=[]}if(-1===J(cT.piwikTrackers,cX)){cT.piwikTrackers.push(cX);aj(cT,cV)}}}}}function aI(cV,cX,cY){if(bX){return true}bX=true;var cZ=false;var cW,cU;function cT(){cZ=true}l(function(){function c0(c2){setTimeout(function(){if(!bX){return}cZ=false;cY.trackVisibleContentImpressions();c0(c2)},c2)}function c1(c2){setTimeout(function(){if(!bX){return}if(cZ){cZ=false;cY.trackVisibleContentImpressions()}c1(c2)},c2)}if(cV){cW=["scroll","resize"];for(cU=0;cU<cW.length;
-cU++){if(D.addEventListener){D.addEventListener(cW[cU],cT)}else{Q.attachEvent("on"+cW[cU],cT)}}c1(100)}if(cX&&cX>0){cX=parseInt(cX,10);c0(cX)}})}function cl(){var cU,cW,cX={pdf:"application/pdf",qt:"video/quicktime",realp:"audio/x-pn-realaudio-plugin",wma:"application/x-mplayer2",dir:"application/x-director",fla:"application/x-shockwave-flash",java:"application/x-java-vm",gears:"application/x-googlegears",ag:"application/x-silverlight"};if(!((new RegExp("MSIE")).test(g.userAgent))){if(g.mimeTypes&&g.mimeTypes.length){for(cU in cX){if(Object.prototype.hasOwnProperty.call(cX,cU)){cW=g.mimeTypes[cX[cU]];cJ[cU]=(cW&&cW.enabledPlugin)?"1":"0"}}}if(typeof navigator.javaEnabled!=="unknown"&&G(g.javaEnabled)&&g.javaEnabled()){cJ.java="1"}if(x(Q.GearsFactory)){cJ.gears="1"}cJ.cookie=bN()}var cV=parseInt(T.width,10);var cT=parseInt(T.height,10);cJ.res=parseInt(cV,10)+"x"+parseInt(cT,10)}cl();a4();aC();this.getVisitorId=function(){return aN().uuid};this.getVisitorInfo=function(){return cs()};this.getAttributionInfo=function(){return bv()
-};this.getAttributionCampaignName=function(){return bv()[0]};this.getAttributionCampaignKeyword=function(){return bv()[1]};this.getAttributionReferrerTimestamp=function(){return bv()[2]};this.getAttributionReferrerUrl=function(){return bv()[3]};this.setTrackerUrl=function(cT){av=cT};this.getTrackerUrl=function(){return av};this.getPiwikUrl=function(){return L(this.getTrackerUrl(),bq)};this.addTracker=function(cT,cV){if(!cV){throw new Error("A siteId must be given to add a new tracker")}if(!G(cT)||null===cT){cT=this.getTrackerUrl()}var cU=new N(cT,cV);F.push(cU);return cU};this.getSiteId=function(){return bO};this.setSiteId=function(cT){bL(cT)};this.setUserId=function(cT){if(!G(cT)||!cT.length){return}bj=cT;bx=bP(bj).substr(0,16)};this.getUserId=function(){return bj};this.setCustomData=function(cT,cU){if(S(cT)){ah=cT}else{if(!ah){ah={}}ah[cT]=cU}};this.getCustomData=function(){return ah};this.setCustomRequestProcessing=function(cT){bT=cT};this.appendToTrackingUrl=function(cT){cC=cT};this.getRequest=function(cT){return cb(cT)
-};this.addPlugin=function(cT,cU){a[cT]=cU};this.setCustomDimension=function(cT,cU){cT=parseInt(cT,10);if(cT>0){if(!G(cU)){cU=""}if(!u(cU)){cU=String(cU)}a8[cT]=cU}};this.getCustomDimension=function(cT){cT=parseInt(cT,10);if(cT>0&&Object.prototype.hasOwnProperty.call(a8,cT)){return a8[cT]}};this.deleteCustomDimension=function(cT){cT=parseInt(cT,10);if(cT>0){delete a8[cT]}};this.setCustomVariable=function(cU,cT,cX,cV){var cW;if(!G(cV)){cV="visit"}if(!G(cT)){return}if(!G(cX)){cX=""}if(cU>0){cT=!u(cT)?String(cT):cT;cX=!u(cX)?String(cX):cX;cW=[cT.slice(0,be),cX.slice(0,be)];if(cV==="visit"||cV===2){ck();aG[cU]=cW}else{if(cV==="page"||cV===3){bE[cU]=cW}else{if(cV==="event"){b4[cU]=cW}}}}};this.getCustomVariable=function(cU,cV){var cT;if(!G(cV)){cV="visit"}if(cV==="page"||cV===3){cT=bE[cU]}else{if(cV==="event"){cT=b4[cU]}else{if(cV==="visit"||cV===2){ck();cT=aG[cU]}}}if(!G(cT)||(cT&&cT[0]==="")){return false}return cT};this.deleteCustomVariable=function(cT,cU){if(this.getCustomVariable(cT,cU)){this.setCustomVariable(cT,"","",cU)
-}};this.deleteCustomVariables=function(cT){if(cT==="page"||cT===3){bE={}}else{if(cT==="event"){b4={}}else{if(cT==="visit"||cT===2){aG={}}}}};this.storeCustomVariablesInCookie=function(){bz=true};this.setLinkTrackingTimer=function(cT){bs=cT};this.getLinkTrackingTimer=function(){return bs};this.setDownloadExtensions=function(cT){if(u(cT)){cT=cT.split("|")}cI=cT};this.addDownloadExtensions=function(cU){var cT;if(u(cU)){cU=cU.split("|")}for(cT=0;cT<cU.length;cT++){cI.push(cU[cT])}};this.removeDownloadExtensions=function(cV){var cU,cT=[];if(u(cV)){cV=cV.split("|")}for(cU=0;cU<cI.length;cU++){if(J(cV,cI[cU])===-1){cT.push(cI[cU])}}cI=cT};this.setDomains=function(cT){ao=u(cT)?[cT]:cT;var cX=false,cV=0,cU;for(cV;cV<ao.length;cV++){cU=String(ao[cV]);if(cn(cy,I(cU))){cX=true;break}var cW=b3(cU);if(cW&&cW!=="/"&&cW!=="/*"){cX=true;break}}if(!cX){ao.push(cy)}};this.enableCrossDomainLinking=function(){cr=true};this.disableCrossDomainLinking=function(){cr=false};this.isCrossDomainLinkingEnabled=function(){return cr
-};this.setIgnoreClasses=function(cT){bk=u(cT)?[cT]:cT};this.setRequestMethod=function(cT){cL=cT||b0};this.setRequestContentType=function(cT){cf=cT||az};this.setReferrerUrl=function(cT){a9=cT};this.setCustomUrl=function(cT){aT=bD(bw,cT)};this.getCurrentUrl=function(){return aT||bw};this.setDocumentTitle=function(cT){a5=cT};this.setAPIUrl=function(cT){bq=cT};this.setDownloadClasses=function(cT){bu=u(cT)?[cT]:cT};this.setLinkClasses=function(cT){aW=u(cT)?[cT]:cT};this.setCampaignNameKey=function(cT){b9=u(cT)?[cT]:cT};this.setCampaignKeywordKey=function(cT){bp=u(cT)?[cT]:cT};this.discardHashTag=function(cT){by=cT};this.setCookieNamePrefix=function(cT){a6=cT;aG=bF()};this.setCookieDomain=function(cT){var cU=I(cT);if(bh(cU)){cA=cU;a4()}};this.getCookieDomain=function(){return cA};this.hasCookies=function(){return"1"===bN()};this.setSessionCookie=function(cV,cU,cT){if(!cV){throw new Error("Missing cookie name")}if(!G(cT)){cT=b7}bf.push(cV);cO(aJ(cV),cU,cT,bb,cA)};this.getCookie=function(cU){var cT=au(aJ(cU));
-if(cT===0){return null}return cT};this.setCookiePath=function(cT){bb=cT;a4()};this.getCookiePath=function(cT){return bb};this.setVisitorCookieTimeout=function(cT){cp=cT*1000};this.setSessionCookieTimeout=function(cT){b7=cT*1000};this.getSessionCookieTimeout=function(){return b7};this.setReferralCookieTimeout=function(cT){cH=cT*1000};this.setConversionAttributionFirstReferrer=function(cT){bg=cT};this.disableCookies=function(){a7=true;cJ.cookie="0";if(bO){aw()}};this.deleteCookies=function(){aw()};this.setDoNotTrack=function(cU){var cT=g.doNotTrack||g.msDoNotTrack;cu=cU&&(cT==="yes"||cT==="1");if(cu){this.disableCookies()}};this.addListener=function(cU,cT){aj(cU,cT)};this.enableLinkTracking=function(cU){cK=true;var cT=this;bZ(function(){o(function(){bm(cU,cT)})})};this.enableJSErrorTracking=function(){if(cw){return}cw=true;var cT=Q.onerror;Q.onerror=function(cY,cW,cV,cX,cU){bZ(function(){var cZ="JavaScript Errors";var c0=cW+":"+cV;if(cX){c0+=":"+cX}al(cZ,c0,cY)});if(cT){return cT(cY,cW,cV,cX,cU)
-}return false}};this.disablePerformanceTracking=function(){aR=false};this.setGenerationTimeMs=function(cT){b5=parseInt(cT,10)};this.enableHeartBeatTimer=function(cT){cT=Math.max(cT,1);aU=(cT||15)*1000;if(cB!==null){cQ()}};this.disableHeartBeatTimer=function(){bt();if(aU||aE){if(Q.removeEventListener){Q.removeEventListener("focus",aY,true);Q.removeEventListener("blur",ap,true)}else{if(Q.detachEvent){Q.detachEvent("onfocus",aY);Q.detachEvent("onblur",ap)}}}aU=null;aE=false};this.killFrame=function(){if(Q.location!==Q.top.location){Q.top.location=Q.location}};this.redirectFile=function(cT){if(Q.location.protocol==="file:"){Q.location=cT}};this.setCountPreRendered=function(cT){a1=cT};this.trackGoal=function(cT,cV,cU){bZ(function(){cx(cT,cV,cU)})};this.trackLink=function(cU,cT,cW,cV){bZ(function(){cE(cU,cT,cW,cV)})};this.getNumTrackedPageViews=function(){return ca};this.trackPageView=function(cT,cV,cU){bS=[];if(K(bO)){bZ(function(){U(av,bq,bO)})}else{bZ(function(){ca++;bI(cT,cV,cU)})}};this.trackAllContentImpressions=function(){if(K(bO)){return
-}bZ(function(){o(function(){var cT=t.findContentNodes();var cU=ch(cT);cP(cU,bs)})})};this.trackVisibleContentImpressions=function(cT,cU){if(K(bO)){return}if(!G(cT)){cT=true}if(!G(cU)){cU=750}aI(cT,cU,this);bZ(function(){l(function(){var cV=t.findContentNodes();var cW=aX(cV);cP(cW,bs)})})};this.trackContentImpression=function(cV,cT,cU){if(K(bO)){return}if(!cV){return}cT=cT||"Unknown";bZ(function(){var cW=ax(cV,cT,cU);bo(cW,bs)})};this.trackContentImpressionsWithinNode=function(cT){if(K(bO)||!cT){return}bZ(function(){if(bX){l(function(){var cU=t.findContentNodesWithinNode(cT);var cV=aX(cU);cP(cV,bs)})}else{o(function(){var cU=t.findContentNodesWithinNode(cT);var cV=ch(cU);cP(cV,bs)})}})};this.trackContentInteraction=function(cV,cW,cT,cU){if(K(bO)){return}if(!cV||!cW){return}cT=cT||"Unknown";bZ(function(){var cX=aF(cV,cW,cT,cU);bo(cX,bs)})};this.trackContentInteractionNode=function(cU,cT){if(K(bO)||!cU){return}bZ(function(){var cV=cN(cU,cT);bo(cV,bs)})};this.logAllContentBlocksOnPage=function(){var cV=t.findContentNodes();
-var cT=t.collectContent(cV);var cU=typeof console;if(cU!=="undefined"&&console&&console.log){console.log(cT)}};this.trackEvent=function(cU,cW,cT,cV,cY,cX){bZ(function(){al(cU,cW,cT,cV,cY,cX)})};this.trackSiteSearch=function(cT,cV,cU,cW){bZ(function(){bQ(cT,cV,cU,cW)})};this.setEcommerceView=function(cW,cT,cV,cU){if(!G(cV)||!cV.length){cV=""}else{if(cV instanceof Array){cV=JSON_PIWIK.stringify(cV)}}bE[5]=["_pkc",cV];if(G(cU)&&String(cU).length){bE[2]=["_pkp",cU]}if((!G(cW)||!cW.length)&&(!G(cT)||!cT.length)){return}if(G(cW)&&cW.length){bE[3]=["_pks",cW]}if(!G(cT)||!cT.length){cT=""}bE[4]=["_pkn",cT]};this.addEcommerceItem=function(cX,cT,cV,cU,cW){if(cX.length){cD[cX]=[cX,cT,cV,cU,cW]}};this.trackEcommerceOrder=function(cT,cX,cW,cV,cU,cY){bH(cT,cX,cW,cV,cU,cY)};this.trackEcommerceCartUpdate=function(cT){bd(cT)};this.trackRequest=function(cU,cW,cV,cT){bZ(function(){var cX=cb(cU,cW,cT);bo(cX,bs,cV)})};d.trigger("TrackerSetup",[this])}function E(){return{push:Z}}function b(am,al){var an={};var aj,ak;
-for(aj=0;aj<al.length;aj++){var ah=al[aj];an[ah]=1;for(ak=0;ak<am.length;ak++){if(am[ak]&&am[ak][0]){var ai=am[ak][0];if(ah===ai){Z(am[ak]);delete am[ak];if(an[ai]>1){ad("The method "+ai+' is registered more than once in "_paq" variable. Only the last call has an effect. Please have a look at the multiple Piwik trackers documentation: http://developer.piwik.org/guides/tracking-javascript-guide#multiple-piwik-trackers')}an[ai]++}}}}return am}var z=["addTracker","disableCookies","setTrackerUrl","setAPIUrl","enableCrossDomainLinking","setCookiePath","setCookieDomain","setDomains","setUserId","setSiteId","enableLinkTracking"];function X(ah,aj){var ai=new N(ah,aj);F.push(ai);_paq=b(_paq,z);for(B=0;B<_paq.length;B++){if(_paq[B]){Z(_paq[B])}}_paq=new E();return ai}ag(Q,"beforeunload",ab,false);Date.prototype.getTimeAlias=Date.prototype.getTime;d={initialized:false,JSON:JSON_PIWIK,DOM:{addEventListener:function(ak,aj,ai,ah){var al=typeof ah;if(al==="undefined"){ah=false}ag(ak,aj,ai,ah)},onLoad:l,onReady:o,isNodeVisible:i,isOrWasNodeVisible:t.isNodeVisible},on:function(ai,ah){if(!v[ai]){v[ai]=[]
-}v[ai].push(ah)},off:function(aj,ai){if(!v[aj]){return}var ah=0;for(ah;ah<v[aj].length;ah++){if(v[aj][ah]===ai){v[aj].splice(ah,1)}}},trigger:function(aj,ak,ai){if(!v[aj]){return}var ah=0;for(ah;ah<v[aj].length;ah++){v[aj][ah].apply(ai||Q,ak)}},addPlugin:function(ah,ai){a[ah]=ai},getTracker:function(ah,ai){if(!G(ai)){ai=this.getAsyncTracker().getSiteId()}if(!G(ah)){ah=this.getAsyncTracker().getTrackerUrl()}return new N(ah,ai)},getAsyncTrackers:function(){return F},addTracker:function(ah,ai){if(!F.length){X(ah,ai)}else{F[0].addTracker(ah,ai)}},getAsyncTracker:function(ai,al){var ak;if(F&&F.length&&F[0]){ak=F[0]}else{return X(ai,al)}if(!al&&!ai){return ak}if((!G(al)||null===al)&&ak){al=ak.getSiteId()}if((!G(ai)||null===ai)&&ak){ai=ak.getTrackerUrl()}var aj,ah=0;for(ah;ah<F.length;ah++){aj=F[ah];if(aj&&String(aj.getSiteId())===String(al)&&aj.getTrackerUrl()===ai){return aj}}},retryMissedPluginCalls:function(){var ai=aa;aa=[];var ah=0;for(ah;ah<ai.length;ah++){Z(ai[ah])}}};if(typeof define==="function"&&define.amd){define("piwik",[],function(){return d
-})}return d}());
+if(ad=="}"){break}if(ae){if(ad==","){ad=y();if(ad=="}"){H()}}else{H()}}if(ad==","||typeof ad!="string"||(F?ad.charAt(0):ad[0])!="@"||y()!=":"){H()}ac[ad.slice(1)]=W(y())}return ac}}H()}return ad};var P=function(ae,ad,af){var ac=w(ae,ad,af);if(ac===L){delete ae[ad]}else{ae[ad]=ac}};var w=function(af,ae,ag){var ad=af[ae],ac;if(typeof ad=="object"&&ad){if(u.call(ad)==E){for(ac=ad.length;ac--;){P(ad,ac,ag)}}else{m(ad,function(ah){P(ad,ah,ag)})}}return ag.call(af,ae,ad)};V.parse=function(ae,af){var ac,ad;G=0;X=""+ae;ac=W(y());if(y()!="$"){H()}G=X=null;return af&&u.call(af)==U?w((ad={},ad[""]=ac,ad),"",af):ac}}}V.runInContext=j;return V}if(h&&!c){j(i,h)}else{var f=i.JSON,k=i.JSON3,d=false;var g=j(i,(i.JSON3={noConflict:function(){if(!d){d=true;i.JSON=f;i.JSON3=k;f=k=null}return g}}));i.JSON={parse:g.parse,stringify:g.stringify}}if(c){define(function(){return g})}}).call(this);JSON_PIWIK=a})()}if(typeof _paq!=="object"){_paq=[]}if(typeof window.Piwik!=="object"){window.Piwik=(function(){var q,b={},w={},E=document,h=navigator,U=screen,R=window,i=R.performance||R.mozPerformance||R.msPerformance||R.webkitPerformance,s=R.encodeURIComponent,Q=R.decodeURIComponent,l=unescape,G=[],C,e,ab=[];
+function o(ai){try{return Q(ai)}catch(aj){return unescape(ai)}}function H(aj){var ai=typeof aj;return ai!=="undefined"}function y(ai){return typeof ai==="function"}function T(ai){return typeof ai==="object"}function v(ai){return typeof ai==="string"||ai instanceof String}function z(aj){if(!aj){return true}var ai;var ak=true;for(ai in aj){if(Object.prototype.hasOwnProperty.call(aj,ai)){ak=false}}return ak}function ae(ai){var aj=typeof console;if(aj!=="undefined"&&console&&console.error){console.error(ai)}}function aa(){var an,am,ap,aj,ai;for(an=0;an<arguments.length;an+=1){ai=null;if(arguments[an]&&arguments[an].slice){ai=arguments[an].slice()}aj=arguments[an];ap=aj.shift();var ao,ak;var al=v(ap)&&ap.indexOf("::")>0;if(al){ao=ap.split("::");ak=ao[0];ap=ao[1];if("object"===typeof e[ak]&&"function"===typeof e[ak][ap]){e[ak][ap].apply(e[ak],aj)}else{if(ai){ab.push(ai)}}}else{for(am=0;am<G.length;am++){if(v(ap)){ak=G[am];var aq=ap.indexOf(".")>0;if(aq){ao=ap.split(".");if(ak&&"object"===typeof ak[ao[0]]){ak=ak[ao[0]];
+ap=ao[1]}else{if(ai){ab.push(ai);break}}}if(ak[ap]){ak[ap].apply(ak,aj)}else{var ar="The method '"+ap+'\' was not found in "_paq" variable. Please have a look at the Piwik tracker documentation: http://developer.piwik.org/api-reference/tracking-javascript';ae(ar);if(!aq){throw new TypeError(ar)}}if(ap==="addTracker"){break}if(ap==="setTrackerUrl"||ap==="setSiteId"){break}}else{ap.apply(G[am],aj)}}}}}function ah(al,ak,aj,ai){if(al.addEventListener){al.addEventListener(ak,aj,ai);return true}if(al.attachEvent){return al.attachEvent("on"+ak,aj)}al["on"+ak]=aj}function m(ai){if(E.readyState==="complete"){ai()}else{if(R.addEventListener){R.addEventListener("load",ai)}else{if(R.attachEvent){R.attachEvent("onload",ai)}}}}function p(al){var ai=false;if(E.attachEvent){ai=E.readyState==="complete"}else{ai=E.readyState!=="loading"}if(ai){al();return}var ak;if(E.addEventListener){ah(E,"DOMContentLoaded",function aj(){E.removeEventListener("DOMContentLoaded",aj,false);if(!ai){ai=true;al()}})}else{if(E.attachEvent){E.attachEvent("onreadystatechange",function aj(){if(E.readyState==="complete"){E.detachEvent("onreadystatechange",aj);
+if(!ai){ai=true;al()}}});if(E.documentElement.doScroll&&R===R.top){(function aj(){if(!ai){try{E.documentElement.doScroll("left")}catch(am){setTimeout(aj,0);return}ai=true;al()}}())}}}ah(R,"load",function(){if(!ai){ai=true;al()}},false)}function X(aj,ao,ap){if(!aj){return""}var ai="",al,ak,am,an;for(al in b){if(Object.prototype.hasOwnProperty.call(b,al)){an=b[al]&&"function"===typeof b[al][aj];if(an){ak=b[al][aj];am=ak(ao||{},ap);if(am){ai+=am}}}}return ai}function ac(){var ai;X("unload");if(q){do{ai=new Date()}while(ai.getTimeAlias()<q)}}function n(ak,aj){var ai=E.createElement("script");ai.type="text/javascript";ai.src=ak;if(ai.readyState){ai.onreadystatechange=function(){var al=this.readyState;if(al==="loaded"||al==="complete"){ai.onreadystatechange=null;aj()}}}else{ai.onload=aj}E.getElementsByTagName("head")[0].appendChild(ai)}function I(){var ai="";try{ai=R.top.document.referrer}catch(ak){if(R.parent){try{ai=R.parent.document.referrer}catch(aj){ai=""}}}if(ai===""){ai=E.referrer}return ai
+}function r(ai){var ak=new RegExp("^([a-z]+):"),aj=ak.exec(ai);return aj?aj[1]:null}function d(ai){var ak=new RegExp("^(?:(?:https?|ftp):)/*(?:[^@]+@)?([^:/#]+)"),aj=ak.exec(ai);return aj?aj[1]:ai}function ad(aj,ai){aj=String(aj);return aj.lastIndexOf(ai,0)===0}function P(aj,ai){aj=String(aj);return aj.indexOf(ai,aj.length-ai.length)!==-1}function x(aj,ai){aj=String(aj);return aj.indexOf(ai)!==-1}function g(aj,ai){aj=String(aj);return aj.substr(0,aj.length-ai)}function D(al,ak,an){al=String(al);if(!an){an=""}var ai=al.indexOf("#");var ao=al.length;if(ai===-1){ai=ao}var am=al.substr(0,ai);var aj=al.substr(ai,ao-ai);if(am.indexOf("?")===-1){am+="?"}else{if(!P(am,"?")){am+="&"}}return am+s(ak)+"="+s(an)+aj}function k(aj,ak){aj=String(aj);if(aj.indexOf("?"+ak+"=")===-1&&aj.indexOf("&"+ak+"=")===-1){return aj}var al=aj.indexOf("?");if(al===-1){return aj}var ai=aj.substr(al+1);var ap=aj.substr(0,al);if(ai){var aq="";var at=ai.indexOf("#");if(at!==-1){aq=ai.substr(at+1);ai=ai.substr(0,at)}var am;
+var ao=ai.split("&");var an=ao.length-1;for(an;an>=0;an--){am=ao[an].split("=")[0];if(am===ak){ao.splice(an,1)}}var ar=ao.join("&");if(ar){ap=ap+"?"+ar}if(aq){ap+="#"+aq}}return ap}function f(ak,aj){var ai="[\\?&#]"+aj+"=([^&#]*)";var am=new RegExp(ai);var al=am.exec(ak);return al?Q(al[1]):""}function a(ai){if(ai&&String(ai)===ai){return ai.replace(/^\s+|\s+$/g,"")}return ai}function B(ai){return unescape(s(ai))}function ag(ay){var ak=function(aE,aD){return(aE<<aD)|(aE>>>(32-aD))},az=function(aG){var aE="",aF,aD;for(aF=7;aF>=0;aF--){aD=(aG>>>(aF*4))&15;aE+=aD.toString(16)}return aE},an,aB,aA,aj=[],ar=1732584193,ap=4023233417,ao=2562383102,am=271733878,al=3285377520,ax,aw,av,au,at,aC,ai,aq=[];ay=B(ay);ai=ay.length;for(aB=0;aB<ai-3;aB+=4){aA=ay.charCodeAt(aB)<<24|ay.charCodeAt(aB+1)<<16|ay.charCodeAt(aB+2)<<8|ay.charCodeAt(aB+3);aq.push(aA)}switch(ai&3){case 0:aB=2147483648;break;case 1:aB=ay.charCodeAt(ai-1)<<24|8388608;break;case 2:aB=ay.charCodeAt(ai-2)<<24|ay.charCodeAt(ai-1)<<16|32768;
+break;case 3:aB=ay.charCodeAt(ai-3)<<24|ay.charCodeAt(ai-2)<<16|ay.charCodeAt(ai-1)<<8|128;break}aq.push(aB);while((aq.length&15)!==14){aq.push(0)}aq.push(ai>>>29);aq.push((ai<<3)&4294967295);for(an=0;an<aq.length;an+=16){for(aB=0;aB<16;aB++){aj[aB]=aq[an+aB]}for(aB=16;aB<=79;aB++){aj[aB]=ak(aj[aB-3]^aj[aB-8]^aj[aB-14]^aj[aB-16],1)}ax=ar;aw=ap;av=ao;au=am;at=al;for(aB=0;aB<=19;aB++){aC=(ak(ax,5)+((aw&av)|(~aw&au))+at+aj[aB]+1518500249)&4294967295;at=au;au=av;av=ak(aw,30);aw=ax;ax=aC}for(aB=20;aB<=39;aB++){aC=(ak(ax,5)+(aw^av^au)+at+aj[aB]+1859775393)&4294967295;at=au;au=av;av=ak(aw,30);aw=ax;ax=aC}for(aB=40;aB<=59;aB++){aC=(ak(ax,5)+((aw&av)|(aw&au)|(av&au))+at+aj[aB]+2400959708)&4294967295;at=au;au=av;av=ak(aw,30);aw=ax;ax=aC}for(aB=60;aB<=79;aB++){aC=(ak(ax,5)+(aw^av^au)+at+aj[aB]+3395469782)&4294967295;at=au;au=av;av=ak(aw,30);aw=ax;ax=aC}ar=(ar+ax)&4294967295;ap=(ap+aw)&4294967295;ao=(ao+av)&4294967295;am=(am+au)&4294967295;al=(al+at)&4294967295}aC=az(ar)+az(ap)+az(ao)+az(am)+az(al);
+return aC.toLowerCase()}function W(ak,ai,aj){if(!ak){ak=""}if(!ai){ai=""}if(ak==="translate.googleusercontent.com"){if(aj===""){aj=ai}ai=f(ai,"u");ak=d(ai)}else{if(ak==="cc.bingj.com"||ak==="webcache.googleusercontent.com"||ak.slice(0,5)==="74.6."){ai=E.links[0].href;ak=d(ai)}}return[ak,ai,aj]}function J(aj){var ai=aj.length;if(aj.charAt(--ai)==="."){aj=aj.slice(0,ai)}if(aj.slice(0,2)==="*."){aj=aj.slice(1)}if(aj.indexOf("/")!==-1){aj=aj.substr(0,aj.indexOf("/"))}return aj}function af(aj){aj=aj&&aj.text?aj.text:aj;if(!v(aj)){var ai=E.getElementsByTagName("title");if(ai&&H(ai[0])){aj=ai[0].text}}return aj}function N(ai){if(!ai){return[]}if(!H(ai.children)&&H(ai.childNodes)){return ai.children}if(H(ai.children)){return ai.children}return[]}function S(aj,ai){if(!aj||!ai){return false}if(aj.contains){return aj.contains(ai)}if(aj===ai){return true}if(aj.compareDocumentPosition){return !!(aj.compareDocumentPosition(ai)&16)}return false}function K(ak,al){if(ak&&ak.indexOf){return ak.indexOf(al)
+}if(!H(ak)||ak===null){return -1}if(!ak.length){return -1}var ai=ak.length;if(ai===0){return -1}var aj=0;while(aj<ai){if(ak[aj]===al){return aj}aj++}return -1}function j(ak){if(!ak){return false}function ai(am,an){if(R.getComputedStyle){return E.defaultView.getComputedStyle(am,null)[an]}if(am.currentStyle){return am.currentStyle[an]}}function al(am){am=am.parentNode;while(am){if(am===E){return true}am=am.parentNode}return false}function aj(ao,av,am,ar,ap,at,aq){var an=ao.parentNode,au=1;if(!al(ao)){return false}if(9===an.nodeType){return true}if("0"===ai(ao,"opacity")||"none"===ai(ao,"display")||"hidden"===ai(ao,"visibility")){return false}if(!H(av)||!H(am)||!H(ar)||!H(ap)||!H(at)||!H(aq)){av=ao.offsetTop;ap=ao.offsetLeft;ar=av+ao.offsetHeight;am=ap+ao.offsetWidth;at=ao.offsetWidth;aq=ao.offsetHeight}if(ak===ao&&(0===aq||0===at)&&"hidden"===ai(ao,"overflow")){return false}if(an){if(("hidden"===ai(an,"overflow")||"scroll"===ai(an,"overflow"))){if(ap+au>an.offsetWidth+an.scrollLeft||ap+at-au<an.scrollLeft||av+au>an.offsetHeight+an.scrollTop||av+aq-au<an.scrollTop){return false
+}}if(ao.offsetParent===an){ap+=an.offsetLeft;av+=an.offsetTop}return aj(an,av,am,ar,ap,at,aq)}return true}return aj(ak)}var Z={htmlCollectionToArray:function(ak){var ai=[],aj;if(!ak||!ak.length){return ai}for(aj=0;aj<ak.length;aj++){ai.push(ak[aj])}return ai},find:function(ai){if(!document.querySelectorAll||!ai){return[]}var aj=document.querySelectorAll(ai);return this.htmlCollectionToArray(aj)},findMultiple:function(ak){if(!ak||!ak.length){return[]}var aj,al;var ai=[];for(aj=0;aj<ak.length;aj++){al=this.find(ak[aj]);ai=ai.concat(al)}ai=this.makeNodesUnique(ai);return ai},findNodesByTagName:function(aj,ai){if(!aj||!ai||!aj.getElementsByTagName){return[]}var ak=aj.getElementsByTagName(ai);return this.htmlCollectionToArray(ak)},makeNodesUnique:function(ai){var an=[].concat(ai);ai.sort(function(ap,ao){if(ap===ao){return 0}var ar=K(an,ap);var aq=K(an,ao);if(ar===aq){return 0}return ar>aq?-1:1});if(ai.length<=1){return ai}var aj=0;var al=0;var am=[];var ak;ak=ai[aj++];while(ak){if(ak===ai[aj]){al=am.push(aj)
+}ak=ai[aj++]||null}while(al--){ai.splice(am[al],1)}return ai},getAttributeValueFromNode:function(am,ak){if(!this.hasNodeAttribute(am,ak)){return}if(am&&am.getAttribute){return am.getAttribute(ak)}if(!am||!am.attributes){return}var al=(typeof am.attributes[ak]);if("undefined"===al){return}if(am.attributes[ak].value){return am.attributes[ak].value}if(am.attributes[ak].nodeValue){return am.attributes[ak].nodeValue}var aj;var ai=am.attributes;if(!ai){return}for(aj=0;aj<ai.length;aj++){if(ai[aj].nodeName===ak){return ai[aj].nodeValue}}return null},hasNodeAttributeWithValue:function(aj,ai){var ak=this.getAttributeValueFromNode(aj,ai);return !!ak},hasNodeAttribute:function(ak,ai){if(ak&&ak.hasAttribute){return ak.hasAttribute(ai)}if(ak&&ak.attributes){var aj=(typeof ak.attributes[ai]);return"undefined"!==aj}return false},hasNodeCssClass:function(ak,ai){if(ak&&ai&&ak.className){var aj=typeof ak.className==="string"?ak.className.split(" "):[];if(-1!==K(aj,ai)){return true}}return false},findNodesHavingAttribute:function(am,ak,ai){if(!ai){ai=[]
+}if(!am||!ak){return ai}var al=N(am);if(!al||!al.length){return ai}var aj,an;for(aj=0;aj<al.length;aj++){an=al[aj];if(this.hasNodeAttribute(an,ak)){ai.push(an)}ai=this.findNodesHavingAttribute(an,ak,ai)}return ai},findFirstNodeHavingAttribute:function(ak,aj){if(!ak||!aj){return}if(this.hasNodeAttribute(ak,aj)){return ak}var ai=this.findNodesHavingAttribute(ak,aj);if(ai&&ai.length){return ai[0]}},findFirstNodeHavingAttributeWithValue:function(al,ak){if(!al||!ak){return}if(this.hasNodeAttributeWithValue(al,ak)){return al}var ai=this.findNodesHavingAttribute(al,ak);if(!ai||!ai.length){return}var aj;for(aj=0;aj<ai.length;aj++){if(this.getAttributeValueFromNode(ai[aj],ak)){return ai[aj]}}},findNodesHavingCssClass:function(am,al,ai){if(!ai){ai=[]}if(!am||!al){return ai}if(am.getElementsByClassName){var an=am.getElementsByClassName(al);return this.htmlCollectionToArray(an)}var ak=N(am);if(!ak||!ak.length){return[]}var aj,ao;for(aj=0;aj<ak.length;aj++){ao=ak[aj];if(this.hasNodeCssClass(ao,al)){ai.push(ao)
+}ai=this.findNodesHavingCssClass(ao,al,ai)}return ai},findFirstNodeHavingClass:function(ak,aj){if(!ak||!aj){return}if(this.hasNodeCssClass(ak,aj)){return ak}var ai=this.findNodesHavingCssClass(ak,aj);if(ai&&ai.length){return ai[0]}},isLinkElement:function(aj){if(!aj){return false}var ai=String(aj.nodeName).toLowerCase();var al=["a","area"];var ak=K(al,ai);return ak!==-1},setAnyAttribute:function(aj,ai,ak){if(!aj||!ai){return}if(aj.setAttribute){aj.setAttribute(ai,ak)}else{aj[ai]=ak}}};var u={CONTENT_ATTR:"data-track-content",CONTENT_CLASS:"piwikTrackContent",CONTENT_NAME_ATTR:"data-content-name",CONTENT_PIECE_ATTR:"data-content-piece",CONTENT_PIECE_CLASS:"piwikContentPiece",CONTENT_TARGET_ATTR:"data-content-target",CONTENT_TARGET_CLASS:"piwikContentTarget",CONTENT_IGNOREINTERACTION_ATTR:"data-content-ignoreinteraction",CONTENT_IGNOREINTERACTION_CLASS:"piwikContentIgnoreInteraction",location:undefined,findContentNodes:function(){var aj="."+this.CONTENT_CLASS;var ai="["+this.CONTENT_ATTR+"]";
+var ak=Z.findMultiple([aj,ai]);return ak},findContentNodesWithinNode:function(al){if(!al){return[]}var aj=Z.findNodesHavingCssClass(al,this.CONTENT_CLASS);var ai=Z.findNodesHavingAttribute(al,this.CONTENT_ATTR);if(ai&&ai.length){var ak;for(ak=0;ak<ai.length;ak++){aj.push(ai[ak])}}if(Z.hasNodeAttribute(al,this.CONTENT_ATTR)){aj.push(al)}else{if(Z.hasNodeCssClass(al,this.CONTENT_CLASS)){aj.push(al)}}aj=Z.makeNodesUnique(aj);return aj},findParentContentNode:function(aj){if(!aj){return}var ak=aj;var ai=0;while(ak&&ak!==E&&ak.parentNode){if(Z.hasNodeAttribute(ak,this.CONTENT_ATTR)){return ak}if(Z.hasNodeCssClass(ak,this.CONTENT_CLASS)){return ak}ak=ak.parentNode;if(ai>1000){break}ai++}},findPieceNode:function(aj){var ai;ai=Z.findFirstNodeHavingAttribute(aj,this.CONTENT_PIECE_ATTR);if(!ai){ai=Z.findFirstNodeHavingClass(aj,this.CONTENT_PIECE_CLASS)}if(ai){return ai}return aj},findTargetNodeNoDefault:function(ai){if(!ai){return}var aj=Z.findFirstNodeHavingAttributeWithValue(ai,this.CONTENT_TARGET_ATTR);
+if(aj){return aj}aj=Z.findFirstNodeHavingAttribute(ai,this.CONTENT_TARGET_ATTR);if(aj){return aj}aj=Z.findFirstNodeHavingClass(ai,this.CONTENT_TARGET_CLASS);if(aj){return aj}},findTargetNode:function(ai){var aj=this.findTargetNodeNoDefault(ai);if(aj){return aj}return ai},findContentName:function(aj){if(!aj){return}var am=Z.findFirstNodeHavingAttributeWithValue(aj,this.CONTENT_NAME_ATTR);if(am){return Z.getAttributeValueFromNode(am,this.CONTENT_NAME_ATTR)}var ai=this.findContentPiece(aj);if(ai){return this.removeDomainIfIsInLink(ai)}if(Z.hasNodeAttributeWithValue(aj,"title")){return Z.getAttributeValueFromNode(aj,"title")}var ak=this.findPieceNode(aj);if(Z.hasNodeAttributeWithValue(ak,"title")){return Z.getAttributeValueFromNode(ak,"title")}var al=this.findTargetNode(aj);if(Z.hasNodeAttributeWithValue(al,"title")){return Z.getAttributeValueFromNode(al,"title")}},findContentPiece:function(aj){if(!aj){return}var al=Z.findFirstNodeHavingAttributeWithValue(aj,this.CONTENT_PIECE_ATTR);if(al){return Z.getAttributeValueFromNode(al,this.CONTENT_PIECE_ATTR)
+}var ai=this.findPieceNode(aj);var ak=this.findMediaUrlInNode(ai);if(ak){return this.toAbsoluteUrl(ak)}},findContentTarget:function(ak){if(!ak){return}var al=this.findTargetNode(ak);if(Z.hasNodeAttributeWithValue(al,this.CONTENT_TARGET_ATTR)){return Z.getAttributeValueFromNode(al,this.CONTENT_TARGET_ATTR)}var aj;if(Z.hasNodeAttributeWithValue(al,"href")){aj=Z.getAttributeValueFromNode(al,"href");return this.toAbsoluteUrl(aj)}var ai=this.findPieceNode(ak);if(Z.hasNodeAttributeWithValue(ai,"href")){aj=Z.getAttributeValueFromNode(ai,"href");return this.toAbsoluteUrl(aj)}},isSameDomain:function(ai){if(!ai||!ai.indexOf){return false}if(0===ai.indexOf(this.getLocation().origin)){return true}var aj=ai.indexOf(this.getLocation().host);if(8>=aj&&0<=aj){return true}return false},removeDomainIfIsInLink:function(ak){var aj="^https?://[^/]+";var ai="^.*//[^/]+";if(ak&&ak.search&&-1!==ak.search(new RegExp(aj))&&this.isSameDomain(ak)){ak=ak.replace(new RegExp(ai),"");if(!ak){ak="/"}}return ak},findMediaUrlInNode:function(am){if(!am){return
+}var ak=["img","embed","video","audio"];var ai=am.nodeName.toLowerCase();if(-1!==K(ak,ai)&&Z.findFirstNodeHavingAttributeWithValue(am,"src")){var al=Z.findFirstNodeHavingAttributeWithValue(am,"src");return Z.getAttributeValueFromNode(al,"src")}if(ai==="object"&&Z.hasNodeAttributeWithValue(am,"data")){return Z.getAttributeValueFromNode(am,"data")}if(ai==="object"){var an=Z.findNodesByTagName(am,"param");if(an&&an.length){var aj;for(aj=0;aj<an.length;aj++){if("movie"===Z.getAttributeValueFromNode(an[aj],"name")&&Z.hasNodeAttributeWithValue(an[aj],"value")){return Z.getAttributeValueFromNode(an[aj],"value")}}}var ao=Z.findNodesByTagName(am,"embed");if(ao&&ao.length){return this.findMediaUrlInNode(ao[0])}}},trim:function(ai){return a(ai)},isOrWasNodeInViewport:function(an){if(!an||!an.getBoundingClientRect||an.nodeType!==1){return true}var am=an.getBoundingClientRect();var al=E.documentElement||{};var ak=am.top<0;if(ak&&an.offsetTop){ak=(an.offsetTop+am.height)>0}var aj=al.clientWidth;if(R.innerWidth&&aj>R.innerWidth){aj=R.innerWidth
+}var ai=al.clientHeight;if(R.innerHeight&&ai>R.innerHeight){ai=R.innerHeight}return((am.bottom>0||ak)&&am.right>0&&am.left<aj&&((am.top<ai)||ak))},isNodeVisible:function(aj){var ai=j(aj);var ak=this.isOrWasNodeInViewport(aj);return ai&&ak},buildInteractionRequestParams:function(ai,aj,ak,al){var am="";if(ai){am+="c_i="+s(ai)}if(aj){if(am){am+="&"}am+="c_n="+s(aj)}if(ak){if(am){am+="&"}am+="c_p="+s(ak)}if(al){if(am){am+="&"}am+="c_t="+s(al)}return am},buildImpressionRequestParams:function(ai,aj,ak){var al="c_n="+s(ai)+"&c_p="+s(aj);if(ak){al+="&c_t="+s(ak)}return al},buildContentBlock:function(ak){if(!ak){return}var ai=this.findContentName(ak);var aj=this.findContentPiece(ak);var al=this.findContentTarget(ak);ai=this.trim(ai);aj=this.trim(aj);al=this.trim(al);return{name:ai||"Unknown",piece:aj||"Unknown",target:al||""}},collectContent:function(al){if(!al||!al.length){return[]}var ak=[];var ai,aj;for(ai=0;ai<al.length;ai++){aj=this.buildContentBlock(al[ai]);if(H(aj)){ak.push(aj)}}return ak
+},setLocation:function(ai){this.location=ai},getLocation:function(){var ai=this.location||R.location;if(!ai.origin){ai.origin=ai.protocol+"//"+ai.hostname+(ai.port?":"+ai.port:"")}return ai},toAbsoluteUrl:function(aj){if((!aj||String(aj)!==aj)&&aj!==""){return aj}if(""===aj){return this.getLocation().href}if(aj.search(/^\/\//)!==-1){return this.getLocation().protocol+aj}if(aj.search(/:\/\//)!==-1){return aj}if(0===aj.indexOf("#")){return this.getLocation().origin+this.getLocation().pathname+aj}if(0===aj.indexOf("?")){return this.getLocation().origin+this.getLocation().pathname+aj}if(0===aj.search("^[a-zA-Z]{2,11}:")){return aj}if(aj.search(/^\//)!==-1){return this.getLocation().origin+aj}var ai="(.*/)";var ak=this.getLocation().origin+this.getLocation().pathname.match(new RegExp(ai))[0];return ak+aj},isUrlToCurrentDomain:function(aj){var ak=this.toAbsoluteUrl(aj);if(!ak){return false}var ai=this.getLocation().origin;if(ai===ak){return true}if(0===String(ak).indexOf(ai)){if(":"===String(ak).substr(ai.length,1)){return false
+}return true}return false},setHrefAttribute:function(aj,ai){if(!aj||!ai){return}Z.setAnyAttribute(aj,"href",ai)},shouldIgnoreInteraction:function(ak){var aj=Z.hasNodeAttribute(ak,this.CONTENT_IGNOREINTERACTION_ATTR);var ai=Z.hasNodeCssClass(ak,this.CONTENT_IGNOREINTERACTION_CLASS);return aj||ai}};function M(aj,am){if(am){return am}aj=u.toAbsoluteUrl(aj);if(x(aj,"?")){var al=aj.indexOf("?");aj=aj.slice(0,al)}if(P(aj,"piwik.php")){aj=g(aj,"piwik.php".length)}else{if(P(aj,".php")){var ai=aj.lastIndexOf("/");var ak=1;aj=aj.slice(0,ai+ak)}}if(P(aj,"/js/")){aj=g(aj,"js/".length)}return aj}function L(ao){var aq="Piwik_Overlay";var aj=new RegExp("index\\.php\\?module=Overlay&action=startOverlaySession&idSite=([0-9]+)&period=([^&]+)&date=([^&]+)(&segment=.*)?$");var ak=aj.exec(E.referrer);if(ak){var am=ak[1];if(am!==String(ao)){return false}var an=ak[2],ai=ak[3],al=ak[4];if(!al){al=""}else{if(al.indexOf("&segment=")===0){al=al.substr("&segment=".length)}}R.name=aq+"###"+an+"###"+ai+"###"+al}var ap=R.name.split("###");
+return ap.length===4&&ap[0]===aq}function V(aj,ap,al){var ao=R.name.split("###"),an=ao[1],ai=ao[2],am=ao[3],ak=M(aj,ap);n(ak+"plugins/Overlay/client/client.js?v=1",function(){Piwik_Overlay_Client.initialize(ak,al,an,ai,am)})}function t(){var ak;try{ak=R.frameElement}catch(aj){return true}if(H(ak)){return(ak&&String(ak.nodeName).toLowerCase()==="iframe")?true:false}try{return R.self!==R.top}catch(ai){return true}}function O(bZ,bU){var bu=this,bP=W(E.domain,R.location.href,I()),cC=J(bP[0]),bz=o(bP[1]),bc=o(bP[2]),cA=false,b3="GET",cQ=b3,aA="application/x-www-form-urlencoded; charset=UTF-8",cj=aA,aw=bZ||"",bt="",cG="",bR=bU||"",bm="",bA="",aW,a8="",cN=["7z","aac","apk","arc","arj","asf","asx","avi","azw3","bin","csv","deb","dmg","doc","docx","epub","exe","flv","gif","gz","gzip","hqx","ibooks","jar","jpg","jpeg","js","mobi","mp2","mp3","mp4","mpg","mpeg","mov","movie","msi","msp","odb","odf","odg","ods","odt","ogg","ogv","pdf","phps","png","ppt","pptx","qt","qtm","ra","ram","rar","rpm","sea","sit","tar","tbz","tbz2","bz","bz2","tgz","torrent","txt","wav","wma","wmv","wpd","xls","xlsx","xml","z","zip"],ap=[cC],bn=[],bx=[],aZ=[],bv=500,cs,aX,bD,bB,ai,cd=["pk_campaign","piwik_campaign","utm_campaign","utm_source","utm_medium"],bs=["pk_kwd","piwik_kwd","utm_term"],a9="_pk_",ao="pk_vid",aR=180,cE,be,ba=false,cy,a4,bj,ct=33955200000,ca=1800000,cM=15768000000,aU=true,b8=0,bC=false,aH=false,bW,bH={},b7={},bb={},bh=200,cI={},cO={},bV=[],b0=false,cm=false,aj=false,cP=false,cv=false,aF=false,a3=t(),cF=null,bX,aI,bo,bS=ag,bd,aC,ce=0,bi=["id","ses","cvar","ref"],aL=false;
+try{a8=E.title}catch(ck){a8=""}function cT(c3,c1,c0,c2,cZ){if(ba){return}var cY;if(c0){cY=new Date();cY.setTime(cY.getTime()+c0)}E.cookie=c3+"="+s(c1)+(c0?";expires="+cY.toGMTString():"")+";path="+(c2||"/")+(cZ?";domain="+cZ:"")+(aL?";secure":"")}function cH(cY){aL=!!cY}function cb(){return aL}function av(c0){if(ba){return 0}var cY=new RegExp("(^|;)[ ]*"+c0+"=([^;]*)"),cZ=cY.exec(E.cookie);return cZ?Q(cZ[2]):0}function bN(cY){var cZ;cY=k(cY,ao);if(bB){cZ=new RegExp("#.*");return cY.replace(cZ,"")}return cY}function bG(c0,cY){var c1=r(cY),cZ;if(c1){return cY}if(cY.slice(0,1)==="/"){return r(c0)+"://"+d(c0)+cY}c0=bN(c0);cZ=c0.indexOf("?");if(cZ>=0){c0=c0.slice(0,cZ)}cZ=c0.lastIndexOf("/");if(cZ!==c0.length-1){c0=c0.slice(0,cZ+1)}return c0+cY}function cr(c0,cY){var cZ;c0=String(c0).toLowerCase();cY=String(cY).toLowerCase();if(c0===cY){return true}if(cY.slice(0,1)==="."){if(c0===cY.slice(1)){return true}cZ=c0.length-cY.length;if((cZ>0)&&(c0.slice(cZ)===cY)){return true}}return false}function b6(cY){var cZ=document.createElement("a");
+if(cY.indexOf("//")!==0&&cY.indexOf("http")!==0){if(cY.indexOf("*")===0){cY=cY.substr(1)}if(cY.indexOf(".")===0){cY=cY.substr(1)}cY="http://"+cY}cZ.href=u.toAbsoluteUrl(cY);if(cZ.pathname){return cZ.pathname}return""}function aV(cZ,cY){if(!ad(cY,"/")){cY="/"+cY}if(!ad(cZ,"/")){cZ="/"+cZ}var c0=(cY==="/"||cY==="/*");if(c0){return true}if(cZ===cY){return true}cY=String(cY).toLowerCase();cZ=String(cZ).toLowerCase();if(P(cY,"*")){cY=cY.slice(0,-1);c0=(!cY||cY==="/");if(c0){return true}if(cZ===cY){return true}return cZ.indexOf(cY)===0}if(!P(cZ,"/")){cZ+="/"}if(!P(cY,"/")){cY+="/"}return cZ.indexOf(cY)===0}function al(c2,c4){var cZ,cY,c0,c1,c3;for(cZ=0;cZ<ap.length;cZ++){c1=J(ap[cZ]);c3=b6(ap[cZ]);if(cr(c2,c1)&&aV(c4,c3)){return true}}return false}function aN(c1){var cZ,cY,c0;for(cZ=0;cZ<ap.length;cZ++){cY=J(ap[cZ].toLowerCase());if(c1===cY){return true}if(cY.slice(0,1)==="."){if(c1===cY.slice(1)){return true}c0=c1.length-cY.length;if((c0>0)&&(c1.slice(c0)===cY)){return true}}}return false}function cc(cY,c0){var cZ=new Image(1,1);
+cZ.onload=function(){C=0;if(typeof c0==="function"){c0()}};cY=cY.replace("send_image=0","send_image=1");cZ.src=aw+(aw.indexOf("?")<0?"?":"&")+cY}function cL(cZ,c2,cY){if(!H(cY)||null===cY){cY=true}try{var c1=R.XMLHttpRequest?new R.XMLHttpRequest():R.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):null;c1.open("POST",aw,true);c1.onreadystatechange=function(){if(this.readyState===4&&!(this.status>=200&&this.status<300)&&cY){cc(cZ,c2)}else{if(this.readyState===4&&(typeof c2==="function")){c2()}}};c1.setRequestHeader("Content-Type",cj);c1.send(cZ)}catch(c0){if(cY){cc(cZ,c2)}}}function b1(cZ){var cY=new Date();var c0=cY.getTime()+cZ;if(!q||c0>q){q=c0}}function b9(cY){if(bX||!aX){return}bX=setTimeout(function cZ(){bX=null;if(!a3){a3=(!E.hasFocus||E.hasFocus())}if(!a3){b9(aX);return}if(bD()){return}var c0=new Date(),c1=aX-(c0.getTime()-cF);c1=Math.min(aX,c1);b9(c1)},cY||aX)}function bw(){if(!bX){return}clearTimeout(bX);bX=null}function a1(){a3=true;if(bD()){return}b9()}function aq(){bw()}function cV(){if(aF||!aX){return
+}aF=true;ah(R,"focus",a1);ah(R,"blur",aq);b9()}function cn(c2){var cZ=new Date();var cY=cZ.getTime();cF=cY;if(cm&&cY<cm){var c0=cm-cY;setTimeout(c2,c0);b1(c0+50);cm+=50;return}if(cm===false){var c1=800;cm=cY+c1}c2()}function br(cZ,cY,c0){if(!cy&&cZ){cn(function(){if(cQ==="POST"||String(cZ).length>2000){cL(cZ,c0)}else{cc(cZ,c0)}b1(cY)})}if(!aF){cV()}else{b9()}}function b5(cY){if(cy){return false}return(cY&&cY.length)}function cU(c0,cY){if(!b5(c0)){return}var cZ='{"requests":["?'+c0.join('","?')+'"]}';cn(function(){cL(cZ,null,false);b1(cY)})}function aK(cY){return a9+cY+"."+bR+"."+bd}function bQ(){if(ba){return"0"}if(!H(h.cookieEnabled)){var cY=aK("testcookie");cT(cY,"1");return av(cY)==="1"?"1":"0"}return h.cookieEnabled?"1":"0"}function a7(){bd=bS((cE||cC)+(be||"/")).slice(0,4)}function bI(){var cZ=aK("cvar"),cY=av(cZ);if(cY.length){cY=JSON_PIWIK.parse(cY);if(T(cY)){return cY}}return{}}function co(){if(aH===false){aH=bI()}}function cz(){return bS((h.userAgent||"")+(h.platform||"")+JSON_PIWIK.stringify(cO)+(new Date()).getTime()+Math.random()).slice(0,16)
+}function ar(){return bS((h.userAgent||"")+(h.platform||"")+JSON_PIWIK.stringify(cO)).slice(0,6)}function a5(){return Math.floor((new Date()).getTime()/1000)}function aB(){var cZ=a5();var c0=ar();var cY=String(cZ)+c0;return cY}function cK(c0){c0=String(c0);var c3=ar();var c1=c3.length;var c2=c0.substr(-1*c1,c1);var cZ=parseInt(c0.substr(0,c0.length-c1),10);if(cZ&&c2&&c2===c3){var cY=a5();if(aR<=0){return true}if(cY>=cZ&&cY<=(cZ+aR)){return true}}return false}function cW(cY){if(!cv){return""}var c2=f(cY,ao);if(!c2){return""}c2=String(c2);var c0=new RegExp("^[a-zA-Z0-9]+$");if(c2.length===32&&c0.test(c2)){var cZ=c2.substr(16,32);if(cK(cZ)){var c1=c2.substr(0,16);return c1}}return""}function cw(){if(!bA){bA=cW(bz)}var c0=new Date(),cY=Math.round(c0.getTime()/1000),cZ=aK("id"),c3=av(cZ),c2,c1;if(c3){c2=c3.split(".");c2.unshift("0");if(bA.length){c2[1]=bA}return c2}if(bA.length){c1=bA}else{if("0"===bQ()){c1=""}else{c1=cz()}}c2=["1",c1,cY,0,cY,"",""];return c2}function aP(){var c5=cw(),c1=c5[0],c2=c5[1],cZ=c5[2],cY=c5[3],c3=c5[4],c0=c5[5];
+if(!H(c5[6])){c5[6]=""}var c4=c5[6];return{newVisitor:c1,uuid:c2,createTs:cZ,visitCount:cY,currentVisitTs:c3,lastVisitTs:c0,lastEcommerceOrderTs:c4}}function az(){var c1=new Date(),cZ=c1.getTime(),c2=aP().createTs;var cY=parseInt(c2,10);var c0=(cY*1000)+ct-cZ;return c0}function aD(cY){if(!bR){return}var c0=new Date(),cZ=Math.round(c0.getTime()/1000);if(!H(cY)){cY=aP()}var c1=cY.uuid+"."+cY.createTs+"."+cY.visitCount+"."+cZ+"."+cY.lastVisitTs+"."+cY.lastEcommerceOrderTs;cT(aK("id"),c1,az(),be,cE)}function by(){var cY=av(aK("ref"));if(cY.length){try{cY=JSON_PIWIK.parse(cY);if(T(cY)){return cY}}catch(cZ){}}return["","",0,""]}function bJ(c0,cZ,cY){cT(c0,"",-86400,cZ,cY)}function bk(cZ){var cY="testvalue";cT("test",cY,10000,null,cZ);if(av("test")===cY){bJ("test",null,cZ);return true}return false}function ax(){var cZ=ba;ba=false;var cY,c0;for(cY=0;cY<bi.length;cY++){c0=aK(bi[cY]);if(0!==av(c0)){bJ(c0,be,cE)}}ba=cZ}function bO(cY){bR=cY;aD()}function cX(c2){if(!c2||!T(c2)){return}var c1=[];var c0;
+for(c0 in c2){if(Object.prototype.hasOwnProperty.call(c2,c0)){c1.push(c0)}}var c3={};c1.sort();var cY=c1.length;var cZ;for(cZ=0;cZ<cY;cZ++){c3[c1[cZ]]=c2[c1[cZ]]}return c3}function bY(){cT(aK("ses"),"*",ca,be,cE)}function a6(){var c1="";var cZ="abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";var c0=cZ.length;var cY;for(cY=0;cY<6;cY++){c1+=cZ.charAt(Math.floor(Math.random()*c0))}return c1}function cf(c0,dl,dm,c1){var dk,cZ=new Date(),c8=Math.round(cZ.getTime()/1000),c5,dj,c2=1024,ds,c9,dh=aH,c3=aK("ses"),df=aK("ref"),dc=aK("cvar"),dd=av(c3),di=by(),dp=aW||bz,c6,cY;if(ba){ax()}if(cy){return""}var de=aP();if(!H(c1)){c1=""}var db=E.characterSet||E.charset;if(!db||db.toLowerCase()==="utf-8"){db=null}c6=di[0];cY=di[1];c5=di[2];dj=di[3];if(!dd){var dn=ca/1000;if(!de.lastVisitTs||(c8-de.lastVisitTs)>dn){de.visitCount++;de.lastVisitTs=de.currentVisitTs}if(!bj||!c6.length){for(dk in cd){if(Object.prototype.hasOwnProperty.call(cd,dk)){c6=f(dp,cd[dk]);if(c6.length){break}}}for(dk in bs){if(Object.prototype.hasOwnProperty.call(bs,dk)){cY=f(dp,bs[dk]);
+if(cY.length){break}}}}ds=d(bc);c9=dj.length?d(dj):"";if(ds.length&&!aN(ds)&&(!bj||!c9.length||aN(c9))){dj=bc}if(dj.length||c6.length){c5=c8;di=[c6,cY,c5,bN(dj.slice(0,c2))];cT(df,JSON_PIWIK.stringify(di),cM,be,cE)}}c0+="&idsite="+bR+"&rec=1&r="+String(Math.random()).slice(2,8)+"&h="+cZ.getHours()+"&m="+cZ.getMinutes()+"&s="+cZ.getSeconds()+"&url="+s(bN(dp))+(bc.length?"&urlref="+s(bN(bc)):"")+((bm&&bm.length)?"&uid="+s(bm):"")+"&_id="+de.uuid+"&_idts="+de.createTs+"&_idvc="+de.visitCount+"&_idn="+de.newVisitor+(c6.length?"&_rcn="+s(c6):"")+(cY.length?"&_rck="+s(cY):"")+"&_refts="+c5+"&_viewts="+de.lastVisitTs+(String(de.lastEcommerceOrderTs).length?"&_ects="+de.lastEcommerceOrderTs:"")+(String(dj).length?"&_ref="+s(bN(dj.slice(0,c2))):"")+(db?"&cs="+s(db):"")+"&send_image=0";for(dk in cO){if(Object.prototype.hasOwnProperty.call(cO,dk)){c0+="&"+dk+"="+cO[dk]}}var dr=[];if(dl){for(dk in dl){if(Object.prototype.hasOwnProperty.call(dl,dk)&&/^dimension\d+$/.test(dk)){var c4=dk.replace("dimension","");
+dr.push(parseInt(c4,10));dr.push(String(c4));c0+="&"+dk+"="+dl[dk];delete dl[dk]}}}if(dl&&z(dl)){dl=null}for(dk in bb){if(Object.prototype.hasOwnProperty.call(bb,dk)){var da=(-1===K(dr,dk));if(da){c0+="&dimension"+dk+"="+bb[dk]}}}if(dl){c0+="&data="+s(JSON_PIWIK.stringify(dl))}else{if(ai){c0+="&data="+s(JSON_PIWIK.stringify(ai))}}function c7(dt,du){var dv=JSON_PIWIK.stringify(dt);if(dv.length>2){return"&"+du+"="+s(dv)}return""}var dq=cX(bH);var dg=cX(b7);c0+=c7(dq,"cvar");c0+=c7(dg,"e_cvar");if(aH){c0+=c7(aH,"_cvar");for(dk in dh){if(Object.prototype.hasOwnProperty.call(dh,dk)){if(aH[dk][0]===""||aH[dk][1]===""){delete aH[dk]}}}if(bC){cT(dc,JSON_PIWIK.stringify(aH),ca,be,cE)}}if(aU){if(b8){c0+="&gt_ms="+b8}else{if(i&&i.timing&&i.timing.requestStart&&i.timing.responseEnd){c0+="&gt_ms="+(i.timing.responseEnd-i.timing.requestStart)}}}if(aC){c0+="&pv_id="+aC}de.lastEcommerceOrderTs=H(c1)&&String(c1).length?c1:de.lastEcommerceOrderTs;aD(de);bY();c0+=X(dm,{tracker:bu,request:c0});if(cG.length){c0+="&"+cG
+}if(y(bW)){c0=bW(c0)}return c0}bD=function aY(){var cY=new Date();if(cF+aX<=cY.getTime()){var cZ=cf("ping=1",null,"ping");br(cZ,bv);return true}return false};function bf(c1,c0,c6,c2,cY,c9){var c4="idgoal=0",c5,cZ=new Date(),c7=[],c8,c3=String(c1).length;if(c3){c4+="&ec_id="+s(c1);c5=Math.round(cZ.getTime()/1000)}c4+="&revenue="+c0;if(String(c6).length){c4+="&ec_st="+c6}if(String(c2).length){c4+="&ec_tx="+c2}if(String(cY).length){c4+="&ec_sh="+cY}if(String(c9).length){c4+="&ec_dt="+c9}if(cI){for(c8 in cI){if(Object.prototype.hasOwnProperty.call(cI,c8)){if(!H(cI[c8][1])){cI[c8][1]=""}if(!H(cI[c8][2])){cI[c8][2]=""}if(!H(cI[c8][3])||String(cI[c8][3]).length===0){cI[c8][3]=0}if(!H(cI[c8][4])||String(cI[c8][4]).length===0){cI[c8][4]=1}c7.push(cI[c8])}}c4+="&ec_items="+s(JSON_PIWIK.stringify(c7))}c4=cf(c4,ai,"ecommerce",c5);br(c4,bv);if(c3){cI={}}}function bK(cY,c2,c1,c0,cZ,c3){if(String(cY).length&&H(c2)){bf(cY,c2,c1,c0,cZ,c3)}}function bg(cY){if(H(cY)){bf("",cY,"","","","")}}function bL(cZ,c1,c0){aC=a6();
+var cY=cf("action_name="+s(af(cZ||a8)),c1,"log");br(cY,bv,c0)}function aS(c0,cZ){var c1,cY="(^| )(piwik[_-]"+cZ;if(c0){for(c1=0;c1<c0.length;c1++){cY+="|"+c0[c1]}}cY+=")( |$)";return new RegExp(cY)}function aM(cY){return(aw&&cY&&0===String(cY).indexOf(aw))}function cg(c2,cY,c3,cZ){if(aM(cY)){return 0}var c1=aS(bx,"download"),c0=aS(aZ,"link"),c4=new RegExp("\\.("+cN.join("|")+")([?&#]|$)","i");if(c0.test(c2)){return"link"}if(cZ||c1.test(c2)||c4.test(cY)){return"download"}if(c3){return 0}return"link"}function an(cZ){var cY;cY=cZ.parentNode;while(cY!==null&&H(cY)){if(Z.isLinkElement(cZ)){break}cZ=cY;cY=cZ.parentNode}return cZ}function cS(c3){c3=an(c3);if(!Z.hasNodeAttribute(c3,"href")){return}if(!H(c3.href)){return}var c2=Z.getAttributeValueFromNode(c3,"href");if(aM(c2)){return}var cZ=c3.pathname||b6(c3.href);var c4=c3.hostname||d(c3.href);var c5=c4.toLowerCase();var c0=c3.href.replace(c4,c5);var c1=new RegExp("^(javascript|vbscript|jscript|mocha|livescript|ecmascript|mailto|tel):","i");if(!c1.test(c0)){var cY=cg(c3.className,c0,al(c5,cZ),Z.hasNodeAttribute(c3,"download"));
+if(cY){return{type:cY,href:c0}}}}function aG(cY,cZ,c0,c1){var c2=u.buildInteractionRequestParams(cY,cZ,c0,c1);if(!c2){return}return cf(c2,null,"contentInteraction")}function cu(c0,c1,c5,cY,cZ){if(!H(c0)){return}if(aM(c0)){return c0}var c3=u.toAbsoluteUrl(c0);var c2="redirecturl="+s(c3)+"&";c2+=aG(c1,c5,cY,(cZ||c0));var c4="&";if(aw.indexOf("?")<0){c4="?"}return aw+c4+c2}function a2(cY,cZ){if(!cY||!cZ){return false}var c0=u.findTargetNode(cY);if(u.shouldIgnoreInteraction(c0)){return false}c0=u.findTargetNodeNoDefault(cY);if(c0&&!S(c0,cZ)){return false}return true}function ch(c0,cZ,c2){if(!c0){return}var cY=u.findParentContentNode(c0);if(!cY){return}if(!a2(cY,c0)){return}var c1=u.buildContentBlock(cY);if(!c1){return}if(!c1.target&&c2){c1.target=c2}return u.buildInteractionRequestParams(cZ,c1.name,c1.piece,c1.target)}function aO(cZ){if(!bV||!bV.length){return false}var cY,c0;for(cY=0;cY<bV.length;cY++){c0=bV[cY];if(c0&&c0.name===cZ.name&&c0.piece===cZ.piece&&c0.target===cZ.target){return true
+}}return false}function bq(c1){if(!c1){return false}var c4=u.findTargetNode(c1);if(!c4||u.shouldIgnoreInteraction(c4)){return false}var c5=cS(c4);if(cP&&c5&&c5.type){return false}if(Z.isLinkElement(c4)&&Z.hasNodeAttributeWithValue(c4,"href")){var cY=String(Z.getAttributeValueFromNode(c4,"href"));if(0===cY.indexOf("#")){return false}if(aM(cY)){return true}if(!u.isUrlToCurrentDomain(cY)){return false}var c2=u.buildContentBlock(c1);if(!c2){return}var c0=c2.name;var c6=c2.piece;var c3=c2.target;if(!Z.hasNodeAttributeWithValue(c4,u.CONTENT_TARGET_ATTR)||c4.wasContentTargetAttrReplaced){c4.wasContentTargetAttrReplaced=true;c3=u.toAbsoluteUrl(cY);Z.setAnyAttribute(c4,u.CONTENT_TARGET_ATTR,c3)}var cZ=cu(cY,"click",c0,c6,c3);u.setHrefAttribute(c4,cZ);return true}return false}function aE(cZ){if(!cZ||!cZ.length){return}var cY;for(cY=0;cY<cZ.length;cY++){bq(cZ[cY])}}function aQ(cY){return function(cZ){if(!cY){return}var c2=u.findParentContentNode(cY);var c3;if(cZ){c3=cZ.target||cZ.srcElement}if(!c3){c3=cY
+}if(!a2(c2,c3)){return}b1(bv);if(Z.isLinkElement(cY)&&Z.hasNodeAttributeWithValue(cY,"href")&&Z.hasNodeAttributeWithValue(cY,u.CONTENT_TARGET_ATTR)){var c0=Z.getAttributeValueFromNode(cY,"href");if(!aM(c0)&&cY.wasContentTargetAttrReplaced){Z.setAnyAttribute(cY,u.CONTENT_TARGET_ATTR,"")}}var c7=cS(cY);if(aj&&c7&&c7.type){return c7.type}if(bq(c2)){return"href"}var c4=u.buildContentBlock(c2);if(!c4){return}var c1=c4.name;var c8=c4.piece;var c6=c4.target;var c5=aG("click",c1,c8,c6);br(c5,bv);return c5}}function bM(c0){if(!c0||!c0.length){return}var cY,cZ;for(cY=0;cY<c0.length;cY++){cZ=u.findTargetNode(c0[cY]);if(cZ&&!cZ.contentInteractionTrackingSetupDone){cZ.contentInteractionTrackingSetupDone=true;ah(cZ,"click",aQ(cZ))}}}function bl(c0,c1){if(!c0||!c0.length){return[]}var cY,cZ;for(cY=0;cY<c0.length;cY++){if(aO(c0[cY])){c0.splice(cY,1);cY--}else{bV.push(c0[cY])}}if(!c0||!c0.length){return[]}aE(c1);bM(c1);var c2=[];for(cY=0;cY<c0.length;cY++){cZ=cf(u.buildImpressionRequestParams(c0[cY].name,c0[cY].piece,c0[cY].target),undefined,"contentImpressions");
+if(cZ){c2.push(cZ)}}return c2}function cl(cZ){var cY=u.collectContent(cZ);return bl(cY,cZ)}function a0(cZ){if(!cZ||!cZ.length){return[]}var cY;for(cY=0;cY<cZ.length;cY++){if(!u.isNodeVisible(cZ[cY])){cZ.splice(cY,1);cY--}}if(!cZ||!cZ.length){return[]}return cl(cZ)}function ay(c0,cY,cZ){var c1=u.buildImpressionRequestParams(c0,cY,cZ);return cf(c1,null,"contentImpression")}function cR(c1,cZ){if(!c1){return}var cY=u.findParentContentNode(c1);var c0=u.buildContentBlock(cY);if(!c0){return}if(!cZ){cZ="Unknown"}return aG(cZ,c0.name,c0.piece,c0.target)}function cx(cZ,c1,cY,c0){return"e_c="+s(cZ)+"&e_a="+s(c1)+(H(cY)?"&e_n="+s(cY):"")+(H(c0)?"&e_v="+s(c0):"")}function am(c0,c2,cY,c1,c4,c3){if(a(String(c0)).length===0||a(String(c2)).length===0){ae("Error while logging event: Parameters `category` and `action` must not be empty or filled with whitespaces");return false}var cZ=cf(cx(c0,c2,cY,c1),c4,"event");br(cZ,bv,c3)}function bT(cY,c1,cZ,c2){var c0=cf("search="+s(cY)+(c1?"&search_cat="+s(c1):"")+(H(cZ)?"&search_count="+cZ:""),c2,"sitesearch");
+br(c0,bv)}function cB(cY,c1,c0){var cZ=cf("idgoal="+cY+(c1?"&revenue="+c1:""),c0,"goal");br(cZ,bv)}function cJ(c1,cY,c5,c4,c0){var c3=cY+"="+s(bN(c1));var cZ=ch(c0,"click",c1);if(cZ){c3+="&"+cZ}var c2=cf(c3,c5,"link");br(c2,bv,c4)}function bF(cZ,cY){if(cZ!==""){return cZ+cY.charAt(0).toUpperCase()+cY.slice(1)}return cY}function b2(c3){var c2,cY,c1=["","webkit","ms","moz"],c0;if(!a4){for(cY=0;cY<c1.length;cY++){c0=c1[cY];if(Object.prototype.hasOwnProperty.call(E,bF(c0,"hidden"))){if(E[bF(c0,"visibilityState")]==="prerender"){c2=true}break}}}if(c2){ah(E,c0+"visibilitychange",function cZ(){E.removeEventListener(c0+"visibilitychange",cZ,false);c3()});return}c3()}function b4(cY){if(!cY){return}if(!Z.hasNodeAttribute(cY,"href")){return}var cZ=Z.getAttributeValueFromNode(cY,"href");if(!cZ||aM(cZ)){return}cZ=k(cZ,ao);if(cZ.indexOf("?")>0){cZ+="&"}else{cZ+="?"}var c1=aP().uuid;var c0=aB();cZ=D(cZ,ao,c1+c0);Z.setAnyAttribute(cY,"href",cZ)}function at(c1){var c2=Z.getAttributeValueFromNode(c1,"href");
+if(!c2){return false}c2=String(c2);var cZ=c2.indexOf("//")===0||c2.indexOf("http://")===0||c2.indexOf("https://")===0;if(!cZ){return false}var cY=c1.pathname||b6(c1.href);var c0=(c1.hostname||d(c1.href)).toLowerCase();if(al(c0,cY)){if(!cr(cC,J(c0))){return true}return false}return false}function cq(cY){var cZ=cS(cY);if(cZ&&cZ.type){cZ.href=o(cZ.href);cJ(cZ.href,cZ.type,undefined,null,cY);return}if(cv){cY=an(cY);if(at(cY)){b4(cY)}}}function ci(){return E.all&&!E.addEventListener}function cD(cY){var c0=cY.which;var cZ=(typeof cY.button);if(!c0&&cZ!=="undefined"){if(ci()){if(cY.button&1){c0=1}else{if(cY.button&2){c0=3}else{if(cY.button&4){c0=2}}}}else{if(cY.button===0||cY.button==="0"){c0=1}else{if(cY.button&1){c0=2}else{if(cY.button&2){c0=3}}}}}return c0}function bE(cY){switch(cD(cY)){case 1:return"left";case 2:return"middle";case 3:return"right"}}function aT(cY){return cY.target||cY.srcElement}function au(cY){return function(c1){c1=c1||R.event;var c0=bE(c1);var c2=aT(c1);if(c1.type==="click"){var cZ=false;
+if(cY&&c0==="middle"){cZ=true}if(c2&&!cZ){cq(c2)}}else{if(c1.type==="mousedown"){if(c0==="middle"&&c2){aI=c0;bo=c2}else{aI=bo=null}}else{if(c1.type==="mouseup"){if(c0===aI&&c2===bo){cq(c2)}aI=bo=null}else{if(c1.type==="contextmenu"){cq(c2)}}}}}}function ak(c0,cZ){var cY=typeof cZ;if(cY==="undefined"){cZ=true}ah(c0,"click",au(cZ),false);if(cZ){ah(c0,"mouseup",au(cZ),false);ah(c0,"mousedown",au(cZ),false);ah(c0,"contextmenu",au(cZ),false)}}function bp(c0,c2){aj=true;var c1,cZ=aS(bn,"ignore"),c3=E.links,cY=null,c4=null;if(c3){for(c1=0;c1<c3.length;c1++){cY=c3[c1];if(!cZ.test(cY.className)){c4=typeof cY.piwikTrackers;if("undefined"===c4){cY.piwikTrackers=[]}if(-1===K(cY.piwikTrackers,c2)){cY.piwikTrackers.push(c2);ak(cY,c0)}}}}}function aJ(cZ,c2,c3){if(b0){return true}b0=true;var c4=false;var c1,c0;function cY(){c4=true}m(function(){function c5(c7){setTimeout(function(){if(!b0){return}c4=false;c3.trackVisibleContentImpressions();c5(c7)},c7)}function c6(c7){setTimeout(function(){if(!b0){return
+}if(c4){c4=false;c3.trackVisibleContentImpressions()}c6(c7)},c7)}if(cZ){c1=["scroll","resize"];for(c0=0;c0<c1.length;c0++){if(E.addEventListener){E.addEventListener(c1[c0],cY)}else{R.attachEvent("on"+c1[c0],cY)}}c6(100)}if(c2&&c2>0){c2=parseInt(c2,10);c5(c2)}})}function cp(){var cZ,c1,c2={pdf:"application/pdf",qt:"video/quicktime",realp:"audio/x-pn-realaudio-plugin",wma:"application/x-mplayer2",dir:"application/x-director",fla:"application/x-shockwave-flash",java:"application/x-java-vm",gears:"application/x-googlegears",ag:"application/x-silverlight"};if(!((new RegExp("MSIE")).test(h.userAgent))){if(h.mimeTypes&&h.mimeTypes.length){for(cZ in c2){if(Object.prototype.hasOwnProperty.call(c2,cZ)){c1=h.mimeTypes[c2[cZ]];cO[cZ]=(c1&&c1.enabledPlugin)?"1":"0"}}}if(typeof navigator.javaEnabled!=="unknown"&&H(h.javaEnabled)&&h.javaEnabled()){cO.java="1"}if(y(R.GearsFactory)){cO.gears="1"}cO.cookie=bQ()}var c0=parseInt(U.width,10);var cY=parseInt(U.height,10);cO.res=parseInt(c0,10)+"x"+parseInt(cY,10)
+}cp();a7();aD();this.getVisitorId=function(){return aP().uuid};this.getVisitorInfo=function(){return cw()};this.getAttributionInfo=function(){return by()};this.getAttributionCampaignName=function(){return by()[0]};this.getAttributionCampaignKeyword=function(){return by()[1]};this.getAttributionReferrerTimestamp=function(){return by()[2]};this.getAttributionReferrerUrl=function(){return by()[3]};this.setTrackerUrl=function(cY){aw=cY};this.getTrackerUrl=function(){return aw};this.getPiwikUrl=function(){return M(this.getTrackerUrl(),bt)};this.addTracker=function(cY,c0){if(!c0){throw new Error("A siteId must be given to add a new tracker")}if(!H(cY)||null===cY){cY=this.getTrackerUrl()}var cZ=new O(cY,c0);G.push(cZ);return cZ};this.getSiteId=function(){return bR};this.setSiteId=function(cY){bO(cY)};this.setUserId=function(cY){if(!H(cY)||!cY.length){return}bm=cY;bA=bS(bm).substr(0,16)};this.getUserId=function(){return bm};this.setCustomData=function(cY,cZ){if(T(cY)){ai=cY}else{if(!ai){ai={}}ai[cY]=cZ
+}};this.getCustomData=function(){return ai};this.setCustomRequestProcessing=function(cY){bW=cY};this.appendToTrackingUrl=function(cY){cG=cY};this.getRequest=function(cY){return cf(cY)};this.addPlugin=function(cY,cZ){b[cY]=cZ};this.setCustomDimension=function(cY,cZ){cY=parseInt(cY,10);if(cY>0){if(!H(cZ)){cZ=""}if(!v(cZ)){cZ=String(cZ)}bb[cY]=cZ}};this.getCustomDimension=function(cY){cY=parseInt(cY,10);if(cY>0&&Object.prototype.hasOwnProperty.call(bb,cY)){return bb[cY]}};this.deleteCustomDimension=function(cY){cY=parseInt(cY,10);if(cY>0){delete bb[cY]}};this.setCustomVariable=function(cZ,cY,c2,c0){var c1;if(!H(c0)){c0="visit"}if(!H(cY)){return}if(!H(c2)){c2=""}if(cZ>0){cY=!v(cY)?String(cY):cY;c2=!v(c2)?String(c2):c2;c1=[cY.slice(0,bh),c2.slice(0,bh)];if(c0==="visit"||c0===2){co();aH[cZ]=c1}else{if(c0==="page"||c0===3){bH[cZ]=c1}else{if(c0==="event"){b7[cZ]=c1}}}}};this.getCustomVariable=function(cZ,c0){var cY;if(!H(c0)){c0="visit"}if(c0==="page"||c0===3){cY=bH[cZ]}else{if(c0==="event"){cY=b7[cZ]
+}else{if(c0==="visit"||c0===2){co();cY=aH[cZ]}}}if(!H(cY)||(cY&&cY[0]==="")){return false}return cY};this.deleteCustomVariable=function(cY,cZ){if(this.getCustomVariable(cY,cZ)){this.setCustomVariable(cY,"","",cZ)}};this.deleteCustomVariables=function(cY){if(cY==="page"||cY===3){bH={}}else{if(cY==="event"){b7={}}else{if(cY==="visit"||cY===2){aH={}}}}};this.storeCustomVariablesInCookie=function(){bC=true};this.setLinkTrackingTimer=function(cY){bv=cY};this.getLinkTrackingTimer=function(){return bv};this.setDownloadExtensions=function(cY){if(v(cY)){cY=cY.split("|")}cN=cY};this.addDownloadExtensions=function(cZ){var cY;if(v(cZ)){cZ=cZ.split("|")}for(cY=0;cY<cZ.length;cY++){cN.push(cZ[cY])}};this.removeDownloadExtensions=function(c0){var cZ,cY=[];if(v(c0)){c0=c0.split("|")}for(cZ=0;cZ<cN.length;cZ++){if(K(c0,cN[cZ])===-1){cY.push(cN[cZ])}}cN=cY};this.setDomains=function(cY){ap=v(cY)?[cY]:cY;var c2=false,c0=0,cZ;for(c0;c0<ap.length;c0++){cZ=String(ap[c0]);if(cr(cC,J(cZ))){c2=true;break}var c1=b6(cZ);
+if(c1&&c1!=="/"&&c1!=="/*"){c2=true;break}}if(!c2){ap.push(cC)}};this.enableCrossDomainLinking=function(){cv=true};this.disableCrossDomainLinking=function(){cv=false};this.isCrossDomainLinkingEnabled=function(){return cv};this.setCrossDomainLinkingTimeout=function(cY){aR=cY};this.setIgnoreClasses=function(cY){bn=v(cY)?[cY]:cY};this.setRequestMethod=function(cY){cQ=cY||b3};this.setRequestContentType=function(cY){cj=cY||aA};this.setReferrerUrl=function(cY){bc=cY};this.setCustomUrl=function(cY){aW=bG(bz,cY)};this.getCurrentUrl=function(){return aW||bz};this.setDocumentTitle=function(cY){a8=cY};this.setAPIUrl=function(cY){bt=cY};this.setDownloadClasses=function(cY){bx=v(cY)?[cY]:cY};this.setLinkClasses=function(cY){aZ=v(cY)?[cY]:cY};this.setCampaignNameKey=function(cY){cd=v(cY)?[cY]:cY};this.setCampaignKeywordKey=function(cY){bs=v(cY)?[cY]:cY};this.discardHashTag=function(cY){bB=cY};this.setCookieNamePrefix=function(cY){a9=cY;aH=bI()};this.setCookieDomain=function(cY){var cZ=J(cY);if(bk(cZ)){cE=cZ;
+a7()}};this.getCookieDomain=function(){return cE};this.hasCookies=function(){return"1"===bQ()};this.setSessionCookie=function(c0,cZ,cY){if(!c0){throw new Error("Missing cookie name")}if(!H(cY)){cY=ca}bi.push(c0);cT(aK(c0),cZ,cY,be,cE)};this.getCookie=function(cZ){var cY=av(aK(cZ));if(cY===0){return null}return cY};this.setCookiePath=function(cY){be=cY;a7()};this.getCookiePath=function(cY){return be};this.setVisitorCookieTimeout=function(cY){ct=cY*1000};this.setSessionCookieTimeout=function(cY){ca=cY*1000};this.getSessionCookieTimeout=function(){return ca};this.setReferralCookieTimeout=function(cY){cM=cY*1000};this.setConversionAttributionFirstReferrer=function(cY){bj=cY};this.disableCookies=function(){ba=true;cO.cookie="0";if(bR){ax()}};this.deleteCookies=function(){ax()};this.setDoNotTrack=function(cZ){var cY=h.doNotTrack||h.msDoNotTrack;cy=cZ&&(cY==="yes"||cY==="1");if(cy){this.disableCookies()}};this.addListener=function(cZ,cY){ak(cZ,cY)};this.enableLinkTracking=function(cZ){cP=true;
+var cY=this;b2(function(){p(function(){bp(cZ,cY)})})};this.enableJSErrorTracking=function(){if(cA){return}cA=true;var cY=R.onerror;R.onerror=function(c3,c1,c0,c2,cZ){b2(function(){var c4="JavaScript Errors";var c5=c1+":"+c0;if(c2){c5+=":"+c2}am(c4,c5,c3)});if(cY){return cY(c3,c1,c0,c2,cZ)}return false}};this.disablePerformanceTracking=function(){aU=false};this.setGenerationTimeMs=function(cY){b8=parseInt(cY,10)};this.enableHeartBeatTimer=function(cY){cY=Math.max(cY,1);aX=(cY||15)*1000;if(cF!==null){cV()}};this.disableHeartBeatTimer=function(){bw();if(aX||aF){if(R.removeEventListener){R.removeEventListener("focus",a1,true);R.removeEventListener("blur",aq,true)}else{if(R.detachEvent){R.detachEvent("onfocus",a1);R.detachEvent("onblur",aq)}}}aX=null;aF=false};this.killFrame=function(){if(R.location!==R.top.location){R.top.location=R.location}};this.redirectFile=function(cY){if(R.location.protocol==="file:"){R.location=cY}};this.setCountPreRendered=function(cY){a4=cY};this.trackGoal=function(cY,c0,cZ){b2(function(){cB(cY,c0,cZ)
+})};this.trackLink=function(cZ,cY,c1,c0){b2(function(){cJ(cZ,cY,c1,c0)})};this.getNumTrackedPageViews=function(){return ce};this.trackPageView=function(cY,c0,cZ){bV=[];if(L(bR)){b2(function(){V(aw,bt,bR)})}else{b2(function(){ce++;bL(cY,c0,cZ)})}};this.trackAllContentImpressions=function(){if(L(bR)){return}b2(function(){p(function(){var cY=u.findContentNodes();var cZ=cl(cY);cU(cZ,bv)})})};this.trackVisibleContentImpressions=function(cY,cZ){if(L(bR)){return}if(!H(cY)){cY=true}if(!H(cZ)){cZ=750}aJ(cY,cZ,this);b2(function(){m(function(){var c0=u.findContentNodes();var c1=a0(c0);cU(c1,bv)})})};this.trackContentImpression=function(c0,cY,cZ){if(L(bR)){return}c0=a(c0);cY=a(cY);cZ=a(cZ);if(!c0){return}cY=cY||"Unknown";b2(function(){var c1=ay(c0,cY,cZ);br(c1,bv)})};this.trackContentImpressionsWithinNode=function(cY){if(L(bR)||!cY){return}b2(function(){if(b0){m(function(){var cZ=u.findContentNodesWithinNode(cY);var c0=a0(cZ);cU(c0,bv)})}else{p(function(){var cZ=u.findContentNodesWithinNode(cY);var c0=cl(cZ);
+cU(c0,bv)})}})};this.trackContentInteraction=function(c0,c1,cY,cZ){if(L(bR)){return}c0=a(c0);c1=a(c1);cY=a(cY);cZ=a(cZ);if(!c0||!c1){return}cY=cY||"Unknown";b2(function(){var c2=aG(c0,c1,cY,cZ);br(c2,bv)})};this.trackContentInteractionNode=function(cZ,cY){if(L(bR)||!cZ){return}b2(function(){var c0=cR(cZ,cY);br(c0,bv)})};this.logAllContentBlocksOnPage=function(){var c0=u.findContentNodes();var cY=u.collectContent(c0);var cZ=typeof console;if(cZ!=="undefined"&&console&&console.log){console.log(cY)}};this.trackEvent=function(cZ,c1,cY,c0,c3,c2){b2(function(){am(cZ,c1,cY,c0,c3,c2)})};this.trackSiteSearch=function(cY,c0,cZ,c1){b2(function(){bT(cY,c0,cZ,c1)})};this.setEcommerceView=function(c1,cY,c0,cZ){if(!H(c0)||!c0.length){c0=""}else{if(c0 instanceof Array){c0=JSON_PIWIK.stringify(c0)}}bH[5]=["_pkc",c0];if(H(cZ)&&String(cZ).length){bH[2]=["_pkp",cZ]}if((!H(c1)||!c1.length)&&(!H(cY)||!cY.length)){return}if(H(c1)&&c1.length){bH[3]=["_pks",c1]}if(!H(cY)||!cY.length){cY=""}bH[4]=["_pkn",cY]};this.addEcommerceItem=function(c2,cY,c0,cZ,c1){if(c2.length){cI[c2]=[c2,cY,c0,cZ,c1]
+}};this.trackEcommerceOrder=function(cY,c2,c1,c0,cZ,c3){bK(cY,c2,c1,c0,cZ,c3)};this.trackEcommerceCartUpdate=function(cY){bg(cY)};this.trackRequest=function(cZ,c1,c0,cY){b2(function(){var c2=cf(cZ,c1,cY);br(c2,bv,c0)})};e.trigger("TrackerSetup",[this])}function F(){return{push:aa}}function c(an,am){var ao={};var ak,al;for(ak=0;ak<am.length;ak++){var ai=am[ak];ao[ai]=1;for(al=0;al<an.length;al++){if(an[al]&&an[al][0]){var aj=an[al][0];if(ai===aj){aa(an[al]);delete an[al];if(ao[aj]>1){ae("The method "+aj+' is registered more than once in "_paq" variable. Only the last call has an effect. Please have a look at the multiple Piwik trackers documentation: http://developer.piwik.org/guides/tracking-javascript-guide#multiple-piwik-trackers')}ao[aj]++}}}}return an}var A=["addTracker","disableCookies","setTrackerUrl","setAPIUrl","enableCrossDomainLinking","setCrossDomainLinkingTimeout","setCookiePath","setCookieDomain","setDomains","setUserId","setSiteId","enableLinkTracking","setSecureCookie"];function Y(ai,ak){var aj=new O(ai,ak);
+G.push(aj);_paq=c(_paq,A);for(C=0;C<_paq.length;C++){if(_paq[C]){aa(_paq[C])}}_paq=new F();return aj}ah(R,"beforeunload",ac,false);Date.prototype.getTimeAlias=Date.prototype.getTime;e={initialized:false,JSON:JSON_PIWIK,DOM:{addEventListener:function(al,ak,aj,ai){var am=typeof ai;if(am==="undefined"){ai=false}ah(al,ak,aj,ai)},onLoad:m,onReady:p,isNodeVisible:j,isOrWasNodeVisible:u.isNodeVisible},on:function(aj,ai){if(!w[aj]){w[aj]=[]}w[aj].push(ai)},off:function(ak,aj){if(!w[ak]){return}var ai=0;for(ai;ai<w[ak].length;ai++){if(w[ak][ai]===aj){w[ak].splice(ai,1)}}},trigger:function(ak,al,aj){if(!w[ak]){return}var ai=0;for(ai;ai<w[ak].length;ai++){w[ak][ai].apply(aj||R,al)}},addPlugin:function(ai,aj){b[ai]=aj},getTracker:function(ai,aj){if(!H(aj)){aj=this.getAsyncTracker().getSiteId()}if(!H(ai)){ai=this.getAsyncTracker().getTrackerUrl()}return new O(ai,aj)},getAsyncTrackers:function(){return G},addTracker:function(ai,aj){if(!G.length){Y(ai,aj)}else{G[0].addTracker(ai,aj)}},getAsyncTracker:function(aj,am){var al;
+if(G&&G.length&&G[0]){al=G[0]}else{return Y(aj,am)}if(!am&&!aj){return al}if((!H(am)||null===am)&&al){am=al.getSiteId()}if((!H(aj)||null===aj)&&al){aj=al.getTrackerUrl()}var ak,ai=0;for(ai;ai<G.length;ai++){ak=G[ai];if(ak&&String(ak.getSiteId())===String(am)&&ak.getTrackerUrl()===aj){return ak}}},retryMissedPluginCalls:function(){var aj=ab;ab=[];var ai=0;for(ai;ai<aj.length;ai++){aa(aj[ai])}}};if(typeof define==="function"&&define.amd){define("piwik",[],function(){return e})}return e}());
/*!!! pluginTrackerHook */
-}(function(){function b(){if("object"!==typeof _paq){return false}var c=typeof _paq.length;if("undefined"===c){return false}return !!_paq.length}if(window&&"object"===typeof window.piwikPluginAsyncInit&&window.piwikPluginAsyncInit.length){var a=0;for(a;a<window.piwikPluginAsyncInit.length;a++){if(typeof window.piwikPluginAsyncInit[a]==="function"){window.piwikPluginAsyncInit[a]()}}}if(window&&window.piwikAsyncInit){window.piwikAsyncInit()}if(!window.Piwik.getAsyncTrackers().length){if(b()){window.Piwik.addTracker()}else{_paq={push:function(c){var d=typeof console;if(d!=="undefined"&&console&&console.error){console.error("_paq.push() was used but Piwik tracker was not initialized before the piwik.js file was loaded. Make sure to configure the tracker via _paq.push before loading piwik.js. Alternatively, you can create a tracker via Piwik.addTracker() manually and then use _paq.push but it may not fully work as tracker methods may not be executed in the correct order.",c)
-}}}}}window.Piwik.trigger("PiwikInitialized",[]);window.Piwik.initialized=true}());(function(){var a=(typeof AnalyticsTracker);if(a==="undefined"){AnalyticsTracker=window.Piwik}}());if(typeof piwik_log!=="function"){piwik_log=function(b,f,d,g){function a(h){try{if(window["piwik_"+h]){return window["piwik_"+h]}}catch(i){}return}var c,e=window.Piwik.getTracker(d,f);e.setDocumentTitle(b);e.setCustomData(g);c=a("tracker_pause");if(c){e.setLinkTrackingTimer(c)}c=a("download_extensions");if(c){e.setDownloadExtensions(c)}c=a("hosts_alias");if(c){e.setDomains(c)}c=a("ignore_classes");if(c){e.setIgnoreClasses(c)}e.trackPageView();if(a("install_tracker")){piwik_track=function(i,k,j,h){e.setSiteId(k);e.setTrackerUrl(j);e.trackLink(i,h)};e.enableLinkTracking()}};
+}(function(){function b(){if("object"!==typeof _paq){return false}var c=typeof _paq.length;if("undefined"===c){return false}return !!_paq.length}if(window&&"object"===typeof window.piwikPluginAsyncInit&&window.piwikPluginAsyncInit.length){var a=0;for(a;a<window.piwikPluginAsyncInit.length;a++){if(typeof window.piwikPluginAsyncInit[a]==="function"){window.piwikPluginAsyncInit[a]()}}}if(window&&window.piwikAsyncInit){window.piwikAsyncInit()}if(!window.Piwik.getAsyncTrackers().length){if(b()){window.Piwik.addTracker()
+}else{_paq={push:function(c){var d=typeof console;if(d!=="undefined"&&console&&console.error){console.error("_paq.push() was used but Piwik tracker was not initialized before the piwik.js file was loaded. Make sure to configure the tracker via _paq.push before loading piwik.js. Alternatively, you can create a tracker via Piwik.addTracker() manually and then use _paq.push but it may not fully work as tracker methods may not be executed in the correct order.",c)}}}}}window.Piwik.trigger("PiwikInitialized",[]);window.Piwik.initialized=true}());(function(){var a=(typeof AnalyticsTracker);if(a==="undefined"){AnalyticsTracker=window.Piwik}}());if(typeof piwik_log!=="function"){piwik_log=function(b,f,d,g){function a(h){try{if(window["piwik_"+h]){return window["piwik_"+h]}}catch(i){}return}var c,e=window.Piwik.getTracker(d,f);e.setDocumentTitle(b);e.setCustomData(g);c=a("tracker_pause");if(c){e.setLinkTrackingTimer(c)}c=a("download_extensions");if(c){e.setDownloadExtensions(c)}c=a("hosts_alias");
+if(c){e.setDomains(c)}c=a("ignore_classes");if(c){e.setIgnoreClasses(c)}e.trackPageView();if(a("install_tracker")){piwik_track=function(i,k,j,h){e.setSiteId(k);e.setTrackerUrl(j);e.trackLink(i,h)};e.enableLinkTracking()}};
/*!! @license-end */
}; \ No newline at end of file
diff --git a/lang/da.json b/lang/da.json
index 258f6589ad..7892557897 100644
--- a/lang/da.json
+++ b/lang/da.json
@@ -62,12 +62,15 @@
"ColumnNbActions": "Handlinger",
"ColumnNbActionsDocumentation": "Antal handlinger, der udføres af besøgende. Handlinger kan være sidevisninger, filhentninger eller udgående links.",
"ColumnNbUniqVisitors": "Unikke besøgende",
+ "ColumnNbUniqVisitorsDocumentation": "Antallet af unikke besøgende på dit website. Hver bruger bliver kun talt én gang, selv hvis de besøger dit website flere gange om dagen.",
"ColumnNbUsers": "Brugere",
"ColumnNbUsersDocumentation": "Antallet af brugere logget på din hjemmeside. Det er antallet af unikke aktive brugere, der har et bruger-ID sat (via sporingskode funktionen 'setUserId').",
"ColumnNbVisits": "Besøg",
+ "ColumnNbVisitsDocumentation": "Hvis en besøgende kommer til dit websted for første gang, eller hvis de besøger en side mere end 30 minutter efter at de sidst så en side, bliver det registreret som et nyt besøg.",
"ColumnPageBounceRateDocumentation": "Procentdel af besøg, der startede på denne side og forlod hjemmesiden med det samme.",
"ColumnPageviews": "Sidevisninger",
"ColumnPageviewsDocumentation": "Antal gange siden blev besøgt.",
+ "ColumnPercentageVisits": "%% Besøg",
"ColumnRevenue": "Indtægter",
"ColumnSumVisitLength": "Samlet tid brugt af besøgende (i sekunder)",
"ColumnTotalPageviews": "Totale sidevisninger",
@@ -158,6 +161,12 @@
"ExceptionLanguageFileNotFound": "Sprogfil '%s' blev ikke fundet.",
"ExceptionMethodNotFound": "Metoden '%1$s' eksisterer ikke eller er ikke tilgængelig i modulet '%2$s'.",
"ExceptionMissingFile": "Mangler fil: %s",
+ "ExceptionUnexpectedFile": "Filer blev fundet i din Piwik, men vi forventede dem ikke.",
+ "ExceptionUnexpectedFilePleaseDelete": "Slet venligst disse filer for at undgå fejl.",
+ "ExceptionUnexpectedDirectory": "Mapper blev fundet i din Piwik, men vi forventede dem ikke.",
+ "ExceptionUnexpectedDirectoryPleaseDelete": "Slet venligst disse mapper for at undgå fejl.",
+ "ExceptionFileToDelete": "Slet fil: %s",
+ "ExceptionDirectoryToDelete": "Slet mappe: %s",
"ExceptionNonceMismatch": "Kan ikke kontrollere sikkerheden på formularen.",
"ExceptionPrivilege": "Du kan ikke få adgang til denne ressource, det kræver en %s adgang.",
"ExceptionPrivilegeAccessWebsite": "Du kan ikke få adgang til denne ressource, da det kræver en %s adgang til hjemmeside id = %d.",
@@ -174,6 +183,9 @@
"ExportAsImage": "Eksporter som billede",
"ExportThisReport": "Eksporter datasættet i andre formater",
"Faq": "OSS",
+ "FileIntegrityWarning": "Fil-integritetstjek fejlede og rapporterede nogle fejl. Du skal løse dette problem og genindlæse siden indtil den ikke viser flere fejl.",
+ "FileIntegrityWarningReupload": "Fejlene nedenfor kan skyldes en delvis eller fejlet upload af Piwik filer.",
+ "FileIntegrityWarningReuploadBis": "Prøv at uploade alle Piwik filerne i BINARY mode.",
"First": "Første",
"Flatten": "Udjævn",
"ForExampleShort": "fx.",
@@ -229,6 +241,7 @@
"MultiSitesSummary": "Alle hjemmesider",
"Name": "Navn",
"NbActions": "Antal handlinger",
+ "NbInteractions": "Antal af interaktioner",
"NbSearches": "Antal af interne søgning",
"NeedMoreHelp": "Behøver du mere hjælp?",
"Never": "Aldrig",
@@ -284,6 +297,7 @@
"Password": "Adgangskode",
"Period": "Periode",
"Piechart": "Cirkeldiagram",
+ "PiwikIsACollaborativeProjectYouCanContributeAndDonateNextRelease": "%1$sPiwik%2$s er et samarbejdsprojekt, bragt til dig af medlemmerne af %7$sPiwik team%8$s, såvel som mange andre bidragsydere fra hele verden. <br\/> Hvis du er fan af Piwik kan du hjælpe: find ud af %3$sSådan deltager du i Piwik%4$s, eller %5$sdonér nu%6$s for at hjælpe med at finansere den næste store Piwik version!",
"PiwikXIsAvailablePleaseNotifyPiwikAdmin": "%1$s er tilængelig. Kontakt venligst %2$sPiwik administrator%3$s.",
"PiwikXIsAvailablePleaseUpdateNow": "Piwik %1$s er tilgængelig. %2$sOpdater nu!%3$s (se %4$sændringer%5$s).",
"PleaseContactYourPiwikAdministrator": "Kontakt venligst din Piwik administrator.",
@@ -356,6 +370,8 @@
"TimeAgo": "%s siden",
"TimeFormat": "Tidsformat",
"TimeOnPage": "Tid på siden",
+ "ToDeleteAllDirectoriesRunThisCommand": "For at slette alle disse mapper i en omgang, kan du køre denne kommando:",
+ "ToDeleteAllFilesRunThisCommand": "For at slette alle disse filer i en omgang, kan du køre denne kommando:",
"Total": "Total",
"TotalRatioTooltip": "Dette er %1$s af alle %2$s %3$s.",
"TotalRevenue": "Indtægter i alt",
@@ -365,7 +381,7 @@
"TrackingScopeVisit": "Besøg",
"TransitionsRowActionTooltip": "See hvad besøgende gjorde før og efter de så denne side",
"TransitionsRowActionTooltipTitle": "Åben overgange",
- "TranslatorName": "Daniel Juhl, jan madsen",
+ "TranslatorName": "<a href=\"http:\/\/danieljuhl.dk\/\">Daniel Juhl<\/a>, jan madsen",
"UniquePurchases": "Unikke køb",
"Unknown": "Ukendt",
"Upload": "Overfør",
diff --git a/lang/de.json b/lang/de.json
index 96b39a86d8..5888fc3c44 100644
--- a/lang/de.json
+++ b/lang/de.json
@@ -66,7 +66,7 @@
"ColumnNbUsers": "Benutzer",
"ColumnNbUsersDocumentation": "Die Anzahl auf Ihrer Website angemeldeter Nutzer. Die Zahl beinhaltet alle eindeutigen Besucher, welche eine Benutzer ID besitzen (durch die Tracking Code Funktion 'setUserID').",
"ColumnNbVisits": "Besuche",
- "ColumnNbVisitsDocumentation": "Wenn ein Besucher zum ersten Mal die Webseite besucht oder seit dem letzen Seitenaufruf mehr als 30 Minuten vergangen sind, wird dies als neuer Besuch gewertet.",
+ "ColumnNbVisitsDocumentation": "Wenn ein Besucher zum ersten Mal die Webseite besucht oder seit dem letzten Seitenaufruf mehr als 30 Minuten vergangen sind, wird dies als neuer Besuch gewertet.",
"ColumnPageBounceRateDocumentation": "Prozentsatz der Besuche, die auf dieser Seite starteten und die Website sofort wieder verlassen haben.",
"ColumnPageviews": "Seitenansichten",
"ColumnPageviewsDocumentation": "Die Anzahl, wie häufig diese Seite besucht wurde.",
@@ -145,7 +145,7 @@
"ExceptionConfigurationFilePleaseCheckReadableByUser": "Bitte überprüfen Sie ob der Benutzer %2$s Lesezugriff auf die Datei %1$s hat.",
"ExceptionDatabaseVersion": "Ihre %1$s-Version ist %2$s, aber Piwik benötigt mindestens %3$s",
"ExceptionDatabaseVersionNewerThanCodebase": "Ihre Piwik Codebase läuft auf der alten Version %1$s und wir haben erkannt, dass Ihre Piwik Datenbank bereits auf die neuere Version %2$s aktualisiert wurde.",
- "ExceptionDatabaseVersionNewerThanCodebaseWait": "Möglicherweise sind die Piwik Administratoren gerade daran, den Aktualisierungsprozess abzuschliessen. Bitte versuchen Sie es in ein paar Minuten noch einmal.",
+ "ExceptionDatabaseVersionNewerThanCodebaseWait": "Möglicherweise sind die Piwik Administratoren gerade daran, den Aktualisierungsprozess abzuschließen. Bitte versuchen Sie es in ein paar Minuten noch einmal.",
"ExceptionFileIntegrity": "Integritätsprüfung fehlgeschlagen: %s",
"ExceptionFilesizeMismatch": "Unterschiedliche Dateigröße: %1$s (erwartete Größe: %2$s, gefunden: %3$s)",
"ExceptionIncompatibleClientServerVersions": "Ihre %1$s-Client Version ist %2$s, die aber mit der Server-Version %3$s inkompatibel ist.",
@@ -162,9 +162,9 @@
"ExceptionMethodNotFound": "Die Methode '%1$s' existiert nicht oder ist im Modul '%2$s' nicht verfügbar.",
"ExceptionMissingFile": "Fehlende Datei: %s",
"ExceptionUnexpectedFile": "Es wurden unerwartete Dateien in deiner Piwik-Installation gefunden.",
- "ExceptionUnexpectedFilePleaseDelete": "Bitte lösche diese Dateien um Fehler zu vermeiden.",
+ "ExceptionUnexpectedFilePleaseDelete": "Bitte lösche diese Dateien, um Fehler zu vermeiden.",
"ExceptionUnexpectedDirectory": "Es wurden unerwartete Verzeichnisse in deiner Piwik-Installation gefunden.",
- "ExceptionUnexpectedDirectoryPleaseDelete": "Bitte lösche diese Verzeichnisse um Fehler zu vermeiden.",
+ "ExceptionUnexpectedDirectoryPleaseDelete": "Bitte lösche diese Verzeichnisse, um Fehler zu vermeiden.",
"ExceptionFileToDelete": "Zu löschende Datei: %s",
"ExceptionDirectoryToDelete": "Zu löschendes Verzeichnis: %s",
"ExceptionNonceMismatch": "Das Sicherheitstoken des Formulars konnte nicht verifiziert werden.",
@@ -183,7 +183,7 @@
"ExportAsImage": "Als Bild exportieren",
"ExportThisReport": "Diese Daten in einem anderen Format exportieren",
"Faq": "FAQ",
- "FileIntegrityWarning": "Der Datei-Intigritätscheck ist fehlgeschlagen und hat ein paar Fehler gemeldet. Du solltest die Probleme beheben und diese Seite neuladen, bis sie keine Fehler mehr anzeigt.",
+ "FileIntegrityWarning": "Der Datei-Integritätscheck ist fehlgeschlagen und hat ein paar Fehler gemeldet. Du solltest die Probleme beheben und diese Seite neuladen, bis sie keine Fehler mehr anzeigt.",
"FileIntegrityWarningReupload": "Die nachfolgenden Fehler könnten durch einen teilweise oder gänzlich fehlgeschlagenen Upload der Piwik-Dateien entstanden sein.",
"FileIntegrityWarningReuploadBis": "Versuche die Piwik-Dateien im BINARY-Modus neu hochzuladen.",
"First": "Anfang",
@@ -336,7 +336,7 @@
"Required": "%s benötigt",
"ReturningVisitor": "Wiederkehrender Besuch",
"ReturningVisitorAllVisits": "Alle Besuche ansehen",
- "RowEvolutionRowActionTooltip": "Sehen Sie wie sich die Metriken im Laufe der Zeit geändert haben",
+ "RowEvolutionRowActionTooltip": "Sehen Sie, wie sich die Metriken im Laufe der Zeit geändert haben",
"RowEvolutionRowActionTooltipTitle": "Zeilenentwicklung öffnen",
"Rows": "Zeilen",
"RowsToDisplay": "Zeilen anzeigen",
@@ -460,9 +460,9 @@
"HowtoDeleteAnAccount": "Gedrückt halten, um einen Account zu entfernen.",
"HowtoDeleteAnAccountOniOS": "Von rechts nach links wischen, um einen Account zu löschen",
"HowtoLoginAnonymous": "Benutzername und Passwort leer lassen für anonymes Anmelden",
- "HttpIsNotSecureWarning": "Bei der Verwendung von HTTP wird ihr Piwik Authorisierungstoken (token_auth) im Klartext übertragen. Aus diesem Grund empfehlen wir HTTPS für eine sichere Übertragung von Daten über das Internet. Möchten Sie forfahren?",
+ "HttpIsNotSecureWarning": "Bei der Verwendung von HTTP wird ihr Piwik Authorisierungstoken (token_auth) im Klartext übertragen. Aus diesem Grund empfehlen wir HTTPS für eine sichere Übertragung von Daten über das Internet. Möchten Sie fortfahren?",
"HttpTimeout": "HTTP Timeout",
- "IncompatiblePiwikVersion": "The Piwik Version, die Sie verwenden, ist nicht mit Piwik Mobile 2 kompatibel. Aktualisieren Sie Ihre Piwik Installation oder verwenden Sie alternativ Piwik Mobile 1.",
+ "IncompatiblePiwikVersion": "Die Piwik Version, die Sie verwenden, ist nicht mit Piwik Mobile 2 kompatibel. Aktualisieren Sie Ihre Piwik Installation oder verwenden Sie alternativ Piwik Mobile 1.",
"LastUpdated": "Letzte Aktualisierung: %s",
"LoadingReport": "Lade %s",
"LoginCredentials": "Zugangsdaten",
diff --git a/lang/he.json b/lang/he.json
index dce647b79e..90553435f5 100644
--- a/lang/he.json
+++ b/lang/he.json
@@ -2,7 +2,7 @@
"General": {
"12HourClock": "שעון 12 שעות",
"24HourClock": "שעון 24 שעות",
- "AbandonedCarts": "עגולות קניה שנעזבו",
+ "AbandonedCarts": "עגלות קניה שנעזבו",
"AboutPiwikX": "אודות Piwik %s",
"Action": "פעולה",
"Actions": "פעולות",
@@ -67,6 +67,7 @@
"ColumnPageBounceRateDocumentation": "אחוז הביקורים שהתחילו בעמוד זה ועזבו מיד את האתר.",
"ColumnPageviews": "צפיות",
"ColumnPageviewsDocumentation": "מספר הפעמים שביקרו בדף זה.",
+ "ColumnPercentageVisits": "%% ביקורים",
"ColumnRevenue": "רווח",
"ColumnSumVisitLength": "הזמן הכולל שהשקיעו המבקרים (שניות)",
"ColumnTotalPageviews": "סך כל הצפיות בדפים",
@@ -76,6 +77,7 @@
"ColumnUniquePageviewsDocumentation": "מספר הביקורים שכללו דף זה. אם ביקרו בדף זה מספר פעמים במהלך ביקור אחד, הוא ייספר רק פעם אחת.",
"ColumnValuePerVisit": "תפוקה בכל ביקור",
"ColumnViewedAfterSearch": "הוקלק בתוצאות חיפוש",
+ "ColumnViewedAfterSearchDocumentation": "מספר הפעמים שדף זה נצפה לאחר שמבקר חיפש את האתר שלך ולחץ על דף זה בתוצאות החיפוש.",
"ColumnVisitDuration": "משך ביקור (בשניות)",
"ColumnVisitsWithConversions": "ביקורים עם המרות",
"Continue": "להמשיך",
@@ -95,6 +97,7 @@
"Date": "תאריך",
"DateRange": "טווח תאריכים:",
"DateRangeFrom": "מ",
+ "DateRangeFromTo": "מ-%1$s עד %2$s",
"DateRangeInPeriodList": "טווח התאריכים",
"DateRangeTo": "עד",
"DaysHours": "%1$s ימים ו-%2$s שעות",
@@ -129,6 +132,7 @@
"Error": "שגיאה",
"Errors": "שגיאות",
"EvolutionOverPeriod": "התפתחות במהלך התקופה",
+ "ExceptionContactSupportGeneric": "אם הבעיה ממשיכה אנא %1$s צור קשר עם מנהל Piwik %2$s על מנת לקבל סיוע.",
"ExceptionCheckUserHasSuperUserAccessOrIsTheUser": "המשתמש צריך להיות משתמש-על או המשתמש '%s' עצמו.",
"ExceptionConfigurationFileNotFound": "קובץ ההגדרות {%s} לא נמצא.",
"ExceptionConfigurationFileExistsButNotReadable": "נראה שקובץ ההגדרות %s קיים, אבל פיוויק לא היה מסוגל לקרוא אותו.",
@@ -146,6 +150,12 @@
"ExceptionLanguageFileNotFound": "קובץ השפה '%s' לא נמצא.",
"ExceptionMethodNotFound": "המתודה '%1$s' לא קיימת או לא נמצאה במודל '%2$s'.",
"ExceptionMissingFile": "קובץ חסר: %s",
+ "ExceptionUnexpectedFile": "נמצאו קבצים ב-Piwik שלך, אבל לא ציפינו להם.",
+ "ExceptionUnexpectedFilePleaseDelete": "אנא מחק קבצים אלו על מנת למנוע שגיאות.",
+ "ExceptionUnexpectedDirectory": "נמצאו תיקיות ב-Piwik שלך, אבל לא ציפינו להם.",
+ "ExceptionUnexpectedDirectoryPleaseDelete": "אנא מחק תיקיות אלו על מנת למנוע שגיאות.",
+ "ExceptionFileToDelete": "קבצים למחיקה: %s",
+ "ExceptionDirectoryToDelete": "תיקיות למחיקה: %s",
"ExceptionNonceMismatch": "לא ניתן לאמת את כרטיס האבטחה בטופס זה.",
"ExceptionPrivilege": "לא ניתן לגשת למשאב זה מכיוון שהוא דורש גישת %s.",
"ExceptionPrivilegeAccessWebsite": "לא ניתן לגשת למשאב זה מכיוון שהוא דורש גישת %s עבור האתר שמספרו הסידורי הוא %d.",
@@ -162,6 +172,7 @@
"ExportAsImage": "לייצא כתמונה",
"ExportThisReport": "לייצא מידע בפורמטים אחרים",
"Faq": "שאלות ותשובות נפוצות",
+ "FileIntegrityWarningReuploadBis": "נסה להעלות מחדש את כל קבצי Piwik במצב בינארי.",
"First": "ראשון",
"Flatten": "לשטח",
"ForExampleShort": "לדוגמה",
@@ -340,6 +351,8 @@
"TimeAgo": "לפני %s",
"TimeFormat": "פורמט הזמן",
"TimeOnPage": "זמן בדף",
+ "ToDeleteAllDirectoriesRunThisCommand": "על מנת למחוק את כל התיקיות בבת אחת, ניתן להריץ את הפקודה הבאה:",
+ "ToDeleteAllFilesRunThisCommand": "על מנת למחוק את כל הקבצים בבת אחת, ניתן להריץ את הפקודה הבאה:",
"Total": "סך הכל",
"TotalRatioTooltip": "This is %1$s of all %2$s %3$s.",
"TotalRevenue": "סה\"כ הרווח",
diff --git a/lang/id.json b/lang/id.json
index e5d78b2aac..e71518b73a 100644
--- a/lang/id.json
+++ b/lang/id.json
@@ -27,6 +27,7 @@
"CannotUnzipFile": "Tidak dapat membongkar berkas %1$s: %2$s",
"ChangePassword": "Ganti Sandi",
"ChangeTagCloudView": "Perlu diketahui, bahwa Anda dapat melihat laporan dalam cara lain selain sebagai etiket awan. Gunakan kendali di bagian bawah laporan untuk melakukannya.",
+ "ChooseDate": "Pilih tanggal, tanggal terpilih saat ini adalah: %s",
"ChooseLanguage": "Pilih bahasa",
"ChoosePeriod": "Pilih periode",
"ClickHere": "Klik di sini untuk informasi lebih lanjut.",
@@ -61,12 +62,15 @@
"ColumnNbActions": "Tindakan",
"ColumnNbActionsDocumentation": "Jumlah tindakan yang dilakukan oleh pengunjung. Tindakan dapat berupa menampilkan halaman, mengunduh, atau tautan keluar.",
"ColumnNbUniqVisitors": "Pengunjung unik",
+ "ColumnNbUniqVisitorsDocumentation": "Jumlah pengunjung tidak terduplikasi datang ke website Anda. Setiap pengguna hanya dihitung sekali, bahkan jika mereka mengunjungi website beberapa kali dalam satu hari.",
"ColumnNbUsers": "Pengguna",
"ColumnNbUsersDocumentation": "Jumlah pengguna yang masuk-log ke situs Anda. Ini adalah jumlah pengguna aktif dengan ID Pengguna yang diatur (melalui fungsi Pelacakan 'setUserId').",
"ColumnNbVisits": "Kunjungan",
+ "ColumnNbVisitsDocumentation": "Jika pengunjung data ke website Anda untuk pertama kali atau jika mereka mengunjungi ke sebuah halaman lebih dari 30 menit setelah kunjungan terakhir, hal ini akan direkam sebagai kunjungan baru.",
"ColumnPageBounceRateDocumentation": "Persentase kunjungan yang berawal pada halaman ini dan meninggalkan situs langsung.",
"ColumnPageviews": "Tampilan Halaman",
"ColumnPageviewsDocumentation": "Berapa kali halaman ini dikunjungi.",
+ "ColumnPercentageVisits": "%% Kunjungan",
"ColumnRevenue": "Pendapatan",
"ColumnSumVisitLength": "Jumlah waktu kunjungan tiap pengunjung (dalam detik)",
"ColumnTotalPageviews": "Jumlah Halaman Ditampilkan",
@@ -82,6 +86,8 @@
"ConfigFileIsNotWritable": "Berkas konfigurasi Piwik %1$s tak dapat ditulisi, beberapa perubahan Anda kemungkinan tidak tersimpan. %2$s Silakan mengubah perizinan berkas konfigurasi agar dapat ditulisi.",
"Continue": "Lanjut",
"ContinueToPiwik": "Lanjut ke Piwik",
+ "CurrentlyUsingUnsecureHttp": "Anda saat ini menggunakan Piwik di atas HTTP tidak aman, yang mana akan berisiko. Kami merekomendasikan Anda menyetel Piwik untuk menggunakan SSL (HTTPS) untuk peningkatan keamanan.",
+ "CreatedByUser": "dibuat oleh %s",
"CurrentMonth": "Bulan Ini",
"CurrentWeek": "Minggu Ini",
"CurrentYear": "Tahun Ini",
@@ -128,13 +134,18 @@
"Edit": "Sunting",
"EncryptedSmtpTransport": "Masukkan penyandian lapisan transpor yang dibutuhkan peladen SMTP.",
"Error": "Galat",
+ "Errors": "Kesalahan",
"ErrorRequest": "Ups.. terdapat kesalahan selama melakukan permintaan. Mungkin peladen mendapat masalah sementara, atau mungkin Anda melakukan permintaan dengan data yang terlalu besar. Silakan coba kembali. Bila galat ini terjadi berulang, silakan %1$shubungi pengelola Piwik Anda%2$s untuk bantuan.",
"EvolutionOverPeriod": "Perkembangan selama periode",
"EvolutionSummaryGeneric": "%1$s di %2$s dibandingkan dengan %3$s di %4$s. Perubahan: %5$s",
"ExceptionContactSupportGeneric": "Bila Anda tetap mengalami kendala, silakan %1$shubungi pengelola Piwik Anda%2$s untuk bantuan.",
"ExceptionCheckUserHasSuperUserAccessOrIsTheUser": "Pengguna harus menjadi Pengguna Super atau pengguna '%s' itu sendiri.",
"ExceptionConfigurationFileNotFound": "Berkas konfigurasi {%s} tak ditemukan.",
+ "ExceptionConfigurationFileExistsButNotReadable": "Berkas konfigurasi %s nampaknya sudah ada tapi Piwik tidak dapat membacanya.",
+ "ExceptionConfigurationFilePleaseCheckReadableByUser": "Mohon periksa %1$s dapat dibaca oleh pengguna '%2$s'.",
"ExceptionDatabaseVersion": "Versi %1$s Anda adalah %2$s, tetapi Piwik membtuhkan setidaknya versi %3$s.",
+ "ExceptionDatabaseVersionNewerThanCodebase": "Basis kode Piwik Anda berjalan versi tua %1$s dan kami mendeteksi pangkalan data Piwik Anda telah ditingkatkan ke versi lebih baru %2$s.",
+ "ExceptionDatabaseVersionNewerThanCodebaseWait": "Mungkin administrator Piwik Anda saat ini sedang menyelesaikan proses peningkatan. Silakan coba lagi dalam beberapa menit.",
"ExceptionFileIntegrity": "Pemerikasaa intergritas gagal: %s",
"ExceptionFilesizeMismatch": "Ukuran berkas tak sesuai: %1$s (diharapkan panjang: %2$s, ditemukan: %3$s)",
"ExceptionIncompatibleClientServerVersions": "Versi klien %1$s Anda adalah %2$s yang tidak sesuai dengan server versi %3$s.",
@@ -150,6 +161,12 @@
"ExceptionLanguageFileNotFound": "Berkas bahasa '%s' tak ditemukan.",
"ExceptionMethodNotFound": "Metode '%1$s' tidak ada atau tak tersedia di modul '%2$s'.",
"ExceptionMissingFile": "Berkas hilang: %s",
+ "ExceptionUnexpectedFile": "Berkas ditemukan dalam Piwik Anda tapi kami tidak dapat memahaminya.",
+ "ExceptionUnexpectedFilePleaseDelete": "Mohon hapus berkas berikut untuk menghindari kesalahan.",
+ "ExceptionUnexpectedDirectory": "Direktori ditemukan dalam Piwik Anda tapi kami tidak dapat memahaminya.",
+ "ExceptionUnexpectedDirectoryPleaseDelete": "Silakan haus direktori tersebut untuk menghindari kesalahan.",
+ "ExceptionFileToDelete": "Berkas akan dihapus: %s",
+ "ExceptionDirectoryToDelete": "Direktori untuk hapus: %s",
"ExceptionNonceMismatch": "Tidak dapat memeriksa kepingan dari borang ini.",
"ExceptionPrivilege": "Anda tak dapat mengakses sumber daya ini karena membutuhkan akses %s.",
"ExceptionPrivilegeAccessWebsite": "Anda tidak dapat mengakses sumber daya ini sebab membutuhkan sebuah akses %s untuk situs dengan id = %d.",
@@ -157,14 +174,25 @@
"ExceptionUnableToStartSession": "Tak dapat memulai sesi.",
"ExceptionUndeletableFile": "Tak dapat meghapus %s",
"ExceptionUnreadableFileDisabledMethod": "Berkas konfigurasi {%1$s} tak dapat dibaca. Inang Anda kemungkungkinan mematikan %2$s.",
+ "ExceptionReportNotFound": "Laporan yang diminta tidak tersedia.",
+ "ExceptionWidgetNotFound": "Widget yang diminta tidak tersedia.",
+ "ExceptionReportNotEnabled": "Laporan yang diminta tidak diaktifkan. Ini berarti biasanya plugin yang mendefinisikan laporan tidak aktif atau Anda tidak memiliki izin untuk mengakses laporan ini.",
+ "ExceptionWidgetNotEnabled": "Widget yang diminta tidak diaktifkan. Ini berarti biasanya plugin yang mendefinisikan widget tidak aktif atau Anda tidak memiliki izin untuk mengakses widget ini.",
+ "ExpandDataTableFooter": "Ubah visualisasi atau konfigurasi laporan.",
"Export": "Ekspor",
"ExportAsImage": "Ekspor sebagai Gambar",
"ExportThisReport": "Ekspor dataset ini ke format lain",
"Faq": "Pertanyaan yang Sering Diajukan",
+ "FileIntegrityWarning": "Pemeriksaan integritas berkas gagal dan melaporkan beberapa kesalahan. Anda harus memperbaiki masalah ini dan kemudian menyegarkan halaman sampai tidak menunjukkan kesalahan.",
+ "FileIntegrityWarningReupload": "Kesalahan di bawah mungkin sebagian atau gagal mengunggah berkas dari Piwik.",
+ "FileIntegrityWarningReuploadBis": "Coba lagi untuk mengunggah ulang berkas mode BINARY Piwik.",
"First": "Pertama",
+ "Flatten": "Diratakan",
"ForExampleShort": "misalnya",
+ "Forums": "Forum",
"FromReferrer": "dari",
"GeneralInformation": "Informasi Umum",
+ "GeneralSettings": "Pengaturan Umum",
"GetStarted": "Memulai",
"GiveUsYourFeedback": "Beri UmpanBalik!",
"Goal": "Tujuan",
@@ -172,6 +200,7 @@
"GraphHelp": "Informasi lebih lanjut tentang menampilkan grafik di Piwik.",
"HelloUser": "Halo, %s!",
"Help": "Bantuan",
+ "HelpTranslatePiwik": "Mungkin Anda berkenan untuk %1$s membantu kami meningkatkan translasi Piwik %2$s?",
"Hide": "sembunyikan",
"HoursMinutes": "%1$s jam %2$s menit",
"Id": "Id",
@@ -180,10 +209,13 @@
"Installed": "Terpasang",
"InvalidDateRange": "Rentang tidak sahih. Silakan ulangi lagi",
"InvalidResponse": "Data yang diterima tak sahih.",
+ "IP": "IP",
"JsTrackingTag": "Kode Pelacakan JavaScript",
"Language": "Bahasa",
"LastDays": "%s hari terakhir (termasuk hari ini)",
"LastDaysShort": "%s hari terakhir",
+ "LearnMore": "%1$s pelajari lebih banyak %2$s",
+ "Live": "Langsung",
"Loading": "Memuat...",
"LoadingData": "Memuat data...",
"LoadingPopover": "Memuat %s...",
@@ -203,11 +235,15 @@
"Monthly": "Bulanan",
"MonthlyReport": "bulanan",
"MonthlyReports": "Laporan bulanan",
+ "More": "Selengkapnya",
"MoreDetails": "Selengkapnya",
+ "MoreLowerCase": "selengkapnya",
"MultiSitesSummary": "Semua Situs",
"Name": "Nama",
"NbActions": "Jumlah Tindakan",
+ "NbInteractions": "Jumlah interaksi",
"NbSearches": "Jumlah Pencarian Internal",
+ "NeedMoreHelp": "Butuh bantuan lebih?",
"Never": "TakPernah",
"NewReportsWillBeProcessedByCron": "Ketika pengarsipan Piwik tidak dipicu oleh browser, laporan baru akan diproses oleh Crontab.",
"NewUpdatePiwikX": "Ada pembaruan: Piwik %s",
@@ -220,8 +256,10 @@
"NotDefined": "%s tak dikenal",
"Note": "Catatan",
"NotInstalled": "Tidak Terpasang",
+ "NotRecommended": "tidak direkomendasikan",
"NotValid": "%s tidak sahih",
"NumberOfVisits": "Jumlah kunjungan",
+ "NUsers": "%s pengguna",
"NVisits": "%s kunjungan",
"Ok": "Ok",
"OneAction": "1 tindakan",
@@ -240,8 +278,11 @@
"OperationIsNot": "Bukan",
"OperationLessThan": "Kurang dari",
"OperationNotEquals": "Tidak sama dengan",
+ "OperationStartsWith": "Mulai dengan",
+ "OperationEndsWith": "Akhiri dengan",
"OptionalSmtpPort": "Pilihan. Asali 25 untuk sambungan tak tersandi dan SMTP TLS, serta 465 untuk SMTP SSL.",
"Options": "Opsi",
+ "Or": "atau",
"OrCancel": "atau %1$s Batal %2$s",
"Others": "Lainnya",
"Outlink": "Tautan keluar",
@@ -250,11 +291,16 @@
"OverlayRowActionTooltipTitle": "Buka Penghampar Halaman",
"Overview": "Iktisar",
"Pages": "Halaman",
+ "Pagination": "%1$s - %2$s dari %3$s",
+ "PaginationWithoutTotal": "%1$s - %2$s",
"ParameterMustIntegerBetween": "Parameter %1$s harus bilangan bulat antara %2$s dan %3$s.",
"Password": "Sandi",
"Period": "Periode",
"Piechart": "Bagan Lingkaran",
+ "PiwikIsACollaborativeProjectYouCanContributeAndDonateNextRelease": "%1$sPiwik%2$s adalah proyek kolaboratif yang dibawa oleh anggota %7$s tim Piwik %8$s serta kontributor lainnya di seluruh dunia. <br\/> Jika Anda penggemar Piwik, Anda dapat membantu: mencari tahu %3$s Bagaimana berpartisipasi dalam Piwik %4$s, atau %5$s donasi sekarang %6$s untuk membantu mendanai rilis Piwik yang hebat berikutnya!",
+ "PiwikXIsAvailablePleaseNotifyPiwikAdmin": "%1$s telah tersedia. Silakan beritahu %2$s administrator Piwik %3$s.",
"PiwikXIsAvailablePleaseUpdateNow": "Piwik %1$s tersedia. %2$sSilakan memperbarui sekarang!%3$s (lihat %4$sperubahan%5$s).",
+ "PleaseContactYourPiwikAdministrator": "Silakan hubungi administrator Piwik Anda.",
"PleaseSpecifyValue": "Silakan tentukan nilai untuk '%s'.",
"PleaseUpdatePiwik": "Silakan perbarui Piwik Anda",
"Plugin": "Pengaya",
@@ -266,10 +312,13 @@
"Price": "Harga",
"ProductConversionRate": "Suku Tukar Produk",
"ProductRevenue": "Pendapatan Produk",
+ "Measurable": "Terukur",
+ "Measurables": "Terukur",
"PurchasedProducts": "Pesan Produk",
"Quantity": "Kuantitas",
"RangeReports": "Rentang waktu pilihan",
"ReadThisToLearnMore": "%1$sBaca ini untuk mempelajari selengkapnya.%2$s",
+ "Recommended": "Direkomendasikan",
"RecordsToPlot": "Rekaman ke alur",
"Refresh": "Penyegaran",
"RefreshPage": "Muat ulang halaman",
@@ -278,7 +327,10 @@
"Remove": "Hapus",
"Report": "Laporan",
"ReportGeneratedFrom": "Laporan ini telah dibangkitkan menggunakan data dari %s.",
+ "ReportRatioTooltip": "'%1$s' representasi %2$s dari %3$s %4$s dengan %5$s.",
"Reports": "Laporan",
+ "ReportsContainingTodayWillBeProcessedAtMostEvery": "Arsipkan laporan pada setiap X detik",
+ "RearchiveTimeIntervalOnlyForTodayReports": "Hal ini mempengaruhi laporan hari ini (atau Rentang Tanggal lainnya termasuk hari ini)",
"ReportsWillBeProcessedAtMostEveryHour": "Oleh karena itu laporan akan diproses paling setiap jam.",
"RequestTimedOut": "Data yang diminta %s kehabisan waktu. Silakan coba lagi.",
"Required": "%s diperlukan",
@@ -291,8 +343,12 @@
"Save": "Simpan",
"SaveImageOnYourComputer": "Untuk menyimpan gambar ke komputer Anda, klik kanan di gambar dan pilih \"Simpan Gambar dengan Nama...\"",
"Search": "Cari",
+ "Clear": "Bersihkan",
"SearchNoResults": "Tidak ada hasil",
+ "SeeAll": "lihat semua",
"SeeTheOfficialDocumentationForMoreInformation": "Lihat %1$sdokumentasi resmi%2$s untuk informasi selengkapnya.",
+ "SeeThisFaq": "Lihat %1$s faq ini %2$s.",
+ "Segment": "Segmen",
"SelectYesIfYouWantToSendEmailsViaServer": "Pilih \"Ya\" bila Anda ingin mengirim surel melalui peladen surel daripada menggunakan fungsi mail() lokal",
"Settings": "Pengaturan",
"Shipping": "Pengiriman",
@@ -307,12 +363,22 @@
"Source": "Sumber",
"StatisticsAreNotRecorded": "Pelacakan Kunjungan Piwik saat ini dimatikan! Akftifkan kembali dengan mengarur setting record_statistics = 1 di berkas config\/config.ini.php Anda.",
"Subtotal": "Sub-Jumlah",
+ "Summary": "Ringkasan",
"Table": "Tabel",
"TagCloud": "Awan Etiket",
"Tax": "pajak",
+ "TimeAgo": "%s yang lalu",
+ "TimeFormat": "Format tanggal",
"TimeOnPage": "Waktu dalam halaman",
+ "ToDeleteAllDirectoriesRunThisCommand": "Untuk menghapus semua direktori dalam sekali, Anda dapat menjalankan perintah berikut:",
+ "ToDeleteAllFilesRunThisCommand": "Untuk menghapus semua berkas dalam sekali, Anda dapat menjalankan perintah berikut:",
"Total": "Jumlah",
+ "TotalRatioTooltip": "Ini adalah %1$s dari semua %2$s %3$s.",
"TotalRevenue": "Jumalh Pendapatan",
+ "TotalVisitsPageviewsActionsRevenue": "(Total: %1$s kunjungan, %2$s halaman dilihat, %3$s aksi, %4$s pendapatan)",
+ "TrackingScopeAction": "Aksi",
+ "TrackingScopePage": "Halaman",
+ "TrackingScopeVisit": "Kunjungan",
"TransitionsRowActionTooltip": "Lihat apa yang pengujung lakukan sebelum dan sesudah melihat halaman ini",
"TransitionsRowActionTooltipTitle": "Buka Peralihan",
"TranslatorName": "Bayu Aditya H, Djaka PM, Hendry Lee",
@@ -320,11 +386,13 @@
"Unknown": "TakTahu",
"Upload": "Unggah",
"UsePlusMinusIconsDocumentation": "Gunakan ikon plus dan minus di kiri untuk bernavigasi.",
+ "UserId": "ID pengguna",
"Username": "Nama-Id",
"UseSMTPServerForEmail": "Gunakan peladen SMTP untuk surel",
"Value": "Nilai",
"VBarGraph": "Grafik batang tegak",
"View": "Tampilan",
+ "ViewDocumentationFor": "Lihat dokumentasi untuk %1$s",
"Visit": "Kunjungan",
"VisitConvertedGoal": "Kunjungi konversi dengan Sasaran minimal satu",
"VisitConvertedGoalId": "Kunjungi konversi ID Tujusn tertentu",
@@ -336,11 +404,20 @@
"Visitors": "Pengunjung",
"VisitsWith": "Kunjungan dengan %s",
"VisitorSettings": "Pengaturan Pengunjung",
+ "VisitType": "Tipe kunjungan",
"VisitTypeExample": "Sebagai contoh, untuk memilih semua pengunjung yang telah kembali ke situs, termasuk yang telah membeli sesuatu saat kunjungan sebelumnya, permintaan API akan mengandung %s",
"Warning": "Peringatan",
+ "Warnings": "Peringatan",
+ "WarningPhpVersionXIsTooOld": "Versi PHP %s yang Anda gunakan telah mencapai batas akhir End of Life (EOL). Anda didesak untuk meningkatkan ke versi saat ini, ketika menggunakan versi ini dapat mengekspos rentannya keamanan dan kutu yang telah diperbaiki pada versi PHP paling baru.",
+ "WarningPiwikWillStopSupportingPHPVersion": "Piwik berhenti mendukung versi PHP %1$s di versi mayor berikutnya. Perbarui PHP Anda paling tidak %2$s, sebelum hal ini terlambat!",
+ "YouMustUpgradePhpVersionToReceiveLatestPiwik": "Anda harus meningkatkan versi PHP dalam rangka menerima pembaruan Piwik terbaru.",
+ "PiwikCannotBeUpgradedBecausePhpIsTooOld": "Piwik tidak dapat diperbarui ke versi mayor terbaru karena versi PHP Anda terlalu tua.",
+ "PleaseUpgradeYourPhpVersionSoYourPiwikDataStaysSecure": "Silakan tingkatkan versi PHP Anda paling tidak PHP %s sehingga analitik Piwik Anda tetap aman.",
"WarningFileIntegrityNoManifest": "Pemeriksaan integritas berkas tak dapat dilakukan sebab berkas manifest.inc.php tak ditemukan.",
+ "WarningFileIntegrityNoManifestDeployingFromGit": "Jika Anda menyebarkan Piwik dari Git, pesan ini adalah normal.",
"WarningFileIntegrityNoMd5file": "Pemeriksaan integritas berkas tak dapat diselesaikan sebab fungsi md5_file() tak ditemukan.",
"WarningPasswordStored": "%1$sPeringatan:%2$s Sandi akan disimpan dalam berkas konfigurasi yang tampak kepada semua yang dapat mengakses ini.",
+ "WarningDebugOnDemandEnabled": "Mode pelacak %1$s telah diaktifkan. Untuk asalan keamanan hal ini harus diaktifkan hanya dalam waktu singkat. Untuk mematikannya setel %2$s ke %3$s dalam %4$s.",
"Website": "Situs",
"Weekly": "Mingguan",
"WeeklyReport": "mingguan",
@@ -348,6 +425,7 @@
"WellDone": "Selamat!",
"Widgets": "Gawit",
"Widget": "Gawit",
+ "XComparedToY": "%1$s dibandingkan dengan %2$s",
"XFromY": "%1$s dari %2$s",
"YearlyReport": "tahunan",
"YearlyReports": "Laporan tahunan",
diff --git a/lang/lv.json b/lang/lv.json
index 0bfaabb3e9..94d3f2b010 100644
--- a/lang/lv.json
+++ b/lang/lv.json
@@ -1,12 +1,19 @@
{
"General": {
+ "12HourClock": "12 stundu pulkstenis",
+ "24HourClock": "24 stundu pulkstenis",
"AbandonedCarts": "Pamestie iepirkumu grozi",
"AboutPiwikX": "Par Piwik %s",
"Action": "Darbība",
"Actions": "Darbības",
+ "Add": "Pievienot",
"AfterEntry": "pēc nonākšanas šeit",
+ "All": "Viss",
+ "AllowPiwikArchivingToTriggerBrowser": "Arhivēt ziņojumus, kad tiek skatīts no pārlūka.",
"AllWebsitesDashboard": "Visu vietņu panelis",
+ "And": "un",
"API": "API",
+ "Apply": "Pielietot",
"ArchivingInlineHelp": "Vidēja un augsta apmeklējuma vietnēm rekomendējam atslēgt pārlūka izsauktu Piwik arhivēšanu. Tā vietā iesakam lietot cron darbu, kas arhivē Piwik katru stundu.",
"ArchivingTriggerDescription": "Apjomīgām Piwik instalācijām iesakam %1$siestatīt cron darbu%2$s, kas apstrādās atskaites automātiski.",
"AuthenticationMethodSmtp": "SMTP autentifikācijas metode",
@@ -14,13 +21,19 @@
"AveragePrice": "Vidējā cena",
"AverageQuantity": "Vidējais apjoms",
"BackToPiwik": "Atpakaļ uz Piwik",
+ "Broken": "Salauzts",
+ "Cancel": "Atcelt",
+ "CannotUnzipFile": "Nevar atahivēt datni %1$s: %2$s",
"ChangePassword": "Mainīt paroli",
+ "ChooseDate": "Izvēlaties datumu. Pagaidām izvēlātais datums ir: %s",
"ChooseLanguage": "Izvēlieties valodu",
"ChoosePeriod": "Izvēlieties periodu",
"ClickHere": "Lai saņemtu papildus informāciju, klikšķiniet šeit.",
"Close": "Aizvērt",
+ "ClickToSearch": "Spiediet, lai meklētu",
"ColumnActionsPerVisit": "Darbības vienā apmeklējumā",
"ColumnActionsPerVisitDocumentation": "Vidējais darbību (lapas skatījumu, lejupielāžu un ārējo saišu) skaits, kas tika veiktas apmeklējuma laikā.",
+ "ColumnAverageGenerationTime": "Vid. ielādes laiks",
"ColumnAverageTimeOnPage": "Vid. laiks lapā",
"ColumnAverageTimeOnPageDocumentation": "Vidējais šīs lapas apmeklējuma garums (tikai šīs lapas, ne visas vietnes).",
"ColumnAvgTimeOnSite": "Vid. laiks vietnē",
@@ -59,31 +72,42 @@
"ColumnVisitsWithConversions": "Apmeklējumi ar reklāmguvumiem",
"ConfigFileIsNotWritable": "Piwik iestatījumu datne %1$s nav rakstāma, dažas no izmaiņām iespējams netiks saglabātas. %2$s Lūdzu izmainiet iestatījumu datnes atļaujas, lai tajā varētu ierakstīt.",
"ContinueToPiwik": "Turpināt uz Piwik",
+ "CurrentlyUsingUnsecureHttp": "Jūs pagaidām izmantojat Piwik caur HTTP, kas var būt riskanti. Mēs rekomendējam, lai jūs nokonfigurētu Piwik, lai tas izmanto SSL (HTTPS) priekš uzlabotas drošības.",
+ "CreatedByUser": "izveidojis %s",
"CurrentMonth": "Pašreizējais mēnesis",
"CurrentWeek": "Pašreizējā nedēļa",
"CurrentYear": "Pašreizējais gads",
"Daily": "Katru dienu",
+ "DailyReport": "katru dienu",
"DailySum": "dienas summa",
"DashboardForASpecificWebsite": "Izvēlētas vietnes panelis",
"Date": "Datums",
"DateRange": "Datumu diapazons:",
"DateRangeFrom": "No",
"DateRangeFromTo": "No %1$s līdz %2$s",
+ "DateRangeInPeriodList": "datumu diapazons",
"DateRangeTo": "Līdz",
+ "DaysHours": "%1$s dienas %2$s stundas",
"DaysSinceFirstVisit": "Dienas kopš pirmā apmeklējuma",
"DaysSinceLastEcommerceOrder": "Dienas kopš pēdējā e-komercijas pasūtījuma",
"DaysSinceLastVisit": "Dienas kopš pēdējā apmeklējuma",
"Default": "Noklusējuma",
+ "DefaultAppended": "(noklusējuma)",
"Delete": "Dzēst",
"Description": "Apraksts",
+ "Desktop": "Darbvirsma",
"Details": "Sīkāka informācija",
"Discount": "Atlaide",
"DisplaySimpleTable": "Rādīt vienkāršu tabulu",
"DisplayTableWithGoalMetrics": "Rādīt tabulu ar mērķu datiem",
"DisplayTableWithMoreMetrics": "Rādīt tabulu ar vairāk datiem",
+ "Documentation": "Dokumentācija",
+ "Donate": "Ziedot",
"Done": "Pabeigts",
"Download": "Lejupielādēt",
+ "DownloadFail_FileExists": "Šī datne %s jau eksistē!",
"DownloadFullVersion": "%1$sLejupielādējiet%2$s pilno versiju! Paskaties %3$s",
+ "DownloadPleaseRemoveExisting": "Ja Jūs vēlaties, lai to aizstāj, lūdzu izdzēsiet jau esošo datni.",
"Downloads": "Lejupielādes",
"EcommerceOrders": "E-komercijas pasūtījumi",
"EcommerceVisitStatusDesc": "Apmeklējuma e-komercijas statuss apmeklējuma beigās",
@@ -91,6 +115,7 @@
"Edit": "Labot",
"Error": "Kļūda",
"ExceptionConfigurationFileNotFound": "Iestatījumu datne {%s} netika atrasta.",
+ "ExceptionConfigurationFilePleaseCheckReadableByUser": "Lūdzu pārbaudiet vai lietotājam '%2$s' ir iespēja izlasīt %1$s.",
"ExceptionDatabaseVersion": "Jūsu %1$s versija ir %2$s, bet Piwik nepieciešams vismaz %3$s.",
"ExceptionFileIntegrity": "Integritātes pārbaude izgāzās: %s",
"ExceptionFilesizeMismatch": "Faila izmērs nesakrīt: %1$s (sagaidāmais izmērs: %2$s, atrasts: %3$s)",
@@ -242,16 +267,30 @@
"YourChangesHaveBeenSaved": "Izmaiņas saglabātas."
},
"Mobile": {
+ "AboutPiwikMobile": "Par Piwik Mobile",
"AccessUrlLabel": "Piwik pieejas URL",
+ "Account": "Konts",
+ "Accounts": "Konti",
"AddAccount": "Pievienot kontu",
+ "AddPiwikDemo": "Pievienot Piwik Demo",
+ "Advanced": "Papildus",
"AnonymousAccess": "Anonīma pieeja",
"AnonymousTracking": "Anonīma izsekošana",
+ "ChooseMetric": "Izvēlēties mērijumu",
+ "ConfirmRemoveAccount": "Vai Jūs vēlaties dzēst šo kontu?",
"DefaultReportDate": "Atskaites datums",
+ "EmailUs": "Sūtiet mums e-pastu",
"EnableGraphsLabel": "Rādīt grafikus",
+ "HowtoLoginAnonymous": "Atstājiet lietotājvārdu un paroli laukus tukšus, lai izmantotu anonīmu pierakstīšanos",
"HttpTimeout": "HTTP noilgums",
"LastUpdated": "Atjaunināts: %s",
+ "LoadingReport": "Ielādē %s",
+ "LoginUseHttps": "Izmantot https",
"NavigationBack": "Atpakaļ",
+ "NetworkError": "Tīkla kļūda",
+ "NetworkErrorWithStatusCodeShort": "Tīkla kļūda %s",
"NetworkNotReachable": "Tīkls nav sasniedzams",
+ "NoDataShort": "Nav datu",
"PullDownToRefresh": "Velc lai atjauninātu...",
"ReleaseToRefresh": "Atlaidiet lai atjaunotu...",
"Reloading": "Notiek pārlāde...",
@@ -261,5 +300,13 @@
"ShowLess": "Rādīt mazāk",
"VerifyAccount": "Notiek konta pārbaude",
"YouAreOffline": "Atvainojiet, bet Jūs paļaik atrodaties bezsaistē"
+ },
+ "RowEvolution": {
+ "AvailableMetrics": "Pieejamie mērījumi",
+ "CompareRows": "Salīdzināt ierakstus",
+ "ComparingRecords": "Salīdzināt %s rindas",
+ "MetricBetweenText": "no %1$s līdz %2$s",
+ "MetricChangeText": "%s pārmaiņas periodā",
+ "MetricsFor": "Mērijumi priekš %s"
}
} \ No newline at end of file
diff --git a/lang/nb.json b/lang/nb.json
index 19a1c20640..092bd6aab7 100644
--- a/lang/nb.json
+++ b/lang/nb.json
@@ -68,6 +68,7 @@
"ColumnPageBounceRateDocumentation": "Prosentandelen av besøk som startet på denne siden og forlot nettstedet med en gang.",
"ColumnPageviews": "Sidevisninger",
"ColumnPageviewsDocumentation": "Antallet ganger denne siden har vært besøkt.",
+ "ColumnPercentageVisits": "%% besøk",
"ColumnRevenue": "Inntekter",
"ColumnSumVisitLength": "Total tid brukt av besøkere (i sekunder)",
"ColumnTotalPageviews": "Sidevisninger totalt",
@@ -158,6 +159,7 @@
"ExceptionLanguageFileNotFound": "Fant ikke språkfilen «%s».",
"ExceptionMethodNotFound": "Metoden «%1$s» eksisterer ikke eller er ikke tilgjengelig i modulen «%2$s».",
"ExceptionMissingFile": "Mangler fil: %s",
+ "ExceptionUnexpectedFilePleaseDelete": "Vennligst slett disse filene for å forhindre feil.",
"ExceptionNonceMismatch": "Klarte ikke å verifisere autentiseringsnøkkelen i dette skjemaet.",
"ExceptionPrivilege": "Du har ikke tilgang til denne ressursen siden den krever «%s»-tilgang.",
"ExceptionPrivilegeAccessWebsite": "Du har ikke tilgang til denne ressursen siden den krever «%s»-tilgang for nettstedet med id = %d.",
@@ -229,6 +231,7 @@
"MultiSitesSummary": "Alle nettsteder",
"Name": "Navn",
"NbActions": "Antall handlinger",
+ "NbInteractions": "Antall interaksjoner",
"NbSearches": "Antall interne søk",
"NeedMoreHelp": "Trenger du mer hjelp?",
"Never": "Aldri",
diff --git a/lang/pl.json b/lang/pl.json
index b6f2bdb711..de922c343c 100644
--- a/lang/pl.json
+++ b/lang/pl.json
@@ -2,7 +2,7 @@
"General": {
"12HourClock": "zegar 12-godzinny",
"24HourClock": "zegar 24-godzinny",
- "AbandonedCarts": "Porzucone transakcje",
+ "AbandonedCarts": "Porzucone koszyki",
"AboutPiwikX": "O Piwik %s",
"Action": "Aktywność",
"Actions": "Aktywność",
@@ -26,6 +26,7 @@
"Cancel": "Anuluj",
"CannotUnzipFile": "Nie można rozpakować pliku %1$s: %2$s",
"ChangePassword": "Zmień hasło",
+ "ChangeTagCloudView": "Zwróć uwagę, że ten raport jest również dostępny w postaci innej niż chmura tagów. Użyj kontrolek u dołu raportu.",
"ChooseDate": "Wybierz datę, aktualnie wybrana data, to: %s",
"ChooseLanguage": "Wybierz język",
"ChoosePeriod": "Wybierz okres",
@@ -36,6 +37,7 @@
"ColumnActionsPerVisit": "Ilość akcji przypadających na wizytę",
"ColumnActionsPerVisitDocumentation": "Średnia liczba akcji (odsłon, pobrań plików lub kliknięć w linki wychodzące) na wizytę.",
"ColumnAverageGenerationTime": "Średni czas generowania",
+ "ColumnAverageGenerationTimeDocumentation": "Średni czas potrzebny do wygenerowania strony. Ta wielkość zawiera zawiera czas potrzebny serwerowi na wygenerowanie strony, plus czas, który potrzebny był przeglądarce odwiedzającego na jej pobranie. Niższy 'śr. czas generowania' oznacza do odwiedzającego szybszą stronę!",
"ColumnAverageTimeOnPage": "Średni czas przebywania na stronie",
"ColumnAverageTimeOnPageDocumentation": "Średni czas jaki odwiedzający spędzają na tej stronie (tylko na tej stronie, nie na całym serwisie)",
"ColumnAvgTimeOnSite": "Średni czas na stronie",
@@ -60,21 +62,25 @@
"ColumnNbActions": "Aktywność",
"ColumnNbActionsDocumentation": "Liczba akcji wykonana przez Twoich odwiedzających. Akcją mogą być odsłony, pobrania plików lub kliknięcia w linki wychodzące.",
"ColumnNbUniqVisitors": "Liczba niepowtarzających się użytkowników",
+ "ColumnNbUniqVisitorsDocumentation": "Liczba unikalnych odwiedzających Twój serwis. Każdy użytkownik jest zliczany jednokrotnie, nawet jeśli w ciągu dnia wielokrotnie odwiedzi serwis.",
"ColumnNbUsers": "Użytkownicy",
"ColumnNbUsersDocumentation": "Liczba użytkowników zalogowanych na twoja stronę. To jest liczba unikalnych, aktywnych użytkowników, którzy posiadają ustawiony User ID",
"ColumnNbVisits": "użytkownicy",
+ "ColumnNbVisitsDocumentation": "Jeśli użytkownik odwiedza Twoją stronę po raz pierwszy, lub powróci na stronę po ponad 30 minutach od ostatniego wejścia, zostanie to zaliczone jako nowa wizyta.",
+ "ColumnPageBounceRateDocumentation": "Odsetek wizyt, które rozpoczęły się na tej stronie i natychmiast się na niej zakończyły.",
"ColumnPageviews": "Liczba odsłon",
"ColumnPageviewsDocumentation": "Ile razy tę stronę odwiedziło.",
"ColumnPercentageVisits": "%% odwiedzin",
"ColumnRevenue": "Przychody",
"ColumnSumVisitLength": "Ogólny czas spędzony przez odwiedzającego (w sekundach)",
- "ColumnTotalPageviews": "Łącznie odwiedzin stron",
+ "ColumnTotalPageviews": "Razem wyświetleń stron",
"ColumnUniqueEntrances": "Unikalnych wejść",
"ColumnUniqueExits": "Unikalnych wyjść",
- "ColumnUniquePageviews": "Liczba odsłon niepowtarzających się",
+ "ColumnUniquePageviews": "Liczba unikalnych odsłon",
"ColumnUniquePageviewsDocumentation": "Liczba wizyt uwzględniających tą stronę. Jeżeli strona odwiedzana była kilka razy podczas jednej wizyty, zostanie policzona tylko raz.",
- "ColumnValuePerVisit": "Wartość odwiedzin",
+ "ColumnValuePerVisit": "Dochód \/ wizyta",
"ColumnViewedAfterSearch": "Kliknięć w wyniki wyszukiwania",
+ "ColumnViewedAfterSearchDocumentation": "Liczba odwiedzin tej Strony kiedy to odwiedzający skorzystał z wyszukiwarki w Twoim serwisie i kliknął link tej strony w wynikach wyszukiwania.",
"ColumnVisitDuration": "Czas pobytu (w sekundach)",
"ColumnVisitsWithConversions": "Wizyty z przeniesieniami",
"ConfigFileIsNotWritable": "Plik konfiguracyjny Piwik %1$s nie ma ustawionych praw do zapisu, zmiany poczynione nie mogły więc zostać zapisane. %2$s Zmień przez chmod uprawnienia do zapisu pliku konfiguracyjnego.",
@@ -86,11 +92,12 @@
"CurrentWeek": "bieżący tydzień",
"CurrentYear": "bieżący rok",
"Daily": "Codziennie",
- "DailyReport": "dziennie",
+ "DailyReport": "codziennie",
"DailyReports": "Raporty dzienne",
"DailySum": "Kwota dzienna",
"DashboardForASpecificWebsite": "Tablica analiz dla wybranej strony",
"DataForThisGraphHasBeenPurged": "Dane dla tego wykresu są starsze niż %s miesiące i zostały wyczyszczone.",
+ "DataForThisTagCloudHasBeenPurged": "Dane tej chmury tagów są starsze niż %s miesięcy i zostały usunięte.",
"Date": "Data",
"DateRange": "Zakres dat:",
"DateRangeFrom": "od",
@@ -117,20 +124,31 @@
"Download": "Pobierz",
"DownloadFail_FileExists": "Plik %s istnieje!",
"DownloadFail_FileExistsContinue": "Próbuję kontynuować pobieranie dla %s ale w pełni pobrany plik już istnieje!",
+ "DownloadFail_HttpRequestFail": "Nie udało się pobrać pliki! Strona, z której próbujesz go pobrać zdaje się nie działać właściwie. Próbuj później lub pobierz plik samodzielnie.",
"DownloadFullVersion": "%1$sPobierz%2$s wersję pełną! Zobacz %3$s",
"DownloadPleaseRemoveExisting": "Jeśli chcesz, żeby został zastąpiony, proszę usunąć istniejący plik.",
"Downloads": "Pobrania",
"EcommerceOrders": "Zamówienia e-commerce",
+ "EcommerceVisitStatusDesc": "Sprawdź status e-comerce na końcu wizyty",
+ "EcommerceVisitStatusEg": "Aby dla przykładu pobrać wszystkie wizyty, które złożyły się na zamówienie, żądanie API zaweirałoby %s",
"Edit": "Edycja",
"EncryptedSmtpTransport": "Wpisz szyfrowanie warstwy transportowej wymagane przez twój serwer SMTP.",
"Error": "Błąd",
"Errors": "Błędy",
+ "ErrorRequest": "Uppps... wystąpił problem z obsługą żądania. Możliwe, że na serwerze wystąpiła anomalia lub zażądany raport zawierał zbyt dużo danych. Proszę spróbuj później. Jeśli błąd będzie się powtarzał proszę %1$sskontaktuj się ze swoim administratorem Piwik %2$s w celu uzyskania pomocy.",
"EvolutionOverPeriod": "Postęp w okresie",
+ "EvolutionSummaryGeneric": "%1$s w %2$s w porównaniu do %3$s w %4$s. Zmiana: %5$s",
+ "ExceptionContactSupportGeneric": "Jeśli w dalszym ciągu występuje %1$sskontaktuj się ze swoim administratorem Piwik %2$s w celu uzyskania pomocy.",
+ "ExceptionCheckUserHasSuperUserAccessOrIsTheUser": "Musisz być albo Super Użytkownikiem albo samym użytkownikiem '%s'.",
"ExceptionConfigurationFileNotFound": "Plik konfiguracyjny {%s} nie został odnaleziony.",
+ "ExceptionConfigurationFileExistsButNotReadable": "Plik konfiguracji %s prawdopodobnie istnieje, ale Piwik nie może go odczytać.",
+ "ExceptionConfigurationFilePleaseCheckReadableByUser": "Proszę upewnij się, że użytkownik '%2$s' ma uprawnienia do odczytu %1$s.",
"ExceptionDatabaseVersion": "Twoja %1$s wersja to %2$s a Piwik wymaga minimum %3$s.",
+ "ExceptionDatabaseVersionNewerThanCodebase": "Twój Piwik używa starszej wersji kodu %1$s i jednocześnie wykryliśmy, że baza danych Piwik została zaktualizowana do nowszej wersji %2$s.",
+ "ExceptionDatabaseVersionNewerThanCodebaseWait": "Możliwe, że Twoi administratorzy Piwik aktualnie kończą aktualizację. Prosimy spróbuj ponownie za parę minut.",
"ExceptionFileIntegrity": "Weryfikacja integralności pliku zakończona niepowodzeniem: %s",
"ExceptionFilesizeMismatch": "Zła wielkość pliku: %1$s (spodziewana wielkość: %2$s, znaleziono: %3$s)",
- "ExceptionIncompatibleClientServerVersions": "Twoja %1$s wersja klienta jest %2$s co oznacza, że jest niezgodna z tą wersją serwera %3$s.",
+ "ExceptionIncompatibleClientServerVersions": "Twoja %1$s wersja klienta to %2$s co oznacza, że jest niezgodna z tą wersją serwera %3$s.",
"ExceptionInvalidAggregateReportsFormat": "Zagregowany format raportu '%1$s' jest niepoprawny. Zamiast niego spróbuj: %2$s.",
"ExceptionInvalidArchiveTimeToLive": "Obecny czas życia archiwum musi być określony numerem sekund większym niż zero",
"ExceptionInvalidDateFormat": "Format daty powinien być następujący: %1$s lub obsługiwany przez następujące słowa kluczowe przez %2$s funkcję (poznaj %3$s by uzyskać więcej informacji)",
@@ -143,7 +161,10 @@
"ExceptionLanguageFileNotFound": "Plik obsługi języka '%s' nie został odnaleziony.",
"ExceptionMethodNotFound": "Metoda '%1$s' nie istnieje lub nie jest osiągalna w module '%2$s'.",
"ExceptionMissingFile": "Brak pliku: %s",
+ "ExceptionUnexpectedFile": "Te pliki zostały znalezione w Twoim Piwik'u, ale nie spodziewaliśmy się ich.",
"ExceptionUnexpectedFilePleaseDelete": "Usuń te pliki, aby uniknąć błędów.",
+ "ExceptionUnexpectedDirectory": "Katalogi znalezione w Twoim Piwik'u, których się nie spodziewaliśmy.",
+ "ExceptionUnexpectedDirectoryPleaseDelete": "W celu uniknięcia błędów, proszę usuń wskazane katalogi.",
"ExceptionFileToDelete": "Plik do usunięcia: %s",
"ExceptionDirectoryToDelete": "Katalog do usunięcia: %s",
"ExceptionNonceMismatch": "Nie można pozytywnie zweryfikować tokenu zabezpieczającego w tym formularzu.",
@@ -155,13 +176,16 @@
"ExceptionUnreadableFileDisabledMethod": "Plik konfiguracyjny {%1$s} nie ma praw do odczytu. Twój hosting mógł zablokować %2$s.",
"ExceptionReportNotFound": "Raport nie istnieje.",
"ExceptionWidgetNotFound": "Żądany gadżet nie istnieje.",
- "ExceptionReportNotEnabled": "Żądany raport nie jest włączony. Zazwyczaj oznacza to, że wtyczka, która określa raport jest nieaktywowana albo nie masz wystarczających uprawnień do dostępu do raportu.",
+ "ExceptionReportNotEnabled": "Żądany raport nie jest włączony. Zazwyczaj oznacza to, że wtyczka, która określa raport nie została aktywowana albo nie masz wystarczających uprawnień do dostępu do raportu.",
"ExceptionWidgetNotEnabled": "Żądany gadżet nie jest włączony. To zazwyczaj oznacza, że albo wtyczka, która obsługuje ten gadżet, jest nieaktywna, albo nie masz wystarczających praw dostępu.",
"ExpandDataTableFooter": "Zmienić wizualizację lub skonfigurować raport",
"Export": "Eksport",
"ExportAsImage": "Eksport jako obraz",
"ExportThisReport": "Eksport danych w innych formatach",
"Faq": "FAQ",
+ "FileIntegrityWarning": "Weryfikacja spójności plików nie powiodła się i zwróciła błędy. Wprowadź niezbędne poprawki i po odświeżeniu strony upewnij się, że nie pojawią się błędy.",
+ "FileIntegrityWarningReupload": "Poniższe błędy mogą wynikać z częściowego lub nieudanego wgrania plików Piwik.",
+ "FileIntegrityWarningReuploadBis": "Spróbuj ponownie wgrać wszystkie pliki Piwik w trybie BINARNYM.",
"First": "Pierwszy",
"Flatten": "Płaski",
"ForExampleShort": "np.",
@@ -190,6 +214,7 @@
"Language": "Język",
"LastDays": "w czasie ostatnich %s dni (włączając dzisiejszy)",
"LastDaysShort": "Ostatnie %s dni",
+ "LearnMore": "%1$sdowiedz się więcej%2$s",
"Live": "Na żywo",
"Loading": "Ładowanie...",
"LoadingData": "Ładowanie danych...",
@@ -199,12 +224,12 @@
"Logout": "Wylogowanie",
"MainMetrics": "Główne wskaźniki",
"Matches": "Pasuje",
- "MediumToHighTrafficItIsRecommendedTo": "Dla serwisów o średnim natężeniu ruchu, zaleca się przetwarzanie raportowania dziennego najwyżej do pół godziny (%1$s sekund) lub co godzinę (%2$s sekund).",
+ "MediumToHighTrafficItIsRecommendedTo": "Dla serwisów o średnim i dużym natężeniu ruchu, zaleca się przetwarzanie raportowania dziennego najwyżej do pół godziny (%1$s sekund) lub co godzinę (%2$s sekund).",
"Metadata": "Metadata",
"Metric": "Metryka",
"Metrics": "Metryki",
"MetricsToPlot": "Dane do porównania",
- "MetricToPlot": "Metryka do wykreślenia",
+ "MetricToPlot": "Wskaźnik do wykreślenia",
"MinutesSeconds": "%1$s min %2$ss",
"Mobile": "Przenośny",
"Monthly": "Miesięcznie",
@@ -272,6 +297,7 @@
"Password": "Hasło",
"Period": "Okres",
"Piechart": "Wykres kołowy",
+ "PiwikIsACollaborativeProjectYouCanContributeAndDonateNextRelease": "%1$sPiwik%2$s jest wspólnym projektem realizowanym przez członków %7$szespół Piwik%8$s jak również wielu wolontariuszy z całego świata. <br\/> Jeśli jesteś fanem Piwik'a, możesz pomóc: zobacz jak %3$s Jak współtworzyć Piwik'a %4$s, lub %5$s sponsoruj%6$s aby pomóc ufundować kolejne wspaniałe wydanie Piwik'a!",
"PiwikXIsAvailablePleaseNotifyPiwikAdmin": "%1$s jest dostępny. Prosimy powiadomić%2$sPiwik administratora%3$s.",
"PiwikXIsAvailablePleaseUpdateNow": "Piwik %1$s jest dostępna. %2$sWykonaj aktualizację!%3$s (zobacz %4$szmiany%5$s).",
"PleaseContactYourPiwikAdministrator": "Skontaktuj się z administratorem Piwika.",
@@ -286,25 +312,32 @@
"Price": "Cena",
"ProductConversionRate": "Współczynnik konwersji produktu",
"ProductRevenue": "Przychody ze sprzedaży produktów",
+ "Measurable": "Wartość mierzalna",
+ "Measurables": "Wartości mierzalne",
"PurchasedProducts": "Zakupione produkty",
"Quantity": "Ilość",
"RangeReports": "Niestandardowe zakresy dat",
"ReadThisToLearnMore": "%1$sPrzeczytaj to żeby wiedzieć więcej.%2$s",
"Recommended": "Zalecane",
+ "RecordsToPlot": "Dane na wykresie",
"Refresh": "Odśwież",
"RefreshPage": "Odśwież stronę",
"RelatedReport": "Powiązany raport",
"RelatedReports": "Powiązane raporty",
"Remove": "Usuń",
"Report": "Raport",
- "ReportGeneratedFrom": "Ten raport został wygenerowany na podstawie dany z %s.",
+ "ReportGeneratedFrom": "Ten raport został wygenerowany na podstawie danych z %s.",
"ReportRatioTooltip": "%1$s \"reprezentuje%2$s z%3$s%4$s z%5$s.",
"Reports": "Raporty",
+ "ReportsContainingTodayWillBeProcessedAtMostEvery": "Archiwizuj raporty nie rzadziej niż co X sekund",
+ "RearchiveTimeIntervalOnlyForTodayReports": "To dotyczy tylko dzisiejszych raportów (lub dowolnego innego Zakresu Dat włączając dziś)",
"ReportsWillBeProcessedAtMostEveryHour": "Raporty zostaną przetwarzane najwyżej co godzinę.",
"RequestTimedOut": "Żądanie danych w procesie %s nie zostało wykonane w wyznaczonym czasie - time out. Spróbuj ponownie.",
"Required": "%s wymagano",
"ReturningVisitor": "Odwiedzający powrócił",
"ReturningVisitorAllVisits": "Zobacz wszytskie odwiedziny",
+ "RowEvolutionRowActionTooltip": "Sprawdź jak zmieniały się wartości tego parametru w czasie",
+ "RowEvolutionRowActionTooltipTitle": "Otwórz wykres zmian",
"Rows": "Wierszy",
"RowsToDisplay": "Ilość wierszy",
"Save": "Zapisz",
@@ -314,6 +347,7 @@
"SearchNoResults": "Brak wyników",
"SeeAll": "Zobacz wszystko",
"SeeTheOfficialDocumentationForMoreInformation": "Zobacz w %1$soficjalnej dokumentacjin%2$s, aby uzyskać więcej informacji.",
+ "SeeThisFaq": "Zobacz %1$sto FAQ%2$s.",
"Segment": "Segment",
"SelectYesIfYouWantToSendEmailsViaServer": "Wybierz \"Tak\", jeśli chcesz lub musisz wysyłać e-mail za pośrednictwem serwera nazw, zamiast lokalnej obsługi przez zintegrowaną funkcję poczty",
"Settings": "Konfiguracja",
@@ -337,9 +371,11 @@
"TimeFormat": "Format czasu",
"TimeOnPage": "Czas na stronie",
"ToDeleteAllDirectoriesRunThisCommand": "W celu usunięcia tych katalogów możesz użyć komendy:",
+ "ToDeleteAllFilesRunThisCommand": "Aby usunąć wszystkie te pliki na raz, wywołaj to polecenie:",
"Total": "Ogólnie",
"TotalRatioTooltip": "To jest %1$s wszystkich %2$s %3$s.",
- "TotalRevenue": "Przychody ogółem",
+ "TotalRevenue": "Dochód razem",
+ "TotalVisitsPageviewsActionsRevenue": "(Razem: %1$s odwiedzin, %2$s wyświetleń strony, %3$s akcji, %4$s dochód)",
"TrackingScopeAction": "Akcja",
"TrackingScopePage": "Strona",
"TrackingScopeVisit": "Wizyta",
@@ -359,6 +395,7 @@
"ViewDocumentationFor": "Zobacz dokumentacje dla %1$s",
"Visit": "Oglądający",
"VisitConvertedGoal": "Odwiedziny przekształciły się w co najmniej jeden trafiony cel zgodny z założeniami",
+ "VisitConvertedGoalId": "Wizyta, która przełożyła się na realizację konkretnego Id założenia",
"VisitConvertedNGoals": "Odwiedziny przekształciły się %s jako osiągnięte cele ze zdefiniowanych wcześniej założeń",
"VisitDuration": "Średni czas pobytu na stronie (w sekundach)",
"Visitor": "Odwiedzający",
@@ -375,6 +412,7 @@
"WarningPiwikWillStopSupportingPHPVersion": "Piwik przestanie wspierać PHP %1$s w następnej głownej wersji. Zaktualizuj PHP do przynajmniej PHP %2$s, zanim będzie za późno!",
"YouMustUpgradePhpVersionToReceiveLatestPiwik": "Musisz zaktualizować PHP, aby zainstalować najnowszą aktualizację Piwika.",
"PiwikCannotBeUpgradedBecausePhpIsTooOld": "Piwik nie może zostać zaktualizowany do najnowszej wersji, ponieważ Twoja wersja PHP jest za stara.",
+ "PleaseUpgradeYourPhpVersionSoYourPiwikDataStaysSecure": "Proszę zaktualizuj PHP przynajmniej do wersji %s, tak aby statystyki Piwik pozostały bezpieczne.",
"WarningFileIntegrityNoManifest": "Weryfikacja integralności plików nie mogła zostać przeprowadzona z powodu braku pliku manifest.inc.php.",
"WarningFileIntegrityNoManifestDeployingFromGit": "W przypadku wdrażania Piwik z Git, komunikat ten jest prawidłowy.",
"WarningFileIntegrityNoMd5file": "Weryfikacja integralności plików nie mogła zostać zakończona z powodu braku funkcji md5_file().",
@@ -385,7 +423,7 @@
"WeeklyReports": "Raporty tygodniowe",
"WellDone": "Dobra robota!",
"Widgets": "Interfejs widżetów",
- "Widget": "Widget",
+ "Widget": "Widżet",
"XComparedToY": "%1$s w stosunku do %2$s",
"XFromY": "%1$s z %2$s",
"YearlyReport": "rocznie",
@@ -394,7 +432,7 @@
"Yes": "Tak",
"YouAreCurrentlyUsing": "Aktualnie używasz Piwik %s.",
"YouAreViewingDemoShortMessage": "Oglądasz demo aplikacji Piwik",
- "YouMustBeLoggedIn": "Musisz się zalogować, by uzyskać dostęp do funkcji zasobów.",
+ "YouMustBeLoggedIn": "Musisz się zalogować, by uzyskać dostęp do tej funkcjonalności.",
"YourChangesHaveBeenSaved": "Twoje modyfikacje zostały zapisane pomyślnie."
},
"Mobile": {
@@ -407,6 +445,8 @@
"Advanced": "Zaawansowane",
"AnonymousAccess": "Dostęp anonimowy",
"AnonymousTracking": "Śledzenie anonimowe",
+ "AskForAnonymousTrackingPermission": "Po aktywacji, Piwik Mobile będzie wysyłał anonimowe statystyki użytkowania do piwik.org. Posłużą one deweloperom Piwik Mobile do lepszego zrozumienia sposobów korzystania z aplikacji. Wysyłane informacje to: kliknięcia menu i ustawień, nazwa i wersja systemu operacyjnego, każdy błąd wyświetlony w Piwik Mobile. NIE BĘDZIEMY śledzili żadnych Twoich statystyk. Te anonimowe dane nigdy nie zostaną upublicznione. W dowolnym momencie możesz włączyć lub wyłączyć anonimowe statystyki w Ustawieniach.",
+ "ChooseHttpTimeout": "Czas oczekiwania na odpowiedź",
"ChooseMetric": "Wybierz metrykę",
"ChooseReport": "Wybierz raport",
"ChooseSegment": "Wybierz segment",
@@ -416,17 +456,21 @@
"EnableGraphsLabel": "Wyświetlanie wykresów",
"EvolutionGraph": "Graf Historyczny",
"HelpUsToImprovePiwikMobile": "Czy chcesz włączyć anonimowe śledzenie wykorzystania w Piwik Mobile?",
- "HowtoDeleteAnAccount": "Naciśnij i przytrzymaj by usunac konto.",
+ "HowtoDeleteAnAccount": "Naciśnij i przytrzymaj by usunąć konto.",
"HowtoDeleteAnAccountOniOS": "W celu usunięcia konta przeciągnij z prawej do lewej",
"HowtoLoginAnonymous": "Pozostaw nazwę i hasło uzytkownika pustymi dla logowania anonimowego",
+ "HttpIsNotSecureWarning": "Twój token autoryzacji Piwik (tiken_auth) będzie przesyłany jako zwykły tekst, gdy używasz 'HTTP'. Z tego powodu zalecamy korzystanie z HTTPS umożliwiającego bezpieczny przesył danych przez Internet. Czy chcesz kontynuować?",
"HttpTimeout": "HTTP Timeout - Przekroczono maksymalny dozwolony czas",
+ "IncompatiblePiwikVersion": "Obecnie zainstalowana wersja Piwik nie jest zgodna z Piwik Mobile 2. Uaktualnij swoją instalację Piwik i spróbuj ponownie lub zainstaluj Piwik Mobile 1.",
"LastUpdated": "Ostatnia aktualizacja: %s",
"LoadingReport": "Ładowanie %s",
"LoginCredentials": "Uprawnienia",
+ "LoginToPiwikToChangeSettings": "Zaloguj się na swój serwer Piwik, aby tworzyć i aktualizować serwisy, użytkowników lub aby zmienić na przykład \"Domyślny raport do wczytania\" w sekcji Konfiguracja",
"LoginUseHttps": "Użyj https",
"MultiChartLabel": "Wyświetlanie linią z gwiazdek",
"NavigationBack": "Powrót",
"NetworkError": "Błąd sieci",
+ "NetworkErrorWithStatusCode": "Wystąpił błąd: \"%1$s\". Żądanie zwróciło status \"%2$s\". Adres URL to: \"%3$s\". W celu uzyskania większej ilości informacji o błędzie i jego rozwiązaniach, proszę sprawdź wprowadzony adres URL i logi błędów serwera.",
"NetworkErrorWithStatusCodeShort": "Błąd sieci %s",
"NetworkNotReachable": "Sieć nieosiągalna",
"NoAccountIsSelected": "Musisz wybrać konto. Dodaj nowe konto jeśli go nie skonfigurowałeś.",
@@ -439,19 +483,25 @@
"NoWebsitesShort": "Brak stron",
"PullDownToRefresh": "Przeciągnij w dół aby odświeżyć..",
"PossibleSslError": "Możliwy błąd certyfikatu SSL",
+ "PossibleSslErrorExplanation": "Wystąpił błąd, którego przyczyną może być nieważny lub samodzielnie podpisany certyfikat: \"%s\". Logowanie może być możliwe po wyłączeniu weryfikacji SSL, ale jest mniej bezpieczne. Zmianę weryfikacji SSL możesz wykonać w Ustawieniach w dowolnym momencie.",
"IgnoreSslError": "Ignoruj błąd SSL",
"RatingDontRemindMe": "Nie przypominaj mi",
"RatingNotNow": "Nie teraz",
"RatingNow": "OK, ocenię to teraz",
+ "RatingPleaseRateUs": "Aplikacja Piwik Mobile jest darmowa i naprawdę zależy nam na Twojej opinii. Prosimy poświęć 1 minutkę aby ocenić ją w %1$s. Jeśli chcesz zaproponować nowe funkcjonalności lub zgłosić błąd, zapraszamy do kontaktu %2$s",
"ReleaseToRefresh": "Puść aby odświeżyć...",
"Reloading": "Przeładowywanie...",
+ "RequestTimedOutShort": "Zbyt długi czas oczekiwania na połączenie",
"RestrictedCompatibility": "Ograniczona kompatybilność",
+ "RestrictedCompatibilityExplanation": "Piwik w użytkowanej wersji %s nie jest w pełni wspierany przez Piwik Mobile 2. Istnieje prawdopodobieństwo występowania błędów. Zalecamy aktualizację Piwik'a do najnowszej wersji lub instalację Piwik Mobile 1.",
"SaveSuccessError": "Prosimy sprawdzić ustawienia konfiguracyjne",
"SearchWebsite": "Przeszukuj witryny",
"ShowAll": "Pokaż wszystko",
"ShowLess": "Pokaż mniej",
+ "StaticGraph": "Wykres poglądowy",
"TopVisitedWebsites": "Najczęściej odwiedzanie strony",
"TryIt": "Wypróbuj!",
+ "UseSearchBarHint": "Pierwsze %s serwisów jest tu wyświetlane. Porszę skorzystaj z paska wyszukiwania, aby uzyskać dostęp do pozostałych serwisów.",
"VerifyAccount": "Weryfikowanie Konta",
"ValidateSslCertificate": "Zweryfikuj certyfikat SSL",
"VerifyLoginData": "Upewnij się, że Twój login i hasło są poprawne.",
@@ -462,9 +512,10 @@
"CompareDocumentation": "Kliknij poniższy link i otwórz to okno dla kolejnego wiersza tej samej tabeli, aby porównać wiele rekordów.<br\/>Przytrzymaj Shift, aby zaznaczyć wiersze bez otwierania tego okna.",
"CompareRows": "Porównaj rekordy",
"ComparingRecords": "Porównywanych wierszy %s",
- "Documentation": "Kliknij metryki, aby wyświetlić jest na dużym wykresie ewolucyjnym. Przytrzymaj Shift, aby wyświetlić kilka metryk na raz.",
+ "Documentation": "Kliknij metryki, aby wyświetlić je na dużym wykresie ewolucyjnym. Przytrzymaj Shift, aby wyświetlić kilka metryk na raz.",
"MetricBetweenText": "od %1$s do %2$s",
"MetricChangeText": "%s zmiany w okresie",
+ "MetricMinMax": "%1$s daty pomiędzy %2$s i %3$s w czasie",
"MetricsFor": "Metryka dla %s",
"MultiRowEvolutionTitle": "Postęp dla wielu rekordów",
"PickAnotherRow": "Wybierz inny wiersz do porównania",
diff --git a/lang/ru.json b/lang/ru.json
index 13ac4ca94c..e0c365ad12 100644
--- a/lang/ru.json
+++ b/lang/ru.json
@@ -62,12 +62,15 @@
"ColumnNbActions": "Действия",
"ColumnNbActionsDocumentation": "Количество действий, выполненных вашими пользователями. К событиям относятся просмотры страниц, загрузки и внешние ссылки.",
"ColumnNbUniqVisitors": "Уникальные посетители",
+ "ColumnNbUniqVisitorsDocumentation": "Число неповторяющихся посетителей, приходящих на ваш на ваш веб-сайт. Каждый пользователь засчитывается только один раз, даже если они посещают веб-сайт несколько раз в день.",
"ColumnNbUsers": "Пользователи",
"ColumnNbUsersDocumentation": "Число пользователей logged на вашем Веб-сайте. Это число уникальных пользователей для которых установлен User ID (с помощью функции Tracking-кода 'setUserId').",
"ColumnNbVisits": "Посещения",
+ "ColumnNbVisitsDocumentation": "Если посетитель приходит на ваш веб-сайт впервые, или если они посещают страницу спустя 30 минут и более с момента их последнего просмотра страницы, это будет как новое посещение.",
"ColumnPageBounceRateDocumentation": "Процент посещений, которые начались на этой странице и сразу же закончились (посетитель ушел на другой сайт или закрыл вкладку).",
"ColumnPageviews": "Просмотры страниц",
"ColumnPageviewsDocumentation": "Количество просмотров этой страницы.",
+ "ColumnPercentageVisits": "%% Посещений",
"ColumnRevenue": "Прибыль",
"ColumnSumVisitLength": "Общее время посетителей на сайте (секунд)",
"ColumnTotalPageviews": "Общее число просмотров страниц",
@@ -158,6 +161,12 @@
"ExceptionLanguageFileNotFound": "Файл языка '%s' не найден.",
"ExceptionMethodNotFound": "Метод '%1$s' не существует или недоступен в модуле '%2$s'.",
"ExceptionMissingFile": "Отсутствует файл: %s",
+ "ExceptionUnexpectedFile": "В вашем Piwik были найдены файлы, но мы не ожидали их.",
+ "ExceptionUnexpectedFilePleaseDelete": "Пожалуйста, удалите эти файлы, чтобы избежать ошибок.",
+ "ExceptionUnexpectedDirectory": "В вашем Piwik были найдены директории, но мы не ожидали их.",
+ "ExceptionUnexpectedDirectoryPleaseDelete": "Пожалуйста, удалите эти директории, чтобы избежать ошибок.",
+ "ExceptionFileToDelete": "Файл для удаления: %s",
+ "ExceptionDirectoryToDelete": "Директория для удаления: %s",
"ExceptionNonceMismatch": "Не могу проверить элемент безопасности для этой формы.",
"ExceptionPrivilege": "Вы не можете иметь доступ к этому ресурсу, поскольку он требует прав %s.",
"ExceptionPrivilegeAccessWebsite": "Вы не можете получить доступ к этому ресурсу, поскольку необходимы права %s для сайта с id = %d.",
@@ -174,6 +183,9 @@
"ExportAsImage": "Экспортировать как изображение",
"ExportThisReport": "Экспортировать в другие форматы",
"Faq": "FAQ",
+ "FileIntegrityWarning": "Проверка целостности файлов завершилась неудачей и возвратила ошибки. Вам следует исправлять проблему и обновлять страницу до тех пор, пока она не отобразится без ошибок.",
+ "FileIntegrityWarningReupload": "Ошибки ниже могут быть обусловлены частичной или неудавшейся загрузкой файлов Piwik.",
+ "FileIntegrityWarningReuploadBis": "Попробуйте заново загрузить все файлы Piwik в режиме BINARY.",
"First": "Первый",
"Flatten": "Сгладить",
"ForExampleShort": "напр.,",
@@ -229,6 +241,7 @@
"MultiSitesSummary": "Все проекты",
"Name": "Имя",
"NbActions": "Количество действий",
+ "NbInteractions": "Количество взаимодействий",
"NbSearches": "Количество обращений к внутреннему поиску",
"NeedMoreHelp": "Нужна помощь?",
"Never": "Никогда",
@@ -284,6 +297,7 @@
"Password": "Пароль",
"Period": "Период",
"Piechart": "Круговая диаграмма",
+ "PiwikIsACollaborativeProjectYouCanContributeAndDonateNextRelease": "%1$sPiwik%2$s - это совместный проект членов %7$sкоманды Piwik%8$s, а также многих других авторов по всему земному шару. <br\/> Если вы - фанат Piwik, вы можете помочь: узнать, %3$sКак принять участие в Piwik%4$s, или %5$sсделать пожертвование сейчас%6$s, чтобы помочь выпустить следующую замечательную версию Piwik!",
"PiwikXIsAvailablePleaseNotifyPiwikAdmin": "Доступен %1$s. Пожалуйста, сообщите %2$sадминистратору Piwik%3$s.",
"PiwikXIsAvailablePleaseUpdateNow": "Piwik %1$s доступен для скачивания. %2$s Пожалуйста, обновитесь!%3$s (см. %4$s изменения%5$s).",
"PleaseContactYourPiwikAdministrator": "Пожалуйста, обратитесь к администратору Piwik.",
@@ -356,6 +370,8 @@
"TimeAgo": "%s назад",
"TimeFormat": "Формат времени",
"TimeOnPage": "Время, проведенное на странице",
+ "ToDeleteAllDirectoriesRunThisCommand": "Чтобы удалить все директории сразу, вы можете запустить эту команду:",
+ "ToDeleteAllFilesRunThisCommand": "Чтобы удалить все файлы сразу, вы можете запустить эту команду:",
"Total": "Всего",
"TotalRatioTooltip": "Это %1$s из всех %2$s %3$s.",
"TotalRevenue": "Общая прибыль",
diff --git a/lang/sk.json b/lang/sk.json
index 690a612d4b..11f509110b 100644
--- a/lang/sk.json
+++ b/lang/sk.json
@@ -446,7 +446,7 @@
"Advanced": "Pokročilé",
"AnonymousAccess": "Anonymný prístup",
"AnonymousTracking": "Anonymné sledovanie",
- "AskForAnonymousTrackingPermission": "Ak je to povolené, tak Piwik Mobile pošle anonymné dáta o užívaní na piwik.org. Zámerom je využiť tieto dáta na pomoc vývojárom Piwik Mobile lepšie pochopiť, ako je aplikácia využívaná. Zaslané informácie sú: menu a nastavenia na ktoré bolo kliknuté, názov a verzia OS, každá chyba zobrazená v Piwik Mobile. NEBUDEME stopovať žiadne tvoje analytické údaje. Tieto anonymné dáta nebudú nikdy zverejnené. Môžete hocikedy povoliť\/zakázať anonymné posielanie v Settings -nastavenia-.",
+ "AskForAnonymousTrackingPermission": "Ak je povolené, Piwik Mobile pošle anonymné dáta o používaní na piwik.org. Zámerom je využiť tieto dáta na pomoc vývojárom Piwik Mobile lepšie pochopiť, ako je aplikácia používaná. Zaslané informácie sú: menu a nastavenia na ktoré bolo kliknuté, názov a verzia OS, každá chyba zobrazená v Piwik Mobile. NEBUDEME sledovať žiadne vaše analytické údaje. Tieto anonymné dáta nebudú nikdy zverejnené. Môžete hocikedy povoliť\/zakázať anonymné posielanie v Settings -nastavenia-.",
"ChooseHttpTimeout": "Vyberte hodnotu pre timeout HTTP",
"ChooseMetric": "Vyberte metriku",
"ChooseReport": "Vyberte report",
@@ -456,7 +456,7 @@
"EmailUs": "Pošlite nám e-mail",
"EnableGraphsLabel": "Zobraziť grafy",
"EvolutionGraph": "Historický graf",
- "HelpUsToImprovePiwikMobile": "Chceš povoliť anonymný zber dát v Piwik Mobile?",
+ "HelpUsToImprovePiwikMobile": "Chcete povoliť anonymný zber dát v Piwik Mobile?",
"HowtoDeleteAnAccount": "Pre zmazanie účtu podrž dlho stlačené.",
"HowtoDeleteAnAccountOniOS": "Pre zmazanie účtu pretiahni z prava do ľava.",
"HowtoLoginAnonymous": "Pre anonymné prihlásenie nechajte užívateľské meno a heslo prázdne.",
diff --git a/lang/sv.json b/lang/sv.json
index c68987a81c..7bf271965e 100644
--- a/lang/sv.json
+++ b/lang/sv.json
@@ -14,7 +14,7 @@
"And": "och",
"API": "API",
"Apply": "Verkställ",
- "ArchivingInlineHelp": "För webbplatser med medelhög till hög trafik rekommenderas det att du stänger av Piwik's funktion för arkivering att aktiveras från denna webbläsare.",
+ "ArchivingInlineHelp": "För webbplatser med medelhög till hög trafik rekommenderas det att du stänger av Piwiks funktion för arkivering att aktiveras från webbläsare. Istället rekommenderar vi att du konfigurerar ett cronjobb för att processa Piwikrapporter varje timme.",
"ArchivingTriggerDescription": "För större Piwik-installationer rekommenderas det att du %1$ssätta upp ett cron job%2$s för att behandla rapporterna automatiskt.",
"AuthenticationMethodSmtp": "Autentiseringsmetod för SMTP",
"AverageOrderValue": "Genomsnittligt ordervärde",
@@ -66,9 +66,11 @@
"ColumnNbUsers": "Användare",
"ColumnNbUsersDocumentation": "Antal användare inloggade på din webbplats. Detta är antalet unika aktiva användare som har ett användar-ID satt (via funktionen för språningskod 'setUserId').",
"ColumnNbVisits": "Besök",
+ "ColumnNbVisitsDocumentation": "Om en besökare kommer till din webbplats för första gången eller om de besöker en sida 30 minuter efter den senaste sidvisningen räknas det som ett nytt besök.",
"ColumnPageBounceRateDocumentation": "Andelen besök som startade på denna sida och lämnade webbplatsen direkt.",
"ColumnPageviews": "Sidvisningar",
"ColumnPageviewsDocumentation": "Antalet gånger som denna sida besöktes.",
+ "ColumnPercentageVisits": "%% besök",
"ColumnRevenue": "Inkomst",
"ColumnSumVisitLength": "Total tid spenderad av besökare (i sekunder)",
"ColumnTotalPageviews": "Totala sidvisningar",
@@ -159,6 +161,10 @@
"ExceptionLanguageFileNotFound": "Språkfilen '%s' hittades inte.",
"ExceptionMethodNotFound": "Metoden '%1$s' finns inte eller är inte tillgänglig i denna modulen '%2$s'.",
"ExceptionMissingFile": "Fil saknas: %s",
+ "ExceptionUnexpectedFile": "Filer som inte förväntades hittades in din Piwikinstallation.",
+ "ExceptionUnexpectedFilePleaseDelete": "Radera dessa filer för att förhindra fel.",
+ "ExceptionUnexpectedDirectory": "Kataloger som inte förväntades hittades i din Piwikinstallation.",
+ "ExceptionUnexpectedDirectoryPleaseDelete": "Radera dessa kataloger för att förhindra fel.",
"ExceptionFileToDelete": "Fil som raderas: %s",
"ExceptionDirectoryToDelete": "Katalog som raderas: %s",
"ExceptionNonceMismatch": "Kunde inte verifiera säkerhetsbeviset på detta formulär.",
@@ -171,11 +177,15 @@
"ExceptionReportNotFound": "Den begärda rapporten finns inte.",
"ExceptionWidgetNotFound": "Den begärda widgeten finns inte.",
"ExceptionReportNotEnabled": "Den begärda rapporten är inte aktiverad. Det brukar bero på att den plugin som skapar rapporten har avaktiverats eller att du saknar behörighet att se denna rapport.",
+ "ExceptionWidgetNotEnabled": "Den begärda widgeten är inte aktiverad. Det betyder vanligtvis att den plugin som hanterar widgeten är avaktiverat eller att du inte har tillräcklig behörighet för att använda denna widget.",
"ExpandDataTableFooter": "Ändra visualiseringen eller konfigurera rapporten",
"Export": "Exportera",
"ExportAsImage": "Exportera som bild",
"ExportThisReport": "Exportera denna dataserien i andra format",
"Faq": "FAQ",
+ "FileIntegrityWarning": "Kontrollen av filintegritet rapporterade några fel. Du bör åtgärda detta och ladda om sidan tills det inte rapporteras några fel.",
+ "FileIntegrityWarningReupload": "Felen nedan kan bero på misslyckad uppladdning av filer som hör till Piwik.",
+ "FileIntegrityWarningReuploadBis": "Försök ladda upp Piwikfilerna i BINARY mode.",
"First": "Först",
"Flatten": "Tillplattad",
"ForExampleShort": "t.ex.",
@@ -231,6 +241,7 @@
"MultiSitesSummary": "Alla webbplatser",
"Name": "Namn",
"NbActions": "Antal händelser",
+ "NbInteractions": "Antal interaktioner",
"NbSearches": "Antal interna sökningar",
"NeedMoreHelp": "Behöver du mer hjälp?",
"Never": "Aldrig",
@@ -286,6 +297,7 @@
"Password": "Lösenord",
"Period": "Period",
"Piechart": "Cirkeldiagram",
+ "PiwikIsACollaborativeProjectYouCanContributeAndDonateNextRelease": "%1$sPiwik%2$s är ett samarbetsprojekt av %7$sPiwiks teammedlemmar%8$s och många andra deltagare över hela världen. <br\/> Om du gillar Piwik kan du hjälpa till: ta reda på %3$sHur du kan bidra till Piwik%4$s, eller %5$sdonera nu%6$s för att stödja nästa Piwikversion!",
"PiwikXIsAvailablePleaseNotifyPiwikAdmin": "%1$s finns tillgänglig. Vänligen informera din %2$sPiwik administratör%3$s.",
"PiwikXIsAvailablePleaseUpdateNow": "Piwik %1$s är tillgänglig. %2$sVänligen uppdatera nu!%3$s (se %4$sförändringar%5$s).",
"PleaseContactYourPiwikAdministrator": "Kontakta din Piwikadministratör",
@@ -358,6 +370,8 @@
"TimeAgo": "%s sedan",
"TimeFormat": "Tidsformat",
"TimeOnPage": "Tid på sidan",
+ "ToDeleteAllDirectoriesRunThisCommand": "För att radera alla dessa kataloger samtidigt kan du köra detta kommando:",
+ "ToDeleteAllFilesRunThisCommand": "För att radera alla dessa filer samtidigt kan du köra detta kommando:",
"Total": "Totalt",
"TotalRatioTooltip": "Det här är %1$s av alla %2$s %3$s.",
"TotalRevenue": "Totala intäkter",
diff --git a/lang/vi.json b/lang/vi.json
index 075285af6e..a9e7095da7 100644
--- a/lang/vi.json
+++ b/lang/vi.json
@@ -51,7 +51,6 @@
"ColumnDestinationPage": "Trang đích",
"ColumnEntrances": "Số lối vào",
"ColumnEntrancesDocumentation": "Số lần truy cập đã bắt đầu trên trang này.",
- "ColumnExitRate": "Tỷ lệ thoát",
"ColumnExitRateDocumentation": "Tỷ lệ truy cập đã rời khỏi trang web sau khi xem trang này.",
"ColumnExits": "Số lần thoát ra",
"ColumnExitsDocumentation": "Số lần truy cập đã kết thúc trên trang này.",
diff --git a/lang/zh-cn.json b/lang/zh-cn.json
index efac3557c2..dba6f26f71 100644
--- a/lang/zh-cn.json
+++ b/lang/zh-cn.json
@@ -2,7 +2,7 @@
"General": {
"12HourClock": "12 小时制式",
"24HourClock": "24 小时制式",
- "AbandonedCarts": "丢弃的购物车",
+ "AbandonedCarts": "被放弃的购物车",
"AboutPiwikX": "关于 Piwik %s",
"Action": "行为",
"Actions": "页面分析",
@@ -26,6 +26,7 @@
"Cancel": "取消",
"CannotUnzipFile": "不能解压缩文件%1$s: %2$s",
"ChangePassword": "修改密码",
+ "ChangeTagCloudView": "请注意:您可以通过报表下方的控制按钮,用不同于标签云的其它格式显示报表。",
"ChooseDate": "选择日期,当前选择的日期为:%s",
"ChooseLanguage": "选择语言",
"ChoosePeriod": "选择时间段",
@@ -288,7 +289,7 @@
"Outlinks": "离站链接数量",
"OverlayRowActionTooltip": "在您的网站上直接查看网站分析数据(在新标签页打开)",
"OverlayRowActionTooltipTitle": "显示页面叠加",
- "Overview": "来源总表",
+ "Overview": "概览",
"Pages": "页面",
"Pagination": "%1$s - %2$s of %3$s",
"PaginationWithoutTotal": "%1$s - %2$s",
@@ -498,7 +499,7 @@
"SearchWebsite": "搜索站点",
"ShowAll": "显示全部",
"ShowLess": "显示更少",
- "StaticGraph": "图标总览",
+ "StaticGraph": "概览图表",
"TopVisitedWebsites": "最常访问的网站",
"TryIt": "试一试!",
"UseSearchBarHint": "这里只显示第一个 %s 网站,请用搜索条访问其它网站。",
diff --git a/libs/Zend/Validate/Hostname.php b/libs/Zend/Validate/Hostname.php
index 72d5a3acbe..71ceacdbc4 100644
--- a/libs/Zend/Validate/Hostname.php
+++ b/libs/Zend/Validate/Hostname.php
@@ -360,10 +360,6 @@ class Zend_Validate_Hostname extends Zend_Validate_Abstract
'TR' => array(1 => '/^[\x{002d}0-9a-zğıüşöç]{1,63}$/iu'),
'VE' => array(1 => '/^[\x{002d}0-9a-záéíóúüñ]{1,63}$/iu'),
'VN' => array(1 => '/^[ÀÁÂÃÈÉÊÌÍÒÓÔÕÙÚÝàáâãèéêìíòóôõùúýĂăĐđĨĩŨũƠơƯư\x{1EA0}-\x{1EF9}]{1,63}$/iu'),
- 'ایران' => array(1 => '/^[\x{0621}-\x{0624}\x{0626}-\x{063A}\x{0641}\x{0642}\x{0644}-\x{0648}\x{067E}\x{0686}\x{0698}\x{06A9}\x{06AF}\x{06CC}\x{06F0}-\x{06F9}]{1,30}$/iu'),
- '中国' => 'Hostname/Cn.php',
- '公司' => 'Hostname/Cn.php',
- '网络' => 'Hostname/Cn.php',
'कॉम' => array(1 => self::VALID_UNICODE_DOMAIN),
'セール' => array(1 => self::VALID_UNICODE_DOMAIN),
'佛山' => array(1 => self::VALID_UNICODE_DOMAIN),
@@ -504,6 +500,16 @@ class Zend_Validate_Hostname extends Zend_Validate_Abstract
'پاکستان' => array(1 => self::VALID_UNICODE_DOMAIN),
'كاثوليك' => array(1 => self::VALID_UNICODE_DOMAIN),
'天主教' => array(1 => self::VALID_UNICODE_DOMAIN),
+ 'ಭಾರತ' => array(1 => self::VALID_UNICODE_DOMAIN),
+ 'ଭାରତ' => array(1 => self::VALID_UNICODE_DOMAIN),
+ 'ভাৰত' => array(1 => self::VALID_UNICODE_DOMAIN),
+ 'भारतम्' => array(1 => self::VALID_UNICODE_DOMAIN),
+ 'भारोत' => array(1 => self::VALID_UNICODE_DOMAIN),
+ 'اتصالات' => array(1 => self::VALID_UNICODE_DOMAIN),
+ 'بارت' => array(1 => self::VALID_UNICODE_DOMAIN),
+ 'ڀارت' => array(1 => self::VALID_UNICODE_DOMAIN),
+ 'عرب' => array(1 => self::VALID_UNICODE_DOMAIN),
+ 'ഭാരതം' => array(1 => self::VALID_UNICODE_DOMAIN),
);
diff --git a/libs/bower_components/angular-animate/.bower.json b/libs/bower_components/angular-animate/.bower.json
index 7e3aa310c7..ffa7da2619 100644
--- a/libs/bower_components/angular-animate/.bower.json
+++ b/libs/bower_components/angular-animate/.bower.json
@@ -1,20 +1,20 @@
{
"name": "angular-animate",
- "version": "1.4.10",
+ "version": "1.6.5",
"license": "MIT",
"main": "./angular-animate.js",
"ignore": [],
"dependencies": {
- "angular": "1.4.10"
+ "angular": "1.6.5"
},
"homepage": "https://github.com/angular/bower-angular-animate",
- "_release": "1.4.10",
+ "_release": "1.6.5",
"_resolution": {
"type": "version",
- "tag": "v1.4.10",
- "commit": "c6575375d3dae35c98b5ad384978612fe33ee8e2"
+ "tag": "v1.6.5",
+ "commit": "c51985f49b0a158175efbeaf775fd8373cbbf45e"
},
"_source": "https://github.com/angular/bower-angular-animate.git",
- "_target": "~1.4.0",
+ "_target": "~1.6.0",
"_originalSource": "angular-animate"
} \ No newline at end of file
diff --git a/libs/bower_components/angular-animate/LICENSE.md b/libs/bower_components/angular-animate/LICENSE.md
new file mode 100644
index 0000000000..2c395eef1b
--- /dev/null
+++ b/libs/bower_components/angular-animate/LICENSE.md
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2016 Angular
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/libs/bower_components/angular-animate/angular-animate.js b/libs/bower_components/angular-animate/angular-animate.js
index 7c0677e261..eceab4f477 100644
--- a/libs/bower_components/angular-animate/angular-animate.js
+++ b/libs/bower_components/angular-animate/angular-animate.js
@@ -1,23 +1,9 @@
/**
- * @license AngularJS v1.4.10
- * (c) 2010-2015 Google, Inc. http://angularjs.org
+ * @license AngularJS v1.6.5
+ * (c) 2010-2017 Google, Inc. http://angularjs.org
* License: MIT
*/
-(function(window, angular, undefined) {'use strict';
-
-/* jshint ignore:start */
-var noop = angular.noop;
-var copy = angular.copy;
-var extend = angular.extend;
-var jqLite = angular.element;
-var forEach = angular.forEach;
-var isArray = angular.isArray;
-var isString = angular.isString;
-var isObject = angular.isObject;
-var isUndefined = angular.isUndefined;
-var isDefined = angular.isDefined;
-var isFunction = angular.isFunction;
-var isElement = angular.isElement;
+(function(window, angular) {'use strict';
var ELEMENT_NODE = 1;
var COMMENT_NODE = 8;
@@ -43,7 +29,7 @@ var CSS_PREFIX = '', TRANSITION_PROP, TRANSITIONEND_EVENT, ANIMATION_PROP, ANIMA
// Also, the only modern browser that uses vendor prefixes for transitions/keyframes is webkit
// therefore there is no reason to test anymore for other vendor prefixes:
// http://caniuse.com/#search=transition
-if (isUndefined(window.ontransitionend) && isDefined(window.onwebkittransitionend)) {
+if ((window.ontransitionend === undefined) && (window.onwebkittransitionend !== undefined)) {
CSS_PREFIX = '-webkit-';
TRANSITION_PROP = 'WebkitTransition';
TRANSITIONEND_EVENT = 'webkitTransitionEnd transitionend';
@@ -52,7 +38,7 @@ if (isUndefined(window.ontransitionend) && isDefined(window.onwebkittransitionen
TRANSITIONEND_EVENT = 'transitionend';
}
-if (isUndefined(window.onanimationend) && isDefined(window.onwebkitanimationend)) {
+if ((window.onanimationend === undefined) && (window.onwebkitanimationend !== undefined)) {
CSS_PREFIX = '-webkit-';
ANIMATION_PROP = 'WebkitAnimation';
ANIMATIONEND_EVENT = 'webkitAnimationEnd animationend';
@@ -74,14 +60,10 @@ var ANIMATION_DURATION_PROP = ANIMATION_PROP + DURATION_KEY;
var TRANSITION_DELAY_PROP = TRANSITION_PROP + DELAY_KEY;
var TRANSITION_DURATION_PROP = TRANSITION_PROP + DURATION_KEY;
-var isPromiseLike = function(p) {
- return p && p.then ? true : false;
-};
-
var ngMinErr = angular.$$minErr('ng');
function assertArg(arg, name, reason) {
if (!arg) {
- throw ngMinErr('areq', "Argument '{0}' is {1}", (name || '?'), (reason || "required"));
+ throw ngMinErr('areq', 'Argument \'{0}\' is {1}', (name || '?'), (reason || 'required'));
}
return arg;
}
@@ -132,8 +114,7 @@ function stripCommentsFromElement(element) {
if (element instanceof jqLite) {
switch (element.length) {
case 0:
- return [];
- break;
+ return element;
case 1:
// there is no point of stripping anything if the element
@@ -146,7 +127,6 @@ function stripCommentsFromElement(element) {
default:
return jqLite(extractElementNode(element));
- break;
}
}
@@ -159,7 +139,7 @@ function extractElementNode(element) {
if (!element[0]) return element;
for (var i = 0; i < element.length; i++) {
var elm = element[i];
- if (elm.nodeType == ELEMENT_NODE) {
+ if (elm.nodeType === ELEMENT_NODE) {
return elm;
}
}
@@ -187,7 +167,7 @@ function applyAnimationClassesFactory($$jqLite) {
$$removeClass($$jqLite, element, options.removeClass);
options.removeClass = null;
}
- }
+ };
}
function prepareAnimationOptions(options) {
@@ -290,10 +270,10 @@ function resolveElementClasses(existing, toAdd, toRemove) {
var prop, allow;
if (val === ADD_CLASS) {
prop = 'addClass';
- allow = !existing[klass];
+ allow = !existing[klass] || existing[klass + REMOVE_CLASS_SUFFIX];
} else if (val === REMOVE_CLASS) {
prop = 'removeClass';
- allow = existing[klass];
+ allow = existing[klass] || existing[klass + ADD_CLASS_SUFFIX];
}
if (allow) {
if (classes[prop].length) {
@@ -323,7 +303,7 @@ function resolveElementClasses(existing, toAdd, toRemove) {
}
function getDomNode(element) {
- return (element instanceof angular.element) ? element[0] : element;
+ return (element instanceof jqLite) ? element[0] : element;
}
function applyGeneratedPreparationClasses(element, event, options) {
@@ -396,7 +376,7 @@ var $$rAFSchedulerFactory = ['$$rAF', function($$rAF) {
queue = scheduler.queue = [];
/* waitUntilQuiet does two things:
- * 1. It will run the FINAL `fn` value only when an uncancelled RAF has passed through
+ * 1. It will run the FINAL `fn` value only when an uncanceled RAF has passed through
* 2. It will delay the next wave of tasks from running until the quiet `fn` has run.
*
* The motivation here is that animation code can request more time from the scheduler
@@ -443,7 +423,7 @@ var $$rAFSchedulerFactory = ['$$rAF', function($$rAF) {
* of the children's parents are currently animating. By default, when an element has an active `enter`, `leave`, or `move`
* (structural) animation, child elements that also have an active structural animation are not animated.
*
- * Note that even if `ngAnimteChildren` is set, no child animations will run when the parent element is removed from the DOM (`leave` animation).
+ * Note that even if `ngAnimateChildren` is set, no child animations will run when the parent element is removed from the DOM (`leave` animation).
*
*
* @param {string} ngAnimateChildren If the value is empty, `true` or `on`,
@@ -452,7 +432,7 @@ var $$rAFSchedulerFactory = ['$$rAF', function($$rAF) {
* @example
* <example module="ngAnimateChildren" name="ngAnimateChildren" deps="angular-animate.js" animations="true">
<file name="index.html">
- <div ng-controller="mainController as main">
+ <div ng-controller="MainController as main">
<label>Show container? <input type="checkbox" ng-model="main.enterElement" /></label>
<label>Animate children? <input type="checkbox" ng-model="main.animateChildren" /></label>
<hr>
@@ -502,7 +482,7 @@ var $$rAFSchedulerFactory = ['$$rAF', function($$rAF) {
</file>
<file name="script.js">
angular.module('ngAnimateChildren', ['ngAnimate'])
- .controller('mainController', function() {
+ .controller('MainController', function MainController() {
this.animateChildren = false;
this.enterElement = false;
});
@@ -513,7 +493,7 @@ var $$AnimateChildrenDirective = ['$interpolate', function($interpolate) {
return {
link: function(scope, element, attrs) {
var val = attrs.ngAnimateChildren;
- if (angular.isString(val) && val.length === 0) { //empty attribute
+ if (isString(val) && val.length === 0) { //empty attribute
element.data(NG_ANIMATE_CHILDREN_DATA, true);
} else {
// Interpolate and set the value, so that it is available to
@@ -530,6 +510,8 @@ var $$AnimateChildrenDirective = ['$interpolate', function($interpolate) {
};
}];
+/* exported $AnimateCssProvider */
+
var ANIMATE_TIMER_KEY = '$$animateCss';
/**
@@ -697,7 +679,7 @@ var ANIMATE_TIMER_KEY = '$$animateCss';
* ```
*
* To actually start the animation we need to run `animation.start()` which will then return a promise that we can hook into to detect when the animation ends.
- * If we choose not to run the animation then we MUST run `animation.end()` to perform a cleanup on the element (since some CSS classes and stlyes may have been
+ * If we choose not to run the animation then we MUST run `animation.end()` to perform a cleanup on the element (since some CSS classes and styles may have been
* applied to the element during the preparation phase). Note that all other properties such as duration, delay, transitions and keyframes are just properties
* and that changing them will not reconfigure the parameters of the animation.
*
@@ -734,11 +716,11 @@ var ANIMATE_TIMER_KEY = '$$animateCss';
* * `stagger` - A numeric time value representing the delay between successively animated elements
* ({@link ngAnimate#css-staggering-animations Click here to learn how CSS-based staggering works in ngAnimate.})
* * `staggerIndex` - The numeric index representing the stagger item (e.g. a value of 5 is equal to the sixth item in the stagger; therefore when a
- * * `stagger` option value of `0.1` is used then there will be a stagger delay of `600ms`)
- * * `applyClassesEarly` - Whether or not the classes being added or removed will be used when detecting the animation. This is set by `$animate` when enter/leave/move animations are fired to ensure that the CSS classes are resolved in time. (Note that this will prevent any transitions from occuring on the classes being added and removed.)
+ * `stagger` option value of `0.1` is used then there will be a stagger delay of `600ms`)
+ * * `applyClassesEarly` - Whether or not the classes being added or removed will be used when detecting the animation. This is set by `$animate` when enter/leave/move animations are fired to ensure that the CSS classes are resolved in time. (Note that this will prevent any transitions from occurring on the classes being added and removed.)
* * `cleanupStyles` - Whether or not the provided `from` and `to` styles will be removed once
* the animation is closed. This is useful for when the styles are used purely for the sake of
- * the animation and do not have a lasting visual effect on the element (e.g. a colapse and open animation).
+ * the animation and do not have a lasting visual effect on the element (e.g. a collapse and open animation).
* By default this value is set to `false`.
*
* @return {object} an object with start and end methods and details about the animation.
@@ -747,7 +729,6 @@ var ANIMATE_TIMER_KEY = '$$animateCss';
* * `end` - This method will cancel the animation and remove all applied CSS classes and styles.
*/
var ONE_SECOND = 1000;
-var BASE_TEN = 10;
var ELAPSED_TIME_MAX_DECIMAL_PLACES = 3;
var CLOSING_TIME_BUFFER = 1.5;
@@ -791,7 +772,7 @@ function computeCssStyles($window, element, properties) {
}
// by setting this to null in the event that the delay is not set or is set directly as 0
- // then we can still allow for zegative values to be used later on and not mistake this
+ // then we can still allow for negative values to be used later on and not mistake this
// value for being greater than any other negative value.
if (val === 0) {
val = null;
@@ -809,7 +790,7 @@ function parseMaxTime(str) {
forEach(values, function(value) {
// it's always safe to consider only second values and omit `ms` values since
// getComputedStyle will always handle the conversion for us
- if (value.charAt(value.length - 1) == 's') {
+ if (value.charAt(value.length - 1) === 's') {
value = value.substring(0, value.length - 1);
}
value = parseFloat(value) || 0;
@@ -877,7 +858,7 @@ function registerRestorableStyles(backup, node, properties) {
});
}
-var $AnimateCssProvider = ['$animateProvider', function($animateProvider) {
+var $AnimateCssProvider = ['$animateProvider', /** @this */ function($animateProvider) {
var gcsLookup = createLocalCacheLookup();
var gcsStaggerLookup = createLocalCacheLookup();
@@ -890,7 +871,7 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) {
var parentCounter = 0;
function gcsHashFn(node, extraClasses) {
- var KEY = "$$ngAnimateParentKey";
+ var KEY = '$$ngAnimateParentKey';
var parentNode = node.parentNode;
var parentID = parentNode[KEY] || (parentNode[KEY] = ++parentCounter);
return parentID + '-' + node.getAttribute('class') + '-' + extraClasses;
@@ -907,7 +888,7 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) {
}
// we keep putting this in multiple times even though the value and the cacheKey are the same
- // because we're keeping an interal tally of how many duplicate animations are detected.
+ // because we're keeping an internal tally of how many duplicate animations are detected.
gcsLookup.put(cacheKey, timings);
return timings;
}
@@ -941,7 +922,6 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) {
return stagger || {};
}
- var cancelLastRAFRequest;
var rafWaitQueue = [];
function waitUntilQuiet(callback) {
rafWaitQueue.push(callback);
@@ -1130,7 +1110,7 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) {
var flags = {};
flags.hasTransitions = timings.transitionDuration > 0;
flags.hasAnimations = timings.animationDuration > 0;
- flags.hasTransitionAll = flags.hasTransitions && timings.transitionProperty == 'all';
+ flags.hasTransitionAll = flags.hasTransitions && timings.transitionProperty === 'all';
flags.applyTransitionDuration = hasToStyles && (
(flags.hasTransitions && !flags.hasTransitionAll)
|| (flags.hasAnimations && !flags.hasTransitions));
@@ -1162,7 +1142,7 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) {
if (options.delay != null) {
var delayStyle;
- if (typeof options.delay !== "boolean") {
+ if (typeof options.delay !== 'boolean') {
delayStyle = parseFloat(options.delay);
// number in options.delay means we have to recalculate the delay for the closing timeout
maxDelay = Math.max(delayStyle, 0);
@@ -1240,7 +1220,7 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) {
close(true);
}
- function close(rejected) { // jshint ignore:line
+ function close(rejected) {
// if the promise has been called already then we shouldn't close
// the animation again
if (animationClosed || (animationCompleted && animationPaused)) return;
@@ -1267,8 +1247,11 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) {
if (Object.keys(restoreStyles).length) {
forEach(restoreStyles, function(value, prop) {
- value ? node.style.setProperty(prop, value)
- : node.style.removeProperty(prop);
+ if (value) {
+ node.style.setProperty(prop, value);
+ } else {
+ node.style.removeProperty(prop);
+ }
});
}
@@ -1371,9 +1354,11 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) {
animationPaused = !playAnimation;
if (timings.animationDuration) {
var value = blockKeyframeAnimations(node, animationPaused);
- animationPaused
- ? temporaryStyles.push(value)
- : removeFromArray(temporaryStyles, value);
+ if (animationPaused) {
+ temporaryStyles.push(value);
+ } else {
+ removeFromArray(temporaryStyles, value);
+ }
}
} else if (animationPaused && playAnimation) {
animationPaused = false;
@@ -1381,9 +1366,9 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) {
}
};
- // checking the stagger duration prevents an accidently cascade of the CSS delay style
+ // checking the stagger duration prevents an accidentally cascade of the CSS delay style
// being inherited from the parent. If the transition duration is zero then we can safely
- // rely that the delay value is an intential stagger delay style.
+ // rely that the delay value is an intentional stagger delay style.
var maxStagger = itemIndex > 0
&& ((timings.transitionDuration && stagger.transitionDuration === 0) ||
(timings.animationDuration && stagger.animationDuration === 0))
@@ -1422,7 +1407,7 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) {
$$jqLite.addClass(element, activeClasses);
if (flags.recalculateTimingStyles) {
- fullClassName = node.className + ' ' + preparationClasses;
+ fullClassName = node.getAttribute('class') + ' ' + preparationClasses;
cacheKey = gcsHashFn(node, fullClassName);
timings = computeTimings(node, fullClassName, cacheKey);
@@ -1440,7 +1425,7 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) {
}
if (flags.applyAnimationDelay) {
- relativeDelay = typeof options.delay !== "boolean" && truthyTimingValue(options.delay)
+ relativeDelay = typeof options.delay !== 'boolean' && truthyTimingValue(options.delay)
? parseFloat(options.delay)
: relativeDelay;
@@ -1532,7 +1517,7 @@ var $AnimateCssProvider = ['$animateProvider', function($animateProvider) {
}];
}];
-var $$AnimateCssDriverProvider = ['$$animationProvider', function($$animationProvider) {
+var $$AnimateCssDriverProvider = ['$$animationProvider', /** @this */ function($$animationProvider) {
$$animationProvider.drivers.push('$$animateCssDriver');
var NG_ANIMATE_SHIM_CLASS_NAME = 'ng-animate-shim';
@@ -1556,13 +1541,11 @@ var $$AnimateCssDriverProvider = ['$$animationProvider', function($$animationPro
var rootBodyElement = jqLite(
// this is to avoid using something that exists outside of the body
- // we also special case the doc fragement case because our unit test code
+ // we also special case the doc fragment case because our unit test code
// appends the $rootElement to the body after the app has been bootstrapped
isDocumentFragment(rootNode) || bodyNode.contains(rootNode) ? rootNode : bodyNode
);
- var applyAnimationClasses = applyAnimationClassesFactory($$jqLite);
-
return function initDriverFn(animationDetails) {
return animationDetails.from && animationDetails.to
? prepareFromToAnchorAnimation(animationDetails.from,
@@ -1656,7 +1639,7 @@ var $$AnimateCssDriverProvider = ['$$animationProvider', function($$animationPro
var coords = getDomNode(anchor).getBoundingClientRect();
// we iterate directly since safari messes up and doesn't return
- // all the keys for the coods object when iterated
+ // all the keys for the coords object when iterated
forEach(['width','height','top','left'], function(key) {
var value = coords[key];
switch (key) {
@@ -1804,7 +1787,7 @@ var $$AnimateCssDriverProvider = ['$$animationProvider', function($$animationPro
// TODO(matsko): add documentation
// by the time...
-var $$AnimateJsProvider = ['$animateProvider', function($animateProvider) {
+var $$AnimateJsProvider = ['$animateProvider', /** @this */ function($animateProvider) {
this.$get = ['$injector', '$$AnimateRunner', '$$jqLite',
function($injector, $$AnimateRunner, $$jqLite) {
@@ -1843,7 +1826,7 @@ var $$AnimateJsProvider = ['$animateProvider', function($animateProvider) {
var before, after;
if (animations.length) {
var afterFn, beforeFn;
- if (event == 'leave') {
+ if (event === 'leave') {
beforeFn = 'leave';
afterFn = 'afterLeave'; // TODO(matsko): get rid of this
} else {
@@ -2028,7 +2011,7 @@ var $$AnimateJsProvider = ['$animateProvider', function($animateProvider) {
function packageAnimations(element, event, options, animations, fnName) {
var operations = groupEventedAnimations(element, event, options, animations, fnName);
if (operations.length === 0) {
- var a,b;
+ var a, b;
if (fnName === 'beforeSetClass') {
a = groupEventedAnimations(element, 'removeClass', options, animations, 'beforeRemoveClass');
b = groupEventedAnimations(element, 'addClass', options, animations, 'beforeAddClass');
@@ -2056,11 +2039,19 @@ var $$AnimateJsProvider = ['$animateProvider', function($animateProvider) {
});
}
- runners.length ? $$AnimateRunner.all(runners, callback) : callback();
+ if (runners.length) {
+ $$AnimateRunner.all(runners, callback);
+ } else {
+ callback();
+ }
return function endFn(reject) {
forEach(runners, function(runner) {
- reject ? runner.cancel() : runner.end();
+ if (reject) {
+ runner.cancel();
+ } else {
+ runner.end();
+ }
});
};
};
@@ -2070,7 +2061,7 @@ var $$AnimateJsProvider = ['$animateProvider', function($animateProvider) {
function lookupAnimations(classes) {
classes = isArray(classes) ? classes : classes.split(' ');
var matches = [], flagMap = {};
- for (var i=0; i < classes.length; i++) {
+ for (var i = 0; i < classes.length; i++) {
var klass = classes[i],
animationFactory = $animateProvider.$$registeredAnimations[klass];
if (animationFactory && !flagMap[klass]) {
@@ -2083,7 +2074,7 @@ var $$AnimateJsProvider = ['$animateProvider', function($animateProvider) {
}];
}];
-var $$AnimateJsDriverProvider = ['$$animationProvider', function($$animationProvider) {
+var $$AnimateJsDriverProvider = ['$$animationProvider', /** @this */ function($$animationProvider) {
$$animationProvider.drivers.push('$$animateJsDriver');
this.$get = ['$$animateJs', '$$AnimateRunner', function($$animateJs, $$AnimateRunner) {
return function initDriverFn(animationDetails) {
@@ -2145,7 +2136,7 @@ var $$AnimateJsDriverProvider = ['$$animationProvider', function($$animationProv
var NG_ANIMATE_ATTR_NAME = 'data-ng-animate';
var NG_ANIMATE_PIN_DATA = '$ngAnimatePin';
-var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) {
+var $$AnimateQueueProvider = ['$animateProvider', /** @this */ function($animateProvider) {
var PRE_DIGEST_STATE = 1;
var RUNNING_STATE = 2;
var ONE_SPACE = ' ';
@@ -2179,9 +2170,9 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) {
}
}
- function isAllowed(ruleType, element, currentAnimation, previousAnimation) {
+ function isAllowed(ruleType, currentAnimation, previousAnimation) {
return rules[ruleType].some(function(fn) {
- return fn(element, currentAnimation, previousAnimation);
+ return fn(currentAnimation, previousAnimation);
});
}
@@ -2191,40 +2182,45 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) {
return and ? a && b : a || b;
}
- rules.join.push(function(element, newAnimation, currentAnimation) {
+ rules.join.push(function(newAnimation, currentAnimation) {
// if the new animation is class-based then we can just tack that on
return !newAnimation.structural && hasAnimationClasses(newAnimation);
});
- rules.skip.push(function(element, newAnimation, currentAnimation) {
+ rules.skip.push(function(newAnimation, currentAnimation) {
// there is no need to animate anything if no classes are being added and
// there is no structural animation that will be triggered
return !newAnimation.structural && !hasAnimationClasses(newAnimation);
});
- rules.skip.push(function(element, newAnimation, currentAnimation) {
+ rules.skip.push(function(newAnimation, currentAnimation) {
// why should we trigger a new structural animation if the element will
// be removed from the DOM anyway?
- return currentAnimation.event == 'leave' && newAnimation.structural;
+ return currentAnimation.event === 'leave' && newAnimation.structural;
});
- rules.skip.push(function(element, newAnimation, currentAnimation) {
+ rules.skip.push(function(newAnimation, currentAnimation) {
// if there is an ongoing current animation then don't even bother running the class-based animation
return currentAnimation.structural && currentAnimation.state === RUNNING_STATE && !newAnimation.structural;
});
- rules.cancel.push(function(element, newAnimation, currentAnimation) {
+ rules.cancel.push(function(newAnimation, currentAnimation) {
// there can never be two structural animations running at the same time
return currentAnimation.structural && newAnimation.structural;
});
- rules.cancel.push(function(element, newAnimation, currentAnimation) {
+ rules.cancel.push(function(newAnimation, currentAnimation) {
// if the previous animation is already running, but the new animation will
// be triggered, but the new animation is structural
return currentAnimation.state === RUNNING_STATE && newAnimation.structural;
});
- rules.cancel.push(function(element, newAnimation, currentAnimation) {
+ rules.cancel.push(function(newAnimation, currentAnimation) {
+ // cancel the animation if classes added / removed in both animation cancel each other out,
+ // but only if the current animation isn't structural
+
+ if (currentAnimation.structural) return false;
+
var nA = newAnimation.addClass;
var nR = newAnimation.removeClass;
var cA = currentAnimation.addClass;
@@ -2238,13 +2234,15 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) {
return hasMatchingClasses(nA, cR) || hasMatchingClasses(nR, cA);
});
- this.$get = ['$$rAF', '$rootScope', '$rootElement', '$document', '$$HashMap',
+ this.$get = ['$$rAF', '$rootScope', '$rootElement', '$document', '$$Map',
'$$animation', '$$AnimateRunner', '$templateRequest', '$$jqLite', '$$forceReflow',
- function($$rAF, $rootScope, $rootElement, $document, $$HashMap,
- $$animation, $$AnimateRunner, $templateRequest, $$jqLite, $$forceReflow) {
+ '$$isDocumentHidden',
+ function($$rAF, $rootScope, $rootElement, $document, $$Map,
+ $$animation, $$AnimateRunner, $templateRequest, $$jqLite, $$forceReflow,
+ $$isDocumentHidden) {
- var activeAnimationsLookup = new $$HashMap();
- var disabledElementsLookup = new $$HashMap();
+ var activeAnimationsLookup = new $$Map();
+ var disabledElementsLookup = new $$Map();
var animationsEnabled = null;
function postDigestTaskFactory() {
@@ -2294,16 +2292,19 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) {
}
);
- var callbackRegistry = {};
+ var callbackRegistry = Object.create(null);
- // remember that the classNameFilter is set during the provider/config
- // stage therefore we can optimize here and setup a helper function
+ // remember that the `customFilter`/`classNameFilter` are set during the
+ // provider/config stage therefore we can optimize here and setup helper functions
+ var customFilter = $animateProvider.customFilter();
var classNameFilter = $animateProvider.classNameFilter();
- var isAnimatableClassName = !classNameFilter
- ? function() { return true; }
- : function(className) {
- return classNameFilter.test(className);
- };
+ var returnTrue = function() { return true; };
+
+ var isAnimatableByFilter = customFilter || returnTrue;
+ var isAnimatableClassName = !classNameFilter ? returnTrue : function(node, options) {
+ var className = [node.getAttribute('class'), options.addClass, options.removeClass].join(' ');
+ return classNameFilter.test(className);
+ };
var applyAnimationClasses = applyAnimationClassesFactory($$jqLite);
@@ -2312,16 +2313,12 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) {
}
// IE9-11 has no method "contains" in SVG element and in Node.prototype. Bug #10259.
- var contains = Node.prototype.contains || function(arg) {
- // jshint bitwise: false
+ var contains = window.Node.prototype.contains || /** @this */ function(arg) {
+ // eslint-disable-next-line no-bitwise
return this === arg || !!(this.compareDocumentPosition(arg) & 16);
- // jshint bitwise: true
};
- function findCallbacks(parent, element, event) {
- var targetNode = getDomNode(element);
- var targetParentNode = getDomNode(parent);
-
+ function findCallbacks(targetParentNode, targetNode, event) {
var matches = [];
var entries = callbackRegistry[event];
if (entries) {
@@ -2337,7 +2334,24 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) {
return matches;
}
- return {
+ function filterFromRegistry(list, matchContainer, matchCallback) {
+ var containerNode = extractElementNode(matchContainer);
+ return list.filter(function(entry) {
+ var isMatch = entry.node === containerNode &&
+ (!matchCallback || entry.callback === matchCallback);
+ return !isMatch;
+ });
+ }
+
+ function cleanupEventListeners(phase, node) {
+ if (phase === 'close' && !node.parentNode) {
+ // If the element is not attached to a parentNode, it has been removed by
+ // the domOperation, and we can safely remove the event callbacks
+ $animate.off(node);
+ }
+ }
+
+ var $animate = {
on: function(event, container, callback) {
var node = extractElementNode(container);
callbackRegistry[event] = callbackRegistry[event] || [];
@@ -2345,24 +2359,36 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) {
node: node,
callback: callback
});
+
+ // Remove the callback when the element is removed from the DOM
+ jqLite(container).on('$destroy', function() {
+ var animationDetails = activeAnimationsLookup.get(node);
+
+ if (!animationDetails) {
+ // If there's an animation ongoing, the callback calling code will remove
+ // the event listeners. If we'd remove here, the callbacks would be removed
+ // before the animation ends
+ $animate.off(event, container, callback);
+ }
+ });
},
off: function(event, container, callback) {
+ if (arguments.length === 1 && !isString(arguments[0])) {
+ container = arguments[0];
+ for (var eventType in callbackRegistry) {
+ callbackRegistry[eventType] = filterFromRegistry(callbackRegistry[eventType], container);
+ }
+
+ return;
+ }
+
var entries = callbackRegistry[event];
if (!entries) return;
callbackRegistry[event] = arguments.length === 1
? null
: filterFromRegistry(entries, container, callback);
-
- function filterFromRegistry(list, matchContainer, matchCallback) {
- var containerNode = extractElementNode(matchContainer);
- return list.filter(function(entry) {
- var isMatch = entry.node === containerNode &&
- (!matchCallback || entry.callback === matchCallback);
- return !isMatch;
- });
- }
},
pin: function(element, parentElement) {
@@ -2396,14 +2422,13 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) {
bool = animationsEnabled = !!element;
} else {
var node = getDomNode(element);
- var recordExists = disabledElementsLookup.get(node);
if (argCount === 1) {
// (element) - Element getter
- bool = !recordExists;
+ bool = !disabledElementsLookup.get(node);
} else {
// (element, bool) - Element setter
- disabledElementsLookup.put(node, !bool);
+ disabledElementsLookup.set(node, !bool);
}
}
}
@@ -2412,18 +2437,17 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) {
}
};
- function queueAnimation(element, event, initialOptions) {
+ return $animate;
+
+ function queueAnimation(originalElement, event, initialOptions) {
// we always make a copy of the options since
// there should never be any side effects on
// the input data when running `$animateCss`.
var options = copy(initialOptions);
- var node, parent;
- element = stripCommentsFromElement(element);
- if (element) {
- node = getDomNode(element);
- parent = element.parent();
- }
+ var element = stripCommentsFromElement(originalElement);
+ var node = getDomNode(element);
+ var parentNode = node && node.parentNode;
options = prepareAnimationOptions(options);
@@ -2458,44 +2482,45 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) {
options.to = null;
}
- // there are situations where a directive issues an animation for
- // a jqLite wrapper that contains only comment nodes... If this
- // happens then there is no way we can perform an animation
- if (!node) {
- close();
- return runner;
- }
-
- var className = [node.className, options.addClass, options.removeClass].join(' ');
- if (!isAnimatableClassName(className)) {
+ // If animations are hard-disabled for the whole application there is no need to continue.
+ // There are also situations where a directive issues an animation for a jqLite wrapper that
+ // contains only comment nodes. In this case, there is no way we can perform an animation.
+ if (!animationsEnabled ||
+ !node ||
+ !isAnimatableByFilter(node, event, initialOptions) ||
+ !isAnimatableClassName(node, options)) {
close();
return runner;
}
var isStructural = ['enter', 'move', 'leave'].indexOf(event) >= 0;
- // this is a hard disable of all animations for the application or on
- // the element itself, therefore there is no need to continue further
- // past this point if not enabled
+ var documentHidden = $$isDocumentHidden();
+
+ // This is a hard disable of all animations the element itself, therefore there is no need to
+ // continue further past this point if not enabled
// Animations are also disabled if the document is currently hidden (page is not visible
// to the user), because browsers slow down or do not flush calls to requestAnimationFrame
- var skipAnimations = !animationsEnabled || $document[0].hidden || disabledElementsLookup.get(node);
+ var skipAnimations = documentHidden || disabledElementsLookup.get(node);
var existingAnimation = (!skipAnimations && activeAnimationsLookup.get(node)) || {};
var hasExistingAnimation = !!existingAnimation.state;
// there is no point in traversing the same collection of parent ancestors if a followup
// animation will be run on the same element that already did all that checking work
- if (!skipAnimations && (!hasExistingAnimation || existingAnimation.state != PRE_DIGEST_STATE)) {
- skipAnimations = !areAnimationsAllowed(element, parent, event);
+ if (!skipAnimations && (!hasExistingAnimation || existingAnimation.state !== PRE_DIGEST_STATE)) {
+ skipAnimations = !areAnimationsAllowed(node, parentNode, event);
}
if (skipAnimations) {
+ // Callbacks should fire even if the document is hidden (regression fix for issue #14120)
+ if (documentHidden) notifyProgress(runner, event, 'start');
close();
+ if (documentHidden) notifyProgress(runner, event, 'close');
return runner;
}
if (isStructural) {
- closeChildAnimations(element);
+ closeChildAnimations(node);
}
var newAnimation = {
@@ -2510,7 +2535,7 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) {
};
if (hasExistingAnimation) {
- var skipAnimationFlag = isAllowed('skip', element, newAnimation, existingAnimation);
+ var skipAnimationFlag = isAllowed('skip', newAnimation, existingAnimation);
if (skipAnimationFlag) {
if (existingAnimation.state === RUNNING_STATE) {
close();
@@ -2520,7 +2545,7 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) {
return existingAnimation.runner;
}
}
- var cancelAnimationFlag = isAllowed('cancel', element, newAnimation, existingAnimation);
+ var cancelAnimationFlag = isAllowed('cancel', newAnimation, existingAnimation);
if (cancelAnimationFlag) {
if (existingAnimation.state === RUNNING_STATE) {
// this will end the animation right away and it is safe
@@ -2542,7 +2567,7 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) {
// a joined animation means that this animation will take over the existing one
// so an example would involve a leave animation taking over an enter. Then when
// the postDigest kicks in the enter will be ignored.
- var joinAnimationFlag = isAllowed('join', element, newAnimation, existingAnimation);
+ var joinAnimationFlag = isAllowed('join', newAnimation, existingAnimation);
if (joinAnimationFlag) {
if (existingAnimation.state === RUNNING_STATE) {
normalizeAnimationDetails(element, newAnimation);
@@ -2576,7 +2601,7 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) {
if (!isValidAnimation) {
close();
- clearElementAnimationState(element);
+ clearElementAnimationState(node);
return runner;
}
@@ -2584,9 +2609,18 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) {
var counter = (existingAnimation.counter || 0) + 1;
newAnimation.counter = counter;
- markElementAnimationState(element, PRE_DIGEST_STATE, newAnimation);
+ markElementAnimationState(node, PRE_DIGEST_STATE, newAnimation);
$rootScope.$$postDigest(function() {
+ // It is possible that the DOM nodes inside `originalElement` have been replaced. This can
+ // happen if the animated element is a transcluded clone and also has a `templateUrl`
+ // directive on it. Therefore, we must recreate `element` in order to interact with the
+ // actual DOM nodes.
+ // Note: We still need to use the old `node` for certain things, such as looking up in
+ // HashMaps where it was used as the key.
+
+ element = stripCommentsFromElement(originalElement);
+
var animationDetails = activeAnimationsLookup.get(node);
var animationCancelled = !animationDetails;
animationDetails = animationDetails || {};
@@ -2625,7 +2659,7 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) {
// isn't allowed to animate from here then we need to clear the state of the element
// so that any future animations won't read the expired animation data.
if (!isValidAnimation) {
- clearElementAnimationState(element);
+ clearElementAnimationState(node);
}
return;
@@ -2637,29 +2671,29 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) {
? 'setClass'
: animationDetails.event;
- markElementAnimationState(element, RUNNING_STATE);
+ markElementAnimationState(node, RUNNING_STATE);
var realRunner = $$animation(element, event, animationDetails.options);
+ // this will update the runner's flow-control events based on
+ // the `realRunner` object.
+ runner.setHost(realRunner);
+ notifyProgress(runner, event, 'start', {});
+
realRunner.done(function(status) {
close(!status);
var animationDetails = activeAnimationsLookup.get(node);
if (animationDetails && animationDetails.counter === counter) {
- clearElementAnimationState(getDomNode(element));
+ clearElementAnimationState(node);
}
notifyProgress(runner, event, 'close', {});
});
-
- // this will update the runner's flow-control events based on
- // the `realRunner` object.
- runner.setHost(realRunner);
- notifyProgress(runner, event, 'start', {});
});
return runner;
function notifyProgress(runner, event, phase, data) {
runInNextPostDigestOrNow(function() {
- var callbacks = findCallbacks(parent, element, event);
+ var callbacks = findCallbacks(parentNode, node, event);
if (callbacks.length) {
// do not optimize this call here to RAF because
// we don't know how heavy the callback code here will
@@ -2669,13 +2703,16 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) {
forEach(callbacks, function(callback) {
callback(element, phase, data);
});
+ cleanupEventListeners(phase, node);
});
+ } else {
+ cleanupEventListeners(phase, node);
}
});
runner.progress(event, phase, data);
}
- function close(reject) { // jshint ignore:line
+ function close(reject) {
clearGeneratedClasses(element, options);
applyAnimationClasses(element, options);
applyAnimationStyles(element, options);
@@ -2684,11 +2721,10 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) {
}
}
- function closeChildAnimations(element) {
- var node = getDomNode(element);
+ function closeChildAnimations(node) {
var children = node.querySelectorAll('[' + NG_ANIMATE_ATTR_NAME + ']');
forEach(children, function(child) {
- var state = parseInt(child.getAttribute(NG_ANIMATE_ATTR_NAME));
+ var state = parseInt(child.getAttribute(NG_ANIMATE_ATTR_NAME), 10);
var animationDetails = activeAnimationsLookup.get(child);
if (animationDetails) {
switch (state) {
@@ -2696,21 +2732,16 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) {
animationDetails.runner.end();
/* falls through */
case PRE_DIGEST_STATE:
- activeAnimationsLookup.remove(child);
+ activeAnimationsLookup.delete(child);
break;
}
}
});
}
- function clearElementAnimationState(element) {
- var node = getDomNode(element);
+ function clearElementAnimationState(node) {
node.removeAttribute(NG_ANIMATE_ATTR_NAME);
- activeAnimationsLookup.remove(node);
- }
-
- function isMatchingElement(nodeOrElmA, nodeOrElmB) {
- return getDomNode(nodeOrElmA) === getDomNode(nodeOrElmB);
+ activeAnimationsLookup.delete(node);
}
/**
@@ -2720,54 +2751,54 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) {
* c) the element is not a child of the body
* d) the element is not a child of the $rootElement
*/
- function areAnimationsAllowed(element, parentElement, event) {
- var bodyElement = jqLite($document[0].body);
- var bodyElementDetected = isMatchingElement(element, bodyElement) || element[0].nodeName === 'HTML';
- var rootElementDetected = isMatchingElement(element, $rootElement);
+ function areAnimationsAllowed(node, parentNode, event) {
+ var bodyNode = $document[0].body;
+ var rootNode = getDomNode($rootElement);
+
+ var bodyNodeDetected = (node === bodyNode) || node.nodeName === 'HTML';
+ var rootNodeDetected = (node === rootNode);
var parentAnimationDetected = false;
+ var elementDisabled = disabledElementsLookup.get(node);
var animateChildren;
- var elementDisabled = disabledElementsLookup.get(getDomNode(element));
- var parentHost = jqLite.data(element[0], NG_ANIMATE_PIN_DATA);
+ var parentHost = jqLite.data(node, NG_ANIMATE_PIN_DATA);
if (parentHost) {
- parentElement = parentHost;
+ parentNode = getDomNode(parentHost);
}
- parentElement = getDomNode(parentElement);
-
- while (parentElement) {
- if (!rootElementDetected) {
+ while (parentNode) {
+ if (!rootNodeDetected) {
// angular doesn't want to attempt to animate elements outside of the application
// therefore we need to ensure that the rootElement is an ancestor of the current element
- rootElementDetected = isMatchingElement(parentElement, $rootElement);
+ rootNodeDetected = (parentNode === rootNode);
}
- if (parentElement.nodeType !== ELEMENT_NODE) {
+ if (parentNode.nodeType !== ELEMENT_NODE) {
// no point in inspecting the #document element
break;
}
- var details = activeAnimationsLookup.get(parentElement) || {};
+ var details = activeAnimationsLookup.get(parentNode) || {};
// either an enter, leave or move animation will commence
// therefore we can't allow any animations to take place
// but if a parent animation is class-based then that's ok
if (!parentAnimationDetected) {
- var parentElementDisabled = disabledElementsLookup.get(parentElement);
+ var parentNodeDisabled = disabledElementsLookup.get(parentNode);
- if (parentElementDisabled === true && elementDisabled !== false) {
+ if (parentNodeDisabled === true && elementDisabled !== false) {
// disable animations if the user hasn't explicitly enabled animations on the
// current element
elementDisabled = true;
// element is disabled via parent element, no need to check anything else
break;
- } else if (parentElementDisabled === false) {
+ } else if (parentNodeDisabled === false) {
elementDisabled = false;
}
parentAnimationDetected = details.structural;
}
if (isUndefined(animateChildren) || animateChildren === true) {
- var value = jqLite.data(parentElement, NG_ANIMATE_CHILDREN_DATA);
+ var value = jqLite.data(parentNode, NG_ANIMATE_CHILDREN_DATA);
if (isDefined(value)) {
animateChildren = value;
}
@@ -2776,52 +2807,53 @@ var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) {
// there is no need to continue traversing at this point
if (parentAnimationDetected && animateChildren === false) break;
- if (!bodyElementDetected) {
+ if (!bodyNodeDetected) {
// we also need to ensure that the element is or will be a part of the body element
// otherwise it is pointless to even issue an animation to be rendered
- bodyElementDetected = isMatchingElement(parentElement, bodyElement);
+ bodyNodeDetected = (parentNode === bodyNode);
}
- if (bodyElementDetected && rootElementDetected) {
+ if (bodyNodeDetected && rootNodeDetected) {
// If both body and root have been found, any other checks are pointless,
// as no animation data should live outside the application
break;
}
- if (!rootElementDetected) {
- // If no rootElement is detected, check if the parentElement is pinned to another element
- parentHost = jqLite.data(parentElement, NG_ANIMATE_PIN_DATA);
+ if (!rootNodeDetected) {
+ // If `rootNode` is not detected, check if `parentNode` is pinned to another element
+ parentHost = jqLite.data(parentNode, NG_ANIMATE_PIN_DATA);
if (parentHost) {
// The pin target element becomes the next parent element
- parentElement = getDomNode(parentHost);
+ parentNode = getDomNode(parentHost);
continue;
}
}
- parentElement = parentElement.parentNode;
+ parentNode = parentNode.parentNode;
}
var allowAnimation = (!parentAnimationDetected || animateChildren) && elementDisabled !== true;
- return allowAnimation && rootElementDetected && bodyElementDetected;
+ return allowAnimation && rootNodeDetected && bodyNodeDetected;
}
- function markElementAnimationState(element, state, details) {
+ function markElementAnimationState(node, state, details) {
details = details || {};
details.state = state;
- var node = getDomNode(element);
node.setAttribute(NG_ANIMATE_ATTR_NAME, state);
var oldValue = activeAnimationsLookup.get(node);
var newValue = oldValue
? extend(oldValue, details)
: details;
- activeAnimationsLookup.put(node, newValue);
+ activeAnimationsLookup.set(node, newValue);
}
}];
}];
-var $$AnimationProvider = ['$animateProvider', function($animateProvider) {
+/* exported $$AnimationProvider */
+
+var $$AnimationProvider = ['$animateProvider', /** @this */ function($animateProvider) {
var NG_ANIMATE_REF_ATTR = 'ng-animate-ref';
var drivers = this.drivers = [];
@@ -2840,21 +2872,21 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) {
return element.data(RUNNER_STORAGE_KEY);
}
- this.$get = ['$$jqLite', '$rootScope', '$injector', '$$AnimateRunner', '$$HashMap', '$$rAFScheduler',
- function($$jqLite, $rootScope, $injector, $$AnimateRunner, $$HashMap, $$rAFScheduler) {
+ this.$get = ['$$jqLite', '$rootScope', '$injector', '$$AnimateRunner', '$$Map', '$$rAFScheduler',
+ function($$jqLite, $rootScope, $injector, $$AnimateRunner, $$Map, $$rAFScheduler) {
var animationQueue = [];
var applyAnimationClasses = applyAnimationClassesFactory($$jqLite);
function sortAnimations(animations) {
var tree = { children: [] };
- var i, lookup = new $$HashMap();
+ var i, lookup = new $$Map();
- // this is done first beforehand so that the hashmap
+ // this is done first beforehand so that the map
// is filled with a list of the elements that will be animated
for (i = 0; i < animations.length; i++) {
var animation = animations[i];
- lookup.put(animation.domNode, animations[i] = {
+ lookup.set(animation.domNode, animations[i] = {
domNode: animation.domNode,
fn: animation.fn,
children: []
@@ -2873,7 +2905,7 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) {
var elementNode = entry.domNode;
var parentNode = elementNode.parentNode;
- lookup.put(elementNode, entry);
+ lookup.set(elementNode, entry);
var parentEntry;
while (parentNode) {
@@ -3126,7 +3158,7 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) {
};
// the anchor animations require that the from and to elements both have at least
- // one shared CSS class which effictively marries the two elements together to use
+ // one shared CSS class which effectively marries the two elements together to use
// the same animation driver and to properly sequence the anchor animation.
if (group.classes.length) {
preparedAnimations.push(group);
@@ -3169,8 +3201,6 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) {
// may attempt more elements, but custom drivers are more particular
for (var i = drivers.length - 1; i >= 0; i--) {
var driverName = drivers[i];
- if (!$injector.has(driverName)) continue; // TODO(matsko): remove this check
-
var factory = $injector.get(driverName);
var driver = factory(animationDetails);
if (driver) {
@@ -3199,7 +3229,8 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) {
}
function update(element) {
- getRunner(element).setHost(newRunner);
+ var runner = getRunner(element);
+ if (runner) runner.setHost(newRunner);
}
}
@@ -3210,7 +3241,7 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) {
}
}
- function close(rejected) { // jshint ignore:line
+ function close(rejected) {
element.off('$destroy', handleDestroyedElement);
removeRunner(element);
@@ -3229,18 +3260,120 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) {
}];
}];
-/* global angularAnimateModule: true,
-
- $$AnimateAsyncRunFactory,
- $$rAFSchedulerFactory,
- $$AnimateChildrenDirective,
- $$AnimateQueueProvider,
- $$AnimationProvider,
- $AnimateCssProvider,
- $$AnimateCssDriverProvider,
- $$AnimateJsProvider,
- $$AnimateJsDriverProvider,
-*/
+/**
+ * @ngdoc directive
+ * @name ngAnimateSwap
+ * @restrict A
+ * @scope
+ *
+ * @description
+ *
+ * ngAnimateSwap is a animation-oriented directive that allows for the container to
+ * be removed and entered in whenever the associated expression changes. A
+ * common usecase for this directive is a rotating banner or slider component which
+ * contains one image being present at a time. When the active image changes
+ * then the old image will perform a `leave` animation and the new element
+ * will be inserted via an `enter` animation.
+ *
+ * @animations
+ * | Animation | Occurs |
+ * |----------------------------------|--------------------------------------|
+ * | {@link ng.$animate#enter enter} | when the new element is inserted to the DOM |
+ * | {@link ng.$animate#leave leave} | when the old element is removed from the DOM |
+ *
+ * @example
+ * <example name="ngAnimateSwap-directive" module="ngAnimateSwapExample"
+ * deps="angular-animate.js"
+ * animations="true" fixBase="true">
+ * <file name="index.html">
+ * <div class="container" ng-controller="AppCtrl">
+ * <div ng-animate-swap="number" class="cell swap-animation" ng-class="colorClass(number)">
+ * {{ number }}
+ * </div>
+ * </div>
+ * </file>
+ * <file name="script.js">
+ * angular.module('ngAnimateSwapExample', ['ngAnimate'])
+ * .controller('AppCtrl', ['$scope', '$interval', function($scope, $interval) {
+ * $scope.number = 0;
+ * $interval(function() {
+ * $scope.number++;
+ * }, 1000);
+ *
+ * var colors = ['red','blue','green','yellow','orange'];
+ * $scope.colorClass = function(number) {
+ * return colors[number % colors.length];
+ * };
+ * }]);
+ * </file>
+ * <file name="animations.css">
+ * .container {
+ * height:250px;
+ * width:250px;
+ * position:relative;
+ * overflow:hidden;
+ * border:2px solid black;
+ * }
+ * .container .cell {
+ * font-size:150px;
+ * text-align:center;
+ * line-height:250px;
+ * position:absolute;
+ * top:0;
+ * left:0;
+ * right:0;
+ * border-bottom:2px solid black;
+ * }
+ * .swap-animation.ng-enter, .swap-animation.ng-leave {
+ * transition:0.5s linear all;
+ * }
+ * .swap-animation.ng-enter {
+ * top:-250px;
+ * }
+ * .swap-animation.ng-enter-active {
+ * top:0px;
+ * }
+ * .swap-animation.ng-leave {
+ * top:0px;
+ * }
+ * .swap-animation.ng-leave-active {
+ * top:250px;
+ * }
+ * .red { background:red; }
+ * .green { background:green; }
+ * .blue { background:blue; }
+ * .yellow { background:yellow; }
+ * .orange { background:orange; }
+ * </file>
+ * </example>
+ */
+var ngAnimateSwapDirective = ['$animate', '$rootScope', function($animate, $rootScope) {
+ return {
+ restrict: 'A',
+ transclude: 'element',
+ terminal: true,
+ priority: 600, // we use 600 here to ensure that the directive is caught before others
+ link: function(scope, $element, attrs, ctrl, $transclude) {
+ var previousElement, previousScope;
+ scope.$watchCollection(attrs.ngAnimateSwap || attrs['for'], function(value) {
+ if (previousElement) {
+ $animate.leave(previousElement);
+ }
+ if (previousScope) {
+ previousScope.$destroy();
+ previousScope = null;
+ }
+ if (value || value === 0) {
+ previousScope = scope.$new();
+ $transclude(previousScope, function(element) {
+ previousElement = element;
+ $animate.enter(element, null, $element);
+ });
+ }
+ });
+ }
+ };
+}];
/**
* @ngdoc module
@@ -3279,7 +3412,7 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) {
* ## CSS-based Animations
*
* CSS-based animations with ngAnimate are unique since they require no JavaScript code at all. By using a CSS class that we reference between our HTML
- * and CSS code we can create an animation that will be picked up by Angular when an the underlying directive performs an operation.
+ * and CSS code we can create an animation that will be picked up by Angular when an underlying directive performs an operation.
*
* The example below shows how an `enter` animation can be made possible on an element using `ng-if`:
*
@@ -3358,7 +3491,7 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) {
* <div ng-show="bool" class="fade">
* Show and hide me
* </div>
- * <button ng-click="bool=true">Toggle</button>
+ * <button ng-click="bool=!bool">Toggle</button>
*
* <style>
* .fade.ng-hide {
@@ -3419,6 +3552,10 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) {
* /&#42; As of 1.4.4, this must always be set: it signals ngAnimate
* to not accidentally inherit a delay property from another CSS class &#42;/
* transition-duration: 0s;
+ *
+ * /&#42; if you are using animations instead of transitions you should configure as follows:
+ * animation-delay: 0.1s;
+ * animation-duration: 0s; &#42;/
* }
* .my-animation.ng-enter.ng-enter-active {
* /&#42; standard transition styles &#42;/
@@ -3514,7 +3651,7 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) {
*
* ngAnimate also allows for animations to be consumed by JavaScript code. The approach is similar to CSS-based animations (where there is a shared
* CSS class that is referenced in our HTML code) but in addition we need to register the JavaScript animation on the module. By making use of the
- * `module.animation()` module function we can register the ainmation.
+ * `module.animation()` module function we can register the animation.
*
* Let's see an example of a enter/leave animation using `ngRepeat`:
*
@@ -3774,7 +3911,7 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) {
deps="angular-animate.js;angular-route.js"
animations="true">
<file name="index.html">
- <a href="#/">Home</a>
+ <a href="#!/">Home</a>
<hr />
<div class="view-container">
<div ng-view class="view"></div>
@@ -3794,22 +3931,23 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) {
}])
.run(['$rootScope', function($rootScope) {
$rootScope.records = [
- { id:1, title: "Miss Beulah Roob" },
- { id:2, title: "Trent Morissette" },
- { id:3, title: "Miss Ava Pouros" },
- { id:4, title: "Rod Pouros" },
- { id:5, title: "Abdul Rice" },
- { id:6, title: "Laurie Rutherford Sr." },
- { id:7, title: "Nakia McLaughlin" },
- { id:8, title: "Jordon Blanda DVM" },
- { id:9, title: "Rhoda Hand" },
- { id:10, title: "Alexandrea Sauer" }
+ { id: 1, title: 'Miss Beulah Roob' },
+ { id: 2, title: 'Trent Morissette' },
+ { id: 3, title: 'Miss Ava Pouros' },
+ { id: 4, title: 'Rod Pouros' },
+ { id: 5, title: 'Abdul Rice' },
+ { id: 6, title: 'Laurie Rutherford Sr.' },
+ { id: 7, title: 'Nakia McLaughlin' },
+ { id: 8, title: 'Jordon Blanda DVM' },
+ { id: 9, title: 'Rhoda Hand' },
+ { id: 10, title: 'Alexandrea Sauer' }
];
}])
.controller('HomeController', [function() {
//empty
}])
- .controller('ProfileController', ['$rootScope', '$routeParams', function($rootScope, $routeParams) {
+ .controller('ProfileController', ['$rootScope', '$routeParams',
+ function ProfileController($rootScope, $routeParams) {
var index = parseInt($routeParams.id, 10);
var record = $rootScope.records[index - 1];
@@ -3821,7 +3959,7 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) {
<h2>Welcome to the home page</h1>
<p>Please click on an element</p>
<a class="record"
- ng-href="#/profile/{{ record.id }}"
+ ng-href="#!/profile/{{ record.id }}"
ng-animate-ref="{{ record.id }}"
ng-repeat="record in records">
{{ record.title }}
@@ -3927,31 +4065,6 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) {
* possible be sure to visit the {@link ng.$animate $animate service API page}.
*
*
- * ### Preventing Collisions With Third Party Libraries
- *
- * Some third-party frameworks place animation duration defaults across many element or className
- * selectors in order to make their code small and reuseable. This can lead to issues with ngAnimate, which
- * is expecting actual animations on these elements and has to wait for their completion.
- *
- * You can prevent this unwanted behavior by using a prefix on all your animation classes:
- *
- * ```css
- * /&#42; prefixed with animate- &#42;/
- * .animate-fade-add.animate-fade-add-active {
- * transition:1s linear all;
- * opacity:0;
- * }
- * ```
- *
- * You then configure `$animate` to enforce this prefix:
- *
- * ```js
- * $animateProvider.classNameFilter(/animate-/);
- * ```
- *
- * This also may provide your application with a speed boost since only specific elements containing CSS class prefix
- * will be evaluated for animation when any DOM changes occur in the application.
- *
* ## Callbacks and Promises
*
* When `$animate` is called it returns a promise that can be used to capture when the animation has ended. Therefore if we were to trigger
@@ -3983,6 +4096,19 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) {
* (Note that you will need to trigger a digest within the callback to get angular to notice any scope-related changes.)
*/
+var copy;
+var extend;
+var forEach;
+var isArray;
+var isDefined;
+var isElement;
+var isFunction;
+var isObject;
+var isString;
+var isUndefined;
+var jqLite;
+var noop;
+
/**
* @ngdoc service
* @name $animate
@@ -3993,7 +4119,25 @@ var $$AnimationProvider = ['$animateProvider', function($animateProvider) {
*
* Click here {@link ng.$animate to learn more about animations with `$animate`}.
*/
-angular.module('ngAnimate', [])
+angular.module('ngAnimate', [], function initAngularHelpers() {
+ // Access helpers from angular core.
+ // Do it inside a `config` block to ensure `window.angular` is available.
+ noop = angular.noop;
+ copy = angular.copy;
+ extend = angular.extend;
+ jqLite = angular.element;
+ forEach = angular.forEach;
+ isArray = angular.isArray;
+ isString = angular.isString;
+ isObject = angular.isObject;
+ isUndefined = angular.isUndefined;
+ isDefined = angular.isDefined;
+ isFunction = angular.isFunction;
+ isElement = angular.isElement;
+})
+ .info({ angularVersion: '1.6.5' })
+ .directive('ngAnimateSwap', ngAnimateSwapDirective)
+
.directive('ngAnimateChildren', $$AnimateChildrenDirective)
.factory('$$rAFScheduler', $$rAFSchedulerFactory)
diff --git a/libs/bower_components/angular-animate/angular-animate.min.js b/libs/bower_components/angular-animate/angular-animate.min.js
index 102df66294..b62b72b951 100644
--- a/libs/bower_components/angular-animate/angular-animate.min.js
+++ b/libs/bower_components/angular-animate/angular-animate.min.js
@@ -1,55 +1,57 @@
/*
- AngularJS v1.4.10
- (c) 2010-2015 Google, Inc. http://angularjs.org
+ AngularJS v1.6.5
+ (c) 2010-2017 Google, Inc. http://angularjs.org
License: MIT
*/
-(function(B,r,Ua){'use strict';function xa(a,b,c){if(!a)throw Ja("areq",b||"?",c||"required");return a}function ya(a,b){if(!a&&!b)return"";if(!a)return b;if(!b)return a;ba(a)&&(a=a.join(" "));ba(b)&&(b=b.join(" "));return a+" "+b}function Ka(a){var b={};a&&(a.to||a.from)&&(b.to=a.to,b.from=a.from);return b}function X(a,b,c){var d="";a=ba(a)?a:a&&Q(a)&&a.length?a.split(/\s+/):[];s(a,function(a,g){a&&0<a.length&&(d+=0<g?" ":"",d+=c?b+a:a+b)});return d}function La(a){if(a instanceof F)switch(a.length){case 0:return[];
-case 1:if(1===a[0].nodeType)return a;break;default:return F(ca(a))}if(1===a.nodeType)return F(a)}function ca(a){if(!a[0])return a;for(var b=0;b<a.length;b++){var c=a[b];if(1==c.nodeType)return c}}function Ma(a,b,c){s(b,function(b){a.addClass(b,c)})}function Na(a,b,c){s(b,function(b){a.removeClass(b,c)})}function U(a){return function(b,c){c.addClass&&(Ma(a,b,c.addClass),c.addClass=null);c.removeClass&&(Na(a,b,c.removeClass),c.removeClass=null)}}function la(a){a=a||{};if(!a.$$prepared){var b=a.domOperation||
-R;a.domOperation=function(){a.$$domOperationFired=!0;b();b=R};a.$$prepared=!0}return a}function ga(a,b){za(a,b);Aa(a,b)}function za(a,b){b.from&&(a.css(b.from),b.from=null)}function Aa(a,b){b.to&&(a.css(b.to),b.to=null)}function V(a,b,c){var d=b.options||{};c=c.options||{};var e=(d.addClass||"")+" "+(c.addClass||""),g=(d.removeClass||"")+" "+(c.removeClass||"");a=Oa(a.attr("class"),e,g);c.preparationClasses&&(d.preparationClasses=Y(c.preparationClasses,d.preparationClasses),delete c.preparationClasses);
-e=d.domOperation!==R?d.domOperation:null;Ba(d,c);e&&(d.domOperation=e);d.addClass=a.addClass?a.addClass:null;d.removeClass=a.removeClass?a.removeClass:null;b.addClass=d.addClass;b.removeClass=d.removeClass;return d}function Oa(a,b,c){function d(a){Q(a)&&(a=a.split(" "));var b={};s(a,function(a){a.length&&(b[a]=!0)});return b}var e={};a=d(a);b=d(b);s(b,function(a,b){e[b]=1});c=d(c);s(c,function(a,b){e[b]=1===e[b]?null:-1});var g={addClass:"",removeClass:""};s(e,function(b,c){var d,e;1===b?(d="addClass",
-e=!a[c]):-1===b&&(d="removeClass",e=a[c]);e&&(g[d].length&&(g[d]+=" "),g[d]+=c)});return g}function A(a){return a instanceof r.element?a[0]:a}function Pa(a,b,c){var d="";b&&(d=X(b,"ng-",!0));c.addClass&&(d=Y(d,X(c.addClass,"-add")));c.removeClass&&(d=Y(d,X(c.removeClass,"-remove")));d.length&&(c.preparationClasses=d,a.addClass(d))}function ma(a,b){var c=b?"-"+b+"s":"";ia(a,[ja,c]);return[ja,c]}function pa(a,b){var c=b?"paused":"",d=Z+"PlayState";ia(a,[d,c]);return[d,c]}function ia(a,b){a.style[b[0]]=
-b[1]}function Y(a,b){return a?b?a+" "+b:a:b}function Ca(a,b,c){var d=Object.create(null),e=a.getComputedStyle(b)||{};s(c,function(a,b){var c=e[a];if(c){var J=c.charAt(0);if("-"===J||"+"===J||0<=J)c=Qa(c);0===c&&(c=null);d[b]=c}});return d}function Qa(a){var b=0;a=a.split(/\s*,\s*/);s(a,function(a){"s"==a.charAt(a.length-1)&&(a=a.substring(0,a.length-1));a=parseFloat(a)||0;b=b?Math.max(a,b):a});return b}function qa(a){return 0===a||null!=a}function Da(a,b){var c=S,d=a+"s";b?c+="Duration":d+=" linear all";
-return[c,d]}function Ea(){var a=Object.create(null);return{flush:function(){a=Object.create(null)},count:function(b){return(b=a[b])?b.total:0},get:function(b){return(b=a[b])&&b.value},put:function(b,c){a[b]?a[b].total++:a[b]={total:1,value:c}}}}function Fa(a,b,c){s(c,function(c){a[c]=da(a[c])?a[c]:b.style.getPropertyValue(c)})}var R=r.noop,Ga=r.copy,Ba=r.extend,F=r.element,s=r.forEach,ba=r.isArray,Q=r.isString,ra=r.isObject,P=r.isUndefined,da=r.isDefined,Ha=r.isFunction,sa=r.isElement,S,ta,Z,ua;P(B.ontransitionend)&&
-da(B.onwebkittransitionend)?(S="WebkitTransition",ta="webkitTransitionEnd transitionend"):(S="transition",ta="transitionend");P(B.onanimationend)&&da(B.onwebkitanimationend)?(Z="WebkitAnimation",ua="webkitAnimationEnd animationend"):(Z="animation",ua="animationend");var na=Z+"Delay",va=Z+"Duration",ja=S+"Delay";B=S+"Duration";var Ja=r.$$minErr("ng"),Ra={transitionDuration:B,transitionDelay:ja,transitionProperty:S+"Property",animationDuration:va,animationDelay:na,animationIterationCount:Z+"IterationCount"},
-Sa={transitionDuration:B,transitionDelay:ja,animationDuration:va,animationDelay:na};r.module("ngAnimate",[]).directive("ngAnimateChildren",["$interpolate",function(a){return{link:function(b,c,d){function e(a){c.data("$$ngAnimateChildren","on"===a||"true"===a)}var g=d.ngAnimateChildren;r.isString(g)&&0===g.length?c.data("$$ngAnimateChildren",!0):(e(a(g)(b)),d.$observe("ngAnimateChildren",e))}}}]).factory("$$rAFScheduler",["$$rAF",function(a){function b(a){d=d.concat(a);c()}function c(){if(d.length){for(var b=
-d.shift(),I=0;I<b.length;I++)b[I]();e||a(function(){e||c()})}}var d,e;d=b.queue=[];b.waitUntilQuiet=function(b){e&&e();e=a(function(){e=null;b();c()})};return b}]).provider("$$animateQueue",["$animateProvider",function(a){function b(a){if(!a)return null;a=a.split(" ");var b=Object.create(null);s(a,function(a){b[a]=!0});return b}function c(a,c){if(a&&c){var d=b(c);return a.split(" ").some(function(a){return d[a]})}}function d(a,b,c,d){return g[a].some(function(a){return a(b,c,d)})}function e(a,b){var c=
-0<(a.addClass||"").length,d=0<(a.removeClass||"").length;return b?c&&d:c||d}var g=this.rules={skip:[],cancel:[],join:[]};g.join.push(function(a,b,c){return!b.structural&&e(b)});g.skip.push(function(a,b,c){return!b.structural&&!e(b)});g.skip.push(function(a,b,c){return"leave"==c.event&&b.structural});g.skip.push(function(a,b,c){return c.structural&&2===c.state&&!b.structural});g.cancel.push(function(a,b,c){return c.structural&&b.structural});g.cancel.push(function(a,b,c){return 2===c.state&&b.structural});
-g.cancel.push(function(a,b,d){a=b.addClass;b=b.removeClass;var e=d.addClass;d=d.removeClass;return P(a)&&P(b)||P(e)&&P(d)?!1:c(a,d)||c(b,e)});this.$get=["$$rAF","$rootScope","$rootElement","$document","$$HashMap","$$animation","$$AnimateRunner","$templateRequest","$$jqLite","$$forceReflow",function(b,c,g,m,M,r,v,oa,w,C){function K(){var a=!1;return function(b){a?b():c.$$postDigest(function(){a=!0;b()})}}function H(a,b,c){var f=A(b),d=A(a),h=[];(a=z[c])&&s(a,function(a){y.call(a.node,f)?h.push(a.callback):
-"leave"===c&&y.call(a.node,d)&&h.push(a.callback)});return h}function h(a,f,h){function l(c,f,d,h){g(function(){var c=H(y,a,f);c.length&&b(function(){s(c,function(b){b(a,d,h)})})});c.progress(f,d,h)}function z(b){var c=a,f=n;f.preparationClasses&&(c.removeClass(f.preparationClasses),f.preparationClasses=null);f.activeClasses&&(c.removeClass(f.activeClasses),f.activeClasses=null);Ia(a,n);ga(a,n);n.domOperation();k.complete(!b)}var n=Ga(h),C,y;if(a=La(a))C=A(a),y=a.parent();var n=la(n),k=new v,g=K();
-ba(n.addClass)&&(n.addClass=n.addClass.join(" "));n.addClass&&!Q(n.addClass)&&(n.addClass=null);ba(n.removeClass)&&(n.removeClass=n.removeClass.join(" "));n.removeClass&&!Q(n.removeClass)&&(n.removeClass=null);n.from&&!ra(n.from)&&(n.from=null);n.to&&!ra(n.to)&&(n.to=null);if(!C)return z(),k;h=[C.className,n.addClass,n.removeClass].join(" ");if(!Ta(h))return z(),k;var J=0<=["enter","move","leave"].indexOf(f),x=!L||m[0].hidden||D.get(C);h=!x&&t.get(C)||{};var w=!!h.state;x||w&&1==h.state||(x=!q(a,
-y,f));if(x)return z(),k;J&&wa(a);x={structural:J,element:a,event:f,addClass:n.addClass,removeClass:n.removeClass,close:z,options:n,runner:k};if(w){if(d("skip",a,x,h)){if(2===h.state)return z(),k;V(a,h,x);return h.runner}if(d("cancel",a,x,h))if(2===h.state)h.runner.end();else if(h.structural)h.close();else return V(a,h,x),h.runner;else if(d("join",a,x,h))if(2===h.state)V(a,x,{});else return Pa(a,J?f:null,n),f=x.event=h.event,n=V(a,h,x),h.runner}else V(a,x,{});(w=x.structural)||(w="animate"===x.event&&
-0<Object.keys(x.options.to||{}).length||e(x));if(!w)return z(),N(a),k;var M=(h.counter||0)+1;x.counter=M;u(a,1,x);c.$$postDigest(function(){var b=t.get(C),c=!b,b=b||{},d=0<(a.parent()||[]).length&&("animate"===b.event||b.structural||e(b));if(c||b.counter!==M||!d){c&&(Ia(a,n),ga(a,n));if(c||J&&b.event!==f)n.domOperation(),k.end();d||N(a)}else f=!b.structural&&e(b,!0)?"setClass":b.event,u(a,2),b=r(a,f,b.options),b.done(function(b){z(!b);(b=t.get(C))&&b.counter===M&&N(A(a));l(k,f,"close",{})}),k.setHost(b),
-l(k,f,"start",{})});return k}function wa(a){a=A(a).querySelectorAll("[data-ng-animate]");s(a,function(a){var b=parseInt(a.getAttribute("data-ng-animate")),c=t.get(a);if(c)switch(b){case 2:c.runner.end();case 1:t.remove(a)}})}function N(a){a=A(a);a.removeAttribute("data-ng-animate");t.remove(a)}function k(a,b){return A(a)===A(b)}function q(a,b,c){c=F(m[0].body);var f=k(a,c)||"HTML"===a[0].nodeName,d=k(a,g),h=!1,l,z=D.get(A(a));(a=F.data(a[0],"$ngAnimatePin"))&&(b=a);for(b=A(b);b;){d||(d=k(b,g));if(1!==
-b.nodeType)break;a=t.get(b)||{};if(!h){var e=D.get(b);if(!0===e&&!1!==z){z=!0;break}else!1===e&&(z=!1);h=a.structural}if(P(l)||!0===l)a=F.data(b,"$$ngAnimateChildren"),da(a)&&(l=a);if(h&&!1===l)break;f||(f=k(b,c));if(f&&d)break;if(!d&&(a=F.data(b,"$ngAnimatePin"))){b=A(a);continue}b=b.parentNode}return(!h||l)&&!0!==z&&d&&f}function u(a,b,c){c=c||{};c.state=b;a=A(a);a.setAttribute("data-ng-animate",b);c=(b=t.get(a))?Ba(b,c):c;t.put(a,c)}var t=new M,D=new M,L=null,f=c.$watch(function(){return 0===oa.totalPendingRequests},
-function(a){a&&(f(),c.$$postDigest(function(){c.$$postDigest(function(){null===L&&(L=!0)})}))}),z={},l=a.classNameFilter(),Ta=l?function(a){return l.test(a)}:function(){return!0},Ia=U(w),y=Node.prototype.contains||function(a){return this===a||!!(this.compareDocumentPosition(a)&16)};return{on:function(a,b,c){b=ca(b);z[a]=z[a]||[];z[a].push({node:b,callback:c})},off:function(a,b,c){function f(a,b,c){var d=ca(b);return a.filter(function(a){return!(a.node===d&&(!c||a.callback===c))})}var d=z[a];d&&(z[a]=
-1===arguments.length?null:f(d,b,c))},pin:function(a,b){xa(sa(a),"element","not an element");xa(sa(b),"parentElement","not an element");a.data("$ngAnimatePin",b)},push:function(a,b,c,f){c=c||{};c.domOperation=f;return h(a,b,c)},enabled:function(a,b){var c=arguments.length;if(0===c)b=!!L;else if(sa(a)){var f=A(a),d=D.get(f);1===c?b=!d:D.put(f,!b)}else b=L=!!a;return b}}}]}]).provider("$$animation",["$animateProvider",function(a){function b(a){return a.data("$$animationRunner")}var c=this.drivers=[];
-this.$get=["$$jqLite","$rootScope","$injector","$$AnimateRunner","$$HashMap","$$rAFScheduler",function(a,e,g,I,G,J){function m(a){function b(a){if(a.processed)return a;a.processed=!0;var d=a.domNode,N=d.parentNode;e.put(d,a);for(var k;N;){if(k=e.get(N)){k.processed||(k=b(k));break}N=N.parentNode}(k||c).children.push(a);return a}var c={children:[]},d,e=new G;for(d=0;d<a.length;d++){var g=a[d];e.put(g.domNode,a[d]={domNode:g.domNode,fn:g.fn,children:[]})}for(d=0;d<a.length;d++)b(a[d]);return function(a){var b=
-[],c=[],d;for(d=0;d<a.children.length;d++)c.push(a.children[d]);a=c.length;var e=0,u=[];for(d=0;d<c.length;d++){var t=c[d];0>=a&&(a=e,e=0,b.push(u),u=[]);u.push(t.fn);t.children.forEach(function(a){e++;c.push(a)});a--}u.length&&b.push(u);return b}(c)}var M=[],r=U(a);return function(v,G,w){function C(a){a=a.hasAttribute("ng-animate-ref")?[a]:a.querySelectorAll("[ng-animate-ref]");var b=[];s(a,function(a){var c=a.getAttribute("ng-animate-ref");c&&c.length&&b.push(a)});return b}function K(a){var b=[],
-c={};s(a,function(a,f){var d=A(a.element),h=0<=["enter","move"].indexOf(a.event),d=a.structural?C(d):[];if(d.length){var e=h?"to":"from";s(d,function(a){var b=a.getAttribute("ng-animate-ref");c[b]=c[b]||{};c[b][e]={animationID:f,element:F(a)}})}else b.push(a)});var d={},h={};s(c,function(c,e){var l=c.from,u=c.to;if(l&&u){var D=a[l.animationID],t=a[u.animationID],k=l.animationID.toString();if(!h[k]){var g=h[k]={structural:!0,beforeStart:function(){D.beforeStart();t.beforeStart()},close:function(){D.close();
-t.close()},classes:H(D.classes,t.classes),from:D,to:t,anchors:[]};g.classes.length?b.push(g):(b.push(D),b.push(t))}h[k].anchors.push({out:l.element,"in":u.element})}else l=l?l.animationID:u.animationID,u=l.toString(),d[u]||(d[u]=!0,b.push(a[l]))});return b}function H(a,b){a=a.split(" ");b=b.split(" ");for(var c=[],d=0;d<a.length;d++){var h=a[d];if("ng-"!==h.substring(0,3))for(var e=0;e<b.length;e++)if(h===b[e]){c.push(h);break}}return c.join(" ")}function h(a){for(var b=c.length-1;0<=b;b--){var d=
-c[b];if(g.has(d)&&(d=g.get(d)(a)))return d}}function wa(a,c){a.from&&a.to?(b(a.from.element).setHost(c),b(a.to.element).setHost(c)):b(a.element).setHost(c)}function N(){var a=b(v);!a||"leave"===G&&w.$$domOperationFired||a.end()}function k(b){v.off("$destroy",N);v.removeData("$$animationRunner");r(v,w);ga(v,w);w.domOperation();D&&a.removeClass(v,D);v.removeClass("ng-animate");u.complete(!b)}w=la(w);var q=0<=["enter","move","leave"].indexOf(G),u=new I({end:function(){k()},cancel:function(){k(!0)}});
-if(!c.length)return k(),u;v.data("$$animationRunner",u);var t=ya(v.attr("class"),ya(w.addClass,w.removeClass)),D=w.tempClasses;D&&(t+=" "+D,w.tempClasses=null);var L;q&&(L="ng-"+G+"-prepare",a.addClass(v,L));M.push({element:v,classes:t,event:G,structural:q,options:w,beforeStart:function(){v.addClass("ng-animate");D&&a.addClass(v,D);L&&(a.removeClass(v,L),L=null)},close:k});v.on("$destroy",N);if(1<M.length)return u;e.$$postDigest(function(){var a=[];s(M,function(c){b(c.element)?a.push(c):c.close()});
-M.length=0;var c=K(a),d=[];s(c,function(a){d.push({domNode:A(a.from?a.from.element:a.element),fn:function(){a.beforeStart();var c,d=a.close;if(b(a.anchors?a.from.element||a.to.element:a.element)){var f=h(a);f&&(c=f.start)}c?(c=c(),c.done(function(a){d(!a)}),wa(a,c)):d()}})});J(m(d))});return u}}]}]).provider("$animateCss",["$animateProvider",function(a){var b=Ea(),c=Ea();this.$get=["$window","$$jqLite","$$AnimateRunner","$timeout","$$forceReflow","$sniffer","$$rAFScheduler","$$animateQueue",function(a,
-e,g,I,G,J,m,M){function r(a,b){var c=a.parentNode;return(c.$$ngAnimateParentKey||(c.$$ngAnimateParentKey=++K))+"-"+a.getAttribute("class")+"-"+b}function v(h,g,C,k){var q;0<b.count(C)&&(q=c.get(C),q||(g=X(g,"-stagger"),e.addClass(h,g),q=Ca(a,h,k),q.animationDuration=Math.max(q.animationDuration,0),q.transitionDuration=Math.max(q.transitionDuration,0),e.removeClass(h,g),c.put(C,q)));return q||{}}function oa(a){H.push(a);m.waitUntilQuiet(function(){b.flush();c.flush();for(var a=G(),d=0;d<H.length;d++)H[d](a);
-H.length=0})}function w(c,e,g){e=b.get(g);e||(e=Ca(a,c,Ra),"infinite"===e.animationIterationCount&&(e.animationIterationCount=1));b.put(g,e);c=e;g=c.animationDelay;e=c.transitionDelay;c.maxDelay=g&&e?Math.max(g,e):g||e;c.maxDuration=Math.max(c.animationDuration*c.animationIterationCount,c.transitionDuration);return c}var C=U(e),K=0,H=[];return function(a,c){function d(){q()}function k(){q(!0)}function q(b){if(!(G||F&&K)){G=!0;K=!1;f.$$skipPreparationClasses||e.removeClass(a,ea);e.removeClass(a,da);
-pa(l,!1);ma(l,!1);s(m,function(a){l.style[a[0]]=""});C(a,f);ga(a,f);Object.keys(z).length&&s(z,function(a,b){a?l.style.setProperty(b,a):l.style.removeProperty(b)});if(f.onDone)f.onDone();fa&&fa.length&&a.off(fa.join(" "),D);var c=a.data("$$animateCss");c&&(I.cancel(c[0].timer),a.removeData("$$animateCss"));B&&B.complete(!b)}}function u(a){p.blockTransition&&ma(l,a);p.blockKeyframeAnimation&&pa(l,!!a)}function t(){B=new g({end:d,cancel:k});oa(R);q();return{$$willAnimate:!1,start:function(){return B},
-end:d}}function D(a){a.stopPropagation();var b=a.originalEvent||a;a=b.$manualTimeStamp||Date.now();b=parseFloat(b.elapsedTime.toFixed(3));Math.max(a-V,0)>=Q&&b>=O&&(F=!0,q())}function L(){function b(){if(!G){u(!1);s(m,function(a){l.style[a[0]]=a[1]});C(a,f);e.addClass(a,da);if(p.recalculateTimingStyles){ka=l.className+" "+ea;ha=r(l,ka);E=w(l,ka,ha);$=E.maxDelay;n=Math.max($,0);O=E.maxDuration;if(0===O){q();return}p.hasTransitions=0<E.transitionDuration;p.hasAnimations=0<E.animationDuration}p.applyAnimationDelay&&
-($="boolean"!==typeof f.delay&&qa(f.delay)?parseFloat(f.delay):$,n=Math.max($,0),E.animationDelay=$,aa=[na,$+"s"],m.push(aa),l.style[aa[0]]=aa[1]);Q=1E3*n;U=1E3*O;if(f.easing){var d,g=f.easing;p.hasTransitions&&(d=S+"TimingFunction",m.push([d,g]),l.style[d]=g);p.hasAnimations&&(d=Z+"TimingFunction",m.push([d,g]),l.style[d]=g)}E.transitionDuration&&fa.push(ta);E.animationDuration&&fa.push(ua);V=Date.now();var t=Q+1.5*U;d=V+t;var g=a.data("$$animateCss")||[],k=!0;if(g.length){var L=g[0];(k=d>L.expectedEndTime)?
-I.cancel(L.timer):g.push(q)}k&&(t=I(c,t,!1),g[0]={timer:t,expectedEndTime:d},g.push(q),a.data("$$animateCss",g));if(fa.length)a.on(fa.join(" "),D);f.to&&(f.cleanupStyles&&Fa(z,l,Object.keys(f.to)),Aa(a,f))}}function c(){var b=a.data("$$animateCss");if(b){for(var d=1;d<b.length;d++)b[d]();a.removeData("$$animateCss")}}if(!G)if(l.parentNode){var d=function(a){if(F)K&&a&&(K=!1,q());else if(K=!a,E.animationDuration)if(a=pa(l,K),K)m.push(a);else{var b=m,c=b.indexOf(a);0<=a&&b.splice(c,1)}},g=0<ca&&(E.transitionDuration&&
-0===W.transitionDuration||E.animationDuration&&0===W.animationDuration)&&Math.max(W.animationDelay,W.transitionDelay);g?I(b,Math.floor(g*ca*1E3),!1):b();P.resume=function(){d(!0)};P.pause=function(){d(!1)}}else q()}var f=c||{};f.$$prepared||(f=la(Ga(f)));var z={},l=A(a);if(!l||!l.parentNode||!M.enabled())return t();var m=[],H=a.attr("class"),y=Ka(f),G,K,F,B,P,n,Q,O,U,V,fa=[];if(0===f.duration||!J.animations&&!J.transitions)return t();var x=f.event&&ba(f.event)?f.event.join(" "):f.event,Y="",T="";
-x&&f.structural?Y=X(x,"ng-",!0):x&&(Y=x);f.addClass&&(T+=X(f.addClass,"-add"));f.removeClass&&(T.length&&(T+=" "),T+=X(f.removeClass,"-remove"));f.applyClassesEarly&&T.length&&C(a,f);var ea=[Y,T].join(" ").trim(),ka=H+" "+ea,da=X(ea,"-active"),H=y.to&&0<Object.keys(y.to).length;if(!(0<(f.keyframeStyle||"").length||H||ea))return t();var ha,W;0<f.stagger?(y=parseFloat(f.stagger),W={transitionDelay:y,animationDelay:y,transitionDuration:0,animationDuration:0}):(ha=r(l,ka),W=v(l,ea,ha,Sa));f.$$skipPreparationClasses||
-e.addClass(a,ea);f.transitionStyle&&(y=[S,f.transitionStyle],ia(l,y),m.push(y));0<=f.duration&&(y=0<l.style[S].length,y=Da(f.duration,y),ia(l,y),m.push(y));f.keyframeStyle&&(y=[Z,f.keyframeStyle],ia(l,y),m.push(y));var ca=W?0<=f.staggerIndex?f.staggerIndex:b.count(ha):0;(x=0===ca)&&!f.skipBlocking&&ma(l,9999);var E=w(l,ka,ha),$=E.maxDelay;n=Math.max($,0);O=E.maxDuration;var p={};p.hasTransitions=0<E.transitionDuration;p.hasAnimations=0<E.animationDuration;p.hasTransitionAll=p.hasTransitions&&"all"==
-E.transitionProperty;p.applyTransitionDuration=H&&(p.hasTransitions&&!p.hasTransitionAll||p.hasAnimations&&!p.hasTransitions);p.applyAnimationDuration=f.duration&&p.hasAnimations;p.applyTransitionDelay=qa(f.delay)&&(p.applyTransitionDuration||p.hasTransitions);p.applyAnimationDelay=qa(f.delay)&&p.hasAnimations;p.recalculateTimingStyles=0<T.length;if(p.applyTransitionDuration||p.applyAnimationDuration)O=f.duration?parseFloat(f.duration):O,p.applyTransitionDuration&&(p.hasTransitions=!0,E.transitionDuration=
-O,y=0<l.style[S+"Property"].length,m.push(Da(O,y))),p.applyAnimationDuration&&(p.hasAnimations=!0,E.animationDuration=O,m.push([va,O+"s"]));if(0===O&&!p.recalculateTimingStyles)return t();if(null!=f.delay){var aa;"boolean"!==typeof f.delay&&(aa=parseFloat(f.delay),n=Math.max(aa,0));p.applyTransitionDelay&&m.push([ja,aa+"s"]);p.applyAnimationDelay&&m.push([na,aa+"s"])}null==f.duration&&0<E.transitionDuration&&(p.recalculateTimingStyles=p.recalculateTimingStyles||x);Q=1E3*n;U=1E3*O;f.skipBlocking||
-(p.blockTransition=0<E.transitionDuration,p.blockKeyframeAnimation=0<E.animationDuration&&0<W.animationDelay&&0===W.animationDuration);f.from&&(f.cleanupStyles&&Fa(z,l,Object.keys(f.from)),za(a,f));p.blockTransition||p.blockKeyframeAnimation?u(O):f.skipBlocking||ma(l,!1);return{$$willAnimate:!0,end:d,start:function(){if(!G)return P={end:d,cancel:k,resume:null,pause:null},B=new g(P),oa(L),B}}}}]}]).provider("$$animateCssDriver",["$$animationProvider",function(a){a.drivers.push("$$animateCssDriver");
-this.$get=["$animateCss","$rootScope","$$AnimateRunner","$rootElement","$sniffer","$$jqLite","$document",function(a,c,d,e,g,I,G){function J(a){return a.replace(/\bng-\S+\b/g,"")}function m(a,b){Q(a)&&(a=a.split(" "));Q(b)&&(b=b.split(" "));return a.filter(function(a){return-1===b.indexOf(a)}).join(" ")}function M(c,e,g){function h(a){var b={},c=A(a).getBoundingClientRect();s(["width","height","top","left"],function(a){var d=c[a];switch(a){case "top":d+=B.scrollTop;break;case "left":d+=B.scrollLeft}b[a]=
-Math.floor(d)+"px"});return b}function G(){var c=J(g.attr("class")||""),d=m(c,q),c=m(q,c),d=a(k,{to:h(g),addClass:"ng-anchor-in "+d,removeClass:"ng-anchor-out "+c,delay:!0});return d.$$willAnimate?d:null}function I(){k.remove();e.removeClass("ng-animate-shim");g.removeClass("ng-animate-shim")}var k=F(A(e).cloneNode(!0)),q=J(k.attr("class")||"");e.addClass("ng-animate-shim");g.addClass("ng-animate-shim");k.addClass("ng-anchor");w.append(k);var u;c=function(){var c=a(k,{addClass:"ng-anchor-out",delay:!0,
-from:h(e)});return c.$$willAnimate?c:null}();if(!c&&(u=G(),!u))return I();var t=c||u;return{start:function(){function a(){c&&c.end()}var b,c=t.start();c.done(function(){c=null;if(!u&&(u=G()))return c=u.start(),c.done(function(){c=null;I();b.complete()}),c;I();b.complete()});return b=new d({end:a,cancel:a})}}}function r(a,b,c,e){var g=v(a,R),m=v(b,R),k=[];s(e,function(a){(a=M(c,a.out,a["in"]))&&k.push(a)});if(g||m||0!==k.length)return{start:function(){function a(){s(b,function(a){a.end()})}var b=[];
-g&&b.push(g.start());m&&b.push(m.start());s(k,function(a){b.push(a.start())});var c=new d({end:a,cancel:a});d.all(b,function(a){c.complete(a)});return c}}}function v(c){var d=c.element,e=c.options||{};c.structural&&(e.event=c.event,e.structural=!0,e.applyClassesEarly=!0,"leave"===c.event&&(e.onDone=e.domOperation));e.preparationClasses&&(e.event=Y(e.event,e.preparationClasses));c=a(d,e);return c.$$willAnimate?c:null}if(!g.animations&&!g.transitions)return R;var B=G[0].body;c=A(e);var w=F(c.parentNode&&
-11===c.parentNode.nodeType||B.contains(c)?c:B);U(I);return function(a){return a.from&&a.to?r(a.from,a.to,a.classes,a.anchors):v(a)}}]}]).provider("$$animateJs",["$animateProvider",function(a){this.$get=["$injector","$$AnimateRunner","$$jqLite",function(b,c,d){function e(c){c=ba(c)?c:c.split(" ");for(var d=[],e={},g=0;g<c.length;g++){var s=c[g],r=a.$$registeredAnimations[s];r&&!e[s]&&(d.push(b.get(r)),e[s]=!0)}return d}var g=U(d);return function(a,b,d,m){function r(){m.domOperation();g(a,m)}function B(a,
-b,d,e,f){switch(d){case "animate":b=[b,e.from,e.to,f];break;case "setClass":b=[b,C,K,f];break;case "addClass":b=[b,C,f];break;case "removeClass":b=[b,K,f];break;default:b=[b,f]}b.push(e);if(a=a.apply(a,b))if(Ha(a.start)&&(a=a.start()),a instanceof c)a.done(f);else if(Ha(a))return a;return R}function v(a,b,d,e,f){var g=[];s(e,function(e){var h=e[f];h&&g.push(function(){var e,f,g=!1,l=function(a){g||(g=!0,(f||R)(a),e.complete(!a))};e=new c({end:function(){l()},cancel:function(){l(!0)}});f=B(h,a,b,d,
-function(a){l(!1===a)});return e})});return g}function A(a,b,d,e,f){var g=v(a,b,d,e,f);if(0===g.length){var h,k;"beforeSetClass"===f?(h=v(a,"removeClass",d,e,"beforeRemoveClass"),k=v(a,"addClass",d,e,"beforeAddClass")):"setClass"===f&&(h=v(a,"removeClass",d,e,"removeClass"),k=v(a,"addClass",d,e,"addClass"));h&&(g=g.concat(h));k&&(g=g.concat(k))}if(0!==g.length)return function(a){var b=[];g.length&&s(g,function(a){b.push(a())});b.length?c.all(b,a):a();return function(a){s(b,function(b){a?b.cancel():
-b.end()})}}}var w=!1;3===arguments.length&&ra(d)&&(m=d,d=null);m=la(m);d||(d=a.attr("class")||"",m.addClass&&(d+=" "+m.addClass),m.removeClass&&(d+=" "+m.removeClass));var C=m.addClass,K=m.removeClass,H=e(d),h,F;if(H.length){var N,k;"leave"==b?(k="leave",N="afterLeave"):(k="before"+b.charAt(0).toUpperCase()+b.substr(1),N=b);"enter"!==b&&"move"!==b&&(h=A(a,b,m,H,k));F=A(a,b,m,H,N)}if(h||F){var q;return{$$willAnimate:!0,end:function(){q?q.end():(w=!0,r(),ga(a,m),q=new c,q.complete(!0));return q},start:function(){function b(c){w=
-!0;r();ga(a,m);q.complete(c)}if(q)return q;q=new c;var d,e=[];h&&e.push(function(a){d=h(a)});e.length?e.push(function(a){r();a(!0)}):r();F&&e.push(function(a){d=F(a)});q.setHost({end:function(){w||((d||R)(void 0),b(void 0))},cancel:function(){w||((d||R)(!0),b(!0))}});c.chain(e,b);return q}}}}}]}]).provider("$$animateJsDriver",["$$animationProvider",function(a){a.drivers.push("$$animateJsDriver");this.$get=["$$animateJs","$$AnimateRunner",function(a,c){function d(c){return a(c.element,c.event,c.classes,
-c.options)}return function(a){if(a.from&&a.to){var b=d(a.from),r=d(a.to);if(b||r)return{start:function(){function a(){return function(){s(d,function(a){a.end()})}}var d=[];b&&d.push(b.start());r&&d.push(r.start());c.all(d,function(a){e.complete(a)});var e=new c({end:a(),cancel:a()});return e}}}else return d(a)}}]}])})(window,window.angular);
+(function(S,q){'use strict';function Ea(a,b,c){if(!a)throw Pa("areq",b||"?",c||"required");return a}function Fa(a,b){if(!a&&!b)return"";if(!a)return b;if(!b)return a;V(a)&&(a=a.join(" "));V(b)&&(b=b.join(" "));return a+" "+b}function Qa(a){var b={};a&&(a.to||a.from)&&(b.to=a.to,b.from=a.from);return b}function W(a,b,c){var d="";a=V(a)?a:a&&C(a)&&a.length?a.split(/\s+/):[];t(a,function(a,f){a&&0<a.length&&(d+=0<f?" ":"",d+=c?b+a:a+b)});return d}function Ga(a){if(a instanceof A)switch(a.length){case 0:return a;
+case 1:if(1===a[0].nodeType)return a;break;default:return A(ua(a))}if(1===a.nodeType)return A(a)}function ua(a){if(!a[0])return a;for(var b=0;b<a.length;b++){var c=a[b];if(1===c.nodeType)return c}}function Ra(a,b,c){t(b,function(b){a.addClass(b,c)})}function Sa(a,b,c){t(b,function(b){a.removeClass(b,c)})}function X(a){return function(b,c){c.addClass&&(Ra(a,b,c.addClass),c.addClass=null);c.removeClass&&(Sa(a,b,c.removeClass),c.removeClass=null)}}function oa(a){a=a||{};if(!a.$$prepared){var b=a.domOperation||
+O;a.domOperation=function(){a.$$domOperationFired=!0;b();b=O};a.$$prepared=!0}return a}function ha(a,b){Ha(a,b);Ia(a,b)}function Ha(a,b){b.from&&(a.css(b.from),b.from=null)}function Ia(a,b){b.to&&(a.css(b.to),b.to=null)}function T(a,b,c){var d=b.options||{};c=c.options||{};var e=(d.addClass||"")+" "+(c.addClass||""),f=(d.removeClass||"")+" "+(c.removeClass||"");a=Ta(a.attr("class"),e,f);c.preparationClasses&&(d.preparationClasses=ca(c.preparationClasses,d.preparationClasses),delete c.preparationClasses);
+e=d.domOperation!==O?d.domOperation:null;va(d,c);e&&(d.domOperation=e);d.addClass=a.addClass?a.addClass:null;d.removeClass=a.removeClass?a.removeClass:null;b.addClass=d.addClass;b.removeClass=d.removeClass;return d}function Ta(a,b,c){function d(a){C(a)&&(a=a.split(" "));var b={};t(a,function(a){a.length&&(b[a]=!0)});return b}var e={};a=d(a);b=d(b);t(b,function(a,b){e[b]=1});c=d(c);t(c,function(a,b){e[b]=1===e[b]?null:-1});var f={addClass:"",removeClass:""};t(e,function(b,c){var d,e;1===b?(d="addClass",
+e=!a[c]||a[c+"-remove"]):-1===b&&(d="removeClass",e=a[c]||a[c+"-add"]);e&&(f[d].length&&(f[d]+=" "),f[d]+=c)});return f}function J(a){return a instanceof A?a[0]:a}function Ua(a,b,c){var d="";b&&(d=W(b,"ng-",!0));c.addClass&&(d=ca(d,W(c.addClass,"-add")));c.removeClass&&(d=ca(d,W(c.removeClass,"-remove")));d.length&&(c.preparationClasses=d,a.addClass(d))}function pa(a,b){var c=b?"-"+b+"s":"";ka(a,[la,c]);return[la,c]}function wa(a,b){var c=b?"paused":"",d=Y+"PlayState";ka(a,[d,c]);return[d,c]}function ka(a,
+b){a.style[b[0]]=b[1]}function ca(a,b){return a?b?a+" "+b:a:b}function Ja(a,b,c){var d=Object.create(null),e=a.getComputedStyle(b)||{};t(c,function(a,b){var c=e[a];if(c){var l=c.charAt(0);if("-"===l||"+"===l||0<=l)c=Va(c);0===c&&(c=null);d[b]=c}});return d}function Va(a){var b=0;a=a.split(/\s*,\s*/);t(a,function(a){"s"===a.charAt(a.length-1)&&(a=a.substring(0,a.length-1));a=parseFloat(a)||0;b=b?Math.max(a,b):a});return b}function xa(a){return 0===a||null!=a}function Ka(a,b){var c=Q,d=a+"s";b?c+="Duration":
+d+=" linear all";return[c,d]}function La(){var a=Object.create(null);return{flush:function(){a=Object.create(null)},count:function(b){return(b=a[b])?b.total:0},get:function(b){return(b=a[b])&&b.value},put:function(b,c){a[b]?a[b].total++:a[b]={total:1,value:c}}}}function Ma(a,b,c){t(c,function(c){a[c]=ya(a[c])?a[c]:b.style.getPropertyValue(c)})}var Q,za,Y,Aa;void 0===S.ontransitionend&&void 0!==S.onwebkittransitionend?(Q="WebkitTransition",za="webkitTransitionEnd transitionend"):(Q="transition",za=
+"transitionend");void 0===S.onanimationend&&void 0!==S.onwebkitanimationend?(Y="WebkitAnimation",Aa="webkitAnimationEnd animationend"):(Y="animation",Aa="animationend");var qa=Y+"Delay",Ba=Y+"Duration",la=Q+"Delay",Na=Q+"Duration",Pa=q.$$minErr("ng"),Wa={transitionDuration:Na,transitionDelay:la,transitionProperty:Q+"Property",animationDuration:Ba,animationDelay:qa,animationIterationCount:Y+"IterationCount"},Xa={transitionDuration:Na,transitionDelay:la,animationDuration:Ba,animationDelay:qa},Ca,va,
+t,V,ya,Z,Da,ra,C,P,A,O;q.module("ngAnimate",[],function(){O=q.noop;Ca=q.copy;va=q.extend;A=q.element;t=q.forEach;V=q.isArray;C=q.isString;ra=q.isObject;P=q.isUndefined;ya=q.isDefined;Da=q.isFunction;Z=q.isElement}).info({angularVersion:"1.6.5"}).directive("ngAnimateSwap",["$animate","$rootScope",function(a,b){return{restrict:"A",transclude:"element",terminal:!0,priority:600,link:function(b,d,e,f,n){var G,l;b.$watchCollection(e.ngAnimateSwap||e["for"],function(e){G&&a.leave(G);l&&(l.$destroy(),l=null);
+if(e||0===e)l=b.$new(),n(l,function(b){G=b;a.enter(b,null,d)})})}}}]).directive("ngAnimateChildren",["$interpolate",function(a){return{link:function(b,c,d){function e(a){c.data("$$ngAnimateChildren","on"===a||"true"===a)}var f=d.ngAnimateChildren;C(f)&&0===f.length?c.data("$$ngAnimateChildren",!0):(e(a(f)(b)),d.$observe("ngAnimateChildren",e))}}}]).factory("$$rAFScheduler",["$$rAF",function(a){function b(a){d=d.concat(a);c()}function c(){if(d.length){for(var b=d.shift(),n=0;n<b.length;n++)b[n]();
+e||a(function(){e||c()})}}var d,e;d=b.queue=[];b.waitUntilQuiet=function(b){e&&e();e=a(function(){e=null;b();c()})};return b}]).provider("$$animateQueue",["$animateProvider",function(a){function b(a){if(!a)return null;a=a.split(" ");var b=Object.create(null);t(a,function(a){b[a]=!0});return b}function c(a,c){if(a&&c){var d=b(c);return a.split(" ").some(function(a){return d[a]})}}function d(a,b,c){return f[a].some(function(a){return a(b,c)})}function e(a,b){var c=0<(a.addClass||"").length,d=0<(a.removeClass||
+"").length;return b?c&&d:c||d}var f=this.rules={skip:[],cancel:[],join:[]};f.join.push(function(a,b){return!a.structural&&e(a)});f.skip.push(function(a,b){return!a.structural&&!e(a)});f.skip.push(function(a,b){return"leave"===b.event&&a.structural});f.skip.push(function(a,b){return b.structural&&2===b.state&&!a.structural});f.cancel.push(function(a,b){return b.structural&&a.structural});f.cancel.push(function(a,b){return 2===b.state&&a.structural});f.cancel.push(function(a,b){if(b.structural)return!1;
+var d=a.addClass,e=a.removeClass,f=b.addClass,sa=b.removeClass;return P(d)&&P(e)||P(f)&&P(sa)?!1:c(d,sa)||c(e,f)});this.$get=["$$rAF","$rootScope","$rootElement","$document","$$Map","$$animation","$$AnimateRunner","$templateRequest","$$jqLite","$$forceReflow","$$isDocumentHidden",function(b,c,f,s,y,sa,da,v,E,g,M){function x(){var a=!1;return function(b){a?b():c.$$postDigest(function(){a=!0;b()})}}function H(a,b,c){var h=[],d=k[c];d&&t(d,function(d){u.call(d.node,b)?h.push(d.callback):"leave"===c&&
+u.call(d.node,a)&&h.push(d.callback)});return h}function I(a,b,c){var h=ua(b);return a.filter(function(a){return!(a.node===h&&(!c||a.callback===c))})}function K(a,k,w){function K(a,c,h,k){s(function(){var a=H(na,p,c);a.length?b(function(){t(a,function(a){a(f,h,k)});"close"!==h||p.parentNode||ba.off(p)}):"close"!==h||p.parentNode||ba.off(p)});a.progress(c,h,k)}function I(a){var b=f,c=g;c.preparationClasses&&(b.removeClass(c.preparationClasses),c.preparationClasses=null);c.activeClasses&&(b.removeClass(c.activeClasses),
+c.activeClasses=null);Oa(f,g);ha(f,g);g.domOperation();l.complete(!a)}var g=Ca(w),f=Ga(a),p=J(f),na=p&&p.parentNode,g=oa(g),l=new da,s=x();V(g.addClass)&&(g.addClass=g.addClass.join(" "));g.addClass&&!C(g.addClass)&&(g.addClass=null);V(g.removeClass)&&(g.removeClass=g.removeClass.join(" "));g.removeClass&&!C(g.removeClass)&&(g.removeClass=null);g.from&&!ra(g.from)&&(g.from=null);g.to&&!ra(g.to)&&(g.to=null);if(!(h&&p&&Ya(p,k,w)&&D(p,g)))return I(),l;var v=0<=["enter","move","leave"].indexOf(k),u=
+M(),y=u||ga.get(p);w=!y&&z.get(p)||{};var E=!!w.state;y||E&&1===w.state||(y=!L(p,na,k));if(y)return u&&K(l,k,"start"),I(),u&&K(l,k,"close"),l;v&&ta(p);u={structural:v,element:f,event:k,addClass:g.addClass,removeClass:g.removeClass,close:I,options:g,runner:l};if(E){if(d("skip",u,w)){if(2===w.state)return I(),l;T(f,w,u);return w.runner}if(d("cancel",u,w))if(2===w.state)w.runner.end();else if(w.structural)w.close();else return T(f,w,u),w.runner;else if(d("join",u,w))if(2===w.state)T(f,u,{});else return Ua(f,
+v?k:null,g),k=u.event=w.event,g=T(f,w,u),w.runner}else T(f,u,{});(E=u.structural)||(E="animate"===u.event&&0<Object.keys(u.options.to||{}).length||e(u));if(!E)return I(),m(p),l;var q=(w.counter||0)+1;u.counter=q;F(p,1,u);c.$$postDigest(function(){f=Ga(a);var b=z.get(p),c=!b,b=b||{},h=0<(f.parent()||[]).length&&("animate"===b.event||b.structural||e(b));if(c||b.counter!==q||!h){c&&(Oa(f,g),ha(f,g));if(c||v&&b.event!==k)g.domOperation(),l.end();h||m(p)}else k=!b.structural&&e(b,!0)?"setClass":b.event,
+F(p,2),b=sa(f,k,b.options),l.setHost(b),K(l,k,"start",{}),b.done(function(a){I(!a);(a=z.get(p))&&a.counter===q&&m(p);K(l,k,"close",{})})});return l}function ta(a){a=a.querySelectorAll("[data-ng-animate]");t(a,function(a){var b=parseInt(a.getAttribute("data-ng-animate"),10),c=z.get(a);if(c)switch(b){case 2:c.runner.end();case 1:z.delete(a)}})}function m(a){a.removeAttribute("data-ng-animate");z.delete(a)}function L(a,b,c){c=s[0].body;var h=J(f),k=a===c||"HTML"===a.nodeName,d=a===h,g=!1,e=ga.get(a),
+p;for((a=A.data(a,"$ngAnimatePin"))&&(b=J(a));b;){d||(d=b===h);if(1!==b.nodeType)break;a=z.get(b)||{};if(!g){var H=ga.get(b);if(!0===H&&!1!==e){e=!0;break}else!1===H&&(e=!1);g=a.structural}if(P(p)||!0===p)a=A.data(b,"$$ngAnimateChildren"),ya(a)&&(p=a);if(g&&!1===p)break;k||(k=b===c);if(k&&d)break;if(!d&&(a=A.data(b,"$ngAnimatePin"))){b=J(a);continue}b=b.parentNode}return(!g||p)&&!0!==e&&d&&k}function F(a,b,c){c=c||{};c.state=b;a.setAttribute("data-ng-animate",b);c=(b=z.get(a))?va(b,c):c;z.set(a,c)}
+var z=new y,ga=new y,h=null,p=c.$watch(function(){return 0===v.totalPendingRequests},function(a){a&&(p(),c.$$postDigest(function(){c.$$postDigest(function(){null===h&&(h=!0)})}))}),k=Object.create(null);y=a.customFilter();var na=a.classNameFilter();g=function(){return!0};var Ya=y||g,D=na?function(a,b){var c=[a.getAttribute("class"),b.addClass,b.removeClass].join(" ");return na.test(c)}:g,Oa=X(E),u=S.Node.prototype.contains||function(a){return this===a||!!(this.compareDocumentPosition(a)&16)},ba={on:function(a,
+b,c){var h=ua(b);k[a]=k[a]||[];k[a].push({node:h,callback:c});A(b).on("$destroy",function(){z.get(h)||ba.off(a,b,c)})},off:function(a,b,c){if(1!==arguments.length||C(arguments[0])){var h=k[a];h&&(k[a]=1===arguments.length?null:I(h,b,c))}else for(h in b=arguments[0],k)k[h]=I(k[h],b)},pin:function(a,b){Ea(Z(a),"element","not an element");Ea(Z(b),"parentElement","not an element");a.data("$ngAnimatePin",b)},push:function(a,b,c,h){c=c||{};c.domOperation=h;return K(a,b,c)},enabled:function(a,b){var c=arguments.length;
+if(0===c)b=!!h;else if(Z(a)){var k=J(a);1===c?b=!ga.get(k):ga.set(k,!b)}else b=h=!!a;return b}};return ba}]}]).provider("$$animation",["$animateProvider",function(a){var b=this.drivers=[];this.$get=["$$jqLite","$rootScope","$injector","$$AnimateRunner","$$Map","$$rAFScheduler",function(a,d,e,f,n,G){function l(a){function b(a){if(a.processed)return a;a.processed=!0;var d=a.domNode,e=d.parentNode;g.set(d,a);for(var f;e;){if(f=g.get(e)){f.processed||(f=b(f));break}e=e.parentNode}(f||c).children.push(a);
+return a}var c={children:[]},d,g=new n;for(d=0;d<a.length;d++){var e=a[d];g.set(e.domNode,a[d]={domNode:e.domNode,fn:e.fn,children:[]})}for(d=0;d<a.length;d++)b(a[d]);return function(a){var b=[],c=[],d;for(d=0;d<a.children.length;d++)c.push(a.children[d]);a=c.length;var g=0,e=[];for(d=0;d<c.length;d++){var f=c[d];0>=a&&(a=g,g=0,b.push(e),e=[]);e.push(f.fn);f.children.forEach(function(a){g++;c.push(a)});a--}e.length&&b.push(e);return b}(c)}var s=[],y=X(a);return function(n,q,v){function E(a){a=a.hasAttribute("ng-animate-ref")?
+[a]:a.querySelectorAll("[ng-animate-ref]");var b=[];t(a,function(a){var c=a.getAttribute("ng-animate-ref");c&&c.length&&b.push(a)});return b}function g(a){var b=[],c={};t(a,function(a,d){var k=J(a.element),g=0<=["enter","move"].indexOf(a.event),k=a.structural?E(k):[];if(k.length){var e=g?"to":"from";t(k,function(a){var b=a.getAttribute("ng-animate-ref");c[b]=c[b]||{};c[b][e]={animationID:d,element:A(a)}})}else b.push(a)});var d={},g={};t(c,function(c,e){var f=c.from,p=c.to;if(f&&p){var H=a[f.animationID],
+z=a[p.animationID],m=f.animationID.toString();if(!g[m]){var l=g[m]={structural:!0,beforeStart:function(){H.beforeStart();z.beforeStart()},close:function(){H.close();z.close()},classes:M(H.classes,z.classes),from:H,to:z,anchors:[]};l.classes.length?b.push(l):(b.push(H),b.push(z))}g[m].anchors.push({out:f.element,"in":p.element})}else f=f?f.animationID:p.animationID,p=f.toString(),d[p]||(d[p]=!0,b.push(a[f]))});return b}function M(a,b){a=a.split(" ");b=b.split(" ");for(var c=[],d=0;d<a.length;d++){var g=
+a[d];if("ng-"!==g.substring(0,3))for(var e=0;e<b.length;e++)if(g===b[e]){c.push(g);break}}return c.join(" ")}function x(a){for(var c=b.length-1;0<=c;c--){var d=e.get(b[c])(a);if(d)return d}}function H(a,b){function c(a){(a=a.data("$$animationRunner"))&&a.setHost(b)}a.from&&a.to?(c(a.from.element),c(a.to.element)):c(a.element)}function I(){var a=n.data("$$animationRunner");!a||"leave"===q&&v.$$domOperationFired||a.end()}function K(b){n.off("$destroy",I);n.removeData("$$animationRunner");y(n,v);ha(n,
+v);v.domOperation();F&&a.removeClass(n,F);n.removeClass("ng-animate");m.complete(!b)}v=oa(v);var ta=0<=["enter","move","leave"].indexOf(q),m=new f({end:function(){K()},cancel:function(){K(!0)}});if(!b.length)return K(),m;n.data("$$animationRunner",m);var L=Fa(n.attr("class"),Fa(v.addClass,v.removeClass)),F=v.tempClasses;F&&(L+=" "+F,v.tempClasses=null);var z;ta&&(z="ng-"+q+"-prepare",a.addClass(n,z));s.push({element:n,classes:L,event:q,structural:ta,options:v,beforeStart:function(){n.addClass("ng-animate");
+F&&a.addClass(n,F);z&&(a.removeClass(n,z),z=null)},close:K});n.on("$destroy",I);if(1<s.length)return m;d.$$postDigest(function(){var a=[];t(s,function(b){b.element.data("$$animationRunner")?a.push(b):b.close()});s.length=0;var b=g(a),c=[];t(b,function(a){c.push({domNode:J(a.from?a.from.element:a.element),fn:function(){a.beforeStart();var b,c=a.close;if((a.anchors?a.from.element||a.to.element:a.element).data("$$animationRunner")){var d=x(a);d&&(b=d.start)}b?(b=b(),b.done(function(a){c(!a)}),H(a,b)):
+c()}})});G(l(c))});return m}}]}]).provider("$animateCss",["$animateProvider",function(a){var b=La(),c=La();this.$get=["$window","$$jqLite","$$AnimateRunner","$timeout","$$forceReflow","$sniffer","$$rAFScheduler","$$animateQueue",function(a,e,f,n,G,l,s,y){function q(a,b){var c=a.parentNode;return(c.$$ngAnimateParentKey||(c.$$ngAnimateParentKey=++M))+"-"+a.getAttribute("class")+"-"+b}function da(g,f,l,n){var m;0<b.count(l)&&(m=c.get(l),m||(f=W(f,"-stagger"),e.addClass(g,f),m=Ja(a,g,n),m.animationDuration=
+Math.max(m.animationDuration,0),m.transitionDuration=Math.max(m.transitionDuration,0),e.removeClass(g,f),c.put(l,m)));return m||{}}function v(a){x.push(a);s.waitUntilQuiet(function(){b.flush();c.flush();for(var a=G(),d=0;d<x.length;d++)x[d](a);x.length=0})}function E(c,g,e){g=b.get(e);g||(g=Ja(a,c,Wa),"infinite"===g.animationIterationCount&&(g.animationIterationCount=1));b.put(e,g);c=g;e=c.animationDelay;g=c.transitionDelay;c.maxDelay=e&&g?Math.max(e,g):e||g;c.maxDuration=Math.max(c.animationDuration*
+c.animationIterationCount,c.transitionDuration);return c}var g=X(e),M=0,x=[];return function(a,c){function d(){m()}function s(){m(!0)}function m(b){if(!(M||ba&&u)){M=!0;u=!1;h.$$skipPreparationClasses||e.removeClass(a,fa);e.removeClass(a,ca);wa(k,!1);pa(k,!1);t(x,function(a){k.style[a[0]]=""});g(a,h);ha(a,h);Object.keys(p).length&&t(p,function(a,b){a?k.style.setProperty(b,a):k.style.removeProperty(b)});if(h.onDone)h.onDone();ea&&ea.length&&a.off(ea.join(" "),z);var c=a.data("$$animateCss");c&&(n.cancel(c[0].timer),
+a.removeData("$$animateCss"));A&&A.complete(!b)}}function L(a){r.blockTransition&&pa(k,a);r.blockKeyframeAnimation&&wa(k,!!a)}function F(){A=new f({end:d,cancel:s});v(O);m();return{$$willAnimate:!1,start:function(){return A},end:d}}function z(a){a.stopPropagation();var b=a.originalEvent||a;a=b.$manualTimeStamp||Date.now();b=parseFloat(b.elapsedTime.toFixed(3));Math.max(a-T,0)>=P&&b>=N&&(ba=!0,m())}function ga(){function b(){if(!M){L(!1);t(x,function(a){k.style[a[0]]=a[1]});g(a,h);e.addClass(a,ca);
+if(r.recalculateTimingStyles){ma=k.getAttribute("class")+" "+fa;ja=q(k,ma);B=E(k,ma,ja);$=B.maxDelay;w=Math.max($,0);N=B.maxDuration;if(0===N){m();return}r.hasTransitions=0<B.transitionDuration;r.hasAnimations=0<B.animationDuration}r.applyAnimationDelay&&($="boolean"!==typeof h.delay&&xa(h.delay)?parseFloat(h.delay):$,w=Math.max($,0),B.animationDelay=$,aa=[qa,$+"s"],x.push(aa),k.style[aa[0]]=aa[1]);P=1E3*w;S=1E3*N;if(h.easing){var d,f=h.easing;r.hasTransitions&&(d=Q+"TimingFunction",x.push([d,f]),
+k.style[d]=f);r.hasAnimations&&(d=Y+"TimingFunction",x.push([d,f]),k.style[d]=f)}B.transitionDuration&&ea.push(za);B.animationDuration&&ea.push(Aa);T=Date.now();var l=P+1.5*S;d=T+l;var f=a.data("$$animateCss")||[],F=!0;if(f.length){var s=f[0];(F=d>s.expectedEndTime)?n.cancel(s.timer):f.push(m)}F&&(l=n(c,l,!1),f[0]={timer:l,expectedEndTime:d},f.push(m),a.data("$$animateCss",f));if(ea.length)a.on(ea.join(" "),z);h.to&&(h.cleanupStyles&&Ma(p,k,Object.keys(h.to)),Ia(a,h))}}function c(){var b=a.data("$$animateCss");
+if(b){for(var d=1;d<b.length;d++)b[d]();a.removeData("$$animateCss")}}if(!M)if(k.parentNode){var d=function(a){if(ba)u&&a&&(u=!1,m());else if(u=!a,B.animationDuration)if(a=wa(k,u),u)x.push(a);else{var b=x,c=b.indexOf(a);0<=a&&b.splice(c,1)}},f=0<Z&&(B.transitionDuration&&0===U.transitionDuration||B.animationDuration&&0===U.animationDuration)&&Math.max(U.animationDelay,U.transitionDelay);f?n(b,Math.floor(f*Z*1E3),!1):b();C.resume=function(){d(!0)};C.pause=function(){d(!1)}}else m()}var h=c||{};h.$$prepared||
+(h=oa(Ca(h)));var p={},k=J(a);if(!k||!k.parentNode||!y.enabled())return F();var x=[],G=a.attr("class"),D=Qa(h),M,u,ba,A,C,w,P,N,S,T,ea=[];if(0===h.duration||!l.animations&&!l.transitions)return F();var ia=h.event&&V(h.event)?h.event.join(" "):h.event,X="",R="";ia&&h.structural?X=W(ia,"ng-",!0):ia&&(X=ia);h.addClass&&(R+=W(h.addClass,"-add"));h.removeClass&&(R.length&&(R+=" "),R+=W(h.removeClass,"-remove"));h.applyClassesEarly&&R.length&&g(a,h);var fa=[X,R].join(" ").trim(),ma=G+" "+fa,ca=W(fa,"-active"),
+G=D.to&&0<Object.keys(D.to).length;if(!(0<(h.keyframeStyle||"").length||G||fa))return F();var ja,U;0<h.stagger?(D=parseFloat(h.stagger),U={transitionDelay:D,animationDelay:D,transitionDuration:0,animationDuration:0}):(ja=q(k,ma),U=da(k,fa,ja,Xa));h.$$skipPreparationClasses||e.addClass(a,fa);h.transitionStyle&&(D=[Q,h.transitionStyle],ka(k,D),x.push(D));0<=h.duration&&(D=0<k.style[Q].length,D=Ka(h.duration,D),ka(k,D),x.push(D));h.keyframeStyle&&(D=[Y,h.keyframeStyle],ka(k,D),x.push(D));var Z=U?0<=
+h.staggerIndex?h.staggerIndex:b.count(ja):0;(ia=0===Z)&&!h.skipBlocking&&pa(k,9999);var B=E(k,ma,ja),$=B.maxDelay;w=Math.max($,0);N=B.maxDuration;var r={};r.hasTransitions=0<B.transitionDuration;r.hasAnimations=0<B.animationDuration;r.hasTransitionAll=r.hasTransitions&&"all"===B.transitionProperty;r.applyTransitionDuration=G&&(r.hasTransitions&&!r.hasTransitionAll||r.hasAnimations&&!r.hasTransitions);r.applyAnimationDuration=h.duration&&r.hasAnimations;r.applyTransitionDelay=xa(h.delay)&&(r.applyTransitionDuration||
+r.hasTransitions);r.applyAnimationDelay=xa(h.delay)&&r.hasAnimations;r.recalculateTimingStyles=0<R.length;if(r.applyTransitionDuration||r.applyAnimationDuration)N=h.duration?parseFloat(h.duration):N,r.applyTransitionDuration&&(r.hasTransitions=!0,B.transitionDuration=N,D=0<k.style[Q+"Property"].length,x.push(Ka(N,D))),r.applyAnimationDuration&&(r.hasAnimations=!0,B.animationDuration=N,x.push([Ba,N+"s"]));if(0===N&&!r.recalculateTimingStyles)return F();if(null!=h.delay){var aa;"boolean"!==typeof h.delay&&
+(aa=parseFloat(h.delay),w=Math.max(aa,0));r.applyTransitionDelay&&x.push([la,aa+"s"]);r.applyAnimationDelay&&x.push([qa,aa+"s"])}null==h.duration&&0<B.transitionDuration&&(r.recalculateTimingStyles=r.recalculateTimingStyles||ia);P=1E3*w;S=1E3*N;h.skipBlocking||(r.blockTransition=0<B.transitionDuration,r.blockKeyframeAnimation=0<B.animationDuration&&0<U.animationDelay&&0===U.animationDuration);h.from&&(h.cleanupStyles&&Ma(p,k,Object.keys(h.from)),Ha(a,h));r.blockTransition||r.blockKeyframeAnimation?
+L(N):h.skipBlocking||pa(k,!1);return{$$willAnimate:!0,end:d,start:function(){if(!M)return C={end:d,cancel:s,resume:null,pause:null},A=new f(C),v(ga),A}}}}]}]).provider("$$animateCssDriver",["$$animationProvider",function(a){a.drivers.push("$$animateCssDriver");this.$get=["$animateCss","$rootScope","$$AnimateRunner","$rootElement","$sniffer","$$jqLite","$document",function(a,c,d,e,f,n,G){function l(a){return a.replace(/\bng-\S+\b/g,"")}function s(a,b){C(a)&&(a=a.split(" "));C(b)&&(b=b.split(" "));
+return a.filter(function(a){return-1===b.indexOf(a)}).join(" ")}function y(c,f,e){function n(a){var b={},c=J(a).getBoundingClientRect();t(["width","height","top","left"],function(a){var d=c[a];switch(a){case "top":d+=v.scrollTop;break;case "left":d+=v.scrollLeft}b[a]=Math.floor(d)+"px"});return b}function G(){var c=l(e.attr("class")||""),d=s(c,m),c=s(m,c),d=a(y,{to:n(e),addClass:"ng-anchor-in "+d,removeClass:"ng-anchor-out "+c,delay:!0});return d.$$willAnimate?d:null}function q(){y.remove();f.removeClass("ng-animate-shim");
+e.removeClass("ng-animate-shim")}var y=A(J(f).cloneNode(!0)),m=l(y.attr("class")||"");f.addClass("ng-animate-shim");e.addClass("ng-animate-shim");y.addClass("ng-anchor");E.append(y);var L;c=function(){var c=a(y,{addClass:"ng-anchor-out",delay:!0,from:n(f)});return c.$$willAnimate?c:null}();if(!c&&(L=G(),!L))return q();var F=c||L;return{start:function(){function a(){c&&c.end()}var b,c=F.start();c.done(function(){c=null;if(!L&&(L=G()))return c=L.start(),c.done(function(){c=null;q();b.complete()}),c;
+q();b.complete()});return b=new d({end:a,cancel:a})}}}function q(a,b,c,f){var e=da(a,O),l=da(b,O),n=[];t(f,function(a){(a=y(c,a.out,a["in"]))&&n.push(a)});if(e||l||0!==n.length)return{start:function(){function a(){t(b,function(a){a.end()})}var b=[];e&&b.push(e.start());l&&b.push(l.start());t(n,function(a){b.push(a.start())});var c=new d({end:a,cancel:a});d.all(b,function(a){c.complete(a)});return c}}}function da(c){var d=c.element,e=c.options||{};c.structural&&(e.event=c.event,e.structural=!0,e.applyClassesEarly=
+!0,"leave"===c.event&&(e.onDone=e.domOperation));e.preparationClasses&&(e.event=ca(e.event,e.preparationClasses));c=a(d,e);return c.$$willAnimate?c:null}if(!f.animations&&!f.transitions)return O;var v=G[0].body;c=J(e);var E=A(c.parentNode&&11===c.parentNode.nodeType||v.contains(c)?c:v);return function(a){return a.from&&a.to?q(a.from,a.to,a.classes,a.anchors):da(a)}}]}]).provider("$$animateJs",["$animateProvider",function(a){this.$get=["$injector","$$AnimateRunner","$$jqLite",function(b,c,d){function e(c){c=
+V(c)?c:c.split(" ");for(var d=[],e={},f=0;f<c.length;f++){var y=c[f],q=a.$$registeredAnimations[y];q&&!e[y]&&(d.push(b.get(q)),e[y]=!0)}return d}var f=X(d);return function(a,b,d,s){function q(){s.domOperation();f(a,s)}function A(a,b,d,e,f){switch(d){case "animate":b=[b,e.from,e.to,f];break;case "setClass":b=[b,g,M,f];break;case "addClass":b=[b,g,f];break;case "removeClass":b=[b,M,f];break;default:b=[b,f]}b.push(e);if(a=a.apply(a,b))if(Da(a.start)&&(a=a.start()),a instanceof c)a.done(f);else if(Da(a))return a;
+return O}function C(a,b,d,e,f){var g=[];t(e,function(e){var l=e[f];l&&g.push(function(){var e,f,h=!1,g=function(a){h||(h=!0,(f||O)(a),e.complete(!a))};e=new c({end:function(){g()},cancel:function(){g(!0)}});f=A(l,a,b,d,function(a){g(!1===a)});return e})});return g}function v(a,b,d,e,f){var g=C(a,b,d,e,f);if(0===g.length){var k,l;"beforeSetClass"===f?(k=C(a,"removeClass",d,e,"beforeRemoveClass"),l=C(a,"addClass",d,e,"beforeAddClass")):"setClass"===f&&(k=C(a,"removeClass",d,e,"removeClass"),l=C(a,"addClass",
+d,e,"addClass"));k&&(g=g.concat(k));l&&(g=g.concat(l))}if(0!==g.length)return function(a){var b=[];g.length&&t(g,function(a){b.push(a())});b.length?c.all(b,a):a();return function(a){t(b,function(b){a?b.cancel():b.end()})}}}var E=!1;3===arguments.length&&ra(d)&&(s=d,d=null);s=oa(s);d||(d=a.attr("class")||"",s.addClass&&(d+=" "+s.addClass),s.removeClass&&(d+=" "+s.removeClass));var g=s.addClass,M=s.removeClass,x=e(d),H,I;if(x.length){var K,J;"leave"===b?(J="leave",K="afterLeave"):(J="before"+b.charAt(0).toUpperCase()+
+b.substr(1),K=b);"enter"!==b&&"move"!==b&&(H=v(a,b,s,x,J));I=v(a,b,s,x,K)}if(H||I){var m;return{$$willAnimate:!0,end:function(){m?m.end():(E=!0,q(),ha(a,s),m=new c,m.complete(!0));return m},start:function(){function b(c){E=!0;q();ha(a,s);m.complete(c)}if(m)return m;m=new c;var d,e=[];H&&e.push(function(a){d=H(a)});e.length?e.push(function(a){q();a(!0)}):q();I&&e.push(function(a){d=I(a)});m.setHost({end:function(){E||((d||O)(void 0),b(void 0))},cancel:function(){E||((d||O)(!0),b(!0))}});c.chain(e,
+b);return m}}}}}]}]).provider("$$animateJsDriver",["$$animationProvider",function(a){a.drivers.push("$$animateJsDriver");this.$get=["$$animateJs","$$AnimateRunner",function(a,c){function d(c){return a(c.element,c.event,c.classes,c.options)}return function(a){if(a.from&&a.to){var b=d(a.from),n=d(a.to);if(b||n)return{start:function(){function a(){return function(){t(d,function(a){a.end()})}}var d=[];b&&d.push(b.start());n&&d.push(n.start());c.all(d,function(a){e.complete(a)});var e=new c({end:a(),cancel:a()});
+return e}}}else return d(a)}}]}])})(window,window.angular);
//# sourceMappingURL=angular-animate.min.js.map
diff --git a/libs/bower_components/angular-animate/angular-animate.min.js.map b/libs/bower_components/angular-animate/angular-animate.min.js.map
index cce4f19d0c..4c9dd4b74c 100644
--- a/libs/bower_components/angular-animate/angular-animate.min.js.map
+++ b/libs/bower_components/angular-animate/angular-animate.min.js.map
@@ -1,8 +1,8 @@
{
"version":3,
"file":"angular-animate.min.js",
-"lineCount":54,
-"mappings":"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",
+"lineCount":56,
+"mappings":"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",
"sources":["angular-animate.js"],
-"names":["window","angular","undefined","assertArg","arg","name","reason","ngMinErr","mergeClasses","a","b","isArray","join","packageStyles","options","styles","to","from","pendClasses","classes","fix","isPrefix","className","isString","length","split","forEach","klass","i","stripCommentsFromElement","element","jqLite","ELEMENT_NODE","nodeType","extractElementNode","elm","$$addClass","$$jqLite","addClass","$$removeClass","removeClass","applyAnimationClassesFactory","prepareAnimationOptions","$$prepared","domOperation","noop","options.domOperation","$$domOperationFired","applyAnimationStyles","applyAnimationFromStyles","applyAnimationToStyles","css","mergeAnimationDetails","oldAnimation","newAnimation","target","newOptions","toAdd","toRemove","resolveElementClasses","attr","preparationClasses","concatWithSpace","realDomOperation","extend","existing","splitClassesToLookup","obj","flags","value","key","ADD_CLASS","REMOVE_CLASS","val","prop","allow","getDomNode","applyGeneratedPreparationClasses","event","EVENT_CLASS_PREFIX","ADD_CLASS_SUFFIX","REMOVE_CLASS_SUFFIX","blockTransitions","node","duration","applyInlineStyle","TRANSITION_DELAY_PROP","blockKeyframeAnimations","applyBlock","ANIMATION_PROP","ANIMATION_PLAYSTATE_KEY","styleTuple","style","computeCssStyles","$window","properties","Object","create","detectedStyles","getComputedStyle","formalStyleName","actualStyleName","c","charAt","parseMaxTime","str","maxValue","values","substring","parseFloat","Math","max","truthyTimingValue","getCssTransitionDurationStyle","applyOnlyDuration","TRANSITION_PROP","DURATION_KEY","createLocalCacheLookup","cache","flush","count","entry","total","get","put","registerRestorableStyles","backup","isDefined","getPropertyValue","copy","isObject","isUndefined","isFunction","isElement","TRANSITIONEND_EVENT","ANIMATIONEND_EVENT","ontransitionend","onwebkittransitionend","onanimationend","onwebkitanimationend","ANIMATION_DELAY_PROP","DELAY_KEY","ANIMATION_DURATION_PROP","TRANSITION_DURATION_PROP","$$minErr","DETECT_CSS_PROPERTIES","transitionDuration","transitionDelay","transitionProperty","PROPERTY_KEY","animationDuration","animationDelay","animationIterationCount","ANIMATION_ITERATION_COUNT_KEY","DETECT_STAGGER_CSS_PROPERTIES","module","directive","$$AnimateChildrenDirective","$interpolate","link","scope","attrs","setData","data","NG_ANIMATE_CHILDREN_DATA","ngAnimateChildren","$observe","factory","$$rAFSchedulerFactory","$$rAF","scheduler","tasks","queue","concat","nextTick","items","shift","cancelFn","waitUntilQuiet","scheduler.waitUntilQuiet","fn","provider","$$AnimateQueueProvider","$animateProvider","makeTruthyCssClassMap","classString","keys","ONE_SPACE","map","hasMatchingClasses","newClassString","currentClassString","currentClassMap","some","isAllowed","ruleType","currentAnimation","previousAnimation","rules","hasAnimationClasses","animation","and","skip","cancel","push","structural","RUNNING_STATE","state","nA","nR","cA","cR","$get","$rootScope","$rootElement","$document","$$HashMap","$$animation","$$AnimateRunner","$templateRequest","$$forceReflow","postDigestTaskFactory","postDigestCalled","$$postDigest","findCallbacks","parent","targetNode","targetParentNode","matches","entries","callbackRegistry","contains","call","callback","queueAnimation","initialOptions","notifyProgress","runner","phase","runInNextPostDigestOrNow","callbacks","progress","close","reject","activeClasses","applyAnimationClasses","complete","isAnimatableClassName","isStructural","indexOf","skipAnimations","animationsEnabled","hidden","disabledElementsLookup","existingAnimation","activeAnimationsLookup","hasExistingAnimation","PRE_DIGEST_STATE","areAnimationsAllowed","closeChildAnimations","skipAnimationFlag","cancelAnimationFlag","end","joinAnimationFlag","isValidAnimation","clearElementAnimationState","counter","markElementAnimationState","animationDetails","animationCancelled","realRunner","done","status","setHost","children","querySelectorAll","child","parseInt","getAttribute","NG_ANIMATE_ATTR_NAME","remove","removeAttribute","isMatchingElement","nodeOrElmA","nodeOrElmB","parentElement","bodyElement","body","bodyElementDetected","nodeName","rootElementDetected","parentAnimationDetected","animateChildren","elementDisabled","parentHost","NG_ANIMATE_PIN_DATA","details","parentElementDisabled","parentNode","setAttribute","newValue","oldValue","deregisterWatch","$watch","totalPendingRequests","isEmpty","classNameFilter","test","Node","prototype","compareDocumentPosition","on","container","off","filterFromRegistry","list","matchContainer","matchCallback","containerNode","filter","arguments","pin","enabled","bool","argCount","hasElement","recordExists","$$AnimationProvider","getRunner","RUNNER_STORAGE_KEY","drivers","$injector","$$rAFScheduler","sortAnimations","animations","processNode","processed","elementNode","domNode","lookup","parentEntry","tree","flatten","result","remainingLevelEntries","nextLevelEntries","row","childEntry","animationQueue","getAnchorNodes","hasAttribute","NG_ANIMATE_REF_ATTR","SELECTOR","anchors","groupAnimations","preparedAnimations","refLookup","index","enterOrMove","anchorNodes","direction","anchor","animationID","usedIndicesLookup","anchorGroups","operations","fromAnimation","toAnimation","lookupKey","toString","group","beforeStart","cssClassesIntersection","indexKey","aa","j","invokeFirstDriver","driverName","has","driver","updateAnimationRunners","newRunner","handleDestroyedElement","rejected","removeData","tempClasses","NG_ANIMATE_CLASSNAME","prepareClassName","PREPARE_CLASS_SUFFIX","groupedAnimations","toBeSortedAnimations","animationEntry","triggerAnimationStart","startAnimationFn","closeFn","targetElement","operation","start","animationRunner","$AnimateCssProvider","gcsLookup","gcsStaggerLookup","$timeout","$sniffer","$$animateQueue","gcsHashFn","extraClasses","parentCounter","computeCachedCssStaggerStyles","cacheKey","stagger","staggerClassName","rafWaitQueue","pageWidth","computeTimings","timings","aD","tD","maxDelay","maxDuration","init","endFn","animationClosed","animationCompleted","animationPaused","$$skipPreparationClasses","temporaryStyles","restoreStyles","setProperty","removeProperty","onDone","events","onAnimationProgress","animationTimerData","ANIMATE_TIMER_KEY","timer","applyBlocking","blockTransition","blockKeyframeAnimation","closeAndReturnNoopAnimator","$$willAnimate","stopPropagation","ev","originalEvent","timeStamp","$manualTimeStamp","Date","now","elapsedTime","toFixed","ELAPSED_TIME_MAX_DECIMAL_PLACES","startTime","maxDelayTime","recalculateTimingStyles","fullClassName","relativeDelay","hasTransitions","hasAnimations","applyAnimationDelay","delay","delayStyle","ONE_SECOND","maxDurationTime","easing","easeProp","easeVal","TIMING_KEY","timerTime","CLOSING_TIME_BUFFER","endTime","animationsData","setupFallbackTimer","currentTimerData","expectedEndTime","onAnimationExpired","cleanupStyles","playPause","playAnimation","arr","splice","maxStagger","itemIndex","floor","runnerHost","resume","runnerHost.resume","pause","runnerHost.pause","transitions","method","structuralClassName","addRemoveClassName","applyClassesEarly","trim","ACTIVE_CLASS_SUFFIX","hasToStyles","keyframeStyle","staggerVal","transitionStyle","durationStyle","staggerIndex","isFirst","skipBlocking","SAFE_FAST_FORWARD_DURATION_VALUE","hasTransitionAll","applyTransitionDuration","applyAnimationDuration","applyTransitionDelay","$$AnimateCssDriverProvider","$$animationProvider","$animateCss","filterCssClasses","replace","getUniqueValues","prepareAnchoredAnimation","outAnchor","inAnchor","calculateAnchorStyles","coords","getBoundingClientRect","bodyNode","scrollTop","scrollLeft","prepareInAnimation","endingClasses","startingClasses","animator","clone","NG_ANIMATE_SHIM_CLASS_NAME","cloneNode","NG_ANIMATE_ANCHOR_CLASS_NAME","rootBodyElement","append","animatorIn","animatorOut","prepareOutAnimation","NG_OUT_ANCHOR_CLASS_NAME","startingAnimator","prepareFromToAnchorAnimation","prepareRegularAnimation","anchorAnimations","outElement","inElement","animationRunners","all","rootNode","initDriverFn","$$AnimateJsProvider","lookupAnimations","flagMap","animationFactory","$$registeredAnimations","applyOptions","executeAnimationFn","args","classesToAdd","classesToRemove","apply","groupEventedAnimations","fnName","ani","endProgressCb","resolved","onAnimationComplete","packageAnimations","startAnimation","runners","animateFn","before","after","afterFn","beforeFn","toUpperCase","substr","onComplete","success","closeActiveAnimations","chain","cancelled","$$AnimateJsDriverProvider","$$animateJs","prepareAnimation","endFnFactory"]
+"names":["window","angular","assertArg","arg","name","reason","ngMinErr","mergeClasses","a","b","isArray","join","packageStyles","options","styles","to","from","pendClasses","classes","fix","isPrefix","className","isString","length","split","forEach","klass","i","stripCommentsFromElement","element","jqLite","ELEMENT_NODE","nodeType","extractElementNode","elm","$$addClass","$$jqLite","addClass","$$removeClass","removeClass","applyAnimationClassesFactory","prepareAnimationOptions","$$prepared","domOperation","noop","options.domOperation","$$domOperationFired","applyAnimationStyles","applyAnimationFromStyles","applyAnimationToStyles","css","mergeAnimationDetails","oldAnimation","newAnimation","target","newOptions","toAdd","toRemove","resolveElementClasses","attr","preparationClasses","concatWithSpace","realDomOperation","extend","existing","splitClassesToLookup","obj","flags","value","key","ADD_CLASS","REMOVE_CLASS","val","prop","allow","REMOVE_CLASS_SUFFIX","ADD_CLASS_SUFFIX","getDomNode","applyGeneratedPreparationClasses","event","EVENT_CLASS_PREFIX","blockTransitions","node","duration","applyInlineStyle","TRANSITION_DELAY_PROP","blockKeyframeAnimations","applyBlock","ANIMATION_PROP","ANIMATION_PLAYSTATE_KEY","styleTuple","style","computeCssStyles","$window","properties","Object","create","detectedStyles","getComputedStyle","formalStyleName","actualStyleName","c","charAt","parseMaxTime","str","maxValue","values","substring","parseFloat","Math","max","truthyTimingValue","getCssTransitionDurationStyle","applyOnlyDuration","TRANSITION_PROP","DURATION_KEY","createLocalCacheLookup","cache","flush","count","entry","total","get","put","registerRestorableStyles","backup","isDefined","getPropertyValue","TRANSITIONEND_EVENT","ANIMATIONEND_EVENT","undefined","ontransitionend","onwebkittransitionend","onanimationend","onwebkitanimationend","ANIMATION_DELAY_PROP","DELAY_KEY","ANIMATION_DURATION_PROP","TRANSITION_DURATION_PROP","$$minErr","DETECT_CSS_PROPERTIES","transitionDuration","transitionDelay","transitionProperty","PROPERTY_KEY","animationDuration","animationDelay","animationIterationCount","ANIMATION_ITERATION_COUNT_KEY","DETECT_STAGGER_CSS_PROPERTIES","copy","isElement","isFunction","isObject","isUndefined","module","initAngularHelpers","info","angularVersion","directive","ngAnimateSwapDirective","$animate","$rootScope","restrict","transclude","terminal","priority","link","scope","$element","attrs","ctrl","$transclude","previousElement","previousScope","$watchCollection","ngAnimateSwap","leave","$destroy","$new","enter","$$AnimateChildrenDirective","$interpolate","setData","data","NG_ANIMATE_CHILDREN_DATA","ngAnimateChildren","$observe","factory","$$rAFSchedulerFactory","$$rAF","scheduler","tasks","queue","concat","nextTick","items","shift","cancelFn","waitUntilQuiet","scheduler.waitUntilQuiet","fn","provider","$$AnimateQueueProvider","$animateProvider","makeTruthyCssClassMap","classString","keys","ONE_SPACE","map","hasMatchingClasses","newClassString","currentClassString","currentClassMap","some","isAllowed","ruleType","currentAnimation","previousAnimation","rules","hasAnimationClasses","animation","and","skip","cancel","push","structural","RUNNING_STATE","state","nA","nR","cA","cR","$get","$rootElement","$document","$$Map","$$animation","$$AnimateRunner","$templateRequest","$$forceReflow","$$isDocumentHidden","postDigestTaskFactory","postDigestCalled","$$postDigest","findCallbacks","targetParentNode","targetNode","matches","entries","callbackRegistry","contains","call","callback","filterFromRegistry","list","matchContainer","matchCallback","containerNode","filter","queueAnimation","originalElement","initialOptions","notifyProgress","runner","phase","runInNextPostDigestOrNow","callbacks","parentNode","off","progress","close","reject","activeClasses","applyAnimationClasses","complete","animationsEnabled","isAnimatableByFilter","isAnimatableClassName","isStructural","indexOf","documentHidden","skipAnimations","disabledElementsLookup","existingAnimation","activeAnimationsLookup","hasExistingAnimation","PRE_DIGEST_STATE","areAnimationsAllowed","closeChildAnimations","skipAnimationFlag","cancelAnimationFlag","end","joinAnimationFlag","isValidAnimation","clearElementAnimationState","counter","markElementAnimationState","animationDetails","animationCancelled","parent","realRunner","setHost","done","status","children","querySelectorAll","child","parseInt","getAttribute","NG_ANIMATE_ATTR_NAME","delete","removeAttribute","bodyNode","body","rootNode","bodyNodeDetected","nodeName","rootNodeDetected","parentAnimationDetected","elementDisabled","animateChildren","parentHost","NG_ANIMATE_PIN_DATA","details","parentNodeDisabled","setAttribute","newValue","oldValue","set","deregisterWatch","$watch","totalPendingRequests","isEmpty","customFilter","classNameFilter","returnTrue","test","Node","prototype","compareDocumentPosition","on","container","arguments","eventType","pin","parentElement","enabled","bool","argCount","hasElement","$$AnimationProvider","drivers","$injector","$$rAFScheduler","sortAnimations","animations","processNode","processed","elementNode","domNode","lookup","parentEntry","tree","flatten","result","remainingLevelEntries","nextLevelEntries","row","childEntry","animationQueue","getAnchorNodes","hasAttribute","NG_ANIMATE_REF_ATTR","SELECTOR","anchors","groupAnimations","preparedAnimations","refLookup","index","enterOrMove","anchorNodes","direction","anchor","animationID","usedIndicesLookup","anchorGroups","operations","fromAnimation","toAnimation","lookupKey","toString","group","beforeStart","cssClassesIntersection","indexKey","aa","j","invokeFirstDriver","driver","driverName","updateAnimationRunners","newRunner","update","RUNNER_STORAGE_KEY","handleDestroyedElement","rejected","removeData","tempClasses","NG_ANIMATE_CLASSNAME","prepareClassName","PREPARE_CLASS_SUFFIX","groupedAnimations","toBeSortedAnimations","animationEntry","triggerAnimationStart","startAnimationFn","closeFn","targetElement","operation","start","animationRunner","$AnimateCssProvider","gcsLookup","gcsStaggerLookup","$timeout","$sniffer","$$animateQueue","gcsHashFn","extraClasses","parentCounter","computeCachedCssStaggerStyles","cacheKey","stagger","staggerClassName","rafWaitQueue","pageWidth","computeTimings","timings","aD","tD","maxDelay","maxDuration","init","endFn","animationClosed","animationCompleted","animationPaused","$$skipPreparationClasses","temporaryStyles","restoreStyles","setProperty","removeProperty","onDone","events","onAnimationProgress","animationTimerData","ANIMATE_TIMER_KEY","timer","applyBlocking","blockTransition","blockKeyframeAnimation","closeAndReturnNoopAnimator","$$willAnimate","stopPropagation","ev","originalEvent","timeStamp","$manualTimeStamp","Date","now","elapsedTime","toFixed","ELAPSED_TIME_MAX_DECIMAL_PLACES","startTime","maxDelayTime","recalculateTimingStyles","fullClassName","relativeDelay","hasTransitions","hasAnimations","applyAnimationDelay","delay","delayStyle","ONE_SECOND","maxDurationTime","easing","easeProp","easeVal","TIMING_KEY","timerTime","CLOSING_TIME_BUFFER","endTime","animationsData","setupFallbackTimer","currentTimerData","expectedEndTime","onAnimationExpired","cleanupStyles","playPause","playAnimation","arr","splice","maxStagger","itemIndex","floor","runnerHost","resume","runnerHost.resume","pause","runnerHost.pause","transitions","method","structuralClassName","addRemoveClassName","applyClassesEarly","trim","ACTIVE_CLASS_SUFFIX","hasToStyles","keyframeStyle","staggerVal","transitionStyle","durationStyle","staggerIndex","isFirst","skipBlocking","SAFE_FAST_FORWARD_DURATION_VALUE","hasTransitionAll","applyTransitionDuration","applyAnimationDuration","applyTransitionDelay","$$AnimateCssDriverProvider","$$animationProvider","$animateCss","filterCssClasses","replace","getUniqueValues","prepareAnchoredAnimation","outAnchor","inAnchor","calculateAnchorStyles","coords","getBoundingClientRect","scrollTop","scrollLeft","prepareInAnimation","endingClasses","startingClasses","animator","clone","remove","NG_ANIMATE_SHIM_CLASS_NAME","cloneNode","NG_ANIMATE_ANCHOR_CLASS_NAME","rootBodyElement","append","animatorIn","animatorOut","prepareOutAnimation","NG_OUT_ANCHOR_CLASS_NAME","startingAnimator","prepareFromToAnchorAnimation","prepareRegularAnimation","anchorAnimations","outElement","inElement","animationRunners","all","initDriverFn","$$AnimateJsProvider","lookupAnimations","flagMap","animationFactory","$$registeredAnimations","applyOptions","executeAnimationFn","args","classesToAdd","classesToRemove","apply","groupEventedAnimations","fnName","ani","endProgressCb","resolved","onAnimationComplete","packageAnimations","startAnimation","runners","animateFn","before","after","afterFn","beforeFn","toUpperCase","substr","onComplete","success","closeActiveAnimations","chain","cancelled","$$AnimateJsDriverProvider","$$animateJs","prepareAnimation","endFnFactory"]
}
diff --git a/libs/bower_components/angular-animate/bower.json b/libs/bower_components/angular-animate/bower.json
index 2a9a907923..fecf3a8aa9 100644
--- a/libs/bower_components/angular-animate/bower.json
+++ b/libs/bower_components/angular-animate/bower.json
@@ -1,10 +1,10 @@
{
"name": "angular-animate",
- "version": "1.4.10",
+ "version": "1.6.5",
"license": "MIT",
"main": "./angular-animate.js",
"ignore": [],
"dependencies": {
- "angular": "1.4.10"
+ "angular": "1.6.5"
}
}
diff --git a/libs/bower_components/angular-animate/package.json b/libs/bower_components/angular-animate/package.json
index 7e312b4df6..ab819a4e23 100644
--- a/libs/bower_components/angular-animate/package.json
+++ b/libs/bower_components/angular-animate/package.json
@@ -1,6 +1,6 @@
{
"name": "angular-animate",
- "version": "1.4.10",
+ "version": "1.6.5",
"description": "AngularJS module for animations",
"main": "index.js",
"scripts": {
@@ -22,5 +22,12 @@
"bugs": {
"url": "https://github.com/angular/angular.js/issues"
},
- "homepage": "http://angularjs.org"
+ "homepage": "http://angularjs.org",
+ "jspm": {
+ "shim": {
+ "angular-animate": {
+ "deps": ["angular"]
+ }
+ }
+ }
}
diff --git a/libs/bower_components/angular-cookies/.bower.json b/libs/bower_components/angular-cookies/.bower.json
index 30db27a3a8..6abc6e1e49 100644
--- a/libs/bower_components/angular-cookies/.bower.json
+++ b/libs/bower_components/angular-cookies/.bower.json
@@ -1,20 +1,20 @@
{
"name": "angular-cookies",
- "version": "1.4.10",
+ "version": "1.6.5",
"license": "MIT",
"main": "./angular-cookies.js",
"ignore": [],
"dependencies": {
- "angular": "1.4.10"
+ "angular": "1.6.5"
},
"homepage": "https://github.com/angular/bower-angular-cookies",
- "_release": "1.4.10",
+ "_release": "1.6.5",
"_resolution": {
"type": "version",
- "tag": "v1.4.10",
- "commit": "840353b6f95fb0ebeb93655593c93e8a41dd1324"
+ "tag": "v1.6.5",
+ "commit": "5535967ced822af91356af87b617611615cc8fc2"
},
"_source": "https://github.com/angular/bower-angular-cookies.git",
- "_target": "~1.4.0",
+ "_target": "~1.6.0",
"_originalSource": "angular-cookies"
} \ No newline at end of file
diff --git a/libs/bower_components/angular-cookies/LICENSE.md b/libs/bower_components/angular-cookies/LICENSE.md
new file mode 100644
index 0000000000..2c395eef1b
--- /dev/null
+++ b/libs/bower_components/angular-cookies/LICENSE.md
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2016 Angular
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/libs/bower_components/angular-cookies/angular-cookies.js b/libs/bower_components/angular-cookies/angular-cookies.js
index beb8b62055..0977a46bcf 100644
--- a/libs/bower_components/angular-cookies/angular-cookies.js
+++ b/libs/bower_components/angular-cookies/angular-cookies.js
@@ -1,9 +1,9 @@
/**
- * @license AngularJS v1.4.10
- * (c) 2010-2015 Google, Inc. http://angularjs.org
+ * @license AngularJS v1.6.5
+ * (c) 2010-2017 Google, Inc. http://angularjs.org
* License: MIT
*/
-(function(window, angular, undefined) {'use strict';
+(function(window, angular) {'use strict';
/**
* @ngdoc module
@@ -22,13 +22,14 @@
angular.module('ngCookies', ['ng']).
+ info({ angularVersion: '1.6.5' }).
/**
* @ngdoc provider
* @name $cookiesProvider
* @description
* Use `$cookiesProvider` to change the default behavior of the {@link ngCookies.$cookies $cookies} service.
* */
- provider('$cookies', [function $CookiesProvider() {
+ provider('$cookies', [/** @this */function $CookiesProvider() {
/**
* @ngdoc property
* @name $cookiesProvider#defaults
@@ -51,6 +52,16 @@ angular.module('ngCookies', ['ng']).
* Note: By default, the address that appears in your `<base>` tag will be used as the path.
* This is important so that cookies will be visible for all routes when html5mode is enabled.
*
+ * @example
+ *
+ * ```js
+ * angular.module('cookiesProviderExample', ['ngCookies'])
+ * .config(['$cookiesProvider', function($cookiesProvider) {
+ * // Setting default options
+ * $cookiesProvider.defaults.domain = 'foo.com';
+ * $cookiesProvider.defaults.secure = true;
+ * }]);
+ * ```
**/
var defaults = this.defaults = {};
@@ -184,6 +195,9 @@ angular.module('ngCookies').
* @ngdoc service
* @name $cookieStore
* @deprecated
+ * sinceVersion="v1.4.0"
+ * Please use the {@link ngCookies.$cookies `$cookies`} service instead.
+ *
* @requires $cookies
*
* @description
@@ -193,11 +207,6 @@ angular.module('ngCookies').
*
* Requires the {@link ngCookies `ngCookies`} module to be installed.
*
- * <div class="alert alert-danger">
- * **Note:** The $cookieStore service is **deprecated**.
- * Please use the {@link ngCookies.$cookies `$cookies`} service instead.
- * </div>
- *
* @example
*
* ```js
@@ -299,9 +308,9 @@ function $$CookieWriter($document, $log, $browser) {
// - 4096 bytes per cookie
var cookieLength = str.length + 1;
if (cookieLength > 4096) {
- $log.warn("Cookie '" + name +
- "' possibly not set or overflowed because it was too large (" +
- cookieLength + " > 4096 bytes)!");
+ $log.warn('Cookie \'' + name +
+ '\' possibly not set or overflowed because it was too large (' +
+ cookieLength + ' > 4096 bytes)!');
}
return str;
@@ -314,7 +323,7 @@ function $$CookieWriter($document, $log, $browser) {
$$CookieWriter.$inject = ['$document', '$log', '$browser'];
-angular.module('ngCookies').provider('$$cookieWriter', function $$CookieWriterProvider() {
+angular.module('ngCookies').provider('$$cookieWriter', /** @this */ function $$CookieWriterProvider() {
this.$get = $$CookieWriter;
});
diff --git a/libs/bower_components/angular-cookies/angular-cookies.min.js b/libs/bower_components/angular-cookies/angular-cookies.min.js
index b96469701b..514a46362c 100644
--- a/libs/bower_components/angular-cookies/angular-cookies.min.js
+++ b/libs/bower_components/angular-cookies/angular-cookies.min.js
@@ -1,9 +1,9 @@
/*
- AngularJS v1.4.10
- (c) 2010-2015 Google, Inc. http://angularjs.org
+ AngularJS v1.6.5
+ (c) 2010-2017 Google, Inc. http://angularjs.org
License: MIT
*/
-(function(p,c,n){'use strict';function l(b,a,g){var d=g.baseHref(),k=b[0];return function(b,e,f){var g,h;f=f||{};h=f.expires;g=c.isDefined(f.path)?f.path:d;c.isUndefined(e)&&(h="Thu, 01 Jan 1970 00:00:00 GMT",e="");c.isString(h)&&(h=new Date(h));e=encodeURIComponent(b)+"="+encodeURIComponent(e);e=e+(g?";path="+g:"")+(f.domain?";domain="+f.domain:"");e+=h?";expires="+h.toUTCString():"";e+=f.secure?";secure":"";f=e.length+1;4096<f&&a.warn("Cookie '"+b+"' possibly not set or overflowed because it was too large ("+
-f+" > 4096 bytes)!");k.cookie=e}}c.module("ngCookies",["ng"]).provider("$cookies",[function(){var b=this.defaults={};this.$get=["$$cookieReader","$$cookieWriter",function(a,g){return{get:function(d){return a()[d]},getObject:function(d){return(d=this.get(d))?c.fromJson(d):d},getAll:function(){return a()},put:function(d,a,m){g(d,a,m?c.extend({},b,m):b)},putObject:function(d,b,a){this.put(d,c.toJson(b),a)},remove:function(a,k){g(a,n,k?c.extend({},b,k):b)}}}]}]);c.module("ngCookies").factory("$cookieStore",
+(function(n,c){'use strict';function l(b,a,g){var d=g.baseHref(),k=b[0];return function(b,e,f){var g,h;f=f||{};h=f.expires;g=c.isDefined(f.path)?f.path:d;c.isUndefined(e)&&(h="Thu, 01 Jan 1970 00:00:00 GMT",e="");c.isString(h)&&(h=new Date(h));e=encodeURIComponent(b)+"="+encodeURIComponent(e);e=e+(g?";path="+g:"")+(f.domain?";domain="+f.domain:"");e+=h?";expires="+h.toUTCString():"";e+=f.secure?";secure":"";f=e.length+1;4096<f&&a.warn("Cookie '"+b+"' possibly not set or overflowed because it was too large ("+
+f+" > 4096 bytes)!");k.cookie=e}}c.module("ngCookies",["ng"]).info({angularVersion:"1.6.5"}).provider("$cookies",[function(){var b=this.defaults={};this.$get=["$$cookieReader","$$cookieWriter",function(a,g){return{get:function(d){return a()[d]},getObject:function(d){return(d=this.get(d))?c.fromJson(d):d},getAll:function(){return a()},put:function(d,a,m){g(d,a,m?c.extend({},b,m):b)},putObject:function(d,b,a){this.put(d,c.toJson(b),a)},remove:function(a,k){g(a,void 0,k?c.extend({},b,k):b)}}}]}]);c.module("ngCookies").factory("$cookieStore",
["$cookies",function(b){return{get:function(a){return b.getObject(a)},put:function(a,c){b.putObject(a,c)},remove:function(a){b.remove(a)}}}]);l.$inject=["$document","$log","$browser"];c.module("ngCookies").provider("$$cookieWriter",function(){this.$get=l})})(window,window.angular);
//# sourceMappingURL=angular-cookies.min.js.map
diff --git a/libs/bower_components/angular-cookies/angular-cookies.min.js.map b/libs/bower_components/angular-cookies/angular-cookies.min.js.map
index 555b5103b7..a4278c4d39 100644
--- a/libs/bower_components/angular-cookies/angular-cookies.min.js.map
+++ b/libs/bower_components/angular-cookies/angular-cookies.min.js.map
@@ -2,7 +2,7 @@
"version":3,
"file":"angular-cookies.min.js",
"lineCount":8,
-"mappings":"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",
+"mappings":"A;;;;;aAKC,SAAQ,CAACA,CAAD,CAASC,CAAT,CAAkB,CAoR3BC,QAASA,EAAc,CAACC,CAAD,CAAYC,CAAZ,CAAkBC,CAAlB,CAA4B,CACjD,IAAIC,EAAaD,CAAAE,SAAA,EAAjB,CACIC,EAAcL,CAAA,CAAU,CAAV,CAmClB,OAAO,SAAQ,CAACM,CAAD,CAAOC,CAAP,CAAcC,CAAd,CAAuB,CAjCW,IAC3CC,CAD2C,CACrCC,CACVF,EAAA,CAgCoDA,CAhCpD,EAAqB,EACrBE,EAAA,CAAUF,CAAAE,QACVD,EAAA,CAAOX,CAAAa,UAAA,CAAkBH,CAAAC,KAAlB,CAAA,CAAkCD,CAAAC,KAAlC,CAAiDN,CACpDL,EAAAc,YAAA,CAAoBL,CAApB,CAAJ,GACEG,CACA,CADU,+BACV,CAAAH,CAAA,CAAQ,EAFV,CAIIT,EAAAe,SAAA,CAAiBH,CAAjB,CAAJ,GACEA,CADF,CACY,IAAII,IAAJ,CAASJ,CAAT,CADZ,CAIIK,EAAAA,CAAMC,kBAAA,CAqB6BV,CArB7B,CAANS,CAAiC,GAAjCA,CAAuCC,kBAAA,CAAmBT,CAAnB,CAE3CQ,EAAA,CADAA,CACA,EADON,CAAA,CAAO,QAAP,CAAkBA,CAAlB,CAAyB,EAChC,GAAOD,CAAAS,OAAA,CAAiB,UAAjB,CAA8BT,CAAAS,OAA9B,CAA+C,EAAtD,CACAF,EAAA,EAAOL,CAAA,CAAU,WAAV,CAAwBA,CAAAQ,YAAA,EAAxB,CAAgD,EACvDH,EAAA,EAAOP,CAAAW,OAAA,CAAiB,SAAjB,CAA6B,EAMhCC,EAAAA,CAAeL,CAAAM,OAAfD,CAA4B,CACb,KAAnB,CAAIA,CAAJ,EACEnB,CAAAqB,KAAA,CAAU,UAAV,CASqChB,CATrC,CACE,6DADF;AAEEc,CAFF,CAEiB,iBAFjB,CASFf,EAAAkB,OAAA,CAJOR,CAG6B,CArCW,CAlQnDjB,CAAA0B,OAAA,CAAe,WAAf,CAA4B,CAAC,IAAD,CAA5B,CAAAC,KAAA,CACO,CAAEC,eAAgB,OAAlB,CADP,CAAAC,SAAA,CAQY,UARZ,CAQwB,CAAaC,QAAyB,EAAG,CAkC7D,IAAIC,EAAW,IAAAA,SAAXA,CAA2B,EAiC/B,KAAAC,KAAA,CAAY,CAAC,gBAAD,CAAmB,gBAAnB,CAAqC,QAAQ,CAACC,CAAD,CAAiBC,CAAjB,CAAiC,CACxF,MAAO,CAWLC,IAAKA,QAAQ,CAACC,CAAD,CAAM,CACjB,MAAOH,EAAA,EAAA,CAAiBG,CAAjB,CADU,CAXd,CAyBLC,UAAWA,QAAQ,CAACD,CAAD,CAAM,CAEvB,MAAO,CADH3B,CACG,CADK,IAAA0B,IAAA,CAASC,CAAT,CACL,EAAQpC,CAAAsC,SAAA,CAAiB7B,CAAjB,CAAR,CAAkCA,CAFlB,CAzBpB,CAuCL8B,OAAQA,QAAQ,EAAG,CACjB,MAAON,EAAA,EADU,CAvCd,CAuDLO,IAAKA,QAAQ,CAACJ,CAAD,CAAM3B,CAAN,CAAaC,CAAb,CAAsB,CACjCwB,CAAA,CAAeE,CAAf,CAAoB3B,CAApB,CAAuCC,CAvFpC,CAAUV,CAAAyC,OAAA,CAAe,EAAf,CAAmBV,CAAnB,CAuF0BrB,CAvF1B,CAAV,CAAkDqB,CAuFrD,CADiC,CAvD9B,CAuELW,UAAWA,QAAQ,CAACN,CAAD,CAAM3B,CAAN,CAAaC,CAAb,CAAsB,CACvC,IAAA8B,IAAA,CAASJ,CAAT,CAAcpC,CAAA2C,OAAA,CAAelC,CAAf,CAAd,CAAqCC,CAArC,CADuC,CAvEpC,CAsFLkC,OAAQA,QAAQ,CAACR,CAAD,CAAM1B,CAAN,CAAe,CAC7BwB,CAAA,CAAeE,CAAf,CAAoBS,IAAAA,EAApB,CAA2CnC,CAtHxC,CAAUV,CAAAyC,OAAA,CAAe,EAAf,CAAmBV,CAAnB,CAsH8BrB,CAtH9B,CAAV,CAAkDqB,CAsHrD,CAD6B,CAtF1B,CADiF,CAA9E,CAnEiD,CAAzC,CARxB,CAyKA/B,EAAA0B,OAAA,CAAe,WAAf,CAAAoB,QAAA,CA+BS,cA/BT;AA+ByB,CAAC,UAAD,CAAa,QAAQ,CAACC,CAAD,CAAW,CAErD,MAAO,CAWLZ,IAAKA,QAAQ,CAACC,CAAD,CAAM,CACjB,MAAOW,EAAAV,UAAA,CAAmBD,CAAnB,CADU,CAXd,CAyBLI,IAAKA,QAAQ,CAACJ,CAAD,CAAM3B,CAAN,CAAa,CACxBsC,CAAAL,UAAA,CAAmBN,CAAnB,CAAwB3B,CAAxB,CADwB,CAzBrB,CAsCLmC,OAAQA,QAAQ,CAACR,CAAD,CAAM,CACpBW,CAAAH,OAAA,CAAgBR,CAAhB,CADoB,CAtCjB,CAF8C,CAAhC,CA/BzB,CAmIAnC,EAAA+C,QAAA,CAAyB,CAAC,WAAD,CAAc,MAAd,CAAsB,UAAtB,CAEzBhD,EAAA0B,OAAA,CAAe,WAAf,CAAAG,SAAA,CAAqC,gBAArC,CAAoEoB,QAA+B,EAAG,CACpG,IAAAjB,KAAA,CAAY/B,CADwF,CAAtG,CAhU2B,CAA1B,CAAD,CAqUGF,MArUH,CAqUWA,MAAAC,QArUX;",
"sources":["angular-cookies.js"],
-"names":["window","angular","undefined","$$CookieWriter","$document","$log","$browser","cookiePath","baseHref","rawDocument","name","value","options","path","expires","isDefined","isUndefined","isString","Date","str","encodeURIComponent","domain","toUTCString","secure","cookieLength","length","warn","cookie","module","provider","$CookiesProvider","defaults","$get","$$cookieReader","$$cookieWriter","get","key","getObject","fromJson","getAll","put","extend","putObject","toJson","remove","factory","$cookies","$inject","$$CookieWriterProvider"]
+"names":["window","angular","$$CookieWriter","$document","$log","$browser","cookiePath","baseHref","rawDocument","name","value","options","path","expires","isDefined","isUndefined","isString","Date","str","encodeURIComponent","domain","toUTCString","secure","cookieLength","length","warn","cookie","module","info","angularVersion","provider","$CookiesProvider","defaults","$get","$$cookieReader","$$cookieWriter","get","key","getObject","fromJson","getAll","put","extend","putObject","toJson","remove","undefined","factory","$cookies","$inject","$$CookieWriterProvider"]
}
diff --git a/libs/bower_components/angular-cookies/bower.json b/libs/bower_components/angular-cookies/bower.json
index a09cdb7a04..23b6be0218 100644
--- a/libs/bower_components/angular-cookies/bower.json
+++ b/libs/bower_components/angular-cookies/bower.json
@@ -1,10 +1,10 @@
{
"name": "angular-cookies",
- "version": "1.4.10",
+ "version": "1.6.5",
"license": "MIT",
"main": "./angular-cookies.js",
"ignore": [],
"dependencies": {
- "angular": "1.4.10"
+ "angular": "1.6.5"
}
}
diff --git a/libs/bower_components/angular-cookies/package.json b/libs/bower_components/angular-cookies/package.json
index a9fba7fa96..1939790914 100644
--- a/libs/bower_components/angular-cookies/package.json
+++ b/libs/bower_components/angular-cookies/package.json
@@ -1,6 +1,6 @@
{
"name": "angular-cookies",
- "version": "1.4.10",
+ "version": "1.6.5",
"description": "AngularJS module for cookies",
"main": "index.js",
"scripts": {
@@ -22,5 +22,12 @@
"bugs": {
"url": "https://github.com/angular/angular.js/issues"
},
- "homepage": "http://angularjs.org"
+ "homepage": "http://angularjs.org",
+ "jspm": {
+ "shim": {
+ "angular-cookies": {
+ "deps": ["angular"]
+ }
+ }
+ }
}
diff --git a/libs/bower_components/angular-mocks/.bower.json b/libs/bower_components/angular-mocks/.bower.json
index 82b2c2a7e4..5507dde741 100644
--- a/libs/bower_components/angular-mocks/.bower.json
+++ b/libs/bower_components/angular-mocks/.bower.json
@@ -1,20 +1,20 @@
{
"name": "angular-mocks",
- "version": "1.4.10",
+ "version": "1.6.5",
"license": "MIT",
"main": "./angular-mocks.js",
"ignore": [],
"dependencies": {
- "angular": "1.4.10"
+ "angular": "1.6.5"
},
"homepage": "https://github.com/angular/bower-angular-mocks",
- "_release": "1.4.10",
+ "_release": "1.6.5",
"_resolution": {
"type": "version",
- "tag": "v1.4.10",
- "commit": "f5bcaf2b32c76f778704b7e92f31d661c24f3364"
+ "tag": "v1.6.5",
+ "commit": "602d0fd8923cf5f7e84a878e11ca4937233733cb"
},
"_source": "https://github.com/angular/bower-angular-mocks.git",
- "_target": "~1.4.0",
+ "_target": "~1.6.0",
"_originalSource": "angular-mocks"
} \ No newline at end of file
diff --git a/libs/bower_components/angular-mocks/LICENSE.md b/libs/bower_components/angular-mocks/LICENSE.md
new file mode 100644
index 0000000000..2c395eef1b
--- /dev/null
+++ b/libs/bower_components/angular-mocks/LICENSE.md
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2016 Angular
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/libs/bower_components/angular-mocks/README.md b/libs/bower_components/angular-mocks/README.md
index 440cce9b78..61b9d8c083 100644
--- a/libs/bower_components/angular-mocks/README.md
+++ b/libs/bower_components/angular-mocks/README.md
@@ -20,7 +20,7 @@ You can `require` ngMock modules:
var angular = require('angular');
angular.module('myMod', [
require('angular-animate'),
- require('angular-mocks/ngMock')
+ require('angular-mocks/ngMock'),
require('angular-mocks/ngAnimateMock')
]);
```
diff --git a/libs/bower_components/angular-mocks/angular-mocks.js b/libs/bower_components/angular-mocks/angular-mocks.js
index ab2ba68318..00167503d4 100644
--- a/libs/bower_components/angular-mocks/angular-mocks.js
+++ b/libs/bower_components/angular-mocks/angular-mocks.js
@@ -1,9 +1,9 @@
/**
- * @license AngularJS v1.4.10
- * (c) 2010-2015 Google, Inc. http://angularjs.org
+ * @license AngularJS v1.6.5
+ * (c) 2010-2017 Google, Inc. http://angularjs.org
* License: MIT
*/
-(function(window, angular, undefined) {
+(function(window, angular) {
'use strict';
@@ -13,6 +13,7 @@
* @description
*
* Namespace from 'angular-mocks.js' which contains testing related code.
+ *
*/
angular.mock = {};
@@ -24,7 +25,7 @@ angular.mock = {};
* @description
* This service is a mock implementation of {@link ng.$browser}. It provides fake
* implementation for commonly used browser apis that are hard to test, e.g. setTimeout, xhr,
- * cookies, etc...
+ * cookies, etc.
*
* The api of this service is the same as that of the real {@link ng.$browser $browser}, except
* that there are several helper methods available which can be used in tests.
@@ -39,14 +40,34 @@ angular.mock.$Browser = function() {
var self = this;
this.isMock = true;
- self.$$url = "http://server/";
+ self.$$url = 'http://server/';
self.$$lastUrl = self.$$url; // used by url polling fn
self.pollFns = [];
- // TODO(vojta): remove this temporary api
- self.$$completeOutstandingRequest = angular.noop;
- self.$$incOutstandingRequestCount = angular.noop;
-
+ // Testability API
+
+ var outstandingRequestCount = 0;
+ var outstandingRequestCallbacks = [];
+ self.$$incOutstandingRequestCount = function() { outstandingRequestCount++; };
+ self.$$completeOutstandingRequest = function(fn) {
+ try {
+ fn();
+ } finally {
+ outstandingRequestCount--;
+ if (!outstandingRequestCount) {
+ while (outstandingRequestCallbacks.length) {
+ outstandingRequestCallbacks.pop()();
+ }
+ }
+ }
+ };
+ self.notifyWhenNoOutstandingRequests = function(callback) {
+ if (outstandingRequestCount) {
+ outstandingRequestCallbacks.push(callback);
+ } else {
+ callback();
+ }
+ };
// register url polling fn
@@ -71,6 +92,8 @@ angular.mock.$Browser = function() {
self.deferredNextId = 0;
self.defer = function(fn, delay) {
+ // Note that we do not use `$$incOutstandingRequestCount` or `$$completeOutstandingRequest`
+ // in this mock implementation.
delay = delay || 0;
self.deferredFns.push({time:(self.defer.now + delay), fn:fn, id: self.deferredNextId});
self.deferredFns.sort(function(a, b) { return a.time - b.time;});
@@ -112,19 +135,29 @@ angular.mock.$Browser = function() {
* @param {number=} number of milliseconds to flush. See {@link #defer.now}
*/
self.defer.flush = function(delay) {
+ var nextTime;
+
if (angular.isDefined(delay)) {
- self.defer.now += delay;
+ // A delay was passed so compute the next time
+ nextTime = self.defer.now + delay;
} else {
if (self.deferredFns.length) {
- self.defer.now = self.deferredFns[self.deferredFns.length - 1].time;
+ // No delay was passed so set the next time so that it clears the deferred queue
+ nextTime = self.deferredFns[self.deferredFns.length - 1].time;
} else {
+ // No delay passed, but there are no deferred tasks so flush - indicates an error!
throw new Error('No deferred tasks to be flushed');
}
}
- while (self.deferredFns.length && self.deferredFns[0].time <= self.defer.now) {
+ while (self.deferredFns.length && self.deferredFns[0].time <= nextTime) {
+ // Increment the time and call the next deferred function
+ self.defer.now = self.deferredFns[0].time;
self.deferredFns.shift().fn();
}
+
+ // Ensure that the current time is correct
+ self.defer.now = nextTime;
};
self.$$baseHref = '/';
@@ -134,12 +167,12 @@ angular.mock.$Browser = function() {
};
angular.mock.$Browser.prototype = {
-/**
- * @name $browser#poll
- *
- * @description
- * run all fns in pollFns
- */
+ /**
+ * @name $browser#poll
+ *
+ * @description
+ * run all fns in pollFns
+ */
poll: function poll() {
angular.forEach(this.pollFns, function(pollFn) {
pollFn();
@@ -162,10 +195,6 @@ angular.mock.$Browser.prototype = {
state: function() {
return this.$$state;
- },
-
- notifyWhenNoOutstandingRequests: function(fn) {
- fn();
}
};
@@ -226,13 +255,13 @@ angular.mock.$ExceptionHandlerProvider = function() {
* @param {string} mode Mode of operation, defaults to `rethrow`.
*
* - `log`: Sometimes it is desirable to test that an error is thrown, for this case the `log`
- * mode stores an array of errors in `$exceptionHandler.errors`, to allow later
- * assertion of them. See {@link ngMock.$log#assertEmpty assertEmpty()} and
- * {@link ngMock.$log#reset reset()}
+ * mode stores an array of errors in `$exceptionHandler.errors`, to allow later assertion of
+ * them. See {@link ngMock.$log#assertEmpty assertEmpty()} and
+ * {@link ngMock.$log#reset reset()}.
* - `rethrow`: If any errors are passed to the handler in tests, it typically means that there
- * is a bug in the application or test, so this mock will make these tests fail.
- * For any implementations that expect exceptions to be thrown, the `rethrow` mode
- * will also maintain a log of thrown errors.
+ * is a bug in the application or test, so this mock will make these tests fail. For any
+ * implementations that expect exceptions to be thrown, the `rethrow` mode will also maintain
+ * a log of thrown errors in `$exceptionHandler.errors`.
*/
this.mode = function(mode) {
@@ -241,19 +270,19 @@ angular.mock.$ExceptionHandlerProvider = function() {
case 'rethrow':
var errors = [];
handler = function(e) {
- if (arguments.length == 1) {
+ if (arguments.length === 1) {
errors.push(e);
} else {
errors.push([].slice.call(arguments, 0));
}
- if (mode === "rethrow") {
+ if (mode === 'rethrow') {
throw e;
}
};
handler.errors = errors;
break;
default:
- throw new Error("Unknown mode '" + mode + "', only 'log'/'rethrow' modes are allowed!");
+ throw new Error('Unknown mode \'' + mode + '\', only \'log\'/\'rethrow\' modes are allowed!');
}
};
@@ -403,8 +432,8 @@ angular.mock.$LogProvider = function() {
});
});
if (errors.length) {
- errors.unshift("Expected $log to be empty! Either a message was logged unexpectedly, or " +
- "an expected log message was not checked and removed:");
+ errors.unshift('Expected $log to be empty! Either a message was logged unexpectedly, or ' +
+ 'an expected log message was not checked and removed:');
errors.push('');
throw new Error(errors.join('\n---------\n'));
}
@@ -452,7 +481,7 @@ angular.mock.$IntervalProvider = function() {
promise = deferred.promise;
count = (angular.isDefined(count)) ? count : 0;
- promise.then(null, null, (!hasParams) ? fn : function() {
+ promise.then(null, function() {}, (!hasParams) ? fn : function() {
fn.apply(null, args);
});
@@ -482,8 +511,8 @@ angular.mock.$IntervalProvider = function() {
}
repeatFns.push({
- nextTime:(now + delay),
- delay: delay,
+ nextTime: (now + (delay || 0)),
+ delay: delay || 1,
fn: tick,
id: nextRepeatId,
deferred: deferred
@@ -512,6 +541,7 @@ angular.mock.$IntervalProvider = function() {
});
if (angular.isDefined(fnIndex)) {
+ repeatFns[fnIndex].deferred.promise.then(undefined, function() {});
repeatFns[fnIndex].deferred.reject('canceled');
repeatFns.splice(fnIndex, 1);
return true;
@@ -532,10 +562,16 @@ angular.mock.$IntervalProvider = function() {
* @return {number} The amount of time moved forward.
*/
$interval.flush = function(millis) {
+ var before = now;
now += millis;
while (repeatFns.length && repeatFns[0].nextTime <= now) {
var task = repeatFns[0];
task.fn();
+ if (task.nextTime === before) {
+ // this can only happen the first time
+ // a zero-delay interval gets triggered
+ task.nextTime++;
+ }
task.nextTime += task.delay;
repeatFns.sort(function(a, b) { return a.nextTime - b.nextTime;});
}
@@ -547,16 +583,13 @@ angular.mock.$IntervalProvider = function() {
};
-/* jshint -W101 */
-/* The R_ISO8061_STR regex is never going to fit into the 100 char limit!
- * This directive should go inside the anonymous function but a bug in JSHint means that it would
- * not be enacted early enough to prevent the warning.
- */
-var R_ISO8061_STR = /^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?:\:?(\d\d)(?:\:?(\d\d)(?:\.(\d{3}))?)?)?(Z|([+-])(\d\d):?(\d\d)))?$/;
-
function jsonStringToDate(string) {
+ // The R_ISO8061_STR regex is never going to fit into the 100 char limit!
+ // eslit-disable-next-line max-len
+ var R_ISO8061_STR = /^(-?\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d{3}))?)?)?(Z|([+-])(\d\d):?(\d\d)))?$/;
+
var match;
- if (match = string.match(R_ISO8061_STR)) {
+ if ((match = string.match(R_ISO8061_STR))) {
var date = new Date(0),
tzHour = 0,
tzMin = 0;
@@ -578,7 +611,7 @@ function toInt(str) {
return parseInt(str, 10);
}
-function padNumber(num, digits, trim) {
+function padNumberInMock(num, digits, trim) {
var neg = '';
if (num < 0) {
neg = '-';
@@ -639,9 +672,10 @@ angular.mock.TzDate = function(offset, timestamp) {
timestamp = self.origDate.getTime();
if (isNaN(timestamp)) {
+ // eslint-disable-next-line no-throw-literal
throw {
- name: "Illegal Argument",
- message: "Arg '" + tsStr + "' passed into TzDate constructor is not a valid date string"
+ name: 'Illegal Argument',
+ message: 'Arg \'' + tsStr + '\' passed into TzDate constructor is not a valid date string'
};
}
} else {
@@ -727,13 +761,13 @@ angular.mock.TzDate = function(offset, timestamp) {
// provide this method only on browsers that already have it
if (self.toISOString) {
self.toISOString = function() {
- return padNumber(self.origDate.getUTCFullYear(), 4) + '-' +
- padNumber(self.origDate.getUTCMonth() + 1, 2) + '-' +
- padNumber(self.origDate.getUTCDate(), 2) + 'T' +
- padNumber(self.origDate.getUTCHours(), 2) + ':' +
- padNumber(self.origDate.getUTCMinutes(), 2) + ':' +
- padNumber(self.origDate.getUTCSeconds(), 2) + '.' +
- padNumber(self.origDate.getUTCMilliseconds(), 3) + 'Z';
+ return padNumberInMock(self.origDate.getUTCFullYear(), 4) + '-' +
+ padNumberInMock(self.origDate.getUTCMonth() + 1, 2) + '-' +
+ padNumberInMock(self.origDate.getUTCDate(), 2) + 'T' +
+ padNumberInMock(self.origDate.getUTCHours(), 2) + ':' +
+ padNumberInMock(self.origDate.getUTCMinutes(), 2) + ':' +
+ padNumberInMock(self.origDate.getUTCSeconds(), 2) + '.' +
+ padNumberInMock(self.origDate.getUTCMilliseconds(), 3) + 'Z';
};
}
@@ -747,7 +781,7 @@ angular.mock.TzDate = function(offset, timestamp) {
angular.forEach(unimplementedMethods, function(methodName) {
self[methodName] = function() {
- throw new Error("Method '" + methodName + "' is not implemented in the TzDate mock");
+ throw new Error('Method \'' + methodName + '\' is not implemented in the TzDate mock');
};
});
@@ -756,7 +790,6 @@ angular.mock.TzDate = function(offset, timestamp) {
//make "tzDateInstance instanceof Date" return true
angular.mock.TzDate.prototype = Date.prototype;
-/* jshint +W101 */
/**
@@ -766,8 +799,11 @@ angular.mock.TzDate.prototype = Date.prototype;
* @description
* Mock implementation of the {@link ng.$animate `$animate`} service. Exposes two additional methods
* for testing animations.
+ *
+ * You need to require the `ngAnimateMock` module in your test suite for instance `beforeEach(module('ngAnimateMock'))`
*/
angular.mock.animate = angular.module('ngAnimateMock', ['ng'])
+ .info({ angularVersion: '1.6.5' })
.config(['$provide', function($provide) {
@@ -931,13 +967,10 @@ angular.mock.animate = angular.module('ngAnimateMock', ['ng'])
* @name angular.mock.dump
* @description
*
- * *NOTE*: this is not an injectable instance, just a globally available function.
- *
- * Method for serializing common angular objects (scope, elements, etc..) into strings, useful for
- * debugging.
+ * *NOTE*: This is not an injectable instance, just a globally available function.
*
- * This method is also available on window, where it can be used to display objects on debug
- * console.
+ * Method for serializing common angular objects (scope, elements, etc..) into strings.
+ * It is useful for logging objects to the console when debugging.
*
* @param {*} object - any object to turn into string.
* @return {string} a serialized string of the argument
@@ -1003,8 +1036,10 @@ angular.mock.dump = function(object) {
* Fake HTTP backend implementation suitable for unit testing applications that use the
* {@link ng.$http $http service}.
*
- * *Note*: For fake HTTP backend implementation suitable for end-to-end testing or backend-less
+ * <div class="alert alert-info">
+ * **Note**: For fake HTTP backend implementation suitable for end-to-end testing or backend-less
* development please see {@link ngMockE2E.$httpBackend e2e $httpBackend mock}.
+ * </div>
*
* During unit testing, we want our unit tests to run quickly and have no external dependencies so
* we don’t want to send [XHR](https://developer.mozilla.org/en/xmlhttprequest) or
@@ -1028,7 +1063,7 @@ angular.mock.dump = function(object) {
* - `$httpBackend.when` - specifies a backend definition
*
*
- * # Request Expectations vs Backend Definitions
+ * ## Request Expectations vs Backend Definitions
*
* Request expectations provide a way to make assertions about requests made by the application and
* to define responses for those requests. The test will fail if the expected requests are not made
@@ -1084,7 +1119,7 @@ angular.mock.dump = function(object) {
* the request. The response from the first matched definition is returned.
*
*
- * # Flushing HTTP requests
+ * ## Flushing HTTP requests
*
* The $httpBackend used in production always responds to requests asynchronously. If we preserved
* this behavior in unit testing, we'd have to create async unit tests, which are hard to write,
@@ -1094,7 +1129,7 @@ angular.mock.dump = function(object) {
* the async api of the backend, while allowing the test to execute synchronously.
*
*
- * # Unit testing with mock $httpBackend
+ * ## Unit testing with mock $httpBackend
* The following code shows how to setup and use the mock backend when unit testing a controller.
* First we create the controller under test:
*
@@ -1108,18 +1143,20 @@ angular.mock.dump = function(object) {
function MyController($scope, $http) {
var authToken;
- $http.get('/auth.py').success(function(data, status, headers) {
- authToken = headers('A-Token');
- $scope.user = data;
+ $http.get('/auth.py').then(function(response) {
+ authToken = response.headers('A-Token');
+ $scope.user = response.data;
+ }).catch(function() {
+ $scope.status = 'Failed...';
});
$scope.saveMessage = function(message) {
var headers = { 'Authorization': authToken };
$scope.status = 'Saving...';
- $http.post('/add-msg.py', message, { headers: headers } ).success(function(response) {
+ $http.post('/add-msg.py', message, { headers: headers } ).then(function(response) {
$scope.status = '';
- }).error(function() {
+ }).catch(function() {
$scope.status = 'Failed...';
});
};
@@ -1203,18 +1240,97 @@ angular.mock.dump = function(object) {
$httpBackend.expectPOST('/add-msg.py', undefined, function(headers) {
// check if the header was sent, if it wasn't the expectation won't
// match the request and the test will fail
- return headers['Authorization'] == 'xxx';
+ return headers['Authorization'] === 'xxx';
}).respond(201, '');
$rootScope.saveMessage('whatever');
$httpBackend.flush();
});
});
- ```
+ ```
+ *
+ * ## Dynamic responses
+ *
+ * You define a response to a request by chaining a call to `respond()` onto a definition or expectation.
+ * If you provide a **callback** as the first parameter to `respond(callback)` then you can dynamically generate
+ * a response based on the properties of the request.
+ *
+ * The `callback` function should be of the form `function(method, url, data, headers, params)`.
+ *
+ * ### Query parameters
+ *
+ * By default, query parameters on request URLs are parsed into the `params` object. So a request URL
+ * of `/list?q=searchstr&orderby=-name` would set `params` to be `{q: 'searchstr', orderby: '-name'}`.
+ *
+ * ### Regex parameter matching
+ *
+ * If an expectation or definition uses a **regex** to match the URL, you can provide an array of **keys** via a
+ * `params` argument. The index of each **key** in the array will match the index of a **group** in the
+ * **regex**.
+ *
+ * The `params` object in the **callback** will now have properties with these keys, which hold the value of the
+ * corresponding **group** in the **regex**.
+ *
+ * This also applies to the `when` and `expect` shortcut methods.
+ *
+ *
+ * ```js
+ * $httpBackend.expect('GET', /\/user\/(.+)/, undefined, undefined, ['id'])
+ * .respond(function(method, url, data, headers, params) {
+ * // for requested url of '/user/1234' params is {id: '1234'}
+ * });
+ *
+ * $httpBackend.whenPATCH(/\/user\/(.+)\/article\/(.+)/, undefined, undefined, ['user', 'article'])
+ * .respond(function(method, url, data, headers, params) {
+ * // for url of '/user/1234/article/567' params is {user: '1234', article: '567'}
+ * });
+ * ```
+ *
+ * ## Matching route requests
+ *
+ * For extra convenience, `whenRoute` and `expectRoute` shortcuts are available. These methods offer colon
+ * delimited matching of the url path, ignoring the query string. This allows declarations
+ * similar to how application routes are configured with `$routeProvider`. Because these methods convert
+ * the definition url to regex, declaration order is important. Combined with query parameter parsing,
+ * the following is possible:
+ *
+ ```js
+ $httpBackend.whenRoute('GET', '/users/:id')
+ .respond(function(method, url, data, headers, params) {
+ return [200, MockUserList[Number(params.id)]];
+ });
+
+ $httpBackend.whenRoute('GET', '/users')
+ .respond(function(method, url, data, headers, params) {
+ var userList = angular.copy(MockUserList),
+ defaultSort = 'lastName',
+ count, pages, isPrevious, isNext;
+
+ // paged api response '/v1/users?page=2'
+ params.page = Number(params.page) || 1;
+
+ // query for last names '/v1/users?q=Archer'
+ if (params.q) {
+ userList = $filter('filter')({lastName: params.q});
+ }
+
+ pages = Math.ceil(userList.length / pagingLength);
+ isPrevious = params.page > 1;
+ isNext = params.page < pages;
+
+ return [200, {
+ count: userList.length,
+ previous: isPrevious,
+ next: isNext,
+ // sort field -> '/v1/users?sortBy=firstName'
+ results: $filter('orderBy')(userList, params.sortBy || defaultSort)
+ .splice((params.page - 1) * pagingLength, pagingLength)
+ }];
+ });
+ ```
*/
-angular.mock.$HttpBackendProvider = function() {
- this.$get = ['$rootScope', '$timeout', createHttpBackendMock];
-};
+angular.mock.$httpBackendDecorator =
+ ['$rootScope', '$timeout', '$delegate', createHttpBackendMock];
/**
* General factory function for $httpBackend mock.
@@ -1235,7 +1351,10 @@ function createHttpBackendMock($rootScope, $timeout, $delegate, $browser) {
expectations = [],
responses = [],
responsesPush = angular.bind(responses, responses.push),
- copy = angular.copy;
+ copy = angular.copy,
+ // We cache the original backend so that if both ngMock and ngMockE2E override the
+ // service the ngMockE2E version can pass through to the real backend
+ originalHttpBackend = $delegate.$$originalHttpBackend || $delegate;
function createResponse(status, data, headers, statusText) {
if (angular.isFunction(status)) return status;
@@ -1248,12 +1367,15 @@ function createHttpBackendMock($rootScope, $timeout, $delegate, $browser) {
}
// TODO(vojta): change params to: method, url, data, headers, callback
- function $httpBackend(method, url, data, callback, headers, timeout, withCredentials, responseType) {
+ function $httpBackend(method, url, data, callback, headers, timeout, withCredentials, responseType, eventHandlers, uploadEventHandlers) {
var xhr = new MockXhr(),
expectation = expectations[0],
wasExpected = false;
+ xhr.$$events = eventHandlers;
+ xhr.upload.$$events = uploadEventHandlers;
+
function prettyPrint(data) {
return (angular.isString(data) || angular.isFunction(data) || data instanceof RegExp)
? data
@@ -1262,13 +1384,18 @@ function createHttpBackendMock($rootScope, $timeout, $delegate, $browser) {
function wrapResponse(wrapped) {
if (!$browser && timeout) {
- timeout.then ? timeout.then(handleTimeout) : $timeout(handleTimeout, timeout);
+ if (timeout.then) {
+ timeout.then(handleTimeout);
+ } else {
+ $timeout(handleTimeout, timeout);
+ }
}
+ handleResponse.description = method + ' ' + url;
return handleResponse;
function handleResponse() {
- var response = wrapped.response(method, url, data, headers);
+ var response = wrapped.response(method, url, data, headers, wrapped.params(url));
xhr.$$respHeaders = response[2];
callback(copy(response[0]), copy(response[1]), xhr.getAllResponseHeaders(),
copy(response[3] || ''));
@@ -1313,7 +1440,7 @@ function createHttpBackendMock($rootScope, $timeout, $delegate, $browser) {
// if $browser specified, we do auto flush all requests
($browser ? $browser.defer : responsesPush)(wrapResponse(definition));
} else if (definition.passThrough) {
- $delegate(method, url, data, callback, headers, timeout, withCredentials, responseType);
+ originalHttpBackend(method, url, data, callback, headers, timeout, withCredentials, responseType, eventHandlers, uploadEventHandlers);
} else throw new Error('No response defined !');
return;
}
@@ -1331,26 +1458,32 @@ function createHttpBackendMock($rootScope, $timeout, $delegate, $browser) {
* Creates a new backend definition.
*
* @param {string} method HTTP method.
- * @param {string|RegExp|function(string)} url HTTP url or function that receives a url
+ * @param {string|RegExp|function(string)=} url HTTP url or function that receives a url
* and returns true if the url matches the current definition.
* @param {(string|RegExp|function(string))=} data HTTP request body or function that receives
* data string and returns true if the data is as expected.
* @param {(Object|function(Object))=} headers HTTP headers or function that receives http header
* object and returns true if the headers match the current definition.
+ * @param {(Array)=} keys Array of keys to assign to regex matches in request url described above.
* @returns {requestHandler} Returns an object with `respond` method that controls how a matched
* request is handled. You can save this object for later use and invoke `respond` again in
* order to change how a matched request is handled.
*
* - respond –
- * `{function([status,] data[, headers, statusText])
- * | function(function(method, url, data, headers)}`
+ * ```js
+ * {function([status,] data[, headers, statusText])
+ * | function(function(method, url, data, headers, params)}
+ * ```
* – The respond method takes a set of static data to be returned or a function that can
- * return an array containing response status (number), response data (string), response
- * headers (Object), and the text for the status (string). The respond method returns the
- * `requestHandler` object for possible overrides.
+ * return an array containing response status (number), response data (Array|Object|string),
+ * response headers (Object), and the text for the status (string). The respond method returns
+ * the `requestHandler` object for possible overrides.
*/
- $httpBackend.when = function(method, url, data, headers) {
- var definition = new MockHttpExpectation(method, url, data, headers),
+ $httpBackend.when = function(method, url, data, headers, keys) {
+
+ assertArgDefined(arguments, 1, 'url');
+
+ var definition = new MockHttpExpectation(method, url, data, headers, keys),
chain = {
respond: function(status, data, headers, statusText) {
definition.passThrough = undefined;
@@ -1377,9 +1510,10 @@ function createHttpBackendMock($rootScope, $timeout, $delegate, $browser) {
* @description
* Creates a new backend definition for GET requests. For more info see `when()`.
*
- * @param {string|RegExp|function(string)} url HTTP url or function that receives a url
+ * @param {string|RegExp|function(string)=} url HTTP url or function that receives a url
* and returns true if the url matches the current definition.
* @param {(Object|function(Object))=} headers HTTP headers.
+ * @param {(Array)=} keys Array of keys to assign to regex matches in request url described above.
* @returns {requestHandler} Returns an object with `respond` method that controls how a matched
* request is handled. You can save this object for later use and invoke `respond` again in
* order to change how a matched request is handled.
@@ -1391,9 +1525,10 @@ function createHttpBackendMock($rootScope, $timeout, $delegate, $browser) {
* @description
* Creates a new backend definition for HEAD requests. For more info see `when()`.
*
- * @param {string|RegExp|function(string)} url HTTP url or function that receives a url
+ * @param {string|RegExp|function(string)=} url HTTP url or function that receives a url
* and returns true if the url matches the current definition.
* @param {(Object|function(Object))=} headers HTTP headers.
+ * @param {(Array)=} keys Array of keys to assign to regex matches in request url described above.
* @returns {requestHandler} Returns an object with `respond` method that controls how a matched
* request is handled. You can save this object for later use and invoke `respond` again in
* order to change how a matched request is handled.
@@ -1405,9 +1540,10 @@ function createHttpBackendMock($rootScope, $timeout, $delegate, $browser) {
* @description
* Creates a new backend definition for DELETE requests. For more info see `when()`.
*
- * @param {string|RegExp|function(string)} url HTTP url or function that receives a url
+ * @param {string|RegExp|function(string)=} url HTTP url or function that receives a url
* and returns true if the url matches the current definition.
* @param {(Object|function(Object))=} headers HTTP headers.
+ * @param {(Array)=} keys Array of keys to assign to regex matches in request url described above.
* @returns {requestHandler} Returns an object with `respond` method that controls how a matched
* request is handled. You can save this object for later use and invoke `respond` again in
* order to change how a matched request is handled.
@@ -1419,11 +1555,12 @@ function createHttpBackendMock($rootScope, $timeout, $delegate, $browser) {
* @description
* Creates a new backend definition for POST requests. For more info see `when()`.
*
- * @param {string|RegExp|function(string)} url HTTP url or function that receives a url
+ * @param {string|RegExp|function(string)=} url HTTP url or function that receives a url
* and returns true if the url matches the current definition.
* @param {(string|RegExp|function(string))=} data HTTP request body or function that receives
* data string and returns true if the data is as expected.
* @param {(Object|function(Object))=} headers HTTP headers.
+ * @param {(Array)=} keys Array of keys to assign to regex matches in request url described above.
* @returns {requestHandler} Returns an object with `respond` method that controls how a matched
* request is handled. You can save this object for later use and invoke `respond` again in
* order to change how a matched request is handled.
@@ -1435,11 +1572,12 @@ function createHttpBackendMock($rootScope, $timeout, $delegate, $browser) {
* @description
* Creates a new backend definition for PUT requests. For more info see `when()`.
*
- * @param {string|RegExp|function(string)} url HTTP url or function that receives a url
+ * @param {string|RegExp|function(string)=} url HTTP url or function that receives a url
* and returns true if the url matches the current definition.
* @param {(string|RegExp|function(string))=} data HTTP request body or function that receives
* data string and returns true if the data is as expected.
* @param {(Object|function(Object))=} headers HTTP headers.
+ * @param {(Array)=} keys Array of keys to assign to regex matches in request url described above.
* @returns {requestHandler} Returns an object with `respond` method that controls how a matched
* request is handled. You can save this object for later use and invoke `respond` again in
* order to change how a matched request is handled.
@@ -1451,14 +1589,61 @@ function createHttpBackendMock($rootScope, $timeout, $delegate, $browser) {
* @description
* Creates a new backend definition for JSONP requests. For more info see `when()`.
*
- * @param {string|RegExp|function(string)} url HTTP url or function that receives a url
+ * @param {string|RegExp|function(string)=} url HTTP url or function that receives a url
* and returns true if the url matches the current definition.
+ * @param {(Array)=} keys Array of keys to assign to regex matches in request url described above.
* @returns {requestHandler} Returns an object with `respond` method that controls how a matched
* request is handled. You can save this object for later use and invoke `respond` again in
* order to change how a matched request is handled.
*/
createShortMethods('when');
+ /**
+ * @ngdoc method
+ * @name $httpBackend#whenRoute
+ * @description
+ * Creates a new backend definition that compares only with the requested route.
+ *
+ * @param {string} method HTTP method.
+ * @param {string} url HTTP url string that supports colon param matching.
+ * @returns {requestHandler} Returns an object with `respond` method that controls how a matched
+ * request is handled. You can save this object for later use and invoke `respond` again in
+ * order to change how a matched request is handled. See #when for more info.
+ */
+ $httpBackend.whenRoute = function(method, url) {
+ var pathObj = parseRoute(url);
+ return $httpBackend.when(method, pathObj.regexp, undefined, undefined, pathObj.keys);
+ };
+
+ function parseRoute(url) {
+ var ret = {
+ regexp: url
+ },
+ keys = ret.keys = [];
+
+ if (!url || !angular.isString(url)) return ret;
+
+ url = url
+ .replace(/([().])/g, '\\$1')
+ .replace(/(\/)?:(\w+)([?*])?/g, function(_, slash, key, option) {
+ var optional = option === '?' ? option : null;
+ var star = option === '*' ? option : null;
+ keys.push({ name: key, optional: !!optional });
+ slash = slash || '';
+ return ''
+ + (optional ? '' : slash)
+ + '(?:'
+ + (optional ? slash : '')
+ + (star && '(.+?)' || '([^/]+)')
+ + (optional || '')
+ + ')'
+ + (optional || '');
+ })
+ .replace(/([/$*])/g, '\\$1');
+
+ ret.regexp = new RegExp('^' + url, 'i');
+ return ret;
+ }
/**
* @ngdoc method
@@ -1467,27 +1652,33 @@ function createHttpBackendMock($rootScope, $timeout, $delegate, $browser) {
* Creates a new request expectation.
*
* @param {string} method HTTP method.
- * @param {string|RegExp|function(string)} url HTTP url or function that receives a url
+ * @param {string|RegExp|function(string)=} url HTTP url or function that receives a url
* and returns true if the url matches the current definition.
* @param {(string|RegExp|function(string)|Object)=} data HTTP request body or function that
* receives data string and returns true if the data is as expected, or Object if request body
* is in JSON format.
* @param {(Object|function(Object))=} headers HTTP headers or function that receives http header
* object and returns true if the headers match the current expectation.
+ * @param {(Array)=} keys Array of keys to assign to regex matches in request url described above.
* @returns {requestHandler} Returns an object with `respond` method that controls how a matched
* request is handled. You can save this object for later use and invoke `respond` again in
* order to change how a matched request is handled.
*
* - respond –
- * `{function([status,] data[, headers, statusText])
- * | function(function(method, url, data, headers)}`
+ * ```
+ * { function([status,] data[, headers, statusText])
+ * | function(function(method, url, data, headers, params)}
+ * ```
* – The respond method takes a set of static data to be returned or a function that can
- * return an array containing response status (number), response data (string), response
- * headers (Object), and the text for the status (string). The respond method returns the
- * `requestHandler` object for possible overrides.
+ * return an array containing response status (number), response data (Array|Object|string),
+ * response headers (Object), and the text for the status (string). The respond method returns
+ * the `requestHandler` object for possible overrides.
*/
- $httpBackend.expect = function(method, url, data, headers) {
- var expectation = new MockHttpExpectation(method, url, data, headers),
+ $httpBackend.expect = function(method, url, data, headers, keys) {
+
+ assertArgDefined(arguments, 1, 'url');
+
+ var expectation = new MockHttpExpectation(method, url, data, headers, keys),
chain = {
respond: function(status, data, headers, statusText) {
expectation.response = createResponse(status, data, headers, statusText);
@@ -1499,16 +1690,16 @@ function createHttpBackendMock($rootScope, $timeout, $delegate, $browser) {
return chain;
};
-
/**
* @ngdoc method
* @name $httpBackend#expectGET
* @description
* Creates a new request expectation for GET requests. For more info see `expect()`.
*
- * @param {string|RegExp|function(string)} url HTTP url or function that receives a url
+ * @param {string|RegExp|function(string)=} url HTTP url or function that receives a url
* and returns true if the url matches the current definition.
* @param {Object=} headers HTTP headers.
+ * @param {(Array)=} keys Array of keys to assign to regex matches in request url described above.
* @returns {requestHandler} Returns an object with `respond` method that controls how a matched
* request is handled. You can save this object for later use and invoke `respond` again in
* order to change how a matched request is handled. See #expect for more info.
@@ -1520,9 +1711,10 @@ function createHttpBackendMock($rootScope, $timeout, $delegate, $browser) {
* @description
* Creates a new request expectation for HEAD requests. For more info see `expect()`.
*
- * @param {string|RegExp|function(string)} url HTTP url or function that receives a url
+ * @param {string|RegExp|function(string)=} url HTTP url or function that receives a url
* and returns true if the url matches the current definition.
* @param {Object=} headers HTTP headers.
+ * @param {(Array)=} keys Array of keys to assign to regex matches in request url described above.
* @returns {requestHandler} Returns an object with `respond` method that controls how a matched
* request is handled. You can save this object for later use and invoke `respond` again in
* order to change how a matched request is handled.
@@ -1534,9 +1726,10 @@ function createHttpBackendMock($rootScope, $timeout, $delegate, $browser) {
* @description
* Creates a new request expectation for DELETE requests. For more info see `expect()`.
*
- * @param {string|RegExp|function(string)} url HTTP url or function that receives a url
+ * @param {string|RegExp|function(string)=} url HTTP url or function that receives a url
* and returns true if the url matches the current definition.
* @param {Object=} headers HTTP headers.
+ * @param {(Array)=} keys Array of keys to assign to regex matches in request url described above.
* @returns {requestHandler} Returns an object with `respond` method that controls how a matched
* request is handled. You can save this object for later use and invoke `respond` again in
* order to change how a matched request is handled.
@@ -1548,12 +1741,13 @@ function createHttpBackendMock($rootScope, $timeout, $delegate, $browser) {
* @description
* Creates a new request expectation for POST requests. For more info see `expect()`.
*
- * @param {string|RegExp|function(string)} url HTTP url or function that receives a url
+ * @param {string|RegExp|function(string)=} url HTTP url or function that receives a url
* and returns true if the url matches the current definition.
* @param {(string|RegExp|function(string)|Object)=} data HTTP request body or function that
* receives data string and returns true if the data is as expected, or Object if request body
* is in JSON format.
* @param {Object=} headers HTTP headers.
+ * @param {(Array)=} keys Array of keys to assign to regex matches in request url described above.
* @returns {requestHandler} Returns an object with `respond` method that controls how a matched
* request is handled. You can save this object for later use and invoke `respond` again in
* order to change how a matched request is handled.
@@ -1565,12 +1759,13 @@ function createHttpBackendMock($rootScope, $timeout, $delegate, $browser) {
* @description
* Creates a new request expectation for PUT requests. For more info see `expect()`.
*
- * @param {string|RegExp|function(string)} url HTTP url or function that receives a url
+ * @param {string|RegExp|function(string)=} url HTTP url or function that receives a url
* and returns true if the url matches the current definition.
* @param {(string|RegExp|function(string)|Object)=} data HTTP request body or function that
* receives data string and returns true if the data is as expected, or Object if request body
* is in JSON format.
* @param {Object=} headers HTTP headers.
+ * @param {(Array)=} keys Array of keys to assign to regex matches in request url described above.
* @returns {requestHandler} Returns an object with `respond` method that controls how a matched
* request is handled. You can save this object for later use and invoke `respond` again in
* order to change how a matched request is handled.
@@ -1582,12 +1777,13 @@ function createHttpBackendMock($rootScope, $timeout, $delegate, $browser) {
* @description
* Creates a new request expectation for PATCH requests. For more info see `expect()`.
*
- * @param {string|RegExp|function(string)} url HTTP url or function that receives a url
+ * @param {string|RegExp|function(string)=} url HTTP url or function that receives a url
* and returns true if the url matches the current definition.
* @param {(string|RegExp|function(string)|Object)=} data HTTP request body or function that
* receives data string and returns true if the data is as expected, or Object if request body
* is in JSON format.
* @param {Object=} headers HTTP headers.
+ * @param {(Array)=} keys Array of keys to assign to regex matches in request url described above.
* @returns {requestHandler} Returns an object with `respond` method that controls how a matched
* request is handled. You can save this object for later use and invoke `respond` again in
* order to change how a matched request is handled.
@@ -1599,37 +1795,65 @@ function createHttpBackendMock($rootScope, $timeout, $delegate, $browser) {
* @description
* Creates a new request expectation for JSONP requests. For more info see `expect()`.
*
- * @param {string|RegExp|function(string)} url HTTP url or function that receives an url
+ * @param {string|RegExp|function(string)=} url HTTP url or function that receives an url
* and returns true if the url matches the current definition.
+ * @param {(Array)=} keys Array of keys to assign to regex matches in request url described above.
* @returns {requestHandler} Returns an object with `respond` method that controls how a matched
* request is handled. You can save this object for later use and invoke `respond` again in
* order to change how a matched request is handled.
*/
createShortMethods('expect');
+ /**
+ * @ngdoc method
+ * @name $httpBackend#expectRoute
+ * @description
+ * Creates a new request expectation that compares only with the requested route.
+ *
+ * @param {string} method HTTP method.
+ * @param {string} url HTTP url string that supports colon param matching.
+ * @returns {requestHandler} Returns an object with `respond` method that controls how a matched
+ * request is handled. You can save this object for later use and invoke `respond` again in
+ * order to change how a matched request is handled. See #expect for more info.
+ */
+ $httpBackend.expectRoute = function(method, url) {
+ var pathObj = parseRoute(url);
+ return $httpBackend.expect(method, pathObj.regexp, undefined, undefined, pathObj.keys);
+ };
+
/**
* @ngdoc method
* @name $httpBackend#flush
* @description
- * Flushes all pending requests using the trained responses.
+ * Flushes pending requests using the trained responses. Requests are flushed in the order they
+ * were made, but it is also possible to skip one or more requests (for example to have them
+ * flushed later). This is useful for simulating scenarios where responses arrive from the server
+ * in any order.
*
- * @param {number=} count Number of responses to flush (in the order they arrived). If undefined,
- * all pending requests will be flushed. If there are no pending requests when the flush method
- * is called an exception is thrown (as this typically a sign of programming error).
+ * If there are no pending requests to flush when the method is called, an exception is thrown (as
+ * this is typically a sign of programming error).
+ *
+ * @param {number=} count - Number of responses to flush. If undefined/null, all pending requests
+ * (starting after `skip`) will be flushed.
+ * @param {number=} [skip=0] - Number of pending requests to skip. For example, a value of `5`
+ * would skip the first 5 pending requests and start flushing from the 6th onwards.
*/
- $httpBackend.flush = function(count, digest) {
+ $httpBackend.flush = function(count, skip, digest) {
if (digest !== false) $rootScope.$digest();
- if (!responses.length) throw new Error('No pending request to flush !');
+
+ skip = skip || 0;
+ if (skip >= responses.length) throw new Error('No pending request to flush !');
if (angular.isDefined(count) && count !== null) {
while (count--) {
- if (!responses.length) throw new Error('No more pending request to flush !');
- responses.shift()();
+ var part = responses.splice(skip, 1);
+ if (!part.length) throw new Error('No more pending request to flush !');
+ part[0]();
}
} else {
- while (responses.length) {
- responses.shift()();
+ while (responses.length > skip) {
+ responses.splice(skip, 1)[0]();
}
}
$httpBackend.verifyNoOutstandingExpectation(digest);
@@ -1671,9 +1895,12 @@ function createHttpBackendMock($rootScope, $timeout, $delegate, $browser) {
* afterEach($httpBackend.verifyNoOutstandingRequest);
* ```
*/
- $httpBackend.verifyNoOutstandingRequest = function() {
+ $httpBackend.verifyNoOutstandingRequest = function(digest) {
+ if (digest !== false) $rootScope.$digest();
if (responses.length) {
- throw new Error('Unflushed requests: ' + responses.length);
+ var unflushedDescriptions = responses.map(function(res) { return res.description; });
+ throw new Error('Unflushed requests: ' + responses.length + '\n ' +
+ unflushedDescriptions.join('\n '));
}
};
@@ -1691,31 +1918,60 @@ function createHttpBackendMock($rootScope, $timeout, $delegate, $browser) {
responses.length = 0;
};
+ $httpBackend.$$originalHttpBackend = originalHttpBackend;
+
return $httpBackend;
function createShortMethods(prefix) {
angular.forEach(['GET', 'DELETE', 'JSONP', 'HEAD'], function(method) {
- $httpBackend[prefix + method] = function(url, headers) {
- return $httpBackend[prefix](method, url, undefined, headers);
+ $httpBackend[prefix + method] = function(url, headers, keys) {
+ assertArgDefined(arguments, 0, 'url');
+
+ // Change url to `null` if `undefined` to stop it throwing an exception further down
+ if (angular.isUndefined(url)) url = null;
+
+ return $httpBackend[prefix](method, url, undefined, headers, keys);
};
});
angular.forEach(['PUT', 'POST', 'PATCH'], function(method) {
- $httpBackend[prefix + method] = function(url, data, headers) {
- return $httpBackend[prefix](method, url, data, headers);
+ $httpBackend[prefix + method] = function(url, data, headers, keys) {
+ assertArgDefined(arguments, 0, 'url');
+
+ // Change url to `null` if `undefined` to stop it throwing an exception further down
+ if (angular.isUndefined(url)) url = null;
+
+ return $httpBackend[prefix](method, url, data, headers, keys);
};
});
}
}
-function MockHttpExpectation(method, url, data, headers) {
+function assertArgDefined(args, index, name) {
+ if (args.length > index && angular.isUndefined(args[index])) {
+ throw new Error('Undefined argument `' + name + '`; the argument is provided but not defined');
+ }
+}
+
+
+function MockHttpExpectation(method, url, data, headers, keys) {
+
+ function getUrlParams(u) {
+ var params = u.slice(u.indexOf('?') + 1).split('&');
+ return params.sort();
+ }
+
+ function compareUrl(u) {
+ return (url.slice(0, url.indexOf('?')) === u.slice(0, u.indexOf('?')) &&
+ getUrlParams(url).join() === getUrlParams(u).join());
+ }
this.data = data;
this.headers = headers;
this.match = function(m, u, d, h) {
- if (method != m) return false;
+ if (method !== m) return false;
if (!this.matchUrl(u)) return false;
if (angular.isDefined(d) && !this.matchData(d)) return false;
if (angular.isDefined(h) && !this.matchHeaders(h)) return false;
@@ -1726,7 +1982,7 @@ function MockHttpExpectation(method, url, data, headers) {
if (!url) return true;
if (angular.isFunction(url.test)) return url.test(u);
if (angular.isFunction(url)) return url(u);
- return url == u;
+ return (url === u || compareUrl(u));
};
this.matchHeaders = function(h) {
@@ -1742,12 +1998,66 @@ function MockHttpExpectation(method, url, data, headers) {
if (data && !angular.isString(data)) {
return angular.equals(angular.fromJson(angular.toJson(data)), angular.fromJson(d));
}
+ // eslint-disable-next-line eqeqeq
return data == d;
};
this.toString = function() {
return method + ' ' + url;
};
+
+ this.params = function(u) {
+ return angular.extend(parseQuery(), pathParams());
+
+ function pathParams() {
+ var keyObj = {};
+ if (!url || !angular.isFunction(url.test) || !keys || keys.length === 0) return keyObj;
+
+ var m = url.exec(u);
+ if (!m) return keyObj;
+ for (var i = 1, len = m.length; i < len; ++i) {
+ var key = keys[i - 1];
+ var val = m[i];
+ if (key && val) {
+ keyObj[key.name || key] = val;
+ }
+ }
+
+ return keyObj;
+ }
+
+ function parseQuery() {
+ var obj = {}, key_value, key,
+ queryStr = u.indexOf('?') > -1
+ ? u.substring(u.indexOf('?') + 1)
+ : '';
+
+ angular.forEach(queryStr.split('&'), function(keyValue) {
+ if (keyValue) {
+ key_value = keyValue.replace(/\+/g,'%20').split('=');
+ key = tryDecodeURIComponent(key_value[0]);
+ if (angular.isDefined(key)) {
+ var val = angular.isDefined(key_value[1]) ? tryDecodeURIComponent(key_value[1]) : true;
+ if (!hasOwnProperty.call(obj, key)) {
+ obj[key] = val;
+ } else if (angular.isArray(obj[key])) {
+ obj[key].push(val);
+ } else {
+ obj[key] = [obj[key],val];
+ }
+ }
+ }
+ });
+ return obj;
+ }
+ function tryDecodeURIComponent(value) {
+ try {
+ return decodeURIComponent(value);
+ } catch (e) {
+ // Ignore any invalid uri component
+ }
+ }
+ };
}
function createMockXhr() {
@@ -1787,7 +2097,7 @@ function MockXhr() {
header = undefined;
angular.forEach(this.$$respHeaders, function(headerVal, headerName) {
- if (!header && angular.lowercase(headerName) == name) header = headerVal;
+ if (!header && angular.lowercase(headerName) === name) header = headerVal;
});
return header;
};
@@ -1802,6 +2112,20 @@ function MockXhr() {
};
this.abort = angular.noop;
+
+ // This section simulates the events on a real XHR object (and the upload object)
+ // When we are testing $httpBackend (inside the angular project) we make partial use of this
+ // but store the events directly ourselves on `$$events`, instead of going through the `addEventListener`
+ this.$$events = {};
+ this.addEventListener = function(name, listener) {
+ if (angular.isUndefined(this.$$events[name])) this.$$events[name] = [];
+ this.$$events[name].push(listener);
+ };
+
+ this.upload = {
+ $$events: {},
+ addEventListener: this.addEventListener
+ };
}
@@ -1846,7 +2170,7 @@ angular.mock.$TimeoutDecorator = ['$delegate', '$browser', function($delegate, $
function formatPendingTasksAsString(tasks) {
var result = [];
angular.forEach(tasks, function(task) {
- result.push('{id: ' + task.id + ', ' + 'time: ' + task.time + '}');
+ result.push('{id: ' + task.id + ', time: ' + task.time + '}');
});
return result.join(', ');
@@ -1886,10 +2210,12 @@ angular.mock.$RAFDecorator = ['$delegate', function($delegate) {
/**
*
*/
+var originalRootElement;
angular.mock.$RootElementProvider = function() {
- this.$get = function() {
- return angular.element('<div ng-app></div>');
- };
+ this.$get = ['$injector', function($injector) {
+ originalRootElement = angular.element('<div ng-app></div>').data('$injector', $injector);
+ return originalRootElement;
+ }];
};
/**
@@ -1899,6 +2225,10 @@ angular.mock.$RootElementProvider = function() {
* A decorator for {@link ng.$controller} with additional `bindings` parameter, useful when testing
* controllers of directives that use {@link $compile#-bindtocontroller- `bindToController`}.
*
+ * Depending on the value of
+ * {@link ng.$compileProvider#preAssignBindingsEnabled `preAssignBindingsEnabled()`}, the properties
+ * will be bound before or after invoking the constructor.
+ *
*
* ## Example
*
@@ -1917,18 +2247,24 @@ angular.mock.$RootElementProvider = function() {
* // Controller definition ...
*
* myMod.controller('MyDirectiveController', ['$log', function($log) {
- * $log.info(this.name);
+ * this.log = function() {
+ * $log.info(this.name);
+ * };
* }]);
*
*
* // In a test ...
*
* describe('myDirectiveController', function() {
- * it('should write the bound name to the log', inject(function($controller, $log) {
- * var ctrl = $controller('MyDirectiveController', { /* no locals &#42;/ }, { name: 'Clark Kent' });
- * expect(ctrl.name).toEqual('Clark Kent');
- * expect($log.info.logs).toEqual(['Clark Kent']);
- * }));
+ * describe('log()', function() {
+ * it('should write the bound name to the log', inject(function($controller, $log) {
+ * var ctrl = $controller('MyDirectiveController', { /* no locals &#42;/ }, { name: 'Clark Kent' });
+ * ctrl.log();
+ *
+ * expect(ctrl.name).toEqual('Clark Kent');
+ * expect($log.info.logs).toEqual(['Clark Kent']);
+ * }));
+ * });
* });
*
* ```
@@ -1940,26 +2276,94 @@ angular.mock.$RootElementProvider = function() {
* * check if a controller with given name is registered via `$controllerProvider`
* * check if evaluating the string on the current scope returns a constructor
* * if $controllerProvider#allowGlobals, check `window[constructor]` on the global
- * `window` object (not recommended)
+ * `window` object (deprecated, not recommended)
*
* The string can use the `controller as property` syntax, where the controller instance is published
* as the specified property on the `scope`; the `scope` must be injected into `locals` param for this
* to work correctly.
*
* @param {Object} locals Injection locals for Controller.
+ * @param {Object=} bindings Properties to add to the controller instance. This is used to simulate
+ * the `bindToController` feature and simplify certain kinds of tests.
+ * @return {Object} Instance of given controller.
+ */
+function createControllerDecorator(compileProvider) {
+ angular.mock.$ControllerDecorator = ['$delegate', function($delegate) {
+ return function(expression, locals, later, ident) {
+ if (later && typeof later === 'object') {
+ var preAssignBindingsEnabled = compileProvider.preAssignBindingsEnabled();
+
+ var instantiate = $delegate(expression, locals, true, ident);
+ if (preAssignBindingsEnabled) {
+ angular.extend(instantiate.instance, later);
+ }
+
+ var instance = instantiate();
+ if (!preAssignBindingsEnabled || instance !== instantiate.instance) {
+ angular.extend(instance, later);
+ }
+
+ return instance;
+ }
+ return $delegate(expression, locals, later, ident);
+ };
+ }];
+
+ return angular.mock.$ControllerDecorator;
+}
+
+/**
+ * @ngdoc service
+ * @name $componentController
+ * @description
+ * A service that can be used to create instances of component controllers. Useful for unit-testing.
+ *
+ * Be aware that the controller will be instantiated and attached to the scope as specified in
+ * the component definition object. If you do not provide a `$scope` object in the `locals` param
+ * then the helper will create a new isolated scope as a child of `$rootScope`.
+ *
+ * If you are using `$element` or `$attrs` in the controller, make sure to provide them as `locals`.
+ * The `$element` must be a jqLite-wrapped DOM element, and `$attrs` should be an object that
+ * has all properties / functions that you are using in the controller. If this is getting too complex,
+ * you should compile the component instead and access the component's controller via the
+ * {@link angular.element#methods `controller`} function.
+ *
+ * See also the section on {@link guide/component#unit-testing-component-controllers unit-testing component controllers}
+ * in the guide.
+ *
+ * @param {string} componentName the name of the component whose controller we want to instantiate
+ * @param {Object} locals Injection locals for Controller.
* @param {Object=} bindings Properties to add to the controller before invoking the constructor. This is used
* to simulate the `bindToController` feature and simplify certain kinds of tests.
- * @return {Object} Instance of given controller.
+ * @param {string=} ident Override the property name to use when attaching the controller to the scope.
+ * @return {Object} Instance of requested controller.
*/
-angular.mock.$ControllerDecorator = ['$delegate', function($delegate) {
- return function(expression, locals, later, ident) {
- if (later && typeof later === 'object') {
- var create = $delegate(expression, locals, true, ident);
- angular.extend(create.instance, later);
- return create();
- }
- return $delegate(expression, locals, later, ident);
- };
+angular.mock.$ComponentControllerProvider = ['$compileProvider',
+ function ComponentControllerProvider($compileProvider) {
+ this.$get = ['$controller','$injector', '$rootScope', function($controller, $injector, $rootScope) {
+ return function $componentController(componentName, locals, bindings, ident) {
+ // get all directives associated to the component name
+ var directives = $injector.get(componentName + 'Directive');
+ // look for those directives that are components
+ var candidateDirectives = directives.filter(function(directiveInfo) {
+ // components have controller, controllerAs and restrict:'E'
+ return directiveInfo.controller && directiveInfo.controllerAs && directiveInfo.restrict === 'E';
+ });
+ // check if valid directives found
+ if (candidateDirectives.length === 0) {
+ throw new Error('No component found');
+ }
+ if (candidateDirectives.length > 1) {
+ throw new Error('Too many components found');
+ }
+ // get the info of the component
+ var directiveInfo = candidateDirectives[0];
+ // create a scope if needed
+ locals = locals || {};
+ locals.$scope = locals.$scope || $rootScope.$new(true);
+ return $controller(directiveInfo.controller, locals, bindings, ident || directiveInfo.controllerAs);
+ };
+ }];
}];
@@ -1978,20 +2382,50 @@ angular.mock.$ControllerDecorator = ['$delegate', function($delegate) {
*
* <div doc-module-components="ngMock"></div>
*
+ * @installation
+ *
+ * First, download the file:
+ * * [Google CDN](https://developers.google.com/speed/libraries/devguide#angularjs) e.g.
+ * `"//ajax.googleapis.com/ajax/libs/angularjs/X.Y.Z/angular-mocks.js"`
+ * * [NPM](https://www.npmjs.com/) e.g. `npm install angular-mocks@X.Y.Z`
+ * * [Yarn](https://yarnpkg.com) e.g. `yarn add angular-mocks@X.Y.Z`
+ * * [Bower](http://bower.io) e.g. `bower install angular-mocks#X.Y.Z`
+ * * [code.angularjs.org](https://code.angularjs.org/) (discouraged for production use) e.g.
+ * `"//code.angularjs.org/X.Y.Z/angular-mocks.js"`
+ *
+ * where X.Y.Z is the AngularJS version you are running.
+ *
+ * Then, configure your test runner to load `angular-mocks.js` after `angular.js`.
+ * This example uses <a href="http://karma-runner.github.io/">Karma</a>:
+ *
+ * ```
+ * config.set({
+ * files: [
+ * 'build/angular.js', // and other module files you need
+ * 'build/angular-mocks.js',
+ * '<path/to/application/files>',
+ * '<path/to/spec/files>'
+ * ]
+ * });
+ * ```
+ *
+ * Including the `angular-mocks.js` file automatically adds the `ngMock` module, so your tests
+ * are ready to go!
*/
angular.module('ngMock', ['ng']).provider({
$browser: angular.mock.$BrowserProvider,
$exceptionHandler: angular.mock.$ExceptionHandlerProvider,
$log: angular.mock.$LogProvider,
$interval: angular.mock.$IntervalProvider,
- $httpBackend: angular.mock.$HttpBackendProvider,
- $rootElement: angular.mock.$RootElementProvider
-}).config(['$provide', function($provide) {
+ $rootElement: angular.mock.$RootElementProvider,
+ $componentController: angular.mock.$ComponentControllerProvider
+}).config(['$provide', '$compileProvider', function($provide, $compileProvider) {
$provide.decorator('$timeout', angular.mock.$TimeoutDecorator);
$provide.decorator('$$rAF', angular.mock.$RAFDecorator);
$provide.decorator('$rootScope', angular.mock.$RootScopeDecorator);
- $provide.decorator('$controller', angular.mock.$ControllerDecorator);
-}]);
+ $provide.decorator('$controller', createControllerDecorator($compileProvider));
+ $provide.decorator('$httpBackend', angular.mock.$httpBackendDecorator);
+}]).info({ angularVersion: '1.6.5' });
/**
* @ngdoc module
@@ -2006,7 +2440,7 @@ angular.module('ngMock', ['ng']).provider({
*/
angular.module('ngMockE2E', ['ng']).config(['$provide', function($provide) {
$provide.decorator('$httpBackend', angular.mock.e2e.$httpBackendDecorator);
-}]);
+}]).info({ angularVersion: '1.6.5' });
/**
* @ngdoc service
@@ -2016,8 +2450,10 @@ angular.module('ngMockE2E', ['ng']).config(['$provide', function($provide) {
* Fake HTTP backend implementation suitable for end-to-end testing or backend-less development of
* applications that use the {@link ng.$http $http service}.
*
- * *Note*: For fake http backend implementation suitable for unit testing please see
+ * <div class="alert alert-info">
+ * **Note**: For fake http backend implementation suitable for unit testing please see
* {@link ngMock.$httpBackend unit-testing $httpBackend mock}.
+ * </div>
*
* This implementation can be used to respond with static or dynamic responses via the `when` api
* and its shortcuts (`whenGET`, `whenPOST`, etc) and optionally pass through requests to the
@@ -2038,9 +2474,9 @@ angular.module('ngMockE2E', ['ng']).config(['$provide', function($provide) {
* on the `ngMockE2E` and your application modules and defines the fake backend:
*
* ```js
- * myAppDev = angular.module('myAppDev', ['myApp', 'ngMockE2E']);
+ * var myAppDev = angular.module('myAppDev', ['myApp', 'ngMockE2E']);
* myAppDev.run(function($httpBackend) {
- * phones = [{name: 'phone1'}, {name: 'phone2'}];
+ * var phones = [{name: 'phone1'}, {name: 'phone2'}];
*
* // returns the current list of phones
* $httpBackend.whenGET('/phones').respond(phones);
@@ -2051,12 +2487,74 @@ angular.module('ngMockE2E', ['ng']).config(['$provide', function($provide) {
* phones.push(phone);
* return [200, phone, {}];
* });
- * $httpBackend.whenGET(/^\/templates\//).passThrough();
+ * $httpBackend.whenGET(/^\/templates\//).passThrough(); // Requests for templates are handled by the real server
* //...
* });
* ```
*
* Afterwards, bootstrap your app with this new module.
+ *
+ * ## Example
+ * <example name="httpbackend-e2e-testing" module="myAppE2E" deps="angular-mocks.js">
+ * <file name="app.js">
+ * var myApp = angular.module('myApp', []);
+ *
+ * myApp.controller('MainCtrl', function MainCtrl($http) {
+ * var ctrl = this;
+ *
+ * ctrl.phones = [];
+ * ctrl.newPhone = {
+ * name: ''
+ * };
+ *
+ * ctrl.getPhones = function() {
+ * $http.get('/phones').then(function(response) {
+ * ctrl.phones = response.data;
+ * });
+ * };
+ *
+ * ctrl.addPhone = function(phone) {
+ * $http.post('/phones', phone).then(function() {
+ * ctrl.newPhone = {name: ''};
+ * return ctrl.getPhones();
+ * });
+ * };
+ *
+ * ctrl.getPhones();
+ * });
+ * </file>
+ * <file name="e2e.js">
+ * var myAppDev = angular.module('myAppE2E', ['myApp', 'ngMockE2E']);
+ *
+ * myAppDev.run(function($httpBackend) {
+ * var phones = [{name: 'phone1'}, {name: 'phone2'}];
+ *
+ * // returns the current list of phones
+ * $httpBackend.whenGET('/phones').respond(phones);
+ *
+ * // adds a new phone to the phones array
+ * $httpBackend.whenPOST('/phones').respond(function(method, url, data) {
+ * var phone = angular.fromJson(data);
+ * phones.push(phone);
+ * return [200, phone, {}];
+ * });
+ * });
+ * </file>
+ * <file name="index.html">
+ * <div ng-controller="MainCtrl as $ctrl">
+ * <form name="newPhoneForm" ng-submit="$ctrl.addPhone($ctrl.newPhone)">
+ * <input type="text" ng-model="$ctrl.newPhone.name">
+ * <input type="submit" value="Add Phone">
+ * </form>
+ * <h1>Phones</h1>
+ * <ul>
+ * <li ng-repeat="phone in $ctrl.phones">{{phone.name}}</li>
+ * </ul>
+ * </div>
+ * </file>
+ * </example>
+ *
+ *
*/
/**
@@ -2067,21 +2565,26 @@ angular.module('ngMockE2E', ['ng']).config(['$provide', function($provide) {
* Creates a new backend definition.
*
* @param {string} method HTTP method.
- * @param {string|RegExp|function(string)} url HTTP url or function that receives a url
+ * @param {string|RegExp|function(string)=} url HTTP url or function that receives a url
* and returns true if the url matches the current definition.
- * @param {(string|RegExp)=} data HTTP request body.
+ * @param {(string|RegExp|function(string))=} data HTTP request body or function that receives
+ * data string and returns true if the data is as expected.
* @param {(Object|function(Object))=} headers HTTP headers or function that receives http header
* object and returns true if the headers match the current definition.
+ * @param {(Array)=} keys Array of keys to assign to regex matches in request url described on
+ * {@link ngMock.$httpBackend $httpBackend mock}.
* @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that
* control how a matched request is handled. You can save this object for later use and invoke
* `respond` or `passThrough` again in order to change how a matched request is handled.
*
* - respond –
- * `{function([status,] data[, headers, statusText])
- * | function(function(method, url, data, headers)}`
+ * ```
+ * { function([status,] data[, headers, statusText])
+ * | function(function(method, url, data, headers, params)}
+ * ```
* – The respond method takes a set of static data to be returned or a function that can return
- * an array containing response status (number), response data (string), response headers
- * (Object), and the text for the status (string).
+ * an array containing response status (number), response data (Array|Object|string), response
+ * headers (Object), and the text for the status (string).
* - passThrough – `{function()}` – Any request matching a backend definition with
* `passThrough` handler will be passed through to the real backend (an XHR request will be made
* to the server.)
@@ -2095,9 +2598,11 @@ angular.module('ngMockE2E', ['ng']).config(['$provide', function($provide) {
* @description
* Creates a new backend definition for GET requests. For more info see `when()`.
*
- * @param {string|RegExp|function(string)} url HTTP url or function that receives a url
+ * @param {string|RegExp|function(string)=} url HTTP url or function that receives a url
* and returns true if the url matches the current definition.
* @param {(Object|function(Object))=} headers HTTP headers.
+ * @param {(Array)=} keys Array of keys to assign to regex matches in request url described on
+ * {@link ngMock.$httpBackend $httpBackend mock}.
* @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that
* control how a matched request is handled. You can save this object for later use and invoke
* `respond` or `passThrough` again in order to change how a matched request is handled.
@@ -2110,9 +2615,11 @@ angular.module('ngMockE2E', ['ng']).config(['$provide', function($provide) {
* @description
* Creates a new backend definition for HEAD requests. For more info see `when()`.
*
- * @param {string|RegExp|function(string)} url HTTP url or function that receives a url
+ * @param {string|RegExp|function(string)=} url HTTP url or function that receives a url
* and returns true if the url matches the current definition.
* @param {(Object|function(Object))=} headers HTTP headers.
+ * @param {(Array)=} keys Array of keys to assign to regex matches in request url described on
+ * {@link ngMock.$httpBackend $httpBackend mock}.
* @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that
* control how a matched request is handled. You can save this object for later use and invoke
* `respond` or `passThrough` again in order to change how a matched request is handled.
@@ -2125,9 +2632,11 @@ angular.module('ngMockE2E', ['ng']).config(['$provide', function($provide) {
* @description
* Creates a new backend definition for DELETE requests. For more info see `when()`.
*
- * @param {string|RegExp|function(string)} url HTTP url or function that receives a url
+ * @param {string|RegExp|function(string)=} url HTTP url or function that receives a url
* and returns true if the url matches the current definition.
* @param {(Object|function(Object))=} headers HTTP headers.
+ * @param {(Array)=} keys Array of keys to assign to regex matches in request url described on
+ * {@link ngMock.$httpBackend $httpBackend mock}.
* @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that
* control how a matched request is handled. You can save this object for later use and invoke
* `respond` or `passThrough` again in order to change how a matched request is handled.
@@ -2140,10 +2649,13 @@ angular.module('ngMockE2E', ['ng']).config(['$provide', function($provide) {
* @description
* Creates a new backend definition for POST requests. For more info see `when()`.
*
- * @param {string|RegExp|function(string)} url HTTP url or function that receives a url
+ * @param {string|RegExp|function(string)=} url HTTP url or function that receives a url
* and returns true if the url matches the current definition.
- * @param {(string|RegExp)=} data HTTP request body.
+ * @param {(string|RegExp|function(string))=} data HTTP request body or function that receives
+ * data string and returns true if the data is as expected.
* @param {(Object|function(Object))=} headers HTTP headers.
+ * @param {(Array)=} keys Array of keys to assign to regex matches in request url described on
+ * {@link ngMock.$httpBackend $httpBackend mock}.
* @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that
* control how a matched request is handled. You can save this object for later use and invoke
* `respond` or `passThrough` again in order to change how a matched request is handled.
@@ -2156,10 +2668,13 @@ angular.module('ngMockE2E', ['ng']).config(['$provide', function($provide) {
* @description
* Creates a new backend definition for PUT requests. For more info see `when()`.
*
- * @param {string|RegExp|function(string)} url HTTP url or function that receives a url
+ * @param {string|RegExp|function(string)=} url HTTP url or function that receives a url
* and returns true if the url matches the current definition.
- * @param {(string|RegExp)=} data HTTP request body.
+ * @param {(string|RegExp|function(string))=} data HTTP request body or function that receives
+ * data string and returns true if the data is as expected.
* @param {(Object|function(Object))=} headers HTTP headers.
+ * @param {(Array)=} keys Array of keys to assign to regex matches in request url described on
+ * {@link ngMock.$httpBackend $httpBackend mock}.
* @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that
* control how a matched request is handled. You can save this object for later use and invoke
* `respond` or `passThrough` again in order to change how a matched request is handled.
@@ -2172,10 +2687,13 @@ angular.module('ngMockE2E', ['ng']).config(['$provide', function($provide) {
* @description
* Creates a new backend definition for PATCH requests. For more info see `when()`.
*
- * @param {string|RegExp|function(string)} url HTTP url or function that receives a url
+ * @param {string|RegExp|function(string)=} url HTTP url or function that receives a url
* and returns true if the url matches the current definition.
- * @param {(string|RegExp)=} data HTTP request body.
+ * @param {(string|RegExp|function(string))=} data HTTP request body or function that receives
+ * data string and returns true if the data is as expected.
* @param {(Object|function(Object))=} headers HTTP headers.
+ * @param {(Array)=} keys Array of keys to assign to regex matches in request url described on
+ * {@link ngMock.$httpBackend $httpBackend mock}.
* @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that
* control how a matched request is handled. You can save this object for later use and invoke
* `respond` or `passThrough` again in order to change how a matched request is handled.
@@ -2188,8 +2706,23 @@ angular.module('ngMockE2E', ['ng']).config(['$provide', function($provide) {
* @description
* Creates a new backend definition for JSONP requests. For more info see `when()`.
*
- * @param {string|RegExp|function(string)} url HTTP url or function that receives a url
+ * @param {string|RegExp|function(string)=} url HTTP url or function that receives a url
* and returns true if the url matches the current definition.
+ * @param {(Array)=} keys Array of keys to assign to regex matches in request url described on
+ * {@link ngMock.$httpBackend $httpBackend mock}.
+ * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that
+ * control how a matched request is handled. You can save this object for later use and invoke
+ * `respond` or `passThrough` again in order to change how a matched request is handled.
+ */
+/**
+ * @ngdoc method
+ * @name $httpBackend#whenRoute
+ * @module ngMockE2E
+ * @description
+ * Creates a new backend definition that compares only with the requested route.
+ *
+ * @param {string} method HTTP method.
+ * @param {string} url HTTP url string that supports colon param matching.
* @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that
* control how a matched request is handled. You can save this object for later use and invoke
* `respond` or `passThrough` again in order to change how a matched request is handled.
@@ -2225,6 +2758,7 @@ angular.mock.$RootScopeDecorator = ['$delegate', function($delegate) {
* @ngdoc method
* @name $rootScope.Scope#$countChildScopes
* @module ngMock
+ * @this $rootScope.Scope
* @description
* Counts all the direct and indirect child scopes of the current scope.
*
@@ -2233,7 +2767,6 @@ angular.mock.$RootScopeDecorator = ['$delegate', function($delegate) {
* @returns {number} Total number of child scopes.
*/
function countChildScopes() {
- // jshint validthis: true
var count = 0; // exclude the current scope
var pendingChildHeads = [this.$$childHead];
var currentScope;
@@ -2255,6 +2788,7 @@ angular.mock.$RootScopeDecorator = ['$delegate', function($delegate) {
/**
* @ngdoc method
* @name $rootScope.Scope#$countWatchers
+ * @this $rootScope.Scope
* @module ngMock
* @description
* Counts all the watchers of direct and indirect child scopes of the current scope.
@@ -2265,7 +2799,6 @@ angular.mock.$RootScopeDecorator = ['$delegate', function($delegate) {
* @returns {number} Total number of watchers.
*/
function countWatchers() {
- // jshint validthis: true
var count = this.$$watchers ? this.$$watchers.length : 0; // include the current scope
var pendingChildHeads = [this.$$childHead];
var currentScope;
@@ -2285,11 +2818,16 @@ angular.mock.$RootScopeDecorator = ['$delegate', function($delegate) {
}];
-if (window.jasmine || window.mocha) {
+(function(jasmineOrMocha) {
+
+ if (!jasmineOrMocha) {
+ return;
+ }
var currentSpec = null,
+ injectorState = new InjectorState(),
annotatedFunctions = [],
- isSpecRunning = function() {
+ wasInjectorCreated = function() {
return !!currentSpec;
};
@@ -2301,46 +2839,6 @@ if (window.jasmine || window.mocha) {
return angular.mock.$$annotate.apply(this, arguments);
};
-
- (window.beforeEach || window.setup)(function() {
- annotatedFunctions = [];
- currentSpec = this;
- });
-
- (window.afterEach || window.teardown)(function() {
- var injector = currentSpec.$injector;
-
- annotatedFunctions.forEach(function(fn) {
- delete fn.$inject;
- });
-
- angular.forEach(currentSpec.$modules, function(module) {
- if (module && module.$$hashKey) {
- module.$$hashKey = undefined;
- }
- });
-
- currentSpec.$injector = null;
- currentSpec.$modules = null;
- currentSpec = null;
-
- if (injector) {
- injector.get('$rootElement').off();
- }
-
- // clean up jquery's fragment cache
- angular.forEach(angular.element.fragments, function(val, key) {
- delete angular.element.fragments[key];
- });
-
- MockXhr.$$lastInstance = null;
-
- angular.forEach(angular.callbacks, function(val, key) {
- delete angular.callbacks[key];
- });
- angular.callbacks.counter = 0;
- });
-
/**
* @ngdoc function
* @name angular.mock.module
@@ -2361,30 +2859,188 @@ if (window.jasmine || window.mocha) {
* {@link auto.$provide $provide}.value, the key being the string name (or token) to associate
* with the value on the injector.
*/
- window.module = angular.mock.module = function() {
+ var module = window.module = angular.mock.module = function() {
var moduleFns = Array.prototype.slice.call(arguments, 0);
- return isSpecRunning() ? workFn() : workFn;
+ return wasInjectorCreated() ? workFn() : workFn;
/////////////////////
function workFn() {
if (currentSpec.$injector) {
throw new Error('Injector already created, can not register a module!');
} else {
- var modules = currentSpec.$modules || (currentSpec.$modules = []);
+ var fn, modules = currentSpec.$modules || (currentSpec.$modules = []);
angular.forEach(moduleFns, function(module) {
if (angular.isObject(module) && !angular.isArray(module)) {
- modules.push(function($provide) {
+ fn = ['$provide', function($provide) {
angular.forEach(module, function(value, key) {
$provide.value(key, value);
});
- });
+ }];
+ } else {
+ fn = module;
+ }
+ if (currentSpec.$providerInjector) {
+ currentSpec.$providerInjector.invoke(fn);
} else {
- modules.push(module);
+ modules.push(fn);
}
});
}
}
};
+ module.$$beforeAllHook = (window.before || window.beforeAll);
+ module.$$afterAllHook = (window.after || window.afterAll);
+
+ // purely for testing ngMock itself
+ module.$$currentSpec = function(to) {
+ if (arguments.length === 0) return to;
+ currentSpec = to;
+ };
+
+ /**
+ * @ngdoc function
+ * @name angular.mock.module.sharedInjector
+ * @description
+ *
+ * *NOTE*: This function is declared ONLY WHEN running tests with jasmine or mocha
+ *
+ * This function ensures a single injector will be used for all tests in a given describe context.
+ * This contrasts with the default behaviour where a new injector is created per test case.
+ *
+ * Use sharedInjector when you want to take advantage of Jasmine's `beforeAll()`, or mocha's
+ * `before()` methods. Call `module.sharedInjector()` before you setup any other hooks that
+ * will create (i.e call `module()`) or use (i.e call `inject()`) the injector.
+ *
+ * You cannot call `sharedInjector()` from within a context already using `sharedInjector()`.
+ *
+ * ## Example
+ *
+ * Typically beforeAll is used to make many assertions about a single operation. This can
+ * cut down test run-time as the test setup doesn't need to be re-run, and enabling focussed
+ * tests each with a single assertion.
+ *
+ * ```js
+ * describe("Deep Thought", function() {
+ *
+ * module.sharedInjector();
+ *
+ * beforeAll(module("UltimateQuestion"));
+ *
+ * beforeAll(inject(function(DeepThought) {
+ * expect(DeepThought.answer).toBeUndefined();
+ * DeepThought.generateAnswer();
+ * }));
+ *
+ * it("has calculated the answer correctly", inject(function(DeepThought) {
+ * // Because of sharedInjector, we have access to the instance of the DeepThought service
+ * // that was provided to the beforeAll() hook. Therefore we can test the generated answer
+ * expect(DeepThought.answer).toBe(42);
+ * }));
+ *
+ * it("has calculated the answer within the expected time", inject(function(DeepThought) {
+ * expect(DeepThought.runTimeMillennia).toBeLessThan(8000);
+ * }));
+ *
+ * it("has double checked the answer", inject(function(DeepThought) {
+ * expect(DeepThought.absolutelySureItIsTheRightAnswer).toBe(true);
+ * }));
+ *
+ * });
+ *
+ * ```
+ */
+ module.sharedInjector = function() {
+ if (!(module.$$beforeAllHook && module.$$afterAllHook)) {
+ throw Error('sharedInjector() cannot be used unless your test runner defines beforeAll/afterAll');
+ }
+
+ var initialized = false;
+
+ module.$$beforeAllHook(/** @this */ function() {
+ if (injectorState.shared) {
+ injectorState.sharedError = Error('sharedInjector() cannot be called inside a context that has already called sharedInjector()');
+ throw injectorState.sharedError;
+ }
+ initialized = true;
+ currentSpec = this;
+ injectorState.shared = true;
+ });
+
+ module.$$afterAllHook(function() {
+ if (initialized) {
+ injectorState = new InjectorState();
+ module.$$cleanup();
+ } else {
+ injectorState.sharedError = null;
+ }
+ });
+ };
+
+ module.$$beforeEach = function() {
+ if (injectorState.shared && currentSpec && currentSpec !== this) {
+ var state = currentSpec;
+ currentSpec = this;
+ angular.forEach(['$injector','$modules','$providerInjector', '$injectorStrict'], function(k) {
+ currentSpec[k] = state[k];
+ state[k] = null;
+ });
+ } else {
+ currentSpec = this;
+ originalRootElement = null;
+ annotatedFunctions = [];
+ }
+ };
+
+ module.$$afterEach = function() {
+ if (injectorState.cleanupAfterEach()) {
+ module.$$cleanup();
+ }
+ };
+
+ module.$$cleanup = function() {
+ var injector = currentSpec.$injector;
+
+ annotatedFunctions.forEach(function(fn) {
+ delete fn.$inject;
+ });
+
+ currentSpec.$injector = null;
+ currentSpec.$modules = null;
+ currentSpec.$providerInjector = null;
+ currentSpec = null;
+
+ if (injector) {
+ // Ensure `$rootElement` is instantiated, before checking `originalRootElement`
+ var $rootElement = injector.get('$rootElement');
+ var rootNode = $rootElement && $rootElement[0];
+ var cleanUpNodes = !originalRootElement ? [] : [originalRootElement[0]];
+ if (rootNode && (!originalRootElement || rootNode !== originalRootElement[0])) {
+ cleanUpNodes.push(rootNode);
+ }
+ angular.element.cleanData(cleanUpNodes);
+
+ // Ensure `$destroy()` is available, before calling it
+ // (a mocked `$rootScope` might not implement it (or not even be an object at all))
+ var $rootScope = injector.get('$rootScope');
+ if ($rootScope && $rootScope.$destroy) $rootScope.$destroy();
+ }
+
+ // clean up jquery's fragment cache
+ angular.forEach(angular.element.fragments, function(val, key) {
+ delete angular.element.fragments[key];
+ });
+
+ MockXhr.$$lastInstance = null;
+
+ angular.forEach(angular.callbacks, function(val, key) {
+ delete angular.callbacks[key];
+ });
+ angular.callbacks.$$counter = 0;
+ };
+
+ (window.beforeEach || window.setup)(module.$$beforeEach);
+ (window.afterEach || window.teardown)(module.$$afterEach);
+
/**
* @ngdoc function
* @name angular.mock.inject
@@ -2409,7 +3065,7 @@ if (window.jasmine || window.mocha) {
* These are ignored by the injector when the reference name is resolved.
*
* For example, the parameter `_myService_` would be resolved as the reference `myService`.
- * Since it is available in the function body as _myService_, we can then assign it to a variable
+ * Since it is available in the function body as `_myService_`, we can then assign it to a variable
* defined in an outer scope.
*
* ```
@@ -2473,7 +3129,7 @@ if (window.jasmine || window.mocha) {
- var ErrorAddingDeclarationLocationStack = function(e, errorForStack) {
+ var ErrorAddingDeclarationLocationStack = function ErrorAddingDeclarationLocationStack(e, errorForStack) {
this.message = e.message;
this.name = e.name;
if (e.line) this.line = e.line;
@@ -2482,16 +3138,25 @@ if (window.jasmine || window.mocha) {
this.stack = e.stack + '\n' + errorForStack.stack;
if (e.stackArray) this.stackArray = e.stackArray;
};
- ErrorAddingDeclarationLocationStack.prototype.toString = Error.prototype.toString;
+ ErrorAddingDeclarationLocationStack.prototype = Error.prototype;
window.inject = angular.mock.inject = function() {
var blockFns = Array.prototype.slice.call(arguments, 0);
var errorForStack = new Error('Declaration Location');
- return isSpecRunning() ? workFn.call(currentSpec) : workFn;
+ // IE10+ and PhanthomJS do not set stack trace information, until the error is thrown
+ if (!errorForStack.stack) {
+ try {
+ throw errorForStack;
+ } catch (e) { /* empty */ }
+ }
+ return wasInjectorCreated() ? WorkFn.call(currentSpec) : WorkFn;
/////////////////////
- function workFn() {
+ function WorkFn() {
var modules = currentSpec.$modules || [];
var strictDi = !!currentSpec.$injectorStrict;
+ modules.unshift(['$injector', function($injector) {
+ currentSpec.$providerInjector = $injector;
+ }]);
modules.unshift('ngMock');
modules.unshift('ng');
var injector = currentSpec.$injector;
@@ -2499,7 +3164,7 @@ if (window.jasmine || window.mocha) {
if (strictDi) {
// If strictDi is enabled, annotate the providerInjector blocks
angular.forEach(modules, function(moduleFn) {
- if (typeof moduleFn === "function") {
+ if (typeof moduleFn === 'function') {
angular.injector.$$annotate(moduleFn);
}
});
@@ -2514,9 +3179,7 @@ if (window.jasmine || window.mocha) {
injector.annotate(blockFns[i]);
}
try {
- /* jshint -W040 *//* Jasmine explicitly provides a `this` object when calling functions */
injector.invoke(blockFns[i] || angular.noop, this);
- /* jshint +W040 */
} catch (e) {
if (e.stack && errorForStack) {
throw new ErrorAddingDeclarationLocationStack(e, errorForStack);
@@ -2532,7 +3195,7 @@ if (window.jasmine || window.mocha) {
angular.mock.inject.strictDi = function(value) {
value = arguments.length ? !!value : true;
- return isSpecRunning() ? workFn() : workFn;
+ return wasInjectorCreated() ? workFn() : workFn;
function workFn() {
if (value !== currentSpec.$injectorStrict) {
@@ -2544,7 +3207,229 @@ if (window.jasmine || window.mocha) {
}
}
};
-}
+
+ function InjectorState() {
+ this.shared = false;
+ this.sharedError = null;
+
+ this.cleanupAfterEach = function() {
+ return !this.shared || this.sharedError;
+ };
+ }
+})(window.jasmine || window.mocha);
+
+'use strict';
+
+(function() {
+ /**
+ * Triggers a browser event. Attempts to choose the right event if one is
+ * not specified.
+ *
+ * @param {Object} element Either a wrapped jQuery/jqLite node or a DOMElement
+ * @param {string} eventType Optional event type
+ * @param {Object=} eventData An optional object which contains additional event data (such as x,y
+ * coordinates, keys, etc...) that are passed into the event when triggered
+ */
+ window.browserTrigger = function browserTrigger(element, eventType, eventData) {
+ if (element && !element.nodeName) element = element[0];
+ if (!element) return;
+
+ eventData = eventData || {};
+ var relatedTarget = eventData.relatedTarget || element;
+ var keys = eventData.keys;
+ var x = eventData.x;
+ var y = eventData.y;
+
+ var inputType = (element.type) ? element.type.toLowerCase() : null,
+ nodeName = element.nodeName.toLowerCase();
+ if (!eventType) {
+ eventType = {
+ 'text': 'change',
+ 'textarea': 'change',
+ 'hidden': 'change',
+ 'password': 'change',
+ 'button': 'click',
+ 'submit': 'click',
+ 'reset': 'click',
+ 'image': 'click',
+ 'checkbox': 'click',
+ 'radio': 'click',
+ 'select-one': 'change',
+ 'select-multiple': 'change',
+ '_default_': 'click'
+ }[inputType || '_default_'];
+ }
+
+ if (nodeName === 'option') {
+ element.parentNode.value = element.value;
+ element = element.parentNode;
+ eventType = 'change';
+ }
+
+ keys = keys || [];
+ function pressed(key) {
+ return keys.indexOf(key) !== -1;
+ }
+
+ var evnt;
+ if (/transitionend/.test(eventType)) {
+ if (window.WebKitTransitionEvent) {
+ evnt = new window.WebKitTransitionEvent(eventType, eventData);
+ evnt.initEvent(eventType, false, true);
+ } else {
+ try {
+ evnt = new window.TransitionEvent(eventType, eventData);
+ } catch (e) {
+ evnt = window.document.createEvent('TransitionEvent');
+ evnt.initTransitionEvent(eventType, null, null, null, eventData.elapsedTime || 0);
+ }
+ }
+ } else if (/animationend/.test(eventType)) {
+ if (window.WebKitAnimationEvent) {
+ evnt = new window.WebKitAnimationEvent(eventType, eventData);
+ evnt.initEvent(eventType, false, true);
+ } else {
+ try {
+ evnt = new window.AnimationEvent(eventType, eventData);
+ } catch (e) {
+ evnt = window.document.createEvent('AnimationEvent');
+ evnt.initAnimationEvent(eventType, null, null, null, eventData.elapsedTime || 0);
+ }
+ }
+ } else if (/touch/.test(eventType) && supportsTouchEvents()) {
+ evnt = createTouchEvent(element, eventType, x, y);
+ } else if (/key/.test(eventType)) {
+ evnt = window.document.createEvent('Events');
+ evnt.initEvent(eventType, eventData.bubbles, eventData.cancelable);
+ evnt.view = window;
+ evnt.ctrlKey = pressed('ctrl');
+ evnt.altKey = pressed('alt');
+ evnt.shiftKey = pressed('shift');
+ evnt.metaKey = pressed('meta');
+ evnt.keyCode = eventData.keyCode;
+ evnt.charCode = eventData.charCode;
+ evnt.which = eventData.which;
+ } else {
+ evnt = window.document.createEvent('MouseEvents');
+ x = x || 0;
+ y = y || 0;
+ evnt.initMouseEvent(eventType, true, true, window, 0, x, y, x, y, pressed('ctrl'),
+ pressed('alt'), pressed('shift'), pressed('meta'), 0, relatedTarget);
+ }
+
+ /* we're unable to change the timeStamp value directly so this
+ * is only here to allow for testing where the timeStamp value is
+ * read */
+ evnt.$manualTimeStamp = eventData.timeStamp;
+
+ if (!evnt) return;
+
+ var originalPreventDefault = evnt.preventDefault,
+ appWindow = element.ownerDocument.defaultView,
+ fakeProcessDefault = true,
+ finalProcessDefault,
+ angular = appWindow.angular || {};
+
+ // igor: temporary fix for https://bugzilla.mozilla.org/show_bug.cgi?id=684208
+ angular['ff-684208-preventDefault'] = false;
+ evnt.preventDefault = function() {
+ fakeProcessDefault = false;
+ return originalPreventDefault.apply(evnt, arguments);
+ };
+
+ if (!eventData.bubbles || supportsEventBubblingInDetachedTree() || isAttachedToDocument(element)) {
+ element.dispatchEvent(evnt);
+ } else {
+ triggerForPath(element, evnt);
+ }
+
+ finalProcessDefault = !(angular['ff-684208-preventDefault'] || !fakeProcessDefault);
+
+ delete angular['ff-684208-preventDefault'];
+
+ return finalProcessDefault;
+ };
+
+ function supportsTouchEvents() {
+ if ('_cached' in supportsTouchEvents) {
+ return supportsTouchEvents._cached;
+ }
+ if (!window.document.createTouch || !window.document.createTouchList) {
+ supportsTouchEvents._cached = false;
+ return false;
+ }
+ try {
+ window.document.createEvent('TouchEvent');
+ } catch (e) {
+ supportsTouchEvents._cached = false;
+ return false;
+ }
+ supportsTouchEvents._cached = true;
+ return true;
+ }
+
+ function createTouchEvent(element, eventType, x, y) {
+ var evnt = new window.Event(eventType);
+ x = x || 0;
+ y = y || 0;
+
+ var touch = window.document.createTouch(window, element, Date.now(), x, y, x, y);
+ var touches = window.document.createTouchList(touch);
+
+ evnt.touches = touches;
+
+ return evnt;
+ }
+
+ function supportsEventBubblingInDetachedTree() {
+ if ('_cached' in supportsEventBubblingInDetachedTree) {
+ return supportsEventBubblingInDetachedTree._cached;
+ }
+ supportsEventBubblingInDetachedTree._cached = false;
+ var doc = window.document;
+ if (doc) {
+ var parent = doc.createElement('div'),
+ child = parent.cloneNode();
+ parent.appendChild(child);
+ parent.addEventListener('e', function() {
+ supportsEventBubblingInDetachedTree._cached = true;
+ });
+ var evnt = window.document.createEvent('Events');
+ evnt.initEvent('e', true, true);
+ child.dispatchEvent(evnt);
+ }
+ return supportsEventBubblingInDetachedTree._cached;
+ }
+
+ function triggerForPath(element, evnt) {
+ var stop = false;
+
+ var _stopPropagation = evnt.stopPropagation;
+ evnt.stopPropagation = function() {
+ stop = true;
+ _stopPropagation.apply(evnt, arguments);
+ };
+ patchEventTargetForBubbling(evnt, element);
+ do {
+ element.dispatchEvent(evnt);
+ // eslint-disable-next-line no-unmodified-loop-condition
+ } while (!stop && (element = element.parentNode));
+ }
+
+ function patchEventTargetForBubbling(event, target) {
+ event._target = target;
+ Object.defineProperty(event, 'target', {get: function() { return this._target;}});
+ }
+
+ function isAttachedToDocument(element) {
+ while ((element = element.parentNode)) {
+ if (element === window) {
+ return true;
+ }
+ }
+ return false;
+ }
+})();
})(window, window.angular);
diff --git a/libs/bower_components/angular-mocks/bower.json b/libs/bower_components/angular-mocks/bower.json
index f23af5a8f4..da20000297 100644
--- a/libs/bower_components/angular-mocks/bower.json
+++ b/libs/bower_components/angular-mocks/bower.json
@@ -1,10 +1,10 @@
{
"name": "angular-mocks",
- "version": "1.4.10",
+ "version": "1.6.5",
"license": "MIT",
"main": "./angular-mocks.js",
"ignore": [],
"dependencies": {
- "angular": "1.4.10"
+ "angular": "1.6.5"
}
}
diff --git a/libs/bower_components/angular-mocks/package.json b/libs/bower_components/angular-mocks/package.json
index 291cf64a10..80475f4253 100644
--- a/libs/bower_components/angular-mocks/package.json
+++ b/libs/bower_components/angular-mocks/package.json
@@ -1,6 +1,6 @@
{
"name": "angular-mocks",
- "version": "1.4.10",
+ "version": "1.6.5",
"description": "AngularJS mocks for testing",
"main": "angular-mocks.js",
"scripts": {
@@ -23,5 +23,12 @@
"bugs": {
"url": "https://github.com/angular/angular.js/issues"
},
- "homepage": "http://angularjs.org"
+ "homepage": "http://angularjs.org",
+ "jspm": {
+ "shim": {
+ "angular-mocks": {
+ "deps": ["angular"]
+ }
+ }
+ }
}
diff --git a/libs/bower_components/angular-sanitize/.bower.json b/libs/bower_components/angular-sanitize/.bower.json
index f14451c53d..41d6d83641 100644
--- a/libs/bower_components/angular-sanitize/.bower.json
+++ b/libs/bower_components/angular-sanitize/.bower.json
@@ -1,20 +1,20 @@
{
"name": "angular-sanitize",
- "version": "1.4.10",
+ "version": "1.6.5",
"license": "MIT",
"main": "./angular-sanitize.js",
"ignore": [],
"dependencies": {
- "angular": "1.4.10"
+ "angular": "1.6.5"
},
"homepage": "https://github.com/angular/bower-angular-sanitize",
- "_release": "1.4.10",
+ "_release": "1.6.5",
"_resolution": {
"type": "version",
- "tag": "v1.4.10",
- "commit": "f0eb3486d1dbda959a450237e8271c914ba99b6a"
+ "tag": "v1.6.5",
+ "commit": "b3948967f3f50e6100a44034d0a2645f509beaf7"
},
"_source": "https://github.com/angular/bower-angular-sanitize.git",
- "_target": "~1.4.0",
+ "_target": "~1.6.0",
"_originalSource": "angular-sanitize"
} \ No newline at end of file
diff --git a/libs/bower_components/angular-sanitize/LICENSE.md b/libs/bower_components/angular-sanitize/LICENSE.md
new file mode 100644
index 0000000000..2c395eef1b
--- /dev/null
+++ b/libs/bower_components/angular-sanitize/LICENSE.md
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2016 Angular
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/libs/bower_components/angular-sanitize/angular-sanitize.js b/libs/bower_components/angular-sanitize/angular-sanitize.js
index 8ebce0823e..e8bdd99620 100644
--- a/libs/bower_components/angular-sanitize/angular-sanitize.js
+++ b/libs/bower_components/angular-sanitize/angular-sanitize.js
@@ -1,9 +1,9 @@
/**
- * @license AngularJS v1.4.10
- * (c) 2010-2015 Google, Inc. http://angularjs.org
+ * @license AngularJS v1.6.5
+ * (c) 2010-2017 Google, Inc. http://angularjs.org
* License: MIT
*/
-(function(window, angular, undefined) {'use strict';
+(function(window, angular) {'use strict';
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Any commits to this file should be reviewed with security in mind. *
@@ -17,6 +17,15 @@
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
var $sanitizeMinErr = angular.$$minErr('$sanitize');
+var bind;
+var extend;
+var forEach;
+var isDefined;
+var lowercase;
+var noop;
+var nodeContains;
+var htmlParser;
+var htmlSanitizeWriter;
/**
* @ngdoc module
@@ -33,42 +42,29 @@ var $sanitizeMinErr = angular.$$minErr('$sanitize');
* See {@link ngSanitize.$sanitize `$sanitize`} for usage.
*/
-/*
- * HTML Parser By Misko Hevery (misko@hevery.com)
- * based on: HTML Parser By John Resig (ejohn.org)
- * Original code by Erik Arvidsson, Mozilla Public License
- * http://erik.eae.net/simplehtmlparser/simplehtmlparser.js
- *
- * // Use like so:
- * htmlParser(htmlString, {
- * start: function(tag, attrs, unary) {},
- * end: function(tag) {},
- * chars: function(text) {},
- * comment: function(text) {}
- * });
- *
- */
-
-
/**
* @ngdoc service
* @name $sanitize
* @kind function
*
* @description
+ * Sanitizes an html string by stripping all potentially dangerous tokens.
+ *
* The input is sanitized by parsing the HTML into tokens. All safe tokens (from a whitelist) are
* then serialized back to properly escaped html string. This means that no unsafe input can make
- * it into the returned string, however, since our parser is more strict than a typical browser
- * parser, it's possible that some obscure input, which would be recognized as valid HTML by a
- * browser, won't make it through the sanitizer. The input may also contain SVG markup.
- * The whitelist is configured using the functions `aHrefSanitizationWhitelist` and
- * `imgSrcSanitizationWhitelist` of {@link ng.$compileProvider `$compileProvider`}.
+ * it into the returned string.
+ *
+ * The whitelist for URL sanitization of attribute values is configured using the functions
+ * `aHrefSanitizationWhitelist` and `imgSrcSanitizationWhitelist` of {@link ng.$compileProvider
+ * `$compileProvider`}.
+ *
+ * The input may also contain SVG markup if this is enabled via {@link $sanitizeProvider}.
*
* @param {string} html HTML input.
* @returns {string} Sanitized HTML.
*
* @example
- <example module="sanitizeExample" deps="angular-sanitize.js">
+ <example module="sanitizeExample" deps="angular-sanitize.js" name="sanitize-service">
<file name="index.html">
<script>
angular.module('sanitizeExample', ['ngSanitize'])
@@ -117,19 +113,19 @@ var $sanitizeMinErr = angular.$$minErr('$sanitize');
</file>
<file name="protractor.js" type="protractor">
it('should sanitize the html snippet by default', function() {
- expect(element(by.css('#bind-html-with-sanitize div')).getInnerHtml()).
+ expect(element(by.css('#bind-html-with-sanitize div')).getAttribute('innerHTML')).
toBe('<p>an html\n<em>click here</em>\nsnippet</p>');
});
it('should inline raw snippet if bound to a trusted value', function() {
- expect(element(by.css('#bind-html-with-trust div')).getInnerHtml()).
+ expect(element(by.css('#bind-html-with-trust div')).getAttribute('innerHTML')).
toBe("<p style=\"color:blue\">an html\n" +
"<em onmouseover=\"this.textContent='PWN3D!'\">click here</em>\n" +
"snippet</p>");
});
it('should escape snippet without any filter', function() {
- expect(element(by.css('#bind-default div')).getInnerHtml()).
+ expect(element(by.css('#bind-default div')).getAttribute('innerHTML')).
toBe("&lt;p style=\"color:blue\"&gt;an html\n" +
"&lt;em onmouseover=\"this.textContent='PWN3D!'\"&gt;click here&lt;/em&gt;\n" +
"snippet&lt;/p&gt;");
@@ -138,396 +134,477 @@ var $sanitizeMinErr = angular.$$minErr('$sanitize');
it('should update', function() {
element(by.model('snippet')).clear();
element(by.model('snippet')).sendKeys('new <b onclick="alert(1)">text</b>');
- expect(element(by.css('#bind-html-with-sanitize div')).getInnerHtml()).
+ expect(element(by.css('#bind-html-with-sanitize div')).getAttribute('innerHTML')).
toBe('new <b>text</b>');
- expect(element(by.css('#bind-html-with-trust div')).getInnerHtml()).toBe(
+ expect(element(by.css('#bind-html-with-trust div')).getAttribute('innerHTML')).toBe(
'new <b onclick="alert(1)">text</b>');
- expect(element(by.css('#bind-default div')).getInnerHtml()).toBe(
+ expect(element(by.css('#bind-default div')).getAttribute('innerHTML')).toBe(
"new &lt;b onclick=\"alert(1)\"&gt;text&lt;/b&gt;");
});
</file>
</example>
*/
+
+
+/**
+ * @ngdoc provider
+ * @name $sanitizeProvider
+ * @this
+ *
+ * @description
+ * Creates and configures {@link $sanitize} instance.
+ */
function $SanitizeProvider() {
+ var svgEnabled = false;
+
this.$get = ['$$sanitizeUri', function($$sanitizeUri) {
+ if (svgEnabled) {
+ extend(validElements, svgElements);
+ }
return function(html) {
var buf = [];
htmlParser(html, htmlSanitizeWriter(buf, function(uri, isImage) {
- return !/^unsafe/.test($$sanitizeUri(uri, isImage));
+ return !/^unsafe:/.test($$sanitizeUri(uri, isImage));
}));
return buf.join('');
};
}];
-}
-function sanitizeText(chars) {
- var buf = [];
- var writer = htmlSanitizeWriter(buf, angular.noop);
- writer.chars(chars);
- return buf.join('');
-}
-
-
-// Regular Expressions for parsing tags and attributes
-var START_TAG_REGEXP =
- /^<((?:[a-zA-Z])[\w:-]*)((?:\s+[\w:-]+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)\s*(>?)/,
- END_TAG_REGEXP = /^<\/\s*([\w:-]+)[^>]*>/,
- ATTR_REGEXP = /([\w:-]+)(?:\s*=\s*(?:(?:"((?:[^"])*)")|(?:'((?:[^'])*)')|([^>\s]+)))?/g,
- BEGIN_TAG_REGEXP = /^</,
- BEGING_END_TAGE_REGEXP = /^<\//,
- COMMENT_REGEXP = /<!--(.*?)-->/g,
- DOCTYPE_REGEXP = /<!DOCTYPE([^>]*?)>/i,
- CDATA_REGEXP = /<!\[CDATA\[(.*?)]]>/g,
- SURROGATE_PAIR_REGEXP = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g,
- // Match everything outside of normal chars and " (quote character)
- NON_ALPHANUMERIC_REGEXP = /([^\#-~| |!])/g;
-
-
-// Good source of info about elements and attributes
-// http://dev.w3.org/html5/spec/Overview.html#semantics
-// http://simon.html5.org/html-elements
-
-// Safe Void Elements - HTML5
-// http://dev.w3.org/html5/spec/Overview.html#void-elements
-var voidElements = makeMap("area,br,col,hr,img,wbr");
-
-// Elements that you can, intentionally, leave open (and which close themselves)
-// http://dev.w3.org/html5/spec/Overview.html#optional-tags
-var optionalEndTagBlockElements = makeMap("colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr"),
- optionalEndTagInlineElements = makeMap("rp,rt"),
- optionalEndTagElements = angular.extend({},
- optionalEndTagInlineElements,
- optionalEndTagBlockElements);
-
-// Safe Block Elements - HTML5
-var blockElements = angular.extend({}, optionalEndTagBlockElements, makeMap("address,article," +
- "aside,blockquote,caption,center,del,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5," +
- "h6,header,hgroup,hr,ins,map,menu,nav,ol,pre,script,section,table,ul"));
-
-// Inline Elements - HTML5
-var inlineElements = angular.extend({}, optionalEndTagInlineElements, makeMap("a,abbr,acronym,b," +
- "bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,q,ruby,rp,rt,s," +
- "samp,small,span,strike,strong,sub,sup,time,tt,u,var"));
-
-// SVG Elements
-// https://wiki.whatwg.org/wiki/Sanitization_rules#svg_Elements
-// Note: the elements animate,animateColor,animateMotion,animateTransform,set are intentionally omitted.
-// They can potentially allow for arbitrary javascript to be executed. See #11290
-var svgElements = makeMap("circle,defs,desc,ellipse,font-face,font-face-name,font-face-src,g,glyph," +
- "hkern,image,linearGradient,line,marker,metadata,missing-glyph,mpath,path,polygon,polyline," +
- "radialGradient,rect,stop,svg,switch,text,title,tspan,use");
-
-// Special Elements (can contain anything)
-var specialElements = makeMap("script,style");
-
-var validElements = angular.extend({},
- voidElements,
- blockElements,
- inlineElements,
- optionalEndTagElements,
- svgElements);
-
-//Attributes that have href and hence need to be sanitized
-var uriAttrs = makeMap("background,cite,href,longdesc,src,usemap,xlink:href");
-
-var htmlAttrs = makeMap('abbr,align,alt,axis,bgcolor,border,cellpadding,cellspacing,class,clear,' +
- 'color,cols,colspan,compact,coords,dir,face,headers,height,hreflang,hspace,' +
- 'ismap,lang,language,nohref,nowrap,rel,rev,rows,rowspan,rules,' +
- 'scope,scrolling,shape,size,span,start,summary,tabindex,target,title,type,' +
- 'valign,value,vspace,width');
-
-// SVG attributes (without "id" and "name" attributes)
-// https://wiki.whatwg.org/wiki/Sanitization_rules#svg_Attributes
-var svgAttrs = makeMap('accent-height,accumulate,additive,alphabetic,arabic-form,ascent,' +
- 'baseProfile,bbox,begin,by,calcMode,cap-height,class,color,color-rendering,content,' +
- 'cx,cy,d,dx,dy,descent,display,dur,end,fill,fill-rule,font-family,font-size,font-stretch,' +
- 'font-style,font-variant,font-weight,from,fx,fy,g1,g2,glyph-name,gradientUnits,hanging,' +
- 'height,horiz-adv-x,horiz-origin-x,ideographic,k,keyPoints,keySplines,keyTimes,lang,' +
- 'marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,mathematical,' +
- 'max,min,offset,opacity,orient,origin,overline-position,overline-thickness,panose-1,' +
- 'path,pathLength,points,preserveAspectRatio,r,refX,refY,repeatCount,repeatDur,' +
- 'requiredExtensions,requiredFeatures,restart,rotate,rx,ry,slope,stemh,stemv,stop-color,' +
- 'stop-opacity,strikethrough-position,strikethrough-thickness,stroke,stroke-dasharray,' +
- 'stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,stroke-opacity,' +
- 'stroke-width,systemLanguage,target,text-anchor,to,transform,type,u1,u2,underline-position,' +
- 'underline-thickness,unicode,unicode-range,units-per-em,values,version,viewBox,visibility,' +
- 'width,widths,x,x-height,x1,x2,xlink:actuate,xlink:arcrole,xlink:role,xlink:show,xlink:title,' +
- 'xlink:type,xml:base,xml:lang,xml:space,xmlns,xmlns:xlink,y,y1,y2,zoomAndPan', true);
-
-var validAttrs = angular.extend({},
- uriAttrs,
- svgAttrs,
- htmlAttrs);
-
-function makeMap(str, lowercaseKeys) {
- var obj = {}, items = str.split(','), i;
- for (i = 0; i < items.length; i++) {
- obj[lowercaseKeys ? angular.lowercase(items[i]) : items[i]] = true;
- }
- return obj;
-}
-
-/**
- * @example
- * htmlParser(htmlString, {
- * start: function(tag, attrs, unary) {},
- * end: function(tag) {},
- * chars: function(text) {},
- * comment: function(text) {}
- * });
- *
- * @param {string} html string
- * @param {object} handler
- */
-function htmlParser(html, handler) {
- if (typeof html !== 'string') {
- if (html === null || typeof html === 'undefined') {
- html = '';
+ /**
+ * @ngdoc method
+ * @name $sanitizeProvider#enableSvg
+ * @kind function
+ *
+ * @description
+ * Enables a subset of svg to be supported by the sanitizer.
+ *
+ * <div class="alert alert-warning">
+ * <p>By enabling this setting without taking other precautions, you might expose your
+ * application to click-hijacking attacks. In these attacks, sanitized svg elements could be positioned
+ * outside of the containing element and be rendered over other elements on the page (e.g. a login
+ * link). Such behavior can then result in phishing incidents.</p>
+ *
+ * <p>To protect against these, explicitly setup `overflow: hidden` css rule for all potential svg
+ * tags within the sanitized content:</p>
+ *
+ * <br>
+ *
+ * <pre><code>
+ * .rootOfTheIncludedContent svg {
+ * overflow: hidden !important;
+ * }
+ * </code></pre>
+ * </div>
+ *
+ * @param {boolean=} flag Enable or disable SVG support in the sanitizer.
+ * @returns {boolean|ng.$sanitizeProvider} Returns the currently configured value if called
+ * without an argument or self for chaining otherwise.
+ */
+ this.enableSvg = function(enableSvg) {
+ if (isDefined(enableSvg)) {
+ svgEnabled = enableSvg;
+ return this;
} else {
- html = '' + html;
+ return svgEnabled;
}
- }
- var index, chars, match, stack = [], last = html, text;
- stack.last = function() { return stack[stack.length - 1]; };
+ };
- while (html) {
- text = '';
- chars = true;
+ //////////////////////////////////////////////////////////////////////////////////////////////////
+ // Private stuff
+ //////////////////////////////////////////////////////////////////////////////////////////////////
- // Make sure we're not in a script or style element
- if (!stack.last() || !specialElements[stack.last()]) {
+ bind = angular.bind;
+ extend = angular.extend;
+ forEach = angular.forEach;
+ isDefined = angular.isDefined;
+ lowercase = angular.lowercase;
+ noop = angular.noop;
- // Comment
- if (html.indexOf("<!--") === 0) {
- // comments containing -- are not allowed unless they terminate the comment
- index = html.indexOf("--", 4);
+ htmlParser = htmlParserImpl;
+ htmlSanitizeWriter = htmlSanitizeWriterImpl;
- if (index >= 0 && html.lastIndexOf("-->", index) === index) {
- if (handler.comment) handler.comment(html.substring(4, index));
- html = html.substring(index + 3);
- chars = false;
- }
- // DOCTYPE
- } else if (DOCTYPE_REGEXP.test(html)) {
- match = html.match(DOCTYPE_REGEXP);
+ nodeContains = window.Node.prototype.contains || /** @this */ function(arg) {
+ // eslint-disable-next-line no-bitwise
+ return !!(this.compareDocumentPosition(arg) & 16);
+ };
- if (match) {
- html = html.replace(match[0], '');
- chars = false;
- }
- // end tag
- } else if (BEGING_END_TAGE_REGEXP.test(html)) {
- match = html.match(END_TAG_REGEXP);
-
- if (match) {
- html = html.substring(match[0].length);
- match[0].replace(END_TAG_REGEXP, parseEndTag);
- chars = false;
- }
+ // Regular Expressions for parsing tags and attributes
+ var SURROGATE_PAIR_REGEXP = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g,
+ // Match everything outside of normal chars and " (quote character)
+ NON_ALPHANUMERIC_REGEXP = /([^#-~ |!])/g;
+
+
+ // Good source of info about elements and attributes
+ // http://dev.w3.org/html5/spec/Overview.html#semantics
+ // http://simon.html5.org/html-elements
+
+ // Safe Void Elements - HTML5
+ // http://dev.w3.org/html5/spec/Overview.html#void-elements
+ var voidElements = toMap('area,br,col,hr,img,wbr');
+
+ // Elements that you can, intentionally, leave open (and which close themselves)
+ // http://dev.w3.org/html5/spec/Overview.html#optional-tags
+ var optionalEndTagBlockElements = toMap('colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr'),
+ optionalEndTagInlineElements = toMap('rp,rt'),
+ optionalEndTagElements = extend({},
+ optionalEndTagInlineElements,
+ optionalEndTagBlockElements);
+
+ // Safe Block Elements - HTML5
+ var blockElements = extend({}, optionalEndTagBlockElements, toMap('address,article,' +
+ 'aside,blockquote,caption,center,del,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,' +
+ 'h6,header,hgroup,hr,ins,map,menu,nav,ol,pre,section,table,ul'));
+
+ // Inline Elements - HTML5
+ var inlineElements = extend({}, optionalEndTagInlineElements, toMap('a,abbr,acronym,b,' +
+ 'bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,q,ruby,rp,rt,s,' +
+ 'samp,small,span,strike,strong,sub,sup,time,tt,u,var'));
+
+ // SVG Elements
+ // https://wiki.whatwg.org/wiki/Sanitization_rules#svg_Elements
+ // Note: the elements animate,animateColor,animateMotion,animateTransform,set are intentionally omitted.
+ // They can potentially allow for arbitrary javascript to be executed. See #11290
+ var svgElements = toMap('circle,defs,desc,ellipse,font-face,font-face-name,font-face-src,g,glyph,' +
+ 'hkern,image,linearGradient,line,marker,metadata,missing-glyph,mpath,path,polygon,polyline,' +
+ 'radialGradient,rect,stop,svg,switch,text,title,tspan');
+
+ // Blocked Elements (will be stripped)
+ var blockedElements = toMap('script,style');
+
+ var validElements = extend({},
+ voidElements,
+ blockElements,
+ inlineElements,
+ optionalEndTagElements);
+
+ //Attributes that have href and hence need to be sanitized
+ var uriAttrs = toMap('background,cite,href,longdesc,src,xlink:href');
+
+ var htmlAttrs = toMap('abbr,align,alt,axis,bgcolor,border,cellpadding,cellspacing,class,clear,' +
+ 'color,cols,colspan,compact,coords,dir,face,headers,height,hreflang,hspace,' +
+ 'ismap,lang,language,nohref,nowrap,rel,rev,rows,rowspan,rules,' +
+ 'scope,scrolling,shape,size,span,start,summary,tabindex,target,title,type,' +
+ 'valign,value,vspace,width');
+
+ // SVG attributes (without "id" and "name" attributes)
+ // https://wiki.whatwg.org/wiki/Sanitization_rules#svg_Attributes
+ var svgAttrs = toMap('accent-height,accumulate,additive,alphabetic,arabic-form,ascent,' +
+ 'baseProfile,bbox,begin,by,calcMode,cap-height,class,color,color-rendering,content,' +
+ 'cx,cy,d,dx,dy,descent,display,dur,end,fill,fill-rule,font-family,font-size,font-stretch,' +
+ 'font-style,font-variant,font-weight,from,fx,fy,g1,g2,glyph-name,gradientUnits,hanging,' +
+ 'height,horiz-adv-x,horiz-origin-x,ideographic,k,keyPoints,keySplines,keyTimes,lang,' +
+ 'marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,mathematical,' +
+ 'max,min,offset,opacity,orient,origin,overline-position,overline-thickness,panose-1,' +
+ 'path,pathLength,points,preserveAspectRatio,r,refX,refY,repeatCount,repeatDur,' +
+ 'requiredExtensions,requiredFeatures,restart,rotate,rx,ry,slope,stemh,stemv,stop-color,' +
+ 'stop-opacity,strikethrough-position,strikethrough-thickness,stroke,stroke-dasharray,' +
+ 'stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,stroke-opacity,' +
+ 'stroke-width,systemLanguage,target,text-anchor,to,transform,type,u1,u2,underline-position,' +
+ 'underline-thickness,unicode,unicode-range,units-per-em,values,version,viewBox,visibility,' +
+ 'width,widths,x,x-height,x1,x2,xlink:actuate,xlink:arcrole,xlink:role,xlink:show,xlink:title,' +
+ 'xlink:type,xml:base,xml:lang,xml:space,xmlns,xmlns:xlink,y,y1,y2,zoomAndPan', true);
+
+ var validAttrs = extend({},
+ uriAttrs,
+ svgAttrs,
+ htmlAttrs);
+
+ function toMap(str, lowercaseKeys) {
+ var obj = {}, items = str.split(','), i;
+ for (i = 0; i < items.length; i++) {
+ obj[lowercaseKeys ? lowercase(items[i]) : items[i]] = true;
+ }
+ return obj;
+ }
- // start tag
- } else if (BEGIN_TAG_REGEXP.test(html)) {
- match = html.match(START_TAG_REGEXP);
+ /**
+ * Create an inert document that contains the dirty HTML that needs sanitizing
+ * Depending upon browser support we use one of three strategies for doing this.
+ * Support: Safari 10.x -> XHR strategy
+ * Support: Firefox -> DomParser strategy
+ */
+ var getInertBodyElement /* function(html: string): HTMLBodyElement */ = (function(window, document) {
+ var inertDocument;
+ if (document && document.implementation) {
+ inertDocument = document.implementation.createHTMLDocument('inert');
+ } else {
+ throw $sanitizeMinErr('noinert', 'Can\'t create an inert html document');
+ }
+ var inertBodyElement = (inertDocument.documentElement || inertDocument.getDocumentElement()).querySelector('body');
- if (match) {
- // We only have a valid start-tag if there is a '>'.
- if (match[4]) {
- html = html.substring(match[0].length);
- match[0].replace(START_TAG_REGEXP, parseStartTag);
- }
- chars = false;
- } else {
- // no ending tag found --- this piece should be encoded as an entity.
- text += '<';
- html = html.substring(1);
- }
+ // Check for the Safari 10.1 bug - which allows JS to run inside the SVG G element
+ inertBodyElement.innerHTML = '<svg><g onload="this.parentNode.remove()"></g></svg>';
+ if (!inertBodyElement.querySelector('svg')) {
+ return getInertBodyElement_XHR;
+ } else {
+ // Check for the Firefox bug - which prevents the inner img JS from being sanitized
+ inertBodyElement.innerHTML = '<svg><p><style><img src="</style><img src=x onerror=alert(1)//">';
+ if (inertBodyElement.querySelector('svg img')) {
+ return getInertBodyElement_DOMParser;
+ } else {
+ return getInertBodyElement_InertDocument;
}
+ }
- if (chars) {
- index = html.indexOf("<");
-
- text += index < 0 ? html : html.substring(0, index);
- html = index < 0 ? "" : html.substring(index);
-
- if (handler.chars) handler.chars(decodeEntities(text));
+ function getInertBodyElement_XHR(html) {
+ // We add this dummy element to ensure that the rest of the content is parsed as expected
+ // e.g. leading whitespace is maintained and tags like `<meta>` do not get hoisted to the `<head>` tag.
+ html = '<remove></remove>' + html;
+ try {
+ html = encodeURI(html);
+ } catch (e) {
+ return undefined;
}
-
- } else {
- // IE versions 9 and 10 do not understand the regex '[^]', so using a workaround with [\W\w].
- html = html.replace(new RegExp("([\\W\\w]*)<\\s*\\/\\s*" + stack.last() + "[^>]*>", 'i'),
- function(all, text) {
- text = text.replace(COMMENT_REGEXP, "$1").replace(CDATA_REGEXP, "$1");
-
- if (handler.chars) handler.chars(decodeEntities(text));
-
- return "";
- });
-
- parseEndTag("", stack.last());
+ var xhr = new window.XMLHttpRequest();
+ xhr.responseType = 'document';
+ xhr.open('GET', 'data:text/html;charset=utf-8,' + html, false);
+ xhr.send(null);
+ var body = xhr.response.body;
+ body.firstChild.remove();
+ return body;
}
- if (html == last) {
- throw $sanitizeMinErr('badparse', "The sanitizer was unable to parse the following block " +
- "of html: {0}", html);
+ function getInertBodyElement_DOMParser(html) {
+ // We add this dummy element to ensure that the rest of the content is parsed as expected
+ // e.g. leading whitespace is maintained and tags like `<meta>` do not get hoisted to the `<head>` tag.
+ html = '<remove></remove>' + html;
+ try {
+ var body = new window.DOMParser().parseFromString(html, 'text/html').body;
+ body.firstChild.remove();
+ return body;
+ } catch (e) {
+ return undefined;
+ }
}
- last = html;
- }
- // Clean up any remaining tags
- parseEndTag();
+ function getInertBodyElement_InertDocument(html) {
+ inertBodyElement.innerHTML = html;
- function parseStartTag(tag, tagName, rest, unary) {
- tagName = angular.lowercase(tagName);
- if (blockElements[tagName]) {
- while (stack.last() && inlineElements[stack.last()]) {
- parseEndTag("", stack.last());
+ // Support: IE 9-11 only
+ // strip custom-namespaced attributes on IE<=11
+ if (document.documentMode) {
+ stripCustomNsAttrs(inertBodyElement);
}
- }
- if (optionalEndTagElements[tagName] && stack.last() == tagName) {
- parseEndTag("", tagName);
+ return inertBodyElement;
}
-
- unary = voidElements[tagName] || !!unary;
-
- if (!unary) {
- stack.push(tagName);
+ })(window, window.document);
+
+ /**
+ * @example
+ * htmlParser(htmlString, {
+ * start: function(tag, attrs) {},
+ * end: function(tag) {},
+ * chars: function(text) {},
+ * comment: function(text) {}
+ * });
+ *
+ * @param {string} html string
+ * @param {object} handler
+ */
+ function htmlParserImpl(html, handler) {
+ if (html === null || html === undefined) {
+ html = '';
+ } else if (typeof html !== 'string') {
+ html = '' + html;
}
- var attrs = {};
-
- rest.replace(ATTR_REGEXP,
- function(match, name, doubleQuotedValue, singleQuotedValue, unquotedValue) {
- var value = doubleQuotedValue
- || singleQuotedValue
- || unquotedValue
- || '';
+ var inertBodyElement = getInertBodyElement(html);
+ if (!inertBodyElement) return '';
- attrs[name] = decodeEntities(value);
- });
- if (handler.start) handler.start(tagName, attrs, unary);
- }
+ //mXSS protection
+ var mXSSAttempts = 5;
+ do {
+ if (mXSSAttempts === 0) {
+ throw $sanitizeMinErr('uinput', 'Failed to sanitize html because the input is unstable');
+ }
+ mXSSAttempts--;
+
+ // trigger mXSS if it is going to happen by reading and writing the innerHTML
+ html = inertBodyElement.innerHTML;
+ inertBodyElement = getInertBodyElement(html);
+ } while (html !== inertBodyElement.innerHTML);
+
+ var node = inertBodyElement.firstChild;
+ while (node) {
+ switch (node.nodeType) {
+ case 1: // ELEMENT_NODE
+ handler.start(node.nodeName.toLowerCase(), attrToMap(node.attributes));
+ break;
+ case 3: // TEXT NODE
+ handler.chars(node.textContent);
+ break;
+ }
- function parseEndTag(tag, tagName) {
- var pos = 0, i;
- tagName = angular.lowercase(tagName);
- if (tagName) {
- // Find the closest opened tag of the same type
- for (pos = stack.length - 1; pos >= 0; pos--) {
- if (stack[pos] == tagName) break;
+ var nextNode;
+ if (!(nextNode = node.firstChild)) {
+ if (node.nodeType === 1) {
+ handler.end(node.nodeName.toLowerCase());
+ }
+ nextNode = getNonDescendant('nextSibling', node);
+ if (!nextNode) {
+ while (nextNode == null) {
+ node = getNonDescendant('parentNode', node);
+ if (node === inertBodyElement) break;
+ nextNode = getNonDescendant('nextSibling', node);
+ if (node.nodeType === 1) {
+ handler.end(node.nodeName.toLowerCase());
+ }
+ }
+ }
}
+ node = nextNode;
}
- if (pos >= 0) {
- // Close all the open elements, up the stack
- for (i = stack.length - 1; i >= pos; i--)
- if (handler.end) handler.end(stack[i]);
-
- // Remove the open elements from the stack
- stack.length = pos;
+ while ((node = inertBodyElement.firstChild)) {
+ inertBodyElement.removeChild(node);
}
}
-}
-var hiddenPre=document.createElement("pre");
-/**
- * decodes all entities into regular string
- * @param value
- * @returns {string} A string with decoded entities.
- */
-function decodeEntities(value) {
- if (!value) { return ''; }
+ function attrToMap(attrs) {
+ var map = {};
+ for (var i = 0, ii = attrs.length; i < ii; i++) {
+ var attr = attrs[i];
+ map[attr.name] = attr.value;
+ }
+ return map;
+ }
- hiddenPre.innerHTML = value.replace(/</g,"&lt;");
- // innerText depends on styling as it doesn't display hidden elements.
- // Therefore, it's better to use textContent not to cause unnecessary reflows.
- return hiddenPre.textContent;
-}
-/**
- * Escapes all potentially dangerous characters, so that the
- * resulting string can be safely inserted into attribute or
- * element text.
- * @param value
- * @returns {string} escaped text
- */
-function encodeEntities(value) {
- return value.
- replace(/&/g, '&amp;').
- replace(SURROGATE_PAIR_REGEXP, function(value) {
- var hi = value.charCodeAt(0);
- var low = value.charCodeAt(1);
- return '&#' + (((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000) + ';';
- }).
- replace(NON_ALPHANUMERIC_REGEXP, function(value) {
- return '&#' + value.charCodeAt(0) + ';';
- }).
- replace(/</g, '&lt;').
- replace(/>/g, '&gt;');
-}
+ /**
+ * Escapes all potentially dangerous characters, so that the
+ * resulting string can be safely inserted into attribute or
+ * element text.
+ * @param value
+ * @returns {string} escaped text
+ */
+ function encodeEntities(value) {
+ return value.
+ replace(/&/g, '&amp;').
+ replace(SURROGATE_PAIR_REGEXP, function(value) {
+ var hi = value.charCodeAt(0);
+ var low = value.charCodeAt(1);
+ return '&#' + (((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000) + ';';
+ }).
+ replace(NON_ALPHANUMERIC_REGEXP, function(value) {
+ return '&#' + value.charCodeAt(0) + ';';
+ }).
+ replace(/</g, '&lt;').
+ replace(/>/g, '&gt;');
+ }
-/**
- * create an HTML/XML writer which writes to buffer
- * @param {Array} buf use buf.jain('') to get out sanitized html string
- * @returns {object} in the form of {
- * start: function(tag, attrs, unary) {},
- * end: function(tag) {},
- * chars: function(text) {},
- * comment: function(text) {}
- * }
- */
-function htmlSanitizeWriter(buf, uriValidator) {
- var ignore = false;
- var out = angular.bind(buf, buf.push);
- return {
- start: function(tag, attrs, unary) {
- tag = angular.lowercase(tag);
- if (!ignore && specialElements[tag]) {
- ignore = tag;
- }
- if (!ignore && validElements[tag] === true) {
- out('<');
- out(tag);
- angular.forEach(attrs, function(value, key) {
- var lkey=angular.lowercase(key);
- var isImage = (tag === 'img' && lkey === 'src') || (lkey === 'background');
- if (validAttrs[lkey] === true &&
- (uriAttrs[lkey] !== true || uriValidator(value, isImage))) {
- out(' ');
- out(key);
- out('="');
- out(encodeEntities(value));
- out('"');
- }
- });
- out(unary ? '/>' : '>');
- }
- },
- end: function(tag) {
- tag = angular.lowercase(tag);
- if (!ignore && validElements[tag] === true) {
+ /**
+ * create an HTML/XML writer which writes to buffer
+ * @param {Array} buf use buf.join('') to get out sanitized html string
+ * @returns {object} in the form of {
+ * start: function(tag, attrs) {},
+ * end: function(tag) {},
+ * chars: function(text) {},
+ * comment: function(text) {}
+ * }
+ */
+ function htmlSanitizeWriterImpl(buf, uriValidator) {
+ var ignoreCurrentElement = false;
+ var out = bind(buf, buf.push);
+ return {
+ start: function(tag, attrs) {
+ tag = lowercase(tag);
+ if (!ignoreCurrentElement && blockedElements[tag]) {
+ ignoreCurrentElement = tag;
+ }
+ if (!ignoreCurrentElement && validElements[tag] === true) {
+ out('<');
+ out(tag);
+ forEach(attrs, function(value, key) {
+ var lkey = lowercase(key);
+ var isImage = (tag === 'img' && lkey === 'src') || (lkey === 'background');
+ if (validAttrs[lkey] === true &&
+ (uriAttrs[lkey] !== true || uriValidator(value, isImage))) {
+ out(' ');
+ out(key);
+ out('="');
+ out(encodeEntities(value));
+ out('"');
+ }
+ });
+ out('>');
+ }
+ },
+ end: function(tag) {
+ tag = lowercase(tag);
+ if (!ignoreCurrentElement && validElements[tag] === true && voidElements[tag] !== true) {
out('</');
out(tag);
out('>');
}
- if (tag == ignore) {
- ignore = false;
+ // eslint-disable-next-line eqeqeq
+ if (tag == ignoreCurrentElement) {
+ ignoreCurrentElement = false;
}
},
- chars: function(chars) {
- if (!ignore) {
+ chars: function(chars) {
+ if (!ignoreCurrentElement) {
out(encodeEntities(chars));
}
}
- };
+ };
+ }
+
+
+ /**
+ * When IE9-11 comes across an unknown namespaced attribute e.g. 'xlink:foo' it adds 'xmlns:ns1' attribute to declare
+ * ns1 namespace and prefixes the attribute with 'ns1' (e.g. 'ns1:xlink:foo'). This is undesirable since we don't want
+ * to allow any of these custom attributes. This method strips them all.
+ *
+ * @param node Root element to process
+ */
+ function stripCustomNsAttrs(node) {
+ while (node) {
+ if (node.nodeType === window.Node.ELEMENT_NODE) {
+ var attrs = node.attributes;
+ for (var i = 0, l = attrs.length; i < l; i++) {
+ var attrNode = attrs[i];
+ var attrName = attrNode.name.toLowerCase();
+ if (attrName === 'xmlns:ns1' || attrName.lastIndexOf('ns1:', 0) === 0) {
+ node.removeAttributeNode(attrNode);
+ i--;
+ l--;
+ }
+ }
+ }
+
+ var nextNode = node.firstChild;
+ if (nextNode) {
+ stripCustomNsAttrs(nextNode);
+ }
+
+ node = getNonDescendant('nextSibling', node);
+ }
+ }
+
+ function getNonDescendant(propName, node) {
+ // An element is clobbered if its `propName` property points to one of its descendants
+ var nextNode = node[propName];
+ if (nextNode && nodeContains.call(node, nextNode)) {
+ throw $sanitizeMinErr('elclob', 'Failed to sanitize html because the element is clobbered: {0}', node.outerHTML || node.outerText);
+ }
+ return nextNode;
+ }
}
+function sanitizeText(chars) {
+ var buf = [];
+ var writer = htmlSanitizeWriter(buf, noop);
+ writer.chars(chars);
+ return buf.join('');
+}
-// define ngSanitize module and register $sanitize service
-angular.module('ngSanitize', []).provider('$sanitize', $SanitizeProvider);
-/* global sanitizeText: false */
+// define ngSanitize module and register $sanitize service
+angular.module('ngSanitize', [])
+ .provider('$sanitize', $SanitizeProvider)
+ .info({ angularVersion: '1.6.5' });
/**
* @ngdoc filter
@@ -535,40 +612,39 @@ angular.module('ngSanitize', []).provider('$sanitize', $SanitizeProvider);
* @kind function
*
* @description
- * Finds links in text input and turns them into html links. Supports http/https/ftp/mailto and
+ * Finds links in text input and turns them into html links. Supports `http/https/ftp/mailto` and
* plain email address links.
*
* Requires the {@link ngSanitize `ngSanitize`} module to be installed.
*
* @param {string} text Input text.
- * @param {string} target Window (_blank|_self|_parent|_top) or named frame to open links in.
- * @returns {string} Html-linkified text.
+ * @param {string} target Window (`_blank|_self|_parent|_top`) or named frame to open links in.
+ * @param {object|function(url)} [attributes] Add custom attributes to the link element.
+ *
+ * Can be one of:
+ *
+ * - `object`: A map of attributes
+ * - `function`: Takes the url as a parameter and returns a map of attributes
+ *
+ * If the map of attributes contains a value for `target`, it overrides the value of
+ * the target parameter.
+ *
+ *
+ * @returns {string} Html-linkified and {@link $sanitize sanitized} text.
*
* @usage
<span ng-bind-html="linky_expression | linky"></span>
*
* @example
- <example module="linkyExample" deps="angular-sanitize.js">
+ <example module="linkyExample" deps="angular-sanitize.js" name="linky-filter">
<file name="index.html">
- <script>
- angular.module('linkyExample', ['ngSanitize'])
- .controller('ExampleController', ['$scope', function($scope) {
- $scope.snippet =
- 'Pretty text with some links:\n'+
- 'http://angularjs.org/,\n'+
- 'mailto:us@somewhere.org,\n'+
- 'another@somewhere.org,\n'+
- 'and one more: ftp://127.0.0.1/.';
- $scope.snippetWithTarget = 'http://angularjs.org/';
- }]);
- </script>
<div ng-controller="ExampleController">
Snippet: <textarea ng-model="snippet" cols="60" rows="3"></textarea>
<table>
<tr>
- <td>Filter</td>
- <td>Source</td>
- <td>Rendered</td>
+ <th>Filter</th>
+ <th>Source</th>
+ <th>Rendered</th>
</tr>
<tr id="linky-filter">
<td>linky filter</td>
@@ -582,10 +658,19 @@ angular.module('ngSanitize', []).provider('$sanitize', $SanitizeProvider);
<tr id="linky-target">
<td>linky target</td>
<td>
- <pre>&lt;div ng-bind-html="snippetWithTarget | linky:'_blank'"&gt;<br>&lt;/div&gt;</pre>
+ <pre>&lt;div ng-bind-html="snippetWithSingleURL | linky:'_blank'"&gt;<br>&lt;/div&gt;</pre>
</td>
<td>
- <div ng-bind-html="snippetWithTarget | linky:'_blank'"></div>
+ <div ng-bind-html="snippetWithSingleURL | linky:'_blank'"></div>
+ </td>
+ </tr>
+ <tr id="linky-custom-attributes">
+ <td>linky custom attributes</td>
+ <td>
+ <pre>&lt;div ng-bind-html="snippetWithSingleURL | linky:'_self':{rel: 'nofollow'}"&gt;<br>&lt;/div&gt;</pre>
+ </td>
+ <td>
+ <div ng-bind-html="snippetWithSingleURL | linky:'_self':{rel: 'nofollow'}"></div>
</td>
</tr>
<tr id="escaped-html">
@@ -595,6 +680,18 @@ angular.module('ngSanitize', []).provider('$sanitize', $SanitizeProvider);
</tr>
</table>
</file>
+ <file name="script.js">
+ angular.module('linkyExample', ['ngSanitize'])
+ .controller('ExampleController', ['$scope', function($scope) {
+ $scope.snippet =
+ 'Pretty text with some links:\n' +
+ 'http://angularjs.org/,\n' +
+ 'mailto:us@somewhere.org,\n' +
+ 'another@somewhere.org,\n' +
+ 'and one more: ftp://127.0.0.1/.';
+ $scope.snippetWithSingleURL = 'http://angularjs.org/';
+ }]);
+ </file>
<file name="protractor.js" type="protractor">
it('should linkify the snippet with urls', function() {
expect(element(by.id('linky-filter')).element(by.binding('snippet | linky')).getText()).
@@ -622,10 +719,17 @@ angular.module('ngSanitize', []).provider('$sanitize', $SanitizeProvider);
it('should work with the target property', function() {
expect(element(by.id('linky-target')).
- element(by.binding("snippetWithTarget | linky:'_blank'")).getText()).
+ element(by.binding("snippetWithSingleURL | linky:'_blank'")).getText()).
toBe('http://angularjs.org/');
expect(element(by.css('#linky-target a')).getAttribute('target')).toEqual('_blank');
});
+
+ it('should optionally add custom attributes', function() {
+ expect(element(by.id('linky-custom-attributes')).
+ element(by.binding("snippetWithSingleURL | linky:'_self':{rel: 'nofollow'}")).getText()).
+ toBe('http://angularjs.org/');
+ expect(element(by.css('#linky-custom-attributes a')).getAttribute('rel')).toEqual('nofollow');
+ });
</file>
</example>
*/
@@ -634,8 +738,21 @@ angular.module('ngSanitize').filter('linky', ['$sanitize', function($sanitize) {
/((ftp|https?):\/\/|(www\.)|(mailto:)?[A-Za-z0-9._%+-]+@)\S*[^\s.;,(){}<>"\u201d\u2019]/i,
MAILTO_REGEXP = /^mailto:/i;
- return function(text, target) {
- if (!text) return text;
+ var linkyMinErr = angular.$$minErr('linky');
+ var isDefined = angular.isDefined;
+ var isFunction = angular.isFunction;
+ var isObject = angular.isObject;
+ var isString = angular.isString;
+
+ return function(text, target, attributes) {
+ if (text == null || text === '') return text;
+ if (!isString(text)) throw linkyMinErr('notstring', 'Expected string but received: {0}', text);
+
+ var attributesFn =
+ isFunction(attributes) ? attributes :
+ isObject(attributes) ? function getAttributesObject() {return attributes;} :
+ function getEmptyAttributesObject() {return {};};
+
var match;
var raw = text;
var html = [];
@@ -664,8 +781,14 @@ angular.module('ngSanitize').filter('linky', ['$sanitize', function($sanitize) {
}
function addLink(url, text) {
+ var key, linkAttributes = attributesFn(url);
html.push('<a ');
- if (angular.isDefined(target)) {
+
+ for (key in linkAttributes) {
+ html.push(key + '="' + linkAttributes[key] + '" ');
+ }
+
+ if (isDefined(target) && !('target' in linkAttributes)) {
html.push('target="',
target,
'" ');
diff --git a/libs/bower_components/angular-sanitize/angular-sanitize.min.js b/libs/bower_components/angular-sanitize/angular-sanitize.min.js
index 4558b97d0c..911a8bd53d 100644
--- a/libs/bower_components/angular-sanitize/angular-sanitize.min.js
+++ b/libs/bower_components/angular-sanitize/angular-sanitize.min.js
@@ -1,16 +1,17 @@
/*
- AngularJS v1.4.10
- (c) 2010-2015 Google, Inc. http://angularjs.org
+ AngularJS v1.6.5
+ (c) 2010-2017 Google, Inc. http://angularjs.org
License: MIT
*/
-(function(n,h,p){'use strict';function E(a){var f=[];r(f,h.noop).chars(a);return f.join("")}function g(a,f){var d={},c=a.split(","),b;for(b=0;b<c.length;b++)d[f?h.lowercase(c[b]):c[b]]=!0;return d}function F(a,f){function d(a,b,d,l){b=h.lowercase(b);if(s[b])for(;e.last()&&t[e.last()];)c("",e.last());u[b]&&e.last()==b&&c("",b);(l=v[b]||!!l)||e.push(b);var m={};d.replace(G,function(b,a,f,c,d){m[a]=q(f||c||d||"")});f.start&&f.start(b,m,l)}function c(b,a){var c=0,d;if(a=h.lowercase(a))for(c=e.length-
-1;0<=c&&e[c]!=a;c--);if(0<=c){for(d=e.length-1;d>=c;d--)f.end&&f.end(e[d]);e.length=c}}"string"!==typeof a&&(a=null===a||"undefined"===typeof a?"":""+a);var b,k,e=[],m=a,l;for(e.last=function(){return e[e.length-1]};a;){l="";k=!0;if(e.last()&&w[e.last()])a=a.replace(new RegExp("([\\W\\w]*)<\\s*\\/\\s*"+e.last()+"[^>]*>","i"),function(a,b){b=b.replace(H,"$1").replace(I,"$1");f.chars&&f.chars(q(b));return""}),c("",e.last());else{if(0===a.indexOf("\x3c!--"))b=a.indexOf("--",4),0<=b&&a.lastIndexOf("--\x3e",
-b)===b&&(f.comment&&f.comment(a.substring(4,b)),a=a.substring(b+3),k=!1);else if(x.test(a)){if(b=a.match(x))a=a.replace(b[0],""),k=!1}else if(J.test(a)){if(b=a.match(y))a=a.substring(b[0].length),b[0].replace(y,c),k=!1}else K.test(a)&&((b=a.match(z))?(b[4]&&(a=a.substring(b[0].length),b[0].replace(z,d)),k=!1):(l+="<",a=a.substring(1)));k&&(b=a.indexOf("<"),l+=0>b?a:a.substring(0,b),a=0>b?"":a.substring(b),f.chars&&f.chars(q(l)))}if(a==m)throw L("badparse",a);m=a}c()}function q(a){if(!a)return"";A.innerHTML=
-a.replace(/</g,"&lt;");return A.textContent}function B(a){return a.replace(/&/g,"&amp;").replace(M,function(a){var d=a.charCodeAt(0);a=a.charCodeAt(1);return"&#"+(1024*(d-55296)+(a-56320)+65536)+";"}).replace(N,function(a){return"&#"+a.charCodeAt(0)+";"}).replace(/</g,"&lt;").replace(/>/g,"&gt;")}function r(a,f){var d=!1,c=h.bind(a,a.push);return{start:function(a,k,e){a=h.lowercase(a);!d&&w[a]&&(d=a);d||!0!==C[a]||(c("<"),c(a),h.forEach(k,function(d,e){var k=h.lowercase(e),g="img"===a&&"src"===k||
-"background"===k;!0!==O[k]||!0===D[k]&&!f(d,g)||(c(" "),c(e),c('="'),c(B(d)),c('"'))}),c(e?"/>":">"))},end:function(a){a=h.lowercase(a);d||!0!==C[a]||(c("</"),c(a),c(">"));a==d&&(d=!1)},chars:function(a){d||c(B(a))}}}var L=h.$$minErr("$sanitize"),z=/^<((?:[a-zA-Z])[\w:-]*)((?:\s+[\w:-]+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)\s*(>?)/,y=/^<\/\s*([\w:-]+)[^>]*>/,G=/([\w:-]+)(?:\s*=\s*(?:(?:"((?:[^"])*)")|(?:'((?:[^'])*)')|([^>\s]+)))?/g,K=/^</,J=/^<\//,H=/\x3c!--(.*?)--\x3e/g,x=/<!DOCTYPE([^>]*?)>/i,
-I=/<!\[CDATA\[(.*?)]]\x3e/g,M=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,N=/([^\#-~| |!])/g,v=g("area,br,col,hr,img,wbr");n=g("colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr");p=g("rp,rt");var u=h.extend({},p,n),s=h.extend({},n,g("address,article,aside,blockquote,caption,center,del,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,h6,header,hgroup,hr,ins,map,menu,nav,ol,pre,script,section,table,ul")),t=h.extend({},p,g("a,abbr,acronym,b,bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,q,ruby,rp,rt,s,samp,small,span,strike,strong,sub,sup,time,tt,u,var"));
-n=g("circle,defs,desc,ellipse,font-face,font-face-name,font-face-src,g,glyph,hkern,image,linearGradient,line,marker,metadata,missing-glyph,mpath,path,polygon,polyline,radialGradient,rect,stop,svg,switch,text,title,tspan,use");var w=g("script,style"),C=h.extend({},v,s,t,u,n),D=g("background,cite,href,longdesc,src,usemap,xlink:href");n=g("abbr,align,alt,axis,bgcolor,border,cellpadding,cellspacing,class,clear,color,cols,colspan,compact,coords,dir,face,headers,height,hreflang,hspace,ismap,lang,language,nohref,nowrap,rel,rev,rows,rowspan,rules,scope,scrolling,shape,size,span,start,summary,tabindex,target,title,type,valign,value,vspace,width");
-p=g("accent-height,accumulate,additive,alphabetic,arabic-form,ascent,baseProfile,bbox,begin,by,calcMode,cap-height,class,color,color-rendering,content,cx,cy,d,dx,dy,descent,display,dur,end,fill,fill-rule,font-family,font-size,font-stretch,font-style,font-variant,font-weight,from,fx,fy,g1,g2,glyph-name,gradientUnits,hanging,height,horiz-adv-x,horiz-origin-x,ideographic,k,keyPoints,keySplines,keyTimes,lang,marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,mathematical,max,min,offset,opacity,orient,origin,overline-position,overline-thickness,panose-1,path,pathLength,points,preserveAspectRatio,r,refX,refY,repeatCount,repeatDur,requiredExtensions,requiredFeatures,restart,rotate,rx,ry,slope,stemh,stemv,stop-color,stop-opacity,strikethrough-position,strikethrough-thickness,stroke,stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,stroke-opacity,stroke-width,systemLanguage,target,text-anchor,to,transform,type,u1,u2,underline-position,underline-thickness,unicode,unicode-range,units-per-em,values,version,viewBox,visibility,width,widths,x,x-height,x1,x2,xlink:actuate,xlink:arcrole,xlink:role,xlink:show,xlink:title,xlink:type,xml:base,xml:lang,xml:space,xmlns,xmlns:xlink,y,y1,y2,zoomAndPan",
-!0);var O=h.extend({},D,p,n),A=document.createElement("pre");h.module("ngSanitize",[]).provider("$sanitize",function(){this.$get=["$$sanitizeUri",function(a){return function(f){var d=[];F(f,r(d,function(c,b){return!/^unsafe/.test(a(c,b))}));return d.join("")}}]});h.module("ngSanitize").filter("linky",["$sanitize",function(a){var f=/((ftp|https?):\/\/|(www\.)|(mailto:)?[A-Za-z0-9._%+-]+@)\S*[^\s.;,(){}<>"\u201d\u2019]/i,d=/^mailto:/i;return function(c,b){function k(a){a&&g.push(E(a))}function e(a,
-c){g.push("<a ");h.isDefined(b)&&g.push('target="',b,'" ');g.push('href="',a.replace(/"/g,"&quot;"),'">');k(c);g.push("</a>")}if(!c)return c;for(var m,l=c,g=[],n,p;m=l.match(f);)n=m[0],m[2]||m[4]||(n=(m[3]?"http://":"mailto:")+n),p=m.index,k(l.substr(0,p)),e(n,m[0].replace(d,"")),l=l.substring(p+m[0].length);k(l);return a(g.join(""))}}])})(window,window.angular);
+(function(s,d){'use strict';function J(d){var k=[];w(k,B).chars(d);return k.join("")}var x=d.$$minErr("$sanitize"),C,k,D,E,p,B,F,G,w;d.module("ngSanitize",[]).provider("$sanitize",function(){function g(a,e){var c={},b=a.split(","),f;for(f=0;f<b.length;f++)c[e?p(b[f]):b[f]]=!0;return c}function K(a){for(var e={},c=0,b=a.length;c<b;c++){var f=a[c];e[f.name]=f.value}return e}function H(a){return a.replace(/&/g,"&amp;").replace(L,function(a){var c=a.charCodeAt(0);a=a.charCodeAt(1);return"&#"+(1024*(c-
+55296)+(a-56320)+65536)+";"}).replace(M,function(a){return"&#"+a.charCodeAt(0)+";"}).replace(/</g,"&lt;").replace(/>/g,"&gt;")}function I(a){for(;a;){if(a.nodeType===s.Node.ELEMENT_NODE)for(var e=a.attributes,c=0,b=e.length;c<b;c++){var f=e[c],h=f.name.toLowerCase();if("xmlns:ns1"===h||0===h.lastIndexOf("ns1:",0))a.removeAttributeNode(f),c--,b--}(e=a.firstChild)&&I(e);a=t("nextSibling",a)}}function t(a,e){var c=e[a];if(c&&F.call(e,c))throw x("elclob",e.outerHTML||e.outerText);return c}var y=!1;this.$get=
+["$$sanitizeUri",function(a){y&&k(n,z);return function(e){var c=[];G(e,w(c,function(b,c){return!/^unsafe:/.test(a(b,c))}));return c.join("")}}];this.enableSvg=function(a){return E(a)?(y=a,this):y};C=d.bind;k=d.extend;D=d.forEach;E=d.isDefined;p=d.lowercase;B=d.noop;G=function(a,e){null===a||void 0===a?a="":"string"!==typeof a&&(a=""+a);var c=u(a);if(!c)return"";var b=5;do{if(0===b)throw x("uinput");b--;a=c.innerHTML;c=u(a)}while(a!==c.innerHTML);for(b=c.firstChild;b;){switch(b.nodeType){case 1:e.start(b.nodeName.toLowerCase(),
+K(b.attributes));break;case 3:e.chars(b.textContent)}var f;if(!(f=b.firstChild)&&(1===b.nodeType&&e.end(b.nodeName.toLowerCase()),f=t("nextSibling",b),!f))for(;null==f;){b=t("parentNode",b);if(b===c)break;f=t("nextSibling",b);1===b.nodeType&&e.end(b.nodeName.toLowerCase())}b=f}for(;b=c.firstChild;)c.removeChild(b)};w=function(a,e){var c=!1,b=C(a,a.push);return{start:function(a,h){a=p(a);!c&&A[a]&&(c=a);c||!0!==n[a]||(b("<"),b(a),D(h,function(c,h){var d=p(h),g="img"===a&&"src"===d||"background"===
+d;!0!==v[d]||!0===m[d]&&!e(c,g)||(b(" "),b(h),b('="'),b(H(c)),b('"'))}),b(">"))},end:function(a){a=p(a);c||!0!==n[a]||!0===h[a]||(b("</"),b(a),b(">"));a==c&&(c=!1)},chars:function(a){c||b(H(a))}}};F=s.Node.prototype.contains||function(a){return!!(this.compareDocumentPosition(a)&16)};var L=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,M=/([^#-~ |!])/g,h=g("area,br,col,hr,img,wbr"),q=g("colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr"),l=g("rp,rt"),r=k({},l,q),q=k({},q,g("address,article,aside,blockquote,caption,center,del,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,h6,header,hgroup,hr,ins,map,menu,nav,ol,pre,section,table,ul")),
+l=k({},l,g("a,abbr,acronym,b,bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,q,ruby,rp,rt,s,samp,small,span,strike,strong,sub,sup,time,tt,u,var")),z=g("circle,defs,desc,ellipse,font-face,font-face-name,font-face-src,g,glyph,hkern,image,linearGradient,line,marker,metadata,missing-glyph,mpath,path,polygon,polyline,radialGradient,rect,stop,svg,switch,text,title,tspan"),A=g("script,style"),n=k({},h,q,l,r),m=g("background,cite,href,longdesc,src,xlink:href"),r=g("abbr,align,alt,axis,bgcolor,border,cellpadding,cellspacing,class,clear,color,cols,colspan,compact,coords,dir,face,headers,height,hreflang,hspace,ismap,lang,language,nohref,nowrap,rel,rev,rows,rowspan,rules,scope,scrolling,shape,size,span,start,summary,tabindex,target,title,type,valign,value,vspace,width"),
+l=g("accent-height,accumulate,additive,alphabetic,arabic-form,ascent,baseProfile,bbox,begin,by,calcMode,cap-height,class,color,color-rendering,content,cx,cy,d,dx,dy,descent,display,dur,end,fill,fill-rule,font-family,font-size,font-stretch,font-style,font-variant,font-weight,from,fx,fy,g1,g2,glyph-name,gradientUnits,hanging,height,horiz-adv-x,horiz-origin-x,ideographic,k,keyPoints,keySplines,keyTimes,lang,marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,mathematical,max,min,offset,opacity,orient,origin,overline-position,overline-thickness,panose-1,path,pathLength,points,preserveAspectRatio,r,refX,refY,repeatCount,repeatDur,requiredExtensions,requiredFeatures,restart,rotate,rx,ry,slope,stemh,stemv,stop-color,stop-opacity,strikethrough-position,strikethrough-thickness,stroke,stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,stroke-opacity,stroke-width,systemLanguage,target,text-anchor,to,transform,type,u1,u2,underline-position,underline-thickness,unicode,unicode-range,units-per-em,values,version,viewBox,visibility,width,widths,x,x-height,x1,x2,xlink:actuate,xlink:arcrole,xlink:role,xlink:show,xlink:title,xlink:type,xml:base,xml:lang,xml:space,xmlns,xmlns:xlink,y,y1,y2,zoomAndPan",
+!0),v=k({},m,l,r),u=function(a,e){function c(b){b="<remove></remove>"+b;try{var c=(new a.DOMParser).parseFromString(b,"text/html").body;c.firstChild.remove();return c}catch(e){}}function b(a){d.innerHTML=a;e.documentMode&&I(d);return d}var h;if(e&&e.implementation)h=e.implementation.createHTMLDocument("inert");else throw x("noinert");var d=(h.documentElement||h.getDocumentElement()).querySelector("body");d.innerHTML='<svg><g onload="this.parentNode.remove()"></g></svg>';return d.querySelector("svg")?
+(d.innerHTML='<svg><p><style><img src="</style><img src=x onerror=alert(1)//">',d.querySelector("svg img")?c:b):function(b){b="<remove></remove>"+b;try{b=encodeURI(b)}catch(c){return}var e=new a.XMLHttpRequest;e.responseType="document";e.open("GET","data:text/html;charset=utf-8,"+b,!1);e.send(null);b=e.response.body;b.firstChild.remove();return b}}(s,s.document)}).info({angularVersion:"1.6.5"});d.module("ngSanitize").filter("linky",["$sanitize",function(g){var k=/((ftp|https?):\/\/|(www\.)|(mailto:)?[A-Za-z0-9._%+-]+@)\S*[^\s.;,(){}<>"\u201d\u2019]/i,
+p=/^mailto:/i,s=d.$$minErr("linky"),t=d.isDefined,y=d.isFunction,w=d.isObject,x=d.isString;return function(d,q,l){function r(a){a&&m.push(J(a))}function z(a,d){var c,b=A(a);m.push("<a ");for(c in b)m.push(c+'="'+b[c]+'" ');!t(q)||"target"in b||m.push('target="',q,'" ');m.push('href="',a.replace(/"/g,"&quot;"),'">');r(d);m.push("</a>")}if(null==d||""===d)return d;if(!x(d))throw s("notstring",d);for(var A=y(l)?l:w(l)?function(){return l}:function(){return{}},n=d,m=[],v,u;d=n.match(k);)v=d[0],d[2]||
+d[4]||(v=(d[3]?"http://":"mailto:")+v),u=d.index,r(n.substr(0,u)),z(v,d[0].replace(p,"")),n=n.substring(u+d[0].length);r(n);return g(m.join(""))}}])})(window,window.angular);
//# sourceMappingURL=angular-sanitize.min.js.map
diff --git a/libs/bower_components/angular-sanitize/angular-sanitize.min.js.map b/libs/bower_components/angular-sanitize/angular-sanitize.min.js.map
index 2f360f4df7..475690d12b 100644
--- a/libs/bower_components/angular-sanitize/angular-sanitize.min.js.map
+++ b/libs/bower_components/angular-sanitize/angular-sanitize.min.js.map
@@ -1,8 +1,8 @@
{
"version":3,
"file":"angular-sanitize.min.js",
-"lineCount":15,
-"mappings":"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",
+"lineCount":16,
+"mappings":"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",
"sources":["angular-sanitize.js"],
-"names":["window","angular","undefined","sanitizeText","chars","buf","htmlSanitizeWriter","writer","noop","join","makeMap","str","lowercaseKeys","obj","items","split","i","length","lowercase","htmlParser","html","handler","parseStartTag","tag","tagName","rest","unary","blockElements","stack","last","inlineElements","parseEndTag","optionalEndTagElements","voidElements","push","attrs","replace","ATTR_REGEXP","match","name","doubleQuotedValue","singleQuotedValue","unquotedValue","decodeEntities","start","pos","end","index","text","stack.last","specialElements","RegExp","all","COMMENT_REGEXP","CDATA_REGEXP","indexOf","lastIndexOf","comment","substring","DOCTYPE_REGEXP","test","BEGING_END_TAGE_REGEXP","END_TAG_REGEXP","BEGIN_TAG_REGEXP","START_TAG_REGEXP","$sanitizeMinErr","value","hiddenPre","innerHTML","textContent","encodeEntities","SURROGATE_PAIR_REGEXP","hi","charCodeAt","low","NON_ALPHANUMERIC_REGEXP","uriValidator","ignore","out","bind","validElements","forEach","key","lkey","isImage","validAttrs","uriAttrs","$$minErr","optionalEndTagBlockElements","optionalEndTagInlineElements","extend","svgElements","htmlAttrs","svgAttrs","document","createElement","module","provider","$SanitizeProvider","$get","$$sanitizeUri","uri","filter","$sanitize","LINKY_URL_REGEXP","MAILTO_REGEXP","target","addText","addLink","url","isDefined","raw","substr"]
+"names":["window","angular","sanitizeText","chars","buf","htmlSanitizeWriter","writer","noop","join","$sanitizeMinErr","$$minErr","bind","extend","forEach","isDefined","lowercase","nodeContains","htmlParser","module","provider","$SanitizeProvider","toMap","str","lowercaseKeys","obj","items","split","i","length","attrToMap","attrs","map","ii","attr","name","value","encodeEntities","replace","SURROGATE_PAIR_REGEXP","hi","charCodeAt","low","NON_ALPHANUMERIC_REGEXP","stripCustomNsAttrs","node","nodeType","Node","ELEMENT_NODE","attributes","l","attrNode","attrName","toLowerCase","lastIndexOf","removeAttributeNode","nextNode","firstChild","getNonDescendant","propName","call","outerHTML","outerText","svgEnabled","$get","$$sanitizeUri","validElements","svgElements","html","uri","isImage","test","enableSvg","this.enableSvg","htmlParserImpl","handler","undefined","inertBodyElement","getInertBodyElement","mXSSAttempts","innerHTML","start","nodeName","textContent","end","removeChild","htmlSanitizeWriterImpl","uriValidator","ignoreCurrentElement","out","push","tag","blockedElements","key","lkey","validAttrs","uriAttrs","voidElements","prototype","contains","arg","compareDocumentPosition","optionalEndTagBlockElements","optionalEndTagInlineElements","optionalEndTagElements","blockElements","inlineElements","htmlAttrs","svgAttrs","document","getInertBodyElement_DOMParser","body","parseFromString","DOMParser","remove","e","getInertBodyElement_InertDocument","documentMode","inertDocument","implementation","createHTMLDocument","querySelector","documentElement","getDocumentElement","getInertBodyElement_XHR","encodeURI","xhr","XMLHttpRequest","responseType","open","send","response","info","angularVersion","filter","$sanitize","LINKY_URL_REGEXP","MAILTO_REGEXP","linkyMinErr","isFunction","isObject","isString","text","target","addText","addLink","url","linkAttributes","attributesFn","getAttributesObject","getEmptyAttributesObject","raw","match","index","substr","substring"]
}
diff --git a/libs/bower_components/angular-sanitize/bower.json b/libs/bower_components/angular-sanitize/bower.json
index 0e5b8925a6..c024ed7d94 100644
--- a/libs/bower_components/angular-sanitize/bower.json
+++ b/libs/bower_components/angular-sanitize/bower.json
@@ -1,10 +1,10 @@
{
"name": "angular-sanitize",
- "version": "1.4.10",
+ "version": "1.6.5",
"license": "MIT",
"main": "./angular-sanitize.js",
"ignore": [],
"dependencies": {
- "angular": "1.4.10"
+ "angular": "1.6.5"
}
}
diff --git a/libs/bower_components/angular-sanitize/package.json b/libs/bower_components/angular-sanitize/package.json
index dbbaf6a265..fa5a3232af 100644
--- a/libs/bower_components/angular-sanitize/package.json
+++ b/libs/bower_components/angular-sanitize/package.json
@@ -1,6 +1,6 @@
{
"name": "angular-sanitize",
- "version": "1.4.10",
+ "version": "1.6.5",
"description": "AngularJS module for sanitizing HTML",
"main": "index.js",
"scripts": {
@@ -22,5 +22,12 @@
"bugs": {
"url": "https://github.com/angular/angular.js/issues"
},
- "homepage": "http://angularjs.org"
+ "homepage": "http://angularjs.org",
+ "jspm": {
+ "shim": {
+ "angular-sanitize": {
+ "deps": ["angular"]
+ }
+ }
+ }
}
diff --git a/libs/bower_components/angular/.bower.json b/libs/bower_components/angular/.bower.json
index ab47ec872a..6e87e04d78 100644
--- a/libs/bower_components/angular/.bower.json
+++ b/libs/bower_components/angular/.bower.json
@@ -1,18 +1,18 @@
{
"name": "angular",
- "version": "1.4.10",
+ "version": "1.6.5",
"license": "MIT",
"main": "./angular.js",
"ignore": [],
"dependencies": {},
"homepage": "https://github.com/angular/bower-angular",
- "_release": "1.4.10",
+ "_release": "1.6.5",
"_resolution": {
"type": "version",
- "tag": "v1.4.10",
- "commit": "57f5cd80e00507766e01ca75a8b42c0456219666"
+ "tag": "v1.6.5",
+ "commit": "c5accffceeee635c740434046d3b06079ea47a58"
},
"_source": "https://github.com/angular/bower-angular.git",
- "_target": "~1.4.0",
+ "_target": "~1.6.0",
"_originalSource": "angular"
} \ No newline at end of file
diff --git a/libs/bower_components/angular/LICENSE.md b/libs/bower_components/angular/LICENSE.md
new file mode 100644
index 0000000000..2c395eef1b
--- /dev/null
+++ b/libs/bower_components/angular/LICENSE.md
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2016 Angular
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/libs/bower_components/angular/angular.js b/libs/bower_components/angular/angular.js
index b992f28d40..aa2f4ce643 100644
--- a/libs/bower_components/angular/angular.js
+++ b/libs/bower_components/angular/angular.js
@@ -1,9 +1,59 @@
/**
- * @license AngularJS v1.4.10
- * (c) 2010-2015 Google, Inc. http://angularjs.org
+ * @license AngularJS v1.6.5
+ * (c) 2010-2017 Google, Inc. http://angularjs.org
* License: MIT
*/
-(function(window, document, undefined) {'use strict';
+(function(window) {'use strict';
+
+/* exported
+ minErrConfig,
+ errorHandlingConfig,
+ isValidObjectMaxDepth
+*/
+
+var minErrConfig = {
+ objectMaxDepth: 5
+};
+
+/**
+ * @ngdoc function
+ * @name angular.errorHandlingConfig
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Configure several aspects of error handling in AngularJS if used as a setter or return the
+ * current configuration if used as a getter. The following options are supported:
+ *
+ * - **objectMaxDepth**: The maximum depth to which objects are traversed when stringified for error messages.
+ *
+ * Omitted or undefined options will leave the corresponding configuration values unchanged.
+ *
+ * @param {Object=} config - The configuration object. May only contain the options that need to be
+ * updated. Supported keys:
+ *
+ * * `objectMaxDepth` **{Number}** - The max depth for stringifying objects. Setting to a
+ * non-positive or non-numeric value, removes the max depth limit.
+ * Default: 5
+ */
+function errorHandlingConfig(config) {
+ if (isObject(config)) {
+ if (isDefined(config.objectMaxDepth)) {
+ minErrConfig.objectMaxDepth = isValidObjectMaxDepth(config.objectMaxDepth) ? config.objectMaxDepth : NaN;
+ }
+ } else {
+ return minErrConfig;
+ }
+}
+
+/**
+ * @private
+ * @param {Number} maxDepth
+ * @return {boolean}
+ */
+function isValidObjectMaxDepth(maxDepth) {
+ return isNumber(maxDepth) && maxDepth > 0;
+}
/**
* @description
@@ -38,131 +88,136 @@
function minErr(module, ErrorConstructor) {
ErrorConstructor = ErrorConstructor || Error;
return function() {
- var SKIP_INDEXES = 2;
-
- var templateArgs = arguments,
- code = templateArgs[0],
+ var code = arguments[0],
+ template = arguments[1],
message = '[' + (module ? module + ':' : '') + code + '] ',
- template = templateArgs[1],
+ templateArgs = sliceArgs(arguments, 2).map(function(arg) {
+ return toDebugString(arg, minErrConfig.objectMaxDepth);
+ }),
paramPrefix, i;
message += template.replace(/\{\d+\}/g, function(match) {
- var index = +match.slice(1, -1),
- shiftedIndex = index + SKIP_INDEXES;
+ var index = +match.slice(1, -1);
- if (shiftedIndex < templateArgs.length) {
- return toDebugString(templateArgs[shiftedIndex]);
+ if (index < templateArgs.length) {
+ return templateArgs[index];
}
return match;
});
- message += '\nhttp://errors.angularjs.org/1.4.10/' +
+ message += '\nhttp://errors.angularjs.org/1.6.5/' +
(module ? module + '/' : '') + code;
- for (i = SKIP_INDEXES, paramPrefix = '?'; i < templateArgs.length; i++, paramPrefix = '&') {
- message += paramPrefix + 'p' + (i - SKIP_INDEXES) + '=' +
- encodeURIComponent(toDebugString(templateArgs[i]));
+ for (i = 0, paramPrefix = '?'; i < templateArgs.length; i++, paramPrefix = '&') {
+ message += paramPrefix + 'p' + i + '=' + encodeURIComponent(templateArgs[i]);
}
return new ErrorConstructor(message);
};
}
-/* We need to tell jshint what variables are being exported */
-/* global angular: true,
- msie: true,
- jqLite: true,
- jQuery: true,
- slice: true,
- splice: true,
- push: true,
- toString: true,
- ngMinErr: true,
- angularModule: true,
- uid: true,
- REGEX_STRING_REGEXP: true,
- VALIDITY_STATE_PROPERTY: true,
-
- lowercase: true,
- uppercase: true,
- manualLowercase: true,
- manualUppercase: true,
- nodeName_: true,
- isArrayLike: true,
- forEach: true,
- forEachSorted: true,
- reverseParams: true,
- nextUid: true,
- setHashKey: true,
- extend: true,
- toInt: true,
- inherit: true,
- merge: true,
- noop: true,
- identity: true,
- valueFn: true,
- isUndefined: true,
- isDefined: true,
- isObject: true,
- isBlankObject: true,
- isString: true,
- isNumber: true,
- isDate: true,
- isArray: true,
- isFunction: true,
- isRegExp: true,
- isWindow: true,
- isScope: true,
- isFile: true,
- isFormData: true,
- isBlob: true,
- isBoolean: true,
- isPromiseLike: true,
- trim: true,
- escapeForRegexp: true,
- isElement: true,
- makeMap: true,
- includes: true,
- arrayRemove: true,
- copy: true,
- shallowCopy: true,
- equals: true,
- csp: true,
- jq: true,
- concat: true,
- sliceArgs: true,
- bind: true,
- toJsonReplacer: true,
- toJson: true,
- fromJson: true,
- convertTimezoneToLocal: true,
- timezoneToOffset: true,
- startingTag: true,
- tryDecodeURIComponent: true,
- parseKeyValue: true,
- toKeyValue: true,
- encodeUriSegment: true,
- encodeUriQuery: true,
- angularInit: true,
- bootstrap: true,
- getTestability: true,
- snake_case: true,
- bindJQuery: true,
- assertArg: true,
- assertArgFn: true,
- assertNotHasOwnProperty: true,
- getter: true,
- getBlockNodes: true,
- hasOwnProperty: true,
- createMap: true,
-
- NODE_TYPE_ELEMENT: true,
- NODE_TYPE_ATTRIBUTE: true,
- NODE_TYPE_TEXT: true,
- NODE_TYPE_COMMENT: true,
- NODE_TYPE_DOCUMENT: true,
- NODE_TYPE_DOCUMENT_FRAGMENT: true,
+/* We need to tell ESLint what variables are being exported */
+/* exported
+ angular,
+ msie,
+ jqLite,
+ jQuery,
+ slice,
+ splice,
+ push,
+ toString,
+ minErrConfig,
+ errorHandlingConfig,
+ isValidObjectMaxDepth,
+ ngMinErr,
+ angularModule,
+ uid,
+ REGEX_STRING_REGEXP,
+ VALIDITY_STATE_PROPERTY,
+
+ lowercase,
+ uppercase,
+ manualLowercase,
+ manualUppercase,
+ nodeName_,
+ isArrayLike,
+ forEach,
+ forEachSorted,
+ reverseParams,
+ nextUid,
+ setHashKey,
+ extend,
+ toInt,
+ inherit,
+ merge,
+ noop,
+ identity,
+ valueFn,
+ isUndefined,
+ isDefined,
+ isObject,
+ isBlankObject,
+ isString,
+ isNumber,
+ isNumberNaN,
+ isDate,
+ isError,
+ isArray,
+ isFunction,
+ isRegExp,
+ isWindow,
+ isScope,
+ isFile,
+ isFormData,
+ isBlob,
+ isBoolean,
+ isPromiseLike,
+ trim,
+ escapeForRegexp,
+ isElement,
+ makeMap,
+ includes,
+ arrayRemove,
+ copy,
+ simpleCompare,
+ equals,
+ csp,
+ jq,
+ concat,
+ sliceArgs,
+ bind,
+ toJsonReplacer,
+ toJson,
+ fromJson,
+ convertTimezoneToLocal,
+ timezoneToOffset,
+ startingTag,
+ tryDecodeURIComponent,
+ parseKeyValue,
+ toKeyValue,
+ encodeUriSegment,
+ encodeUriQuery,
+ angularInit,
+ bootstrap,
+ getTestability,
+ snake_case,
+ bindJQuery,
+ assertArg,
+ assertArgFn,
+ assertNotHasOwnProperty,
+ getter,
+ getBlockNodes,
+ hasOwnProperty,
+ createMap,
+ stringify,
+
+ NODE_TYPE_ELEMENT,
+ NODE_TYPE_ATTRIBUTE,
+ NODE_TYPE_TEXT,
+ NODE_TYPE_COMMENT,
+ NODE_TYPE_DOCUMENT,
+ NODE_TYPE_DOCUMENT_FRAGMENT
*/
////////////////////////////////////
@@ -171,6 +226,7 @@ function minErr(module, ErrorConstructor) {
* @ngdoc module
* @name ng
* @module ng
+ * @installation
* @description
*
* # ng (core module)
@@ -188,18 +244,25 @@ var REGEX_STRING_REGEXP = /^\/(.+)\/([a-z]*)$/;
// This is used so that it's possible for internal tests to create mock ValidityStates.
var VALIDITY_STATE_PROPERTY = 'validity';
+
+var hasOwnProperty = Object.prototype.hasOwnProperty;
+
/**
* @ngdoc function
* @name angular.lowercase
* @module ng
* @kind function
*
+ * @deprecated
+ * sinceVersion="1.5.0"
+ * removeVersion="1.7.0"
+ * Use [String.prototype.toLowerCase](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String/toLowerCase) instead.
+ *
* @description Converts the specified string to lowercase.
* @param {string} string String to be converted to lowercase.
* @returns {string} Lowercased string.
*/
var lowercase = function(string) {return isString(string) ? string.toLowerCase() : string;};
-var hasOwnProperty = Object.prototype.hasOwnProperty;
/**
* @ngdoc function
@@ -207,6 +270,11 @@ var hasOwnProperty = Object.prototype.hasOwnProperty;
* @module ng
* @kind function
*
+ * @deprecated
+ * sinceVersion="1.5.0"
+ * removeVersion="1.7.0"
+ * Use [String.prototype.toUpperCase](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String/toUpperCase) instead.
+ *
* @description Converts the specified string to uppercase.
* @param {string} string String to be converted to uppercase.
* @returns {string} Uppercased string.
@@ -215,22 +283,24 @@ var uppercase = function(string) {return isString(string) ? string.toUpperCase()
var manualLowercase = function(s) {
- /* jshint bitwise: false */
+ /* eslint-disable no-bitwise */
return isString(s)
? s.replace(/[A-Z]/g, function(ch) {return String.fromCharCode(ch.charCodeAt(0) | 32);})
: s;
+ /* eslint-enable */
};
var manualUppercase = function(s) {
- /* jshint bitwise: false */
+ /* eslint-disable no-bitwise */
return isString(s)
? s.replace(/[a-z]/g, function(ch) {return String.fromCharCode(ch.charCodeAt(0) & ~32);})
: s;
+ /* eslint-enable */
};
// String#toLowerCase and String#toUpperCase don't produce correct results in browsers with Turkish
// locale, for this reason we need to detect this case and redefine lowercase/uppercase methods
-// with correct but slower alternatives.
+// with correct but slower alternatives. See https://github.com/angular/angular.js/issues/11387
if ('i' !== 'I'.toLowerCase()) {
lowercase = manualLowercase;
uppercase = manualUppercase;
@@ -253,11 +323,12 @@ var
angularModule,
uid = 0;
+// Support: IE 9-11 only
/**
* documentMode is an IE-only property
* http://msdn.microsoft.com/en-us/library/ie/cc196988(v=vs.85).aspx
*/
-msie = document.documentMode;
+msie = window.document.documentMode;
/**
@@ -273,18 +344,18 @@ function isArrayLike(obj) {
// arrays, strings and jQuery/jqLite objects are array like
// * jqLite is either the jQuery or jqLite constructor function
- // * we have to check the existance of jqLite first as this method is called
+ // * we have to check the existence of jqLite first as this method is called
// via the forEach method when constructing the jqLite object in the first place
if (isArray(obj) || isString(obj) || (jqLite && obj instanceof jqLite)) return true;
// Support: iOS 8.2 (not reproducible in simulator)
// "length" in obj used to prevent JIT error (gh-11508)
- var length = "length" in Object(obj) && obj.length;
+ var length = 'length' in Object(obj) && obj.length;
// NodeList objects (with `item` method) and
// other objects with suitable length characteristics are array-like
return isNumber(length) &&
- (length >= 0 && ((length - 1) in obj || obj instanceof Array) || typeof obj.item == 'function');
+ (length >= 0 && ((length - 1) in obj || obj instanceof Array) || typeof obj.item === 'function');
}
@@ -328,9 +399,7 @@ function forEach(obj, iterator, context) {
if (obj) {
if (isFunction(obj)) {
for (key in obj) {
- // Need to check if hasOwnProperty exists,
- // as on IE8 the result of querySelectorAll is an object without a hasOwnProperty function
- if (key != 'prototype' && key != 'length' && key != 'name' && (!obj.hasOwnProperty || obj.hasOwnProperty(key))) {
+ if (key !== 'prototype' && key !== 'length' && key !== 'name' && obj.hasOwnProperty(key)) {
iterator.call(context, obj[key], key, obj);
}
}
@@ -485,6 +554,20 @@ function extend(dst) {
* Unlike {@link angular.extend extend()}, `merge()` recursively descends into object properties of source
* objects, performing a deep copy.
*
+* @deprecated
+* sinceVersion="1.6.5"
+* This function is deprecated, but will not be removed in the 1.x lifecycle.
+* There are edge cases (see {@link angular.merge#known-issues known issues}) that are not
+* supported by this function. We suggest
+* using [lodash's merge()](https://lodash.com/docs/4.17.4#merge) instead.
+*
+* @knownIssue
+* This is a list of (known) object types that are not handled correctly by this function:
+* - [`Blob`](https://developer.mozilla.org/docs/Web/API/Blob)
+* - [`MediaStream`](https://developer.mozilla.org/docs/Web/API/MediaStream)
+* - [`CanvasGradient`](https://developer.mozilla.org/docs/Web/API/CanvasGradient)
+* - AngularJS {@link $rootScope.Scope scopes};
+*
* @param {Object} dst Destination object.
* @param {...Object} src Source object(s).
* @returns {Object} Reference to `dst`.
@@ -499,6 +582,11 @@ function toInt(str) {
return parseInt(str, 10);
}
+var isNumberNaN = Number.isNaN || function isNumberNaN(num) {
+ // eslint-disable-next-line no-self-compare
+ return num !== num;
+};
+
function inherit(parent, extra) {
return extend(Object.create(parent), extra);
@@ -535,18 +623,28 @@ noop.$inject = [];
* functional style.
*
```js
- function transformer(transformationFn, value) {
- return (transformationFn || angular.identity)(value);
- };
+ function transformer(transformationFn, value) {
+ return (transformationFn || angular.identity)(value);
+ };
+
+ // E.g.
+ function getResult(fn, input) {
+ return (fn || angular.identity)(input);
+ };
+
+ getResult(function(n) { return n * 2; }, 21); // returns 42
+ getResult(null, 21); // returns 21
+ getResult(undefined, 21); // returns 21
```
- * @param {*} value to be returned.
- * @returns {*} the value passed in.
+ *
+ * @param {*} value to be returned.
+ * @returns {*} the value passed in.
*/
function identity($) {return $;}
identity.$inject = [];
-function valueFn(value) {return function() {return value;};}
+function valueFn(value) {return function valueRef() {return value;};}
function hasCustomToString(obj) {
return isFunction(obj.toString) && obj.toString !== toString;
@@ -672,7 +770,7 @@ function isDate(value) {
* @kind function
*
* @description
- * Determines if a reference is an `Array`.
+ * Determines if a reference is an `Array`. Alias of Array.isArray.
*
* @param {*} value Reference to check.
* @returns {boolean} True if `value` is an `Array`.
@@ -680,6 +778,24 @@ function isDate(value) {
var isArray = Array.isArray;
/**
+ * @description
+ * Determines if a reference is an `Error`.
+ * Loosely based on https://www.npmjs.com/package/iserror
+ *
+ * @param {*} value Reference to check.
+ * @returns {boolean} True if `value` is an `Error`.
+ */
+function isError(value) {
+ var tag = toString.call(value);
+ switch (tag) {
+ case '[object Error]': return true;
+ case '[object Exception]': return true;
+ case '[object DOMException]': return true;
+ default: return value instanceof Error;
+ }
+}
+
+/**
* @ngdoc function
* @name angular.isFunction
* @module ng
@@ -748,11 +864,15 @@ function isPromiseLike(obj) {
}
-var TYPED_ARRAY_REGEXP = /^\[object (?:Uint8|Uint8Clamped|Uint16|Uint32|Int8|Int16|Int32|Float32|Float64)Array\]$/;
+var TYPED_ARRAY_REGEXP = /^\[object (?:Uint8|Uint8Clamped|Uint16|Uint32|Int8|Int16|Int32|Float32|Float64)Array]$/;
function isTypedArray(value) {
return value && isNumber(value.length) && TYPED_ARRAY_REGEXP.test(toString.call(value));
}
+function isArrayBuffer(obj) {
+ return toString.call(obj) === '[object ArrayBuffer]';
+}
+
var trim = function(value) {
return isString(value) ? value.trim() : value;
@@ -762,8 +882,10 @@ var trim = function(value) {
// http://docs.closure-library.googlecode.com/git/local_closure_goog_string_string.js.source.html#line1021
// Prereq: s is a string.
var escapeForRegexp = function(s) {
- return s.replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g, '\\$1').
- replace(/\x08/g, '\\x08');
+ return s
+ .replace(/([-()[\]{}+?*.$^|,:#<!\\])/g, '\\$1')
+ // eslint-disable-next-line no-control-regex
+ .replace(/\x08/g, '\\x08');
};
@@ -781,8 +903,8 @@ var escapeForRegexp = function(s) {
*/
function isElement(node) {
return !!(node &&
- (node.nodeName // we are a direct element
- || (node.prop && node.attr && node.find))); // we have an on and find method part of jQuery API
+ (node.nodeName // We are a direct element.
+ || (node.prop && node.attr && node.find))); // We have an on and find method part of jQuery API.
}
/**
@@ -803,7 +925,7 @@ function nodeName_(element) {
}
function includes(array, obj) {
- return Array.prototype.indexOf.call(array, obj) != -1;
+ return Array.prototype.indexOf.call(array, obj) !== -1;
}
function arrayRemove(array, value) {
@@ -827,7 +949,13 @@ function arrayRemove(array, value) {
* * If a destination is provided, all of its elements (for arrays) or properties (for objects)
* are deleted and then all elements/properties from the source are copied to it.
* * If `source` is not an object or array (inc. `null` and `undefined`), `source` is returned.
- * * If `source` is identical to 'destination' an exception will be thrown.
+ * * If `source` is identical to `destination` an exception will be thrown.
+ *
+ * <br />
+ * <div class="alert alert-warning">
+ * Only enumerable properties are taken into account. Non-enumerable properties (both on `source`
+ * and on `destination`) will be ignored.
+ * </div>
*
* @param {*} source The source that will be used to make a copy.
* Can be any type, including primitives, `null`, and `undefined`.
@@ -836,52 +964,54 @@ function arrayRemove(array, value) {
* @returns {*} The copy or updated `destination`, if `destination` was specified.
*
* @example
- <example module="copyExample">
- <file name="index.html">
- <div ng-controller="ExampleController">
- <form novalidate class="simple-form">
- Name: <input type="text" ng-model="user.name" /><br />
- E-mail: <input type="email" ng-model="user.email" /><br />
- Gender: <input type="radio" ng-model="user.gender" value="male" />male
- <input type="radio" ng-model="user.gender" value="female" />female<br />
- <button ng-click="reset()">RESET</button>
- <button ng-click="update(user)">SAVE</button>
- </form>
- <pre>form = {{user | json}}</pre>
- <pre>master = {{master | json}}</pre>
- </div>
-
- <script>
- angular.module('copyExample', [])
- .controller('ExampleController', ['$scope', function($scope) {
- $scope.master= {};
-
- $scope.update = function(user) {
- // Example with 1 argument
- $scope.master= angular.copy(user);
- };
+ <example module="copyExample" name="angular-copy">
+ <file name="index.html">
+ <div ng-controller="ExampleController">
+ <form novalidate class="simple-form">
+ <label>Name: <input type="text" ng-model="user.name" /></label><br />
+ <label>Age: <input type="number" ng-model="user.age" /></label><br />
+ Gender: <label><input type="radio" ng-model="user.gender" value="male" />male</label>
+ <label><input type="radio" ng-model="user.gender" value="female" />female</label><br />
+ <button ng-click="reset()">RESET</button>
+ <button ng-click="update(user)">SAVE</button>
+ </form>
+ <pre>form = {{user | json}}</pre>
+ <pre>master = {{master | json}}</pre>
+ </div>
+ </file>
+ <file name="script.js">
+ // Module: copyExample
+ angular.
+ module('copyExample', []).
+ controller('ExampleController', ['$scope', function($scope) {
+ $scope.master = {};
+
+ $scope.reset = function() {
+ // Example with 1 argument
+ $scope.user = angular.copy($scope.master);
+ };
- $scope.reset = function() {
- // Example with 2 arguments
- angular.copy($scope.master, $scope.user);
- };
+ $scope.update = function(user) {
+ // Example with 2 arguments
+ angular.copy(user, $scope.master);
+ };
- $scope.reset();
- }]);
- </script>
- </file>
- </example>
+ $scope.reset();
+ }]);
+ </file>
+ </example>
*/
-function copy(source, destination) {
+function copy(source, destination, maxDepth) {
var stackSource = [];
var stackDest = [];
+ maxDepth = isValidObjectMaxDepth(maxDepth) ? maxDepth : NaN;
if (destination) {
- if (isTypedArray(destination)) {
- throw ngMinErr('cpta', "Can't copy! TypedArray destination cannot be mutated.");
+ if (isTypedArray(destination) || isArrayBuffer(destination)) {
+ throw ngMinErr('cpta', 'Can\'t copy! TypedArray destination cannot be mutated.');
}
if (source === destination) {
- throw ngMinErr('cpi', "Can't copy! Source and destination are identical.");
+ throw ngMinErr('cpi', 'Can\'t copy! Source and destination are identical.');
}
// Empty the destination object
@@ -897,35 +1027,39 @@ function copy(source, destination) {
stackSource.push(source);
stackDest.push(destination);
- return copyRecurse(source, destination);
+ return copyRecurse(source, destination, maxDepth);
}
- return copyElement(source);
+ return copyElement(source, maxDepth);
- function copyRecurse(source, destination) {
+ function copyRecurse(source, destination, maxDepth) {
+ maxDepth--;
+ if (maxDepth < 0) {
+ return '...';
+ }
var h = destination.$$hashKey;
- var result, key;
+ var key;
if (isArray(source)) {
for (var i = 0, ii = source.length; i < ii; i++) {
- destination.push(copyElement(source[i]));
+ destination.push(copyElement(source[i], maxDepth));
}
} else if (isBlankObject(source)) {
// createMap() fast path --- Safe to avoid hasOwnProperty check because prototype chain is empty
for (key in source) {
- destination[key] = copyElement(source[key]);
+ destination[key] = copyElement(source[key], maxDepth);
}
} else if (source && typeof source.hasOwnProperty === 'function') {
// Slow path, which must rely on hasOwnProperty
for (key in source) {
if (source.hasOwnProperty(key)) {
- destination[key] = copyElement(source[key]);
+ destination[key] = copyElement(source[key], maxDepth);
}
}
} else {
// Slowest path --- hasOwnProperty can't be called as a method
for (key in source) {
if (hasOwnProperty.call(source, key)) {
- destination[key] = copyElement(source[key]);
+ destination[key] = copyElement(source[key], maxDepth);
}
}
}
@@ -933,7 +1067,7 @@ function copy(source, destination) {
return destination;
}
- function copyElement(source) {
+ function copyElement(source, maxDepth) {
// Simple values
if (!isObject(source)) {
return source;
@@ -947,28 +1081,14 @@ function copy(source, destination) {
if (isWindow(source) || isScope(source)) {
throw ngMinErr('cpws',
- "Can't copy! Making copies of Window or Scope instances is not supported.");
+ 'Can\'t copy! Making copies of Window or Scope instances is not supported.');
}
var needsRecurse = false;
- var destination;
+ var destination = copyType(source);
- if (isArray(source)) {
- destination = [];
- needsRecurse = true;
- } else if (isTypedArray(source)) {
- destination = new source.constructor(source);
- } else if (isDate(source)) {
- destination = new Date(source.getTime());
- } else if (isRegExp(source)) {
- destination = new RegExp(source.source, source.toString().match(/[^\/]*$/)[0]);
- destination.lastIndex = source.lastIndex;
- } else if (isBlob(source)) {
- destination = new source.constructor([source], {type: source.type});
- } else if (isFunction(source.cloneNode)) {
- destination = source.cloneNode(true);
- } else {
- destination = Object.create(getPrototypeOf(source));
+ if (destination === undefined) {
+ destination = isArray(source) ? [] : Object.create(getPrototypeOf(source));
needsRecurse = true;
}
@@ -976,37 +1096,61 @@ function copy(source, destination) {
stackDest.push(destination);
return needsRecurse
- ? copyRecurse(source, destination)
+ ? copyRecurse(source, destination, maxDepth)
: destination;
}
-}
-/**
- * Creates a shallow copy of an object, an array or a primitive.
- *
- * Assumes that there are no proto properties for objects.
- */
-function shallowCopy(src, dst) {
- if (isArray(src)) {
- dst = dst || [];
-
- for (var i = 0, ii = src.length; i < ii; i++) {
- dst[i] = src[i];
- }
- } else if (isObject(src)) {
- dst = dst || {};
-
- for (var key in src) {
- if (!(key.charAt(0) === '$' && key.charAt(1) === '$')) {
- dst[key] = src[key];
- }
+ function copyType(source) {
+ switch (toString.call(source)) {
+ case '[object Int8Array]':
+ case '[object Int16Array]':
+ case '[object Int32Array]':
+ case '[object Float32Array]':
+ case '[object Float64Array]':
+ case '[object Uint8Array]':
+ case '[object Uint8ClampedArray]':
+ case '[object Uint16Array]':
+ case '[object Uint32Array]':
+ return new source.constructor(copyElement(source.buffer), source.byteOffset, source.length);
+
+ case '[object ArrayBuffer]':
+ // Support: IE10
+ if (!source.slice) {
+ // If we're in this case we know the environment supports ArrayBuffer
+ /* eslint-disable no-undef */
+ var copied = new ArrayBuffer(source.byteLength);
+ new Uint8Array(copied).set(new Uint8Array(source));
+ /* eslint-enable */
+ return copied;
+ }
+ return source.slice(0);
+
+ case '[object Boolean]':
+ case '[object Number]':
+ case '[object String]':
+ case '[object Date]':
+ return new source.constructor(source.valueOf());
+
+ case '[object RegExp]':
+ var re = new RegExp(source.source, source.toString().match(/[^/]*$/)[0]);
+ re.lastIndex = source.lastIndex;
+ return re;
+
+ case '[object Blob]':
+ return new source.constructor([source], {type: source.type});
+ }
+
+ if (isFunction(source.cloneNode)) {
+ return source.cloneNode(true);
}
}
-
- return dst || src;
}
+// eslint-disable-next-line no-self-compare
+function simpleCompare(a, b) { return a === b || (a !== a && b !== b); }
+
+
/**
* @ngdoc function
* @name angular.equals
@@ -1035,44 +1179,78 @@ function shallowCopy(src, dst) {
* @param {*} o1 Object or value to compare.
* @param {*} o2 Object or value to compare.
* @returns {boolean} True if arguments are equal.
+ *
+ * @example
+ <example module="equalsExample" name="equalsExample">
+ <file name="index.html">
+ <div ng-controller="ExampleController">
+ <form novalidate>
+ <h3>User 1</h3>
+ Name: <input type="text" ng-model="user1.name">
+ Age: <input type="number" ng-model="user1.age">
+
+ <h3>User 2</h3>
+ Name: <input type="text" ng-model="user2.name">
+ Age: <input type="number" ng-model="user2.age">
+
+ <div>
+ <br/>
+ <input type="button" value="Compare" ng-click="compare()">
+ </div>
+ User 1: <pre>{{user1 | json}}</pre>
+ User 2: <pre>{{user2 | json}}</pre>
+ Equal: <pre>{{result}}</pre>
+ </form>
+ </div>
+ </file>
+ <file name="script.js">
+ angular.module('equalsExample', []).controller('ExampleController', ['$scope', function($scope) {
+ $scope.user1 = {};
+ $scope.user2 = {};
+ $scope.compare = function() {
+ $scope.result = angular.equals($scope.user1, $scope.user2);
+ };
+ }]);
+ </file>
+ </example>
*/
function equals(o1, o2) {
if (o1 === o2) return true;
if (o1 === null || o2 === null) return false;
+ // eslint-disable-next-line no-self-compare
if (o1 !== o1 && o2 !== o2) return true; // NaN === NaN
var t1 = typeof o1, t2 = typeof o2, length, key, keySet;
- if (t1 == t2) {
- if (t1 == 'object') {
- if (isArray(o1)) {
- if (!isArray(o2)) return false;
- if ((length = o1.length) == o2.length) {
- for (key = 0; key < length; key++) {
- if (!equals(o1[key], o2[key])) return false;
- }
- return true;
- }
- } else if (isDate(o1)) {
- if (!isDate(o2)) return false;
- return equals(o1.getTime(), o2.getTime());
- } else if (isRegExp(o1)) {
- return isRegExp(o2) ? o1.toString() == o2.toString() : false;
- } else {
- if (isScope(o1) || isScope(o2) || isWindow(o1) || isWindow(o2) ||
- isArray(o2) || isDate(o2) || isRegExp(o2)) return false;
- keySet = createMap();
- for (key in o1) {
- if (key.charAt(0) === '$' || isFunction(o1[key])) continue;
+ if (t1 === t2 && t1 === 'object') {
+ if (isArray(o1)) {
+ if (!isArray(o2)) return false;
+ if ((length = o1.length) === o2.length) {
+ for (key = 0; key < length; key++) {
if (!equals(o1[key], o2[key])) return false;
- keySet[key] = true;
- }
- for (key in o2) {
- if (!(key in keySet) &&
- key.charAt(0) !== '$' &&
- isDefined(o2[key]) &&
- !isFunction(o2[key])) return false;
}
return true;
}
+ } else if (isDate(o1)) {
+ if (!isDate(o2)) return false;
+ return simpleCompare(o1.getTime(), o2.getTime());
+ } else if (isRegExp(o1)) {
+ if (!isRegExp(o2)) return false;
+ return o1.toString() === o2.toString();
+ } else {
+ if (isScope(o1) || isScope(o2) || isWindow(o1) || isWindow(o2) ||
+ isArray(o2) || isDate(o2) || isRegExp(o2)) return false;
+ keySet = createMap();
+ for (key in o1) {
+ if (key.charAt(0) === '$' || isFunction(o1[key])) continue;
+ if (!equals(o1[key], o2[key])) return false;
+ keySet[key] = true;
+ }
+ for (key in o2) {
+ if (!(key in keySet) &&
+ key.charAt(0) !== '$' &&
+ isDefined(o2[key]) &&
+ !isFunction(o2[key])) return false;
+ }
+ return true;
}
}
return false;
@@ -1082,8 +1260,8 @@ var csp = function() {
if (!isDefined(csp.rules)) {
- var ngCspElement = (document.querySelector('[ng-csp]') ||
- document.querySelector('[data-ng-csp]'));
+ var ngCspElement = (window.document.querySelector('[ng-csp]') ||
+ window.document.querySelector('[data-ng-csp]'));
if (ngCspElement) {
var ngCspAttribute = ngCspElement.getAttribute('ng-csp') ||
@@ -1104,9 +1282,8 @@ var csp = function() {
function noUnsafeEval() {
try {
- /* jshint -W031, -W054 */
+ // eslint-disable-next-line no-new, no-new-func
new Function('');
- /* jshint +W031, +W054 */
return false;
} catch (e) {
return true;
@@ -1158,7 +1335,8 @@ var jq = function() {
var i, ii = ngAttrPrefixes.length, prefix, name;
for (i = 0; i < ii; ++i) {
prefix = ngAttrPrefixes[i];
- if (el = document.querySelector('[' + prefix.replace(':', '\\:') + 'jq]')) {
+ el = window.document.querySelector('[' + prefix.replace(':', '\\:') + 'jq]');
+ if (el) {
name = el.getAttribute(prefix + 'jq');
break;
}
@@ -1176,7 +1354,6 @@ function sliceArgs(args, startIndex) {
}
-/* jshint -W101 */
/**
* @ngdoc function
* @name angular.bind
@@ -1194,7 +1371,6 @@ function sliceArgs(args, startIndex) {
* @param {...*} args Optional arguments to be prebound to the `fn` function call.
* @returns {function()} Function that wraps the `fn` with all the specified bindings.
*/
-/* jshint +W101 */
function bind(self, fn) {
var curryArgs = arguments.length > 2 ? sliceArgs(arguments, 2) : [];
if (isFunction(fn) && !(fn instanceof RegExp)) {
@@ -1210,7 +1386,7 @@ function bind(self, fn) {
: fn.call(self);
};
} else {
- // in IE, native methods are not functions so they cannot be bound (note: they don't need to be)
+ // In IE, native methods are not functions so they cannot be bound (note: they don't need to be).
return fn;
}
}
@@ -1223,7 +1399,7 @@ function toJsonReplacer(key, value) {
val = undefined;
} else if (isWindow(value)) {
val = '$WINDOW';
- } else if (value && document === value) {
+ } else if (value && window.document === value) {
val = '$DOCUMENT';
} else if (isScope(value)) {
val = '$SCOPE';
@@ -1243,10 +1419,31 @@ function toJsonReplacer(key, value) {
* Serializes input into a JSON-formatted string. Properties with leading $$ characters will be
* stripped since angular uses this notation internally.
*
- * @param {Object|Array|Date|string|number} obj Input to be serialized into JSON.
+ * @param {Object|Array|Date|string|number|boolean} obj Input to be serialized into JSON.
* @param {boolean|number} [pretty=2] If set to true, the JSON output will contain newlines and whitespace.
* If set to an integer, the JSON output will contain that many spaces per indentation.
* @returns {string|undefined} JSON-ified string representing `obj`.
+ * @knownIssue
+ *
+ * The Safari browser throws a `RangeError` instead of returning `null` when it tries to stringify a `Date`
+ * object with an invalid date value. The only reliable way to prevent this is to monkeypatch the
+ * `Date.prototype.toJSON` method as follows:
+ *
+ * ```
+ * var _DatetoJSON = Date.prototype.toJSON;
+ * Date.prototype.toJSON = function() {
+ * try {
+ * return _DatetoJSON.call(this);
+ * } catch(e) {
+ * if (e instanceof RangeError) {
+ * return null;
+ * }
+ * throw e;
+ * }
+ * };
+ * ```
+ *
+ * See https://github.com/angular/angular.js/pull/14221 for more information.
*/
function toJson(obj, pretty) {
if (isUndefined(obj)) return undefined;
@@ -1278,10 +1475,11 @@ function fromJson(json) {
var ALL_COLONS = /:/g;
function timezoneToOffset(timezone, fallback) {
+ // Support: IE 9-11 only, Edge 13-15+
// IE/Edge do not "understand" colon (`:`) in timezone
timezone = timezone.replace(ALL_COLONS, '');
var requestedTimezoneOffset = Date.parse('Jan 01, 1970 00:00:00 ' + timezone) / 60000;
- return isNaN(requestedTimezoneOffset) ? fallback : requestedTimezoneOffset;
+ return isNumberNaN(requestedTimezoneOffset) ? fallback : requestedTimezoneOffset;
}
@@ -1304,18 +1502,13 @@ function convertTimezoneToLocal(date, timezone, reverse) {
* @returns {string} Returns the string representation of the element.
*/
function startingTag(element) {
- element = jqLite(element).clone();
- try {
- // turns out IE does not let you set .html() on elements which
- // are not allowed to have children. So we just ignore it.
- element.empty();
- } catch (e) {}
+ element = jqLite(element).clone().empty();
var elemHtml = jqLite('<div>').append(element).html();
try {
return element[0].nodeType === NODE_TYPE_TEXT ? lowercase(elemHtml) :
elemHtml.
match(/^(<[^>]+>)/)[1].
- replace(/^<([\w\-]+)/, function(match, nodeName) {return '<' + lowercase(nodeName);});
+ replace(/^<([\w-]+)/, function(match, nodeName) {return '<' + lowercase(nodeName);});
} catch (e) {
return lowercase(elemHtml);
}
@@ -1337,7 +1530,7 @@ function tryDecodeURIComponent(value) {
try {
return decodeURIComponent(value);
} catch (e) {
- // Ignore any invalid uri component
+ // Ignore any invalid uri component.
}
}
@@ -1348,7 +1541,7 @@ function tryDecodeURIComponent(value) {
*/
function parseKeyValue(/**string*/keyValue) {
var obj = {};
- forEach((keyValue || "").split('&'), function(keyValue) {
+ forEach((keyValue || '').split('&'), function(keyValue) {
var splitPoint, key, val;
if (keyValue) {
key = keyValue = keyValue.replace(/\+/g,'%20');
@@ -1413,7 +1606,7 @@ function encodeUriSegment(val) {
* This method is intended for encoding *key* or *value* parts of query component. We need a custom
* method because encodeURIComponent is too aggressive and encodes stuff that doesn't have to be
* encoded per http://tools.ietf.org/html/rfc3986:
- * query = *( pchar / "/" / "?" )
+ * query = *( pchar / "/" / "?" )
* pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
* unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
* pct-encoded = "%" HEXDIG HEXDIG
@@ -1443,6 +1636,58 @@ function getNgAttribute(element, ngAttr) {
return null;
}
+function allowAutoBootstrap(document) {
+ var script = document.currentScript;
+
+ if (!script) {
+ // Support: IE 9-11 only
+ // IE does not have `document.currentScript`
+ return true;
+ }
+
+ // If the `currentScript` property has been clobbered just return false, since this indicates a probable attack
+ if (!(script instanceof window.HTMLScriptElement || script instanceof window.SVGScriptElement)) {
+ return false;
+ }
+
+ var attributes = script.attributes;
+ var srcs = [attributes.getNamedItem('src'), attributes.getNamedItem('href'), attributes.getNamedItem('xlink:href')];
+
+ return srcs.every(function(src) {
+ if (!src) {
+ return true;
+ }
+ if (!src.value) {
+ return false;
+ }
+
+ var link = document.createElement('a');
+ link.href = src.value;
+
+ if (document.location.origin === link.origin) {
+ // Same-origin resources are always allowed, even for non-whitelisted schemes.
+ return true;
+ }
+ // Disabled bootstrapping unless angular.js was loaded from a known scheme used on the web.
+ // This is to prevent angular.js bundled with browser extensions from being used to bypass the
+ // content security policy in web pages and other browser extensions.
+ switch (link.protocol) {
+ case 'http:':
+ case 'https:':
+ case 'ftp:':
+ case 'blob:':
+ case 'file:':
+ case 'data:':
+ return true;
+ default:
+ return false;
+ }
+ });
+}
+
+// Cached as it has to run during loading so that document.currentScript is available.
+var isAutoBootstrapAllowed = allowAutoBootstrap(window.document);
+
/**
* @ngdoc directive
* @name ngApp
@@ -1463,10 +1708,17 @@ function getNgAttribute(element, ngAttr) {
* designates the **root element** of the application and is typically placed near the root element
* of the page - e.g. on the `<body>` or `<html>` tags.
*
- * Only one AngularJS application can be auto-bootstrapped per HTML document. The first `ngApp`
- * found in the document will be used to define the root element to auto-bootstrap as an
- * application. To run multiple applications in an HTML document you must manually bootstrap them using
- * {@link angular.bootstrap} instead. AngularJS applications cannot be nested within each other.
+ * There are a few things to keep in mind when using `ngApp`:
+ * - only one AngularJS application can be auto-bootstrapped per HTML document. The first `ngApp`
+ * found in the document will be used to define the root element to auto-bootstrap as an
+ * application. To run multiple applications in an HTML document you must manually bootstrap them using
+ * {@link angular.bootstrap} instead.
+ * - AngularJS applications cannot be nested within each other.
+ * - Do not use a directive that uses {@link ng.$compile#transclusion transclusion} on the same element as `ngApp`.
+ * This includes directives such as {@link ng.ngIf `ngIf`}, {@link ng.ngInclude `ngInclude`} and
+ * {@link ngRoute.ngView `ngView`}.
+ * Doing this misplaces the app {@link ng.$rootElement `$rootElement`} and the app's {@link auto.$injector injector},
+ * causing animations to stop working and making the injector inaccessible from outside the app.
*
* You can specify an **AngularJS module** to be used as the root module for the application. This
* module will be loaded into the {@link auto.$injector} when the application is bootstrapped. It
@@ -1479,7 +1731,7 @@ function getNgAttribute(element, ngAttr) {
*
* `ngApp` is the easiest, and most common way to bootstrap an application.
*
- <example module="ngAppDemo">
+ <example module="ngAppDemo" name="ng-app">
<file name="index.html">
<div ng-controller="ngAppDemoController">
I can add: {{a}} + {{b}} = {{ a+b }}
@@ -1495,7 +1747,7 @@ function getNgAttribute(element, ngAttr) {
*
* Using `ngStrictDi`, you would see something like this:
*
- <example ng-app-included="true">
+ <example ng-app-included="true" name="strict-di">
<file name="index.html">
<div ng-app="ngAppStrictDemo" ng-strict-di>
<div ng-controller="GoodController1">
@@ -1544,7 +1796,7 @@ function getNgAttribute(element, ngAttr) {
}])
.controller('GoodController2', GoodController2);
function GoodController2($scope) {
- $scope.name = "World";
+ $scope.name = 'World';
}
GoodController2.$inject = ['$scope'];
</file>
@@ -1575,7 +1827,7 @@ function angularInit(element, bootstrap) {
module,
config = {};
- // The element `element` has priority over any other element
+ // The element `element` has priority over any other element.
forEach(ngAttrPrefixes, function(prefix) {
var name = prefix + 'app';
@@ -1594,7 +1846,12 @@ function angularInit(element, bootstrap) {
}
});
if (appElement) {
- config.strictDi = getNgAttribute(appElement, "strict-di") !== null;
+ if (!isAutoBootstrapAllowed) {
+ window.console.error('Angular: disabling automatic bootstrap. <script> protocol indicates ' +
+ 'an extension, document.location.href does not match.');
+ return;
+ }
+ config.strictDi = getNgAttribute(appElement, 'strict-di') !== null;
bootstrap(appElement, module ? [module] : [], config);
}
}
@@ -1606,16 +1863,25 @@ function angularInit(element, bootstrap) {
* @description
* Use this function to manually start up angular application.
*
- * See: {@link guide/bootstrap Bootstrap}
- *
- * Note that Protractor based end-to-end tests cannot use this function to bootstrap manually.
- * They must use {@link ng.directive:ngApp ngApp}.
+ * For more information, see the {@link guide/bootstrap Bootstrap guide}.
*
* Angular will detect if it has been loaded into the browser more than once and only allow the
* first loaded script to be bootstrapped and will report a warning to the browser console for
* each of the subsequent scripts. This prevents strange results in applications, where otherwise
* multiple instances of Angular try to work on the DOM.
*
+ * <div class="alert alert-warning">
+ * **Note:** Protractor based end-to-end tests cannot use this function to bootstrap manually.
+ * They must use {@link ng.directive:ngApp ngApp}.
+ * </div>
+ *
+ * <div class="alert alert-warning">
+ * **Note:** Do not bootstrap the app on an element with a directive that uses {@link ng.$compile#transclusion transclusion},
+ * such as {@link ng.ngIf `ngIf`}, {@link ng.ngInclude `ngInclude`} and {@link ngRoute.ngView `ngView`}.
+ * Doing this misplaces the app {@link ng.$rootElement `$rootElement`} and the app's {@link auto.$injector injector},
+ * causing animations to stop working and making the injector inaccessible from outside the app.
+ * </div>
+ *
* ```html
* <!doctype html>
* <html>
@@ -1659,11 +1925,11 @@ function bootstrap(element, modules, config) {
element = jqLite(element);
if (element.injector()) {
- var tag = (element[0] === document) ? 'document' : startingTag(element);
- //Encode angle brackets to prevent input from being sanitized to empty string #8683
+ var tag = (element[0] === window.document) ? 'document' : startingTag(element);
+ // Encode angle brackets to prevent input from being sanitized to empty string #8683.
throw ngMinErr(
'btstrpd',
- "App Already Bootstrapped with this Element '{0}'",
+ 'App already bootstrapped with this element \'{0}\'',
tag.replace(/</,'&lt;').replace(/>/,'&gt;'));
}
@@ -1758,7 +2024,6 @@ function snake_case(name, separator) {
}
var bindJQueryFired = false;
-var skipDestroyOnNextJQueryCleanData;
function bindJQuery() {
var originalCleanData;
@@ -1781,7 +2046,7 @@ function bindJQuery() {
extend(jQuery.fn, {
scope: JQLitePrototype.scope,
isolateScope: JQLitePrototype.isolateScope,
- controller: JQLitePrototype.controller,
+ controller: /** @type {?} */ (JQLitePrototype).controller,
injector: JQLitePrototype.injector,
inheritedData: JQLitePrototype.inheritedData
});
@@ -1792,15 +2057,11 @@ function bindJQuery() {
originalCleanData = jQuery.cleanData;
jQuery.cleanData = function(elems) {
var events;
- if (!skipDestroyOnNextJQueryCleanData) {
- for (var i = 0, elem; (elem = elems[i]) != null; i++) {
- events = jQuery._data(elem, "events");
- if (events && events.$destroy) {
- jQuery(elem).triggerHandler('$destroy');
- }
+ for (var i = 0, elem; (elem = elems[i]) != null; i++) {
+ events = jQuery._data(elem, 'events');
+ if (events && events.$destroy) {
+ jQuery(elem).triggerHandler('$destroy');
}
- } else {
- skipDestroyOnNextJQueryCleanData = false;
}
originalCleanData(elems);
};
@@ -1819,7 +2080,7 @@ function bindJQuery() {
*/
function assertArg(arg, name, reason) {
if (!arg) {
- throw ngMinErr('areq', "Argument '{0}' is {1}", (name || '?'), (reason || "required"));
+ throw ngMinErr('areq', 'Argument \'{0}\' is {1}', (name || '?'), (reason || 'required'));
}
return arg;
}
@@ -1841,7 +2102,7 @@ function assertArgFn(arg, name, acceptArrayAnnotation) {
*/
function assertNotHasOwnProperty(name, context) {
if (name === 'hasOwnProperty') {
- throw ngMinErr('badname', "hasOwnProperty is not a valid {0} name", context);
+ throw ngMinErr('badname', 'hasOwnProperty is not a valid {0} name', context);
}
}
@@ -1911,6 +2172,27 @@ function createMap() {
return Object.create(null);
}
+function stringify(value) {
+ if (value == null) { // null || undefined
+ return '';
+ }
+ switch (typeof value) {
+ case 'string':
+ break;
+ case 'number':
+ value = '' + value;
+ break;
+ default:
+ if (hasCustomToString(value) && !isArray(value) && !isDate(value)) {
+ value = value.toString();
+ } else {
+ value = toJson(value);
+ }
+ }
+
+ return value;
+}
+
var NODE_TYPE_ELEMENT = 1;
var NODE_TYPE_ATTRIBUTE = 2;
var NODE_TYPE_TEXT = 3;
@@ -1997,6 +2279,9 @@ function setupModuleLoader(window) {
* @returns {angular.Module} new module with the {@link angular.Module} api.
*/
return function module(name, requires, configFn) {
+
+ var info = {};
+
var assertNotHasOwnProperty = function(name, context) {
if (name === 'hasOwnProperty') {
throw ngMinErr('badname', 'hasOwnProperty is not a valid {0} name', context);
@@ -2009,9 +2294,9 @@ function setupModuleLoader(window) {
}
return ensure(modules, name, function() {
if (!requires) {
- throw $injectorMinErr('nomod', "Module '{0}' is not available! You either misspelled " +
- "the module name or forgot to load it. If registering a module ensure that you " +
- "specify the dependencies as the second argument.", name);
+ throw $injectorMinErr('nomod', 'Module \'{0}\' is not available! You either misspelled ' +
+ 'the module name or forgot to load it. If registering a module ensure that you ' +
+ 'specify the dependencies as the second argument.', name);
}
/** @type {!Array.<Array.<*>>} */
@@ -2033,6 +2318,45 @@ function setupModuleLoader(window) {
_runBlocks: runBlocks,
/**
+ * @ngdoc method
+ * @name angular.Module#info
+ * @module ng
+ *
+ * @param {Object=} info Information about the module
+ * @returns {Object|Module} The current info object for this module if called as a getter,
+ * or `this` if called as a setter.
+ *
+ * @description
+ * Read and write custom information about this module.
+ * For example you could put the version of the module in here.
+ *
+ * ```js
+ * angular.module('myModule', []).info({ version: '1.0.0' });
+ * ```
+ *
+ * The version could then be read back out by accessing the module elsewhere:
+ *
+ * ```
+ * var version = angular.module('myModule').info().version;
+ * ```
+ *
+ * You can also retrieve this information during runtime via the
+ * {@link $injector#modules `$injector.modules`} property:
+ *
+ * ```js
+ * var version = $injector.modules['myModule'].info().version;
+ * ```
+ */
+ info: function(value) {
+ if (isDefined(value)) {
+ if (!isObject(value)) throw ngMinErr('aobj', 'Argument \'{0}\' must be an object', 'value');
+ info = value;
+ return this;
+ }
+ return info;
+ },
+
+ /**
* @ngdoc property
* @name angular.Module#requires
* @module ng
@@ -2115,13 +2439,13 @@ function setupModuleLoader(window) {
* @ngdoc method
* @name angular.Module#decorator
* @module ng
- * @param {string} The name of the service to decorate.
- * @param {Function} This function will be invoked when the service needs to be
- * instantiated and should return the decorated service instance.
+ * @param {string} name The name of the service to decorate.
+ * @param {Function} decorFn This function will be invoked when the service needs to be
+ * instantiated and should return the decorated service instance.
* @description
* See {@link auto.$provide#decorator $provide.decorator()}.
*/
- decorator: invokeLaterAndSetModuleName('$provide', 'decorator'),
+ decorator: invokeLaterAndSetModuleName('$provide', 'decorator', configBlocks),
/**
* @ngdoc method
@@ -2202,6 +2526,19 @@ function setupModuleLoader(window) {
/**
* @ngdoc method
+ * @name angular.Module#component
+ * @module ng
+ * @param {string} name Name of the component in camel-case (i.e. myComp which will match as my-comp)
+ * @param {Object} options Component definition object (a simplified
+ * {@link ng.$compile#directive-definition-object directive definition object})
+ *
+ * @description
+ * See {@link ng.$compileProvider#component $compileProvider.component()}.
+ */
+ component: invokeLaterAndSetModuleName('$compileProvider', 'component'),
+
+ /**
+ * @ngdoc method
* @name angular.Module#config
* @module ng
* @param {Function} configFn Execute this function on module load. Useful for service
@@ -2254,10 +2591,11 @@ function setupModuleLoader(window) {
* @param {string} method
* @returns {angular.Module}
*/
- function invokeLaterAndSetModuleName(provider, method) {
+ function invokeLaterAndSetModuleName(provider, method, queue) {
+ if (!queue) queue = invokeQueue;
return function(recipeName, factoryFunction) {
if (factoryFunction && isFunction(factoryFunction)) factoryFunction.$$moduleName = name;
- invokeQueue.push([provider, method, arguments]);
+ queue.push([provider, method, arguments]);
return moduleInstance;
};
}
@@ -2267,11 +2605,46 @@ function setupModuleLoader(window) {
}
-/* global: toDebugString: true */
+/* global shallowCopy: true */
+
+/**
+ * Creates a shallow copy of an object, an array or a primitive.
+ *
+ * Assumes that there are no proto properties for objects.
+ */
+function shallowCopy(src, dst) {
+ if (isArray(src)) {
+ dst = dst || [];
+
+ for (var i = 0, ii = src.length; i < ii; i++) {
+ dst[i] = src[i];
+ }
+ } else if (isObject(src)) {
+ dst = dst || {};
+
+ for (var key in src) {
+ if (!(key.charAt(0) === '$' && key.charAt(1) === '$')) {
+ dst[key] = src[key];
+ }
+ }
+ }
-function serializeObject(obj) {
+ return dst || src;
+}
+
+/* exported toDebugString */
+
+function serializeObject(obj, maxDepth) {
var seen = [];
+ // There is no direct way to stringify object until reaching a specific depth
+ // and a very deep object can cause a performance issue, so we copy the object
+ // based on this specific depth and then stringify it.
+ if (isValidObjectMaxDepth(maxDepth)) {
+ // This file is also included in `angular-loader`, so `copy()` might not always be available in
+ // the closure. Therefore, it is lazily retrieved as `angular.copy()` when needed.
+ obj = angular.copy(obj, null, maxDepth);
+ }
return JSON.stringify(obj, function(key, val) {
val = toJsonReplacer(key, val);
if (isObject(val)) {
@@ -2284,13 +2657,13 @@ function serializeObject(obj) {
});
}
-function toDebugString(obj) {
+function toDebugString(obj, maxDepth) {
if (typeof obj === 'function') {
return obj.toString().replace(/ \{[\s\S]*$/, '');
} else if (isUndefined(obj)) {
return 'undefined';
} else if (typeof obj !== 'string') {
- return serializeObject(obj);
+ return serializeObject(obj, maxDepth);
}
return obj;
}
@@ -2306,7 +2679,6 @@ function toDebugString(obj) {
formDirective,
scriptDirective,
selectDirective,
- styleDirective,
optionDirective,
ngBindDirective,
ngBindHtmlDirective,
@@ -2358,20 +2730,23 @@ function toDebugString(obj) {
$BrowserProvider,
$CacheFactoryProvider,
$ControllerProvider,
+ $DateProvider,
$DocumentProvider,
+ $$IsDocumentHiddenProvider,
$ExceptionHandlerProvider,
$FilterProvider,
$$ForceReflowProvider,
$InterpolateProvider,
$IntervalProvider,
- $$HashMapProvider,
$HttpProvider,
$HttpParamSerializerProvider,
$HttpParamSerializerJQLikeProvider,
$HttpBackendProvider,
$xhrFactoryProvider,
+ $jsonpCallbacksProvider,
$LocationProvider,
$LogProvider,
+ $$MapProvider,
$ParseProvider,
$RootScopeProvider,
$QProvider,
@@ -2407,16 +2782,19 @@ function toDebugString(obj) {
* - `codeName` – `{string}` – Code name of the release, such as "jiggling-armfat".
*/
var version = {
- full: '1.4.10', // all of these placeholder strings will be replaced by grunt's
- major: 1, // package task
- minor: 4,
- dot: 10,
- codeName: 'benignant-oscillation'
+ // These placeholder strings will be replaced by grunt's `build` task.
+ // They need to be double- or single-quoted.
+ full: '1.6.5',
+ major: 1,
+ minor: 6,
+ dot: 5,
+ codeName: 'toffee-salinization'
};
function publishExternalAPI(angular) {
extend(angular, {
+ 'errorHandlingConfig': errorHandlingConfig,
'bootstrap': bootstrap,
'copy': copy,
'extend': extend,
@@ -2442,11 +2820,14 @@ function publishExternalAPI(angular) {
'isDate': isDate,
'lowercase': lowercase,
'uppercase': uppercase,
- 'callbacks': {counter: 0},
+ 'callbacks': {$$counter: 0},
'getTestability': getTestability,
+ 'reloadWithDebugInfo': reloadWithDebugInfo,
'$$minErr': minErr,
'$$csp': csp,
- 'reloadWithDebugInfo': reloadWithDebugInfo
+ '$$encodeUriSegment': encodeUriSegment,
+ '$$encodeUriQuery': encodeUriQuery,
+ '$$stringify': stringify
});
angularModule = setupModuleLoader(window);
@@ -2465,7 +2846,6 @@ function publishExternalAPI(angular) {
form: formDirective,
script: scriptDirective,
select: selectDirective,
- style: styleDirective,
option: optionDirective,
ngBind: ngBindDirective,
ngBindHtml: ngBindHtmlDirective,
@@ -2521,6 +2901,7 @@ function publishExternalAPI(angular) {
$cacheFactory: $CacheFactoryProvider,
$controller: $ControllerProvider,
$document: $DocumentProvider,
+ $$isDocumentHidden: $$IsDocumentHiddenProvider,
$exceptionHandler: $ExceptionHandlerProvider,
$filter: $FilterProvider,
$$forceReflow: $$ForceReflowProvider,
@@ -2531,6 +2912,7 @@ function publishExternalAPI(angular) {
$httpParamSerializerJQLike: $HttpParamSerializerJQLikeProvider,
$httpBackend: $HttpBackendProvider,
$xhrFactory: $xhrFactoryProvider,
+ $jsonpCallbacks: $jsonpCallbacksProvider,
$location: $LocationProvider,
$log: $LogProvider,
$parse: $ParseProvider,
@@ -2547,11 +2929,12 @@ function publishExternalAPI(angular) {
$window: $WindowProvider,
$$rAF: $$RAFProvider,
$$jqLite: $$jqLiteProvider,
- $$HashMap: $$HashMapProvider,
+ $$Map: $$MapProvider,
$$cookieReader: $$CookieReaderProvider
});
}
- ]);
+ ])
+ .info({ angularVersion: '1.6.5' });
}
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
@@ -2565,11 +2948,10 @@ function publishExternalAPI(angular) {
* Or gives undesired access to variables likes document or window? *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-/* global JQLitePrototype: true,
- addEventListenerFn: true,
- removeEventListenerFn: true,
+/* global
+ JQLitePrototype: true,
BOOLEAN_ATTR: true,
- ALIASED_ATTR: true,
+ ALIASED_ATTR: true
*/
//////////////////////////////////
@@ -2607,11 +2989,11 @@ function publishExternalAPI(angular) {
* ## Angular's jqLite
* jqLite provides only the following jQuery methods:
*
- * - [`addClass()`](http://api.jquery.com/addClass/)
+ * - [`addClass()`](http://api.jquery.com/addClass/) - Does not support a function as first argument
* - [`after()`](http://api.jquery.com/after/)
* - [`append()`](http://api.jquery.com/append/)
* - [`attr()`](http://api.jquery.com/attr/) - Does not support functions as parameters
- * - [`bind()`](http://api.jquery.com/bind/) - Does not support namespaces, selectors or eventData
+ * - [`bind()`](http://api.jquery.com/bind/) (_deprecated_, use [`on()`](http://api.jquery.com/on/)) - Does not support namespaces, selectors or eventData
* - [`children()`](http://api.jquery.com/children/) - Does not support selectors
* - [`clone()`](http://api.jquery.com/clone/)
* - [`contents()`](http://api.jquery.com/contents/)
@@ -2631,16 +3013,16 @@ function publishExternalAPI(angular) {
* - [`parent()`](http://api.jquery.com/parent/) - Does not support selectors
* - [`prepend()`](http://api.jquery.com/prepend/)
* - [`prop()`](http://api.jquery.com/prop/)
- * - [`ready()`](http://api.jquery.com/ready/)
+ * - [`ready()`](http://api.jquery.com/ready/) (_deprecated_, use `angular.element(callback)` instead of `angular.element(document).ready(callback)`)
* - [`remove()`](http://api.jquery.com/remove/)
- * - [`removeAttr()`](http://api.jquery.com/removeAttr/)
- * - [`removeClass()`](http://api.jquery.com/removeClass/)
+ * - [`removeAttr()`](http://api.jquery.com/removeAttr/) - Does not support multiple attributes
+ * - [`removeClass()`](http://api.jquery.com/removeClass/) - Does not support a function as first argument
* - [`removeData()`](http://api.jquery.com/removeData/)
* - [`replaceWith()`](http://api.jquery.com/replaceWith/)
* - [`text()`](http://api.jquery.com/text/)
- * - [`toggleClass()`](http://api.jquery.com/toggleClass/)
- * - [`triggerHandler()`](http://api.jquery.com/triggerHandler/) - Passes a dummy event object to handlers.
- * - [`unbind()`](http://api.jquery.com/unbind/) - Does not support namespaces or event object as parameter
+ * - [`toggleClass()`](http://api.jquery.com/toggleClass/) - Does not support a function as first argument
+ * - [`triggerHandler()`](http://api.jquery.com/triggerHandler/) - Passes a dummy event object to handlers
+ * - [`unbind()`](http://api.jquery.com/unbind/) (_deprecated_, use [`off()`](http://api.jquery.com/off/)) - Does not support namespaces or event object as parameter
* - [`val()`](http://api.jquery.com/val/)
* - [`wrap()`](http://api.jquery.com/wrap/)
*
@@ -2668,6 +3050,9 @@ function publishExternalAPI(angular) {
* - `inheritedData()` - same as `data()`, but walks up the DOM until a value is found or the top
* parent element is reached.
*
+ * @knownIssue You cannot spy on `angular.element` if you are using Jasmine version 1.x. See
+ * https://github.com/angular/angular.js/issues/14251 for more information.
+ *
* @param {string|DOMElement} element HTML string or DOMElement to be wrapped into jQuery.
* @returns {Object} jQuery object.
*/
@@ -2675,13 +3060,7 @@ function publishExternalAPI(angular) {
JQLite.expando = 'ng339';
var jqCache = JQLite.cache = {},
- jqId = 1,
- addEventListenerFn = function(element, type, fn) {
- element.addEventListener(type, fn, false);
- },
- removeEventListenerFn = function(element, type, fn) {
- element.removeEventListener(type, fn, false);
- };
+ jqId = 1;
/*
* !!! This is an undocumented "private" function !!!
@@ -2694,22 +3073,31 @@ JQLite._data = function(node) {
function jqNextId() { return ++jqId; }
-var SPECIAL_CHARS_REGEXP = /([\:\-\_]+(.))/g;
-var MOZ_HACK_REGEXP = /^moz([A-Z])/;
-var MOUSE_EVENT_MAP= { mouseleave: "mouseout", mouseenter: "mouseover"};
+var DASH_LOWERCASE_REGEXP = /-([a-z])/g;
+var MS_HACK_REGEXP = /^-ms-/;
+var MOUSE_EVENT_MAP = { mouseleave: 'mouseout', mouseenter: 'mouseover' };
var jqLiteMinErr = minErr('jqLite');
/**
- * Converts snake_case to camelCase.
- * Also there is special case for Moz prefix starting with upper case letter.
+ * Converts kebab-case to camelCase.
+ * There is also a special case for the ms prefix starting with a lowercase letter.
* @param name Name to normalize
*/
-function camelCase(name) {
- return name.
- replace(SPECIAL_CHARS_REGEXP, function(_, separator, letter, offset) {
- return offset ? letter.toUpperCase() : letter;
- }).
- replace(MOZ_HACK_REGEXP, 'Moz$1');
+function cssKebabToCamel(name) {
+ return kebabToCamel(name.replace(MS_HACK_REGEXP, 'ms-'));
+}
+
+function fnCamelCaseReplace(all, letter) {
+ return letter.toUpperCase();
+}
+
+/**
+ * Converts kebab-case to camelCase.
+ * @param name Name to normalize
+ */
+function kebabToCamel(name) {
+ return name
+ .replace(DASH_LOWERCASE_REGEXP, fnCamelCaseReplace);
}
var SINGLE_TAG_REGEXP = /^<([\w-]+)\s*\/?>(?:<\/\1>|)$/;
@@ -2724,7 +3112,7 @@ var wrapMap = {
'col': [2, '<table><colgroup>', '</colgroup></table>'],
'tr': [2, '<table><tbody>', '</tbody></table>'],
'td': [3, '<table><tbody><tr>', '</tr></tbody></table>'],
- '_default': [0, "", ""]
+ '_default': [0, '', '']
};
wrapMap.optgroup = wrapMap.option;
@@ -2760,10 +3148,10 @@ function jqLiteBuildFragment(html, context) {
nodes.push(context.createTextNode(html));
} else {
// Convert html into DOM nodes
- tmp = tmp || fragment.appendChild(context.createElement("div"));
- tag = (TAG_NAME_REGEXP.exec(html) || ["", ""])[1].toLowerCase();
+ tmp = fragment.appendChild(context.createElement('div'));
+ tag = (TAG_NAME_REGEXP.exec(html) || ['', ''])[1].toLowerCase();
wrap = wrapMap[tag] || wrapMap._default;
- tmp.innerHTML = wrap[1] + html.replace(XHTML_TAG_REGEXP, "<$1></$2>") + wrap[2];
+ tmp.innerHTML = wrap[1] + html.replace(XHTML_TAG_REGEXP, '<$1></$2>') + wrap[2];
// Descend through wrappers to the right content
i = wrap[0];
@@ -2774,12 +3162,12 @@ function jqLiteBuildFragment(html, context) {
nodes = concat(nodes, tmp.childNodes);
tmp = fragment.firstChild;
- tmp.textContent = "";
+ tmp.textContent = '';
}
// Remove wrapper from fragment
- fragment.textContent = "";
- fragment.innerHTML = ""; // Clear inner HTML
+ fragment.textContent = '';
+ fragment.innerHTML = ''; // Clear inner HTML
forEach(nodes, function(node) {
fragment.appendChild(node);
});
@@ -2788,7 +3176,7 @@ function jqLiteBuildFragment(html, context) {
}
function jqLiteParseHTML(html, context) {
- context = context || document;
+ context = context || window.document;
var parsed;
if ((parsed = SINGLE_TAG_REGEXP.exec(html))) {
@@ -2814,10 +3202,9 @@ function jqLiteWrapNode(node, wrapper) {
// IE9-11 has no method "contains" in SVG element and in Node.prototype. Bug #10259.
-var jqLiteContains = Node.prototype.contains || function(arg) {
- // jshint bitwise: false
+var jqLiteContains = window.Node.prototype.contains || /** @this */ function(arg) {
+ // eslint-disable-next-line no-bitwise
return !!(this.compareDocumentPosition(arg) & 16);
- // jshint bitwise: true
};
/////////////////////////////////////////////
@@ -2833,7 +3220,7 @@ function JQLite(element) {
argIsString = true;
}
if (!(this instanceof JQLite)) {
- if (argIsString && element.charAt(0) != '<') {
+ if (argIsString && element.charAt(0) !== '<') {
throw jqLiteMinErr('nosel', 'Looking up elements via selectors is not supported by jqLite! See: http://docs.angularjs.org/api/angular.element');
}
return new JQLite(element);
@@ -2841,6 +3228,8 @@ function JQLite(element) {
if (argIsString) {
jqLiteAddNodes(this, jqLiteParseHTML(element));
+ } else if (isFunction(element)) {
+ jqLiteReady(element);
} else {
jqLiteAddNodes(this, element);
}
@@ -2851,13 +3240,10 @@ function jqLiteClone(element) {
}
function jqLiteDealoc(element, onlyDescendants) {
- if (!onlyDescendants) jqLiteRemoveData(element);
+ if (!onlyDescendants && jqLiteAcceptsData(element)) jqLite.cleanData([element]);
if (element.querySelectorAll) {
- var descendants = element.querySelectorAll('*');
- for (var i = 0, l = descendants.length; i < l; i++) {
- jqLiteRemoveData(descendants[i]);
- }
+ jqLite.cleanData(element.querySelectorAll('*'));
}
}
@@ -2873,7 +3259,7 @@ function jqLiteOff(element, type, fn, unsupported) {
if (!type) {
for (type in events) {
if (type !== '$destroy') {
- removeEventListenerFn(element, type, handle);
+ element.removeEventListener(type, handle);
}
delete events[type];
}
@@ -2885,7 +3271,7 @@ function jqLiteOff(element, type, fn, unsupported) {
arrayRemove(listenerFns || [], fn);
}
if (!(isDefined(fn) && listenerFns && listenerFns.length > 0)) {
- removeEventListenerFn(element, type, handle);
+ element.removeEventListener(type, handle);
delete events[type];
}
};
@@ -2936,6 +3322,7 @@ function jqLiteExpandoStore(element, createIfNecessary) {
function jqLiteData(element, key, value) {
if (jqLiteAcceptsData(element)) {
+ var prop;
var isSimpleSetter = isDefined(value);
var isSimpleGetter = !isSimpleSetter && key && !isObject(key);
@@ -2944,16 +3331,18 @@ function jqLiteData(element, key, value) {
var data = expandoStore && expandoStore.data;
if (isSimpleSetter) { // data('key', value)
- data[key] = value;
+ data[kebabToCamel(key)] = value;
} else {
if (massGetter) { // data()
return data;
} else {
if (isSimpleGetter) { // data('key')
// don't force creation of expandoStore if it doesn't exist yet
- return data && data[key];
+ return data && data[kebabToCamel(key)];
} else { // mass-setter: data({key1: val1, key2: val2})
- extend(data, key);
+ for (prop in key) {
+ data[kebabToCamel(prop)] = key[prop];
+ }
}
}
}
@@ -2962,17 +3351,17 @@ function jqLiteData(element, key, value) {
function jqLiteHasClass(element, selector) {
if (!element.getAttribute) return false;
- return ((" " + (element.getAttribute('class') || '') + " ").replace(/[\n\t]/g, " ").
- indexOf(" " + selector + " ") > -1);
+ return ((' ' + (element.getAttribute('class') || '') + ' ').replace(/[\n\t]/g, ' ').
+ indexOf(' ' + selector + ' ') > -1);
}
function jqLiteRemoveClass(element, cssClasses) {
if (cssClasses && element.setAttribute) {
forEach(cssClasses.split(' '), function(cssClass) {
element.setAttribute('class', trim(
- (" " + (element.getAttribute('class') || '') + " ")
- .replace(/[\n\t]/g, " ")
- .replace(" " + trim(cssClass) + " ", " "))
+ (' ' + (element.getAttribute('class') || '') + ' ')
+ .replace(/[\n\t]/g, ' ')
+ .replace(' ' + trim(cssClass) + ' ', ' '))
);
});
}
@@ -2981,7 +3370,7 @@ function jqLiteRemoveClass(element, cssClasses) {
function jqLiteAddClass(element, cssClasses) {
if (cssClasses && element.setAttribute) {
var existingClasses = (' ' + (element.getAttribute('class') || '') + ' ')
- .replace(/[\n\t]/g, " ");
+ .replace(/[\n\t]/g, ' ');
forEach(cssClasses.split(' '), function(cssClass) {
cssClass = trim(cssClass);
@@ -3028,7 +3417,7 @@ function jqLiteController(element, name) {
function jqLiteInheritedData(element, name, value) {
// if element is the document object work with the html element instead
// this makes $(document).scope() possible
- if (element.nodeType == NODE_TYPE_DOCUMENT) {
+ if (element.nodeType === NODE_TYPE_DOCUMENT) {
element = element.documentElement;
}
var names = isArray(name) ? name : [name];
@@ -3062,7 +3451,7 @@ function jqLiteRemove(element, keepData) {
function jqLiteDocumentLoaded(action, win) {
win = win || window;
if (win.document.readyState === 'complete') {
- // Force the action to be run async for consistent behaviour
+ // Force the action to be run async for consistent behavior
// from the action's point of view
// i.e. it will definitely not be in a $apply
win.setTimeout(action);
@@ -3072,30 +3461,32 @@ function jqLiteDocumentLoaded(action, win) {
}
}
+function jqLiteReady(fn) {
+ function trigger() {
+ window.document.removeEventListener('DOMContentLoaded', trigger);
+ window.removeEventListener('load', trigger);
+ fn();
+ }
+
+ // check if document is already loaded
+ if (window.document.readyState === 'complete') {
+ window.setTimeout(fn);
+ } else {
+ // We can not use jqLite since we are not done loading and jQuery could be loaded later.
+
+ // Works for modern browsers and IE9
+ window.document.addEventListener('DOMContentLoaded', trigger);
+
+ // Fallback to window.onload for others
+ window.addEventListener('load', trigger);
+ }
+}
+
//////////////////////////////////////////
// Functions which are declared directly.
//////////////////////////////////////////
var JQLitePrototype = JQLite.prototype = {
- ready: function(fn) {
- var fired = false;
-
- function trigger() {
- if (fired) return;
- fired = true;
- fn();
- }
-
- // check if document is already loaded
- if (document.readyState === 'complete') {
- setTimeout(trigger);
- } else {
- this.on('DOMContentLoaded', trigger); // works for modern browsers and IE9
- // we can not use jqLite since we are not done loading and jQuery could be loaded later.
- // jshint -W064
- JQLite(window).on('load', trigger); // fallback to window.onload for others
- // jshint +W064
- }
- },
+ ready: jqLiteReady,
toString: function() {
var value = [];
forEach(this, function(e) { value.push('' + e);});
@@ -3130,7 +3521,8 @@ var ALIASED_ATTR = {
'ngMaxlength': 'maxlength',
'ngMin': 'min',
'ngMax': 'max',
- 'ngPattern': 'pattern'
+ 'ngPattern': 'pattern',
+ 'ngStep': 'step'
};
function getBooleanAttrName(element, name) {
@@ -3148,7 +3540,12 @@ function getAliasedAttrName(name) {
forEach({
data: jqLiteData,
removeData: jqLiteRemoveData,
- hasData: jqLiteHasData
+ hasData: jqLiteHasData,
+ cleanData: function jqLiteCleanData(nodes) {
+ for (var i = 0, ii = nodes.length; i < ii; i++) {
+ jqLiteRemoveData(nodes[i]);
+ }
+ }
}, function(fn, name) {
JQLite[name] = fn;
});
@@ -3180,7 +3577,7 @@ forEach({
hasClass: jqLiteHasClass,
css: function(element, name, value) {
- name = camelCase(name);
+ name = cssKebabToCamel(name);
if (isDefined(value)) {
element.style[name] = value;
@@ -3190,33 +3587,33 @@ forEach({
},
attr: function(element, name, value) {
+ var ret;
var nodeType = element.nodeType;
- if (nodeType === NODE_TYPE_TEXT || nodeType === NODE_TYPE_ATTRIBUTE || nodeType === NODE_TYPE_COMMENT) {
+ if (nodeType === NODE_TYPE_TEXT || nodeType === NODE_TYPE_ATTRIBUTE || nodeType === NODE_TYPE_COMMENT ||
+ !element.getAttribute) {
return;
}
+
var lowercasedName = lowercase(name);
- if (BOOLEAN_ATTR[lowercasedName]) {
- if (isDefined(value)) {
- if (!!value) {
- element[name] = true;
- element.setAttribute(name, lowercasedName);
- } else {
- element[name] = false;
- element.removeAttribute(lowercasedName);
- }
+ var isBooleanAttr = BOOLEAN_ATTR[lowercasedName];
+
+ if (isDefined(value)) {
+ // setter
+
+ if (value === null || (value === false && isBooleanAttr)) {
+ element.removeAttribute(name);
} else {
- return (element[name] ||
- (element.attributes.getNamedItem(name) || noop).specified)
- ? lowercasedName
- : undefined;
- }
- } else if (isDefined(value)) {
- element.setAttribute(name, value);
- } else if (element.getAttribute) {
- // the extra argument "2" is to get the right thing for a.href in IE, see jQuery code
- // some elements (e.g. Document) don't have get attribute, so return undefined
- var ret = element.getAttribute(name, 2);
- // normalize non-existing attributes to undefined (as jQuery)
+ element.setAttribute(name, isBooleanAttr ? lowercasedName : value);
+ }
+ } else {
+ // getter
+
+ ret = element.getAttribute(name);
+
+ if (isBooleanAttr && ret !== null) {
+ ret = lowercasedName;
+ }
+ // Normalize non-existing attributes to undefined (as jQuery).
return ret === null ? undefined : ret;
}
},
@@ -3251,7 +3648,7 @@ forEach({
result.push(option.value || option.text);
}
});
- return result.length === 0 ? null : result;
+ return result;
}
return element.value;
}
@@ -3279,7 +3676,7 @@ forEach({
// in a way that survives minification.
// jqLiteEmpty takes no arguments but is a setter.
if (fn !== jqLiteEmpty &&
- (isUndefined((fn.length == 2 && (fn !== jqLiteHasClass && fn !== jqLiteController)) ? arg1 : arg2))) {
+ (isUndefined((fn.length === 2 && (fn !== jqLiteHasClass && fn !== jqLiteController)) ? arg1 : arg2))) {
if (isObject(arg1)) {
// we are a write, but the object properties are the key/values
@@ -3421,7 +3818,7 @@ forEach({
eventFns = events[type] = [];
eventFns.specialHandlerWrapper = specialHandlerWrapper;
if (type !== '$destroy' && !noEventListener) {
- addEventListenerFn(element, type, handle);
+ element.addEventListener(type, handle);
}
}
@@ -3514,12 +3911,15 @@ forEach({
after: function(element, newElement) {
var index = element, parent = element.parentNode;
- newElement = new JQLite(newElement);
- for (var i = 0, ii = newElement.length; i < ii; i++) {
- var node = newElement[i];
- parent.insertBefore(node, index.nextSibling);
- index = node;
+ if (parent) {
+ newElement = new JQLite(newElement);
+
+ for (var i = 0, ii = newElement.length; i < ii; i++) {
+ var node = newElement[i];
+ parent.insertBefore(node, index.nextSibling);
+ index = node;
+ }
}
},
@@ -3613,14 +4013,15 @@ forEach({
}
return isDefined(value) ? value : this;
};
-
- // bind legacy bind/unbind to on/off
- JQLite.prototype.bind = JQLite.prototype.on;
- JQLite.prototype.unbind = JQLite.prototype.off;
});
+// bind legacy bind/unbind to on/off
+JQLite.prototype.bind = JQLite.prototype.on;
+JQLite.prototype.unbind = JQLite.prototype.off;
+
// Provider for private $$jqLite service
+/** @this */
function $$jqLiteProvider() {
this.$get = function $$jqLite() {
return extend(JQLite, {
@@ -3663,7 +4064,7 @@ function hashKey(obj, nextUidFn) {
}
var objType = typeof obj;
- if (objType == 'function' || (objType == 'object' && obj !== null)) {
+ if (objType === 'function' || (objType === 'object' && obj !== null)) {
key = obj.$$hashKey = objType + ':' + (nextUidFn || nextUid)();
} else {
key = objType + ':' + obj;
@@ -3672,50 +4073,70 @@ function hashKey(obj, nextUidFn) {
return key;
}
-/**
- * HashMap which can use objects as keys
- */
-function HashMap(array, isolatedUid) {
- if (isolatedUid) {
- var uid = 0;
- this.nextUid = function() {
- return ++uid;
- };
- }
- forEach(array, this.put, this);
+// A minimal ES2015 Map implementation.
+// Should be bug/feature equivalent to the native implementations of supported browsers
+// (for the features required in Angular).
+// See https://kangax.github.io/compat-table/es6/#test-Map
+var nanKey = Object.create(null);
+function NgMapShim() {
+ this._keys = [];
+ this._values = [];
+ this._lastKey = NaN;
+ this._lastIndex = -1;
}
-HashMap.prototype = {
- /**
- * Store key value pair
- * @param key key to store can be any type
- * @param value value to store can be any type
- */
- put: function(key, value) {
- this[hashKey(key, this.nextUid)] = value;
+NgMapShim.prototype = {
+ _idx: function(key) {
+ if (key === this._lastKey) {
+ return this._lastIndex;
+ }
+ this._lastKey = key;
+ this._lastIndex = this._keys.indexOf(key);
+ return this._lastIndex;
+ },
+ _transformKey: function(key) {
+ return isNumberNaN(key) ? nanKey : key;
},
-
- /**
- * @param key
- * @returns {Object} the value for the key
- */
get: function(key) {
- return this[hashKey(key, this.nextUid)];
+ key = this._transformKey(key);
+ var idx = this._idx(key);
+ if (idx !== -1) {
+ return this._values[idx];
+ }
},
+ set: function(key, value) {
+ key = this._transformKey(key);
+ var idx = this._idx(key);
+ if (idx === -1) {
+ idx = this._lastIndex = this._keys.length;
+ }
+ this._keys[idx] = key;
+ this._values[idx] = value;
- /**
- * Remove the key/value pair
- * @param key
- */
- remove: function(key) {
- var value = this[key = hashKey(key, this.nextUid)];
- delete this[key];
- return value;
+ // Support: IE11
+ // Do not `return this` to simulate the partial IE11 implementation
+ },
+ delete: function(key) {
+ key = this._transformKey(key);
+ var idx = this._idx(key);
+ if (idx === -1) {
+ return false;
+ }
+ this._keys.splice(idx, 1);
+ this._values.splice(idx, 1);
+ this._lastKey = NaN;
+ this._lastIndex = -1;
+ return true;
}
};
-var $$HashMapProvider = [function() {
+// For now, always use `NgMapShim`, even if `window.Map` is available. Some native implementations
+// are still buggy (often in subtle ways) and can cause hard-to-debug failures. When native `Map`
+// implementations get more stable, we can reconsider switching to `window.Map` (when available).
+var NgMap = NgMapShim;
+
+var $$MapProvider = [/** @this */function() {
this.$get = [function() {
- return HashMap;
+ return NgMap;
}];
}];
@@ -3776,22 +4197,33 @@ var $$HashMapProvider = [function() {
/**
* @ngdoc module
* @name auto
+ * @installation
* @description
*
* Implicit module which gets automatically added to each {@link auto.$injector $injector}.
*/
-var FN_ARGS = /^[^\(]*\(\s*([^\)]*)\)/m;
+var ARROW_ARG = /^([^(]+?)=>/;
+var FN_ARGS = /^[^(]*\(\s*([^)]*)\)/m;
var FN_ARG_SPLIT = /,/;
var FN_ARG = /^\s*(_?)(\S+?)\1\s*$/;
var STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg;
var $injectorMinErr = minErr('$injector');
+function stringifyFn(fn) {
+ return Function.prototype.toString.call(fn);
+}
+
+function extractArgs(fn) {
+ var fnText = stringifyFn(fn).replace(STRIP_COMMENTS, ''),
+ args = fnText.match(ARROW_ARG) || fnText.match(FN_ARGS);
+ return args;
+}
+
function anonFn(fn) {
// For anonymous functions, showing at the very least the function signature can help in
// debugging.
- var fnText = fn.toString().replace(STRIP_COMMENTS, ''),
- args = fnText.match(FN_ARGS);
+ var args = extractArgs(fn);
if (args) {
return 'function(' + (args[1] || '').replace(/[\s\r\n]+/, ' ') + ')';
}
@@ -3800,7 +4232,6 @@ function anonFn(fn) {
function annotate(fn, strictDi, name) {
var $inject,
- fnText,
argDecl,
last;
@@ -3815,8 +4246,7 @@ function annotate(fn, strictDi, name) {
throw $injectorMinErr('strictdi',
'{0} is not using explicit annotation and cannot be invoked in strict mode', name);
}
- fnText = fn.toString().replace(STRIP_COMMENTS, '');
- argDecl = fnText.match(FN_ARGS);
+ argDecl = extractArgs(fn);
forEach(argDecl[1].split(FN_ARG_SPLIT), function(arg) {
arg.replace(FN_ARG, function(all, underscore, name) {
$inject.push(name);
@@ -3891,6 +4321,28 @@ function annotate(fn, strictDi, name) {
*/
/**
+ * @ngdoc property
+ * @name $injector#modules
+ * @type {Object}
+ * @description
+ * A hash containing all the modules that have been loaded into the
+ * $injector.
+ *
+ * You can use this property to find out information about a module via the
+ * {@link angular.Module#info `myModule.info(...)`} method.
+ *
+ * For example:
+ *
+ * ```
+ * var info = $injector.modules['ngAnimate'].info();
+ * ```
+ *
+ * **Do not use this property to attempt to modify the modules after the application
+ * has been bootstrapped.**
+ */
+
+
+/**
* @ngdoc method
* @name $injector#get
*
@@ -4028,7 +4480,6 @@ function annotate(fn, strictDi, name) {
-
/**
* @ngdoc service
* @name $provide
@@ -4053,18 +4504,20 @@ function annotate(fn, strictDi, name) {
* these cases the {@link auto.$provide $provide} service has additional helper methods to register
* services without specifying a provider.
*
- * * {@link auto.$provide#provider provider(provider)} - registers a **service provider** with the
+ * * {@link auto.$provide#provider provider(name, provider)} - registers a **service provider** with the
* {@link auto.$injector $injector}
- * * {@link auto.$provide#constant constant(obj)} - registers a value/object that can be accessed by
+ * * {@link auto.$provide#constant constant(name, obj)} - registers a value/object that can be accessed by
* providers and services.
- * * {@link auto.$provide#value value(obj)} - registers a value/object that can only be accessed by
+ * * {@link auto.$provide#value value(name, obj)} - registers a value/object that can only be accessed by
* services, not providers.
- * * {@link auto.$provide#factory factory(fn)} - registers a service **factory function**, `fn`,
+ * * {@link auto.$provide#factory factory(name, fn)} - registers a service **factory function**
* that will be wrapped in a **service provider** object, whose `$get` property will contain the
* given factory function.
- * * {@link auto.$provide#service service(class)} - registers a **constructor function**, `class`
+ * * {@link auto.$provide#service service(name, Fn)} - registers a **constructor function**
* that will be wrapped in a **service provider** object, whose `$get` property will instantiate
* a new object using the given constructor function.
+ * * {@link auto.$provide#decorator decorator(name, decorFn)} - registers a **decorator function** that
+ * will be able to modify or replace the implementation of another service.
*
* See the individual methods for more information and examples.
*/
@@ -4321,18 +4774,20 @@ function annotate(fn, strictDi, name) {
* @name $provide#decorator
* @description
*
- * Register a **service decorator** with the {@link auto.$injector $injector}. A service decorator
+ * Register a **decorator function** with the {@link auto.$injector $injector}. A decorator function
* intercepts the creation of a service, allowing it to override or modify the behavior of the
- * service. The object returned by the decorator may be the original service, or a new service
- * object which replaces or wraps and delegates to the original service.
+ * service. The return value of the decorator function may be the original service, or a new service
+ * that replaces (or wraps and delegates to) the original service.
+ *
+ * You can find out more about using decorators in the {@link guide/decorators} guide.
*
* @param {string} name The name of the service to decorate.
* @param {Function|Array.<string|Function>} decorator This function will be invoked when the service needs to be
- * instantiated and should return the decorated service instance. The function is called using
+ * provided and should return the decorated service instance. The function is called using
* the {@link auto.$injector#invoke injector.invoke} method and is therefore fully injectable.
* Local injection arguments:
*
- * * `$delegate` - The original service instance, which can be monkey patched, configured,
+ * * `$delegate` - The original service instance, which can be replaced, monkey patched, configured,
* decorated or delegated to.
*
* @example
@@ -4352,7 +4807,7 @@ function createInjector(modulesToLoad, strictDi) {
var INSTANTIATING = {},
providerSuffix = 'Provider',
path = [],
- loadedModules = new HashMap([], true),
+ loadedModules = new NgMap(),
providerCache = {
$provide: {
provider: supportObject(provider),
@@ -4368,17 +4823,23 @@ function createInjector(modulesToLoad, strictDi) {
if (angular.isString(caller)) {
path.push(caller);
}
- throw $injectorMinErr('unpr', "Unknown provider: {0}", path.join(' <- '));
+ throw $injectorMinErr('unpr', 'Unknown provider: {0}', path.join(' <- '));
})),
instanceCache = {},
- instanceInjector = (instanceCache.$injector =
+ protoInstanceInjector =
createInternalInjector(instanceCache, function(serviceName, caller) {
var provider = providerInjector.get(serviceName + providerSuffix, caller);
- return instanceInjector.invoke(provider.$get, provider, undefined, serviceName);
- }));
-
+ return instanceInjector.invoke(
+ provider.$get, provider, undefined, serviceName);
+ }),
+ instanceInjector = protoInstanceInjector;
- forEach(loadModules(modulesToLoad), function(fn) { if (fn) instanceInjector.invoke(fn); });
+ providerCache['$injector' + providerSuffix] = { $get: valueFn(protoInstanceInjector) };
+ instanceInjector.modules = providerInjector.modules = createMap();
+ var runBlocks = loadModules(modulesToLoad);
+ instanceInjector = protoInstanceInjector.get('$injector');
+ instanceInjector.strictDi = strictDi;
+ forEach(runBlocks, function(fn) { if (fn) instanceInjector.invoke(fn); });
return instanceInjector;
@@ -4402,16 +4863,16 @@ function createInjector(modulesToLoad, strictDi) {
provider_ = providerInjector.instantiate(provider_);
}
if (!provider_.$get) {
- throw $injectorMinErr('pget', "Provider '{0}' must define $get factory method.", name);
+ throw $injectorMinErr('pget', 'Provider \'{0}\' must define $get factory method.', name);
}
- return providerCache[name + providerSuffix] = provider_;
+ return (providerCache[name + providerSuffix] = provider_);
}
function enforceReturnValue(name, factory) {
- return function enforcedReturnValue() {
+ return /** @this */ function enforcedReturnValue() {
var result = instanceInjector.invoke(factory, this);
if (isUndefined(result)) {
- throw $injectorMinErr('undef', "Provider '{0}' must return a value from $get factory method.", name);
+ throw $injectorMinErr('undef', 'Provider \'{0}\' must return a value from $get factory method.', name);
}
return result;
};
@@ -4455,7 +4916,7 @@ function createInjector(modulesToLoad, strictDi) {
var runBlocks = [], moduleFn;
forEach(modulesToLoad, function(module) {
if (loadedModules.get(module)) return;
- loadedModules.put(module, true);
+ loadedModules.set(module, true);
function runInvokeQueue(queue) {
var i, ii;
@@ -4470,6 +4931,7 @@ function createInjector(modulesToLoad, strictDi) {
try {
if (isString(module)) {
moduleFn = angularModule(module);
+ instanceInjector.modules[module] = moduleFn;
runBlocks = runBlocks.concat(loadModules(moduleFn.requires)).concat(moduleFn._runBlocks);
runInvokeQueue(moduleFn._invokeQueue);
runInvokeQueue(moduleFn._configBlocks);
@@ -4484,15 +4946,15 @@ function createInjector(modulesToLoad, strictDi) {
if (isArray(module)) {
module = module[module.length - 1];
}
- if (e.message && e.stack && e.stack.indexOf(e.message) == -1) {
+ if (e.message && e.stack && e.stack.indexOf(e.message) === -1) {
// Safari & FF's stack traces don't contain error.message content
// unlike those of Chrome and IE
// So if stack doesn't contain message, we create a new string that contains both.
// Since error.stack is read-only in Safari, I'm overriding e and not e.stack here.
- /* jshint -W022 */
+ // eslint-disable-next-line no-ex-assign
e = e.message + '\n' + e.stack;
}
- throw $injectorMinErr('modulerr', "Failed to instantiate module {0} due to:\n{1}",
+ throw $injectorMinErr('modulerr', 'Failed to instantiate module {0} due to:\n{1}',
module, e.stack || e.message || e);
}
});
@@ -4516,7 +4978,8 @@ function createInjector(modulesToLoad, strictDi) {
try {
path.unshift(serviceName);
cache[serviceName] = INSTANTIATING;
- return cache[serviceName] = factory(serviceName, caller);
+ cache[serviceName] = factory(serviceName, caller);
+ return cache[serviceName];
} catch (err) {
if (cache[serviceName] === INSTANTIATING) {
delete cache[serviceName];
@@ -4528,48 +4991,71 @@ function createInjector(modulesToLoad, strictDi) {
}
}
- function invoke(fn, self, locals, serviceName) {
- if (typeof locals === 'string') {
- serviceName = locals;
- locals = null;
- }
+ function injectionArgs(fn, locals, serviceName) {
var args = [],
- $inject = createInjector.$$annotate(fn, strictDi, serviceName),
- length, i,
- key;
+ $inject = createInjector.$$annotate(fn, strictDi, serviceName);
- for (i = 0, length = $inject.length; i < length; i++) {
- key = $inject[i];
+ for (var i = 0, length = $inject.length; i < length; i++) {
+ var key = $inject[i];
if (typeof key !== 'string') {
throw $injectorMinErr('itkn',
'Incorrect injection token! Expected service name as string, got {0}', key);
}
- args.push(
- locals && locals.hasOwnProperty(key)
- ? locals[key]
- : getService(key, serviceName)
- );
+ args.push(locals && locals.hasOwnProperty(key) ? locals[key] :
+ getService(key, serviceName));
}
+ return args;
+ }
+
+ function isClass(func) {
+ // Support: IE 9-11 only
+ // IE 9-11 do not support classes and IE9 leaks with the code below.
+ if (msie || typeof func !== 'function') {
+ return false;
+ }
+ var result = func.$$ngIsClass;
+ if (!isBoolean(result)) {
+ // Support: Edge 12-13 only
+ // See: https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/6156135/
+ result = func.$$ngIsClass = /^(?:class\b|constructor\()/.test(stringifyFn(func));
+ }
+ return result;
+ }
+
+ function invoke(fn, self, locals, serviceName) {
+ if (typeof locals === 'string') {
+ serviceName = locals;
+ locals = null;
+ }
+
+ var args = injectionArgs(fn, locals, serviceName);
if (isArray(fn)) {
- fn = fn[length];
+ fn = fn[fn.length - 1];
}
- // http://jsperf.com/angularjs-invoke-apply-vs-switch
- // #5388
- return fn.apply(self, args);
+ if (!isClass(fn)) {
+ // http://jsperf.com/angularjs-invoke-apply-vs-switch
+ // #5388
+ return fn.apply(self, args);
+ } else {
+ args.unshift(null);
+ return new (Function.prototype.bind.apply(fn, args))();
+ }
}
+
function instantiate(Type, locals, serviceName) {
// Check if Type is annotated and use just the given function at n-1 as parameter
// e.g. someModule.factory('greeter', ['$window', function(renamed$window) {}]);
- // Object creation: http://jsperf.com/create-constructor/2
- var instance = Object.create((isArray(Type) ? Type[Type.length - 1] : Type).prototype || null);
- var returnedValue = invoke(Type, instance, locals, serviceName);
-
- return isObject(returnedValue) || isFunction(returnedValue) ? returnedValue : instance;
+ var ctor = (isArray(Type) ? Type[Type.length - 1] : Type);
+ var args = injectionArgs(Type, locals, serviceName);
+ // Empty object at position 0 is ignored for invocation with `new`, but required.
+ args.unshift(null);
+ return new (Function.prototype.bind.apply(ctor, args))();
}
+
return {
invoke: invoke,
instantiate: instantiate,
@@ -4587,6 +5073,7 @@ createInjector.$$annotate = annotate;
/**
* @ngdoc provider
* @name $anchorScrollProvider
+ * @this
*
* @description
* Use `$anchorScrollProvider` to disable automatic scrolling whenever
@@ -4625,7 +5112,7 @@ function $AnchorScrollProvider() {
* When called, it scrolls to the element related to the specified `hash` or (if omitted) to the
* current value of {@link ng.$location#hash $location.hash()}, according to the rules specified
* in the
- * [HTML5 spec](http://www.w3.org/html/wg/drafts/html/master/browsers.html#the-indicated-part-of-the-document).
+ * [HTML5 spec](http://www.w3.org/html/wg/drafts/html/master/browsers.html#an-indicated-part-of-the-document).
*
* It also watches the {@link ng.$location#hash $location.hash()} and automatically scrolls to
* match any anchor whenever it changes. This can be disabled by calling
@@ -4658,7 +5145,7 @@ function $AnchorScrollProvider() {
* </div>
*
* @example
- <example module="anchorScrollExample">
+ <example module="anchorScrollExample" name="anchor-scroll">
<file name="index.html">
<div id="scrollArea" ng-controller="ScrollController">
<a ng-click="gotoBottom()">Go to bottom</a>
@@ -4668,7 +5155,7 @@ function $AnchorScrollProvider() {
<file name="script.js">
angular.module('anchorScrollExample', [])
.controller('ScrollController', ['$scope', '$location', '$anchorScroll',
- function ($scope, $location, $anchorScroll) {
+ function($scope, $location, $anchorScroll) {
$scope.gotoBottom = function() {
// set the location.hash to the id of
// the element you wish to scroll to.
@@ -4697,7 +5184,7 @@ function $AnchorScrollProvider() {
* See {@link ng.$anchorScroll#yOffset $anchorScroll.yOffset} for more details.
*
* @example
- <example module="anchorScrollOffsetExample">
+ <example module="anchorScrollOffsetExample" name="anchor-scroll-offset">
<file name="index.html">
<div class="fixed-header" ng-controller="headerCtrl">
<a href="" ng-click="gotoAnchor(x)" ng-repeat="x in [1,2,3,4,5]">
@@ -4714,7 +5201,7 @@ function $AnchorScrollProvider() {
$anchorScroll.yOffset = 50; // always scroll by 50 extra pixels
}])
.controller('headerCtrl', ['$anchorScroll', '$location', '$scope',
- function ($anchorScroll, $location, $scope) {
+ function($anchorScroll, $location, $scope) {
$scope.gotoAnchor = function(x) {
var newHash = 'anchor' + x;
if ($location.hash() !== newHash) {
@@ -4821,7 +5308,8 @@ function $AnchorScrollProvider() {
}
function scroll(hash) {
- hash = isString(hash) ? hash : $location.hash();
+ // Allow numeric hashes
+ hash = isString(hash) ? hash : isNumber(hash) ? hash.toString() : $location.hash();
var elm;
// empty hash, scroll to the top of the page
@@ -4833,7 +5321,7 @@ function $AnchorScrollProvider() {
// first anchor with given name :-D
else if ((elm = getFirstAnchor(document.getElementsByName(hash)))) scrollTo(elm);
- // no element and hash == 'top', scroll to the top of the page
+ // no element and hash === 'top', scroll to the top of the page
else if (hash === 'top') scrollTo(null);
}
@@ -4908,14 +5396,14 @@ function prepareAnimateOptions(options) {
: {};
}
-var $$CoreAnimateJsProvider = function() {
- this.$get = function() {};
+var $$CoreAnimateJsProvider = /** @this */ function() {
+ this.$get = noop;
};
// this is prefixed with Core since it conflicts with
// the animateQueueProvider defined in ngAnimate/animateQueue.js
-var $$CoreAnimateQueueProvider = function() {
- var postDigestQueue = new HashMap();
+var $$CoreAnimateQueueProvider = /** @this */ function() {
+ var postDigestQueue = new NgMap();
var postDigestElements = [];
this.$get = ['$$AnimateRunner', '$rootScope',
@@ -4927,17 +5415,23 @@ var $$CoreAnimateQueueProvider = function() {
pin: noop,
push: function(element, event, options, domOperation) {
- domOperation && domOperation();
+ if (domOperation) {
+ domOperation();
+ }
options = options || {};
- options.from && element.css(options.from);
- options.to && element.css(options.to);
+ if (options.from) {
+ element.css(options.from);
+ }
+ if (options.to) {
+ element.css(options.to);
+ }
if (options.addClass || options.removeClass) {
addRemoveClassesPostDigest(element, options.addClass, options.removeClass);
}
- var runner = new $$AnimateRunner(); // jshint ignore:line
+ var runner = new $$AnimateRunner();
// since there are no animations to run the runner needs to be
// notified that the animation call is complete.
@@ -4981,10 +5475,14 @@ var $$CoreAnimateQueueProvider = function() {
});
forEach(element, function(elm) {
- toAdd && jqLiteAddClass(elm, toAdd);
- toRemove && jqLiteRemoveClass(elm, toRemove);
+ if (toAdd) {
+ jqLiteAddClass(elm, toAdd);
+ }
+ if (toRemove) {
+ jqLiteRemoveClass(elm, toRemove);
+ }
});
- postDigestQueue.remove(element);
+ postDigestQueue.delete(element);
}
});
postDigestElements.length = 0;
@@ -4999,7 +5497,7 @@ var $$CoreAnimateQueueProvider = function() {
if (classesAdded || classesRemoved) {
- postDigestQueue.put(element, data);
+ postDigestQueue.set(element, data);
postDigestElements.push(element);
if (postDigestElements.length === 1) {
@@ -5022,8 +5520,10 @@ var $$CoreAnimateQueueProvider = function() {
*
* To see the functional implementation check out `src/ngAnimate/animate.js`.
*/
-var $AnimateProvider = ['$provide', function($provide) {
+var $AnimateProvider = ['$provide', /** @this */ function($provide) {
var provider = this;
+ var classNameFilter = null;
+ var customFilter = null;
this.$$registeredAnimations = Object.create(null);
@@ -5068,7 +5568,7 @@ var $AnimateProvider = ['$provide', function($provide) {
*/
this.register = function(name, factory) {
if (name && name.charAt(0) !== '.') {
- throw $animateMinErr('notcsel', "Expecting class selector starting with '.' got '{0}'.", name);
+ throw $animateMinErr('notcsel', 'Expecting class selector starting with \'.\' got \'{0}\'.', name);
}
var key = name + '-animation';
@@ -5078,6 +5578,51 @@ var $AnimateProvider = ['$provide', function($provide) {
/**
* @ngdoc method
+ * @name $animateProvider#customFilter
+ *
+ * @description
+ * Sets and/or returns the custom filter function that is used to "filter" animations, i.e.
+ * determine if an animation is allowed or not. When no filter is specified (the default), no
+ * animation will be blocked. Setting the `customFilter` value will only allow animations for
+ * which the filter function's return value is truthy.
+ *
+ * This allows to easily create arbitrarily complex rules for filtering animations, such as
+ * allowing specific events only, or enabling animations on specific subtrees of the DOM, etc.
+ * Filtering animations can also boost performance for low-powered devices, as well as
+ * applications containing a lot of structural operations.
+ *
+ * <div class="alert alert-success">
+ * **Best Practice:**
+ * Keep the filtering function as lean as possible, because it will be called for each DOM
+ * action (e.g. insertion, removal, class change) performed by "animation-aware" directives.
+ * See {@link guide/animations#which-directives-support-animations- here} for a list of built-in
+ * directives that support animations.
+ * Performing computationally expensive or time-consuming operations on each call of the
+ * filtering function can make your animations sluggish.
+ * </div>
+ *
+ * **Note:** If present, `customFilter` will be checked before
+ * {@link $animateProvider#classNameFilter classNameFilter}.
+ *
+ * @param {Function=} filterFn - The filter function which will be used to filter all animations.
+ * If a falsy value is returned, no animation will be performed. The function will be called
+ * with the following arguments:
+ * - **node** `{DOMElement}` - The DOM element to be animated.
+ * - **event** `{String}` - The name of the animation event (e.g. `enter`, `leave`, `addClass`
+ * etc).
+ * - **options** `{Object}` - A collection of options/styles used for the animation.
+ * @return {Function} The current filter function or `null` if there is none set.
+ */
+ this.customFilter = function(filterFn) {
+ if (arguments.length === 1) {
+ customFilter = isFunction(filterFn) ? filterFn : null;
+ }
+
+ return customFilter;
+ };
+
+ /**
+ * @ngdoc method
* @name $animateProvider#classNameFilter
*
* @description
@@ -5087,21 +5632,26 @@ var $AnimateProvider = ['$provide', function($provide) {
* When setting the `classNameFilter` value, animations will only be performed on elements
* that successfully match the filter expression. This in turn can boost performance
* for low-powered devices as well as applications containing a lot of structural operations.
+ *
+ * **Note:** If present, `classNameFilter` will be checked after
+ * {@link $animateProvider#customFilter customFilter}. If `customFilter` is present and returns
+ * false, `classNameFilter` will not be checked.
+ *
* @param {RegExp=} expression The className expression which will be checked against all animations
* @return {RegExp} The current CSS className expression value. If null then there is no expression value
*/
this.classNameFilter = function(expression) {
if (arguments.length === 1) {
- this.$$classNameFilter = (expression instanceof RegExp) ? expression : null;
- if (this.$$classNameFilter) {
- var reservedRegex = new RegExp("(\\s+|\\/)" + NG_ANIMATE_CLASSNAME + "(\\s+|\\/)");
- if (reservedRegex.test(this.$$classNameFilter.toString())) {
- throw $animateMinErr('nongcls','$animateProvider.classNameFilter(regex) prohibits accepting a regex value which matches/contains the "{0}" CSS class.', NG_ANIMATE_CLASSNAME);
-
+ classNameFilter = (expression instanceof RegExp) ? expression : null;
+ if (classNameFilter) {
+ var reservedRegex = new RegExp('[(\\s|\\/)]' + NG_ANIMATE_CLASSNAME + '[(\\s|\\/)]');
+ if (reservedRegex.test(classNameFilter.toString())) {
+ classNameFilter = null;
+ throw $animateMinErr('nongcls', '$animateProvider.classNameFilter(regex) prohibits accepting a regex value which matches/contains the "{0}" CSS class.', NG_ANIMATE_CLASSNAME);
}
}
}
- return this.$$classNameFilter;
+ return classNameFilter;
};
this.$get = ['$$animateQueue', function($$animateQueue) {
@@ -5115,7 +5665,11 @@ var $AnimateProvider = ['$provide', function($provide) {
afterElement = null;
}
}
- afterElement ? afterElement.after(element) : parentElement.prepend(element);
+ if (afterElement) {
+ afterElement.after(element);
+ } else {
+ parentElement.prepend(element);
+ }
}
/**
@@ -5181,15 +5735,20 @@ var $AnimateProvider = ['$provide', function($provide) {
* // remove all the animation event listeners listening for `enter`
* $animate.off('enter');
*
+ * // remove listeners for all animation events from the container element
+ * $animate.off(container);
+ *
* // remove all the animation event listeners listening for `enter` on the given element and its children
* $animate.off('enter', container);
*
- * // remove the event listener function provided by `listenerFn` that is set
- * // to listen for `enter` on the given `element` as well as its children
+ * // remove the event listener function provided by `callback` that is set
+ * // to listen for `enter` on the given `container` as well as its children
* $animate.off('enter', container, callback);
* ```
*
- * @param {string} event the animation event (e.g. enter, leave, move, addClass, removeClass, etc...)
+ * @param {string|DOMElement} event|container the animation event (e.g. enter, leave, move,
+ * addClass, removeClass, etc...), or the container element. If it is the element, all other
+ * arguments are ignored.
* @param {DOMElement=} container the container element the event listener was placed on
* @param {Function=} callback the callback function that was registered as the listener
*/
@@ -5253,7 +5812,9 @@ var $AnimateProvider = ['$provide', function($provide) {
* @param {Promise} animationPromise The animation promise that is returned when an animation is started.
*/
cancel: function(runner) {
- runner.end && runner.end();
+ if (runner.end) {
+ runner.end();
+ }
},
/**
@@ -5270,7 +5831,13 @@ var $AnimateProvider = ['$provide', function($provide) {
* @param {DOMElement} parent the parent element which will append the element as
* a child (so long as the after element is not present)
* @param {DOMElement=} after the sibling element after which the element will be appended
- * @param {object=} options an optional collection of options/styles that will be applied to the element
+ * @param {object=} options an optional collection of options/styles that will be applied to the element.
+ * The object can have the following properties:
+ *
+ * - **addClass** - `{string}` - space-separated CSS classes to add to element
+ * - **from** - `{Object}` - CSS properties & values at the beginning of animation. Must have matching `to`
+ * - **removeClass** - `{string}` - space-separated CSS classes to remove from element
+ * - **to** - `{Object}` - CSS properties & values at end of animation. Must have matching `from`
*
* @return {Promise} the animation callback promise
*/
@@ -5296,7 +5863,13 @@ var $AnimateProvider = ['$provide', function($provide) {
* @param {DOMElement} parent the parent element which will append the element as
* a child (so long as the after element is not present)
* @param {DOMElement=} after the sibling element after which the element will be appended
- * @param {object=} options an optional collection of options/styles that will be applied to the element
+ * @param {object=} options an optional collection of options/styles that will be applied to the element.
+ * The object can have the following properties:
+ *
+ * - **addClass** - `{string}` - space-separated CSS classes to add to element
+ * - **from** - `{Object}` - CSS properties & values at the beginning of animation. Must have matching `to`
+ * - **removeClass** - `{string}` - space-separated CSS classes to remove from element
+ * - **to** - `{Object}` - CSS properties & values at end of animation. Must have matching `from`
*
* @return {Promise} the animation callback promise
*/
@@ -5317,7 +5890,13 @@ var $AnimateProvider = ['$provide', function($provide) {
* digest once the animation has completed.
*
* @param {DOMElement} element the element which will be removed from the DOM
- * @param {object=} options an optional collection of options/styles that will be applied to the element
+ * @param {object=} options an optional collection of options/styles that will be applied to the element.
+ * The object can have the following properties:
+ *
+ * - **addClass** - `{string}` - space-separated CSS classes to add to element
+ * - **from** - `{Object}` - CSS properties & values at the beginning of animation. Must have matching `to`
+ * - **removeClass** - `{string}` - space-separated CSS classes to remove from element
+ * - **to** - `{Object}` - CSS properties & values at end of animation. Must have matching `from`
*
* @return {Promise} the animation callback promise
*/
@@ -5341,7 +5920,13 @@ var $AnimateProvider = ['$provide', function($provide) {
*
* @param {DOMElement} element the element which the CSS classes will be applied to
* @param {string} className the CSS class(es) that will be added (multiple classes are separated via spaces)
- * @param {object=} options an optional collection of options/styles that will be applied to the element
+ * @param {object=} options an optional collection of options/styles that will be applied to the element.
+ * The object can have the following properties:
+ *
+ * - **addClass** - `{string}` - space-separated CSS classes to add to element
+ * - **from** - `{Object}` - CSS properties & values at the beginning of animation. Must have matching `to`
+ * - **removeClass** - `{string}` - space-separated CSS classes to remove from element
+ * - **to** - `{Object}` - CSS properties & values at end of animation. Must have matching `from`
*
* @return {Promise} the animation callback promise
*/
@@ -5365,7 +5950,13 @@ var $AnimateProvider = ['$provide', function($provide) {
*
* @param {DOMElement} element the element which the CSS classes will be applied to
* @param {string} className the CSS class(es) that will be removed (multiple classes are separated via spaces)
- * @param {object=} options an optional collection of options/styles that will be applied to the element
+ * @param {object=} options an optional collection of options/styles that will be applied to the element.
+ * The object can have the following properties:
+ *
+ * - **addClass** - `{string}` - space-separated CSS classes to add to element
+ * - **from** - `{Object}` - CSS properties & values at the beginning of animation. Must have matching `to`
+ * - **removeClass** - `{string}` - space-separated CSS classes to remove from element
+ * - **to** - `{Object}` - CSS properties & values at end of animation. Must have matching `from`
*
* @return {Promise} the animation callback promise
*/
@@ -5390,7 +5981,13 @@ var $AnimateProvider = ['$provide', function($provide) {
* @param {DOMElement} element the element which the CSS classes will be applied to
* @param {string} add the CSS class(es) that will be added (multiple classes are separated via spaces)
* @param {string} remove the CSS class(es) that will be removed (multiple classes are separated via spaces)
- * @param {object=} options an optional collection of options/styles that will be applied to the element
+ * @param {object=} options an optional collection of options/styles that will be applied to the element.
+ * The object can have the following properties:
+ *
+ * - **addClass** - `{string}` - space-separated CSS classes to add to element
+ * - **from** - `{Object}` - CSS properties & values at the beginning of animation. Must have matching `to`
+ * - **removeClass** - `{string}` - space-separated CSS classes to remove from element
+ * - **to** - `{Object}` - CSS properties & values at end of animation. Must have matching `from`
*
* @return {Promise} the animation callback promise
*/
@@ -5430,8 +6027,14 @@ var $AnimateProvider = ['$provide', function($provide) {
* @param {object} to the to (destination) CSS styles that will be applied to the element and across the animation.
* @param {string=} className an optional CSS class that will be applied to the element for the duration of the animation. If
* this value is left as empty then a CSS class of `ng-inline-animate` will be applied to the element.
- * (Note that if no animation is detected then this value will not be appplied to the element.)
- * @param {object=} options an optional collection of options/styles that will be applied to the element
+ * (Note that if no animation is detected then this value will not be applied to the element.)
+ * @param {object=} options an optional collection of options/styles that will be applied to the element.
+ * The object can have the following properties:
+ *
+ * - **addClass** - `{string}` - space-separated CSS classes to add to element
+ * - **from** - `{Object}` - CSS properties & values at the beginning of animation. Must have matching `to`
+ * - **removeClass** - `{string}` - space-separated CSS classes to remove from element
+ * - **to** - `{Object}` - CSS properties & values at end of animation. Must have matching `from`
*
* @return {Promise} the animation callback promise
*/
@@ -5448,7 +6051,7 @@ var $AnimateProvider = ['$provide', function($provide) {
}];
}];
-var $$AnimateAsyncRunFactoryProvider = function() {
+var $$AnimateAsyncRunFactoryProvider = /** @this */ function() {
this.$get = ['$$rAF', function($$rAF) {
var waitQueue = [];
@@ -5469,15 +6072,19 @@ var $$AnimateAsyncRunFactoryProvider = function() {
passed = true;
});
return function(callback) {
- passed ? callback() : waitForTick(callback);
+ if (passed) {
+ callback();
+ } else {
+ waitForTick(callback);
+ }
};
};
}];
};
-var $$AnimateRunnerFactoryProvider = function() {
- this.$get = ['$q', '$sniffer', '$$animateAsyncRun', '$document', '$timeout',
- function($q, $sniffer, $$animateAsyncRun, $document, $timeout) {
+var $$AnimateRunnerFactoryProvider = /** @this */ function() {
+ this.$get = ['$q', '$sniffer', '$$animateAsyncRun', '$$isDocumentHidden', '$timeout',
+ function($q, $sniffer, $$animateAsyncRun, $$isDocumentHidden, $timeout) {
var INITIAL_STATE = 0;
var DONE_PENDING_STATE = 1;
@@ -5529,11 +6136,7 @@ var $$AnimateRunnerFactoryProvider = function() {
this._doneCallbacks = [];
this._tick = function(fn) {
- var doc = $document[0];
-
- // the document may not be ready or attached
- // to the module for some internal tests
- if (doc && doc.hidden) {
+ if ($$isDocumentHidden()) {
timeoutTick(fn);
} else {
rafTick(fn);
@@ -5562,7 +6165,11 @@ var $$AnimateRunnerFactoryProvider = function() {
var self = this;
this.promise = $q(function(resolve, reject) {
self.done(function(status) {
- status === false ? reject() : resolve();
+ if (status === false) {
+ reject();
+ } else {
+ resolve();
+ }
});
});
}
@@ -5632,10 +6239,13 @@ var $$AnimateRunnerFactoryProvider = function() {
}];
};
+/* exported $CoreAnimateCssProvider */
+
/**
* @ngdoc service
* @name $animateCss
* @kind object
+ * @this
*
* @description
* This is the core version of `$animateCss`. By default, only when the `ngAnimate` is included,
@@ -5668,7 +6278,6 @@ var $CoreAnimateCssProvider = function() {
options.from = null;
}
- /* jshint newcap: false*/
var closed, runner = new $$AnimateRunner();
return {
start: run,
@@ -5729,7 +6338,6 @@ var $CoreAnimateCssProvider = function() {
*/
function Browser(window, document, $log, $sniffer) {
var self = this,
- rawDocument = document[0],
location = window.location,
history = window.history,
setTimeout = window.setTimeout,
@@ -5792,10 +6400,16 @@ function Browser(window, document, $log, $sniffer) {
var cachedState, lastHistoryState,
lastBrowserUrl = location.href,
baseElement = document.find('base'),
- pendingLocation = null;
+ pendingLocation = null,
+ getCurrentState = !$sniffer.history ? noop : function getCurrentState() {
+ try {
+ return history.state;
+ } catch (e) {
+ // MSIE can reportedly throw when there is no state (UNCONFIRMED).
+ }
+ };
cacheState();
- lastHistoryState = cachedState;
/**
* @name $browser#url
@@ -5849,10 +6463,8 @@ function Browser(window, document, $log, $sniffer) {
if ($sniffer.history && (!sameBase || !sameState)) {
history[replace ? 'replaceState' : 'pushState'](state, '', url);
cacheState();
- // Do the assignment again so that those two variables are referentially identical.
- lastHistoryState = cachedState;
} else {
- if (!sameBase || pendingLocation) {
+ if (!sameBase) {
pendingLocation = url;
}
if (replace) {
@@ -5866,6 +6478,9 @@ function Browser(window, document, $log, $sniffer) {
pendingLocation = url;
}
}
+ if (pendingLocation) {
+ pendingLocation = url;
+ }
return self;
// getter
} else {
@@ -5873,7 +6488,7 @@ function Browser(window, document, $log, $sniffer) {
// the new location.href if a reload happened or if there is a bug like in iOS 9 (see
// https://openradar.appspot.com/22186109).
// - the replacement is a workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=407172
- return pendingLocation || location.href.replace(/%27/g,"'");
+ return pendingLocation || location.href.replace(/%27/g,'\'');
}
};
@@ -5896,16 +6511,7 @@ function Browser(window, document, $log, $sniffer) {
function cacheStateAndFireUrlChange() {
pendingLocation = null;
- cacheState();
- fireUrlChange();
- }
-
- function getCurrentState() {
- try {
- return history.state;
- } catch (e) {
- // MSIE can reportedly throw when there is no state (UNCONFIRMED).
- }
+ fireStateOrUrlChange();
}
// This variable should be used *only* inside the cacheState function.
@@ -5919,11 +6525,16 @@ function Browser(window, document, $log, $sniffer) {
if (equals(cachedState, lastCachedState)) {
cachedState = lastCachedState;
}
+
lastCachedState = cachedState;
+ lastHistoryState = cachedState;
}
- function fireUrlChange() {
- if (lastBrowserUrl === self.url() && lastHistoryState === cachedState) {
+ function fireStateOrUrlChange() {
+ var prevLastHistoryState = lastHistoryState;
+ cacheState();
+
+ if (lastBrowserUrl === self.url() && prevLastHistoryState === cachedState) {
return;
}
@@ -5958,8 +6569,8 @@ function Browser(window, document, $log, $sniffer) {
self.onUrlChange = function(callback) {
// TODO(vojta): refactor to use node's syntax for events
if (!urlChangeInit) {
- // We listen on both (hashchange/popstate) when available, as some browsers (e.g. Opera)
- // don't fire popstate when user change the address bar and don't fire hashchange when url
+ // We listen on both (hashchange/popstate) when available, as some browsers don't
+ // fire popstate when user changes the address bar and don't fire hashchange when url
// changed by push/replaceState
// html5 history api - popstate event
@@ -5989,7 +6600,7 @@ function Browser(window, document, $log, $sniffer) {
* Needs to be exported to be able to check for changes that have been done in sync,
* as hashchange/popstate events fire in async.
*/
- self.$$checkUrlChange = fireUrlChange;
+ self.$$checkUrlChange = fireStateOrUrlChange;
//////////////////////////////////////////////////////////////
// Misc API
@@ -6006,7 +6617,7 @@ function Browser(window, document, $log, $sniffer) {
*/
self.baseHref = function() {
var href = baseElement.attr('href');
- return href ? href.replace(/^(https?\:)?\/\/[^\/]*/, '') : '';
+ return href ? href.replace(/^(https?:)?\/\/[^/]*/, '') : '';
};
/**
@@ -6057,6 +6668,7 @@ function Browser(window, document, $log, $sniffer) {
}
+/** @this */
function $BrowserProvider() {
this.$get = ['$window', '$log', '$sniffer', '$document',
function($window, $log, $sniffer, $document) {
@@ -6067,6 +6679,7 @@ function $BrowserProvider() {
/**
* @ngdoc service
* @name $cacheFactory
+ * @this
*
* @description
* Factory that constructs {@link $cacheFactory.Cache Cache} objects and gives access to
@@ -6103,7 +6716,7 @@ function $BrowserProvider() {
* - `{void}` `destroy()` — Removes references to this cache from $cacheFactory.
*
* @example
- <example module="cacheExampleApp">
+ <example module="cacheExampleApp" name="cache-factory">
<file name="index.html">
<div ng-controller="CacheController">
<input ng-model="newCacheKey" placeholder="Key">
@@ -6152,7 +6765,7 @@ function $CacheFactoryProvider() {
function cacheFactory(cacheId, options) {
if (cacheId in caches) {
- throw minErr('$cacheFactory')('iid', "CacheId '{0}' is already taken!", cacheId);
+ throw minErr('$cacheFactory')('iid', 'CacheId \'{0}\' is already taken!', cacheId);
}
var size = 0,
@@ -6202,7 +6815,7 @@ function $CacheFactoryProvider() {
* }));
* ```
*/
- return caches[cacheId] = {
+ return (caches[cacheId] = {
/**
* @ngdoc method
@@ -6280,8 +6893,8 @@ function $CacheFactoryProvider() {
if (!lruEntry) return;
- if (lruEntry == freshEnd) freshEnd = lruEntry.p;
- if (lruEntry == staleEnd) staleEnd = lruEntry.n;
+ if (lruEntry === freshEnd) freshEnd = lruEntry.p;
+ if (lruEntry === staleEnd) staleEnd = lruEntry.n;
link(lruEntry.n,lruEntry.p);
delete lruHash[key];
@@ -6346,17 +6959,17 @@ function $CacheFactoryProvider() {
info: function() {
return extend({}, stats, {size: size});
}
- };
+ });
/**
* makes the `entry` the freshEnd of the LRU linked list
*/
function refresh(entry) {
- if (entry != freshEnd) {
+ if (entry !== freshEnd) {
if (!staleEnd) {
staleEnd = entry;
- } else if (staleEnd == entry) {
+ } else if (staleEnd === entry) {
staleEnd = entry.n;
}
@@ -6372,7 +6985,7 @@ function $CacheFactoryProvider() {
* bidirectionally links two entries of the LRU linked list
*/
function link(nextEntry, prevEntry) {
- if (nextEntry != prevEntry) {
+ if (nextEntry !== prevEntry) {
if (nextEntry) nextEntry.p = prevEntry; //p stands for previous, 'prev' didn't minify
if (prevEntry) prevEntry.n = nextEntry; //n stands for next, 'next' didn't minify
}
@@ -6420,6 +7033,7 @@ function $CacheFactoryProvider() {
/**
* @ngdoc service
* @name $templateCache
+ * @this
*
* @description
* The first time a template is used, it is loaded in the template cache for quick retrieval. You
@@ -6447,12 +7061,14 @@ function $CacheFactoryProvider() {
* });
* ```
*
- * To retrieve the template later, simply use it in your HTML:
- * ```html
- * <div ng-include=" 'templateId.html' "></div>
+ * To retrieve the template later, simply use it in your component:
+ * ```js
+ * myApp.component('myComponent', {
+ * templateUrl: 'templateId.html'
+ * });
* ```
*
- * or get it via Javascript:
+ * or get it via the `$templateCache` service:
* ```js
* $templateCache.get('templateId.html')
* ```
@@ -6474,7 +7090,7 @@ function $TemplateCacheProvider() {
* *
* Does the change somehow allow for arbitrary javascript to be executed? *
* Or allows for someone to change the prototype of built-in objects? *
- * Or gives undesired access to variables likes document or window? *
+ * Or gives undesired access to variables like document or window? *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/* ! VARIABLE/FUNCTION NAMING CONVENTIONS THAT APPLY TO THIS FILE!
@@ -6518,8 +7134,9 @@ function $TemplateCacheProvider() {
* There are many different options for a directive.
*
* The difference resides in the return value of the factory function.
- * You can either return a "Directive Definition Object" (see below) that defines the directive properties,
- * or just the `postLink` function (all other properties will have the default values).
+ * You can either return a {@link $compile#directive-definition-object Directive Definition Object (see below)}
+ * that defines the directive properties, or just the `postLink` function (all other properties will have
+ * the default values).
*
* <div class="alert alert-success">
* **Best Practice:** It's recommended to use the "directive definition object" form.
@@ -6532,33 +7149,34 @@ function $TemplateCacheProvider() {
*
* myModule.directive('directiveName', function factory(injectables) {
* var directiveDefinitionObject = {
- * priority: 0,
- * template: '<div></div>', // or // function(tElement, tAttrs) { ... },
+ * {@link $compile#-priority- priority}: 0,
+ * {@link $compile#-template- template}: '<div></div>', // or // function(tElement, tAttrs) { ... },
* // or
- * // templateUrl: 'directive.html', // or // function(tElement, tAttrs) { ... },
- * transclude: false,
- * restrict: 'A',
- * templateNamespace: 'html',
- * scope: false,
- * controller: function($scope, $element, $attrs, $transclude, otherInjectables) { ... },
- * controllerAs: 'stringIdentifier',
- * bindToController: false,
- * require: 'siblingDirectiveName', // or // ['^parentDirectiveName', '?optionalDirectiveName', '?^optionalParent'],
- * compile: function compile(tElement, tAttrs, transclude) {
+ * // {@link $compile#-templateurl- templateUrl}: 'directive.html', // or // function(tElement, tAttrs) { ... },
+ * {@link $compile#-transclude- transclude}: false,
+ * {@link $compile#-restrict- restrict}: 'A',
+ * {@link $compile#-templatenamespace- templateNamespace}: 'html',
+ * {@link $compile#-scope- scope}: false,
+ * {@link $compile#-controller- controller}: function($scope, $element, $attrs, $transclude, otherInjectables) { ... },
+ * {@link $compile#-controlleras- controllerAs}: 'stringIdentifier',
+ * {@link $compile#-bindtocontroller- bindToController}: false,
+ * {@link $compile#-require- require}: 'siblingDirectiveName', // or // ['^parentDirectiveName', '?optionalDirectiveName', '?^optionalParent'],
+ * {@link $compile#-multielement- multiElement}: false,
+ * {@link $compile#-compile- compile}: function compile(tElement, tAttrs, transclude) {
* return {
- * pre: function preLink(scope, iElement, iAttrs, controller) { ... },
- * post: function postLink(scope, iElement, iAttrs, controller) { ... }
+ * {@link $compile#pre-linking-function pre}: function preLink(scope, iElement, iAttrs, controller) { ... },
+ * {@link $compile#post-linking-function post}: function postLink(scope, iElement, iAttrs, controller) { ... }
* }
* // or
* // return function postLink( ... ) { ... }
* },
* // or
- * // link: {
- * // pre: function preLink(scope, iElement, iAttrs, controller) { ... },
- * // post: function postLink(scope, iElement, iAttrs, controller) { ... }
+ * // {@link $compile#-link- link}: {
+ * // {@link $compile#pre-linking-function pre}: function preLink(scope, iElement, iAttrs, controller) { ... },
+ * // {@link $compile#post-linking-function post}: function postLink(scope, iElement, iAttrs, controller) { ... }
* // }
* // or
- * // link: function postLink( ... ) { ... }
+ * // {@link $compile#-link- link}: function postLink( ... ) { ... }
* };
* return directiveDefinitionObject;
* });
@@ -6583,6 +7201,126 @@ function $TemplateCacheProvider() {
* });
* ```
*
+ * ### Life-cycle hooks
+ * Directive controllers can provide the following methods that are called by Angular at points in the life-cycle of the
+ * directive:
+ * * `$onInit()` - Called on each controller after all the controllers on an element have been constructed and
+ * had their bindings initialized (and before the pre &amp; post linking functions for the directives on
+ * this element). This is a good place to put initialization code for your controller.
+ * * `$onChanges(changesObj)` - Called whenever one-way (`<`) or interpolation (`@`) bindings are updated. The
+ * `changesObj` is a hash whose keys are the names of the bound properties that have changed, and the values are an
+ * object of the form `{ currentValue, previousValue, isFirstChange() }`. Use this hook to trigger updates within a
+ * component such as cloning the bound value to prevent accidental mutation of the outer value. Note that this will
+ * also be called when your bindings are initialized.
+ * * `$doCheck()` - Called on each turn of the digest cycle. Provides an opportunity to detect and act on
+ * changes. Any actions that you wish to take in response to the changes that you detect must be
+ * invoked from this hook; implementing this has no effect on when `$onChanges` is called. For example, this hook
+ * could be useful if you wish to perform a deep equality check, or to check a Date object, changes to which would not
+ * be detected by Angular's change detector and thus not trigger `$onChanges`. This hook is invoked with no arguments;
+ * if detecting changes, you must store the previous value(s) for comparison to the current values.
+ * * `$onDestroy()` - Called on a controller when its containing scope is destroyed. Use this hook for releasing
+ * external resources, watches and event handlers. Note that components have their `$onDestroy()` hooks called in
+ * the same order as the `$scope.$broadcast` events are triggered, which is top down. This means that parent
+ * components will have their `$onDestroy()` hook called before child components.
+ * * `$postLink()` - Called after this controller's element and its children have been linked. Similar to the post-link
+ * function this hook can be used to set up DOM event handlers and do direct DOM manipulation.
+ * Note that child elements that contain `templateUrl` directives will not have been compiled and linked since
+ * they are waiting for their template to load asynchronously and their own compilation and linking has been
+ * suspended until that occurs.
+ *
+ * #### Comparison with Angular 2 life-cycle hooks
+ * Angular 2 also uses life-cycle hooks for its components. While the Angular 1 life-cycle hooks are similar there are
+ * some differences that you should be aware of, especially when it comes to moving your code from Angular 1 to Angular 2:
+ *
+ * * Angular 1 hooks are prefixed with `$`, such as `$onInit`. Angular 2 hooks are prefixed with `ng`, such as `ngOnInit`.
+ * * Angular 1 hooks can be defined on the controller prototype or added to the controller inside its constructor.
+ * In Angular 2 you can only define hooks on the prototype of the Component class.
+ * * Due to the differences in change-detection, you may get many more calls to `$doCheck` in Angular 1 than you would to
+ * `ngDoCheck` in Angular 2
+ * * Changes to the model inside `$doCheck` will trigger new turns of the digest loop, which will cause the changes to be
+ * propagated throughout the application.
+ * Angular 2 does not allow the `ngDoCheck` hook to trigger a change outside of the component. It will either throw an
+ * error or do nothing depending upon the state of `enableProdMode()`.
+ *
+ * #### Life-cycle hook examples
+ *
+ * This example shows how you can check for mutations to a Date object even though the identity of the object
+ * has not changed.
+ *
+ * <example name="doCheckDateExample" module="do-check-module">
+ * <file name="app.js">
+ * angular.module('do-check-module', [])
+ * .component('app', {
+ * template:
+ * 'Month: <input ng-model="$ctrl.month" ng-change="$ctrl.updateDate()">' +
+ * 'Date: {{ $ctrl.date }}' +
+ * '<test date="$ctrl.date"></test>',
+ * controller: function() {
+ * this.date = new Date();
+ * this.month = this.date.getMonth();
+ * this.updateDate = function() {
+ * this.date.setMonth(this.month);
+ * };
+ * }
+ * })
+ * .component('test', {
+ * bindings: { date: '<' },
+ * template:
+ * '<pre>{{ $ctrl.log | json }}</pre>',
+ * controller: function() {
+ * var previousValue;
+ * this.log = [];
+ * this.$doCheck = function() {
+ * var currentValue = this.date && this.date.valueOf();
+ * if (previousValue !== currentValue) {
+ * this.log.push('doCheck: date mutated: ' + this.date);
+ * previousValue = currentValue;
+ * }
+ * };
+ * }
+ * });
+ * </file>
+ * <file name="index.html">
+ * <app></app>
+ * </file>
+ * </example>
+ *
+ * This example show how you might use `$doCheck` to trigger changes in your component's inputs even if the
+ * actual identity of the component doesn't change. (Be aware that cloning and deep equality checks on large
+ * arrays or objects can have a negative impact on your application performance)
+ *
+ * <example name="doCheckArrayExample" module="do-check-module">
+ * <file name="index.html">
+ * <div ng-init="items = []">
+ * <button ng-click="items.push(items.length)">Add Item</button>
+ * <button ng-click="items = []">Reset Items</button>
+ * <pre>{{ items }}</pre>
+ * <test items="items"></test>
+ * </div>
+ * </file>
+ * <file name="app.js">
+ * angular.module('do-check-module', [])
+ * .component('test', {
+ * bindings: { items: '<' },
+ * template:
+ * '<pre>{{ $ctrl.log | json }}</pre>',
+ * controller: function() {
+ * this.log = [];
+ *
+ * this.$doCheck = function() {
+ * if (this.items_ref !== this.items) {
+ * this.log.push('doCheck: items changed');
+ * this.items_ref = this.items;
+ * }
+ * if (!angular.equals(this.items_clone, this.items)) {
+ * this.log.push('doCheck: items mutated');
+ * this.items_clone = angular.copy(this.items);
+ * }
+ * };
+ * }
+ * });
+ * </file>
+ * </example>
*
*
* ### Directive Definition Object
@@ -6591,10 +7329,10 @@ function $TemplateCacheProvider() {
* compiler}. The attributes are:
*
* #### `multiElement`
- * When this property is set to true, the HTML compiler will collect DOM nodes between
+ * When this property is set to true (default is `false`), the HTML compiler will collect DOM nodes between
* nodes with the attributes `directive-name-start` and `directive-name-end`, and group them
* together as the directive elements. It is recommended that this feature be used on directives
- * which are not strictly behavioural (such as {@link ngClick}), and which
+ * which are not strictly behavioral (such as {@link ngClick}), and which
* do not manipulate or replace child nodes (such as {@link ngInclude}).
*
* #### `priority`
@@ -6612,19 +7350,21 @@ function $TemplateCacheProvider() {
* and other directives used in the directive's template will also be excluded from execution.
*
* #### `scope`
- * The scope property can be `true`, an object or a falsy value:
+ * The scope property can be `false`, `true`, or an object:
*
- * * **falsy:** No scope will be created for the directive. The directive will use its parent's scope.
+ * * **`false` (default):** No scope will be created for the directive. The directive will use its
+ * parent's scope.
*
* * **`true`:** A new child scope that prototypically inherits from its parent will be created for
* the directive's element. If multiple directives on the same element request a new scope,
- * only one new scope is created. The new scope rule does not apply for the root of the template
- * since the root of the template always gets a new scope.
+ * only one new scope is created.
*
- * * **`{...}` (an object hash):** A new "isolate" scope is created for the directive's element. The
- * 'isolate' scope differs from normal scope in that it does not prototypically inherit from its parent
- * scope. This is useful when creating reusable components, which should not accidentally read or modify
- * data in the parent scope.
+ * * **`{...}` (an object hash):** A new "isolate" scope is created for the directive's template.
+ * The 'isolate' scope differs from normal scope in that it does not prototypically
+ * inherit from its parent scope. This is useful when creating reusable components, which should not
+ * accidentally read or modify data in the parent scope. Note that an isolate scope
+ * directive without a `template` or `templateUrl` will not apply the isolate scope
+ * to its children elements.
*
* The 'isolate' scope object hash defines a set of local scope properties derived from attributes on the
* directive's element. These local properties are useful for aliasing values for templates. The keys in
@@ -6656,6 +7396,30 @@ function $TemplateCacheProvider() {
* to watch the evaluated value shallowly with {@link ng.$rootScope.Scope#$watchCollection
* `$watchCollection`}: use `=*` or `=*attr` (`=*?` or `=*?attr` if the attribute is optional).
*
+ * * `<` or `<attr` - set up a one-way (one-directional) binding between a local scope property and an
+ * expression passed via the attribute `attr`. The expression is evaluated in the context of the
+ * parent scope. If no `attr` name is specified then the attribute name is assumed to be the same as the
+ * local name. You can also make the binding optional by adding `?`: `<?` or `<?attr`.
+ *
+ * For example, given `<my-component my-attr="parentModel">` and directive definition of
+ * `scope: { localModel:'<myAttr' }`, then the isolated scope property `localModel` will reflect the
+ * value of `parentModel` on the parent scope. Any changes to `parentModel` will be reflected
+ * in `localModel`, but changes in `localModel` will not reflect in `parentModel`. There are however
+ * two caveats:
+ * 1. one-way binding does not copy the value from the parent to the isolate scope, it simply
+ * sets the same value. That means if your bound value is an object, changes to its properties
+ * in the isolated scope will be reflected in the parent scope (because both reference the same object).
+ * 2. one-way binding watches changes to the **identity** of the parent value. That means the
+ * {@link ng.$rootScope.Scope#$watch `$watch`} on the parent value only fires if the reference
+ * to the value has changed. In most cases, this should not be of concern, but can be important
+ * to know if you one-way bind to an object, and then replace that object in the isolated scope.
+ * If you now change a property of the object in your parent scope, the change will not be
+ * propagated to the isolated scope, because the identity of the object on the parent scope
+ * has not changed. Instead you must assign a new object.
+ *
+ * One-way binding is useful if you do not plan to propagate changes to your isolated scope bindings
+ * back to the parent. However, it does not make this completely impossible.
+ *
* * `&` or `&attr` - provides a way to execute an expression in the context of the parent scope. If
* no `attr` name is specified then the attribute name is assumed to be the same as the local name.
* Given `<my-component my-attr="count = count + value">` and the isolate scope definition `scope: {
@@ -6682,13 +7446,21 @@ function $TemplateCacheProvider() {
*
* #### `bindToController`
* This property is used to bind scope properties directly to the controller. It can be either
- * `true` or an object hash with the same format as the `scope` property. Additionally, a controller
- * alias must be set, either by using `controllerAs: 'myAlias'` or by specifying the alias in the controller
- * definition: `controller: 'myCtrl as myAlias'`.
+ * `true` or an object hash with the same format as the `scope` property.
*
* When an isolate scope is used for a directive (see above), `bindToController: true` will
- * allow a component to have its properties bound to the controller, rather than to scope. When the controller
- * is instantiated, the initial values of the isolate scope bindings are already available.
+ * allow a component to have its properties bound to the controller, rather than to scope.
+ *
+ * After the controller is instantiated, the initial values of the isolate scope bindings will be bound to the controller
+ * properties. You can access these bindings once they have been initialized by providing a controller method called
+ * `$onInit`, which is called after all the controllers on an element have been constructed and had their bindings
+ * initialized.
+ *
+ * <div class="alert alert-warning">
+ * **Deprecation warning:** if `$compileProcvider.preAssignBindingsEnabled(true)` was called, bindings for non-ES6 class
+ * controllers are bound to `this` before the controller constructor is called but this use is now deprecated. Please
+ * place initialization code that relies upon bindings inside a `$onInit` method on the controller, instead.
+ * </div>
*
* It is also possible to set `bindToController` to an object hash with the same format as the `scope` property.
* This will set up the scope bindings to the controller directly. Note that `scope` can still be used
@@ -6708,25 +7480,41 @@ function $TemplateCacheProvider() {
* * `$element` - Current element
* * `$attrs` - Current attributes object for the element
* * `$transclude` - A transclude linking function pre-bound to the correct transclusion scope:
- * `function([scope], cloneLinkingFn, futureParentElement)`.
- * * `scope`: optional argument to override the scope.
- * * `cloneLinkingFn`: optional argument to create clones of the original transcluded content.
- * * `futureParentElement`:
+ * `function([scope], cloneLinkingFn, futureParentElement, slotName)`:
+ * * `scope`: (optional) override the scope.
+ * * `cloneLinkingFn`: (optional) argument to create clones of the original transcluded content.
+ * * `futureParentElement` (optional):
* * defines the parent to which the `cloneLinkingFn` will add the cloned elements.
* * default: `$element.parent()` resp. `$element` for `transclude:'element'` resp. `transclude:true`.
* * only needed for transcludes that are allowed to contain non html elements (e.g. SVG elements)
- * and when the `cloneLinkinFn` is passed,
+ * and when the `cloneLinkingFn` is passed,
* as those elements need to created and cloned in a special way when they are defined outside their
* usual containers (e.g. like `<svg>`).
* * See also the `directive.templateNamespace` property.
- *
+ * * `slotName`: (optional) the name of the slot to transclude. If falsy (e.g. `null`, `undefined` or `''`)
+ * then the default transclusion is provided.
+ * The `$transclude` function also has a method on it, `$transclude.isSlotFilled(slotName)`, which returns
+ * `true` if the specified slot contains content (i.e. one or more DOM nodes).
*
* #### `require`
* Require another directive and inject its controller as the fourth argument to the linking function. The
- * `require` takes a string name (or array of strings) of the directive(s) to pass in. If an array is used, the
- * injected argument will be an array in corresponding order. If no such directive can be
- * found, or if the directive does not have a controller, then an error is raised (unless no link function
- * is specified, in which case error checking is skipped). The name can be prefixed with:
+ * `require` property can be a string, an array or an object:
+ * * a **string** containing the name of the directive to pass to the linking function
+ * * an **array** containing the names of directives to pass to the linking function. The argument passed to the
+ * linking function will be an array of controllers in the same order as the names in the `require` property
+ * * an **object** whose property values are the names of the directives to pass to the linking function. The argument
+ * passed to the linking function will also be an object with matching keys, whose values will hold the corresponding
+ * controllers.
+ *
+ * If the `require` property is an object and `bindToController` is truthy, then the required controllers are
+ * bound to the controller using the keys of the `require` property. This binding occurs after all the controllers
+ * have been constructed but before `$onInit` is called.
+ * If the name of the required controller is the same as the local name (the key), the name can be
+ * omitted. For example, `{parentDir: '^^'}` is equivalent to `{parentDir: '^^parentDir'}`.
+ * See the {@link $compileProvider#component} helper for an example of how this can be used.
+ * If no such required directive(s) can be found, or if the directive does not have a controller, then an error is
+ * raised (unless no link function is specified and the required controllers are not being bound to the directive
+ * controller, in which case error checking is skipped). The name can be prefixed with:
*
* * (no prefix) - Locate the required controller on the current element. Throw an error if not found.
* * `?` - Attempt to locate the required controller or pass `null` to the `link` fn if not found.
@@ -6819,14 +7607,6 @@ function $TemplateCacheProvider() {
* The contents are compiled and provided to the directive as a **transclusion function**. See the
* {@link $compile#transclusion Transclusion} section below.
*
- * There are two kinds of transclusion depending upon whether you want to transclude just the contents of the
- * directive's element or the entire element:
- *
- * * `true` - transclude the content (i.e. the child nodes) of the directive's element.
- * * `'element'` - transclude the whole of the directive's element including any directives on this
- * element that defined at a lower priority than this directive. When used, the `template`
- * property is ignored.
- *
*
* #### `compile`
*
@@ -6913,8 +7693,8 @@ function $TemplateCacheProvider() {
* any other controller.
*
* * `transcludeFn` - A transclude linking function pre-bound to the correct transclusion scope.
- * This is the same as the `$transclude`
- * parameter of directive controllers, see there for details.
+ * This is the same as the `$transclude` parameter of directive controllers,
+ * see {@link ng.$compile#-controller- the controller section for details}.
* `function([scope], cloneLinkingFn, futureParentElement)`.
*
* #### Pre-linking function
@@ -6956,6 +7736,34 @@ function $TemplateCacheProvider() {
* Testing Transclusion Directives}.
* </div>
*
+ * There are three kinds of transclusion depending upon whether you want to transclude just the contents of the
+ * directive's element, the entire element or multiple parts of the element contents:
+ *
+ * * `true` - transclude the content (i.e. the child nodes) of the directive's element.
+ * * `'element'` - transclude the whole of the directive's element including any directives on this
+ * element that defined at a lower priority than this directive. When used, the `template`
+ * property is ignored.
+ * * **`{...}` (an object hash):** - map elements of the content onto transclusion "slots" in the template.
+ *
+ * **Mult-slot transclusion** is declared by providing an object for the `transclude` property.
+ *
+ * This object is a map where the keys are the name of the slot to fill and the value is an element selector
+ * used to match the HTML to the slot. The element selector should be in normalized form (e.g. `myElement`)
+ * and will match the standard element variants (e.g. `my-element`, `my:element`, `data-my-element`, etc).
+ *
+ * For further information check out the guide on {@link guide/directive#matching-directives Matching Directives}
+ *
+ * If the element selector is prefixed with a `?` then that slot is optional.
+ *
+ * For example, the transclude object `{ slotA: '?myCustomElement' }` maps `<my-custom-element>` elements to
+ * the `slotA` slot, which can be accessed via the `$transclude` function or via the {@link ngTransclude} directive.
+ *
+ * Slots that are not marked as optional (`?`) will trigger a compile time error if there are no matching elements
+ * in the transclude content. If you wish to know if an optional slot was filled with content, then you can call
+ * `$transclude.isSlotFilled(slotName)` on the transclude function passed to the directive's link function and
+ * injectable into the directive's controller.
+ *
+ *
* #### Transclusion Functions
*
* When a directive requests transclusion, the compiler extracts its contents and provides a **transclusion
@@ -6973,10 +7781,10 @@ function $TemplateCacheProvider() {
*
* When you call a transclusion function you can pass in a **clone attach function**. This function accepts
* two parameters, `function(clone, scope) { ... }`, where the `clone` is a fresh compiled copy of your transcluded
- * content and the `scope` is the newly created transclusion scope, to which the clone is bound.
+ * content and the `scope` is the newly created transclusion scope, which the clone will be linked to.
*
* <div class="alert alert-info">
- * **Best Practice**: Always provide a `cloneFn` (clone attach function) when you call a translude function
+ * **Best Practice**: Always provide a `cloneFn` (clone attach function) when you call a transclude function
* since you then get a fresh clone of the original DOM and also have access to the new transclusion scope.
* </div>
*
@@ -7008,7 +7816,7 @@ function $TemplateCacheProvider() {
* </div>
*
* The built-in DOM manipulation directives, such as {@link ngIf}, {@link ngSwitch} and {@link ngRepeat}
- * automatically destroy their transluded clones as necessary so you do not need to worry about this if
+ * automatically destroy their transcluded clones as necessary so you do not need to worry about this if
* you are simply using {@link ngTransclude} to inject the transclusion into your directive.
*
*
@@ -7091,7 +7899,7 @@ function $TemplateCacheProvider() {
* to illustrate how `$compile` works.
* </div>
*
- <example module="compileExample">
+ <example module="compileExample" name="compile">
<file name="index.html">
<script>
angular.module('compileExample', [], function($compileProvider) {
@@ -7220,10 +8028,23 @@ function $TemplateCacheProvider() {
*
* For information on how the compiler works, see the
* {@link guide/compiler Angular HTML Compiler} section of the Developer Guide.
+ *
+ * @knownIssue
+ *
+ * ### Double Compilation
+ *
+ Double compilation occurs when an already compiled part of the DOM gets
+ compiled again. This is an undesired effect and can lead to misbehaving directives, performance issues,
+ and memory leaks. Refer to the Compiler Guide {@link guide/compiler#double-compilation-and-how-to-avoid-it
+ section on double compilation} for an in-depth explanation and ways to avoid it.
+ *
*/
var $compileMinErr = minErr('$compile');
+function UNINITIALIZED_VALUE() {}
+var _UNINITIALIZED_VALUE = new UNINITIALIZED_VALUE();
+
/**
* @ngdoc provider
* @name $compileProvider
@@ -7231,11 +8052,12 @@ var $compileMinErr = minErr('$compile');
* @description
*/
$CompileProvider.$inject = ['$provide', '$$sanitizeUriProvider'];
+/** @this */
function $CompileProvider($provide, $$sanitizeUriProvider) {
var hasDirectives = {},
Suffix = 'Directive',
- COMMENT_DIRECTIVE_REGEXP = /^\s*directive\:\s*([\w\-]+)\s+(.*)$/,
- CLASS_DIRECTIVE_REGEXP = /(([\w\-]+)(?:\:([^;]+))?;?)/,
+ COMMENT_DIRECTIVE_REGEXP = /^\s*directive:\s*([\w-]+)\s+(.*)$/,
+ CLASS_DIRECTIVE_REGEXP = /(([\w-]+)(?::([^;]+))?;?)/,
ALL_OR_NOTHING_ATTRS = makeMap('ngSrc,ngSrcset,src,srcset'),
REQUIRE_PREFIX_REGEXP = /^(?:(\^\^?)?(\?)?(\^\^?)?)?/;
@@ -7246,9 +8068,9 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
var bindingCache = createMap();
function parseIsolateBindings(scope, directiveName, isController) {
- var LOCAL_REGEXP = /^\s*([@&]|=(\*?))(\??)\s*(\w*)\s*$/;
+ var LOCAL_REGEXP = /^\s*([@&<]|=(\*?))(\??)\s*([\w$]*)\s*$/;
- var bindings = {};
+ var bindings = createMap();
forEach(scope, function(definition, scopeName) {
if (definition in bindingCache) {
@@ -7259,11 +8081,11 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
if (!match) {
throw $compileMinErr('iscp',
- "Invalid {3} for directive '{0}'." +
- " Definition: {... {1}: '{2}' ...}",
+ 'Invalid {3} for directive \'{0}\'.' +
+ ' Definition: {... {1}: \'{2}\' ...}',
directiveName, scopeName, definition,
- (isController ? "controller bindings definition" :
- "isolate scope definition"));
+ (isController ? 'controller bindings definition' :
+ 'isolate scope definition'));
}
bindings[scopeName] = {
@@ -7299,20 +8121,11 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
bindings.bindToController =
parseIsolateBindings(directive.bindToController, directiveName, true);
}
- if (isObject(bindings.bindToController)) {
- var controller = directive.controller;
- var controllerAs = directive.controllerAs;
- if (!controller) {
- // There is no controller, there may or may not be a controllerAs property
- throw $compileMinErr('noctrl',
- "Cannot bind to controller without directive '{0}'s controller.",
- directiveName);
- } else if (!identifierForController(controller, controllerAs)) {
- // There is a controller, but no identifier or controllerAs property
- throw $compileMinErr('noident',
- "Cannot bind to controller without identifier for directive '{0}'.",
- directiveName);
- }
+ if (bindings.bindToController && !directive.controller) {
+ // There is no controller
+ throw $compileMinErr('noctrl',
+ 'Cannot bind to controller without directive \'{0}\'s controller.',
+ directiveName);
}
return bindings;
}
@@ -7320,15 +8133,40 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
function assertValidDirectiveName(name) {
var letter = name.charAt(0);
if (!letter || letter !== lowercase(letter)) {
- throw $compileMinErr('baddir', "Directive name '{0}' is invalid. The first character must be a lowercase letter", name);
+ throw $compileMinErr('baddir', 'Directive/Component name \'{0}\' is invalid. The first character must be a lowercase letter', name);
}
if (name !== name.trim()) {
throw $compileMinErr('baddir',
- "Directive name '{0}' is invalid. The name should not contain leading or trailing whitespaces",
+ 'Directive/Component name \'{0}\' is invalid. The name should not contain leading or trailing whitespaces',
name);
}
}
+ function getDirectiveRequire(directive) {
+ var require = directive.require || (directive.controller && directive.name);
+
+ if (!isArray(require) && isObject(require)) {
+ forEach(require, function(value, key) {
+ var match = value.match(REQUIRE_PREFIX_REGEXP);
+ var name = value.substring(match[0].length);
+ if (!name) require[key] = match[0] + key;
+ });
+ }
+
+ return require;
+ }
+
+ function getDirectiveRestrict(restrict, name) {
+ if (restrict && !(isString(restrict) && /[EACM]/.test(restrict))) {
+ throw $compileMinErr('badrestrict',
+ 'Restrict property \'{0}\' of directive \'{1}\' is invalid',
+ restrict,
+ name);
+ }
+
+ return restrict || 'EA';
+ }
+
/**
* @ngdoc method
* @name $compileProvider#directive
@@ -7340,11 +8178,12 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
* @param {string|Object} name Name of the directive in camel-case (i.e. <code>ngBind</code> which
* will match as <code>ng-bind</code>), or an object map of directives where the keys are the
* names and the values are the factories.
- * @param {Function|Array} directiveFactory An injectable directive factory function. See
- * {@link guide/directive} for more info.
+ * @param {Function|Array} directiveFactory An injectable directive factory function. See the
+ * {@link guide/directive directive guide} and the {@link $compile compile API} for more info.
* @returns {ng.$compileProvider} Self for chaining.
*/
- this.directive = function registerDirective(name, directiveFactory) {
+ this.directive = function registerDirective(name, directiveFactory) {
+ assertArg(name, 'name');
assertNotHasOwnProperty(name, 'directive');
if (isString(name)) {
assertValidDirectiveName(name);
@@ -7365,8 +8204,8 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
directive.priority = directive.priority || 0;
directive.index = index;
directive.name = directive.name || name;
- directive.require = directive.require || (directive.controller && directive.name);
- directive.restrict = directive.restrict || 'EA';
+ directive.require = getDirectiveRequire(directive);
+ directive.restrict = getDirectiveRestrict(directive.restrict, name);
directive.$$moduleName = directiveFactory.$$moduleName;
directives.push(directive);
} catch (e) {
@@ -7383,6 +8222,153 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
return this;
};
+ /**
+ * @ngdoc method
+ * @name $compileProvider#component
+ * @module ng
+ * @param {string|Object} name Name of the component in camelCase (i.e. `myComp` which will match `<my-comp>`),
+ * or an object map of components where the keys are the names and the values are the component definition objects.
+ * @param {Object} options Component definition object (a simplified
+ * {@link ng.$compile#directive-definition-object directive definition object}),
+ * with the following properties (all optional):
+ *
+ * - `controller` – `{(string|function()=}` – controller constructor function that should be
+ * associated with newly created scope or the name of a {@link ng.$compile#-controller-
+ * registered controller} if passed as a string. An empty `noop` function by default.
+ * - `controllerAs` – `{string=}` – identifier name for to reference the controller in the component's scope.
+ * If present, the controller will be published to scope under the `controllerAs` name.
+ * If not present, this will default to be `$ctrl`.
+ * - `template` – `{string=|function()=}` – html template as a string or a function that
+ * returns an html template as a string which should be used as the contents of this component.
+ * Empty string by default.
+ *
+ * If `template` is a function, then it is {@link auto.$injector#invoke injected} with
+ * the following locals:
+ *
+ * - `$element` - Current element
+ * - `$attrs` - Current attributes object for the element
+ *
+ * - `templateUrl` – `{string=|function()=}` – path or function that returns a path to an html
+ * template that should be used as the contents of this component.
+ *
+ * If `templateUrl` is a function, then it is {@link auto.$injector#invoke injected} with
+ * the following locals:
+ *
+ * - `$element` - Current element
+ * - `$attrs` - Current attributes object for the element
+ *
+ * - `bindings` – `{object=}` – defines bindings between DOM attributes and component properties.
+ * Component properties are always bound to the component controller and not to the scope.
+ * See {@link ng.$compile#-bindtocontroller- `bindToController`}.
+ * - `transclude` – `{boolean=}` – whether {@link $compile#transclusion content transclusion} is enabled.
+ * Disabled by default.
+ * - `require` - `{Object<string, string>=}` - requires the controllers of other directives and binds them to
+ * this component's controller. The object keys specify the property names under which the required
+ * controllers (object values) will be bound. See {@link ng.$compile#-require- `require`}.
+ * - `$...` – additional properties to attach to the directive factory function and the controller
+ * constructor function. (This is used by the component router to annotate)
+ *
+ * @returns {ng.$compileProvider} the compile provider itself, for chaining of function calls.
+ * @description
+ * Register a **component definition** with the compiler. This is a shorthand for registering a special
+ * type of directive, which represents a self-contained UI component in your application. Such components
+ * are always isolated (i.e. `scope: {}`) and are always restricted to elements (i.e. `restrict: 'E'`).
+ *
+ * Component definitions are very simple and do not require as much configuration as defining general
+ * directives. Component definitions usually consist only of a template and a controller backing it.
+ *
+ * In order to make the definition easier, components enforce best practices like use of `controllerAs`,
+ * `bindToController`. They always have **isolate scope** and are restricted to elements.
+ *
+ * Here are a few examples of how you would usually define components:
+ *
+ * ```js
+ * var myMod = angular.module(...);
+ * myMod.component('myComp', {
+ * template: '<div>My name is {{$ctrl.name}}</div>',
+ * controller: function() {
+ * this.name = 'shahar';
+ * }
+ * });
+ *
+ * myMod.component('myComp', {
+ * template: '<div>My name is {{$ctrl.name}}</div>',
+ * bindings: {name: '@'}
+ * });
+ *
+ * myMod.component('myComp', {
+ * templateUrl: 'views/my-comp.html',
+ * controller: 'MyCtrl',
+ * controllerAs: 'ctrl',
+ * bindings: {name: '@'}
+ * });
+ *
+ * ```
+ * For more examples, and an in-depth guide, see the {@link guide/component component guide}.
+ *
+ * <br />
+ * See also {@link ng.$compileProvider#directive $compileProvider.directive()}.
+ */
+ this.component = function registerComponent(name, options) {
+ if (!isString(name)) {
+ forEach(name, reverseParams(bind(this, registerComponent)));
+ return this;
+ }
+
+ var controller = options.controller || function() {};
+
+ function factory($injector) {
+ function makeInjectable(fn) {
+ if (isFunction(fn) || isArray(fn)) {
+ return /** @this */ function(tElement, tAttrs) {
+ return $injector.invoke(fn, this, {$element: tElement, $attrs: tAttrs});
+ };
+ } else {
+ return fn;
+ }
+ }
+
+ var template = (!options.template && !options.templateUrl ? '' : options.template);
+ var ddo = {
+ controller: controller,
+ controllerAs: identifierForController(options.controller) || options.controllerAs || '$ctrl',
+ template: makeInjectable(template),
+ templateUrl: makeInjectable(options.templateUrl),
+ transclude: options.transclude,
+ scope: {},
+ bindToController: options.bindings || {},
+ restrict: 'E',
+ require: options.require
+ };
+
+ // Copy annotations (starting with $) over to the DDO
+ forEach(options, function(val, key) {
+ if (key.charAt(0) === '$') ddo[key] = val;
+ });
+
+ return ddo;
+ }
+
+ // TODO(pete) remove the following `forEach` before we release 1.6.0
+ // The component-router@0.2.0 looks for the annotations on the controller constructor
+ // Nothing in Angular looks for annotations on the factory function but we can't remove
+ // it from 1.5.x yet.
+
+ // Copy any annotation properties (starting with $) over to the factory and controller constructor functions
+ // These could be used by libraries such as the new component router
+ forEach(options, function(val, key) {
+ if (key.charAt(0) === '$') {
+ factory[key] = val;
+ // Don't try to copy over annotations to named controller
+ if (isFunction(controller)) controller[key] = val;
+ }
+ });
+
+ factory.$inject = ['$injector'];
+
+ return this.directive(name, factory);
+ };
+
/**
* @ngdoc method
@@ -7474,13 +8460,179 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
return debugInfoEnabled;
};
+ /**
+ * @ngdoc method
+ * @name $compileProvider#preAssignBindingsEnabled
+ *
+ * @param {boolean=} enabled update the preAssignBindingsEnabled state if provided, otherwise just return the
+ * current preAssignBindingsEnabled state
+ * @returns {*} current value if used as getter or itself (chaining) if used as setter
+ *
+ * @kind function
+ *
+ * @description
+ * Call this method to enable/disable whether directive controllers are assigned bindings before
+ * calling the controller's constructor.
+ * If enabled (true), the compiler assigns the value of each of the bindings to the
+ * properties of the controller object before the constructor of this object is called.
+ *
+ * If disabled (false), the compiler calls the constructor first before assigning bindings.
+ *
+ * The default value is false.
+ *
+ * @deprecated
+ * sinceVersion="1.6.0"
+ * removeVersion="1.7.0"
+ *
+ * This method and the option to assign the bindings before calling the controller's constructor
+ * will be removed in v1.7.0.
+ */
+ var preAssignBindingsEnabled = false;
+ this.preAssignBindingsEnabled = function(enabled) {
+ if (isDefined(enabled)) {
+ preAssignBindingsEnabled = enabled;
+ return this;
+ }
+ return preAssignBindingsEnabled;
+ };
+
+
+ var TTL = 10;
+ /**
+ * @ngdoc method
+ * @name $compileProvider#onChangesTtl
+ * @description
+ *
+ * Sets the number of times `$onChanges` hooks can trigger new changes before giving up and
+ * assuming that the model is unstable.
+ *
+ * The current default is 10 iterations.
+ *
+ * In complex applications it's possible that dependencies between `$onChanges` hooks and bindings will result
+ * in several iterations of calls to these hooks. However if an application needs more than the default 10
+ * iterations to stabilize then you should investigate what is causing the model to continuously change during
+ * the `$onChanges` hook execution.
+ *
+ * Increasing the TTL could have performance implications, so you should not change it without proper justification.
+ *
+ * @param {number} limit The number of `$onChanges` hook iterations.
+ * @returns {number|object} the current limit (or `this` if called as a setter for chaining)
+ */
+ this.onChangesTtl = function(value) {
+ if (arguments.length) {
+ TTL = value;
+ return this;
+ }
+ return TTL;
+ };
+
+ var commentDirectivesEnabledConfig = true;
+ /**
+ * @ngdoc method
+ * @name $compileProvider#commentDirectivesEnabled
+ * @description
+ *
+ * It indicates to the compiler
+ * whether or not directives on comments should be compiled.
+ * Defaults to `true`.
+ *
+ * Calling this function with false disables the compilation of directives
+ * on comments for the whole application.
+ * This results in a compilation performance gain,
+ * as the compiler doesn't have to check comments when looking for directives.
+ * This should however only be used if you are sure that no comment directives are used in
+ * the application (including any 3rd party directives).
+ *
+ * @param {boolean} enabled `false` if the compiler may ignore directives on comments
+ * @returns {boolean|object} the current value (or `this` if called as a setter for chaining)
+ */
+ this.commentDirectivesEnabled = function(value) {
+ if (arguments.length) {
+ commentDirectivesEnabledConfig = value;
+ return this;
+ }
+ return commentDirectivesEnabledConfig;
+ };
+
+
+ var cssClassDirectivesEnabledConfig = true;
+ /**
+ * @ngdoc method
+ * @name $compileProvider#cssClassDirectivesEnabled
+ * @description
+ *
+ * It indicates to the compiler
+ * whether or not directives on element classes should be compiled.
+ * Defaults to `true`.
+ *
+ * Calling this function with false disables the compilation of directives
+ * on element classes for the whole application.
+ * This results in a compilation performance gain,
+ * as the compiler doesn't have to check element classes when looking for directives.
+ * This should however only be used if you are sure that no class directives are used in
+ * the application (including any 3rd party directives).
+ *
+ * @param {boolean} enabled `false` if the compiler may ignore directives on element classes
+ * @returns {boolean|object} the current value (or `this` if called as a setter for chaining)
+ */
+ this.cssClassDirectivesEnabled = function(value) {
+ if (arguments.length) {
+ cssClassDirectivesEnabledConfig = value;
+ return this;
+ }
+ return cssClassDirectivesEnabledConfig;
+ };
+
this.$get = [
'$injector', '$interpolate', '$exceptionHandler', '$templateRequest', '$parse',
'$controller', '$rootScope', '$sce', '$animate', '$$sanitizeUri',
function($injector, $interpolate, $exceptionHandler, $templateRequest, $parse,
$controller, $rootScope, $sce, $animate, $$sanitizeUri) {
- var Attributes = function(element, attributesToCopy) {
+ var SIMPLE_ATTR_NAME = /^\w/;
+ var specialAttrHolder = window.document.createElement('div');
+
+
+ var commentDirectivesEnabled = commentDirectivesEnabledConfig;
+ var cssClassDirectivesEnabled = cssClassDirectivesEnabledConfig;
+
+
+ var onChangesTtl = TTL;
+ // The onChanges hooks should all be run together in a single digest
+ // When changes occur, the call to trigger their hooks will be added to this queue
+ var onChangesQueue;
+
+ // This function is called in a $$postDigest to trigger all the onChanges hooks in a single digest
+ function flushOnChangesQueue() {
+ try {
+ if (!(--onChangesTtl)) {
+ // We have hit the TTL limit so reset everything
+ onChangesQueue = undefined;
+ throw $compileMinErr('infchng', '{0} $onChanges() iterations reached. Aborting!\n', TTL);
+ }
+ // We must run this hook in an apply since the $$postDigest runs outside apply
+ $rootScope.$apply(function() {
+ var errors = [];
+ for (var i = 0, ii = onChangesQueue.length; i < ii; ++i) {
+ try {
+ onChangesQueue[i]();
+ } catch (e) {
+ errors.push(e);
+ }
+ }
+ // Reset the queue to trigger a new schedule next time there is a change
+ onChangesQueue = undefined;
+ if (errors.length) {
+ throw errors;
+ }
+ });
+ } finally {
+ onChangesTtl++;
+ }
+ }
+
+
+ function Attributes(element, attributesToCopy) {
if (attributesToCopy) {
var keys = Object.keys(attributesToCopy);
var i, l, key;
@@ -7494,7 +8646,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
}
this.$$element = element;
- };
+ }
Attributes.prototype = {
/**
@@ -7615,13 +8767,13 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
nodeName = nodeName_(this.$$element);
- if ((nodeName === 'a' && key === 'href') ||
+ if ((nodeName === 'a' && (key === 'href' || key === 'xlinkHref')) ||
(nodeName === 'img' && key === 'src')) {
// sanitize a[href] and img[src] values
this[key] = value = $$sanitizeUri(value, key === 'src');
- } else if (nodeName === 'img' && key === 'srcset') {
+ } else if (nodeName === 'img' && key === 'srcset' && isDefined(value)) {
// sanitize img[srcset] values
- var result = "";
+ var result = '';
// first check if there are spaces because it's not the same pattern
var trimmedSrcset = trim(value);
@@ -7639,7 +8791,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
// sanitize the uri
result += $$sanitizeUri(trim(rawUris[innerIdx]), true);
// add the descriptor
- result += (" " + trim(rawUris[innerIdx + 1]));
+ result += (' ' + trim(rawUris[innerIdx + 1]));
}
// split the last item into uri and descriptor
@@ -7650,7 +8802,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
// and add the last descriptor if any
if (lastTuple.length === 2) {
- result += (" " + trim(lastTuple[1]));
+ result += (' ' + trim(lastTuple[1]));
}
this[key] = value = result;
}
@@ -7659,19 +8811,25 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
if (value === null || isUndefined(value)) {
this.$$element.removeAttr(attrName);
} else {
- this.$$element.attr(attrName, value);
+ if (SIMPLE_ATTR_NAME.test(attrName)) {
+ this.$$element.attr(attrName, value);
+ } else {
+ setSpecialAttr(this.$$element[0], attrName, value);
+ }
}
}
// fire observers
var $$observers = this.$$observers;
- $$observers && forEach($$observers[observer], function(fn) {
- try {
- fn(value);
- } catch (e) {
- $exceptionHandler(e);
- }
- });
+ if ($$observers) {
+ forEach($$observers[observer], function(fn) {
+ try {
+ fn(value);
+ } catch (e) {
+ $exceptionHandler(e);
+ }
+ });
+ }
},
@@ -7713,6 +8871,18 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
}
};
+ function setSpecialAttr(element, attrName, value) {
+ // Attributes names that do not start with letters (such as `(click)`) cannot be set using `setAttribute`
+ // so we have to jump through some hoops to get such an attribute
+ // https://github.com/angular/angular.js/pull/13318
+ specialAttrHolder.innerHTML = '<span ' + attrName + '>';
+ var attributes = specialAttrHolder.firstChild.attributes;
+ var attribute = attributes[0];
+ // We have to remove the attribute from its container element before we can add it to the destination element
+ attributes.removeNamedItem(attribute.name);
+ attribute.value = value;
+ element.attributes.setNamedItem(attribute);
+ }
function safeAddClass($element, className) {
try {
@@ -7726,7 +8896,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
var startSymbol = $interpolate.startSymbol(),
endSymbol = $interpolate.endSymbol(),
- denormalizeTemplate = (startSymbol == '{{' && endSymbol == '}}')
+ denormalizeTemplate = (startSymbol === '{{' && endSymbol === '}}')
? identity
: function denormalizeTemplate(template) {
return template.replace(/\{\{/g, startSymbol).replace(/}}/g, endSymbol);
@@ -7759,6 +8929,15 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
safeAddClass($element, isolated ? 'ng-isolate-scope' : 'ng-scope');
} : noop;
+ compile.$$createComment = function(directiveName, comment) {
+ var content = '';
+ if (debugInfoEnabled) {
+ content = ' ' + (directiveName || '') + ': ';
+ if (comment) content += comment + ' ';
+ }
+ return window.document.createComment(content);
+ };
+
return compile;
//================================
@@ -7770,25 +8949,15 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
// modify it.
$compileNodes = jqLite($compileNodes);
}
-
- var NOT_EMPTY = /\S+/;
-
- // We can not compile top level text elements since text nodes can be merged and we will
- // not be able to attach scope data to them, so we will wrap them in <span>
- for (var i = 0, len = $compileNodes.length; i < len; i++) {
- var domNode = $compileNodes[i];
-
- if (domNode.nodeType === NODE_TYPE_TEXT && domNode.nodeValue.match(NOT_EMPTY) /* non-empty */) {
- jqLiteWrapNode(domNode, $compileNodes[i] = document.createElement('span'));
- }
- }
-
var compositeLinkFn =
compileNodes($compileNodes, transcludeFn, $compileNodes,
maxPriority, ignoreDirective, previousCompileContext);
compile.$$addScopeClass($compileNodes);
var namespace = null;
return function publicLinkFn(scope, cloneConnectFn, options) {
+ if (!$compileNodes) {
+ throw $compileMinErr('multilink', 'This element has already been linked.');
+ }
assertArg(scope, 'scope');
if (previousCompileContext && previousCompileContext.needsNewScope) {
@@ -7843,6 +9012,10 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
if (cloneConnectFn) cloneConnectFn($linkNode, scope);
if (compositeLinkFn) compositeLinkFn(scope, $linkNode, $linkNode, parentBoundTranscludeFn);
+
+ if (!cloneConnectFn) {
+ $compileNodes = compositeLinkFn = null;
+ }
return $linkNode;
};
}
@@ -7853,7 +9026,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
if (!node) {
return 'html';
} else {
- return nodeName_(node) !== 'foreignobject' && node.toString().match(/SVG/) ? 'svg' : 'html';
+ return nodeName_(node) !== 'foreignobject' && toString.call(node).match(/SVG/) ? 'svg' : 'html';
}
}
@@ -7875,12 +9048,23 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
function compileNodes(nodeList, transcludeFn, $rootElement, maxPriority, ignoreDirective,
previousCompileContext) {
var linkFns = [],
+ // `nodeList` can be either an element's `.childNodes` (live NodeList)
+ // or a jqLite/jQuery collection or an array
+ notLiveList = isArray(nodeList) || (nodeList instanceof jqLite),
attrs, directives, nodeLinkFn, childNodes, childLinkFn, linkFnFound, nodeLinkFnFound;
+
for (var i = 0; i < nodeList.length; i++) {
attrs = new Attributes();
- // we must always refer to nodeList[i] since the nodes can be replaced underneath us.
+ // Support: IE 11 only
+ // Workaround for #11781 and #14924
+ if (msie === 11) {
+ mergeConsecutiveTextNodes(nodeList, i, notLiveList);
+ }
+
+ // We must always refer to `nodeList[i]` hereafter,
+ // since the nodes can be replaced underneath us.
directives = collectDirectives(nodeList[i], [], attrs, i === 0 ? maxPriority : undefined,
ignoreDirective);
@@ -7927,7 +9111,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
stableNodeList = new Array(nodeListLength);
// create a sparse array by only copying the elements which have a linkFn
- for (i = 0; i < linkFns.length; i+=3) {
+ for (i = 0; i < linkFns.length; i += 3) {
idx = linkFns[i];
stableNodeList[idx] = nodeList[idx];
}
@@ -7971,9 +9155,34 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
}
}
- function createBoundTranscludeFn(scope, transcludeFn, previousBoundTranscludeFn) {
+ function mergeConsecutiveTextNodes(nodeList, idx, notLiveList) {
+ var node = nodeList[idx];
+ var parent = node.parentNode;
+ var sibling;
+
+ if (node.nodeType !== NODE_TYPE_TEXT) {
+ return;
+ }
+
+ while (true) {
+ sibling = parent ? node.nextSibling : nodeList[idx + 1];
+ if (!sibling || sibling.nodeType !== NODE_TYPE_TEXT) {
+ break;
+ }
+
+ node.nodeValue = node.nodeValue + sibling.nodeValue;
+
+ if (sibling.parentNode) {
+ sibling.parentNode.removeChild(sibling);
+ }
+ if (notLiveList && sibling === nodeList[idx + 1]) {
+ nodeList.splice(idx + 1, 1);
+ }
+ }
+ }
- var boundTranscludeFn = function(transcludedScope, cloneFn, controllers, futureParentElement, containingScope) {
+ function createBoundTranscludeFn(scope, transcludeFn, previousBoundTranscludeFn) {
+ function boundTranscludeFn(transcludedScope, cloneFn, controllers, futureParentElement, containingScope) {
if (!transcludedScope) {
transcludedScope = scope.$new(false, containingScope);
@@ -7985,7 +9194,18 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
transcludeControllers: controllers,
futureParentElement: futureParentElement
});
- };
+ }
+
+ // We need to attach the transclusion slots onto the `boundTranscludeFn`
+ // so that they are available inside the `controllersBoundTransclude` function
+ var boundSlots = boundTranscludeFn.$$slots = createMap();
+ for (var slotName in transcludeFn.$$slots) {
+ if (transcludeFn.$$slots[slotName]) {
+ boundSlots[slotName] = createBoundTranscludeFn(scope, transcludeFn.$$slots[slotName], previousBoundTranscludeFn);
+ } else {
+ boundSlots[slotName] = null;
+ }
+ }
return boundTranscludeFn;
}
@@ -8004,13 +9224,17 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
var nodeType = node.nodeType,
attrsMap = attrs.$attr,
match,
+ nodeName,
className;
switch (nodeType) {
case NODE_TYPE_ELEMENT: /* Element */
+
+ nodeName = nodeName_(node);
+
// use the node name: <directive>
addDirective(directives,
- directiveNormalize(nodeName_(node)), 'E', maxPriority, ignoreDirective);
+ directiveNormalize(nodeName), 'E', maxPriority, ignoreDirective);
// iterate over the attributes
for (var attr, name, nName, ngAttrName, value, isNgAttr, nAttrs = node.attributes,
@@ -8020,11 +9244,12 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
attr = nAttrs[j];
name = attr.name;
- value = trim(attr.value);
+ value = attr.value;
// support ngAttr attribute binding
ngAttrName = directiveNormalize(name);
- if (isNgAttr = NG_ATTR_BINDING.test(ngAttrName)) {
+ isNgAttr = NG_ATTR_BINDING.test(ngAttrName);
+ if (isNgAttr) {
name = name.replace(PREFIX_REGEXP, '')
.substr(8).replace(/_(.)/g, function(match, letter) {
return letter.toUpperCase();
@@ -8051,14 +9276,21 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
attrEndName);
}
+ if (nodeName === 'input' && node.getAttribute('type') === 'hidden') {
+ // Hidden input elements can have strange behaviour when navigating back to the page
+ // This tells the browser not to try to cache and reinstate previous values
+ node.setAttribute('autocomplete', 'off');
+ }
+
// use class as directive
+ if (!cssClassDirectivesEnabled) break;
className = node.className;
if (isObject(className)) {
// Maybe SVGAnimatedString
className = className.animVal;
}
if (isString(className) && className !== '') {
- while (match = CLASS_DIRECTIVE_REGEXP.exec(className)) {
+ while ((match = CLASS_DIRECTIVE_REGEXP.exec(className))) {
nName = directiveNormalize(match[2]);
if (addDirective(directives, nName, 'C', maxPriority, ignoreDirective)) {
attrs[nName] = trim(match[3]);
@@ -8068,29 +9300,11 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
}
break;
case NODE_TYPE_TEXT: /* Text Node */
- if (msie === 11) {
- // Workaround for #11781
- while (node.parentNode && node.nextSibling && node.nextSibling.nodeType === NODE_TYPE_TEXT) {
- node.nodeValue = node.nodeValue + node.nextSibling.nodeValue;
- node.parentNode.removeChild(node.nextSibling);
- }
- }
addTextInterpolateDirective(directives, node.nodeValue);
break;
case NODE_TYPE_COMMENT: /* Comment */
- try {
- match = COMMENT_DIRECTIVE_REGEXP.exec(node.nodeValue);
- if (match) {
- nName = directiveNormalize(match[1]);
- if (addDirective(directives, nName, 'M', maxPriority, ignoreDirective)) {
- attrs[nName] = trim(match[2]);
- }
- }
- } catch (e) {
- // turns out that under some circumstances IE9 throws errors when one attempts to read
- // comment's node value.
- // Just ignore it and continue. (Can't seem to reproduce in test case.)
- }
+ if (!commentDirectivesEnabled) break;
+ collectCommentDirectives(node, directives, attrs, maxPriority, ignoreDirective);
break;
}
@@ -8098,8 +9312,26 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
return directives;
}
+ function collectCommentDirectives(node, directives, attrs, maxPriority, ignoreDirective) {
+ // function created because of performance, try/catch disables
+ // the optimization of the whole function #14848
+ try {
+ var match = COMMENT_DIRECTIVE_REGEXP.exec(node.nodeValue);
+ if (match) {
+ var nName = directiveNormalize(match[1]);
+ if (addDirective(directives, nName, 'M', maxPriority, ignoreDirective)) {
+ attrs[nName] = trim(match[2]);
+ }
+ }
+ } catch (e) {
+ // turns out that under some circumstances IE9 throws errors when one attempts to read
+ // comment's node value.
+ // Just ignore it and continue. (Can't seem to reproduce in test case.)
+ }
+ }
+
/**
- * Given a node with an directive-start it collects all of the siblings until it finds
+ * Given a node with a directive-start it collects all of the siblings until it finds
* directive-end.
* @param node
* @param attrStart
@@ -8113,10 +9345,10 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
do {
if (!node) {
throw $compileMinErr('uterdir',
- "Unterminated attribute, found '{0}' but no matching '{1}' found.",
+ 'Unterminated attribute, found \'{0}\' but no matching \'{1}\' found.',
attrStart, attrEnd);
}
- if (node.nodeType == NODE_TYPE_ELEMENT) {
+ if (node.nodeType === NODE_TYPE_ELEMENT) {
if (node.hasAttribute(attrStart)) depth++;
if (node.hasAttribute(attrEnd)) depth--;
}
@@ -8139,13 +9371,42 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
* @returns {Function}
*/
function groupElementsLinkFnWrapper(linkFn, attrStart, attrEnd) {
- return function(scope, element, attrs, controllers, transcludeFn) {
+ return function groupedElementsLink(scope, element, attrs, controllers, transcludeFn) {
element = groupScan(element[0], attrStart, attrEnd);
return linkFn(scope, element, attrs, controllers, transcludeFn);
};
}
/**
+ * A function generator that is used to support both eager and lazy compilation
+ * linking function.
+ * @param eager
+ * @param $compileNodes
+ * @param transcludeFn
+ * @param maxPriority
+ * @param ignoreDirective
+ * @param previousCompileContext
+ * @returns {Function}
+ */
+ function compilationGenerator(eager, $compileNodes, transcludeFn, maxPriority, ignoreDirective, previousCompileContext) {
+ var compiled;
+
+ if (eager) {
+ return compile($compileNodes, transcludeFn, maxPriority, ignoreDirective, previousCompileContext);
+ }
+ return /** @this */ function lazyCompilation() {
+ if (!compiled) {
+ compiled = compile($compileNodes, transcludeFn, maxPriority, ignoreDirective, previousCompileContext);
+
+ // Null out all of these references in order to make them eligible for garbage collection
+ // since this is a potentially long lived closure
+ $compileNodes = transcludeFn = previousCompileContext = null;
+ }
+ return compiled.apply(this, arguments);
+ };
+ }
+
+ /**
* Once the directives have been collected, their compile functions are executed. This method
* is responsible for inlining directive templates as well as terminating the application
* of the directives if the terminal directive has been reached.
@@ -8189,6 +9450,8 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
replaceDirective = originalReplaceDirective,
childTranscludeFn = transcludeFn,
linkFn,
+ didScanForMultipleTransclusion = false,
+ mightHaveMultipleTransclusionError = false,
directiveValue;
// executes all directives on the current element
@@ -8207,7 +9470,9 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
break; // prevent further processing of directives
}
- if (directiveValue = directive.scope) {
+ directiveValue = directive.scope;
+
+ if (directiveValue) {
// skip the check for directives with async templates, we'll check the derived sync
// directive when the template arrives
@@ -8231,15 +9496,37 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
directiveName = directive.name;
+ // If we encounter a condition that can result in transclusion on the directive,
+ // then scan ahead in the remaining directives for others that may cause a multiple
+ // transclusion error to be thrown during the compilation process. If a matching directive
+ // is found, then we know that when we encounter a transcluded directive, we need to eagerly
+ // compile the `transclude` function rather than doing it lazily in order to throw
+ // exceptions at the correct time
+ if (!didScanForMultipleTransclusion && ((directive.replace && (directive.templateUrl || directive.template))
+ || (directive.transclude && !directive.$$tlb))) {
+ var candidateDirective;
+
+ for (var scanningIndex = i + 1; (candidateDirective = directives[scanningIndex++]);) {
+ if ((candidateDirective.transclude && !candidateDirective.$$tlb)
+ || (candidateDirective.replace && (candidateDirective.templateUrl || candidateDirective.template))) {
+ mightHaveMultipleTransclusionError = true;
+ break;
+ }
+ }
+
+ didScanForMultipleTransclusion = true;
+ }
+
if (!directive.templateUrl && directive.controller) {
- directiveValue = directive.controller;
controllerDirectives = controllerDirectives || createMap();
- assertNoDuplicate("'" + directiveName + "' controller",
+ assertNoDuplicate('\'' + directiveName + '\' controller',
controllerDirectives[directiveName], directive, $compileNode);
controllerDirectives[directiveName] = directive;
}
- if (directiveValue = directive.transclude) {
+ directiveValue = directive.transclude;
+
+ if (directiveValue) {
hasTranscludeDirective = true;
// Special case ngIf and ngRepeat so that we don't complain about duplicate transclusion.
@@ -8250,17 +9537,27 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
nonTlbTranscludeDirective = directive;
}
- if (directiveValue == 'element') {
+ if (directiveValue === 'element') {
hasElementTranscludeDirective = true;
terminalPriority = directive.priority;
$template = $compileNode;
$compileNode = templateAttrs.$$element =
- jqLite(document.createComment(' ' + directiveName + ': ' +
- templateAttrs[directiveName] + ' '));
+ jqLite(compile.$$createComment(directiveName, templateAttrs[directiveName]));
compileNode = $compileNode[0];
replaceWith(jqCollection, sliceArgs($template), compileNode);
- childTranscludeFn = compile($template, transcludeFn, terminalPriority,
+ // Support: Chrome < 50
+ // https://github.com/angular/angular.js/issues/14041
+
+ // In the versions of V8 prior to Chrome 50, the document fragment that is created
+ // in the `replaceWith` function is improperly garbage collected despite still
+ // being referenced by the `parentNode` property of all of the child nodes. By adding
+ // a reference to the fragment via a different property, we can avoid that incorrect
+ // behavior.
+ // TODO: remove this line after Chrome 50 has been released
+ $template[0].$$parentNode = $template[0].parentNode;
+
+ childTranscludeFn = compilationGenerator(mightHaveMultipleTransclusionError, $template, transcludeFn, terminalPriority,
replaceDirective && replaceDirective.name, {
// Don't pass in:
// - controllerDirectives - otherwise we'll create duplicates controllers
@@ -8272,10 +9569,69 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
nonTlbTranscludeDirective: nonTlbTranscludeDirective
});
} else {
- $template = jqLite(jqLiteClone(compileNode)).contents();
+
+ var slots = createMap();
+
+ if (!isObject(directiveValue)) {
+ $template = jqLite(jqLiteClone(compileNode)).contents();
+ } else {
+
+ // We have transclusion slots,
+ // collect them up, compile them and store their transclusion functions
+ $template = [];
+
+ var slotMap = createMap();
+ var filledSlots = createMap();
+
+ // Parse the element selectors
+ forEach(directiveValue, function(elementSelector, slotName) {
+ // If an element selector starts with a ? then it is optional
+ var optional = (elementSelector.charAt(0) === '?');
+ elementSelector = optional ? elementSelector.substring(1) : elementSelector;
+
+ slotMap[elementSelector] = slotName;
+
+ // We explicitly assign `null` since this implies that a slot was defined but not filled.
+ // Later when calling boundTransclusion functions with a slot name we only error if the
+ // slot is `undefined`
+ slots[slotName] = null;
+
+ // filledSlots contains `true` for all slots that are either optional or have been
+ // filled. This is used to check that we have not missed any required slots
+ filledSlots[slotName] = optional;
+ });
+
+ // Add the matching elements into their slot
+ forEach($compileNode.contents(), function(node) {
+ var slotName = slotMap[directiveNormalize(nodeName_(node))];
+ if (slotName) {
+ filledSlots[slotName] = true;
+ slots[slotName] = slots[slotName] || [];
+ slots[slotName].push(node);
+ } else {
+ $template.push(node);
+ }
+ });
+
+ // Check for required slots that were not filled
+ forEach(filledSlots, function(filled, slotName) {
+ if (!filled) {
+ throw $compileMinErr('reqslot', 'Required transclusion slot `{0}` was not filled.', slotName);
+ }
+ });
+
+ for (var slotName in slots) {
+ if (slots[slotName]) {
+ // Only define a transclusion function if the slot was filled
+ slots[slotName] = compilationGenerator(mightHaveMultipleTransclusionError, slots[slotName], transcludeFn);
+ }
+ }
+ }
+
$compileNode.empty(); // clear contents
- childTranscludeFn = compile($template, transcludeFn, undefined,
+ childTranscludeFn = compilationGenerator(mightHaveMultipleTransclusionError, $template, transcludeFn, undefined,
undefined, { needsNewScope: directive.$$isolateScope || directive.$$newScope});
+ childTranscludeFn.$$slots = slots;
}
}
@@ -8299,9 +9655,9 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
}
compileNode = $template[0];
- if ($template.length != 1 || compileNode.nodeType !== NODE_TYPE_ELEMENT) {
+ if ($template.length !== 1 || compileNode.nodeType !== NODE_TYPE_ELEMENT) {
throw $compileMinErr('tplrt',
- "Template for directive '{0}' must have exactly one root element. {1}",
+ 'Template for directive \'{0}\' must have exactly one root element. {1}',
directiveName, '');
}
@@ -8341,6 +9697,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
replaceDirective = directive;
}
+ // eslint-disable-next-line no-func-assign
nodeLinkFn = compileTemplateUrl(directives.splice(i, directives.length - i), $compileNode,
templateAttrs, jqCollection, hasTranscludeDirective && childTranscludeFn, preLinkFns, postLinkFns, {
controllerDirectives: controllerDirectives,
@@ -8353,10 +9710,11 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
} else if (directive.compile) {
try {
linkFn = directive.compile($compileNode, templateAttrs, childTranscludeFn);
+ var context = directive.$$originalDirective || directive;
if (isFunction(linkFn)) {
- addLinkFns(null, linkFn, attrStart, attrEnd);
+ addLinkFns(null, bind(context, linkFn), attrStart, attrEnd);
} else if (linkFn) {
- addLinkFns(linkFn.pre, linkFn.post, attrStart, attrEnd);
+ addLinkFns(bind(context, linkFn.pre), bind(context, linkFn.post), attrStart, attrEnd);
}
} catch (e) {
$exceptionHandler(e, startingTag($compileNode));
@@ -8403,77 +9761,9 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
}
}
-
- function getControllers(directiveName, require, $element, elementControllers) {
- var value;
-
- if (isString(require)) {
- var match = require.match(REQUIRE_PREFIX_REGEXP);
- var name = require.substring(match[0].length);
- var inheritType = match[1] || match[3];
- var optional = match[2] === '?';
-
- //If only parents then start at the parent element
- if (inheritType === '^^') {
- $element = $element.parent();
- //Otherwise attempt getting the controller from elementControllers in case
- //the element is transcluded (and has no data) and to avoid .data if possible
- } else {
- value = elementControllers && elementControllers[name];
- value = value && value.instance;
- }
-
- if (!value) {
- var dataName = '$' + name + 'Controller';
- value = inheritType ? $element.inheritedData(dataName) : $element.data(dataName);
- }
-
- if (!value && !optional) {
- throw $compileMinErr('ctreq',
- "Controller '{0}', required by directive '{1}', can't be found!",
- name, directiveName);
- }
- } else if (isArray(require)) {
- value = [];
- for (var i = 0, ii = require.length; i < ii; i++) {
- value[i] = getControllers(directiveName, require[i], $element, elementControllers);
- }
- }
-
- return value || null;
- }
-
- function setupControllers($element, attrs, transcludeFn, controllerDirectives, isolateScope, scope) {
- var elementControllers = createMap();
- for (var controllerKey in controllerDirectives) {
- var directive = controllerDirectives[controllerKey];
- var locals = {
- $scope: directive === newIsolateScopeDirective || directive.$$isolateScope ? isolateScope : scope,
- $element: $element,
- $attrs: attrs,
- $transclude: transcludeFn
- };
-
- var controller = directive.controller;
- if (controller == '@') {
- controller = attrs[directive.name];
- }
-
- var controllerInstance = $controller(controller, locals, true, directive.controllerAs);
-
- // For directives with element transclusion the element is a comment.
- // In this case .data will not attach any data.
- // Instead, we save the controllers for the element in a local hash and attach to .data
- // later, once we have the actual element.
- elementControllers[directive.name] = controllerInstance;
- $element.data('$' + directive.name + 'Controller', controllerInstance.instance);
- }
- return elementControllers;
- }
-
function nodeLinkFn(childLinkFn, scope, linkNode, $rootElement, boundTranscludeFn) {
- var linkFn, isolateScope, controllerScope, elementControllers, transcludeFn, $element,
- attrs, removeScopeBindingWatches, removeControllerBindingWatches;
+ var i, ii, linkFn, isolateScope, controllerScope, elementControllers, transcludeFn, $element,
+ attrs, scopeBindingInfo;
if (compileNode === linkNode) {
attrs = templateAttrs;
@@ -8495,10 +9785,14 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
// is later passed as `parentBoundTranscludeFn` to `publicLinkFn`
transcludeFn = controllersBoundTransclude;
transcludeFn.$$boundTransclude = boundTranscludeFn;
+ // expose the slots on the `$transclude` function
+ transcludeFn.isSlotFilled = function(slotName) {
+ return !!boundTranscludeFn.$$slots[slotName];
+ };
}
if (controllerDirectives) {
- elementControllers = setupControllers($element, attrs, transcludeFn, controllerDirectives, isolateScope, scope);
+ elementControllers = setupControllers($element, attrs, transcludeFn, controllerDirectives, isolateScope, scope, newIsolateScopeDirective);
}
if (newIsolateScopeDirective) {
@@ -8508,11 +9802,11 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
compile.$$addScopeClass($element, true);
isolateScope.$$isolateBindings =
newIsolateScopeDirective.$$isolateBindings;
- removeScopeBindingWatches = initializeDirectiveBindings(scope, attrs, isolateScope,
+ scopeBindingInfo = initializeDirectiveBindings(scope, attrs, isolateScope,
isolateScope.$$isolateBindings,
newIsolateScopeDirective);
- if (removeScopeBindingWatches) {
- isolateScope.$on('$destroy', removeScopeBindingWatches);
+ if (scopeBindingInfo.removeWatches) {
+ isolateScope.$on('$destroy', scopeBindingInfo.removeWatches);
}
}
@@ -8522,23 +9816,70 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
var controller = elementControllers[name];
var bindings = controllerDirective.$$bindings.bindToController;
- if (controller.identifier && bindings) {
- removeControllerBindingWatches =
- initializeDirectiveBindings(controllerScope, attrs, controller.instance, bindings, controllerDirective);
- }
+ if (preAssignBindingsEnabled) {
+ if (bindings) {
+ controller.bindingInfo =
+ initializeDirectiveBindings(controllerScope, attrs, controller.instance, bindings, controllerDirective);
+ } else {
+ controller.bindingInfo = {};
+ }
- var controllerResult = controller();
- if (controllerResult !== controller.instance) {
- // If the controller constructor has a return value, overwrite the instance
- // from setupControllers
- controller.instance = controllerResult;
- $element.data('$' + controllerDirective.name + 'Controller', controllerResult);
- removeControllerBindingWatches && removeControllerBindingWatches();
- removeControllerBindingWatches =
+ var controllerResult = controller();
+ if (controllerResult !== controller.instance) {
+ // If the controller constructor has a return value, overwrite the instance
+ // from setupControllers
+ controller.instance = controllerResult;
+ $element.data('$' + controllerDirective.name + 'Controller', controllerResult);
+ if (controller.bindingInfo.removeWatches) {
+ controller.bindingInfo.removeWatches();
+ }
+ controller.bindingInfo =
+ initializeDirectiveBindings(controllerScope, attrs, controller.instance, bindings, controllerDirective);
+ }
+ } else {
+ controller.instance = controller();
+ $element.data('$' + controllerDirective.name + 'Controller', controller.instance);
+ controller.bindingInfo =
initializeDirectiveBindings(controllerScope, attrs, controller.instance, bindings, controllerDirective);
}
}
+ // Bind the required controllers to the controller, if `require` is an object and `bindToController` is truthy
+ forEach(controllerDirectives, function(controllerDirective, name) {
+ var require = controllerDirective.require;
+ if (controllerDirective.bindToController && !isArray(require) && isObject(require)) {
+ extend(elementControllers[name].instance, getControllers(name, require, $element, elementControllers));
+ }
+ });
+
+ // Handle the init and destroy lifecycle hooks on all controllers that have them
+ forEach(elementControllers, function(controller) {
+ var controllerInstance = controller.instance;
+ if (isFunction(controllerInstance.$onChanges)) {
+ try {
+ controllerInstance.$onChanges(controller.bindingInfo.initialChanges);
+ } catch (e) {
+ $exceptionHandler(e);
+ }
+ }
+ if (isFunction(controllerInstance.$onInit)) {
+ try {
+ controllerInstance.$onInit();
+ } catch (e) {
+ $exceptionHandler(e);
+ }
+ }
+ if (isFunction(controllerInstance.$doCheck)) {
+ controllerScope.$watch(function() { controllerInstance.$doCheck(); });
+ controllerInstance.$doCheck();
+ }
+ if (isFunction(controllerInstance.$onDestroy)) {
+ controllerScope.$on('$destroy', function callOnDestroyHook() {
+ controllerInstance.$onDestroy();
+ });
+ }
+ });
+
// PRELINKING
for (i = 0, ii = preLinkFns.length; i < ii; i++) {
linkFn = preLinkFns[i];
@@ -8558,7 +9899,9 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
if (newIsolateScopeDirective && (newIsolateScopeDirective.template || newIsolateScopeDirective.templateUrl === null)) {
scopeToChild = isolateScope;
}
- childLinkFn && childLinkFn(scopeToChild, linkNode.childNodes, undefined, boundTranscludeFn);
+ if (childLinkFn) {
+ childLinkFn(scopeToChild, linkNode.childNodes, undefined, boundTranscludeFn);
+ }
// POSTLINKING
for (i = postLinkFns.length - 1; i >= 0; i--) {
@@ -8572,13 +9915,21 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
);
}
+ // Trigger $postLink lifecycle hooks
+ forEach(elementControllers, function(controller) {
+ var controllerInstance = controller.instance;
+ if (isFunction(controllerInstance.$postLink)) {
+ controllerInstance.$postLink();
+ }
+ });
+
// This is the function that is injected as `$transclude`.
// Note: all arguments are optional!
- function controllersBoundTransclude(scope, cloneAttachFn, futureParentElement) {
+ function controllersBoundTransclude(scope, cloneAttachFn, futureParentElement, slotName) {
var transcludeControllers;
-
// No scope passed in:
if (!isScope(scope)) {
+ slotName = futureParentElement;
futureParentElement = cloneAttachFn;
cloneAttachFn = scope;
scope = undefined;
@@ -8590,9 +9941,97 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
if (!futureParentElement) {
futureParentElement = hasElementTranscludeDirective ? $element.parent() : $element;
}
- return boundTranscludeFn(scope, cloneAttachFn, transcludeControllers, futureParentElement, scopeToChild);
+ if (slotName) {
+ // slotTranscludeFn can be one of three things:
+ // * a transclude function - a filled slot
+ // * `null` - an optional slot that was not filled
+ // * `undefined` - a slot that was not declared (i.e. invalid)
+ var slotTranscludeFn = boundTranscludeFn.$$slots[slotName];
+ if (slotTranscludeFn) {
+ return slotTranscludeFn(scope, cloneAttachFn, transcludeControllers, futureParentElement, scopeToChild);
+ } else if (isUndefined(slotTranscludeFn)) {
+ throw $compileMinErr('noslot',
+ 'No parent directive that requires a transclusion with slot name "{0}". ' +
+ 'Element: {1}',
+ slotName, startingTag($element));
+ }
+ } else {
+ return boundTranscludeFn(scope, cloneAttachFn, transcludeControllers, futureParentElement, scopeToChild);
+ }
+ }
+ }
+ }
+
+ function getControllers(directiveName, require, $element, elementControllers) {
+ var value;
+
+ if (isString(require)) {
+ var match = require.match(REQUIRE_PREFIX_REGEXP);
+ var name = require.substring(match[0].length);
+ var inheritType = match[1] || match[3];
+ var optional = match[2] === '?';
+
+ //If only parents then start at the parent element
+ if (inheritType === '^^') {
+ $element = $element.parent();
+ //Otherwise attempt getting the controller from elementControllers in case
+ //the element is transcluded (and has no data) and to avoid .data if possible
+ } else {
+ value = elementControllers && elementControllers[name];
+ value = value && value.instance;
+ }
+
+ if (!value) {
+ var dataName = '$' + name + 'Controller';
+ value = inheritType ? $element.inheritedData(dataName) : $element.data(dataName);
+ }
+
+ if (!value && !optional) {
+ throw $compileMinErr('ctreq',
+ 'Controller \'{0}\', required by directive \'{1}\', can\'t be found!',
+ name, directiveName);
+ }
+ } else if (isArray(require)) {
+ value = [];
+ for (var i = 0, ii = require.length; i < ii; i++) {
+ value[i] = getControllers(directiveName, require[i], $element, elementControllers);
+ }
+ } else if (isObject(require)) {
+ value = {};
+ forEach(require, function(controller, property) {
+ value[property] = getControllers(directiveName, controller, $element, elementControllers);
+ });
+ }
+
+ return value || null;
+ }
+
+ function setupControllers($element, attrs, transcludeFn, controllerDirectives, isolateScope, scope, newIsolateScopeDirective) {
+ var elementControllers = createMap();
+ for (var controllerKey in controllerDirectives) {
+ var directive = controllerDirectives[controllerKey];
+ var locals = {
+ $scope: directive === newIsolateScopeDirective || directive.$$isolateScope ? isolateScope : scope,
+ $element: $element,
+ $attrs: attrs,
+ $transclude: transcludeFn
+ };
+
+ var controller = directive.controller;
+ if (controller === '@') {
+ controller = attrs[directive.name];
}
+
+ var controllerInstance = $controller(controller, locals, true, directive.controllerAs);
+
+ // For directives with element transclusion the element is a comment.
+ // In this case .data will not attach any data.
+ // Instead, we save the controllers for the element in a local hash and attach to .data
+ // later, once we have the actual element.
+ elementControllers[directive.name] = controllerInstance;
+ $element.data('$' + directive.name + 'Controller', controllerInstance.instance);
}
+ return elementControllers;
}
// Depending upon the context in which a directive finds itself it might need to have a new isolated
@@ -8628,24 +10067,22 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
if (hasDirectives.hasOwnProperty(name)) {
for (var directive, directives = $injector.get(name + Suffix),
i = 0, ii = directives.length; i < ii; i++) {
- try {
- directive = directives[i];
- if ((isUndefined(maxPriority) || maxPriority > directive.priority) &&
- directive.restrict.indexOf(location) != -1) {
- if (startAttrName) {
- directive = inherit(directive, {$$start: startAttrName, $$end: endAttrName});
- }
- if (!directive.$$bindings) {
- var bindings = directive.$$bindings =
- parseDirectiveBindings(directive, directive.name);
- if (isObject(bindings.isolateScope)) {
- directive.$$isolateBindings = bindings.isolateScope;
- }
+ directive = directives[i];
+ if ((isUndefined(maxPriority) || maxPriority > directive.priority) &&
+ directive.restrict.indexOf(location) !== -1) {
+ if (startAttrName) {
+ directive = inherit(directive, {$$start: startAttrName, $$end: endAttrName});
+ }
+ if (!directive.$$bindings) {
+ var bindings = directive.$$bindings =
+ parseDirectiveBindings(directive, directive.name);
+ if (isObject(bindings.isolateScope)) {
+ directive.$$isolateBindings = bindings.isolateScope;
}
- tDirectives.push(directive);
- match = directive;
}
- } catch (e) { $exceptionHandler(e); }
+ tDirectives.push(directive);
+ match = directive;
+ }
}
}
return match;
@@ -8683,14 +10120,17 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
*/
function mergeTemplateAttributes(dst, src) {
var srcAttr = src.$attr,
- dstAttr = dst.$attr,
- $element = dst.$$element;
+ dstAttr = dst.$attr;
// reapply the old attributes to the new element
forEach(dst, function(value, key) {
- if (key.charAt(0) != '$') {
+ if (key.charAt(0) !== '$') {
if (src[key] && src[key] !== value) {
- value += (key === 'style' ? ';' : ' ') + src[key];
+ if (value.length) {
+ value += (key === 'style' ? ';' : ' ') + src[key];
+ } else {
+ value = src[key];
+ }
}
dst.$set(key, value, true, srcAttr[key]);
}
@@ -8698,18 +10138,16 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
// copy the new attributes on the old attrs object
forEach(src, function(value, key) {
- if (key == 'class') {
- safeAddClass($element, value);
- dst['class'] = (dst['class'] ? dst['class'] + ' ' : '') + value;
- } else if (key == 'style') {
- $element.attr('style', $element.attr('style') + ';' + value);
- dst['style'] = (dst['style'] ? dst['style'] + ';' : '') + value;
- // `dst` will never contain hasOwnProperty as DOM parser won't let it.
- // You will get an "InvalidCharacterError: DOM Exception 5" error if you
- // have an attribute like "has-own-property" or "data-has-own-property", etc.
- } else if (key.charAt(0) != '$' && !dst.hasOwnProperty(key)) {
+ // Check if we already set this attribute in the loop above.
+ // `dst` will never contain hasOwnProperty as DOM parser won't let it.
+ // You will get an "InvalidCharacterError: DOM Exception 5" error if you
+ // have an attribute like "has-own-property" or "data-has-own-property", etc.
+ if (!dst.hasOwnProperty(key) && key.charAt(0) !== '$') {
dst[key] = value;
- dstAttr[key] = srcAttr[key];
+
+ if (key !== 'class' && key !== 'style') {
+ dstAttr[key] = srcAttr[key];
+ }
}
});
}
@@ -8746,9 +10184,9 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
}
compileNode = $template[0];
- if ($template.length != 1 || compileNode.nodeType !== NODE_TYPE_ELEMENT) {
+ if ($template.length !== 1 || compileNode.nodeType !== NODE_TYPE_ELEMENT) {
throw $compileMinErr('tplrt',
- "Template for directive '{0}' must have exactly one root element. {1}",
+ 'Template for directive \'{0}\' must have exactly one root element. {1}',
origAsyncDirective.name, templateUrl);
}
@@ -8774,7 +10212,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
childTranscludeFn, $compileNode, origAsyncDirective, preLinkFns, postLinkFns,
previousCompileContext);
forEach($rootElement, function(node, i) {
- if (node == compileNode) {
+ if (node === compileNode) {
$rootElement[i] = $compileNode[0];
}
});
@@ -8811,6 +10249,10 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
childBoundTranscludeFn);
}
linkQueue = null;
+ }).catch(function(error) {
+ if (isError(error)) {
+ $exceptionHandler(error);
+ }
});
return function delayedNodeLinkFn(ignoreChildLinkFn, scope, node, rootElement, boundTranscludeFn) {
@@ -8889,7 +10331,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
switch (type) {
case 'svg':
case 'math':
- var wrapper = document.createElement('div');
+ var wrapper = window.document.createElement('div');
wrapper.innerHTML = '<' + type + '>' + template + '</' + type + '>';
return wrapper.childNodes[0].childNodes;
default:
@@ -8899,36 +10341,49 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
function getTrustedContext(node, attrNormalizedName) {
- if (attrNormalizedName == "srcdoc") {
+ if (attrNormalizedName === 'srcdoc') {
return $sce.HTML;
}
var tag = nodeName_(node);
+ // All tags with src attributes require a RESOURCE_URL value, except for
+ // img and various html5 media tags.
+ if (attrNormalizedName === 'src' || attrNormalizedName === 'ngSrc') {
+ if (['img', 'video', 'audio', 'source', 'track'].indexOf(tag) === -1) {
+ return $sce.RESOURCE_URL;
+ }
// maction[xlink:href] can source SVG. It's not limited to <maction>.
- if (attrNormalizedName == "xlinkHref" ||
- (tag == "form" && attrNormalizedName == "action") ||
- (tag != "img" && (attrNormalizedName == "src" ||
- attrNormalizedName == "ngSrc"))) {
+ } else if (attrNormalizedName === 'xlinkHref' ||
+ (tag === 'form' && attrNormalizedName === 'action') ||
+ // links can be stylesheets or imports, which can run script in the current origin
+ (tag === 'link' && attrNormalizedName === 'href')
+ ) {
return $sce.RESOURCE_URL;
}
}
- function addAttrInterpolateDirective(node, directives, value, name, allOrNothing) {
+ function addAttrInterpolateDirective(node, directives, value, name, isNgAttr) {
var trustedContext = getTrustedContext(node, name);
- allOrNothing = ALL_OR_NOTHING_ATTRS[name] || allOrNothing;
+ var mustHaveExpression = !isNgAttr;
+ var allOrNothing = ALL_OR_NOTHING_ATTRS[name] || isNgAttr;
- var interpolateFn = $interpolate(value, true, trustedContext, allOrNothing);
+ var interpolateFn = $interpolate(value, mustHaveExpression, trustedContext, allOrNothing);
// no interpolation found -> ignore
if (!interpolateFn) return;
-
- if (name === "multiple" && nodeName_(node) === "select") {
- throw $compileMinErr("selmulti",
- "Binding to the 'multiple' attribute is not supported. Element: {0}",
+ if (name === 'multiple' && nodeName_(node) === 'select') {
+ throw $compileMinErr('selmulti',
+ 'Binding to the \'multiple\' attribute is not supported. Element: {0}',
startingTag(node));
}
+ if (EVENT_HANDLER_ATTR_REGEXP.test(name)) {
+ throw $compileMinErr('nodomevents',
+ 'Interpolations for HTML DOM event attributes are disallowed. Please use the ' +
+ 'ng- versions (such as ng-click instead of onclick) instead.');
+ }
+
directives.push({
priority: 100,
compile: function() {
@@ -8936,12 +10391,6 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
pre: function attrInterpolatePreLinkFn(scope, element, attr) {
var $$observers = (attr.$$observers || (attr.$$observers = createMap()));
- if (EVENT_HANDLER_ATTR_REGEXP.test(name)) {
- throw $compileMinErr('nodomevents',
- "Interpolations for HTML DOM event attributes are disallowed. Please use the " +
- "ng- versions (such as ng-click instead of onclick) instead.");
- }
-
// If the attribute has changed since last $interpolate()ed
var newValue = attr[name];
if (newValue !== value) {
@@ -8970,7 +10419,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
//skip animations when the first digest occurs (when
//both the new and the old values are the same) since
//the CSS classes are the non-interpolated values
- if (name === 'class' && newValue != oldValue) {
+ if (name === 'class' && newValue !== oldValue) {
attr.$updateClass(newValue, oldValue);
} else {
attr.$set(name, newValue);
@@ -9001,7 +10450,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
if ($rootElement) {
for (i = 0, ii = $rootElement.length; i < ii; i++) {
- if ($rootElement[i] == firstElementToRemove) {
+ if ($rootElement[i] === firstElementToRemove) {
$rootElement[i++] = newNode;
for (var j = i, j2 = j + removeCount - 1,
jj = $rootElement.length;
@@ -9029,9 +10478,14 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
parent.replaceChild(newNode, firstElementToRemove);
}
- // TODO(perf): what's this document fragment for? is it needed? can we at least reuse it?
- var fragment = document.createDocumentFragment();
- fragment.appendChild(firstElementToRemove);
+ // Append all the `elementsToRemove` to a fragment. This will...
+ // - remove them from the DOM
+ // - allow them to still be traversed with .nextSibling
+ // - allow a single fragment.qSA to fetch all elements being removed
+ var fragment = window.document.createDocumentFragment();
+ for (i = 0; i < removeCount; i++) {
+ fragment.appendChild(elementsToRemove[i]);
+ }
if (jqLite.hasData(firstElementToRemove)) {
// Copy over user data (that includes Angular's $scope etc.). Don't copy private
@@ -9039,31 +10493,18 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
// event listeners (which is the main use of private data) wouldn't work anyway.
jqLite.data(newNode, jqLite.data(firstElementToRemove));
- // Remove data of the replaced element. We cannot just call .remove()
- // on the element it since that would deallocate scope that is needed
- // for the new node. Instead, remove the data "manually".
- if (!jQuery) {
- delete jqLite.cache[firstElementToRemove[jqLite.expando]];
- } else {
- // jQuery 2.x doesn't expose the data storage. Use jQuery.cleanData to clean up after
- // the replaced element. The cleanData version monkey-patched by Angular would cause
- // the scope to be trashed and we do need the very same scope to work with the new
- // element. However, we cannot just cache the non-patched version and use it here as
- // that would break if another library patches the method after Angular does (one
- // example is jQuery UI). Instead, set a flag indicating scope destroying should be
- // skipped this one time.
- skipDestroyOnNextJQueryCleanData = true;
- jQuery.cleanData([firstElementToRemove]);
- }
+ // Remove $destroy event listeners from `firstElementToRemove`
+ jqLite(firstElementToRemove).off('$destroy');
}
- for (var k = 1, kk = elementsToRemove.length; k < kk; k++) {
- var element = elementsToRemove[k];
- jqLite(element).remove(); // must do this way to clean up expando
- fragment.appendChild(element);
- delete elementsToRemove[k];
- }
+ // Cleanup any data/listeners on the elements and children.
+ // This includes invoking the $destroy event on any elements with listeners.
+ jqLite.cleanData(fragment.querySelectorAll('*'));
+ // Update the jqLite collection to only contain the `newNode`
+ for (i = 1; i < removeCount; i++) {
+ delete elementsToRemove[i];
+ }
elementsToRemove[0] = newNode;
elementsToRemove.length = 1;
}
@@ -9083,25 +10524,28 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
}
- // Set up $watches for isolate scope and controller bindings. This process
- // only occurs for isolate scopes and new scopes with controllerAs.
+ // Set up $watches for isolate scope and controller bindings.
function initializeDirectiveBindings(scope, attrs, destination, bindings, directive) {
var removeWatchCollection = [];
- forEach(bindings, function(definition, scopeName) {
+ var initialChanges = {};
+ var changes;
+ forEach(bindings, function initializeBinding(definition, scopeName) {
var attrName = definition.attrName,
optional = definition.optional,
- mode = definition.mode, // @, =, or &
+ mode = definition.mode, // @, =, <, or &
lastValue,
- parentGet, parentSet, compare;
+ parentGet, parentSet, compare, removeWatch;
switch (mode) {
case '@':
if (!optional && !hasOwnProperty.call(attrs, attrName)) {
- destination[scopeName] = attrs[attrName] = void 0;
+ destination[scopeName] = attrs[attrName] = undefined;
}
- attrs.$observe(attrName, function(value) {
- if (isString(value)) {
+ removeWatch = attrs.$observe(attrName, function(value) {
+ if (isString(value) || isBoolean(value)) {
+ var oldValue = destination[scopeName];
+ recordChanges(scopeName, value, oldValue);
destination[scopeName] = value;
}
});
@@ -9116,12 +10560,14 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
// the value to boolean rather than a string, so we special case this situation
destination[scopeName] = lastValue;
}
+ initialChanges[scopeName] = new SimpleChange(_UNINITIALIZED_VALUE, destination[scopeName]);
+ removeWatchCollection.push(removeWatch);
break;
case '=':
if (!hasOwnProperty.call(attrs, attrName)) {
if (optional) break;
- attrs[attrName] = void 0;
+ attrs[attrName] = undefined;
}
if (optional && !attrs[attrName]) break;
@@ -9129,13 +10575,13 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
if (parentGet.literal) {
compare = equals;
} else {
- compare = function(a, b) { return a === b || (a !== a && b !== b); };
+ compare = simpleCompare;
}
parentSet = parentGet.assign || function() {
// reset the change, or we will throw this exception on every $digest
lastValue = destination[scopeName] = parentGet(scope);
throw $compileMinErr('nonassign',
- "Expression '{0}' in attribute '{1}' used with directive '{2}' is non-assignable!",
+ 'Expression \'{0}\' in attribute \'{1}\' used with directive \'{2}\' is non-assignable!',
attrs[attrName], attrName, directive.name);
};
lastValue = destination[scopeName] = parentGet(scope);
@@ -9150,10 +10596,10 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
parentSet(scope, parentValue = destination[scopeName]);
}
}
- return lastValue = parentValue;
+ lastValue = parentValue;
+ return lastValue;
};
parentValueWatch.$stateful = true;
- var removeWatch;
if (definition.collection) {
removeWatch = scope.$watchCollection(attrs[attrName], parentValueWatch);
} else {
@@ -9162,6 +10608,33 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
removeWatchCollection.push(removeWatch);
break;
+ case '<':
+ if (!hasOwnProperty.call(attrs, attrName)) {
+ if (optional) break;
+ attrs[attrName] = undefined;
+ }
+ if (optional && !attrs[attrName]) break;
+
+ parentGet = $parse(attrs[attrName]);
+ var deepWatch = parentGet.literal;
+
+ var initialValue = destination[scopeName] = parentGet(scope);
+ initialChanges[scopeName] = new SimpleChange(_UNINITIALIZED_VALUE, destination[scopeName]);
+
+ removeWatch = scope.$watch(parentGet, function parentValueWatchAction(newValue, oldValue) {
+ if (oldValue === newValue) {
+ if (oldValue === initialValue || (deepWatch && equals(oldValue, initialValue))) {
+ return;
+ }
+ oldValue = initialValue;
+ }
+ recordChanges(scopeName, newValue, oldValue);
+ destination[scopeName] = newValue;
+ }, deepWatch);
+
+ removeWatchCollection.push(removeWatch);
+ break;
+
case '&':
// Don't assign Object.prototype method to scope
parentGet = attrs.hasOwnProperty(attrName) ? $parse(attrs[attrName]) : noop;
@@ -9176,22 +10649,63 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
}
});
- return removeWatchCollection.length && function removeWatches() {
- for (var i = 0, ii = removeWatchCollection.length; i < ii; ++i) {
- removeWatchCollection[i]();
+ function recordChanges(key, currentValue, previousValue) {
+ if (isFunction(destination.$onChanges) && !simpleCompare(currentValue, previousValue)) {
+ // If we have not already scheduled the top level onChangesQueue handler then do so now
+ if (!onChangesQueue) {
+ scope.$$postDigest(flushOnChangesQueue);
+ onChangesQueue = [];
+ }
+ // If we have not already queued a trigger of onChanges for this controller then do so now
+ if (!changes) {
+ changes = {};
+ onChangesQueue.push(triggerOnChangesHook);
+ }
+ // If the has been a change on this property already then we need to reuse the previous value
+ if (changes[key]) {
+ previousValue = changes[key].previousValue;
+ }
+ // Store this change
+ changes[key] = new SimpleChange(previousValue, currentValue);
+ }
+ }
+
+ function triggerOnChangesHook() {
+ destination.$onChanges(changes);
+ // Now clear the changes so that we schedule onChanges when more changes arrive
+ changes = undefined;
+ }
+
+ return {
+ initialChanges: initialChanges,
+ removeWatches: removeWatchCollection.length && function removeWatches() {
+ for (var i = 0, ii = removeWatchCollection.length; i < ii; ++i) {
+ removeWatchCollection[i]();
+ }
}
};
}
}];
}
-var PREFIX_REGEXP = /^((?:x|data)[\:\-_])/i;
+function SimpleChange(previous, current) {
+ this.previousValue = previous;
+ this.currentValue = current;
+}
+SimpleChange.prototype.isFirstChange = function() { return this.previousValue === _UNINITIALIZED_VALUE; };
+
+
+var PREFIX_REGEXP = /^((?:x|data)[:\-_])/i;
+var SPECIAL_CHARS_REGEXP = /[:\-_]+(.)/g;
+
/**
* Converts all accepted directives format into proper directive name.
* @param name Name to normalize
*/
function directiveNormalize(name) {
- return camelCase(name.replace(PREFIX_REGEXP, ''));
+ return name
+ .replace(PREFIX_REGEXP, '')
+ .replace(SPECIAL_CHARS_REGEXP, fnCamelCaseReplace);
}
/**
@@ -9263,7 +10777,7 @@ function tokenDifference(str1, str2) {
for (var i = 0; i < tokens1.length; i++) {
var token = tokens1[i];
for (var j = 0; j < tokens2.length; j++) {
- if (token == tokens2[j]) continue outer;
+ if (token === tokens2[j]) continue outer;
}
values += (values.length > 0 ? ' ' : '') + token;
}
@@ -9280,8 +10794,9 @@ function removeComments(jqNodes) {
while (i--) {
var node = jqNodes[i];
- if (node.nodeType === NODE_TYPE_COMMENT) {
- splice.call(jqNodes, i, 1);
+ if (node.nodeType === NODE_TYPE_COMMENT ||
+ (node.nodeType === NODE_TYPE_TEXT && node.nodeValue.trim() === '')) {
+ splice.call(jqNodes, i, 1);
}
}
return jqNodes;
@@ -9303,6 +10818,8 @@ function identifierForController(controller, ident) {
/**
* @ngdoc provider
* @name $controllerProvider
+ * @this
+ *
* @description
* The {@link ng.$controller $controller service} is used by Angular to create new
* controllers.
@@ -9316,6 +10833,15 @@ function $ControllerProvider() {
/**
* @ngdoc method
+ * @name $controllerProvider#has
+ * @param {string} name Controller name to check.
+ */
+ this.has = function(name) {
+ return controllers.hasOwnProperty(name);
+ };
+
+ /**
+ * @ngdoc method
* @name $controllerProvider#register
* @param {string|Object} name Controller name, or an object map of controllers where the keys are
* the names and the values are the constructors.
@@ -9335,6 +10861,11 @@ function $ControllerProvider() {
* @ngdoc method
* @name $controllerProvider#allowGlobals
* @description If called, allows `$controller` to find controller constructors on `window`
+ *
+ * @deprecated
+ * sinceVersion="v1.3.0"
+ * removeVersion="v1.7.0"
+ * This method of finding controllers has been deprecated.
*/
this.allowGlobals = function() {
globals = true;
@@ -9355,7 +10886,7 @@ function $ControllerProvider() {
* * check if a controller with given name is registered via `$controllerProvider`
* * check if evaluating the string on the current scope returns a constructor
* * if $controllerProvider#allowGlobals, check `window[constructor]` on the global
- * `window` object (not recommended)
+ * `window` object (deprecated, not recommended)
*
* The string can use the `controller as property` syntax, where the controller instance is published
* as the specified property on the `scope`; the `scope` must be injected into `locals` param for this
@@ -9370,7 +10901,7 @@ function $ControllerProvider() {
* It's just a simple call to {@link auto.$injector $injector}, but extracted into
* a service, so that one can override this service with [BC version](https://gist.github.com/1649788).
*/
- return function(expression, locals, later, ident) {
+ return function $controller(expression, locals, later, ident) {
// PRIVATE API:
// param `later` --- indicates that the controller's constructor is invoked at a later time.
// If true, $controller will allocate the object with the correct
@@ -9388,16 +10919,21 @@ function $ControllerProvider() {
match = expression.match(CNTRL_REG);
if (!match) {
throw $controllerMinErr('ctrlfmt',
- "Badly formed controller string '{0}'. " +
- "Must match `__name__ as __id__` or `__name__`.", expression);
+ 'Badly formed controller string \'{0}\'. ' +
+ 'Must match `__name__ as __id__` or `__name__`.', expression);
}
- constructor = match[1],
+ constructor = match[1];
identifier = identifier || match[3];
expression = controllers.hasOwnProperty(constructor)
? controllers[constructor]
: getter(locals.$scope, constructor, true) ||
(globals ? getter($window, constructor, true) : undefined);
+ if (!expression) {
+ throw $controllerMinErr('ctrlreg',
+ 'The controller with the name \'{0}\' is not registered.', constructor);
+ }
+
assertArgFn(expression, constructor, true);
}
@@ -9420,8 +10956,7 @@ function $ControllerProvider() {
addIdentifier(locals, identifier, instance, constructor || expression.name);
}
- var instantiate;
- return instantiate = extend(function() {
+ return extend(function $controllerInit() {
var result = $injector.invoke(expression, instance, locals, constructor);
if (result !== instance && (isObject(result) || isFunction(result))) {
instance = result;
@@ -9449,7 +10984,7 @@ function $ControllerProvider() {
function addIdentifier(locals, identifier, instance, name) {
if (!(locals && isObject(locals.$scope))) {
throw minErr('$controller')('noscp',
- "Cannot export controller '{0}' as '{1}'! No $scope object provided via `locals`.",
+ 'Cannot export controller \'{0}\' as \'{1}\'! No $scope object provided via `locals`.',
name, identifier);
}
@@ -9462,12 +10997,13 @@ function $ControllerProvider() {
* @ngdoc service
* @name $document
* @requires $window
+ * @this
*
* @description
* A {@link angular.element jQuery or jqLite} wrapper for the browser's `window.document` object.
*
* @example
- <example module="documentExample">
+ <example module="documentExample" name="document">
<file name="index.html">
<div ng-controller="ExampleController">
<p>$document title: <b ng-bind="title"></b></p>
@@ -9489,10 +11025,38 @@ function $DocumentProvider() {
}];
}
+
+/**
+ * @private
+ * @this
+ * Listens for document visibility change and makes the current status accessible.
+ */
+function $$IsDocumentHiddenProvider() {
+ this.$get = ['$document', '$rootScope', function($document, $rootScope) {
+ var doc = $document[0];
+ var hidden = doc && doc.hidden;
+
+ $document.on('visibilitychange', changeListener);
+
+ $rootScope.$on('$destroy', function() {
+ $document.off('visibilitychange', changeListener);
+ });
+
+ function changeListener() {
+ hidden = doc.hidden;
+ }
+
+ return function() {
+ return hidden;
+ };
+ }];
+}
+
/**
* @ngdoc service
* @name $exceptionHandler
* @requires ng.$log
+ * @this
*
* @description
* Any uncaught exception in angular expressions is delegated to this service.
@@ -9504,18 +11068,21 @@ function $DocumentProvider() {
*
* ## Example:
*
+ * The example below will overwrite the default `$exceptionHandler` in order to (a) log uncaught
+ * errors to the backend for later inspection by the developers and (b) to use `$log.warn()` instead
+ * of `$log.error()`.
+ *
* ```js
- * angular.module('exceptionOverride', []).factory('$exceptionHandler', function() {
- * return function(exception, cause) {
- * exception.message += ' (caused by "' + cause + '")';
- * throw exception;
- * };
- * });
+ * angular.
+ * module('exceptionOverwrite', []).
+ * factory('$exceptionHandler', ['$log', 'logErrorsToBackend', function($log, logErrorsToBackend) {
+ * return function myExceptionHandler(exception, cause) {
+ * logErrorsToBackend(exception, cause);
+ * $log.warn(exception, cause);
+ * };
+ * }]);
* ```
*
- * This example will override the normal action of `$exceptionHandler`, to make angular
- * exceptions fail hard when they happen, instead of just logging to the console.
- *
* <hr />
* Note, that code executed in event-listeners (even those registered using jqLite's `on`/`bind`
* methods) does not delegate exceptions to the {@link ng.$exceptionHandler $exceptionHandler}
@@ -9525,7 +11092,7 @@ function $DocumentProvider() {
* `try { ... } catch(e) { $exceptionHandler(e); }`
*
* @param {Error} exception Exception associated with the error.
- * @param {string=} cause optional information about the context in which
+ * @param {string=} cause Optional information about the context in which
* the error was thrown.
*
*/
@@ -9537,7 +11104,7 @@ function $ExceptionHandlerProvider() {
}];
}
-var $$ForceReflowProvider = function() {
+var $$ForceReflowProvider = /** @this */ function() {
this.$get = ['$document', function($document) {
return function(domNode) {
//the line below will force the browser to perform a repaint so
@@ -9567,13 +11134,8 @@ var JSON_ENDS = {
'[': /]$/,
'{': /}$/
};
-var JSON_PROTECTION_PREFIX = /^\)\]\}',?\n/;
+var JSON_PROTECTION_PREFIX = /^\)]\}',?\n/;
var $httpMinErr = minErr('$http');
-var $httpMinErrLegacyFn = function(method) {
- return function() {
- throw $httpMinErr('legacy', 'The method `{0}` on the promise returned from `$http` has been disabled.', method);
- };
-};
function serializeValue(v) {
if (isObject(v)) {
@@ -9583,6 +11145,7 @@ function serializeValue(v) {
}
+/** @this */
function $HttpParamSerializerProvider() {
/**
* @ngdoc service
@@ -9595,7 +11158,7 @@ function $HttpParamSerializerProvider() {
* * `{'foo': 'bar'}` results in `foo=bar`
* * `{'foo': Date.now()}` results in `foo=2015-04-01T09%3A50%3A49.262Z` (`toISOString()` and encoded representation of a Date object)
* * `{'foo': ['bar', 'baz']}` results in `foo=bar&foo=baz` (repeated key for each array element)
- * * `{'foo': {'bar':'baz'}}` results in `foo=%7B%22bar%22%3A%22baz%22%7D"` (stringified and encoded representation of an object)
+ * * `{'foo': {'bar':'baz'}}` results in `foo=%7B%22bar%22%3A%22baz%22%7D` (stringified and encoded representation of an object)
*
* Note that serializer will sort the request parameters alphabetically.
* */
@@ -9607,7 +11170,7 @@ function $HttpParamSerializerProvider() {
forEachSorted(params, function(value, key) {
if (value === null || isUndefined(value)) return;
if (isArray(value)) {
- forEach(value, function(v, k) {
+ forEach(value, function(v) {
parts.push(encodeUriQuery(key) + '=' + encodeUriQuery(serializeValue(v)));
});
} else {
@@ -9620,10 +11183,12 @@ function $HttpParamSerializerProvider() {
};
}
+/** @this */
function $HttpParamSerializerJQLikeProvider() {
/**
* @ngdoc service
* @name $httpParamSerializerJQLike
+ *
* @description
*
* Alternative {@link $http `$http`} params serializer that follows
@@ -9700,7 +11265,12 @@ function defaultHttpResponseTransform(data, headers) {
if (tempData) {
var contentType = headers('Content-Type');
if ((contentType && (contentType.indexOf(APPLICATION_JSON) === 0)) || isJsonLike(tempData)) {
- data = fromJson(tempData);
+ try {
+ data = fromJson(tempData);
+ } catch (e) {
+ throw $httpMinErr('baddata', 'Data must be a valid JSON object. Received: "{0}". ' +
+ 'Parse error: "{1}"', data, e);
+ }
}
}
}
@@ -9752,7 +11322,7 @@ function parseHeaders(headers) {
* @param {(string|Object)} headers Headers to provide access to.
* @returns {function(string=)} Returns a getter function which if called with:
*
- * - if called with single an argument returns a single header value or null
+ * - if called with an argument returns a single header value or null
* - if called with no arguments returns an object containing all headers.
*/
function headersGetter(headers) {
@@ -9763,7 +11333,7 @@ function headersGetter(headers) {
if (name) {
var value = headersObj[lowercase(name)];
- if (value === void 0) {
+ if (value === undefined) {
value = null;
}
return value;
@@ -9806,6 +11376,8 @@ function isSuccess(status) {
/**
* @ngdoc provider
* @name $httpProvider
+ * @this
+ *
* @description
* Use `$httpProvider` to change the default behavior of the {@link ng.$http $http} service.
* */
@@ -9821,12 +11393,6 @@ function $HttpProvider() {
* {@link ng.$cacheFactory `$cacheFactory`} to enable or disable caching of HTTP responses
* by default. See {@link $http#caching $http Caching} for more information.
*
- * - **`defaults.xsrfCookieName`** - {string} - Name of cookie containing the XSRF token.
- * Defaults value is `'XSRF-TOKEN'`.
- *
- * - **`defaults.xsrfHeaderName`** - {string} - Name of HTTP header to populate with the
- * XSRF token. Defaults value is `'X-XSRF-TOKEN'`.
- *
* - **`defaults.headers`** - {Object} - Default headers for all $http requests.
* Refer to {@link ng.$http#setting-http-headers $http} for documentation on
* setting default headers.
@@ -9835,12 +11401,39 @@ function $HttpProvider() {
* - **`defaults.headers.put`**
* - **`defaults.headers.patch`**
*
+ * - **`defaults.jsonpCallbackParam`** - `{string}` - the name of the query parameter that passes the name of the
+ * callback in a JSONP request. The value of this parameter will be replaced with the expression generated by the
+ * {@link $jsonpCallbacks} service. Defaults to `'callback'`.
*
* - **`defaults.paramSerializer`** - `{string|function(Object<string,string>):string}` - A function
* used to the prepare string representation of request parameters (specified as an object).
* If specified as string, it is interpreted as a function registered with the {@link auto.$injector $injector}.
* Defaults to {@link ng.$httpParamSerializer $httpParamSerializer}.
*
+ * - **`defaults.transformRequest`** -
+ * `{Array<function(data, headersGetter)>|function(data, headersGetter)}` -
+ * An array of functions (or a single function) which are applied to the request data.
+ * By default, this is an array with one request transformation function:
+ *
+ * - If the `data` property of the request configuration object contains an object, serialize it
+ * into JSON format.
+ *
+ * - **`defaults.transformResponse`** -
+ * `{Array<function(data, headersGetter, status)>|function(data, headersGetter, status)}` -
+ * An array of functions (or a single function) which are applied to the response data. By default,
+ * this is an array which applies one response transformation function that does two things:
+ *
+ * - If XSRF prefix is detected, strip it
+ * (see {@link ng.$http#security-considerations Security Considerations in the $http docs}).
+ * - If the `Content-Type` is `application/json` or the response looks like JSON,
+ * deserialize it using a JSON parser.
+ *
+ * - **`defaults.xsrfCookieName`** - {string} - Name of cookie containing the XSRF token.
+ * Defaults value is `'XSRF-TOKEN'`.
+ *
+ * - **`defaults.xsrfHeaderName`** - {string} - Name of HTTP header to populate with the
+ * XSRF token. Defaults value is `'X-XSRF-TOKEN'`.
+ *
**/
var defaults = this.defaults = {
// transform incoming response data
@@ -9864,7 +11457,9 @@ function $HttpProvider() {
xsrfCookieName: 'XSRF-TOKEN',
xsrfHeaderName: 'X-XSRF-TOKEN',
- paramSerializer: '$httpParamSerializer'
+ paramSerializer: '$httpParamSerializer',
+
+ jsonpCallbackParam: 'callback'
};
var useApplyAsync = false;
@@ -9895,30 +11490,6 @@ function $HttpProvider() {
return useApplyAsync;
};
- var useLegacyPromise = true;
- /**
- * @ngdoc method
- * @name $httpProvider#useLegacyPromiseExtensions
- * @description
- *
- * Configure `$http` service to return promises without the shorthand methods `success` and `error`.
- * This should be used to make sure that applications work without these methods.
- *
- * Defaults to true. If no value is specified, returns the current configured value.
- *
- * @param {boolean=} value If true, `$http` will return a promise with the deprecated legacy `success` and `error` methods.
- *
- * @returns {boolean|Object} If a value is specified, returns the $httpProvider for chaining.
- * otherwise, returns the current configured value.
- **/
- this.useLegacyPromiseExtensions = function(value) {
- if (isDefined(value)) {
- useLegacyPromise = !!value;
- return this;
- }
- return useLegacyPromise;
- };
-
/**
* @ngdoc property
* @name $httpProvider#interceptors
@@ -9934,8 +11505,8 @@ function $HttpProvider() {
**/
var interceptorFactories = this.interceptors = [];
- this.$get = ['$httpBackend', '$$cookieReader', '$cacheFactory', '$rootScope', '$q', '$injector',
- function($httpBackend, $$cookieReader, $cacheFactory, $rootScope, $q, $injector) {
+ this.$get = ['$browser', '$httpBackend', '$$cookieReader', '$cacheFactory', '$rootScope', '$q', '$injector', '$sce',
+ function($browser, $httpBackend, $$cookieReader, $cacheFactory, $rootScope, $q, $injector, $sce) {
var defaultCache = $cacheFactory('$http');
@@ -10010,10 +11581,13 @@ function $HttpProvider() {
* - **config** – `{Object}` – The configuration object that was used to generate the request.
* - **statusText** – `{string}` – HTTP status text of the response.
*
- * A response status code between 200 and 299 is considered a success status and
- * will result in the success callback being called. Note that if the response is a redirect,
- * XMLHttpRequest will transparently follow it, meaning that the error callback will not be
- * called for such responses.
+ * A response status code between 200 and 299 is considered a success status and will result in
+ * the success callback being called. Any response status code outside of that range is
+ * considered an error status and will result in the error callback being called.
+ * Also, status codes less than -1 are normalized to zero. -1 usually means the request was
+ * aborted, e.g. using a `config.timeout`.
+ * Note that if the response is a redirect, XMLHttpRequest will transparently follow it, meaning
+ * that the outcome (success or error) will be determined by the final response status code.
*
*
* ## Shortcut methods
@@ -10049,14 +11623,6 @@ function $HttpProvider() {
* $httpBackend.flush();
* ```
*
- * ## Deprecation Notice
- * <div class="alert alert-danger">
- * The `$http` legacy promise methods `success` and `error` have been deprecated.
- * Use the standard `then` method instead.
- * If {@link $httpProvider#useLegacyPromiseExtensions `$httpProvider.useLegacyPromiseExtensions`} is set to
- * `false` then these methods will throw {@link $http:legacy `$http/legacy`} error.
- * </div>
- *
* ## Setting HTTP Headers
*
* The $http service will automatically add certain HTTP headers to all requests. These defaults
@@ -10064,7 +11630,7 @@ function $HttpProvider() {
* object, which currently contains this default configuration:
*
* - `$httpProvider.defaults.headers.common` (headers that are common for all requests):
- * - `Accept: application/json, text/plain, * / *`
+ * - <code>Accept: application/json, text/plain, \*&#65279;/&#65279;\*</code>
* - `$httpProvider.defaults.headers.post`: (header defaults for POST requests)
* - `Content-Type: application/json`
* - `$httpProvider.defaults.headers.put` (header defaults for PUT requests)
@@ -10080,7 +11646,7 @@ function $HttpProvider() {
*
* ```
* module.run(function($http) {
- * $http.defaults.headers.common.Authorization = 'Basic YmVlcDpib29w'
+ * $http.defaults.headers.common.Authorization = 'Basic YmVlcDpib29w';
* });
* ```
*
@@ -10115,7 +11681,7 @@ function $HttpProvider() {
* That means changes to the properties of `data` are not local to the transform function (since Javascript passes objects by reference).
* For example, when calling `$http.get(url, $scope.myObject)`, modifications to the object's properties in a transformRequest
* function will be reflected on the scope and in any templates where the object is data-bound.
- * To prevent his, transform functions should have no side-effects.
+ * To prevent this, transform functions should have no side-effects.
* If you need to modify properties, it is recommended to make a copy of the data, or create new object to return.
* </div>
*
@@ -10130,20 +11696,23 @@ function $HttpProvider() {
*
* Angular provides the following default transformations:
*
- * Request transformations (`$httpProvider.defaults.transformRequest` and `$http.defaults.transformRequest`):
+ * Request transformations (`$httpProvider.defaults.transformRequest` and `$http.defaults.transformRequest`) is
+ * an array with one function that does the following:
*
* - If the `data` property of the request configuration object contains an object, serialize it
* into JSON format.
*
- * Response transformations (`$httpProvider.defaults.transformResponse` and `$http.defaults.transformResponse`):
+ * Response transformations (`$httpProvider.defaults.transformResponse` and `$http.defaults.transformResponse`) is
+ * an array with one function that does the following:
*
* - If XSRF prefix is detected, strip it (see Security Considerations section below).
- * - If JSON response is detected, deserialize it using a JSON parser.
+ * - If the `Content-Type` is `application/json` or the response looks like JSON,
+ * deserialize it using a JSON parser.
*
*
* ### Overriding the Default Transformations Per Request
*
- * If you wish override the request/response transformations only for a single request then provide
+ * If you wish to override the request/response transformations only for a single request then provide
* `transformRequest` and/or `transformResponse` properties on the configuration object passed
* into `$http`.
*
@@ -10186,7 +11755,7 @@ function $HttpProvider() {
* * cache a specific response - set config.cache value to TRUE or to a cache object
*
* If caching is enabled, but neither the default cache nor config.cache are set to a cache object,
- * then the default `$cacheFactory($http)` object is used.
+ * then the default `$cacheFactory("$http")` object is used.
*
* The default cache value can be set by updating the
* {@link ng.$http#defaults `$http.defaults.cache`} property or the
@@ -10354,13 +11923,20 @@ function $HttpProvider() {
* processed. The object has following properties:
*
* - **method** – `{string}` – HTTP method (e.g. 'GET', 'POST', etc)
- * - **url** – `{string}` – Absolute or relative URL of the resource that is being requested.
+ * - **url** – `{string|TrustedObject}` – Absolute or relative URL of the resource that is being requested;
+ * or an object created by a call to `$sce.trustAsResourceUrl(url)`.
* - **params** – `{Object.<string|Object>}` – Map of strings or objects which will be serialized
* with the `paramSerializer` and appended as GET parameters.
* - **data** – `{string|Object}` – Data to be sent as the request message data.
* - **headers** – `{Object}` – Map of strings or functions which return strings representing
* HTTP headers to send to the server. If the return value of a function is null, the
* header will not be sent. Functions accept a config object as an argument.
+ * - **eventHandlers** - `{Object}` - Event listeners to be bound to the XMLHttpRequest object.
+ * To bind events to the XMLHttpRequest upload object, use `uploadEventHandlers`.
+ * The handler will be called in the context of a `$apply` block.
+ * - **uploadEventHandlers** - `{Object}` - Event listeners to be bound to the XMLHttpRequest upload
+ * object. To bind events to the XMLHttpRequest object, use `eventHandlers`.
+ * The handler will be called in the context of a `$apply` block.
* - **xsrfHeaderName** – `{string}` – Name of HTTP header to populate with the XSRF token.
* - **xsrfCookieName** – `{string}` – Name of cookie containing the XSRF token.
* - **transformRequest** –
@@ -10402,7 +11978,7 @@ function $HttpProvider() {
*
*
* @example
-<example module="httpExample">
+<example module="httpExample" name="http-service">
<file name="index.html">
<div ng-controller="FetchController">
<select ng-model="method" aria-label="Request method">
@@ -10414,11 +11990,11 @@ function $HttpProvider() {
<button id="samplegetbtn" ng-click="updateModel('GET', 'http-hello.html')">Sample GET</button>
<button id="samplejsonpbtn"
ng-click="updateModel('JSONP',
- 'https://angularjs.org/greet.php?callback=JSON_CALLBACK&name=Super%20Hero')">
+ 'https://angularjs.org/greet.php?name=Super%20Hero')">
Sample JSONP
</button>
<button id="invalidjsonpbtn"
- ng-click="updateModel('JSONP', 'https://angularjs.org/doesntexist&callback=JSON_CALLBACK')">
+ ng-click="updateModel('JSONP', 'https://angularjs.org/doesntexist')">
Invalid JSONP
</button>
<pre>http status code: {{status}}</pre>
@@ -10427,6 +12003,13 @@ function $HttpProvider() {
</file>
<file name="script.js">
angular.module('httpExample', [])
+ .config(['$sceDelegateProvider', function($sceDelegateProvider) {
+ // We must whitelist the JSONP endpoint that we are using to show that we trust it
+ $sceDelegateProvider.resourceUrlWhitelist([
+ 'self',
+ 'https://angularjs.org/**'
+ ]);
+ }])
.controller('FetchController', ['$scope', '$http', '$templateCache',
function($scope, $http, $templateCache) {
$scope.method = 'GET';
@@ -10441,7 +12024,7 @@ function $HttpProvider() {
$scope.status = response.status;
$scope.data = response.data;
}, function(response) {
- $scope.data = response.data || "Request failed";
+ $scope.data = response.data || 'Request failed';
$scope.status = response.status;
});
};
@@ -10460,7 +12043,6 @@ function $HttpProvider() {
var data = element(by.binding('data'));
var fetchBtn = element(by.id('fetchbtn'));
var sampleGetBtn = element(by.id('samplegetbtn'));
- var sampleJsonpBtn = element(by.id('samplejsonpbtn'));
var invalidJsonpBtn = element(by.id('invalidjsonpbtn'));
it('should make an xhr GET request', function() {
@@ -10472,6 +12054,7 @@ function $HttpProvider() {
// Commented out due to flakes. See https://github.com/angular/angular.js/issues/9185
// it('should make a JSONP request to angularjs.org', function() {
+// var sampleJsonpBtn = element(by.id('samplejsonpbtn'));
// sampleJsonpBtn.click();
// fetchBtn.click();
// expect(status.getText()).toMatch('200');
@@ -10490,100 +12073,66 @@ function $HttpProvider() {
*/
function $http(requestConfig) {
- if (!angular.isObject(requestConfig)) {
+ if (!isObject(requestConfig)) {
throw minErr('$http')('badreq', 'Http request configuration must be an object. Received: {0}', requestConfig);
}
- if (!isString(requestConfig.url)) {
- throw minErr('$http')('badreq', 'Http request configuration url must be a string. Received: {0}', requestConfig.url);
+ if (!isString($sce.valueOf(requestConfig.url))) {
+ throw minErr('$http')('badreq', 'Http request configuration url must be a string or a $sce trusted object. Received: {0}', requestConfig.url);
}
var config = extend({
method: 'get',
transformRequest: defaults.transformRequest,
transformResponse: defaults.transformResponse,
- paramSerializer: defaults.paramSerializer
+ paramSerializer: defaults.paramSerializer,
+ jsonpCallbackParam: defaults.jsonpCallbackParam
}, requestConfig);
config.headers = mergeHeaders(requestConfig);
config.method = uppercase(config.method);
config.paramSerializer = isString(config.paramSerializer) ?
- $injector.get(config.paramSerializer) : config.paramSerializer;
+ $injector.get(config.paramSerializer) : config.paramSerializer;
- var serverRequest = function(config) {
- var headers = config.headers;
- var reqData = transformData(config.data, headersGetter(headers), undefined, config.transformRequest);
+ $browser.$$incOutstandingRequestCount();
- // strip content-type if data is undefined
- if (isUndefined(reqData)) {
- forEach(headers, function(value, header) {
- if (lowercase(header) === 'content-type') {
- delete headers[header];
- }
- });
- }
-
- if (isUndefined(config.withCredentials) && !isUndefined(defaults.withCredentials)) {
- config.withCredentials = defaults.withCredentials;
- }
-
- // send request
- return sendReq(config, reqData).then(transformResponse, transformResponse);
- };
-
- var chain = [serverRequest, undefined];
- var promise = $q.when(config);
+ var requestInterceptors = [];
+ var responseInterceptors = [];
+ var promise = $q.resolve(config);
// apply interceptors
forEach(reversedInterceptors, function(interceptor) {
if (interceptor.request || interceptor.requestError) {
- chain.unshift(interceptor.request, interceptor.requestError);
+ requestInterceptors.unshift(interceptor.request, interceptor.requestError);
}
if (interceptor.response || interceptor.responseError) {
- chain.push(interceptor.response, interceptor.responseError);
+ responseInterceptors.push(interceptor.response, interceptor.responseError);
}
});
- while (chain.length) {
- var thenFn = chain.shift();
- var rejectFn = chain.shift();
+ promise = chainInterceptors(promise, requestInterceptors);
+ promise = promise.then(serverRequest);
+ promise = chainInterceptors(promise, responseInterceptors);
+ promise = promise.finally(completeOutstandingRequest);
- promise = promise.then(thenFn, rejectFn);
- }
+ return promise;
- if (useLegacyPromise) {
- promise.success = function(fn) {
- assertArgFn(fn, 'fn');
- promise.then(function(response) {
- fn(response.data, response.status, response.headers, config);
- });
- return promise;
- };
+ function chainInterceptors(promise, interceptors) {
+ for (var i = 0, ii = interceptors.length; i < ii;) {
+ var thenFn = interceptors[i++];
+ var rejectFn = interceptors[i++];
- promise.error = function(fn) {
- assertArgFn(fn, 'fn');
+ promise = promise.then(thenFn, rejectFn);
+ }
- promise.then(null, function(response) {
- fn(response.data, response.status, response.headers, config);
- });
- return promise;
- };
- } else {
- promise.success = $httpMinErrLegacyFn('success');
- promise.error = $httpMinErrLegacyFn('error');
- }
+ interceptors.length = 0;
- return promise;
+ return promise;
+ }
- function transformResponse(response) {
- // make a copy since the response must be cacheable
- var resp = extend({}, response);
- resp.data = transformData(response.data, response.headers, response.status,
- config.transformResponse);
- return (isSuccess(response.status))
- ? resp
- : $q.reject(resp);
+ function completeOutstandingRequest() {
+ $browser.$$completeOutstandingRequest(noop);
}
function executeHeaderFns(headers, config) {
@@ -10610,7 +12159,7 @@ function $HttpProvider() {
defHeaders = extend({}, defHeaders.common, defHeaders[lowercase(config.method)]);
- // using for-in instead of forEach to avoid unecessary iteration after header has been found
+ // using for-in instead of forEach to avoid unnecessary iteration after header has been found
defaultHeadersIteration:
for (defHeaderName in defHeaders) {
lowercaseDefHeaderName = lowercase(defHeaderName);
@@ -10627,6 +12176,37 @@ function $HttpProvider() {
// execute if header value is a function for merged headers
return executeHeaderFns(reqHeaders, shallowCopy(config));
}
+
+ function serverRequest(config) {
+ var headers = config.headers;
+ var reqData = transformData(config.data, headersGetter(headers), undefined, config.transformRequest);
+
+ // strip content-type if data is undefined
+ if (isUndefined(reqData)) {
+ forEach(headers, function(value, header) {
+ if (lowercase(header) === 'content-type') {
+ delete headers[header];
+ }
+ });
+ }
+
+ if (isUndefined(config.withCredentials) && !isUndefined(defaults.withCredentials)) {
+ config.withCredentials = defaults.withCredentials;
+ }
+
+ // send request
+ return sendReq(config, reqData).then(transformResponse, transformResponse);
+ }
+
+ function transformResponse(response) {
+ // make a copy since the response must be cacheable
+ var resp = extend({}, response);
+ resp.data = transformData(response.data, response.headers, response.status,
+ config.transformResponse);
+ return (isSuccess(response.status))
+ ? resp
+ : $q.reject(resp);
+ }
}
$http.pendingRequests = [];
@@ -10638,7 +12218,8 @@ function $HttpProvider() {
* @description
* Shortcut method to perform `GET` request.
*
- * @param {string} url Relative or absolute URL specifying the destination of the request
+ * @param {string|TrustedObject} url Absolute or relative URL of the resource that is being requested;
+ * or an object created by a call to `$sce.trustAsResourceUrl(url)`.
* @param {Object=} config Optional configuration object
* @returns {HttpPromise} Future object
*/
@@ -10650,7 +12231,8 @@ function $HttpProvider() {
* @description
* Shortcut method to perform `DELETE` request.
*
- * @param {string} url Relative or absolute URL specifying the destination of the request
+ * @param {string|TrustedObject} url Absolute or relative URL of the resource that is being requested;
+ * or an object created by a call to `$sce.trustAsResourceUrl(url)`.
* @param {Object=} config Optional configuration object
* @returns {HttpPromise} Future object
*/
@@ -10662,7 +12244,8 @@ function $HttpProvider() {
* @description
* Shortcut method to perform `HEAD` request.
*
- * @param {string} url Relative or absolute URL specifying the destination of the request
+ * @param {string|TrustedObject} url Absolute or relative URL of the resource that is being requested;
+ * or an object created by a call to `$sce.trustAsResourceUrl(url)`.
* @param {Object=} config Optional configuration object
* @returns {HttpPromise} Future object
*/
@@ -10674,8 +12257,33 @@ function $HttpProvider() {
* @description
* Shortcut method to perform `JSONP` request.
*
- * @param {string} url Relative or absolute URL specifying the destination of the request.
- * The name of the callback should be the string `JSON_CALLBACK`.
+ * Note that, since JSONP requests are sensitive because the response is given full access to the browser,
+ * the url must be declared, via {@link $sce} as a trusted resource URL.
+ * You can trust a URL by adding it to the whitelist via
+ * {@link $sceDelegateProvider#resourceUrlWhitelist `$sceDelegateProvider.resourceUrlWhitelist`} or
+ * by explicitly trusting the URL via {@link $sce#trustAsResourceUrl `$sce.trustAsResourceUrl(url)`}.
+ *
+ * JSONP requests must specify a callback to be used in the response from the server. This callback
+ * is passed as a query parameter in the request. You must specify the name of this parameter by
+ * setting the `jsonpCallbackParam` property on the request config object.
+ *
+ * ```
+ * $http.jsonp('some/trusted/url', {jsonpCallbackParam: 'callback'})
+ * ```
+ *
+ * You can also specify a default callback parameter name in `$http.defaults.jsonpCallbackParam`.
+ * Initially this is set to `'callback'`.
+ *
+ * <div class="alert alert-danger">
+ * You can no longer use the `JSON_CALLBACK` string as a placeholder for specifying where the callback
+ * parameter value should go.
+ * </div>
+ *
+ * If you would like to customise where and how the callbacks are stored then try overriding
+ * or decorating the {@link $jsonpCallbacks} service.
+ *
+ * @param {string|TrustedObject} url Absolute or relative URL of the resource that is being requested;
+ * or an object created by a call to `$sce.trustAsResourceUrl(url)`.
* @param {Object=} config Optional configuration object
* @returns {HttpPromise} Future object
*/
@@ -10774,16 +12382,33 @@ function $HttpProvider() {
cache,
cachedResp,
reqHeaders = config.headers,
- url = buildUrl(config.url, config.paramSerializer(config.params));
+ isJsonp = lowercase(config.method) === 'jsonp',
+ url = config.url;
+
+ if (isJsonp) {
+ // JSONP is a pretty sensitive operation where we're allowing a script to have full access to
+ // our DOM and JS space. So we require that the URL satisfies SCE.RESOURCE_URL.
+ url = $sce.getTrustedResourceUrl(url);
+ } else if (!isString(url)) {
+ // If it is not a string then the URL must be a $sce trusted object
+ url = $sce.valueOf(url);
+ }
+
+ url = buildUrl(url, config.paramSerializer(config.params));
+
+ if (isJsonp) {
+ // Check the url and add the JSONP callback placeholder
+ url = sanitizeJsonpCallbackParam(url, config.jsonpCallbackParam);
+ }
$http.pendingRequests.push(config);
promise.then(removePendingReq, removePendingReq);
-
if ((config.cache || defaults.cache) && config.cache !== false &&
(config.method === 'GET' || config.method === 'JSONP')) {
cache = isObject(config.cache) ? config.cache
- : isObject(defaults.cache) ? defaults.cache
+ : isObject(/** @type {?} */ (defaults).cache)
+ ? /** @type {?} */ (defaults).cache
: defaultCache;
}
@@ -10819,11 +12444,35 @@ function $HttpProvider() {
}
$httpBackend(config.method, url, reqData, done, reqHeaders, config.timeout,
- config.withCredentials, config.responseType);
+ config.withCredentials, config.responseType,
+ createApplyHandlers(config.eventHandlers),
+ createApplyHandlers(config.uploadEventHandlers));
}
return promise;
+ function createApplyHandlers(eventHandlers) {
+ if (eventHandlers) {
+ var applyHandlers = {};
+ forEach(eventHandlers, function(eventHandler, key) {
+ applyHandlers[key] = function(event) {
+ if (useApplyAsync) {
+ $rootScope.$applyAsync(callEventHandler);
+ } else if ($rootScope.$$phase) {
+ callEventHandler();
+ } else {
+ $rootScope.$apply(callEventHandler);
+ }
+
+ function callEventHandler() {
+ eventHandler(event);
+ }
+ };
+ });
+ return applyHandlers;
+ }
+ }
+
/**
* Callback registered to $httpBackend():
@@ -10883,16 +12532,35 @@ function $HttpProvider() {
function buildUrl(url, serializedParams) {
if (serializedParams.length > 0) {
- url += ((url.indexOf('?') == -1) ? '?' : '&') + serializedParams;
+ url += ((url.indexOf('?') === -1) ? '?' : '&') + serializedParams;
}
return url;
}
+
+ function sanitizeJsonpCallbackParam(url, key) {
+ if (/[&?][^=]+=JSON_CALLBACK/.test(url)) {
+ // Throw if the url already contains a reference to JSON_CALLBACK
+ throw $httpMinErr('badjsonp', 'Illegal use of JSON_CALLBACK in url, "{0}"', url);
+ }
+
+ var callbackParamRegex = new RegExp('[&?]' + key + '=');
+ if (callbackParamRegex.test(url)) {
+ // Throw if the callback param was already provided
+ throw $httpMinErr('badjsonp', 'Illegal use of callback param, "{0}", in url, "{1}"', key, url);
+ }
+
+ // Add in the JSON_CALLBACK callback param value
+ url += ((url.indexOf('?') === -1) ? '?' : '&') + key + '=JSON_CALLBACK';
+
+ return url;
+ }
}];
}
/**
* @ngdoc service
* @name $xhrFactory
+ * @this
*
* @description
* Factory function used to create XMLHttpRequest objects.
@@ -10922,9 +12590,10 @@ function $xhrFactoryProvider() {
/**
* @ngdoc service
* @name $httpBackend
- * @requires $window
+ * @requires $jsonpCallbacks
* @requires $document
* @requires $xhrFactory
+ * @this
*
* @description
* HTTP backend used by the {@link ng.$http service} that delegates to
@@ -10937,28 +12606,23 @@ function $xhrFactoryProvider() {
* $httpBackend} which can be trained with responses.
*/
function $HttpBackendProvider() {
- this.$get = ['$browser', '$window', '$document', '$xhrFactory', function($browser, $window, $document, $xhrFactory) {
- return createHttpBackend($browser, $xhrFactory, $browser.defer, $window.angular.callbacks, $document[0]);
+ this.$get = ['$browser', '$jsonpCallbacks', '$document', '$xhrFactory', function($browser, $jsonpCallbacks, $document, $xhrFactory) {
+ return createHttpBackend($browser, $xhrFactory, $browser.defer, $jsonpCallbacks, $document[0]);
}];
}
function createHttpBackend($browser, createXhr, $browserDefer, callbacks, rawDocument) {
// TODO(vojta): fix the signature
- return function(method, url, post, callback, headers, timeout, withCredentials, responseType) {
- $browser.$$incOutstandingRequestCount();
+ return function(method, url, post, callback, headers, timeout, withCredentials, responseType, eventHandlers, uploadEventHandlers) {
url = url || $browser.url();
- if (lowercase(method) == 'jsonp') {
- var callbackId = '_' + (callbacks.counter++).toString(36);
- callbacks[callbackId] = function(data) {
- callbacks[callbackId].data = data;
- callbacks[callbackId].called = true;
- };
-
- var jsonpDone = jsonpReq(url.replace('JSON_CALLBACK', 'angular.callbacks.' + callbackId),
- callbackId, function(status, text) {
- completeRequest(callback, status, callbacks[callbackId].data, "", text);
- callbacks[callbackId] = noop;
+ if (lowercase(method) === 'jsonp') {
+ var callbackPath = callbacks.createCallback(url);
+ var jsonpDone = jsonpReq(url, callbackPath, function(status, text) {
+ // jsonpReq only ever sets status to 200 (OK), 404 (ERROR) or -1 (WAITING)
+ var response = (status === 200) && callbacks.getResponse(callbackPath);
+ completeRequest(callback, status, response, '', text);
+ callbacks.removeCallback(callbackPath);
});
} else {
@@ -10985,7 +12649,7 @@ function createHttpBackend($browser, createXhr, $browserDefer, callbacks, rawDoc
// Occurs when accessing file resources or on Android 4.1 stock browser
// while retrieving files from application cache.
if (status === 0) {
- status = response ? 200 : urlResolve(url).protocol == 'file' ? 404 : 0;
+ status = response ? 200 : urlResolve(url).protocol === 'file' ? 404 : 0;
}
completeRequest(callback,
@@ -11003,6 +12667,15 @@ function createHttpBackend($browser, createXhr, $browserDefer, callbacks, rawDoc
xhr.onerror = requestError;
xhr.onabort = requestError;
+ xhr.ontimeout = requestError;
+
+ forEach(eventHandlers, function(value, key) {
+ xhr.addEventListener(key, value);
+ });
+
+ forEach(uploadEventHandlers, function(value, key) {
+ xhr.upload.addEventListener(key, value);
+ });
if (withCredentials) {
xhr.withCredentials = true;
@@ -11036,8 +12709,12 @@ function createHttpBackend($browser, createXhr, $browserDefer, callbacks, rawDoc
function timeoutRequest() {
- jsonpDone && jsonpDone();
- xhr && xhr.abort();
+ if (jsonpDone) {
+ jsonpDone();
+ }
+ if (xhr) {
+ xhr.abort();
+ }
}
function completeRequest(callback, status, response, headersString, statusText) {
@@ -11048,33 +12725,33 @@ function createHttpBackend($browser, createXhr, $browserDefer, callbacks, rawDoc
jsonpDone = xhr = null;
callback(status, response, headersString, statusText);
- $browser.$$completeOutstandingRequest(noop);
}
};
- function jsonpReq(url, callbackId, done) {
+ function jsonpReq(url, callbackPath, done) {
+ url = url.replace('JSON_CALLBACK', callbackPath);
// we can't use jQuery/jqLite here because jQuery does crazy stuff with script elements, e.g.:
// - fetches local scripts via XHR and evals them
// - adds and immediately removes script elements from the document
var script = rawDocument.createElement('script'), callback = null;
- script.type = "text/javascript";
+ script.type = 'text/javascript';
script.src = url;
script.async = true;
callback = function(event) {
- removeEventListenerFn(script, "load", callback);
- removeEventListenerFn(script, "error", callback);
+ script.removeEventListener('load', callback);
+ script.removeEventListener('error', callback);
rawDocument.body.removeChild(script);
script = null;
var status = -1;
- var text = "unknown";
+ var text = 'unknown';
if (event) {
- if (event.type === "load" && !callbacks[callbackId].called) {
- event = { type: "error" };
+ if (event.type === 'load' && !callbacks.wasCalled(callbackPath)) {
+ event = { type: 'error' };
}
text = event.type;
- status = event.type === "error" ? 404 : 200;
+ status = event.type === 'error' ? 404 : 200;
}
if (done) {
@@ -11082,8 +12759,8 @@ function createHttpBackend($browser, createXhr, $browserDefer, callbacks, rawDoc
}
};
- addEventListenerFn(script, "load", callback);
- addEventListenerFn(script, "error", callback);
+ script.addEventListener('load', callback);
+ script.addEventListener('error', callback);
rawDocument.body.appendChild(script);
return callback;
}
@@ -11092,23 +12769,32 @@ function createHttpBackend($browser, createXhr, $browserDefer, callbacks, rawDoc
var $interpolateMinErr = angular.$interpolateMinErr = minErr('$interpolate');
$interpolateMinErr.throwNoconcat = function(text) {
throw $interpolateMinErr('noconcat',
- "Error while interpolating: {0}\nStrict Contextual Escaping disallows " +
- "interpolations that concatenate multiple expressions when a trusted value is " +
- "required. See http://docs.angularjs.org/api/ng.$sce", text);
+ 'Error while interpolating: {0}\nStrict Contextual Escaping disallows ' +
+ 'interpolations that concatenate multiple expressions when a trusted value is ' +
+ 'required. See http://docs.angularjs.org/api/ng.$sce', text);
};
$interpolateMinErr.interr = function(text, err) {
- return $interpolateMinErr('interr', "Can't interpolate: {0}\n{1}", text, err.toString());
+ return $interpolateMinErr('interr', 'Can\'t interpolate: {0}\n{1}', text, err.toString());
};
/**
* @ngdoc provider
* @name $interpolateProvider
+ * @this
*
* @description
*
* Used for configuring the interpolation markup. Defaults to `{{` and `}}`.
*
+ * <div class="alert alert-danger">
+ * This feature is sometimes used to mix different markup languages, e.g. to wrap an Angular
+ * template within a Python Jinja template (or any other template language). Mixing templating
+ * languages is **very dangerous**. The embedding template language will not safely escape Angular
+ * expressions, so any user-controlled values in the template will cause Cross Site Scripting (XSS)
+ * security bugs!
+ * </div>
+ *
* @example
<example name="custom-interpolation-markup" module="customInterpolationApp">
<file name="index.html">
@@ -11192,21 +12878,13 @@ function $InterpolateProvider() {
replace(escapedEndRegexp, endSymbol);
}
- function stringify(value) {
- if (value == null) { // null || undefined
- return '';
- }
- switch (typeof value) {
- case 'string':
- break;
- case 'number':
- value = '' + value;
- break;
- default:
- value = toJson(value);
- }
-
- return value;
+ // TODO: this is the same as the constantWatchDelegate in parse.js
+ function constantWatchDelegate(scope, listener, objectEquality, constantInterp) {
+ var unwatch = scope.$watch(function constantInterpolateWatch(scope) {
+ unwatch();
+ return constantInterp(scope);
+ }, listener, objectEquality);
+ return unwatch;
}
/**
@@ -11252,7 +12930,7 @@ function $InterpolateProvider() {
*
* `allOrNothing` is useful for interpolating URLs. `ngSrc` and `ngSrcset` use this behavior.
*
- * ####Escaped Interpolation
+ * #### Escaped Interpolation
* $interpolate provides a mechanism for escaping interpolation markers. Start and end markers
* can be escaped by preceding each of their characters with a REVERSE SOLIDUS U+005C (backslash).
* It will be rendered as a regular start/end marker, and will not be interpreted as an expression
@@ -11273,7 +12951,7 @@ function $InterpolateProvider() {
* this is typically useful only when user-data is used in rendering a template from the server, or
* when otherwise untrusted data is used by a directive.
*
- * <example>
+ * <example name="interpolation">
* <file name="index.html">
* <div ng-init="username='A user'">
* <p ng-init="apptitle='Escaping demo'">{{apptitle}}: \{\{ username = "defaced value"; \}\}
@@ -11288,6 +12966,30 @@ function $InterpolateProvider() {
* </file>
* </example>
*
+ * @knownIssue
+ * It is currently not possible for an interpolated expression to contain the interpolation end
+ * symbol. For example, `{{ '}}' }}` will be incorrectly interpreted as `{{ ' }}` + `' }}`, i.e.
+ * an interpolated expression consisting of a single-quote (`'`) and the `' }}` string.
+ *
+ * @knownIssue
+ * All directives and components must use the standard `{{` `}}` interpolation symbols
+ * in their templates. If you change the application interpolation symbols the {@link $compile}
+ * service will attempt to denormalize the standard symbols to the custom symbols.
+ * The denormalization process is not clever enough to know not to replace instances of the standard
+ * symbols where they would not normally be treated as interpolation symbols. For example in the following
+ * code snippet the closing braces of the literal object will get incorrectly denormalized:
+ *
+ * ```
+ * <div data-context='{"context":{"id":3,"type":"page"}}">
+ * ```
+ *
+ * The workaround is to ensure that such instances are separated by whitespace:
+ * ```
+ * <div data-context='{"context":{"id":3,"type":"page"} }">
+ * ```
+ *
+ * See https://github.com/angular/angular.js/pull/14610#issuecomment-219401099 for more information.
+ *
* @param {string} text The text with markup to interpolate.
* @param {boolean=} mustHaveExpression if set to true then the interpolation string must have
* embedded expression in order to return an interpolation function. Strings with no
@@ -11304,6 +13006,19 @@ function $InterpolateProvider() {
* - `context`: evaluation context for all expressions embedded in the interpolated text
*/
function $interpolate(text, mustHaveExpression, trustedContext, allOrNothing) {
+ // Provide a quick exit and simplified result function for text with no interpolation
+ if (!text.length || text.indexOf(startSymbol) === -1) {
+ var constantInterp;
+ if (!mustHaveExpression) {
+ var unescapedText = unescapeText(text);
+ constantInterp = valueFn(unescapedText);
+ constantInterp.exp = text;
+ constantInterp.expressions = [];
+ constantInterp.$$watchDelegate = constantWatchDelegate;
+ }
+ return constantInterp;
+ }
+
allOrNothing = !!allOrNothing;
var startIndex,
endIndex,
@@ -11316,8 +13031,8 @@ function $InterpolateProvider() {
expressionPositions = [];
while (index < textLength) {
- if (((startIndex = text.indexOf(startSymbol, index)) != -1) &&
- ((endIndex = text.indexOf(endSymbol, startIndex + startSymbolLength)) != -1)) {
+ if (((startIndex = text.indexOf(startSymbol, index)) !== -1) &&
+ ((endIndex = text.indexOf(endSymbol, startIndex + startSymbolLength)) !== -1)) {
if (index !== startIndex) {
concat.push(unescapeText(text.substring(index, startIndex)));
}
@@ -11382,7 +13097,7 @@ function $InterpolateProvider() {
expressions: expressions,
$$watchDelegate: function(scope, listener) {
var lastValue;
- return scope.$watchGroup(parseFns, function interpolateFnWatcher(values, oldValues) {
+ return scope.$watchGroup(parseFns, /** @this */ function interpolateFnWatcher(values, oldValues) {
var currValue = compute(values);
if (isFunction(listener)) {
listener.call(this, currValue, values !== oldValues ? lastValue : currValue, scope);
@@ -11439,9 +13154,10 @@ function $InterpolateProvider() {
}];
}
+/** @this */
function $IntervalProvider() {
- this.$get = ['$rootScope', '$window', '$q', '$$q',
- function($rootScope, $window, $q, $$q) {
+ this.$get = ['$rootScope', '$window', '$q', '$$q', '$browser',
+ function($rootScope, $window, $q, $$q, $browser) {
var intervals = {};
@@ -11471,17 +13187,18 @@ function $IntervalProvider() {
* appropriate moment. See the example below for more details on how and when to do this.
* </div>
*
- * @param {function()} fn A function that should be called repeatedly.
+ * @param {function()} fn A function that should be called repeatedly. If no additional arguments
+ * are passed (see below), the function is called with the current iteration count.
* @param {number} delay Number of milliseconds between each function call.
* @param {number=} [count=0] Number of times to repeat. If not set, or 0, will repeat
* indefinitely.
* @param {boolean=} [invokeApply=true] If set to `false` skips model dirty checking, otherwise
* will invoke `fn` within the {@link ng.$rootScope.Scope#$apply $apply} block.
* @param {...*=} Pass additional parameters to the executed function.
- * @returns {promise} A promise which will be notified on each iteration.
+ * @returns {promise} A promise which will be notified on each iteration. It will resolve once all iterations of the interval complete.
*
* @example
- * <example module="intervalExample">
+ * <example module="intervalExample" name="interval-service">
* <file name="index.html">
* <script>
* angular.module('intervalExample', [])
@@ -11582,11 +13299,12 @@ function $IntervalProvider() {
count = isDefined(count) ? count : 0;
- promise.then(null, null, (!hasParams) ? fn : function() {
- fn.apply(null, args);
- });
-
promise.$$intervalId = setInterval(function tick() {
+ if (skipApply) {
+ $browser.defer(callback);
+ } else {
+ $rootScope.$evalAsync(callback);
+ }
deferred.notify(iteration++);
if (count > 0 && iteration >= count) {
@@ -11602,6 +13320,14 @@ function $IntervalProvider() {
intervals[promise.$$intervalId] = deferred;
return promise;
+
+ function callback() {
+ if (!hasParams) {
+ fn(iteration);
+ } else {
+ fn.apply(null, args);
+ }
+ }
}
@@ -11617,6 +13343,8 @@ function $IntervalProvider() {
*/
interval.cancel = function(promise) {
if (promise && promise.$$intervalId in intervals) {
+ // Interval cancels should not report as unhandled promise.
+ markQExceptionHandled(intervals[promise.$$intervalId].promise);
intervals[promise.$$intervalId].reject('canceled');
$window.clearInterval(promise.$$intervalId);
delete intervals[promise.$$intervalId];
@@ -11631,6 +13359,87 @@ function $IntervalProvider() {
/**
* @ngdoc service
+ * @name $jsonpCallbacks
+ * @requires $window
+ * @description
+ * This service handles the lifecycle of callbacks to handle JSONP requests.
+ * Override this service if you wish to customise where the callbacks are stored and
+ * how they vary compared to the requested url.
+ */
+var $jsonpCallbacksProvider = /** @this */ function() {
+ this.$get = function() {
+ var callbacks = angular.callbacks;
+ var callbackMap = {};
+
+ function createCallback(callbackId) {
+ var callback = function(data) {
+ callback.data = data;
+ callback.called = true;
+ };
+ callback.id = callbackId;
+ return callback;
+ }
+
+ return {
+ /**
+ * @ngdoc method
+ * @name $jsonpCallbacks#createCallback
+ * @param {string} url the url of the JSONP request
+ * @returns {string} the callback path to send to the server as part of the JSONP request
+ * @description
+ * {@link $httpBackend} calls this method to create a callback and get hold of the path to the callback
+ * to pass to the server, which will be used to call the callback with its payload in the JSONP response.
+ */
+ createCallback: function(url) {
+ var callbackId = '_' + (callbacks.$$counter++).toString(36);
+ var callbackPath = 'angular.callbacks.' + callbackId;
+ var callback = createCallback(callbackId);
+ callbackMap[callbackPath] = callbacks[callbackId] = callback;
+ return callbackPath;
+ },
+ /**
+ * @ngdoc method
+ * @name $jsonpCallbacks#wasCalled
+ * @param {string} callbackPath the path to the callback that was sent in the JSONP request
+ * @returns {boolean} whether the callback has been called, as a result of the JSONP response
+ * @description
+ * {@link $httpBackend} calls this method to find out whether the JSONP response actually called the
+ * callback that was passed in the request.
+ */
+ wasCalled: function(callbackPath) {
+ return callbackMap[callbackPath].called;
+ },
+ /**
+ * @ngdoc method
+ * @name $jsonpCallbacks#getResponse
+ * @param {string} callbackPath the path to the callback that was sent in the JSONP request
+ * @returns {*} the data received from the response via the registered callback
+ * @description
+ * {@link $httpBackend} calls this method to get hold of the data that was provided to the callback
+ * in the JSONP response.
+ */
+ getResponse: function(callbackPath) {
+ return callbackMap[callbackPath].data;
+ },
+ /**
+ * @ngdoc method
+ * @name $jsonpCallbacks#removeCallback
+ * @param {string} callbackPath the path to the callback that was sent in the JSONP request
+ * @description
+ * {@link $httpBackend} calls this method to remove the callback after the JSONP request has
+ * completed or timed-out.
+ */
+ removeCallback: function(callbackPath) {
+ var callback = callbackMap[callbackPath];
+ delete callbacks[callback.id];
+ delete callbackMap[callbackPath];
+ }
+ };
+ };
+};
+
+/**
+ * @ngdoc service
* @name $locale
*
* @description
@@ -11640,7 +13449,7 @@ function $IntervalProvider() {
* * `id` – `{string}` – locale id formatted as `languageId-countryId` (e.g. `en-us`)
*/
-var PATH_MATCH = /^([^\?#]*)(\?([^#]*))?(#(.*))?$/,
+var PATH_MATCH = /^([^?#]*)(\?([^#]*))?(#(.*))?$/,
DEFAULT_PORTS = {'http': 80, 'https': 443, 'ftp': 21};
var $locationMinErr = minErr('$location');
@@ -11670,42 +13479,50 @@ function parseAbsoluteUrl(absoluteUrl, locationObj) {
locationObj.$$port = toInt(parsedUrl.port) || DEFAULT_PORTS[parsedUrl.protocol] || null;
}
+var DOUBLE_SLASH_REGEX = /^\s*[\\/]{2,}/;
+function parseAppUrl(url, locationObj) {
-function parseAppUrl(relativeUrl, locationObj) {
- var prefixed = (relativeUrl.charAt(0) !== '/');
+ if (DOUBLE_SLASH_REGEX.test(url)) {
+ throw $locationMinErr('badpath', 'Invalid url "{0}".', url);
+ }
+
+ var prefixed = (url.charAt(0) !== '/');
if (prefixed) {
- relativeUrl = '/' + relativeUrl;
+ url = '/' + url;
}
- var match = urlResolve(relativeUrl);
+ var match = urlResolve(url);
locationObj.$$path = decodeURIComponent(prefixed && match.pathname.charAt(0) === '/' ?
match.pathname.substring(1) : match.pathname);
locationObj.$$search = parseKeyValue(match.search);
locationObj.$$hash = decodeURIComponent(match.hash);
// make sure path starts with '/';
- if (locationObj.$$path && locationObj.$$path.charAt(0) != '/') {
+ if (locationObj.$$path && locationObj.$$path.charAt(0) !== '/') {
locationObj.$$path = '/' + locationObj.$$path;
}
}
+function startsWith(str, search) {
+ return str.slice(0, search.length) === search;
+}
/**
*
- * @param {string} begin
- * @param {string} whole
- * @returns {string} returns text from whole after begin or undefined if it does not begin with
- * expected string.
+ * @param {string} base
+ * @param {string} url
+ * @returns {string} returns text from `url` after `base` or `undefined` if it does not begin with
+ * the expected string.
*/
-function beginsWith(begin, whole) {
- if (whole.indexOf(begin) === 0) {
- return whole.substr(begin.length);
+function stripBaseUrl(base, url) {
+ if (startsWith(url, base)) {
+ return url.substr(base.length);
}
}
function stripHash(url) {
var index = url.indexOf('#');
- return index == -1 ? url : url.substr(0, index);
+ return index === -1 ? url : url.substr(0, index);
}
function trimEmptyHash(url) {
@@ -11724,13 +13541,13 @@ function serverBase(url) {
/**
- * LocationHtml5Url represents an url
+ * LocationHtml5Url represents a URL
* This object is exposed as $location service when HTML5 mode is enabled and supported
*
* @constructor
* @param {string} appBase application base URL
* @param {string} appBaseNoFile application base URL stripped of any filename
- * @param {string} basePrefix url path prefix
+ * @param {string} basePrefix URL path prefix
*/
function LocationHtml5Url(appBase, appBaseNoFile, basePrefix) {
this.$$html5 = true;
@@ -11739,12 +13556,12 @@ function LocationHtml5Url(appBase, appBaseNoFile, basePrefix) {
/**
- * Parse given html5 (regular) url string into properties
- * @param {string} url HTML5 url
+ * Parse given HTML5 (regular) URL string into properties
+ * @param {string} url HTML5 URL
* @private
*/
this.$$parse = function(url) {
- var pathUrl = beginsWith(appBaseNoFile, url);
+ var pathUrl = stripBaseUrl(appBaseNoFile, url);
if (!isString(pathUrl)) {
throw $locationMinErr('ipthprfx', 'Invalid url "{0}", missing path prefix "{1}".', url,
appBaseNoFile);
@@ -11769,6 +13586,8 @@ function LocationHtml5Url(appBase, appBaseNoFile, basePrefix) {
this.$$url = encodePath(this.$$path) + (search ? '?' + search : '') + hash;
this.$$absUrl = appBaseNoFile + this.$$url.substr(1); // first char is always '/'
+
+ this.$$urlUpdatedByLocation = true;
};
this.$$parseLinkUrl = function(url, relHref) {
@@ -11781,16 +13600,17 @@ function LocationHtml5Url(appBase, appBaseNoFile, basePrefix) {
var appUrl, prevAppUrl;
var rewrittenUrl;
- if (isDefined(appUrl = beginsWith(appBase, url))) {
+
+ if (isDefined(appUrl = stripBaseUrl(appBase, url))) {
prevAppUrl = appUrl;
- if (isDefined(appUrl = beginsWith(basePrefix, appUrl))) {
- rewrittenUrl = appBaseNoFile + (beginsWith('/', appUrl) || appUrl);
+ if (basePrefix && isDefined(appUrl = stripBaseUrl(basePrefix, appUrl))) {
+ rewrittenUrl = appBaseNoFile + (stripBaseUrl('/', appUrl) || appUrl);
} else {
rewrittenUrl = appBase + prevAppUrl;
}
- } else if (isDefined(appUrl = beginsWith(appBaseNoFile, url))) {
+ } else if (isDefined(appUrl = stripBaseUrl(appBaseNoFile, url))) {
rewrittenUrl = appBaseNoFile + appUrl;
- } else if (appBaseNoFile == url + '/') {
+ } else if (appBaseNoFile === url + '/') {
rewrittenUrl = appBaseNoFile;
}
if (rewrittenUrl) {
@@ -11802,7 +13622,7 @@ function LocationHtml5Url(appBase, appBaseNoFile, basePrefix) {
/**
- * LocationHashbangUrl represents url
+ * LocationHashbangUrl represents URL
* This object is exposed as $location service when developer doesn't opt into html5 mode.
* It also serves as the base class for html5 mode fallback on legacy browsers.
*
@@ -11817,19 +13637,19 @@ function LocationHashbangUrl(appBase, appBaseNoFile, hashPrefix) {
/**
- * Parse given hashbang url into properties
- * @param {string} url Hashbang url
+ * Parse given hashbang URL into properties
+ * @param {string} url Hashbang URL
* @private
*/
this.$$parse = function(url) {
- var withoutBaseUrl = beginsWith(appBase, url) || beginsWith(appBaseNoFile, url);
+ var withoutBaseUrl = stripBaseUrl(appBase, url) || stripBaseUrl(appBaseNoFile, url);
var withoutHashUrl;
if (!isUndefined(withoutBaseUrl) && withoutBaseUrl.charAt(0) === '#') {
- // The rest of the url starts with a hash so we have
+ // The rest of the URL starts with a hash so we have
// got either a hashbang path or a plain hash fragment
- withoutHashUrl = beginsWith(hashPrefix, withoutBaseUrl);
+ withoutHashUrl = stripBaseUrl(hashPrefix, withoutBaseUrl);
if (isUndefined(withoutHashUrl)) {
// There was no hashbang prefix so we just have a hash fragment
withoutHashUrl = withoutBaseUrl;
@@ -11845,7 +13665,7 @@ function LocationHashbangUrl(appBase, appBaseNoFile, hashPrefix) {
withoutHashUrl = '';
if (isUndefined(withoutBaseUrl)) {
appBase = url;
- this.replace();
+ /** @type {?} */ (this).replace();
}
}
}
@@ -11877,7 +13697,7 @@ function LocationHashbangUrl(appBase, appBaseNoFile, hashPrefix) {
var firstPathSegmentMatch;
//Get the relative path from the input URL.
- if (url.indexOf(base) === 0) {
+ if (startsWith(url, base)) {
url = url.replace(base, '');
}
@@ -11892,7 +13712,7 @@ function LocationHashbangUrl(appBase, appBaseNoFile, hashPrefix) {
};
/**
- * Compose hashbang url and update `absUrl` property
+ * Compose hashbang URL and update `absUrl` property
* @private
*/
this.$$compose = function() {
@@ -11901,10 +13721,12 @@ function LocationHashbangUrl(appBase, appBaseNoFile, hashPrefix) {
this.$$url = encodePath(this.$$path) + (search ? '?' + search : '') + hash;
this.$$absUrl = appBase + (this.$$url ? hashPrefix + this.$$url : '');
+
+ this.$$urlUpdatedByLocation = true;
};
this.$$parseLinkUrl = function(url, relHref) {
- if (stripHash(appBase) == stripHash(url)) {
+ if (stripHash(appBase) === stripHash(url)) {
this.$$parse(url);
return true;
}
@@ -11914,7 +13736,7 @@ function LocationHashbangUrl(appBase, appBaseNoFile, hashPrefix) {
/**
- * LocationHashbangUrl represents url
+ * LocationHashbangUrl represents URL
* This object is exposed as $location service when html5 history api is enabled but the browser
* does not support it.
*
@@ -11938,9 +13760,9 @@ function LocationHashbangInHtml5Url(appBase, appBaseNoFile, hashPrefix) {
var rewrittenUrl;
var appUrl;
- if (appBase == stripHash(url)) {
+ if (appBase === stripHash(url)) {
rewrittenUrl = url;
- } else if ((appUrl = beginsWith(appBaseNoFile, url))) {
+ } else if ((appUrl = stripBaseUrl(appBaseNoFile, url))) {
rewrittenUrl = appBase + hashPrefix + appUrl;
} else if (appBaseNoFile === url + '/') {
rewrittenUrl = appBaseNoFile;
@@ -11958,6 +13780,8 @@ function LocationHashbangInHtml5Url(appBase, appBaseNoFile, hashPrefix) {
this.$$url = encodePath(this.$$path) + (search ? '?' + search : '') + hash;
// include hashPrefix in $$absUrl when $$url is empty so IE9 does not reload page because of removal of '#'
this.$$absUrl = appBase + hashPrefix + this.$$url;
+
+ this.$$urlUpdatedByLocation = true;
};
}
@@ -11966,6 +13790,12 @@ function LocationHashbangInHtml5Url(appBase, appBaseNoFile, hashPrefix) {
var locationPrototype = {
/**
+ * Ensure absolute URL is initialized.
+ * @private
+ */
+ $$absUrl:'',
+
+ /**
* Are we in html5 mode?
* @private
*/
@@ -11984,17 +13814,17 @@ var locationPrototype = {
* @description
* This method is getter only.
*
- * Return full url representation with all segments encoded according to rules specified in
+ * Return full URL representation with all segments encoded according to rules specified in
* [RFC 3986](http://www.ietf.org/rfc/rfc3986.txt).
*
*
* ```js
- * // given url http://example.com/#/some/path?foo=bar&baz=xoxo
+ * // given URL http://example.com/#/some/path?foo=bar&baz=xoxo
* var absUrl = $location.absUrl();
* // => "http://example.com/#/some/path?foo=bar&baz=xoxo"
* ```
*
- * @return {string} full url
+ * @return {string} full URL
*/
absUrl: locationGetter('$$absUrl'),
@@ -12005,18 +13835,18 @@ var locationPrototype = {
* @description
* This method is getter / setter.
*
- * Return url (e.g. `/path?a=b#hash`) when called without any parameter.
+ * Return URL (e.g. `/path?a=b#hash`) when called without any parameter.
*
* Change path, search and hash, when called with parameter and return `$location`.
*
*
* ```js
- * // given url http://example.com/#/some/path?foo=bar&baz=xoxo
+ * // given URL http://example.com/#/some/path?foo=bar&baz=xoxo
* var url = $location.url();
* // => "/some/path?foo=bar&baz=xoxo"
* ```
*
- * @param {string=} url New url without base prefix (e.g. `/path?a=b#hash`)
+ * @param {string=} url New URL without base prefix (e.g. `/path?a=b#hash`)
* @return {string} url
*/
url: function(url) {
@@ -12039,16 +13869,16 @@ var locationPrototype = {
* @description
* This method is getter only.
*
- * Return protocol of current url.
+ * Return protocol of current URL.
*
*
* ```js
- * // given url http://example.com/#/some/path?foo=bar&baz=xoxo
+ * // given URL http://example.com/#/some/path?foo=bar&baz=xoxo
* var protocol = $location.protocol();
* // => "http"
* ```
*
- * @return {string} protocol of current url
+ * @return {string} protocol of current URL
*/
protocol: locationGetter('$$protocol'),
@@ -12059,24 +13889,24 @@ var locationPrototype = {
* @description
* This method is getter only.
*
- * Return host of current url.
+ * Return host of current URL.
*
* Note: compared to the non-angular version `location.host` which returns `hostname:port`, this returns the `hostname` portion only.
*
*
* ```js
- * // given url http://example.com/#/some/path?foo=bar&baz=xoxo
+ * // given URL http://example.com/#/some/path?foo=bar&baz=xoxo
* var host = $location.host();
* // => "example.com"
*
- * // given url http://user:password@example.com:8080/#/some/path?foo=bar&baz=xoxo
+ * // given URL http://user:password@example.com:8080/#/some/path?foo=bar&baz=xoxo
* host = $location.host();
* // => "example.com"
* host = location.host;
* // => "example.com:8080"
* ```
*
- * @return {string} host of current url.
+ * @return {string} host of current URL.
*/
host: locationGetter('$$host'),
@@ -12087,11 +13917,11 @@ var locationPrototype = {
* @description
* This method is getter only.
*
- * Return port of current url.
+ * Return port of current URL.
*
*
* ```js
- * // given url http://example.com/#/some/path?foo=bar&baz=xoxo
+ * // given URL http://example.com/#/some/path?foo=bar&baz=xoxo
* var port = $location.port();
* // => 80
* ```
@@ -12107,7 +13937,7 @@ var locationPrototype = {
* @description
* This method is getter / setter.
*
- * Return path of current url when called without any parameter.
+ * Return path of current URL when called without any parameter.
*
* Change path when called with parameter and return `$location`.
*
@@ -12116,17 +13946,17 @@ var locationPrototype = {
*
*
* ```js
- * // given url http://example.com/#/some/path?foo=bar&baz=xoxo
+ * // given URL http://example.com/#/some/path?foo=bar&baz=xoxo
* var path = $location.path();
* // => "/some/path"
* ```
*
* @param {(string|number)=} path New path
- * @return {string} path
+ * @return {(string|object)} path if called with no parameters, or `$location` if called with a parameter
*/
path: locationGetterSetter('$$path', function(path) {
path = path !== null ? path.toString() : '';
- return path.charAt(0) == '/' ? path : '/' + path;
+ return path.charAt(0) === '/' ? path : '/' + path;
}),
/**
@@ -12136,13 +13966,13 @@ var locationPrototype = {
* @description
* This method is getter / setter.
*
- * Return search part (as object) of current url when called without any parameter.
+ * Return search part (as object) of current URL when called without any parameter.
*
* Change search part when called with parameter and return `$location`.
*
*
* ```js
- * // given url http://example.com/#/some/path?foo=bar&baz=xoxo
+ * // given URL http://example.com/#/some/path?foo=bar&baz=xoxo
* var searchObject = $location.search();
* // => {foo: 'bar', baz: 'xoxo'}
*
@@ -12158,7 +13988,7 @@ var locationPrototype = {
* of `$location` to the specified value.
*
* If the argument is a hash object containing an array of values, these values will be encoded
- * as duplicate search parameters in the url.
+ * as duplicate search parameters in the URL.
*
* @param {(string|Number|Array<string>|boolean)=} paramValue If `search` is a string or number, then `paramValue`
* will override only a single search property.
@@ -12220,7 +14050,7 @@ var locationPrototype = {
*
*
* ```js
- * // given url http://example.com/#/some/path?foo=bar&baz=xoxo#hashValue
+ * // given URL http://example.com/#/some/path?foo=bar&baz=xoxo#hashValue
* var hash = $location.hash();
* // => "hashValue"
* ```
@@ -12281,6 +14111,7 @@ forEach([LocationHashbangInHtml5Url, LocationHashbangUrl, LocationHtml5Url], fun
// but we're changing the $$state reference to $browser.state() during the $digest
// so the modification window is narrow.
this.$$state = isUndefined(state) ? null : state;
+ this.$$urlUpdatedByLocation = true;
return this;
};
@@ -12288,14 +14119,14 @@ forEach([LocationHashbangInHtml5Url, LocationHashbangUrl, LocationHtml5Url], fun
function locationGetter(property) {
- return function() {
+ return /** @this */ function() {
return this[property];
};
}
function locationGetterSetter(property, preprocess) {
- return function(value) {
+ return /** @this */ function(value) {
if (isUndefined(value)) {
return this[property];
}
@@ -12337,11 +14168,13 @@ function locationGetterSetter(property, preprocess) {
/**
* @ngdoc provider
* @name $locationProvider
+ * @this
+ *
* @description
* Use the `$locationProvider` to configure how the application deep linking paths are stored.
*/
function $LocationProvider() {
- var hashPrefix = '',
+ var hashPrefix = '!',
html5Mode = {
enabled: false,
requireBase: true,
@@ -12352,6 +14185,7 @@ function $LocationProvider() {
* @ngdoc method
* @name $locationProvider#hashPrefix
* @description
+ * The default value for the prefix is `'!'`.
* @param {string=} prefix Prefix for hash part (containing path and search)
* @returns {*} current value if used as getter or itself (chaining) if used as setter
*/
@@ -12378,8 +14212,12 @@ function $LocationProvider() {
* whether or not a <base> tag is required to be present. If `enabled` and `requireBase` are
* true, and a base tag is not present, an error will be thrown when `$location` is injected.
* See the {@link guide/$location $location guide for more information}
- * - **rewriteLinks** - `{boolean}` - (default: `true`) When html5Mode is enabled,
- * enables/disables url rewriting for relative links.
+ * - **rewriteLinks** - `{boolean|string}` - (default: `true`) When html5Mode is enabled,
+ * enables/disables URL rewriting for relative links. If set to a string, URL rewriting will
+ * only happen on links with an attribute that matches the given string. For example, if set
+ * to `'internal-link'`, then the URL will only be rewritten for `<a internal-link>` links.
+ * Note that [attribute name normalization](guide/directive#normalization) does not apply
+ * here, so `'internalLink'` will **not** match `'internal-link'`.
*
* @returns {Object} html5Mode object if used as getter or itself (chaining) if used as setter
*/
@@ -12397,7 +14235,7 @@ function $LocationProvider() {
html5Mode.requireBase = mode.requireBase;
}
- if (isBoolean(mode.rewriteLinks)) {
+ if (isBoolean(mode.rewriteLinks) || isString(mode.rewriteLinks)) {
html5Mode.rewriteLinks = mode.rewriteLinks;
}
@@ -12457,7 +14295,7 @@ function $LocationProvider() {
if (html5Mode.enabled) {
if (!baseHref && html5Mode.requireBase) {
throw $locationMinErr('nobase',
- "$location in HTML5 mode requires a <base> tag to be present!");
+ '$location in HTML5 mode requires a <base> tag to be present!');
}
appBase = serverBase(initialUrl) + (baseHref || '/');
LocationMode = $sniffer.history ? LocationHtml5Url : LocationHashbangInHtml5Url;
@@ -12494,10 +14332,11 @@ function $LocationProvider() {
}
$rootElement.on('click', function(event) {
+ var rewriteLinks = html5Mode.rewriteLinks;
// TODO(vojta): rewrite link when opening in new tab/window (in legacy browser)
// currently we open nice url link and redirect then
- if (!html5Mode.rewriteLinks || event.ctrlKey || event.metaKey || event.shiftKey || event.which == 2 || event.button == 2) return;
+ if (!rewriteLinks || event.ctrlKey || event.metaKey || event.shiftKey || event.which === 2 || event.button === 2) return;
var elm = jqLite(event.target);
@@ -12507,6 +14346,8 @@ function $LocationProvider() {
if (elm[0] === $rootElement[0] || !(elm = elm.parent())[0]) return;
}
+ if (isString(rewriteLinks) && isUndefined(elm.attr(rewriteLinks))) return;
+
var absHref = elm.prop('href');
// get the actual href attribute - see
// http://msdn.microsoft.com/en-us/library/ie/dd347148(v=vs.85).aspx
@@ -12528,7 +14369,7 @@ function $LocationProvider() {
// getting double entries in the location history.
event.preventDefault();
// update location manually
- if ($location.absUrl() != $browser.url()) {
+ if ($location.absUrl() !== $browser.url()) {
$rootScope.$apply();
// hack to work around FF6 bug 684208 when scenario runner clicks on links
$window.angular['ff-684208-preventDefault'] = true;
@@ -12539,7 +14380,7 @@ function $LocationProvider() {
// rewrite hashbang url <> html5 url
- if (trimEmptyHash($location.absUrl()) != trimEmptyHash(initialUrl)) {
+ if (trimEmptyHash($location.absUrl()) !== trimEmptyHash(initialUrl)) {
$browser.url($location.absUrl(), true);
}
@@ -12548,7 +14389,7 @@ function $LocationProvider() {
// update $location when $browser url changes
$browser.onUrlChange(function(newUrl, newState) {
- if (isUndefined(beginsWith(appBaseNoFile, newUrl))) {
+ if (!startsWith(newUrl, appBaseNoFile)) {
// If we are navigating outside of the app then force a reload
$window.location.href = newUrl;
return;
@@ -12583,36 +14424,40 @@ function $LocationProvider() {
// update browser
$rootScope.$watch(function $locationWatch() {
- var oldUrl = trimEmptyHash($browser.url());
- var newUrl = trimEmptyHash($location.absUrl());
- var oldState = $browser.state();
- var currentReplace = $location.$$replace;
- var urlOrStateChanged = oldUrl !== newUrl ||
- ($location.$$html5 && $sniffer.history && oldState !== $location.$$state);
+ if (initializing || $location.$$urlUpdatedByLocation) {
+ $location.$$urlUpdatedByLocation = false;
- if (initializing || urlOrStateChanged) {
- initializing = false;
+ var oldUrl = trimEmptyHash($browser.url());
+ var newUrl = trimEmptyHash($location.absUrl());
+ var oldState = $browser.state();
+ var currentReplace = $location.$$replace;
+ var urlOrStateChanged = oldUrl !== newUrl ||
+ ($location.$$html5 && $sniffer.history && oldState !== $location.$$state);
- $rootScope.$evalAsync(function() {
- var newUrl = $location.absUrl();
- var defaultPrevented = $rootScope.$broadcast('$locationChangeStart', newUrl, oldUrl,
- $location.$$state, oldState).defaultPrevented;
+ if (initializing || urlOrStateChanged) {
+ initializing = false;
- // if the location was changed by a `$locationChangeStart` handler then stop
- // processing this location change
- if ($location.absUrl() !== newUrl) return;
+ $rootScope.$evalAsync(function() {
+ var newUrl = $location.absUrl();
+ var defaultPrevented = $rootScope.$broadcast('$locationChangeStart', newUrl, oldUrl,
+ $location.$$state, oldState).defaultPrevented;
- if (defaultPrevented) {
- $location.$$parse(oldUrl);
- $location.$$state = oldState;
- } else {
- if (urlOrStateChanged) {
- setBrowserUrlWithFallback(newUrl, currentReplace,
- oldState === $location.$$state ? null : $location.$$state);
+ // if the location was changed by a `$locationChangeStart` handler then stop
+ // processing this location change
+ if ($location.absUrl() !== newUrl) return;
+
+ if (defaultPrevented) {
+ $location.$$parse(oldUrl);
+ $location.$$state = oldState;
+ } else {
+ if (urlOrStateChanged) {
+ setBrowserUrlWithFallback(newUrl, currentReplace,
+ oldState === $location.$$state ? null : $location.$$state);
+ }
+ afterLocationChange(oldUrl, oldState);
}
- afterLocationChange(oldUrl, oldState);
- }
- });
+ });
+ }
}
$location.$$replace = false;
@@ -12641,11 +14486,19 @@ function $LocationProvider() {
*
* The main purpose of this service is to simplify debugging and troubleshooting.
*
+ * To reveal the location of the calls to `$log` in the JavaScript console,
+ * you can "blackbox" the AngularJS source in your browser:
+ *
+ * [Mozilla description of blackboxing](https://developer.mozilla.org/en-US/docs/Tools/Debugger/How_to/Black_box_a_source).
+ * [Chrome description of blackboxing](https://developer.chrome.com/devtools/docs/blackboxing).
+ *
+ * Note: Not all browsers support blackboxing.
+ *
* The default is to log `debug` messages. You can use
* {@link ng.$logProvider ng.$logProvider#debugEnabled} to change this.
*
* @example
- <example module="logExample">
+ <example module="logExample" name="log-service">
<file name="script.js">
angular.module('logExample', [])
.controller('LogController', ['$scope', '$log', function($scope, $log) {
@@ -12671,6 +14524,8 @@ function $LocationProvider() {
/**
* @ngdoc provider
* @name $logProvider
+ * @this
+ *
* @description
* Use the `$logProvider` to configure how the application logs messages
*/
@@ -12688,13 +14543,22 @@ function $LogProvider() {
this.debugEnabled = function(flag) {
if (isDefined(flag)) {
debug = flag;
- return this;
+ return this;
} else {
return debug;
}
};
this.$get = ['$window', function($window) {
+ // Support: IE 9-11, Edge 12-14+
+ // IE/Edge display errors in such a way that it requires the user to click in 4 places
+ // to see the stack trace. There is no way to feature-detect it so there's a chance
+ // of the user agent sniffing to go wrong but since it's only about logging, this shouldn't
+ // break apps. Other browsers display errors in a sensible way and some of them map stack
+ // traces along source maps if available so it makes sense to let browsers display it
+ // as they want.
+ var formatStackTrace = msie || /\bEdge\//.test($window.navigator && $window.navigator.userAgent);
+
return {
/**
* @ngdoc method
@@ -12747,12 +14611,12 @@ function $LogProvider() {
fn.apply(self, arguments);
}
};
- }())
+ })()
};
function formatError(arg) {
- if (arg instanceof Error) {
- if (arg.stack) {
+ if (isError(arg)) {
+ if (arg.stack && formatStackTrace) {
arg = (arg.message && arg.stack.indexOf(arg.message) === -1)
? 'Error: ' + arg.message + '\n' + arg.stack
: arg.stack;
@@ -12765,29 +14629,17 @@ function $LogProvider() {
function consoleLog(type) {
var console = $window.console || {},
- logFn = console[type] || console.log || noop,
- hasApply = false;
-
- // Note: reading logFn.apply throws an error in IE11 in IE8 document mode.
- // The reason behind this is that console.log has type "object" in IE8...
- try {
- hasApply = !!logFn.apply;
- } catch (e) {}
-
- if (hasApply) {
- return function() {
- var args = [];
- forEach(arguments, function(arg) {
- args.push(formatError(arg));
- });
- return logFn.apply(console, args);
- };
- }
+ logFn = console[type] || console.log || noop;
- // we are IE which either doesn't have window.console => this is noop and we do nothing,
- // or we are IE where console.log doesn't have apply so we log at least first 2 args
- return function(arg1, arg2) {
- logFn(arg1, arg2 == null ? '' : arg2);
+ return function() {
+ var args = [];
+ forEach(arguments, function(arg) {
+ args.push(formatError(arg));
+ });
+ // Support: IE 9 only
+ // console methods don't inherit from Function.prototype in IE 9 so we can't
+ // call `logFn.apply(console, args)` directly.
+ return Function.prototype.apply.call(logFn, console, args);
};
}
}];
@@ -12806,118 +14658,45 @@ function $LogProvider() {
var $parseMinErr = minErr('$parse');
+var objectValueOf = {}.constructor.prototype.valueOf;
+
// Sandboxing Angular Expressions
// ------------------------------
-// Angular expressions are generally considered safe because these expressions only have direct
-// access to `$scope` and locals. However, one can obtain the ability to execute arbitrary JS code by
-// obtaining a reference to native JS functions such as the Function constructor.
+// Angular expressions are no longer sandboxed. So it is now even easier to access arbitrary JS code by
+// various means such as obtaining a reference to native JS functions like the Function constructor.
//
// As an example, consider the following Angular expression:
//
// {}.toString.constructor('alert("evil JS code")')
//
-// This sandboxing technique is not perfect and doesn't aim to be. The goal is to prevent exploits
-// against the expression language, but not to prevent exploits that were enabled by exposing
-// sensitive JavaScript or browser APIs on Scope. Exposing such objects on a Scope is never a good
-// practice and therefore we are not even trying to protect against interaction with an object
-// explicitly exposed in this way.
-//
-// In general, it is not possible to access a Window object from an angular expression unless a
-// window or some DOM object that has a reference to window is published onto a Scope.
-// Similarly we prevent invocations of function known to be dangerous, as well as assignments to
-// native objects.
+// It is important to realize that if you create an expression from a string that contains user provided
+// content then it is possible that your application contains a security vulnerability to an XSS style attack.
//
// See https://docs.angularjs.org/guide/security
-function ensureSafeMemberName(name, fullExpression) {
- if (name === "__defineGetter__" || name === "__defineSetter__"
- || name === "__lookupGetter__" || name === "__lookupSetter__"
- || name === "__proto__") {
- throw $parseMinErr('isecfld',
- 'Attempting to access a disallowed field in Angular expressions! '
- + 'Expression: {0}', fullExpression);
- }
- return name;
-}
-
-function getStringValue(name, fullExpression) {
- // From the JavaScript docs:
+function getStringValue(name) {
// Property names must be strings. This means that non-string objects cannot be used
// as keys in an object. Any non-string object, including a number, is typecasted
// into a string via the toString method.
+ // -- MDN, https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Property_accessors#Property_names
//
- // So, to ensure that we are checking the same `name` that JavaScript would use,
- // we cast it to a string, if possible.
- // Doing `name + ''` can cause a repl error if the result to `toString` is not a string,
- // this is, this will handle objects that misbehave.
- name = name + '';
- if (!isString(name)) {
- throw $parseMinErr('iseccst',
- 'Cannot convert object to primitive value! '
- + 'Expression: {0}', fullExpression);
- }
- return name;
-}
-
-function ensureSafeObject(obj, fullExpression) {
- // nifty check if obj is Function that is fast and works across iframes and other contexts
- if (obj) {
- if (obj.constructor === obj) {
- throw $parseMinErr('isecfn',
- 'Referencing Function in Angular expressions is disallowed! Expression: {0}',
- fullExpression);
- } else if (// isWindow(obj)
- obj.window === obj) {
- throw $parseMinErr('isecwindow',
- 'Referencing the Window in Angular expressions is disallowed! Expression: {0}',
- fullExpression);
- } else if (// isElement(obj)
- obj.children && (obj.nodeName || (obj.prop && obj.attr && obj.find))) {
- throw $parseMinErr('isecdom',
- 'Referencing DOM nodes in Angular expressions is disallowed! Expression: {0}',
- fullExpression);
- } else if (// block Object so that we can't get hold of dangerous Object.* methods
- obj === Object) {
- throw $parseMinErr('isecobj',
- 'Referencing Object in Angular expressions is disallowed! Expression: {0}',
- fullExpression);
- }
- }
- return obj;
+ // So, to ensure that we are checking the same `name` that JavaScript would use, we cast it
+ // to a string. It's not always possible. If `name` is an object and its `toString` method is
+ // 'broken' (doesn't return a string, isn't a function, etc.), an error will be thrown:
+ //
+ // TypeError: Cannot convert object to primitive value
+ //
+ // For performance reasons, we don't catch this error here and allow it to propagate up the call
+ // stack. Note that you'll get the same error in JavaScript if you try to access a property using
+ // such a 'broken' object as a key.
+ return name + '';
}
-var CALL = Function.prototype.call;
-var APPLY = Function.prototype.apply;
-var BIND = Function.prototype.bind;
-
-function ensureSafeFunction(obj, fullExpression) {
- if (obj) {
- if (obj.constructor === obj) {
- throw $parseMinErr('isecfn',
- 'Referencing Function in Angular expressions is disallowed! Expression: {0}',
- fullExpression);
- } else if (obj === CALL || obj === APPLY || obj === BIND) {
- throw $parseMinErr('isecff',
- 'Referencing call, apply or bind in Angular expressions is disallowed! Expression: {0}',
- fullExpression);
- }
- }
-}
-
-function ensureSafeAssignContext(obj, fullExpression) {
- if (obj) {
- if (obj === (0).constructor || obj === (false).constructor || obj === ''.constructor ||
- obj === {}.constructor || obj === [].constructor || obj === Function.constructor) {
- throw $parseMinErr('isecaf',
- 'Assigning to a constructor is disallowed! Expression: {0}', fullExpression);
- }
- }
-}
var OPERATORS = createMap();
forEach('+ - * / % === !== == != < > <= >= && || ! = |'.split(' '), function(operator) { OPERATORS[operator] = true; });
-var ESCAPE = {"n":"\n", "f":"\f", "r":"\r", "t":"\t", "v":"\v", "'":"'", '"':'"'};
+var ESCAPE = {'n':'\n', 'f':'\f', 'r':'\r', 't':'\t', 'v':'\v', '\'':'\'', '"':'"'};
/////////////////////////////////////////
@@ -12926,7 +14705,7 @@ var ESCAPE = {"n":"\n", "f":"\f", "r":"\r", "t":"\t", "v":"\v", "'":"'", '"':'"'
/**
* @constructor
*/
-var Lexer = function(options) {
+var Lexer = function Lexer(options) {
this.options = options;
};
@@ -12940,11 +14719,11 @@ Lexer.prototype = {
while (this.index < this.text.length) {
var ch = this.text.charAt(this.index);
- if (ch === '"' || ch === "'") {
+ if (ch === '"' || ch === '\'') {
this.readString(ch);
} else if (this.isNumber(ch) || ch === '.' && this.isNumber(this.peek())) {
this.readNumber();
- } else if (this.isIdent(ch)) {
+ } else if (this.isIdentifierStart(this.peekMultichar())) {
this.readIdent();
} else if (this.is(ch, '(){}[].,;:?')) {
this.tokens.push({index: this.index, text: ch});
@@ -12979,7 +14758,7 @@ Lexer.prototype = {
},
isNumber: function(ch) {
- return ('0' <= ch && ch <= '9') && typeof ch === "string";
+ return ('0' <= ch && ch <= '9') && typeof ch === 'string';
},
isWhitespace: function(ch) {
@@ -12988,12 +14767,48 @@ Lexer.prototype = {
ch === '\n' || ch === '\v' || ch === '\u00A0');
},
- isIdent: function(ch) {
+ isIdentifierStart: function(ch) {
+ return this.options.isIdentifierStart ?
+ this.options.isIdentifierStart(ch, this.codePointAt(ch)) :
+ this.isValidIdentifierStart(ch);
+ },
+
+ isValidIdentifierStart: function(ch) {
return ('a' <= ch && ch <= 'z' ||
'A' <= ch && ch <= 'Z' ||
'_' === ch || ch === '$');
},
+ isIdentifierContinue: function(ch) {
+ return this.options.isIdentifierContinue ?
+ this.options.isIdentifierContinue(ch, this.codePointAt(ch)) :
+ this.isValidIdentifierContinue(ch);
+ },
+
+ isValidIdentifierContinue: function(ch, cp) {
+ return this.isValidIdentifierStart(ch, cp) || this.isNumber(ch);
+ },
+
+ codePointAt: function(ch) {
+ if (ch.length === 1) return ch.charCodeAt(0);
+ // eslint-disable-next-line no-bitwise
+ return (ch.charCodeAt(0) << 10) + ch.charCodeAt(1) - 0x35FDC00;
+ },
+
+ peekMultichar: function() {
+ var ch = this.text.charAt(this.index);
+ var peek = this.peek();
+ if (!peek) {
+ return ch;
+ }
+ var cp1 = ch.charCodeAt(0);
+ var cp2 = peek.charCodeAt(0);
+ if (cp1 >= 0xD800 && cp1 <= 0xDBFF && cp2 >= 0xDC00 && cp2 <= 0xDFFF) {
+ return ch + peek;
+ }
+ return ch;
+ },
+
isExpOperator: function(ch) {
return (ch === '-' || ch === '+' || this.isNumber(ch));
},
@@ -13012,19 +14827,19 @@ Lexer.prototype = {
var start = this.index;
while (this.index < this.text.length) {
var ch = lowercase(this.text.charAt(this.index));
- if (ch == '.' || this.isNumber(ch)) {
+ if (ch === '.' || this.isNumber(ch)) {
number += ch;
} else {
var peekCh = this.peek();
- if (ch == 'e' && this.isExpOperator(peekCh)) {
+ if (ch === 'e' && this.isExpOperator(peekCh)) {
number += ch;
} else if (this.isExpOperator(ch) &&
peekCh && this.isNumber(peekCh) &&
- number.charAt(number.length - 1) == 'e') {
+ number.charAt(number.length - 1) === 'e') {
number += ch;
} else if (this.isExpOperator(ch) &&
(!peekCh || !this.isNumber(peekCh)) &&
- number.charAt(number.length - 1) == 'e') {
+ number.charAt(number.length - 1) === 'e') {
this.throwError('Invalid exponent');
} else {
break;
@@ -13042,12 +14857,13 @@ Lexer.prototype = {
readIdent: function() {
var start = this.index;
+ this.index += this.peekMultichar().length;
while (this.index < this.text.length) {
- var ch = this.text.charAt(this.index);
- if (!(this.isIdent(ch) || this.isNumber(ch))) {
+ var ch = this.peekMultichar();
+ if (!this.isIdentifierContinue(ch)) {
break;
}
- this.index++;
+ this.index += ch.length;
}
this.tokens.push({
index: start,
@@ -13098,7 +14914,7 @@ Lexer.prototype = {
}
};
-var AST = function(lexer, options) {
+var AST = function AST(lexer, options) {
this.lexer = lexer;
this.options = options;
};
@@ -13118,6 +14934,7 @@ AST.ArrayExpression = 'ArrayExpression';
AST.Property = 'Property';
AST.ObjectExpression = 'ObjectExpression';
AST.ThisExpression = 'ThisExpression';
+AST.LocalsExpression = 'LocalsExpression';
// Internal use only
AST.NGValueParameter = 'NGValueParameter';
@@ -13153,8 +14970,7 @@ AST.prototype = {
filterChain: function() {
var left = this.expression();
- var token;
- while ((token = this.expect('|'))) {
+ while (this.expect('|')) {
left = this.filter(left);
}
return left;
@@ -13167,6 +14983,10 @@ AST.prototype = {
assignment: function() {
var result = this.ternary();
if (this.expect('=')) {
+ if (!isAssignable(result)) {
+ throw $parseMinErr('lval', 'Trying to assign a value to a non l-value');
+ }
+
result = { type: AST.AssignmentExpression, left: result, right: this.assignment(), operator: '='};
}
return result;
@@ -13256,8 +15076,10 @@ AST.prototype = {
primary = this.arrayDeclaration();
} else if (this.expect('{')) {
primary = this.object();
- } else if (this.constants.hasOwnProperty(this.peek().text)) {
- primary = copy(this.constants[this.consume().text]);
+ } else if (this.selfReferential.hasOwnProperty(this.peek().text)) {
+ primary = copy(this.selfReferential[this.consume().text]);
+ } else if (this.options.literals.hasOwnProperty(this.peek().text)) {
+ primary = { type: AST.Literal, value: this.options.literals[this.consume().text]};
} else if (this.peek().identifier) {
primary = this.identifier();
} else if (this.peek().constant) {
@@ -13298,7 +15120,7 @@ AST.prototype = {
var args = [];
if (this.peekToken().text !== ')') {
do {
- args.push(this.expression());
+ args.push(this.filterChain());
} while (this.expect(','));
}
return args;
@@ -13344,13 +15166,28 @@ AST.prototype = {
property = {type: AST.Property, kind: 'init'};
if (this.peek().constant) {
property.key = this.constant();
+ property.computed = false;
+ this.consume(':');
+ property.value = this.expression();
} else if (this.peek().identifier) {
property.key = this.identifier();
+ property.computed = false;
+ if (this.peek(':')) {
+ this.consume(':');
+ property.value = this.expression();
+ } else {
+ property.value = property.key;
+ }
+ } else if (this.peek('[')) {
+ this.consume('[');
+ property.key = this.expression();
+ this.consume(']');
+ property.computed = true;
+ this.consume(':');
+ property.value = this.expression();
} else {
- this.throwError("invalid key", this.peek());
+ this.throwError('invalid key', this.peek());
}
- this.consume(':');
- property.value = this.expression();
properties.push(property);
} while (this.expect(','));
}
@@ -13409,16 +15246,9 @@ AST.prototype = {
return false;
},
-
- /* `undefined` is not a constant, it is an identifier,
- * but using it as an identifier is not supported
- */
- constants: {
- 'true': { type: AST.Literal, value: true },
- 'false': { type: AST.Literal, value: false },
- 'null': { type: AST.Literal, value: null },
- 'undefined': {type: AST.Literal, value: undefined },
- 'this': {type: AST.ThisExpression }
+ selfReferential: {
+ 'this': {type: AST.ThisExpression },
+ '$locals': {type: AST.LocalsExpression }
}
};
@@ -13437,14 +15267,47 @@ function isStateless($filter, filterName) {
return !fn.$stateful;
}
-function findConstantAndWatchExpressions(ast, $filter) {
+var PURITY_ABSOLUTE = 1;
+var PURITY_RELATIVE = 2;
+
+// Detect nodes which could depend on non-shallow state of objects
+function isPure(node, parentIsPure) {
+ switch (node.type) {
+ // Computed members might invoke a stateful toString()
+ case AST.MemberExpression:
+ if (node.computed) {
+ return false;
+ }
+ break;
+
+ // Unary always convert to primative
+ case AST.UnaryExpression:
+ return PURITY_ABSOLUTE;
+
+ // The binary + operator can invoke a stateful toString().
+ case AST.BinaryExpression:
+ return node.operator !== '+' ? PURITY_ABSOLUTE : false;
+
+ // Functions / filters probably read state from within objects
+ case AST.CallExpression:
+ return false;
+ }
+
+ return (undefined === parentIsPure) ? PURITY_RELATIVE : parentIsPure;
+}
+
+function findConstantAndWatchExpressions(ast, $filter, parentIsPure) {
var allConstants;
var argsToWatch;
+ var isStatelessFilter;
+
+ var astIsPure = ast.isPure = isPure(ast, parentIsPure);
+
switch (ast.type) {
case AST.Program:
allConstants = true;
forEach(ast.body, function(expr) {
- findConstantAndWatchExpressions(expr.expression, $filter);
+ findConstantAndWatchExpressions(expr.expression, $filter, astIsPure);
allConstants = allConstants && expr.expression.constant;
});
ast.constant = allConstants;
@@ -13454,26 +15317,26 @@ function findConstantAndWatchExpressions(ast, $filter) {
ast.toWatch = [];
break;
case AST.UnaryExpression:
- findConstantAndWatchExpressions(ast.argument, $filter);
+ findConstantAndWatchExpressions(ast.argument, $filter, astIsPure);
ast.constant = ast.argument.constant;
ast.toWatch = ast.argument.toWatch;
break;
case AST.BinaryExpression:
- findConstantAndWatchExpressions(ast.left, $filter);
- findConstantAndWatchExpressions(ast.right, $filter);
+ findConstantAndWatchExpressions(ast.left, $filter, astIsPure);
+ findConstantAndWatchExpressions(ast.right, $filter, astIsPure);
ast.constant = ast.left.constant && ast.right.constant;
ast.toWatch = ast.left.toWatch.concat(ast.right.toWatch);
break;
case AST.LogicalExpression:
- findConstantAndWatchExpressions(ast.left, $filter);
- findConstantAndWatchExpressions(ast.right, $filter);
+ findConstantAndWatchExpressions(ast.left, $filter, astIsPure);
+ findConstantAndWatchExpressions(ast.right, $filter, astIsPure);
ast.constant = ast.left.constant && ast.right.constant;
ast.toWatch = ast.constant ? [] : [ast];
break;
case AST.ConditionalExpression:
- findConstantAndWatchExpressions(ast.test, $filter);
- findConstantAndWatchExpressions(ast.alternate, $filter);
- findConstantAndWatchExpressions(ast.consequent, $filter);
+ findConstantAndWatchExpressions(ast.test, $filter, astIsPure);
+ findConstantAndWatchExpressions(ast.alternate, $filter, astIsPure);
+ findConstantAndWatchExpressions(ast.consequent, $filter, astIsPure);
ast.constant = ast.test.constant && ast.alternate.constant && ast.consequent.constant;
ast.toWatch = ast.constant ? [] : [ast];
break;
@@ -13482,29 +15345,30 @@ function findConstantAndWatchExpressions(ast, $filter) {
ast.toWatch = [ast];
break;
case AST.MemberExpression:
- findConstantAndWatchExpressions(ast.object, $filter);
+ findConstantAndWatchExpressions(ast.object, $filter, astIsPure);
if (ast.computed) {
- findConstantAndWatchExpressions(ast.property, $filter);
+ findConstantAndWatchExpressions(ast.property, $filter, astIsPure);
}
ast.constant = ast.object.constant && (!ast.computed || ast.property.constant);
ast.toWatch = [ast];
break;
case AST.CallExpression:
- allConstants = ast.filter ? isStateless($filter, ast.callee.name) : false;
+ isStatelessFilter = ast.filter ? isStateless($filter, ast.callee.name) : false;
+ allConstants = isStatelessFilter;
argsToWatch = [];
forEach(ast.arguments, function(expr) {
- findConstantAndWatchExpressions(expr, $filter);
+ findConstantAndWatchExpressions(expr, $filter, astIsPure);
allConstants = allConstants && expr.constant;
if (!expr.constant) {
argsToWatch.push.apply(argsToWatch, expr.toWatch);
}
});
ast.constant = allConstants;
- ast.toWatch = ast.filter && isStateless($filter, ast.callee.name) ? argsToWatch : [ast];
+ ast.toWatch = isStatelessFilter ? argsToWatch : [ast];
break;
case AST.AssignmentExpression:
- findConstantAndWatchExpressions(ast.left, $filter);
- findConstantAndWatchExpressions(ast.right, $filter);
+ findConstantAndWatchExpressions(ast.left, $filter, astIsPure);
+ findConstantAndWatchExpressions(ast.right, $filter, astIsPure);
ast.constant = ast.left.constant && ast.right.constant;
ast.toWatch = [ast];
break;
@@ -13512,7 +15376,7 @@ function findConstantAndWatchExpressions(ast, $filter) {
allConstants = true;
argsToWatch = [];
forEach(ast.elements, function(expr) {
- findConstantAndWatchExpressions(expr, $filter);
+ findConstantAndWatchExpressions(expr, $filter, astIsPure);
allConstants = allConstants && expr.constant;
if (!expr.constant) {
argsToWatch.push.apply(argsToWatch, expr.toWatch);
@@ -13525,11 +15389,18 @@ function findConstantAndWatchExpressions(ast, $filter) {
allConstants = true;
argsToWatch = [];
forEach(ast.properties, function(property) {
- findConstantAndWatchExpressions(property.value, $filter);
- allConstants = allConstants && property.value.constant;
+ findConstantAndWatchExpressions(property.value, $filter, astIsPure);
+ allConstants = allConstants && property.value.constant && !property.computed;
if (!property.value.constant) {
argsToWatch.push.apply(argsToWatch, property.value.toWatch);
}
+ if (property.computed) {
+ findConstantAndWatchExpressions(property.key, $filter, astIsPure);
+ if (!property.key.constant) {
+ argsToWatch.push.apply(argsToWatch, property.key.toWatch);
+ }
+ }
+
});
ast.constant = allConstants;
ast.toWatch = argsToWatch;
@@ -13538,11 +15409,15 @@ function findConstantAndWatchExpressions(ast, $filter) {
ast.constant = false;
ast.toWatch = [];
break;
+ case AST.LocalsExpression:
+ ast.constant = false;
+ ast.toWatch = [];
+ break;
}
}
function getInputs(body) {
- if (body.length != 1) return;
+ if (body.length !== 1) return;
var lastExpression = body[0].expression;
var candidate = lastExpression.toWatch;
if (candidate.length !== 1) return candidate;
@@ -13571,19 +15446,16 @@ function isConstant(ast) {
return ast.constant;
}
-function ASTCompiler(astBuilder, $filter) {
- this.astBuilder = astBuilder;
+function ASTCompiler($filter) {
this.$filter = $filter;
}
ASTCompiler.prototype = {
- compile: function(expression, expensiveChecks) {
+ compile: function(ast) {
var self = this;
- var ast = this.astBuilder.ast(expression);
this.state = {
nextId: 0,
filters: {},
- expensiveChecks: expensiveChecks,
fn: {vars: [], body: [], own: {}},
assign: {vars: [], body: [], own: {}},
inputs: []
@@ -13608,7 +15480,7 @@ ASTCompiler.prototype = {
var intoId = self.nextId();
self.recurse(watch, intoId);
self.return_(intoId);
- self.state.inputs.push(fnKey);
+ self.state.inputs.push({name: fnKey, isPure: watch.isPure});
watch.watchId = key;
});
this.state.computing = 'fn';
@@ -13624,30 +15496,17 @@ ASTCompiler.prototype = {
this.watchFns() +
'return fn;';
- /* jshint -W054 */
+ // eslint-disable-next-line no-new-func
var fn = (new Function('$filter',
- 'ensureSafeMemberName',
- 'ensureSafeObject',
- 'ensureSafeFunction',
'getStringValue',
- 'ensureSafeAssignContext',
'ifDefined',
'plus',
- 'text',
fnString))(
this.$filter,
- ensureSafeMemberName,
- ensureSafeObject,
- ensureSafeFunction,
getStringValue,
- ensureSafeAssignContext,
ifDefined,
- plusFn,
- expression);
- /* jshint +W054 */
+ plusFn);
this.state = this.stage = undefined;
- fn.literal = isLiteral(ast);
- fn.constant = isConstant(ast);
return fn;
},
@@ -13657,13 +15516,16 @@ ASTCompiler.prototype = {
watchFns: function() {
var result = [];
- var fns = this.state.inputs;
+ var inputs = this.state.inputs;
var self = this;
- forEach(fns, function(name) {
- result.push('var ' + name + '=' + self.generateFunction(name, 's'));
+ forEach(inputs, function(input) {
+ result.push('var ' + input.name + '=' + self.generateFunction(input.name, 's'));
+ if (input.isPure) {
+ result.push(input.name, '.isPure=' + JSON.stringify(input.isPure) + ';');
+ }
});
- if (fns.length) {
- result.push('fn.inputs=[' + fns.join(',') + '];');
+ if (inputs.length) {
+ result.push('fn.inputs=[' + inputs.map(function(i) { return i.name; }).join(',') + '];');
}
return result.join('');
},
@@ -13694,7 +15556,7 @@ ASTCompiler.prototype = {
},
recurse: function(ast, intoId, nameId, recursionFn, create, skipWatchIdCheck) {
- var left, right, self = this, args, expression;
+ var left, right, self = this, args, expression, computed;
recursionFn = recursionFn || noop;
if (!skipWatchIdCheck && isDefined(ast.watchId)) {
intoId = intoId || this.nextId();
@@ -13718,7 +15580,7 @@ ASTCompiler.prototype = {
case AST.Literal:
expression = this.escape(ast.value);
this.assign(intoId, expression);
- recursionFn(expression);
+ recursionFn(intoId || expression);
break;
case AST.UnaryExpression:
this.recurse(ast.argument, undefined, undefined, function(expr) { right = expr; });
@@ -13758,22 +15620,18 @@ ASTCompiler.prototype = {
nameId.computed = false;
nameId.name = ast.name;
}
- ensureSafeMemberName(ast.name);
self.if_(self.stage === 'inputs' || self.not(self.getHasOwnProperty('l', ast.name)),
function() {
self.if_(self.stage === 'inputs' || 's', function() {
if (create && create !== 1) {
self.if_(
- self.not(self.nonComputedMember('s', ast.name)),
+ self.isNull(self.nonComputedMember('s', ast.name)),
self.lazyAssign(self.nonComputedMember('s', ast.name), '{}'));
}
self.assign(intoId, self.nonComputedMember('s', ast.name));
});
}, intoId && self.lazyAssign(intoId, self.nonComputedMember('l', ast.name))
);
- if (self.state.expensiveChecks || isPossiblyDangerousMemberName(ast.name)) {
- self.addEnsureSafeObject(intoId);
- }
recursionFn(intoId);
break;
case AST.MemberExpression:
@@ -13781,32 +15639,24 @@ ASTCompiler.prototype = {
intoId = intoId || this.nextId();
self.recurse(ast.object, left, undefined, function() {
self.if_(self.notNull(left), function() {
- if (create && create !== 1) {
- self.addEnsureSafeAssignContext(left);
- }
if (ast.computed) {
right = self.nextId();
self.recurse(ast.property, right);
self.getStringValue(right);
- self.addEnsureSafeMemberName(right);
if (create && create !== 1) {
self.if_(self.not(self.computedMember(left, right)), self.lazyAssign(self.computedMember(left, right), '{}'));
}
- expression = self.ensureSafeObject(self.computedMember(left, right));
+ expression = self.computedMember(left, right);
self.assign(intoId, expression);
if (nameId) {
nameId.computed = true;
nameId.name = right;
}
} else {
- ensureSafeMemberName(ast.property.name);
if (create && create !== 1) {
- self.if_(self.not(self.nonComputedMember(left, ast.property.name)), self.lazyAssign(self.nonComputedMember(left, ast.property.name), '{}'));
+ self.if_(self.isNull(self.nonComputedMember(left, ast.property.name)), self.lazyAssign(self.nonComputedMember(left, ast.property.name), '{}'));
}
expression = self.nonComputedMember(left, ast.property.name);
- if (self.state.expensiveChecks || isPossiblyDangerousMemberName(ast.property.name)) {
- expression = self.ensureSafeObject(expression);
- }
self.assign(intoId, expression);
if (nameId) {
nameId.computed = false;
@@ -13838,21 +15688,16 @@ ASTCompiler.prototype = {
args = [];
self.recurse(ast.callee, right, left, function() {
self.if_(self.notNull(right), function() {
- self.addEnsureSafeFunction(right);
forEach(ast.arguments, function(expr) {
- self.recurse(expr, self.nextId(), undefined, function(argument) {
- args.push(self.ensureSafeObject(argument));
+ self.recurse(expr, ast.constant ? undefined : self.nextId(), undefined, function(argument) {
+ args.push(argument);
});
});
if (left.name) {
- if (!self.state.expensiveChecks) {
- self.addEnsureSafeObject(left.context);
- }
expression = self.member(left.context, left.name, left.computed) + '(' + args.join(',') + ')';
} else {
expression = right + '(' + args.join(',') + ')';
}
- expression = self.ensureSafeObject(expression);
self.assign(intoId, expression);
}, function() {
self.assign(intoId, 'undefined');
@@ -13864,14 +15709,9 @@ ASTCompiler.prototype = {
case AST.AssignmentExpression:
right = this.nextId();
left = {};
- if (!isAssignable(ast.left)) {
- throw $parseMinErr('lval', 'Trying to assign a value to a non l-value');
- }
this.recurse(ast.left, undefined, left, function() {
self.if_(self.notNull(left.context), function() {
self.recurse(ast.right, right);
- self.addEnsureSafeObject(self.member(left.context, left.name, left.computed));
- self.addEnsureSafeAssignContext(left.context);
expression = self.member(left.context, left.name, left.computed) + ast.operator + right;
self.assign(intoId, expression);
recursionFn(intoId || expression);
@@ -13881,35 +15721,63 @@ ASTCompiler.prototype = {
case AST.ArrayExpression:
args = [];
forEach(ast.elements, function(expr) {
- self.recurse(expr, self.nextId(), undefined, function(argument) {
+ self.recurse(expr, ast.constant ? undefined : self.nextId(), undefined, function(argument) {
args.push(argument);
});
});
expression = '[' + args.join(',') + ']';
this.assign(intoId, expression);
- recursionFn(expression);
+ recursionFn(intoId || expression);
break;
case AST.ObjectExpression:
args = [];
+ computed = false;
forEach(ast.properties, function(property) {
- self.recurse(property.value, self.nextId(), undefined, function(expr) {
- args.push(self.escape(
- property.key.type === AST.Identifier ? property.key.name :
- ('' + property.key.value)) +
- ':' + expr);
- });
+ if (property.computed) {
+ computed = true;
+ }
});
- expression = '{' + args.join(',') + '}';
- this.assign(intoId, expression);
- recursionFn(expression);
+ if (computed) {
+ intoId = intoId || this.nextId();
+ this.assign(intoId, '{}');
+ forEach(ast.properties, function(property) {
+ if (property.computed) {
+ left = self.nextId();
+ self.recurse(property.key, left);
+ } else {
+ left = property.key.type === AST.Identifier ?
+ property.key.name :
+ ('' + property.key.value);
+ }
+ right = self.nextId();
+ self.recurse(property.value, right);
+ self.assign(self.member(intoId, left, property.computed), right);
+ });
+ } else {
+ forEach(ast.properties, function(property) {
+ self.recurse(property.value, ast.constant ? undefined : self.nextId(), undefined, function(expr) {
+ args.push(self.escape(
+ property.key.type === AST.Identifier ? property.key.name :
+ ('' + property.key.value)) +
+ ':' + expr);
+ });
+ });
+ expression = '{' + args.join(',') + '}';
+ this.assign(intoId, expression);
+ }
+ recursionFn(intoId || expression);
break;
case AST.ThisExpression:
this.assign(intoId, 's');
- recursionFn('s');
+ recursionFn(intoId || 's');
+ break;
+ case AST.LocalsExpression:
+ this.assign(intoId, 'l');
+ recursionFn(intoId || 'l');
break;
case AST.NGValueParameter:
this.assign(intoId, 'v');
- recursionFn('v');
+ recursionFn(intoId || 'v');
break;
}
},
@@ -13968,12 +15836,22 @@ ASTCompiler.prototype = {
return '!(' + expression + ')';
},
+ isNull: function(expression) {
+ return expression + '==null';
+ },
+
notNull: function(expression) {
return expression + '!=null';
},
nonComputedMember: function(left, right) {
- return left + '.' + right;
+ var SAFE_IDENTIFIER = /^[$_a-zA-Z][$_a-zA-Z0-9]*$/;
+ var UNSAFE_CHARACTERS = /[^$_a-zA-Z0-9]/g;
+ if (SAFE_IDENTIFIER.test(right)) {
+ return left + '.' + right;
+ } else {
+ return left + '["' + right.replace(UNSAFE_CHARACTERS, this.stringEscapeFn) + '"]';
+ }
},
computedMember: function(left, right) {
@@ -13985,40 +15863,8 @@ ASTCompiler.prototype = {
return this.nonComputedMember(left, right);
},
- addEnsureSafeObject: function(item) {
- this.current().body.push(this.ensureSafeObject(item), ';');
- },
-
- addEnsureSafeMemberName: function(item) {
- this.current().body.push(this.ensureSafeMemberName(item), ';');
- },
-
- addEnsureSafeFunction: function(item) {
- this.current().body.push(this.ensureSafeFunction(item), ';');
- },
-
- addEnsureSafeAssignContext: function(item) {
- this.current().body.push(this.ensureSafeAssignContext(item), ';');
- },
-
- ensureSafeObject: function(item) {
- return 'ensureSafeObject(' + item + ',text)';
- },
-
- ensureSafeMemberName: function(item) {
- return 'ensureSafeMemberName(' + item + ',text)';
- },
-
- ensureSafeFunction: function(item) {
- return 'ensureSafeFunction(' + item + ',text)';
- },
-
getStringValue: function(item) {
- this.assign(item, 'getStringValue(' + item + ',text)');
- },
-
- ensureSafeAssignContext: function(item) {
- return 'ensureSafeAssignContext(' + item + ',text)';
+ this.assign(item, 'getStringValue(' + item + ')');
},
lazyRecurse: function(ast, intoId, nameId, recursionFn, create, skipWatchIdCheck) {
@@ -14042,7 +15888,7 @@ ASTCompiler.prototype = {
},
escape: function(value) {
- if (isString(value)) return "'" + value.replace(this.stringEscapeRegex, this.stringEscapeFn) + "'";
+ if (isString(value)) return '\'' + value.replace(this.stringEscapeRegex, this.stringEscapeFn) + '\'';
if (isNumber(value)) return value.toString();
if (value === true) return 'true';
if (value === false) return 'false';
@@ -14066,17 +15912,13 @@ ASTCompiler.prototype = {
};
-function ASTInterpreter(astBuilder, $filter) {
- this.astBuilder = astBuilder;
+function ASTInterpreter($filter) {
this.$filter = $filter;
}
ASTInterpreter.prototype = {
- compile: function(expression, expensiveChecks) {
+ compile: function(ast) {
var self = this;
- var ast = this.astBuilder.ast(expression);
- this.expression = expression;
- this.expensiveChecks = expensiveChecks;
findConstantAndWatchExpressions(ast, self.$filter);
var assignable;
var assign;
@@ -14089,6 +15931,7 @@ ASTInterpreter.prototype = {
inputs = [];
forEach(toWatch, function(watch, key) {
var input = self.recurse(watch);
+ input.isPure = watch.isPure;
watch.input = input;
inputs.push(input);
watch.watchId = key;
@@ -14098,7 +15941,7 @@ ASTInterpreter.prototype = {
forEach(ast.body, function(expression) {
expressions.push(self.recurse(expression.expression));
});
- var fn = ast.body.length === 0 ? function() {} :
+ var fn = ast.body.length === 0 ? noop :
ast.body.length === 1 ? expressions[0] :
function(scope, locals) {
var lastValue;
@@ -14115,13 +15958,11 @@ ASTInterpreter.prototype = {
if (inputs) {
fn.inputs = inputs;
}
- fn.literal = isLiteral(ast);
- fn.constant = isConstant(ast);
return fn;
},
recurse: function(ast, context, create) {
- var left, right, self = this, args, expression;
+ var left, right, self = this, args;
if (ast.input) {
return this.inputs(ast.input, ast.watchId);
}
@@ -14147,20 +15988,16 @@ ASTInterpreter.prototype = {
context
);
case AST.Identifier:
- ensureSafeMemberName(ast.name, self.expression);
- return self.identifier(ast.name,
- self.expensiveChecks || isPossiblyDangerousMemberName(ast.name),
- context, create, self.expression);
+ return self.identifier(ast.name, context, create);
case AST.MemberExpression:
left = this.recurse(ast.object, false, !!create);
if (!ast.computed) {
- ensureSafeMemberName(ast.property.name, self.expression);
right = ast.property.name;
}
if (ast.computed) right = this.recurse(ast.property);
return ast.computed ?
- this.computedMember(left, right, context, create, self.expression) :
- this.nonComputedMember(left, right, self.expensiveChecks, context, create, self.expression);
+ this.computedMember(left, right, context, create) :
+ this.nonComputedMember(left, right, context, create);
case AST.CallExpression:
args = [];
forEach(ast.arguments, function(expr) {
@@ -14181,13 +16018,11 @@ ASTInterpreter.prototype = {
var rhs = right(scope, locals, assign, inputs);
var value;
if (rhs.value != null) {
- ensureSafeObject(rhs.context, self.expression);
- ensureSafeFunction(rhs.value, self.expression);
var values = [];
for (var i = 0; i < args.length; ++i) {
- values.push(ensureSafeObject(args[i](scope, locals, assign, inputs), self.expression));
+ values.push(args[i](scope, locals, assign, inputs));
}
- value = ensureSafeObject(rhs.value.apply(rhs.context, values), self.expression);
+ value = rhs.value.apply(rhs.context, values);
}
return context ? {value: value} : value;
};
@@ -14197,8 +16032,6 @@ ASTInterpreter.prototype = {
return function(scope, locals, assign, inputs) {
var lhs = left(scope, locals, assign, inputs);
var rhs = right(scope, locals, assign, inputs);
- ensureSafeObject(lhs.value, self.expression);
- ensureSafeAssignContext(lhs.context);
lhs.context[lhs.name] = rhs;
return context ? {value: rhs} : rhs;
};
@@ -14217,16 +16050,28 @@ ASTInterpreter.prototype = {
case AST.ObjectExpression:
args = [];
forEach(ast.properties, function(property) {
- args.push({key: property.key.type === AST.Identifier ?
- property.key.name :
- ('' + property.key.value),
- value: self.recurse(property.value)
- });
+ if (property.computed) {
+ args.push({key: self.recurse(property.key),
+ computed: true,
+ value: self.recurse(property.value)
+ });
+ } else {
+ args.push({key: property.key.type === AST.Identifier ?
+ property.key.name :
+ ('' + property.key.value),
+ computed: false,
+ value: self.recurse(property.value)
+ });
+ }
});
return function(scope, locals, assign, inputs) {
var value = {};
for (var i = 0; i < args.length; ++i) {
- value[args[i].key] = args[i].value(scope, locals, assign, inputs);
+ if (args[i].computed) {
+ value[args[i].key(scope, locals, assign, inputs)] = args[i].value(scope, locals, assign, inputs);
+ } else {
+ value[args[i].key] = args[i].value(scope, locals, assign, inputs);
+ }
}
return context ? {value: value} : value;
};
@@ -14234,8 +16079,12 @@ ASTInterpreter.prototype = {
return function(scope) {
return context ? {value: scope} : scope;
};
+ case AST.LocalsExpression:
+ return function(scope, locals) {
+ return context ? {value: locals} : locals;
+ };
case AST.NGValueParameter:
- return function(scope, locals, assign, inputs) {
+ return function(scope, locals, assign) {
return context ? {value: assign} : assign;
};
}
@@ -14258,7 +16107,7 @@ ASTInterpreter.prototype = {
if (isDefined(arg)) {
arg = -arg;
} else {
- arg = 0;
+ arg = -0;
}
return context ? {value: arg} : arg;
};
@@ -14317,12 +16166,14 @@ ASTInterpreter.prototype = {
},
'binary==': function(left, right, context) {
return function(scope, locals, assign, inputs) {
+ // eslint-disable-next-line eqeqeq
var arg = left(scope, locals, assign, inputs) == right(scope, locals, assign, inputs);
return context ? {value: arg} : arg;
};
},
'binary!=': function(left, right, context) {
return function(scope, locals, assign, inputs) {
+ // eslint-disable-next-line eqeqeq
var arg = left(scope, locals, assign, inputs) != right(scope, locals, assign, inputs);
return context ? {value: arg} : arg;
};
@@ -14372,16 +16223,13 @@ ASTInterpreter.prototype = {
value: function(value, context) {
return function() { return context ? {context: undefined, name: undefined, value: value} : value; };
},
- identifier: function(name, expensiveChecks, context, create, expression) {
+ identifier: function(name, context, create) {
return function(scope, locals, assign, inputs) {
var base = locals && (name in locals) ? locals : scope;
- if (create && create !== 1 && base && !(base[name])) {
+ if (create && create !== 1 && base && base[name] == null) {
base[name] = {};
}
var value = base ? base[name] : undefined;
- if (expensiveChecks) {
- ensureSafeObject(value, expression);
- }
if (context) {
return {context: base, name: name, value: value};
} else {
@@ -14389,7 +16237,7 @@ ASTInterpreter.prototype = {
}
};
},
- computedMember: function(left, right, context, create, expression) {
+ computedMember: function(left, right, context, create) {
return function(scope, locals, assign, inputs) {
var lhs = left(scope, locals, assign, inputs);
var rhs;
@@ -14397,15 +16245,12 @@ ASTInterpreter.prototype = {
if (lhs != null) {
rhs = right(scope, locals, assign, inputs);
rhs = getStringValue(rhs);
- ensureSafeMemberName(rhs, expression);
if (create && create !== 1) {
- ensureSafeAssignContext(lhs);
if (lhs && !(lhs[rhs])) {
lhs[rhs] = {};
}
}
value = lhs[rhs];
- ensureSafeObject(value, expression);
}
if (context) {
return {context: lhs, name: rhs, value: value};
@@ -14414,19 +16259,15 @@ ASTInterpreter.prototype = {
}
};
},
- nonComputedMember: function(left, right, expensiveChecks, context, create, expression) {
+ nonComputedMember: function(left, right, context, create) {
return function(scope, locals, assign, inputs) {
var lhs = left(scope, locals, assign, inputs);
if (create && create !== 1) {
- ensureSafeAssignContext(lhs);
- if (lhs && !(lhs[right])) {
+ if (lhs && lhs[right] == null) {
lhs[right] = {};
}
}
var value = lhs != null ? lhs[right] : undefined;
- if (expensiveChecks || isPossiblyDangerousMemberName(right)) {
- ensureSafeObject(value, expression);
- }
if (context) {
return {context: lhs, name: right, value: value};
} else {
@@ -14445,29 +16286,24 @@ ASTInterpreter.prototype = {
/**
* @constructor
*/
-var Parser = function(lexer, $filter, options) {
- this.lexer = lexer;
- this.$filter = $filter;
- this.options = options;
- this.ast = new AST(this.lexer);
- this.astCompiler = options.csp ? new ASTInterpreter(this.ast, $filter) :
- new ASTCompiler(this.ast, $filter);
-};
+function Parser(lexer, $filter, options) {
+ this.ast = new AST(lexer, options);
+ this.astCompiler = options.csp ? new ASTInterpreter($filter) :
+ new ASTCompiler($filter);
+}
Parser.prototype = {
constructor: Parser,
parse: function(text) {
- return this.astCompiler.compile(text, this.options.expensiveChecks);
+ var ast = this.ast.ast(text);
+ var fn = this.astCompiler.compile(ast);
+ fn.literal = isLiteral(ast);
+ fn.constant = isConstant(ast);
+ return fn;
}
};
-function isPossiblyDangerousMemberName(name) {
- return name == 'constructor';
-}
-
-var objectValueOf = Object.prototype.valueOf;
-
function getValueOf(value) {
return isFunction(value.valueOf) ? value.valueOf() : objectValueOf.call(value);
}
@@ -14518,44 +16354,85 @@ function getValueOf(value) {
/**
* @ngdoc provider
* @name $parseProvider
+ * @this
*
* @description
* `$parseProvider` can be used for configuring the default behavior of the {@link ng.$parse $parse}
* service.
*/
function $ParseProvider() {
- var cacheDefault = createMap();
- var cacheExpensive = createMap();
+ var cache = createMap();
+ var literals = {
+ 'true': true,
+ 'false': false,
+ 'null': null,
+ 'undefined': undefined
+ };
+ var identStart, identContinue;
+
+ /**
+ * @ngdoc method
+ * @name $parseProvider#addLiteral
+ * @description
+ *
+ * Configure $parse service to add literal values that will be present as literal at expressions.
+ *
+ * @param {string} literalName Token for the literal value. The literal name value must be a valid literal name.
+ * @param {*} literalValue Value for this literal. All literal values must be primitives or `undefined`.
+ *
+ **/
+ this.addLiteral = function(literalName, literalValue) {
+ literals[literalName] = literalValue;
+ };
+
+ /**
+ * @ngdoc method
+ * @name $parseProvider#setIdentifierFns
+ *
+ * @description
+ *
+ * Allows defining the set of characters that are allowed in Angular expressions. The function
+ * `identifierStart` will get called to know if a given character is a valid character to be the
+ * first character for an identifier. The function `identifierContinue` will get called to know if
+ * a given character is a valid character to be a follow-up identifier character. The functions
+ * `identifierStart` and `identifierContinue` will receive as arguments the single character to be
+ * identifier and the character code point. These arguments will be `string` and `numeric`. Keep in
+ * mind that the `string` parameter can be two characters long depending on the character
+ * representation. It is expected for the function to return `true` or `false`, whether that
+ * character is allowed or not.
+ *
+ * Since this function will be called extensively, keep the implementation of these functions fast,
+ * as the performance of these functions have a direct impact on the expressions parsing speed.
+ *
+ * @param {function=} identifierStart The function that will decide whether the given character is
+ * a valid identifier start character.
+ * @param {function=} identifierContinue The function that will decide whether the given character is
+ * a valid identifier continue character.
+ */
+ this.setIdentifierFns = function(identifierStart, identifierContinue) {
+ identStart = identifierStart;
+ identContinue = identifierContinue;
+ return this;
+ };
this.$get = ['$filter', function($filter) {
var noUnsafeEval = csp().noUnsafeEval;
var $parseOptions = {
csp: noUnsafeEval,
- expensiveChecks: false
- },
- $parseOptionsExpensive = {
- csp: noUnsafeEval,
- expensiveChecks: true
+ literals: copy(literals),
+ isIdentifierStart: isFunction(identStart) && identStart,
+ isIdentifierContinue: isFunction(identContinue) && identContinue
};
- var runningChecksEnabled = false;
-
- $parse.$$runningExpensiveChecks = function() {
- return runningChecksEnabled;
- };
-
return $parse;
- function $parse(exp, interceptorFn, expensiveChecks) {
+ function $parse(exp, interceptorFn) {
var parsedExpression, oneTime, cacheKey;
- expensiveChecks = expensiveChecks || runningChecksEnabled;
-
switch (typeof exp) {
case 'string':
exp = exp.trim();
cacheKey = exp;
- var cache = (expensiveChecks ? cacheExpensive : cacheDefault);
parsedExpression = cache[cacheKey];
if (!parsedExpression) {
@@ -14563,9 +16440,8 @@ function $ParseProvider() {
oneTime = true;
exp = exp.substring(2);
}
- var parseOptions = expensiveChecks ? $parseOptionsExpensive : $parseOptions;
- var lexer = new Lexer(parseOptions);
- var parser = new Parser(lexer, $filter, parseOptions);
+ var lexer = new Lexer($parseOptions);
+ var parser = new Parser(lexer, $filter, $parseOptions);
parsedExpression = parser.parse(exp);
if (parsedExpression.constant) {
parsedExpression.$$watchDelegate = constantWatchDelegate;
@@ -14575,9 +16451,6 @@ function $ParseProvider() {
} else if (parsedExpression.inputs) {
parsedExpression.$$watchDelegate = inputsWatchDelegate;
}
- if (expensiveChecks) {
- parsedExpression = expensiveChecksInterceptor(parsedExpression);
- }
cache[cacheKey] = parsedExpression;
}
return addInterceptor(parsedExpression, interceptorFn);
@@ -14590,31 +16463,7 @@ function $ParseProvider() {
}
}
- function expensiveChecksInterceptor(fn) {
- if (!fn) return fn;
- expensiveCheckFn.$$watchDelegate = fn.$$watchDelegate;
- expensiveCheckFn.assign = expensiveChecksInterceptor(fn.assign);
- expensiveCheckFn.constant = fn.constant;
- expensiveCheckFn.literal = fn.literal;
- for (var i = 0; fn.inputs && i < fn.inputs.length; ++i) {
- fn.inputs[i] = expensiveChecksInterceptor(fn.inputs[i]);
- }
- expensiveCheckFn.inputs = fn.inputs;
-
- return expensiveCheckFn;
-
- function expensiveCheckFn(scope, locals, assign, inputs) {
- var expensiveCheckOldValue = runningChecksEnabled;
- runningChecksEnabled = true;
- try {
- return fn(scope, locals, assign, inputs);
- } finally {
- runningChecksEnabled = expensiveCheckOldValue;
- }
- }
- }
-
- function expressionInputDirtyCheck(newValue, oldValueOfValue) {
+ function expressionInputDirtyCheck(newValue, oldValueOfValue, compareObjectIdentity) {
if (newValue == null || oldValueOfValue == null) { // null/undefined
return newValue === oldValueOfValue;
@@ -14627,7 +16476,7 @@ function $ParseProvider() {
// be cheaply dirty-checked
newValue = getValueOf(newValue);
- if (typeof newValue === 'object') {
+ if (typeof newValue === 'object' && !compareObjectIdentity) {
// objects/arrays are not supported - deep-watching them would be too expensive
return false;
}
@@ -14636,6 +16485,7 @@ function $ParseProvider() {
}
//Primitive or NaN
+ // eslint-disable-next-line no-self-compare
return newValue === oldValueOfValue || (newValue !== newValue && oldValueOfValue !== oldValueOfValue);
}
@@ -14648,7 +16498,7 @@ function $ParseProvider() {
inputExpressions = inputExpressions[0];
return scope.$watch(function expressionInputWatch(scope) {
var newInputValue = inputExpressions(scope);
- if (!expressionInputDirtyCheck(newInputValue, oldInputValueOf)) {
+ if (!expressionInputDirtyCheck(newInputValue, oldInputValueOf, inputExpressions.isPure)) {
lastResult = parsedExpression(scope, undefined, undefined, [newInputValue]);
oldInputValueOf = newInputValue && getValueOf(newInputValue);
}
@@ -14668,7 +16518,7 @@ function $ParseProvider() {
for (var i = 0, ii = inputExpressions.length; i < ii; i++) {
var newInputValue = inputExpressions[i](scope);
- if (changed || (changed = !expressionInputDirtyCheck(newInputValue, oldInputValueOfValues[i]))) {
+ if (changed || (changed = !expressionInputDirtyCheck(newInputValue, oldInputValueOfValues[i], inputExpressions[i].isPure))) {
oldInputValues[i] = newInputValue;
oldInputValueOfValues[i] = newInputValue && getValueOf(newInputValue);
}
@@ -14682,14 +16532,22 @@ function $ParseProvider() {
}, listener, objectEquality, prettyPrintExpression);
}
- function oneTimeWatchDelegate(scope, listener, objectEquality, parsedExpression) {
+ function oneTimeWatchDelegate(scope, listener, objectEquality, parsedExpression, prettyPrintExpression) {
var unwatch, lastValue;
- return unwatch = scope.$watch(function oneTimeWatch(scope) {
+ if (parsedExpression.inputs) {
+ unwatch = inputsWatchDelegate(scope, oneTimeListener, objectEquality, parsedExpression, prettyPrintExpression);
+ } else {
+ unwatch = scope.$watch(oneTimeWatch, oneTimeListener, objectEquality);
+ }
+ return unwatch;
+
+ function oneTimeWatch(scope) {
return parsedExpression(scope);
- }, function oneTimeListener(value, old, scope) {
+ }
+ function oneTimeListener(value, old, scope) {
lastValue = value;
if (isFunction(listener)) {
- listener.apply(this, arguments);
+ listener(value, old, scope);
}
if (isDefined(value)) {
scope.$$postDigest(function() {
@@ -14698,17 +16556,17 @@ function $ParseProvider() {
}
});
}
- }, objectEquality);
+ }
}
function oneTimeLiteralWatchDelegate(scope, listener, objectEquality, parsedExpression) {
var unwatch, lastValue;
- return unwatch = scope.$watch(function oneTimeWatch(scope) {
+ unwatch = scope.$watch(function oneTimeWatch(scope) {
return parsedExpression(scope);
}, function oneTimeListener(value, old, scope) {
lastValue = value;
if (isFunction(listener)) {
- listener.call(this, value, old, scope);
+ listener(value, old, scope);
}
if (isAllDefined(value)) {
scope.$$postDigest(function() {
@@ -14717,6 +16575,8 @@ function $ParseProvider() {
}
}, objectEquality);
+ return unwatch;
+
function isAllDefined(value) {
var allDefined = true;
forEach(value, function(val) {
@@ -14727,15 +16587,11 @@ function $ParseProvider() {
}
function constantWatchDelegate(scope, listener, objectEquality, parsedExpression) {
- var unwatch;
- return unwatch = scope.$watch(function constantWatch(scope) {
- return parsedExpression(scope);
- }, function constantListener(value, old, scope) {
- if (isFunction(listener)) {
- listener.apply(this, arguments);
- }
+ var unwatch = scope.$watch(function constantWatch(scope) {
unwatch();
- }, objectEquality);
+ return parsedExpression(scope);
+ }, listener, objectEquality);
+ return unwatch;
}
function addInterceptor(parsedExpression, interceptorFn) {
@@ -14759,17 +16615,27 @@ function $ParseProvider() {
};
// Propagate $$watchDelegates other then inputsWatchDelegate
- if (parsedExpression.$$watchDelegate &&
- parsedExpression.$$watchDelegate !== inputsWatchDelegate) {
- fn.$$watchDelegate = parsedExpression.$$watchDelegate;
+ useInputs = !parsedExpression.inputs;
+ if (watchDelegate && watchDelegate !== inputsWatchDelegate) {
+ fn.$$watchDelegate = watchDelegate;
+ fn.inputs = parsedExpression.inputs;
} else if (!interceptorFn.$stateful) {
- // If there is an interceptor, but no watchDelegate then treat the interceptor like
- // we treat filters - it is assumed to be a pure function unless flagged with $stateful
+ // Treat interceptor like filters - assume non-stateful by default and use the inputsWatchDelegate
fn.$$watchDelegate = inputsWatchDelegate;
- useInputs = !parsedExpression.inputs;
fn.inputs = parsedExpression.inputs ? parsedExpression.inputs : [parsedExpression];
}
+ if (fn.inputs) {
+ fn.inputs = fn.inputs.map(function(e) {
+ // Remove the isPure flag of inputs when it is not absolute because they are now wrapped in a
+ // potentially non-pure interceptor function.
+ if (e.isPure === PURITY_RELATIVE) {
+ return function depurifier(s) { return e(s); };
+ }
+ return e;
+ });
+ }
+
return fn;
}
}];
@@ -14784,19 +16650,19 @@ function $ParseProvider() {
* A service that helps you run functions asynchronously, and use their return values (or exceptions)
* when they are done processing.
*
- * This is an implementation of promises/deferred objects inspired by
- * [Kris Kowal's Q](https://github.com/kriskowal/q).
+ * This is a [Promises/A+](https://promisesaplus.com/)-compliant implementation of promises/deferred
+ * objects inspired by [Kris Kowal's Q](https://github.com/kriskowal/q).
*
* $q can be used in two fashions --- one which is more similar to Kris Kowal's Q or jQuery's Deferred
- * implementations, and the other which resembles ES6 promises to some degree.
+ * implementations, and the other which resembles ES6 (ES2015) promises to some degree.
*
* # $q constructor
*
* The streamlined ES6 style promise is essentially just using $q as a constructor which takes a `resolver`
- * function as the first argument. This is similar to the native Promise implementation from ES6 Harmony,
+ * function as the first argument. This is similar to the native Promise implementation from ES6,
* see [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise).
*
- * While the constructor-style use is supported, not all of the supporting methods from ES6 Harmony promises are
+ * While the constructor-style use is supported, not all of the supporting methods from ES6 promises are
* available yet.
*
* It can be used like so:
@@ -14828,7 +16694,7 @@ function $ParseProvider() {
*
* Note: progress/notify callbacks are not currently supported via the ES6-style interface.
*
- * Note: unlike ES6 behaviour, an exception thrown in the constructor function will NOT implicitly reject the promise.
+ * Note: unlike ES6 behavior, an exception thrown in the constructor function will NOT implicitly reject the promise.
*
* However, the more traditional CommonJS-style usage is still available, and documented below.
*
@@ -14910,7 +16776,7 @@ function $ParseProvider() {
*
* **Methods**
*
- * - `then(successCallback, errorCallback, notifyCallback)` – regardless of when the promise was or
+ * - `then(successCallback, [errorCallback], [notifyCallback])` – regardless of when the promise was or
* will be resolved or rejected, `then` calls one of the success or error callbacks asynchronously
* as soon as the result is available. The callbacks are called with a single argument: the result
* or rejection reason. Additionally, the notify callback may be called zero or more times to
@@ -14921,7 +16787,8 @@ function $ParseProvider() {
* with the value which is resolved in that promise using
* [promise chaining](http://www.html5rocks.com/en/tutorials/es6/promises/#toc-promises-queues)).
* It also notifies via the return value of the `notifyCallback` method. The promise cannot be
- * resolved or rejected from the notifyCallback method.
+ * resolved or rejected from the notifyCallback method. The errorCallback and notifyCallback
+ * arguments are optional.
*
* - `catch(errorCallback)` – shorthand for `promise.then(null, errorCallback)`
*
@@ -14961,7 +16828,7 @@ function $ParseProvider() {
* - Q has many more features than $q, but that comes at a cost of bytes. $q is tiny, but contains
* all the important functionality needed for common async tasks.
*
- * # Testing
+ * # Testing
*
* ```js
* it('should simulate promise', inject(function($q, $rootScope) {
@@ -14991,21 +16858,61 @@ function $ParseProvider() {
*
* @returns {Promise} The newly created promise.
*/
+/**
+ * @ngdoc provider
+ * @name $qProvider
+ * @this
+ *
+ * @description
+ */
function $QProvider() {
-
+ var errorOnUnhandledRejections = true;
this.$get = ['$rootScope', '$exceptionHandler', function($rootScope, $exceptionHandler) {
return qFactory(function(callback) {
$rootScope.$evalAsync(callback);
- }, $exceptionHandler);
+ }, $exceptionHandler, errorOnUnhandledRejections);
}];
+
+ /**
+ * @ngdoc method
+ * @name $qProvider#errorOnUnhandledRejections
+ * @kind function
+ *
+ * @description
+ * Retrieves or overrides whether to generate an error when a rejected promise is not handled.
+ * This feature is enabled by default.
+ *
+ * @param {boolean=} value Whether to generate an error when a rejected promise is not handled.
+ * @returns {boolean|ng.$qProvider} Current value when called without a new value or self for
+ * chaining otherwise.
+ */
+ this.errorOnUnhandledRejections = function(value) {
+ if (isDefined(value)) {
+ errorOnUnhandledRejections = value;
+ return this;
+ } else {
+ return errorOnUnhandledRejections;
+ }
+ };
}
+/** @this */
function $$QProvider() {
+ var errorOnUnhandledRejections = true;
this.$get = ['$browser', '$exceptionHandler', function($browser, $exceptionHandler) {
return qFactory(function(callback) {
$browser.defer(callback);
- }, $exceptionHandler);
+ }, $exceptionHandler, errorOnUnhandledRejections);
}];
+
+ this.errorOnUnhandledRejections = function(value) {
+ if (isDefined(value)) {
+ errorOnUnhandledRejections = value;
+ return this;
+ } else {
+ return errorOnUnhandledRejections;
+ }
+ };
}
/**
@@ -15014,22 +16921,14 @@ function $$QProvider() {
* @param {function(function)} nextTick Function for executing functions in the next turn.
* @param {function(...*)} exceptionHandler Function into which unexpected exceptions are passed for
* debugging purposes.
+ * @param {boolean=} errorOnUnhandledRejections Whether an error should be generated on unhandled
+ * promises rejections.
* @returns {object} Promise manager.
*/
-function qFactory(nextTick, exceptionHandler) {
+function qFactory(nextTick, exceptionHandler, errorOnUnhandledRejections) {
var $qMinErr = minErr('$q', TypeError);
- function callOnce(self, resolveFn, rejectFn) {
- var called = false;
- function wrap(fn) {
- return function(value) {
- if (called) return;
- called = true;
- fn.call(self, value);
- };
- }
-
- return [wrap(resolveFn), wrap(rejectFn)];
- }
+ var queueSize = 0;
+ var checkQueue = [];
/**
* @ngdoc method
@@ -15041,9 +16940,18 @@ function qFactory(nextTick, exceptionHandler) {
*
* @returns {Deferred} Returns a new instance of deferred.
*/
- var defer = function() {
+ function defer() {
return new Deferred();
- };
+ }
+
+ function Deferred() {
+ var promise = this.promise = new Promise();
+ //Non prototype methods necessary to support unbound execution :/
+ this.resolve = function(val) { resolvePromise(promise, val); };
+ this.reject = function(reason) { rejectPromise(promise, reason); };
+ this.notify = function(progress) { notifyPromise(promise, progress); };
+ }
+
function Promise() {
this.$$state = { status: 0 };
@@ -15054,137 +16962,162 @@ function qFactory(nextTick, exceptionHandler) {
if (isUndefined(onFulfilled) && isUndefined(onRejected) && isUndefined(progressBack)) {
return this;
}
- var result = new Deferred();
+ var result = new Promise();
this.$$state.pending = this.$$state.pending || [];
this.$$state.pending.push([result, onFulfilled, onRejected, progressBack]);
if (this.$$state.status > 0) scheduleProcessQueue(this.$$state);
- return result.promise;
+ return result;
},
- "catch": function(callback) {
+ 'catch': function(callback) {
return this.then(null, callback);
},
- "finally": function(callback, progressBack) {
+ 'finally': function(callback, progressBack) {
return this.then(function(value) {
- return handleCallback(value, true, callback);
+ return handleCallback(value, resolve, callback);
}, function(error) {
- return handleCallback(error, false, callback);
+ return handleCallback(error, reject, callback);
}, progressBack);
}
});
- //Faster, more basic than angular.bind http://jsperf.com/angular-bind-vs-custom-vs-native
- function simpleBind(context, fn) {
- return function(value) {
- fn.call(context, value);
- };
- }
-
function processQueue(state) {
- var fn, deferred, pending;
+ var fn, promise, pending;
pending = state.pending;
state.processScheduled = false;
state.pending = undefined;
- for (var i = 0, ii = pending.length; i < ii; ++i) {
- deferred = pending[i][0];
- fn = pending[i][state.status];
- try {
- if (isFunction(fn)) {
- deferred.resolve(fn(state.value));
- } else if (state.status === 1) {
- deferred.resolve(state.value);
+ try {
+ for (var i = 0, ii = pending.length; i < ii; ++i) {
+ markQStateExceptionHandled(state);
+ promise = pending[i][0];
+ fn = pending[i][state.status];
+ try {
+ if (isFunction(fn)) {
+ resolvePromise(promise, fn(state.value));
+ } else if (state.status === 1) {
+ resolvePromise(promise, state.value);
+ } else {
+ rejectPromise(promise, state.value);
+ }
+ } catch (e) {
+ rejectPromise(promise, e);
+ }
+ }
+ } finally {
+ --queueSize;
+ if (errorOnUnhandledRejections && queueSize === 0) {
+ nextTick(processChecks);
+ }
+ }
+ }
+
+ function processChecks() {
+ // eslint-disable-next-line no-unmodified-loop-condition
+ while (!queueSize && checkQueue.length) {
+ var toCheck = checkQueue.shift();
+ if (!isStateExceptionHandled(toCheck)) {
+ markQStateExceptionHandled(toCheck);
+ var errorMessage = 'Possibly unhandled rejection: ' + toDebugString(toCheck.value);
+ if (isError(toCheck.value)) {
+ exceptionHandler(toCheck.value, errorMessage);
} else {
- deferred.reject(state.value);
+ exceptionHandler(errorMessage);
}
- } catch (e) {
- deferred.reject(e);
- exceptionHandler(e);
}
}
}
function scheduleProcessQueue(state) {
+ if (errorOnUnhandledRejections && !state.pending && state.status === 2 && !isStateExceptionHandled(state)) {
+ if (queueSize === 0 && checkQueue.length === 0) {
+ nextTick(processChecks);
+ }
+ checkQueue.push(state);
+ }
if (state.processScheduled || !state.pending) return;
state.processScheduled = true;
+ ++queueSize;
nextTick(function() { processQueue(state); });
}
- function Deferred() {
- this.promise = new Promise();
- //Necessary to support unbound execution :/
- this.resolve = simpleBind(this, this.resolve);
- this.reject = simpleBind(this, this.reject);
- this.notify = simpleBind(this, this.notify);
+ function resolvePromise(promise, val) {
+ if (promise.$$state.status) return;
+ if (val === promise) {
+ $$reject(promise, $qMinErr(
+ 'qcycle',
+ 'Expected promise to be resolved with value other than itself \'{0}\'',
+ val));
+ } else {
+ $$resolve(promise, val);
+ }
+
}
- extend(Deferred.prototype, {
- resolve: function(val) {
- if (this.promise.$$state.status) return;
- if (val === this.promise) {
- this.$$reject($qMinErr(
- 'qcycle',
- "Expected promise to be resolved with value other than itself '{0}'",
- val));
+ function $$resolve(promise, val) {
+ var then;
+ var done = false;
+ try {
+ if (isObject(val) || isFunction(val)) then = val.then;
+ if (isFunction(then)) {
+ promise.$$state.status = -1;
+ then.call(val, doResolve, doReject, doNotify);
} else {
- this.$$resolve(val);
+ promise.$$state.value = val;
+ promise.$$state.status = 1;
+ scheduleProcessQueue(promise.$$state);
}
+ } catch (e) {
+ doReject(e);
+ }
- },
-
- $$resolve: function(val) {
- var then, fns;
-
- fns = callOnce(this, this.$$resolve, this.$$reject);
- try {
- if ((isObject(val) || isFunction(val))) then = val && val.then;
- if (isFunction(then)) {
- this.promise.$$state.status = -1;
- then.call(val, fns[0], fns[1], this.notify);
- } else {
- this.promise.$$state.value = val;
- this.promise.$$state.status = 1;
- scheduleProcessQueue(this.promise.$$state);
- }
- } catch (e) {
- fns[1](e);
- exceptionHandler(e);
- }
- },
+ function doResolve(val) {
+ if (done) return;
+ done = true;
+ $$resolve(promise, val);
+ }
+ function doReject(val) {
+ if (done) return;
+ done = true;
+ $$reject(promise, val);
+ }
+ function doNotify(progress) {
+ notifyPromise(promise, progress);
+ }
+ }
- reject: function(reason) {
- if (this.promise.$$state.status) return;
- this.$$reject(reason);
- },
+ function rejectPromise(promise, reason) {
+ if (promise.$$state.status) return;
+ $$reject(promise, reason);
+ }
- $$reject: function(reason) {
- this.promise.$$state.value = reason;
- this.promise.$$state.status = 2;
- scheduleProcessQueue(this.promise.$$state);
- },
+ function $$reject(promise, reason) {
+ promise.$$state.value = reason;
+ promise.$$state.status = 2;
+ scheduleProcessQueue(promise.$$state);
+ }
- notify: function(progress) {
- var callbacks = this.promise.$$state.pending;
+ function notifyPromise(promise, progress) {
+ var callbacks = promise.$$state.pending;
- if ((this.promise.$$state.status <= 0) && callbacks && callbacks.length) {
- nextTick(function() {
- var callback, result;
- for (var i = 0, ii = callbacks.length; i < ii; i++) {
- result = callbacks[i][0];
- callback = callbacks[i][3];
- try {
- result.notify(isFunction(callback) ? callback(progress) : progress);
- } catch (e) {
- exceptionHandler(e);
- }
+ if ((promise.$$state.status <= 0) && callbacks && callbacks.length) {
+ nextTick(function() {
+ var callback, result;
+ for (var i = 0, ii = callbacks.length; i < ii; i++) {
+ result = callbacks[i][0];
+ callback = callbacks[i][3];
+ try {
+ notifyPromise(result, isFunction(callback) ? callback(progress) : progress);
+ } catch (e) {
+ exceptionHandler(e);
}
- });
- }
+ }
+ });
}
- });
+ }
/**
* @ngdoc method
@@ -15222,39 +17155,27 @@ function qFactory(nextTick, exceptionHandler) {
* @param {*} reason Constant, message, exception or an object representing the rejection reason.
* @returns {Promise} Returns a promise that was already resolved as rejected with the `reason`.
*/
- var reject = function(reason) {
- var result = new Deferred();
- result.reject(reason);
- return result.promise;
- };
-
- var makePromise = function makePromise(value, resolved) {
- var result = new Deferred();
- if (resolved) {
- result.resolve(value);
- } else {
- result.reject(value);
- }
- return result.promise;
- };
+ function reject(reason) {
+ var result = new Promise();
+ rejectPromise(result, reason);
+ return result;
+ }
- var handleCallback = function handleCallback(value, isResolved, callback) {
+ function handleCallback(value, resolver, callback) {
var callbackOutput = null;
try {
if (isFunction(callback)) callbackOutput = callback();
} catch (e) {
- return makePromise(e, false);
+ return reject(e);
}
if (isPromiseLike(callbackOutput)) {
return callbackOutput.then(function() {
- return makePromise(value, isResolved);
- }, function(error) {
- return makePromise(error, false);
- });
+ return resolver(value);
+ }, reject);
} else {
- return makePromise(value, isResolved);
+ return resolver(value);
}
- };
+ }
/**
* @ngdoc method
@@ -15274,11 +17195,11 @@ function qFactory(nextTick, exceptionHandler) {
*/
- var when = function(value, callback, errback, progressBack) {
- var result = new Deferred();
- result.resolve(value);
- return result.promise.then(callback, errback, progressBack);
- };
+ function when(value, callback, errback, progressBack) {
+ var result = new Promise();
+ resolvePromise(result, value);
+ return result.then(callback, errback, progressBack);
+ }
/**
* @ngdoc method
@@ -15313,63 +17234,96 @@ function qFactory(nextTick, exceptionHandler) {
*/
function all(promises) {
- var deferred = new Deferred(),
+ var result = new Promise(),
counter = 0,
results = isArray(promises) ? [] : {};
forEach(promises, function(promise, key) {
counter++;
when(promise).then(function(value) {
- if (results.hasOwnProperty(key)) return;
results[key] = value;
- if (!(--counter)) deferred.resolve(results);
+ if (!(--counter)) resolvePromise(result, results);
}, function(reason) {
- if (results.hasOwnProperty(key)) return;
- deferred.reject(reason);
+ rejectPromise(result, reason);
});
});
if (counter === 0) {
- deferred.resolve(results);
+ resolvePromise(result, results);
}
+ return result;
+ }
+
+ /**
+ * @ngdoc method
+ * @name $q#race
+ * @kind function
+ *
+ * @description
+ * Returns a promise that resolves or rejects as soon as one of those promises
+ * resolves or rejects, with the value or reason from that promise.
+ *
+ * @param {Array.<Promise>|Object.<Promise>} promises An array or hash of promises.
+ * @returns {Promise} a promise that resolves or rejects as soon as one of the `promises`
+ * resolves or rejects, with the value or reason from that promise.
+ */
+
+ function race(promises) {
+ var deferred = defer();
+
+ forEach(promises, function(promise) {
+ when(promise).then(deferred.resolve, deferred.reject);
+ });
+
return deferred.promise;
}
- var $Q = function Q(resolver) {
+ function $Q(resolver) {
if (!isFunction(resolver)) {
- throw $qMinErr('norslvr', "Expected resolverFn, got '{0}'", resolver);
+ throw $qMinErr('norslvr', 'Expected resolverFn, got \'{0}\'', resolver);
}
- if (!(this instanceof Q)) {
- // More useful when $Q is the Promise itself.
- return new Q(resolver);
- }
-
- var deferred = new Deferred();
+ var promise = new Promise();
function resolveFn(value) {
- deferred.resolve(value);
+ resolvePromise(promise, value);
}
function rejectFn(reason) {
- deferred.reject(reason);
+ rejectPromise(promise, reason);
}
resolver(resolveFn, rejectFn);
- return deferred.promise;
- };
+ return promise;
+ }
+
+ // Let's make the instanceof operator work for promises, so that
+ // `new $q(fn) instanceof $q` would evaluate to true.
+ $Q.prototype = Promise.prototype;
$Q.defer = defer;
$Q.reject = reject;
$Q.when = when;
$Q.resolve = resolve;
$Q.all = all;
+ $Q.race = race;
return $Q;
}
+function isStateExceptionHandled(state) {
+ return !!state.pur;
+}
+function markQStateExceptionHandled(state) {
+ state.pur = true;
+}
+function markQExceptionHandled(q) {
+ markQStateExceptionHandled(q.$$state);
+}
+
+/** @this */
function $$RAFProvider() { //rAF
this.$get = ['$window', '$timeout', function($window, $timeout) {
var requestAnimationFrame = $window.requestAnimationFrame ||
@@ -15459,6 +17413,8 @@ function $$RAFProvider() { //rAF
/**
* @ngdoc service
* @name $rootScope
+ * @this
+ *
* @description
*
* Every application has a single root {@link ng.$rootScope.Scope scope}.
@@ -15494,8 +17450,8 @@ function $RootScopeProvider() {
return ChildScope;
}
- this.$get = ['$injector', '$exceptionHandler', '$parse', '$browser',
- function($injector, $exceptionHandler, $parse, $browser) {
+ this.$get = ['$exceptionHandler', '$parse', '$browser',
+ function($exceptionHandler, $parse, $browser) {
function destroyChildScope($event) {
$event.currentScope.$$destroyed = true;
@@ -15503,14 +17459,19 @@ function $RootScopeProvider() {
function cleanUpScope($scope) {
+ // Support: IE 9 only
if (msie === 9) {
// There is a memory leak in IE9 if all child scopes are not disconnected
// completely when a scope is destroyed. So this code will recurse up through
// all this scopes children
//
// See issue https://github.com/angular/angular.js/issues/10706
- $scope.$$childHead && cleanUpScope($scope.$$childHead);
- $scope.$$nextSibling && cleanUpScope($scope.$$nextSibling);
+ if ($scope.$$childHead) {
+ cleanUpScope($scope.$$childHead);
+ }
+ if ($scope.$$nextSibling) {
+ cleanUpScope($scope.$$nextSibling);
+ }
}
// The code below works around IE9 and V8's memory leaks
@@ -15662,7 +17623,7 @@ function $RootScopeProvider() {
// prototypically. In all other cases, this property needs to be set
// when the parent scope is destroyed.
// The listener needs to be added after the parent is set
- if (isolate || parent != this) child.$on('$destroy', destroyChildScope);
+ if (isolate || parent !== this) child.$on('$destroy', destroyChildScope);
return child;
},
@@ -15679,7 +17640,7 @@ function $RootScopeProvider() {
* $digest()} and should return the value that will be watched. (`watchExpression` should not change
* its value when executed multiple times with the same input because it may be executed multiple
* times by {@link ng.$rootScope.Scope#$digest $digest()}. That is, `watchExpression` should be
- * [idempotent](http://en.wikipedia.org/wiki/Idempotence).
+ * [idempotent](http://en.wikipedia.org/wiki/Idempotence).)
* - The `listener` is called only when the value from the current `watchExpression` and the
* previous call to `watchExpression` are not equal (with the exception of the initial run,
* see below). Inequality is determined according to reference inequality,
@@ -15690,6 +17651,8 @@ function $RootScopeProvider() {
* according to the {@link angular.equals} function. To save the value of the object for
* later comparison, the {@link angular.copy} function is used. This therefore means that
* watching complex objects will have adverse memory and performance implications.
+ * - This should not be used to watch for changes in objects that are
+ * or contain [File](https://developer.mozilla.org/docs/Web/API/File) objects due to limitations with {@link angular.copy `angular.copy`}.
* - The watch `listener` may change the model, which may trigger other `listener`s to fire.
* This is achieved by rerunning the watchers until no changes are detected. The rerun
* iteration limit is 10 to prevent an infinite loop deadlock.
@@ -15779,7 +17742,7 @@ function $RootScopeProvider() {
* - `newVal` contains the current value of the `watchExpression`
* - `oldVal` contains the previous value of the `watchExpression`
* - `scope` refers to the current scope
- * @param {boolean=} objectEquality Compare for object equality using {@link angular.equals} instead of
+ * @param {boolean=} [objectEquality=false] Compare for object equality using {@link angular.equals} instead of
* comparing for reference equality.
* @returns {function()} Returns a deregistration function for this listener.
*/
@@ -15807,15 +17770,21 @@ function $RootScopeProvider() {
if (!array) {
array = scope.$$watchers = [];
+ array.$$digestWatchIndex = -1;
}
// we use unshift since we use a while loop in $digest for speed.
// the while loop reads in reverse order.
array.unshift(watcher);
+ array.$$digestWatchIndex++;
incrementWatchersCount(this, 1);
return function deregisterWatch() {
- if (arrayRemove(array, watcher) >= 0) {
+ var index = arrayRemove(array, watcher);
+ if (index >= 0) {
incrementWatchersCount(scope, -1);
+ if (index < array.$$digestWatchIndex) {
+ array.$$digestWatchIndex--;
+ }
}
lastDirtyWatch = null;
};
@@ -15830,10 +17799,16 @@ function $RootScopeProvider() {
* A variant of {@link ng.$rootScope.Scope#$watch $watch()} where it watches an array of `watchExpressions`.
* If any one expression in the collection changes the `listener` is executed.
*
- * - The items in the `watchExpressions` array are observed via standard $watch operation and are examined on every
- * call to $digest() to see if any items changes.
+ * - The items in the `watchExpressions` array are observed via the standard `$watch` operation. Their return
+ * values are examined for changes on every call to `$digest`.
* - The `listener` is called whenever any expression in the `watchExpressions` array changes.
*
+ * `$watchGroup` is more performant than watching each expression individually, and should be
+ * used when the listener does not need to know which expression has changed.
+ * If the listener needs to know which expression has changed,
+ * {@link ng.$rootScope.Scope#$watch $watch()} or
+ * {@link ng.$rootScope.Scope#$watchCollection $watchCollection()} should be used.
+ *
* @param {Array.<string|Function(scope)>} watchExpressions Array of expressions that will be individually
* watched using {@link ng.$rootScope.Scope#$watch $watch()}
*
@@ -15842,7 +17817,34 @@ function $RootScopeProvider() {
* The `newValues` array contains the current values of the `watchExpressions`, with the indexes matching
* those of `watchExpression`
* and the `oldValues` array contains the previous values of the `watchExpressions`, with the indexes matching
- * those of `watchExpression`
+ * those of `watchExpression`.
+ *
+ * Note that `newValues` and `oldValues` reflect the differences in each **individual**
+ * expression, and not the difference of the values between each call of the listener.
+ * That means the difference between `newValues` and `oldValues` cannot be used to determine
+ * which expression has changed / remained stable:
+ *
+ * ```js
+ *
+ * $scope.$watchGroup(['v1', 'v2'], function(newValues, oldValues) {
+ * console.log(newValues, oldValues);
+ * });
+ *
+ * // newValues, oldValues initially
+ * // [undefined, undefined], [undefined, undefined]
+ *
+ * $scope.v1 = 'a';
+ * $scope.v2 = 'a';
+ *
+ * // ['a', 'a'], [undefined, undefined]
+ *
+ * $scope.v2 = 'b'
+ *
+ * // v1 hasn't changed since it became `'a'`, therefore its oldValue is still `undefined`
+ * // ['a', 'b'], [undefined, 'a']
+ *
+ * ```
+ *
* The `scope` refers to the current scope.
* @returns {function()} Returns a de-registration function for all listeners.
*/
@@ -16012,6 +18014,7 @@ function $RootScopeProvider() {
oldItem = oldValue[i];
newItem = newValue[i];
+ // eslint-disable-next-line no-self-compare
bothNaN = (oldItem !== oldItem) && (newItem !== newItem);
if (!bothNaN && (oldItem !== newItem)) {
changeDetected++;
@@ -16034,6 +18037,7 @@ function $RootScopeProvider() {
oldItem = oldValue[key];
if (key in oldValue) {
+ // eslint-disable-next-line no-self-compare
bothNaN = (oldItem !== oldItem) && (newItem !== newItem);
if (!bothNaN && (oldItem !== newItem)) {
changeDetected++;
@@ -16146,11 +18150,10 @@ function $RootScopeProvider() {
$digest: function() {
var watch, value, last, fn, get,
watchers,
- length,
dirty, ttl = TTL,
next, current, target = this,
watchLog = [],
- logIdx, logMsg, asyncTask;
+ logIdx, asyncTask;
beginPhase('$digest');
// Check for changes to browser url that happened in sync before the call to $digest
@@ -16169,24 +18172,29 @@ function $RootScopeProvider() {
dirty = false;
current = target;
- while (asyncQueue.length) {
+ // It's safe for asyncQueuePosition to be a local variable here because this loop can't
+ // be reentered recursively. Calling $digest from a function passed to $evalAsync would
+ // lead to a '$digest already in progress' error.
+ for (var asyncQueuePosition = 0; asyncQueuePosition < asyncQueue.length; asyncQueuePosition++) {
try {
- asyncTask = asyncQueue.shift();
- asyncTask.scope.$eval(asyncTask.expression, asyncTask.locals);
+ asyncTask = asyncQueue[asyncQueuePosition];
+ fn = asyncTask.fn;
+ fn(asyncTask.scope, asyncTask.locals);
} catch (e) {
$exceptionHandler(e);
}
lastDirtyWatch = null;
}
+ asyncQueue.length = 0;
traverseScopesLoop:
do { // "traverse the scopes" loop
if ((watchers = current.$$watchers)) {
// process our watches
- length = watchers.length;
- while (length--) {
+ watchers.$$digestWatchIndex = watchers.length;
+ while (watchers.$$digestWatchIndex--) {
try {
- watch = watchers[length];
+ watch = watchers[watchers.$$digestWatchIndex];
// Most common watches are on primitives, in which case we can short
// circuit it with === operator, only when === fails do we use .equals
if (watch) {
@@ -16194,8 +18202,7 @@ function $RootScopeProvider() {
if ((value = get(current)) !== (last = watch.last) &&
!(watch.eq
? equals(value, last)
- : (typeof value === 'number' && typeof last === 'number'
- && isNaN(value) && isNaN(last)))) {
+ : (isNumberNaN(value) && isNumberNaN(last)))) {
dirty = true;
lastDirtyWatch = watch;
watch.last = watch.eq ? copy(value, null) : value;
@@ -16248,13 +18255,19 @@ function $RootScopeProvider() {
clearPhase();
- while (postDigestQueue.length) {
+ // postDigestQueuePosition isn't local here because this loop can be reentered recursively.
+ while (postDigestQueuePosition < postDigestQueue.length) {
try {
- postDigestQueue.shift()();
+ postDigestQueue[postDigestQueuePosition++]();
} catch (e) {
$exceptionHandler(e);
}
}
+ postDigestQueue.length = postDigestQueuePosition = 0;
+
+ // Check for changes to browser url that happened during the $digest
+ // (for which no event is fired; e.g. via `history.pushState()`)
+ $browser.$$checkUrlChange();
},
@@ -16312,8 +18325,8 @@ function $RootScopeProvider() {
// sever all the references to parent scopes (after this cleanup, the current scope should
// not be retained by any of our references and should be eligible for garbage collection)
- if (parent && parent.$$childHead == this) parent.$$childHead = this.$$nextSibling;
- if (parent && parent.$$childTail == this) parent.$$childTail = this.$$prevSibling;
+ if (parent && parent.$$childHead === this) parent.$$childHead = this.$$nextSibling;
+ if (parent && parent.$$childTail === this) parent.$$childTail = this.$$prevSibling;
if (this.$$prevSibling) this.$$prevSibling.$$nextSibling = this.$$nextSibling;
if (this.$$nextSibling) this.$$nextSibling.$$prevSibling = this.$$prevSibling;
@@ -16400,7 +18413,7 @@ function $RootScopeProvider() {
});
}
- asyncQueue.push({scope: this, expression: $parse(expr), locals: locals});
+ asyncQueue.push({scope: this, fn: $parse(expr), locals: locals});
},
$$postDigest: function(fn) {
@@ -16467,6 +18480,7 @@ function $RootScopeProvider() {
$rootScope.$digest();
} catch (e) {
$exceptionHandler(e);
+ // eslint-disable-next-line no-unsafe-finally
throw e;
}
}
@@ -16491,7 +18505,9 @@ function $RootScopeProvider() {
*/
$applyAsync: function(expr) {
var scope = this;
- expr && applyAsyncQueue.push($applyAsyncExpression);
+ if (expr) {
+ applyAsyncQueue.push($applyAsyncExpression);
+ }
expr = $parse(expr);
scheduleApplyAsync();
@@ -16709,6 +18725,8 @@ function $RootScopeProvider() {
var postDigestQueue = $rootScope.$$postDigestQueue = [];
var applyAsyncQueue = $rootScope.$$applyAsyncQueue = [];
+ var postDigestQueuePosition = 0;
+
return $rootScope;
@@ -16783,6 +18801,7 @@ function $RootScopeProvider() {
// the implementation is in angular.bootstrap
/**
+ * @this
* @description
* Private service to sanitize uris for links and images. Used by $compile and $sanitize.
*/
@@ -16863,20 +18882,38 @@ function $$SanitizeUriProvider() {
* Or gives undesired access to variables likes document or window? *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+/* exported $SceProvider, $SceDelegateProvider */
+
var $sceMinErr = minErr('$sce');
var SCE_CONTEXTS = {
+ // HTML is used when there's HTML rendered (e.g. ng-bind-html, iframe srcdoc binding).
HTML: 'html',
+
+ // Style statements or stylesheets. Currently unused in AngularJS.
CSS: 'css',
+
+ // An URL used in a context where it does not refer to a resource that loads code. Currently
+ // unused in AngularJS.
URL: 'url',
- // RESOURCE_URL is a subtype of URL used in contexts where a privileged resource is sourced from a
- // url. (e.g. ng-include, script src, templateUrl)
+
+ // RESOURCE_URL is a subtype of URL used where the referred-to resource could be interpreted as
+ // code. (e.g. ng-include, script src binding, templateUrl)
RESOURCE_URL: 'resourceUrl',
+
+ // Script. Currently unused in AngularJS.
JS: 'js'
};
// Helper functions follow.
+var UNDERSCORE_LOWERCASE_REGEXP = /_([a-z])/g;
+
+function snakeToCamel(name) {
+ return name
+ .replace(UNDERSCORE_LOWERCASE_REGEXP, fnCamelCaseReplace);
+}
+
function adjustMatcher(matcher) {
if (matcher === 'self') {
return matcher;
@@ -16890,8 +18927,8 @@ function adjustMatcher(matcher) {
'Illegal sequence *** in string matcher. String: {0}', matcher);
}
matcher = escapeForRegexp(matcher).
- replace('\\*\\*', '.*').
- replace('\\*', '[^:/.?&;]*');
+ replace(/\\\*\\\*/g, '.*').
+ replace(/\\\*/g, '[^:/.?&;]*');
return new RegExp('^' + matcher + '$');
} else if (isRegExp(matcher)) {
// The only other type of matcher allowed is a Regexp.
@@ -16926,6 +18963,16 @@ function adjustMatchers(matchers) {
* `$sceDelegate` is a service that is used by the `$sce` service to provide {@link ng.$sce Strict
* Contextual Escaping (SCE)} services to AngularJS.
*
+ * For an overview of this service and the functionnality it provides in AngularJS, see the main
+ * page for {@link ng.$sce SCE}. The current page is targeted for developers who need to alter how
+ * SCE works in their application, which shouldn't be needed in most cases.
+ *
+ * <div class="alert alert-danger">
+ * AngularJS strongly relies on contextual escaping for the security of bindings: disabling or
+ * modifying this might cause cross site scripting (XSS) vulnerabilities. For libraries owners,
+ * changes to this service will also influence users, so be extra careful and document your changes.
+ * </div>
+ *
* Typically, you would configure or override the {@link ng.$sceDelegate $sceDelegate} instead of
* the `$sce` service to customize the way Strict Contextual Escaping works in AngularJS. This is
* because, while the `$sce` provides numerous shorthand methods, etc., you really only need to
@@ -16946,13 +18993,19 @@ function adjustMatchers(matchers) {
/**
* @ngdoc provider
* @name $sceDelegateProvider
+ * @this
+ *
* @description
*
* The `$sceDelegateProvider` provider allows developers to configure the {@link ng.$sceDelegate
- * $sceDelegate} service. This allows one to get/set the whitelists and blacklists used to ensure
- * that the URLs used for sourcing Angular templates are safe. Refer {@link
- * ng.$sceDelegateProvider#resourceUrlWhitelist $sceDelegateProvider.resourceUrlWhitelist} and
- * {@link ng.$sceDelegateProvider#resourceUrlBlacklist $sceDelegateProvider.resourceUrlBlacklist}
+ * $sceDelegate service}, used as a delegate for {@link ng.$sce Strict Contextual Escaping (SCE)}.
+ *
+ * The `$sceDelegateProvider` allows one to get/set the whitelists and blacklists used to ensure
+ * that the URLs used for sourcing AngularJS templates and other script-running URLs are safe (all
+ * places that use the `$sce.RESOURCE_URL` context). See
+ * {@link ng.$sceDelegateProvider#resourceUrlWhitelist $sceDelegateProvider.resourceUrlWhitelist}
+ * and
+ * {@link ng.$sceDelegateProvider#resourceUrlBlacklist $sceDelegateProvider.resourceUrlBlacklist},
*
* For the general details about this service in Angular, read the main page for {@link ng.$sce
* Strict Contextual Escaping (SCE)}.
@@ -16981,6 +19034,13 @@ function adjustMatchers(matchers) {
* ]);
* });
* ```
+ * Note that an empty whitelist will block every resource URL from being loaded, and will require
+ * you to manually mark each one as trusted with `$sce.trustAsResourceUrl`. However, templates
+ * requested by {@link ng.$templateRequest $templateRequest} that are present in
+ * {@link ng.$templateCache $templateCache} will not go through this check. If you have a mechanism
+ * to populate your templates in that cache at config time, then it is a good idea to remove 'self'
+ * from that whitelist. This helps to mitigate the security impact of certain types of issues, like
+ * for instance attacker-controlled `ng-includes`.
*/
function $SceDelegateProvider() {
@@ -16996,23 +19056,23 @@ function $SceDelegateProvider() {
* @kind function
*
* @param {Array=} whitelist When provided, replaces the resourceUrlWhitelist with the value
- * provided. This must be an array or null. A snapshot of this array is used so further
- * changes to the array are ignored.
+ * provided. This must be an array or null. A snapshot of this array is used so further
+ * changes to the array are ignored.
+ * Follow {@link ng.$sce#resourceUrlPatternItem this link} for a description of the items
+ * allowed in this array.
*
- * Follow {@link ng.$sce#resourceUrlPatternItem this link} for a description of the items
- * allowed in this array.
+ * @return {Array} The currently set whitelist array.
*
- * <div class="alert alert-warning">
- * **Note:** an empty whitelist array will block all URLs!
- * </div>
- *
- * @return {Array} the currently set whitelist array.
+ * @description
+ * Sets/Gets the whitelist of trusted resource URLs.
*
* The **default value** when no whitelist has been explicitly set is `['self']` allowing only
* same origin resource requests.
*
- * @description
- * Sets/Gets the whitelist of trusted resource URLs.
+ * <div class="alert alert-warning">
+ * **Note:** the default whitelist of 'self' is not recommended if your app shares its origin
+ * with other apps! It is a good idea to limit it to only your application's directory.
+ * </div>
*/
this.resourceUrlWhitelist = function(value) {
if (arguments.length) {
@@ -17027,25 +19087,23 @@ function $SceDelegateProvider() {
* @kind function
*
* @param {Array=} blacklist When provided, replaces the resourceUrlBlacklist with the value
- * provided. This must be an array or null. A snapshot of this array is used so further
- * changes to the array are ignored.
- *
- * Follow {@link ng.$sce#resourceUrlPatternItem this link} for a description of the items
- * allowed in this array.
- *
- * The typical usage for the blacklist is to **block
- * [open redirects](http://cwe.mitre.org/data/definitions/601.html)** served by your domain as
- * these would otherwise be trusted but actually return content from the redirected domain.
+ * provided. This must be an array or null. A snapshot of this array is used so further
+ * changes to the array are ignored.</p><p>
+ * Follow {@link ng.$sce#resourceUrlPatternItem this link} for a description of the items
+ * allowed in this array.</p><p>
+ * The typical usage for the blacklist is to **block
+ * [open redirects](http://cwe.mitre.org/data/definitions/601.html)** served by your domain as
+ * these would otherwise be trusted but actually return content from the redirected domain.
+ * </p><p>
+ * Finally, **the blacklist overrides the whitelist** and has the final say.
+ *
+ * @return {Array} The currently set blacklist array.
*
- * Finally, **the blacklist overrides the whitelist** and has the final say.
- *
- * @return {Array} the currently set blacklist array.
+ * @description
+ * Sets/Gets the blacklist of trusted resource URLs.
*
* The **default value** when no whitelist has been explicitly set is the empty array (i.e. there
* is no blacklist.)
- *
- * @description
- * Sets/Gets the blacklist of trusted resource URLs.
*/
this.resourceUrlBlacklist = function(value) {
@@ -17129,17 +19187,24 @@ function $SceDelegateProvider() {
* @name $sceDelegate#trustAs
*
* @description
- * Returns an object that is trusted by angular for use in specified strict
- * contextual escaping contexts (such as ng-bind-html, ng-include, any src
- * attribute interpolation, any dom event binding attribute interpolation
- * such as for onclick, etc.) that uses the provided value.
- * See {@link ng.$sce $sce} for enabling strict contextual escaping.
+ * Returns a trusted representation of the parameter for the specified context. This trusted
+ * object will later on be used as-is, without any security check, by bindings or directives
+ * that require this security context.
+ * For instance, marking a string as trusted for the `$sce.HTML` context will entirely bypass
+ * the potential `$sanitize` call in corresponding `$sce.HTML` bindings or directives, such as
+ * `ng-bind-html`. Note that in most cases you won't need to call this function: if you have the
+ * sanitizer loaded, passing the value itself will render all the HTML that does not pose a
+ * security risk.
*
- * @param {string} type The kind of context in which this value is safe for use. e.g. url,
- * resourceUrl, html, js and css.
- * @param {*} value The value that that should be considered trusted/safe.
- * @returns {*} A value that can be used to stand in for the provided `value` in places
- * where Angular expects a $sce.trustAs() return value.
+ * See {@link ng.$sceDelegate#getTrusted getTrusted} for the function that will consume those
+ * trusted values, and {@link ng.$sce $sce} for general documentation about strict contextual
+ * escaping.
+ *
+ * @param {string} type The context in which this value is safe for use, e.g. `$sce.URL`,
+ * `$sce.RESOURCE_URL`, `$sce.HTML`, `$sce.JS` or `$sce.CSS`.
+ *
+ * @param {*} value The value that should be considered trusted.
+ * @return {*} A trusted representation of value, that can be used in the given context.
*/
function trustAs(type, trustedValue) {
var Constructor = (byType.hasOwnProperty(type) ? byType[type] : null);
@@ -17171,11 +19236,11 @@ function $SceDelegateProvider() {
* ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}.
*
* If the passed parameter is not a value that had been returned by {@link
- * ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}, returns it as-is.
+ * ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}, it must be returned as-is.
*
* @param {*} value The result of a prior {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}
- * call or anything else.
- * @returns {*} The `value` that was originally provided to {@link ng.$sceDelegate#trustAs
+ * call or anything else.
+ * @return {*} The `value` that was originally provided to {@link ng.$sceDelegate#trustAs
* `$sceDelegate.trustAs`} if `value` is the result of such a call. Otherwise, returns
* `value` unchanged.
*/
@@ -17192,28 +19257,38 @@ function $SceDelegateProvider() {
* @name $sceDelegate#getTrusted
*
* @description
- * Takes the result of a {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`} call and
- * returns the originally supplied value if the queried context type is a supertype of the
- * created type. If this condition isn't satisfied, throws an exception.
+ * Takes any input, and either returns a value that's safe to use in the specified context, or
+ * throws an exception.
*
- * @param {string} type The kind of context in which this value is to be used.
+ * In practice, there are several cases. When given a string, this function runs checks
+ * and sanitization to make it safe without prior assumptions. When given the result of a {@link
+ * ng.$sceDelegate#trustAs `$sceDelegate.trustAs`} call, it returns the originally supplied
+ * value if that value's context is valid for this call's context. Finally, this function can
+ * also throw when there is no way to turn `maybeTrusted` in a safe value (e.g., no sanitization
+ * is available or possible.)
+ *
+ * @param {string} type The context in which this value is to be used (such as `$sce.HTML`).
* @param {*} maybeTrusted The result of a prior {@link ng.$sceDelegate#trustAs
- * `$sceDelegate.trustAs`} call.
- * @returns {*} The value the was originally provided to {@link ng.$sceDelegate#trustAs
- * `$sceDelegate.trustAs`} if valid in this context. Otherwise, throws an exception.
+ * `$sceDelegate.trustAs`} call, or anything else (which will not be considered trusted.)
+ * @return {*} A version of the value that's safe to use in the given context, or throws an
+ * exception if this is impossible.
*/
function getTrusted(type, maybeTrusted) {
if (maybeTrusted === null || isUndefined(maybeTrusted) || maybeTrusted === '') {
return maybeTrusted;
}
var constructor = (byType.hasOwnProperty(type) ? byType[type] : null);
+ // If maybeTrusted is a trusted class instance or subclass instance, then unwrap and return
+ // as-is.
if (constructor && maybeTrusted instanceof constructor) {
return maybeTrusted.$$unwrapTrustedValue();
}
- // If we get here, then we may only take one of two actions.
- // 1. sanitize the value for the requested type, or
- // 2. throw an exception.
+ // Otherwise, if we get here, then we may either make it safe, or throw an exception. This
+ // depends on the context: some are sanitizatible (HTML), some use whitelists (RESOURCE_URL),
+ // some are impossible to do (JS). This step isn't implemented for CSS and URL, as AngularJS
+ // has no corresponding sinks.
if (type === SCE_CONTEXTS.RESOURCE_URL) {
+ // RESOURCE_URL uses a whitelist.
if (isResourceUrlAllowedByPolicy(maybeTrusted)) {
return maybeTrusted;
} else {
@@ -17222,8 +19297,10 @@ function $SceDelegateProvider() {
maybeTrusted.toString());
}
} else if (type === SCE_CONTEXTS.HTML) {
+ // htmlSanitizer throws its own error when no sanitizer is available.
return htmlSanitizer(maybeTrusted);
}
+ // Default error when the $sce service has no way to make the input safe.
throw $sceMinErr('unsafe', 'Attempting to use an unsafe value in a safe context.');
}
@@ -17237,6 +19314,8 @@ function $SceDelegateProvider() {
/**
* @ngdoc provider
* @name $sceProvider
+ * @this
+ *
* @description
*
* The $sceProvider provider allows developers to configure the {@link ng.$sce $sce} service.
@@ -17246,8 +19325,6 @@ function $SceDelegateProvider() {
* Read more about {@link ng.$sce Strict Contextual Escaping (SCE)}.
*/
-/* jshint maxlen: false*/
-
/**
* @ngdoc service
* @name $sce
@@ -17259,21 +19336,27 @@ function $SceDelegateProvider() {
*
* # Strict Contextual Escaping
*
- * Strict Contextual Escaping (SCE) is a mode in which AngularJS requires bindings in certain
- * contexts to result in a value that is marked as safe to use for that context. One example of
- * such a context is binding arbitrary html controlled by the user via `ng-bind-html`. We refer
- * to these contexts as privileged or SCE contexts.
+ * Strict Contextual Escaping (SCE) is a mode in which AngularJS constrains bindings to only render
+ * trusted values. Its goal is to assist in writing code in a way that (a) is secure by default, and
+ * (b) makes auditing for security vulnerabilities such as XSS, clickjacking, etc. a lot easier.
*
- * As of version 1.2, Angular ships with SCE enabled by default.
+ * ## Overview
*
- * Note: When enabled (the default), IE<11 in quirks mode is not supported. In this mode, IE<11 allow
- * one to execute arbitrary javascript by the use of the expression() syntax. Refer
- * <http://blogs.msdn.com/b/ie/archive/2008/10/16/ending-expressions.aspx> to learn more about them.
- * You can ensure your document is in standards mode and not quirks mode by adding `<!doctype html>`
- * to the top of your HTML document.
+ * To systematically block XSS security bugs, AngularJS treats all values as untrusted by default in
+ * HTML or sensitive URL bindings. When binding untrusted values, AngularJS will automatically
+ * run security checks on them (sanitizations, whitelists, depending on context), or throw when it
+ * cannot guarantee the security of the result. That behavior depends strongly on contexts: HTML
+ * can be sanitized, but template URLs cannot, for instance.
*
- * SCE assists in writing code in way that (a) is secure by default and (b) makes auditing for
- * security vulnerabilities such as XSS, clickjacking, etc. a lot easier.
+ * To illustrate this, consider the `ng-bind-html` directive. It renders its value directly as HTML:
+ * we call that the *context*. When given an untrusted input, AngularJS will attempt to sanitize it
+ * before rendering if a sanitizer is available, and throw otherwise. To bypass sanitization and
+ * render the input as-is, you will need to mark it as trusted for that context before attempting
+ * to bind it.
+ *
+ * As of version 1.2, AngularJS ships with SCE enabled by default.
+ *
+ * ## In practice
*
* Here's an example of a binding in a privileged context:
*
@@ -17283,10 +19366,10 @@ function $SceDelegateProvider() {
* ```
*
* Notice that `ng-bind-html` is bound to `userHtml` controlled by the user. With SCE
- * disabled, this application allows the user to render arbitrary HTML into the DIV.
- * In a more realistic example, one may be rendering user comments, blog articles, etc. via
- * bindings. (HTML is just one example of a context where rendering user controlled input creates
- * security vulnerabilities.)
+ * disabled, this application allows the user to render arbitrary HTML into the DIV, which would
+ * be an XSS security bug. In a more realistic example, one may be rendering user comments, blog
+ * articles, etc. via bindings. (HTML is just one example of a context where rendering user
+ * controlled input creates security vulnerabilities.)
*
* For the case of HTML, you might use a library, either on the client side, or on the server side,
* to sanitize unsafe HTML before binding to the value and rendering it in the document.
@@ -17296,25 +19379,29 @@ function $SceDelegateProvider() {
* ensure that you didn't accidentally delete the line that sanitized the value, or renamed some
* properties/fields and forgot to update the binding to the sanitized value?
*
- * To be secure by default, you want to ensure that any such bindings are disallowed unless you can
- * determine that something explicitly says it's safe to use a value for binding in that
- * context. You can then audit your code (a simple grep would do) to ensure that this is only done
- * for those values that you can easily tell are safe - because they were received from your server,
- * sanitized by your library, etc. You can organize your codebase to help with this - perhaps
- * allowing only the files in a specific directory to do this. Ensuring that the internal API
- * exposed by that code doesn't markup arbitrary values as safe then becomes a more manageable task.
+ * To be secure by default, AngularJS makes sure bindings go through that sanitization, or
+ * any similar validation process, unless there's a good reason to trust the given value in this
+ * context. That trust is formalized with a function call. This means that as a developer, you
+ * can assume all untrusted bindings are safe. Then, to audit your code for binding security issues,
+ * you just need to ensure the values you mark as trusted indeed are safe - because they were
+ * received from your server, sanitized by your library, etc. You can organize your codebase to
+ * help with this - perhaps allowing only the files in a specific directory to do this.
+ * Ensuring that the internal API exposed by that code doesn't markup arbitrary values as safe then
+ * becomes a more manageable task.
*
* In the case of AngularJS' SCE service, one uses {@link ng.$sce#trustAs $sce.trustAs}
* (and shorthand methods such as {@link ng.$sce#trustAsHtml $sce.trustAsHtml}, etc.) to
- * obtain values that will be accepted by SCE / privileged contexts.
- *
+ * build the trusted versions of your values.
*
* ## How does it work?
*
* In privileged contexts, directives and code will bind to the result of {@link ng.$sce#getTrusted
- * $sce.getTrusted(context, value)} rather than to the value directly. Directives use {@link
- * ng.$sce#parseAs $sce.parseAs} rather than `$parse` to watch attribute bindings, which performs the
- * {@link ng.$sce#getTrusted $sce.getTrusted} behind the scenes on non-constant literals.
+ * $sce.getTrusted(context, value)} rather than to the value directly. Think of this function as
+ * a way to enforce the required security context in your data sink. Directives use {@link
+ * ng.$sce#parseAs $sce.parseAs} rather than `$parse` to watch attribute bindings, which performs
+ * the {@link ng.$sce#getTrusted $sce.getTrusted} behind the scenes on non-constant literals. Also,
+ * when binding without directives, AngularJS will understand the context of your bindings
+ * automatically.
*
* As an example, {@link ng.directive:ngBindHtml ngBindHtml} uses {@link
* ng.$sce#parseAsHtml $sce.parseAsHtml(binding expression)}. Here's the actual code (slightly
@@ -17355,11 +19442,12 @@ function $SceDelegateProvider() {
* It's important to remember that SCE only applies to interpolation expressions.
*
* If your expressions are constant literals, they're automatically trusted and you don't need to
- * call `$sce.trustAs` on them (remember to include the `ngSanitize` module) (e.g.
- * `<div ng-bind-html="'<b>implicitly trusted</b>'"></div>`) just works.
- *
- * Additionally, `a[href]` and `img[src]` automatically sanitize their URLs and do not pass them
- * through {@link ng.$sce#getTrusted $sce.getTrusted}. SCE doesn't play a role here.
+ * call `$sce.trustAs` on them (e.g.
+ * `<div ng-bind-html="'<b>implicitly trusted</b>'"></div>`) just works. The `$sceDelegate` will
+ * also use the `$sanitize` service if it is available when binding untrusted values to
+ * `$sce.HTML` context. AngularJS provides an implementation in `angular-sanitize.js`, and if you
+ * wish to use it, you will also need to depend on the {@link ngSanitize `ngSanitize`} module in
+ * your application.
*
* The included {@link ng.$sceDelegate $sceDelegate} comes with sane defaults to allow you to load
* templates in `ng-include` from your application's domain without having to even know about SCE.
@@ -17377,11 +19465,17 @@ function $SceDelegateProvider() {
*
* | Context | Notes |
* |---------------------|----------------|
- * | `$sce.HTML` | For HTML that's safe to source into the application. The {@link ng.directive:ngBindHtml ngBindHtml} directive uses this context for bindings. If an unsafe value is encountered and the {@link ngSanitize $sanitize} module is present this will sanitize the value instead of throwing an error. |
- * | `$sce.CSS` | For CSS that's safe to source into the application. Currently unused. Feel free to use it in your own directives. |
- * | `$sce.URL` | For URLs that are safe to follow as links. Currently unused (`<a href=` and `<img src=` sanitize their urls and don't constitute an SCE context. |
- * | `$sce.RESOURCE_URL` | For URLs that are not only safe to follow as links, but whose contents are also safe to include in your application. Examples include `ng-include`, `src` / `ngSrc` bindings for tags other than `IMG` (e.g. `IFRAME`, `OBJECT`, etc.) <br><br>Note that `$sce.RESOURCE_URL` makes a stronger statement about the URL than `$sce.URL` does and therefore contexts requiring values trusted for `$sce.RESOURCE_URL` can be used anywhere that values trusted for `$sce.URL` are required. |
- * | `$sce.JS` | For JavaScript that is safe to execute in your application's context. Currently unused. Feel free to use it in your own directives. |
+ * | `$sce.HTML` | For HTML that's safe to source into the application. The {@link ng.directive:ngBindHtml ngBindHtml} directive uses this context for bindings. If an unsafe value is encountered, and the {@link ngSanitize.$sanitize $sanitize} service is available (implemented by the {@link ngSanitize ngSanitize} module) this will sanitize the value instead of throwing an error. |
+ * | `$sce.CSS` | For CSS that's safe to source into the application. Currently, no bindings require this context. Feel free to use it in your own directives. |
+ * | `$sce.URL` | For URLs that are safe to follow as links. Currently unused (`<a href=`, `<img src=`, and some others sanitize their urls and don't constitute an SCE context.) |
+ * | `$sce.RESOURCE_URL` | For URLs that are not only safe to follow as links, but whose contents are also safe to include in your application. Examples include `ng-include`, `src` / `ngSrc` bindings for tags other than `IMG`, `VIDEO`, `AUDIO`, `SOURCE`, and `TRACK` (e.g. `IFRAME`, `OBJECT`, etc.) <br><br>Note that `$sce.RESOURCE_URL` makes a stronger statement about the URL than `$sce.URL` does (it's not just the URL that matters, but also what is at the end of it), and therefore contexts requiring values trusted for `$sce.RESOURCE_URL` can be used anywhere that values trusted for `$sce.URL` are required. |
+ * | `$sce.JS` | For JavaScript that is safe to execute in your application's context. Currently, no bindings require this context. Feel free to use it in your own directives. |
+ *
+ *
+ * Be aware that `a[href]` and `img[src]` automatically sanitize their URLs and do not pass them
+ * through {@link ng.$sce#getTrusted $sce.getTrusted}. There's no CSS-, URL-, or JS-context bindings
+ * in AngularJS currently, so their corresponding `$sce.trustAs` functions aren't useful yet. This
+ * might evolve.
*
* ## Format of items in {@link ng.$sceDelegateProvider#resourceUrlWhitelist resourceUrlWhitelist}/{@link ng.$sceDelegateProvider#resourceUrlBlacklist Blacklist} <a name="resourceUrlPatternItem"></a>
*
@@ -17432,7 +19526,7 @@ function $SceDelegateProvider() {
*
* ## Show me an example using SCE.
*
- * <example module="mySceApp" deps="angular-sanitize.js">
+ * <example module="mySceApp" deps="angular-sanitize.js" name="sce-service">
* <file name="index.html">
* <div ng-controller="AppController as myCtrl">
* <i ng-bind-html="myCtrl.explicitlyTrustedHtml" id="explicitlyTrustedHtml"></i><br><br>
@@ -17453,10 +19547,10 @@ function $SceDelegateProvider() {
* <file name="script.js">
* angular.module('mySceApp', ['ngSanitize'])
* .controller('AppController', ['$http', '$templateCache', '$sce',
- * function($http, $templateCache, $sce) {
+ * function AppController($http, $templateCache, $sce) {
* var self = this;
- * $http.get("test_data.json", {cache: $templateCache}).success(function(userComments) {
- * self.userComments = userComments;
+ * $http.get('test_data.json', {cache: $templateCache}).then(function(response) {
+ * self.userComments = response.data;
* });
* self.explicitlyTrustedHtml = $sce.trustAsHtml(
* '<span onmouseover="this.textContent=&quot;Explicitly trusted HTML bypasses ' +
@@ -17479,12 +19573,12 @@ function $SceDelegateProvider() {
* <file name="protractor.js" type="protractor">
* describe('SCE doc demo', function() {
* it('should sanitize untrusted values', function() {
- * expect(element.all(by.css('.htmlComment')).first().getInnerHtml())
+ * expect(element.all(by.css('.htmlComment')).first().getAttribute('innerHTML'))
* .toBe('<span>Is <i>anyone</i> reading this?</span>');
* });
*
* it('should NOT sanitize explicitly trusted values', function() {
- * expect(element(by.id('explicitlyTrustedHtml')).getInnerHtml()).toBe(
+ * expect(element(by.id('explicitlyTrustedHtml')).getAttribute('innerHTML')).toBe(
* '<span onmouseover="this.textContent=&quot;Explicitly trusted HTML bypasses ' +
* 'sanitization.&quot;">Hover over this text.</span>');
* });
@@ -17500,20 +19594,20 @@ function $SceDelegateProvider() {
* for little coding overhead. It will be much harder to take an SCE disabled application and
* either secure it on your own or enable SCE at a later stage. It might make sense to disable SCE
* for cases where you have a lot of existing code that was written before SCE was introduced and
- * you're migrating them a module at a time.
+ * you're migrating them a module at a time. Also do note that this is an app-wide setting, so if
+ * you are writing a library, you will cause security bugs applications using it.
*
* That said, here's how you can completely disable SCE:
*
* ```
* angular.module('myAppWithSceDisabledmyApp', []).config(function($sceProvider) {
* // Completely disable SCE. For demonstration purposes only!
- * // Do not use in new projects.
+ * // Do not use in new projects or libraries.
* $sceProvider.enabled(false);
* });
* ```
*
*/
-/* jshint maxlen: 100 */
function $SceProvider() {
var enabled = true;
@@ -17523,8 +19617,8 @@ function $SceProvider() {
* @name $sceProvider#enabled
* @kind function
*
- * @param {boolean=} value If provided, then enables/disables SCE.
- * @return {boolean} true if SCE is enabled, false otherwise.
+ * @param {boolean=} value If provided, then enables/disables SCE application-wide.
+ * @return {boolean} True if SCE is enabled, false otherwise.
*
* @description
* Enables/disables SCE and returns the current value.
@@ -17578,13 +19672,14 @@ function $SceProvider() {
* getTrusted($sce.RESOURCE_URL, value) succeeding implies that getTrusted($sce.URL, value)
* will also succeed.
*
- * Inheritance happens to capture this in a natural way. In some future, we
- * may not use inheritance anymore. That is OK because no code outside of
- * sce.js and sceSpecs.js would need to be aware of this detail.
+ * Inheritance happens to capture this in a natural way. In some future, we may not use
+ * inheritance anymore. That is OK because no code outside of sce.js and sceSpecs.js would need to
+ * be aware of this detail.
*/
this.$get = ['$parse', '$sceDelegate', function(
$parse, $sceDelegate) {
+ // Support: IE 9-11 only
// Prereq: Ensure that we're not running in IE<11 quirks mode. In that mode, IE < 11 allow
// the "expression(javascript expression)" syntax which is insecure.
if (enabled && msie < 8) {
@@ -17601,8 +19696,8 @@ function $SceProvider() {
* @name $sce#isEnabled
* @kind function
*
- * @return {Boolean} true if SCE is enabled, false otherwise. If you want to set the value, you
- * have to do it at module config time on {@link ng.$sceProvider $sceProvider}.
+ * @return {Boolean} True if SCE is enabled, false otherwise. If you want to set the value, you
+ * have to do it at module config time on {@link ng.$sceProvider $sceProvider}.
*
* @description
* Returns a boolean indicating if SCE is enabled.
@@ -17629,14 +19724,14 @@ function $SceProvider() {
* wraps the expression in a call to {@link ng.$sce#getTrusted $sce.getTrusted(*type*,
* *result*)}
*
- * @param {string} type The kind of SCE context in which this result will be used.
+ * @param {string} type The SCE context in which this result will be used.
* @param {string} expression String expression to compile.
- * @returns {function(context, locals)} a function which represents the compiled expression:
+ * @return {function(context, locals)} A function which represents the compiled expression:
*
- * * `context` – `{object}` – an object against which any expressions embedded in the strings
- * are evaluated against (typically a scope object).
- * * `locals` – `{object=}` – local variables context object, useful for overriding values in
- * `context`.
+ * * `context` – `{object}` – an object against which any expressions embedded in the
+ * strings are evaluated against (typically a scope object).
+ * * `locals` – `{object=}` – local variables context object, useful for overriding values
+ * in `context`.
*/
sce.parseAs = function sceParseAs(type, expr) {
var parsed = $parse(expr);
@@ -17654,18 +19749,18 @@ function $SceProvider() {
* @name $sce#trustAs
*
* @description
- * Delegates to {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}. As such,
- * returns an object that is trusted by angular for use in specified strict contextual
- * escaping contexts (such as ng-bind-html, ng-include, any src attribute
- * interpolation, any dom event binding attribute interpolation such as for onclick, etc.)
- * that uses the provided value. See * {@link ng.$sce $sce} for enabling strict contextual
- * escaping.
+ * Delegates to {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}. As such, returns a
+ * wrapped object that represents your value, and the trust you have in its safety for the given
+ * context. AngularJS can then use that value as-is in bindings of the specified secure context.
+ * This is used in bindings for `ng-bind-html`, `ng-include`, and most `src` attribute
+ * interpolations. See {@link ng.$sce $sce} for strict contextual escaping.
+ *
+ * @param {string} type The context in which this value is safe for use, e.g. `$sce.URL`,
+ * `$sce.RESOURCE_URL`, `$sce.HTML`, `$sce.JS` or `$sce.CSS`.
*
- * @param {string} type The kind of context in which this value is safe for use. e.g. url,
- * resourceUrl, html, js and css.
- * @param {*} value The value that that should be considered trusted/safe.
- * @returns {*} A value that can be used to stand in for the provided `value` in places
- * where Angular expects a $sce.trustAs() return value.
+ * @param {*} value The value that that should be considered trusted.
+ * @return {*} A wrapped version of value that can be used as a trusted variant of your `value`
+ * in the context you specified.
*/
/**
@@ -17676,11 +19771,23 @@ function $SceProvider() {
* Shorthand method. `$sce.trustAsHtml(value)` →
* {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.HTML, value)`}
*
- * @param {*} value The value to trustAs.
- * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedHtml
- * $sce.getTrustedHtml(value)} to obtain the original value. (privileged directives
- * only accept expressions that are either literal constants or are the
- * return value of {@link ng.$sce#trustAs $sce.trustAs}.)
+ * @param {*} value The value to mark as trusted for `$sce.HTML` context.
+ * @return {*} A wrapped version of value that can be used as a trusted variant of your `value`
+ * in `$sce.HTML` context (like `ng-bind-html`).
+ */
+
+ /**
+ * @ngdoc method
+ * @name $sce#trustAsCss
+ *
+ * @description
+ * Shorthand method. `$sce.trustAsCss(value)` →
+ * {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.CSS, value)`}
+ *
+ * @param {*} value The value to mark as trusted for `$sce.CSS` context.
+ * @return {*} A wrapped version of value that can be used as a trusted variant
+ * of your `value` in `$sce.CSS` context. This context is currently unused, so there are
+ * almost no reasons to use this function so far.
*/
/**
@@ -17691,11 +19798,10 @@ function $SceProvider() {
* Shorthand method. `$sce.trustAsUrl(value)` →
* {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.URL, value)`}
*
- * @param {*} value The value to trustAs.
- * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedUrl
- * $sce.getTrustedUrl(value)} to obtain the original value. (privileged directives
- * only accept expressions that are either literal constants or are the
- * return value of {@link ng.$sce#trustAs $sce.trustAs}.)
+ * @param {*} value The value to mark as trusted for `$sce.URL` context.
+ * @return {*} A wrapped version of value that can be used as a trusted variant of your `value`
+ * in `$sce.URL` context. That context is currently unused, so there are almost no reasons
+ * to use this function so far.
*/
/**
@@ -17706,11 +19812,10 @@ function $SceProvider() {
* Shorthand method. `$sce.trustAsResourceUrl(value)` →
* {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.RESOURCE_URL, value)`}
*
- * @param {*} value The value to trustAs.
- * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedResourceUrl
- * $sce.getTrustedResourceUrl(value)} to obtain the original value. (privileged directives
- * only accept expressions that are either literal constants or are the return
- * value of {@link ng.$sce#trustAs $sce.trustAs}.)
+ * @param {*} value The value to mark as trusted for `$sce.RESOURCE_URL` context.
+ * @return {*} A wrapped version of value that can be used as a trusted variant of your `value`
+ * in `$sce.RESOURCE_URL` context (template URLs in `ng-include`, most `src` attribute
+ * bindings, ...)
*/
/**
@@ -17721,11 +19826,10 @@ function $SceProvider() {
* Shorthand method. `$sce.trustAsJs(value)` →
* {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.JS, value)`}
*
- * @param {*} value The value to trustAs.
- * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedJs
- * $sce.getTrustedJs(value)} to obtain the original value. (privileged directives
- * only accept expressions that are either literal constants or are the
- * return value of {@link ng.$sce#trustAs $sce.trustAs}.)
+ * @param {*} value The value to mark as trusted for `$sce.JS` context.
+ * @return {*} A wrapped version of value that can be used as a trusted variant of your `value`
+ * in `$sce.JS` context. That context is currently unused, so there are almost no reasons to
+ * use this function so far.
*/
/**
@@ -17734,16 +19838,17 @@ function $SceProvider() {
*
* @description
* Delegates to {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted`}. As such,
- * takes the result of a {@link ng.$sce#trustAs `$sce.trustAs`}() call and returns the
- * originally supplied value if the queried context type is a supertype of the created type.
- * If this condition isn't satisfied, throws an exception.
+ * takes any input, and either returns a value that's safe to use in the specified context,
+ * or throws an exception. This function is aware of trusted values created by the `trustAs`
+ * function and its shorthands, and when contexts are appropriate, returns the unwrapped value
+ * as-is. Finally, this function can also throw when there is no way to turn `maybeTrusted` in a
+ * safe value (e.g., no sanitization is available or possible.)
*
- * @param {string} type The kind of context in which this value is to be used.
- * @param {*} maybeTrusted The result of a prior {@link ng.$sce#trustAs `$sce.trustAs`}
- * call.
- * @returns {*} The value the was originally provided to
- * {@link ng.$sce#trustAs `$sce.trustAs`} if valid in this context.
- * Otherwise, throws an exception.
+ * @param {string} type The context in which this value is to be used.
+ * @param {*} maybeTrusted The result of a prior {@link ng.$sce#trustAs
+ * `$sce.trustAs`} call, or anything else (which will not be considered trusted.)
+ * @return {*} A version of the value that's safe to use in the given context, or throws an
+ * exception if this is impossible.
*/
/**
@@ -17755,7 +19860,7 @@ function $SceProvider() {
* {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.HTML, value)`}
*
* @param {*} value The value to pass to `$sce.getTrusted`.
- * @returns {*} The return value of `$sce.getTrusted($sce.HTML, value)`
+ * @return {*} The return value of `$sce.getTrusted($sce.HTML, value)`
*/
/**
@@ -17767,7 +19872,7 @@ function $SceProvider() {
* {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.CSS, value)`}
*
* @param {*} value The value to pass to `$sce.getTrusted`.
- * @returns {*} The return value of `$sce.getTrusted($sce.CSS, value)`
+ * @return {*} The return value of `$sce.getTrusted($sce.CSS, value)`
*/
/**
@@ -17779,7 +19884,7 @@ function $SceProvider() {
* {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.URL, value)`}
*
* @param {*} value The value to pass to `$sce.getTrusted`.
- * @returns {*} The return value of `$sce.getTrusted($sce.URL, value)`
+ * @return {*} The return value of `$sce.getTrusted($sce.URL, value)`
*/
/**
@@ -17791,7 +19896,7 @@ function $SceProvider() {
* {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.RESOURCE_URL, value)`}
*
* @param {*} value The value to pass to `$sceDelegate.getTrusted`.
- * @returns {*} The return value of `$sce.getTrusted($sce.RESOURCE_URL, value)`
+ * @return {*} The return value of `$sce.getTrusted($sce.RESOURCE_URL, value)`
*/
/**
@@ -17803,7 +19908,7 @@ function $SceProvider() {
* {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.JS, value)`}
*
* @param {*} value The value to pass to `$sce.getTrusted`.
- * @returns {*} The return value of `$sce.getTrusted($sce.JS, value)`
+ * @return {*} The return value of `$sce.getTrusted($sce.JS, value)`
*/
/**
@@ -17815,12 +19920,12 @@ function $SceProvider() {
* {@link ng.$sce#parseAs `$sce.parseAs($sce.HTML, value)`}
*
* @param {string} expression String expression to compile.
- * @returns {function(context, locals)} a function which represents the compiled expression:
+ * @return {function(context, locals)} A function which represents the compiled expression:
*
- * * `context` – `{object}` – an object against which any expressions embedded in the strings
- * are evaluated against (typically a scope object).
- * * `locals` – `{object=}` – local variables context object, useful for overriding values in
- * `context`.
+ * * `context` – `{object}` – an object against which any expressions embedded in the
+ * strings are evaluated against (typically a scope object).
+ * * `locals` – `{object=}` – local variables context object, useful for overriding values
+ * in `context`.
*/
/**
@@ -17832,12 +19937,12 @@ function $SceProvider() {
* {@link ng.$sce#parseAs `$sce.parseAs($sce.CSS, value)`}
*
* @param {string} expression String expression to compile.
- * @returns {function(context, locals)} a function which represents the compiled expression:
+ * @return {function(context, locals)} A function which represents the compiled expression:
*
- * * `context` – `{object}` – an object against which any expressions embedded in the strings
- * are evaluated against (typically a scope object).
- * * `locals` – `{object=}` – local variables context object, useful for overriding values in
- * `context`.
+ * * `context` – `{object}` – an object against which any expressions embedded in the
+ * strings are evaluated against (typically a scope object).
+ * * `locals` – `{object=}` – local variables context object, useful for overriding values
+ * in `context`.
*/
/**
@@ -17849,12 +19954,12 @@ function $SceProvider() {
* {@link ng.$sce#parseAs `$sce.parseAs($sce.URL, value)`}
*
* @param {string} expression String expression to compile.
- * @returns {function(context, locals)} a function which represents the compiled expression:
+ * @return {function(context, locals)} A function which represents the compiled expression:
*
- * * `context` – `{object}` – an object against which any expressions embedded in the strings
- * are evaluated against (typically a scope object).
- * * `locals` – `{object=}` – local variables context object, useful for overriding values in
- * `context`.
+ * * `context` – `{object}` – an object against which any expressions embedded in the
+ * strings are evaluated against (typically a scope object).
+ * * `locals` – `{object=}` – local variables context object, useful for overriding values
+ * in `context`.
*/
/**
@@ -17866,12 +19971,12 @@ function $SceProvider() {
* {@link ng.$sce#parseAs `$sce.parseAs($sce.RESOURCE_URL, value)`}
*
* @param {string} expression String expression to compile.
- * @returns {function(context, locals)} a function which represents the compiled expression:
+ * @return {function(context, locals)} A function which represents the compiled expression:
*
- * * `context` – `{object}` – an object against which any expressions embedded in the strings
- * are evaluated against (typically a scope object).
- * * `locals` – `{object=}` – local variables context object, useful for overriding values in
- * `context`.
+ * * `context` – `{object}` – an object against which any expressions embedded in the
+ * strings are evaluated against (typically a scope object).
+ * * `locals` – `{object=}` – local variables context object, useful for overriding values
+ * in `context`.
*/
/**
@@ -17883,12 +19988,12 @@ function $SceProvider() {
* {@link ng.$sce#parseAs `$sce.parseAs($sce.JS, value)`}
*
* @param {string} expression String expression to compile.
- * @returns {function(context, locals)} a function which represents the compiled expression:
+ * @return {function(context, locals)} A function which represents the compiled expression:
*
- * * `context` – `{object}` – an object against which any expressions embedded in the strings
- * are evaluated against (typically a scope object).
- * * `locals` – `{object=}` – local variables context object, useful for overriding values in
- * `context`.
+ * * `context` – `{object}` – an object against which any expressions embedded in the
+ * strings are evaluated against (typically a scope object).
+ * * `locals` – `{object=}` – local variables context object, useful for overriding values
+ * in `context`.
*/
// Shorthand delegations.
@@ -17898,13 +20003,13 @@ function $SceProvider() {
forEach(SCE_CONTEXTS, function(enumValue, name) {
var lName = lowercase(name);
- sce[camelCase("parse_as_" + lName)] = function(expr) {
+ sce[snakeToCamel('parse_as_' + lName)] = function(expr) {
return parse(enumValue, expr);
};
- sce[camelCase("get_trusted_" + lName)] = function(value) {
+ sce[snakeToCamel('get_trusted_' + lName)] = function(value) {
return getTrusted(enumValue, value);
};
- sce[camelCase("trust_as_" + lName)] = function(value) {
+ sce[snakeToCamel('trust_as_' + lName)] = function(value) {
return trustAs(enumValue, value);
};
});
@@ -17913,12 +20018,15 @@ function $SceProvider() {
}];
}
+/* exported $SnifferProvider */
+
/**
* !!! This is an undocumented "private" service !!!
*
* @name $sniffer
* @requires $window
* @requires $document
+ * @this
*
* @property {boolean} history Does the browser support html5 history api ?
* @property {boolean} transitions Does the browser support CSS transition events ?
@@ -17930,37 +20038,32 @@ function $SceProvider() {
function $SnifferProvider() {
this.$get = ['$window', '$document', function($window, $document) {
var eventSupport = {},
+ // Chrome Packaged Apps are not allowed to access `history.pushState`.
+ // If not sandboxed, they can be detected by the presence of `chrome.app.runtime`
+ // (see https://developer.chrome.com/apps/api_index). If sandboxed, they can be detected by
+ // the presence of an extension runtime ID and the absence of other Chrome runtime APIs
+ // (see https://developer.chrome.com/apps/manifest/sandbox).
+ // (NW.js apps have access to Chrome APIs, but do support `history`.)
+ isNw = $window.nw && $window.nw.process,
+ isChromePackagedApp =
+ !isNw &&
+ $window.chrome &&
+ ($window.chrome.app && $window.chrome.app.runtime ||
+ !$window.chrome.app && $window.chrome.runtime && $window.chrome.runtime.id),
+ hasHistoryPushState = !isChromePackagedApp && $window.history && $window.history.pushState,
android =
toInt((/android (\d+)/.exec(lowercase(($window.navigator || {}).userAgent)) || [])[1]),
boxee = /Boxee/i.test(($window.navigator || {}).userAgent),
document = $document[0] || {},
- vendorPrefix,
- vendorRegex = /^(Moz|webkit|ms)(?=[A-Z])/,
bodyStyle = document.body && document.body.style,
transitions = false,
- animations = false,
- match;
+ animations = false;
if (bodyStyle) {
- for (var prop in bodyStyle) {
- if (match = vendorRegex.exec(prop)) {
- vendorPrefix = match[0];
- vendorPrefix = vendorPrefix.substr(0, 1).toUpperCase() + vendorPrefix.substr(1);
- break;
- }
- }
-
- if (!vendorPrefix) {
- vendorPrefix = ('WebkitOpacity' in bodyStyle) && 'webkit';
- }
-
- transitions = !!(('transition' in bodyStyle) || (vendorPrefix + 'Transition' in bodyStyle));
- animations = !!(('animation' in bodyStyle) || (vendorPrefix + 'Animation' in bodyStyle));
-
- if (android && (!transitions || !animations)) {
- transitions = isString(bodyStyle.webkitTransition);
- animations = isString(bodyStyle.webkitAnimation);
- }
+ // Support: Android <5, Blackberry Browser 10, default Chrome in Android 4.4.x
+ // Mentioned browsers need a -webkit- prefix for transitions & animations.
+ transitions = !!('transition' in bodyStyle || 'webkitTransition' in bodyStyle);
+ animations = !!('animation' in bodyStyle || 'webkitAnimation' in bodyStyle);
}
@@ -17973,16 +20076,15 @@ function $SnifferProvider() {
// older webkit browser (533.9) on Boxee box has exactly the same problem as Android has
// so let's not use the history API also
// We are purposefully using `!(android < 4)` to cover the case when `android` is undefined
- // jshint -W018
- history: !!($window.history && $window.history.pushState && !(android < 4) && !boxee),
- // jshint +W018
+ history: !!(hasHistoryPushState && !(android < 4) && !boxee),
hasEvent: function(event) {
+ // Support: IE 9-11 only
// IE9 implements 'input' event it's so fubared that we rather pretend that it doesn't have
// it. In particular the event is not fired when backspace or delete key are pressed or
// when cut operation is performed.
// IE10+ implements 'input' event but it erroneously fires under various situations,
// e.g. when placeholder changes, or a form is focused.
- if (event === 'input' && msie <= 11) return false;
+ if (event === 'input' && msie) return false;
if (isUndefined(eventSupport[event])) {
var divElm = document.createElement('div');
@@ -17992,7 +20094,6 @@ function $SnifferProvider() {
return eventSupport[event];
},
csp: csp(),
- vendorPrefix: vendorPrefix,
transitions: transitions,
animations: animations,
android: android
@@ -18000,80 +20101,124 @@ function $SnifferProvider() {
}];
}
-var $compileMinErr = minErr('$compile');
+var $templateRequestMinErr = minErr('$compile');
/**
- * @ngdoc service
- * @name $templateRequest
+ * @ngdoc provider
+ * @name $templateRequestProvider
+ * @this
*
* @description
- * The `$templateRequest` service runs security checks then downloads the provided template using
- * `$http` and, upon success, stores the contents inside of `$templateCache`. If the HTTP request
- * fails or the response data of the HTTP request is empty, a `$compile` error will be thrown (the
- * exception can be thwarted by setting the 2nd parameter of the function to true). Note that the
- * contents of `$templateCache` are trusted, so the call to `$sce.getTrustedUrl(tpl)` is omitted
- * when `tpl` is of type string and `$templateCache` has the matching entry.
- *
- * @param {string|TrustedResourceUrl} tpl The HTTP request template URL
- * @param {boolean=} ignoreRequestError Whether or not to ignore the exception when the request fails or the template is empty
- *
- * @return {Promise} a promise for the HTTP response data of the given URL.
+ * Used to configure the options passed to the {@link $http} service when making a template request.
*
- * @property {number} totalPendingRequests total amount of pending template requests being downloaded.
+ * For example, it can be used for specifying the "Accept" header that is sent to the server, when
+ * requesting a template.
*/
function $TemplateRequestProvider() {
- this.$get = ['$templateCache', '$http', '$q', '$sce', function($templateCache, $http, $q, $sce) {
- function handleRequestFn(tpl, ignoreRequestError) {
- handleRequestFn.totalPendingRequests++;
- // We consider the template cache holds only trusted templates, so
- // there's no need to go through whitelisting again for keys that already
- // are included in there. This also makes Angular accept any script
- // directive, no matter its name. However, we still need to unwrap trusted
- // types.
- if (!isString(tpl) || !$templateCache.get(tpl)) {
- tpl = $sce.getTrustedResourceUrl(tpl);
- }
+ var httpOptions;
+
+ /**
+ * @ngdoc method
+ * @name $templateRequestProvider#httpOptions
+ * @description
+ * The options to be passed to the {@link $http} service when making the request.
+ * You can use this to override options such as the "Accept" header for template requests.
+ *
+ * The {@link $templateRequest} will set the `cache` and the `transformResponse` properties of the
+ * options if not overridden here.
+ *
+ * @param {string=} value new value for the {@link $http} options.
+ * @returns {string|self} Returns the {@link $http} options when used as getter and self if used as setter.
+ */
+ this.httpOptions = function(val) {
+ if (val) {
+ httpOptions = val;
+ return this;
+ }
+ return httpOptions;
+ };
- var transformResponse = $http.defaults && $http.defaults.transformResponse;
+ /**
+ * @ngdoc service
+ * @name $templateRequest
+ *
+ * @description
+ * The `$templateRequest` service runs security checks then downloads the provided template using
+ * `$http` and, upon success, stores the contents inside of `$templateCache`. If the HTTP request
+ * fails or the response data of the HTTP request is empty, a `$compile` error will be thrown (the
+ * exception can be thwarted by setting the 2nd parameter of the function to true). Note that the
+ * contents of `$templateCache` are trusted, so the call to `$sce.getTrustedUrl(tpl)` is omitted
+ * when `tpl` is of type string and `$templateCache` has the matching entry.
+ *
+ * If you want to pass custom options to the `$http` service, such as setting the Accept header you
+ * can configure this via {@link $templateRequestProvider#httpOptions}.
+ *
+ * @param {string|TrustedResourceUrl} tpl The HTTP request template URL
+ * @param {boolean=} ignoreRequestError Whether or not to ignore the exception when the request fails or the template is empty
+ *
+ * @return {Promise} a promise for the HTTP response data of the given URL.
+ *
+ * @property {number} totalPendingRequests total amount of pending template requests being downloaded.
+ */
+ this.$get = ['$exceptionHandler', '$templateCache', '$http', '$q', '$sce',
+ function($exceptionHandler, $templateCache, $http, $q, $sce) {
- if (isArray(transformResponse)) {
- transformResponse = transformResponse.filter(function(transformer) {
- return transformer !== defaultHttpResponseTransform;
- });
- } else if (transformResponse === defaultHttpResponseTransform) {
- transformResponse = null;
- }
+ function handleRequestFn(tpl, ignoreRequestError) {
+ handleRequestFn.totalPendingRequests++;
- var httpOptions = {
- cache: $templateCache,
- transformResponse: transformResponse
- };
+ // We consider the template cache holds only trusted templates, so
+ // there's no need to go through whitelisting again for keys that already
+ // are included in there. This also makes Angular accept any script
+ // directive, no matter its name. However, we still need to unwrap trusted
+ // types.
+ if (!isString(tpl) || isUndefined($templateCache.get(tpl))) {
+ tpl = $sce.getTrustedResourceUrl(tpl);
+ }
- return $http.get(tpl, httpOptions)
- ['finally'](function() {
- handleRequestFn.totalPendingRequests--;
- })
- .then(function(response) {
- $templateCache.put(tpl, response.data);
- return response.data;
- }, handleError);
+ var transformResponse = $http.defaults && $http.defaults.transformResponse;
+
+ if (isArray(transformResponse)) {
+ transformResponse = transformResponse.filter(function(transformer) {
+ return transformer !== defaultHttpResponseTransform;
+ });
+ } else if (transformResponse === defaultHttpResponseTransform) {
+ transformResponse = null;
+ }
+
+ return $http.get(tpl, extend({
+ cache: $templateCache,
+ transformResponse: transformResponse
+ }, httpOptions))
+ .finally(function() {
+ handleRequestFn.totalPendingRequests--;
+ })
+ .then(function(response) {
+ $templateCache.put(tpl, response.data);
+ return response.data;
+ }, handleError);
+
+ function handleError(resp) {
+ if (!ignoreRequestError) {
+ resp = $templateRequestMinErr('tpload',
+ 'Failed to load template: {0} (HTTP status: {1} {2})',
+ tpl, resp.status, resp.statusText);
+
+ $exceptionHandler(resp);
+ }
- function handleError(resp) {
- if (!ignoreRequestError) {
- throw $compileMinErr('tpload', 'Failed to load template: {0} (HTTP status: {1} {2})',
- tpl, resp.status, resp.statusText);
+ return $q.reject(resp);
}
- return $q.reject(resp);
}
- }
- handleRequestFn.totalPendingRequests = 0;
+ handleRequestFn.totalPendingRequests = 0;
- return handleRequestFn;
- }];
+ return handleRequestFn;
+ }
+ ];
}
+/** @this */
function $$TestabilityProvider() {
this.$get = ['$rootScope', '$browser', '$location',
function($rootScope, $browser, $location) {
@@ -18112,7 +20257,7 @@ function $$TestabilityProvider() {
matches.push(binding);
}
} else {
- if (bindingName.indexOf(expression) != -1) {
+ if (bindingName.indexOf(expression) !== -1) {
matches.push(binding);
}
}
@@ -18189,6 +20334,7 @@ function $$TestabilityProvider() {
}];
}
+/** @this */
function $TimeoutProvider() {
this.$get = ['$rootScope', '$browser', '$q', '$$q', '$exceptionHandler',
function($rootScope, $browser, $q, $$q, $exceptionHandler) {
@@ -18244,8 +20390,7 @@ function $TimeoutProvider() {
} catch (e) {
deferred.reject(e);
$exceptionHandler(e);
- }
- finally {
+ } finally {
delete deferreds[promise.$$timeoutId];
}
@@ -18273,6 +20418,8 @@ function $TimeoutProvider() {
*/
timeout.cancel = function(promise) {
if (promise && promise.$$timeoutId in deferreds) {
+ // Timeout cancels should not report an unhandled promise.
+ markQExceptionHandled(deferreds[promise.$$timeoutId].promise);
deferreds[promise.$$timeoutId].reject('canceled');
delete deferreds[promise.$$timeoutId];
return $browser.defer.cancel(promise.$$timeoutId);
@@ -18291,7 +20438,7 @@ function $TimeoutProvider() {
// doesn't know about mocked locations and resolves URLs to the real document - which is
// exactly the behavior needed here. There is little value is mocking these out for this
// service.
-var urlParsingNode = document.createElement("a");
+var urlParsingNode = window.document.createElement('a');
var originUrl = urlResolve(window.location.href);
@@ -18304,7 +20451,7 @@ var originUrl = urlResolve(window.location.href);
* URL will be resolved into an absolute URL in the context of the application document.
* Parsing means that the anchor node's host, hostname, protocol, port, pathname and related
* properties are all populated to reflect the normalized URL. This approach has wide
- * compatibility - Safari 1+, Mozilla 1+, Opera 7+,e etc. See
+ * compatibility - Safari 1+, Mozilla 1+ etc. See
* http://www.aptana.com/reference/html/api/HTMLAnchorElement.html
*
* Implementation Notes for IE
@@ -18343,10 +20490,11 @@ var originUrl = urlResolve(window.location.href);
function urlResolve(url) {
var href = url;
+ // Support: IE 9-11 only
if (msie) {
// Normalize before parse. Refer Implementation Notes on why this is
// done in two steps on IE.
- urlParsingNode.setAttribute("href", href);
+ urlParsingNode.setAttribute('href', href);
href = urlParsingNode.href;
}
@@ -18383,6 +20531,7 @@ function urlIsSameOrigin(requestUrl) {
/**
* @ngdoc service
* @name $window
+ * @this
*
* @description
* A reference to the browser's `window` object. While `window`
@@ -18396,7 +20545,7 @@ function urlIsSameOrigin(requestUrl) {
* expression.
*
* @example
- <example module="windowExample">
+ <example module="windowExample" name="window-service">
<file name="index.html">
<script>
angular.module('windowExample', [])
@@ -18439,6 +20588,14 @@ function $$CookieReader($document) {
var lastCookies = {};
var lastCookieString = '';
+ function safeGetCookie(rawDocument) {
+ try {
+ return rawDocument.cookie || '';
+ } catch (e) {
+ return '';
+ }
+ }
+
function safeDecodeURIComponent(str) {
try {
return decodeURIComponent(str);
@@ -18449,7 +20606,7 @@ function $$CookieReader($document) {
return function() {
var cookieArray, cookie, i, index, name;
- var currentCookieString = rawDocument.cookie || '';
+ var currentCookieString = safeGetCookie(rawDocument);
if (currentCookieString !== lastCookieString) {
lastCookieString = currentCookieString;
@@ -18476,6 +20633,7 @@ function $$CookieReader($document) {
$$CookieReader.$inject = ['$document'];
+/** @this */
function $$CookieReaderProvider() {
this.$get = $$CookieReader;
}
@@ -18555,9 +20713,15 @@ function $$CookieReaderProvider() {
* @description
* Filters are used for formatting data displayed to the user.
*
+ * They can be used in view templates, controllers or services.Angular comes
+ * with a collection of [built-in filters](api/ng/filter), but it is easy to
+ * define your own as well.
+ *
* The general syntax in templates is as follows:
*
- * {{ expression [| filter_name[:parameter_value] ... ] }}
+ * ```html
+ * {{ expression [| filter_name[:parameter_value] ... ] }}
+ * ```
*
* @param {String} name Name of the filter function to retrieve
* @return {Function} the filter function
@@ -18580,6 +20744,7 @@ function $$CookieReaderProvider() {
</example>
*/
$FilterProvider.$inject = ['$provide'];
+/** @this */
function $FilterProvider($provide) {
var suffix = 'Filter';
@@ -18629,7 +20794,7 @@ function $FilterProvider($provide) {
lowercaseFilter: false,
numberFilter: false,
orderByFilter: false,
- uppercaseFilter: false,
+ uppercaseFilter: false
*/
register('currency', currencyFilter);
@@ -18652,6 +20817,9 @@ function $FilterProvider($provide) {
* Selects a subset of items from `array` and returns it as a new array.
*
* @param {Array} array The source array.
+ * <div class="alert alert-info">
+ * **Note**: If the array contains objects that reference themselves, filtering is not possible.
+ * </div>
* @param {string|Object|function()} expression The predicate to be used for selecting items from
* `array`.
*
@@ -18665,10 +20833,11 @@ function $FilterProvider($provide) {
* - `Object`: A pattern object can be used to filter specific properties on objects contained
* by `array`. For example `{name:"M", phone:"1"}` predicate will return an array of items
* which have property `name` containing "M" and property `phone` containing "1". A special
- * property name `$` can be used (as in `{$:"text"}`) to accept a match against any
- * property of the object or its nested object properties. That's equivalent to the simple
- * substring match with a `string` as described above. The predicate can be negated by prefixing
- * the string with `!`.
+ * property name (`$` by default) can be used (e.g. as in `{$: "text"}`) to accept a match
+ * against any property of the object or its nested object properties. That's equivalent to the
+ * simple substring match with a `string` as described above. The special property name can be
+ * overwritten, using the `anyPropertyKey` parameter.
+ * The predicate can be negated by prefixing the string with `!`.
* For example `{name: "!M"}` predicate will return an array of items which have property `name`
* not containing "M".
*
@@ -18683,9 +20852,10 @@ function $FilterProvider($provide) {
*
* The final result is an array of those elements that the predicate returned true for.
*
- * @param {function(actual, expected)|true|undefined} comparator Comparator which is used in
- * determining if the expected value (from the filter expression) and actual value (from
- * the object in the array) should be considered a match.
+ * @param {function(actual, expected)|true|false} [comparator] Comparator which is used in
+ * determining if values retrieved using `expression` (when it is not a function) should be
+ * considered a match based on the expected value (from the filter expression) and actual
+ * value (from the object in the array).
*
* Can be one of:
*
@@ -18696,14 +20866,18 @@ function $FilterProvider($provide) {
* - `true`: A shorthand for `function(actual, expected) { return angular.equals(actual, expected)}`.
* This is essentially strict comparison of expected and actual.
*
- * - `false|undefined`: A short hand for a function which will look for a substring match in case
- * insensitive way.
+ * - `false`: A short hand for a function which will look for a substring match in a case
+ * insensitive way. Primitive values are converted to strings. Objects are not compared against
+ * primitives, unless they have a custom `toString` method (e.g. `Date` objects).
+ *
+ *
+ * Defaults to `false`.
*
- * Primitive values are converted to strings. Objects are not compared against primitives,
- * unless they have a custom `toString` method (e.g. `Date` objects).
+ * @param {string} [anyPropertyKey] The special property name that matches against any property.
+ * By default `$`.
*
* @example
- <example>
+ <example name="filter-filter">
<file name="index.html">
<div ng-init="friends = [{name:'John', phone:'555-1276'},
{name:'Mary', phone:'800-BIG-MARY'},
@@ -18770,8 +20944,9 @@ function $FilterProvider($provide) {
</file>
</example>
*/
+
function filterFilter() {
- return function(array, expression, comparator) {
+ return function(array, expression, comparator, anyPropertyKey) {
if (!isArrayLike(array)) {
if (array == null) {
return array;
@@ -18780,6 +20955,7 @@ function filterFilter() {
}
}
+ anyPropertyKey = anyPropertyKey || '$';
var expressionType = getTypeForFilter(expression);
var predicateFn;
var matchAgainstAnyProp;
@@ -18793,10 +20969,9 @@ function filterFilter() {
case 'number':
case 'string':
matchAgainstAnyProp = true;
- //jshint -W086
+ // falls through
case 'object':
- //jshint +W086
- predicateFn = createPredicateFn(expression, comparator, matchAgainstAnyProp);
+ predicateFn = createPredicateFn(expression, comparator, anyPropertyKey, matchAgainstAnyProp);
break;
default:
return array;
@@ -18807,8 +20982,8 @@ function filterFilter() {
}
// Helper functions for `filterFilter`
-function createPredicateFn(expression, comparator, matchAgainstAnyProp) {
- var shouldMatchPrimitives = isObject(expression) && ('$' in expression);
+function createPredicateFn(expression, comparator, anyPropertyKey, matchAgainstAnyProp) {
+ var shouldMatchPrimitives = isObject(expression) && (anyPropertyKey in expression);
var predicateFn;
if (comparator === true) {
@@ -18836,25 +21011,25 @@ function createPredicateFn(expression, comparator, matchAgainstAnyProp) {
predicateFn = function(item) {
if (shouldMatchPrimitives && !isObject(item)) {
- return deepCompare(item, expression.$, comparator, false);
+ return deepCompare(item, expression[anyPropertyKey], comparator, anyPropertyKey, false);
}
- return deepCompare(item, expression, comparator, matchAgainstAnyProp);
+ return deepCompare(item, expression, comparator, anyPropertyKey, matchAgainstAnyProp);
};
return predicateFn;
}
-function deepCompare(actual, expected, comparator, matchAgainstAnyProp, dontMatchWholeObject) {
+function deepCompare(actual, expected, comparator, anyPropertyKey, matchAgainstAnyProp, dontMatchWholeObject) {
var actualType = getTypeForFilter(actual);
var expectedType = getTypeForFilter(expected);
if ((expectedType === 'string') && (expected.charAt(0) === '!')) {
- return !deepCompare(actual, expected.substring(1), comparator, matchAgainstAnyProp);
+ return !deepCompare(actual, expected.substring(1), comparator, anyPropertyKey, matchAgainstAnyProp);
} else if (isArray(actual)) {
// In case `actual` is an array, consider it a match
// if ANY of it's items matches `expected`
return actual.some(function(item) {
- return deepCompare(item, expected, comparator, matchAgainstAnyProp);
+ return deepCompare(item, expected, comparator, anyPropertyKey, matchAgainstAnyProp);
});
}
@@ -18863,11 +21038,14 @@ function deepCompare(actual, expected, comparator, matchAgainstAnyProp, dontMatc
var key;
if (matchAgainstAnyProp) {
for (key in actual) {
- if ((key.charAt(0) !== '$') && deepCompare(actual[key], expected, comparator, true)) {
+ // Under certain, rare, circumstances, key may not be a string and `charAt` will be undefined
+ // See: https://github.com/angular/angular.js/issues/15644
+ if (key.charAt && (key.charAt(0) !== '$') &&
+ deepCompare(actual[key], expected, comparator, anyPropertyKey, true)) {
return true;
}
}
- return dontMatchWholeObject ? false : deepCompare(actual, expected, comparator, false);
+ return dontMatchWholeObject ? false : deepCompare(actual, expected, comparator, anyPropertyKey, false);
} else if (expectedType === 'object') {
for (key in expected) {
var expectedVal = expected[key];
@@ -18875,9 +21053,9 @@ function deepCompare(actual, expected, comparator, matchAgainstAnyProp, dontMatc
continue;
}
- var matchAnyProperty = key === '$';
+ var matchAnyProperty = key === anyPropertyKey;
var actualVal = matchAnyProperty ? actual : actual[key];
- if (!deepCompare(actualVal, expectedVal, comparator, matchAnyProperty, matchAnyProperty)) {
+ if (!deepCompare(actualVal, expectedVal, comparator, anyPropertyKey, matchAnyProperty, matchAnyProperty)) {
return false;
}
}
@@ -18885,7 +21063,6 @@ function deepCompare(actual, expected, comparator, matchAgainstAnyProp, dontMatc
} else {
return comparator(actual, expected);
}
- break;
case 'function':
return false;
default:
@@ -18918,7 +21095,7 @@ var ZERO_CHAR = '0';
*
*
* @example
- <example module="currencyExample">
+ <example module="currencyExample" name="currency-filter">
<file name="index.html">
<script>
angular.module('currencyExample', [])
@@ -18929,7 +21106,7 @@ var ZERO_CHAR = '0';
<div ng-controller="ExampleController">
<input type="number" ng-model="amount" aria-label="amount"> <br>
default currency symbol ($): <span id="currency-default">{{amount | currency}}</span><br>
- custom currency identifier (USD$): <span id="currency-custom">{{amount | currency:"USD$"}}</span>
+ custom currency identifier (USD$): <span id="currency-custom">{{amount | currency:"USD$"}}</span><br>
no fractions (0): <span id="currency-no-fractions">{{amount | currency:"USD$":0}}</span>
</div>
</file>
@@ -18940,7 +21117,7 @@ var ZERO_CHAR = '0';
expect(element(by.id('currency-no-fractions')).getText()).toBe('USD$1,235');
});
it('should update', function() {
- if (browser.params.browser == 'safari') {
+ if (browser.params.browser === 'safari') {
// Safari does not understand the minus key. See
// https://github.com/angular/protractor/issues/481
return;
@@ -18991,10 +21168,12 @@ function currencyFilter($locale) {
* @param {(number|string)=} fractionSize Number of decimal places to round the number to.
* If this is not provided then the fraction size is computed from the current locale's number
* formatting pattern. In the case of the default locale, it will be 3.
- * @returns {string} Number rounded to fractionSize and places a “,” after each third digit.
+ * @returns {string} Number rounded to `fractionSize` appropriately formatted based on the current
+ * locale (e.g., in the en_US locale it will have "." as the decimal separator and
+ * include "," group separators after each third digit).
*
* @example
- <example module="numberFilterExample">
+ <example module="numberFilterExample" name="number-filter">
<file name="index.html">
<script>
angular.module('numberFilterExample', [])
@@ -19073,16 +21252,16 @@ function parse(numStr) {
}
// Count the number of leading zeros.
- for (i = 0; numStr.charAt(i) == ZERO_CHAR; i++) {/* jshint noempty: false */}
+ for (i = 0; numStr.charAt(i) === ZERO_CHAR; i++) { /* empty */ }
- if (i == (zeros = numStr.length)) {
+ if (i === (zeros = numStr.length)) {
// The digits are all zero.
digits = [0];
numberOfIntegerDigits = 1;
} else {
// Count the number of trailing zeros
zeros--;
- while (numStr.charAt(zeros) == ZERO_CHAR) zeros--;
+ while (numStr.charAt(zeros) === ZERO_CHAR) zeros--;
// Trailing zeros are insignificant so ignore them
numberOfIntegerDigits -= i;
@@ -19119,18 +21298,37 @@ function roundNumber(parsedNumber, fractionSize, minFrac, maxFrac) {
var digit = digits[roundAt];
if (roundAt > 0) {
- digits.splice(roundAt);
+ // Drop fractional digits beyond `roundAt`
+ digits.splice(Math.max(parsedNumber.i, roundAt));
+
+ // Set non-fractional digits beyond `roundAt` to 0
+ for (var j = roundAt; j < digits.length; j++) {
+ digits[j] = 0;
+ }
} else {
// We rounded to zero so reset the parsedNumber
+ fractionLen = Math.max(0, fractionLen);
parsedNumber.i = 1;
- digits.length = roundAt = fractionSize + 1;
- for (var i=0; i < roundAt; i++) digits[i] = 0;
+ digits.length = Math.max(1, roundAt = fractionSize + 1);
+ digits[0] = 0;
+ for (var i = 1; i < roundAt; i++) digits[i] = 0;
}
- if (digit >= 5) digits[roundAt - 1]++;
+ if (digit >= 5) {
+ if (roundAt - 1 < 0) {
+ for (var k = 0; k > roundAt; k--) {
+ digits.unshift(0);
+ parsedNumber.i++;
+ }
+ digits.unshift(1);
+ parsedNumber.i++;
+ } else {
+ digits[roundAt - 1]++;
+ }
+ }
// Pad out with zeros to get the required fraction length
- for (; fractionLen < fractionSize; fractionLen++) digits.push(0);
+ for (; fractionLen < Math.max(0, fractionSize); fractionLen++) digits.push(0);
// Do any carrying, e.g. a digit was rounded up to 10
@@ -19194,7 +21392,7 @@ function formatNumber(number, pattern, groupSep, decimalSep, fractionSize) {
// extract decimals digits
if (integerLen > 0) {
- decimals = digits.splice(integerLen);
+ decimals = digits.splice(integerLen, digits.length);
} else {
decimals = digits;
digits = [0];
@@ -19202,11 +21400,11 @@ function formatNumber(number, pattern, groupSep, decimalSep, fractionSize) {
// format the integer digits with grouping separators
var groups = [];
- if (digits.length > pattern.lgSize) {
- groups.unshift(digits.splice(-pattern.lgSize).join(''));
+ if (digits.length >= pattern.lgSize) {
+ groups.unshift(digits.splice(-pattern.lgSize, digits.length).join(''));
}
while (digits.length > pattern.gSize) {
- groups.unshift(digits.splice(-pattern.gSize).join(''));
+ groups.unshift(digits.splice(-pattern.gSize, digits.length).join(''));
}
if (digits.length) {
groups.unshift(digits.join(''));
@@ -19229,11 +21427,15 @@ function formatNumber(number, pattern, groupSep, decimalSep, fractionSize) {
}
}
-function padNumber(num, digits, trim) {
+function padNumber(num, digits, trim, negWrap) {
var neg = '';
- if (num < 0) {
- neg = '-';
- num = -num;
+ if (num < 0 || (negWrap && num <= 0)) {
+ if (negWrap) {
+ num = -num + 1;
+ } else {
+ num = -num;
+ neg = '-';
+ }
}
num = '' + num;
while (num.length < digits) num = ZERO_CHAR + num;
@@ -19244,22 +21446,23 @@ function padNumber(num, digits, trim) {
}
-function dateGetter(name, size, offset, trim) {
+function dateGetter(name, size, offset, trim, negWrap) {
offset = offset || 0;
return function(date) {
var value = date['get' + name]();
if (offset > 0 || value > -offset) {
value += offset;
}
- if (value === 0 && offset == -12) value = 12;
- return padNumber(value, size, trim);
+ if (value === 0 && offset === -12) value = 12;
+ return padNumber(value, size, trim, negWrap);
};
}
-function dateStrGetter(name, shortForm) {
+function dateStrGetter(name, shortForm, standAlone) {
return function(date, formats) {
var value = date['get' + name]();
- var get = uppercase(shortForm ? ('SHORT' + name) : name);
+ var propPrefix = (standAlone ? 'STANDALONE' : '') + (shortForm ? 'SHORT' : '');
+ var get = uppercase(propPrefix + name);
return formats[get][value];
};
@@ -19267,7 +21470,7 @@ function dateStrGetter(name, shortForm) {
function timeZoneGetter(date, formats, offset) {
var zone = -1 * offset;
- var paddedZone = (zone >= 0) ? "+" : "";
+ var paddedZone = (zone >= 0) ? '+' : '';
paddedZone += padNumber(Math[zone > 0 ? 'floor' : 'ceil'](zone / 60), 2) +
padNumber(Math.abs(zone % 60), 2);
@@ -19314,13 +21517,14 @@ function longEraGetter(date, formats) {
}
var DATE_FORMATS = {
- yyyy: dateGetter('FullYear', 4),
- yy: dateGetter('FullYear', 2, 0, true),
- y: dateGetter('FullYear', 1),
+ yyyy: dateGetter('FullYear', 4, 0, false, true),
+ yy: dateGetter('FullYear', 2, 0, true, true),
+ y: dateGetter('FullYear', 1, 0, false, true),
MMMM: dateStrGetter('Month'),
MMM: dateStrGetter('Month', true),
MM: dateGetter('Month', 2, 1),
M: dateGetter('Month', 1, 1),
+ LLLL: dateStrGetter('Month', false, true),
dd: dateGetter('Date', 2),
d: dateGetter('Date', 1),
HH: dateGetter('Hours', 2),
@@ -19346,8 +21550,8 @@ var DATE_FORMATS = {
GGGG: longEraGetter
};
-var DATE_FORMATS_SPLIT = /((?:[^yMdHhmsaZEwG']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z|G+|w+))(.*)/,
- NUMBER_STRING = /^\-?\d+$/;
+var DATE_FORMATS_SPLIT = /((?:[^yMLdHhmsaZEwG']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|L+|d+|H+|h+|m+|s+|a|Z|G+|w+))([\s\S]*)/,
+ NUMBER_STRING = /^-?\d+$/;
/**
* @ngdoc filter
@@ -19366,6 +21570,7 @@ var DATE_FORMATS_SPLIT = /((?:[^yMdHhmsaZEwG']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|
* * `'MMM'`: Month in year (Jan-Dec)
* * `'MM'`: Month in year, padded (01-12)
* * `'M'`: Month in year (1-12)
+ * * `'LLLL'`: Stand-alone month in year (January-December)
* * `'dd'`: Day in month, padded (01-31)
* * `'d'`: Day in month (1-31)
* * `'EEEE'`: Day in Week,(Sunday-Saturday)
@@ -19404,6 +21609,8 @@ var DATE_FORMATS_SPLIT = /((?:[^yMdHhmsaZEwG']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|
* `"h 'in the morning'"`). In order to output a single quote, escape it - i.e., two single quotes in a sequence
* (e.g. `"h 'o''clock'"`).
*
+ * Any other characters in the `format` string will be output as-is.
+ *
* @param {(Date|number|string)} date Date to format either as Date object, milliseconds (string or
* number) or various ISO 8601 datetime string formats (e.g. yyyy-MM-ddTHH:mm:ss.sssZ and its
* shorter versions like yyyy-MM-ddTHH:mmZ, yyyy-MM-dd or yyyyMMddTHHmmssZ). If no timezone is
@@ -19417,7 +21624,7 @@ var DATE_FORMATS_SPLIT = /((?:[^yMdHhmsaZEwG']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|
* @returns {string} Formatted string or the input if input is not recognized as date/millis.
*
* @example
- <example>
+ <example name="filter-date">
<file name="index.html">
<span ng-non-bindable>{{1288323623006 | date:'medium'}}</span>:
<span>{{1288323623006 | date:'medium'}}</span><br>
@@ -19433,7 +21640,7 @@ var DATE_FORMATS_SPLIT = /((?:[^yMdHhmsaZEwG']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|
expect(element(by.binding("1288323623006 | date:'medium'")).getText()).
toMatch(/Oct 2\d, 2010 \d{1,2}:\d{2}:\d{2} (AM|PM)/);
expect(element(by.binding("1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'")).getText()).
- toMatch(/2010\-10\-2\d \d{2}:\d{2}:\d{2} (\-|\+)?\d{4}/);
+ toMatch(/2010-10-2\d \d{2}:\d{2}:\d{2} (-|\+)?\d{4}/);
expect(element(by.binding("'1288323623006' | date:'MM/dd/yyyy @ h:mma'")).getText()).
toMatch(/10\/2\d\/2010 @ \d{1,2}:\d{2}(AM|PM)/);
expect(element(by.binding("'1288323623006' | date:\"MM/dd/yyyy 'at' h:mma\"")).getText()).
@@ -19450,7 +21657,7 @@ function dateFilter($locale) {
// 1 2 3 4 5 6 7 8 9 10 11
function jsonStringToDate(string) {
var match;
- if (match = string.match(R_ISO8601_STR)) {
+ if ((match = string.match(R_ISO8601_STR))) {
var date = new Date(0),
tzHour = 0,
tzMin = 0,
@@ -19511,7 +21718,7 @@ function dateFilter($locale) {
forEach(parts, function(value) {
fn = DATE_FORMATS[value];
text += fn ? fn(date, $locale.DATETIME_FORMATS, dateTimezoneOffset)
- : value === "''" ? "'" : value.replace(/(^'|'$)/g, '').replace(/''/g, "'");
+ : value === '\'\'' ? '\'' : value.replace(/(^'|'$)/g, '').replace(/''/g, '\'');
});
return text;
@@ -19536,15 +21743,15 @@ function dateFilter($locale) {
*
*
* @example
- <example>
+ <example name="filter-json">
<file name="index.html">
<pre id="default-spacing">{{ {'name':'value'} | json }}</pre>
<pre id="custom-spacing">{{ {'name':'value'} | json:4 }}</pre>
</file>
<file name="protractor.js" type="protractor">
it('should jsonify filtered objects', function() {
- expect(element(by.id('default-spacing')).getText()).toMatch(/\{\n "name": ?"value"\n}/);
- expect(element(by.id('custom-spacing')).getText()).toMatch(/\{\n "name": ?"value"\n}/);
+ expect(element(by.id('default-spacing')).getText()).toMatch(/\{\n {2}"name": ?"value"\n}/);
+ expect(element(by.id('custom-spacing')).getText()).toMatch(/\{\n {4}"name": ?"value"\n}/);
});
</file>
</example>
@@ -19566,6 +21773,9 @@ function jsonFilter() {
* @kind function
* @description
* Converts string to lowercase.
+ *
+ * See the {@link ng.uppercase uppercase filter documentation} for a functionally identical example.
+ *
* @see angular.lowercase
*/
var lowercaseFilter = valueFn(lowercase);
@@ -19577,7 +21787,23 @@ var lowercaseFilter = valueFn(lowercase);
* @kind function
* @description
* Converts string to uppercase.
- * @see angular.uppercase
+ * @example
+ <example module="uppercaseFilterExample" name="filter-uppercase">
+ <file name="index.html">
+ <script>
+ angular.module('uppercaseFilterExample', [])
+ .controller('ExampleController', ['$scope', function($scope) {
+ $scope.title = 'This is a title';
+ }]);
+ </script>
+ <div ng-controller="ExampleController">
+ <!-- This title should be formatted normally -->
+ <h1>{{title}}</h1>
+ <!-- This title should be capitalized -->
+ <h1>{{title | uppercase}}</h1>
+ </div>
+ </file>
+ </example>
*/
var uppercaseFilter = valueFn(uppercase);
@@ -19587,24 +21813,25 @@ var uppercaseFilter = valueFn(uppercase);
* @kind function
*
* @description
- * Creates a new array or string containing only a specified number of elements. The elements
- * are taken from either the beginning or the end of the source array, string or number, as specified by
- * the value and sign (positive or negative) of `limit`. If a number is used as input, it is
- * converted to a string.
- *
- * @param {Array|string|number} input Source array, string or number to be limited.
- * @param {string|number} limit The length of the returned array or string. If the `limit` number
+ * Creates a new array or string containing only a specified number of elements. The elements are
+ * taken from either the beginning or the end of the source array, string or number, as specified by
+ * the value and sign (positive or negative) of `limit`. Other array-like objects are also supported
+ * (e.g. array subclasses, NodeLists, jqLite/jQuery collections etc). If a number is used as input,
+ * it is converted to a string.
+ *
+ * @param {Array|ArrayLike|string|number} input - Array/array-like, string or number to be limited.
+ * @param {string|number} limit - The length of the returned array or string. If the `limit` number
* is positive, `limit` number of items from the beginning of the source array/string are copied.
* If the number is negative, `limit` number of items from the end of the source array/string
* are copied. The `limit` will be trimmed if it exceeds `array.length`. If `limit` is undefined,
* the input will be returned unchanged.
- * @param {(string|number)=} begin Index at which to begin limitation. As a negative index, `begin`
- * indicates an offset from the end of `input`. Defaults to `0`.
- * @returns {Array|string} A new sub-array or substring of length `limit` or less if input array
- * had less than `limit` elements.
+ * @param {(string|number)=} begin - Index at which to begin limitation. As a negative index,
+ * `begin` indicates an offset from the end of `input`. Defaults to `0`.
+ * @returns {Array|string} A new sub-array or substring of length `limit` or less if the input had
+ * less than `limit` elements.
*
* @example
- <example module="limitToExample">
+ <example module="limitToExample" name="limit-to-filter">
<file name="index.html">
<script>
angular.module('limitToExample', [])
@@ -19686,69 +21913,166 @@ function limitToFilter() {
} else {
limit = toInt(limit);
}
- if (isNaN(limit)) return input;
+ if (isNumberNaN(limit)) return input;
if (isNumber(input)) input = input.toString();
- if (!isArray(input) && !isString(input)) return input;
+ if (!isArrayLike(input)) return input;
begin = (!begin || isNaN(begin)) ? 0 : toInt(begin);
begin = (begin < 0) ? Math.max(0, input.length + begin) : begin;
if (limit >= 0) {
- return input.slice(begin, begin + limit);
+ return sliceFn(input, begin, begin + limit);
} else {
if (begin === 0) {
- return input.slice(limit, input.length);
+ return sliceFn(input, limit, input.length);
} else {
- return input.slice(Math.max(0, begin + limit), begin);
+ return sliceFn(input, Math.max(0, begin + limit), begin);
}
}
};
}
+function sliceFn(input, begin, end) {
+ if (isString(input)) return input.slice(begin, end);
+
+ return slice.call(input, begin, end);
+}
+
/**
* @ngdoc filter
* @name orderBy
* @kind function
*
* @description
- * Orders a specified `array` by the `expression` predicate. It is ordered alphabetically
- * for strings and numerically for numbers. Note: if you notice numbers are not being sorted
- * as expected, make sure they are actually being saved as numbers and not strings.
+ * Returns an array containing the items from the specified `collection`, ordered by a `comparator`
+ * function based on the values computed using the `expression` predicate.
+ *
+ * For example, `[{id: 'foo'}, {id: 'bar'}] | orderBy:'id'` would result in
+ * `[{id: 'bar'}, {id: 'foo'}]`.
*
- * @param {Array} array The array to sort.
- * @param {function(*)|string|Array.<(function(*)|string)>=} expression A predicate to be
- * used by the comparator to determine the order of elements.
+ * The `collection` can be an Array or array-like object (e.g. NodeList, jQuery object, TypedArray,
+ * String, etc).
+ *
+ * The `expression` can be a single predicate, or a list of predicates each serving as a tie-breaker
+ * for the preceding one. The `expression` is evaluated against each item and the output is used
+ * for comparing with other items.
+ *
+ * You can change the sorting order by setting `reverse` to `true`. By default, items are sorted in
+ * ascending order.
+ *
+ * The comparison is done using the `comparator` function. If none is specified, a default, built-in
+ * comparator is used (see below for details - in a nutshell, it compares numbers numerically and
+ * strings alphabetically).
+ *
+ * ### Under the hood
+ *
+ * Ordering the specified `collection` happens in two phases:
+ *
+ * 1. All items are passed through the predicate (or predicates), and the returned values are saved
+ * along with their type (`string`, `number` etc). For example, an item `{label: 'foo'}`, passed
+ * through a predicate that extracts the value of the `label` property, would be transformed to:
+ * ```
+ * {
+ * value: 'foo',
+ * type: 'string',
+ * index: ...
+ * }
+ * ```
+ * 2. The comparator function is used to sort the items, based on the derived values, types and
+ * indices.
+ *
+ * If you use a custom comparator, it will be called with pairs of objects of the form
+ * `{value: ..., type: '...', index: ...}` and is expected to return `0` if the objects are equal
+ * (as far as the comparator is concerned), `-1` if the 1st one should be ranked higher than the
+ * second, or `1` otherwise.
+ *
+ * In order to ensure that the sorting will be deterministic across platforms, if none of the
+ * specified predicates can distinguish between two items, `orderBy` will automatically introduce a
+ * dummy predicate that returns the item's index as `value`.
+ * (If you are using a custom comparator, make sure it can handle this predicate as well.)
+ *
+ * If a custom comparator still can't distinguish between two items, then they will be sorted based
+ * on their index using the built-in comparator.
+ *
+ * Finally, in an attempt to simplify things, if a predicate returns an object as the extracted
+ * value for an item, `orderBy` will try to convert that object to a primitive value, before passing
+ * it to the comparator. The following rules govern the conversion:
+ *
+ * 1. If the object has a `valueOf()` method that returns a primitive, its return value will be
+ * used instead.<br />
+ * (If the object has a `valueOf()` method that returns another object, then the returned object
+ * will be used in subsequent steps.)
+ * 2. If the object has a custom `toString()` method (i.e. not the one inherited from `Object`) that
+ * returns a primitive, its return value will be used instead.<br />
+ * (If the object has a `toString()` method that returns another object, then the returned object
+ * will be used in subsequent steps.)
+ * 3. No conversion; the object itself is used.
+ *
+ * ### The default comparator
+ *
+ * The default, built-in comparator should be sufficient for most usecases. In short, it compares
+ * numbers numerically, strings alphabetically (and case-insensitively), for objects falls back to
+ * using their index in the original collection, and sorts values of different types by type.
+ *
+ * More specifically, it follows these steps to determine the relative order of items:
+ *
+ * 1. If the compared values are of different types, compare the types themselves alphabetically.
+ * 2. If both values are of type `string`, compare them alphabetically in a case- and
+ * locale-insensitive way.
+ * 3. If both values are objects, compare their indices instead.
+ * 4. Otherwise, return:
+ * - `0`, if the values are equal (by strict equality comparison, i.e. using `===`).
+ * - `-1`, if the 1st value is "less than" the 2nd value (compared using the `<` operator).
+ * - `1`, otherwise.
+ *
+ * **Note:** If you notice numbers not being sorted as expected, make sure they are actually being
+ * saved as numbers and not strings.
+ * **Note:** For the purpose of sorting, `null` values are treated as the string `'null'` (i.e.
+ * `type: 'string'`, `value: 'null'`). This may cause unexpected sort order relative to
+ * other values.
+ *
+ * @param {Array|ArrayLike} collection - The collection (array or array-like object) to sort.
+ * @param {(Function|string|Array.<Function|string>)=} expression - A predicate (or list of
+ * predicates) to be used by the comparator to determine the order of elements.
*
* Can be one of:
*
- * - `function`: Getter function. The result of this function will be sorted using the
- * `<`, `===`, `>` operator.
- * - `string`: An Angular expression. The result of this expression is used to compare elements
- * (for example `name` to sort by a property called `name` or `name.substr(0, 3)` to sort by
- * 3 first characters of a property called `name`). The result of a constant expression
- * is interpreted as a property name to be used in comparisons (for example `"special name"`
- * to sort object by the value of their `special name` property). An expression can be
- * optionally prefixed with `+` or `-` to control ascending or descending sort order
- * (for example, `+name` or `-name`). If no property is provided, (e.g. `'+'`) then the array
- * element itself is used to compare where sorting.
- * - `Array`: An array of function or string predicates. The first predicate in the array
- * is used for sorting, but when two items are equivalent, the next predicate is used.
+ * - `Function`: A getter function. This function will be called with each item as argument and
+ * the return value will be used for sorting.
+ * - `string`: An Angular expression. This expression will be evaluated against each item and the
+ * result will be used for sorting. For example, use `'label'` to sort by a property called
+ * `label` or `'label.substring(0, 3)'` to sort by the first 3 characters of the `label`
+ * property.<br />
+ * (The result of a constant expression is interpreted as a property name to be used for
+ * comparison. For example, use `'"special name"'` (note the extra pair of quotes) to sort by a
+ * property called `special name`.)<br />
+ * An expression can be optionally prefixed with `+` or `-` to control the sorting direction,
+ * ascending or descending. For example, `'+label'` or `'-label'`. If no property is provided,
+ * (e.g. `'+'` or `'-'`), the collection element itself is used in comparisons.
+ * - `Array`: An array of function and/or string predicates. If a predicate cannot determine the
+ * relative order of two items, the next predicate is used as a tie-breaker.
+ *
+ * **Note:** If the predicate is missing or empty then it defaults to `'+'`.
*
- * If the predicate is missing or empty then it defaults to `'+'`.
+ * @param {boolean=} reverse - If `true`, reverse the sorting order.
+ * @param {(Function)=} comparator - The comparator function used to determine the relative order of
+ * value pairs. If omitted, the built-in comparator will be used.
*
- * @param {boolean=} reverse Reverse the order of the array.
- * @returns {Array} Sorted copy of the source array.
+ * @returns {Array} - The sorted array.
*
*
* @example
- * The example below demonstrates a simple ngRepeat, where the data is sorted
- * by age in descending order (predicate is set to `'-age'`).
- * `reverse` is not set, which means it defaults to `false`.
- <example module="orderByExample">
+ * ### Ordering a table with `ngRepeat`
+ *
+ * The example below demonstrates a simple {@link ngRepeat ngRepeat}, where the data is sorted by
+ * age in descending order (expression is set to `'-age'`). The `comparator` is not set, which means
+ * it defaults to the built-in comparator.
+ *
+ <example name="orderBy-static" module="orderByExample1">
<file name="index.html">
<div ng-controller="ExampleController">
- <table class="friend">
+ <table class="friends">
<tr>
<th>Name</th>
<th>Phone Number</th>
@@ -19763,43 +22087,77 @@ function limitToFilter() {
</div>
</file>
<file name="script.js">
- angular.module('orderByExample', [])
+ angular.module('orderByExample1', [])
.controller('ExampleController', ['$scope', function($scope) {
- $scope.friends =
- [{name:'John', phone:'555-1212', age:10},
- {name:'Mary', phone:'555-9876', age:19},
- {name:'Mike', phone:'555-4321', age:21},
- {name:'Adam', phone:'555-5678', age:35},
- {name:'Julie', phone:'555-8765', age:29}];
+ $scope.friends = [
+ {name: 'John', phone: '555-1212', age: 10},
+ {name: 'Mary', phone: '555-9876', age: 19},
+ {name: 'Mike', phone: '555-4321', age: 21},
+ {name: 'Adam', phone: '555-5678', age: 35},
+ {name: 'Julie', phone: '555-8765', age: 29}
+ ];
}]);
</file>
+ <file name="style.css">
+ .friends {
+ border-collapse: collapse;
+ }
+
+ .friends th {
+ border-bottom: 1px solid;
+ }
+ .friends td, .friends th {
+ border-left: 1px solid;
+ padding: 5px 10px;
+ }
+ .friends td:first-child, .friends th:first-child {
+ border-left: none;
+ }
+ </file>
+ <file name="protractor.js" type="protractor">
+ // Element locators
+ var names = element.all(by.repeater('friends').column('friend.name'));
+
+ it('should sort friends by age in reverse order', function() {
+ expect(names.get(0).getText()).toBe('Adam');
+ expect(names.get(1).getText()).toBe('Julie');
+ expect(names.get(2).getText()).toBe('Mike');
+ expect(names.get(3).getText()).toBe('Mary');
+ expect(names.get(4).getText()).toBe('John');
+ });
+ </file>
</example>
+ * <hr />
*
- * The predicate and reverse parameters can be controlled dynamically through scope properties,
- * as shown in the next example.
* @example
- <example module="orderByExample">
+ * ### Changing parameters dynamically
+ *
+ * All parameters can be changed dynamically. The next example shows how you can make the columns of
+ * a table sortable, by binding the `expression` and `reverse` parameters to scope properties.
+ *
+ <example name="orderBy-dynamic" module="orderByExample2">
<file name="index.html">
<div ng-controller="ExampleController">
- <pre>Sorting predicate = {{predicate}}; reverse = {{reverse}}</pre>
+ <pre>Sort by = {{propertyName}}; reverse = {{reverse}}</pre>
<hr/>
- <button ng-click="predicate=''">Set to unsorted</button>
- <table class="friend">
+ <button ng-click="propertyName = null; reverse = false">Set to unsorted</button>
+ <hr/>
+ <table class="friends">
<tr>
- <th>
- <button ng-click="order('name')">Name</button>
- <span class="sortorder" ng-show="predicate === 'name'" ng-class="{reverse:reverse}"></span>
- </th>
- <th>
- <button ng-click="order('phone')">Phone Number</button>
- <span class="sortorder" ng-show="predicate === 'phone'" ng-class="{reverse:reverse}"></span>
- </th>
- <th>
- <button ng-click="order('age')">Age</button>
- <span class="sortorder" ng-show="predicate === 'age'" ng-class="{reverse:reverse}"></span>
- </th>
+ <th>
+ <button ng-click="sortBy('name')">Name</button>
+ <span class="sortorder" ng-show="propertyName === 'name'" ng-class="{reverse: reverse}"></span>
+ </th>
+ <th>
+ <button ng-click="sortBy('phone')">Phone Number</button>
+ <span class="sortorder" ng-show="propertyName === 'phone'" ng-class="{reverse: reverse}"></span>
+ </th>
+ <th>
+ <button ng-click="sortBy('age')">Age</button>
+ <span class="sortorder" ng-show="propertyName === 'age'" ng-class="{reverse: reverse}"></span>
+ </th>
</tr>
- <tr ng-repeat="friend in friends | orderBy:predicate:reverse">
+ <tr ng-repeat="friend in friends | orderBy:propertyName:reverse">
<td>{{friend.name}}</td>
<td>{{friend.phone}}</td>
<td>{{friend.age}}</td>
@@ -19808,111 +22166,350 @@ function limitToFilter() {
</div>
</file>
<file name="script.js">
- angular.module('orderByExample', [])
+ angular.module('orderByExample2', [])
.controller('ExampleController', ['$scope', function($scope) {
- $scope.friends =
- [{name:'John', phone:'555-1212', age:10},
- {name:'Mary', phone:'555-9876', age:19},
- {name:'Mike', phone:'555-4321', age:21},
- {name:'Adam', phone:'555-5678', age:35},
- {name:'Julie', phone:'555-8765', age:29}];
- $scope.predicate = 'age';
+ var friends = [
+ {name: 'John', phone: '555-1212', age: 10},
+ {name: 'Mary', phone: '555-9876', age: 19},
+ {name: 'Mike', phone: '555-4321', age: 21},
+ {name: 'Adam', phone: '555-5678', age: 35},
+ {name: 'Julie', phone: '555-8765', age: 29}
+ ];
+
+ $scope.propertyName = 'age';
$scope.reverse = true;
- $scope.order = function(predicate) {
- $scope.reverse = ($scope.predicate === predicate) ? !$scope.reverse : false;
- $scope.predicate = predicate;
+ $scope.friends = friends;
+
+ $scope.sortBy = function(propertyName) {
+ $scope.reverse = ($scope.propertyName === propertyName) ? !$scope.reverse : false;
+ $scope.propertyName = propertyName;
};
}]);
- </file>
+ </file>
<file name="style.css">
+ .friends {
+ border-collapse: collapse;
+ }
+
+ .friends th {
+ border-bottom: 1px solid;
+ }
+ .friends td, .friends th {
+ border-left: 1px solid;
+ padding: 5px 10px;
+ }
+ .friends td:first-child, .friends th:first-child {
+ border-left: none;
+ }
+
.sortorder:after {
- content: '\25b2';
+ content: '\25b2'; // BLACK UP-POINTING TRIANGLE
}
.sortorder.reverse:after {
- content: '\25bc';
+ content: '\25bc'; // BLACK DOWN-POINTING TRIANGLE
}
</file>
+ <file name="protractor.js" type="protractor">
+ // Element locators
+ var unsortButton = element(by.partialButtonText('unsorted'));
+ var nameHeader = element(by.partialButtonText('Name'));
+ var phoneHeader = element(by.partialButtonText('Phone'));
+ var ageHeader = element(by.partialButtonText('Age'));
+ var firstName = element(by.repeater('friends').column('friend.name').row(0));
+ var lastName = element(by.repeater('friends').column('friend.name').row(4));
+
+ it('should sort friends by some property, when clicking on the column header', function() {
+ expect(firstName.getText()).toBe('Adam');
+ expect(lastName.getText()).toBe('John');
+
+ phoneHeader.click();
+ expect(firstName.getText()).toBe('John');
+ expect(lastName.getText()).toBe('Mary');
+
+ nameHeader.click();
+ expect(firstName.getText()).toBe('Adam');
+ expect(lastName.getText()).toBe('Mike');
+
+ ageHeader.click();
+ expect(firstName.getText()).toBe('John');
+ expect(lastName.getText()).toBe('Adam');
+ });
+
+ it('should sort friends in reverse order, when clicking on the same column', function() {
+ expect(firstName.getText()).toBe('Adam');
+ expect(lastName.getText()).toBe('John');
+
+ ageHeader.click();
+ expect(firstName.getText()).toBe('John');
+ expect(lastName.getText()).toBe('Adam');
+
+ ageHeader.click();
+ expect(firstName.getText()).toBe('Adam');
+ expect(lastName.getText()).toBe('John');
+ });
+
+ it('should restore the original order, when clicking "Set to unsorted"', function() {
+ expect(firstName.getText()).toBe('Adam');
+ expect(lastName.getText()).toBe('John');
+
+ unsortButton.click();
+ expect(firstName.getText()).toBe('John');
+ expect(lastName.getText()).toBe('Julie');
+ });
+ </file>
</example>
+ * <hr />
*
- * It's also possible to call the orderBy filter manually, by injecting `$filter`, retrieving the
- * filter routine with `$filter('orderBy')`, and calling the returned filter routine with the
- * desired parameters.
+ * @example
+ * ### Using `orderBy` inside a controller
*
- * Example:
+ * It is also possible to call the `orderBy` filter manually, by injecting `orderByFilter`, and
+ * calling it with the desired parameters. (Alternatively, you could inject the `$filter` factory
+ * and retrieve the `orderBy` filter with `$filter('orderBy')`.)
*
- * @example
- <example module="orderByExample">
- <file name="index.html">
- <div ng-controller="ExampleController">
- <pre>Sorting predicate = {{predicate}}; reverse = {{reverse}}</pre>
- <table class="friend">
- <tr>
- <th>
- <button ng-click="order('name')">Name</button>
- <span class="sortorder" ng-show="predicate === 'name'" ng-class="{reverse:reverse}"></span>
- </th>
- <th>
- <button ng-click="order('phone')">Phone Number</button>
- <span class="sortorder" ng-show="predicate === 'phone'" ng-class="{reverse:reverse}"></span>
- </th>
- <th>
- <button ng-click="order('age')">Age</button>
- <span class="sortorder" ng-show="predicate === 'age'" ng-class="{reverse:reverse}"></span>
- </th>
- </tr>
- <tr ng-repeat="friend in friends">
- <td>{{friend.name}}</td>
- <td>{{friend.phone}}</td>
- <td>{{friend.age}}</td>
- </tr>
- </table>
- </div>
- </file>
+ <example name="orderBy-call-manually" module="orderByExample3">
+ <file name="index.html">
+ <div ng-controller="ExampleController">
+ <pre>Sort by = {{propertyName}}; reverse = {{reverse}}</pre>
+ <hr/>
+ <button ng-click="sortBy(null)">Set to unsorted</button>
+ <hr/>
+ <table class="friends">
+ <tr>
+ <th>
+ <button ng-click="sortBy('name')">Name</button>
+ <span class="sortorder" ng-show="propertyName === 'name'" ng-class="{reverse: reverse}"></span>
+ </th>
+ <th>
+ <button ng-click="sortBy('phone')">Phone Number</button>
+ <span class="sortorder" ng-show="propertyName === 'phone'" ng-class="{reverse: reverse}"></span>
+ </th>
+ <th>
+ <button ng-click="sortBy('age')">Age</button>
+ <span class="sortorder" ng-show="propertyName === 'age'" ng-class="{reverse: reverse}"></span>
+ </th>
+ </tr>
+ <tr ng-repeat="friend in friends">
+ <td>{{friend.name}}</td>
+ <td>{{friend.phone}}</td>
+ <td>{{friend.age}}</td>
+ </tr>
+ </table>
+ </div>
+ </file>
+ <file name="script.js">
+ angular.module('orderByExample3', [])
+ .controller('ExampleController', ['$scope', 'orderByFilter', function($scope, orderBy) {
+ var friends = [
+ {name: 'John', phone: '555-1212', age: 10},
+ {name: 'Mary', phone: '555-9876', age: 19},
+ {name: 'Mike', phone: '555-4321', age: 21},
+ {name: 'Adam', phone: '555-5678', age: 35},
+ {name: 'Julie', phone: '555-8765', age: 29}
+ ];
+
+ $scope.propertyName = 'age';
+ $scope.reverse = true;
+ $scope.friends = orderBy(friends, $scope.propertyName, $scope.reverse);
- <file name="script.js">
- angular.module('orderByExample', [])
- .controller('ExampleController', ['$scope', '$filter', function($scope, $filter) {
- var orderBy = $filter('orderBy');
- $scope.friends = [
- { name: 'John', phone: '555-1212', age: 10 },
- { name: 'Mary', phone: '555-9876', age: 19 },
- { name: 'Mike', phone: '555-4321', age: 21 },
- { name: 'Adam', phone: '555-5678', age: 35 },
- { name: 'Julie', phone: '555-8765', age: 29 }
- ];
- $scope.order = function(predicate) {
- $scope.predicate = predicate;
- $scope.reverse = ($scope.predicate === predicate) ? !$scope.reverse : false;
- $scope.friends = orderBy($scope.friends, predicate, $scope.reverse);
- };
- $scope.order('age', true);
- }]);
- </file>
+ $scope.sortBy = function(propertyName) {
+ $scope.reverse = (propertyName !== null && $scope.propertyName === propertyName)
+ ? !$scope.reverse : false;
+ $scope.propertyName = propertyName;
+ $scope.friends = orderBy(friends, $scope.propertyName, $scope.reverse);
+ };
+ }]);
+ </file>
+ <file name="style.css">
+ .friends {
+ border-collapse: collapse;
+ }
+
+ .friends th {
+ border-bottom: 1px solid;
+ }
+ .friends td, .friends th {
+ border-left: 1px solid;
+ padding: 5px 10px;
+ }
+ .friends td:first-child, .friends th:first-child {
+ border-left: none;
+ }
- <file name="style.css">
.sortorder:after {
- content: '\25b2';
+ content: '\25b2'; // BLACK UP-POINTING TRIANGLE
}
.sortorder.reverse:after {
- content: '\25bc';
+ content: '\25bc'; // BLACK DOWN-POINTING TRIANGLE
}
- </file>
-</example>
+ </file>
+ <file name="protractor.js" type="protractor">
+ // Element locators
+ var unsortButton = element(by.partialButtonText('unsorted'));
+ var nameHeader = element(by.partialButtonText('Name'));
+ var phoneHeader = element(by.partialButtonText('Phone'));
+ var ageHeader = element(by.partialButtonText('Age'));
+ var firstName = element(by.repeater('friends').column('friend.name').row(0));
+ var lastName = element(by.repeater('friends').column('friend.name').row(4));
+
+ it('should sort friends by some property, when clicking on the column header', function() {
+ expect(firstName.getText()).toBe('Adam');
+ expect(lastName.getText()).toBe('John');
+
+ phoneHeader.click();
+ expect(firstName.getText()).toBe('John');
+ expect(lastName.getText()).toBe('Mary');
+
+ nameHeader.click();
+ expect(firstName.getText()).toBe('Adam');
+ expect(lastName.getText()).toBe('Mike');
+
+ ageHeader.click();
+ expect(firstName.getText()).toBe('John');
+ expect(lastName.getText()).toBe('Adam');
+ });
+
+ it('should sort friends in reverse order, when clicking on the same column', function() {
+ expect(firstName.getText()).toBe('Adam');
+ expect(lastName.getText()).toBe('John');
+
+ ageHeader.click();
+ expect(firstName.getText()).toBe('John');
+ expect(lastName.getText()).toBe('Adam');
+
+ ageHeader.click();
+ expect(firstName.getText()).toBe('Adam');
+ expect(lastName.getText()).toBe('John');
+ });
+
+ it('should restore the original order, when clicking "Set to unsorted"', function() {
+ expect(firstName.getText()).toBe('Adam');
+ expect(lastName.getText()).toBe('John');
+
+ unsortButton.click();
+ expect(firstName.getText()).toBe('John');
+ expect(lastName.getText()).toBe('Julie');
+ });
+ </file>
+ </example>
+ * <hr />
+ *
+ * @example
+ * ### Using a custom comparator
+ *
+ * If you have very specific requirements about the way items are sorted, you can pass your own
+ * comparator function. For example, you might need to compare some strings in a locale-sensitive
+ * way. (When specifying a custom comparator, you also need to pass a value for the `reverse`
+ * argument - passing `false` retains the default sorting order, i.e. ascending.)
+ *
+ <example name="orderBy-custom-comparator" module="orderByExample4">
+ <file name="index.html">
+ <div ng-controller="ExampleController">
+ <div class="friends-container custom-comparator">
+ <h3>Locale-sensitive Comparator</h3>
+ <table class="friends">
+ <tr>
+ <th>Name</th>
+ <th>Favorite Letter</th>
+ </tr>
+ <tr ng-repeat="friend in friends | orderBy:'favoriteLetter':false:localeSensitiveComparator">
+ <td>{{friend.name}}</td>
+ <td>{{friend.favoriteLetter}}</td>
+ </tr>
+ </table>
+ </div>
+ <div class="friends-container default-comparator">
+ <h3>Default Comparator</h3>
+ <table class="friends">
+ <tr>
+ <th>Name</th>
+ <th>Favorite Letter</th>
+ </tr>
+ <tr ng-repeat="friend in friends | orderBy:'favoriteLetter'">
+ <td>{{friend.name}}</td>
+ <td>{{friend.favoriteLetter}}</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ </file>
+ <file name="script.js">
+ angular.module('orderByExample4', [])
+ .controller('ExampleController', ['$scope', function($scope) {
+ $scope.friends = [
+ {name: 'John', favoriteLetter: 'Ä'},
+ {name: 'Mary', favoriteLetter: 'Ü'},
+ {name: 'Mike', favoriteLetter: 'Ö'},
+ {name: 'Adam', favoriteLetter: 'H'},
+ {name: 'Julie', favoriteLetter: 'Z'}
+ ];
+
+ $scope.localeSensitiveComparator = function(v1, v2) {
+ // If we don't get strings, just compare by index
+ if (v1.type !== 'string' || v2.type !== 'string') {
+ return (v1.index < v2.index) ? -1 : 1;
+ }
+
+ // Compare strings alphabetically, taking locale into account
+ return v1.value.localeCompare(v2.value);
+ };
+ }]);
+ </file>
+ <file name="style.css">
+ .friends-container {
+ display: inline-block;
+ margin: 0 30px;
+ }
+
+ .friends {
+ border-collapse: collapse;
+ }
+
+ .friends th {
+ border-bottom: 1px solid;
+ }
+ .friends td, .friends th {
+ border-left: 1px solid;
+ padding: 5px 10px;
+ }
+ .friends td:first-child, .friends th:first-child {
+ border-left: none;
+ }
+ </file>
+ <file name="protractor.js" type="protractor">
+ // Element locators
+ var container = element(by.css('.custom-comparator'));
+ var names = container.all(by.repeater('friends').column('friend.name'));
+
+ it('should sort friends by favorite letter (in correct alphabetical order)', function() {
+ expect(names.get(0).getText()).toBe('John');
+ expect(names.get(1).getText()).toBe('Adam');
+ expect(names.get(2).getText()).toBe('Mike');
+ expect(names.get(3).getText()).toBe('Mary');
+ expect(names.get(4).getText()).toBe('Julie');
+ });
+ </file>
+ </example>
+ *
*/
orderByFilter.$inject = ['$parse'];
function orderByFilter($parse) {
- return function(array, sortPredicate, reverseOrder) {
+ return function(array, sortPredicate, reverseOrder, compareFn) {
- if (!(isArrayLike(array))) return array;
+ if (array == null) return array;
+ if (!isArrayLike(array)) {
+ throw minErr('orderBy')('notarray', 'Expected array but received: {0}', array);
+ }
if (!isArray(sortPredicate)) { sortPredicate = [sortPredicate]; }
if (sortPredicate.length === 0) { sortPredicate = ['+']; }
- var predicates = processPredicates(sortPredicate, reverseOrder);
- // Add a predicate at the end that evaluates to the element index. This makes the
- // sort stable as it works as a tie-breaker when all the input predicates cannot
- // distinguish between two elements.
- predicates.push({ get: function() { return {}; }, descending: reverseOrder ? -1 : 1});
+ var predicates = processPredicates(sortPredicate);
+
+ var descending = reverseOrder ? -1 : 1;
+
+ // Define the `compare()` function. Use a default comparator if none is specified.
+ var compare = isFunction(compareFn) ? compareFn : defaultCompare;
// The next three lines are a version of a Swartzian Transform idiom from Perl
// (sometimes called the Decorate-Sort-Undecorate idiom)
@@ -19924,8 +22521,12 @@ function orderByFilter($parse) {
return array;
function getComparisonObject(value, index) {
+ // NOTE: We are adding an extra `tieBreaker` value based on the element's index.
+ // This will be used to keep the sort stable when none of the input predicates can
+ // distinguish between two elements.
return {
value: value,
+ tieBreaker: {value: index, type: 'number', index: index},
predicateValues: predicates.map(function(predicate) {
return getPredicateValue(predicate.get(value), index);
})
@@ -19933,25 +22534,26 @@ function orderByFilter($parse) {
}
function doComparison(v1, v2) {
- var result = 0;
- for (var index=0, length = predicates.length; index < length; ++index) {
- result = compare(v1.predicateValues[index], v2.predicateValues[index]) * predicates[index].descending;
- if (result) break;
+ for (var i = 0, ii = predicates.length; i < ii; i++) {
+ var result = compare(v1.predicateValues[i], v2.predicateValues[i]);
+ if (result) {
+ return result * predicates[i].descending * descending;
+ }
}
- return result;
+
+ return (compare(v1.tieBreaker, v2.tieBreaker) || defaultCompare(v1.tieBreaker, v2.tieBreaker)) * descending;
}
};
- function processPredicates(sortPredicate, reverseOrder) {
- reverseOrder = reverseOrder ? -1 : 1;
- return sortPredicate.map(function(predicate) {
+ function processPredicates(sortPredicates) {
+ return sortPredicates.map(function(predicate) {
var descending = 1, get = identity;
if (isFunction(predicate)) {
get = predicate;
} else if (isString(predicate)) {
- if ((predicate.charAt(0) == '+' || predicate.charAt(0) == '-')) {
- descending = predicate.charAt(0) == '-' ? -1 : 1;
+ if ((predicate.charAt(0) === '+' || predicate.charAt(0) === '-')) {
+ descending = predicate.charAt(0) === '-' ? -1 : 1;
predicate = predicate.substring(1);
}
if (predicate !== '') {
@@ -19962,7 +22564,7 @@ function orderByFilter($parse) {
}
}
}
- return { get: get, descending: descending * reverseOrder };
+ return {get: get, descending: descending};
});
}
@@ -19977,9 +22579,9 @@ function orderByFilter($parse) {
}
}
- function objectValue(value, index) {
+ function objectValue(value) {
// If `valueOf` is a valid function use that
- if (typeof value.valueOf === 'function') {
+ if (isFunction(value.valueOf)) {
value = value.valueOf();
if (isPrimitive(value)) return value;
}
@@ -19988,8 +22590,8 @@ function orderByFilter($parse) {
value = value.toString();
if (isPrimitive(value)) return value;
}
- // We have a basic object so we use the position of the object in the collection
- return index;
+
+ return value;
}
function getPredicateValue(value, index) {
@@ -19997,23 +22599,39 @@ function orderByFilter($parse) {
if (value === null) {
type = 'string';
value = 'null';
- } else if (type === 'string') {
- value = value.toLowerCase();
} else if (type === 'object') {
- value = objectValue(value, index);
+ value = objectValue(value);
}
- return { value: value, type: type };
+ return {value: value, type: type, index: index};
}
- function compare(v1, v2) {
+ function defaultCompare(v1, v2) {
var result = 0;
- if (v1.type === v2.type) {
- if (v1.value !== v2.value) {
- result = v1.value < v2.value ? -1 : 1;
+ var type1 = v1.type;
+ var type2 = v2.type;
+
+ if (type1 === type2) {
+ var value1 = v1.value;
+ var value2 = v2.value;
+
+ if (type1 === 'string') {
+ // Compare strings case-insensitively
+ value1 = value1.toLowerCase();
+ value2 = value2.toLowerCase();
+ } else if (type1 === 'object') {
+ // For basic objects, use the position of the object
+ // in the collection instead of the value
+ if (isObject(value1)) value1 = v1.index;
+ if (isObject(value2)) value2 = v2.index;
+ }
+
+ if (value1 !== value2) {
+ result = value1 < value2 ? -1 : 1;
}
} else {
- result = v1.type < v2.type ? -1 : 1;
+ result = type1 < type2 ? -1 : 1;
}
+
return result;
}
}
@@ -20034,12 +22652,10 @@ function ngDirective(directive) {
* @restrict E
*
* @description
- * Modifies the default behavior of the html A tag so that the default action is prevented when
+ * Modifies the default behavior of the html a tag so that the default action is prevented when
* the href attribute is empty.
*
- * This change permits the easy creation of action links with the `ngClick` directive
- * without changing the location or causing page reloads, e.g.:
- * `<a href="" ng-click="list.addItem()">Add Item</a>`
+ * For dynamically creating `href` attributes for a tags, see the {@link ng.ngHref `ngHref`} directive.
*/
var htmlAnchorDirective = valueFn({
restrict: 'E',
@@ -20093,7 +22709,7 @@ var htmlAnchorDirective = valueFn({
* @example
* This example shows various combinations of `href`, `ng-href` and `ng-click` attributes
* in links and their different behaviors:
- <example>
+ <example name="ng-href">
<file name="index.html">
<input ng-model="value" /><br />
<a id="link-1" href ng-click="value = 1">link 1</a> (link, don't reload)<br />
@@ -20222,14 +22838,15 @@ var htmlAnchorDirective = valueFn({
*
* @description
*
- * This directive sets the `disabled` attribute on the element if the
+ * This directive sets the `disabled` attribute on the element (typically a form control,
+ * e.g. `input`, `button`, `select` etc.) if the
* {@link guide/expression expression} inside `ngDisabled` evaluates to truthy.
*
* A special directive is necessary because we cannot use interpolation inside the `disabled`
* attribute. See the {@link guide/interpolation interpolation guide} for more info.
*
* @example
- <example>
+ <example name="ng-disabled">
<file name="index.html">
<label>Click me to toggle: <input type="checkbox" ng-model="checked"></label><br/>
<button ng-model="button" ng-disabled="checked">Button</button>
@@ -20265,7 +22882,7 @@ var htmlAnchorDirective = valueFn({
* attribute. See the {@link guide/interpolation interpolation guide} for more info.
*
* @example
- <example>
+ <example name="ng-checked">
<file name="index.html">
<label>Check me to check both: <input type="checkbox" ng-model="master"></label><br/>
<input id="checkSlave" type="checkbox" ng-checked="master" aria-label="Slave input">
@@ -20293,13 +22910,15 @@ var htmlAnchorDirective = valueFn({
*
* @description
*
- * Sets the `readOnly` attribute on the element, if the expression inside `ngReadonly` is truthy.
+ * Sets the `readonly` attribute on the element, if the expression inside `ngReadonly` is truthy.
+ * Note that `readonly` applies only to `input` elements with specific types. [See the input docs on
+ * MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#attr-readonly) for more information.
*
- * A special directive is necessary because we cannot use interpolation inside the `readOnly`
+ * A special directive is necessary because we cannot use interpolation inside the `readonly`
* attribute. See the {@link guide/interpolation interpolation guide} for more info.
*
* @example
- <example>
+ <example name="ng-readonly">
<file name="index.html">
<label>Check me to make text readonly: <input type="checkbox" ng-model="checked"></label><br/>
<input type="text" ng-readonly="checked" value="I'm Angular" aria-label="Readonly field" />
@@ -20332,8 +22951,15 @@ var htmlAnchorDirective = valueFn({
* A special directive is necessary because we cannot use interpolation inside the `selected`
* attribute. See the {@link guide/interpolation interpolation guide} for more info.
*
+ * <div class="alert alert-warning">
+ * **Note:** `ngSelected` does not interact with the `select` and `ngModel` directives, it only
+ * sets the `selected` attribute on the element. If you are using `ngModel` on the select, you
+ * should not use `ngSelected` on the options, as `ngModel` will set the select value and
+ * selected options.
+ * </div>
+ *
* @example
- <example>
+ <example name="ng-selected">
<file name="index.html">
<label>Check me to select: <input type="checkbox" ng-model="selected"></label><br/>
<select aria-label="ngSelected demo">
@@ -20368,8 +22994,13 @@ var htmlAnchorDirective = valueFn({
* A special directive is necessary because we cannot use interpolation inside the `open`
* attribute. See the {@link guide/interpolation interpolation guide} for more info.
*
+ * ## A note about browser compatibility
+ *
+ * Edge, Firefox, and Internet Explorer do not support the `details` element, it is
+ * recommended to use {@link ng.ngShow} and {@link ng.ngHide} instead.
+ *
* @example
- <example>
+ <example name="ng-open">
<file name="index.html">
<label>Check me check multiple: <input type="checkbox" ng-model="open"></label><br/>
<details id="details" ng-open="open">
@@ -20395,7 +23026,7 @@ var ngAttributeAliasDirectives = {};
// boolean attrs are evaluated
forEach(BOOLEAN_ATTR, function(propName, attrName) {
// binding to multiple is not supported
- if (propName == "multiple") return;
+ if (propName === 'multiple') return;
function defaultLinkFn(scope, element, attr) {
scope.$watch(attr[normalized], function ngBooleanAttrWatchAction(value) {
@@ -20432,10 +23063,10 @@ forEach(ALIASED_ATTR, function(htmlAttr, ngAttr) {
link: function(scope, element, attr) {
//special case ngPattern when a literal regular expression value
//is used as the expression (this way we don't have to watch anything).
- if (ngAttr === "ngPattern" && attr.ngPattern.charAt(0) == "/") {
+ if (ngAttr === 'ngPattern' && attr.ngPattern.charAt(0) === '/') {
var match = attr.ngPattern.match(REGEX_STRING_REGEXP);
if (match) {
- attr.$set("ngPattern", new RegExp(match[1], match[2]));
+ attr.$set('ngPattern', new RegExp(match[1], match[2]));
return;
}
}
@@ -20475,10 +23106,11 @@ forEach(['src', 'srcset', 'href'], function(attrName) {
attr.$set(name, value);
- // on IE, if "ng:src" directive declaration is used and "src" attribute doesn't exist
+ // Support: IE 9-11 only
+ // On IE, if "ng:src" directive declaration is used and "src" attribute doesn't exist
// then calling element.setAttribute('src', 'foo') doesn't do anything, so we need
// to set the property as well to achieve the desired effect.
- // we use attr[attrName] value since $set can sanitize the url.
+ // We use attr[attrName] value since $set can sanitize the url.
if (msie && propName) element.prop(propName, attr[name]);
});
}
@@ -20486,7 +23118,7 @@ forEach(['src', 'srcset', 'href'], function(attrName) {
};
});
-/* global -nullFormCtrl, -SUBMITTED_CLASS, addSetValidityMethod: true
+/* global -nullFormCtrl, -PENDING_CLASS, -SUBMITTED_CLASS
*/
var nullFormCtrl = {
$addControl: noop,
@@ -20497,6 +23129,7 @@ var nullFormCtrl = {
$setPristine: noop,
$setSubmitted: noop
},
+PENDING_CLASS = 'ng-pending',
SUBMITTED_CLASS = 'ng-submitted';
function nullFormRenameControl(control, name) {
@@ -20511,17 +23144,23 @@ function nullFormRenameControl(control, name) {
* @property {boolean} $dirty True if user has already interacted with the form.
* @property {boolean} $valid True if all of the containing forms and controls are valid.
* @property {boolean} $invalid True if at least one containing control or form is invalid.
- * @property {boolean} $pending True if at least one containing control or form is pending.
* @property {boolean} $submitted True if user has submitted the form even if its invalid.
*
- * @property {Object} $error Is an object hash, containing references to controls or
- * forms with failing validators, where:
+ * @property {Object} $pending An object hash, containing references to controls or forms with
+ * pending validators, where:
+ *
+ * - keys are validations tokens (error names).
+ * - values are arrays of controls or forms that have a pending validator for the given error name.
+ *
+ * See {@link form.FormController#$error $error} for a list of built-in validation tokens.
+ *
+ * @property {Object} $error An object hash, containing references to controls or forms with failing
+ * validators, where:
*
* - keys are validation tokens (error names),
- * - values are arrays of controls or forms that have a failing validator for given error name.
+ * - values are arrays of controls or forms that have a failing validator for the given error name.
*
* Built-in validation tokens:
- *
* - `email`
* - `max`
* - `maxlength`
@@ -20547,22 +23186,28 @@ function nullFormRenameControl(control, name) {
*/
//asks for $scope to fool the BC controller module
FormController.$inject = ['$element', '$attrs', '$scope', '$animate', '$interpolate'];
-function FormController(element, attrs, $scope, $animate, $interpolate) {
- var form = this,
- controls = [];
+function FormController($element, $attrs, $scope, $animate, $interpolate) {
+ this.$$controls = [];
// init state
- form.$error = {};
- form.$$success = {};
- form.$pending = undefined;
- form.$name = $interpolate(attrs.name || attrs.ngForm || '')($scope);
- form.$dirty = false;
- form.$pristine = true;
- form.$valid = true;
- form.$invalid = false;
- form.$submitted = false;
- form.$$parentForm = nullFormCtrl;
+ this.$error = {};
+ this.$$success = {};
+ this.$pending = undefined;
+ this.$name = $interpolate($attrs.name || $attrs.ngForm || '')($scope);
+ this.$dirty = false;
+ this.$pristine = true;
+ this.$valid = true;
+ this.$invalid = false;
+ this.$submitted = false;
+ this.$$parentForm = nullFormCtrl;
+
+ this.$$element = $element;
+ this.$$animate = $animate;
+ setupValidity(this);
+}
+
+FormController.prototype = {
/**
* @ngdoc method
* @name form.FormController#$rollbackViewValue
@@ -20574,11 +23219,11 @@ function FormController(element, attrs, $scope, $animate, $interpolate) {
* event defined in `ng-model-options`. This method is typically needed by the reset button of
* a form that uses `ng-model-options` to pend updates.
*/
- form.$rollbackViewValue = function() {
- forEach(controls, function(control) {
+ $rollbackViewValue: function() {
+ forEach(this.$$controls, function(control) {
control.$rollbackViewValue();
});
- };
+ },
/**
* @ngdoc method
@@ -20591,11 +23236,11 @@ function FormController(element, attrs, $scope, $animate, $interpolate) {
* event defined in `ng-model-options`. This method is rarely needed as `NgModelController`
* usually handles calling this in response to input events.
*/
- form.$commitViewValue = function() {
- forEach(controls, function(control) {
+ $commitViewValue: function() {
+ forEach(this.$$controls, function(control) {
control.$commitViewValue();
});
- };
+ },
/**
* @ngdoc method
@@ -20613,34 +23258,34 @@ function FormController(element, attrs, $scope, $animate, $interpolate) {
*
* However, if the method is used programmatically, for example by adding dynamically created controls,
* or controls that have been previously removed without destroying their corresponding DOM element,
- * it's the developers responsiblity to make sure the current state propagates to the parent form.
+ * it's the developers responsibility to make sure the current state propagates to the parent form.
*
* For example, if an input control is added that is already `$dirty` and has `$error` properties,
* calling `$setDirty()` and `$validate()` afterwards will propagate the state to the parent form.
*/
- form.$addControl = function(control) {
+ $addControl: function(control) {
// Breaking change - before, inputs whose name was "hasOwnProperty" were quietly ignored
// and not added to the scope. Now we throw an error.
assertNotHasOwnProperty(control.$name, 'input');
- controls.push(control);
+ this.$$controls.push(control);
if (control.$name) {
- form[control.$name] = control;
+ this[control.$name] = control;
}
- control.$$parentForm = form;
- };
+ control.$$parentForm = this;
+ },
// Private API: rename a form control
- form.$$renameControl = function(control, newName) {
+ $$renameControl: function(control, newName) {
var oldName = control.$name;
- if (form[oldName] === control) {
- delete form[oldName];
+ if (this[oldName] === control) {
+ delete this[oldName];
}
- form[newName] = control;
+ this[newName] = control;
control.$name = newName;
- };
+ },
/**
* @ngdoc method
@@ -20658,60 +23303,26 @@ function FormController(element, attrs, $scope, $animate, $interpolate) {
* different from case to case. For example, removing the only `$dirty` control from a form may or
* may not mean that the form is still `$dirty`.
*/
- form.$removeControl = function(control) {
- if (control.$name && form[control.$name] === control) {
- delete form[control.$name];
- }
- forEach(form.$pending, function(value, name) {
- form.$setValidity(name, null, control);
- });
- forEach(form.$error, function(value, name) {
- form.$setValidity(name, null, control);
- });
- forEach(form.$$success, function(value, name) {
- form.$setValidity(name, null, control);
- });
-
- arrayRemove(controls, control);
+ $removeControl: function(control) {
+ if (control.$name && this[control.$name] === control) {
+ delete this[control.$name];
+ }
+ forEach(this.$pending, function(value, name) {
+ // eslint-disable-next-line no-invalid-this
+ this.$setValidity(name, null, control);
+ }, this);
+ forEach(this.$error, function(value, name) {
+ // eslint-disable-next-line no-invalid-this
+ this.$setValidity(name, null, control);
+ }, this);
+ forEach(this.$$success, function(value, name) {
+ // eslint-disable-next-line no-invalid-this
+ this.$setValidity(name, null, control);
+ }, this);
+
+ arrayRemove(this.$$controls, control);
control.$$parentForm = nullFormCtrl;
- };
-
-
- /**
- * @ngdoc method
- * @name form.FormController#$setValidity
- *
- * @description
- * Sets the validity of a form control.
- *
- * This method will also propagate to parent forms.
- */
- addSetValidityMethod({
- ctrl: this,
- $element: element,
- set: function(object, property, controller) {
- var list = object[property];
- if (!list) {
- object[property] = [controller];
- } else {
- var index = list.indexOf(controller);
- if (index === -1) {
- list.push(controller);
- }
- }
- },
- unset: function(object, property, controller) {
- var list = object[property];
- if (!list) {
- return;
- }
- arrayRemove(list, controller);
- if (list.length === 0) {
- delete object[property];
- }
- },
- $animate: $animate
- });
+ },
/**
* @ngdoc method
@@ -20723,13 +23334,13 @@ function FormController(element, attrs, $scope, $animate, $interpolate) {
* This method can be called to add the 'ng-dirty' class and set the form to a dirty
* state (ng-dirty class). This method will also propagate to parent forms.
*/
- form.$setDirty = function() {
- $animate.removeClass(element, PRISTINE_CLASS);
- $animate.addClass(element, DIRTY_CLASS);
- form.$dirty = true;
- form.$pristine = false;
- form.$$parentForm.$setDirty();
- };
+ $setDirty: function() {
+ this.$$animate.removeClass(this.$$element, PRISTINE_CLASS);
+ this.$$animate.addClass(this.$$element, DIRTY_CLASS);
+ this.$dirty = true;
+ this.$pristine = false;
+ this.$$parentForm.$setDirty();
+ },
/**
* @ngdoc method
@@ -20738,22 +23349,24 @@ function FormController(element, attrs, $scope, $animate, $interpolate) {
* @description
* Sets the form to its pristine state.
*
- * This method can be called to remove the 'ng-dirty' class and set the form to its pristine
- * state (ng-pristine class). This method will also propagate to all the controls contained
- * in this form.
+ * This method sets the form's `$pristine` state to true, the `$dirty` state to false, removes
+ * the `ng-dirty` class and adds the `ng-pristine` class. Additionally, it sets the `$submitted`
+ * state to false.
+ *
+ * This method will also propagate to all the controls contained in this form.
*
* Setting a form back to a pristine state is often useful when we want to 'reuse' a form after
* saving or resetting it.
*/
- form.$setPristine = function() {
- $animate.setClass(element, PRISTINE_CLASS, DIRTY_CLASS + ' ' + SUBMITTED_CLASS);
- form.$dirty = false;
- form.$pristine = true;
- form.$submitted = false;
- forEach(controls, function(control) {
+ $setPristine: function() {
+ this.$$animate.setClass(this.$$element, PRISTINE_CLASS, DIRTY_CLASS + ' ' + SUBMITTED_CLASS);
+ this.$dirty = false;
+ this.$pristine = true;
+ this.$submitted = false;
+ forEach(this.$$controls, function(control) {
control.$setPristine();
});
- };
+ },
/**
* @ngdoc method
@@ -20768,11 +23381,11 @@ function FormController(element, attrs, $scope, $animate, $interpolate) {
* Setting a form controls back to their untouched state is often useful when setting the form
* back to its pristine state.
*/
- form.$setUntouched = function() {
- forEach(controls, function(control) {
+ $setUntouched: function() {
+ forEach(this.$$controls, function(control) {
control.$setUntouched();
});
- };
+ },
/**
* @ngdoc method
@@ -20781,12 +23394,61 @@ function FormController(element, attrs, $scope, $animate, $interpolate) {
* @description
* Sets the form to its submitted state.
*/
- form.$setSubmitted = function() {
- $animate.addClass(element, SUBMITTED_CLASS);
- form.$submitted = true;
- form.$$parentForm.$setSubmitted();
- };
-}
+ $setSubmitted: function() {
+ this.$$animate.addClass(this.$$element, SUBMITTED_CLASS);
+ this.$submitted = true;
+ this.$$parentForm.$setSubmitted();
+ }
+};
+
+/**
+ * @ngdoc method
+ * @name form.FormController#$setValidity
+ *
+ * @description
+ * Change the validity state of the form, and notify the parent form (if any).
+ *
+ * Application developers will rarely need to call this method directly. It is used internally, by
+ * {@link ngModel.NgModelController#$setValidity NgModelController.$setValidity()}, to propagate a
+ * control's validity state to the parent `FormController`.
+ *
+ * @param {string} validationErrorKey Name of the validator. The `validationErrorKey` will be
+ * assigned to either `$error[validationErrorKey]` or `$pending[validationErrorKey]` (for
+ * unfulfilled `$asyncValidators`), so that it is available for data-binding. The
+ * `validationErrorKey` should be in camelCase and will get converted into dash-case for
+ * class name. Example: `myError` will result in `ng-valid-my-error` and
+ * `ng-invalid-my-error` classes and can be bound to as `{{ someForm.$error.myError }}`.
+ * @param {boolean} isValid Whether the current state is valid (true), invalid (false), pending
+ * (undefined), or skipped (null). Pending is used for unfulfilled `$asyncValidators`.
+ * Skipped is used by AngularJS when validators do not run because of parse errors and when
+ * `$asyncValidators` do not run because any of the `$validators` failed.
+ * @param {NgModelController | FormController} controller - The controller whose validity state is
+ * triggering the change.
+ */
+addSetValidityMethod({
+ clazz: FormController,
+ set: function(object, property, controller) {
+ var list = object[property];
+ if (!list) {
+ object[property] = [controller];
+ } else {
+ var index = list.indexOf(controller);
+ if (index === -1) {
+ list.push(controller);
+ }
+ }
+ },
+ unset: function(object, property, controller) {
+ var list = object[property];
+ if (!list) {
+ return;
+ }
+ arrayRemove(list, controller);
+ if (list.length === 0) {
+ delete object[property];
+ }
+ }
+});
/**
* @ngdoc directive
@@ -20896,7 +23558,7 @@ function FormController(element, attrs, $scope, $animate, $interpolate) {
* </pre>
*
* @example
- <example deps="angular-animate.js" animations="true" fixBase="true" module="formExample">
+ <example name="ng-form" deps="angular-animate.js" animations="true" fixBase="true" module="formExample">
<file name="index.html">
<script>
angular.module('formExample', [])
@@ -20983,13 +23645,13 @@ var formDirectiveFactory = function(isNgForm) {
event.preventDefault();
};
- addEventListenerFn(formElement[0], 'submit', handleFormSubmission);
+ formElement[0].addEventListener('submit', handleFormSubmission);
// unregister the preventDefault listener so that we don't not leak memory but in a
// way that will achieve the prevention of the default action.
formElement.on('$destroy', function() {
$timeout(function() {
- removeEventListenerFn(formElement[0], 'submit', handleFormSubmission);
+ formElement[0].removeEventListener('submit', handleFormSubmission);
}, 0, false);
});
}
@@ -21034,17 +23696,121 @@ var formDirectiveFactory = function(isNgForm) {
var formDirective = formDirectiveFactory();
var ngFormDirective = formDirectiveFactory(true);
-/* global VALID_CLASS: false,
+
+
+// helper methods
+function setupValidity(instance) {
+ instance.$$classCache = {};
+ instance.$$classCache[INVALID_CLASS] = !(instance.$$classCache[VALID_CLASS] = instance.$$element.hasClass(VALID_CLASS));
+}
+function addSetValidityMethod(context) {
+ var clazz = context.clazz,
+ set = context.set,
+ unset = context.unset;
+
+ clazz.prototype.$setValidity = function(validationErrorKey, state, controller) {
+ if (isUndefined(state)) {
+ createAndSet(this, '$pending', validationErrorKey, controller);
+ } else {
+ unsetAndCleanup(this, '$pending', validationErrorKey, controller);
+ }
+ if (!isBoolean(state)) {
+ unset(this.$error, validationErrorKey, controller);
+ unset(this.$$success, validationErrorKey, controller);
+ } else {
+ if (state) {
+ unset(this.$error, validationErrorKey, controller);
+ set(this.$$success, validationErrorKey, controller);
+ } else {
+ set(this.$error, validationErrorKey, controller);
+ unset(this.$$success, validationErrorKey, controller);
+ }
+ }
+ if (this.$pending) {
+ cachedToggleClass(this, PENDING_CLASS, true);
+ this.$valid = this.$invalid = undefined;
+ toggleValidationCss(this, '', null);
+ } else {
+ cachedToggleClass(this, PENDING_CLASS, false);
+ this.$valid = isObjectEmpty(this.$error);
+ this.$invalid = !this.$valid;
+ toggleValidationCss(this, '', this.$valid);
+ }
+
+ // re-read the state as the set/unset methods could have
+ // combined state in this.$error[validationError] (used for forms),
+ // where setting/unsetting only increments/decrements the value,
+ // and does not replace it.
+ var combinedState;
+ if (this.$pending && this.$pending[validationErrorKey]) {
+ combinedState = undefined;
+ } else if (this.$error[validationErrorKey]) {
+ combinedState = false;
+ } else if (this.$$success[validationErrorKey]) {
+ combinedState = true;
+ } else {
+ combinedState = null;
+ }
+
+ toggleValidationCss(this, validationErrorKey, combinedState);
+ this.$$parentForm.$setValidity(validationErrorKey, combinedState, this);
+ };
+
+ function createAndSet(ctrl, name, value, controller) {
+ if (!ctrl[name]) {
+ ctrl[name] = {};
+ }
+ set(ctrl[name], value, controller);
+ }
+
+ function unsetAndCleanup(ctrl, name, value, controller) {
+ if (ctrl[name]) {
+ unset(ctrl[name], value, controller);
+ }
+ if (isObjectEmpty(ctrl[name])) {
+ ctrl[name] = undefined;
+ }
+ }
+
+ function cachedToggleClass(ctrl, className, switchValue) {
+ if (switchValue && !ctrl.$$classCache[className]) {
+ ctrl.$$animate.addClass(ctrl.$$element, className);
+ ctrl.$$classCache[className] = true;
+ } else if (!switchValue && ctrl.$$classCache[className]) {
+ ctrl.$$animate.removeClass(ctrl.$$element, className);
+ ctrl.$$classCache[className] = false;
+ }
+ }
+
+ function toggleValidationCss(ctrl, validationErrorKey, isValid) {
+ validationErrorKey = validationErrorKey ? '-' + snake_case(validationErrorKey, '-') : '';
+
+ cachedToggleClass(ctrl, VALID_CLASS + validationErrorKey, isValid === true);
+ cachedToggleClass(ctrl, INVALID_CLASS + validationErrorKey, isValid === false);
+ }
+}
+
+function isObjectEmpty(obj) {
+ if (obj) {
+ for (var prop in obj) {
+ if (obj.hasOwnProperty(prop)) {
+ return false;
+ }
+ }
+ }
+ return true;
+}
+
+/* global
+ VALID_CLASS: false,
INVALID_CLASS: false,
PRISTINE_CLASS: false,
DIRTY_CLASS: false,
- UNTOUCHED_CLASS: false,
- TOUCHED_CLASS: false,
- ngModelMinErr: false,
+ ngModelMinErr: false
*/
-// Regex code is obtained from SO: https://stackoverflow.com/questions/3143070/javascript-regex-iso-datetime#answer-3143231
-var ISO_DATE_REGEXP = /\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z)/;
+// Regex code was initially obtained from SO prior to modification: https://stackoverflow.com/questions/3143070/javascript-regex-iso-datetime#answer-3143231
+var ISO_DATE_REGEXP = /^\d{4,}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+(?:[+-][0-2]\d:[0-5]\d|Z)$/;
// See valid URLs in RFC3987 (http://tools.ietf.org/html/rfc3987)
// Note: We are being more lenient, because browsers are too.
// 1. Scheme
@@ -21056,14 +23822,15 @@ var ISO_DATE_REGEXP = /\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-
// 7. Path
// 8. Query
// 9. Fragment
-// 1111111111111111 222 333333 44444 555555555555555555555555 666 77777777 8888888 999
-var URL_REGEXP = /^[a-z][a-z\d.+-]*:\/*(?:[^:@]+(?::[^@]+)?@)?(?:[^\s:/?#]+|\[[a-f\d:]+\])(?::\d+)?(?:\/[^?#]*)?(?:\?[^#]*)?(?:#.*)?$/i;
-var EMAIL_REGEXP = /^[a-z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i;
-var NUMBER_REGEXP = /^\s*(\-|\+)?(\d+|(\d*(\.\d*)))([eE][+-]?\d+)?\s*$/;
-var DATE_REGEXP = /^(\d{4})-(\d{2})-(\d{2})$/;
-var DATETIMELOCAL_REGEXP = /^(\d{4})-(\d\d)-(\d\d)T(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/;
-var WEEK_REGEXP = /^(\d{4})-W(\d\d)$/;
-var MONTH_REGEXP = /^(\d{4})-(\d\d)$/;
+// 1111111111111111 222 333333 44444 55555555555555555555555 666 77777777 8888888 999
+var URL_REGEXP = /^[a-z][a-z\d.+-]*:\/*(?:[^:@]+(?::[^@]+)?@)?(?:[^\s:/?#]+|\[[a-f\d:]+])(?::\d+)?(?:\/[^?#]*)?(?:\?[^#]*)?(?:#.*)?$/i;
+// eslint-disable-next-line max-len
+var EMAIL_REGEXP = /^(?=.{1,254}$)(?=.{1,64}@)[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+(\.[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+)*@[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?(\.[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?)*$/;
+var NUMBER_REGEXP = /^\s*(-|\+)?(\d+|(\d*(\.\d*)))([eE][+-]?\d+)?\s*$/;
+var DATE_REGEXP = /^(\d{4,})-(\d{2})-(\d{2})$/;
+var DATETIMELOCAL_REGEXP = /^(\d{4,})-(\d\d)-(\d\d)T(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/;
+var WEEK_REGEXP = /^(\d{4,})-W(\d\d)$/;
+var MONTH_REGEXP = /^(\d{4,})-(\d\d)$/;
var TIME_REGEXP = /^(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/;
var PARTIAL_VALIDATION_EVENTS = 'keydown wheel mousedown';
@@ -21096,8 +23863,8 @@ var inputType = {
* @param {string=} pattern Similar to `ngPattern` except that the attribute value is the actual string
* that contains the regular expression body that will be converted to a regular expression
* as in the ngPattern directive.
- * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel value does not match
- * a RegExp found by evaluating the Angular expression given in the attribute value.
+ * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel {@link ngModel.NgModelController#$viewValue $viewValue}
+ * does not match a RegExp found by evaluating the Angular expression given in the attribute value.
* If the expression evaluates to a RegExp object, then this is used directly.
* If the expression evaluates to a string, then it will be converted to a RegExp
* after wrapping it in `^` and `$` characters. For instance, `"abc"` will be converted to
@@ -21134,11 +23901,11 @@ var inputType = {
<span class="error" ng-show="myForm.input.$error.pattern">
Single word only!</span>
</div>
- <tt>text = {{example.text}}</tt><br/>
- <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>
- <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>
- <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>
- <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>
+ <code>text = {{example.text}}</code><br/>
+ <code>myForm.input.$valid = {{myForm.input.$valid}}</code><br/>
+ <code>myForm.input.$error = {{myForm.input.$error}}</code><br/>
+ <code>myForm.$valid = {{myForm.$valid}}</code><br/>
+ <code>myForm.$error.required = {{!!myForm.$error.required}}</code><br/>
</form>
</file>
<file name="protractor.js" type="protractor">
@@ -21239,7 +24006,6 @@ var inputType = {
<file name="protractor.js" type="protractor">
var value = element(by.binding('example.value | date: "yyyy-MM-dd"'));
var valid = element(by.binding('myForm.input.$valid'));
- var input = element(by.model('example.value'));
// currently protractor/webdriver does not support
// sending keys to all known HTML5 input controls
@@ -21342,7 +24108,6 @@ var inputType = {
<file name="protractor.js" type="protractor">
var value = element(by.binding('example.value | date: "yyyy-MM-ddTHH:mm:ss"'));
var valid = element(by.binding('myForm.input.$valid'));
- var input = element(by.model('example.value'));
// currently protractor/webdriver does not support
// sending keys to all known HTML5 input controls
@@ -21384,7 +24149,7 @@ var inputType = {
*
* @description
* Input with time validation and transformation. In browsers that do not yet support
- * the HTML5 date input, a text element will be used. In that case, the text must be entered in a valid ISO-8601
+ * the HTML5 time input, a text element will be used. In that case, the text must be entered in a valid ISO-8601
* local time format (HH:mm:ss), for example: `14:57:00`. Model must be a Date object. This binding will always output a
* Date object to the model of January 1, 1970, or local date `new Date(1970, 0, 1, HH, mm, ss)`.
*
@@ -21427,7 +24192,7 @@ var inputType = {
}]);
</script>
<form name="myForm" ng-controller="DateController as dateCtrl">
- <label for="exampleInput">Pick a between 8am and 5pm:</label>
+ <label for="exampleInput">Pick a time between 8am and 5pm:</label>
<input type="time" id="exampleInput" name="input" ng-model="example.value"
placeholder="HH:mm:ss" min="08:00:00" max="17:00:00" required />
<div role="alert">
@@ -21446,7 +24211,6 @@ var inputType = {
<file name="protractor.js" type="protractor">
var value = element(by.binding('example.value | date: "HH:mm:ss"'));
var valid = element(by.binding('myForm.input.$valid'));
- var input = element(by.model('example.value'));
// currently protractor/webdriver does not support
// sending keys to all known HTML5 input controls
@@ -21551,7 +24315,6 @@ var inputType = {
<file name="protractor.js" type="protractor">
var value = element(by.binding('example.value | date: "yyyy-Www"'));
var valid = element(by.binding('myForm.input.$valid'));
- var input = element(by.model('example.value'));
// currently protractor/webdriver does not support
// sending keys to all known HTML5 input controls
@@ -21655,7 +24418,6 @@ var inputType = {
<file name="protractor.js" type="protractor">
var value = element(by.binding('example.value | date: "yyyy-MM"'));
var valid = element(by.binding('myForm.input.$valid'));
- var input = element(by.model('example.value'));
// currently protractor/webdriver does not support
// sending keys to all known HTML5 input controls
@@ -21718,7 +24480,17 @@ var inputType = {
* @param {string} ngModel Assignable angular expression to data-bind to.
* @param {string=} name Property name of the form under which the control is published.
* @param {string=} min Sets the `min` validation error key if the value entered is less than `min`.
+ * Can be interpolated.
* @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`.
+ * Can be interpolated.
+ * @param {string=} ngMin Like `min`, sets the `min` validation error key if the value entered is less than `ngMin`,
+ * but does not trigger HTML5 native validation. Takes an expression.
+ * @param {string=} ngMax Like `max`, sets the `max` validation error key if the value entered is greater than `ngMax`,
+ * but does not trigger HTML5 native validation. Takes an expression.
+ * @param {string=} step Sets the `step` validation error key if the value entered does not fit the `step` constraint.
+ * Can be interpolated.
+ * @param {string=} ngStep Like `step`, sets the `step` validation error key if the value entered does not fit the `ngStep` constraint,
+ * but does not trigger HTML5 native validation. Takes an expression.
* @param {string=} required Sets `required` validation error key if the value is not entered.
* @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to
* the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
@@ -21731,8 +24503,8 @@ var inputType = {
* @param {string=} pattern Similar to `ngPattern` except that the attribute value is the actual string
* that contains the regular expression body that will be converted to a regular expression
* as in the ngPattern directive.
- * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel value does not match
- * a RegExp found by evaluating the Angular expression given in the attribute value.
+ * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel {@link ngModel.NgModelController#$viewValue $viewValue}
+ * does not match a RegExp found by evaluating the Angular expression given in the attribute value.
* If the expression evaluates to a RegExp object, then this is used directly.
* If the expression evaluates to a string, then it will be converted to a RegExp
* after wrapping it in `^` and `$` characters. For instance, `"abc"` will be converted to
@@ -21829,8 +24601,8 @@ var inputType = {
* @param {string=} pattern Similar to `ngPattern` except that the attribute value is the actual string
* that contains the regular expression body that will be converted to a regular expression
* as in the ngPattern directive.
- * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel value does not match
- * a RegExp found by evaluating the Angular expression given in the attribute value.
+ * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel {@link ngModel.NgModelController#$viewValue $viewValue}
+ * does not match a RegExp found by evaluating the Angular expression given in the attribute value.
* If the expression evaluates to a RegExp object, then this is used directly.
* If the expression evaluates to a string, then it will be converted to a RegExp
* after wrapping it in `^` and `$` characters. For instance, `"abc"` will be converted to
@@ -21928,8 +24700,8 @@ var inputType = {
* @param {string=} pattern Similar to `ngPattern` except that the attribute value is the actual string
* that contains the regular expression body that will be converted to a regular expression
* as in the ngPattern directive.
- * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel value does not match
- * a RegExp found by evaluating the Angular expression given in the attribute value.
+ * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel {@link ngModel.NgModelController#$viewValue $viewValue}
+ * does not match a RegExp found by evaluating the Angular expression given in the attribute value.
* If the expression evaluates to a RegExp object, then this is used directly.
* If the expression evaluates to a string, then it will be converted to a RegExp
* after wrapping it in `^` and `$` characters. For instance, `"abc"` will be converted to
@@ -22050,19 +24822,140 @@ var inputType = {
</file>
<file name="protractor.js" type="protractor">
it('should change state', function() {
+ var inputs = element.all(by.model('color.name'));
var color = element(by.binding('color.name'));
expect(color.getText()).toContain('blue');
- element.all(by.model('color.name')).get(0).click();
-
+ inputs.get(0).click();
expect(color.getText()).toContain('red');
+
+ inputs.get(1).click();
+ expect(color.getText()).toContain('green');
});
</file>
</example>
*/
'radio': radioInputType,
+ /**
+ * @ngdoc input
+ * @name input[range]
+ *
+ * @description
+ * Native range input with validation and transformation.
+ *
+ * The model for the range input must always be a `Number`.
+ *
+ * IE9 and other browsers that do not support the `range` type fall back
+ * to a text input without any default values for `min`, `max` and `step`. Model binding,
+ * validation and number parsing are nevertheless supported.
+ *
+ * Browsers that support range (latest Chrome, Safari, Firefox, Edge) treat `input[range]`
+ * in a way that never allows the input to hold an invalid value. That means:
+ * - any non-numerical value is set to `(max + min) / 2`.
+ * - any numerical value that is less than the current min val, or greater than the current max val
+ * is set to the min / max val respectively.
+ * - additionally, the current `step` is respected, so the nearest value that satisfies a step
+ * is used.
+ *
+ * See the [HTML Spec on input[type=range]](https://www.w3.org/TR/html5/forms.html#range-state-(type=range))
+ * for more info.
+ *
+ * This has the following consequences for Angular:
+ *
+ * Since the element value should always reflect the current model value, a range input
+ * will set the bound ngModel expression to the value that the browser has set for the
+ * input element. For example, in the following input `<input type="range" ng-model="model.value">`,
+ * if the application sets `model.value = null`, the browser will set the input to `'50'`.
+ * Angular will then set the model to `50`, to prevent input and model value being out of sync.
+ *
+ * That means the model for range will immediately be set to `50` after `ngModel` has been
+ * initialized. It also means a range input can never have the required error.
+ *
+ * This does not only affect changes to the model value, but also to the values of the `min`,
+ * `max`, and `step` attributes. When these change in a way that will cause the browser to modify
+ * the input value, Angular will also update the model value.
+ *
+ * Automatic value adjustment also means that a range input element can never have the `required`,
+ * `min`, or `max` errors.
+ *
+ * However, `step` is currently only fully implemented by Firefox. Other browsers have problems
+ * when the step value changes dynamically - they do not adjust the element value correctly, but
+ * instead may set the `stepMismatch` error. If that's the case, the Angular will set the `step`
+ * error on the input, and set the model to `undefined`.
+ *
+ * Note that `input[range]` is not compatible with`ngMax`, `ngMin`, and `ngStep`, because they do
+ * not set the `min` and `max` attributes, which means that the browser won't automatically adjust
+ * the input value based on their values, and will always assume min = 0, max = 100, and step = 1.
+ *
+ * @param {string} ngModel Assignable angular expression to data-bind to.
+ * @param {string=} name Property name of the form under which the control is published.
+ * @param {string=} min Sets the `min` validation to ensure that the value entered is greater
+ * than `min`. Can be interpolated.
+ * @param {string=} max Sets the `max` validation to ensure that the value entered is less than `max`.
+ * Can be interpolated.
+ * @param {string=} step Sets the `step` validation to ensure that the value entered matches the `step`
+ * Can be interpolated.
+ * @param {string=} ngChange Angular expression to be executed when the ngModel value changes due
+ * to user interaction with the input element.
+ * @param {expression=} ngChecked If the expression is truthy, then the `checked` attribute will be set on the
+ * element. **Note** : `ngChecked` should not be used alongside `ngModel`.
+ * Checkout {@link ng.directive:ngChecked ngChecked} for usage.
+ *
+ * @example
+ <example name="range-input-directive" module="rangeExample">
+ <file name="index.html">
+ <script>
+ angular.module('rangeExample', [])
+ .controller('ExampleController', ['$scope', function($scope) {
+ $scope.value = 75;
+ $scope.min = 10;
+ $scope.max = 90;
+ }]);
+ </script>
+ <form name="myForm" ng-controller="ExampleController">
+
+ Model as range: <input type="range" name="range" ng-model="value" min="{{min}}" max="{{max}}">
+ <hr>
+ Model as number: <input type="number" ng-model="value"><br>
+ Min: <input type="number" ng-model="min"><br>
+ Max: <input type="number" ng-model="max"><br>
+ value = <code>{{value}}</code><br/>
+ myForm.range.$valid = <code>{{myForm.range.$valid}}</code><br/>
+ myForm.range.$error = <code>{{myForm.range.$error}}</code>
+ </form>
+ </file>
+ </example>
+
+ * ## Range Input with ngMin & ngMax attributes
+
+ * @example
+ <example name="range-input-directive-ng" module="rangeExample">
+ <file name="index.html">
+ <script>
+ angular.module('rangeExample', [])
+ .controller('ExampleController', ['$scope', function($scope) {
+ $scope.value = 75;
+ $scope.min = 10;
+ $scope.max = 90;
+ }]);
+ </script>
+ <form name="myForm" ng-controller="ExampleController">
+ Model as range: <input type="range" name="range" ng-model="value" ng-min="min" ng-max="max">
+ <hr>
+ Model as number: <input type="number" ng-model="value"><br>
+ Min: <input type="number" ng-model="min"><br>
+ Max: <input type="number" ng-model="max"><br>
+ value = <code>{{value}}</code><br/>
+ myForm.range.$valid = <code>{{myForm.range.$valid}}</code><br/>
+ myForm.range.$error = <code>{{myForm.range.$error}}</code>
+ </form>
+ </file>
+ </example>
+
+ */
+ 'range': rangeInputType,
/**
* @ngdoc input
@@ -22142,13 +25035,13 @@ function textInputType(scope, element, attr, ctrl, $sniffer, $browser) {
function baseInputType(scope, element, attr, ctrl, $sniffer, $browser) {
var type = lowercase(element[0].type);
- // In composition mode, users are still inputing intermediate text buffer,
+ // In composition mode, users are still inputting intermediate text buffer,
// hold the listener until composition is done.
// More about composition events: https://developer.mozilla.org/en-US/docs/Web/API/CompositionEvent
if (!$sniffer.android) {
var composing = false;
- element.on('compositionstart', function(data) {
+ element.on('compositionstart', function() {
composing = true;
});
@@ -22200,7 +25093,7 @@ function baseInputType(scope, element, attr, ctrl, $sniffer, $browser) {
}
};
- element.on('keydown', function(event) {
+ element.on('keydown', /** @this */ function(event) {
var key = event.keyCode;
// ignore
@@ -22225,7 +25118,7 @@ function baseInputType(scope, element, attr, ctrl, $sniffer, $browser) {
// For these event types, when native validators are present and the browser supports the type,
// check for validity changes on various DOM events.
if (PARTIAL_VALIDATION_TYPES[type] && ctrl.$$hasNativeValidators && type === attr.type) {
- element.on(PARTIAL_VALIDATION_EVENTS, function(ev) {
+ element.on(PARTIAL_VALIDATION_EVENTS, /** @this */ function(ev) {
if (!timeout) {
var validity = this[VALIDITY_STATE_PROPERTY];
var origBadInput = validity.badInput;
@@ -22293,7 +25186,7 @@ function createDateParser(regexp, mapping) {
// When a date is JSON'ified to wraps itself inside of an extra
// set of double quotes. This makes the date parsing code unable
// to match the date string and parse it as a date.
- if (iso.charAt(0) == '"' && iso.charAt(iso.length - 1) == '"') {
+ if (iso.charAt(0) === '"' && iso.charAt(iso.length - 1) === '"') {
iso = iso.substring(1, iso.length - 1);
}
if (ISO_DATE_REGEXP.test(iso)) {
@@ -22335,7 +25228,7 @@ function createDateInputType(type, regexp, parseDate, format) {
return function dynamicDateInputType(scope, element, attr, ctrl, $sniffer, $browser, $filter) {
badInputChecker(scope, element, attr, ctrl);
baseInputType(scope, element, attr, ctrl, $sniffer, $browser);
- var timezone = ctrl && ctrl.$options && ctrl.$options.timezone;
+ var timezone = ctrl && ctrl.$options.getOption('timezone');
var previousDate;
ctrl.$$parserName = type;
@@ -22409,19 +25302,12 @@ function badInputChecker(scope, element, attr, ctrl) {
if (nativeValidation) {
ctrl.$parsers.push(function(value) {
var validity = element.prop(VALIDITY_STATE_PROPERTY) || {};
- // Detect bug in FF35 for input[email] (https://bugzilla.mozilla.org/show_bug.cgi?id=1064430):
- // - also sets validity.badInput (should only be validity.typeMismatch).
- // - see http://www.whatwg.org/specs/web-apps/current-work/multipage/forms.html#e-mail-state-(type=email)
- // - can ignore this case as we can still read out the erroneous email...
- return validity.badInput && !validity.typeMismatch ? undefined : value;
+ return validity.badInput || validity.typeMismatch ? undefined : value;
});
}
}
-function numberInputType(scope, element, attr, ctrl, $sniffer, $browser) {
- badInputChecker(scope, element, attr, ctrl);
- baseInputType(scope, element, attr, ctrl, $sniffer, $browser);
-
+function numberFormatterParser(ctrl) {
ctrl.$$parserName = 'number';
ctrl.$parsers.push(function(value) {
if (ctrl.$isEmpty(value)) return null;
@@ -22438,40 +25324,255 @@ function numberInputType(scope, element, attr, ctrl, $sniffer, $browser) {
}
return value;
});
+}
+
+function parseNumberAttrVal(val) {
+ if (isDefined(val) && !isNumber(val)) {
+ val = parseFloat(val);
+ }
+ return !isNumberNaN(val) ? val : undefined;
+}
+
+function isNumberInteger(num) {
+ // See http://stackoverflow.com/questions/14636536/how-to-check-if-a-variable-is-an-integer-in-javascript#14794066
+ // (minus the assumption that `num` is a number)
+
+ // eslint-disable-next-line no-bitwise
+ return (num | 0) === num;
+}
+
+function countDecimals(num) {
+ var numString = num.toString();
+ var decimalSymbolIndex = numString.indexOf('.');
+
+ if (decimalSymbolIndex === -1) {
+ if (-1 < num && num < 1) {
+ // It may be in the exponential notation format (`1e-X`)
+ var match = /e-(\d+)$/.exec(numString);
+
+ if (match) {
+ return Number(match[1]);
+ }
+ }
+
+ return 0;
+ }
+
+ return numString.length - decimalSymbolIndex - 1;
+}
+
+function isValidForStep(viewValue, stepBase, step) {
+ // At this point `stepBase` and `step` are expected to be non-NaN values
+ // and `viewValue` is expected to be a valid stringified number.
+ var value = Number(viewValue);
+
+ var isNonIntegerValue = !isNumberInteger(value);
+ var isNonIntegerStepBase = !isNumberInteger(stepBase);
+ var isNonIntegerStep = !isNumberInteger(step);
+
+ // Due to limitations in Floating Point Arithmetic (e.g. `0.3 - 0.2 !== 0.1` or
+ // `0.5 % 0.1 !== 0`), we need to convert all numbers to integers.
+ if (isNonIntegerValue || isNonIntegerStepBase || isNonIntegerStep) {
+ var valueDecimals = isNonIntegerValue ? countDecimals(value) : 0;
+ var stepBaseDecimals = isNonIntegerStepBase ? countDecimals(stepBase) : 0;
+ var stepDecimals = isNonIntegerStep ? countDecimals(step) : 0;
+
+ var decimalCount = Math.max(valueDecimals, stepBaseDecimals, stepDecimals);
+ var multiplier = Math.pow(10, decimalCount);
+
+ value = value * multiplier;
+ stepBase = stepBase * multiplier;
+ step = step * multiplier;
+
+ if (isNonIntegerValue) value = Math.round(value);
+ if (isNonIntegerStepBase) stepBase = Math.round(stepBase);
+ if (isNonIntegerStep) step = Math.round(step);
+ }
+
+ return (value - stepBase) % step === 0;
+}
+
+function numberInputType(scope, element, attr, ctrl, $sniffer, $browser) {
+ badInputChecker(scope, element, attr, ctrl);
+ numberFormatterParser(ctrl);
+ baseInputType(scope, element, attr, ctrl, $sniffer, $browser);
+
+ var minVal;
+ var maxVal;
if (isDefined(attr.min) || attr.ngMin) {
- var minVal;
ctrl.$validators.min = function(value) {
return ctrl.$isEmpty(value) || isUndefined(minVal) || value >= minVal;
};
attr.$observe('min', function(val) {
- if (isDefined(val) && !isNumber(val)) {
- val = parseFloat(val, 10);
- }
- minVal = isNumber(val) && !isNaN(val) ? val : undefined;
+ minVal = parseNumberAttrVal(val);
// TODO(matsko): implement validateLater to reduce number of validations
ctrl.$validate();
});
}
if (isDefined(attr.max) || attr.ngMax) {
- var maxVal;
ctrl.$validators.max = function(value) {
return ctrl.$isEmpty(value) || isUndefined(maxVal) || value <= maxVal;
};
attr.$observe('max', function(val) {
- if (isDefined(val) && !isNumber(val)) {
- val = parseFloat(val, 10);
- }
- maxVal = isNumber(val) && !isNaN(val) ? val : undefined;
+ maxVal = parseNumberAttrVal(val);
+ // TODO(matsko): implement validateLater to reduce number of validations
+ ctrl.$validate();
+ });
+ }
+
+ if (isDefined(attr.step) || attr.ngStep) {
+ var stepVal;
+ ctrl.$validators.step = function(modelValue, viewValue) {
+ return ctrl.$isEmpty(viewValue) || isUndefined(stepVal) ||
+ isValidForStep(viewValue, minVal || 0, stepVal);
+ };
+
+ attr.$observe('step', function(val) {
+ stepVal = parseNumberAttrVal(val);
// TODO(matsko): implement validateLater to reduce number of validations
ctrl.$validate();
});
}
}
+function rangeInputType(scope, element, attr, ctrl, $sniffer, $browser) {
+ badInputChecker(scope, element, attr, ctrl);
+ numberFormatterParser(ctrl);
+ baseInputType(scope, element, attr, ctrl, $sniffer, $browser);
+
+ var supportsRange = ctrl.$$hasNativeValidators && element[0].type === 'range',
+ minVal = supportsRange ? 0 : undefined,
+ maxVal = supportsRange ? 100 : undefined,
+ stepVal = supportsRange ? 1 : undefined,
+ validity = element[0].validity,
+ hasMinAttr = isDefined(attr.min),
+ hasMaxAttr = isDefined(attr.max),
+ hasStepAttr = isDefined(attr.step);
+
+ var originalRender = ctrl.$render;
+
+ ctrl.$render = supportsRange && isDefined(validity.rangeUnderflow) && isDefined(validity.rangeOverflow) ?
+ //Browsers that implement range will set these values automatically, but reading the adjusted values after
+ //$render would cause the min / max validators to be applied with the wrong value
+ function rangeRender() {
+ originalRender();
+ ctrl.$setViewValue(element.val());
+ } :
+ originalRender;
+
+ if (hasMinAttr) {
+ ctrl.$validators.min = supportsRange ?
+ // Since all browsers set the input to a valid value, we don't need to check validity
+ function noopMinValidator() { return true; } :
+ // non-support browsers validate the min val
+ function minValidator(modelValue, viewValue) {
+ return ctrl.$isEmpty(viewValue) || isUndefined(minVal) || viewValue >= minVal;
+ };
+
+ setInitialValueAndObserver('min', minChange);
+ }
+
+ if (hasMaxAttr) {
+ ctrl.$validators.max = supportsRange ?
+ // Since all browsers set the input to a valid value, we don't need to check validity
+ function noopMaxValidator() { return true; } :
+ // non-support browsers validate the max val
+ function maxValidator(modelValue, viewValue) {
+ return ctrl.$isEmpty(viewValue) || isUndefined(maxVal) || viewValue <= maxVal;
+ };
+
+ setInitialValueAndObserver('max', maxChange);
+ }
+
+ if (hasStepAttr) {
+ ctrl.$validators.step = supportsRange ?
+ function nativeStepValidator() {
+ // Currently, only FF implements the spec on step change correctly (i.e. adjusting the
+ // input element value to a valid value). It's possible that other browsers set the stepMismatch
+ // validity error instead, so we can at least report an error in that case.
+ return !validity.stepMismatch;
+ } :
+ // ngStep doesn't set the setp attr, so the browser doesn't adjust the input value as setting step would
+ function stepValidator(modelValue, viewValue) {
+ return ctrl.$isEmpty(viewValue) || isUndefined(stepVal) ||
+ isValidForStep(viewValue, minVal || 0, stepVal);
+ };
+
+ setInitialValueAndObserver('step', stepChange);
+ }
+
+ function setInitialValueAndObserver(htmlAttrName, changeFn) {
+ // interpolated attributes set the attribute value only after a digest, but we need the
+ // attribute value when the input is first rendered, so that the browser can adjust the
+ // input value based on the min/max value
+ element.attr(htmlAttrName, attr[htmlAttrName]);
+ attr.$observe(htmlAttrName, changeFn);
+ }
+
+ function minChange(val) {
+ minVal = parseNumberAttrVal(val);
+ // ignore changes before model is initialized
+ if (isNumberNaN(ctrl.$modelValue)) {
+ return;
+ }
+
+ if (supportsRange) {
+ var elVal = element.val();
+ // IE11 doesn't set the el val correctly if the minVal is greater than the element value
+ if (minVal > elVal) {
+ elVal = minVal;
+ element.val(elVal);
+ }
+ ctrl.$setViewValue(elVal);
+ } else {
+ // TODO(matsko): implement validateLater to reduce number of validations
+ ctrl.$validate();
+ }
+ }
+
+ function maxChange(val) {
+ maxVal = parseNumberAttrVal(val);
+ // ignore changes before model is initialized
+ if (isNumberNaN(ctrl.$modelValue)) {
+ return;
+ }
+
+ if (supportsRange) {
+ var elVal = element.val();
+ // IE11 doesn't set the el val correctly if the maxVal is less than the element value
+ if (maxVal < elVal) {
+ element.val(maxVal);
+ // IE11 and Chrome don't set the value to the minVal when max < min
+ elVal = maxVal < minVal ? minVal : maxVal;
+ }
+ ctrl.$setViewValue(elVal);
+ } else {
+ // TODO(matsko): implement validateLater to reduce number of validations
+ ctrl.$validate();
+ }
+ }
+
+ function stepChange(val) {
+ stepVal = parseNumberAttrVal(val);
+ // ignore changes before model is initialized
+ if (isNumberNaN(ctrl.$modelValue)) {
+ return;
+ }
+
+ // Some browsers don't adjust the input value correctly, but set the stepMismatch error
+ if (supportsRange && ctrl.$viewValue !== element.val()) {
+ ctrl.$setViewValue(element.val());
+ } else {
+ // TODO(matsko): implement validateLater to reduce number of validations
+ ctrl.$validate();
+ }
+ }
+}
+
function urlInputType(scope, element, attr, ctrl, $sniffer, $browser) {
// Note: no badInputChecker here by purpose as `url` is only a validation
// in browsers, i.e. we can always read out input.value even if it is not valid!
@@ -22499,14 +25600,20 @@ function emailInputType(scope, element, attr, ctrl, $sniffer, $browser) {
}
function radioInputType(scope, element, attr, ctrl) {
+ var doTrim = !attr.ngTrim || trim(attr.ngTrim) !== 'false';
// make the name unique, if not defined
if (isUndefined(attr.name)) {
element.attr('name', nextUid());
}
var listener = function(ev) {
+ var value;
if (element[0].checked) {
- ctrl.$setViewValue(attr.value, ev && ev.type);
+ value = attr.value;
+ if (doTrim) {
+ value = trim(value);
+ }
+ ctrl.$setViewValue(value, ev && ev.type);
}
};
@@ -22514,7 +25621,10 @@ function radioInputType(scope, element, attr, ctrl) {
ctrl.$render = function() {
var value = attr.value;
- element[0].checked = (value == ctrl.$viewValue);
+ if (doTrim) {
+ value = trim(value);
+ }
+ element[0].checked = (value === ctrl.$viewValue);
};
attr.$observe('value', ctrl.$render);
@@ -22585,8 +25695,8 @@ function checkboxInputType(scope, element, attr, ctrl, $sniffer, $browser, $filt
* @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than
* maxlength. Setting the attribute to a negative or non-numeric value, allows view values of any
* length.
- * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel value does not match
- * a RegExp found by evaluating the Angular expression given in the attribute value.
+ * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel {@link ngModel.NgModelController#$viewValue $viewValue}
+ * does not match a RegExp found by evaluating the Angular expression given in the attribute value.
* If the expression evaluates to a RegExp object, then this is used directly.
* If the expression evaluates to a string, then it will be converted to a RegExp
* after wrapping it in `^` and `$` characters. For instance, `"abc"` will be converted to
@@ -22597,6 +25707,20 @@ function checkboxInputType(scope, element, attr, ctrl, $sniffer, $browser, $filt
* @param {string=} ngChange Angular expression to be executed when input changes due to user
* interaction with the input element.
* @param {boolean=} [ngTrim=true] If set to false Angular will not automatically trim the input.
+ *
+ * @knownIssue
+ *
+ * When specifying the `placeholder` attribute of `<textarea>`, Internet Explorer will temporarily
+ * insert the placeholder value as the textarea's content. If the placeholder value contains
+ * interpolation (`{{ ... }}`), an error will be logged in the console when Angular tries to update
+ * the value of the by-then-removed text node. This doesn't affect the functionality of the
+ * textarea, but can be undesirable.
+ *
+ * You can work around this Internet Explorer issue by using `ng-attr-placeholder` instead of
+ * `placeholder` on textareas, whenever you need interpolation in the placeholder value. You can
+ * find more details on `ngAttr` in the
+ * [Interpolation](guide/interpolation#-ngattr-for-binding-to-arbitrary-attributes) section of the
+ * Developer Guide.
*/
@@ -22624,8 +25748,8 @@ function checkboxInputType(scope, element, attr, ctrl, $sniffer, $browser, $filt
* @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than
* maxlength. Setting the attribute to a negative or non-numeric value, allows view values of any
* length.
- * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel value does not match
- * a RegExp found by evaluating the Angular expression given in the attribute value.
+ * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel {@link ngModel.NgModelController#$viewValue $viewValue}
+ * value does not match a RegExp found by evaluating the Angular expression given in the attribute value.
* If the expression evaluates to a RegExp object, then this is used directly.
* If the expression evaluates to a string, then it will be converted to a RegExp
* after wrapping it in `^` and `$` characters. For instance, `"abc"` will be converted to
@@ -22761,21 +25885,19 @@ var CONSTANT_VALUE_REGEXP = /^(true|false|\d+)$/;
* @name ngValue
*
* @description
- * Binds the given expression to the value of `<option>` or {@link input[radio] `input[radio]`},
- * so that when the element is selected, the {@link ngModel `ngModel`} of that element is set to
- * the bound value.
+ * Binds the given expression to the value of the element.
*
- * `ngValue` is useful when dynamically generating lists of radio buttons using
- * {@link ngRepeat `ngRepeat`}, as shown below.
+ * It is mainly used on {@link input[radio] `input[radio]`} and option elements,
+ * so that when the element is selected, the {@link ngModel `ngModel`} of that element (or its
+ * {@link select `select`} parent element) is set to the bound value. It is especially useful
+ * for dynamically generated lists using {@link ngRepeat `ngRepeat`}, as shown below.
*
- * Likewise, `ngValue` can be used to generate `<option>` elements for
- * the {@link select `select`} element. In that case however, only strings are supported
- * for the `value `attribute, so the resulting `ngModel` will always be a string.
- * Support for `select` models with non-string values is available via `ngOptions`.
+ * It can also be used to achieve one-way binding of a given expression to an input element
+ * such as an `input[text]` or a `textarea`, when that element does not use ngModel.
*
* @element input
* @param {string=} ngValue angular expression, whose value will be bound to the `value` attribute
- * of the `input` element
+ * and `value` property of the element.
*
* @example
<example name="ngValue-directive" module="valueExample">
@@ -22814,18 +25936,33 @@ var CONSTANT_VALUE_REGEXP = /^(true|false|\d+)$/;
</example>
*/
var ngValueDirective = function() {
+ /**
+ * inputs use the value attribute as their default value if the value property is not set.
+ * Once the value property has been set (by adding input), it will not react to changes to
+ * the value attribute anymore. Setting both attribute and property fixes this behavior, and
+ * makes it possible to use ngValue as a sort of one-way bind.
+ */
+ function updateElementValue(element, attr, value) {
+ // Support: IE9 only
+ // In IE9 values are converted to string (e.g. `input.value = null` results in `input.value === 'null'`).
+ var propValue = isDefined(value) ? value : (msie === 9) ? '' : null;
+ element.prop('value', propValue);
+ attr.$set('value', value);
+ }
+
return {
restrict: 'A',
priority: 100,
compile: function(tpl, tplAttr) {
if (CONSTANT_VALUE_REGEXP.test(tplAttr.ngValue)) {
return function ngValueConstantLink(scope, elm, attr) {
- attr.$set('value', scope.$eval(attr.ngValue));
+ var value = scope.$eval(attr.ngValue);
+ updateElementValue(elm, attr, value);
};
} else {
return function ngValueLink(scope, elm, attr) {
scope.$watch(attr.ngValue, function valueWatchAction(value) {
- attr.$set('value', value);
+ updateElementValue(elm, attr, value);
});
};
}
@@ -22859,7 +25996,7 @@ var ngValueDirective = function() {
*
* @example
* Enter a name in the Live Preview text box; the greeting below the text box changes instantly.
- <example module="bindExample">
+ <example module="bindExample" name="ng-bind">
<file name="index.html">
<script>
angular.module('bindExample', [])
@@ -22893,7 +26030,7 @@ var ngBindDirective = ['$compile', function($compile) {
$compile.$$addBindingInfo(element, attr.ngBind);
element = element[0];
scope.$watch(attr.ngBind, function ngBindWatchAction(value) {
- element.textContent = isUndefined(value) ? '' : value;
+ element.textContent = stringify(value);
});
};
}
@@ -22919,7 +26056,7 @@ var ngBindDirective = ['$compile', function($compile) {
*
* @example
* Try it here: enter text in text box and watch the greeting change.
- <example module="bindExample">
+ <example module="bindExample" name="ng-bind-template">
<file name="index.html">
<script>
angular.module('bindExample', [])
@@ -22992,7 +26129,7 @@ var ngBindTemplateDirective = ['$interpolate', '$compile', function($interpolate
*
* @example
- <example module="bindHtmlExample" deps="angular-sanitize.js">
+ <example module="bindHtmlExample" deps="angular-sanitize.js" name="ng-bind-html">
<file name="index.html">
<div ng-controller="ExampleController">
<p ng-bind-html="myHTML"></p>
@@ -23021,8 +26158,9 @@ var ngBindHtmlDirective = ['$sce', '$parse', '$compile', function($sce, $parse,
restrict: 'A',
compile: function ngBindHtmlCompile(tElement, tAttrs) {
var ngBindHtmlGetter = $parse(tAttrs.ngBindHtml);
- var ngBindHtmlWatch = $parse(tAttrs.ngBindHtml, function getStringValue(value) {
- return (value || '').toString();
+ var ngBindHtmlWatch = $parse(tAttrs.ngBindHtml, function sceValueOf(val) {
+ // Unwrap the value to compare the actual inner safe value, not the wrapper object.
+ return $sce.valueOf(val);
});
$compile.$$addBindingClass(tElement);
@@ -23030,9 +26168,9 @@ var ngBindHtmlDirective = ['$sce', '$parse', '$compile', function($sce, $parse,
$compile.$$addBindingInfo(element, attr.ngBindHtml);
scope.$watch(ngBindHtmlWatch, function ngBindHtmlWatchAction() {
- // we re-evaluate the expr because we want a TrustedValueHolderType
- // for $sce, not a string
- element.html($sce.getTrustedHtml(ngBindHtmlGetter(scope)) || '');
+ // The watched value is the unwrapped value. To avoid re-escaping, use the direct getter.
+ var value = ngBindHtmlGetter(scope);
+ element.html($sce.getTrustedHtml(value) || '');
});
};
}
@@ -23116,50 +26254,79 @@ var ngChangeDirective = valueFn({
}
});
+/* exported
+ ngClassDirective,
+ ngClassEvenDirective,
+ ngClassOddDirective
+*/
+
function classDirective(name, selector) {
name = 'ngClass' + name;
- return ['$animate', function($animate) {
+ var indexWatchExpression;
+
+ return ['$parse', function($parse) {
return {
restrict: 'AC',
link: function(scope, element, attr) {
- var oldVal;
+ var expression = attr[name].trim();
+ var isOneTime = (expression.charAt(0) === ':') && (expression.charAt(1) === ':');
- scope.$watch(attr[name], ngClassWatchAction, true);
+ var watchInterceptor = isOneTime ? toFlatValue : toClassString;
+ var watchExpression = $parse(expression, watchInterceptor);
+ var watchAction = isOneTime ? ngClassOneTimeWatchAction : ngClassWatchAction;
- attr.$observe('class', function(value) {
- ngClassWatchAction(scope.$eval(attr[name]));
- });
+ var classCounts = element.data('$classCounts');
+ var oldModulo = true;
+ var oldClassString;
+ if (!classCounts) {
+ // Use createMap() to prevent class assumptions involving property
+ // names in Object.prototype
+ classCounts = createMap();
+ element.data('$classCounts', classCounts);
+ }
if (name !== 'ngClass') {
- scope.$watch('$index', function($index, old$index) {
- // jshint bitwise: false
- var mod = $index & 1;
- if (mod !== (old$index & 1)) {
- var classes = arrayClasses(scope.$eval(attr[name]));
- mod === selector ?
- addClasses(classes) :
- removeClasses(classes);
- }
- });
+ if (!indexWatchExpression) {
+ indexWatchExpression = $parse('$index', function moduloTwo($index) {
+ // eslint-disable-next-line no-bitwise
+ return $index & 1;
+ });
+ }
+
+ scope.$watch(indexWatchExpression, ngClassIndexWatchAction);
}
- function addClasses(classes) {
- var newClasses = digestClassCounts(classes, 1);
- attr.$addClass(newClasses);
+ scope.$watch(watchExpression, watchAction, isOneTime);
+
+ function addClasses(classString) {
+ classString = digestClassCounts(split(classString), 1);
+ attr.$addClass(classString);
}
- function removeClasses(classes) {
- var newClasses = digestClassCounts(classes, -1);
- attr.$removeClass(newClasses);
+ function removeClasses(classString) {
+ classString = digestClassCounts(split(classString), -1);
+ attr.$removeClass(classString);
}
- function digestClassCounts(classes, count) {
- // Use createMap() to prevent class assumptions involving property
- // names in Object.prototype
- var classCounts = element.data('$classCounts') || createMap();
+ function updateClasses(oldClassString, newClassString) {
+ var oldClassArray = split(oldClassString);
+ var newClassArray = split(newClassString);
+
+ var toRemoveArray = arrayDifference(oldClassArray, newClassArray);
+ var toAddArray = arrayDifference(newClassArray, oldClassArray);
+
+ var toRemoveString = digestClassCounts(toRemoveArray, -1);
+ var toAddString = digestClassCounts(toAddArray, 1);
+
+ attr.$addClass(toAddString);
+ attr.$removeClass(toRemoveString);
+ }
+
+ function digestClassCounts(classArray, count) {
var classesToUpdate = [];
- forEach(classes, function(className) {
+
+ forEach(classArray, function(className) {
if (count > 0 || classCounts[className]) {
classCounts[className] = (classCounts[className] || 0) + count;
if (classCounts[className] === +(count > 0)) {
@@ -23167,72 +26334,106 @@ function classDirective(name, selector) {
}
}
});
- element.data('$classCounts', classCounts);
+
return classesToUpdate.join(' ');
}
- function updateClasses(oldClasses, newClasses) {
- var toAdd = arrayDifference(newClasses, oldClasses);
- var toRemove = arrayDifference(oldClasses, newClasses);
- toAdd = digestClassCounts(toAdd, 1);
- toRemove = digestClassCounts(toRemove, -1);
- if (toAdd && toAdd.length) {
- $animate.addClass(element, toAdd);
+ function ngClassIndexWatchAction(newModulo) {
+ // This watch-action should run before the `ngClass[OneTime]WatchAction()`, thus it
+ // adds/removes `oldClassString`. If the `ngClass` expression has changed as well, the
+ // `ngClass[OneTime]WatchAction()` will update the classes.
+ if (newModulo === selector) {
+ addClasses(oldClassString);
+ } else {
+ removeClasses(oldClassString);
}
- if (toRemove && toRemove.length) {
- $animate.removeClass(element, toRemove);
+
+ oldModulo = newModulo;
+ }
+
+ function ngClassOneTimeWatchAction(newClassValue) {
+ var newClassString = toClassString(newClassValue);
+
+ if (newClassString !== oldClassString) {
+ ngClassWatchAction(newClassString);
}
}
- function ngClassWatchAction(newVal) {
- if (selector === true || scope.$index % 2 === selector) {
- var newClasses = arrayClasses(newVal || []);
- if (!oldVal) {
- addClasses(newClasses);
- } else if (!equals(newVal,oldVal)) {
- var oldClasses = arrayClasses(oldVal);
- updateClasses(oldClasses, newClasses);
- }
+ function ngClassWatchAction(newClassString) {
+ if (oldModulo === selector) {
+ updateClasses(oldClassString, newClassString);
}
- oldVal = shallowCopy(newVal);
+
+ oldClassString = newClassString;
}
}
};
+ }];
- function arrayDifference(tokens1, tokens2) {
- var values = [];
+ // Helpers
+ function arrayDifference(tokens1, tokens2) {
+ if (!tokens1 || !tokens1.length) return [];
+ if (!tokens2 || !tokens2.length) return tokens1;
- outer:
- for (var i = 0; i < tokens1.length; i++) {
- var token = tokens1[i];
- for (var j = 0; j < tokens2.length; j++) {
- if (token == tokens2[j]) continue outer;
- }
- values.push(token);
+ var values = [];
+
+ outer:
+ for (var i = 0; i < tokens1.length; i++) {
+ var token = tokens1[i];
+ for (var j = 0; j < tokens2.length; j++) {
+ if (token === tokens2[j]) continue outer;
}
- return values;
+ values.push(token);
}
- function arrayClasses(classVal) {
- var classes = [];
- if (isArray(classVal)) {
- forEach(classVal, function(v) {
- classes = classes.concat(arrayClasses(v));
- });
- return classes;
- } else if (isString(classVal)) {
- return classVal.split(' ');
- } else if (isObject(classVal)) {
- forEach(classVal, function(v, k) {
- if (v) {
- classes = classes.concat(k.split(' '));
- }
- });
- return classes;
+ return values;
+ }
+
+ function split(classString) {
+ return classString && classString.split(' ');
+ }
+
+ function toClassString(classValue) {
+ var classString = classValue;
+
+ if (isArray(classValue)) {
+ classString = classValue.map(toClassString).join(' ');
+ } else if (isObject(classValue)) {
+ classString = Object.keys(classValue).
+ filter(function(key) { return classValue[key]; }).
+ join(' ');
+ }
+
+ return classString;
+ }
+
+ function toFlatValue(classValue) {
+ var flatValue = classValue;
+
+ if (isArray(classValue)) {
+ flatValue = classValue.map(toFlatValue);
+ } else if (isObject(classValue)) {
+ var hasUndefined = false;
+
+ flatValue = Object.keys(classValue).filter(function(key) {
+ var value = classValue[key];
+
+ if (!hasUndefined && isUndefined(value)) {
+ hasUndefined = true;
+ }
+
+ return value;
+ });
+
+ if (hasUndefined) {
+ // Prevent the `oneTimeLiteralWatchInterceptor` from unregistering
+ // the watcher, by including at least one `undefined` value.
+ flatValue.push(undefined);
}
- return classVal;
}
- }];
+
+ return flatValue;
+ }
}
/**
@@ -23263,10 +26464,16 @@ function classDirective(name, selector) {
* When the expression changes, the previously added classes are removed and only then are the
* new classes added.
*
- * @animations
- * **add** - happens just before the class is applied to the elements
+ * @knownIssue
+ * You should not use {@link guide/interpolation interpolation} in the value of the `class`
+ * attribute, when using the `ngClass` directive on the same element.
+ * See {@link guide/interpolation#known-issues here} for more info.
*
- * **remove** - happens just before the class is removed from the element
+ * @animations
+ * | Animation | Occurs |
+ * |----------------------------------|-------------------------------------|
+ * | {@link ng.$animate#addClass addClass} | just before the class is applied to the element |
+ * | {@link ng.$animate#removeClass removeClass} | just before the class is removed from the element |
*
* @element ANY
* @param {expression} ngClass {@link guide/expression Expression} to eval. The result
@@ -23276,7 +26483,7 @@ function classDirective(name, selector) {
* element.
*
* @example Example that demonstrates basic bindings via ngClass directive.
- <example>
+ <example name="ng-class">
<file name="index.html">
<p ng-class="{strike: deleted, bold: important, 'has-error': error}">Map Syntax Example</p>
<label>
@@ -23369,7 +26576,7 @@ function classDirective(name, selector) {
The example below demonstrates how to perform animations using ngClass.
- <example module="ngAnimate" deps="angular-animate.js" animations="true">
+ <example module="ngAnimate" deps="angular-animate.js" animations="true" name="ng-class">
<file name="index.html">
<input id="setbtn" type="button" value="set" ng-click="myVar='my-class'">
<input id="clearbtn" type="button" value="clear" ng-click="myVar=''">
@@ -23432,7 +26639,7 @@ var ngClassDirective = classDirective('', true);
* of the evaluation can be a string representing space delimited class names or an array.
*
* @example
- <example>
+ <example name="ng-class-odd">
<file name="index.html">
<ol ng-init="names=['John', 'Mary', 'Cate', 'Suz']">
<li ng-repeat="name in names">
@@ -23480,7 +26687,7 @@ var ngClassOddDirective = classDirective('Odd', 0);
* result of the evaluation can be a string representing space delimited class names or an array.
*
* @example
- <example>
+ <example name="ng-class-even">
<file name="index.html">
<ol ng-init="names=['John', 'Mary', 'Cate', 'Suz']">
<li ng-repeat="name in names">
@@ -23546,7 +26753,7 @@ var ngClassEvenDirective = classDirective('Even', 1);
* @element ANY
*
* @example
- <example>
+ <example name="ng-cloak">
<file name="index.html">
<div id="template1" ng-cloak>{{ 'hello' }}</div>
<div id="template2" class="ng-cloak">{{ 'world' }}</div>
@@ -23602,7 +26809,7 @@ var ngCloakDirective = ngDirective({
*
* If the current `$controllerProvider` is configured to use globals (via
* {@link ng.$controllerProvider#allowGlobals `$controllerProvider.allowGlobals()` }), this may
- * also be the name of a globally accessible constructor function (not recommended).
+ * also be the name of a globally accessible constructor function (deprecated, not recommended).
*
* @example
* Here is a simple form for editing user contact information. Adding, removing, clearing, and
@@ -23655,10 +26862,11 @@ var ngCloakDirective = ngDirective({
* .controller('SettingsController1', SettingsController1);
*
* function SettingsController1() {
- * this.name = "John Smith";
+ * this.name = 'John Smith';
* this.contacts = [
* {type: 'phone', value: '408 555 1212'},
- * {type: 'email', value: 'john.smith@example.org'} ];
+ * {type: 'email', value: 'john.smith@example.org'}
+ * ];
* }
*
* SettingsController1.prototype.greet = function() {
@@ -23738,10 +26946,11 @@ var ngCloakDirective = ngDirective({
* .controller('SettingsController2', ['$scope', SettingsController2]);
*
* function SettingsController2($scope) {
- * $scope.name = "John Smith";
+ * $scope.name = 'John Smith';
* $scope.contacts = [
* {type:'phone', value:'408 555 1212'},
- * {type:'email', value:'john.smith@example.org'} ];
+ * {type:'email', value:'john.smith@example.org'}
+ * ];
*
* $scope.greet = function() {
* alert($scope.name);
@@ -23808,31 +27017,38 @@ var ngControllerDirective = [function() {
* @ngdoc directive
* @name ngCsp
*
- * @element html
+ * @restrict A
+ * @element ANY
* @description
*
- * Angular has some features that can break certain
+ * Angular has some features that can conflict with certain restrictions that are applied when using
* [CSP (Content Security Policy)](https://developer.mozilla.org/en/Security/CSP) rules.
*
- * If you intend to implement these rules then you must tell Angular not to use these features.
+ * If you intend to implement CSP with these rules then you must tell Angular not to use these
+ * features.
*
* This is necessary when developing things like Google Chrome Extensions or Universal Windows Apps.
*
*
- * The following rules affect Angular:
+ * The following default rules in CSP affect Angular:
*
- * * `unsafe-eval`: this rule forbids apps to use `eval` or `Function(string)` generated functions
- * (among other things). Angular makes use of this in the {@link $parse} service to provide a 30%
- * increase in the speed of evaluating Angular expressions.
+ * * The use of `eval()`, `Function(string)` and similar functions to dynamically create and execute
+ * code from strings is forbidden. Angular makes use of this in the {@link $parse} service to
+ * provide a 30% increase in the speed of evaluating Angular expressions. (This CSP rule can be
+ * disabled with the CSP keyword `unsafe-eval`, but it is generally not recommended as it would
+ * weaken the protections offered by CSP.)
*
- * * `unsafe-inline`: this rule forbids apps from inject custom styles into the document. Angular
- * makes use of this to include some CSS rules (e.g. {@link ngCloak} and {@link ngHide}).
- * To make these directives work when a CSP rule is blocking inline styles, you must link to the
- * `angular-csp.css` in your HTML manually.
+ * * The use of inline resources, such as inline `<script>` and `<style>` elements, are forbidden.
+ * This prevents apps from injecting custom styles directly into the document. Angular makes use of
+ * this to include some CSS rules (e.g. {@link ngCloak} and {@link ngHide}). To make these
+ * directives work when a CSP rule is blocking inline styles, you must link to the `angular-csp.css`
+ * in your HTML manually. (This CSP rule can be disabled with the CSP keyword `unsafe-inline`, but
+ * it is generally not recommended as it would weaken the protections offered by CSP.)
*
- * If you do not provide `ngCsp` then Angular tries to autodetect if CSP is blocking unsafe-eval
- * and automatically deactivates this feature in the {@link $parse} service. This autodetection,
- * however, triggers a CSP error to be logged in the console:
+ * If you do not provide `ngCsp` then Angular tries to autodetect if CSP is blocking dynamic code
+ * creation from strings (e.g., `unsafe-eval` not specified in CSP header) and automatically
+ * deactivates this feature in the {@link $parse} service. This autodetection, however, triggers a
+ * CSP error to be logged in the console:
*
* ```
* Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed source of
@@ -23851,24 +27067,24 @@ var ngControllerDirective = [function() {
*
* * no-inline-style: this stops Angular from injecting CSS styles into the DOM
*
- * * no-unsafe-eval: this stops Angular from optimising $parse with unsafe eval of strings
+ * * no-unsafe-eval: this stops Angular from optimizing $parse with unsafe eval of strings
*
* You can use these values in the following combinations:
*
*
* * No declaration means that Angular will assume that you can do inline styles, but it will do
- * a runtime check for unsafe-eval. E.g. `<body>`. This is backwardly compatible with previous versions
- * of Angular.
+ * a runtime check for unsafe-eval. E.g. `<body>`. This is backwardly compatible with previous
+ * versions of Angular.
*
* * A simple `ng-csp` (or `data-ng-csp`) attribute will tell Angular to deactivate both inline
- * styles and unsafe eval. E.g. `<body ng-csp>`. This is backwardly compatible with previous versions
- * of Angular.
+ * styles and unsafe eval. E.g. `<body ng-csp>`. This is backwardly compatible with previous
+ * versions of Angular.
*
- * * Specifying only `no-unsafe-eval` tells Angular that we must not use eval, but that we can inject
- * inline styles. E.g. `<body ng-csp="no-unsafe-eval">`.
+ * * Specifying only `no-unsafe-eval` tells Angular that we must not use eval, but that we can
+ * inject inline styles. E.g. `<body ng-csp="no-unsafe-eval">`.
*
* * Specifying only `no-inline-style` tells Angular that we must not inject styles, but that we can
- * run eval - no automcatic check for unsafe eval will occur. E.g. `<body ng-csp="no-inline-style">`
+ * run eval - no automatic check for unsafe eval will occur. E.g. `<body ng-csp="no-inline-style">`
*
* * Specifying both `no-unsafe-eval` and `no-inline-style` tells Angular that we must not inject
* styles nor use eval, which is the same as an empty: ng-csp.
@@ -23884,8 +27100,7 @@ var ngControllerDirective = [function() {
</html>
```
* @example
- // Note: the suffix `.csp` in the example name triggers
- // csp mode in our http server!
+ <!-- Note: the `.csp` suffix in the example name triggers CSP mode in our http server! -->
<example name="example.csp" module="cspExample" ng-csp="true">
<file name="index.html">
<div ng-controller="MainController as ctrl">
@@ -23906,15 +27121,14 @@ var ngControllerDirective = [function() {
</file>
<file name="script.js">
angular.module('cspExample', [])
- .controller('MainController', function() {
+ .controller('MainController', function MainController() {
this.counter = 0;
this.inc = function() {
this.counter++;
};
this.evil = function() {
- // jshint evil:true
try {
- eval('1+2');
+ eval('1+2'); // eslint-disable-line no-eval
} catch (e) {
this.evilError = e.message;
}
@@ -23966,7 +27180,7 @@ var ngControllerDirective = [function() {
beforeEach(function() {
util = require('util');
- webdriver = require('protractor/node_modules/selenium-webdriver');
+ webdriver = require('selenium-webdriver');
});
// For now, we only test on Chrome,
@@ -24003,9 +27217,9 @@ var ngControllerDirective = [function() {
</example>
*/
-// ngCsp is not implemented as a proper directive any more, because we need it be processed while we
-// bootstrap the system (before $parse is instantiated), for this reason we just have
-// the csp() fn that looks for the `ng-csp` attribute anywhere in the current doc
+// `ngCsp` is not implemented as a proper directive any more, because we need it be processed while
+// we bootstrap the app (before `$parse` is instantiated). For this reason, we just have the `csp()`
+// fn that looks for the `ng-csp` attribute anywhere in the current doc.
/**
* @ngdoc directive
@@ -24021,7 +27235,7 @@ var ngControllerDirective = [function() {
* click. ({@link guide/expression#-event- Event object is available as `$event`})
*
* @example
- <example>
+ <example name="ng-click">
<file name="index.html">
<button ng-click="count = count + 1" ng-init="count=0">
Increment
@@ -24060,15 +27274,15 @@ forEach(
return {
restrict: 'A',
compile: function($element, attr) {
- // We expose the powerful $event object on the scope that provides access to the Window,
- // etc. that isn't protected by the fast paths in $parse. We explicitly request better
- // checks at the cost of speed since event handler expressions are not executed as
- // frequently as regular change detection.
- var fn = $parse(attr[directiveName], /* interceptorFn */ null, /* expensiveChecks */ true);
+ // NOTE:
+ // We expose the powerful `$event` object on the scope that provides access to the Window,
+ // etc. This is OK, because expressions are not sandboxed any more (and the expression
+ // sandbox was never meant to be a security feature anyway).
+ var fn = $parse(attr[directiveName]);
return function ngEventHandler(scope, element) {
element.on(eventName, function(event) {
var callback = function() {
- fn(scope, {$event:event});
+ fn(scope, {$event: event});
};
if (forceAsyncEvents[eventName] && $rootScope.$$phase) {
scope.$evalAsync(callback);
@@ -24096,7 +27310,7 @@ forEach(
* a dblclick. (The Event object is available as `$event`)
*
* @example
- <example>
+ <example name="ng-dblclick">
<file name="index.html">
<button ng-dblclick="count = count + 1" ng-init="count=0">
Increment (on double click)
@@ -24120,7 +27334,7 @@ forEach(
* mousedown. ({@link guide/expression#-event- Event object is available as `$event`})
*
* @example
- <example>
+ <example name="ng-mousedown">
<file name="index.html">
<button ng-mousedown="count = count + 1" ng-init="count=0">
Increment (on mouse down)
@@ -24144,7 +27358,7 @@ forEach(
* mouseup. ({@link guide/expression#-event- Event object is available as `$event`})
*
* @example
- <example>
+ <example name="ng-mouseup">
<file name="index.html">
<button ng-mouseup="count = count + 1" ng-init="count=0">
Increment (on mouse up)
@@ -24167,7 +27381,7 @@ forEach(
* mouseover. ({@link guide/expression#-event- Event object is available as `$event`})
*
* @example
- <example>
+ <example name="ng-mouseover">
<file name="index.html">
<button ng-mouseover="count = count + 1" ng-init="count=0">
Increment (when mouse is over)
@@ -24191,7 +27405,7 @@ forEach(
* mouseenter. ({@link guide/expression#-event- Event object is available as `$event`})
*
* @example
- <example>
+ <example name="ng-mouseenter">
<file name="index.html">
<button ng-mouseenter="count = count + 1" ng-init="count=0">
Increment (when mouse enters)
@@ -24215,7 +27429,7 @@ forEach(
* mouseleave. ({@link guide/expression#-event- Event object is available as `$event`})
*
* @example
- <example>
+ <example name="ng-mouseleave">
<file name="index.html">
<button ng-mouseleave="count = count + 1" ng-init="count=0">
Increment (when mouse leaves)
@@ -24239,7 +27453,7 @@ forEach(
* mousemove. ({@link guide/expression#-event- Event object is available as `$event`})
*
* @example
- <example>
+ <example name="ng-mousemove">
<file name="index.html">
<button ng-mousemove="count = count + 1" ng-init="count=0">
Increment (when mouse moves)
@@ -24263,7 +27477,7 @@ forEach(
* keydown. (Event object is available as `$event` and can be interrogated for keyCode, altKey, etc.)
*
* @example
- <example>
+ <example name="ng-keydown">
<file name="index.html">
<input ng-keydown="count = count + 1" ng-init="count=0">
key down count: {{count}}
@@ -24285,7 +27499,7 @@ forEach(
* keyup. (Event object is available as `$event` and can be interrogated for keyCode, altKey, etc.)
*
* @example
- <example>
+ <example name="ng-keyup">
<file name="index.html">
<p>Typing in the input box below updates the key count</p>
<input ng-keyup="count = count + 1" ng-init="count=0"> key up count: {{count}}
@@ -24312,7 +27526,7 @@ forEach(
* and can be interrogated for keyCode, altKey, etc.)
*
* @example
- <example>
+ <example name="ng-keypress">
<file name="index.html">
<input ng-keypress="count = count + 1" ng-init="count=0">
key press count: {{count}}
@@ -24345,7 +27559,7 @@ forEach(
* ({@link guide/expression#-event- Event object is available as `$event`})
*
* @example
- <example module="submitExample">
+ <example module="submitExample" name="ng-submit">
<file name="index.html">
<script>
angular.module('submitExample', [])
@@ -24441,7 +27655,7 @@ forEach(
* copy. ({@link guide/expression#-event- Event object is available as `$event`})
*
* @example
- <example>
+ <example name="ng-copy">
<file name="index.html">
<input ng-copy="copied=true" ng-init="copied=false; value='copy me'" ng-model="value">
copied: {{copied}}
@@ -24462,7 +27676,7 @@ forEach(
* cut. ({@link guide/expression#-event- Event object is available as `$event`})
*
* @example
- <example>
+ <example name="ng-cut">
<file name="index.html">
<input ng-cut="cut=true" ng-init="cut=false; value='cut me'" ng-model="value">
cut: {{cut}}
@@ -24483,7 +27697,7 @@ forEach(
* paste. ({@link guide/expression#-event- Event object is available as `$event`})
*
* @example
- <example>
+ <example name="ng-paste">
<file name="index.html">
<input ng-paste="paste=true" ng-init="paste=false" placeholder='paste here'>
pasted: {{paste}}
@@ -24525,8 +27739,10 @@ forEach(
* and `leave` effects.
*
* @animations
- * enter - happens just after the `ngIf` contents change and a new DOM element is created and injected into the `ngIf` container
- * leave - happens just before the `ngIf` contents are removed from the DOM
+ * | Animation | Occurs |
+ * |----------------------------------|-------------------------------------|
+ * | {@link ng.$animate#enter enter} | just after the `ngIf` contents change and a new DOM element is created and injected into the `ngIf` container |
+ * | {@link ng.$animate#leave leave} | just before the `ngIf` contents are removed from the DOM |
*
* @element ANY
* @scope
@@ -24536,7 +27752,7 @@ forEach(
* element is added to the DOM tree.
*
* @example
- <example module="ngAnimate" deps="angular-animate.js" animations="true">
+ <example module="ngAnimate" deps="angular-animate.js" animations="true" name="ng-if">
<file name="index.html">
<label>Click me: <input type="checkbox" ng-model="checked" ng-init="checked=true" /></label><br/>
Show when checked:
@@ -24567,7 +27783,7 @@ forEach(
</file>
</example>
*/
-var ngIfDirective = ['$animate', function($animate) {
+var ngIfDirective = ['$animate', '$compile', function($animate, $compile) {
return {
multiElement: true,
transclude: 'element',
@@ -24583,7 +27799,7 @@ var ngIfDirective = ['$animate', function($animate) {
if (!childScope) {
$transclude(function(clone, newScope) {
childScope = newScope;
- clone[clone.length++] = document.createComment(' end ngIf: ' + $attr.ngIf + ' ');
+ clone[clone.length++] = $compile.$$createComment('end ngIf', $attr.ngIf);
// Note: We only need the first/last node of the cloned nodes.
// However, we need to keep the reference to the jqlite wrapper as it might be changed later
// by a directive with templateUrl when its template arrives.
@@ -24604,8 +27820,8 @@ var ngIfDirective = ['$animate', function($animate) {
}
if (block) {
previousElements = getBlockNodes(block.clone);
- $animate.leave(previousElements).then(function() {
- previousElements = null;
+ $animate.leave(previousElements).done(function(response) {
+ if (response !== false) previousElements = null;
});
block = null;
}
@@ -24638,8 +27854,10 @@ var ngIfDirective = ['$animate', function($animate) {
* access on some browsers.
*
* @animations
- * enter - animation is used to bring new content into the browser.
- * leave - animation is used to animate existing content away.
+ * | Animation | Occurs |
+ * |----------------------------------|-------------------------------------|
+ * | {@link ng.$animate#enter enter} | when the expression changes, on the new include |
+ * | {@link ng.$animate#leave leave} | when the expression changes, on the old include |
*
* The enter and leave animation occur concurrently.
*
@@ -24664,7 +27882,7 @@ var ngIfDirective = ['$animate', function($animate) {
* - Otherwise enable scrolling only if the expression evaluates to truthy value.
*
* @example
- <example module="includeExample" deps="angular-animate.js" animations="true">
+ <example module="includeExample" deps="angular-animate.js" animations="true" name="ng-include">
<file name="index.html">
<div ng-controller="ExampleController">
<select ng-model="template" ng-options="t.name for t in templates">
@@ -24681,8 +27899,8 @@ var ngIfDirective = ['$animate', function($animate) {
angular.module('includeExample', ['ngAnimate'])
.controller('ExampleController', ['$scope', function($scope) {
$scope.templates =
- [ { name: 'template1.html', url: 'template1.html'},
- { name: 'template2.html', url: 'template2.html'} ];
+ [{ name: 'template1.html', url: 'template1.html'},
+ { name: 'template2.html', url: 'template2.html'}];
$scope.template = $scope.templates[0];
}]);
</file>
@@ -24740,7 +27958,7 @@ var ngIfDirective = ['$animate', function($animate) {
});
it('should load template2.html', function() {
- if (browser.params.browser == 'firefox') {
+ if (browser.params.browser === 'firefox') {
// Firefox can't handle using selects
// See https://github.com/angular/protractor/issues/480
return;
@@ -24751,7 +27969,7 @@ var ngIfDirective = ['$animate', function($animate) {
});
it('should change to blank', function() {
- if (browser.params.browser == 'firefox') {
+ if (browser.params.browser === 'firefox') {
// Firefox can't handle using selects
return;
}
@@ -24827,8 +28045,8 @@ var ngIncludeDirective = ['$templateRequest', '$anchorScroll', '$animate',
currentScope = null;
}
if (currentElement) {
- $animate.leave(currentElement).then(function() {
- previousElement = null;
+ $animate.leave(currentElement).done(function(response) {
+ if (response !== false) previousElement = null;
});
previousElement = currentElement;
currentElement = null;
@@ -24836,9 +28054,10 @@ var ngIncludeDirective = ['$templateRequest', '$anchorScroll', '$animate',
};
scope.$watch(srcExp, function ngIncludeWatchAction(src) {
- var afterAnimation = function() {
- if (isDefined(autoScrollExp) && (!autoScrollExp || scope.$eval(autoScrollExp))) {
- $anchorScroll();
+ var afterAnimation = function(response) {
+ if (response !== false && isDefined(autoScrollExp) &&
+ (!autoScrollExp || scope.$eval(autoScrollExp))) {
+ $anchorScroll();
}
};
var thisChangeId = ++changeCounter;
@@ -24861,7 +28080,7 @@ var ngIncludeDirective = ['$templateRequest', '$anchorScroll', '$animate',
// directives to non existing elements.
var clone = $transclude(newScope, function(clone) {
cleanupLastIncludeContent();
- $animate.enter(clone, null, $element).then(afterAnimation);
+ $animate.enter(clone, null, $element).done(afterAnimation);
});
currentScope = newScope;
@@ -24900,12 +28119,12 @@ var ngIncludeFillContentDirective = ['$compile',
priority: -400,
require: 'ngInclude',
link: function(scope, $element, $attr, ctrl) {
- if (/SVG/.test($element[0].toString())) {
+ if (toString.call($element[0]).match(/SVG/)) {
// WebKit: https://bugs.webkit.org/show_bug.cgi?id=135698 --- SVG elements do not
// support innerHTML, so detect this here and try to generate the contents
// specially.
$element.empty();
- $compile(jqLiteBuildFragment(ctrl.template, document).childNodes)(scope,
+ $compile(jqLiteBuildFragment(ctrl.template, window.document).childNodes)(scope,
function namespaceAdaptedClone(clone) {
$element.append(clone);
}, {futureParentElement: $element});
@@ -24949,7 +28168,7 @@ var ngIncludeFillContentDirective = ['$compile',
* @param {expression} ngInit {@link guide/expression Expression} to eval.
*
* @example
- <example module="initExample">
+ <example module="initExample" name="ng-init">
<file name="index.html">
<script>
angular.module('initExample', [])
@@ -25077,9 +28296,7 @@ var ngListDirective = function() {
priority: 100,
require: 'ngModel',
link: function(scope, element, attr, ctrl) {
- // We want to control whitespace trimming so we use this convoluted approach
- // to access the ngList attribute, which doesn't pre-trim the attribute
- var ngList = element.attr(attr.$attr.ngList) || ', ';
+ var ngList = attr.ngList || ', ';
var trimValues = attr.ngTrim !== 'false';
var separator = trimValues ? trim(ngList) : ngList;
@@ -25121,15 +28338,21 @@ var ngListDirective = function() {
DIRTY_CLASS: true,
UNTOUCHED_CLASS: true,
TOUCHED_CLASS: true,
+ PENDING_CLASS: true,
+ addSetValidityMethod: true,
+ setupValidity: true,
+ defaultModelOptions: false
*/
+
var VALID_CLASS = 'ng-valid',
INVALID_CLASS = 'ng-invalid',
PRISTINE_CLASS = 'ng-pristine',
DIRTY_CLASS = 'ng-dirty',
UNTOUCHED_CLASS = 'ng-untouched',
TOUCHED_CLASS = 'ng-touched',
- PENDING_CLASS = 'ng-pending';
+ EMPTY_CLASS = 'ng-empty',
+ NOT_EMPTY_CLASS = 'ng-not-empty';
var ngModelMinErr = minErr('ngModel');
@@ -25140,32 +28363,57 @@ var ngModelMinErr = minErr('ngModel');
* @property {*} $viewValue The actual value from the control's view. For `input` elements, this is a
* String. See {@link ngModel.NgModelController#$setViewValue} for information about when the $viewValue
* is set.
+ *
* @property {*} $modelValue The value in the model that the control is bound to.
+ *
* @property {Array.<Function>} $parsers Array of functions to execute, as a pipeline, whenever
- the control reads value from the DOM. The functions are called in array order, each passing
- its return value through to the next. The last return value is forwarded to the
- {@link ngModel.NgModelController#$validators `$validators`} collection.
+ * the control updates the ngModelController with a new {@link ngModel.NgModelController#$viewValue
+ `$viewValue`} from the DOM, usually via user input.
+ See {@link ngModel.NgModelController#$setViewValue `$setViewValue()`} for a detailed lifecycle explanation.
+ Note that the `$parsers` are not called when the bound ngModel expression changes programmatically.
+
+ The functions are called in array order, each passing
+ its return value through to the next. The last return value is forwarded to the
+ {@link ngModel.NgModelController#$validators `$validators`} collection.
-Parsers are used to sanitize / convert the {@link ngModel.NgModelController#$viewValue
-`$viewValue`}.
+ Parsers are used to sanitize / convert the {@link ngModel.NgModelController#$viewValue
+ `$viewValue`}.
-Returning `undefined` from a parser means a parse error occurred. In that case,
-no {@link ngModel.NgModelController#$validators `$validators`} will run and the `ngModel`
-will be set to `undefined` unless {@link ngModelOptions `ngModelOptions.allowInvalid`}
-is set to `true`. The parse error is stored in `ngModel.$error.parse`.
+ Returning `undefined` from a parser means a parse error occurred. In that case,
+ no {@link ngModel.NgModelController#$validators `$validators`} will run and the `ngModel`
+ will be set to `undefined` unless {@link ngModelOptions `ngModelOptions.allowInvalid`}
+ is set to `true`. The parse error is stored in `ngModel.$error.parse`.
+
+ This simple example shows a parser that would convert text input value to lowercase:
+ * ```js
+ * function parse(value) {
+ * if (value) {
+ * return value.toLowerCase();
+ * }
+ * }
+ * ngModelController.$parsers.push(parse);
+ * ```
*
* @property {Array.<Function>} $formatters Array of functions to execute, as a pipeline, whenever
- the model value changes. The functions are called in reverse array order, each passing the value through to the
- next. The last return value is used as the actual DOM value.
- Used to format / convert values for display in the control.
+ the bound ngModel expression changes programmatically. The `$formatters` are not called when the
+ value of the control is changed by user interaction.
+
+ Formatters are used to format / convert the {@link ngModel.NgModelController#$modelValue
+ `$modelValue`} for display in the control.
+
+ The functions are called in reverse array order, each passing the value through to the
+ next. The last return value is used as the actual DOM value.
+
+ This simple example shows a formatter that would convert the model value to uppercase:
+
* ```js
- * function formatter(value) {
+ * function format(value) {
* if (value) {
* return value.toUpperCase();
* }
* }
- * ngModel.$formatters.push(formatter);
+ * ngModel.$formatters.push(format);
* ```
*
* @property {Object.<string, function>} $validators A collection of validators that are applied
@@ -25291,7 +28539,7 @@ is set to `true`. The parse error is stored in `ngModel.$error.parse`.
var html = element.html();
// When we clear the content editable the browser leaves a <br> behind
// If strip-br attribute is provided then we strip this out
- if ( attrs.stripBr && html == '<br>' ) {
+ if (attrs.stripBr && html === '<br>') {
html = '';
}
ngModel.$setViewValue(html);
@@ -25313,7 +28561,7 @@ is set to `true`. The parse error is stored in `ngModel.$error.parse`.
</file>
<file name="protractor.js" type="protractor">
it('should data-bind and become invalid', function() {
- if (browser.params.browser == 'safari' || browser.params.browser == 'firefox') {
+ if (browser.params.browser === 'safari' || browser.params.browser === 'firefox') {
// SafariDriver can't handle contenteditable
// and Firefox driver can't clear contenteditables very well
return;
@@ -25333,8 +28581,8 @@ is set to `true`. The parse error is stored in `ngModel.$error.parse`.
*
*
*/
-var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$parse', '$animate', '$timeout', '$rootScope', '$q', '$interpolate',
- function($scope, $exceptionHandler, $attr, $element, $parse, $animate, $timeout, $rootScope, $q, $interpolate) {
+NgModelController.$inject = ['$scope', '$exceptionHandler', '$attrs', '$element', '$parse', '$animate', '$timeout', '$q', '$interpolate'];
+function NgModelController($scope, $exceptionHandler, $attr, $element, $parse, $animate, $timeout, $q, $interpolate) {
this.$viewValue = Number.NaN;
this.$modelValue = Number.NaN;
this.$$rawModelValue = undefined; // stores the parsed modelValue / model set from scope regardless of validity.
@@ -25354,40 +28602,58 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
this.$pending = undefined; // keep pending keys here
this.$name = $interpolate($attr.name || '', false)($scope);
this.$$parentForm = nullFormCtrl;
+ this.$options = defaultModelOptions;
+
+ this.$$parsedNgModel = $parse($attr.ngModel);
+ this.$$parsedNgModelAssign = this.$$parsedNgModel.assign;
+ this.$$ngModelGet = this.$$parsedNgModel;
+ this.$$ngModelSet = this.$$parsedNgModelAssign;
+ this.$$pendingDebounce = null;
+ this.$$parserValid = undefined;
+
+ this.$$currentValidationRunId = 0;
+
+ // https://github.com/angular/angular.js/issues/15833
+ // Prevent `$$scope` from being iterated over by `copy` when NgModelController is deep watched
+ Object.defineProperty(this, '$$scope', {value: $scope});
+ this.$$attr = $attr;
+ this.$$element = $element;
+ this.$$animate = $animate;
+ this.$$timeout = $timeout;
+ this.$$parse = $parse;
+ this.$$q = $q;
+ this.$$exceptionHandler = $exceptionHandler;
+
+ setupValidity(this);
+ setupModelWatcher(this);
+}
- var parsedNgModel = $parse($attr.ngModel),
- parsedNgModelAssign = parsedNgModel.assign,
- ngModelGet = parsedNgModel,
- ngModelSet = parsedNgModelAssign,
- pendingDebounce = null,
- parserValid,
- ctrl = this;
-
- this.$$setOptions = function(options) {
- ctrl.$options = options;
- if (options && options.getterSetter) {
- var invokeModelGetter = $parse($attr.ngModel + '()'),
- invokeModelSetter = $parse($attr.ngModel + '($$$p)');
-
- ngModelGet = function($scope) {
- var modelValue = parsedNgModel($scope);
+NgModelController.prototype = {
+ $$initGetterSetters: function() {
+ if (this.$options.getOption('getterSetter')) {
+ var invokeModelGetter = this.$$parse(this.$$attr.ngModel + '()'),
+ invokeModelSetter = this.$$parse(this.$$attr.ngModel + '($$$p)');
+
+ this.$$ngModelGet = function($scope) {
+ var modelValue = this.$$parsedNgModel($scope);
if (isFunction(modelValue)) {
modelValue = invokeModelGetter($scope);
}
return modelValue;
};
- ngModelSet = function($scope, newValue) {
- if (isFunction(parsedNgModel($scope))) {
- invokeModelSetter($scope, {$$$p: ctrl.$modelValue});
+ this.$$ngModelSet = function($scope, newValue) {
+ if (isFunction(this.$$parsedNgModel($scope))) {
+ invokeModelSetter($scope, {$$$p: newValue});
} else {
- parsedNgModelAssign($scope, ctrl.$modelValue);
+ this.$$parsedNgModelAssign($scope, newValue);
}
};
- } else if (!parsedNgModel.assign) {
- throw ngModelMinErr('nonassign', "Expression '{0}' is non-assignable. Element: {1}",
- $attr.ngModel, startingTag($element));
+ } else if (!this.$$parsedNgModel.assign) {
+ throw ngModelMinErr('nonassign', 'Expression \'{0}\' is non-assignable. Element: {1}',
+ this.$$attr.ngModel, startingTag(this.$$element));
}
- };
+ },
+
/**
* @ngdoc method
@@ -25405,11 +28671,11 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
* the `$viewValue` are different from last time.
*
* Since `ng-model` does not do a deep watch, `$render()` is only invoked if the values of
- * `$modelValue` and `$viewValue` are actually different from their previous value. If `$modelValue`
+ * `$modelValue` and `$viewValue` are actually different from their previous values. If `$modelValue`
* or `$viewValue` are objects (rather than a string or number) then `$render()` will not be
* invoked if you only change a property on the objects.
*/
- this.$render = noop;
+ $render: noop,
/**
* @ngdoc method
@@ -25429,45 +28695,20 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
* @param {*} value The value of the input to check for emptiness.
* @returns {boolean} True if `value` is "empty".
*/
- this.$isEmpty = function(value) {
+ $isEmpty: function(value) {
+ // eslint-disable-next-line no-self-compare
return isUndefined(value) || value === '' || value === null || value !== value;
- };
-
- var currentValidationRunId = 0;
+ },
- /**
- * @ngdoc method
- * @name ngModel.NgModelController#$setValidity
- *
- * @description
- * Change the validity state, and notify the form.
- *
- * This method can be called within $parsers/$formatters or a custom validation implementation.
- * However, in most cases it should be sufficient to use the `ngModel.$validators` and
- * `ngModel.$asyncValidators` collections which will call `$setValidity` automatically.
- *
- * @param {string} validationErrorKey Name of the validator. The `validationErrorKey` will be assigned
- * to either `$error[validationErrorKey]` or `$pending[validationErrorKey]`
- * (for unfulfilled `$asyncValidators`), so that it is available for data-binding.
- * The `validationErrorKey` should be in camelCase and will get converted into dash-case
- * for class name. Example: `myError` will result in `ng-valid-my-error` and `ng-invalid-my-error`
- * class and can be bound to as `{{someForm.someControl.$error.myError}}` .
- * @param {boolean} isValid Whether the current state is valid (true), invalid (false), pending (undefined),
- * or skipped (null). Pending is used for unfulfilled `$asyncValidators`.
- * Skipped is used by Angular when validators do not run because of parse errors and
- * when `$asyncValidators` do not run because any of the `$validators` failed.
- */
- addSetValidityMethod({
- ctrl: this,
- $element: $element,
- set: function(object, property) {
- object[property] = true;
- },
- unset: function(object, property) {
- delete object[property];
- },
- $animate: $animate
- });
+ $$updateEmptyClasses: function(value) {
+ if (this.$isEmpty(value)) {
+ this.$$animate.removeClass(this.$$element, NOT_EMPTY_CLASS);
+ this.$$animate.addClass(this.$$element, EMPTY_CLASS);
+ } else {
+ this.$$animate.removeClass(this.$$element, EMPTY_CLASS);
+ this.$$animate.addClass(this.$$element, NOT_EMPTY_CLASS);
+ }
+ },
/**
* @ngdoc method
@@ -25480,12 +28721,12 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
* state (`ng-pristine` class). A model is considered to be pristine when the control
* has not been changed from when first compiled.
*/
- this.$setPristine = function() {
- ctrl.$dirty = false;
- ctrl.$pristine = true;
- $animate.removeClass($element, DIRTY_CLASS);
- $animate.addClass($element, PRISTINE_CLASS);
- };
+ $setPristine: function() {
+ this.$dirty = false;
+ this.$pristine = true;
+ this.$$animate.removeClass(this.$$element, DIRTY_CLASS);
+ this.$$animate.addClass(this.$$element, PRISTINE_CLASS);
+ },
/**
* @ngdoc method
@@ -25498,13 +28739,13 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
* state (`ng-dirty` class). A model is considered to be dirty when the control has been changed
* from when first compiled.
*/
- this.$setDirty = function() {
- ctrl.$dirty = true;
- ctrl.$pristine = false;
- $animate.removeClass($element, PRISTINE_CLASS);
- $animate.addClass($element, DIRTY_CLASS);
- ctrl.$$parentForm.$setDirty();
- };
+ $setDirty: function() {
+ this.$dirty = true;
+ this.$pristine = false;
+ this.$$animate.removeClass(this.$$element, PRISTINE_CLASS);
+ this.$$animate.addClass(this.$$element, DIRTY_CLASS);
+ this.$$parentForm.$setDirty();
+ },
/**
* @ngdoc method
@@ -25518,11 +28759,11 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
* by default, however this function can be used to restore that state if the model has
* already been touched by the user.
*/
- this.$setUntouched = function() {
- ctrl.$touched = false;
- ctrl.$untouched = true;
- $animate.setClass($element, UNTOUCHED_CLASS, TOUCHED_CLASS);
- };
+ $setUntouched: function() {
+ this.$touched = false;
+ this.$untouched = true;
+ this.$$animate.setClass(this.$$element, UNTOUCHED_CLASS, TOUCHED_CLASS);
+ },
/**
* @ngdoc method
@@ -25535,11 +28776,11 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
* touched state (`ng-touched` class). A model is considered to be touched when the user has
* first focused the control element and then shifted focus away from the control (blur event).
*/
- this.$setTouched = function() {
- ctrl.$touched = true;
- ctrl.$untouched = false;
- $animate.setClass($element, TOUCHED_CLASS, UNTOUCHED_CLASS);
- };
+ $setTouched: function() {
+ this.$touched = true;
+ this.$untouched = false;
+ this.$$animate.setClass(this.$$element, TOUCHED_CLASS, UNTOUCHED_CLASS);
+ },
/**
* @ngdoc method
@@ -25547,12 +28788,12 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
*
* @description
* Cancel an update and reset the input element's value to prevent an update to the `$modelValue`,
- * which may be caused by a pending debounced event or because the input is waiting for a some
+ * which may be caused by a pending debounced event or because the input is waiting for some
* future event.
*
* If you have an input that uses `ng-model-options` to set up debounced updates or updates that
- * depend on special events such as blur, you can have a situation where there is a period when
- * the `$viewValue` is out of sync with the ngModel's `$modelValue`.
+ * depend on special events such as `blur`, there can be a period when the `$viewValue` is out of
+ * sync with the ngModel's `$modelValue`.
*
* In this case, you can use `$rollbackViewValue()` to manually cancel the debounced / future update
* and reset the input to the last committed view value.
@@ -25570,10 +28811,10 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
* angular.module('cancel-update-example', [])
*
* .controller('CancelUpdateController', ['$scope', function($scope) {
- * $scope.model = {};
+ * $scope.model = {value1: '', value2: ''};
*
* $scope.setEmpty = function(e, value, rollback) {
- * if (e.keyCode == 27) {
+ * if (e.keyCode === 27) {
* e.preventDefault();
* if (rollback) {
* $scope.myForm[value].$rollbackViewValue();
@@ -25585,8 +28826,8 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
* </file>
* <file name="index.html">
* <div ng-controller="CancelUpdateController">
- * <p>Both of these inputs are only updated if they are blurred. Hitting escape should
- * empty them. Follow these steps and observe the difference:</p>
+ * <p>Both of these inputs are only updated if they are blurred. Hitting escape should
+ * empty them. Follow these steps and observe the difference:</p>
* <ol>
* <li>Type something in the input. You will see that the model is not yet updated</li>
* <li>Press the Escape key.
@@ -25603,17 +28844,17 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
*
* <form name="myForm" ng-model-options="{ updateOn: 'blur' }">
* <div>
- * <p id="inputDescription1">Without $rollbackViewValue():</p>
- * <input name="value1" aria-describedby="inputDescription1" ng-model="model.value1"
- * ng-keydown="setEmpty($event, 'value1')">
- * value1: "{{ model.value1 }}"
+ * <p id="inputDescription1">Without $rollbackViewValue():</p>
+ * <input name="value1" aria-describedby="inputDescription1" ng-model="model.value1"
+ * ng-keydown="setEmpty($event, 'value1')">
+ * value1: "{{ model.value1 }}"
* </div>
*
* <div>
- * <p id="inputDescription2">With $rollbackViewValue():</p>
- * <input name="value2" aria-describedby="inputDescription2" ng-model="model.value2"
- * ng-keydown="setEmpty($event, 'value2', true)">
- * value2: "{{ model.value2 }}"
+ * <p id="inputDescription2">With $rollbackViewValue():</p>
+ * <input name="value2" aria-describedby="inputDescription2" ng-model="model.value2"
+ * ng-keydown="setEmpty($event, 'value2', true)">
+ * value2: "{{ model.value2 }}"
* </div>
* </form>
* </div>
@@ -25629,11 +28870,11 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
</file>
* </example>
*/
- this.$rollbackViewValue = function() {
- $timeout.cancel(pendingDebounce);
- ctrl.$viewValue = ctrl.$$lastCommittedViewValue;
- ctrl.$render();
- };
+ $rollbackViewValue: function() {
+ this.$$timeout.cancel(this.$$pendingDebounce);
+ this.$viewValue = this.$$lastCommittedViewValue;
+ this.$render();
+ },
/**
* @ngdoc method
@@ -25647,45 +28888,46 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
* If the validity changes to valid, it will set the model to the last available valid
* `$modelValue`, i.e. either the last parsed value or the last value set from the scope.
*/
- this.$validate = function() {
+ $validate: function() {
// ignore $validate before model is initialized
- if (isNumber(ctrl.$modelValue) && isNaN(ctrl.$modelValue)) {
+ if (isNumberNaN(this.$modelValue)) {
return;
}
- var viewValue = ctrl.$$lastCommittedViewValue;
+ var viewValue = this.$$lastCommittedViewValue;
// Note: we use the $$rawModelValue as $modelValue might have been
// set to undefined during a view -> model update that found validation
// errors. We can't parse the view here, since that could change
// the model although neither viewValue nor the model on the scope changed
- var modelValue = ctrl.$$rawModelValue;
+ var modelValue = this.$$rawModelValue;
- var prevValid = ctrl.$valid;
- var prevModelValue = ctrl.$modelValue;
+ var prevValid = this.$valid;
+ var prevModelValue = this.$modelValue;
- var allowInvalid = ctrl.$options && ctrl.$options.allowInvalid;
+ var allowInvalid = this.$options.getOption('allowInvalid');
- ctrl.$$runValidators(modelValue, viewValue, function(allValid) {
+ var that = this;
+ this.$$runValidators(modelValue, viewValue, function(allValid) {
// If there was no change in validity, don't update the model
// This prevents changing an invalid modelValue to undefined
if (!allowInvalid && prevValid !== allValid) {
- // Note: Don't check ctrl.$valid here, as we could have
+ // Note: Don't check this.$valid here, as we could have
// external validators (e.g. calculated on the server),
// that just call $setValidity and need the model value
// to calculate their validity.
- ctrl.$modelValue = allValid ? modelValue : undefined;
+ that.$modelValue = allValid ? modelValue : undefined;
- if (ctrl.$modelValue !== prevModelValue) {
- ctrl.$$writeModelToScope();
+ if (that.$modelValue !== prevModelValue) {
+ that.$$writeModelToScope();
}
}
});
+ },
- };
-
- this.$$runValidators = function(modelValue, viewValue, doneCallback) {
- currentValidationRunId++;
- var localValidationRunId = currentValidationRunId;
+ $$runValidators: function(modelValue, viewValue, doneCallback) {
+ this.$$currentValidationRunId++;
+ var localValidationRunId = this.$$currentValidationRunId;
+ var that = this;
// check parser error
if (!processParseErrors()) {
@@ -25699,34 +28941,34 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
processAsyncValidators();
function processParseErrors() {
- var errorKey = ctrl.$$parserName || 'parse';
- if (isUndefined(parserValid)) {
+ var errorKey = that.$$parserName || 'parse';
+ if (isUndefined(that.$$parserValid)) {
setValidity(errorKey, null);
} else {
- if (!parserValid) {
- forEach(ctrl.$validators, function(v, name) {
+ if (!that.$$parserValid) {
+ forEach(that.$validators, function(v, name) {
setValidity(name, null);
});
- forEach(ctrl.$asyncValidators, function(v, name) {
+ forEach(that.$asyncValidators, function(v, name) {
setValidity(name, null);
});
}
// Set the parse error last, to prevent unsetting it, should a $validators key == parserName
- setValidity(errorKey, parserValid);
- return parserValid;
+ setValidity(errorKey, that.$$parserValid);
+ return that.$$parserValid;
}
return true;
}
function processSyncValidators() {
var syncValidatorsValid = true;
- forEach(ctrl.$validators, function(validator, name) {
- var result = validator(modelValue, viewValue);
+ forEach(that.$validators, function(validator, name) {
+ var result = Boolean(validator(modelValue, viewValue));
syncValidatorsValid = syncValidatorsValid && result;
setValidity(name, result);
});
if (!syncValidatorsValid) {
- forEach(ctrl.$asyncValidators, function(v, name) {
+ forEach(that.$asyncValidators, function(v, name) {
setValidity(name, null);
});
return false;
@@ -25737,16 +28979,16 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
function processAsyncValidators() {
var validatorPromises = [];
var allValid = true;
- forEach(ctrl.$asyncValidators, function(validator, name) {
+ forEach(that.$asyncValidators, function(validator, name) {
var promise = validator(modelValue, viewValue);
if (!isPromiseLike(promise)) {
throw ngModelMinErr('nopromise',
- "Expected asynchronous validator to return a promise but got '{0}' instead.", promise);
+ 'Expected asynchronous validator to return a promise but got \'{0}\' instead.', promise);
}
setValidity(name, undefined);
validatorPromises.push(promise.then(function() {
setValidity(name, true);
- }, function(error) {
+ }, function() {
allValid = false;
setValidity(name, false);
}));
@@ -25754,25 +28996,25 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
if (!validatorPromises.length) {
validationDone(true);
} else {
- $q.all(validatorPromises).then(function() {
+ that.$$q.all(validatorPromises).then(function() {
validationDone(allValid);
}, noop);
}
}
function setValidity(name, isValid) {
- if (localValidationRunId === currentValidationRunId) {
- ctrl.$setValidity(name, isValid);
+ if (localValidationRunId === that.$$currentValidationRunId) {
+ that.$setValidity(name, isValid);
}
}
function validationDone(allValid) {
- if (localValidationRunId === currentValidationRunId) {
+ if (localValidationRunId === that.$$currentValidationRunId) {
doneCallback(allValid);
}
}
- };
+ },
/**
* @ngdoc method
@@ -25785,83 +29027,87 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
* event defined in `ng-model-options`. this method is rarely needed as `NgModelController`
* usually handles calling this in response to input events.
*/
- this.$commitViewValue = function() {
- var viewValue = ctrl.$viewValue;
+ $commitViewValue: function() {
+ var viewValue = this.$viewValue;
- $timeout.cancel(pendingDebounce);
+ this.$$timeout.cancel(this.$$pendingDebounce);
// If the view value has not changed then we should just exit, except in the case where there is
// a native validator on the element. In this case the validation state may have changed even though
// the viewValue has stayed empty.
- if (ctrl.$$lastCommittedViewValue === viewValue && (viewValue !== '' || !ctrl.$$hasNativeValidators)) {
+ if (this.$$lastCommittedViewValue === viewValue && (viewValue !== '' || !this.$$hasNativeValidators)) {
return;
}
- ctrl.$$lastCommittedViewValue = viewValue;
+ this.$$updateEmptyClasses(viewValue);
+ this.$$lastCommittedViewValue = viewValue;
// change to dirty
- if (ctrl.$pristine) {
+ if (this.$pristine) {
this.$setDirty();
}
this.$$parseAndValidate();
- };
+ },
- this.$$parseAndValidate = function() {
- var viewValue = ctrl.$$lastCommittedViewValue;
+ $$parseAndValidate: function() {
+ var viewValue = this.$$lastCommittedViewValue;
var modelValue = viewValue;
- parserValid = isUndefined(modelValue) ? undefined : true;
+ var that = this;
- if (parserValid) {
- for (var i = 0; i < ctrl.$parsers.length; i++) {
- modelValue = ctrl.$parsers[i](modelValue);
+ this.$$parserValid = isUndefined(modelValue) ? undefined : true;
+
+ if (this.$$parserValid) {
+ for (var i = 0; i < this.$parsers.length; i++) {
+ modelValue = this.$parsers[i](modelValue);
if (isUndefined(modelValue)) {
- parserValid = false;
+ this.$$parserValid = false;
break;
}
}
}
- if (isNumber(ctrl.$modelValue) && isNaN(ctrl.$modelValue)) {
- // ctrl.$modelValue has not been touched yet...
- ctrl.$modelValue = ngModelGet($scope);
+ if (isNumberNaN(this.$modelValue)) {
+ // this.$modelValue has not been touched yet...
+ this.$modelValue = this.$$ngModelGet(this.$$scope);
}
- var prevModelValue = ctrl.$modelValue;
- var allowInvalid = ctrl.$options && ctrl.$options.allowInvalid;
- ctrl.$$rawModelValue = modelValue;
+ var prevModelValue = this.$modelValue;
+ var allowInvalid = this.$options.getOption('allowInvalid');
+ this.$$rawModelValue = modelValue;
if (allowInvalid) {
- ctrl.$modelValue = modelValue;
+ this.$modelValue = modelValue;
writeToModelIfNeeded();
}
// Pass the $$lastCommittedViewValue here, because the cached viewValue might be out of date.
// This can happen if e.g. $setViewValue is called from inside a parser
- ctrl.$$runValidators(modelValue, ctrl.$$lastCommittedViewValue, function(allValid) {
+ this.$$runValidators(modelValue, this.$$lastCommittedViewValue, function(allValid) {
if (!allowInvalid) {
- // Note: Don't check ctrl.$valid here, as we could have
+ // Note: Don't check this.$valid here, as we could have
// external validators (e.g. calculated on the server),
// that just call $setValidity and need the model value
// to calculate their validity.
- ctrl.$modelValue = allValid ? modelValue : undefined;
+ that.$modelValue = allValid ? modelValue : undefined;
writeToModelIfNeeded();
}
});
function writeToModelIfNeeded() {
- if (ctrl.$modelValue !== prevModelValue) {
- ctrl.$$writeModelToScope();
+ if (that.$modelValue !== prevModelValue) {
+ that.$$writeModelToScope();
}
}
- };
+ },
- this.$$writeModelToScope = function() {
- ngModelSet($scope, ctrl.$modelValue);
- forEach(ctrl.$viewChangeListeners, function(listener) {
+ $$writeModelToScope: function() {
+ this.$$ngModelSet(this.$$scope, this.$modelValue);
+ forEach(this.$viewChangeListeners, function(listener) {
try {
listener();
} catch (e) {
- $exceptionHandler(e);
+ // eslint-disable-next-line no-invalid-this
+ this.$$exceptionHandler(e);
}
- });
- };
+ }, this);
+ },
/**
* @ngdoc method
@@ -25877,9 +29123,10 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
*
* When `$setViewValue` is called, the new `value` will be staged for committing through the `$parsers`
* and `$validators` pipelines. If there are no special {@link ngModelOptions} specified then the staged
- * value sent directly for processing, finally to be applied to `$modelValue` and then the
- * **expression** specified in the `ng-model` attribute. Lastly, all the registered change listeners,
- * in the `$viewChangeListeners` list, are called.
+ * value is sent directly for processing through the `$parsers` pipeline. After this, the `$validators` and
+ * `$asyncValidators` are called and the value is applied to `$modelValue`.
+ * Finally, the value is set to the **expression** specified in the `ng-model` attribute and
+ * all the registered change listeners, in the `$viewChangeListeners` list are called.
*
* In case the {@link ng.directive:ngModelOptions ngModelOptions} directive is used with `updateOn`
* and the `default` trigger is not listed, all those actions will remain pending until one of the
@@ -25894,7 +29141,7 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
* However, custom controls might also pass objects to this method. In this case, we should make
* a copy of the object before passing it to `$setViewValue`. This is because `ngModel` does not
* perform a deep watch of objects, it only looks for a change of identity. If you only change
- * the property of the object then ngModel will not realise that the object has changed and
+ * the property of the object then ngModel will not realize that the object has changed and
* will not invoke the `$parsers` and `$validators` pipelines. For this reason, you should
* not change properties of the copy once it has been passed to `$setViewValue`.
* Otherwise you may cause the model value on the scope to change incorrectly.
@@ -25913,43 +29160,62 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
* @param {*} value value from the view.
* @param {string} trigger Event that triggered the update.
*/
- this.$setViewValue = function(value, trigger) {
- ctrl.$viewValue = value;
- if (!ctrl.$options || ctrl.$options.updateOnDefault) {
- ctrl.$$debounceViewValueCommit(trigger);
+ $setViewValue: function(value, trigger) {
+ this.$viewValue = value;
+ if (this.$options.getOption('updateOnDefault')) {
+ this.$$debounceViewValueCommit(trigger);
}
- };
+ },
- this.$$debounceViewValueCommit = function(trigger) {
- var debounceDelay = 0,
- options = ctrl.$options,
- debounce;
+ $$debounceViewValueCommit: function(trigger) {
+ var debounceDelay = this.$options.getOption('debounce');
- if (options && isDefined(options.debounce)) {
- debounce = options.debounce;
- if (isNumber(debounce)) {
- debounceDelay = debounce;
- } else if (isNumber(debounce[trigger])) {
- debounceDelay = debounce[trigger];
- } else if (isNumber(debounce['default'])) {
- debounceDelay = debounce['default'];
- }
+ if (isNumber(debounceDelay[trigger])) {
+ debounceDelay = debounceDelay[trigger];
+ } else if (isNumber(debounceDelay['default'])) {
+ debounceDelay = debounceDelay['default'];
}
- $timeout.cancel(pendingDebounce);
- if (debounceDelay) {
- pendingDebounce = $timeout(function() {
- ctrl.$commitViewValue();
+ this.$$timeout.cancel(this.$$pendingDebounce);
+ var that = this;
+ if (debounceDelay > 0) { // this fails if debounceDelay is an object
+ this.$$pendingDebounce = this.$$timeout(function() {
+ that.$commitViewValue();
}, debounceDelay);
- } else if ($rootScope.$$phase) {
- ctrl.$commitViewValue();
+ } else if (this.$$scope.$root.$$phase) {
+ this.$commitViewValue();
} else {
- $scope.$apply(function() {
- ctrl.$commitViewValue();
+ this.$$scope.$apply(function() {
+ that.$commitViewValue();
});
}
- };
+ },
+ /**
+ * @ngdoc method
+ *
+ * @name ngModel.NgModelController#$overrideModelOptions
+ *
+ * @description
+ *
+ * Override the current model options settings programmatically.
+ *
+ * The previous `ModelOptions` value will not be modified. Instead, a
+ * new `ModelOptions` object will inherit from the previous one overriding
+ * or inheriting settings that are defined in the given parameter.
+ *
+ * See {@link ngModelOptions} for information about what options can be specified
+ * and how model option inheritance works.
+ *
+ * @param {Object} options a hash of settings to override the previous options
+ *
+ */
+ $overrideModelOptions: function(options) {
+ this.$options = this.$options.createChild(options);
+ }
+};
+
+function setupModelWatcher(ctrl) {
// model -> value
// Note: we cannot use a normal scope.$watch as we want to detect the following:
// 1. scope value is 'a'
@@ -25958,17 +29224,18 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
// -> scope value did not change since the last digest as
// ng-change executes in apply phase
// 4. view should be changed back to 'a'
- $scope.$watch(function ngModelWatch() {
- var modelValue = ngModelGet($scope);
+ ctrl.$$scope.$watch(function ngModelWatch(scope) {
+ var modelValue = ctrl.$$ngModelGet(scope);
// if scope model value and ngModel value are out of sync
// TODO(perf): why not move this to the action fn?
if (modelValue !== ctrl.$modelValue &&
// checks for NaN is needed to allow setting the model to NaN when there's an asyncValidator
+ // eslint-disable-next-line no-self-compare
(ctrl.$modelValue === ctrl.$modelValue || modelValue === modelValue)
) {
ctrl.$modelValue = ctrl.$$rawModelValue = modelValue;
- parserValid = undefined;
+ ctrl.$$parserValid = undefined;
var formatters = ctrl.$formatters,
idx = formatters.length;
@@ -25978,16 +29245,50 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
viewValue = formatters[idx](viewValue);
}
if (ctrl.$viewValue !== viewValue) {
+ ctrl.$$updateEmptyClasses(viewValue);
ctrl.$viewValue = ctrl.$$lastCommittedViewValue = viewValue;
ctrl.$render();
- ctrl.$$runValidators(modelValue, viewValue, noop);
+ // It is possible that model and view value have been updated during render
+ ctrl.$$runValidators(ctrl.$modelValue, ctrl.$viewValue, noop);
}
}
return modelValue;
});
-}];
+}
+
+/**
+ * @ngdoc method
+ * @name ngModel.NgModelController#$setValidity
+ *
+ * @description
+ * Change the validity state, and notify the form.
+ *
+ * This method can be called within $parsers/$formatters or a custom validation implementation.
+ * However, in most cases it should be sufficient to use the `ngModel.$validators` and
+ * `ngModel.$asyncValidators` collections which will call `$setValidity` automatically.
+ *
+ * @param {string} validationErrorKey Name of the validator. The `validationErrorKey` will be assigned
+ * to either `$error[validationErrorKey]` or `$pending[validationErrorKey]`
+ * (for unfulfilled `$asyncValidators`), so that it is available for data-binding.
+ * The `validationErrorKey` should be in camelCase and will get converted into dash-case
+ * for class name. Example: `myError` will result in `ng-valid-my-error` and `ng-invalid-my-error`
+ * classes and can be bound to as `{{ someForm.someControl.$error.myError }}`.
+ * @param {boolean} isValid Whether the current state is valid (true), invalid (false), pending (undefined),
+ * or skipped (null). Pending is used for unfulfilled `$asyncValidators`.
+ * Skipped is used by Angular when validators do not run because of parse errors and
+ * when `$asyncValidators` do not run because any of the `$validators` failed.
+ */
+addSetValidityMethod({
+ clazz: NgModelController,
+ set: function(object, property) {
+ object[property] = true;
+ },
+ unset: function(object, property) {
+ delete object[property];
+ }
+});
/**
@@ -26008,7 +29309,8 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
* require.
* - Providing validation behavior (i.e. required, number, email, url).
* - Keeping the state of the control (valid/invalid, dirty/pristine, touched/untouched, validation errors).
- * - Setting related css classes on the element (`ng-valid`, `ng-invalid`, `ng-dirty`, `ng-pristine`, `ng-touched`, `ng-untouched`) including animations.
+ * - Setting related css classes on the element (`ng-valid`, `ng-invalid`, `ng-dirty`, `ng-pristine`, `ng-touched`,
+ * `ng-untouched`, `ng-empty`, `ng-not-empty`) including animations.
* - Registering the control with its parent {@link ng.directive:form form}.
*
* Note: `ngModel` will try to bind to the property given by evaluating the expression on the
@@ -26065,13 +29367,16 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
* - `ng-touched`: the control has been blurred
* - `ng-untouched`: the control hasn't been blurred
* - `ng-pending`: any `$asyncValidators` are unfulfilled
+ * - `ng-empty`: the view does not contain a value or the value is deemed "empty", as defined
+ * by the {@link ngModel.NgModelController#$isEmpty} method
+ * - `ng-not-empty`: the view contains a non-empty value
*
* Keep in mind that ngAnimate can detect each of these classes when added and removed.
*
* ## Animation Hooks
*
* Animations within models are triggered when any of the associated CSS classes are added and removed
- * on the input element which is attached to the model. These classes are: `.ng-pristine`, `.ng-dirty`,
+ * on the input element which is attached to the model. These classes include: `.ng-pristine`, `.ng-dirty`,
* `.ng-invalid` and `.ng-valid` as well as any other validations that are performed on the model itself.
* The animations that are triggered within ngModel are similar to how they work in ngClass and
* animations can be hooked into using CSS transitions, keyframes as well as JS animations.
@@ -26093,7 +29398,7 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
* </pre>
*
* @example
- * <example deps="angular-animate.js" animations="true" fixBase="true" module="inputExample">
+ * <example deps="angular-animate.js" animations="true" fixBase="true" module="inputExample" name="ng-model">
<file name="index.html">
<script>
angular.module('inputExample', [])
@@ -26189,9 +29494,14 @@ var ngModelDirective = ['$rootScope', function($rootScope) {
return {
pre: function ngModelPreLink(scope, element, attr, ctrls) {
var modelCtrl = ctrls[0],
- formCtrl = ctrls[1] || modelCtrl.$$parentForm;
+ formCtrl = ctrls[1] || modelCtrl.$$parentForm,
+ optionsCtrl = ctrls[2];
+
+ if (optionsCtrl) {
+ modelCtrl.$options = optionsCtrl.$options;
+ }
- modelCtrl.$$setOptions(ctrls[2] && ctrls[2].$options);
+ modelCtrl.$$initGetterSetters();
// notify others, especially parent forms
formCtrl.$addControl(modelCtrl);
@@ -26208,19 +29518,23 @@ var ngModelDirective = ['$rootScope', function($rootScope) {
},
post: function ngModelPostLink(scope, element, attr, ctrls) {
var modelCtrl = ctrls[0];
- if (modelCtrl.$options && modelCtrl.$options.updateOn) {
- element.on(modelCtrl.$options.updateOn, function(ev) {
+ if (modelCtrl.$options.getOption('updateOn')) {
+ element.on(modelCtrl.$options.getOption('updateOn'), function(ev) {
modelCtrl.$$debounceViewValueCommit(ev && ev.type);
});
}
- element.on('blur', function(ev) {
+ function setTouched() {
+ modelCtrl.$setTouched();
+ }
+
+ element.on('blur', function() {
if (modelCtrl.$touched) return;
if ($rootScope.$$phase) {
- scope.$evalAsync(modelCtrl.$setTouched);
+ scope.$evalAsync(setTouched);
} else {
- scope.$apply(modelCtrl.$setTouched);
+ scope.$apply(setTouched);
}
});
}
@@ -26229,23 +29543,173 @@ var ngModelDirective = ['$rootScope', function($rootScope) {
};
}];
+/* exported defaultModelOptions */
+var defaultModelOptions;
var DEFAULT_REGEXP = /(\s+|^)default(\s+|$)/;
/**
+ * @ngdoc type
+ * @name ModelOptions
+ * @description
+ * A container for the options set by the {@link ngModelOptions} directive
+ */
+function ModelOptions(options) {
+ this.$$options = options;
+}
+
+ModelOptions.prototype = {
+
+ /**
+ * @ngdoc method
+ * @name ModelOptions#getOption
+ * @param {string} name the name of the option to retrieve
+ * @returns {*} the value of the option
+ * @description
+ * Returns the value of the given option
+ */
+ getOption: function(name) {
+ return this.$$options[name];
+ },
+
+ /**
+ * @ngdoc method
+ * @name ModelOptions#createChild
+ * @param {Object} options a hash of options for the new child that will override the parent's options
+ * @return {ModelOptions} a new `ModelOptions` object initialized with the given options.
+ */
+ createChild: function(options) {
+ var inheritAll = false;
+
+ // make a shallow copy
+ options = extend({}, options);
+
+ // Inherit options from the parent if specified by the value `"$inherit"`
+ forEach(options, /* @this */ function(option, key) {
+ if (option === '$inherit') {
+ if (key === '*') {
+ inheritAll = true;
+ } else {
+ options[key] = this.$$options[key];
+ // `updateOn` is special so we must also inherit the `updateOnDefault` option
+ if (key === 'updateOn') {
+ options.updateOnDefault = this.$$options.updateOnDefault;
+ }
+ }
+ } else {
+ if (key === 'updateOn') {
+ // If the `updateOn` property contains the `default` event then we have to remove
+ // it from the event list and set the `updateOnDefault` flag.
+ options.updateOnDefault = false;
+ options[key] = trim(option.replace(DEFAULT_REGEXP, function() {
+ options.updateOnDefault = true;
+ return ' ';
+ }));
+ }
+ }
+ }, this);
+
+ if (inheritAll) {
+ // We have a property of the form: `"*": "$inherit"`
+ delete options['*'];
+ defaults(options, this.$$options);
+ }
+
+ // Finally add in any missing defaults
+ defaults(options, defaultModelOptions.$$options);
+
+ return new ModelOptions(options);
+ }
+};
+
+
+defaultModelOptions = new ModelOptions({
+ updateOn: '',
+ updateOnDefault: true,
+ debounce: 0,
+ getterSetter: false,
+ allowInvalid: false,
+ timezone: null
+});
+
+
+/**
* @ngdoc directive
* @name ngModelOptions
*
* @description
- * Allows tuning how model updates are done. Using `ngModelOptions` you can specify a custom list of
- * events that will trigger a model update and/or a debouncing delay so that the actual update only
- * takes place when a timer expires; this timer will be reset after another change takes place.
+ * This directive allows you to modify the behaviour of {@link ngModel} directives within your
+ * application. You can specify an `ngModelOptions` directive on any element. All {@link ngModel}
+ * directives will use the options of their nearest `ngModelOptions` ancestor.
+ *
+ * The `ngModelOptions` settings are found by evaluating the value of the attribute directive as
+ * an Angular expression. This expression should evaluate to an object, whose properties contain
+ * the settings. For example: `<div "ng-model-options"="{ debounce: 100 }"`.
+ *
+ * ## Inheriting Options
+ *
+ * You can specify that an `ngModelOptions` setting should be inherited from a parent `ngModelOptions`
+ * directive by giving it the value of `"$inherit"`.
+ * Then it will inherit that setting from the first `ngModelOptions` directive found by traversing up the
+ * DOM tree. If there is no ancestor element containing an `ngModelOptions` directive then default settings
+ * will be used.
+ *
+ * For example given the following fragment of HTML
+ *
+ *
+ * ```html
+ * <div ng-model-options="{ allowInvalid: true, debounce: 200 }">
+ * <form ng-model-options="{ updateOn: 'blur', allowInvalid: '$inherit' }">
+ * <input ng-model-options="{ updateOn: 'default', allowInvalid: '$inherit' }" />
+ * </form>
+ * </div>
+ * ```
+ *
+ * the `input` element will have the following settings
+ *
+ * ```js
+ * { allowInvalid: true, updateOn: 'default', debounce: 0 }
+ * ```
+ *
+ * Notice that the `debounce` setting was not inherited and used the default value instead.
+ *
+ * You can specify that all undefined settings are automatically inherited from an ancestor by
+ * including a property with key of `"*"` and value of `"$inherit"`.
+ *
+ * For example given the following fragment of HTML
+ *
+ *
+ * ```html
+ * <div ng-model-options="{ allowInvalid: true, debounce: 200 }">
+ * <form ng-model-options="{ updateOn: 'blur', "*": '$inherit' }">
+ * <input ng-model-options="{ updateOn: 'default', "*": '$inherit' }" />
+ * </form>
+ * </div>
+ * ```
+ *
+ * the `input` element will have the following settings
+ *
+ * ```js
+ * { allowInvalid: true, updateOn: 'default', debounce: 200 }
+ * ```
+ *
+ * Notice that the `debounce` setting now inherits the value from the outer `<div>` element.
+ *
+ * If you are creating a reusable component then you should be careful when using `"*": "$inherit"`
+ * since you may inadvertently inherit a setting in the future that changes the behavior of your component.
+ *
+ *
+ * ## Triggering and debouncing model updates
+ *
+ * The `updateOn` and `debounce` properties allow you to specify a custom list of events that will
+ * trigger a model update and/or a debouncing delay so that the actual update only takes place when
+ * a timer expires; this timer will be reset after another change takes place.
*
* Given the nature of `ngModelOptions`, the value displayed inside input fields in the view might
* be different from the value in the actual model. This means that if you update the model you
- * should also invoke {@link ngModel.NgModelController `$rollbackViewValue`} on the relevant input field in
+ * should also invoke {@link ngModel.NgModelController#$rollbackViewValue} on the relevant input field in
* order to make sure it is synchronized with the model and that any debounced action is canceled.
*
- * The easiest way to reference the control's {@link ngModel.NgModelController `$rollbackViewValue`}
+ * The easiest way to reference the control's {@link ngModel.NgModelController#$rollbackViewValue}
* method is by making sure the input is placed inside a form that has a `name` attribute. This is
* important because `form` controllers are published to the related scope under the name in their
* `name` attribute.
@@ -26254,271 +29718,194 @@ var DEFAULT_REGEXP = /(\s+|^)default(\s+|$)/;
* `submit` event. Note that `ngClick` events will occur before the model is updated. Use `ngSubmit`
* to have access to the updated model.
*
- * `ngModelOptions` has an effect on the element it's declared on and its descendants.
+ * The following example shows how to override immediate updates. Changes on the inputs within the
+ * form will update the model only when the control loses focus (blur event). If `escape` key is
+ * pressed while the input field is focused, the value is reset to the value in the current model.
+ *
+ * <example name="ngModelOptions-directive-blur" module="optionsExample">
+ * <file name="index.html">
+ * <div ng-controller="ExampleController">
+ * <form name="userForm">
+ * <label>
+ * Name:
+ * <input type="text" name="userName"
+ * ng-model="user.name"
+ * ng-model-options="{ updateOn: 'blur' }"
+ * ng-keyup="cancel($event)" />
+ * </label><br />
+ * <label>
+ * Other data:
+ * <input type="text" ng-model="user.data" />
+ * </label><br />
+ * </form>
+ * <pre>user.name = <span ng-bind="user.name"></span></pre>
+ * </div>
+ * </file>
+ * <file name="app.js">
+ * angular.module('optionsExample', [])
+ * .controller('ExampleController', ['$scope', function($scope) {
+ * $scope.user = { name: 'say', data: '' };
+ *
+ * $scope.cancel = function(e) {
+ * if (e.keyCode === 27) {
+ * $scope.userForm.userName.$rollbackViewValue();
+ * }
+ * };
+ * }]);
+ * </file>
+ * <file name="protractor.js" type="protractor">
+ * var model = element(by.binding('user.name'));
+ * var input = element(by.model('user.name'));
+ * var other = element(by.model('user.data'));
+ *
+ * it('should allow custom events', function() {
+ * input.sendKeys(' hello');
+ * input.click();
+ * expect(model.getText()).toEqual('say');
+ * other.click();
+ * expect(model.getText()).toEqual('say hello');
+ * });
+ *
+ * it('should $rollbackViewValue when model changes', function() {
+ * input.sendKeys(' hello');
+ * expect(input.getAttribute('value')).toEqual('say hello');
+ * input.sendKeys(protractor.Key.ESCAPE);
+ * expect(input.getAttribute('value')).toEqual('say');
+ * other.click();
+ * expect(model.getText()).toEqual('say');
+ * });
+ * </file>
+ * </example>
+ *
+ * The next example shows how to debounce model changes. Model will be updated only 1 sec after last change.
+ * If the `Clear` button is pressed, any debounced action is canceled and the value becomes empty.
+ *
+ * <example name="ngModelOptions-directive-debounce" module="optionsExample">
+ * <file name="index.html">
+ * <div ng-controller="ExampleController">
+ * <form name="userForm">
+ * Name:
+ * <input type="text" name="userName"
+ * ng-model="user.name"
+ * ng-model-options="{ debounce: 1000 }" />
+ * <button ng-click="userForm.userName.$rollbackViewValue(); user.name=''">Clear</button><br />
+ * </form>
+ * <pre>user.name = <span ng-bind="user.name"></span></pre>
+ * </div>
+ * </file>
+ * <file name="app.js">
+ * angular.module('optionsExample', [])
+ * .controller('ExampleController', ['$scope', function($scope) {
+ * $scope.user = { name: 'say' };
+ * }]);
+ * </file>
+ * </example>
*
- * @param {Object} ngModelOptions options to apply to the current model. Valid keys are:
+ * ## Model updates and validation
+ *
+ * The default behaviour in `ngModel` is that the model value is set to `undefined` when the
+ * validation determines that the value is invalid. By setting the `allowInvalid` property to true,
+ * the model will still be updated even if the value is invalid.
+ *
+ *
+ * ## Connecting to the scope
+ *
+ * By setting the `getterSetter` property to true you are telling ngModel that the `ngModel` expression
+ * on the scope refers to a "getter/setter" function rather than the value itself.
+ *
+ * The following example shows how to bind to getter/setters:
+ *
+ * <example name="ngModelOptions-directive-getter-setter" module="getterSetterExample">
+ * <file name="index.html">
+ * <div ng-controller="ExampleController">
+ * <form name="userForm">
+ * <label>
+ * Name:
+ * <input type="text" name="userName"
+ * ng-model="user.name"
+ * ng-model-options="{ getterSetter: true }" />
+ * </label>
+ * </form>
+ * <pre>user.name = <span ng-bind="user.name()"></span></pre>
+ * </div>
+ * </file>
+ * <file name="app.js">
+ * angular.module('getterSetterExample', [])
+ * .controller('ExampleController', ['$scope', function($scope) {
+ * var _name = 'Brian';
+ * $scope.user = {
+ * name: function(newName) {
+ * return angular.isDefined(newName) ? (_name = newName) : _name;
+ * }
+ * };
+ * }]);
+ * </file>
+ * </example>
+ *
+ *
+ * ## Specifying timezones
+ *
+ * You can specify the timezone that date/time input directives expect by providing its name in the
+ * `timezone` property.
+ *
+ * @param {Object} ngModelOptions options to apply to {@link ngModel} directives on this element and
+ * and its descendents. Valid keys are:
* - `updateOn`: string specifying which event should the input be bound to. You can set several
* events using an space delimited list. There is a special event called `default` that
- * matches the default events belonging of the control.
+ * matches the default events belonging to the control.
* - `debounce`: integer value which contains the debounce model update value in milliseconds. A
* value of 0 triggers an immediate update. If an object is supplied instead, you can specify a
* custom value for each event. For example:
- * `ng-model-options="{ updateOn: 'default blur', debounce: { 'default': 500, 'blur': 0 } }"`
+ * ```
+ * ng-model-options="{
+ * updateOn: 'default blur',
+ * debounce: { 'default': 500, 'blur': 0 }
+ * }"
+ * ```
* - `allowInvalid`: boolean value which indicates that the model can be set with values that did
* not validate correctly instead of the default behavior of setting the model to undefined.
* - `getterSetter`: boolean value which determines whether or not to treat functions bound to
- `ngModel` as getters/setters.
+ * `ngModel` as getters/setters.
* - `timezone`: Defines the timezone to be used to read/write the `Date` instance in the model for
- * `<input type="date">`, `<input type="time">`, ... . It understands UTC/GMT and the
+ * `<input type="date" />`, `<input type="time" />`, ... . It understands UTC/GMT and the
* continental US time zone abbreviations, but for general use, use a time zone offset, for
* example, `'+0430'` (4 hours, 30 minutes east of the Greenwich meridian)
* If not specified, the timezone of the browser will be used.
*
- * @example
-
- The following example shows how to override immediate updates. Changes on the inputs within the
- form will update the model only when the control loses focus (blur event). If `escape` key is
- pressed while the input field is focused, the value is reset to the value in the current model.
-
- <example name="ngModelOptions-directive-blur" module="optionsExample">
- <file name="index.html">
- <div ng-controller="ExampleController">
- <form name="userForm">
- <label>Name:
- <input type="text" name="userName"
- ng-model="user.name"
- ng-model-options="{ updateOn: 'blur' }"
- ng-keyup="cancel($event)" />
- </label><br />
- <label>Other data:
- <input type="text" ng-model="user.data" />
- </label><br />
- </form>
- <pre>user.name = <span ng-bind="user.name"></span></pre>
- <pre>user.data = <span ng-bind="user.data"></span></pre>
- </div>
- </file>
- <file name="app.js">
- angular.module('optionsExample', [])
- .controller('ExampleController', ['$scope', function($scope) {
- $scope.user = { name: 'John', data: '' };
-
- $scope.cancel = function(e) {
- if (e.keyCode == 27) {
- $scope.userForm.userName.$rollbackViewValue();
- }
- };
- }]);
- </file>
- <file name="protractor.js" type="protractor">
- var model = element(by.binding('user.name'));
- var input = element(by.model('user.name'));
- var other = element(by.model('user.data'));
-
- it('should allow custom events', function() {
- input.sendKeys(' Doe');
- input.click();
- expect(model.getText()).toEqual('John');
- other.click();
- expect(model.getText()).toEqual('John Doe');
- });
-
- it('should $rollbackViewValue when model changes', function() {
- input.sendKeys(' Doe');
- expect(input.getAttribute('value')).toEqual('John Doe');
- input.sendKeys(protractor.Key.ESCAPE);
- expect(input.getAttribute('value')).toEqual('John');
- other.click();
- expect(model.getText()).toEqual('John');
- });
- </file>
- </example>
-
- This one shows how to debounce model changes. Model will be updated only 1 sec after last change.
- If the `Clear` button is pressed, any debounced action is canceled and the value becomes empty.
-
- <example name="ngModelOptions-directive-debounce" module="optionsExample">
- <file name="index.html">
- <div ng-controller="ExampleController">
- <form name="userForm">
- <label>Name:
- <input type="text" name="userName"
- ng-model="user.name"
- ng-model-options="{ debounce: 1000 }" />
- </label>
- <button ng-click="userForm.userName.$rollbackViewValue(); user.name=''">Clear</button>
- <br />
- </form>
- <pre>user.name = <span ng-bind="user.name"></span></pre>
- </div>
- </file>
- <file name="app.js">
- angular.module('optionsExample', [])
- .controller('ExampleController', ['$scope', function($scope) {
- $scope.user = { name: 'Igor' };
- }]);
- </file>
- </example>
-
- This one shows how to bind to getter/setters:
-
- <example name="ngModelOptions-directive-getter-setter" module="getterSetterExample">
- <file name="index.html">
- <div ng-controller="ExampleController">
- <form name="userForm">
- <label>Name:
- <input type="text" name="userName"
- ng-model="user.name"
- ng-model-options="{ getterSetter: true }" />
- </label>
- </form>
- <pre>user.name = <span ng-bind="user.name()"></span></pre>
- </div>
- </file>
- <file name="app.js">
- angular.module('getterSetterExample', [])
- .controller('ExampleController', ['$scope', function($scope) {
- var _name = 'Brian';
- $scope.user = {
- name: function(newName) {
- // Note that newName can be undefined for two reasons:
- // 1. Because it is called as a getter and thus called with no arguments
- // 2. Because the property should actually be set to undefined. This happens e.g. if the
- // input is invalid
- return arguments.length ? (_name = newName) : _name;
- }
- };
- }]);
- </file>
- </example>
*/
var ngModelOptionsDirective = function() {
- return {
- restrict: 'A',
- controller: ['$scope', '$attrs', function($scope, $attrs) {
- var that = this;
- this.$options = copy($scope.$eval($attrs.ngModelOptions));
- // Allow adding/overriding bound events
- if (isDefined(this.$options.updateOn)) {
- this.$options.updateOnDefault = false;
- // extract "default" pseudo-event from list of events that can trigger a model update
- this.$options.updateOn = trim(this.$options.updateOn.replace(DEFAULT_REGEXP, function() {
- that.$options.updateOnDefault = true;
- return ' ';
- }));
- } else {
- this.$options.updateOnDefault = true;
- }
- }]
- };
-};
-
-
-
-// helper methods
-function addSetValidityMethod(context) {
- var ctrl = context.ctrl,
- $element = context.$element,
- classCache = {},
- set = context.set,
- unset = context.unset,
- $animate = context.$animate;
-
- classCache[INVALID_CLASS] = !(classCache[VALID_CLASS] = $element.hasClass(VALID_CLASS));
-
- ctrl.$setValidity = setValidity;
-
- function setValidity(validationErrorKey, state, controller) {
- if (isUndefined(state)) {
- createAndSet('$pending', validationErrorKey, controller);
- } else {
- unsetAndCleanup('$pending', validationErrorKey, controller);
- }
- if (!isBoolean(state)) {
- unset(ctrl.$error, validationErrorKey, controller);
- unset(ctrl.$$success, validationErrorKey, controller);
- } else {
- if (state) {
- unset(ctrl.$error, validationErrorKey, controller);
- set(ctrl.$$success, validationErrorKey, controller);
- } else {
- set(ctrl.$error, validationErrorKey, controller);
- unset(ctrl.$$success, validationErrorKey, controller);
- }
- }
- if (ctrl.$pending) {
- cachedToggleClass(PENDING_CLASS, true);
- ctrl.$valid = ctrl.$invalid = undefined;
- toggleValidationCss('', null);
- } else {
- cachedToggleClass(PENDING_CLASS, false);
- ctrl.$valid = isObjectEmpty(ctrl.$error);
- ctrl.$invalid = !ctrl.$valid;
- toggleValidationCss('', ctrl.$valid);
- }
-
- // re-read the state as the set/unset methods could have
- // combined state in ctrl.$error[validationError] (used for forms),
- // where setting/unsetting only increments/decrements the value,
- // and does not replace it.
- var combinedState;
- if (ctrl.$pending && ctrl.$pending[validationErrorKey]) {
- combinedState = undefined;
- } else if (ctrl.$error[validationErrorKey]) {
- combinedState = false;
- } else if (ctrl.$$success[validationErrorKey]) {
- combinedState = true;
- } else {
- combinedState = null;
- }
-
- toggleValidationCss(validationErrorKey, combinedState);
- ctrl.$$parentForm.$setValidity(validationErrorKey, combinedState, ctrl);
- }
-
- function createAndSet(name, value, controller) {
- if (!ctrl[name]) {
- ctrl[name] = {};
- }
- set(ctrl[name], value, controller);
- }
-
- function unsetAndCleanup(name, value, controller) {
- if (ctrl[name]) {
- unset(ctrl[name], value, controller);
- }
- if (isObjectEmpty(ctrl[name])) {
- ctrl[name] = undefined;
- }
+ NgModelOptionsController.$inject = ['$attrs', '$scope'];
+ function NgModelOptionsController($attrs, $scope) {
+ this.$$attrs = $attrs;
+ this.$$scope = $scope;
}
+ NgModelOptionsController.prototype = {
+ $onInit: function() {
+ var parentOptions = this.parentCtrl ? this.parentCtrl.$options : defaultModelOptions;
+ var modelOptionsDefinition = this.$$scope.$eval(this.$$attrs.ngModelOptions);
- function cachedToggleClass(className, switchValue) {
- if (switchValue && !classCache[className]) {
- $animate.addClass($element, className);
- classCache[className] = true;
- } else if (!switchValue && classCache[className]) {
- $animate.removeClass($element, className);
- classCache[className] = false;
+ this.$options = parentOptions.createChild(modelOptionsDefinition);
}
- }
+ };
- function toggleValidationCss(validationErrorKey, isValid) {
- validationErrorKey = validationErrorKey ? '-' + snake_case(validationErrorKey, '-') : '';
+ return {
+ restrict: 'A',
+ // ngModelOptions needs to run before ngModel and input directives
+ priority: 10,
+ require: {parentCtrl: '?^^ngModelOptions'},
+ bindToController: true,
+ controller: NgModelOptionsController
+ };
+};
- cachedToggleClass(VALID_CLASS + validationErrorKey, isValid === true);
- cachedToggleClass(INVALID_CLASS + validationErrorKey, isValid === false);
- }
-}
-function isObjectEmpty(obj) {
- if (obj) {
- for (var prop in obj) {
- if (obj.hasOwnProperty(prop)) {
- return false;
- }
+// shallow copy over values from `src` that are not already specified on `dst`
+function defaults(dst, src) {
+ forEach(src, function(value, key) {
+ if (!isDefined(dst[key])) {
+ dst[key] = value;
}
- }
- return true;
+ });
}
/**
@@ -26540,7 +29927,7 @@ function isObjectEmpty(obj) {
* but the one wrapped in `ngNonBindable` is left alone.
*
* @example
- <example>
+ <example name="ng-non-bindable">
<file name="index.html">
<div>Normal: {{1 + 2}}</div>
<div ng-non-bindable>Ignored: {{1 + 2}}</div>
@@ -26555,6 +29942,8 @@ function isObjectEmpty(obj) {
*/
var ngNonBindableDirective = ngDirective({ terminal: true, priority: 1000 });
+/* exported ngOptionsDirective */
+
/* global jqLiteRemove */
var ngOptionsMinErr = minErr('ngOptions');
@@ -26570,13 +29959,12 @@ var ngOptionsMinErr = minErr('ngOptions');
* elements for the `<select>` element using the array or object obtained by evaluating the
* `ngOptions` comprehension expression.
*
- * In many cases, `ngRepeat` can be used on `<option>` elements instead of `ngOptions` to achieve a
- * similar result. However, `ngOptions` provides some benefits such as reducing memory and
- * increasing speed by not creating a new scope for each repeated instance, as well as providing
- * more flexibility in how the `<select>`'s model is assigned via the `select` **`as`** part of the
- * comprehension expression. `ngOptions` should be used when the `<select>` model needs to be bound
- * to a non-string value. This is because an option element can only be bound to string values at
- * present.
+ * In many cases, {@link ng.directive:ngRepeat ngRepeat} can be used on `<option>` elements instead of
+ * `ngOptions` to achieve a similar result. However, `ngOptions` provides some benefits:
+ * - more flexibility in how the `<select>`'s model is assigned via the `select` **`as`** part of the
+ * comprehension expression
+ * - reduced memory consumption by not creating a new scope for each repeated instance
+ * - increased render speed by creating the options in a documentFragment instead of individually
*
* When an item in the `<select>` menu is selected, the array element or object property
* represented by the selected option will be bound to the model identified by the `ngModel`
@@ -26665,13 +30053,8 @@ var ngOptionsMinErr = minErr('ngOptions');
* is not matched against any `<option>` and the `<select>` appears as having no selected value.
*
*
- * @param {string} ngModel Assignable angular expression to data-bind to.
- * @param {string=} name Property name of the form under which the control is published.
- * @param {string=} required The control is considered valid only if value is entered.
- * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to
- * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
- * `required` when you want to data-bind to the `required` attribute.
- * @param {comprehension_expression=} ngOptions in one of the following forms:
+ * @param {string} ngModel Assignable AngularJS expression to data-bind to.
+ * @param {comprehension_expression} ngOptions in one of the following forms:
*
* * for array data sources:
* * `label` **`for`** `value` **`in`** `array`
@@ -26710,9 +30093,16 @@ var ngOptionsMinErr = minErr('ngOptions');
* used to identify the objects in the array. The `trackexpr` will most likely refer to the
* `value` variable (e.g. `value.propertyName`). With this the selection is preserved
* even when the options are recreated (e.g. reloaded from the server).
+ * @param {string=} name Property name of the form under which the control is published.
+ * @param {string=} required The control is considered valid only if value is entered.
+ * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to
+ * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
+ * `required` when you want to data-bind to the `required` attribute.
+ * @param {string=} ngAttrSize sets the size of the select element dynamically. Uses the
+ * {@link guide/interpolation#-ngattr-for-binding-to-arbitrary-attributes ngAttr} directive.
*
* @example
- <example module="selectExample">
+ <example module="selectExample" name="select">
<file name="index.html">
<script>
angular.module('selectExample', [])
@@ -26785,9 +30175,9 @@ var ngOptionsMinErr = minErr('ngOptions');
</example>
*/
-// jshint maxlen: false
-// //00001111111111000000000002222222222000000000000000000000333333333300000000000000000000000004444444444400000000000005555555555555550000000006666666666666660000000777777777777777000000000000000888888888800000000000000000009999999999
-var NG_OPTIONS_REGEXP = /^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+group\s+by\s+([\s\S]+?))?(?:\s+disable\s+when\s+([\s\S]+?))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?$/;
+/* eslint-disable max-len */
+// //00001111111111000000000002222222222000000000000000000000333333333300000000000000000000000004444444444400000000000005555555555555000000000666666666666600000007777777777777000000000000000888888888800000000000000000009999999999
+var NG_OPTIONS_REGEXP = /^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+group\s+by\s+([\s\S]+?))?(?:\s+disable\s+when\s+([\s\S]+?))?\s+for\s+(?:([$\w][$\w]*)|(?:\(\s*([$\w][$\w]*)\s*,\s*([$\w][$\w]*)\s*\)))\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?$/;
// 1: value expression (valueFn)
// 2: label expression (displayFn)
// 3: group by expression (groupByFn)
@@ -26797,19 +30187,19 @@ var NG_OPTIONS_REGEXP = /^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+group\s+by\s
// 7: object item value variable name
// 8: collection expression
// 9: track by expression
-// jshint maxlen: 100
+/* eslint-enable */
-var ngOptionsDirective = ['$compile', '$parse', function($compile, $parse) {
+var ngOptionsDirective = ['$compile', '$document', '$parse', function($compile, $document, $parse) {
function parseOptionsExpression(optionsExp, selectElement, scope) {
var match = optionsExp.match(NG_OPTIONS_REGEXP);
if (!(match)) {
throw ngOptionsMinErr('iexp',
- "Expected expression in form of " +
- "'_select_ (as _label_)? for (_key_,)?_value_ in _collection_'" +
- " but got '{0}'. Element: {1}",
+ 'Expected expression in form of ' +
+ '\'_select_ (as _label_)? for (_key_,)?_value_ in _collection_\'' +
+ ' but got \'{0}\'. Element: {1}',
optionsExp, startingTag(selectElement));
}
@@ -26897,8 +30287,8 @@ var ngOptionsDirective = ['$compile', '$parse', function($compile, $parse) {
var key = (optionValues === optionValuesKeys) ? index : optionValuesKeys[index];
var value = optionValues[key];
- var locals = getLocals(optionValues[key], key);
- var selectValue = getTrackByValueFn(optionValues[key], locals);
+ var locals = getLocals(value, key);
+ var selectValue = getTrackByValueFn(value, locals);
watchedArray.push(selectValue);
// Only need to watch the displayFn if there is a specific label expression
@@ -26951,7 +30341,7 @@ var ngOptionsDirective = ['$compile', '$parse', function($compile, $parse) {
getViewValueFromOption: function(option) {
// If the viewValue could be an object that may be mutated by the application,
// we need to make a copy and not return the reference to the value on the option.
- return trackBy ? angular.copy(option.viewValue) : option.viewValue;
+ return trackBy ? copy(option.viewValue) : option.viewValue;
}
};
}
@@ -26959,82 +30349,70 @@ var ngOptionsDirective = ['$compile', '$parse', function($compile, $parse) {
}
- // we can't just jqLite('<option>') since jqLite is not smart enough
+ // Support: IE 9 only
+ // We can't just jqLite('<option>') since jqLite is not smart enough
// to create it in <select> and IE barfs otherwise.
- var optionTemplate = document.createElement('option'),
- optGroupTemplate = document.createElement('optgroup');
-
+ var optionTemplate = window.document.createElement('option'),
+ optGroupTemplate = window.document.createElement('optgroup');
function ngOptionsPostLink(scope, selectElement, attr, ctrls) {
- // if ngModel is not defined, we don't need to do anything
- var ngModelCtrl = ctrls[1];
- if (!ngModelCtrl) return;
-
var selectCtrl = ctrls[0];
+ var ngModelCtrl = ctrls[1];
var multiple = attr.multiple;
// The emptyOption allows the application developer to provide their own custom "empty"
// option when the viewValue does not match any of the option values.
- var emptyOption;
for (var i = 0, children = selectElement.children(), ii = children.length; i < ii; i++) {
if (children[i].value === '') {
- emptyOption = children.eq(i);
+ selectCtrl.hasEmptyOption = true;
+ selectCtrl.emptyOption = children.eq(i);
break;
}
}
- var providedEmptyOption = !!emptyOption;
+ // The empty option will be compiled and rendered before we first generate the options
+ selectElement.empty();
+
+ var providedEmptyOption = !!selectCtrl.emptyOption;
var unknownOption = jqLite(optionTemplate.cloneNode(false));
unknownOption.val('?');
var options;
var ngOptions = parseOptionsExpression(attr.ngOptions, selectElement, scope);
-
-
- var renderEmptyOption = function() {
- if (!providedEmptyOption) {
- selectElement.prepend(emptyOption);
- }
- selectElement.val('');
- emptyOption.prop('selected', true); // needed for IE
- emptyOption.attr('selected', true);
- };
-
- var removeEmptyOption = function() {
- if (!providedEmptyOption) {
- emptyOption.remove();
- }
- };
-
-
- var renderUnknownOption = function() {
- selectElement.prepend(unknownOption);
- selectElement.val('?');
- unknownOption.prop('selected', true); // needed for IE
- unknownOption.attr('selected', true);
- };
-
- var removeUnknownOption = function() {
- unknownOption.remove();
+ // This stores the newly created options before they are appended to the select.
+ // Since the contents are removed from the fragment when it is appended,
+ // we only need to create it once.
+ var listFragment = $document[0].createDocumentFragment();
+
+ // Overwrite the implementation. ngOptions doesn't use hashes
+ selectCtrl.generateUnknownOptionValue = function(val) {
+ return '?';
};
// Update the controller methods for multiple selectable options
if (!multiple) {
selectCtrl.writeValue = function writeNgOptionsValue(value) {
+ // The options might not be defined yet when ngModel tries to render
+ if (!options) return;
+
+ var selectedOption = selectElement[0].options[selectElement[0].selectedIndex];
var option = options.getOptionFromViewValue(value);
- if (option && !option.disabled) {
+ // Make sure to remove the selected attribute from the previously selected option
+ // Otherwise, screen readers might get confused
+ if (selectedOption) selectedOption.removeAttribute('selected');
+
+ if (option) {
// Don't update the option when it is already selected.
// For example, the browser will select the first option by default. In that case,
// most properties are set automatically - except the `selected` attribute, which we
// set always
if (selectElement[0].value !== option.selectValue) {
- removeUnknownOption();
- removeEmptyOption();
+ selectCtrl.removeUnknownOption();
selectElement[0].value = option.selectValue;
option.element.selected = true;
@@ -27042,13 +30420,7 @@ var ngOptionsDirective = ['$compile', '$parse', function($compile, $parse) {
option.element.setAttribute('selected', 'selected');
} else {
- if (value === null || providedEmptyOption) {
- removeUnknownOption();
- renderEmptyOption();
- } else {
- removeEmptyOption();
- renderUnknownOption();
- }
+ selectCtrl.selectUnknownOrEmptyOption(value);
}
};
@@ -27057,8 +30429,8 @@ var ngOptionsDirective = ['$compile', '$parse', function($compile, $parse) {
var selectedOption = options.selectValueMap[selectElement.val()];
if (selectedOption && !selectedOption.disabled) {
- removeEmptyOption();
- removeUnknownOption();
+ selectCtrl.unselectEmptyOption();
+ selectCtrl.removeUnknownOption();
return options.getViewValueFromOption(selectedOption);
}
return null;
@@ -27066,6 +30438,7 @@ var ngOptionsDirective = ['$compile', '$parse', function($compile, $parse) {
// If we are using `track by` then we must watch the tracked value on the model
// since ngModel only watches for object identity change
+ // FIXME: When a user selects an option, this watch will fire needlessly
if (ngOptions.trackBy) {
scope.$watch(
function() { return ngOptions.getTrackByValue(ngModelCtrl.$viewValue); },
@@ -27075,22 +30448,19 @@ var ngOptionsDirective = ['$compile', '$parse', function($compile, $parse) {
} else {
- ngModelCtrl.$isEmpty = function(value) {
- return !value || value.length === 0;
- };
+ selectCtrl.writeValue = function writeNgOptionsMultiple(values) {
+ // The options might not be defined yet when ngModel tries to render
+ if (!options) return;
+ // Only set `<option>.selected` if necessary, in order to prevent some browsers from
+ // scrolling to `<option>` elements that are outside the `<select>` element's viewport.
+ var selectedOptions = values && values.map(getAndUpdateSelectedOption) || [];
- selectCtrl.writeValue = function writeNgOptionsMultiple(value) {
options.items.forEach(function(option) {
- option.element.selected = false;
+ if (option.element.selected && !includes(selectedOptions, option)) {
+ option.element.selected = false;
+ }
});
-
- if (value) {
- value.forEach(function(item) {
- var option = options.getOptionFromViewValue(item);
- if (option && !option.disabled) option.element.selected = true;
- });
- }
};
@@ -27123,37 +30493,73 @@ var ngOptionsDirective = ['$compile', '$parse', function($compile, $parse) {
}
}
-
if (providedEmptyOption) {
- // we need to remove it before calling selectElement.empty() because otherwise IE will
- // remove the label from the element. wtf?
- emptyOption.remove();
-
// compile the element since there might be bindings in it
- $compile(emptyOption)(scope);
+ $compile(selectCtrl.emptyOption)(scope);
- // remove the class, which is added automatically because we recompile the element and it
- // becomes the compilation root
- emptyOption.removeClass('ng-scope');
- } else {
- emptyOption = jqLite(optionTemplate.cloneNode(false));
- }
+ selectElement.prepend(selectCtrl.emptyOption);
+
+ if (selectCtrl.emptyOption[0].nodeType === NODE_TYPE_COMMENT) {
+ // This means the empty option has currently no actual DOM node, probably because
+ // it has been modified by a transclusion directive.
+ selectCtrl.hasEmptyOption = false;
+
+ // Redefine the registerOption function, which will catch
+ // options that are added by ngIf etc. (rendering of the node is async because of
+ // lazy transclusion)
+ selectCtrl.registerOption = function(optionScope, optionEl) {
+ if (optionEl.val() === '') {
+ selectCtrl.hasEmptyOption = true;
+ selectCtrl.emptyOption = optionEl;
+ selectCtrl.emptyOption.removeClass('ng-scope');
+ // This ensures the new empty option is selected if previously no option was selected
+ ngModelCtrl.$render();
- // We need to do this here to ensure that the options object is defined
- // when we first hit it in writeNgOptionsValue
- updateOptions();
+ optionEl.on('$destroy', function() {
+ var needsRerender = selectCtrl.$isEmptyOptionSelected();
+
+ selectCtrl.hasEmptyOption = false;
+ selectCtrl.emptyOption = undefined;
+
+ if (needsRerender) ngModelCtrl.$render();
+ });
+ }
+ };
+
+ } else {
+ // remove the class, which is added automatically because we recompile the element and it
+ // becomes the compilation root
+ selectCtrl.emptyOption.removeClass('ng-scope');
+ }
+
+ }
// We will re-render the option elements if the option values or labels change
scope.$watchCollection(ngOptions.getWatchables, updateOptions);
// ------------------------------------------------------------------ //
+ function addOptionElement(option, parent) {
+ var optionElement = optionTemplate.cloneNode(false);
+ parent.appendChild(optionElement);
+ updateOptionElement(option, optionElement);
+ }
+
+ function getAndUpdateSelectedOption(viewValue) {
+ var option = options.getOptionFromViewValue(viewValue);
+ var element = option && option.element;
+
+ if (element && !element.selected) element.selected = true;
+
+ return option;
+ }
function updateOptionElement(option, element) {
option.element = element;
element.disabled = option.disabled;
- // NOTE: The label must be set before the value, otherwise IE10/11/EDGE create unresponsive
+ // Support: IE 11 only, Edge 12-13 only
+ // NOTE: The label must be set before the value, otherwise IE 11 & Edge create unresponsive
// selects in certain circumstances when multiple selects are next to each other and display
// the option list in listbox style, i.e. the select is [multiple], or specifies a [size].
// See https://github.com/angular/angular.js/issues/11314 for more info.
@@ -27162,136 +30568,65 @@ var ngOptionsDirective = ['$compile', '$parse', function($compile, $parse) {
element.label = option.label;
element.textContent = option.label;
}
- if (option.value !== element.value) element.value = option.selectValue;
- }
-
- function addOrReuseElement(parent, current, type, templateElement) {
- var element;
- // Check whether we can reuse the next element
- if (current && lowercase(current.nodeName) === type) {
- // The next element is the right type so reuse it
- element = current;
- } else {
- // The next element is not the right type so create a new one
- element = templateElement.cloneNode(false);
- if (!current) {
- // There are no more elements so just append it to the select
- parent.appendChild(element);
- } else {
- // The next element is not a group so insert the new one
- parent.insertBefore(element, current);
- }
- }
- return element;
- }
-
-
- function removeExcessElements(current) {
- var next;
- while (current) {
- next = current.nextSibling;
- jqLiteRemove(current);
- current = next;
- }
+ element.value = option.selectValue;
}
+ function updateOptions() {
+ var previousValue = options && selectCtrl.readValue();
- function skipEmptyAndUnknownOptions(current) {
- var emptyOption_ = emptyOption && emptyOption[0];
- var unknownOption_ = unknownOption && unknownOption[0];
-
- // We cannot rely on the extracted empty option being the same as the compiled empty option,
- // because the compiled empty option might have been replaced by a comment because
- // it had an "element" transclusion directive on it (such as ngIf)
- if (emptyOption_ || unknownOption_) {
- while (current &&
- (current === emptyOption_ ||
- current === unknownOption_ ||
- current.nodeType === NODE_TYPE_COMMENT ||
- (nodeName_(current) === 'option' && current.value === ''))) {
- current = current.nextSibling;
+ // We must remove all current options, but cannot simply set innerHTML = null
+ // since the providedEmptyOption might have an ngIf on it that inserts comments which we
+ // must preserve.
+ // Instead, iterate over the current option elements and remove them or their optgroup
+ // parents
+ if (options) {
+
+ for (var i = options.items.length - 1; i >= 0; i--) {
+ var option = options.items[i];
+ if (isDefined(option.group)) {
+ jqLiteRemove(option.element.parentNode);
+ } else {
+ jqLiteRemove(option.element);
+ }
}
}
- return current;
- }
-
-
- function updateOptions() {
-
- var previousValue = options && selectCtrl.readValue();
options = ngOptions.getOptions();
- var groupMap = {};
- var currentElement = selectElement[0].firstChild;
-
- // Ensure that the empty option is always there if it was explicitly provided
- if (providedEmptyOption) {
- selectElement.prepend(emptyOption);
- }
-
- currentElement = skipEmptyAndUnknownOptions(currentElement);
+ var groupElementMap = {};
- options.items.forEach(function updateOption(option) {
- var group;
+ options.items.forEach(function addOption(option) {
var groupElement;
- var optionElement;
- if (option.group) {
+ if (isDefined(option.group)) {
// This option is to live in a group
// See if we have already created this group
- group = groupMap[option.group];
+ groupElement = groupElementMap[option.group];
- if (!group) {
+ if (!groupElement) {
- // We have not already created this group
- groupElement = addOrReuseElement(selectElement[0],
- currentElement,
- 'optgroup',
- optGroupTemplate);
- // Move to the next element
- currentElement = groupElement.nextSibling;
+ groupElement = optGroupTemplate.cloneNode(false);
+ listFragment.appendChild(groupElement);
// Update the label on the group element
- groupElement.label = option.group;
+ // "null" is special cased because of Safari
+ groupElement.label = option.group === null ? 'null' : option.group;
// Store it for use later
- group = groupMap[option.group] = {
- groupElement: groupElement,
- currentOptionElement: groupElement.firstChild
- };
-
+ groupElementMap[option.group] = groupElement;
}
- // So now we have a group for this option we add the option to the group
- optionElement = addOrReuseElement(group.groupElement,
- group.currentOptionElement,
- 'option',
- optionTemplate);
- updateOptionElement(option, optionElement);
- // Move to the next element
- group.currentOptionElement = optionElement.nextSibling;
+ addOptionElement(option, groupElement);
} else {
// This option is not in a group
- optionElement = addOrReuseElement(selectElement[0],
- currentElement,
- 'option',
- optionTemplate);
- updateOptionElement(option, optionElement);
- // Move to the next element
- currentElement = optionElement.nextSibling;
+ addOptionElement(option, listFragment);
}
});
-
- // Now remove all excess options and group
- Object.keys(groupMap).forEach(function(key) {
- removeExcessElements(groupMap[key].currentOptionElement);
- });
- removeExcessElements(currentElement);
+ selectElement[0].appendChild(listFragment);
ngModelCtrl.$render();
@@ -27304,14 +30639,13 @@ var ngOptionsDirective = ['$compile', '$parse', function($compile, $parse) {
ngModelCtrl.$render();
}
}
-
}
}
return {
restrict: 'A',
terminal: true,
- require: ['select', '?ngModel'],
+ require: ['select', 'ngModel'],
link: {
pre: function ngOptionsPreLink(scope, selectElement, attr, ctrls) {
// Deactivate the SelectController.register method to prevent
@@ -27416,7 +30750,7 @@ var ngOptionsDirective = ['$compile', '$parse', function($compile, $parse) {
* @param {number=} offset Offset to deduct from the total number.
*
* @example
- <example module="pluralizeExample">
+ <example module="pluralizeExample" name="ng-pluralize">
<file name="index.html">
<script>
angular.module('pluralizeExample', [])
@@ -27530,7 +30864,7 @@ var ngPluralizeDirective = ['$locale', '$interpolate', '$log', function($locale,
scope.$watch(numberExp, function ngPluralizeWatchAction(newVal) {
var count = parseFloat(newVal);
- var countIsNaN = isNaN(count);
+ var countIsNaN = isNumberNaN(count);
if (!countIsNaN && !(count in whens)) {
// If an explicit number rule such as 1, 2, 3... is defined, just use it.
@@ -27539,13 +30873,13 @@ var ngPluralizeDirective = ['$locale', '$interpolate', '$log', function($locale,
}
// If both `count` and `lastCount` are NaN, we don't need to re-register a watch.
- // In JS `NaN !== NaN`, so we have to exlicitly check.
- if ((count !== lastCount) && !(countIsNaN && isNumber(lastCount) && isNaN(lastCount))) {
+ // In JS `NaN !== NaN`, so we have to explicitly check.
+ if ((count !== lastCount) && !(countIsNaN && isNumberNaN(lastCount))) {
watchRemover();
var whenExpFn = whensExpFns[count];
if (isUndefined(whenExpFn)) {
if (newVal != null) {
- $log.debug("ngPluralize: no rule defined for '" + count + "' in " + whenExp);
+ $log.debug('ngPluralize: no rule defined for \'' + count + '\' in ' + whenExp);
}
watchRemover = noop;
updateElementText();
@@ -27563,10 +30897,13 @@ var ngPluralizeDirective = ['$locale', '$interpolate', '$log', function($locale,
};
}];
+/* exported ngRepeatDirective */
+
/**
* @ngdoc directive
* @name ngRepeat
* @multiElement
+ * @restrict A
*
* @description
* The `ngRepeat` directive instantiates a template once per item from a collection. Each template
@@ -27599,17 +30936,23 @@ var ngPluralizeDirective = ['$locale', '$interpolate', '$log', function($locale,
* <div ng-repeat="(key, value) in myObj"> ... </div>
* ```
*
- * You need to be aware that the JavaScript specification does not define the order of keys
- * returned for an object. (To mitigate this in Angular 1.3 the `ngRepeat` directive
- * used to sort the keys alphabetically.)
+ * However, there are a few limitations compared to array iteration:
+ *
+ * - The JavaScript specification does not define the order of keys
+ * returned for an object, so Angular relies on the order returned by the browser
+ * when running `for key in myObj`. Browsers generally follow the strategy of providing
+ * keys in the order in which they were defined, although there are exceptions when keys are deleted
+ * and reinstated. See the
+ * [MDN page on `delete` for more info](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/delete#Cross-browser_notes).
+ *
+ * - `ngRepeat` will silently *ignore* object keys starting with `$`, because
+ * it's a prefix used by Angular for public (`$`) and private (`$$`) properties.
*
- * Version 1.4 removed the alphabetic sorting. We now rely on the order returned by the browser
- * when running `for key in myObj`. It seems that browsers generally follow the strategy of providing
- * keys in the order in which they were defined, although there are exceptions when keys are deleted
- * and reinstated. See the [MDN page on `delete` for more info](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/delete#Cross-browser_notes).
+ * - The built-in filters {@link ng.orderBy orderBy} and {@link ng.filter filter} do not work with
+ * objects, and will throw an error if used with one.
*
- * If this is not desired, the recommended workaround is to convert your object into an array
- * that is sorted into the order that you prefer before providing it to `ngRepeat`. You could
+ * If you are hitting any of these limitations, the recommended workaround is to convert your object into an array
+ * that is sorted into the order that you prefer before providing it to `ngRepeat`. You could
* do this with a filter such as [toArrayFilter](http://ngmodules.org/modules/angular-toArrayFilter)
* or implement a `$watch` on the object yourself.
*
@@ -27617,7 +30960,7 @@ var ngPluralizeDirective = ['$locale', '$interpolate', '$log', function($locale,
* # Tracking and Duplicates
*
* `ngRepeat` uses {@link $rootScope.Scope#$watchCollection $watchCollection} to detect changes in
- * the collection. When a change happens, ngRepeat then makes the corresponding changes to the DOM:
+ * the collection. When a change happens, `ngRepeat` then makes the corresponding changes to the DOM:
*
* * When an item is added, a new instance of the template is added to the DOM.
* * When an item is removed, its template instance is removed from the DOM.
@@ -27625,7 +30968,7 @@ var ngPluralizeDirective = ['$locale', '$interpolate', '$log', function($locale,
*
* To minimize creation of DOM elements, `ngRepeat` uses a function
* to "keep track" of all items in the collection and their corresponding DOM elements.
- * For example, if an item is added to the collection, ngRepeat will know that all other items
+ * For example, if an item is added to the collection, `ngRepeat` will know that all other items
* already have DOM elements, and will not re-render them.
*
* The default tracking function (which tracks items by their identity) does not allow
@@ -27652,19 +30995,29 @@ var ngPluralizeDirective = ['$locale', '$interpolate', '$log', function($locale,
* ```
*
* <div class="alert alert-success">
- * If you are working with objects that have an identifier property, you should track
- * by the identifier instead of the whole object. Should you reload your data later, `ngRepeat`
+ * If you are working with objects that have a unique identifier property, you should track
+ * by this identifier instead of the object instance. Should you reload your data later, `ngRepeat`
* will not have to rebuild the DOM elements for items it has already rendered, even if the
* JavaScript objects in the collection have been substituted for new ones. For large collections,
- * this signifincantly improves rendering performance. If you don't have a unique identifier,
+ * this significantly improves rendering performance. If you don't have a unique identifier,
* `track by $index` can also provide a performance boost.
* </div>
+ *
* ```html
* <div ng-repeat="model in collection track by model.id">
* {{model.name}}
* </div>
* ```
*
+ * <br />
+ * <div class="alert alert-warning">
+ * Avoid using `track by $index` when the repeated template contains
+ * {@link guide/expression#one-time-binding one-time bindings}. In such cases, the `nth` DOM
+ * element will always be matched with the `nth` item of the array, so the bindings on that element
+ * will not be updated even when the corresponding item changes, essentially causing the view to get
+ * out-of-sync with the underlying data.
+ * </div>
+ *
* When no `track by` expression is provided, it is equivalent to tracking by the built-in
* `$id` function, which tracks items by their identity:
* ```html
@@ -27673,15 +31026,17 @@ var ngPluralizeDirective = ['$locale', '$interpolate', '$log', function($locale,
* </div>
* ```
*
+ * <br />
* <div class="alert alert-warning">
* **Note:** `track by` must always be the last expression:
* </div>
* ```
- * <div ng-repeat="model in collection | orderBy: 'id' as filtered_result track by model.id">
- * {{model.name}}
- * </div>
+ * <div ng-repeat="model in collection | orderBy: 'id' as filtered_result track by model.id">
+ * {{model.name}}
+ * </div>
* ```
*
+ *
* # Special repeat start and end points
* To repeat a series of elements instead of just one parent element, ngRepeat (as well as other ng directives) supports extending
* the range of the repeater by defining explicit start and end points by using **ng-repeat-start** and **ng-repeat-end** respectively.
@@ -27727,11 +31082,13 @@ var ngPluralizeDirective = ['$locale', '$interpolate', '$log', function($locale,
* as **data-ng-repeat-start**, **x-ng-repeat-start** and **ng:repeat-start**).
*
* @animations
- * **.enter** - when a new item is added to the list or when an item is revealed after a filter
- *
- * **.leave** - when an item is removed from the list or when an item is filtered out
+ * | Animation | Occurs |
+ * |----------------------------------|-------------------------------------|
+ * | {@link ng.$animate#enter enter} | when a new item is added to the list or when an item is revealed after a filter |
+ * | {@link ng.$animate#leave leave} | when an item is removed from the list or when an item is filtered out |
+ * | {@link ng.$animate#move move } | when an adjacent item is filtered out causing a reorder or when the item contents are reordered |
*
- * **.move** - when an adjacent item is filtered out causing a reorder or when the item contents are reordered
+ * See the example below for defining CSS animations with ngRepeat.
*
* @element ANY
* @scope
@@ -27785,34 +31142,39 @@ var ngPluralizeDirective = ['$locale', '$interpolate', '$log', function($locale,
* For example: `item in items | filter : x | orderBy : order | limitTo : limit as results` .
*
* @example
- * This example initializes the scope to a list of names and
- * then uses `ngRepeat` to display every person:
- <example module="ngAnimate" deps="angular-animate.js" animations="true">
+ * This example uses `ngRepeat` to display a list of people. A filter is used to restrict the displayed
+ * results by name or by age. New (entering) and removed (leaving) items are animated.
+ <example module="ngRepeat" name="ngRepeat" deps="angular-animate.js" animations="true" name="ng-repeat">
<file name="index.html">
- <div ng-init="friends = [
- {name:'John', age:25, gender:'boy'},
- {name:'Jessie', age:30, gender:'girl'},
- {name:'Johanna', age:28, gender:'girl'},
- {name:'Joy', age:15, gender:'girl'},
- {name:'Mary', age:28, gender:'girl'},
- {name:'Peter', age:95, gender:'boy'},
- {name:'Sebastian', age:50, gender:'boy'},
- {name:'Erika', age:27, gender:'girl'},
- {name:'Patrick', age:40, gender:'boy'},
- {name:'Samantha', age:60, gender:'girl'}
- ]">
+ <div ng-controller="repeatController">
I have {{friends.length}} friends. They are:
<input type="search" ng-model="q" placeholder="filter friends..." aria-label="filter friends" />
<ul class="example-animate-container">
<li class="animate-repeat" ng-repeat="friend in friends | filter:q as results">
[{{$index + 1}}] {{friend.name}} who is {{friend.age}} years old.
</li>
- <li class="animate-repeat" ng-if="results.length == 0">
+ <li class="animate-repeat" ng-if="results.length === 0">
<strong>No results found...</strong>
</li>
</ul>
</div>
</file>
+ <file name="script.js">
+ angular.module('ngRepeat', ['ngAnimate']).controller('repeatController', function($scope) {
+ $scope.friends = [
+ {name:'John', age:25, gender:'boy'},
+ {name:'Jessie', age:30, gender:'girl'},
+ {name:'Johanna', age:28, gender:'girl'},
+ {name:'Joy', age:15, gender:'girl'},
+ {name:'Mary', age:28, gender:'girl'},
+ {name:'Peter', age:95, gender:'boy'},
+ {name:'Sebastian', age:50, gender:'boy'},
+ {name:'Erika', age:27, gender:'girl'},
+ {name:'Patrick', age:40, gender:'boy'},
+ {name:'Samantha', age:60, gender:'girl'}
+ ];
+ });
+ </file>
<file name="animations.css">
.example-animate-container {
background:white;
@@ -27823,7 +31185,7 @@ var ngPluralizeDirective = ['$locale', '$interpolate', '$log', function($locale,
}
.animate-repeat {
- line-height:40px;
+ line-height:30px;
list-style:none;
box-sizing:border-box;
}
@@ -27845,7 +31207,7 @@ var ngPluralizeDirective = ['$locale', '$interpolate', '$log', function($locale,
.animate-repeat.ng-move.ng-move-active,
.animate-repeat.ng-enter.ng-enter-active {
opacity:1;
- max-height:40px;
+ max-height:30px;
}
</file>
<file name="protractor.js" type="protractor">
@@ -27872,7 +31234,7 @@ var ngPluralizeDirective = ['$locale', '$interpolate', '$log', function($locale,
</file>
</example>
*/
-var ngRepeatDirective = ['$parse', '$animate', function($parse, $animate) {
+var ngRepeatDirective = ['$parse', '$animate', '$compile', function($parse, $animate, $compile) {
var NG_REMOVED = '$$NG_REMOVED';
var ngRepeatMinErr = minErr('ngRepeat');
@@ -27884,9 +31246,8 @@ var ngRepeatDirective = ['$parse', '$animate', function($parse, $animate) {
scope.$first = (index === 0);
scope.$last = (index === (arrayLength - 1));
scope.$middle = !(scope.$first || scope.$last);
- // jshint bitwise: false
- scope.$odd = !(scope.$even = (index&1) === 0);
- // jshint bitwise: true
+ // eslint-disable-next-line no-bitwise
+ scope.$odd = !(scope.$even = (index & 1) === 0);
};
var getBlockStart = function(block) {
@@ -27907,12 +31268,12 @@ var ngRepeatDirective = ['$parse', '$animate', function($parse, $animate) {
$$tlb: true,
compile: function ngRepeatCompile($element, $attr) {
var expression = $attr.ngRepeat;
- var ngRepeatEndComment = document.createComment(' end ngRepeat: ' + expression + ' ');
+ var ngRepeatEndComment = $compile.$$createComment('end ngRepeat', expression);
var match = expression.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+track\s+by\s+([\s\S]+?))?\s*$/);
if (!match) {
- throw ngRepeatMinErr('iexp', "Expected expression in form of '_item_ in _collection_[ track by _id_]' but got '{0}'.",
+ throw ngRepeatMinErr('iexp', 'Expected expression in form of \'_item_ in _collection_[ track by _id_]\' but got \'{0}\'.',
expression);
}
@@ -27921,10 +31282,10 @@ var ngRepeatDirective = ['$parse', '$animate', function($parse, $animate) {
var aliasAs = match[3];
var trackByExp = match[4];
- match = lhs.match(/^(?:(\s*[\$\w]+)|\(\s*([\$\w]+)\s*,\s*([\$\w]+)\s*\))$/);
+ match = lhs.match(/^(?:(\s*[$\w]+)|\(\s*([$\w]+)\s*,\s*([$\w]+)\s*\))$/);
if (!match) {
- throw ngRepeatMinErr('iidexp', "'_item_' in '_item_ in _collection_' should be an identifier or '(_key_, _value_)' expression, but got '{0}'.",
+ throw ngRepeatMinErr('iidexp', '\'_item_\' in \'_item_ in _collection_\' should be an identifier or \'(_key_, _value_)\' expression, but got \'{0}\'.',
lhs);
}
var valueIdentifier = match[3] || match[1];
@@ -27932,7 +31293,7 @@ var ngRepeatDirective = ['$parse', '$animate', function($parse, $animate) {
if (aliasAs && (!/^[$a-zA-Z_][$a-zA-Z0-9_]*$/.test(aliasAs) ||
/^(null|undefined|this|\$index|\$first|\$middle|\$last|\$even|\$odd|\$parent|\$root|\$id)$/.test(aliasAs))) {
- throw ngRepeatMinErr('badident', "alias '{0}' is invalid --- must be a valid JS identifier which is not a reserved name.",
+ throw ngRepeatMinErr('badident', 'alias \'{0}\' is invalid --- must be a valid JS identifier which is not a reserved name.',
aliasAs);
}
@@ -27965,7 +31326,7 @@ var ngRepeatDirective = ['$parse', '$animate', function($parse, $animate) {
// Store a list of elements from previous run. This is a hash where key is the item from the
// iterator, and the value is objects with following properties.
// - scope: bound scope
- // - element: previous element.
+ // - clone: previous element.
// - index: position
//
// We are using no-proto object so that we don't need to guard against inherited props via
@@ -28028,7 +31389,7 @@ var ngRepeatDirective = ['$parse', '$animate', function($parse, $animate) {
if (block && block.scope) lastBlockMap[block.id] = block;
});
throw ngRepeatMinErr('dupes',
- "Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys. Repeater: {0}, Duplicate key: {1}, Duplicate value: {2}",
+ 'Duplicates in a repeater are not allowed. Use \'track by\' expression to specify unique keys. Repeater: {0}, Duplicate key: {1}, Duplicate value: {2}',
expression, trackById, value);
} else {
// new never before seen block
@@ -28069,7 +31430,7 @@ var ngRepeatDirective = ['$parse', '$animate', function($parse, $animate) {
nextNode = nextNode.nextSibling;
} while (nextNode && nextNode[NG_REMOVED]);
- if (getBlockStart(block) != nextNode) {
+ if (getBlockStart(block) !== nextNode) {
// existing item which got moved
$animate.move(getBlockNodes(block.clone), null, previousNode);
}
@@ -28109,11 +31470,13 @@ var NG_HIDE_IN_PROGRESS_CLASS = 'ng-hide-animate';
* @multiElement
*
* @description
- * The `ngShow` directive shows or hides the given HTML element based on the expression
- * provided to the `ngShow` attribute. The element is shown or hidden by removing or adding
- * the `.ng-hide` CSS class onto the element. The `.ng-hide` CSS class is predefined
- * in AngularJS and sets the display style to none (using an !important flag).
- * For CSP mode please add `angular-csp.css` to your html file (see {@link ng.directive:ngCsp ngCsp}).
+ * The `ngShow` directive shows or hides the given HTML element based on the expression provided to
+ * the `ngShow` attribute.
+ *
+ * The element is shown or hidden by removing or adding the `.ng-hide` CSS class onto the element.
+ * The `.ng-hide` CSS class is predefined in AngularJS and sets the display style to none (using an
+ * `!important` flag). For CSP mode please add `angular-csp.css` to your HTML file (see
+ * {@link ng.directive:ngCsp ngCsp}).
*
* ```html
* <!-- when $scope.myValue is truthy (element is visible) -->
@@ -28123,31 +31486,32 @@ var NG_HIDE_IN_PROGRESS_CLASS = 'ng-hide-animate';
* <div ng-show="myValue" class="ng-hide"></div>
* ```
*
- * When the `ngShow` expression evaluates to a falsy value then the `.ng-hide` CSS class is added to the class
- * attribute on the element causing it to become hidden. When truthy, the `.ng-hide` CSS class is removed
- * from the element causing the element not to appear hidden.
+ * When the `ngShow` expression evaluates to a falsy value then the `.ng-hide` CSS class is added
+ * to the class attribute on the element causing it to become hidden. When truthy, the `.ng-hide`
+ * CSS class is removed from the element causing the element not to appear hidden.
*
- * ## Why is !important used?
+ * ## Why is `!important` used?
*
- * You may be wondering why !important is used for the `.ng-hide` CSS class. This is because the `.ng-hide` selector
- * can be easily overridden by heavier selectors. For example, something as simple
- * as changing the display style on a HTML list item would make hidden elements appear visible.
- * This also becomes a bigger issue when dealing with CSS frameworks.
+ * You may be wondering why `!important` is used for the `.ng-hide` CSS class. This is because the
+ * `.ng-hide` selector can be easily overridden by heavier selectors. For example, something as
+ * simple as changing the display style on a HTML list item would make hidden elements appear
+ * visible. This also becomes a bigger issue when dealing with CSS frameworks.
*
- * By using !important, the show and hide behavior will work as expected despite any clash between CSS selector
- * specificity (when !important isn't used with any conflicting styles). If a developer chooses to override the
- * styling to change how to hide an element then it is just a matter of using !important in their own CSS code.
+ * By using `!important`, the show and hide behavior will work as expected despite any clash between
+ * CSS selector specificity (when `!important` isn't used with any conflicting styles). If a
+ * developer chooses to override the styling to change how to hide an element then it is just a
+ * matter of using `!important` in their own CSS code.
*
* ### Overriding `.ng-hide`
*
- * By default, the `.ng-hide` class will style the element with `display: none!important`. If you wish to change
- * the hide behavior with ngShow/ngHide then this can be achieved by restating the styles for the `.ng-hide`
- * class CSS. Note that the selector that needs to be used is actually `.ng-hide:not(.ng-hide-animate)` to cope
- * with extra animation classes that can be added.
+ * By default, the `.ng-hide` class will style the element with `display: none !important`. If you
+ * wish to change the hide behavior with `ngShow`/`ngHide`, you can simply overwrite the styles for
+ * the `.ng-hide` CSS class. Note that the selector that needs to be used is actually
+ * `.ng-hide:not(.ng-hide-animate)` to cope with extra animation classes that can be added.
*
* ```css
* .ng-hide:not(.ng-hide-animate) {
- * /&#42; this is just another form of hiding an element &#42;/
+ * /&#42; These are just alternative ways of hiding an element &#42;/
* display: block!important;
* position: absolute;
* top: -9999px;
@@ -28155,29 +31519,20 @@ var NG_HIDE_IN_PROGRESS_CLASS = 'ng-hide-animate';
* }
* ```
*
- * By default you don't need to override in CSS anything and the animations will work around the display style.
+ * By default you don't need to override anything in CSS and the animations will work around the
+ * display style.
*
* ## A note about animations with `ngShow`
*
- * Animations in ngShow/ngHide work with the show and hide events that are triggered when the directive expression
- * is true and false. This system works like the animation system present with ngClass except that
- * you must also include the !important flag to override the display property
- * so that you can perform an animation when the element is hidden during the time of the animation.
+ * Animations in `ngShow`/`ngHide` work with the show and hide events that are triggered when the
+ * directive expression is true and false. This system works like the animation system present with
+ * `ngClass` except that you must also include the `!important` flag to override the display
+ * property so that the elements are not actually hidden during the animation.
*
* ```css
- * //
- * //a working example can be found at the bottom of this page
- * //
+ * /&#42; A working example can be found at the bottom of this page. &#42;/
* .my-element.ng-hide-add, .my-element.ng-hide-remove {
- * /&#42; this is required as of 1.3x to properly
- * apply all styling in a show/hide animation &#42;/
- * transition: 0s linear all;
- * }
- *
- * .my-element.ng-hide-add-active,
- * .my-element.ng-hide-remove-active {
- * /&#42; the transition is defined in the active class &#42;/
- * transition: 1s linear all;
+ * transition: all 0.5s linear;
* }
*
* .my-element.ng-hide-add { ... }
@@ -28186,74 +31541,108 @@ var NG_HIDE_IN_PROGRESS_CLASS = 'ng-hide-animate';
* .my-element.ng-hide-remove.ng-hide-remove-active { ... }
* ```
*
- * Keep in mind that, as of AngularJS version 1.3.0-beta.11, there is no need to change the display
- * property to block during animation states--ngAnimate will handle the style toggling automatically for you.
+ * Keep in mind that, as of AngularJS version 1.3, there is no need to change the display property
+ * to block during animation states - ngAnimate will automatically handle the style toggling for you.
*
* @animations
- * addClass: `.ng-hide` - happens after the `ngShow` expression evaluates to a truthy value and the just before contents are set to visible
- * removeClass: `.ng-hide` - happens after the `ngShow` expression evaluates to a non truthy value and just before the contents are set to hidden
+ * | Animation | Occurs |
+ * |-----------------------------------------------------|---------------------------------------------------------------------------------------------------------------|
+ * | {@link $animate#addClass addClass} `.ng-hide` | After the `ngShow` expression evaluates to a non truthy value and just before the contents are set to hidden. |
+ * | {@link $animate#removeClass removeClass} `.ng-hide` | After the `ngShow` expression evaluates to a truthy value and just before contents are set to visible. |
*
* @element ANY
- * @param {expression} ngShow If the {@link guide/expression expression} is truthy
- * then the element is shown or hidden respectively.
+ * @param {expression} ngShow If the {@link guide/expression expression} is truthy/falsy then the
+ * element is shown/hidden respectively.
*
* @example
- <example module="ngAnimate" deps="angular-animate.js" animations="true">
+ * A simple example, animating the element's opacity:
+ *
+ <example module="ngAnimate" deps="angular-animate.js" animations="true" name="ng-show-simple">
<file name="index.html">
- Click me: <input type="checkbox" ng-model="checked" aria-label="Toggle ngHide"><br/>
- <div>
- Show:
- <div class="check-element animate-show" ng-show="checked">
- <span class="glyphicon glyphicon-thumbs-up"></span> I show up when your checkbox is checked.
- </div>
- </div>
- <div>
- Hide:
- <div class="check-element animate-show" ng-hide="checked">
- <span class="glyphicon glyphicon-thumbs-down"></span> I hide when your checkbox is checked.
- </div>
+ Show: <input type="checkbox" ng-model="checked" aria-label="Toggle ngShow"><br />
+ <div class="check-element animate-show-hide" ng-show="checked">
+ I show up when your checkbox is checked.
</div>
</file>
- <file name="glyphicons.css">
- @import url(../../components/bootstrap-3.1.1/css/bootstrap.css);
- </file>
<file name="animations.css">
- .animate-show {
- line-height: 20px;
+ .animate-show-hide.ng-hide {
+ opacity: 0;
+ }
+
+ .animate-show-hide.ng-hide-add,
+ .animate-show-hide.ng-hide-remove {
+ transition: all linear 0.5s;
+ }
+
+ .check-element {
+ border: 1px solid black;
opacity: 1;
padding: 10px;
- border: 1px solid black;
- background: white;
}
+ </file>
+ <file name="protractor.js" type="protractor">
+ it('should check ngShow', function() {
+ var checkbox = element(by.model('checked'));
+ var checkElem = element(by.css('.check-element'));
- .animate-show.ng-hide-add, .animate-show.ng-hide-remove {
- transition: all linear 0.5s;
+ expect(checkElem.isDisplayed()).toBe(false);
+ checkbox.click();
+ expect(checkElem.isDisplayed()).toBe(true);
+ });
+ </file>
+ </example>
+ *
+ * <hr />
+ * @example
+ * A more complex example, featuring different show/hide animations:
+ *
+ <example module="ngAnimate" deps="angular-animate.js" animations="true" name="ng-show-complex">
+ <file name="index.html">
+ Show: <input type="checkbox" ng-model="checked" aria-label="Toggle ngShow"><br />
+ <div class="check-element funky-show-hide" ng-show="checked">
+ I show up when your checkbox is checked.
+ </div>
+ </file>
+ <file name="animations.css">
+ body {
+ overflow: hidden;
+ perspective: 1000px;
}
- .animate-show.ng-hide {
- line-height: 0;
- opacity: 0;
- padding: 0 10px;
+ .funky-show-hide.ng-hide-add {
+ transform: rotateZ(0);
+ transform-origin: right;
+ transition: all 0.5s ease-in-out;
+ }
+
+ .funky-show-hide.ng-hide-add.ng-hide-add-active {
+ transform: rotateZ(-135deg);
+ }
+
+ .funky-show-hide.ng-hide-remove {
+ transform: rotateY(90deg);
+ transform-origin: left;
+ transition: all 0.5s ease;
+ }
+
+ .funky-show-hide.ng-hide-remove.ng-hide-remove-active {
+ transform: rotateY(0);
}
.check-element {
- padding: 10px;
border: 1px solid black;
- background: white;
+ opacity: 1;
+ padding: 10px;
}
</file>
<file name="protractor.js" type="protractor">
- var thumbsUp = element(by.css('span.glyphicon-thumbs-up'));
- var thumbsDown = element(by.css('span.glyphicon-thumbs-down'));
+ it('should check ngShow', function() {
+ var checkbox = element(by.model('checked'));
+ var checkElem = element(by.css('.check-element'));
- it('should check ng-show / ng-hide', function() {
- expect(thumbsUp.isDisplayed()).toBeFalsy();
- expect(thumbsDown.isDisplayed()).toBeTruthy();
-
- element(by.model('checked')).click();
-
- expect(thumbsUp.isDisplayed()).toBeTruthy();
- expect(thumbsDown.isDisplayed()).toBeFalsy();
+ expect(checkElem.isDisplayed()).toBe(false);
+ checkbox.click();
+ expect(checkElem.isDisplayed()).toBe(true);
});
</file>
</example>
@@ -28283,11 +31672,13 @@ var ngShowDirective = ['$animate', function($animate) {
* @multiElement
*
* @description
- * The `ngHide` directive shows or hides the given HTML element based on the expression
- * provided to the `ngHide` attribute. The element is shown or hidden by removing or adding
- * the `ng-hide` CSS class onto the element. The `.ng-hide` CSS class is predefined
- * in AngularJS and sets the display style to none (using an !important flag).
- * For CSP mode please add `angular-csp.css` to your html file (see {@link ng.directive:ngCsp ngCsp}).
+ * The `ngHide` directive shows or hides the given HTML element based on the expression provided to
+ * the `ngHide` attribute.
+ *
+ * The element is shown or hidden by removing or adding the `.ng-hide` CSS class onto the element.
+ * The `.ng-hide` CSS class is predefined in AngularJS and sets the display style to none (using an
+ * `!important` flag). For CSP mode please add `angular-csp.css` to your HTML file (see
+ * {@link ng.directive:ngCsp ngCsp}).
*
* ```html
* <!-- when $scope.myValue is truthy (element is hidden) -->
@@ -28297,30 +31688,32 @@ var ngShowDirective = ['$animate', function($animate) {
* <div ng-hide="myValue"></div>
* ```
*
- * When the `ngHide` expression evaluates to a truthy value then the `.ng-hide` CSS class is added to the class
- * attribute on the element causing it to become hidden. When falsy, the `.ng-hide` CSS class is removed
- * from the element causing the element not to appear hidden.
+ * When the `ngHide` expression evaluates to a truthy value then the `.ng-hide` CSS class is added
+ * to the class attribute on the element causing it to become hidden. When falsy, the `.ng-hide`
+ * CSS class is removed from the element causing the element not to appear hidden.
*
- * ## Why is !important used?
+ * ## Why is `!important` used?
*
- * You may be wondering why !important is used for the `.ng-hide` CSS class. This is because the `.ng-hide` selector
- * can be easily overridden by heavier selectors. For example, something as simple
- * as changing the display style on a HTML list item would make hidden elements appear visible.
- * This also becomes a bigger issue when dealing with CSS frameworks.
+ * You may be wondering why `!important` is used for the `.ng-hide` CSS class. This is because the
+ * `.ng-hide` selector can be easily overridden by heavier selectors. For example, something as
+ * simple as changing the display style on a HTML list item would make hidden elements appear
+ * visible. This also becomes a bigger issue when dealing with CSS frameworks.
*
- * By using !important, the show and hide behavior will work as expected despite any clash between CSS selector
- * specificity (when !important isn't used with any conflicting styles). If a developer chooses to override the
- * styling to change how to hide an element then it is just a matter of using !important in their own CSS code.
+ * By using `!important`, the show and hide behavior will work as expected despite any clash between
+ * CSS selector specificity (when `!important` isn't used with any conflicting styles). If a
+ * developer chooses to override the styling to change how to hide an element then it is just a
+ * matter of using `!important` in their own CSS code.
*
* ### Overriding `.ng-hide`
*
- * By default, the `.ng-hide` class will style the element with `display: none!important`. If you wish to change
- * the hide behavior with ngShow/ngHide then this can be achieved by restating the styles for the `.ng-hide`
- * class in CSS:
+ * By default, the `.ng-hide` class will style the element with `display: none !important`. If you
+ * wish to change the hide behavior with `ngShow`/`ngHide`, you can simply overwrite the styles for
+ * the `.ng-hide` CSS class. Note that the selector that needs to be used is actually
+ * `.ng-hide:not(.ng-hide-animate)` to cope with extra animation classes that can be added.
*
* ```css
- * .ng-hide {
- * /&#42; this is just another form of hiding an element &#42;/
+ * .ng-hide:not(.ng-hide-animate) {
+ * /&#42; These are just alternative ways of hiding an element &#42;/
* display: block!important;
* position: absolute;
* top: -9999px;
@@ -28328,20 +31721,20 @@ var ngShowDirective = ['$animate', function($animate) {
* }
* ```
*
- * By default you don't need to override in CSS anything and the animations will work around the display style.
+ * By default you don't need to override in CSS anything and the animations will work around the
+ * display style.
*
* ## A note about animations with `ngHide`
*
- * Animations in ngShow/ngHide work with the show and hide events that are triggered when the directive expression
- * is true and false. This system works like the animation system present with ngClass, except that the `.ng-hide`
- * CSS class is added and removed for you instead of your own CSS class.
+ * Animations in `ngShow`/`ngHide` work with the show and hide events that are triggered when the
+ * directive expression is true and false. This system works like the animation system present with
+ * `ngClass` except that you must also include the `!important` flag to override the display
+ * property so that the elements are not actually hidden during the animation.
*
* ```css
- * //
- * //a working example can be found at the bottom of this page
- * //
+ * /&#42; A working example can be found at the bottom of this page. &#42;/
* .my-element.ng-hide-add, .my-element.ng-hide-remove {
- * transition: 0.5s linear all;
+ * transition: all 0.5s linear;
* }
*
* .my-element.ng-hide-add { ... }
@@ -28350,71 +31743,109 @@ var ngShowDirective = ['$animate', function($animate) {
* .my-element.ng-hide-remove.ng-hide-remove-active { ... }
* ```
*
- * Keep in mind that, as of AngularJS version 1.3.0-beta.11, there is no need to change the display
- * property to block during animation states--ngAnimate will handle the style toggling automatically for you.
+ * Keep in mind that, as of AngularJS version 1.3, there is no need to change the display property
+ * to block during animation states - ngAnimate will automatically handle the style toggling for you.
*
* @animations
- * removeClass: `.ng-hide` - happens after the `ngHide` expression evaluates to a truthy value and just before the contents are set to hidden
- * addClass: `.ng-hide` - happens after the `ngHide` expression evaluates to a non truthy value and just before the contents are set to visible
+ * | Animation | Occurs |
+ * |-----------------------------------------------------|------------------------------------------------------------------------------------------------------------|
+ * | {@link $animate#addClass addClass} `.ng-hide` | After the `ngHide` expression evaluates to a truthy value and just before the contents are set to hidden. |
+ * | {@link $animate#removeClass removeClass} `.ng-hide` | After the `ngHide` expression evaluates to a non truthy value and just before contents are set to visible. |
+ *
*
* @element ANY
- * @param {expression} ngHide If the {@link guide/expression expression} is truthy then
- * the element is shown or hidden respectively.
+ * @param {expression} ngHide If the {@link guide/expression expression} is truthy/falsy then the
+ * element is hidden/shown respectively.
*
* @example
- <example module="ngAnimate" deps="angular-animate.js" animations="true">
+ * A simple example, animating the element's opacity:
+ *
+ <example module="ngAnimate" deps="angular-animate.js" animations="true" name="ng-hide-simple">
<file name="index.html">
- Click me: <input type="checkbox" ng-model="checked" aria-label="Toggle ngShow"><br/>
- <div>
- Show:
- <div class="check-element animate-hide" ng-show="checked">
- <span class="glyphicon glyphicon-thumbs-up"></span> I show up when your checkbox is checked.
- </div>
+ Hide: <input type="checkbox" ng-model="checked" aria-label="Toggle ngHide"><br />
+ <div class="check-element animate-show-hide" ng-hide="checked">
+ I hide when your checkbox is checked.
</div>
- <div>
- Hide:
- <div class="check-element animate-hide" ng-hide="checked">
- <span class="glyphicon glyphicon-thumbs-down"></span> I hide when your checkbox is checked.
- </div>
- </div>
- </file>
- <file name="glyphicons.css">
- @import url(../../components/bootstrap-3.1.1/css/bootstrap.css);
</file>
<file name="animations.css">
- .animate-hide {
+ .animate-show-hide.ng-hide {
+ opacity: 0;
+ }
+
+ .animate-show-hide.ng-hide-add,
+ .animate-show-hide.ng-hide-remove {
transition: all linear 0.5s;
- line-height: 20px;
+ }
+
+ .check-element {
+ border: 1px solid black;
opacity: 1;
padding: 10px;
- border: 1px solid black;
- background: white;
}
+ </file>
+ <file name="protractor.js" type="protractor">
+ it('should check ngHide', function() {
+ var checkbox = element(by.model('checked'));
+ var checkElem = element(by.css('.check-element'));
- .animate-hide.ng-hide {
- line-height: 0;
- opacity: 0;
- padding: 0 10px;
+ expect(checkElem.isDisplayed()).toBe(true);
+ checkbox.click();
+ expect(checkElem.isDisplayed()).toBe(false);
+ });
+ </file>
+ </example>
+ *
+ * <hr />
+ * @example
+ * A more complex example, featuring different show/hide animations:
+ *
+ <example module="ngAnimate" deps="angular-animate.js" animations="true" name="ng-hide-complex">
+ <file name="index.html">
+ Hide: <input type="checkbox" ng-model="checked" aria-label="Toggle ngHide"><br />
+ <div class="check-element funky-show-hide" ng-hide="checked">
+ I hide when your checkbox is checked.
+ </div>
+ </file>
+ <file name="animations.css">
+ body {
+ overflow: hidden;
+ perspective: 1000px;
+ }
+
+ .funky-show-hide.ng-hide-add {
+ transform: rotateZ(0);
+ transform-origin: right;
+ transition: all 0.5s ease-in-out;
+ }
+
+ .funky-show-hide.ng-hide-add.ng-hide-add-active {
+ transform: rotateZ(-135deg);
+ }
+
+ .funky-show-hide.ng-hide-remove {
+ transform: rotateY(90deg);
+ transform-origin: left;
+ transition: all 0.5s ease;
+ }
+
+ .funky-show-hide.ng-hide-remove.ng-hide-remove-active {
+ transform: rotateY(0);
}
.check-element {
- padding: 10px;
border: 1px solid black;
- background: white;
+ opacity: 1;
+ padding: 10px;
}
</file>
<file name="protractor.js" type="protractor">
- var thumbsUp = element(by.css('span.glyphicon-thumbs-up'));
- var thumbsDown = element(by.css('span.glyphicon-thumbs-down'));
-
- it('should check ng-show / ng-hide', function() {
- expect(thumbsUp.isDisplayed()).toBeFalsy();
- expect(thumbsDown.isDisplayed()).toBeTruthy();
-
- element(by.model('checked')).click();
+ it('should check ngHide', function() {
+ var checkbox = element(by.model('checked'));
+ var checkElem = element(by.css('.check-element'));
- expect(thumbsUp.isDisplayed()).toBeTruthy();
- expect(thumbsDown.isDisplayed()).toBeFalsy();
+ expect(checkElem.isDisplayed()).toBe(true);
+ checkbox.click();
+ expect(checkElem.isDisplayed()).toBe(false);
});
</file>
</example>
@@ -28443,6 +31874,11 @@ var ngHideDirective = ['$animate', function($animate) {
* @description
* The `ngStyle` directive allows you to set CSS style on an HTML element conditionally.
*
+ * @knownIssue
+ * You should not use {@link guide/interpolation interpolation} in the value of the `style`
+ * attribute, when using the `ngStyle` directive on the same element.
+ * See {@link guide/interpolation#known-issues here} for more info.
+ *
* @element ANY
* @param {expression} ngStyle
*
@@ -28454,7 +31890,7 @@ var ngHideDirective = ['$animate', function($animate) {
* See the 'background-color' style in the example below.
*
* @example
- <example>
+ <example name="ng-style">
<file name="index.html">
<input type="button" value="set color" ng-click="myStyle={color:'red'}">
<input type="button" value="set background" ng-click="myStyle={'background-color':'blue'}">
@@ -28517,8 +31953,10 @@ var ngStyleDirective = ngDirective(function(scope, element, attr) {
* </div>
* @animations
- * enter - happens after the ngSwitch contents change and the matched child element is placed inside the container
- * leave - happens just after the ngSwitch contents change and just before the former contents are removed from the DOM
+ * | Animation | Occurs |
+ * |----------------------------------|-------------------------------------|
+ * | {@link ng.$animate#enter enter} | after the ngSwitch contents change and the matched child element is placed inside the container |
+ * | {@link ng.$animate#leave leave} | after the ngSwitch contents change and just before the former contents are removed from the DOM |
*
* @usage
*
@@ -28538,14 +31976,18 @@ var ngStyleDirective = ngDirective(function(scope, element, attr) {
*
* * `ngSwitchWhen`: the case statement to match against. If match then this
* case will be displayed. If the same match appears multiple times, all the
- * elements will be displayed.
+ * elements will be displayed. It is possible to associate multiple values to
+ * the same `ngSwitchWhen` by defining the optional attribute
+ * `ngSwitchWhenSeparator`. The separator will be used to split the value of
+ * the `ngSwitchWhen` attribute into multiple tokens, and the element will show
+ * if any of the `ngSwitch` evaluates to any of these tokens.
* * `ngSwitchDefault`: the default case when no other case match. If there
* are multiple default cases, all of them will be displayed when no other
* case match.
*
*
* @example
- <example module="switchExample" deps="angular-animate.js" animations="true">
+ <example module="switchExample" deps="angular-animate.js" animations="true" name="ng-switch">
<file name="index.html">
<div ng-controller="ExampleController">
<select ng-model="selection" ng-options="item for item in items">
@@ -28554,7 +31996,7 @@ var ngStyleDirective = ngDirective(function(scope, element, attr) {
<hr/>
<div class="animate-switch-container"
ng-switch on="selection">
- <div class="animate-switch" ng-switch-when="settings">Settings Div</div>
+ <div class="animate-switch" ng-switch-when="settings|options" ng-switch-when-separator="|">Settings Div</div>
<div class="animate-switch" ng-switch-when="home">Home Span</div>
<div class="animate-switch" ng-switch-default>default</div>
</div>
@@ -28563,7 +32005,7 @@ var ngStyleDirective = ngDirective(function(scope, element, attr) {
<file name="script.js">
angular.module('switchExample', ['ngAnimate'])
.controller('ExampleController', ['$scope', function($scope) {
- $scope.items = ['settings', 'home', 'other'];
+ $scope.items = ['settings', 'home', 'options', 'other'];
$scope.selection = $scope.items[0];
}]);
</file>
@@ -28610,19 +32052,23 @@ var ngStyleDirective = ngDirective(function(scope, element, attr) {
select.all(by.css('option')).get(1).click();
expect(switchElem.getText()).toMatch(/Home Span/);
});
- it('should select default', function() {
+ it('should change to settings via "options"', function() {
select.all(by.css('option')).get(2).click();
+ expect(switchElem.getText()).toMatch(/Settings Div/);
+ });
+ it('should select default', function() {
+ select.all(by.css('option')).get(3).click();
expect(switchElem.getText()).toMatch(/default/);
});
</file>
</example>
*/
-var ngSwitchDirective = ['$animate', function($animate) {
+var ngSwitchDirective = ['$animate', '$compile', function($animate, $compile) {
return {
require: 'ngSwitch',
// asks for $scope to fool the BC controller module
- controller: ['$scope', function ngSwitchController() {
+ controller: ['$scope', function NgSwitchController() {
this.cases = {};
}],
link: function(scope, element, attr, ngSwitchController) {
@@ -28633,21 +32079,24 @@ var ngSwitchDirective = ['$animate', function($animate) {
selectedScopes = [];
var spliceFactory = function(array, index) {
- return function() { array.splice(index, 1); };
+ return function(response) {
+ if (response !== false) array.splice(index, 1);
+ };
};
scope.$watch(watchExpr, function ngSwitchWatchAction(value) {
var i, ii;
- for (i = 0, ii = previousLeaveAnimations.length; i < ii; ++i) {
- $animate.cancel(previousLeaveAnimations[i]);
+
+ // Start with the last, in case the array is modified during the loop
+ while (previousLeaveAnimations.length) {
+ $animate.cancel(previousLeaveAnimations.pop());
}
- previousLeaveAnimations.length = 0;
for (i = 0, ii = selectedScopes.length; i < ii; ++i) {
var selected = getBlockNodes(selectedElements[i].clone);
selectedScopes[i].$destroy();
- var promise = previousLeaveAnimations[i] = $animate.leave(selected);
- promise.then(spliceFactory(previousLeaveAnimations, i));
+ var runner = previousLeaveAnimations[i] = $animate.leave(selected);
+ runner.done(spliceFactory(previousLeaveAnimations, i));
}
selectedElements.length = 0;
@@ -28658,7 +32107,7 @@ var ngSwitchDirective = ['$animate', function($animate) {
selectedTransclude.transclude(function(caseElement, selectedScope) {
selectedScopes.push(selectedScope);
var anchor = selectedTransclude.element;
- caseElement[caseElement.length++] = document.createComment(' end ngSwitchWhen: ');
+ caseElement[caseElement.length++] = $compile.$$createComment('end ngSwitchWhen');
var block = { clone: caseElement };
selectedElements.push(block);
@@ -28677,8 +32126,16 @@ var ngSwitchWhenDirective = ngDirective({
require: '^ngSwitch',
multiElement: true,
link: function(scope, element, attrs, ctrl, $transclude) {
- ctrl.cases['!' + attrs.ngSwitchWhen] = (ctrl.cases['!' + attrs.ngSwitchWhen] || []);
- ctrl.cases['!' + attrs.ngSwitchWhen].push({ transclude: $transclude, element: element });
+
+ var cases = attrs.ngSwitchWhen.split(attrs.ngSwitchWhenSeparator).sort().filter(
+ // Filter duplicate cases
+ function(element, index, array) { return array[index - 1] !== element; }
+ );
+
+ forEach(cases, function(whenCase) {
+ ctrl.cases['!' + whenCase] = (ctrl.cases['!' + whenCase] || []);
+ ctrl.cases['!' + whenCase].push({ transclude: $transclude, element: element });
+ });
}
});
@@ -28701,69 +32158,223 @@ var ngSwitchDefaultDirective = ngDirective({
* @description
* Directive that marks the insertion point for the transcluded DOM of the nearest parent directive that uses transclusion.
*
- * Any existing content of the element that this directive is placed on will be removed before the transcluded content is inserted.
+ * You can specify that you want to insert a named transclusion slot, instead of the default slot, by providing the slot name
+ * as the value of the `ng-transclude` or `ng-transclude-slot` attribute.
+ *
+ * If the transcluded content is not empty (i.e. contains one or more DOM nodes, including whitespace text nodes), any existing
+ * content of this element will be removed before the transcluded content is inserted.
+ * If the transcluded content is empty (or only whitespace), the existing content is left intact. This lets you provide fallback
+ * content in the case that no transcluded content is provided.
*
* @element ANY
*
+ * @param {string} ngTransclude|ngTranscludeSlot the name of the slot to insert at this point. If this is not provided, is empty
+ * or its value is the same as the name of the attribute then the default slot is used.
+ *
* @example
- <example module="transcludeExample">
- <file name="index.html">
- <script>
- angular.module('transcludeExample', [])
- .directive('pane', function(){
- return {
- restrict: 'E',
- transclude: true,
- scope: { title:'@' },
- template: '<div style="border: 1px solid black;">' +
- '<div style="background-color: gray">{{title}}</div>' +
- '<ng-transclude></ng-transclude>' +
- '</div>'
- };
- })
- .controller('ExampleController', ['$scope', function($scope) {
- $scope.title = 'Lorem Ipsum';
- $scope.text = 'Neque porro quisquam est qui dolorem ipsum quia dolor...';
- }]);
- </script>
- <div ng-controller="ExampleController">
- <input ng-model="title" aria-label="title"> <br/>
- <textarea ng-model="text" aria-label="text"></textarea> <br/>
- <pane title="{{title}}">{{text}}</pane>
- </div>
- </file>
- <file name="protractor.js" type="protractor">
- it('should have transcluded', function() {
- var titleElement = element(by.model('title'));
- titleElement.clear();
- titleElement.sendKeys('TITLE');
- var textElement = element(by.model('text'));
- textElement.clear();
- textElement.sendKeys('TEXT');
- expect(element(by.binding('title')).getText()).toEqual('TITLE');
- expect(element(by.binding('text')).getText()).toEqual('TEXT');
- });
- </file>
- </example>
+ * ### Basic transclusion
+ * This example demonstrates basic transclusion of content into a component directive.
+ * <example name="simpleTranscludeExample" module="transcludeExample">
+ * <file name="index.html">
+ * <script>
+ * angular.module('transcludeExample', [])
+ * .directive('pane', function(){
+ * return {
+ * restrict: 'E',
+ * transclude: true,
+ * scope: { title:'@' },
+ * template: '<div style="border: 1px solid black;">' +
+ * '<div style="background-color: gray">{{title}}</div>' +
+ * '<ng-transclude></ng-transclude>' +
+ * '</div>'
+ * };
+ * })
+ * .controller('ExampleController', ['$scope', function($scope) {
+ * $scope.title = 'Lorem Ipsum';
+ * $scope.text = 'Neque porro quisquam est qui dolorem ipsum quia dolor...';
+ * }]);
+ * </script>
+ * <div ng-controller="ExampleController">
+ * <input ng-model="title" aria-label="title"> <br/>
+ * <textarea ng-model="text" aria-label="text"></textarea> <br/>
+ * <pane title="{{title}}"><span>{{text}}</span></pane>
+ * </div>
+ * </file>
+ * <file name="protractor.js" type="protractor">
+ * it('should have transcluded', function() {
+ * var titleElement = element(by.model('title'));
+ * titleElement.clear();
+ * titleElement.sendKeys('TITLE');
+ * var textElement = element(by.model('text'));
+ * textElement.clear();
+ * textElement.sendKeys('TEXT');
+ * expect(element(by.binding('title')).getText()).toEqual('TITLE');
+ * expect(element(by.binding('text')).getText()).toEqual('TEXT');
+ * });
+ * </file>
+ * </example>
*
+ * @example
+ * ### Transclude fallback content
+ * This example shows how to use `NgTransclude` with fallback content, that
+ * is displayed if no transcluded content is provided.
+ *
+ * <example module="transcludeFallbackContentExample" name="ng-transclude">
+ * <file name="index.html">
+ * <script>
+ * angular.module('transcludeFallbackContentExample', [])
+ * .directive('myButton', function(){
+ * return {
+ * restrict: 'E',
+ * transclude: true,
+ * scope: true,
+ * template: '<button style="cursor: pointer;">' +
+ * '<ng-transclude>' +
+ * '<b style="color: red;">Button1</b>' +
+ * '</ng-transclude>' +
+ * '</button>'
+ * };
+ * });
+ * </script>
+ * <!-- fallback button content -->
+ * <my-button id="fallback"></my-button>
+ * <!-- modified button content -->
+ * <my-button id="modified">
+ * <i style="color: green;">Button2</i>
+ * </my-button>
+ * </file>
+ * <file name="protractor.js" type="protractor">
+ * it('should have different transclude element content', function() {
+ * expect(element(by.id('fallback')).getText()).toBe('Button1');
+ * expect(element(by.id('modified')).getText()).toBe('Button2');
+ * });
+ * </file>
+ * </example>
+ *
+ * @example
+ * ### Multi-slot transclusion
+ * This example demonstrates using multi-slot transclusion in a component directive.
+ * <example name="multiSlotTranscludeExample" module="multiSlotTranscludeExample">
+ * <file name="index.html">
+ * <style>
+ * .title, .footer {
+ * background-color: gray
+ * }
+ * </style>
+ * <div ng-controller="ExampleController">
+ * <input ng-model="title" aria-label="title"> <br/>
+ * <textarea ng-model="text" aria-label="text"></textarea> <br/>
+ * <pane>
+ * <pane-title><a ng-href="{{link}}">{{title}}</a></pane-title>
+ * <pane-body><p>{{text}}</p></pane-body>
+ * </pane>
+ * </div>
+ * </file>
+ * <file name="app.js">
+ * angular.module('multiSlotTranscludeExample', [])
+ * .directive('pane', function() {
+ * return {
+ * restrict: 'E',
+ * transclude: {
+ * 'title': '?paneTitle',
+ * 'body': 'paneBody',
+ * 'footer': '?paneFooter'
+ * },
+ * template: '<div style="border: 1px solid black;">' +
+ * '<div class="title" ng-transclude="title">Fallback Title</div>' +
+ * '<div ng-transclude="body"></div>' +
+ * '<div class="footer" ng-transclude="footer">Fallback Footer</div>' +
+ * '</div>'
+ * };
+ * })
+ * .controller('ExampleController', ['$scope', function($scope) {
+ * $scope.title = 'Lorem Ipsum';
+ * $scope.link = 'https://google.com';
+ * $scope.text = 'Neque porro quisquam est qui dolorem ipsum quia dolor...';
+ * }]);
+ * </file>
+ * <file name="protractor.js" type="protractor">
+ * it('should have transcluded the title and the body', function() {
+ * var titleElement = element(by.model('title'));
+ * titleElement.clear();
+ * titleElement.sendKeys('TITLE');
+ * var textElement = element(by.model('text'));
+ * textElement.clear();
+ * textElement.sendKeys('TEXT');
+ * expect(element(by.css('.title')).getText()).toEqual('TITLE');
+ * expect(element(by.binding('text')).getText()).toEqual('TEXT');
+ * expect(element(by.css('.footer')).getText()).toEqual('Fallback Footer');
+ * });
+ * </file>
+ * </example>
*/
-var ngTranscludeDirective = ngDirective({
- restrict: 'EAC',
- link: function($scope, $element, $attrs, controller, $transclude) {
- if (!$transclude) {
- throw minErr('ngTransclude')('orphan',
- 'Illegal use of ngTransclude directive in the template! ' +
- 'No parent directive that requires a transclusion found. ' +
- 'Element: {0}',
- startingTag($element));
- }
-
- $transclude(function(clone) {
- $element.empty();
- $element.append(clone);
- });
- }
-});
+var ngTranscludeMinErr = minErr('ngTransclude');
+var ngTranscludeDirective = ['$compile', function($compile) {
+ return {
+ restrict: 'EAC',
+ terminal: true,
+ compile: function ngTranscludeCompile(tElement) {
+
+ // Remove and cache any original content to act as a fallback
+ var fallbackLinkFn = $compile(tElement.contents());
+ tElement.empty();
+
+ return function ngTranscludePostLink($scope, $element, $attrs, controller, $transclude) {
+
+ if (!$transclude) {
+ throw ngTranscludeMinErr('orphan',
+ 'Illegal use of ngTransclude directive in the template! ' +
+ 'No parent directive that requires a transclusion found. ' +
+ 'Element: {0}',
+ startingTag($element));
+ }
+
+
+ // If the attribute is of the form: `ng-transclude="ng-transclude"` then treat it like the default
+ if ($attrs.ngTransclude === $attrs.$attr.ngTransclude) {
+ $attrs.ngTransclude = '';
+ }
+ var slotName = $attrs.ngTransclude || $attrs.ngTranscludeSlot;
+
+ // If the slot is required and no transclusion content is provided then this call will throw an error
+ $transclude(ngTranscludeCloneAttachFn, null, slotName);
+
+ // If the slot is optional and no transclusion content is provided then use the fallback content
+ if (slotName && !$transclude.isSlotFilled(slotName)) {
+ useFallbackContent();
+ }
+
+ function ngTranscludeCloneAttachFn(clone, transcludedScope) {
+ if (clone.length && notWhitespace(clone)) {
+ $element.append(clone);
+ } else {
+ useFallbackContent();
+ // There is nothing linked against the transcluded scope since no content was available,
+ // so it should be safe to clean up the generated scope.
+ transcludedScope.$destroy();
+ }
+ }
+
+ function useFallbackContent() {
+ // Since this is the fallback content rather than the transcluded content,
+ // we link against the scope of this directive rather than the transcluded scope
+ fallbackLinkFn($scope, function(clone) {
+ $element.append(clone);
+ });
+ }
+
+ function notWhitespace(nodes) {
+ for (var i = 0, ii = nodes.length; i < ii; i++) {
+ var node = nodes[i];
+ if (node.nodeType !== NODE_TYPE_TEXT || node.nodeValue.trim()) {
+ return true;
+ }
+ }
+ }
+ };
+ }
+ };
+}];
/**
* @ngdoc directive
@@ -28781,7 +32392,7 @@ var ngTranscludeDirective = ngDirective({
* @param {string} id Cache name of the template.
*
* @example
- <example>
+ <example name="script-tag">
<file name="index.html">
<script type="text/ng-template" id="/tpl.html">
Content of the template.
@@ -28803,7 +32414,7 @@ var scriptDirective = ['$templateCache', function($templateCache) {
restrict: 'E',
terminal: true,
compile: function(element, attr) {
- if (attr.type == 'text/ng-template') {
+ if (attr.type === 'text/ng-template') {
var templateUrl = attr.id,
text = element[0].text;
@@ -28813,80 +32424,246 @@ var scriptDirective = ['$templateCache', function($templateCache) {
};
}];
+/* exported selectDirective, optionDirective */
+
var noopNgModelController = { $setViewValue: noop, $render: noop };
-function chromeHack(optionElement) {
- // Workaround for https://code.google.com/p/chromium/issues/detail?id=381459
- // Adding an <option selected="selected"> element to a <select required="required"> should
- // automatically select the new element
- if (optionElement[0].hasAttribute('selected')) {
- optionElement[0].selected = true;
- }
+function setOptionSelectedStatus(optionEl, value) {
+ optionEl.prop('selected', value);
+ /**
+ * When unselecting an option, setting the property to null / false should be enough
+ * However, screenreaders might react to the selected attribute instead, see
+ * https://github.com/angular/angular.js/issues/14419
+ * Note: "selected" is a boolean attr and will be removed when the "value" arg in attr() is false
+ * or null
+ */
+ optionEl.attr('selected', value);
}
/**
* @ngdoc type
* @name select.SelectController
+ *
* @description
- * The controller for the `<select>` directive. This provides support for reading
- * and writing the selected value(s) of the control and also coordinates dynamically
- * added `<option>` elements, perhaps by an `ngRepeat` directive.
+ * The controller for the {@link ng.select select} directive. The controller exposes
+ * a few utility methods that can be used to augment the behavior of a regular or an
+ * {@link ng.ngOptions ngOptions} select element.
+ *
+ * @example
+ * ### Set a custom error when the unknown option is selected
+ *
+ * This example sets a custom error "unknownValue" on the ngModelController
+ * when the select element's unknown option is selected, i.e. when the model is set to a value
+ * that is not matched by any option.
+ *
+ * <example name="select-unknown-value-error" module="staticSelect">
+ * <file name="index.html">
+ * <div ng-controller="ExampleController">
+ * <form name="myForm">
+ * <label for="testSelect"> Single select: </label><br>
+ * <select name="testSelect" ng-model="selected" unknown-value-error>
+ * <option value="option-1">Option 1</option>
+ * <option value="option-2">Option 2</option>
+ * </select><br>
+ * <span ng-if="myForm.testSelect.$error.unknownValue">Error: The current model doesn't match any option</span>
+ *
+ * <button ng-click="forceUnknownOption()">Force unknown option</button><br>
+ * </form>
+ * </div>
+ * </file>
+ * <file name="app.js">
+ * angular.module('staticSelect', [])
+ * .controller('ExampleController', ['$scope', function($scope) {
+ * $scope.selected = null;
+ *
+ * $scope.forceUnknownOption = function() {
+ * $scope.selected = 'nonsense';
+ * };
+ * }])
+ * .directive('unknownValueError', function() {
+ * return {
+ * require: ['ngModel', 'select'],
+ * link: function(scope, element, attrs, ctrls) {
+ * var ngModelCtrl = ctrls[0];
+ * var selectCtrl = ctrls[1];
+ *
+ * ngModelCtrl.$validators.unknownValue = function(modelValue, viewValue) {
+ * if (selectCtrl.$isUnknownOptionSelected()) {
+ * return false;
+ * }
+ *
+ * return true;
+ * };
+ * }
+ *
+ * };
+ * });
+ * </file>
+ *</example>
+ *
+ *
+ * @example
+ * ### Set the "required" error when the unknown option is selected.
+ *
+ * By default, the "required" error on the ngModelController is only set on a required select
+ * when the empty option is selected. This example adds a custom directive that also sets the
+ * error when the unknown option is selected.
+ *
+ * <example name="select-unknown-value-required" module="staticSelect">
+ * <file name="index.html">
+ * <div ng-controller="ExampleController">
+ * <form name="myForm">
+ * <label for="testSelect"> Select: </label><br>
+ * <select name="testSelect" ng-model="selected" unknown-value-required>
+ * <option value="option-1">Option 1</option>
+ * <option value="option-2">Option 2</option>
+ * </select><br>
+ * <span ng-if="myForm.testSelect.$error.required">Error: Please select a value</span><br>
+ *
+ * <button ng-click="forceUnknownOption()">Force unknown option</button><br>
+ * </form>
+ * </div>
+ * </file>
+ * <file name="app.js">
+ * angular.module('staticSelect', [])
+ * .controller('ExampleController', ['$scope', function($scope) {
+ * $scope.selected = null;
+ *
+ * $scope.forceUnknownOption = function() {
+ * $scope.selected = 'nonsense';
+ * };
+ * }])
+ * .directive('unknownValueRequired', function() {
+ * return {
+ * priority: 1, // This directive must run after the required directive has added its validator
+ * require: ['ngModel', 'select'],
+ * link: function(scope, element, attrs, ctrls) {
+ * var ngModelCtrl = ctrls[0];
+ * var selectCtrl = ctrls[1];
+ *
+ * var originalRequiredValidator = ngModelCtrl.$validators.required;
+ *
+ * ngModelCtrl.$validators.required = function() {
+ * if (attrs.required && selectCtrl.$isUnknownOptionSelected()) {
+ * return false;
+ * }
+ *
+ * return originalRequiredValidator.apply(this, arguments);
+ * };
+ * }
+ * };
+ * });
+ * </file>
+ *</example>
+ *
+ *
*/
var SelectController =
- ['$element', '$scope', '$attrs', function($element, $scope, $attrs) {
+ ['$element', '$scope', /** @this */ function($element, $scope) {
var self = this,
- optionsMap = new HashMap();
+ optionsMap = new NgMap();
+
+ self.selectValueMap = {}; // Keys are the hashed values, values the original values
// If the ngModel doesn't get provided then provide a dummy noop version to prevent errors
self.ngModelCtrl = noopNgModelController;
+ self.multiple = false;
// The "unknown" option is one that is prepended to the list if the viewValue
// does not match any of the options. When it is rendered the value of the unknown
// option is '? XXX ?' where XXX is the hashKey of the value that is not known.
//
+ // Support: IE 9 only
// We can't just jqLite('<option>') since jqLite is not smart enough
// to create it in <select> and IE barfs otherwise.
- self.unknownOption = jqLite(document.createElement('option'));
+ self.unknownOption = jqLite(window.document.createElement('option'));
+
+ // The empty option is an option with the value '' that the application developer can
+ // provide inside the select. It is always selectable and indicates that a "null" selection has
+ // been made by the user.
+ // If the select has an empty option, and the model of the select is set to "undefined" or "null",
+ // the empty option is selected.
+ // If the model is set to a different unmatched value, the unknown option is rendered and
+ // selected, i.e both are present, because a "null" selection and an unknown value are different.
+ self.hasEmptyOption = false;
+ self.emptyOption = undefined;
+
self.renderUnknownOption = function(val) {
- var unknownVal = '? ' + hashKey(val) + ' ?';
+ var unknownVal = self.generateUnknownOptionValue(val);
self.unknownOption.val(unknownVal);
$element.prepend(self.unknownOption);
+ setOptionSelectedStatus(self.unknownOption, true);
$element.val(unknownVal);
};
- $scope.$on('$destroy', function() {
- // disable unknown option so that we don't do work when the whole select is being destroyed
- self.renderUnknownOption = noop;
- });
+ self.updateUnknownOption = function(val) {
+ var unknownVal = self.generateUnknownOptionValue(val);
+ self.unknownOption.val(unknownVal);
+ setOptionSelectedStatus(self.unknownOption, true);
+ $element.val(unknownVal);
+ };
+
+ self.generateUnknownOptionValue = function(val) {
+ return '? ' + hashKey(val) + ' ?';
+ };
self.removeUnknownOption = function() {
if (self.unknownOption.parent()) self.unknownOption.remove();
};
+ self.selectEmptyOption = function() {
+ if (self.emptyOption) {
+ $element.val('');
+ setOptionSelectedStatus(self.emptyOption, true);
+ }
+ };
+
+ self.unselectEmptyOption = function() {
+ if (self.hasEmptyOption) {
+ setOptionSelectedStatus(self.emptyOption, false);
+ }
+ };
+
+ $scope.$on('$destroy', function() {
+ // disable unknown option so that we don't do work when the whole select is being destroyed
+ self.renderUnknownOption = noop;
+ });
// Read the value of the select control, the implementation of this changes depending
// upon whether the select can have multiple values and whether ngOptions is at work.
self.readValue = function readSingleValue() {
- self.removeUnknownOption();
- return $element.val();
+ var val = $element.val();
+ // ngValue added option values are stored in the selectValueMap, normal interpolations are not
+ var realVal = val in self.selectValueMap ? self.selectValueMap[val] : val;
+
+ if (self.hasOption(realVal)) {
+ return realVal;
+ }
+
+ return null;
};
// Write the value to the select control, the implementation of this changes depending
// upon whether the select can have multiple values and whether ngOptions is at work.
self.writeValue = function writeSingleValue(value) {
+ // Make sure to remove the selected attribute from the previously selected option
+ // Otherwise, screen readers might get confused
+ var currentlySelectedOption = $element[0].options[$element[0].selectedIndex];
+ if (currentlySelectedOption) setOptionSelectedStatus(jqLite(currentlySelectedOption), false);
+
if (self.hasOption(value)) {
self.removeUnknownOption();
- $element.val(value);
- if (value === '') self.emptyOption.prop('selected', true); // to make IE9 happy
+
+ var hashedVal = hashKey(value);
+ $element.val(hashedVal in self.selectValueMap ? hashedVal : value);
+
+ // Set selected attribute and property on selected option for screen readers
+ var selectedOption = $element[0].options[$element[0].selectedIndex];
+ setOptionSelectedStatus(jqLite(selectedOption), true);
} else {
- if (value == null && self.emptyOption) {
- self.removeUnknownOption();
- $element.val('');
- } else {
- self.renderUnknownOption(value);
- }
+ self.selectUnknownOrEmptyOption(value);
}
};
@@ -28898,12 +32675,14 @@ var SelectController =
assertNotHasOwnProperty(value, '"option value"');
if (value === '') {
+ self.hasEmptyOption = true;
self.emptyOption = element;
}
var count = optionsMap.get(value) || 0;
- optionsMap.put(value, count + 1);
- self.ngModelCtrl.$render();
- chromeHack(element);
+ optionsMap.set(value, count + 1);
+ // Only render at the end of a digest. This improves render performance when many options
+ // are added during a digest and ensures all relevant options are correctly marked as selected
+ scheduleRender();
};
// Tell the select control that an option, with the given value, has been removed
@@ -28911,12 +32690,13 @@ var SelectController =
var count = optionsMap.get(value);
if (count) {
if (count === 1) {
- optionsMap.remove(value);
+ optionsMap.delete(value);
if (value === '') {
+ self.hasEmptyOption = false;
self.emptyOption = undefined;
}
} else {
- optionsMap.put(value, count - 1);
+ optionsMap.set(value, count - 1);
}
}
};
@@ -28926,36 +32706,185 @@ var SelectController =
return !!optionsMap.get(value);
};
+ /**
+ * @ngdoc method
+ * @name select.SelectController#$hasEmptyOption
+ *
+ * @description
+ *
+ * Returns `true` if the select element currently has an empty option
+ * element, i.e. an option that signifies that the select is empty / the selection is null.
+ *
+ */
+ self.$hasEmptyOption = function() {
+ return self.hasEmptyOption;
+ };
+
+ /**
+ * @ngdoc method
+ * @name select.SelectController#$isUnknownOptionSelected
+ *
+ * @description
+ *
+ * Returns `true` if the select element's unknown option is selected. The unknown option is added
+ * and automatically selected whenever the select model doesn't match any option.
+ *
+ */
+ self.$isUnknownOptionSelected = function() {
+ // Presence of the unknown option means it is selected
+ return $element[0].options[0] === self.unknownOption[0];
+ };
+
+ /**
+ * @ngdoc method
+ * @name select.SelectController#$isEmptyOptionSelected
+ *
+ * @description
+ *
+ * Returns `true` if the select element has an empty option and this empty option is currently
+ * selected. Returns `false` if the select element has no empty option or it is not selected.
+ *
+ */
+ self.$isEmptyOptionSelected = function() {
+ return self.hasEmptyOption && $element[0].options[$element[0].selectedIndex] === self.emptyOption[0];
+ };
+
+ self.selectUnknownOrEmptyOption = function(value) {
+ if (value == null && self.emptyOption) {
+ self.removeUnknownOption();
+ self.selectEmptyOption();
+ } else if (self.unknownOption.parent().length) {
+ self.updateUnknownOption(value);
+ } else {
+ self.renderUnknownOption(value);
+ }
+ };
+
+ var renderScheduled = false;
+ function scheduleRender() {
+ if (renderScheduled) return;
+ renderScheduled = true;
+ $scope.$$postDigest(function() {
+ renderScheduled = false;
+ self.ngModelCtrl.$render();
+ });
+ }
+
+ var updateScheduled = false;
+ function scheduleViewValueUpdate(renderAfter) {
+ if (updateScheduled) return;
+
+ updateScheduled = true;
+
+ $scope.$$postDigest(function() {
+ if ($scope.$$destroyed) return;
+
+ updateScheduled = false;
+ self.ngModelCtrl.$setViewValue(self.readValue());
+ if (renderAfter) self.ngModelCtrl.$render();
+ });
+ }
+
self.registerOption = function(optionScope, optionElement, optionAttrs, interpolateValueFn, interpolateTextFn) {
- if (interpolateValueFn) {
+ if (optionAttrs.$attr.ngValue) {
+ // The value attribute is set by ngValue
+ var oldVal, hashedVal = NaN;
+ optionAttrs.$observe('value', function valueAttributeObserveAction(newVal) {
+
+ var removal;
+ var previouslySelected = optionElement.prop('selected');
+
+ if (isDefined(hashedVal)) {
+ self.removeOption(oldVal);
+ delete self.selectValueMap[hashedVal];
+ removal = true;
+ }
+
+ hashedVal = hashKey(newVal);
+ oldVal = newVal;
+ self.selectValueMap[hashedVal] = newVal;
+ self.addOption(newVal, optionElement);
+ // Set the attribute directly instead of using optionAttrs.$set - this stops the observer
+ // from firing a second time. Other $observers on value will also get the result of the
+ // ngValue expression, not the hashed value
+ optionElement.attr('value', hashedVal);
+
+ if (removal && previouslySelected) {
+ scheduleViewValueUpdate();
+ }
+
+ });
+ } else if (interpolateValueFn) {
// The value attribute is interpolated
- var oldVal;
optionAttrs.$observe('value', function valueAttributeObserveAction(newVal) {
+ // This method is overwritten in ngOptions and has side-effects!
+ self.readValue();
+
+ var removal;
+ var previouslySelected = optionElement.prop('selected');
+
if (isDefined(oldVal)) {
self.removeOption(oldVal);
+ removal = true;
}
oldVal = newVal;
self.addOption(newVal, optionElement);
+
+ if (removal && previouslySelected) {
+ scheduleViewValueUpdate();
+ }
});
} else if (interpolateTextFn) {
// The text content is interpolated
optionScope.$watch(interpolateTextFn, function interpolateWatchAction(newVal, oldVal) {
optionAttrs.$set('value', newVal);
+ var previouslySelected = optionElement.prop('selected');
if (oldVal !== newVal) {
self.removeOption(oldVal);
}
self.addOption(newVal, optionElement);
+
+ if (oldVal && previouslySelected) {
+ scheduleViewValueUpdate();
+ }
});
} else {
// The value attribute is static
self.addOption(optionAttrs.value, optionElement);
}
+
+ optionAttrs.$observe('disabled', function(newVal) {
+
+ // Since model updates will also select disabled options (like ngOptions),
+ // we only have to handle options becoming disabled, not enabled
+
+ if (newVal === 'true' || newVal && optionElement.prop('selected')) {
+ if (self.multiple) {
+ scheduleViewValueUpdate(true);
+ } else {
+ self.ngModelCtrl.$setViewValue(null);
+ self.ngModelCtrl.$render();
+ }
+ }
+ });
+
optionElement.on('$destroy', function() {
- self.removeOption(optionAttrs.value);
- self.ngModelCtrl.$render();
+ var currentValue = self.readValue();
+ var removeValue = optionAttrs.value;
+
+ self.removeOption(removeValue);
+ scheduleRender();
+
+ if (self.multiple && currentValue && currentValue.indexOf(removeValue) !== -1 ||
+ currentValue === removeValue
+ ) {
+ // When multiple (selected) options are destroyed at the same time, we don't want
+ // to run a model update for each of them. Instead, run a single update in the $$postDigest
+ scheduleViewValueUpdate(true);
+ }
});
};
}];
@@ -28966,7 +32895,7 @@ var SelectController =
* @restrict E
*
* @description
- * HTML `SELECT` element with angular data-binding.
+ * HTML `select` element with angular data-binding.
*
* The `select` directive is used together with {@link ngModel `ngModel`} to provide data-binding
* between the scope and the `<select>` control (including setting default values).
@@ -28976,14 +32905,27 @@ var SelectController =
* When an item in the `<select>` menu is selected, the value of the selected option will be bound
* to the model identified by the `ngModel` directive. With static or repeated options, this is
* the content of the `value` attribute or the textContent of the `<option>`, if the value attribute is missing.
- * If you want dynamic value attributes, you can use interpolation inside the value attribute.
+ * Value and textContent can be interpolated.
*
- * <div class="alert alert-warning">
- * Note that the value of a `select` directive used without `ngOptions` is always a string.
- * When the model needs to be bound to a non-string value, you must either explictly convert it
- * using a directive (see example below) or use `ngOptions` to specify the set of options.
- * This is because an option element can only be bound to string values at present.
- * </div>
+ * The {@link select.SelectController select controller} exposes utility functions that can be used
+ * to manipulate the select's behavior.
+ *
+ * ## Matching model and option values
+ *
+ * In general, the match between the model and an option is evaluated by strictly comparing the model
+ * value against the value of the available options.
+ *
+ * If you are setting the option value with the option's `value` attribute, or textContent, the
+ * value will always be a `string` which means that the model value must also be a string.
+ * Otherwise the `select` directive cannot match them correctly.
+ *
+ * To bind the model to a non-string value, you can use one of the following strategies:
+ * - the {@link ng.ngOptions `ngOptions`} directive
+ * ({@link ng.select#using-select-with-ngoptions-and-setting-a-default-value})
+ * - the {@link ng.ngValue `ngValue`} directive, which allows arbitrary expressions to be
+ * option values ({@link ng.select#using-ngvalue-to-bind-the-model-to-an-array-of-objects Example})
+ * - model $parsers / $formatters to convert the string value
+ * ({@link ng.select#binding-select-to-a-non-string-value-via-ngmodel-parsing-formatting Example})
*
* If the viewValue of `ngModel` does not match any of the options, then the control
* will automatically add an "unknown" option, which it then removes when the mismatch is resolved.
@@ -28992,13 +32934,17 @@ var SelectController =
* be nested into the `<select>` element. This element will then represent the `null` or "not selected"
* option. See example below for demonstration.
*
- * <div class="alert alert-info">
+ * ## Choosing between `ngRepeat` and `ngOptions`
+ *
* In many cases, `ngRepeat` can be used on `<option>` elements instead of {@link ng.directive:ngOptions
- * ngOptions} to achieve a similar result. However, `ngOptions` provides some benefits, such as
- * more flexibility in how the `<select>`'s model is assigned via the `select` **`as`** part of the
- * comprehension expression, and additionally in reducing memory and increasing speed by not creating
- * a new scope for each repeated instance.
- * </div>
+ * ngOptions} to achieve a similar result. However, `ngOptions` provides some benefits:
+ * - more flexibility in how the `<select>`'s model is assigned via the `select` **`as`** part of the
+ * comprehension expression
+ * - reduced memory consumption by not creating a new scope for each repeated instance
+ * - increased render speed by creating the options in a documentFragment instead of individually
+ *
+ * Specifically, select with repeated options slows down significantly starting at 2000 options in
+ * Chrome and Internet Explorer / Edge.
*
*
* @param {string} ngModel Assignable angular expression to data-bind to.
@@ -29013,6 +32959,21 @@ var SelectController =
* interaction with the select element.
* @param {string=} ngOptions sets the options that the select is populated with and defines what is
* set on the model on selection. See {@link ngOptions `ngOptions`}.
+ * @param {string=} ngAttrSize sets the size of the select element dynamically. Uses the
+ * {@link guide/interpolation#-ngattr-for-binding-to-arbitrary-attributes ngAttr} directive.
+ *
+ *
+ * @knownIssue
+ *
+ * In Firefox, the select model is only updated when the select element is blurred. For example,
+ * when switching between options with the keyboard, the select model is only set to the
+ * currently selected option when the select is blurred, e.g via tab key or clicking the mouse
+ * outside the select.
+ *
+ * This is due to an ambiguity in the select element specification. See the
+ * [issue on the Firefox bug tracker](https://bugzilla.mozilla.org/show_bug.cgi?id=126379)
+ * for more information, and this
+ * [Github comment for a workaround](https://github.com/angular/angular.js/issues/9134#issuecomment-130800488)
*
* @example
* ### Simple `select` elements with static options
@@ -29053,7 +33014,7 @@ var SelectController =
* $scope.data = {
* singleSelect: null,
* multipleSelect: [],
- * option1: 'option-1',
+ * option1: 'option-1'
* };
*
* $scope.forceUnknownOption = function() {
@@ -29064,34 +33025,65 @@ var SelectController =
*</example>
*
* ### Using `ngRepeat` to generate `select` options
- * <example name="ngrepeat-select" module="ngrepeatSelect">
+ * <example name="select-ngrepeat" module="ngrepeatSelect">
* <file name="index.html">
* <div ng-controller="ExampleController">
* <form name="myForm">
* <label for="repeatSelect"> Repeat select: </label>
- * <select name="repeatSelect" id="repeatSelect" ng-model="data.repeatSelect">
+ * <select name="repeatSelect" id="repeatSelect" ng-model="data.model">
* <option ng-repeat="option in data.availableOptions" value="{{option.id}}">{{option.name}}</option>
* </select>
* </form>
* <hr>
- * <tt>repeatSelect = {{data.repeatSelect}}</tt><br/>
+ * <tt>model = {{data.model}}</tt><br/>
* </div>
* </file>
* <file name="app.js">
* angular.module('ngrepeatSelect', [])
* .controller('ExampleController', ['$scope', function($scope) {
* $scope.data = {
- * repeatSelect: null,
+ * model: null,
* availableOptions: [
* {id: '1', name: 'Option A'},
* {id: '2', name: 'Option B'},
* {id: '3', name: 'Option C'}
- * ],
+ * ]
* };
* }]);
* </file>
*</example>
*
+ * ### Using `ngValue` to bind the model to an array of objects
+ * <example name="select-ngvalue" module="ngvalueSelect">
+ * <file name="index.html">
+ * <div ng-controller="ExampleController">
+ * <form name="myForm">
+ * <label for="ngvalueselect"> ngvalue select: </label>
+ * <select size="6" name="ngvalueselect" ng-model="data.model" multiple>
+ * <option ng-repeat="option in data.availableOptions" ng-value="option.value">{{option.name}}</option>
+ * </select>
+ * </form>
+ * <hr>
+ * <pre>model = {{data.model | json}}</pre><br/>
+ * </div>
+ * </file>
+ * <file name="app.js">
+ * angular.module('ngvalueSelect', [])
+ * .controller('ExampleController', ['$scope', function($scope) {
+ * $scope.data = {
+ * model: null,
+ * availableOptions: [
+ {value: 'myString', name: 'string'},
+ {value: 1, name: 'integer'},
+ {value: true, name: 'boolean'},
+ {value: null, name: 'null'},
+ {value: {prop: 'value'}, name: 'object'},
+ {value: ['a'], name: 'array'}
+ * ]
+ * };
+ * }]);
+ * </file>
+ *</example>
*
* ### Using `select` with `ngOptions` and setting a default value
* See the {@link ngOptions ngOptions documentation} for more `ngOptions` usage examples.
@@ -29157,7 +33149,6 @@ var SelectController =
* </file>
* <file name="protractor.js" type="protractor">
* it('should initialize to model', function() {
- * var select = element(by.css('select'));
* expect(element(by.model('model.id')).$('option:checked').getText()).toEqual('Two');
* });
* </file>
@@ -29179,11 +33170,16 @@ var selectDirective = function() {
function selectPreLink(scope, element, attr, ctrls) {
- // if ngModel is not defined, we don't need to do anything
+ var selectCtrl = ctrls[0];
var ngModelCtrl = ctrls[1];
- if (!ngModelCtrl) return;
- var selectCtrl = ctrls[0];
+ // if ngModel is not defined, we don't need to do anything but set the registerOption
+ // function to noop, so options don't get added internally
+ if (!ngModelCtrl) {
+ selectCtrl.registerOption = noop;
+ return;
+ }
+
selectCtrl.ngModelCtrl = ngModelCtrl;
@@ -29191,6 +33187,7 @@ var selectDirective = function() {
// to the `readValue` method, which can be changed if the select can have multiple
// selected values or if the options are being generated by `ngOptions`
element.on('change', function() {
+ selectCtrl.removeUnknownOption();
scope.$apply(function() {
ngModelCtrl.$setViewValue(selectCtrl.readValue());
});
@@ -29201,13 +33198,15 @@ var selectDirective = function() {
// we have to add an extra watch since ngModel doesn't work well with arrays - it
// doesn't trigger rendering if only an item in the array changes.
if (attr.multiple) {
+ selectCtrl.multiple = true;
// Read value now needs to check each option to see if it is selected
selectCtrl.readValue = function readMultipleValue() {
var array = [];
forEach(element.find('option'), function(option) {
- if (option.selected) {
- array.push(option.value);
+ if (option.selected && !option.disabled) {
+ var val = option.value;
+ array.push(val in selectCtrl.selectValueMap ? selectCtrl.selectValueMap[val] : val);
}
});
return array;
@@ -29215,9 +33214,22 @@ var selectDirective = function() {
// Write value now needs to set the selected property of each matching option
selectCtrl.writeValue = function writeMultipleValue(value) {
- var items = new HashMap(value);
forEach(element.find('option'), function(option) {
- option.selected = isDefined(items.get(option.value));
+ var shouldBeSelected = !!value && (includes(value, option.value) ||
+ includes(value, selectCtrl.selectValueMap[option.value]));
+ var currentlySelected = option.selected;
+
+ // Support: IE 9-11 only, Edge 12-15+
+ // In IE and Edge adding options to the selection via shift+click/UP/DOWN
+ // will de-select already selected options if "selected" on those options was set
+ // more than once (i.e. when the options were already selected)
+ // So we only modify the selected property if necessary.
+ // Note: this behavior cannot be replicated via unit tests because it only shows in the
+ // actual user interface.
+ if (shouldBeSelected !== currentlySelected) {
+ setOptionSelectedStatus(jqLite(option), shouldBeSelected);
+ }
+
});
};
@@ -29268,13 +33280,17 @@ var optionDirective = ['$interpolate', function($interpolate) {
restrict: 'E',
priority: 100,
compile: function(element, attr) {
- if (isDefined(attr.value)) {
+ var interpolateValueFn, interpolateTextFn;
+
+ if (isDefined(attr.ngValue)) {
+ // Will be handled by registerOption
+ } else if (isDefined(attr.value)) {
// If the value attribute is defined, check if it contains an interpolation
- var interpolateValueFn = $interpolate(attr.value, true);
+ interpolateValueFn = $interpolate(attr.value, true);
} else {
// If the value attribute is not defined then we fall back to the
// text content of the option element, which may be interpolated
- var interpolateTextFn = $interpolate(element.text(), true);
+ interpolateTextFn = $interpolate(element.text(), true);
if (!interpolateTextFn) {
attr.$set('value', element.text());
}
@@ -29296,14 +33312,10 @@ var optionDirective = ['$interpolate', function($interpolate) {
};
}];
-var styleDirective = valueFn({
- restrict: 'E',
- terminal: false
-});
-
/**
* @ngdoc directive
* @name ngRequired
+ * @restrict A
*
* @description
*
@@ -29560,7 +33572,7 @@ var maxlengthDirective = function() {
var maxlength = -1;
attr.$observe('maxlength', function(value) {
var intVal = toInt(value);
- maxlength = isNaN(intVal) ? -1 : intVal;
+ maxlength = isNumberNaN(intVal) ? -1 : intVal;
ctrl.$validate();
});
ctrl.$validators.maxlength = function(modelValue, viewValue) {
@@ -29654,15 +33666,15 @@ var minlengthDirective = function() {
};
if (window.angular.bootstrap) {
- //AngularJS is already loaded, so we can return here...
+ // AngularJS is already loaded, so we can return here...
if (window.console) {
console.log('WARNING: Tried to load angular more than once.');
}
return;
}
-//try to bind to jquery now so that one can write jqLite(document).ready()
-//but we will rebind on bootstrap again.
+// try to bind to jquery now so that one can write jqLite(fn)
+// but we will rebind on bootstrap again.
bindJQuery();
publishExternalAPI(angular);
@@ -29810,10 +33822,10 @@ $provide.value("$locale", {
});
}]);
- jqLite(document).ready(function() {
- angularInit(document, bootstrap);
+ jqLite(function() {
+ angularInit(window.document, bootstrap);
});
-})(window, document);
+})(window);
!window.angular.$$csp().noInlineStyle && window.angular.element(document.head).prepend('<style type="text/css">@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide:not(.ng-hide-animate){display:none !important;}ng\\:form{display:block;}.ng-animate-shim{visibility:hidden;}.ng-anchor{position:absolute;}</style>'); \ No newline at end of file
diff --git a/libs/bower_components/angular/angular.min.js b/libs/bower_components/angular/angular.min.js
index da8fc6f7ba..1e34091a2e 100644
--- a/libs/bower_components/angular/angular.min.js
+++ b/libs/bower_components/angular/angular.min.js
@@ -1,301 +1,334 @@
/*
- AngularJS v1.4.10
- (c) 2010-2015 Google, Inc. http://angularjs.org
+ AngularJS v1.6.5
+ (c) 2010-2017 Google, Inc. http://angularjs.org
License: MIT
*/
-(function(U,W,v){'use strict';function L(a){return function(){var b=arguments[0],d;d="["+(a?a+":":"")+b+"] http://errors.angularjs.org/1.4.10/"+(a?a+"/":"")+b;for(b=1;b<arguments.length;b++){d=d+(1==b?"?":"&")+"p"+(b-1)+"=";var c=encodeURIComponent,e;e=arguments[b];e="function"==typeof e?e.toString().replace(/ \{[\s\S]*$/,""):"undefined"==typeof e?"undefined":"string"!=typeof e?JSON.stringify(e):e;d+=c(e)}return Error(d)}}function za(a){if(null==a||Ya(a))return!1;if(K(a)||H(a)||z&&a instanceof z)return!0;
-var b="length"in Object(a)&&a.length;return O(b)&&(0<=b&&(b-1 in a||a instanceof Array)||"function"==typeof a.item)}function p(a,b,d){var c,e;if(a)if(E(a))for(c in a)"prototype"==c||"length"==c||"name"==c||a.hasOwnProperty&&!a.hasOwnProperty(c)||b.call(d,a[c],c,a);else if(K(a)||za(a)){var f="object"!==typeof a;c=0;for(e=a.length;c<e;c++)(f||c in a)&&b.call(d,a[c],c,a)}else if(a.forEach&&a.forEach!==p)a.forEach(b,d,a);else if(nc(a))for(c in a)b.call(d,a[c],c,a);else if("function"===typeof a.hasOwnProperty)for(c in a)a.hasOwnProperty(c)&&
-b.call(d,a[c],c,a);else for(c in a)sa.call(a,c)&&b.call(d,a[c],c,a);return a}function oc(a,b,d){for(var c=Object.keys(a).sort(),e=0;e<c.length;e++)b.call(d,a[c[e]],c[e]);return c}function pc(a){return function(b,d){a(d,b)}}function Xd(){return++mb}function Mb(a,b,d){for(var c=a.$$hashKey,e=0,f=b.length;e<f;++e){var g=b[e];if(I(g)||E(g))for(var h=Object.keys(g),k=0,m=h.length;k<m;k++){var l=h[k],n=g[l];d&&I(n)?da(n)?a[l]=new Date(n.valueOf()):La(n)?a[l]=new RegExp(n):n.nodeName?a[l]=n.cloneNode(!0):
-Nb(n)?a[l]=n.clone():(I(a[l])||(a[l]=K(n)?[]:{}),Mb(a[l],[n],!0)):a[l]=n}}c?a.$$hashKey=c:delete a.$$hashKey;return a}function M(a){return Mb(a,ta.call(arguments,1),!1)}function Yd(a){return Mb(a,ta.call(arguments,1),!0)}function ea(a){return parseInt(a,10)}function Ob(a,b){return M(Object.create(a),b)}function y(){}function Za(a){return a}function na(a){return function(){return a}}function qc(a){return E(a.toString)&&a.toString!==oa}function r(a){return"undefined"===typeof a}function x(a){return"undefined"!==
-typeof a}function I(a){return null!==a&&"object"===typeof a}function nc(a){return null!==a&&"object"===typeof a&&!rc(a)}function H(a){return"string"===typeof a}function O(a){return"number"===typeof a}function da(a){return"[object Date]"===oa.call(a)}function E(a){return"function"===typeof a}function La(a){return"[object RegExp]"===oa.call(a)}function Ya(a){return a&&a.window===a}function $a(a){return a&&a.$evalAsync&&a.$watch}function Ma(a){return"boolean"===typeof a}function sc(a){return a&&O(a.length)&&
-Zd.test(oa.call(a))}function Nb(a){return!(!a||!(a.nodeName||a.prop&&a.attr&&a.find))}function $d(a){var b={};a=a.split(",");var d;for(d=0;d<a.length;d++)b[a[d]]=!0;return b}function pa(a){return F(a.nodeName||a[0]&&a[0].nodeName)}function ab(a,b){var d=a.indexOf(b);0<=d&&a.splice(d,1);return d}function Na(a,b){function d(a,b){var d=b.$$hashKey,e;if(K(a)){e=0;for(var f=a.length;e<f;e++)b.push(c(a[e]))}else if(nc(a))for(e in a)b[e]=c(a[e]);else if(a&&"function"===typeof a.hasOwnProperty)for(e in a)a.hasOwnProperty(e)&&
-(b[e]=c(a[e]));else for(e in a)sa.call(a,e)&&(b[e]=c(a[e]));d?b.$$hashKey=d:delete b.$$hashKey;return b}function c(a){if(!I(a))return a;var b=e.indexOf(a);if(-1!==b)return f[b];if(Ya(a)||$a(a))throw Aa("cpws");var b=!1,c;K(a)?(c=[],b=!0):sc(a)?c=new a.constructor(a):da(a)?c=new Date(a.getTime()):La(a)?(c=new RegExp(a.source,a.toString().match(/[^\/]*$/)[0]),c.lastIndex=a.lastIndex):"[object Blob]"===oa.call(a)?c=new a.constructor([a],{type:a.type}):E(a.cloneNode)?c=a.cloneNode(!0):(c=Object.create(rc(a)),
-b=!0);e.push(a);f.push(c);return b?d(a,c):c}var e=[],f=[];if(b){if(sc(b))throw Aa("cpta");if(a===b)throw Aa("cpi");K(b)?b.length=0:p(b,function(a,c){"$$hashKey"!==c&&delete b[c]});e.push(a);f.push(b);return d(a,b)}return c(a)}function ha(a,b){if(K(a)){b=b||[];for(var d=0,c=a.length;d<c;d++)b[d]=a[d]}else if(I(a))for(d in b=b||{},a)if("$"!==d.charAt(0)||"$"!==d.charAt(1))b[d]=a[d];return b||a}function ma(a,b){if(a===b)return!0;if(null===a||null===b)return!1;if(a!==a&&b!==b)return!0;var d=typeof a,
-c;if(d==typeof b&&"object"==d)if(K(a)){if(!K(b))return!1;if((d=a.length)==b.length){for(c=0;c<d;c++)if(!ma(a[c],b[c]))return!1;return!0}}else{if(da(a))return da(b)?ma(a.getTime(),b.getTime()):!1;if(La(a))return La(b)?a.toString()==b.toString():!1;if($a(a)||$a(b)||Ya(a)||Ya(b)||K(b)||da(b)||La(b))return!1;d=aa();for(c in a)if("$"!==c.charAt(0)&&!E(a[c])){if(!ma(a[c],b[c]))return!1;d[c]=!0}for(c in b)if(!(c in d)&&"$"!==c.charAt(0)&&x(b[c])&&!E(b[c]))return!1;return!0}return!1}function bb(a,b,d){return a.concat(ta.call(b,
-d))}function tc(a,b){var d=2<arguments.length?ta.call(arguments,2):[];return!E(b)||b instanceof RegExp?b:d.length?function(){return arguments.length?b.apply(a,bb(d,arguments,0)):b.apply(a,d)}:function(){return arguments.length?b.apply(a,arguments):b.call(a)}}function ae(a,b){var d=b;"string"===typeof a&&"$"===a.charAt(0)&&"$"===a.charAt(1)?d=v:Ya(b)?d="$WINDOW":b&&W===b?d="$DOCUMENT":$a(b)&&(d="$SCOPE");return d}function cb(a,b){if(r(a))return v;O(b)||(b=b?2:null);return JSON.stringify(a,ae,b)}function uc(a){return H(a)?
-JSON.parse(a):a}function vc(a,b){a=a.replace(be,"");var d=Date.parse("Jan 01, 1970 00:00:00 "+a)/6E4;return isNaN(d)?b:d}function Pb(a,b,d){d=d?-1:1;var c=a.getTimezoneOffset();b=vc(b,c);d*=b-c;a=new Date(a.getTime());a.setMinutes(a.getMinutes()+d);return a}function ua(a){a=z(a).clone();try{a.empty()}catch(b){}var d=z("<div>").append(a).html();try{return a[0].nodeType===Oa?F(d):d.match(/^(<[^>]+>)/)[1].replace(/^<([\w\-]+)/,function(a,b){return"<"+F(b)})}catch(c){return F(d)}}function wc(a){try{return decodeURIComponent(a)}catch(b){}}
-function xc(a){var b={};p((a||"").split("&"),function(a){var c,e,f;a&&(e=a=a.replace(/\+/g,"%20"),c=a.indexOf("="),-1!==c&&(e=a.substring(0,c),f=a.substring(c+1)),e=wc(e),x(e)&&(f=x(f)?wc(f):!0,sa.call(b,e)?K(b[e])?b[e].push(f):b[e]=[b[e],f]:b[e]=f))});return b}function Qb(a){var b=[];p(a,function(a,c){K(a)?p(a,function(a){b.push(ia(c,!0)+(!0===a?"":"="+ia(a,!0)))}):b.push(ia(c,!0)+(!0===a?"":"="+ia(a,!0)))});return b.length?b.join("&"):""}function nb(a){return ia(a,!0).replace(/%26/gi,"&").replace(/%3D/gi,
-"=").replace(/%2B/gi,"+")}function ia(a,b){return encodeURIComponent(a).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%3B/gi,";").replace(/%20/g,b?"%20":"+")}function ce(a,b){var d,c,e=Pa.length;for(c=0;c<e;++c)if(d=Pa[c]+b,H(d=a.getAttribute(d)))return d;return null}function de(a,b){var d,c,e={};p(Pa,function(b){b+="app";!d&&a.hasAttribute&&a.hasAttribute(b)&&(d=a,c=a.getAttribute(b))});p(Pa,function(b){b+="app";var e;!d&&(e=a.querySelector("["+b.replace(":",
-"\\:")+"]"))&&(d=e,c=e.getAttribute(b))});d&&(e.strictDi=null!==ce(d,"strict-di"),b(d,c?[c]:[],e))}function yc(a,b,d){I(d)||(d={});d=M({strictDi:!1},d);var c=function(){a=z(a);if(a.injector()){var c=a[0]===W?"document":ua(a);throw Aa("btstrpd",c.replace(/</,"&lt;").replace(/>/,"&gt;"));}b=b||[];b.unshift(["$provide",function(b){b.value("$rootElement",a)}]);d.debugInfoEnabled&&b.push(["$compileProvider",function(a){a.debugInfoEnabled(!0)}]);b.unshift("ng");c=db(b,d.strictDi);c.invoke(["$rootScope",
-"$rootElement","$compile","$injector",function(a,b,c,d){a.$apply(function(){b.data("$injector",d);c(b)(a)})}]);return c},e=/^NG_ENABLE_DEBUG_INFO!/,f=/^NG_DEFER_BOOTSTRAP!/;U&&e.test(U.name)&&(d.debugInfoEnabled=!0,U.name=U.name.replace(e,""));if(U&&!f.test(U.name))return c();U.name=U.name.replace(f,"");fa.resumeBootstrap=function(a){p(a,function(a){b.push(a)});return c()};E(fa.resumeDeferredBootstrap)&&fa.resumeDeferredBootstrap()}function ee(){U.name="NG_ENABLE_DEBUG_INFO!"+U.name;U.location.reload()}
-function fe(a){a=fa.element(a).injector();if(!a)throw Aa("test");return a.get("$$testability")}function zc(a,b){b=b||"_";return a.replace(ge,function(a,c){return(c?b:"")+a.toLowerCase()})}function he(){var a;if(!Ac){var b=ob();(qa=r(b)?U.jQuery:b?U[b]:v)&&qa.fn.on?(z=qa,M(qa.fn,{scope:Qa.scope,isolateScope:Qa.isolateScope,controller:Qa.controller,injector:Qa.injector,inheritedData:Qa.inheritedData}),a=qa.cleanData,qa.cleanData=function(b){var c;if(Rb)Rb=!1;else for(var e=0,f;null!=(f=b[e]);e++)(c=
-qa._data(f,"events"))&&c.$destroy&&qa(f).triggerHandler("$destroy");a(b)}):z=R;fa.element=z;Ac=!0}}function pb(a,b,d){if(!a)throw Aa("areq",b||"?",d||"required");return a}function Ra(a,b,d){d&&K(a)&&(a=a[a.length-1]);pb(E(a),b,"not a function, got "+(a&&"object"===typeof a?a.constructor.name||"Object":typeof a));return a}function Sa(a,b){if("hasOwnProperty"===a)throw Aa("badname",b);}function Bc(a,b,d){if(!b)return a;b=b.split(".");for(var c,e=a,f=b.length,g=0;g<f;g++)c=b[g],a&&(a=(e=a)[c]);return!d&&
-E(a)?tc(e,a):a}function qb(a){for(var b=a[0],d=a[a.length-1],c,e=1;b!==d&&(b=b.nextSibling);e++)if(c||a[e]!==b)c||(c=z(ta.call(a,0,e))),c.push(b);return c||a}function aa(){return Object.create(null)}function ie(a){function b(a,b,c){return a[b]||(a[b]=c())}var d=L("$injector"),c=L("ng");a=b(a,"angular",Object);a.$$minErr=a.$$minErr||L;return b(a,"module",function(){var a={};return function(f,g,h){if("hasOwnProperty"===f)throw c("badname","module");g&&a.hasOwnProperty(f)&&(a[f]=null);return b(a,f,function(){function a(b,
-d,e,f){f||(f=c);return function(){f[e||"push"]([b,d,arguments]);return u}}function b(a,d){return function(b,e){e&&E(e)&&(e.$$moduleName=f);c.push([a,d,arguments]);return u}}if(!g)throw d("nomod",f);var c=[],e=[],G=[],A=a("$injector","invoke","push",e),u={_invokeQueue:c,_configBlocks:e,_runBlocks:G,requires:g,name:f,provider:b("$provide","provider"),factory:b("$provide","factory"),service:b("$provide","service"),value:a("$provide","value"),constant:a("$provide","constant","unshift"),decorator:b("$provide",
-"decorator"),animation:b("$animateProvider","register"),filter:b("$filterProvider","register"),controller:b("$controllerProvider","register"),directive:b("$compileProvider","directive"),config:A,run:function(a){G.push(a);return this}};h&&A(h);return u})}})}function je(a){M(a,{bootstrap:yc,copy:Na,extend:M,merge:Yd,equals:ma,element:z,forEach:p,injector:db,noop:y,bind:tc,toJson:cb,fromJson:uc,identity:Za,isUndefined:r,isDefined:x,isString:H,isFunction:E,isObject:I,isNumber:O,isElement:Nb,isArray:K,
-version:ke,isDate:da,lowercase:F,uppercase:rb,callbacks:{counter:0},getTestability:fe,$$minErr:L,$$csp:Ba,reloadWithDebugInfo:ee});Sb=ie(U);Sb("ng",["ngLocale"],["$provide",function(a){a.provider({$$sanitizeUri:le});a.provider("$compile",Cc).directive({a:me,input:Dc,textarea:Dc,form:ne,script:oe,select:pe,style:qe,option:re,ngBind:se,ngBindHtml:te,ngBindTemplate:ue,ngClass:ve,ngClassEven:we,ngClassOdd:xe,ngCloak:ye,ngController:ze,ngForm:Ae,ngHide:Be,ngIf:Ce,ngInclude:De,ngInit:Ee,ngNonBindable:Fe,
-ngPluralize:Ge,ngRepeat:He,ngShow:Ie,ngStyle:Je,ngSwitch:Ke,ngSwitchWhen:Le,ngSwitchDefault:Me,ngOptions:Ne,ngTransclude:Oe,ngModel:Pe,ngList:Qe,ngChange:Re,pattern:Ec,ngPattern:Ec,required:Fc,ngRequired:Fc,minlength:Gc,ngMinlength:Gc,maxlength:Hc,ngMaxlength:Hc,ngValue:Se,ngModelOptions:Te}).directive({ngInclude:Ue}).directive(sb).directive(Ic);a.provider({$anchorScroll:Ve,$animate:We,$animateCss:Xe,$$animateJs:Ye,$$animateQueue:Ze,$$AnimateRunner:$e,$$animateAsyncRun:af,$browser:bf,$cacheFactory:cf,
-$controller:df,$document:ef,$exceptionHandler:ff,$filter:Jc,$$forceReflow:gf,$interpolate:hf,$interval:jf,$http:kf,$httpParamSerializer:lf,$httpParamSerializerJQLike:mf,$httpBackend:nf,$xhrFactory:of,$location:pf,$log:qf,$parse:rf,$rootScope:sf,$q:tf,$$q:uf,$sce:vf,$sceDelegate:wf,$sniffer:xf,$templateCache:yf,$templateRequest:zf,$$testability:Af,$timeout:Bf,$window:Cf,$$rAF:Df,$$jqLite:Ef,$$HashMap:Ff,$$cookieReader:Gf})}])}function eb(a){return a.replace(Hf,function(a,d,c,e){return e?c.toUpperCase():
-c}).replace(If,"Moz$1")}function Kc(a){a=a.nodeType;return 1===a||!a||9===a}function Lc(a,b){var d,c,e=b.createDocumentFragment(),f=[];if(Tb.test(a)){d=d||e.appendChild(b.createElement("div"));c=(Jf.exec(a)||["",""])[1].toLowerCase();c=ka[c]||ka._default;d.innerHTML=c[1]+a.replace(Kf,"<$1></$2>")+c[2];for(c=c[0];c--;)d=d.lastChild;f=bb(f,d.childNodes);d=e.firstChild;d.textContent=""}else f.push(b.createTextNode(a));e.textContent="";e.innerHTML="";p(f,function(a){e.appendChild(a)});return e}function Mc(a,
-b){var d=a.parentNode;d&&d.replaceChild(b,a);b.appendChild(a)}function R(a){if(a instanceof R)return a;var b;H(a)&&(a=V(a),b=!0);if(!(this instanceof R)){if(b&&"<"!=a.charAt(0))throw Ub("nosel");return new R(a)}if(b){b=W;var d;a=(d=Lf.exec(a))?[b.createElement(d[1])]:(d=Lc(a,b))?d.childNodes:[]}Nc(this,a)}function Vb(a){return a.cloneNode(!0)}function tb(a,b){b||ub(a);if(a.querySelectorAll)for(var d=a.querySelectorAll("*"),c=0,e=d.length;c<e;c++)ub(d[c])}function Oc(a,b,d,c){if(x(c))throw Ub("offargs");
-var e=(c=vb(a))&&c.events,f=c&&c.handle;if(f)if(b){var g=function(b){var c=e[b];x(d)&&ab(c||[],d);x(d)&&c&&0<c.length||(a.removeEventListener(b,f,!1),delete e[b])};p(b.split(" "),function(a){g(a);wb[a]&&g(wb[a])})}else for(b in e)"$destroy"!==b&&a.removeEventListener(b,f,!1),delete e[b]}function ub(a,b){var d=a.ng339,c=d&&fb[d];c&&(b?delete c.data[b]:(c.handle&&(c.events.$destroy&&c.handle({},"$destroy"),Oc(a)),delete fb[d],a.ng339=v))}function vb(a,b){var d=a.ng339,d=d&&fb[d];b&&!d&&(a.ng339=d=++Mf,
-d=fb[d]={events:{},data:{},handle:v});return d}function Wb(a,b,d){if(Kc(a)){var c=x(d),e=!c&&b&&!I(b),f=!b;a=(a=vb(a,!e))&&a.data;if(c)a[b]=d;else{if(f)return a;if(e)return a&&a[b];M(a,b)}}}function xb(a,b){return a.getAttribute?-1<(" "+(a.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ").indexOf(" "+b+" "):!1}function yb(a,b){b&&a.setAttribute&&p(b.split(" "),function(b){a.setAttribute("class",V((" "+(a.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ").replace(" "+V(b)+" "," ")))})}function zb(a,
-b){if(b&&a.setAttribute){var d=(" "+(a.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ");p(b.split(" "),function(a){a=V(a);-1===d.indexOf(" "+a+" ")&&(d+=a+" ")});a.setAttribute("class",V(d))}}function Nc(a,b){if(b)if(b.nodeType)a[a.length++]=b;else{var d=b.length;if("number"===typeof d&&b.window!==b){if(d)for(var c=0;c<d;c++)a[a.length++]=b[c]}else a[a.length++]=b}}function Pc(a,b){return Ab(a,"$"+(b||"ngController")+"Controller")}function Ab(a,b,d){9==a.nodeType&&(a=a.documentElement);for(b=
-K(b)?b:[b];a;){for(var c=0,e=b.length;c<e;c++)if(x(d=z.data(a,b[c])))return d;a=a.parentNode||11===a.nodeType&&a.host}}function Qc(a){for(tb(a,!0);a.firstChild;)a.removeChild(a.firstChild)}function Xb(a,b){b||tb(a);var d=a.parentNode;d&&d.removeChild(a)}function Nf(a,b){b=b||U;if("complete"===b.document.readyState)b.setTimeout(a);else z(b).on("load",a)}function Rc(a,b){var d=Bb[b.toLowerCase()];return d&&Sc[pa(a)]&&d}function Of(a,b){var d=function(c,d){c.isDefaultPrevented=function(){return c.defaultPrevented};
-var f=b[d||c.type],g=f?f.length:0;if(g){if(r(c.immediatePropagationStopped)){var h=c.stopImmediatePropagation;c.stopImmediatePropagation=function(){c.immediatePropagationStopped=!0;c.stopPropagation&&c.stopPropagation();h&&h.call(c)}}c.isImmediatePropagationStopped=function(){return!0===c.immediatePropagationStopped};var k=f.specialHandlerWrapper||Pf;1<g&&(f=ha(f));for(var m=0;m<g;m++)c.isImmediatePropagationStopped()||k(a,c,f[m])}};d.elem=a;return d}function Pf(a,b,d){d.call(a,b)}function Qf(a,b,
-d){var c=b.relatedTarget;c&&(c===a||Rf.call(a,c))||d.call(a,b)}function Ef(){this.$get=function(){return M(R,{hasClass:function(a,b){a.attr&&(a=a[0]);return xb(a,b)},addClass:function(a,b){a.attr&&(a=a[0]);return zb(a,b)},removeClass:function(a,b){a.attr&&(a=a[0]);return yb(a,b)}})}}function Ca(a,b){var d=a&&a.$$hashKey;if(d)return"function"===typeof d&&(d=a.$$hashKey()),d;d=typeof a;return d="function"==d||"object"==d&&null!==a?a.$$hashKey=d+":"+(b||Xd)():d+":"+a}function Ta(a,b){if(b){var d=0;this.nextUid=
-function(){return++d}}p(a,this.put,this)}function Sf(a){return(a=a.toString().replace(Tc,"").match(Uc))?"function("+(a[1]||"").replace(/[\s\r\n]+/," ")+")":"fn"}function db(a,b){function d(a){return function(b,c){if(I(b))p(b,pc(a));else return a(b,c)}}function c(a,b){Sa(a,"service");if(E(b)||K(b))b=G.instantiate(b);if(!b.$get)throw Da("pget",a);return n[a+"Provider"]=b}function e(a,b){return function(){var c=u.invoke(b,this);if(r(c))throw Da("undef",a);return c}}function f(a,b,d){return c(a,{$get:!1!==
-d?e(a,b):b})}function g(a){pb(r(a)||K(a),"modulesToLoad","not an array");var b=[],c;p(a,function(a){function d(a){var b,c;b=0;for(c=a.length;b<c;b++){var e=a[b],f=G.get(e[0]);f[e[1]].apply(f,e[2])}}if(!l.get(a)){l.put(a,!0);try{H(a)?(c=Sb(a),b=b.concat(g(c.requires)).concat(c._runBlocks),d(c._invokeQueue),d(c._configBlocks)):E(a)?b.push(G.invoke(a)):K(a)?b.push(G.invoke(a)):Ra(a,"module")}catch(e){throw K(a)&&(a=a[a.length-1]),e.message&&e.stack&&-1==e.stack.indexOf(e.message)&&(e=e.message+"\n"+
-e.stack),Da("modulerr",a,e.stack||e.message||e);}}});return b}function h(a,c){function d(b,e){if(a.hasOwnProperty(b)){if(a[b]===k)throw Da("cdep",b+" <- "+m.join(" <- "));return a[b]}try{return m.unshift(b),a[b]=k,a[b]=c(b,e)}catch(f){throw a[b]===k&&delete a[b],f;}finally{m.shift()}}function e(a,c,f,g){"string"===typeof f&&(g=f,f=null);var k=[],h=db.$$annotate(a,b,g),m,l,n;l=0;for(m=h.length;l<m;l++){n=h[l];if("string"!==typeof n)throw Da("itkn",n);k.push(f&&f.hasOwnProperty(n)?f[n]:d(n,g))}K(a)&&
-(a=a[m]);return a.apply(c,k)}return{invoke:e,instantiate:function(a,b,c){var d=Object.create((K(a)?a[a.length-1]:a).prototype||null);a=e(a,d,b,c);return I(a)||E(a)?a:d},get:d,annotate:db.$$annotate,has:function(b){return n.hasOwnProperty(b+"Provider")||a.hasOwnProperty(b)}}}b=!0===b;var k={},m=[],l=new Ta([],!0),n={$provide:{provider:d(c),factory:d(f),service:d(function(a,b){return f(a,["$injector",function(a){return a.instantiate(b)}])}),value:d(function(a,b){return f(a,na(b),!1)}),constant:d(function(a,
-b){Sa(a,"constant");n[a]=b;A[a]=b}),decorator:function(a,b){var c=G.get(a+"Provider"),d=c.$get;c.$get=function(){var a=u.invoke(d,c);return u.invoke(b,null,{$delegate:a})}}}},G=n.$injector=h(n,function(a,b){fa.isString(b)&&m.push(b);throw Da("unpr",m.join(" <- "));}),A={},u=A.$injector=h(A,function(a,b){var c=G.get(a+"Provider",b);return u.invoke(c.$get,c,v,a)});p(g(a),function(a){a&&u.invoke(a)});return u}function Ve(){var a=!0;this.disableAutoScrolling=function(){a=!1};this.$get=["$window","$location",
-"$rootScope",function(b,d,c){function e(a){var b=null;Array.prototype.some.call(a,function(a){if("a"===pa(a))return b=a,!0});return b}function f(a){if(a){a.scrollIntoView();var c;c=g.yOffset;E(c)?c=c():Nb(c)?(c=c[0],c="fixed"!==b.getComputedStyle(c).position?0:c.getBoundingClientRect().bottom):O(c)||(c=0);c&&(a=a.getBoundingClientRect().top,b.scrollBy(0,a-c))}else b.scrollTo(0,0)}function g(a){a=H(a)?a:d.hash();var b;a?(b=h.getElementById(a))?f(b):(b=e(h.getElementsByName(a)))?f(b):"top"===a&&f(null):
-f(null)}var h=b.document;a&&c.$watch(function(){return d.hash()},function(a,b){a===b&&""===a||Nf(function(){c.$evalAsync(g)})});return g}]}function gb(a,b){if(!a&&!b)return"";if(!a)return b;if(!b)return a;K(a)&&(a=a.join(" "));K(b)&&(b=b.join(" "));return a+" "+b}function Tf(a){H(a)&&(a=a.split(" "));var b=aa();p(a,function(a){a.length&&(b[a]=!0)});return b}function Ea(a){return I(a)?a:{}}function Uf(a,b,d,c){function e(a){try{a.apply(null,ta.call(arguments,1))}finally{if(u--,0===u)for(;S.length;)try{S.pop()()}catch(b){d.error(b)}}}
-function f(){D=null;g();h()}function g(){a:{try{q=l.state;break a}catch(a){}q=void 0}q=r(q)?null:q;ma(q,C)&&(q=C);C=q}function h(){if(t!==k.url()||w!==q)t=k.url(),w=q,p(T,function(a){a(k.url(),q)})}var k=this,m=a.location,l=a.history,n=a.setTimeout,G=a.clearTimeout,A={};k.isMock=!1;var u=0,S=[];k.$$completeOutstandingRequest=e;k.$$incOutstandingRequestCount=function(){u++};k.notifyWhenNoOutstandingRequests=function(a){0===u?a():S.push(a)};var q,w,t=m.href,N=b.find("base"),D=null;g();w=q;k.url=function(b,
-d,e){r(e)&&(e=null);m!==a.location&&(m=a.location);l!==a.history&&(l=a.history);if(b){var f=w===e;if(t===b&&(!c.history||f))return k;var h=t&&Fa(t)===Fa(b);t=b;w=e;if(!c.history||h&&f){if(!h||D)D=b;d?m.replace(b):h?(d=m,e=b.indexOf("#"),e=-1===e?"":b.substr(e),d.hash=e):m.href=b;m.href!==b&&(D=b)}else l[d?"replaceState":"pushState"](e,"",b),g(),w=q;return k}return D||m.href.replace(/%27/g,"'")};k.state=function(){return q};var T=[],B=!1,C=null;k.onUrlChange=function(b){if(!B){if(c.history)z(a).on("popstate",
-f);z(a).on("hashchange",f);B=!0}T.push(b);return b};k.$$applicationDestroyed=function(){z(a).off("hashchange popstate",f)};k.$$checkUrlChange=h;k.baseHref=function(){var a=N.attr("href");return a?a.replace(/^(https?\:)?\/\/[^\/]*/,""):""};k.defer=function(a,b){var c;u++;c=n(function(){delete A[c];e(a)},b||0);A[c]=!0;return c};k.defer.cancel=function(a){return A[a]?(delete A[a],G(a),e(y),!0):!1}}function bf(){this.$get=["$window","$log","$sniffer","$document",function(a,b,d,c){return new Uf(a,c,b,
-d)}]}function cf(){this.$get=function(){function a(a,c){function e(a){a!=n&&(G?G==a&&(G=a.n):G=a,f(a.n,a.p),f(a,n),n=a,n.n=null)}function f(a,b){a!=b&&(a&&(a.p=b),b&&(b.n=a))}if(a in b)throw L("$cacheFactory")("iid",a);var g=0,h=M({},c,{id:a}),k=aa(),m=c&&c.capacity||Number.MAX_VALUE,l=aa(),n=null,G=null;return b[a]={put:function(a,b){if(!r(b)){if(m<Number.MAX_VALUE){var c=l[a]||(l[a]={key:a});e(c)}a in k||g++;k[a]=b;g>m&&this.remove(G.key);return b}},get:function(a){if(m<Number.MAX_VALUE){var b=
-l[a];if(!b)return;e(b)}return k[a]},remove:function(a){if(m<Number.MAX_VALUE){var b=l[a];if(!b)return;b==n&&(n=b.p);b==G&&(G=b.n);f(b.n,b.p);delete l[a]}a in k&&(delete k[a],g--)},removeAll:function(){k=aa();g=0;l=aa();n=G=null},destroy:function(){l=h=k=null;delete b[a]},info:function(){return M({},h,{size:g})}}}var b={};a.info=function(){var a={};p(b,function(b,e){a[e]=b.info()});return a};a.get=function(a){return b[a]};return a}}function yf(){this.$get=["$cacheFactory",function(a){return a("templates")}]}
-function Cc(a,b){function d(a,b,c){var d=/^\s*([@&]|=(\*?))(\??)\s*(\w*)\s*$/,e={};p(a,function(a,f){if(a in l)e[f]=l[a];else{var g=a.match(d);if(!g)throw ga("iscp",b,f,a,c?"controller bindings definition":"isolate scope definition");e[f]={mode:g[1][0],collection:"*"===g[2],optional:"?"===g[3],attrName:g[4]||f};g[4]&&(l[a]=e[f])}});return e}function c(a){var b=a.charAt(0);if(!b||b!==F(b))throw ga("baddir",a);if(a!==a.trim())throw ga("baddir",a);}var e={},f=/^\s*directive\:\s*([\w\-]+)\s+(.*)$/,g=
-/(([\w\-]+)(?:\:([^;]+))?;?)/,h=$d("ngSrc,ngSrcset,src,srcset"),k=/^(?:(\^\^?)?(\?)?(\^\^?)?)?/,m=/^(on[a-z]+|formaction)$/,l=aa();this.directive=function A(b,d){Sa(b,"directive");H(b)?(c(b),pb(d,"directiveFactory"),e.hasOwnProperty(b)||(e[b]=[],a.factory(b+"Directive",["$injector","$exceptionHandler",function(a,c){var d=[];p(e[b],function(e,f){try{var g=a.invoke(e);E(g)?g={compile:na(g)}:!g.compile&&g.link&&(g.compile=na(g.link));g.priority=g.priority||0;g.index=f;g.name=g.name||b;g.require=g.require||
-g.controller&&g.name;g.restrict=g.restrict||"EA";g.$$moduleName=e.$$moduleName;d.push(g)}catch(h){c(h)}});return d}])),e[b].push(d)):p(b,pc(A));return this};this.aHrefSanitizationWhitelist=function(a){return x(a)?(b.aHrefSanitizationWhitelist(a),this):b.aHrefSanitizationWhitelist()};this.imgSrcSanitizationWhitelist=function(a){return x(a)?(b.imgSrcSanitizationWhitelist(a),this):b.imgSrcSanitizationWhitelist()};var n=!0;this.debugInfoEnabled=function(a){return x(a)?(n=a,this):n};this.$get=["$injector",
-"$interpolate","$exceptionHandler","$templateRequest","$parse","$controller","$rootScope","$sce","$animate","$$sanitizeUri",function(a,b,c,l,w,t,N,D,T,B){function C(a,b){try{a.addClass(b)}catch(c){}}function J(a,b,c,d,e){a instanceof z||(a=z(a));for(var f=/\S+/,g=0,h=a.length;g<h;g++){var k=a[g];k.nodeType===Oa&&k.nodeValue.match(f)&&Mc(k,a[g]=W.createElement("span"))}var m=X(a,b,a,c,d,e);J.$$addScopeClass(a);var l=null;return function(b,c,d){pb(b,"scope");e&&e.needsNewScope&&(b=b.$parent.$new());
-d=d||{};var f=d.parentBoundTranscludeFn,g=d.transcludeControllers;d=d.futureParentElement;f&&f.$$boundTransclude&&(f=f.$$boundTransclude);l||(l=(d=d&&d[0])?"foreignobject"!==pa(d)&&d.toString().match(/SVG/)?"svg":"html":"html");d="html"!==l?z(Yb(l,z("<div>").append(a).html())):c?Qa.clone.call(a):a;if(g)for(var h in g)d.data("$"+h+"Controller",g[h].instance);J.$$addScopeInfo(d,b);c&&c(d,b);m&&m(b,d,d,f);return d}}function X(a,b,c,d,e,f){function g(a,c,d,e){var f,k,m,l,n,B,t;if(q)for(t=Array(c.length),
-l=0;l<h.length;l+=3)f=h[l],t[f]=c[f];else t=c;l=0;for(n=h.length;l<n;)k=t[h[l++]],c=h[l++],f=h[l++],c?(c.scope?(m=a.$new(),J.$$addScopeInfo(z(k),m)):m=a,B=c.transcludeOnThisElement?P(a,c.transclude,e):!c.templateOnThisElement&&e?e:!e&&b?P(a,b):null,c(f,m,k,d,B)):f&&f(a,k.childNodes,v,e)}for(var h=[],k,m,l,n,q,B=0;B<a.length;B++){k=new fa;m=ja(a[B],[],k,0===B?d:v,e);(f=m.length?$(m,a[B],k,b,c,null,[],[],f):null)&&f.scope&&J.$$addScopeClass(k.$$element);k=f&&f.terminal||!(l=a[B].childNodes)||!l.length?
-null:X(l,f?(f.transcludeOnThisElement||!f.templateOnThisElement)&&f.transclude:b);if(f||k)h.push(B,f,k),n=!0,q=q||f;f=null}return n?g:null}function P(a,b,c){return function(d,e,f,g,h){d||(d=a.$new(!1,h),d.$$transcluded=!0);return b(d,e,{parentBoundTranscludeFn:c,transcludeControllers:f,futureParentElement:g})}}function ja(a,b,c,d,e){var h=c.$attr,k;switch(a.nodeType){case 1:Q(b,va(pa(a)),"E",d,e);for(var m,l,n,q=a.attributes,B=0,t=q&&q.length;B<t;B++){var S=!1,J=!1;m=q[B];k=m.name;l=V(m.value);m=
-va(k);if(n=ka.test(m))k=k.replace(Wc,"").substr(8).replace(/_(.)/g,function(a,b){return b.toUpperCase()});(m=m.match(la))&&L(m[1])&&(S=k,J=k.substr(0,k.length-5)+"end",k=k.substr(0,k.length-6));m=va(k.toLowerCase());h[m]=k;if(n||!c.hasOwnProperty(m))c[m]=l,Rc(a,m)&&(c[m]=!0);Y(a,b,l,m,n);Q(b,m,"A",d,e,S,J)}a=a.className;I(a)&&(a=a.animVal);if(H(a)&&""!==a)for(;k=g.exec(a);)m=va(k[2]),Q(b,m,"C",d,e)&&(c[m]=V(k[3])),a=a.substr(k.index+k[0].length);break;case Oa:if(11===Ga)for(;a.parentNode&&a.nextSibling&&
-a.nextSibling.nodeType===Oa;)a.nodeValue+=a.nextSibling.nodeValue,a.parentNode.removeChild(a.nextSibling);O(b,a.nodeValue);break;case 8:try{if(k=f.exec(a.nodeValue))m=va(k[1]),Q(b,m,"M",d,e)&&(c[m]=V(k[2]))}catch(w){}}b.sort(Ha);return b}function Ua(a,b,c){var d=[],e=0;if(b&&a.hasAttribute&&a.hasAttribute(b)){do{if(!a)throw ga("uterdir",b,c);1==a.nodeType&&(a.hasAttribute(b)&&e++,a.hasAttribute(c)&&e--);d.push(a);a=a.nextSibling}while(0<e)}else d.push(a);return z(d)}function s(a,b,c){return function(d,
-e,f,g,k){e=Ua(e[0],b,c);return a(d,e,f,g,k)}}function $(a,b,d,e,f,g,h,m,l){function n(a,b,c,d){if(a){c&&(a=s(a,c,d));a.require=r.require;a.directiveName=y;if(C===r||r.$$isolateScope)a=ca(a,{isolateScope:!0});h.push(a)}if(b){c&&(b=s(b,c,d));b.require=r.require;b.directiveName=y;if(C===r||r.$$isolateScope)b=ca(b,{isolateScope:!0});m.push(b)}}function q(a,b,c,d){var e;if(H(b)){var f=b.match(k);b=b.substring(f[0].length);var g=f[1]||f[3],f="?"===f[2];"^^"===g?c=c.parent():e=(e=d&&d[b])&&e.instance;e||
-(d="$"+b+"Controller",e=g?c.inheritedData(d):c.data(d));if(!e&&!f)throw ga("ctreq",b,a);}else if(K(b))for(e=[],g=0,f=b.length;g<f;g++)e[g]=q(a,b[g],c,d);return e||null}function B(a,b,c,d,e,f){var g=aa(),h;for(h in d){var k=d[h],m={$scope:k===C||k.$$isolateScope?e:f,$element:a,$attrs:b,$transclude:c},l=k.controller;"@"==l&&(l=b[k.name]);m=t(l,m,!0,k.controllerAs);g[k.name]=m;a.data("$"+k.name+"Controller",m.instance)}return g}function w(a,c,e,f,g){function k(a,b,c){var d;$a(a)||(c=b,b=a,a=v);T&&(d=
-S);c||(c=T?D.parent():D);return g(a,b,d,c,Ua)}var l,n,t,S,P,D,ja;b===e?(f=d,D=d.$$element):(D=z(e),f=new fa(D,d));t=c;C?n=c.$new(!0):A&&(t=c.$parent);g&&(P=k,P.$$boundTransclude=g);u&&(S=B(D,f,P,u,n,c));C&&(J.$$addScopeInfo(D,n,!0,!(X&&(X===C||X===C.$$originalDirective))),J.$$addScopeClass(D,!0),n.$$isolateBindings=C.$$isolateBindings,(ja=ba(c,f,n,n.$$isolateBindings,C))&&n.$on("$destroy",ja));for(var Vc in S){ja=u[Vc];var N=S[Vc],p=ja.$$bindings.bindToController;N.identifier&&p&&(l=ba(t,f,N.instance,
-p,ja));var r=N();r!==N.instance&&(N.instance=r,D.data("$"+ja.name+"Controller",r),l&&l(),l=ba(t,f,N.instance,p,ja))}F=0;for(M=h.length;F<M;F++)l=h[F],ea(l,l.isolateScope?n:c,D,f,l.require&&q(l.directiveName,l.require,D,S),P);var Ua=c;C&&(C.template||null===C.templateUrl)&&(Ua=n);a&&a(Ua,e.childNodes,v,g);for(F=m.length-1;0<=F;F--)l=m[F],ea(l,l.isolateScope?n:c,D,f,l.require&&q(l.directiveName,l.require,D,S),P)}l=l||{};for(var P=-Number.MAX_VALUE,A=l.newScopeDirective,u=l.controllerDirectives,C=l.newIsolateScopeDirective,
-X=l.templateDirective,D=l.nonTlbTranscludeDirective,N=!1,p=!1,T=l.hasElementTranscludeDirective,$=d.$$element=z(b),r,y,Q,Ha=e,L,F=0,M=a.length;F<M;F++){r=a[F];var O=r.$$start,R=r.$$end;O&&($=Ua(b,O,R));Q=v;if(P>r.priority)break;if(Q=r.scope)r.templateUrl||(I(Q)?(Va("new/isolated scope",C||A,r,$),C=r):Va("new/isolated scope",C,r,$)),A=A||r;y=r.name;!r.templateUrl&&r.controller&&(Q=r.controller,u=u||aa(),Va("'"+y+"' controller",u[y],r,$),u[y]=r);if(Q=r.transclude)N=!0,r.$$tlb||(Va("transclusion",D,
-r,$),D=r),"element"==Q?(T=!0,P=r.priority,Q=$,$=d.$$element=z(W.createComment(" "+y+": "+d[y]+" ")),b=$[0],Z(f,ta.call(Q,0),b),Ha=J(Q,e,P,g&&g.name,{nonTlbTranscludeDirective:D})):(Q=z(Vb(b)).contents(),$.empty(),Ha=J(Q,e,v,v,{needsNewScope:r.$$isolateScope||r.$$newScope}));if(r.template)if(p=!0,Va("template",X,r,$),X=r,Q=E(r.template)?r.template($,d):r.template,Q=ia(Q),r.replace){g=r;Q=Tb.test(Q)?Yc(Yb(r.templateNamespace,V(Q))):[];b=Q[0];if(1!=Q.length||1!==b.nodeType)throw ga("tplrt",y,"");Z(f,
-$,b);Q={$attr:{}};var Xc=ja(b,[],Q),Y=a.splice(F+1,a.length-(F+1));(C||A)&&x(Xc,C,A);a=a.concat(Xc).concat(Y);U(d,Q);M=a.length}else $.html(Q);if(r.templateUrl)p=!0,Va("template",X,r,$),X=r,r.replace&&(g=r),w=Vf(a.splice(F,a.length-F),$,d,f,N&&Ha,h,m,{controllerDirectives:u,newScopeDirective:A!==r&&A,newIsolateScopeDirective:C,templateDirective:X,nonTlbTranscludeDirective:D}),M=a.length;else if(r.compile)try{L=r.compile($,d,Ha),E(L)?n(null,L,O,R):L&&n(L.pre,L.post,O,R)}catch(da){c(da,ua($))}r.terminal&&
-(w.terminal=!0,P=Math.max(P,r.priority))}w.scope=A&&!0===A.scope;w.transcludeOnThisElement=N;w.templateOnThisElement=p;w.transclude=Ha;l.hasElementTranscludeDirective=T;return w}function x(a,b,c){for(var d=0,e=a.length;d<e;d++)a[d]=Ob(a[d],{$$isolateScope:b,$$newScope:c})}function Q(b,f,g,k,h,m,l){if(f===h)return null;h=null;if(e.hasOwnProperty(f)){var n;f=a.get(f+"Directive");for(var q=0,B=f.length;q<B;q++)try{if(n=f[q],(r(k)||k>n.priority)&&-1!=n.restrict.indexOf(g)){m&&(n=Ob(n,{$$start:m,$$end:l}));
-if(!n.$$bindings){var t=n,J=n,P=n.name,w={isolateScope:null,bindToController:null};I(J.scope)&&(!0===J.bindToController?(w.bindToController=d(J.scope,P,!0),w.isolateScope={}):w.isolateScope=d(J.scope,P,!1));I(J.bindToController)&&(w.bindToController=d(J.bindToController,P,!0));if(I(w.bindToController)){var C=J.controller,u=J.controllerAs;if(!C)throw ga("noctrl",P);var D;a:{var J=C,X=u;if(X&&H(X))D=X;else{if(H(J)){var ja=Zc.exec(J);if(ja){D=ja[3];break a}}D=void 0}}if(!D)throw ga("noident",P);}var N=
-t.$$bindings=w;I(N.isolateScope)&&(n.$$isolateBindings=N.isolateScope)}b.push(n);h=n}}catch(p){c(p)}}return h}function L(b){if(e.hasOwnProperty(b))for(var c=a.get(b+"Directive"),d=0,f=c.length;d<f;d++)if(b=c[d],b.multiElement)return!0;return!1}function U(a,b){var c=b.$attr,d=a.$attr,e=a.$$element;p(a,function(d,e){"$"!=e.charAt(0)&&(b[e]&&b[e]!==d&&(d+=("style"===e?";":" ")+b[e]),a.$set(e,d,!0,c[e]))});p(b,function(b,f){"class"==f?(C(e,b),a["class"]=(a["class"]?a["class"]+" ":"")+b):"style"==f?(e.attr("style",
-e.attr("style")+";"+b),a.style=(a.style?a.style+";":"")+b):"$"==f.charAt(0)||a.hasOwnProperty(f)||(a[f]=b,d[f]=c[f])})}function Vf(a,b,c,d,e,f,g,k){var h=[],m,n,B=b[0],t=a.shift(),J=Ob(t,{templateUrl:null,transclude:null,replace:null,$$originalDirective:t}),S=E(t.templateUrl)?t.templateUrl(b,c):t.templateUrl,w=t.templateNamespace;b.empty();l(S).then(function(l){var q,A;l=ia(l);if(t.replace){l=Tb.test(l)?Yc(Yb(w,V(l))):[];q=l[0];if(1!=l.length||1!==q.nodeType)throw ga("tplrt",t.name,S);l={$attr:{}};
-Z(d,b,q);var u=ja(q,[],l);I(t.scope)&&x(u,!0);a=u.concat(a);U(c,l)}else q=B,b.html(l);a.unshift(J);m=$(a,q,c,e,b,t,f,g,k);p(d,function(a,c){a==q&&(d[c]=b[0])});for(n=X(b[0].childNodes,e);h.length;){l=h.shift();A=h.shift();var D=h.shift(),N=h.shift(),u=b[0];if(!l.$$destroyed){if(A!==B){var T=A.className;k.hasElementTranscludeDirective&&t.replace||(u=Vb(q));Z(D,z(A),u);C(z(u),T)}A=m.transcludeOnThisElement?P(l,m.transclude,N):N;m(n,l,u,d,A)}}h=null});return function(a,b,c,d,e){a=e;b.$$destroyed||(h?
-h.push(b,c,d,a):(m.transcludeOnThisElement&&(a=P(b,m.transclude,e)),m(n,b,c,d,a)))}}function Ha(a,b){var c=b.priority-a.priority;return 0!==c?c:a.name!==b.name?a.name<b.name?-1:1:a.index-b.index}function Va(a,b,c,d){function e(a){return a?" (module: "+a+")":""}if(b)throw ga("multidir",b.name,e(b.$$moduleName),c.name,e(c.$$moduleName),a,ua(d));}function O(a,c){var d=b(c,!0);d&&a.push({priority:0,compile:function(a){a=a.parent();var b=!!a.length;b&&J.$$addBindingClass(a);return function(a,c){var e=
-c.parent();b||J.$$addBindingClass(e);J.$$addBindingInfo(e,d.expressions);a.$watch(d,function(a){c[0].nodeValue=a})}}})}function Yb(a,b){a=F(a||"html");switch(a){case "svg":case "math":var c=W.createElement("div");c.innerHTML="<"+a+">"+b+"</"+a+">";return c.childNodes[0].childNodes;default:return b}}function R(a,b){if("srcdoc"==b)return D.HTML;var c=pa(a);if("xlinkHref"==b||"form"==c&&"action"==b||"img"!=c&&("src"==b||"ngSrc"==b))return D.RESOURCE_URL}function Y(a,c,d,e,f){var g=R(a,e);f=h[e]||f;var k=
-b(d,!0,g,f);if(k){if("multiple"===e&&"select"===pa(a))throw ga("selmulti",ua(a));c.push({priority:100,compile:function(){return{pre:function(a,c,h){c=h.$$observers||(h.$$observers=aa());if(m.test(e))throw ga("nodomevents");var l=h[e];l!==d&&(k=l&&b(l,!0,g,f),d=l);k&&(h[e]=k(a),(c[e]||(c[e]=[])).$$inter=!0,(h.$$observers&&h.$$observers[e].$$scope||a).$watch(k,function(a,b){"class"===e&&a!=b?h.$updateClass(a,b):h.$set(e,a)}))}}}})}}function Z(a,b,c){var d=b[0],e=b.length,f=d.parentNode,g,h;if(a)for(g=
-0,h=a.length;g<h;g++)if(a[g]==d){a[g++]=c;h=g+e-1;for(var k=a.length;g<k;g++,h++)h<k?a[g]=a[h]:delete a[g];a.length-=e-1;a.context===d&&(a.context=c);break}f&&f.replaceChild(c,d);a=W.createDocumentFragment();a.appendChild(d);z.hasData(d)&&(z.data(c,z.data(d)),qa?(Rb=!0,qa.cleanData([d])):delete z.cache[d[z.expando]]);d=1;for(e=b.length;d<e;d++)f=b[d],z(f).remove(),a.appendChild(f),delete b[d];b[0]=c;b.length=1}function ca(a,b){return M(function(){return a.apply(null,arguments)},a,b)}function ea(a,
-b,d,e,f,g){try{a(b,d,e,f,g)}catch(h){c(h,ua(d))}}function ba(a,c,d,e,f){var g=[];p(e,function(e,h){var k=e.attrName,m=e.optional,l,n,q,B;switch(e.mode){case "@":m||sa.call(c,k)||(d[h]=c[k]=void 0);c.$observe(k,function(a){H(a)&&(d[h]=a)});c.$$observers[k].$$scope=a;l=c[k];H(l)?d[h]=b(l)(a):Ma(l)&&(d[h]=l);break;case "=":if(!sa.call(c,k)){if(m)break;c[k]=void 0}if(m&&!c[k])break;n=w(c[k]);B=n.literal?ma:function(a,b){return a===b||a!==a&&b!==b};q=n.assign||function(){l=d[h]=n(a);throw ga("nonassign",
-c[k],k,f.name);};l=d[h]=n(a);m=function(b){B(b,d[h])||(B(b,l)?q(a,b=d[h]):d[h]=b);return l=b};m.$stateful=!0;m=e.collection?a.$watchCollection(c[k],m):a.$watch(w(c[k],m),null,n.literal);g.push(m);break;case "&":n=c.hasOwnProperty(k)?w(c[k]):y;if(n===y&&m)break;d[h]=function(b){return n(a,b)}}});return g.length&&function(){for(var a=0,b=g.length;a<b;++a)g[a]()}}var fa=function(a,b){if(b){var c=Object.keys(b),d,e,f;d=0;for(e=c.length;d<e;d++)f=c[d],this[f]=b[f]}else this.$attr={};this.$$element=a};
-fa.prototype={$normalize:va,$addClass:function(a){a&&0<a.length&&T.addClass(this.$$element,a)},$removeClass:function(a){a&&0<a.length&&T.removeClass(this.$$element,a)},$updateClass:function(a,b){var c=$c(a,b);c&&c.length&&T.addClass(this.$$element,c);(c=$c(b,a))&&c.length&&T.removeClass(this.$$element,c)},$set:function(a,b,d,e){var f=Rc(this.$$element[0],a),g=ad[a],h=a;f?(this.$$element.prop(a,b),e=f):g&&(this[g]=b,h=g);this[a]=b;e?this.$attr[a]=e:(e=this.$attr[a])||(this.$attr[a]=e=zc(a,"-"));f=
-pa(this.$$element);if("a"===f&&"href"===a||"img"===f&&"src"===a)this[a]=b=B(b,"src"===a);else if("img"===f&&"srcset"===a){for(var f="",g=V(b),k=/(\s+\d+x\s*,|\s+\d+w\s*,|\s+,|,\s+)/,k=/\s/.test(g)?k:/(,)/,g=g.split(k),k=Math.floor(g.length/2),m=0;m<k;m++)var l=2*m,f=f+B(V(g[l]),!0),f=f+(" "+V(g[l+1]));g=V(g[2*m]).split(/\s/);f+=B(V(g[0]),!0);2===g.length&&(f+=" "+V(g[1]));this[a]=b=f}!1!==d&&(null===b||r(b)?this.$$element.removeAttr(e):this.$$element.attr(e,b));(a=this.$$observers)&&p(a[h],function(a){try{a(b)}catch(d){c(d)}})},
-$observe:function(a,b){var c=this,d=c.$$observers||(c.$$observers=aa()),e=d[a]||(d[a]=[]);e.push(b);N.$evalAsync(function(){e.$$inter||!c.hasOwnProperty(a)||r(c[a])||b(c[a])});return function(){ab(e,b)}}};var da=b.startSymbol(),ha=b.endSymbol(),ia="{{"==da&&"}}"==ha?Za:function(a){return a.replace(/\{\{/g,da).replace(/}}/g,ha)},ka=/^ngAttr[A-Z]/,la=/^(.+)Start$/;J.$$addBindingInfo=n?function(a,b){var c=a.data("$binding")||[];K(b)?c=c.concat(b):c.push(b);a.data("$binding",c)}:y;J.$$addBindingClass=
-n?function(a){C(a,"ng-binding")}:y;J.$$addScopeInfo=n?function(a,b,c,d){a.data(c?d?"$isolateScopeNoTemplate":"$isolateScope":"$scope",b)}:y;J.$$addScopeClass=n?function(a,b){C(a,b?"ng-isolate-scope":"ng-scope")}:y;return J}]}function va(a){return eb(a.replace(Wc,""))}function $c(a,b){var d="",c=a.split(/\s+/),e=b.split(/\s+/),f=0;a:for(;f<c.length;f++){for(var g=c[f],h=0;h<e.length;h++)if(g==e[h])continue a;d+=(0<d.length?" ":"")+g}return d}function Yc(a){a=z(a);var b=a.length;if(1>=b)return a;for(;b--;)8===
-a[b].nodeType&&Wf.call(a,b,1);return a}function df(){var a={},b=!1;this.register=function(b,c){Sa(b,"controller");I(b)?M(a,b):a[b]=c};this.allowGlobals=function(){b=!0};this.$get=["$injector","$window",function(d,c){function e(a,b,c,d){if(!a||!I(a.$scope))throw L("$controller")("noscp",d,b);a.$scope[b]=c}return function(f,g,h,k){var m,l,n;h=!0===h;k&&H(k)&&(n=k);if(H(f)){k=f.match(Zc);if(!k)throw Xf("ctrlfmt",f);l=k[1];n=n||k[3];f=a.hasOwnProperty(l)?a[l]:Bc(g.$scope,l,!0)||(b?Bc(c,l,!0):v);Ra(f,
-l,!0)}if(h)return h=(K(f)?f[f.length-1]:f).prototype,m=Object.create(h||null),n&&e(g,n,m,l||f.name),M(function(){var a=d.invoke(f,m,g,l);a!==m&&(I(a)||E(a))&&(m=a,n&&e(g,n,m,l||f.name));return m},{instance:m,identifier:n});m=d.instantiate(f,g,l);n&&e(g,n,m,l||f.name);return m}}]}function ef(){this.$get=["$window",function(a){return z(a.document)}]}function ff(){this.$get=["$log",function(a){return function(b,d){a.error.apply(a,arguments)}}]}function Zb(a){return I(a)?da(a)?a.toISOString():cb(a):a}
-function lf(){this.$get=function(){return function(a){if(!a)return"";var b=[];oc(a,function(a,c){null===a||r(a)||(K(a)?p(a,function(a,d){b.push(ia(c)+"="+ia(Zb(a)))}):b.push(ia(c)+"="+ia(Zb(a))))});return b.join("&")}}}function mf(){this.$get=function(){return function(a){function b(a,e,f){null===a||r(a)||(K(a)?p(a,function(a,c){b(a,e+"["+(I(a)?c:"")+"]")}):I(a)&&!da(a)?oc(a,function(a,c){b(a,e+(f?"":"[")+c+(f?"":"]"))}):d.push(ia(e)+"="+ia(Zb(a))))}if(!a)return"";var d=[];b(a,"",!0);return d.join("&")}}}
-function $b(a,b){if(H(a)){var d=a.replace(Yf,"").trim();if(d){var c=b("Content-Type");(c=c&&0===c.indexOf(bd))||(c=(c=d.match(Zf))&&$f[c[0]].test(d));c&&(a=uc(d))}}return a}function cd(a){var b=aa(),d;H(a)?p(a.split("\n"),function(a){d=a.indexOf(":");var e=F(V(a.substr(0,d)));a=V(a.substr(d+1));e&&(b[e]=b[e]?b[e]+", "+a:a)}):I(a)&&p(a,function(a,d){var f=F(d),g=V(a);f&&(b[f]=b[f]?b[f]+", "+g:g)});return b}function dd(a){var b;return function(d){b||(b=cd(a));return d?(d=b[F(d)],void 0===d&&(d=null),
-d):b}}function ed(a,b,d,c){if(E(c))return c(a,b,d);p(c,function(c){a=c(a,b,d)});return a}function kf(){var a=this.defaults={transformResponse:[$b],transformRequest:[function(a){return I(a)&&"[object File]"!==oa.call(a)&&"[object Blob]"!==oa.call(a)&&"[object FormData]"!==oa.call(a)?cb(a):a}],headers:{common:{Accept:"application/json, text/plain, */*"},post:ha(ac),put:ha(ac),patch:ha(ac)},xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",paramSerializer:"$httpParamSerializer"},b=!1;this.useApplyAsync=
-function(a){return x(a)?(b=!!a,this):b};var d=!0;this.useLegacyPromiseExtensions=function(a){return x(a)?(d=!!a,this):d};var c=this.interceptors=[];this.$get=["$httpBackend","$$cookieReader","$cacheFactory","$rootScope","$q","$injector",function(e,f,g,h,k,m){function l(b){function c(a){var b=M({},a);b.data=ed(a.data,a.headers,a.status,f.transformResponse);a=a.status;return 200<=a&&300>a?b:k.reject(b)}function e(a,b){var c,d={};p(a,function(a,e){E(a)?(c=a(b),null!=c&&(d[e]=c)):d[e]=a});return d}if(!fa.isObject(b))throw L("$http")("badreq",
-b);if(!H(b.url))throw L("$http")("badreq",b.url);var f=M({method:"get",transformRequest:a.transformRequest,transformResponse:a.transformResponse,paramSerializer:a.paramSerializer},b);f.headers=function(b){var c=a.headers,d=M({},b.headers),f,g,h,c=M({},c.common,c[F(b.method)]);a:for(f in c){g=F(f);for(h in d)if(F(h)===g)continue a;d[f]=c[f]}return e(d,ha(b))}(b);f.method=rb(f.method);f.paramSerializer=H(f.paramSerializer)?m.get(f.paramSerializer):f.paramSerializer;var g=[function(b){var d=b.headers,
-e=ed(b.data,dd(d),v,b.transformRequest);r(e)&&p(d,function(a,b){"content-type"===F(b)&&delete d[b]});r(b.withCredentials)&&!r(a.withCredentials)&&(b.withCredentials=a.withCredentials);return n(b,e).then(c,c)},v],h=k.when(f);for(p(u,function(a){(a.request||a.requestError)&&g.unshift(a.request,a.requestError);(a.response||a.responseError)&&g.push(a.response,a.responseError)});g.length;){b=g.shift();var l=g.shift(),h=h.then(b,l)}d?(h.success=function(a){Ra(a,"fn");h.then(function(b){a(b.data,b.status,
-b.headers,f)});return h},h.error=function(a){Ra(a,"fn");h.then(null,function(b){a(b.data,b.status,b.headers,f)});return h}):(h.success=fd("success"),h.error=fd("error"));return h}function n(c,d){function g(a,c,d,e){function f(){m(c,a,d,e)}C&&(200<=a&&300>a?C.put(P,[a,c,cd(d),e]):C.remove(P));b?h.$applyAsync(f):(f(),h.$$phase||h.$apply())}function m(a,b,d,e){b=-1<=b?b:0;(200<=b&&300>b?p.resolve:p.reject)({data:a,status:b,headers:dd(d),config:c,statusText:e})}function n(a){m(a.data,a.status,ha(a.headers()),
-a.statusText)}function u(){var a=l.pendingRequests.indexOf(c);-1!==a&&l.pendingRequests.splice(a,1)}var p=k.defer(),B=p.promise,C,J,X=c.headers,P=G(c.url,c.paramSerializer(c.params));l.pendingRequests.push(c);B.then(u,u);!c.cache&&!a.cache||!1===c.cache||"GET"!==c.method&&"JSONP"!==c.method||(C=I(c.cache)?c.cache:I(a.cache)?a.cache:A);C&&(J=C.get(P),x(J)?J&&E(J.then)?J.then(n,n):K(J)?m(J[1],J[0],ha(J[2]),J[3]):m(J,200,{},"OK"):C.put(P,B));r(J)&&((J=gd(c.url)?f()[c.xsrfCookieName||a.xsrfCookieName]:
-v)&&(X[c.xsrfHeaderName||a.xsrfHeaderName]=J),e(c.method,P,d,g,X,c.timeout,c.withCredentials,c.responseType));return B}function G(a,b){0<b.length&&(a+=(-1==a.indexOf("?")?"?":"&")+b);return a}var A=g("$http");a.paramSerializer=H(a.paramSerializer)?m.get(a.paramSerializer):a.paramSerializer;var u=[];p(c,function(a){u.unshift(H(a)?m.get(a):m.invoke(a))});l.pendingRequests=[];(function(a){p(arguments,function(a){l[a]=function(b,c){return l(M({},c||{},{method:a,url:b}))}})})("get","delete","head","jsonp");
-(function(a){p(arguments,function(a){l[a]=function(b,c,d){return l(M({},d||{},{method:a,url:b,data:c}))}})})("post","put","patch");l.defaults=a;return l}]}function of(){this.$get=function(){return function(){return new U.XMLHttpRequest}}}function nf(){this.$get=["$browser","$window","$document","$xhrFactory",function(a,b,d,c){return ag(a,c,a.defer,b.angular.callbacks,d[0])}]}function ag(a,b,d,c,e){function f(a,b,d){var f=e.createElement("script"),l=null;f.type="text/javascript";f.src=a;f.async=!0;
-l=function(a){f.removeEventListener("load",l,!1);f.removeEventListener("error",l,!1);e.body.removeChild(f);f=null;var g=-1,A="unknown";a&&("load"!==a.type||c[b].called||(a={type:"error"}),A=a.type,g="error"===a.type?404:200);d&&d(g,A)};f.addEventListener("load",l,!1);f.addEventListener("error",l,!1);e.body.appendChild(f);return l}return function(e,h,k,m,l,n,G,A){function u(){w&&w();t&&t.abort()}function S(b,c,e,f,g){x(D)&&d.cancel(D);w=t=null;b(c,e,f,g);a.$$completeOutstandingRequest(y)}a.$$incOutstandingRequestCount();
-h=h||a.url();if("jsonp"==F(e)){var q="_"+(c.counter++).toString(36);c[q]=function(a){c[q].data=a;c[q].called=!0};var w=f(h.replace("JSON_CALLBACK","angular.callbacks."+q),q,function(a,b){S(m,a,c[q].data,"",b);c[q]=y})}else{var t=b(e,h);t.open(e,h,!0);p(l,function(a,b){x(a)&&t.setRequestHeader(b,a)});t.onload=function(){var a=t.statusText||"",b="response"in t?t.response:t.responseText,c=1223===t.status?204:t.status;0===c&&(c=b?200:"file"==wa(h).protocol?404:0);S(m,c,b,t.getAllResponseHeaders(),a)};
-e=function(){S(m,-1,null,null,"")};t.onerror=e;t.onabort=e;G&&(t.withCredentials=!0);if(A)try{t.responseType=A}catch(N){if("json"!==A)throw N;}t.send(r(k)?null:k)}if(0<n)var D=d(u,n);else n&&E(n.then)&&n.then(u)}}function hf(){var a="{{",b="}}";this.startSymbol=function(b){return b?(a=b,this):a};this.endSymbol=function(a){return a?(b=a,this):b};this.$get=["$parse","$exceptionHandler","$sce",function(d,c,e){function f(a){return"\\\\\\"+a}function g(c){return c.replace(l,a).replace(n,b)}function h(f,
-h,l,n){function q(a){try{var b=a;a=l?e.getTrusted(l,b):e.valueOf(b);var d;if(n&&!x(a))d=a;else if(null==a)d="";else{switch(typeof a){case "string":break;case "number":a=""+a;break;default:a=cb(a)}d=a}return d}catch(g){c(Ia.interr(f,g))}}n=!!n;for(var w,t,p=0,D=[],T=[],B=f.length,C=[],J=[];p<B;)if(-1!=(w=f.indexOf(a,p))&&-1!=(t=f.indexOf(b,w+k)))p!==w&&C.push(g(f.substring(p,w))),p=f.substring(w+k,t),D.push(p),T.push(d(p,q)),p=t+m,J.push(C.length),C.push("");else{p!==B&&C.push(g(f.substring(p)));break}l&&
-1<C.length&&Ia.throwNoconcat(f);if(!h||D.length){var X=function(a){for(var b=0,c=D.length;b<c;b++){if(n&&r(a[b]))return;C[J[b]]=a[b]}return C.join("")};return M(function(a){var b=0,d=D.length,e=Array(d);try{for(;b<d;b++)e[b]=T[b](a);return X(e)}catch(g){c(Ia.interr(f,g))}},{exp:f,expressions:D,$$watchDelegate:function(a,b){var c;return a.$watchGroup(T,function(d,e){var f=X(d);E(b)&&b.call(this,f,d!==e?c:f,a);c=f})}})}}var k=a.length,m=b.length,l=new RegExp(a.replace(/./g,f),"g"),n=new RegExp(b.replace(/./g,
-f),"g");h.startSymbol=function(){return a};h.endSymbol=function(){return b};return h}]}function jf(){this.$get=["$rootScope","$window","$q","$$q",function(a,b,d,c){function e(e,h,k,m){var l=4<arguments.length,n=l?ta.call(arguments,4):[],G=b.setInterval,A=b.clearInterval,u=0,S=x(m)&&!m,q=(S?c:d).defer(),w=q.promise;k=x(k)?k:0;w.then(null,null,l?function(){e.apply(null,n)}:e);w.$$intervalId=G(function(){q.notify(u++);0<k&&u>=k&&(q.resolve(u),A(w.$$intervalId),delete f[w.$$intervalId]);S||a.$apply()},
-h);f[w.$$intervalId]=q;return w}var f={};e.cancel=function(a){return a&&a.$$intervalId in f?(f[a.$$intervalId].reject("canceled"),b.clearInterval(a.$$intervalId),delete f[a.$$intervalId],!0):!1};return e}]}function bc(a){a=a.split("/");for(var b=a.length;b--;)a[b]=nb(a[b]);return a.join("/")}function hd(a,b){var d=wa(a);b.$$protocol=d.protocol;b.$$host=d.hostname;b.$$port=ea(d.port)||bg[d.protocol]||null}function id(a,b){var d="/"!==a.charAt(0);d&&(a="/"+a);var c=wa(a);b.$$path=decodeURIComponent(d&&
-"/"===c.pathname.charAt(0)?c.pathname.substring(1):c.pathname);b.$$search=xc(c.search);b.$$hash=decodeURIComponent(c.hash);b.$$path&&"/"!=b.$$path.charAt(0)&&(b.$$path="/"+b.$$path)}function ra(a,b){if(0===b.indexOf(a))return b.substr(a.length)}function Fa(a){var b=a.indexOf("#");return-1==b?a:a.substr(0,b)}function hb(a){return a.replace(/(#.+)|#$/,"$1")}function cc(a,b,d){this.$$html5=!0;d=d||"";hd(a,this);this.$$parse=function(a){var d=ra(b,a);if(!H(d))throw Cb("ipthprfx",a,b);id(d,this);this.$$path||
-(this.$$path="/");this.$$compose()};this.$$compose=function(){var a=Qb(this.$$search),d=this.$$hash?"#"+nb(this.$$hash):"";this.$$url=bc(this.$$path)+(a?"?"+a:"")+d;this.$$absUrl=b+this.$$url.substr(1)};this.$$parseLinkUrl=function(c,e){if(e&&"#"===e[0])return this.hash(e.slice(1)),!0;var f,g;x(f=ra(a,c))?(g=f,g=x(f=ra(d,f))?b+(ra("/",f)||f):a+g):x(f=ra(b,c))?g=b+f:b==c+"/"&&(g=b);g&&this.$$parse(g);return!!g}}function dc(a,b,d){hd(a,this);this.$$parse=function(c){var e=ra(a,c)||ra(b,c),f;r(e)||"#"!==
-e.charAt(0)?this.$$html5?f=e:(f="",r(e)&&(a=c,this.replace())):(f=ra(d,e),r(f)&&(f=e));id(f,this);c=this.$$path;var e=a,g=/^\/[A-Z]:(\/.*)/;0===f.indexOf(e)&&(f=f.replace(e,""));g.exec(f)||(c=(f=g.exec(c))?f[1]:c);this.$$path=c;this.$$compose()};this.$$compose=function(){var b=Qb(this.$$search),e=this.$$hash?"#"+nb(this.$$hash):"";this.$$url=bc(this.$$path)+(b?"?"+b:"")+e;this.$$absUrl=a+(this.$$url?d+this.$$url:"")};this.$$parseLinkUrl=function(b,d){return Fa(a)==Fa(b)?(this.$$parse(b),!0):!1}}function jd(a,
-b,d){this.$$html5=!0;dc.apply(this,arguments);this.$$parseLinkUrl=function(c,e){if(e&&"#"===e[0])return this.hash(e.slice(1)),!0;var f,g;a==Fa(c)?f=c:(g=ra(b,c))?f=a+d+g:b===c+"/"&&(f=b);f&&this.$$parse(f);return!!f};this.$$compose=function(){var b=Qb(this.$$search),e=this.$$hash?"#"+nb(this.$$hash):"";this.$$url=bc(this.$$path)+(b?"?"+b:"")+e;this.$$absUrl=a+d+this.$$url}}function Db(a){return function(){return this[a]}}function kd(a,b){return function(d){if(r(d))return this[a];this[a]=b(d);this.$$compose();
-return this}}function pf(){var a="",b={enabled:!1,requireBase:!0,rewriteLinks:!0};this.hashPrefix=function(b){return x(b)?(a=b,this):a};this.html5Mode=function(a){return Ma(a)?(b.enabled=a,this):I(a)?(Ma(a.enabled)&&(b.enabled=a.enabled),Ma(a.requireBase)&&(b.requireBase=a.requireBase),Ma(a.rewriteLinks)&&(b.rewriteLinks=a.rewriteLinks),this):b};this.$get=["$rootScope","$browser","$sniffer","$rootElement","$window",function(d,c,e,f,g){function h(a,b,d){var e=m.url(),f=m.$$state;try{c.url(a,b,d),m.$$state=
-c.state()}catch(g){throw m.url(e),m.$$state=f,g;}}function k(a,b){d.$broadcast("$locationChangeSuccess",m.absUrl(),a,m.$$state,b)}var m,l;l=c.baseHref();var n=c.url(),G;if(b.enabled){if(!l&&b.requireBase)throw Cb("nobase");G=n.substring(0,n.indexOf("/",n.indexOf("//")+2))+(l||"/");l=e.history?cc:jd}else G=Fa(n),l=dc;var A=G.substr(0,Fa(G).lastIndexOf("/")+1);m=new l(G,A,"#"+a);m.$$parseLinkUrl(n,n);m.$$state=c.state();var u=/^\s*(javascript|mailto):/i;f.on("click",function(a){if(b.rewriteLinks&&!a.ctrlKey&&
-!a.metaKey&&!a.shiftKey&&2!=a.which&&2!=a.button){for(var e=z(a.target);"a"!==pa(e[0]);)if(e[0]===f[0]||!(e=e.parent())[0])return;var h=e.prop("href"),k=e.attr("href")||e.attr("xlink:href");I(h)&&"[object SVGAnimatedString]"===h.toString()&&(h=wa(h.animVal).href);u.test(h)||!h||e.attr("target")||a.isDefaultPrevented()||!m.$$parseLinkUrl(h,k)||(a.preventDefault(),m.absUrl()!=c.url()&&(d.$apply(),g.angular["ff-684208-preventDefault"]=!0))}});hb(m.absUrl())!=hb(n)&&c.url(m.absUrl(),!0);var S=!0;c.onUrlChange(function(a,
-b){r(ra(A,a))?g.location.href=a:(d.$evalAsync(function(){var c=m.absUrl(),e=m.$$state,f;a=hb(a);m.$$parse(a);m.$$state=b;f=d.$broadcast("$locationChangeStart",a,c,b,e).defaultPrevented;m.absUrl()===a&&(f?(m.$$parse(c),m.$$state=e,h(c,!1,e)):(S=!1,k(c,e)))}),d.$$phase||d.$digest())});d.$watch(function(){var a=hb(c.url()),b=hb(m.absUrl()),f=c.state(),g=m.$$replace,l=a!==b||m.$$html5&&e.history&&f!==m.$$state;if(S||l)S=!1,d.$evalAsync(function(){var b=m.absUrl(),c=d.$broadcast("$locationChangeStart",
-b,a,m.$$state,f).defaultPrevented;m.absUrl()===b&&(c?(m.$$parse(a),m.$$state=f):(l&&h(b,g,f===m.$$state?null:m.$$state),k(a,f)))});m.$$replace=!1});return m}]}function qf(){var a=!0,b=this;this.debugEnabled=function(b){return x(b)?(a=b,this):a};this.$get=["$window",function(d){function c(a){a instanceof Error&&(a.stack?a=a.message&&-1===a.stack.indexOf(a.message)?"Error: "+a.message+"\n"+a.stack:a.stack:a.sourceURL&&(a=a.message+"\n"+a.sourceURL+":"+a.line));return a}function e(a){var b=d.console||
-{},e=b[a]||b.log||y;a=!1;try{a=!!e.apply}catch(k){}return a?function(){var a=[];p(arguments,function(b){a.push(c(b))});return e.apply(b,a)}:function(a,b){e(a,null==b?"":b)}}return{log:e("log"),info:e("info"),warn:e("warn"),error:e("error"),debug:function(){var c=e("debug");return function(){a&&c.apply(b,arguments)}}()}}]}function Wa(a,b){if("__defineGetter__"===a||"__defineSetter__"===a||"__lookupGetter__"===a||"__lookupSetter__"===a||"__proto__"===a)throw ba("isecfld",b);return a}function ld(a,b){a+=
-"";if(!H(a))throw ba("iseccst",b);return a}function xa(a,b){if(a){if(a.constructor===a)throw ba("isecfn",b);if(a.window===a)throw ba("isecwindow",b);if(a.children&&(a.nodeName||a.prop&&a.attr&&a.find))throw ba("isecdom",b);if(a===Object)throw ba("isecobj",b);}return a}function md(a,b){if(a){if(a.constructor===a)throw ba("isecfn",b);if(a===cg||a===dg||a===eg)throw ba("isecff",b);}}function Eb(a,b){if(a&&(a===(0).constructor||a===(!1).constructor||a==="".constructor||a==={}.constructor||a===[].constructor||
-a===Function.constructor))throw ba("isecaf",b);}function fg(a,b){return"undefined"!==typeof a?a:b}function nd(a,b){return"undefined"===typeof a?b:"undefined"===typeof b?a:a+b}function Y(a,b){var d,c;switch(a.type){case s.Program:d=!0;p(a.body,function(a){Y(a.expression,b);d=d&&a.expression.constant});a.constant=d;break;case s.Literal:a.constant=!0;a.toWatch=[];break;case s.UnaryExpression:Y(a.argument,b);a.constant=a.argument.constant;a.toWatch=a.argument.toWatch;break;case s.BinaryExpression:Y(a.left,
-b);Y(a.right,b);a.constant=a.left.constant&&a.right.constant;a.toWatch=a.left.toWatch.concat(a.right.toWatch);break;case s.LogicalExpression:Y(a.left,b);Y(a.right,b);a.constant=a.left.constant&&a.right.constant;a.toWatch=a.constant?[]:[a];break;case s.ConditionalExpression:Y(a.test,b);Y(a.alternate,b);Y(a.consequent,b);a.constant=a.test.constant&&a.alternate.constant&&a.consequent.constant;a.toWatch=a.constant?[]:[a];break;case s.Identifier:a.constant=!1;a.toWatch=[a];break;case s.MemberExpression:Y(a.object,
-b);a.computed&&Y(a.property,b);a.constant=a.object.constant&&(!a.computed||a.property.constant);a.toWatch=[a];break;case s.CallExpression:d=a.filter?!b(a.callee.name).$stateful:!1;c=[];p(a.arguments,function(a){Y(a,b);d=d&&a.constant;a.constant||c.push.apply(c,a.toWatch)});a.constant=d;a.toWatch=a.filter&&!b(a.callee.name).$stateful?c:[a];break;case s.AssignmentExpression:Y(a.left,b);Y(a.right,b);a.constant=a.left.constant&&a.right.constant;a.toWatch=[a];break;case s.ArrayExpression:d=!0;c=[];p(a.elements,
-function(a){Y(a,b);d=d&&a.constant;a.constant||c.push.apply(c,a.toWatch)});a.constant=d;a.toWatch=c;break;case s.ObjectExpression:d=!0;c=[];p(a.properties,function(a){Y(a.value,b);d=d&&a.value.constant;a.value.constant||c.push.apply(c,a.value.toWatch)});a.constant=d;a.toWatch=c;break;case s.ThisExpression:a.constant=!1,a.toWatch=[]}}function od(a){if(1==a.length){a=a[0].expression;var b=a.toWatch;return 1!==b.length?b:b[0]!==a?b:v}}function pd(a){return a.type===s.Identifier||a.type===s.MemberExpression}
-function qd(a){if(1===a.body.length&&pd(a.body[0].expression))return{type:s.AssignmentExpression,left:a.body[0].expression,right:{type:s.NGValueParameter},operator:"="}}function rd(a){return 0===a.body.length||1===a.body.length&&(a.body[0].expression.type===s.Literal||a.body[0].expression.type===s.ArrayExpression||a.body[0].expression.type===s.ObjectExpression)}function sd(a,b){this.astBuilder=a;this.$filter=b}function td(a,b){this.astBuilder=a;this.$filter=b}function Fb(a){return"constructor"==a}
-function ec(a){return E(a.valueOf)?a.valueOf():gg.call(a)}function rf(){var a=aa(),b=aa();this.$get=["$filter",function(d){function c(c,f,n){var t,p,D;n=n||u;switch(typeof c){case "string":D=c=c.trim();var r=n?b:a;t=r[D];if(!t){":"===c.charAt(0)&&":"===c.charAt(1)&&(p=!0,c=c.substring(2));t=n?A:G;var B=new fc(t);t=(new gc(B,d,t)).parse(c);t.constant?t.$$watchDelegate=m:p?t.$$watchDelegate=t.literal?k:h:t.inputs&&(t.$$watchDelegate=g);n&&(t=e(t));r[D]=t}return l(t,f);case "function":return l(c,f);
-default:return l(y,f)}}function e(a){function b(c,d,e,f){var g=u;u=!0;try{return a(c,d,e,f)}finally{u=g}}if(!a)return a;b.$$watchDelegate=a.$$watchDelegate;b.assign=e(a.assign);b.constant=a.constant;b.literal=a.literal;for(var c=0;a.inputs&&c<a.inputs.length;++c)a.inputs[c]=e(a.inputs[c]);b.inputs=a.inputs;return b}function f(a,b){return null==a||null==b?a===b:"object"===typeof a&&(a=ec(a),"object"===typeof a)?!1:a===b||a!==a&&b!==b}function g(a,b,c,d,e){var g=d.inputs,h;if(1===g.length){var k=f,
-g=g[0];return a.$watch(function(a){var b=g(a);f(b,k)||(h=d(a,v,v,[b]),k=b&&ec(b));return h},b,c,e)}for(var l=[],m=[],n=0,G=g.length;n<G;n++)l[n]=f,m[n]=null;return a.$watch(function(a){for(var b=!1,c=0,e=g.length;c<e;c++){var k=g[c](a);if(b||(b=!f(k,l[c])))m[c]=k,l[c]=k&&ec(k)}b&&(h=d(a,v,v,m));return h},b,c,e)}function h(a,b,c,d){var e,f;return e=a.$watch(function(a){return d(a)},function(a,c,d){f=a;E(b)&&b.apply(this,arguments);x(a)&&d.$$postDigest(function(){x(f)&&e()})},c)}function k(a,b,c,d){function e(a){var b=
-!0;p(a,function(a){x(a)||(b=!1)});return b}var f,g;return f=a.$watch(function(a){return d(a)},function(a,c,d){g=a;E(b)&&b.call(this,a,c,d);e(a)&&d.$$postDigest(function(){e(g)&&f()})},c)}function m(a,b,c,d){var e;return e=a.$watch(function(a){return d(a)},function(a,c,d){E(b)&&b.apply(this,arguments);e()},c)}function l(a,b){if(!b)return a;var c=a.$$watchDelegate,d=!1,c=c!==k&&c!==h?function(c,e,f,g){f=d&&g?g[0]:a(c,e,f,g);return b(f,c,e)}:function(c,d,e,f){e=a(c,d,e,f);c=b(e,c,d);return x(e)?c:e};
-a.$$watchDelegate&&a.$$watchDelegate!==g?c.$$watchDelegate=a.$$watchDelegate:b.$stateful||(c.$$watchDelegate=g,d=!a.inputs,c.inputs=a.inputs?a.inputs:[a]);return c}var n=Ba().noUnsafeEval,G={csp:n,expensiveChecks:!1},A={csp:n,expensiveChecks:!0},u=!1;c.$$runningExpensiveChecks=function(){return u};return c}]}function tf(){this.$get=["$rootScope","$exceptionHandler",function(a,b){return ud(function(b){a.$evalAsync(b)},b)}]}function uf(){this.$get=["$browser","$exceptionHandler",function(a,b){return ud(function(b){a.defer(b)},
-b)}]}function ud(a,b){function d(a,b,c){function d(b){return function(c){e||(e=!0,b.call(a,c))}}var e=!1;return[d(b),d(c)]}function c(){this.$$state={status:0}}function e(a,b){return function(c){b.call(a,c)}}function f(c){!c.processScheduled&&c.pending&&(c.processScheduled=!0,a(function(){var a,d,e;e=c.pending;c.processScheduled=!1;c.pending=v;for(var f=0,g=e.length;f<g;++f){d=e[f][0];a=e[f][c.status];try{E(a)?d.resolve(a(c.value)):1===c.status?d.resolve(c.value):d.reject(c.value)}catch(h){d.reject(h),
-b(h)}}}))}function g(){this.promise=new c;this.resolve=e(this,this.resolve);this.reject=e(this,this.reject);this.notify=e(this,this.notify)}var h=L("$q",TypeError);M(c.prototype,{then:function(a,b,c){if(r(a)&&r(b)&&r(c))return this;var d=new g;this.$$state.pending=this.$$state.pending||[];this.$$state.pending.push([d,a,b,c]);0<this.$$state.status&&f(this.$$state);return d.promise},"catch":function(a){return this.then(null,a)},"finally":function(a,b){return this.then(function(b){return m(b,!0,a)},
-function(b){return m(b,!1,a)},b)}});M(g.prototype,{resolve:function(a){this.promise.$$state.status||(a===this.promise?this.$$reject(h("qcycle",a)):this.$$resolve(a))},$$resolve:function(a){var c,e;e=d(this,this.$$resolve,this.$$reject);try{if(I(a)||E(a))c=a&&a.then;E(c)?(this.promise.$$state.status=-1,c.call(a,e[0],e[1],this.notify)):(this.promise.$$state.value=a,this.promise.$$state.status=1,f(this.promise.$$state))}catch(g){e[1](g),b(g)}},reject:function(a){this.promise.$$state.status||this.$$reject(a)},
-$$reject:function(a){this.promise.$$state.value=a;this.promise.$$state.status=2;f(this.promise.$$state)},notify:function(c){var d=this.promise.$$state.pending;0>=this.promise.$$state.status&&d&&d.length&&a(function(){for(var a,e,f=0,g=d.length;f<g;f++){e=d[f][0];a=d[f][3];try{e.notify(E(a)?a(c):c)}catch(h){b(h)}}})}});var k=function(a,b){var c=new g;b?c.resolve(a):c.reject(a);return c.promise},m=function(a,b,c){var d=null;try{E(c)&&(d=c())}catch(e){return k(e,!1)}return d&&E(d.then)?d.then(function(){return k(a,
-b)},function(a){return k(a,!1)}):k(a,b)},l=function(a,b,c,d){var e=new g;e.resolve(a);return e.promise.then(b,c,d)},n=function A(a){if(!E(a))throw h("norslvr",a);if(!(this instanceof A))return new A(a);var b=new g;a(function(a){b.resolve(a)},function(a){b.reject(a)});return b.promise};n.defer=function(){return new g};n.reject=function(a){var b=new g;b.reject(a);return b.promise};n.when=l;n.resolve=l;n.all=function(a){var b=new g,c=0,d=K(a)?[]:{};p(a,function(a,e){c++;l(a).then(function(a){d.hasOwnProperty(e)||
-(d[e]=a,--c||b.resolve(d))},function(a){d.hasOwnProperty(e)||b.reject(a)})});0===c&&b.resolve(d);return b.promise};return n}function Df(){this.$get=["$window","$timeout",function(a,b){var d=a.requestAnimationFrame||a.webkitRequestAnimationFrame,c=a.cancelAnimationFrame||a.webkitCancelAnimationFrame||a.webkitCancelRequestAnimationFrame,e=!!d,f=e?function(a){var b=d(a);return function(){c(b)}}:function(a){var c=b(a,16.66,!1);return function(){b.cancel(c)}};f.supported=e;return f}]}function sf(){function a(a){function b(){this.$$watchers=
-this.$$nextSibling=this.$$childHead=this.$$childTail=null;this.$$listeners={};this.$$listenerCount={};this.$$watchersCount=0;this.$id=++mb;this.$$ChildScope=null}b.prototype=a;return b}var b=10,d=L("$rootScope"),c=null,e=null;this.digestTtl=function(a){arguments.length&&(b=a);return b};this.$get=["$injector","$exceptionHandler","$parse","$browser",function(f,g,h,k){function m(a){a.currentScope.$$destroyed=!0}function l(a){9===Ga&&(a.$$childHead&&l(a.$$childHead),a.$$nextSibling&&l(a.$$nextSibling));
-a.$parent=a.$$nextSibling=a.$$prevSibling=a.$$childHead=a.$$childTail=a.$root=a.$$watchers=null}function n(){this.$id=++mb;this.$$phase=this.$parent=this.$$watchers=this.$$nextSibling=this.$$prevSibling=this.$$childHead=this.$$childTail=null;this.$root=this;this.$$destroyed=!1;this.$$listeners={};this.$$listenerCount={};this.$$watchersCount=0;this.$$isolateBindings=null}function G(a){if(t.$$phase)throw d("inprog",t.$$phase);t.$$phase=a}function A(a,b){do a.$$watchersCount+=b;while(a=a.$parent)}function u(a,
-b,c){do a.$$listenerCount[c]-=b,0===a.$$listenerCount[c]&&delete a.$$listenerCount[c];while(a=a.$parent)}function s(){}function q(){for(;T.length;)try{T.shift()()}catch(a){g(a)}e=null}function w(){null===e&&(e=k.defer(function(){t.$apply(q)}))}n.prototype={constructor:n,$new:function(b,c){var d;c=c||this;b?(d=new n,d.$root=this.$root):(this.$$ChildScope||(this.$$ChildScope=a(this)),d=new this.$$ChildScope);d.$parent=c;d.$$prevSibling=c.$$childTail;c.$$childHead?(c.$$childTail.$$nextSibling=d,c.$$childTail=
-d):c.$$childHead=c.$$childTail=d;(b||c!=this)&&d.$on("$destroy",m);return d},$watch:function(a,b,d,e){var f=h(a);if(f.$$watchDelegate)return f.$$watchDelegate(this,b,d,f,a);var g=this,k=g.$$watchers,l={fn:b,last:s,get:f,exp:e||a,eq:!!d};c=null;E(b)||(l.fn=y);k||(k=g.$$watchers=[]);k.unshift(l);A(this,1);return function(){0<=ab(k,l)&&A(g,-1);c=null}},$watchGroup:function(a,b){function c(){h=!1;k?(k=!1,b(e,e,g)):b(e,d,g)}var d=Array(a.length),e=Array(a.length),f=[],g=this,h=!1,k=!0;if(!a.length){var l=
-!0;g.$evalAsync(function(){l&&b(e,e,g)});return function(){l=!1}}if(1===a.length)return this.$watch(a[0],function(a,c,f){e[0]=a;d[0]=c;b(e,a===c?e:d,f)});p(a,function(a,b){var k=g.$watch(a,function(a,f){e[b]=a;d[b]=f;h||(h=!0,g.$evalAsync(c))});f.push(k)});return function(){for(;f.length;)f.shift()()}},$watchCollection:function(a,b){function c(a){e=a;var b,d,g,h;if(!r(e)){if(I(e))if(za(e))for(f!==n&&(f=n,t=f.length=0,l++),a=e.length,t!==a&&(l++,f.length=t=a),b=0;b<a;b++)h=f[b],g=e[b],d=h!==h&&g!==
-g,d||h===g||(l++,f[b]=g);else{f!==q&&(f=q={},t=0,l++);a=0;for(b in e)sa.call(e,b)&&(a++,g=e[b],h=f[b],b in f?(d=h!==h&&g!==g,d||h===g||(l++,f[b]=g)):(t++,f[b]=g,l++));if(t>a)for(b in l++,f)sa.call(e,b)||(t--,delete f[b])}else f!==e&&(f=e,l++);return l}}c.$stateful=!0;var d=this,e,f,g,k=1<b.length,l=0,m=h(a,c),n=[],q={},G=!0,t=0;return this.$watch(m,function(){G?(G=!1,b(e,e,d)):b(e,g,d);if(k)if(I(e))if(za(e)){g=Array(e.length);for(var a=0;a<e.length;a++)g[a]=e[a]}else for(a in g={},e)sa.call(e,a)&&
-(g[a]=e[a]);else g=e})},$digest:function(){var a,f,h,l,m,n,p,A,r=b,w,u=[],T,v;G("$digest");k.$$checkUrlChange();this===t&&null!==e&&(k.defer.cancel(e),q());c=null;do{A=!1;for(w=this;N.length;){try{v=N.shift(),v.scope.$eval(v.expression,v.locals)}catch(x){g(x)}c=null}a:do{if(n=w.$$watchers)for(p=n.length;p--;)try{if(a=n[p])if(m=a.get,(f=m(w))!==(h=a.last)&&!(a.eq?ma(f,h):"number"===typeof f&&"number"===typeof h&&isNaN(f)&&isNaN(h)))A=!0,c=a,a.last=a.eq?Na(f,null):f,l=a.fn,l(f,h===s?f:h,w),5>r&&(T=
-4-r,u[T]||(u[T]=[]),u[T].push({msg:E(a.exp)?"fn: "+(a.exp.name||a.exp.toString()):a.exp,newVal:f,oldVal:h}));else if(a===c){A=!1;break a}}catch(y){g(y)}if(!(n=w.$$watchersCount&&w.$$childHead||w!==this&&w.$$nextSibling))for(;w!==this&&!(n=w.$$nextSibling);)w=w.$parent}while(w=n);if((A||N.length)&&!r--)throw t.$$phase=null,d("infdig",b,u);}while(A||N.length);for(t.$$phase=null;D.length;)try{D.shift()()}catch(z){g(z)}},$destroy:function(){if(!this.$$destroyed){var a=this.$parent;this.$broadcast("$destroy");
-this.$$destroyed=!0;this===t&&k.$$applicationDestroyed();A(this,-this.$$watchersCount);for(var b in this.$$listenerCount)u(this,this.$$listenerCount[b],b);a&&a.$$childHead==this&&(a.$$childHead=this.$$nextSibling);a&&a.$$childTail==this&&(a.$$childTail=this.$$prevSibling);this.$$prevSibling&&(this.$$prevSibling.$$nextSibling=this.$$nextSibling);this.$$nextSibling&&(this.$$nextSibling.$$prevSibling=this.$$prevSibling);this.$destroy=this.$digest=this.$apply=this.$evalAsync=this.$applyAsync=y;this.$on=
-this.$watch=this.$watchGroup=function(){return y};this.$$listeners={};this.$$nextSibling=null;l(this)}},$eval:function(a,b){return h(a)(this,b)},$evalAsync:function(a,b){t.$$phase||N.length||k.defer(function(){N.length&&t.$digest()});N.push({scope:this,expression:h(a),locals:b})},$$postDigest:function(a){D.push(a)},$apply:function(a){try{G("$apply");try{return this.$eval(a)}finally{t.$$phase=null}}catch(b){g(b)}finally{try{t.$digest()}catch(c){throw g(c),c;}}},$applyAsync:function(a){function b(){c.$eval(a)}
-var c=this;a&&T.push(b);a=h(a);w()},$on:function(a,b){var c=this.$$listeners[a];c||(this.$$listeners[a]=c=[]);c.push(b);var d=this;do d.$$listenerCount[a]||(d.$$listenerCount[a]=0),d.$$listenerCount[a]++;while(d=d.$parent);var e=this;return function(){var d=c.indexOf(b);-1!==d&&(c[d]=null,u(e,1,a))}},$emit:function(a,b){var c=[],d,e=this,f=!1,h={name:a,targetScope:e,stopPropagation:function(){f=!0},preventDefault:function(){h.defaultPrevented=!0},defaultPrevented:!1},k=bb([h],arguments,1),l,m;do{d=
-e.$$listeners[a]||c;h.currentScope=e;l=0;for(m=d.length;l<m;l++)if(d[l])try{d[l].apply(null,k)}catch(n){g(n)}else d.splice(l,1),l--,m--;if(f)return h.currentScope=null,h;e=e.$parent}while(e);h.currentScope=null;return h},$broadcast:function(a,b){var c=this,d=this,e={name:a,targetScope:this,preventDefault:function(){e.defaultPrevented=!0},defaultPrevented:!1};if(!this.$$listenerCount[a])return e;for(var f=bb([e],arguments,1),h,k;c=d;){e.currentScope=c;d=c.$$listeners[a]||[];h=0;for(k=d.length;h<k;h++)if(d[h])try{d[h].apply(null,
-f)}catch(l){g(l)}else d.splice(h,1),h--,k--;if(!(d=c.$$listenerCount[a]&&c.$$childHead||c!==this&&c.$$nextSibling))for(;c!==this&&!(d=c.$$nextSibling);)c=c.$parent}e.currentScope=null;return e}};var t=new n,N=t.$$asyncQueue=[],D=t.$$postDigestQueue=[],T=t.$$applyAsyncQueue=[];return t}]}function le(){var a=/^\s*(https?|ftp|mailto|tel|file):/,b=/^\s*((https?|ftp|file|blob):|data:image\/)/;this.aHrefSanitizationWhitelist=function(b){return x(b)?(a=b,this):a};this.imgSrcSanitizationWhitelist=function(a){return x(a)?
-(b=a,this):b};this.$get=function(){return function(d,c){var e=c?b:a,f;f=wa(d).href;return""===f||f.match(e)?d:"unsafe:"+f}}}function hg(a){if("self"===a)return a;if(H(a)){if(-1<a.indexOf("***"))throw ya("iwcard",a);a=vd(a).replace("\\*\\*",".*").replace("\\*","[^:/.?&;]*");return new RegExp("^"+a+"$")}if(La(a))return new RegExp("^"+a.source+"$");throw ya("imatcher");}function wd(a){var b=[];x(a)&&p(a,function(a){b.push(hg(a))});return b}function wf(){this.SCE_CONTEXTS=la;var a=["self"],b=[];this.resourceUrlWhitelist=
-function(b){arguments.length&&(a=wd(b));return a};this.resourceUrlBlacklist=function(a){arguments.length&&(b=wd(a));return b};this.$get=["$injector",function(d){function c(a,b){return"self"===a?gd(b):!!a.exec(b.href)}function e(a){var b=function(a){this.$$unwrapTrustedValue=function(){return a}};a&&(b.prototype=new a);b.prototype.valueOf=function(){return this.$$unwrapTrustedValue()};b.prototype.toString=function(){return this.$$unwrapTrustedValue().toString()};return b}var f=function(a){throw ya("unsafe");
-};d.has("$sanitize")&&(f=d.get("$sanitize"));var g=e(),h={};h[la.HTML]=e(g);h[la.CSS]=e(g);h[la.URL]=e(g);h[la.JS]=e(g);h[la.RESOURCE_URL]=e(h[la.URL]);return{trustAs:function(a,b){var c=h.hasOwnProperty(a)?h[a]:null;if(!c)throw ya("icontext",a,b);if(null===b||r(b)||""===b)return b;if("string"!==typeof b)throw ya("itype",a);return new c(b)},getTrusted:function(d,e){if(null===e||r(e)||""===e)return e;var g=h.hasOwnProperty(d)?h[d]:null;if(g&&e instanceof g)return e.$$unwrapTrustedValue();if(d===la.RESOURCE_URL){var g=
-wa(e.toString()),n,G,p=!1;n=0;for(G=a.length;n<G;n++)if(c(a[n],g)){p=!0;break}if(p)for(n=0,G=b.length;n<G;n++)if(c(b[n],g)){p=!1;break}if(p)return e;throw ya("insecurl",e.toString());}if(d===la.HTML)return f(e);throw ya("unsafe");},valueOf:function(a){return a instanceof g?a.$$unwrapTrustedValue():a}}}]}function vf(){var a=!0;this.enabled=function(b){arguments.length&&(a=!!b);return a};this.$get=["$parse","$sceDelegate",function(b,d){if(a&&8>Ga)throw ya("iequirks");var c=ha(la);c.isEnabled=function(){return a};
-c.trustAs=d.trustAs;c.getTrusted=d.getTrusted;c.valueOf=d.valueOf;a||(c.trustAs=c.getTrusted=function(a,b){return b},c.valueOf=Za);c.parseAs=function(a,d){var e=b(d);return e.literal&&e.constant?e:b(d,function(b){return c.getTrusted(a,b)})};var e=c.parseAs,f=c.getTrusted,g=c.trustAs;p(la,function(a,b){var d=F(b);c[eb("parse_as_"+d)]=function(b){return e(a,b)};c[eb("get_trusted_"+d)]=function(b){return f(a,b)};c[eb("trust_as_"+d)]=function(b){return g(a,b)}});return c}]}function xf(){this.$get=["$window",
-"$document",function(a,b){var d={},c=ea((/android (\d+)/.exec(F((a.navigator||{}).userAgent))||[])[1]),e=/Boxee/i.test((a.navigator||{}).userAgent),f=b[0]||{},g,h=/^(Moz|webkit|ms)(?=[A-Z])/,k=f.body&&f.body.style,m=!1,l=!1;if(k){for(var n in k)if(m=h.exec(n)){g=m[0];g=g.substr(0,1).toUpperCase()+g.substr(1);break}g||(g="WebkitOpacity"in k&&"webkit");m=!!("transition"in k||g+"Transition"in k);l=!!("animation"in k||g+"Animation"in k);!c||m&&l||(m=H(k.webkitTransition),l=H(k.webkitAnimation))}return{history:!(!a.history||
-!a.history.pushState||4>c||e),hasEvent:function(a){if("input"===a&&11>=Ga)return!1;if(r(d[a])){var b=f.createElement("div");d[a]="on"+a in b}return d[a]},csp:Ba(),vendorPrefix:g,transitions:m,animations:l,android:c}}]}function zf(){this.$get=["$templateCache","$http","$q","$sce",function(a,b,d,c){function e(f,g){e.totalPendingRequests++;H(f)&&a.get(f)||(f=c.getTrustedResourceUrl(f));var h=b.defaults&&b.defaults.transformResponse;K(h)?h=h.filter(function(a){return a!==$b}):h===$b&&(h=null);return b.get(f,
-{cache:a,transformResponse:h})["finally"](function(){e.totalPendingRequests--}).then(function(b){a.put(f,b.data);return b.data},function(a){if(!g)throw ga("tpload",f,a.status,a.statusText);return d.reject(a)})}e.totalPendingRequests=0;return e}]}function Af(){this.$get=["$rootScope","$browser","$location",function(a,b,d){return{findBindings:function(a,b,d){a=a.getElementsByClassName("ng-binding");var g=[];p(a,function(a){var c=fa.element(a).data("$binding");c&&p(c,function(c){d?(new RegExp("(^|\\s)"+
-vd(b)+"(\\s|\\||$)")).test(c)&&g.push(a):-1!=c.indexOf(b)&&g.push(a)})});return g},findModels:function(a,b,d){for(var g=["ng-","data-ng-","ng\\:"],h=0;h<g.length;++h){var k=a.querySelectorAll("["+g[h]+"model"+(d?"=":"*=")+'"'+b+'"]');if(k.length)return k}},getLocation:function(){return d.url()},setLocation:function(b){b!==d.url()&&(d.url(b),a.$digest())},whenStable:function(a){b.notifyWhenNoOutstandingRequests(a)}}}]}function Bf(){this.$get=["$rootScope","$browser","$q","$$q","$exceptionHandler",
-function(a,b,d,c,e){function f(f,k,m){E(f)||(m=k,k=f,f=y);var l=ta.call(arguments,3),n=x(m)&&!m,G=(n?c:d).defer(),p=G.promise,u;u=b.defer(function(){try{G.resolve(f.apply(null,l))}catch(b){G.reject(b),e(b)}finally{delete g[p.$$timeoutId]}n||a.$apply()},k);p.$$timeoutId=u;g[u]=G;return p}var g={};f.cancel=function(a){return a&&a.$$timeoutId in g?(g[a.$$timeoutId].reject("canceled"),delete g[a.$$timeoutId],b.defer.cancel(a.$$timeoutId)):!1};return f}]}function wa(a){Ga&&(Z.setAttribute("href",a),a=
-Z.href);Z.setAttribute("href",a);return{href:Z.href,protocol:Z.protocol?Z.protocol.replace(/:$/,""):"",host:Z.host,search:Z.search?Z.search.replace(/^\?/,""):"",hash:Z.hash?Z.hash.replace(/^#/,""):"",hostname:Z.hostname,port:Z.port,pathname:"/"===Z.pathname.charAt(0)?Z.pathname:"/"+Z.pathname}}function gd(a){a=H(a)?wa(a):a;return a.protocol===xd.protocol&&a.host===xd.host}function Cf(){this.$get=na(U)}function yd(a){function b(a){try{return decodeURIComponent(a)}catch(b){return a}}var d=a[0]||{},
-c={},e="";return function(){var a,g,h,k,m;a=d.cookie||"";if(a!==e)for(e=a,a=e.split("; "),c={},h=0;h<a.length;h++)g=a[h],k=g.indexOf("="),0<k&&(m=b(g.substring(0,k)),r(c[m])&&(c[m]=b(g.substring(k+1))));return c}}function Gf(){this.$get=yd}function Jc(a){function b(d,c){if(I(d)){var e={};p(d,function(a,c){e[c]=b(c,a)});return e}return a.factory(d+"Filter",c)}this.register=b;this.$get=["$injector",function(a){return function(b){return a.get(b+"Filter")}}];b("currency",zd);b("date",Ad);b("filter",ig);
-b("json",jg);b("limitTo",kg);b("lowercase",lg);b("number",Bd);b("orderBy",Cd);b("uppercase",mg)}function ig(){return function(a,b,d){if(!za(a)){if(null==a)return a;throw L("filter")("notarray",a);}var c;switch(hc(b)){case "function":break;case "boolean":case "null":case "number":case "string":c=!0;case "object":b=ng(b,d,c);break;default:return a}return Array.prototype.filter.call(a,b)}}function ng(a,b,d){var c=I(a)&&"$"in a;!0===b?b=ma:E(b)||(b=function(a,b){if(r(a))return!1;if(null===a||null===b)return a===
-b;if(I(b)||I(a)&&!qc(a))return!1;a=F(""+a);b=F(""+b);return-1!==a.indexOf(b)});return function(e){return c&&!I(e)?Ja(e,a.$,b,!1):Ja(e,a,b,d)}}function Ja(a,b,d,c,e){var f=hc(a),g=hc(b);if("string"===g&&"!"===b.charAt(0))return!Ja(a,b.substring(1),d,c);if(K(a))return a.some(function(a){return Ja(a,b,d,c)});switch(f){case "object":var h;if(c){for(h in a)if("$"!==h.charAt(0)&&Ja(a[h],b,d,!0))return!0;return e?!1:Ja(a,b,d,!1)}if("object"===g){for(h in b)if(e=b[h],!E(e)&&!r(e)&&(f="$"===h,!Ja(f?a:a[h],
-e,d,f,f)))return!1;return!0}return d(a,b);case "function":return!1;default:return d(a,b)}}function hc(a){return null===a?"null":typeof a}function zd(a){var b=a.NUMBER_FORMATS;return function(a,c,e){r(c)&&(c=b.CURRENCY_SYM);r(e)&&(e=b.PATTERNS[1].maxFrac);return null==a?a:Dd(a,b.PATTERNS[1],b.GROUP_SEP,b.DECIMAL_SEP,e).replace(/\u00A4/g,c)}}function Bd(a){var b=a.NUMBER_FORMATS;return function(a,c){return null==a?a:Dd(a,b.PATTERNS[0],b.GROUP_SEP,b.DECIMAL_SEP,c)}}function og(a){var b=0,d,c,e,f,g;-1<
-(c=a.indexOf(Ed))&&(a=a.replace(Ed,""));0<(e=a.search(/e/i))?(0>c&&(c=e),c+=+a.slice(e+1),a=a.substring(0,e)):0>c&&(c=a.length);for(e=0;a.charAt(e)==ic;e++);if(e==(g=a.length))d=[0],c=1;else{for(g--;a.charAt(g)==ic;)g--;c-=e;d=[];for(f=0;e<=g;e++,f++)d[f]=+a.charAt(e)}c>Fd&&(d=d.splice(0,Fd-1),b=c-1,c=1);return{d:d,e:b,i:c}}function pg(a,b,d,c){var e=a.d,f=e.length-a.i;b=r(b)?Math.min(Math.max(d,f),c):+b;d=b+a.i;c=e[d];if(0<d)e.splice(d);else{a.i=1;e.length=d=b+1;for(var g=0;g<d;g++)e[g]=0}for(5<=
-c&&e[d-1]++;f<b;f++)e.push(0);if(b=e.reduceRight(function(a,b,c,d){b+=a;d[c]=b%10;return Math.floor(b/10)},0))e.unshift(b),a.i++}function Dd(a,b,d,c,e){if(!H(a)&&!O(a)||isNaN(a))return"";var f=!isFinite(a),g=!1,h=Math.abs(a)+"",k="";if(f)k="\u221e";else{g=og(h);pg(g,e,b.minFrac,b.maxFrac);k=g.d;h=g.i;e=g.e;f=[];for(g=k.reduce(function(a,b){return a&&!b},!0);0>h;)k.unshift(0),h++;0<h?f=k.splice(h):(f=k,k=[0]);h=[];for(k.length>b.lgSize&&h.unshift(k.splice(-b.lgSize).join(""));k.length>b.gSize;)h.unshift(k.splice(-b.gSize).join(""));
-k.length&&h.unshift(k.join(""));k=h.join(d);f.length&&(k+=c+f.join(""));e&&(k+="e+"+e)}return 0>a&&!g?b.negPre+k+b.negSuf:b.posPre+k+b.posSuf}function Gb(a,b,d){var c="";0>a&&(c="-",a=-a);for(a=""+a;a.length<b;)a=ic+a;d&&(a=a.substr(a.length-b));return c+a}function ca(a,b,d,c){d=d||0;return function(e){e=e["get"+a]();if(0<d||e>-d)e+=d;0===e&&-12==d&&(e=12);return Gb(e,b,c)}}function Hb(a,b){return function(d,c){var e=d["get"+a](),f=rb(b?"SHORT"+a:a);return c[f][e]}}function Gd(a){var b=(new Date(a,
-0,1)).getDay();return new Date(a,0,(4>=b?5:12)-b)}function Hd(a){return function(b){var d=Gd(b.getFullYear());b=+new Date(b.getFullYear(),b.getMonth(),b.getDate()+(4-b.getDay()))-+d;b=1+Math.round(b/6048E5);return Gb(b,a)}}function jc(a,b){return 0>=a.getFullYear()?b.ERAS[0]:b.ERAS[1]}function Ad(a){function b(a){var b;if(b=a.match(d)){a=new Date(0);var f=0,g=0,h=b[8]?a.setUTCFullYear:a.setFullYear,k=b[8]?a.setUTCHours:a.setHours;b[9]&&(f=ea(b[9]+b[10]),g=ea(b[9]+b[11]));h.call(a,ea(b[1]),ea(b[2])-
-1,ea(b[3]));f=ea(b[4]||0)-f;g=ea(b[5]||0)-g;h=ea(b[6]||0);b=Math.round(1E3*parseFloat("0."+(b[7]||0)));k.call(a,f,g,h,b)}return a}var d=/^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;return function(c,d,f){var g="",h=[],k,m;d=d||"mediumDate";d=a.DATETIME_FORMATS[d]||d;H(c)&&(c=qg.test(c)?ea(c):b(c));O(c)&&(c=new Date(c));if(!da(c)||!isFinite(c.getTime()))return c;for(;d;)(m=rg.exec(d))?(h=bb(h,m,1),d=h.pop()):(h.push(d),d=null);var l=c.getTimezoneOffset();
-f&&(l=vc(f,l),c=Pb(c,f,!0));p(h,function(b){k=sg[b];g+=k?k(c,a.DATETIME_FORMATS,l):"''"===b?"'":b.replace(/(^'|'$)/g,"").replace(/''/g,"'")});return g}}function jg(){return function(a,b){r(b)&&(b=2);return cb(a,b)}}function kg(){return function(a,b,d){b=Infinity===Math.abs(Number(b))?Number(b):ea(b);if(isNaN(b))return a;O(a)&&(a=a.toString());if(!K(a)&&!H(a))return a;d=!d||isNaN(d)?0:ea(d);d=0>d?Math.max(0,a.length+d):d;return 0<=b?a.slice(d,d+b):0===d?a.slice(b,a.length):a.slice(Math.max(0,d+b),
-d)}}function Cd(a){function b(b,d){d=d?-1:1;return b.map(function(b){var c=1,h=Za;if(E(b))h=b;else if(H(b)){if("+"==b.charAt(0)||"-"==b.charAt(0))c="-"==b.charAt(0)?-1:1,b=b.substring(1);if(""!==b&&(h=a(b),h.constant))var k=h(),h=function(a){return a[k]}}return{get:h,descending:c*d}})}function d(a){switch(typeof a){case "number":case "boolean":case "string":return!0;default:return!1}}return function(a,e,f){if(!za(a))return a;K(e)||(e=[e]);0===e.length&&(e=["+"]);var g=b(e,f);g.push({get:function(){return{}},
-descending:f?-1:1});a=Array.prototype.map.call(a,function(a,b){return{value:a,predicateValues:g.map(function(c){var e=c.get(a);c=typeof e;if(null===e)c="string",e="null";else if("string"===c)e=e.toLowerCase();else if("object"===c)a:{if("function"===typeof e.valueOf&&(e=e.valueOf(),d(e)))break a;if(qc(e)&&(e=e.toString(),d(e)))break a;e=b}return{value:e,type:c}})}});a.sort(function(a,b){for(var c=0,d=0,e=g.length;d<e;++d){var c=a.predicateValues[d],f=b.predicateValues[d],p=0;c.type===f.type?c.value!==
-f.value&&(p=c.value<f.value?-1:1):p=c.type<f.type?-1:1;if(c=p*g[d].descending)break}return c});return a=a.map(function(a){return a.value})}}function Ka(a){E(a)&&(a={link:a});a.restrict=a.restrict||"AC";return na(a)}function Id(a,b,d,c,e){var f=this,g=[];f.$error={};f.$$success={};f.$pending=v;f.$name=e(b.name||b.ngForm||"")(d);f.$dirty=!1;f.$pristine=!0;f.$valid=!0;f.$invalid=!1;f.$submitted=!1;f.$$parentForm=Ib;f.$rollbackViewValue=function(){p(g,function(a){a.$rollbackViewValue()})};f.$commitViewValue=
-function(){p(g,function(a){a.$commitViewValue()})};f.$addControl=function(a){Sa(a.$name,"input");g.push(a);a.$name&&(f[a.$name]=a);a.$$parentForm=f};f.$$renameControl=function(a,b){var c=a.$name;f[c]===a&&delete f[c];f[b]=a;a.$name=b};f.$removeControl=function(a){a.$name&&f[a.$name]===a&&delete f[a.$name];p(f.$pending,function(b,c){f.$setValidity(c,null,a)});p(f.$error,function(b,c){f.$setValidity(c,null,a)});p(f.$$success,function(b,c){f.$setValidity(c,null,a)});ab(g,a);a.$$parentForm=Ib};Jd({ctrl:this,
-$element:a,set:function(a,b,c){var d=a[b];d?-1===d.indexOf(c)&&d.push(c):a[b]=[c]},unset:function(a,b,c){var d=a[b];d&&(ab(d,c),0===d.length&&delete a[b])},$animate:c});f.$setDirty=function(){c.removeClass(a,Xa);c.addClass(a,Jb);f.$dirty=!0;f.$pristine=!1;f.$$parentForm.$setDirty()};f.$setPristine=function(){c.setClass(a,Xa,Jb+" ng-submitted");f.$dirty=!1;f.$pristine=!0;f.$submitted=!1;p(g,function(a){a.$setPristine()})};f.$setUntouched=function(){p(g,function(a){a.$setUntouched()})};f.$setSubmitted=
-function(){c.addClass(a,"ng-submitted");f.$submitted=!0;f.$$parentForm.$setSubmitted()}}function kc(a){a.$formatters.push(function(b){return a.$isEmpty(b)?b:b.toString()})}function ib(a,b,d,c,e,f){var g=F(b[0].type);if(!e.android){var h=!1;b.on("compositionstart",function(a){h=!0});b.on("compositionend",function(){h=!1;m()})}var k,m=function(a){k&&(f.defer.cancel(k),k=null);if(!h){var e=b.val();a=a&&a.type;"password"===g||d.ngTrim&&"false"===d.ngTrim||(e=V(e));(c.$viewValue!==e||""===e&&c.$$hasNativeValidators)&&
-c.$setViewValue(e,a)}};if(e.hasEvent("input"))b.on("input",m);else{var l=function(a,b,c){k||(k=f.defer(function(){k=null;b&&b.value===c||m(a)}))};b.on("keydown",function(a){var b=a.keyCode;91===b||15<b&&19>b||37<=b&&40>=b||l(a,this,this.value)});if(e.hasEvent("paste"))b.on("paste cut",l)}b.on("change",m);if(Kd[g]&&c.$$hasNativeValidators&&g===d.type)b.on("keydown wheel mousedown",function(a){if(!k){var b=this.validity,c=b.badInput,d=b.typeMismatch;k=f.defer(function(){k=null;b.badInput===c&&b.typeMismatch===
-d||m(a)})}});c.$render=function(){var a=c.$isEmpty(c.$viewValue)?"":c.$viewValue;b.val()!==a&&b.val(a)}}function Kb(a,b){return function(d,c){var e,f;if(da(d))return d;if(H(d)){'"'==d.charAt(0)&&'"'==d.charAt(d.length-1)&&(d=d.substring(1,d.length-1));if(tg.test(d))return new Date(d);a.lastIndex=0;if(e=a.exec(d))return e.shift(),f=c?{yyyy:c.getFullYear(),MM:c.getMonth()+1,dd:c.getDate(),HH:c.getHours(),mm:c.getMinutes(),ss:c.getSeconds(),sss:c.getMilliseconds()/1E3}:{yyyy:1970,MM:1,dd:1,HH:0,mm:0,
-ss:0,sss:0},p(e,function(a,c){c<b.length&&(f[b[c]]=+a)}),new Date(f.yyyy,f.MM-1,f.dd,f.HH,f.mm,f.ss||0,1E3*f.sss||0)}return NaN}}function jb(a,b,d,c){return function(e,f,g,h,k,m,l){function n(a){return a&&!(a.getTime&&a.getTime()!==a.getTime())}function p(a){return x(a)&&!da(a)?d(a)||v:a}Ld(e,f,g,h);ib(e,f,g,h,k,m);var A=h&&h.$options&&h.$options.timezone,u;h.$$parserName=a;h.$parsers.push(function(a){return h.$isEmpty(a)?null:b.test(a)?(a=d(a,u),A&&(a=Pb(a,A)),a):v});h.$formatters.push(function(a){if(a&&
-!da(a))throw kb("datefmt",a);if(n(a))return(u=a)&&A&&(u=Pb(u,A,!0)),l("date")(a,c,A);u=null;return""});if(x(g.min)||g.ngMin){var s;h.$validators.min=function(a){return!n(a)||r(s)||d(a)>=s};g.$observe("min",function(a){s=p(a);h.$validate()})}if(x(g.max)||g.ngMax){var q;h.$validators.max=function(a){return!n(a)||r(q)||d(a)<=q};g.$observe("max",function(a){q=p(a);h.$validate()})}}}function Ld(a,b,d,c){(c.$$hasNativeValidators=I(b[0].validity))&&c.$parsers.push(function(a){var c=b.prop("validity")||{};
-return c.badInput&&!c.typeMismatch?v:a})}function Md(a,b,d,c,e){if(x(c)){a=a(c);if(!a.constant)throw kb("constexpr",d,c);return a(b)}return e}function lc(a,b){a="ngClass"+a;return["$animate",function(d){function c(a,b){var c=[],d=0;a:for(;d<a.length;d++){for(var e=a[d],l=0;l<b.length;l++)if(e==b[l])continue a;c.push(e)}return c}function e(a){var b=[];return K(a)?(p(a,function(a){b=b.concat(e(a))}),b):H(a)?a.split(" "):I(a)?(p(a,function(a,c){a&&(b=b.concat(c.split(" ")))}),b):a}return{restrict:"AC",
-link:function(f,g,h){function k(a,b){var c=g.data("$classCounts")||aa(),d=[];p(a,function(a){if(0<b||c[a])c[a]=(c[a]||0)+b,c[a]===+(0<b)&&d.push(a)});g.data("$classCounts",c);return d.join(" ")}function m(a){if(!0===b||f.$index%2===b){var m=e(a||[]);if(!l){var p=k(m,1);h.$addClass(p)}else if(!ma(a,l)){var r=e(l),p=c(m,r),m=c(r,m),p=k(p,1),m=k(m,-1);p&&p.length&&d.addClass(g,p);m&&m.length&&d.removeClass(g,m)}}l=ha(a)}var l;f.$watch(h[a],m,!0);h.$observe("class",function(b){m(f.$eval(h[a]))});"ngClass"!==
-a&&f.$watch("$index",function(c,d){var g=c&1;if(g!==(d&1)){var l=e(f.$eval(h[a]));g===b?(g=k(l,1),h.$addClass(g)):(g=k(l,-1),h.$removeClass(g))}})}}}]}function Jd(a){function b(a,b){b&&!f[a]?(k.addClass(e,a),f[a]=!0):!b&&f[a]&&(k.removeClass(e,a),f[a]=!1)}function d(a,c){a=a?"-"+zc(a,"-"):"";b(lb+a,!0===c);b(Nd+a,!1===c)}var c=a.ctrl,e=a.$element,f={},g=a.set,h=a.unset,k=a.$animate;f[Nd]=!(f[lb]=e.hasClass(lb));c.$setValidity=function(a,e,f){r(e)?(c.$pending||(c.$pending={}),g(c.$pending,a,f)):(c.$pending&&
-h(c.$pending,a,f),Od(c.$pending)&&(c.$pending=v));Ma(e)?e?(h(c.$error,a,f),g(c.$$success,a,f)):(g(c.$error,a,f),h(c.$$success,a,f)):(h(c.$error,a,f),h(c.$$success,a,f));c.$pending?(b(Pd,!0),c.$valid=c.$invalid=v,d("",null)):(b(Pd,!1),c.$valid=Od(c.$error),c.$invalid=!c.$valid,d("",c.$valid));e=c.$pending&&c.$pending[a]?v:c.$error[a]?!1:c.$$success[a]?!0:null;d(a,e);c.$$parentForm.$setValidity(a,e,c)}}function Od(a){if(a)for(var b in a)if(a.hasOwnProperty(b))return!1;return!0}var ug=/^\/(.+)\/([a-z]*)$/,
-F=function(a){return H(a)?a.toLowerCase():a},sa=Object.prototype.hasOwnProperty,rb=function(a){return H(a)?a.toUpperCase():a},Ga,z,qa,ta=[].slice,Wf=[].splice,vg=[].push,oa=Object.prototype.toString,rc=Object.getPrototypeOf,Aa=L("ng"),fa=U.angular||(U.angular={}),Sb,mb=0;Ga=W.documentMode;y.$inject=[];Za.$inject=[];var K=Array.isArray,Zd=/^\[object (?:Uint8|Uint8Clamped|Uint16|Uint32|Int8|Int16|Int32|Float32|Float64)Array\]$/,V=function(a){return H(a)?a.trim():a},vd=function(a){return a.replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g,
-"\\$1").replace(/\x08/g,"\\x08")},Ba=function(){if(!x(Ba.rules)){var a=W.querySelector("[ng-csp]")||W.querySelector("[data-ng-csp]");if(a){var b=a.getAttribute("ng-csp")||a.getAttribute("data-ng-csp");Ba.rules={noUnsafeEval:!b||-1!==b.indexOf("no-unsafe-eval"),noInlineStyle:!b||-1!==b.indexOf("no-inline-style")}}else{a=Ba;try{new Function(""),b=!1}catch(d){b=!0}a.rules={noUnsafeEval:b,noInlineStyle:!1}}}return Ba.rules},ob=function(){if(x(ob.name_))return ob.name_;var a,b,d=Pa.length,c,e;for(b=0;b<
-d;++b)if(c=Pa[b],a=W.querySelector("["+c.replace(":","\\:")+"jq]")){e=a.getAttribute(c+"jq");break}return ob.name_=e},be=/:/g,Pa=["ng-","data-ng-","ng:","x-ng-"],ge=/[A-Z]/g,Ac=!1,Rb,Oa=3,ke={full:"1.4.10",major:1,minor:4,dot:10,codeName:"benignant-oscillation"};R.expando="ng339";var fb=R.cache={},Mf=1;R._data=function(a){return this.cache[a[this.expando]]||{}};var Hf=/([\:\-\_]+(.))/g,If=/^moz([A-Z])/,wb={mouseleave:"mouseout",mouseenter:"mouseover"},Ub=L("jqLite"),Lf=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,
-Tb=/<|&#?\w+;/,Jf=/<([\w:-]+)/,Kf=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,ka={option:[1,'<select multiple="multiple">',"</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ka.optgroup=ka.option;ka.tbody=ka.tfoot=ka.colgroup=ka.caption=ka.thead;ka.th=ka.td;var Rf=Node.prototype.contains||function(a){return!!(this.compareDocumentPosition(a)&
-16)},Qa=R.prototype={ready:function(a){function b(){d||(d=!0,a())}var d=!1;"complete"===W.readyState?setTimeout(b):(this.on("DOMContentLoaded",b),R(U).on("load",b))},toString:function(){var a=[];p(this,function(b){a.push(""+b)});return"["+a.join(", ")+"]"},eq:function(a){return 0<=a?z(this[a]):z(this[this.length+a])},length:0,push:vg,sort:[].sort,splice:[].splice},Bb={};p("multiple selected checked disabled readOnly required open".split(" "),function(a){Bb[F(a)]=a});var Sc={};p("input select option textarea button form details".split(" "),
-function(a){Sc[a]=!0});var ad={ngMinlength:"minlength",ngMaxlength:"maxlength",ngMin:"min",ngMax:"max",ngPattern:"pattern"};p({data:Wb,removeData:ub,hasData:function(a){for(var b in fb[a.ng339])return!0;return!1}},function(a,b){R[b]=a});p({data:Wb,inheritedData:Ab,scope:function(a){return z.data(a,"$scope")||Ab(a.parentNode||a,["$isolateScope","$scope"])},isolateScope:function(a){return z.data(a,"$isolateScope")||z.data(a,"$isolateScopeNoTemplate")},controller:Pc,injector:function(a){return Ab(a,
-"$injector")},removeAttr:function(a,b){a.removeAttribute(b)},hasClass:xb,css:function(a,b,d){b=eb(b);if(x(d))a.style[b]=d;else return a.style[b]},attr:function(a,b,d){var c=a.nodeType;if(c!==Oa&&2!==c&&8!==c)if(c=F(b),Bb[c])if(x(d))d?(a[b]=!0,a.setAttribute(b,c)):(a[b]=!1,a.removeAttribute(c));else return a[b]||(a.attributes.getNamedItem(b)||y).specified?c:v;else if(x(d))a.setAttribute(b,d);else if(a.getAttribute)return a=a.getAttribute(b,2),null===a?v:a},prop:function(a,b,d){if(x(d))a[b]=d;else return a[b]},
-text:function(){function a(a,d){if(r(d)){var c=a.nodeType;return 1===c||c===Oa?a.textContent:""}a.textContent=d}a.$dv="";return a}(),val:function(a,b){if(r(b)){if(a.multiple&&"select"===pa(a)){var d=[];p(a.options,function(a){a.selected&&d.push(a.value||a.text)});return 0===d.length?null:d}return a.value}a.value=b},html:function(a,b){if(r(b))return a.innerHTML;tb(a,!0);a.innerHTML=b},empty:Qc},function(a,b){R.prototype[b]=function(b,c){var e,f,g=this.length;if(a!==Qc&&r(2==a.length&&a!==xb&&a!==Pc?
-b:c)){if(I(b)){for(e=0;e<g;e++)if(a===Wb)a(this[e],b);else for(f in b)a(this[e],f,b[f]);return this}e=a.$dv;g=r(e)?Math.min(g,1):g;for(f=0;f<g;f++){var h=a(this[f],b,c);e=e?e+h:h}return e}for(e=0;e<g;e++)a(this[e],b,c);return this}});p({removeData:ub,on:function(a,b,d,c){if(x(c))throw Ub("onargs");if(Kc(a)){c=vb(a,!0);var e=c.events,f=c.handle;f||(f=c.handle=Of(a,e));c=0<=b.indexOf(" ")?b.split(" "):[b];for(var g=c.length,h=function(b,c,g){var h=e[b];h||(h=e[b]=[],h.specialHandlerWrapper=c,"$destroy"===
-b||g||a.addEventListener(b,f,!1));h.push(d)};g--;)b=c[g],wb[b]?(h(wb[b],Qf),h(b,v,!0)):h(b)}},off:Oc,one:function(a,b,d){a=z(a);a.on(b,function e(){a.off(b,d);a.off(b,e)});a.on(b,d)},replaceWith:function(a,b){var d,c=a.parentNode;tb(a);p(new R(b),function(b){d?c.insertBefore(b,d.nextSibling):c.replaceChild(b,a);d=b})},children:function(a){var b=[];p(a.childNodes,function(a){1===a.nodeType&&b.push(a)});return b},contents:function(a){return a.contentDocument||a.childNodes||[]},append:function(a,b){var d=
-a.nodeType;if(1===d||11===d){b=new R(b);for(var d=0,c=b.length;d<c;d++)a.appendChild(b[d])}},prepend:function(a,b){if(1===a.nodeType){var d=a.firstChild;p(new R(b),function(b){a.insertBefore(b,d)})}},wrap:function(a,b){Mc(a,z(b).eq(0).clone()[0])},remove:Xb,detach:function(a){Xb(a,!0)},after:function(a,b){var d=a,c=a.parentNode;b=new R(b);for(var e=0,f=b.length;e<f;e++){var g=b[e];c.insertBefore(g,d.nextSibling);d=g}},addClass:zb,removeClass:yb,toggleClass:function(a,b,d){b&&p(b.split(" "),function(b){var e=
-d;r(e)&&(e=!xb(a,b));(e?zb:yb)(a,b)})},parent:function(a){return(a=a.parentNode)&&11!==a.nodeType?a:null},next:function(a){return a.nextElementSibling},find:function(a,b){return a.getElementsByTagName?a.getElementsByTagName(b):[]},clone:Vb,triggerHandler:function(a,b,d){var c,e,f=b.type||b,g=vb(a);if(g=(g=g&&g.events)&&g[f])c={preventDefault:function(){this.defaultPrevented=!0},isDefaultPrevented:function(){return!0===this.defaultPrevented},stopImmediatePropagation:function(){this.immediatePropagationStopped=
-!0},isImmediatePropagationStopped:function(){return!0===this.immediatePropagationStopped},stopPropagation:y,type:f,target:a},b.type&&(c=M(c,b)),b=ha(g),e=d?[c].concat(d):[c],p(b,function(b){c.isImmediatePropagationStopped()||b.apply(a,e)})}},function(a,b){R.prototype[b]=function(b,c,e){for(var f,g=0,h=this.length;g<h;g++)r(f)?(f=a(this[g],b,c,e),x(f)&&(f=z(f))):Nc(f,a(this[g],b,c,e));return x(f)?f:this};R.prototype.bind=R.prototype.on;R.prototype.unbind=R.prototype.off});Ta.prototype={put:function(a,
-b){this[Ca(a,this.nextUid)]=b},get:function(a){return this[Ca(a,this.nextUid)]},remove:function(a){var b=this[a=Ca(a,this.nextUid)];delete this[a];return b}};var Ff=[function(){this.$get=[function(){return Ta}]}],Uc=/^[^\(]*\(\s*([^\)]*)\)/m,wg=/,/,xg=/^\s*(_?)(\S+?)\1\s*$/,Tc=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg,Da=L("$injector");db.$$annotate=function(a,b,d){var c;if("function"===typeof a){if(!(c=a.$inject)){c=[];if(a.length){if(b)throw H(d)&&d||(d=a.name||Sf(a)),Da("strictdi",d);b=a.toString().replace(Tc,
-"");b=b.match(Uc);p(b[1].split(wg),function(a){a.replace(xg,function(a,b,d){c.push(d)})})}a.$inject=c}}else K(a)?(b=a.length-1,Ra(a[b],"fn"),c=a.slice(0,b)):Ra(a,"fn",!0);return c};var Qd=L("$animate"),Ye=function(){this.$get=function(){}},Ze=function(){var a=new Ta,b=[];this.$get=["$$AnimateRunner","$rootScope",function(d,c){function e(a,b,c){var d=!1;b&&(b=H(b)?b.split(" "):K(b)?b:[],p(b,function(b){b&&(d=!0,a[b]=c)}));return d}function f(){p(b,function(b){var c=a.get(b);if(c){var d=Tf(b.attr("class")),
-e="",f="";p(c,function(a,b){a!==!!d[b]&&(a?e+=(e.length?" ":"")+b:f+=(f.length?" ":"")+b)});p(b,function(a){e&&zb(a,e);f&&yb(a,f)});a.remove(b)}});b.length=0}return{enabled:y,on:y,off:y,pin:y,push:function(g,h,k,m){m&&m();k=k||{};k.from&&g.css(k.from);k.to&&g.css(k.to);if(k.addClass||k.removeClass)if(h=k.addClass,m=k.removeClass,k=a.get(g)||{},h=e(k,h,!0),m=e(k,m,!1),h||m)a.put(g,k),b.push(g),1===b.length&&c.$$postDigest(f);g=new d;g.complete();return g}}}]},We=["$provide",function(a){var b=this;
-this.$$registeredAnimations=Object.create(null);this.register=function(d,c){if(d&&"."!==d.charAt(0))throw Qd("notcsel",d);var e=d+"-animation";b.$$registeredAnimations[d.substr(1)]=e;a.factory(e,c)};this.classNameFilter=function(a){if(1===arguments.length&&(this.$$classNameFilter=a instanceof RegExp?a:null)&&/(\s+|\/)ng-animate(\s+|\/)/.test(this.$$classNameFilter.toString()))throw Qd("nongcls","ng-animate");return this.$$classNameFilter};this.$get=["$$animateQueue",function(a){function b(a,c,d){if(d){var h;
-a:{for(h=0;h<d.length;h++){var k=d[h];if(1===k.nodeType){h=k;break a}}h=void 0}!h||h.parentNode||h.previousElementSibling||(d=null)}d?d.after(a):c.prepend(a)}return{on:a.on,off:a.off,pin:a.pin,enabled:a.enabled,cancel:function(a){a.end&&a.end()},enter:function(e,f,g,h){f=f&&z(f);g=g&&z(g);f=f||g.parent();b(e,f,g);return a.push(e,"enter",Ea(h))},move:function(e,f,g,h){f=f&&z(f);g=g&&z(g);f=f||g.parent();b(e,f,g);return a.push(e,"move",Ea(h))},leave:function(b,c){return a.push(b,"leave",Ea(c),function(){b.remove()})},
-addClass:function(b,c,g){g=Ea(g);g.addClass=gb(g.addclass,c);return a.push(b,"addClass",g)},removeClass:function(b,c,g){g=Ea(g);g.removeClass=gb(g.removeClass,c);return a.push(b,"removeClass",g)},setClass:function(b,c,g,h){h=Ea(h);h.addClass=gb(h.addClass,c);h.removeClass=gb(h.removeClass,g);return a.push(b,"setClass",h)},animate:function(b,c,g,h,k){k=Ea(k);k.from=k.from?M(k.from,c):c;k.to=k.to?M(k.to,g):g;k.tempClasses=gb(k.tempClasses,h||"ng-inline-animate");return a.push(b,"animate",k)}}}]}],af=
-function(){this.$get=["$$rAF",function(a){function b(b){d.push(b);1<d.length||a(function(){for(var a=0;a<d.length;a++)d[a]();d=[]})}var d=[];return function(){var a=!1;b(function(){a=!0});return function(d){a?d():b(d)}}}]},$e=function(){this.$get=["$q","$sniffer","$$animateAsyncRun","$document","$timeout",function(a,b,d,c,e){function f(a){this.setHost(a);var b=d();this._doneCallbacks=[];this._tick=function(a){var d=c[0];d&&d.hidden?e(a,0,!1):b(a)};this._state=0}f.chain=function(a,b){function c(){if(d===
-a.length)b(!0);else a[d](function(a){!1===a?b(!1):(d++,c())})}var d=0;c()};f.all=function(a,b){function c(f){e=e&&f;++d===a.length&&b(e)}var d=0,e=!0;p(a,function(a){a.done(c)})};f.prototype={setHost:function(a){this.host=a||{}},done:function(a){2===this._state?a():this._doneCallbacks.push(a)},progress:y,getPromise:function(){if(!this.promise){var b=this;this.promise=a(function(a,c){b.done(function(b){!1===b?c():a()})})}return this.promise},then:function(a,b){return this.getPromise().then(a,b)},"catch":function(a){return this.getPromise()["catch"](a)},
-"finally":function(a){return this.getPromise()["finally"](a)},pause:function(){this.host.pause&&this.host.pause()},resume:function(){this.host.resume&&this.host.resume()},end:function(){this.host.end&&this.host.end();this._resolve(!0)},cancel:function(){this.host.cancel&&this.host.cancel();this._resolve(!1)},complete:function(a){var b=this;0===b._state&&(b._state=1,b._tick(function(){b._resolve(a)}))},_resolve:function(a){2!==this._state&&(p(this._doneCallbacks,function(b){b(a)}),this._doneCallbacks.length=
-0,this._state=2)}};return f}]},Xe=function(){this.$get=["$$rAF","$q","$$AnimateRunner",function(a,b,d){return function(b,e){function f(){a(function(){g.addClass&&(b.addClass(g.addClass),g.addClass=null);g.removeClass&&(b.removeClass(g.removeClass),g.removeClass=null);g.to&&(b.css(g.to),g.to=null);h||k.complete();h=!0});return k}var g=e||{};g.$$prepared||(g=Na(g));g.cleanupStyles&&(g.from=g.to=null);g.from&&(b.css(g.from),g.from=null);var h,k=new d;return{start:f,end:f}}}]},ga=L("$compile");Cc.$inject=
-["$provide","$$sanitizeUriProvider"];var Wc=/^((?:x|data)[\:\-_])/i,Xf=L("$controller"),Zc=/^(\S+)(\s+as\s+([\w$]+))?$/,gf=function(){this.$get=["$document",function(a){return function(b){b?!b.nodeType&&b instanceof z&&(b=b[0]):b=a[0].body;return b.offsetWidth+1}}]},bd="application/json",ac={"Content-Type":bd+";charset=utf-8"},Zf=/^\[|^\{(?!\{)/,$f={"[":/]$/,"{":/}$/},Yf=/^\)\]\}',?\n/,yg=L("$http"),fd=function(a){return function(){throw yg("legacy",a);}},Ia=fa.$interpolateMinErr=L("$interpolate");
-Ia.throwNoconcat=function(a){throw Ia("noconcat",a);};Ia.interr=function(a,b){return Ia("interr",a,b.toString())};var zg=/^([^\?#]*)(\?([^#]*))?(#(.*))?$/,bg={http:80,https:443,ftp:21},Cb=L("$location"),Ag={$$html5:!1,$$replace:!1,absUrl:Db("$$absUrl"),url:function(a){if(r(a))return this.$$url;var b=zg.exec(a);(b[1]||""===a)&&this.path(decodeURIComponent(b[1]));(b[2]||b[1]||""===a)&&this.search(b[3]||"");this.hash(b[5]||"");return this},protocol:Db("$$protocol"),host:Db("$$host"),port:Db("$$port"),
-path:kd("$$path",function(a){a=null!==a?a.toString():"";return"/"==a.charAt(0)?a:"/"+a}),search:function(a,b){switch(arguments.length){case 0:return this.$$search;case 1:if(H(a)||O(a))a=a.toString(),this.$$search=xc(a);else if(I(a))a=Na(a,{}),p(a,function(b,c){null==b&&delete a[c]}),this.$$search=a;else throw Cb("isrcharg");break;default:r(b)||null===b?delete this.$$search[a]:this.$$search[a]=b}this.$$compose();return this},hash:kd("$$hash",function(a){return null!==a?a.toString():""}),replace:function(){this.$$replace=
-!0;return this}};p([jd,dc,cc],function(a){a.prototype=Object.create(Ag);a.prototype.state=function(b){if(!arguments.length)return this.$$state;if(a!==cc||!this.$$html5)throw Cb("nostate");this.$$state=r(b)?null:b;return this}});var ba=L("$parse"),cg=Function.prototype.call,dg=Function.prototype.apply,eg=Function.prototype.bind,Lb=aa();p("+ - * / % === !== == != < > <= >= && || ! = |".split(" "),function(a){Lb[a]=!0});var Bg={n:"\n",f:"\f",r:"\r",t:"\t",v:"\v","'":"'",'"':'"'},fc=function(a){this.options=
-a};fc.prototype={constructor:fc,lex:function(a){this.text=a;this.index=0;for(this.tokens=[];this.index<this.text.length;)if(a=this.text.charAt(this.index),'"'===a||"'"===a)this.readString(a);else if(this.isNumber(a)||"."===a&&this.isNumber(this.peek()))this.readNumber();else if(this.isIdent(a))this.readIdent();else if(this.is(a,"(){}[].,;:?"))this.tokens.push({index:this.index,text:a}),this.index++;else if(this.isWhitespace(a))this.index++;else{var b=a+this.peek(),d=b+this.peek(2),c=Lb[b],e=Lb[d];
-Lb[a]||c||e?(a=e?d:c?b:a,this.tokens.push({index:this.index,text:a,operator:!0}),this.index+=a.length):this.throwError("Unexpected next character ",this.index,this.index+1)}return this.tokens},is:function(a,b){return-1!==b.indexOf(a)},peek:function(a){a=a||1;return this.index+a<this.text.length?this.text.charAt(this.index+a):!1},isNumber:function(a){return"0"<=a&&"9">=a&&"string"===typeof a},isWhitespace:function(a){return" "===a||"\r"===a||"\t"===a||"\n"===a||"\v"===a||"\u00a0"===a},isIdent:function(a){return"a"<=
-a&&"z">=a||"A"<=a&&"Z">=a||"_"===a||"$"===a},isExpOperator:function(a){return"-"===a||"+"===a||this.isNumber(a)},throwError:function(a,b,d){d=d||this.index;b=x(b)?"s "+b+"-"+this.index+" ["+this.text.substring(b,d)+"]":" "+d;throw ba("lexerr",a,b,this.text);},readNumber:function(){for(var a="",b=this.index;this.index<this.text.length;){var d=F(this.text.charAt(this.index));if("."==d||this.isNumber(d))a+=d;else{var c=this.peek();if("e"==d&&this.isExpOperator(c))a+=d;else if(this.isExpOperator(d)&&
-c&&this.isNumber(c)&&"e"==a.charAt(a.length-1))a+=d;else if(!this.isExpOperator(d)||c&&this.isNumber(c)||"e"!=a.charAt(a.length-1))break;else this.throwError("Invalid exponent")}this.index++}this.tokens.push({index:b,text:a,constant:!0,value:Number(a)})},readIdent:function(){for(var a=this.index;this.index<this.text.length;){var b=this.text.charAt(this.index);if(!this.isIdent(b)&&!this.isNumber(b))break;this.index++}this.tokens.push({index:a,text:this.text.slice(a,this.index),identifier:!0})},readString:function(a){var b=
-this.index;this.index++;for(var d="",c=a,e=!1;this.index<this.text.length;){var f=this.text.charAt(this.index),c=c+f;if(e)"u"===f?(e=this.text.substring(this.index+1,this.index+5),e.match(/[\da-f]{4}/i)||this.throwError("Invalid unicode escape [\\u"+e+"]"),this.index+=4,d+=String.fromCharCode(parseInt(e,16))):d+=Bg[f]||f,e=!1;else if("\\"===f)e=!0;else{if(f===a){this.index++;this.tokens.push({index:b,text:c,constant:!0,value:d});return}d+=f}this.index++}this.throwError("Unterminated quote",b)}};var s=
-function(a,b){this.lexer=a;this.options=b};s.Program="Program";s.ExpressionStatement="ExpressionStatement";s.AssignmentExpression="AssignmentExpression";s.ConditionalExpression="ConditionalExpression";s.LogicalExpression="LogicalExpression";s.BinaryExpression="BinaryExpression";s.UnaryExpression="UnaryExpression";s.CallExpression="CallExpression";s.MemberExpression="MemberExpression";s.Identifier="Identifier";s.Literal="Literal";s.ArrayExpression="ArrayExpression";s.Property="Property";s.ObjectExpression=
-"ObjectExpression";s.ThisExpression="ThisExpression";s.NGValueParameter="NGValueParameter";s.prototype={ast:function(a){this.text=a;this.tokens=this.lexer.lex(a);a=this.program();0!==this.tokens.length&&this.throwError("is an unexpected token",this.tokens[0]);return a},program:function(){for(var a=[];;)if(0<this.tokens.length&&!this.peek("}",")",";","]")&&a.push(this.expressionStatement()),!this.expect(";"))return{type:s.Program,body:a}},expressionStatement:function(){return{type:s.ExpressionStatement,
-expression:this.filterChain()}},filterChain:function(){for(var a=this.expression();this.expect("|");)a=this.filter(a);return a},expression:function(){return this.assignment()},assignment:function(){var a=this.ternary();this.expect("=")&&(a={type:s.AssignmentExpression,left:a,right:this.assignment(),operator:"="});return a},ternary:function(){var a=this.logicalOR(),b,d;return this.expect("?")&&(b=this.expression(),this.consume(":"))?(d=this.expression(),{type:s.ConditionalExpression,test:a,alternate:b,
-consequent:d}):a},logicalOR:function(){for(var a=this.logicalAND();this.expect("||");)a={type:s.LogicalExpression,operator:"||",left:a,right:this.logicalAND()};return a},logicalAND:function(){for(var a=this.equality();this.expect("&&");)a={type:s.LogicalExpression,operator:"&&",left:a,right:this.equality()};return a},equality:function(){for(var a=this.relational(),b;b=this.expect("==","!=","===","!==");)a={type:s.BinaryExpression,operator:b.text,left:a,right:this.relational()};return a},relational:function(){for(var a=
-this.additive(),b;b=this.expect("<",">","<=",">=");)a={type:s.BinaryExpression,operator:b.text,left:a,right:this.additive()};return a},additive:function(){for(var a=this.multiplicative(),b;b=this.expect("+","-");)a={type:s.BinaryExpression,operator:b.text,left:a,right:this.multiplicative()};return a},multiplicative:function(){for(var a=this.unary(),b;b=this.expect("*","/","%");)a={type:s.BinaryExpression,operator:b.text,left:a,right:this.unary()};return a},unary:function(){var a;return(a=this.expect("+",
-"-","!"))?{type:s.UnaryExpression,operator:a.text,prefix:!0,argument:this.unary()}:this.primary()},primary:function(){var a;this.expect("(")?(a=this.filterChain(),this.consume(")")):this.expect("[")?a=this.arrayDeclaration():this.expect("{")?a=this.object():this.constants.hasOwnProperty(this.peek().text)?a=Na(this.constants[this.consume().text]):this.peek().identifier?a=this.identifier():this.peek().constant?a=this.constant():this.throwError("not a primary expression",this.peek());for(var b;b=this.expect("(",
-"[",".");)"("===b.text?(a={type:s.CallExpression,callee:a,arguments:this.parseArguments()},this.consume(")")):"["===b.text?(a={type:s.MemberExpression,object:a,property:this.expression(),computed:!0},this.consume("]")):"."===b.text?a={type:s.MemberExpression,object:a,property:this.identifier(),computed:!1}:this.throwError("IMPOSSIBLE");return a},filter:function(a){a=[a];for(var b={type:s.CallExpression,callee:this.identifier(),arguments:a,filter:!0};this.expect(":");)a.push(this.expression());return b},
-parseArguments:function(){var a=[];if(")"!==this.peekToken().text){do a.push(this.expression());while(this.expect(","))}return a},identifier:function(){var a=this.consume();a.identifier||this.throwError("is not a valid identifier",a);return{type:s.Identifier,name:a.text}},constant:function(){return{type:s.Literal,value:this.consume().value}},arrayDeclaration:function(){var a=[];if("]"!==this.peekToken().text){do{if(this.peek("]"))break;a.push(this.expression())}while(this.expect(","))}this.consume("]");
-return{type:s.ArrayExpression,elements:a}},object:function(){var a=[],b;if("}"!==this.peekToken().text){do{if(this.peek("}"))break;b={type:s.Property,kind:"init"};this.peek().constant?b.key=this.constant():this.peek().identifier?b.key=this.identifier():this.throwError("invalid key",this.peek());this.consume(":");b.value=this.expression();a.push(b)}while(this.expect(","))}this.consume("}");return{type:s.ObjectExpression,properties:a}},throwError:function(a,b){throw ba("syntax",b.text,a,b.index+1,this.text,
-this.text.substring(b.index));},consume:function(a){if(0===this.tokens.length)throw ba("ueoe",this.text);var b=this.expect(a);b||this.throwError("is unexpected, expecting ["+a+"]",this.peek());return b},peekToken:function(){if(0===this.tokens.length)throw ba("ueoe",this.text);return this.tokens[0]},peek:function(a,b,d,c){return this.peekAhead(0,a,b,d,c)},peekAhead:function(a,b,d,c,e){if(this.tokens.length>a){a=this.tokens[a];var f=a.text;if(f===b||f===d||f===c||f===e||!(b||d||c||e))return a}return!1},
-expect:function(a,b,d,c){return(a=this.peek(a,b,d,c))?(this.tokens.shift(),a):!1},constants:{"true":{type:s.Literal,value:!0},"false":{type:s.Literal,value:!1},"null":{type:s.Literal,value:null},undefined:{type:s.Literal,value:v},"this":{type:s.ThisExpression}}};sd.prototype={compile:function(a,b){var d=this,c=this.astBuilder.ast(a);this.state={nextId:0,filters:{},expensiveChecks:b,fn:{vars:[],body:[],own:{}},assign:{vars:[],body:[],own:{}},inputs:[]};Y(c,d.$filter);var e="",f;this.stage="assign";
-if(f=qd(c))this.state.computing="assign",e=this.nextId(),this.recurse(f,e),this.return_(e),e="fn.assign="+this.generateFunction("assign","s,v,l");f=od(c.body);d.stage="inputs";p(f,function(a,b){var c="fn"+b;d.state[c]={vars:[],body:[],own:{}};d.state.computing=c;var e=d.nextId();d.recurse(a,e);d.return_(e);d.state.inputs.push(c);a.watchId=b});this.state.computing="fn";this.stage="main";this.recurse(c);e='"'+this.USE+" "+this.STRICT+'";\n'+this.filterPrefix()+"var fn="+this.generateFunction("fn","s,l,a,i")+
-e+this.watchFns()+"return fn;";e=(new Function("$filter","ensureSafeMemberName","ensureSafeObject","ensureSafeFunction","getStringValue","ensureSafeAssignContext","ifDefined","plus","text",e))(this.$filter,Wa,xa,md,ld,Eb,fg,nd,a);this.state=this.stage=v;e.literal=rd(c);e.constant=c.constant;return e},USE:"use",STRICT:"strict",watchFns:function(){var a=[],b=this.state.inputs,d=this;p(b,function(b){a.push("var "+b+"="+d.generateFunction(b,"s"))});b.length&&a.push("fn.inputs=["+b.join(",")+"];");return a.join("")},
-generateFunction:function(a,b){return"function("+b+"){"+this.varsPrefix(a)+this.body(a)+"};"},filterPrefix:function(){var a=[],b=this;p(this.state.filters,function(d,c){a.push(d+"=$filter("+b.escape(c)+")")});return a.length?"var "+a.join(",")+";":""},varsPrefix:function(a){return this.state[a].vars.length?"var "+this.state[a].vars.join(",")+";":""},body:function(a){return this.state[a].body.join("")},recurse:function(a,b,d,c,e,f){var g,h,k=this,m,l;c=c||y;if(!f&&x(a.watchId))b=b||this.nextId(),this.if_("i",
-this.lazyAssign(b,this.computedMember("i",a.watchId)),this.lazyRecurse(a,b,d,c,e,!0));else switch(a.type){case s.Program:p(a.body,function(b,c){k.recurse(b.expression,v,v,function(a){h=a});c!==a.body.length-1?k.current().body.push(h,";"):k.return_(h)});break;case s.Literal:l=this.escape(a.value);this.assign(b,l);c(l);break;case s.UnaryExpression:this.recurse(a.argument,v,v,function(a){h=a});l=a.operator+"("+this.ifDefined(h,0)+")";this.assign(b,l);c(l);break;case s.BinaryExpression:this.recurse(a.left,
-v,v,function(a){g=a});this.recurse(a.right,v,v,function(a){h=a});l="+"===a.operator?this.plus(g,h):"-"===a.operator?this.ifDefined(g,0)+a.operator+this.ifDefined(h,0):"("+g+")"+a.operator+"("+h+")";this.assign(b,l);c(l);break;case s.LogicalExpression:b=b||this.nextId();k.recurse(a.left,b);k.if_("&&"===a.operator?b:k.not(b),k.lazyRecurse(a.right,b));c(b);break;case s.ConditionalExpression:b=b||this.nextId();k.recurse(a.test,b);k.if_(b,k.lazyRecurse(a.alternate,b),k.lazyRecurse(a.consequent,b));c(b);
-break;case s.Identifier:b=b||this.nextId();d&&(d.context="inputs"===k.stage?"s":this.assign(this.nextId(),this.getHasOwnProperty("l",a.name)+"?l:s"),d.computed=!1,d.name=a.name);Wa(a.name);k.if_("inputs"===k.stage||k.not(k.getHasOwnProperty("l",a.name)),function(){k.if_("inputs"===k.stage||"s",function(){e&&1!==e&&k.if_(k.not(k.nonComputedMember("s",a.name)),k.lazyAssign(k.nonComputedMember("s",a.name),"{}"));k.assign(b,k.nonComputedMember("s",a.name))})},b&&k.lazyAssign(b,k.nonComputedMember("l",
-a.name)));(k.state.expensiveChecks||Fb(a.name))&&k.addEnsureSafeObject(b);c(b);break;case s.MemberExpression:g=d&&(d.context=this.nextId())||this.nextId();b=b||this.nextId();k.recurse(a.object,g,v,function(){k.if_(k.notNull(g),function(){e&&1!==e&&k.addEnsureSafeAssignContext(g);if(a.computed)h=k.nextId(),k.recurse(a.property,h),k.getStringValue(h),k.addEnsureSafeMemberName(h),e&&1!==e&&k.if_(k.not(k.computedMember(g,h)),k.lazyAssign(k.computedMember(g,h),"{}")),l=k.ensureSafeObject(k.computedMember(g,
-h)),k.assign(b,l),d&&(d.computed=!0,d.name=h);else{Wa(a.property.name);e&&1!==e&&k.if_(k.not(k.nonComputedMember(g,a.property.name)),k.lazyAssign(k.nonComputedMember(g,a.property.name),"{}"));l=k.nonComputedMember(g,a.property.name);if(k.state.expensiveChecks||Fb(a.property.name))l=k.ensureSafeObject(l);k.assign(b,l);d&&(d.computed=!1,d.name=a.property.name)}},function(){k.assign(b,"undefined")});c(b)},!!e);break;case s.CallExpression:b=b||this.nextId();a.filter?(h=k.filter(a.callee.name),m=[],p(a.arguments,
-function(a){var b=k.nextId();k.recurse(a,b);m.push(b)}),l=h+"("+m.join(",")+")",k.assign(b,l),c(b)):(h=k.nextId(),g={},m=[],k.recurse(a.callee,h,g,function(){k.if_(k.notNull(h),function(){k.addEnsureSafeFunction(h);p(a.arguments,function(a){k.recurse(a,k.nextId(),v,function(a){m.push(k.ensureSafeObject(a))})});g.name?(k.state.expensiveChecks||k.addEnsureSafeObject(g.context),l=k.member(g.context,g.name,g.computed)+"("+m.join(",")+")"):l=h+"("+m.join(",")+")";l=k.ensureSafeObject(l);k.assign(b,l)},
-function(){k.assign(b,"undefined")});c(b)}));break;case s.AssignmentExpression:h=this.nextId();g={};if(!pd(a.left))throw ba("lval");this.recurse(a.left,v,g,function(){k.if_(k.notNull(g.context),function(){k.recurse(a.right,h);k.addEnsureSafeObject(k.member(g.context,g.name,g.computed));k.addEnsureSafeAssignContext(g.context);l=k.member(g.context,g.name,g.computed)+a.operator+h;k.assign(b,l);c(b||l)})},1);break;case s.ArrayExpression:m=[];p(a.elements,function(a){k.recurse(a,k.nextId(),v,function(a){m.push(a)})});
-l="["+m.join(",")+"]";this.assign(b,l);c(l);break;case s.ObjectExpression:m=[];p(a.properties,function(a){k.recurse(a.value,k.nextId(),v,function(b){m.push(k.escape(a.key.type===s.Identifier?a.key.name:""+a.key.value)+":"+b)})});l="{"+m.join(",")+"}";this.assign(b,l);c(l);break;case s.ThisExpression:this.assign(b,"s");c("s");break;case s.NGValueParameter:this.assign(b,"v"),c("v")}},getHasOwnProperty:function(a,b){var d=a+"."+b,c=this.current().own;c.hasOwnProperty(d)||(c[d]=this.nextId(!1,a+"&&("+
-this.escape(b)+" in "+a+")"));return c[d]},assign:function(a,b){if(a)return this.current().body.push(a,"=",b,";"),a},filter:function(a){this.state.filters.hasOwnProperty(a)||(this.state.filters[a]=this.nextId(!0));return this.state.filters[a]},ifDefined:function(a,b){return"ifDefined("+a+","+this.escape(b)+")"},plus:function(a,b){return"plus("+a+","+b+")"},return_:function(a){this.current().body.push("return ",a,";")},if_:function(a,b,d){if(!0===a)b();else{var c=this.current().body;c.push("if(",a,
-"){");b();c.push("}");d&&(c.push("else{"),d(),c.push("}"))}},not:function(a){return"!("+a+")"},notNull:function(a){return a+"!=null"},nonComputedMember:function(a,b){return a+"."+b},computedMember:function(a,b){return a+"["+b+"]"},member:function(a,b,d){return d?this.computedMember(a,b):this.nonComputedMember(a,b)},addEnsureSafeObject:function(a){this.current().body.push(this.ensureSafeObject(a),";")},addEnsureSafeMemberName:function(a){this.current().body.push(this.ensureSafeMemberName(a),";")},
-addEnsureSafeFunction:function(a){this.current().body.push(this.ensureSafeFunction(a),";")},addEnsureSafeAssignContext:function(a){this.current().body.push(this.ensureSafeAssignContext(a),";")},ensureSafeObject:function(a){return"ensureSafeObject("+a+",text)"},ensureSafeMemberName:function(a){return"ensureSafeMemberName("+a+",text)"},ensureSafeFunction:function(a){return"ensureSafeFunction("+a+",text)"},getStringValue:function(a){this.assign(a,"getStringValue("+a+",text)")},ensureSafeAssignContext:function(a){return"ensureSafeAssignContext("+
-a+",text)"},lazyRecurse:function(a,b,d,c,e,f){var g=this;return function(){g.recurse(a,b,d,c,e,f)}},lazyAssign:function(a,b){var d=this;return function(){d.assign(a,b)}},stringEscapeRegex:/[^ a-zA-Z0-9]/g,stringEscapeFn:function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)},escape:function(a){if(H(a))return"'"+a.replace(this.stringEscapeRegex,this.stringEscapeFn)+"'";if(O(a))return a.toString();if(!0===a)return"true";if(!1===a)return"false";if(null===a)return"null";if("undefined"===
-typeof a)return"undefined";throw ba("esc");},nextId:function(a,b){var d="v"+this.state.nextId++;a||this.current().vars.push(d+(b?"="+b:""));return d},current:function(){return this.state[this.state.computing]}};td.prototype={compile:function(a,b){var d=this,c=this.astBuilder.ast(a);this.expression=a;this.expensiveChecks=b;Y(c,d.$filter);var e,f;if(e=qd(c))f=this.recurse(e);e=od(c.body);var g;e&&(g=[],p(e,function(a,b){var c=d.recurse(a);a.input=c;g.push(c);a.watchId=b}));var h=[];p(c.body,function(a){h.push(d.recurse(a.expression))});
-e=0===c.body.length?function(){}:1===c.body.length?h[0]:function(a,b){var c;p(h,function(d){c=d(a,b)});return c};f&&(e.assign=function(a,b,c){return f(a,c,b)});g&&(e.inputs=g);e.literal=rd(c);e.constant=c.constant;return e},recurse:function(a,b,d){var c,e,f=this,g;if(a.input)return this.inputs(a.input,a.watchId);switch(a.type){case s.Literal:return this.value(a.value,b);case s.UnaryExpression:return e=this.recurse(a.argument),this["unary"+a.operator](e,b);case s.BinaryExpression:return c=this.recurse(a.left),
-e=this.recurse(a.right),this["binary"+a.operator](c,e,b);case s.LogicalExpression:return c=this.recurse(a.left),e=this.recurse(a.right),this["binary"+a.operator](c,e,b);case s.ConditionalExpression:return this["ternary?:"](this.recurse(a.test),this.recurse(a.alternate),this.recurse(a.consequent),b);case s.Identifier:return Wa(a.name,f.expression),f.identifier(a.name,f.expensiveChecks||Fb(a.name),b,d,f.expression);case s.MemberExpression:return c=this.recurse(a.object,!1,!!d),a.computed||(Wa(a.property.name,
-f.expression),e=a.property.name),a.computed&&(e=this.recurse(a.property)),a.computed?this.computedMember(c,e,b,d,f.expression):this.nonComputedMember(c,e,f.expensiveChecks,b,d,f.expression);case s.CallExpression:return g=[],p(a.arguments,function(a){g.push(f.recurse(a))}),a.filter&&(e=this.$filter(a.callee.name)),a.filter||(e=this.recurse(a.callee,!0)),a.filter?function(a,c,d,f){for(var n=[],p=0;p<g.length;++p)n.push(g[p](a,c,d,f));a=e.apply(v,n,f);return b?{context:v,name:v,value:a}:a}:function(a,
-c,d,l){var n=e(a,c,d,l),p;if(null!=n.value){xa(n.context,f.expression);md(n.value,f.expression);p=[];for(var r=0;r<g.length;++r)p.push(xa(g[r](a,c,d,l),f.expression));p=xa(n.value.apply(n.context,p),f.expression)}return b?{value:p}:p};case s.AssignmentExpression:return c=this.recurse(a.left,!0,1),e=this.recurse(a.right),function(a,d,g,l){var n=c(a,d,g,l);a=e(a,d,g,l);xa(n.value,f.expression);Eb(n.context);n.context[n.name]=a;return b?{value:a}:a};case s.ArrayExpression:return g=[],p(a.elements,function(a){g.push(f.recurse(a))}),
-function(a,c,d,e){for(var f=[],p=0;p<g.length;++p)f.push(g[p](a,c,d,e));return b?{value:f}:f};case s.ObjectExpression:return g=[],p(a.properties,function(a){g.push({key:a.key.type===s.Identifier?a.key.name:""+a.key.value,value:f.recurse(a.value)})}),function(a,c,d,e){for(var f={},p=0;p<g.length;++p)f[g[p].key]=g[p].value(a,c,d,e);return b?{value:f}:f};case s.ThisExpression:return function(a){return b?{value:a}:a};case s.NGValueParameter:return function(a,c,d,e){return b?{value:d}:d}}},"unary+":function(a,
-b){return function(d,c,e,f){d=a(d,c,e,f);d=x(d)?+d:0;return b?{value:d}:d}},"unary-":function(a,b){return function(d,c,e,f){d=a(d,c,e,f);d=x(d)?-d:0;return b?{value:d}:d}},"unary!":function(a,b){return function(d,c,e,f){d=!a(d,c,e,f);return b?{value:d}:d}},"binary+":function(a,b,d){return function(c,e,f,g){var h=a(c,e,f,g);c=b(c,e,f,g);h=nd(h,c);return d?{value:h}:h}},"binary-":function(a,b,d){return function(c,e,f,g){var h=a(c,e,f,g);c=b(c,e,f,g);h=(x(h)?h:0)-(x(c)?c:0);return d?{value:h}:h}},"binary*":function(a,
-b,d){return function(c,e,f,g){c=a(c,e,f,g)*b(c,e,f,g);return d?{value:c}:c}},"binary/":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)/b(c,e,f,g);return d?{value:c}:c}},"binary%":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)%b(c,e,f,g);return d?{value:c}:c}},"binary===":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)===b(c,e,f,g);return d?{value:c}:c}},"binary!==":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)!==b(c,e,f,g);return d?{value:c}:c}},"binary==":function(a,b,
-d){return function(c,e,f,g){c=a(c,e,f,g)==b(c,e,f,g);return d?{value:c}:c}},"binary!=":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)!=b(c,e,f,g);return d?{value:c}:c}},"binary<":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)<b(c,e,f,g);return d?{value:c}:c}},"binary>":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)>b(c,e,f,g);return d?{value:c}:c}},"binary<=":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)<=b(c,e,f,g);return d?{value:c}:c}},"binary>=":function(a,b,d){return function(c,
-e,f,g){c=a(c,e,f,g)>=b(c,e,f,g);return d?{value:c}:c}},"binary&&":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)&&b(c,e,f,g);return d?{value:c}:c}},"binary||":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)||b(c,e,f,g);return d?{value:c}:c}},"ternary?:":function(a,b,d,c){return function(e,f,g,h){e=a(e,f,g,h)?b(e,f,g,h):d(e,f,g,h);return c?{value:e}:e}},value:function(a,b){return function(){return b?{context:v,name:v,value:a}:a}},identifier:function(a,b,d,c,e){return function(f,g,h,k){f=
-g&&a in g?g:f;c&&1!==c&&f&&!f[a]&&(f[a]={});g=f?f[a]:v;b&&xa(g,e);return d?{context:f,name:a,value:g}:g}},computedMember:function(a,b,d,c,e){return function(f,g,h,k){var m=a(f,g,h,k),l,n;null!=m&&(l=b(f,g,h,k),l=ld(l),Wa(l,e),c&&1!==c&&(Eb(m),m&&!m[l]&&(m[l]={})),n=m[l],xa(n,e));return d?{context:m,name:l,value:n}:n}},nonComputedMember:function(a,b,d,c,e,f){return function(g,h,k,m){g=a(g,h,k,m);e&&1!==e&&(Eb(g),g&&!g[b]&&(g[b]={}));h=null!=g?g[b]:v;(d||Fb(b))&&xa(h,f);return c?{context:g,name:b,value:h}:
-h}},inputs:function(a,b){return function(d,c,e,f){return f?f[b]:a(d,c,e)}}};var gc=function(a,b,d){this.lexer=a;this.$filter=b;this.options=d;this.ast=new s(this.lexer);this.astCompiler=d.csp?new td(this.ast,b):new sd(this.ast,b)};gc.prototype={constructor:gc,parse:function(a){return this.astCompiler.compile(a,this.options.expensiveChecks)}};var gg=Object.prototype.valueOf,ya=L("$sce"),la={HTML:"html",CSS:"css",URL:"url",RESOURCE_URL:"resourceUrl",JS:"js"},ga=L("$compile"),Z=W.createElement("a"),
-xd=wa(U.location.href);yd.$inject=["$document"];Jc.$inject=["$provide"];var Fd=22,Ed=".",ic="0";zd.$inject=["$locale"];Bd.$inject=["$locale"];var sg={yyyy:ca("FullYear",4),yy:ca("FullYear",2,0,!0),y:ca("FullYear",1),MMMM:Hb("Month"),MMM:Hb("Month",!0),MM:ca("Month",2,1),M:ca("Month",1,1),dd:ca("Date",2),d:ca("Date",1),HH:ca("Hours",2),H:ca("Hours",1),hh:ca("Hours",2,-12),h:ca("Hours",1,-12),mm:ca("Minutes",2),m:ca("Minutes",1),ss:ca("Seconds",2),s:ca("Seconds",1),sss:ca("Milliseconds",3),EEEE:Hb("Day"),
-EEE:Hb("Day",!0),a:function(a,b){return 12>a.getHours()?b.AMPMS[0]:b.AMPMS[1]},Z:function(a,b,d){a=-1*d;return a=(0<=a?"+":"")+(Gb(Math[0<a?"floor":"ceil"](a/60),2)+Gb(Math.abs(a%60),2))},ww:Hd(2),w:Hd(1),G:jc,GG:jc,GGG:jc,GGGG:function(a,b){return 0>=a.getFullYear()?b.ERANAMES[0]:b.ERANAMES[1]}},rg=/((?:[^yMdHhmsaZEwG']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z|G+|w+))(.*)/,qg=/^\-?\d+$/;Ad.$inject=["$locale"];var lg=na(F),mg=na(rb);Cd.$inject=["$parse"];var me=na({restrict:"E",compile:function(a,
-b){if(!b.href&&!b.xlinkHref)return function(a,b){if("a"===b[0].nodeName.toLowerCase()){var e="[object SVGAnimatedString]"===oa.call(b.prop("href"))?"xlink:href":"href";b.on("click",function(a){b.attr(e)||a.preventDefault()})}}}}),sb={};p(Bb,function(a,b){function d(a,d,e){a.$watch(e[c],function(a){e.$set(b,!!a)})}if("multiple"!=a){var c=va("ng-"+b),e=d;"checked"===a&&(e=function(a,b,e){e.ngModel!==e[c]&&d(a,b,e)});sb[c]=function(){return{restrict:"A",priority:100,link:e}}}});p(ad,function(a,b){sb[b]=
-function(){return{priority:100,link:function(a,c,e){if("ngPattern"===b&&"/"==e.ngPattern.charAt(0)&&(c=e.ngPattern.match(ug))){e.$set("ngPattern",new RegExp(c[1],c[2]));return}a.$watch(e[b],function(a){e.$set(b,a)})}}}});p(["src","srcset","href"],function(a){var b=va("ng-"+a);sb[b]=function(){return{priority:99,link:function(d,c,e){var f=a,g=a;"href"===a&&"[object SVGAnimatedString]"===oa.call(c.prop("href"))&&(g="xlinkHref",e.$attr[g]="xlink:href",f=null);e.$observe(b,function(b){b?(e.$set(g,b),
-Ga&&f&&c.prop(f,e[g])):"href"===a&&e.$set(g,null)})}}}});var Ib={$addControl:y,$$renameControl:function(a,b){a.$name=b},$removeControl:y,$setValidity:y,$setDirty:y,$setPristine:y,$setSubmitted:y};Id.$inject=["$element","$attrs","$scope","$animate","$interpolate"];var Rd=function(a){return["$timeout","$parse",function(b,d){function c(a){return""===a?d('this[""]').assign:d(a).assign||y}return{name:"form",restrict:a?"EAC":"E",require:["form","^^?form"],controller:Id,compile:function(d,f){d.addClass(Xa).addClass(lb);
-var g=f.name?"name":a&&f.ngForm?"ngForm":!1;return{pre:function(a,d,e,f){var n=f[0];if(!("action"in e)){var p=function(b){a.$apply(function(){n.$commitViewValue();n.$setSubmitted()});b.preventDefault()};d[0].addEventListener("submit",p,!1);d.on("$destroy",function(){b(function(){d[0].removeEventListener("submit",p,!1)},0,!1)})}(f[1]||n.$$parentForm).$addControl(n);var r=g?c(n.$name):y;g&&(r(a,n),e.$observe(g,function(b){n.$name!==b&&(r(a,v),n.$$parentForm.$$renameControl(n,b),r=c(n.$name),r(a,n))}));
-d.on("$destroy",function(){n.$$parentForm.$removeControl(n);r(a,v);M(n,Ib)})}}}}}]},ne=Rd(),Ae=Rd(!0),tg=/\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z)/,Cg=/^[a-z][a-z\d.+-]*:\/*(?:[^:@]+(?::[^@]+)?@)?(?:[^\s:/?#]+|\[[a-f\d:]+\])(?::\d+)?(?:\/[^?#]*)?(?:\?[^#]*)?(?:#.*)?$/i,Dg=/^[a-z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i,Eg=/^\s*(\-|\+)?(\d+|(\d*(\.\d*)))([eE][+-]?\d+)?\s*$/,Sd=/^(\d{4})-(\d{2})-(\d{2})$/,Td=/^(\d{4})-(\d\d)-(\d\d)T(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,
-mc=/^(\d{4})-W(\d\d)$/,Ud=/^(\d{4})-(\d\d)$/,Vd=/^(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,Kd=aa();p(["date","datetime-local","month","time","week"],function(a){Kd[a]=!0});var Wd={text:function(a,b,d,c,e,f){ib(a,b,d,c,e,f);kc(c)},date:jb("date",Sd,Kb(Sd,["yyyy","MM","dd"]),"yyyy-MM-dd"),"datetime-local":jb("datetimelocal",Td,Kb(Td,"yyyy MM dd HH mm ss sss".split(" ")),"yyyy-MM-ddTHH:mm:ss.sss"),time:jb("time",Vd,Kb(Vd,["HH","mm","ss","sss"]),"HH:mm:ss.sss"),week:jb("week",mc,function(a,b){if(da(a))return a;
-if(H(a)){mc.lastIndex=0;var d=mc.exec(a);if(d){var c=+d[1],e=+d[2],f=d=0,g=0,h=0,k=Gd(c),e=7*(e-1);b&&(d=b.getHours(),f=b.getMinutes(),g=b.getSeconds(),h=b.getMilliseconds());return new Date(c,0,k.getDate()+e,d,f,g,h)}}return NaN},"yyyy-Www"),month:jb("month",Ud,Kb(Ud,["yyyy","MM"]),"yyyy-MM"),number:function(a,b,d,c,e,f){Ld(a,b,d,c);ib(a,b,d,c,e,f);c.$$parserName="number";c.$parsers.push(function(a){return c.$isEmpty(a)?null:Eg.test(a)?parseFloat(a):v});c.$formatters.push(function(a){if(!c.$isEmpty(a)){if(!O(a))throw kb("numfmt",
-a);a=a.toString()}return a});if(x(d.min)||d.ngMin){var g;c.$validators.min=function(a){return c.$isEmpty(a)||r(g)||a>=g};d.$observe("min",function(a){x(a)&&!O(a)&&(a=parseFloat(a,10));g=O(a)&&!isNaN(a)?a:v;c.$validate()})}if(x(d.max)||d.ngMax){var h;c.$validators.max=function(a){return c.$isEmpty(a)||r(h)||a<=h};d.$observe("max",function(a){x(a)&&!O(a)&&(a=parseFloat(a,10));h=O(a)&&!isNaN(a)?a:v;c.$validate()})}},url:function(a,b,d,c,e,f){ib(a,b,d,c,e,f);kc(c);c.$$parserName="url";c.$validators.url=
-function(a,b){var d=a||b;return c.$isEmpty(d)||Cg.test(d)}},email:function(a,b,d,c,e,f){ib(a,b,d,c,e,f);kc(c);c.$$parserName="email";c.$validators.email=function(a,b){var d=a||b;return c.$isEmpty(d)||Dg.test(d)}},radio:function(a,b,d,c){r(d.name)&&b.attr("name",++mb);b.on("click",function(a){b[0].checked&&c.$setViewValue(d.value,a&&a.type)});c.$render=function(){b[0].checked=d.value==c.$viewValue};d.$observe("value",c.$render)},checkbox:function(a,b,d,c,e,f,g,h){var k=Md(h,a,"ngTrueValue",d.ngTrueValue,
-!0),m=Md(h,a,"ngFalseValue",d.ngFalseValue,!1);b.on("click",function(a){c.$setViewValue(b[0].checked,a&&a.type)});c.$render=function(){b[0].checked=c.$viewValue};c.$isEmpty=function(a){return!1===a};c.$formatters.push(function(a){return ma(a,k)});c.$parsers.push(function(a){return a?k:m})},hidden:y,button:y,submit:y,reset:y,file:y},Dc=["$browser","$sniffer","$filter","$parse",function(a,b,d,c){return{restrict:"E",require:["?ngModel"],link:{pre:function(e,f,g,h){h[0]&&(Wd[F(g.type)]||Wd.text)(e,f,
-g,h[0],b,a,d,c)}}}}],Fg=/^(true|false|\d+)$/,Se=function(){return{restrict:"A",priority:100,compile:function(a,b){return Fg.test(b.ngValue)?function(a,b,e){e.$set("value",a.$eval(e.ngValue))}:function(a,b,e){a.$watch(e.ngValue,function(a){e.$set("value",a)})}}}},se=["$compile",function(a){return{restrict:"AC",compile:function(b){a.$$addBindingClass(b);return function(b,c,e){a.$$addBindingInfo(c,e.ngBind);c=c[0];b.$watch(e.ngBind,function(a){c.textContent=r(a)?"":a})}}}}],ue=["$interpolate","$compile",
-function(a,b){return{compile:function(d){b.$$addBindingClass(d);return function(c,d,f){c=a(d.attr(f.$attr.ngBindTemplate));b.$$addBindingInfo(d,c.expressions);d=d[0];f.$observe("ngBindTemplate",function(a){d.textContent=r(a)?"":a})}}}}],te=["$sce","$parse","$compile",function(a,b,d){return{restrict:"A",compile:function(c,e){var f=b(e.ngBindHtml),g=b(e.ngBindHtml,function(a){return(a||"").toString()});d.$$addBindingClass(c);return function(b,c,e){d.$$addBindingInfo(c,e.ngBindHtml);b.$watch(g,function(){c.html(a.getTrustedHtml(f(b))||
-"")})}}}}],Re=na({restrict:"A",require:"ngModel",link:function(a,b,d,c){c.$viewChangeListeners.push(function(){a.$eval(d.ngChange)})}}),ve=lc("",!0),xe=lc("Odd",0),we=lc("Even",1),ye=Ka({compile:function(a,b){b.$set("ngCloak",v);a.removeClass("ng-cloak")}}),ze=[function(){return{restrict:"A",scope:!0,controller:"@",priority:500}}],Ic={},Gg={blur:!0,focus:!0};p("click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste".split(" "),
-function(a){var b=va("ng-"+a);Ic[b]=["$parse","$rootScope",function(d,c){return{restrict:"A",compile:function(e,f){var g=d(f[b],null,!0);return function(b,d){d.on(a,function(d){var e=function(){g(b,{$event:d})};Gg[a]&&c.$$phase?b.$evalAsync(e):b.$apply(e)})}}}}]});var Ce=["$animate",function(a){return{multiElement:!0,transclude:"element",priority:600,terminal:!0,restrict:"A",$$tlb:!0,link:function(b,d,c,e,f){var g,h,k;b.$watch(c.ngIf,function(b){b?h||f(function(b,e){h=e;b[b.length++]=W.createComment(" end ngIf: "+
-c.ngIf+" ");g={clone:b};a.enter(b,d.parent(),d)}):(k&&(k.remove(),k=null),h&&(h.$destroy(),h=null),g&&(k=qb(g.clone),a.leave(k).then(function(){k=null}),g=null))})}}}],De=["$templateRequest","$anchorScroll","$animate",function(a,b,d){return{restrict:"ECA",priority:400,terminal:!0,transclude:"element",controller:fa.noop,compile:function(c,e){var f=e.ngInclude||e.src,g=e.onload||"",h=e.autoscroll;return function(c,e,l,n,p){var r=0,u,s,q,w=function(){s&&(s.remove(),s=null);u&&(u.$destroy(),u=null);q&&
-(d.leave(q).then(function(){s=null}),s=q,q=null)};c.$watch(f,function(f){var l=function(){!x(h)||h&&!c.$eval(h)||b()},D=++r;f?(a(f,!0).then(function(a){if(!c.$$destroyed&&D===r){var b=c.$new();n.template=a;a=p(b,function(a){w();d.enter(a,null,e).then(l)});u=b;q=a;u.$emit("$includeContentLoaded",f);c.$eval(g)}},function(){c.$$destroyed||D!==r||(w(),c.$emit("$includeContentError",f))}),c.$emit("$includeContentRequested",f)):(w(),n.template=null)})}}}}],Ue=["$compile",function(a){return{restrict:"ECA",
-priority:-400,require:"ngInclude",link:function(b,d,c,e){/SVG/.test(d[0].toString())?(d.empty(),a(Lc(e.template,W).childNodes)(b,function(a){d.append(a)},{futureParentElement:d})):(d.html(e.template),a(d.contents())(b))}}}],Ee=Ka({priority:450,compile:function(){return{pre:function(a,b,d){a.$eval(d.ngInit)}}}}),Qe=function(){return{restrict:"A",priority:100,require:"ngModel",link:function(a,b,d,c){var e=b.attr(d.$attr.ngList)||", ",f="false"!==d.ngTrim,g=f?V(e):e;c.$parsers.push(function(a){if(!r(a)){var b=
-[];a&&p(a.split(g),function(a){a&&b.push(f?V(a):a)});return b}});c.$formatters.push(function(a){return K(a)?a.join(e):v});c.$isEmpty=function(a){return!a||!a.length}}}},lb="ng-valid",Nd="ng-invalid",Xa="ng-pristine",Jb="ng-dirty",Pd="ng-pending",kb=L("ngModel"),Hg=["$scope","$exceptionHandler","$attrs","$element","$parse","$animate","$timeout","$rootScope","$q","$interpolate",function(a,b,d,c,e,f,g,h,k,m){this.$modelValue=this.$viewValue=Number.NaN;this.$$rawModelValue=v;this.$validators={};this.$asyncValidators=
-{};this.$parsers=[];this.$formatters=[];this.$viewChangeListeners=[];this.$untouched=!0;this.$touched=!1;this.$pristine=!0;this.$dirty=!1;this.$valid=!0;this.$invalid=!1;this.$error={};this.$$success={};this.$pending=v;this.$name=m(d.name||"",!1)(a);this.$$parentForm=Ib;var l=e(d.ngModel),n=l.assign,s=l,A=n,u=null,z,q=this;this.$$setOptions=function(a){if((q.$options=a)&&a.getterSetter){var b=e(d.ngModel+"()"),f=e(d.ngModel+"($$$p)");s=function(a){var c=l(a);E(c)&&(c=b(a));return c};A=function(a,
-b){E(l(a))?f(a,{$$$p:q.$modelValue}):n(a,q.$modelValue)}}else if(!l.assign)throw kb("nonassign",d.ngModel,ua(c));};this.$render=y;this.$isEmpty=function(a){return r(a)||""===a||null===a||a!==a};var w=0;Jd({ctrl:this,$element:c,set:function(a,b){a[b]=!0},unset:function(a,b){delete a[b]},$animate:f});this.$setPristine=function(){q.$dirty=!1;q.$pristine=!0;f.removeClass(c,Jb);f.addClass(c,Xa)};this.$setDirty=function(){q.$dirty=!0;q.$pristine=!1;f.removeClass(c,Xa);f.addClass(c,Jb);q.$$parentForm.$setDirty()};
-this.$setUntouched=function(){q.$touched=!1;q.$untouched=!0;f.setClass(c,"ng-untouched","ng-touched")};this.$setTouched=function(){q.$touched=!0;q.$untouched=!1;f.setClass(c,"ng-touched","ng-untouched")};this.$rollbackViewValue=function(){g.cancel(u);q.$viewValue=q.$$lastCommittedViewValue;q.$render()};this.$validate=function(){if(!O(q.$modelValue)||!isNaN(q.$modelValue)){var a=q.$$rawModelValue,b=q.$valid,c=q.$modelValue,d=q.$options&&q.$options.allowInvalid;q.$$runValidators(a,q.$$lastCommittedViewValue,
-function(e){d||b===e||(q.$modelValue=e?a:v,q.$modelValue!==c&&q.$$writeModelToScope())})}};this.$$runValidators=function(a,b,c){function d(){var c=!0;p(q.$validators,function(d,e){var g=d(a,b);c=c&&g;f(e,g)});return c?!0:(p(q.$asyncValidators,function(a,b){f(b,null)}),!1)}function e(){var c=[],d=!0;p(q.$asyncValidators,function(e,g){var h=e(a,b);if(!h||!E(h.then))throw kb("nopromise",h);f(g,v);c.push(h.then(function(){f(g,!0)},function(a){d=!1;f(g,!1)}))});c.length?k.all(c).then(function(){g(d)},
-y):g(!0)}function f(a,b){h===w&&q.$setValidity(a,b)}function g(a){h===w&&c(a)}w++;var h=w;(function(){var a=q.$$parserName||"parse";if(r(z))f(a,null);else return z||(p(q.$validators,function(a,b){f(b,null)}),p(q.$asyncValidators,function(a,b){f(b,null)})),f(a,z),z;return!0})()?d()?e():g(!1):g(!1)};this.$commitViewValue=function(){var a=q.$viewValue;g.cancel(u);if(q.$$lastCommittedViewValue!==a||""===a&&q.$$hasNativeValidators)q.$$lastCommittedViewValue=a,q.$pristine&&this.$setDirty(),this.$$parseAndValidate()};
-this.$$parseAndValidate=function(){var b=q.$$lastCommittedViewValue;if(z=r(b)?v:!0)for(var c=0;c<q.$parsers.length;c++)if(b=q.$parsers[c](b),r(b)){z=!1;break}O(q.$modelValue)&&isNaN(q.$modelValue)&&(q.$modelValue=s(a));var d=q.$modelValue,e=q.$options&&q.$options.allowInvalid;q.$$rawModelValue=b;e&&(q.$modelValue=b,q.$modelValue!==d&&q.$$writeModelToScope());q.$$runValidators(b,q.$$lastCommittedViewValue,function(a){e||(q.$modelValue=a?b:v,q.$modelValue!==d&&q.$$writeModelToScope())})};this.$$writeModelToScope=
-function(){A(a,q.$modelValue);p(q.$viewChangeListeners,function(a){try{a()}catch(c){b(c)}})};this.$setViewValue=function(a,b){q.$viewValue=a;q.$options&&!q.$options.updateOnDefault||q.$$debounceViewValueCommit(b)};this.$$debounceViewValueCommit=function(b){var c=0,d=q.$options;d&&x(d.debounce)&&(d=d.debounce,O(d)?c=d:O(d[b])?c=d[b]:O(d["default"])&&(c=d["default"]));g.cancel(u);c?u=g(function(){q.$commitViewValue()},c):h.$$phase?q.$commitViewValue():a.$apply(function(){q.$commitViewValue()})};a.$watch(function(){var b=
-s(a);if(b!==q.$modelValue&&(q.$modelValue===q.$modelValue||b===b)){q.$modelValue=q.$$rawModelValue=b;z=v;for(var c=q.$formatters,d=c.length,e=b;d--;)e=c[d](e);q.$viewValue!==e&&(q.$viewValue=q.$$lastCommittedViewValue=e,q.$render(),q.$$runValidators(b,e,y))}return b})}],Pe=["$rootScope",function(a){return{restrict:"A",require:["ngModel","^?form","^?ngModelOptions"],controller:Hg,priority:1,compile:function(b){b.addClass(Xa).addClass("ng-untouched").addClass(lb);return{pre:function(a,b,e,f){var g=
-f[0];b=f[1]||g.$$parentForm;g.$$setOptions(f[2]&&f[2].$options);b.$addControl(g);e.$observe("name",function(a){g.$name!==a&&g.$$parentForm.$$renameControl(g,a)});a.$on("$destroy",function(){g.$$parentForm.$removeControl(g)})},post:function(b,c,e,f){var g=f[0];if(g.$options&&g.$options.updateOn)c.on(g.$options.updateOn,function(a){g.$$debounceViewValueCommit(a&&a.type)});c.on("blur",function(c){g.$touched||(a.$$phase?b.$evalAsync(g.$setTouched):b.$apply(g.$setTouched))})}}}}}],Ig=/(\s+|^)default(\s+|$)/,
-Te=function(){return{restrict:"A",controller:["$scope","$attrs",function(a,b){var d=this;this.$options=Na(a.$eval(b.ngModelOptions));x(this.$options.updateOn)?(this.$options.updateOnDefault=!1,this.$options.updateOn=V(this.$options.updateOn.replace(Ig,function(){d.$options.updateOnDefault=!0;return" "}))):this.$options.updateOnDefault=!0}]}},Fe=Ka({terminal:!0,priority:1E3}),Jg=L("ngOptions"),Kg=/^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+group\s+by\s+([\s\S]+?))?(?:\s+disable\s+when\s+([\s\S]+?))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?$/,
-Ne=["$compile","$parse",function(a,b){function d(a,c,d){function e(a,b,c,d,f){this.selectValue=a;this.viewValue=b;this.label=c;this.group=d;this.disabled=f}function m(a){var b;if(!p&&za(a))b=a;else{b=[];for(var c in a)a.hasOwnProperty(c)&&"$"!==c.charAt(0)&&b.push(c)}return b}var l=a.match(Kg);if(!l)throw Jg("iexp",a,ua(c));var n=l[5]||l[7],p=l[6];a=/ as /.test(l[0])&&l[1];var r=l[9];c=b(l[2]?l[1]:n);var s=a&&b(a)||c,v=r&&b(r),q=r?function(a,b){return v(d,b)}:function(a){return Ca(a)},w=function(a,
-b){return q(a,C(a,b))},t=b(l[2]||l[1]),x=b(l[3]||""),D=b(l[4]||""),z=b(l[8]),B={},C=p?function(a,b){B[p]=b;B[n]=a;return B}:function(a){B[n]=a;return B};return{trackBy:r,getTrackByValue:w,getWatchables:b(z,function(a){var b=[];a=a||[];for(var c=m(a),e=c.length,f=0;f<e;f++){var g=a===c?f:c[f],k=C(a[g],g),g=q(a[g],k);b.push(g);if(l[2]||l[1])g=t(d,k),b.push(g);l[4]&&(k=D(d,k),b.push(k))}return b}),getOptions:function(){for(var a=[],b={},c=z(d)||[],f=m(c),g=f.length,l=0;l<g;l++){var n=c===f?l:f[l],p=
-C(c[n],n),v=s(d,p),n=q(v,p),G=t(d,p),B=x(d,p),p=D(d,p),v=new e(n,v,G,B,p);a.push(v);b[n]=v}return{items:a,selectValueMap:b,getOptionFromViewValue:function(a){return b[w(a)]},getViewValueFromOption:function(a){return r?fa.copy(a.viewValue):a.viewValue}}}}}var c=W.createElement("option"),e=W.createElement("optgroup");return{restrict:"A",terminal:!0,require:["select","?ngModel"],link:{pre:function(a,b,c,d){d[0].registerOption=y},post:function(b,g,h,k){function m(a,b){a.element=b;b.disabled=a.disabled;
-a.label!==b.label&&(b.label=a.label,b.textContent=a.label);a.value!==b.value&&(b.value=a.selectValue)}function l(a,b,c,d){b&&F(b.nodeName)===c?c=b:(c=d.cloneNode(!1),b?a.insertBefore(c,b):a.appendChild(c));return c}function n(a){for(var b;a;)b=a.nextSibling,Xb(a),a=b}function r(a){var b=w&&w[0],c=y&&y[0];if(b||c)for(;a&&(a===b||a===c||8===a.nodeType||"option"===pa(a)&&""===a.value);)a=a.nextSibling;return a}function s(){var a=B&&v.readValue();B=C.getOptions();var b={},d=g[0].firstChild;D&&g.prepend(w);
-d=r(d);B.items.forEach(function(a){var f,h;a.group?(f=b[a.group],f||(f=l(g[0],d,"optgroup",e),d=f.nextSibling,f.label=a.group,f=b[a.group]={groupElement:f,currentOptionElement:f.firstChild}),h=l(f.groupElement,f.currentOptionElement,"option",c),m(a,h),f.currentOptionElement=h.nextSibling):(h=l(g[0],d,"option",c),m(a,h),d=h.nextSibling)});Object.keys(b).forEach(function(a){n(b[a].currentOptionElement)});n(d);u.$render();if(!u.$isEmpty(a)){var f=v.readValue();(C.trackBy||q?ma(a,f):a===f)||(u.$setViewValue(f),
-u.$render())}}var u=k[1];if(u){var v=k[0],q=h.multiple,w;k=0;for(var t=g.children(),x=t.length;k<x;k++)if(""===t[k].value){w=t.eq(k);break}var D=!!w,y=z(c.cloneNode(!1));y.val("?");var B,C=d(h.ngOptions,g,b);q?(u.$isEmpty=function(a){return!a||0===a.length},v.writeValue=function(a){B.items.forEach(function(a){a.element.selected=!1});a&&a.forEach(function(a){(a=B.getOptionFromViewValue(a))&&!a.disabled&&(a.element.selected=!0)})},v.readValue=function(){var a=g.val()||[],b=[];p(a,function(a){(a=B.selectValueMap[a])&&
-!a.disabled&&b.push(B.getViewValueFromOption(a))});return b},C.trackBy&&b.$watchCollection(function(){if(K(u.$viewValue))return u.$viewValue.map(function(a){return C.getTrackByValue(a)})},function(){u.$render()})):(v.writeValue=function(a){var b=B.getOptionFromViewValue(a);b&&!b.disabled?(g[0].value!==b.selectValue&&(y.remove(),D||w.remove(),g[0].value=b.selectValue,b.element.selected=!0),b.element.setAttribute("selected","selected")):null===a||D?(y.remove(),D||g.prepend(w),g.val(""),w.prop("selected",
-!0),w.attr("selected",!0)):(D||w.remove(),g.prepend(y),g.val("?"),y.prop("selected",!0),y.attr("selected",!0))},v.readValue=function(){var a=B.selectValueMap[g.val()];return a&&!a.disabled?(D||w.remove(),y.remove(),B.getViewValueFromOption(a)):null},C.trackBy&&b.$watch(function(){return C.getTrackByValue(u.$viewValue)},function(){u.$render()}));D?(w.remove(),a(w)(b),w.removeClass("ng-scope")):w=z(c.cloneNode(!1));s();b.$watchCollection(C.getWatchables,s)}}}}}],Ge=["$locale","$interpolate","$log",
-function(a,b,d){var c=/{}/g,e=/^when(Minus)?(.+)$/;return{link:function(f,g,h){function k(a){g.text(a||"")}var m=h.count,l=h.$attr.when&&g.attr(h.$attr.when),n=h.offset||0,s=f.$eval(l)||{},v={},u=b.startSymbol(),x=b.endSymbol(),q=u+m+"-"+n+x,w=fa.noop,t;p(h,function(a,b){var c=e.exec(b);c&&(c=(c[1]?"-":"")+F(c[2]),s[c]=g.attr(h.$attr[b]))});p(s,function(a,d){v[d]=b(a.replace(c,q))});f.$watch(m,function(b){var c=parseFloat(b),e=isNaN(c);e||c in s||(c=a.pluralCat(c-n));c===t||e&&O(t)&&isNaN(t)||(w(),
-e=v[c],r(e)?(null!=b&&d.debug("ngPluralize: no rule defined for '"+c+"' in "+l),w=y,k()):w=f.$watch(e,k),t=c)})}}}],He=["$parse","$animate",function(a,b){var d=L("ngRepeat"),c=function(a,b,c,d,k,m,l){a[c]=d;k&&(a[k]=m);a.$index=b;a.$first=0===b;a.$last=b===l-1;a.$middle=!(a.$first||a.$last);a.$odd=!(a.$even=0===(b&1))};return{restrict:"A",multiElement:!0,transclude:"element",priority:1E3,terminal:!0,$$tlb:!0,compile:function(e,f){var g=f.ngRepeat,h=W.createComment(" end ngRepeat: "+g+" "),k=g.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+track\s+by\s+([\s\S]+?))?\s*$/);
-if(!k)throw d("iexp",g);var m=k[1],l=k[2],n=k[3],r=k[4],k=m.match(/^(?:(\s*[\$\w]+)|\(\s*([\$\w]+)\s*,\s*([\$\w]+)\s*\))$/);if(!k)throw d("iidexp",m);var s=k[3]||k[1],u=k[2];if(n&&(!/^[$a-zA-Z_][$a-zA-Z0-9_]*$/.test(n)||/^(null|undefined|this|\$index|\$first|\$middle|\$last|\$even|\$odd|\$parent|\$root|\$id)$/.test(n)))throw d("badident",n);var x,q,w,t,y={$id:Ca};r?x=a(r):(w=function(a,b){return Ca(b)},t=function(a){return a});return function(a,e,f,k,m){x&&(q=function(b,c,d){u&&(y[u]=b);y[s]=c;y.$index=
-d;return x(a,y)});var r=aa();a.$watchCollection(l,function(f){var k,l,x=e[0],y,z=aa(),G,B,C,E,H,F,I;n&&(a[n]=f);if(za(f))H=f,l=q||w;else for(I in l=q||t,H=[],f)sa.call(f,I)&&"$"!==I.charAt(0)&&H.push(I);G=H.length;I=Array(G);for(k=0;k<G;k++)if(B=f===H?k:H[k],C=f[B],E=l(B,C,k),r[E])F=r[E],delete r[E],z[E]=F,I[k]=F;else{if(z[E])throw p(I,function(a){a&&a.scope&&(r[a.id]=a)}),d("dupes",g,E,C);I[k]={id:E,scope:v,clone:v};z[E]=!0}for(y in r){F=r[y];E=qb(F.clone);b.leave(E);if(E[0].parentNode)for(k=0,l=
-E.length;k<l;k++)E[k].$$NG_REMOVED=!0;F.scope.$destroy()}for(k=0;k<G;k++)if(B=f===H?k:H[k],C=f[B],F=I[k],F.scope){y=x;do y=y.nextSibling;while(y&&y.$$NG_REMOVED);F.clone[0]!=y&&b.move(qb(F.clone),null,x);x=F.clone[F.clone.length-1];c(F.scope,k,s,C,u,B,G)}else m(function(a,d){F.scope=d;var e=h.cloneNode(!1);a[a.length++]=e;b.enter(a,null,x);x=e;F.clone=a;z[F.id]=F;c(F.scope,k,s,C,u,B,G)});r=z})}}}}],Ie=["$animate",function(a){return{restrict:"A",multiElement:!0,link:function(b,d,c){b.$watch(c.ngShow,
-function(b){a[b?"removeClass":"addClass"](d,"ng-hide",{tempClasses:"ng-hide-animate"})})}}}],Be=["$animate",function(a){return{restrict:"A",multiElement:!0,link:function(b,d,c){b.$watch(c.ngHide,function(b){a[b?"addClass":"removeClass"](d,"ng-hide",{tempClasses:"ng-hide-animate"})})}}}],Je=Ka(function(a,b,d){a.$watch(d.ngStyle,function(a,d){d&&a!==d&&p(d,function(a,c){b.css(c,"")});a&&b.css(a)},!0)}),Ke=["$animate",function(a){return{require:"ngSwitch",controller:["$scope",function(){this.cases={}}],
-link:function(b,d,c,e){var f=[],g=[],h=[],k=[],m=function(a,b){return function(){a.splice(b,1)}};b.$watch(c.ngSwitch||c.on,function(b){var c,d;c=0;for(d=h.length;c<d;++c)a.cancel(h[c]);c=h.length=0;for(d=k.length;c<d;++c){var r=qb(g[c].clone);k[c].$destroy();(h[c]=a.leave(r)).then(m(h,c))}g.length=0;k.length=0;(f=e.cases["!"+b]||e.cases["?"])&&p(f,function(b){b.transclude(function(c,d){k.push(d);var e=b.element;c[c.length++]=W.createComment(" end ngSwitchWhen: ");g.push({clone:c});a.enter(c,e.parent(),
-e)})})})}}}],Le=Ka({transclude:"element",priority:1200,require:"^ngSwitch",multiElement:!0,link:function(a,b,d,c,e){c.cases["!"+d.ngSwitchWhen]=c.cases["!"+d.ngSwitchWhen]||[];c.cases["!"+d.ngSwitchWhen].push({transclude:e,element:b})}}),Me=Ka({transclude:"element",priority:1200,require:"^ngSwitch",multiElement:!0,link:function(a,b,d,c,e){c.cases["?"]=c.cases["?"]||[];c.cases["?"].push({transclude:e,element:b})}}),Oe=Ka({restrict:"EAC",link:function(a,b,d,c,e){if(!e)throw L("ngTransclude")("orphan",
-ua(b));e(function(a){b.empty();b.append(a)})}}),oe=["$templateCache",function(a){return{restrict:"E",terminal:!0,compile:function(b,d){"text/ng-template"==d.type&&a.put(d.id,b[0].text)}}}],Lg={$setViewValue:y,$render:y},Mg=["$element","$scope","$attrs",function(a,b,d){var c=this,e=new Ta;c.ngModelCtrl=Lg;c.unknownOption=z(W.createElement("option"));c.renderUnknownOption=function(b){b="? "+Ca(b)+" ?";c.unknownOption.val(b);a.prepend(c.unknownOption);a.val(b)};b.$on("$destroy",function(){c.renderUnknownOption=
-y});c.removeUnknownOption=function(){c.unknownOption.parent()&&c.unknownOption.remove()};c.readValue=function(){c.removeUnknownOption();return a.val()};c.writeValue=function(b){c.hasOption(b)?(c.removeUnknownOption(),a.val(b),""===b&&c.emptyOption.prop("selected",!0)):null==b&&c.emptyOption?(c.removeUnknownOption(),a.val("")):c.renderUnknownOption(b)};c.addOption=function(a,b){if(8!==b[0].nodeType){Sa(a,'"option value"');""===a&&(c.emptyOption=b);var d=e.get(a)||0;e.put(a,d+1);c.ngModelCtrl.$render();
-b[0].hasAttribute("selected")&&(b[0].selected=!0)}};c.removeOption=function(a){var b=e.get(a);b&&(1===b?(e.remove(a),""===a&&(c.emptyOption=v)):e.put(a,b-1))};c.hasOption=function(a){return!!e.get(a)};c.registerOption=function(a,b,d,e,m){if(e){var l;d.$observe("value",function(a){x(l)&&c.removeOption(l);l=a;c.addOption(a,b)})}else m?a.$watch(m,function(a,e){d.$set("value",a);e!==a&&c.removeOption(e);c.addOption(a,b)}):c.addOption(d.value,b);b.on("$destroy",function(){c.removeOption(d.value);c.ngModelCtrl.$render()})}}],
-pe=function(){return{restrict:"E",require:["select","?ngModel"],controller:Mg,priority:1,link:{pre:function(a,b,d,c){var e=c[1];if(e){var f=c[0];f.ngModelCtrl=e;b.on("change",function(){a.$apply(function(){e.$setViewValue(f.readValue())})});if(d.multiple){f.readValue=function(){var a=[];p(b.find("option"),function(b){b.selected&&a.push(b.value)});return a};f.writeValue=function(a){var c=new Ta(a);p(b.find("option"),function(a){a.selected=x(c.get(a.value))})};var g,h=NaN;a.$watch(function(){h!==e.$viewValue||
-ma(g,e.$viewValue)||(g=ha(e.$viewValue),e.$render());h=e.$viewValue});e.$isEmpty=function(a){return!a||0===a.length}}}},post:function(a,b,d,c){var e=c[1];if(e){var f=c[0];e.$render=function(){f.writeValue(e.$viewValue)}}}}}},re=["$interpolate",function(a){return{restrict:"E",priority:100,compile:function(b,d){if(x(d.value))var c=a(d.value,!0);else{var e=a(b.text(),!0);e||d.$set("value",b.text())}return function(a,b,d){var k=b.parent();(k=k.data("$selectController")||k.parent().data("$selectController"))&&
-k.registerOption(a,b,d,c,e)}}}}],qe=na({restrict:"E",terminal:!1}),Fc=function(){return{restrict:"A",require:"?ngModel",link:function(a,b,d,c){c&&(d.required=!0,c.$validators.required=function(a,b){return!d.required||!c.$isEmpty(b)},d.$observe("required",function(){c.$validate()}))}}},Ec=function(){return{restrict:"A",require:"?ngModel",link:function(a,b,d,c){if(c){var e,f=d.ngPattern||d.pattern;d.$observe("pattern",function(a){H(a)&&0<a.length&&(a=new RegExp("^"+a+"$"));if(a&&!a.test)throw L("ngPattern")("noregexp",
-f,a,ua(b));e=a||v;c.$validate()});c.$validators.pattern=function(a,b){return c.$isEmpty(b)||r(e)||e.test(b)}}}}},Hc=function(){return{restrict:"A",require:"?ngModel",link:function(a,b,d,c){if(c){var e=-1;d.$observe("maxlength",function(a){a=ea(a);e=isNaN(a)?-1:a;c.$validate()});c.$validators.maxlength=function(a,b){return 0>e||c.$isEmpty(b)||b.length<=e}}}}},Gc=function(){return{restrict:"A",require:"?ngModel",link:function(a,b,d,c){if(c){var e=0;d.$observe("minlength",function(a){e=ea(a)||0;c.$validate()});
-c.$validators.minlength=function(a,b){return c.$isEmpty(b)||b.length>=e}}}}};U.angular.bootstrap?U.console&&console.log("WARNING: Tried to load angular more than once."):(he(),je(fa),fa.module("ngLocale",[],["$provide",function(a){function b(a){a+="";var b=a.indexOf(".");return-1==b?0:a.length-b-1}a.value("$locale",{DATETIME_FORMATS:{AMPMS:["AM","PM"],DAY:"Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),ERANAMES:["Before Christ","Anno Domini"],ERAS:["BC","AD"],FIRSTDAYOFWEEK:6,
-MONTH:"January February March April May June July August September October November December".split(" "),SHORTDAY:"Sun Mon Tue Wed Thu Fri Sat".split(" "),SHORTMONTH:"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),STANDALONEMONTH:"January February March April May June July August September October November December".split(" "),WEEKENDRANGE:[5,6],fullDate:"EEEE, MMMM d, y",longDate:"MMMM d, y",medium:"MMM d, y h:mm:ss a",mediumDate:"MMM d, y",mediumTime:"h:mm:ss a","short":"M/d/yy h:mm a",
-shortDate:"M/d/yy",shortTime:"h:mm a"},NUMBER_FORMATS:{CURRENCY_SYM:"$",DECIMAL_SEP:".",GROUP_SEP:",",PATTERNS:[{gSize:3,lgSize:3,maxFrac:3,minFrac:0,minInt:1,negPre:"-",negSuf:"",posPre:"",posSuf:""},{gSize:3,lgSize:3,maxFrac:2,minFrac:2,minInt:1,negPre:"-\u00a4",negSuf:"",posPre:"\u00a4",posSuf:""}]},id:"en-us",localeID:"en_US",pluralCat:function(a,c){var e=a|0,f=c;v===f&&(f=Math.min(b(a),3));Math.pow(10,f);return 1==e&&0==f?"one":"other"}})}]),z(W).ready(function(){de(W,yc)}))})(window,document);
-!window.angular.$$csp().noInlineStyle&&window.angular.element(document.head).prepend('<style type="text/css">@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide:not(.ng-hide-animate){display:none !important;}ng\\:form{display:block;}.ng-animate-shim{visibility:hidden;}.ng-anchor{position:absolute;}</style>');
+(function(x){'use strict';function pe(a){if(G(a))t(a.objectMaxDepth)&&(Lc.objectMaxDepth=Tb(a.objectMaxDepth)?a.objectMaxDepth:NaN);else return Lc}function Tb(a){return W(a)&&0<a}function K(a,b){b=b||Error;return function(){var d=arguments[0],c;c="["+(a?a+":":"")+d+"] http://errors.angularjs.org/1.6.5/"+(a?a+"/":"")+d;for(d=1;d<arguments.length;d++){c=c+(1==d?"?":"&")+"p"+(d-1)+"=";var e=encodeURIComponent,f;f=arguments[d];f="function"==typeof f?f.toString().replace(/ \{[\s\S]*$/,""):"undefined"==
+typeof f?"undefined":"string"!=typeof f?JSON.stringify(f):f;c+=e(f)}return new b(c)}}function oa(a){if(null==a||Za(a))return!1;if(I(a)||C(a)||z&&a instanceof z)return!0;var b="length"in Object(a)&&a.length;return W(b)&&(0<=b&&(b-1 in a||a instanceof Array)||"function"===typeof a.item)}function p(a,b,d){var c,e;if(a)if(E(a))for(c in a)"prototype"!==c&&"length"!==c&&"name"!==c&&a.hasOwnProperty(c)&&b.call(d,a[c],c,a);else if(I(a)||oa(a)){var f="object"!==typeof a;c=0;for(e=a.length;c<e;c++)(f||c in
+a)&&b.call(d,a[c],c,a)}else if(a.forEach&&a.forEach!==p)a.forEach(b,d,a);else if(Mc(a))for(c in a)b.call(d,a[c],c,a);else if("function"===typeof a.hasOwnProperty)for(c in a)a.hasOwnProperty(c)&&b.call(d,a[c],c,a);else for(c in a)wa.call(a,c)&&b.call(d,a[c],c,a);return a}function Nc(a,b,d){for(var c=Object.keys(a).sort(),e=0;e<c.length;e++)b.call(d,a[c[e]],c[e]);return c}function Ub(a){return function(b,d){a(d,b)}}function qe(){return++sb}function Vb(a,b,d){for(var c=a.$$hashKey,e=0,f=b.length;e<f;++e){var g=
+b[e];if(G(g)||E(g))for(var k=Object.keys(g),h=0,l=k.length;h<l;h++){var m=k[h],n=g[m];d&&G(n)?ia(n)?a[m]=new Date(n.valueOf()):$a(n)?a[m]=new RegExp(n):n.nodeName?a[m]=n.cloneNode(!0):Wb(n)?a[m]=n.clone():(G(a[m])||(a[m]=I(n)?[]:{}),Vb(a[m],[n],!0)):a[m]=n}}c?a.$$hashKey=c:delete a.$$hashKey;return a}function O(a){return Vb(a,xa.call(arguments,1),!1)}function re(a){return Vb(a,xa.call(arguments,1),!0)}function Q(a){return parseInt(a,10)}function Xb(a,b){return O(Object.create(a),b)}function B(){}
+function ab(a){return a}function aa(a){return function(){return a}}function Yb(a){return E(a.toString)&&a.toString!==la}function v(a){return"undefined"===typeof a}function t(a){return"undefined"!==typeof a}function G(a){return null!==a&&"object"===typeof a}function Mc(a){return null!==a&&"object"===typeof a&&!Oc(a)}function C(a){return"string"===typeof a}function W(a){return"number"===typeof a}function ia(a){return"[object Date]"===la.call(a)}function Zb(a){switch(la.call(a)){case "[object Error]":return!0;
+case "[object Exception]":return!0;case "[object DOMException]":return!0;default:return a instanceof Error}}function E(a){return"function"===typeof a}function $a(a){return"[object RegExp]"===la.call(a)}function Za(a){return a&&a.window===a}function bb(a){return a&&a.$evalAsync&&a.$watch}function La(a){return"boolean"===typeof a}function se(a){return a&&W(a.length)&&te.test(la.call(a))}function Wb(a){return!(!a||!(a.nodeName||a.prop&&a.attr&&a.find))}function ue(a){var b={};a=a.split(",");var d;for(d=
+0;d<a.length;d++)b[a[d]]=!0;return b}function ya(a){return N(a.nodeName||a[0]&&a[0].nodeName)}function cb(a,b){var d=a.indexOf(b);0<=d&&a.splice(d,1);return d}function Ia(a,b,d){function c(a,b,c){c--;if(0>c)return"...";var d=b.$$hashKey,g;if(I(a)){g=0;for(var f=a.length;g<f;g++)b.push(e(a[g],c))}else if(Mc(a))for(g in a)b[g]=e(a[g],c);else if(a&&"function"===typeof a.hasOwnProperty)for(g in a)a.hasOwnProperty(g)&&(b[g]=e(a[g],c));else for(g in a)wa.call(a,g)&&(b[g]=e(a[g],c));d?b.$$hashKey=d:delete b.$$hashKey;
+return b}function e(a,b){if(!G(a))return a;var d=g.indexOf(a);if(-1!==d)return k[d];if(Za(a)||bb(a))throw za("cpws");var d=!1,e=f(a);void 0===e&&(e=I(a)?[]:Object.create(Oc(a)),d=!0);g.push(a);k.push(e);return d?c(a,e,b):e}function f(a){switch(la.call(a)){case "[object Int8Array]":case "[object Int16Array]":case "[object Int32Array]":case "[object Float32Array]":case "[object Float64Array]":case "[object Uint8Array]":case "[object Uint8ClampedArray]":case "[object Uint16Array]":case "[object Uint32Array]":return new a.constructor(e(a.buffer),
+a.byteOffset,a.length);case "[object ArrayBuffer]":if(!a.slice){var b=new ArrayBuffer(a.byteLength);(new Uint8Array(b)).set(new Uint8Array(a));return b}return a.slice(0);case "[object Boolean]":case "[object Number]":case "[object String]":case "[object Date]":return new a.constructor(a.valueOf());case "[object RegExp]":return b=new RegExp(a.source,a.toString().match(/[^/]*$/)[0]),b.lastIndex=a.lastIndex,b;case "[object Blob]":return new a.constructor([a],{type:a.type})}if(E(a.cloneNode))return a.cloneNode(!0)}
+var g=[],k=[];d=Tb(d)?d:NaN;if(b){if(se(b)||"[object ArrayBuffer]"===la.call(b))throw za("cpta");if(a===b)throw za("cpi");I(b)?b.length=0:p(b,function(a,c){"$$hashKey"!==c&&delete b[c]});g.push(a);k.push(b);return c(a,b,d)}return e(a,d)}function $b(a,b){return a===b||a!==a&&b!==b}function sa(a,b){if(a===b)return!0;if(null===a||null===b)return!1;if(a!==a&&b!==b)return!0;var d=typeof a,c;if(d===typeof b&&"object"===d)if(I(a)){if(!I(b))return!1;if((d=a.length)===b.length){for(c=0;c<d;c++)if(!sa(a[c],
+b[c]))return!1;return!0}}else{if(ia(a))return ia(b)?$b(a.getTime(),b.getTime()):!1;if($a(a))return $a(b)?a.toString()===b.toString():!1;if(bb(a)||bb(b)||Za(a)||Za(b)||I(b)||ia(b)||$a(b))return!1;d=R();for(c in a)if("$"!==c.charAt(0)&&!E(a[c])){if(!sa(a[c],b[c]))return!1;d[c]=!0}for(c in b)if(!(c in d)&&"$"!==c.charAt(0)&&t(b[c])&&!E(b[c]))return!1;return!0}return!1}function db(a,b,d){return a.concat(xa.call(b,d))}function Qa(a,b){var d=2<arguments.length?xa.call(arguments,2):[];return!E(b)||b instanceof
+RegExp?b:d.length?function(){return arguments.length?b.apply(a,db(d,arguments,0)):b.apply(a,d)}:function(){return arguments.length?b.apply(a,arguments):b.call(a)}}function Pc(a,b){var d=b;"string"===typeof a&&"$"===a.charAt(0)&&"$"===a.charAt(1)?d=void 0:Za(b)?d="$WINDOW":b&&x.document===b?d="$DOCUMENT":bb(b)&&(d="$SCOPE");return d}function eb(a,b){if(!v(a))return W(b)||(b=b?2:null),JSON.stringify(a,Pc,b)}function Qc(a){return C(a)?JSON.parse(a):a}function Rc(a,b){a=a.replace(ve,"");var d=Date.parse("Jan 01, 1970 00:00:00 "+
+a)/6E4;return ba(d)?b:d}function ac(a,b,d){d=d?-1:1;var c=a.getTimezoneOffset();b=Rc(b,c);d*=b-c;a=new Date(a.getTime());a.setMinutes(a.getMinutes()+d);return a}function Aa(a){a=z(a).clone().empty();var b=z("<div>").append(a).html();try{return a[0].nodeType===Ma?N(b):b.match(/^(<[^>]+>)/)[1].replace(/^<([\w-]+)/,function(a,b){return"<"+N(b)})}catch(d){return N(b)}}function Sc(a){try{return decodeURIComponent(a)}catch(b){}}function Tc(a){var b={};p((a||"").split("&"),function(a){var c,e,f;a&&(e=a=
+a.replace(/\+/g,"%20"),c=a.indexOf("="),-1!==c&&(e=a.substring(0,c),f=a.substring(c+1)),e=Sc(e),t(e)&&(f=t(f)?Sc(f):!0,wa.call(b,e)?I(b[e])?b[e].push(f):b[e]=[b[e],f]:b[e]=f))});return b}function bc(a){var b=[];p(a,function(a,c){I(a)?p(a,function(a){b.push(ma(c,!0)+(!0===a?"":"="+ma(a,!0)))}):b.push(ma(c,!0)+(!0===a?"":"="+ma(a,!0)))});return b.length?b.join("&"):""}function fb(a){return ma(a,!0).replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+")}function ma(a,b){return encodeURIComponent(a).replace(/%40/gi,
+"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%3B/gi,";").replace(/%20/g,b?"%20":"+")}function we(a,b){var d,c,e=Na.length;for(c=0;c<e;++c)if(d=Na[c]+b,C(d=a.getAttribute(d)))return d;return null}function xe(a,b){var d,c,e={};p(Na,function(b){b+="app";!d&&a.hasAttribute&&a.hasAttribute(b)&&(d=a,c=a.getAttribute(b))});p(Na,function(b){b+="app";var e;!d&&(e=a.querySelector("["+b.replace(":","\\:")+"]"))&&(d=e,c=e.getAttribute(b))});d&&(ye?(e.strictDi=null!==we(d,"strict-di"),
+b(d,c?[c]:[],e)):x.console.error("Angular: disabling automatic bootstrap. <script> protocol indicates an extension, document.location.href does not match."))}function Uc(a,b,d){G(d)||(d={});d=O({strictDi:!1},d);var c=function(){a=z(a);if(a.injector()){var c=a[0]===x.document?"document":Aa(a);throw za("btstrpd",c.replace(/</,"&lt;").replace(/>/,"&gt;"));}b=b||[];b.unshift(["$provide",function(b){b.value("$rootElement",a)}]);d.debugInfoEnabled&&b.push(["$compileProvider",function(a){a.debugInfoEnabled(!0)}]);
+b.unshift("ng");c=gb(b,d.strictDi);c.invoke(["$rootScope","$rootElement","$compile","$injector",function(a,b,c,d){a.$apply(function(){b.data("$injector",d);c(b)(a)})}]);return c},e=/^NG_ENABLE_DEBUG_INFO!/,f=/^NG_DEFER_BOOTSTRAP!/;x&&e.test(x.name)&&(d.debugInfoEnabled=!0,x.name=x.name.replace(e,""));if(x&&!f.test(x.name))return c();x.name=x.name.replace(f,"");fa.resumeBootstrap=function(a){p(a,function(a){b.push(a)});return c()};E(fa.resumeDeferredBootstrap)&&fa.resumeDeferredBootstrap()}function ze(){x.name=
+"NG_ENABLE_DEBUG_INFO!"+x.name;x.location.reload()}function Ae(a){a=fa.element(a).injector();if(!a)throw za("test");return a.get("$$testability")}function Vc(a,b){b=b||"_";return a.replace(Be,function(a,c){return(c?b:"")+a.toLowerCase()})}function Ce(){var a;if(!Wc){var b=tb();(ta=v(b)?x.jQuery:b?x[b]:void 0)&&ta.fn.on?(z=ta,O(ta.fn,{scope:Ra.scope,isolateScope:Ra.isolateScope,controller:Ra.controller,injector:Ra.injector,inheritedData:Ra.inheritedData}),a=ta.cleanData,ta.cleanData=function(b){for(var c,
+e=0,f;null!=(f=b[e]);e++)(c=ta._data(f,"events"))&&c.$destroy&&ta(f).triggerHandler("$destroy");a(b)}):z=S;fa.element=z;Wc=!0}}function hb(a,b,d){if(!a)throw za("areq",b||"?",d||"required");return a}function ub(a,b,d){d&&I(a)&&(a=a[a.length-1]);hb(E(a),b,"not a function, got "+(a&&"object"===typeof a?a.constructor.name||"Object":typeof a));return a}function Oa(a,b){if("hasOwnProperty"===a)throw za("badname",b);}function Xc(a,b,d){if(!b)return a;b=b.split(".");for(var c,e=a,f=b.length,g=0;g<f;g++)c=
+b[g],a&&(a=(e=a)[c]);return!d&&E(a)?Qa(e,a):a}function vb(a){for(var b=a[0],d=a[a.length-1],c,e=1;b!==d&&(b=b.nextSibling);e++)if(c||a[e]!==b)c||(c=z(xa.call(a,0,e))),c.push(b);return c||a}function R(){return Object.create(null)}function cc(a){if(null==a)return"";switch(typeof a){case "string":break;case "number":a=""+a;break;default:a=!Yb(a)||I(a)||ia(a)?eb(a):a.toString()}return a}function De(a){function b(a,b,c){return a[b]||(a[b]=c())}var d=K("$injector"),c=K("ng");a=b(a,"angular",Object);a.$$minErr=
+a.$$minErr||K;return b(a,"module",function(){var a={};return function(f,g,k){var h={};if("hasOwnProperty"===f)throw c("badname","module");g&&a.hasOwnProperty(f)&&(a[f]=null);return b(a,f,function(){function a(b,c,d,g){g||(g=e);return function(){g[d||"push"]([b,c,arguments]);return p}}function b(a,c,d){d||(d=e);return function(b,e){e&&E(e)&&(e.$$moduleName=f);d.push([a,c,arguments]);return p}}if(!g)throw d("nomod",f);var e=[],q=[],F=[],M=a("$injector","invoke","push",q),p={_invokeQueue:e,_configBlocks:q,
+_runBlocks:F,info:function(a){if(t(a)){if(!G(a))throw c("aobj","value");h=a;return this}return h},requires:g,name:f,provider:b("$provide","provider"),factory:b("$provide","factory"),service:b("$provide","service"),value:a("$provide","value"),constant:a("$provide","constant","unshift"),decorator:b("$provide","decorator",q),animation:b("$animateProvider","register"),filter:b("$filterProvider","register"),controller:b("$controllerProvider","register"),directive:b("$compileProvider","directive"),component:b("$compileProvider",
+"component"),config:M,run:function(a){F.push(a);return this}};k&&M(k);return p})}})}function ra(a,b){if(I(a)){b=b||[];for(var d=0,c=a.length;d<c;d++)b[d]=a[d]}else if(G(a))for(d in b=b||{},a)if("$"!==d.charAt(0)||"$"!==d.charAt(1))b[d]=a[d];return b||a}function Ee(a,b){var d=[];Tb(b)&&(a=fa.copy(a,null,b));return JSON.stringify(a,function(a,b){b=Pc(a,b);if(G(b)){if(0<=d.indexOf(b))return"...";d.push(b)}return b})}function Fe(a){O(a,{errorHandlingConfig:pe,bootstrap:Uc,copy:Ia,extend:O,merge:re,equals:sa,
+element:z,forEach:p,injector:gb,noop:B,bind:Qa,toJson:eb,fromJson:Qc,identity:ab,isUndefined:v,isDefined:t,isString:C,isFunction:E,isObject:G,isNumber:W,isElement:Wb,isArray:I,version:Ge,isDate:ia,lowercase:N,uppercase:wb,callbacks:{$$counter:0},getTestability:Ae,reloadWithDebugInfo:ze,$$minErr:K,$$csp:Ja,$$encodeUriSegment:fb,$$encodeUriQuery:ma,$$stringify:cc});dc=De(x);dc("ng",["ngLocale"],["$provide",function(a){a.provider({$$sanitizeUri:He});a.provider("$compile",Yc).directive({a:Ie,input:Zc,
+textarea:Zc,form:Je,script:Ke,select:Le,option:Me,ngBind:Ne,ngBindHtml:Oe,ngBindTemplate:Pe,ngClass:Qe,ngClassEven:Re,ngClassOdd:Se,ngCloak:Te,ngController:Ue,ngForm:Ve,ngHide:We,ngIf:Xe,ngInclude:Ye,ngInit:Ze,ngNonBindable:$e,ngPluralize:af,ngRepeat:bf,ngShow:cf,ngStyle:df,ngSwitch:ef,ngSwitchWhen:ff,ngSwitchDefault:gf,ngOptions:hf,ngTransclude:jf,ngModel:kf,ngList:lf,ngChange:mf,pattern:$c,ngPattern:$c,required:ad,ngRequired:ad,minlength:bd,ngMinlength:bd,maxlength:cd,ngMaxlength:cd,ngValue:nf,
+ngModelOptions:of}).directive({ngInclude:pf}).directive(xb).directive(dd);a.provider({$anchorScroll:qf,$animate:rf,$animateCss:sf,$$animateJs:tf,$$animateQueue:uf,$$AnimateRunner:vf,$$animateAsyncRun:wf,$browser:xf,$cacheFactory:yf,$controller:zf,$document:Af,$$isDocumentHidden:Bf,$exceptionHandler:Cf,$filter:ed,$$forceReflow:Df,$interpolate:Ef,$interval:Ff,$http:Gf,$httpParamSerializer:Hf,$httpParamSerializerJQLike:If,$httpBackend:Jf,$xhrFactory:Kf,$jsonpCallbacks:Lf,$location:Mf,$log:Nf,$parse:Of,
+$rootScope:Pf,$q:Qf,$$q:Rf,$sce:Sf,$sceDelegate:Tf,$sniffer:Uf,$templateCache:Vf,$templateRequest:Wf,$$testability:Xf,$timeout:Yf,$window:Zf,$$rAF:$f,$$jqLite:ag,$$Map:bg,$$cookieReader:cg})}]).info({angularVersion:"1.6.5"})}function ib(a,b){return b.toUpperCase()}function yb(a){return a.replace(dg,ib)}function ec(a){a=a.nodeType;return 1===a||!a||9===a}function fd(a,b){var d,c,e=b.createDocumentFragment(),f=[];if(fc.test(a)){d=e.appendChild(b.createElement("div"));c=(eg.exec(a)||["",""])[1].toLowerCase();
+c=pa[c]||pa._default;d.innerHTML=c[1]+a.replace(fg,"<$1></$2>")+c[2];for(c=c[0];c--;)d=d.lastChild;f=db(f,d.childNodes);d=e.firstChild;d.textContent=""}else f.push(b.createTextNode(a));e.textContent="";e.innerHTML="";p(f,function(a){e.appendChild(a)});return e}function S(a){if(a instanceof S)return a;var b;C(a)&&(a=P(a),b=!0);if(!(this instanceof S)){if(b&&"<"!==a.charAt(0))throw gc("nosel");return new S(a)}if(b){b=x.document;var d;a=(d=gg.exec(a))?[b.createElement(d[1])]:(d=fd(a,b))?d.childNodes:
+[];hc(this,a)}else E(a)?gd(a):hc(this,a)}function ic(a){return a.cloneNode(!0)}function zb(a,b){!b&&ec(a)&&z.cleanData([a]);a.querySelectorAll&&z.cleanData(a.querySelectorAll("*"))}function hd(a,b,d,c){if(t(c))throw gc("offargs");var e=(c=Ab(a))&&c.events,f=c&&c.handle;if(f)if(b){var g=function(b){var c=e[b];t(d)&&cb(c||[],d);t(d)&&c&&0<c.length||(a.removeEventListener(b,f),delete e[b])};p(b.split(" "),function(a){g(a);Bb[a]&&g(Bb[a])})}else for(b in e)"$destroy"!==b&&a.removeEventListener(b,f),delete e[b]}
+function jc(a,b){var d=a.ng339,c=d&&jb[d];c&&(b?delete c.data[b]:(c.handle&&(c.events.$destroy&&c.handle({},"$destroy"),hd(a)),delete jb[d],a.ng339=void 0))}function Ab(a,b){var d=a.ng339,d=d&&jb[d];b&&!d&&(a.ng339=d=++hg,d=jb[d]={events:{},data:{},handle:void 0});return d}function kc(a,b,d){if(ec(a)){var c,e=t(d),f=!e&&b&&!G(b),g=!b;a=(a=Ab(a,!f))&&a.data;if(e)a[yb(b)]=d;else{if(g)return a;if(f)return a&&a[yb(b)];for(c in b)a[yb(c)]=b[c]}}}function Cb(a,b){return a.getAttribute?-1<(" "+(a.getAttribute("class")||
+"")+" ").replace(/[\n\t]/g," ").indexOf(" "+b+" "):!1}function Db(a,b){b&&a.setAttribute&&p(b.split(" "),function(b){a.setAttribute("class",P((" "+(a.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ").replace(" "+P(b)+" "," ")))})}function Eb(a,b){if(b&&a.setAttribute){var d=(" "+(a.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ");p(b.split(" "),function(a){a=P(a);-1===d.indexOf(" "+a+" ")&&(d+=a+" ")});a.setAttribute("class",P(d))}}function hc(a,b){if(b)if(b.nodeType)a[a.length++]=b;else{var d=
+b.length;if("number"===typeof d&&b.window!==b){if(d)for(var c=0;c<d;c++)a[a.length++]=b[c]}else a[a.length++]=b}}function id(a,b){return Fb(a,"$"+(b||"ngController")+"Controller")}function Fb(a,b,d){9===a.nodeType&&(a=a.documentElement);for(b=I(b)?b:[b];a;){for(var c=0,e=b.length;c<e;c++)if(t(d=z.data(a,b[c])))return d;a=a.parentNode||11===a.nodeType&&a.host}}function jd(a){for(zb(a,!0);a.firstChild;)a.removeChild(a.firstChild)}function Gb(a,b){b||zb(a);var d=a.parentNode;d&&d.removeChild(a)}function ig(a,
+b){b=b||x;if("complete"===b.document.readyState)b.setTimeout(a);else z(b).on("load",a)}function gd(a){function b(){x.document.removeEventListener("DOMContentLoaded",b);x.removeEventListener("load",b);a()}"complete"===x.document.readyState?x.setTimeout(a):(x.document.addEventListener("DOMContentLoaded",b),x.addEventListener("load",b))}function kd(a,b){var d=Hb[b.toLowerCase()];return d&&ld[ya(a)]&&d}function jg(a,b){var d=function(c,d){c.isDefaultPrevented=function(){return c.defaultPrevented};var f=
+b[d||c.type],g=f?f.length:0;if(g){if(v(c.immediatePropagationStopped)){var k=c.stopImmediatePropagation;c.stopImmediatePropagation=function(){c.immediatePropagationStopped=!0;c.stopPropagation&&c.stopPropagation();k&&k.call(c)}}c.isImmediatePropagationStopped=function(){return!0===c.immediatePropagationStopped};var h=f.specialHandlerWrapper||kg;1<g&&(f=ra(f));for(var l=0;l<g;l++)c.isImmediatePropagationStopped()||h(a,c,f[l])}};d.elem=a;return d}function kg(a,b,d){d.call(a,b)}function lg(a,b,d){var c=
+b.relatedTarget;c&&(c===a||mg.call(a,c))||d.call(a,b)}function ag(){this.$get=function(){return O(S,{hasClass:function(a,b){a.attr&&(a=a[0]);return Cb(a,b)},addClass:function(a,b){a.attr&&(a=a[0]);return Eb(a,b)},removeClass:function(a,b){a.attr&&(a=a[0]);return Db(a,b)}})}}function Sa(a,b){var d=a&&a.$$hashKey;if(d)return"function"===typeof d&&(d=a.$$hashKey()),d;d=typeof a;return d="function"===d||"object"===d&&null!==a?a.$$hashKey=d+":"+(b||qe)():d+":"+a}function md(){this._keys=[];this._values=
+[];this._lastKey=NaN;this._lastIndex=-1}function nd(a){a=Function.prototype.toString.call(a).replace(ng,"");return a.match(og)||a.match(pg)}function qg(a){return(a=nd(a))?"function("+(a[1]||"").replace(/[\s\r\n]+/," ")+")":"fn"}function gb(a,b){function d(a){return function(b,c){if(G(b))p(b,Ub(a));else return a(b,c)}}function c(a,b){Oa(a,"service");if(E(b)||I(b))b=q.instantiate(b);if(!b.$get)throw Ka("pget",a);return n[a+"Provider"]=b}function e(a,b){return function(){var c=w.invoke(b,this);if(v(c))throw Ka("undef",
+a);return c}}function f(a,b,d){return c(a,{$get:!1!==d?e(a,b):b})}function g(a){hb(v(a)||I(a),"modulesToLoad","not an array");var b=[],c;p(a,function(a){function d(a){var b,c;b=0;for(c=a.length;b<c;b++){var e=a[b],g=q.get(e[0]);g[e[1]].apply(g,e[2])}}if(!m.get(a)){m.set(a,!0);try{C(a)?(c=dc(a),w.modules[a]=c,b=b.concat(g(c.requires)).concat(c._runBlocks),d(c._invokeQueue),d(c._configBlocks)):E(a)?b.push(q.invoke(a)):I(a)?b.push(q.invoke(a)):ub(a,"module")}catch(e){throw I(a)&&(a=a[a.length-1]),e.message&&
+e.stack&&-1===e.stack.indexOf(e.message)&&(e=e.message+"\n"+e.stack),Ka("modulerr",a,e.stack||e.message||e);}}});return b}function k(a,c){function d(b,e){if(a.hasOwnProperty(b)){if(a[b]===h)throw Ka("cdep",b+" <- "+l.join(" <- "));return a[b]}try{return l.unshift(b),a[b]=h,a[b]=c(b,e),a[b]}catch(g){throw a[b]===h&&delete a[b],g;}finally{l.shift()}}function e(a,c,g){var f=[];a=gb.$$annotate(a,b,g);for(var h=0,k=a.length;h<k;h++){var l=a[h];if("string"!==typeof l)throw Ka("itkn",l);f.push(c&&c.hasOwnProperty(l)?
+c[l]:d(l,g))}return f}return{invoke:function(a,b,c,d){"string"===typeof c&&(d=c,c=null);c=e(a,c,d);I(a)&&(a=a[a.length-1]);d=a;if(Ba||"function"!==typeof d)d=!1;else{var g=d.$$ngIsClass;La(g)||(g=d.$$ngIsClass=/^(?:class\b|constructor\()/.test(Function.prototype.toString.call(d)));d=g}return d?(c.unshift(null),new (Function.prototype.bind.apply(a,c))):a.apply(b,c)},instantiate:function(a,b,c){var d=I(a)?a[a.length-1]:a;a=e(a,b,c);a.unshift(null);return new (Function.prototype.bind.apply(d,a))},get:d,
+annotate:gb.$$annotate,has:function(b){return n.hasOwnProperty(b+"Provider")||a.hasOwnProperty(b)}}}b=!0===b;var h={},l=[],m=new Ib,n={$provide:{provider:d(c),factory:d(f),service:d(function(a,b){return f(a,["$injector",function(a){return a.instantiate(b)}])}),value:d(function(a,b){return f(a,aa(b),!1)}),constant:d(function(a,b){Oa(a,"constant");n[a]=b;F[a]=b}),decorator:function(a,b){var c=q.get(a+"Provider"),d=c.$get;c.$get=function(){var a=w.invoke(d,c);return w.invoke(b,null,{$delegate:a})}}}},
+q=n.$injector=k(n,function(a,b){fa.isString(b)&&l.push(b);throw Ka("unpr",l.join(" <- "));}),F={},M=k(F,function(a,b){var c=q.get(a+"Provider",b);return w.invoke(c.$get,c,void 0,a)}),w=M;n.$injectorProvider={$get:aa(M)};w.modules=q.modules=R();var u=g(a),w=M.get("$injector");w.strictDi=b;p(u,function(a){a&&w.invoke(a)});return w}function qf(){var a=!0;this.disableAutoScrolling=function(){a=!1};this.$get=["$window","$location","$rootScope",function(b,d,c){function e(a){var b=null;Array.prototype.some.call(a,
+function(a){if("a"===ya(a))return b=a,!0});return b}function f(a){if(a){a.scrollIntoView();var c;c=g.yOffset;E(c)?c=c():Wb(c)?(c=c[0],c="fixed"!==b.getComputedStyle(c).position?0:c.getBoundingClientRect().bottom):W(c)||(c=0);c&&(a=a.getBoundingClientRect().top,b.scrollBy(0,a-c))}else b.scrollTo(0,0)}function g(a){a=C(a)?a:W(a)?a.toString():d.hash();var b;a?(b=k.getElementById(a))?f(b):(b=e(k.getElementsByName(a)))?f(b):"top"===a&&f(null):f(null)}var k=b.document;a&&c.$watch(function(){return d.hash()},
+function(a,b){a===b&&""===a||ig(function(){c.$evalAsync(g)})});return g}]}function kb(a,b){if(!a&&!b)return"";if(!a)return b;if(!b)return a;I(a)&&(a=a.join(" "));I(b)&&(b=b.join(" "));return a+" "+b}function rg(a){C(a)&&(a=a.split(" "));var b=R();p(a,function(a){a.length&&(b[a]=!0)});return b}function Ca(a){return G(a)?a:{}}function sg(a,b,d,c){function e(a){try{a.apply(null,xa.call(arguments,1))}finally{if(M--,0===M)for(;w.length;)try{w.pop()()}catch(b){d.error(b)}}}function f(){y=null;k()}function g(){u=
+D();u=v(u)?null:u;sa(u,L)&&(u=L);A=L=u}function k(){var a=A;g();if(na!==h.url()||a!==u)na=h.url(),A=u,p(H,function(a){a(h.url(),u)})}var h=this,l=a.location,m=a.history,n=a.setTimeout,q=a.clearTimeout,F={};h.isMock=!1;var M=0,w=[];h.$$completeOutstandingRequest=e;h.$$incOutstandingRequestCount=function(){M++};h.notifyWhenNoOutstandingRequests=function(a){0===M?a():w.push(a)};var u,A,na=l.href,s=b.find("base"),y=null,D=c.history?function(){try{return m.state}catch(a){}}:B;g();h.url=function(b,d,e){v(e)&&
+(e=null);l!==a.location&&(l=a.location);m!==a.history&&(m=a.history);if(b){var f=A===e;if(na===b&&(!c.history||f))return h;var k=na&&ja(na)===ja(b);na=b;A=e;!c.history||k&&f?(k||(y=b),d?l.replace(b):k?(d=l,e=b.indexOf("#"),e=-1===e?"":b.substr(e),d.hash=e):l.href=b,l.href!==b&&(y=b)):(m[d?"replaceState":"pushState"](e,"",b),g());y&&(y=b);return h}return y||l.href.replace(/%27/g,"'")};h.state=function(){return u};var H=[],Z=!1,L=null;h.onUrlChange=function(b){if(!Z){if(c.history)z(a).on("popstate",
+f);z(a).on("hashchange",f);Z=!0}H.push(b);return b};h.$$applicationDestroyed=function(){z(a).off("hashchange popstate",f)};h.$$checkUrlChange=k;h.baseHref=function(){var a=s.attr("href");return a?a.replace(/^(https?:)?\/\/[^/]*/,""):""};h.defer=function(a,b){var c;M++;c=n(function(){delete F[c];e(a)},b||0);F[c]=!0;return c};h.defer.cancel=function(a){return F[a]?(delete F[a],q(a),e(B),!0):!1}}function xf(){this.$get=["$window","$log","$sniffer","$document",function(a,b,d,c){return new sg(a,c,b,d)}]}
+function yf(){this.$get=function(){function a(a,c){function e(a){a!==n&&(q?q===a&&(q=a.n):q=a,f(a.n,a.p),f(a,n),n=a,n.n=null)}function f(a,b){a!==b&&(a&&(a.p=b),b&&(b.n=a))}if(a in b)throw K("$cacheFactory")("iid",a);var g=0,k=O({},c,{id:a}),h=R(),l=c&&c.capacity||Number.MAX_VALUE,m=R(),n=null,q=null;return b[a]={put:function(a,b){if(!v(b)){if(l<Number.MAX_VALUE){var c=m[a]||(m[a]={key:a});e(c)}a in h||g++;h[a]=b;g>l&&this.remove(q.key);return b}},get:function(a){if(l<Number.MAX_VALUE){var b=m[a];
+if(!b)return;e(b)}return h[a]},remove:function(a){if(l<Number.MAX_VALUE){var b=m[a];if(!b)return;b===n&&(n=b.p);b===q&&(q=b.n);f(b.n,b.p);delete m[a]}a in h&&(delete h[a],g--)},removeAll:function(){h=R();g=0;m=R();n=q=null},destroy:function(){m=k=h=null;delete b[a]},info:function(){return O({},k,{size:g})}}}var b={};a.info=function(){var a={};p(b,function(b,e){a[e]=b.info()});return a};a.get=function(a){return b[a]};return a}}function Vf(){this.$get=["$cacheFactory",function(a){return a("templates")}]}
+function Yc(a,b){function d(a,b,c){var d=/^\s*([@&<]|=(\*?))(\??)\s*([\w$]*)\s*$/,e=R();p(a,function(a,g){if(a in n)e[g]=n[a];else{var f=a.match(d);if(!f)throw ga("iscp",b,g,a,c?"controller bindings definition":"isolate scope definition");e[g]={mode:f[1][0],collection:"*"===f[2],optional:"?"===f[3],attrName:f[4]||g};f[4]&&(n[a]=e[g])}});return e}function c(a){var b=a.charAt(0);if(!b||b!==N(b))throw ga("baddir",a);if(a!==a.trim())throw ga("baddir",a);}function e(a){var b=a.require||a.controller&&a.name;
+!I(b)&&G(b)&&p(b,function(a,c){var d=a.match(l);a.substring(d[0].length)||(b[c]=d[0]+c)});return b}var f={},g=/^\s*directive:\s*([\w-]+)\s+(.*)$/,k=/(([\w-]+)(?::([^;]+))?;?)/,h=ue("ngSrc,ngSrcset,src,srcset"),l=/^(?:(\^\^?)?(\?)?(\^\^?)?)?/,m=/^(on[a-z]+|formaction)$/,n=R();this.directive=function na(b,d){hb(b,"name");Oa(b,"directive");C(b)?(c(b),hb(d,"directiveFactory"),f.hasOwnProperty(b)||(f[b]=[],a.factory(b+"Directive",["$injector","$exceptionHandler",function(a,c){var d=[];p(f[b],function(g,
+f){try{var h=a.invoke(g);E(h)?h={compile:aa(h)}:!h.compile&&h.link&&(h.compile=aa(h.link));h.priority=h.priority||0;h.index=f;h.name=h.name||b;h.require=e(h);var k=h,l=h.restrict;if(l&&(!C(l)||!/[EACM]/.test(l)))throw ga("badrestrict",l,b);k.restrict=l||"EA";h.$$moduleName=g.$$moduleName;d.push(h)}catch(m){c(m)}});return d}])),f[b].push(d)):p(b,Ub(na));return this};this.component=function s(a,b){function c(a){function e(b){return E(b)||I(b)?function(c,d){return a.invoke(b,this,{$element:c,$attrs:d})}:
+b}var g=b.template||b.templateUrl?b.template:"",f={controller:d,controllerAs:tg(b.controller)||b.controllerAs||"$ctrl",template:e(g),templateUrl:e(b.templateUrl),transclude:b.transclude,scope:{},bindToController:b.bindings||{},restrict:"E",require:b.require};p(b,function(a,b){"$"===b.charAt(0)&&(f[b]=a)});return f}if(!C(a))return p(a,Ub(Qa(this,s))),this;var d=b.controller||function(){};p(b,function(a,b){"$"===b.charAt(0)&&(c[b]=a,E(d)&&(d[b]=a))});c.$inject=["$injector"];return this.directive(a,
+c)};this.aHrefSanitizationWhitelist=function(a){return t(a)?(b.aHrefSanitizationWhitelist(a),this):b.aHrefSanitizationWhitelist()};this.imgSrcSanitizationWhitelist=function(a){return t(a)?(b.imgSrcSanitizationWhitelist(a),this):b.imgSrcSanitizationWhitelist()};var q=!0;this.debugInfoEnabled=function(a){return t(a)?(q=a,this):q};var F=!1;this.preAssignBindingsEnabled=function(a){return t(a)?(F=a,this):F};var M=10;this.onChangesTtl=function(a){return arguments.length?(M=a,this):M};var w=!0;this.commentDirectivesEnabled=
+function(a){return arguments.length?(w=a,this):w};var u=!0;this.cssClassDirectivesEnabled=function(a){return arguments.length?(u=a,this):u};this.$get=["$injector","$interpolate","$exceptionHandler","$templateRequest","$parse","$controller","$rootScope","$sce","$animate","$$sanitizeUri",function(a,b,c,e,n,L,T,J,U,Y){function r(){try{if(!--Ca)throw ja=void 0,ga("infchng",M);T.$apply(function(){for(var a=[],b=0,c=ja.length;b<c;++b)try{ja[b]()}catch(d){a.push(d)}ja=void 0;if(a.length)throw a;})}finally{Ca++}}
+function ca(a,b){if(b){var c=Object.keys(b),d,e,g;d=0;for(e=c.length;d<e;d++)g=c[d],this[g]=b[g]}else this.$attr={};this.$$element=a}function Ta(a,b,c){za.innerHTML="<span "+b+">";b=za.firstChild.attributes;var d=b[0];b.removeNamedItem(d.name);d.value=c;a.attributes.setNamedItem(d)}function Da(a,b){try{a.addClass(b)}catch(c){}}function da(a,b,c,d,e){a instanceof z||(a=z(a));var g=K(a,b,a,c,d,e);da.$$addScopeClass(a);var f=null;return function(b,c,d){if(!a)throw ga("multilink");hb(b,"scope");e&&e.needsNewScope&&
+(b=b.$parent.$new());d=d||{};var h=d.parentBoundTranscludeFn,k=d.transcludeControllers;d=d.futureParentElement;h&&h.$$boundTransclude&&(h=h.$$boundTransclude);f||(f=(d=d&&d[0])?"foreignobject"!==ya(d)&&la.call(d).match(/SVG/)?"svg":"html":"html");d="html"!==f?z(ka(f,z("<div>").append(a).html())):c?Ra.clone.call(a):a;if(k)for(var l in k)d.data("$"+l+"Controller",k[l].instance);da.$$addScopeInfo(d,b);c&&c(d,b);g&&g(b,d,d,h);c||(a=g=null);return d}}function K(a,b,c,d,e,g){function f(a,c,d,e){var g,k,
+l,m,q,n,D;if(H)for(D=Array(c.length),m=0;m<h.length;m+=3)g=h[m],D[g]=c[g];else D=c;m=0;for(q=h.length;m<q;)k=D[h[m++]],c=h[m++],g=h[m++],c?(c.scope?(l=a.$new(),da.$$addScopeInfo(z(k),l)):l=a,n=c.transcludeOnThisElement?V(a,c.transclude,e):!c.templateOnThisElement&&e?e:!e&&b?V(a,b):null,c(g,l,k,d,n)):g&&g(a,k.childNodes,void 0,e)}for(var h=[],k=I(a)||a instanceof z,l,m,q,n,H,D=0;D<a.length;D++){l=new ca;11===Ba&&lb(a,D,k);m=mc(a[D],[],l,0===D?d:void 0,e);(g=m.length?X(m,a[D],l,b,c,null,[],[],g):null)&&
+g.scope&&da.$$addScopeClass(l.$$element);l=g&&g.terminal||!(q=a[D].childNodes)||!q.length?null:K(q,g?(g.transcludeOnThisElement||!g.templateOnThisElement)&&g.transclude:b);if(g||l)h.push(D,g,l),n=!0,H=H||g;g=null}return n?f:null}function lb(a,b,c){var d=a[b],e=d.parentNode,g;if(d.nodeType===Ma)for(;;){g=e?d.nextSibling:a[b+1];if(!g||g.nodeType!==Ma)break;d.nodeValue+=g.nodeValue;g.parentNode&&g.parentNode.removeChild(g);c&&g===a[b+1]&&a.splice(b+1,1)}}function V(a,b,c){function d(e,g,f,h,k){e||(e=
+a.$new(!1,k),e.$$transcluded=!0);return b(e,g,{parentBoundTranscludeFn:c,transcludeControllers:f,futureParentElement:h})}var e=d.$$slots=R(),g;for(g in b.$$slots)e[g]=b.$$slots[g]?V(a,b.$$slots[g],c):null;return d}function mc(a,b,c,d,e){var g=c.$attr,f;switch(a.nodeType){case 1:f=ya(a);Q(b,Ea(f),"E",d,e);for(var h,l,m,q,n=a.attributes,H=0,D=n&&n.length;H<D;H++){var F=!1,u=!1;h=n[H];l=h.name;m=h.value;h=Ea(l);(q=Na.test(h))&&(l=l.replace(od,"").substr(8).replace(/_(.)/g,function(a,b){return b.toUpperCase()}));
+(h=h.match(Oa))&&ba(h[1])&&(F=l,u=l.substr(0,l.length-5)+"end",l=l.substr(0,l.length-6));h=Ea(l.toLowerCase());g[h]=l;if(q||!c.hasOwnProperty(h))c[h]=m,kd(a,h)&&(c[h]=!0);va(a,b,m,h,q);Q(b,h,"A",d,e,F,u)}"input"===f&&"hidden"===a.getAttribute("type")&&a.setAttribute("autocomplete","off");if(!Ka)break;g=a.className;G(g)&&(g=g.animVal);if(C(g)&&""!==g)for(;a=k.exec(g);)h=Ea(a[2]),Q(b,h,"C",d,e)&&(c[h]=P(a[3])),g=g.substr(a.index+a[0].length);break;case Ma:pa(b,a.nodeValue);break;case 8:if(!Ja)break;
+nc(a,b,c,d,e)}b.sort(ma);return b}function nc(a,b,c,d,e){try{var f=g.exec(a.nodeValue);if(f){var h=Ea(f[1]);Q(b,h,"M",d,e)&&(c[h]=P(f[2]))}}catch(k){}}function pd(a,b,c){var d=[],e=0;if(b&&a.hasAttribute&&a.hasAttribute(b)){do{if(!a)throw ga("uterdir",b,c);1===a.nodeType&&(a.hasAttribute(b)&&e++,a.hasAttribute(c)&&e--);d.push(a);a=a.nextSibling}while(0<e)}else d.push(a);return z(d)}function qd(a,b,c){return function(d,e,g,f,h){e=pd(e[0],b,c);return a(d,e,g,f,h)}}function S(a,b,c,d,e,g){var f;return a?
+da(b,c,d,e,g):function(){f||(f=da(b,c,d,e,g),b=c=g=null);return f.apply(this,arguments)}}function X(a,b,d,e,g,f,h,k,l){function m(a,b,c,d){if(a){c&&(a=qd(a,c,d));a.require=s.require;a.directiveName=Y;if(L===s||s.$$isolateScope)a=ta(a,{isolateScope:!0});h.push(a)}if(b){c&&(b=qd(b,c,d));b.require=s.require;b.directiveName=Y;if(L===s||s.$$isolateScope)b=ta(b,{isolateScope:!0});k.push(b)}}function q(a,e,g,f,l){function m(a,b,c,d){var e;bb(a)||(d=c,c=b,b=a,a=void 0);U&&(e=T);c||(c=U?ha.parent():ha);if(d){var g=
+l.$$slots[d];if(g)return g(a,b,e,c,t);if(v(g))throw ga("noslot",d,Aa(ha));}else return l(a,b,e,c,t)}var n,s,J,y,Z,T,w,ha;b===g?(f=d,ha=d.$$element):(ha=z(g),f=new ca(ha,d));Z=e;L?y=e.$new(!0):H&&(Z=e.$parent);l&&(w=m,w.$$boundTransclude=l,w.isSlotFilled=function(a){return!!l.$$slots[a]});u&&(T=ea(ha,f,w,u,y,e,L));L&&(da.$$addScopeInfo(ha,y,!0,!(M&&(M===L||M===L.$$originalDirective))),da.$$addScopeClass(ha,!0),y.$$isolateBindings=L.$$isolateBindings,s=qa(e,f,y,y.$$isolateBindings,L),s.removeWatches&&
+y.$on("$destroy",s.removeWatches));for(n in T){s=u[n];J=T[n];var Y=s.$$bindings.bindToController;if(F){J.bindingInfo=Y?qa(Z,f,J.instance,Y,s):{};var r=J();r!==J.instance&&(J.instance=r,ha.data("$"+s.name+"Controller",r),J.bindingInfo.removeWatches&&J.bindingInfo.removeWatches(),J.bindingInfo=qa(Z,f,J.instance,Y,s))}else J.instance=J(),ha.data("$"+s.name+"Controller",J.instance),J.bindingInfo=qa(Z,f,J.instance,Y,s)}p(u,function(a,b){var c=a.require;a.bindToController&&!I(c)&&G(c)&&O(T[b].instance,
+W(b,c,ha,T))});p(T,function(a){var b=a.instance;if(E(b.$onChanges))try{b.$onChanges(a.bindingInfo.initialChanges)}catch(d){c(d)}if(E(b.$onInit))try{b.$onInit()}catch(e){c(e)}E(b.$doCheck)&&(Z.$watch(function(){b.$doCheck()}),b.$doCheck());E(b.$onDestroy)&&Z.$on("$destroy",function(){b.$onDestroy()})});n=0;for(s=h.length;n<s;n++)J=h[n],ua(J,J.isolateScope?y:e,ha,f,J.require&&W(J.directiveName,J.require,ha,T),w);var t=e;L&&(L.template||null===L.templateUrl)&&(t=y);a&&a(t,g.childNodes,void 0,l);for(n=
+k.length-1;0<=n;n--)J=k[n],ua(J,J.isolateScope?y:e,ha,f,J.require&&W(J.directiveName,J.require,ha,T),w);p(T,function(a){a=a.instance;E(a.$postLink)&&a.$postLink()})}l=l||{};for(var n=-Number.MAX_VALUE,H=l.newScopeDirective,u=l.controllerDirectives,L=l.newIsolateScopeDirective,M=l.templateDirective,J=l.nonTlbTranscludeDirective,Z=!1,T=!1,U=l.hasElementTranscludeDirective,y=d.$$element=z(b),s,Y,w,r=e,t,Pa=!1,Ta=!1,V,x=0,Da=a.length;x<Da;x++){s=a[x];var B=s.$$start,C=s.$$end;B&&(y=pd(b,B,C));w=void 0;
+if(n>s.priority)break;if(V=s.scope)s.templateUrl||(G(V)?(aa("new/isolated scope",L||H,s,y),L=s):aa("new/isolated scope",L,s,y)),H=H||s;Y=s.name;if(!Pa&&(s.replace&&(s.templateUrl||s.template)||s.transclude&&!s.$$tlb)){for(V=x+1;Pa=a[V++];)if(Pa.transclude&&!Pa.$$tlb||Pa.replace&&(Pa.templateUrl||Pa.template)){Ta=!0;break}Pa=!0}!s.templateUrl&&s.controller&&(u=u||R(),aa("'"+Y+"' controller",u[Y],s,y),u[Y]=s);if(V=s.transclude)if(Z=!0,s.$$tlb||(aa("transclusion",J,s,y),J=s),"element"===V)U=!0,n=s.priority,
+w=y,y=d.$$element=z(da.$$createComment(Y,d[Y])),b=y[0],oa(g,xa.call(w,0),b),w[0].$$parentNode=w[0].parentNode,r=S(Ta,w,e,n,f&&f.name,{nonTlbTranscludeDirective:J});else{var K=R();if(G(V)){w=[];var N=R(),lb=R();p(V,function(a,b){var c="?"===a.charAt(0);a=c?a.substring(1):a;N[a]=b;K[b]=null;lb[b]=c});p(y.contents(),function(a){var b=N[Ea(ya(a))];b?(lb[b]=!0,K[b]=K[b]||[],K[b].push(a)):w.push(a)});p(lb,function(a,b){if(!a)throw ga("reqslot",b);});for(var lc in K)K[lc]&&(K[lc]=S(Ta,K[lc],e))}else w=z(ic(b)).contents();
+y.empty();r=S(Ta,w,e,void 0,void 0,{needsNewScope:s.$$isolateScope||s.$$newScope});r.$$slots=K}if(s.template)if(T=!0,aa("template",M,s,y),M=s,V=E(s.template)?s.template(y,d):s.template,V=Ha(V),s.replace){f=s;w=fc.test(V)?rd(ka(s.templateNamespace,P(V))):[];b=w[0];if(1!==w.length||1!==b.nodeType)throw ga("tplrt",Y,"");oa(g,y,b);Da={$attr:{}};V=mc(b,[],Da);var nc=a.splice(x+1,a.length-(x+1));(L||H)&&$(V,L,H);a=a.concat(V).concat(nc);fa(d,Da);Da=a.length}else y.html(V);if(s.templateUrl)T=!0,aa("template",
+M,s,y),M=s,s.replace&&(f=s),q=ia(a.splice(x,a.length-x),y,d,g,Z&&r,h,k,{controllerDirectives:u,newScopeDirective:H!==s&&H,newIsolateScopeDirective:L,templateDirective:M,nonTlbTranscludeDirective:J}),Da=a.length;else if(s.compile)try{t=s.compile(y,d,r);var Q=s.$$originalDirective||s;E(t)?m(null,Qa(Q,t),B,C):t&&m(Qa(Q,t.pre),Qa(Q,t.post),B,C)}catch(ba){c(ba,Aa(y))}s.terminal&&(q.terminal=!0,n=Math.max(n,s.priority))}q.scope=H&&!0===H.scope;q.transcludeOnThisElement=Z;q.templateOnThisElement=T;q.transclude=
+r;l.hasElementTranscludeDirective=U;return q}function W(a,b,c,d){var e;if(C(b)){var g=b.match(l);b=b.substring(g[0].length);var f=g[1]||g[3],g="?"===g[2];"^^"===f?c=c.parent():e=(e=d&&d[b])&&e.instance;if(!e){var h="$"+b+"Controller";e=f?c.inheritedData(h):c.data(h)}if(!e&&!g)throw ga("ctreq",b,a);}else if(I(b))for(e=[],f=0,g=b.length;f<g;f++)e[f]=W(a,b[f],c,d);else G(b)&&(e={},p(b,function(b,g){e[g]=W(a,b,c,d)}));return e||null}function ea(a,b,c,d,e,g,f){var h=R(),k;for(k in d){var l=d[k],m={$scope:l===
+f||l.$$isolateScope?e:g,$element:a,$attrs:b,$transclude:c},n=l.controller;"@"===n&&(n=b[l.name]);m=L(n,m,!0,l.controllerAs);h[l.name]=m;a.data("$"+l.name+"Controller",m.instance)}return h}function $(a,b,c){for(var d=0,e=a.length;d<e;d++)a[d]=Xb(a[d],{$$isolateScope:b,$$newScope:c})}function Q(b,c,e,g,h,k,l){if(c===h)return null;var m=null;if(f.hasOwnProperty(c)){h=a.get(c+"Directive");for(var n=0,q=h.length;n<q;n++)if(c=h[n],(v(g)||g>c.priority)&&-1!==c.restrict.indexOf(e)){k&&(c=Xb(c,{$$start:k,
+$$end:l}));if(!c.$$bindings){var H=m=c,D=c.name,F={isolateScope:null,bindToController:null};G(H.scope)&&(!0===H.bindToController?(F.bindToController=d(H.scope,D,!0),F.isolateScope={}):F.isolateScope=d(H.scope,D,!1));G(H.bindToController)&&(F.bindToController=d(H.bindToController,D,!0));if(F.bindToController&&!H.controller)throw ga("noctrl",D);m=m.$$bindings=F;G(m.isolateScope)&&(c.$$isolateBindings=m.isolateScope)}b.push(c);m=c}}return m}function ba(b){if(f.hasOwnProperty(b))for(var c=a.get(b+"Directive"),
+d=0,e=c.length;d<e;d++)if(b=c[d],b.multiElement)return!0;return!1}function fa(a,b){var c=b.$attr,d=a.$attr;p(a,function(d,e){"$"!==e.charAt(0)&&(b[e]&&b[e]!==d&&(d=d.length?d+(("style"===e?";":" ")+b[e]):b[e]),a.$set(e,d,!0,c[e]))});p(b,function(b,e){a.hasOwnProperty(e)||"$"===e.charAt(0)||(a[e]=b,"class"!==e&&"style"!==e&&(d[e]=c[e]))})}function ia(a,b,d,g,f,h,k,l){var m=[],n,q,F=b[0],s=a.shift(),L=Xb(s,{templateUrl:null,transclude:null,replace:null,$$originalDirective:s}),J=E(s.templateUrl)?s.templateUrl(b,
+d):s.templateUrl,u=s.templateNamespace;b.empty();e(J).then(function(c){var e,H;c=Ha(c);if(s.replace){c=fc.test(c)?rd(ka(u,P(c))):[];e=c[0];if(1!==c.length||1!==e.nodeType)throw ga("tplrt",s.name,J);c={$attr:{}};oa(g,b,e);var D=mc(e,[],c);G(s.scope)&&$(D,!0);a=D.concat(a);fa(d,c)}else e=F,b.html(c);a.unshift(L);n=X(a,e,d,f,b,s,h,k,l);p(g,function(a,c){a===e&&(g[c]=b[0])});for(q=K(b[0].childNodes,f);m.length;){c=m.shift();H=m.shift();var y=m.shift(),M=m.shift(),D=b[0];if(!c.$$destroyed){if(H!==F){var Z=
+H.className;l.hasElementTranscludeDirective&&s.replace||(D=ic(e));oa(y,z(H),D);Da(z(D),Z)}H=n.transcludeOnThisElement?V(c,n.transclude,M):M;n(q,c,D,g,H)}}m=null}).catch(function(a){Zb(a)&&c(a)});return function(a,b,c,d,e){a=e;b.$$destroyed||(m?m.push(b,c,d,a):(n.transcludeOnThisElement&&(a=V(b,n.transclude,e)),n(q,b,c,d,a)))}}function ma(a,b){var c=b.priority-a.priority;return 0!==c?c:a.name!==b.name?a.name<b.name?-1:1:a.index-b.index}function aa(a,b,c,d){function e(a){return a?" (module: "+a+")":
+""}if(b)throw ga("multidir",b.name,e(b.$$moduleName),c.name,e(c.$$moduleName),a,Aa(d));}function pa(a,c){var d=b(c,!0);d&&a.push({priority:0,compile:function(a){a=a.parent();var b=!!a.length;b&&da.$$addBindingClass(a);return function(a,c){var e=c.parent();b||da.$$addBindingClass(e);da.$$addBindingInfo(e,d.expressions);a.$watch(d,function(a){c[0].nodeValue=a})}}})}function ka(a,b){a=N(a||"html");switch(a){case "svg":case "math":var c=x.document.createElement("div");c.innerHTML="<"+a+">"+b+"</"+a+">";
+return c.childNodes[0].childNodes;default:return b}}function ra(a,b){if("srcdoc"===b)return J.HTML;var c=ya(a);if("src"===b||"ngSrc"===b){if(-1===["img","video","audio","source","track"].indexOf(c))return J.RESOURCE_URL}else if("xlinkHref"===b||"form"===c&&"action"===b||"link"===c&&"href"===b)return J.RESOURCE_URL}function va(a,c,d,e,g){var f=ra(a,e),k=h[e]||g,l=b(d,!g,f,k);if(l){if("multiple"===e&&"select"===ya(a))throw ga("selmulti",Aa(a));if(m.test(e))throw ga("nodomevents");c.push({priority:100,
+compile:function(){return{pre:function(a,c,g){c=g.$$observers||(g.$$observers=R());var h=g[e];h!==d&&(l=h&&b(h,!0,f,k),d=h);l&&(g[e]=l(a),(c[e]||(c[e]=[])).$$inter=!0,(g.$$observers&&g.$$observers[e].$$scope||a).$watch(l,function(a,b){"class"===e&&a!==b?g.$updateClass(a,b):g.$set(e,a)}))}}}})}}function oa(a,b,c){var d=b[0],e=b.length,g=d.parentNode,f,h;if(a)for(f=0,h=a.length;f<h;f++)if(a[f]===d){a[f++]=c;h=f+e-1;for(var k=a.length;f<k;f++,h++)h<k?a[f]=a[h]:delete a[f];a.length-=e-1;a.context===d&&
+(a.context=c);break}g&&g.replaceChild(c,d);a=x.document.createDocumentFragment();for(f=0;f<e;f++)a.appendChild(b[f]);z.hasData(d)&&(z.data(c,z.data(d)),z(d).off("$destroy"));z.cleanData(a.querySelectorAll("*"));for(f=1;f<e;f++)delete b[f];b[0]=c;b.length=1}function ta(a,b){return O(function(){return a.apply(null,arguments)},a,b)}function ua(a,b,d,e,g,f){try{a(b,d,e,g,f)}catch(h){c(h,Aa(d))}}function qa(a,c,d,e,g){function f(b,c,e){E(d.$onChanges)&&!$b(c,e)&&(ja||(a.$$postDigest(r),ja=[]),m||(m={},
+ja.push(h)),m[b]&&(e=m[b].previousValue),m[b]=new Jb(e,c))}function h(){d.$onChanges(m);m=void 0}var k=[],l={},m;p(e,function(e,h){var m=e.attrName,q=e.optional,H,D,F,s;switch(e.mode){case "@":q||wa.call(c,m)||(d[h]=c[m]=void 0);q=c.$observe(m,function(a){if(C(a)||La(a))f(h,a,d[h]),d[h]=a});c.$$observers[m].$$scope=a;H=c[m];C(H)?d[h]=b(H)(a):La(H)&&(d[h]=H);l[h]=new Jb(oc,d[h]);k.push(q);break;case "=":if(!wa.call(c,m)){if(q)break;c[m]=void 0}if(q&&!c[m])break;D=n(c[m]);s=D.literal?sa:$b;F=D.assign||
+function(){H=d[h]=D(a);throw ga("nonassign",c[m],m,g.name);};H=d[h]=D(a);q=function(b){s(b,d[h])||(s(b,H)?F(a,b=d[h]):d[h]=b);return H=b};q.$stateful=!0;q=e.collection?a.$watchCollection(c[m],q):a.$watch(n(c[m],q),null,D.literal);k.push(q);break;case "<":if(!wa.call(c,m)){if(q)break;c[m]=void 0}if(q&&!c[m])break;D=n(c[m]);var L=D.literal,J=d[h]=D(a);l[h]=new Jb(oc,d[h]);q=a.$watch(D,function(a,b){if(b===a){if(b===J||L&&sa(b,J))return;b=J}f(h,a,b);d[h]=a},L);k.push(q);break;case "&":D=c.hasOwnProperty(m)?
+n(c[m]):B;if(D===B&&q)break;d[h]=function(b){return D(a,b)}}});return{initialChanges:l,removeWatches:k.length&&function(){for(var a=0,b=k.length;a<b;++a)k[a]()}}}var Ia=/^\w/,za=x.document.createElement("div"),Ja=w,Ka=u,Ca=M,ja;ca.prototype={$normalize:Ea,$addClass:function(a){a&&0<a.length&&U.addClass(this.$$element,a)},$removeClass:function(a){a&&0<a.length&&U.removeClass(this.$$element,a)},$updateClass:function(a,b){var c=sd(a,b);c&&c.length&&U.addClass(this.$$element,c);(c=sd(b,a))&&c.length&&
+U.removeClass(this.$$element,c)},$set:function(a,b,d,e){var g=kd(this.$$element[0],a),f=td[a],h=a;g?(this.$$element.prop(a,b),e=g):f&&(this[f]=b,h=f);this[a]=b;e?this.$attr[a]=e:(e=this.$attr[a])||(this.$attr[a]=e=Vc(a,"-"));g=ya(this.$$element);if("a"===g&&("href"===a||"xlinkHref"===a)||"img"===g&&"src"===a)this[a]=b=Y(b,"src"===a);else if("img"===g&&"srcset"===a&&t(b)){for(var g="",f=P(b),k=/(\s+\d+x\s*,|\s+\d+w\s*,|\s+,|,\s+)/,k=/\s/.test(f)?k:/(,)/,f=f.split(k),k=Math.floor(f.length/2),l=0;l<
+k;l++)var m=2*l,g=g+Y(P(f[m]),!0),g=g+(" "+P(f[m+1]));f=P(f[2*l]).split(/\s/);g+=Y(P(f[0]),!0);2===f.length&&(g+=" "+P(f[1]));this[a]=b=g}!1!==d&&(null===b||v(b)?this.$$element.removeAttr(e):Ia.test(e)?this.$$element.attr(e,b):Ta(this.$$element[0],e,b));(a=this.$$observers)&&p(a[h],function(a){try{a(b)}catch(d){c(d)}})},$observe:function(a,b){var c=this,d=c.$$observers||(c.$$observers=R()),e=d[a]||(d[a]=[]);e.push(b);T.$evalAsync(function(){e.$$inter||!c.hasOwnProperty(a)||v(c[a])||b(c[a])});return function(){cb(e,
+b)}}};var Fa=b.startSymbol(),Ga=b.endSymbol(),Ha="{{"===Fa&&"}}"===Ga?ab:function(a){return a.replace(/\{\{/g,Fa).replace(/}}/g,Ga)},Na=/^ngAttr[A-Z]/,Oa=/^(.+)Start$/;da.$$addBindingInfo=q?function(a,b){var c=a.data("$binding")||[];I(b)?c=c.concat(b):c.push(b);a.data("$binding",c)}:B;da.$$addBindingClass=q?function(a){Da(a,"ng-binding")}:B;da.$$addScopeInfo=q?function(a,b,c,d){a.data(c?d?"$isolateScopeNoTemplate":"$isolateScope":"$scope",b)}:B;da.$$addScopeClass=q?function(a,b){Da(a,b?"ng-isolate-scope":
+"ng-scope")}:B;da.$$createComment=function(a,b){var c="";q&&(c=" "+(a||"")+": ",b&&(c+=b+" "));return x.document.createComment(c)};return da}]}function Jb(a,b){this.previousValue=a;this.currentValue=b}function Ea(a){return a.replace(od,"").replace(ug,ib)}function sd(a,b){var d="",c=a.split(/\s+/),e=b.split(/\s+/),f=0;a:for(;f<c.length;f++){for(var g=c[f],k=0;k<e.length;k++)if(g===e[k])continue a;d+=(0<d.length?" ":"")+g}return d}function rd(a){a=z(a);var b=a.length;if(1>=b)return a;for(;b--;){var d=
+a[b];(8===d.nodeType||d.nodeType===Ma&&""===d.nodeValue.trim())&&vg.call(a,b,1)}return a}function tg(a,b){if(b&&C(b))return b;if(C(a)){var d=ud.exec(a);if(d)return d[3]}}function zf(){var a={},b=!1;this.has=function(b){return a.hasOwnProperty(b)};this.register=function(b,c){Oa(b,"controller");G(b)?O(a,b):a[b]=c};this.allowGlobals=function(){b=!0};this.$get=["$injector","$window",function(d,c){function e(a,b,c,d){if(!a||!G(a.$scope))throw K("$controller")("noscp",d,b);a.$scope[b]=c}return function(f,
+g,k,h){var l,m,n;k=!0===k;h&&C(h)&&(n=h);if(C(f)){h=f.match(ud);if(!h)throw vd("ctrlfmt",f);m=h[1];n=n||h[3];f=a.hasOwnProperty(m)?a[m]:Xc(g.$scope,m,!0)||(b?Xc(c,m,!0):void 0);if(!f)throw vd("ctrlreg",m);ub(f,m,!0)}if(k)return k=(I(f)?f[f.length-1]:f).prototype,l=Object.create(k||null),n&&e(g,n,l,m||f.name),O(function(){var a=d.invoke(f,l,g,m);a!==l&&(G(a)||E(a))&&(l=a,n&&e(g,n,l,m||f.name));return l},{instance:l,identifier:n});l=d.instantiate(f,g,m);n&&e(g,n,l,m||f.name);return l}}]}function Af(){this.$get=
+["$window",function(a){return z(a.document)}]}function Bf(){this.$get=["$document","$rootScope",function(a,b){function d(){e=c.hidden}var c=a[0],e=c&&c.hidden;a.on("visibilitychange",d);b.$on("$destroy",function(){a.off("visibilitychange",d)});return function(){return e}}]}function Cf(){this.$get=["$log",function(a){return function(b,d){a.error.apply(a,arguments)}}]}function pc(a){return G(a)?ia(a)?a.toISOString():eb(a):a}function Hf(){this.$get=function(){return function(a){if(!a)return"";var b=
+[];Nc(a,function(a,c){null===a||v(a)||(I(a)?p(a,function(a){b.push(ma(c)+"="+ma(pc(a)))}):b.push(ma(c)+"="+ma(pc(a))))});return b.join("&")}}}function If(){this.$get=function(){return function(a){function b(a,e,f){null===a||v(a)||(I(a)?p(a,function(a,c){b(a,e+"["+(G(a)?c:"")+"]")}):G(a)&&!ia(a)?Nc(a,function(a,c){b(a,e+(f?"":"[")+c+(f?"":"]"))}):d.push(ma(e)+"="+ma(pc(a))))}if(!a)return"";var d=[];b(a,"",!0);return d.join("&")}}}function qc(a,b){if(C(a)){var d=a.replace(wg,"").trim();if(d){var c=
+b("Content-Type");(c=c&&0===c.indexOf(wd))||(c=(c=d.match(xg))&&yg[c[0]].test(d));if(c)try{a=Qc(d)}catch(e){throw rc("baddata",a,e);}}}return a}function xd(a){var b=R(),d;C(a)?p(a.split("\n"),function(a){d=a.indexOf(":");var e=N(P(a.substr(0,d)));a=P(a.substr(d+1));e&&(b[e]=b[e]?b[e]+", "+a:a)}):G(a)&&p(a,function(a,d){var f=N(d),g=P(a);f&&(b[f]=b[f]?b[f]+", "+g:g)});return b}function yd(a){var b;return function(d){b||(b=xd(a));return d?(d=b[N(d)],void 0===d&&(d=null),d):b}}function zd(a,b,d,c){if(E(c))return c(a,
+b,d);p(c,function(c){a=c(a,b,d)});return a}function Gf(){var a=this.defaults={transformResponse:[qc],transformRequest:[function(a){return G(a)&&"[object File]"!==la.call(a)&&"[object Blob]"!==la.call(a)&&"[object FormData]"!==la.call(a)?eb(a):a}],headers:{common:{Accept:"application/json, text/plain, */*"},post:ra(sc),put:ra(sc),patch:ra(sc)},xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",paramSerializer:"$httpParamSerializer",jsonpCallbackParam:"callback"},b=!1;this.useApplyAsync=function(a){return t(a)?
+(b=!!a,this):b};var d=this.interceptors=[];this.$get=["$browser","$httpBackend","$$cookieReader","$cacheFactory","$rootScope","$q","$injector","$sce",function(c,e,f,g,k,h,l,m){function n(b){function d(a,b){for(var c=0,e=b.length;c<e;){var g=b[c++],f=b[c++];a=a.then(g,f)}b.length=0;return a}function e(a,b){var c,d={};p(a,function(a,e){E(a)?(c=a(b),null!=c&&(d[e]=c)):d[e]=a});return d}function g(a){var b=O({},a);b.data=zd(a.data,a.headers,a.status,f.transformResponse);a=a.status;return 200<=a&&300>
+a?b:h.reject(b)}if(!G(b))throw K("$http")("badreq",b);if(!C(m.valueOf(b.url)))throw K("$http")("badreq",b.url);var f=O({method:"get",transformRequest:a.transformRequest,transformResponse:a.transformResponse,paramSerializer:a.paramSerializer,jsonpCallbackParam:a.jsonpCallbackParam},b);f.headers=function(b){var c=a.headers,d=O({},b.headers),g,f,h,c=O({},c.common,c[N(b.method)]);a:for(g in c){f=N(g);for(h in d)if(N(h)===f)continue a;d[g]=c[g]}return e(d,ra(b))}(b);f.method=wb(f.method);f.paramSerializer=
+C(f.paramSerializer)?l.get(f.paramSerializer):f.paramSerializer;c.$$incOutstandingRequestCount();var k=[],n=[];b=h.resolve(f);p(u,function(a){(a.request||a.requestError)&&k.unshift(a.request,a.requestError);(a.response||a.responseError)&&n.push(a.response,a.responseError)});b=d(b,k);b=b.then(function(b){var c=b.headers,d=zd(b.data,yd(c),void 0,b.transformRequest);v(d)&&p(c,function(a,b){"content-type"===N(b)&&delete c[b]});v(b.withCredentials)&&!v(a.withCredentials)&&(b.withCredentials=a.withCredentials);
+return q(b,d).then(g,g)});b=d(b,n);return b=b.finally(function(){c.$$completeOutstandingRequest(B)})}function q(c,d){function g(a){if(a){var c={};p(a,function(a,d){c[d]=function(c){function d(){a(c)}b?k.$applyAsync(d):k.$$phase?d():k.$apply(d)}});return c}}function l(a,c,d,e){function g(){q(c,a,d,e)}J&&(200<=a&&300>a?J.put(ca,[a,c,xd(d),e]):J.remove(ca));b?k.$applyAsync(g):(g(),k.$$phase||k.$apply())}function q(a,b,d,e){b=-1<=b?b:0;(200<=b&&300>b?L.resolve:L.reject)({data:a,status:b,headers:yd(d),
+config:c,statusText:e})}function H(a){q(a.data,a.status,ra(a.headers()),a.statusText)}function u(){var a=n.pendingRequests.indexOf(c);-1!==a&&n.pendingRequests.splice(a,1)}var L=h.defer(),T=L.promise,J,U,Y=c.headers,r="jsonp"===N(c.method),ca=c.url;r?ca=m.getTrustedResourceUrl(ca):C(ca)||(ca=m.valueOf(ca));ca=F(ca,c.paramSerializer(c.params));r&&(ca=M(ca,c.jsonpCallbackParam));n.pendingRequests.push(c);T.then(u,u);!c.cache&&!a.cache||!1===c.cache||"GET"!==c.method&&"JSONP"!==c.method||(J=G(c.cache)?
+c.cache:G(a.cache)?a.cache:w);J&&(U=J.get(ca),t(U)?U&&E(U.then)?U.then(H,H):I(U)?q(U[1],U[0],ra(U[2]),U[3]):q(U,200,{},"OK"):J.put(ca,T));v(U)&&((U=Ad(c.url)?f()[c.xsrfCookieName||a.xsrfCookieName]:void 0)&&(Y[c.xsrfHeaderName||a.xsrfHeaderName]=U),e(c.method,ca,d,l,Y,c.timeout,c.withCredentials,c.responseType,g(c.eventHandlers),g(c.uploadEventHandlers)));return T}function F(a,b){0<b.length&&(a+=(-1===a.indexOf("?")?"?":"&")+b);return a}function M(a,b){if(/[&?][^=]+=JSON_CALLBACK/.test(a))throw rc("badjsonp",
+a);if((new RegExp("[&?]"+b+"=")).test(a))throw rc("badjsonp",b,a);return a+=(-1===a.indexOf("?")?"?":"&")+b+"=JSON_CALLBACK"}var w=g("$http");a.paramSerializer=C(a.paramSerializer)?l.get(a.paramSerializer):a.paramSerializer;var u=[];p(d,function(a){u.unshift(C(a)?l.get(a):l.invoke(a))});n.pendingRequests=[];(function(a){p(arguments,function(a){n[a]=function(b,c){return n(O({},c||{},{method:a,url:b}))}})})("get","delete","head","jsonp");(function(a){p(arguments,function(a){n[a]=function(b,c,d){return n(O({},
+d||{},{method:a,url:b,data:c}))}})})("post","put","patch");n.defaults=a;return n}]}function Kf(){this.$get=function(){return function(){return new x.XMLHttpRequest}}}function Jf(){this.$get=["$browser","$jsonpCallbacks","$document","$xhrFactory",function(a,b,d,c){return zg(a,c,a.defer,b,d[0])}]}function zg(a,b,d,c,e){function f(a,b,d){a=a.replace("JSON_CALLBACK",b);var f=e.createElement("script"),m=null;f.type="text/javascript";f.src=a;f.async=!0;m=function(a){f.removeEventListener("load",m);f.removeEventListener("error",
+m);e.body.removeChild(f);f=null;var g=-1,F="unknown";a&&("load"!==a.type||c.wasCalled(b)||(a={type:"error"}),F=a.type,g="error"===a.type?404:200);d&&d(g,F)};f.addEventListener("load",m);f.addEventListener("error",m);e.body.appendChild(f);return m}return function(e,k,h,l,m,n,q,F,M,w){function u(){na&&na();s&&s.abort()}k=k||a.url();if("jsonp"===N(e))var A=c.createCallback(k),na=f(k,A,function(a,b){var e=200===a&&c.getResponse(A);t(D)&&d.cancel(D);na=s=null;l(a,e,"",b);c.removeCallback(A)});else{var s=
+b(e,k);s.open(e,k,!0);p(m,function(a,b){t(a)&&s.setRequestHeader(b,a)});s.onload=function(){var a=s.statusText||"",b="response"in s?s.response:s.responseText,c=1223===s.status?204:s.status;0===c&&(c=b?200:"file"===ua(k).protocol?404:0);var e=s.getAllResponseHeaders();t(D)&&d.cancel(D);na=s=null;l(c,b,e,a)};e=function(){t(D)&&d.cancel(D);na=s=null;l(-1,null,null,"")};s.onerror=e;s.onabort=e;s.ontimeout=e;p(M,function(a,b){s.addEventListener(b,a)});p(w,function(a,b){s.upload.addEventListener(b,a)});
+q&&(s.withCredentials=!0);if(F)try{s.responseType=F}catch(y){if("json"!==F)throw y;}s.send(v(h)?null:h)}if(0<n)var D=d(u,n);else n&&E(n.then)&&n.then(u)}}function Ef(){var a="{{",b="}}";this.startSymbol=function(b){return b?(a=b,this):a};this.endSymbol=function(a){return a?(b=a,this):b};this.$get=["$parse","$exceptionHandler","$sce",function(d,c,e){function f(a){return"\\\\\\"+a}function g(c){return c.replace(n,a).replace(q,b)}function k(a,b,c,d){var e=a.$watch(function(a){e();return d(a)},b,c);return e}
+function h(f,h,q,n){function A(a){try{var b=a;a=q?e.getTrusted(q,b):e.valueOf(b);return n&&!t(a)?a:cc(a)}catch(d){c(Fa.interr(f,d))}}if(!f.length||-1===f.indexOf(a)){var p;h||(h=g(f),p=aa(h),p.exp=f,p.expressions=[],p.$$watchDelegate=k);return p}n=!!n;var s,y,D=0,H=[],Z=[];p=f.length;for(var L=[],T=[];D<p;)if(-1!==(s=f.indexOf(a,D))&&-1!==(y=f.indexOf(b,s+l)))D!==s&&L.push(g(f.substring(D,s))),D=f.substring(s+l,y),H.push(D),Z.push(d(D,A)),D=y+m,T.push(L.length),L.push("");else{D!==p&&L.push(g(f.substring(D)));
+break}q&&1<L.length&&Fa.throwNoconcat(f);if(!h||H.length){var J=function(a){for(var b=0,c=H.length;b<c;b++){if(n&&v(a[b]))return;L[T[b]]=a[b]}return L.join("")};return O(function(a){var b=0,d=H.length,e=Array(d);try{for(;b<d;b++)e[b]=Z[b](a);return J(e)}catch(g){c(Fa.interr(f,g))}},{exp:f,expressions:H,$$watchDelegate:function(a,b){var c;return a.$watchGroup(Z,function(d,e){var g=J(d);E(b)&&b.call(this,g,d!==e?c:g,a);c=g})}})}}var l=a.length,m=b.length,n=new RegExp(a.replace(/./g,f),"g"),q=new RegExp(b.replace(/./g,
+f),"g");h.startSymbol=function(){return a};h.endSymbol=function(){return b};return h}]}function Ff(){this.$get=["$rootScope","$window","$q","$$q","$browser",function(a,b,d,c,e){function f(f,h,l,m){function n(){q?f.apply(null,F):f(u)}var q=4<arguments.length,F=q?xa.call(arguments,4):[],p=b.setInterval,w=b.clearInterval,u=0,A=t(m)&&!m,r=(A?c:d).defer(),s=r.promise;l=t(l)?l:0;s.$$intervalId=p(function(){A?e.defer(n):a.$evalAsync(n);r.notify(u++);0<l&&u>=l&&(r.resolve(u),w(s.$$intervalId),delete g[s.$$intervalId]);
+A||a.$apply()},h);g[s.$$intervalId]=r;return s}var g={};f.cancel=function(a){return a&&a.$$intervalId in g?(g[a.$$intervalId].promise.$$state.pur=!0,g[a.$$intervalId].reject("canceled"),b.clearInterval(a.$$intervalId),delete g[a.$$intervalId],!0):!1};return f}]}function tc(a){a=a.split("/");for(var b=a.length;b--;)a[b]=fb(a[b]);return a.join("/")}function Bd(a,b){var d=ua(a);b.$$protocol=d.protocol;b.$$host=d.hostname;b.$$port=Q(d.port)||Ag[d.protocol]||null}function Cd(a,b){if(Bg.test(a))throw mb("badpath",
+a);var d="/"!==a.charAt(0);d&&(a="/"+a);var c=ua(a);b.$$path=decodeURIComponent(d&&"/"===c.pathname.charAt(0)?c.pathname.substring(1):c.pathname);b.$$search=Tc(c.search);b.$$hash=decodeURIComponent(c.hash);b.$$path&&"/"!==b.$$path.charAt(0)&&(b.$$path="/"+b.$$path)}function uc(a,b){return a.slice(0,b.length)===b}function va(a,b){if(uc(b,a))return b.substr(a.length)}function ja(a){var b=a.indexOf("#");return-1===b?a:a.substr(0,b)}function nb(a){return a.replace(/(#.+)|#$/,"$1")}function vc(a,b,d){this.$$html5=
+!0;d=d||"";Bd(a,this);this.$$parse=function(a){var d=va(b,a);if(!C(d))throw mb("ipthprfx",a,b);Cd(d,this);this.$$path||(this.$$path="/");this.$$compose()};this.$$compose=function(){var a=bc(this.$$search),d=this.$$hash?"#"+fb(this.$$hash):"";this.$$url=tc(this.$$path)+(a?"?"+a:"")+d;this.$$absUrl=b+this.$$url.substr(1);this.$$urlUpdatedByLocation=!0};this.$$parseLinkUrl=function(c,e){if(e&&"#"===e[0])return this.hash(e.slice(1)),!0;var f,g;t(f=va(a,c))?(g=f,g=d&&t(f=va(d,f))?b+(va("/",f)||f):a+g):
+t(f=va(b,c))?g=b+f:b===c+"/"&&(g=b);g&&this.$$parse(g);return!!g}}function wc(a,b,d){Bd(a,this);this.$$parse=function(c){var e=va(a,c)||va(b,c),f;v(e)||"#"!==e.charAt(0)?this.$$html5?f=e:(f="",v(e)&&(a=c,this.replace())):(f=va(d,e),v(f)&&(f=e));Cd(f,this);c=this.$$path;var e=a,g=/^\/[A-Z]:(\/.*)/;uc(f,e)&&(f=f.replace(e,""));g.exec(f)||(c=(f=g.exec(c))?f[1]:c);this.$$path=c;this.$$compose()};this.$$compose=function(){var b=bc(this.$$search),e=this.$$hash?"#"+fb(this.$$hash):"";this.$$url=tc(this.$$path)+
+(b?"?"+b:"")+e;this.$$absUrl=a+(this.$$url?d+this.$$url:"");this.$$urlUpdatedByLocation=!0};this.$$parseLinkUrl=function(b,d){return ja(a)===ja(b)?(this.$$parse(b),!0):!1}}function Dd(a,b,d){this.$$html5=!0;wc.apply(this,arguments);this.$$parseLinkUrl=function(c,e){if(e&&"#"===e[0])return this.hash(e.slice(1)),!0;var f,g;a===ja(c)?f=c:(g=va(b,c))?f=a+d+g:b===c+"/"&&(f=b);f&&this.$$parse(f);return!!f};this.$$compose=function(){var b=bc(this.$$search),e=this.$$hash?"#"+fb(this.$$hash):"";this.$$url=
+tc(this.$$path)+(b?"?"+b:"")+e;this.$$absUrl=a+d+this.$$url;this.$$urlUpdatedByLocation=!0}}function Kb(a){return function(){return this[a]}}function Ed(a,b){return function(d){if(v(d))return this[a];this[a]=b(d);this.$$compose();return this}}function Mf(){var a="!",b={enabled:!1,requireBase:!0,rewriteLinks:!0};this.hashPrefix=function(b){return t(b)?(a=b,this):a};this.html5Mode=function(a){if(La(a))return b.enabled=a,this;if(G(a)){La(a.enabled)&&(b.enabled=a.enabled);La(a.requireBase)&&(b.requireBase=
+a.requireBase);if(La(a.rewriteLinks)||C(a.rewriteLinks))b.rewriteLinks=a.rewriteLinks;return this}return b};this.$get=["$rootScope","$browser","$sniffer","$rootElement","$window",function(d,c,e,f,g){function k(a,b,d){var e=l.url(),g=l.$$state;try{c.url(a,b,d),l.$$state=c.state()}catch(f){throw l.url(e),l.$$state=g,f;}}function h(a,b){d.$broadcast("$locationChangeSuccess",l.absUrl(),a,l.$$state,b)}var l,m;m=c.baseHref();var n=c.url(),q;if(b.enabled){if(!m&&b.requireBase)throw mb("nobase");q=n.substring(0,
+n.indexOf("/",n.indexOf("//")+2))+(m||"/");m=e.history?vc:Dd}else q=ja(n),m=wc;var F=q.substr(0,ja(q).lastIndexOf("/")+1);l=new m(q,F,"#"+a);l.$$parseLinkUrl(n,n);l.$$state=c.state();var p=/^\s*(javascript|mailto):/i;f.on("click",function(a){var e=b.rewriteLinks;if(e&&!a.ctrlKey&&!a.metaKey&&!a.shiftKey&&2!==a.which&&2!==a.button){for(var h=z(a.target);"a"!==ya(h[0]);)if(h[0]===f[0]||!(h=h.parent())[0])return;if(!C(e)||!v(h.attr(e))){var e=h.prop("href"),k=h.attr("href")||h.attr("xlink:href");G(e)&&
+"[object SVGAnimatedString]"===e.toString()&&(e=ua(e.animVal).href);p.test(e)||!e||h.attr("target")||a.isDefaultPrevented()||!l.$$parseLinkUrl(e,k)||(a.preventDefault(),l.absUrl()!==c.url()&&(d.$apply(),g.angular["ff-684208-preventDefault"]=!0))}}});nb(l.absUrl())!==nb(n)&&c.url(l.absUrl(),!0);var w=!0;c.onUrlChange(function(a,b){uc(a,F)?(d.$evalAsync(function(){var c=l.absUrl(),e=l.$$state,g;a=nb(a);l.$$parse(a);l.$$state=b;g=d.$broadcast("$locationChangeStart",a,c,b,e).defaultPrevented;l.absUrl()===
+a&&(g?(l.$$parse(c),l.$$state=e,k(c,!1,e)):(w=!1,h(c,e)))}),d.$$phase||d.$digest()):g.location.href=a});d.$watch(function(){if(w||l.$$urlUpdatedByLocation){l.$$urlUpdatedByLocation=!1;var a=nb(c.url()),b=nb(l.absUrl()),g=c.state(),f=l.$$replace,m=a!==b||l.$$html5&&e.history&&g!==l.$$state;if(w||m)w=!1,d.$evalAsync(function(){var b=l.absUrl(),c=d.$broadcast("$locationChangeStart",b,a,l.$$state,g).defaultPrevented;l.absUrl()===b&&(c?(l.$$parse(a),l.$$state=g):(m&&k(b,f,g===l.$$state?null:l.$$state),
+h(a,g)))})}l.$$replace=!1});return l}]}function Nf(){var a=!0,b=this;this.debugEnabled=function(b){return t(b)?(a=b,this):a};this.$get=["$window",function(d){function c(a){Zb(a)&&(a.stack&&f?a=a.message&&-1===a.stack.indexOf(a.message)?"Error: "+a.message+"\n"+a.stack:a.stack:a.sourceURL&&(a=a.message+"\n"+a.sourceURL+":"+a.line));return a}function e(a){var b=d.console||{},e=b[a]||b.log||B;return function(){var a=[];p(arguments,function(b){a.push(c(b))});return Function.prototype.apply.call(e,b,a)}}
+var f=Ba||/\bEdge\//.test(d.navigator&&d.navigator.userAgent);return{log:e("log"),info:e("info"),warn:e("warn"),error:e("error"),debug:function(){var c=e("debug");return function(){a&&c.apply(b,arguments)}}()}}]}function Cg(a){return a+""}function Dg(a,b){return"undefined"!==typeof a?a:b}function Fd(a,b){return"undefined"===typeof a?b:"undefined"===typeof b?a:a+b}function Eg(a,b){switch(a.type){case r.MemberExpression:if(a.computed)return!1;break;case r.UnaryExpression:return 1;case r.BinaryExpression:return"+"!==
+a.operator?1:!1;case r.CallExpression:return!1}return void 0===b?Gd:b}function X(a,b,d){var c,e,f=a.isPure=Eg(a,d);switch(a.type){case r.Program:c=!0;p(a.body,function(a){X(a.expression,b,f);c=c&&a.expression.constant});a.constant=c;break;case r.Literal:a.constant=!0;a.toWatch=[];break;case r.UnaryExpression:X(a.argument,b,f);a.constant=a.argument.constant;a.toWatch=a.argument.toWatch;break;case r.BinaryExpression:X(a.left,b,f);X(a.right,b,f);a.constant=a.left.constant&&a.right.constant;a.toWatch=
+a.left.toWatch.concat(a.right.toWatch);break;case r.LogicalExpression:X(a.left,b,f);X(a.right,b,f);a.constant=a.left.constant&&a.right.constant;a.toWatch=a.constant?[]:[a];break;case r.ConditionalExpression:X(a.test,b,f);X(a.alternate,b,f);X(a.consequent,b,f);a.constant=a.test.constant&&a.alternate.constant&&a.consequent.constant;a.toWatch=a.constant?[]:[a];break;case r.Identifier:a.constant=!1;a.toWatch=[a];break;case r.MemberExpression:X(a.object,b,f);a.computed&&X(a.property,b,f);a.constant=a.object.constant&&
+(!a.computed||a.property.constant);a.toWatch=[a];break;case r.CallExpression:c=d=a.filter?!b(a.callee.name).$stateful:!1;e=[];p(a.arguments,function(a){X(a,b,f);c=c&&a.constant;a.constant||e.push.apply(e,a.toWatch)});a.constant=c;a.toWatch=d?e:[a];break;case r.AssignmentExpression:X(a.left,b,f);X(a.right,b,f);a.constant=a.left.constant&&a.right.constant;a.toWatch=[a];break;case r.ArrayExpression:c=!0;e=[];p(a.elements,function(a){X(a,b,f);c=c&&a.constant;a.constant||e.push.apply(e,a.toWatch)});a.constant=
+c;a.toWatch=e;break;case r.ObjectExpression:c=!0;e=[];p(a.properties,function(a){X(a.value,b,f);c=c&&a.value.constant&&!a.computed;a.value.constant||e.push.apply(e,a.value.toWatch);a.computed&&(X(a.key,b,f),a.key.constant||e.push.apply(e,a.key.toWatch))});a.constant=c;a.toWatch=e;break;case r.ThisExpression:a.constant=!1;a.toWatch=[];break;case r.LocalsExpression:a.constant=!1,a.toWatch=[]}}function Hd(a){if(1===a.length){a=a[0].expression;var b=a.toWatch;return 1!==b.length?b:b[0]!==a?b:void 0}}
+function Id(a){return a.type===r.Identifier||a.type===r.MemberExpression}function Jd(a){if(1===a.body.length&&Id(a.body[0].expression))return{type:r.AssignmentExpression,left:a.body[0].expression,right:{type:r.NGValueParameter},operator:"="}}function Kd(a){this.$filter=a}function Ld(a){this.$filter=a}function xc(a,b,d){this.ast=new r(a,d);this.astCompiler=d.csp?new Ld(b):new Kd(b)}function yc(a){return E(a.valueOf)?a.valueOf():Fg.call(a)}function Of(){var a=R(),b={"true":!0,"false":!1,"null":null,
+undefined:void 0},d,c;this.addLiteral=function(a,c){b[a]=c};this.setIdentifierFns=function(a,b){d=a;c=b;return this};this.$get=["$filter",function(e){function f(a,b,c){return null==a||null==b?a===b:"object"!==typeof a||(a=yc(a),"object"!==typeof a||c)?a===b||a!==a&&b!==b:!1}function g(a,b,c,d,e){var g=d.inputs,h;if(1===g.length){var k=f,g=g[0];return a.$watch(function(a){var b=g(a);f(b,k,g.isPure)||(h=d(a,void 0,void 0,[b]),k=b&&yc(b));return h},b,c,e)}for(var l=[],m=[],n=0,p=g.length;n<p;n++)l[n]=
+f,m[n]=null;return a.$watch(function(a){for(var b=!1,c=0,e=g.length;c<e;c++){var k=g[c](a);if(b||(b=!f(k,l[c],g[c].isPure)))m[c]=k,l[c]=k&&yc(k)}b&&(h=d(a,void 0,void 0,m));return h},b,c,e)}function k(a,b,c,d,e){function f(a){return d(a)}function h(a,c,d){l=a;E(b)&&b(a,c,d);t(a)&&d.$$postDigest(function(){t(l)&&k()})}var k,l;return k=d.inputs?g(a,h,c,d,e):a.$watch(f,h,c)}function h(a,b,c,d){function e(a){var b=!0;p(a,function(a){t(a)||(b=!1)});return b}var g,f;return g=a.$watch(function(a){return d(a)},
+function(a,c,d){f=a;E(b)&&b(a,c,d);e(a)&&d.$$postDigest(function(){e(f)&&g()})},c)}function l(a,b,c,d){var e=a.$watch(function(a){e();return d(a)},b,c);return e}function m(a,b){if(!b)return a;var c=a.$$watchDelegate,d=!1,e=c!==h&&c!==k?function(c,e,g,f){g=d&&f?f[0]:a(c,e,g,f);return b(g,c,e)}:function(c,d,e,g){e=a(c,d,e,g);c=b(e,c,d);return t(e)?c:e},d=!a.inputs;c&&c!==g?(e.$$watchDelegate=c,e.inputs=a.inputs):b.$stateful||(e.$$watchDelegate=g,e.inputs=a.inputs?a.inputs:[a]);e.inputs&&(e.inputs=e.inputs.map(function(a){return a.isPure===
+Gd?function(b){return a(b)}:a}));return e}var n={csp:Ja().noUnsafeEval,literals:Ia(b),isIdentifierStart:E(d)&&d,isIdentifierContinue:E(c)&&c};return function(b,c){var d,f,p;switch(typeof b){case "string":return p=b=b.trim(),d=a[p],d||(":"===b.charAt(0)&&":"===b.charAt(1)&&(f=!0,b=b.substring(2)),d=new zc(n),d=(new xc(d,e,n)).parse(b),d.constant?d.$$watchDelegate=l:f?d.$$watchDelegate=d.literal?h:k:d.inputs&&(d.$$watchDelegate=g),a[p]=d),m(d,c);case "function":return m(b,c);default:return m(B,c)}}}]}
+function Qf(){var a=!0;this.$get=["$rootScope","$exceptionHandler",function(b,d){return Md(function(a){b.$evalAsync(a)},d,a)}];this.errorOnUnhandledRejections=function(b){return t(b)?(a=b,this):a}}function Rf(){var a=!0;this.$get=["$browser","$exceptionHandler",function(b,d){return Md(function(a){b.defer(a)},d,a)}];this.errorOnUnhandledRejections=function(b){return t(b)?(a=b,this):a}}function Md(a,b,d){function c(){return new e}function e(){var a=this.promise=new f;this.resolve=function(b){h(a,b)};
+this.reject=function(b){m(a,b)};this.notify=function(b){q(a,b)}}function f(){this.$$state={status:0}}function g(){for(;!t&&s.length;){var a=s.shift();if(!a.pur){a.pur=!0;var c=a.value,c="Possibly unhandled rejection: "+("function"===typeof c?c.toString().replace(/ \{[\s\S]*$/,""):v(c)?"undefined":"string"!==typeof c?Ee(c,void 0):c);Zb(a.value)?b(a.value,c):b(c)}}}function k(b){!d||b.pending||2!==b.status||b.pur||(0===t&&0===s.length&&a(g),s.push(b));!b.processScheduled&&b.pending&&(b.processScheduled=
+!0,++t,a(function(){var c,e,f;f=b.pending;b.processScheduled=!1;b.pending=void 0;try{for(var k=0,l=f.length;k<l;++k){b.pur=!0;e=f[k][0];c=f[k][b.status];try{E(c)?h(e,c(b.value)):1===b.status?h(e,b.value):m(e,b.value)}catch(n){m(e,n)}}}finally{--t,d&&0===t&&a(g)}}))}function h(a,b){a.$$state.status||(b===a?n(a,A("qcycle",b)):l(a,b))}function l(a,b){function c(b){f||(f=!0,l(a,b))}function d(b){f||(f=!0,n(a,b))}function e(b){q(a,b)}var g,f=!1;try{if(G(b)||E(b))g=b.then;E(g)?(a.$$state.status=-1,g.call(b,
+c,d,e)):(a.$$state.value=b,a.$$state.status=1,k(a.$$state))}catch(h){d(h)}}function m(a,b){a.$$state.status||n(a,b)}function n(a,b){a.$$state.value=b;a.$$state.status=2;k(a.$$state)}function q(c,d){var e=c.$$state.pending;0>=c.$$state.status&&e&&e.length&&a(function(){for(var a,c,g=0,f=e.length;g<f;g++){c=e[g][0];a=e[g][3];try{q(c,E(a)?a(d):d)}catch(h){b(h)}}})}function F(a){var b=new f;m(b,a);return b}function r(a,b,c){var d=null;try{E(c)&&(d=c())}catch(e){return F(e)}return d&&E(d.then)?d.then(function(){return b(a)},
+F):b(a)}function w(a,b,c,d){var e=new f;h(e,a);return e.then(b,c,d)}function u(a){if(!E(a))throw A("norslvr",a);var b=new f;a(function(a){h(b,a)},function(a){m(b,a)});return b}var A=K("$q",TypeError),t=0,s=[];O(f.prototype,{then:function(a,b,c){if(v(a)&&v(b)&&v(c))return this;var d=new f;this.$$state.pending=this.$$state.pending||[];this.$$state.pending.push([d,a,b,c]);0<this.$$state.status&&k(this.$$state);return d},"catch":function(a){return this.then(null,a)},"finally":function(a,b){return this.then(function(b){return r(b,
+y,a)},function(b){return r(b,F,a)},b)}});var y=w;u.prototype=f.prototype;u.defer=c;u.reject=F;u.when=w;u.resolve=y;u.all=function(a){var b=new f,c=0,d=I(a)?[]:{};p(a,function(a,e){c++;w(a).then(function(a){d[e]=a;--c||h(b,d)},function(a){m(b,a)})});0===c&&h(b,d);return b};u.race=function(a){var b=c();p(a,function(a){w(a).then(b.resolve,b.reject)});return b.promise};return u}function $f(){this.$get=["$window","$timeout",function(a,b){var d=a.requestAnimationFrame||a.webkitRequestAnimationFrame,c=a.cancelAnimationFrame||
+a.webkitCancelAnimationFrame||a.webkitCancelRequestAnimationFrame,e=!!d,f=e?function(a){var b=d(a);return function(){c(b)}}:function(a){var c=b(a,16.66,!1);return function(){b.cancel(c)}};f.supported=e;return f}]}function Pf(){function a(a){function b(){this.$$watchers=this.$$nextSibling=this.$$childHead=this.$$childTail=null;this.$$listeners={};this.$$listenerCount={};this.$$watchersCount=0;this.$id=++sb;this.$$ChildScope=null}b.prototype=a;return b}var b=10,d=K("$rootScope"),c=null,e=null;this.digestTtl=
+function(a){arguments.length&&(b=a);return b};this.$get=["$exceptionHandler","$parse","$browser",function(f,g,k){function h(a){a.currentScope.$$destroyed=!0}function l(a){9===Ba&&(a.$$childHead&&l(a.$$childHead),a.$$nextSibling&&l(a.$$nextSibling));a.$parent=a.$$nextSibling=a.$$prevSibling=a.$$childHead=a.$$childTail=a.$root=a.$$watchers=null}function m(){this.$id=++sb;this.$$phase=this.$parent=this.$$watchers=this.$$nextSibling=this.$$prevSibling=this.$$childHead=this.$$childTail=null;this.$root=
+this;this.$$destroyed=!1;this.$$listeners={};this.$$listenerCount={};this.$$watchersCount=0;this.$$isolateBindings=null}function n(a){if(A.$$phase)throw d("inprog",A.$$phase);A.$$phase=a}function q(a,b){do a.$$watchersCount+=b;while(a=a.$parent)}function F(a,b,c){do a.$$listenerCount[c]-=b,0===a.$$listenerCount[c]&&delete a.$$listenerCount[c];while(a=a.$parent)}function r(){}function w(){for(;y.length;)try{y.shift()()}catch(a){f(a)}e=null}function u(){null===e&&(e=k.defer(function(){A.$apply(w)}))}
+m.prototype={constructor:m,$new:function(b,c){var d;c=c||this;b?(d=new m,d.$root=this.$root):(this.$$ChildScope||(this.$$ChildScope=a(this)),d=new this.$$ChildScope);d.$parent=c;d.$$prevSibling=c.$$childTail;c.$$childHead?(c.$$childTail.$$nextSibling=d,c.$$childTail=d):c.$$childHead=c.$$childTail=d;(b||c!==this)&&d.$on("$destroy",h);return d},$watch:function(a,b,d,e){var f=g(a);if(f.$$watchDelegate)return f.$$watchDelegate(this,b,d,f,a);var h=this,k=h.$$watchers,l={fn:b,last:r,get:f,exp:e||a,eq:!!d};
+c=null;E(b)||(l.fn=B);k||(k=h.$$watchers=[],k.$$digestWatchIndex=-1);k.unshift(l);k.$$digestWatchIndex++;q(this,1);return function(){var a=cb(k,l);0<=a&&(q(h,-1),a<k.$$digestWatchIndex&&k.$$digestWatchIndex--);c=null}},$watchGroup:function(a,b){function c(){h=!1;k?(k=!1,b(e,e,f)):b(e,d,f)}var d=Array(a.length),e=Array(a.length),g=[],f=this,h=!1,k=!0;if(!a.length){var l=!0;f.$evalAsync(function(){l&&b(e,e,f)});return function(){l=!1}}if(1===a.length)return this.$watch(a[0],function(a,c,g){e[0]=a;d[0]=
+c;b(e,a===c?e:d,g)});p(a,function(a,b){var k=f.$watch(a,function(a,g){e[b]=a;d[b]=g;h||(h=!0,f.$evalAsync(c))});g.push(k)});return function(){for(;g.length;)g.shift()()}},$watchCollection:function(a,b){function c(a){e=a;var b,d,g,h;if(!v(e)){if(G(e))if(oa(e))for(f!==n&&(f=n,s=f.length=0,l++),a=e.length,s!==a&&(l++,f.length=s=a),b=0;b<a;b++)h=f[b],g=e[b],d=h!==h&&g!==g,d||h===g||(l++,f[b]=g);else{f!==q&&(f=q={},s=0,l++);a=0;for(b in e)wa.call(e,b)&&(a++,g=e[b],h=f[b],b in f?(d=h!==h&&g!==g,d||h===
+g||(l++,f[b]=g)):(s++,f[b]=g,l++));if(s>a)for(b in l++,f)wa.call(e,b)||(s--,delete f[b])}else f!==e&&(f=e,l++);return l}}c.$stateful=!0;var d=this,e,f,h,k=1<b.length,l=0,m=g(a,c),n=[],q={},p=!0,s=0;return this.$watch(m,function(){p?(p=!1,b(e,e,d)):b(e,h,d);if(k)if(G(e))if(oa(e)){h=Array(e.length);for(var a=0;a<e.length;a++)h[a]=e[a]}else for(a in h={},e)wa.call(e,a)&&(h[a]=e[a]);else h=e})},$digest:function(){var a,g,h,l,m,q,p,F=b,y,u=[],v,x;n("$digest");k.$$checkUrlChange();this===A&&null!==e&&(k.defer.cancel(e),
+w());c=null;do{p=!1;y=this;for(q=0;q<t.length;q++){try{x=t[q],l=x.fn,l(x.scope,x.locals)}catch(z){f(z)}c=null}t.length=0;a:do{if(q=y.$$watchers)for(q.$$digestWatchIndex=q.length;q.$$digestWatchIndex--;)try{if(a=q[q.$$digestWatchIndex])if(m=a.get,(g=m(y))!==(h=a.last)&&!(a.eq?sa(g,h):ba(g)&&ba(h)))p=!0,c=a,a.last=a.eq?Ia(g,null):g,l=a.fn,l(g,h===r?g:h,y),5>F&&(v=4-F,u[v]||(u[v]=[]),u[v].push({msg:E(a.exp)?"fn: "+(a.exp.name||a.exp.toString()):a.exp,newVal:g,oldVal:h}));else if(a===c){p=!1;break a}}catch(B){f(B)}if(!(q=
+y.$$watchersCount&&y.$$childHead||y!==this&&y.$$nextSibling))for(;y!==this&&!(q=y.$$nextSibling);)y=y.$parent}while(y=q);if((p||t.length)&&!F--)throw A.$$phase=null,d("infdig",b,u);}while(p||t.length);for(A.$$phase=null;D<s.length;)try{s[D++]()}catch(G){f(G)}s.length=D=0;k.$$checkUrlChange()},$destroy:function(){if(!this.$$destroyed){var a=this.$parent;this.$broadcast("$destroy");this.$$destroyed=!0;this===A&&k.$$applicationDestroyed();q(this,-this.$$watchersCount);for(var b in this.$$listenerCount)F(this,
+this.$$listenerCount[b],b);a&&a.$$childHead===this&&(a.$$childHead=this.$$nextSibling);a&&a.$$childTail===this&&(a.$$childTail=this.$$prevSibling);this.$$prevSibling&&(this.$$prevSibling.$$nextSibling=this.$$nextSibling);this.$$nextSibling&&(this.$$nextSibling.$$prevSibling=this.$$prevSibling);this.$destroy=this.$digest=this.$apply=this.$evalAsync=this.$applyAsync=B;this.$on=this.$watch=this.$watchGroup=function(){return B};this.$$listeners={};this.$$nextSibling=null;l(this)}},$eval:function(a,b){return g(a)(this,
+b)},$evalAsync:function(a,b){A.$$phase||t.length||k.defer(function(){t.length&&A.$digest()});t.push({scope:this,fn:g(a),locals:b})},$$postDigest:function(a){s.push(a)},$apply:function(a){try{n("$apply");try{return this.$eval(a)}finally{A.$$phase=null}}catch(b){f(b)}finally{try{A.$digest()}catch(c){throw f(c),c;}}},$applyAsync:function(a){function b(){c.$eval(a)}var c=this;a&&y.push(b);a=g(a);u()},$on:function(a,b){var c=this.$$listeners[a];c||(this.$$listeners[a]=c=[]);c.push(b);var d=this;do d.$$listenerCount[a]||
+(d.$$listenerCount[a]=0),d.$$listenerCount[a]++;while(d=d.$parent);var e=this;return function(){var d=c.indexOf(b);-1!==d&&(c[d]=null,F(e,1,a))}},$emit:function(a,b){var c=[],d,e=this,g=!1,h={name:a,targetScope:e,stopPropagation:function(){g=!0},preventDefault:function(){h.defaultPrevented=!0},defaultPrevented:!1},k=db([h],arguments,1),l,m;do{d=e.$$listeners[a]||c;h.currentScope=e;l=0;for(m=d.length;l<m;l++)if(d[l])try{d[l].apply(null,k)}catch(n){f(n)}else d.splice(l,1),l--,m--;if(g)return h.currentScope=
+null,h;e=e.$parent}while(e);h.currentScope=null;return h},$broadcast:function(a,b){var c=this,d=this,e={name:a,targetScope:this,preventDefault:function(){e.defaultPrevented=!0},defaultPrevented:!1};if(!this.$$listenerCount[a])return e;for(var g=db([e],arguments,1),h,k;c=d;){e.currentScope=c;d=c.$$listeners[a]||[];h=0;for(k=d.length;h<k;h++)if(d[h])try{d[h].apply(null,g)}catch(l){f(l)}else d.splice(h,1),h--,k--;if(!(d=c.$$listenerCount[a]&&c.$$childHead||c!==this&&c.$$nextSibling))for(;c!==this&&!(d=
+c.$$nextSibling);)c=c.$parent}e.currentScope=null;return e}};var A=new m,t=A.$$asyncQueue=[],s=A.$$postDigestQueue=[],y=A.$$applyAsyncQueue=[],D=0;return A}]}function He(){var a=/^\s*(https?|ftp|mailto|tel|file):/,b=/^\s*((https?|ftp|file|blob):|data:image\/)/;this.aHrefSanitizationWhitelist=function(b){return t(b)?(a=b,this):a};this.imgSrcSanitizationWhitelist=function(a){return t(a)?(b=a,this):b};this.$get=function(){return function(d,c){var e=c?b:a,f;f=ua(d).href;return""===f||f.match(e)?d:"unsafe:"+
+f}}}function Gg(a){if("self"===a)return a;if(C(a)){if(-1<a.indexOf("***"))throw qa("iwcard",a);a=Nd(a).replace(/\\\*\\\*/g,".*").replace(/\\\*/g,"[^:/.?&;]*");return new RegExp("^"+a+"$")}if($a(a))return new RegExp("^"+a.source+"$");throw qa("imatcher");}function Od(a){var b=[];t(a)&&p(a,function(a){b.push(Gg(a))});return b}function Tf(){this.SCE_CONTEXTS=ka;var a=["self"],b=[];this.resourceUrlWhitelist=function(b){arguments.length&&(a=Od(b));return a};this.resourceUrlBlacklist=function(a){arguments.length&&
+(b=Od(a));return b};this.$get=["$injector",function(d){function c(a,b){return"self"===a?Ad(b):!!a.exec(b.href)}function e(a){var b=function(a){this.$$unwrapTrustedValue=function(){return a}};a&&(b.prototype=new a);b.prototype.valueOf=function(){return this.$$unwrapTrustedValue()};b.prototype.toString=function(){return this.$$unwrapTrustedValue().toString()};return b}var f=function(a){throw qa("unsafe");};d.has("$sanitize")&&(f=d.get("$sanitize"));var g=e(),k={};k[ka.HTML]=e(g);k[ka.CSS]=e(g);k[ka.URL]=
+e(g);k[ka.JS]=e(g);k[ka.RESOURCE_URL]=e(k[ka.URL]);return{trustAs:function(a,b){var c=k.hasOwnProperty(a)?k[a]:null;if(!c)throw qa("icontext",a,b);if(null===b||v(b)||""===b)return b;if("string"!==typeof b)throw qa("itype",a);return new c(b)},getTrusted:function(d,e){if(null===e||v(e)||""===e)return e;var g=k.hasOwnProperty(d)?k[d]:null;if(g&&e instanceof g)return e.$$unwrapTrustedValue();if(d===ka.RESOURCE_URL){var g=ua(e.toString()),n,q,p=!1;n=0;for(q=a.length;n<q;n++)if(c(a[n],g)){p=!0;break}if(p)for(n=
+0,q=b.length;n<q;n++)if(c(b[n],g)){p=!1;break}if(p)return e;throw qa("insecurl",e.toString());}if(d===ka.HTML)return f(e);throw qa("unsafe");},valueOf:function(a){return a instanceof g?a.$$unwrapTrustedValue():a}}}]}function Sf(){var a=!0;this.enabled=function(b){arguments.length&&(a=!!b);return a};this.$get=["$parse","$sceDelegate",function(b,d){if(a&&8>Ba)throw qa("iequirks");var c=ra(ka);c.isEnabled=function(){return a};c.trustAs=d.trustAs;c.getTrusted=d.getTrusted;c.valueOf=d.valueOf;a||(c.trustAs=
+c.getTrusted=function(a,b){return b},c.valueOf=ab);c.parseAs=function(a,d){var e=b(d);return e.literal&&e.constant?e:b(d,function(b){return c.getTrusted(a,b)})};var e=c.parseAs,f=c.getTrusted,g=c.trustAs;p(ka,function(a,b){var d=N(b);c[("parse_as_"+d).replace(Ac,ib)]=function(b){return e(a,b)};c[("get_trusted_"+d).replace(Ac,ib)]=function(b){return f(a,b)};c[("trust_as_"+d).replace(Ac,ib)]=function(b){return g(a,b)}});return c}]}function Uf(){this.$get=["$window","$document",function(a,b){var d={},
+c=!((!a.nw||!a.nw.process)&&a.chrome&&(a.chrome.app&&a.chrome.app.runtime||!a.chrome.app&&a.chrome.runtime&&a.chrome.runtime.id))&&a.history&&a.history.pushState,e=Q((/android (\d+)/.exec(N((a.navigator||{}).userAgent))||[])[1]),f=/Boxee/i.test((a.navigator||{}).userAgent),g=b[0]||{},k=g.body&&g.body.style,h=!1,l=!1;k&&(h=!!("transition"in k||"webkitTransition"in k),l=!!("animation"in k||"webkitAnimation"in k));return{history:!(!c||4>e||f),hasEvent:function(a){if("input"===a&&Ba)return!1;if(v(d[a])){var b=
+g.createElement("div");d[a]="on"+a in b}return d[a]},csp:Ja(),transitions:h,animations:l,android:e}}]}function Wf(){var a;this.httpOptions=function(b){return b?(a=b,this):a};this.$get=["$exceptionHandler","$templateCache","$http","$q","$sce",function(b,d,c,e,f){function g(k,h){g.totalPendingRequests++;if(!C(k)||v(d.get(k)))k=f.getTrustedResourceUrl(k);var l=c.defaults&&c.defaults.transformResponse;I(l)?l=l.filter(function(a){return a!==qc}):l===qc&&(l=null);return c.get(k,O({cache:d,transformResponse:l},
+a)).finally(function(){g.totalPendingRequests--}).then(function(a){d.put(k,a.data);return a.data},function(a){h||(a=Hg("tpload",k,a.status,a.statusText),b(a));return e.reject(a)})}g.totalPendingRequests=0;return g}]}function Xf(){this.$get=["$rootScope","$browser","$location",function(a,b,d){return{findBindings:function(a,b,d){a=a.getElementsByClassName("ng-binding");var g=[];p(a,function(a){var c=fa.element(a).data("$binding");c&&p(c,function(c){d?(new RegExp("(^|\\s)"+Nd(b)+"(\\s|\\||$)")).test(c)&&
+g.push(a):-1!==c.indexOf(b)&&g.push(a)})});return g},findModels:function(a,b,d){for(var g=["ng-","data-ng-","ng\\:"],k=0;k<g.length;++k){var h=a.querySelectorAll("["+g[k]+"model"+(d?"=":"*=")+'"'+b+'"]');if(h.length)return h}},getLocation:function(){return d.url()},setLocation:function(b){b!==d.url()&&(d.url(b),a.$digest())},whenStable:function(a){b.notifyWhenNoOutstandingRequests(a)}}}]}function Yf(){this.$get=["$rootScope","$browser","$q","$$q","$exceptionHandler",function(a,b,d,c,e){function f(f,
+h,l){E(f)||(l=h,h=f,f=B);var m=xa.call(arguments,3),n=t(l)&&!l,q=(n?c:d).defer(),p=q.promise,r;r=b.defer(function(){try{q.resolve(f.apply(null,m))}catch(b){q.reject(b),e(b)}finally{delete g[p.$$timeoutId]}n||a.$apply()},h);p.$$timeoutId=r;g[r]=q;return p}var g={};f.cancel=function(a){return a&&a.$$timeoutId in g?(g[a.$$timeoutId].promise.$$state.pur=!0,g[a.$$timeoutId].reject("canceled"),delete g[a.$$timeoutId],b.defer.cancel(a.$$timeoutId)):!1};return f}]}function ua(a){Ba&&(ea.setAttribute("href",
+a),a=ea.href);ea.setAttribute("href",a);return{href:ea.href,protocol:ea.protocol?ea.protocol.replace(/:$/,""):"",host:ea.host,search:ea.search?ea.search.replace(/^\?/,""):"",hash:ea.hash?ea.hash.replace(/^#/,""):"",hostname:ea.hostname,port:ea.port,pathname:"/"===ea.pathname.charAt(0)?ea.pathname:"/"+ea.pathname}}function Ad(a){a=C(a)?ua(a):a;return a.protocol===Pd.protocol&&a.host===Pd.host}function Zf(){this.$get=aa(x)}function Qd(a){function b(a){try{return decodeURIComponent(a)}catch(b){return a}}
+var d=a[0]||{},c={},e="";return function(){var a,g,k,h,l;try{a=d.cookie||""}catch(m){a=""}if(a!==e)for(e=a,a=e.split("; "),c={},k=0;k<a.length;k++)g=a[k],h=g.indexOf("="),0<h&&(l=b(g.substring(0,h)),v(c[l])&&(c[l]=b(g.substring(h+1))));return c}}function cg(){this.$get=Qd}function ed(a){function b(d,c){if(G(d)){var e={};p(d,function(a,c){e[c]=b(c,a)});return e}return a.factory(d+"Filter",c)}this.register=b;this.$get=["$injector",function(a){return function(b){return a.get(b+"Filter")}}];b("currency",
+Rd);b("date",Sd);b("filter",Ig);b("json",Jg);b("limitTo",Kg);b("lowercase",Lg);b("number",Td);b("orderBy",Ud);b("uppercase",Mg)}function Ig(){return function(a,b,d,c){if(!oa(a)){if(null==a)return a;throw K("filter")("notarray",a);}c=c||"$";var e;switch(Bc(b)){case "function":break;case "boolean":case "null":case "number":case "string":e=!0;case "object":b=Ng(b,d,c,e);break;default:return a}return Array.prototype.filter.call(a,b)}}function Ng(a,b,d,c){var e=G(a)&&d in a;!0===b?b=sa:E(b)||(b=function(a,
+b){if(v(a))return!1;if(null===a||null===b)return a===b;if(G(b)||G(a)&&!Yb(a))return!1;a=N(""+a);b=N(""+b);return-1!==a.indexOf(b)});return function(f){return e&&!G(f)?Ga(f,a[d],b,d,!1):Ga(f,a,b,d,c)}}function Ga(a,b,d,c,e,f){var g=Bc(a),k=Bc(b);if("string"===k&&"!"===b.charAt(0))return!Ga(a,b.substring(1),d,c,e);if(I(a))return a.some(function(a){return Ga(a,b,d,c,e)});switch(g){case "object":var h;if(e){for(h in a)if(h.charAt&&"$"!==h.charAt(0)&&Ga(a[h],b,d,c,!0))return!0;return f?!1:Ga(a,b,d,c,!1)}if("object"===
+k){for(h in b)if(f=b[h],!E(f)&&!v(f)&&(g=h===c,!Ga(g?a:a[h],f,d,c,g,g)))return!1;return!0}return d(a,b);case "function":return!1;default:return d(a,b)}}function Bc(a){return null===a?"null":typeof a}function Rd(a){var b=a.NUMBER_FORMATS;return function(a,c,e){v(c)&&(c=b.CURRENCY_SYM);v(e)&&(e=b.PATTERNS[1].maxFrac);return null==a?a:Vd(a,b.PATTERNS[1],b.GROUP_SEP,b.DECIMAL_SEP,e).replace(/\u00A4/g,c)}}function Td(a){var b=a.NUMBER_FORMATS;return function(a,c){return null==a?a:Vd(a,b.PATTERNS[0],b.GROUP_SEP,
+b.DECIMAL_SEP,c)}}function Og(a){var b=0,d,c,e,f,g;-1<(c=a.indexOf(Wd))&&(a=a.replace(Wd,""));0<(e=a.search(/e/i))?(0>c&&(c=e),c+=+a.slice(e+1),a=a.substring(0,e)):0>c&&(c=a.length);for(e=0;a.charAt(e)===Cc;e++);if(e===(g=a.length))d=[0],c=1;else{for(g--;a.charAt(g)===Cc;)g--;c-=e;d=[];for(f=0;e<=g;e++,f++)d[f]=+a.charAt(e)}c>Xd&&(d=d.splice(0,Xd-1),b=c-1,c=1);return{d:d,e:b,i:c}}function Pg(a,b,d,c){var e=a.d,f=e.length-a.i;b=v(b)?Math.min(Math.max(d,f),c):+b;d=b+a.i;c=e[d];if(0<d){e.splice(Math.max(a.i,
+d));for(var g=d;g<e.length;g++)e[g]=0}else for(f=Math.max(0,f),a.i=1,e.length=Math.max(1,d=b+1),e[0]=0,g=1;g<d;g++)e[g]=0;if(5<=c)if(0>d-1){for(c=0;c>d;c--)e.unshift(0),a.i++;e.unshift(1);a.i++}else e[d-1]++;for(;f<Math.max(0,b);f++)e.push(0);if(b=e.reduceRight(function(a,b,c,d){b+=a;d[c]=b%10;return Math.floor(b/10)},0))e.unshift(b),a.i++}function Vd(a,b,d,c,e){if(!C(a)&&!W(a)||isNaN(a))return"";var f=!isFinite(a),g=!1,k=Math.abs(a)+"",h="";if(f)h="\u221e";else{g=Og(k);Pg(g,e,b.minFrac,b.maxFrac);
+h=g.d;k=g.i;e=g.e;f=[];for(g=h.reduce(function(a,b){return a&&!b},!0);0>k;)h.unshift(0),k++;0<k?f=h.splice(k,h.length):(f=h,h=[0]);k=[];for(h.length>=b.lgSize&&k.unshift(h.splice(-b.lgSize,h.length).join(""));h.length>b.gSize;)k.unshift(h.splice(-b.gSize,h.length).join(""));h.length&&k.unshift(h.join(""));h=k.join(d);f.length&&(h+=c+f.join(""));e&&(h+="e+"+e)}return 0>a&&!g?b.negPre+h+b.negSuf:b.posPre+h+b.posSuf}function Lb(a,b,d,c){var e="";if(0>a||c&&0>=a)c?a=-a+1:(a=-a,e="-");for(a=""+a;a.length<
+b;)a=Cc+a;d&&(a=a.substr(a.length-b));return e+a}function $(a,b,d,c,e){d=d||0;return function(f){f=f["get"+a]();if(0<d||f>-d)f+=d;0===f&&-12===d&&(f=12);return Lb(f,b,c,e)}}function ob(a,b,d){return function(c,e){var f=c["get"+a](),g=wb((d?"STANDALONE":"")+(b?"SHORT":"")+a);return e[g][f]}}function Yd(a){var b=(new Date(a,0,1)).getDay();return new Date(a,0,(4>=b?5:12)-b)}function Zd(a){return function(b){var d=Yd(b.getFullYear());b=+new Date(b.getFullYear(),b.getMonth(),b.getDate()+(4-b.getDay()))-
++d;b=1+Math.round(b/6048E5);return Lb(b,a)}}function Dc(a,b){return 0>=a.getFullYear()?b.ERAS[0]:b.ERAS[1]}function Sd(a){function b(a){var b;if(b=a.match(d)){a=new Date(0);var f=0,g=0,k=b[8]?a.setUTCFullYear:a.setFullYear,h=b[8]?a.setUTCHours:a.setHours;b[9]&&(f=Q(b[9]+b[10]),g=Q(b[9]+b[11]));k.call(a,Q(b[1]),Q(b[2])-1,Q(b[3]));f=Q(b[4]||0)-f;g=Q(b[5]||0)-g;k=Q(b[6]||0);b=Math.round(1E3*parseFloat("0."+(b[7]||0)));h.call(a,f,g,k,b)}return a}var d=/^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;
+return function(c,d,f){var g="",k=[],h,l;d=d||"mediumDate";d=a.DATETIME_FORMATS[d]||d;C(c)&&(c=Qg.test(c)?Q(c):b(c));W(c)&&(c=new Date(c));if(!ia(c)||!isFinite(c.getTime()))return c;for(;d;)(l=Rg.exec(d))?(k=db(k,l,1),d=k.pop()):(k.push(d),d=null);var m=c.getTimezoneOffset();f&&(m=Rc(f,m),c=ac(c,f,!0));p(k,function(b){h=Sg[b];g+=h?h(c,a.DATETIME_FORMATS,m):"''"===b?"'":b.replace(/(^'|'$)/g,"").replace(/''/g,"'")});return g}}function Jg(){return function(a,b){v(b)&&(b=2);return eb(a,b)}}function Kg(){return function(a,
+b,d){b=Infinity===Math.abs(Number(b))?Number(b):Q(b);if(ba(b))return a;W(a)&&(a=a.toString());if(!oa(a))return a;d=!d||isNaN(d)?0:Q(d);d=0>d?Math.max(0,a.length+d):d;return 0<=b?Ec(a,d,d+b):0===d?Ec(a,b,a.length):Ec(a,Math.max(0,d+b),d)}}function Ec(a,b,d){return C(a)?a.slice(b,d):xa.call(a,b,d)}function Ud(a){function b(b){return b.map(function(b){var c=1,d=ab;if(E(b))d=b;else if(C(b)){if("+"===b.charAt(0)||"-"===b.charAt(0))c="-"===b.charAt(0)?-1:1,b=b.substring(1);if(""!==b&&(d=a(b),d.constant))var e=
+d(),d=function(a){return a[e]}}return{get:d,descending:c}})}function d(a){switch(typeof a){case "number":case "boolean":case "string":return!0;default:return!1}}function c(a,b){var c=0,d=a.type,h=b.type;if(d===h){var h=a.value,l=b.value;"string"===d?(h=h.toLowerCase(),l=l.toLowerCase()):"object"===d&&(G(h)&&(h=a.index),G(l)&&(l=b.index));h!==l&&(c=h<l?-1:1)}else c=d<h?-1:1;return c}return function(a,f,g,k){if(null==a)return a;if(!oa(a))throw K("orderBy")("notarray",a);I(f)||(f=[f]);0===f.length&&
+(f=["+"]);var h=b(f),l=g?-1:1,m=E(k)?k:c;a=Array.prototype.map.call(a,function(a,b){return{value:a,tieBreaker:{value:b,type:"number",index:b},predicateValues:h.map(function(c){var e=c.get(a);c=typeof e;if(null===e)c="string",e="null";else if("object"===c)a:{if(E(e.valueOf)&&(e=e.valueOf(),d(e)))break a;Yb(e)&&(e=e.toString(),d(e))}return{value:e,type:c,index:b}})}});a.sort(function(a,b){for(var d=0,e=h.length;d<e;d++){var g=m(a.predicateValues[d],b.predicateValues[d]);if(g)return g*h[d].descending*
+l}return(m(a.tieBreaker,b.tieBreaker)||c(a.tieBreaker,b.tieBreaker))*l});return a=a.map(function(a){return a.value})}}function Ua(a){E(a)&&(a={link:a});a.restrict=a.restrict||"AC";return aa(a)}function Mb(a,b,d,c,e){this.$$controls=[];this.$error={};this.$$success={};this.$pending=void 0;this.$name=e(b.name||b.ngForm||"")(d);this.$dirty=!1;this.$valid=this.$pristine=!0;this.$submitted=this.$invalid=!1;this.$$parentForm=Nb;this.$$element=a;this.$$animate=c;$d(this)}function $d(a){a.$$classCache={};
+a.$$classCache[ae]=!(a.$$classCache[pb]=a.$$element.hasClass(pb))}function be(a){function b(a,b,c){c&&!a.$$classCache[b]?(a.$$animate.addClass(a.$$element,b),a.$$classCache[b]=!0):!c&&a.$$classCache[b]&&(a.$$animate.removeClass(a.$$element,b),a.$$classCache[b]=!1)}function d(a,c,d){c=c?"-"+Vc(c,"-"):"";b(a,pb+c,!0===d);b(a,ae+c,!1===d)}var c=a.set,e=a.unset;a.clazz.prototype.$setValidity=function(a,g,k){v(g)?(this.$pending||(this.$pending={}),c(this.$pending,a,k)):(this.$pending&&e(this.$pending,
+a,k),ce(this.$pending)&&(this.$pending=void 0));La(g)?g?(e(this.$error,a,k),c(this.$$success,a,k)):(c(this.$error,a,k),e(this.$$success,a,k)):(e(this.$error,a,k),e(this.$$success,a,k));this.$pending?(b(this,"ng-pending",!0),this.$valid=this.$invalid=void 0,d(this,"",null)):(b(this,"ng-pending",!1),this.$valid=ce(this.$error),this.$invalid=!this.$valid,d(this,"",this.$valid));g=this.$pending&&this.$pending[a]?void 0:this.$error[a]?!1:this.$$success[a]?!0:null;d(this,a,g);this.$$parentForm.$setValidity(a,
+g,this)}}function ce(a){if(a)for(var b in a)if(a.hasOwnProperty(b))return!1;return!0}function Fc(a){a.$formatters.push(function(b){return a.$isEmpty(b)?b:b.toString()})}function Va(a,b,d,c,e,f){var g=N(b[0].type);if(!e.android){var k=!1;b.on("compositionstart",function(){k=!0});b.on("compositionend",function(){k=!1;l()})}var h,l=function(a){h&&(f.defer.cancel(h),h=null);if(!k){var e=b.val();a=a&&a.type;"password"===g||d.ngTrim&&"false"===d.ngTrim||(e=P(e));(c.$viewValue!==e||""===e&&c.$$hasNativeValidators)&&
+c.$setViewValue(e,a)}};if(e.hasEvent("input"))b.on("input",l);else{var m=function(a,b,c){h||(h=f.defer(function(){h=null;b&&b.value===c||l(a)}))};b.on("keydown",function(a){var b=a.keyCode;91===b||15<b&&19>b||37<=b&&40>=b||m(a,this,this.value)});if(e.hasEvent("paste"))b.on("paste cut",m)}b.on("change",l);if(de[g]&&c.$$hasNativeValidators&&g===d.type)b.on("keydown wheel mousedown",function(a){if(!h){var b=this.validity,c=b.badInput,d=b.typeMismatch;h=f.defer(function(){h=null;b.badInput===c&&b.typeMismatch===
+d||l(a)})}});c.$render=function(){var a=c.$isEmpty(c.$viewValue)?"":c.$viewValue;b.val()!==a&&b.val(a)}}function Ob(a,b){return function(d,c){var e,f;if(ia(d))return d;if(C(d)){'"'===d.charAt(0)&&'"'===d.charAt(d.length-1)&&(d=d.substring(1,d.length-1));if(Tg.test(d))return new Date(d);a.lastIndex=0;if(e=a.exec(d))return e.shift(),f=c?{yyyy:c.getFullYear(),MM:c.getMonth()+1,dd:c.getDate(),HH:c.getHours(),mm:c.getMinutes(),ss:c.getSeconds(),sss:c.getMilliseconds()/1E3}:{yyyy:1970,MM:1,dd:1,HH:0,mm:0,
+ss:0,sss:0},p(e,function(a,c){c<b.length&&(f[b[c]]=+a)}),new Date(f.yyyy,f.MM-1,f.dd,f.HH,f.mm,f.ss||0,1E3*f.sss||0)}return NaN}}function qb(a,b,d,c){return function(e,f,g,k,h,l,m){function n(a){return a&&!(a.getTime&&a.getTime()!==a.getTime())}function q(a){return t(a)&&!ia(a)?d(a)||void 0:a}Gc(e,f,g,k);Va(e,f,g,k,h,l);var p=k&&k.$options.getOption("timezone"),r;k.$$parserName=a;k.$parsers.push(function(a){if(k.$isEmpty(a))return null;if(b.test(a))return a=d(a,r),p&&(a=ac(a,p)),a});k.$formatters.push(function(a){if(a&&
+!ia(a))throw rb("datefmt",a);if(n(a))return(r=a)&&p&&(r=ac(r,p,!0)),m("date")(a,c,p);r=null;return""});if(t(g.min)||g.ngMin){var w;k.$validators.min=function(a){return!n(a)||v(w)||d(a)>=w};g.$observe("min",function(a){w=q(a);k.$validate()})}if(t(g.max)||g.ngMax){var u;k.$validators.max=function(a){return!n(a)||v(u)||d(a)<=u};g.$observe("max",function(a){u=q(a);k.$validate()})}}}function Gc(a,b,d,c){(c.$$hasNativeValidators=G(b[0].validity))&&c.$parsers.push(function(a){var c=b.prop("validity")||{};
+return c.badInput||c.typeMismatch?void 0:a})}function ee(a){a.$$parserName="number";a.$parsers.push(function(b){if(a.$isEmpty(b))return null;if(Ug.test(b))return parseFloat(b)});a.$formatters.push(function(b){if(!a.$isEmpty(b)){if(!W(b))throw rb("numfmt",b);b=b.toString()}return b})}function Wa(a){t(a)&&!W(a)&&(a=parseFloat(a));return ba(a)?void 0:a}function Hc(a){var b=a.toString(),d=b.indexOf(".");return-1===d?-1<a&&1>a&&(a=/e-(\d+)$/.exec(b))?Number(a[1]):0:b.length-d-1}function fe(a,b,d){a=Number(a);
+var c=(a|0)!==a,e=(b|0)!==b,f=(d|0)!==d;if(c||e||f){var g=c?Hc(a):0,k=e?Hc(b):0,h=f?Hc(d):0,g=Math.max(g,k,h),g=Math.pow(10,g);a*=g;b*=g;d*=g;c&&(a=Math.round(a));e&&(b=Math.round(b));f&&(d=Math.round(d))}return 0===(a-b)%d}function ge(a,b,d,c,e){if(t(c)){a=a(c);if(!a.constant)throw rb("constexpr",d,c);return a(b)}return e}function Ic(a,b){function d(a,b){if(!a||!a.length)return[];if(!b||!b.length)return a;var c=[],d=0;a:for(;d<a.length;d++){for(var e=a[d],f=0;f<b.length;f++)if(e===b[f])continue a;
+c.push(e)}return c}function c(a){var b=a;I(a)?b=a.map(c).join(" "):G(a)&&(b=Object.keys(a).filter(function(b){return a[b]}).join(" "));return b}function e(a){var b=a;if(I(a))b=a.map(e);else if(G(a)){var c=!1,b=Object.keys(a).filter(function(b){b=a[b];!c&&v(b)&&(c=!0);return b});c&&b.push(void 0)}return b}a="ngClass"+a;var f;return["$parse",function(g){return{restrict:"AC",link:function(k,h,l){function m(a,b){var c=[];p(a,function(a){if(0<b||A[a])A[a]=(A[a]||0)+b,A[a]===+(0<b)&&c.push(a)});return c.join(" ")}
+function n(a){if(a===b){var c=s,c=m(c&&c.split(" "),1);l.$addClass(c)}else c=s,c=m(c&&c.split(" "),-1),l.$removeClass(c);v=a}function q(a){a=c(a);a!==s&&r(a)}function r(a){if(v===b){var c=s&&s.split(" "),e=a&&a.split(" "),g=d(c,e),c=d(e,c),g=m(g,-1),c=m(c,1);l.$addClass(c);l.$removeClass(g)}s=a}var t=l[a].trim(),w=":"===t.charAt(0)&&":"===t.charAt(1),t=g(t,w?e:c),u=w?q:r,A=h.data("$classCounts"),v=!0,s;A||(A=R(),h.data("$classCounts",A));"ngClass"!==a&&(f||(f=g("$index",function(a){return a&1})),
+k.$watch(f,n));k.$watch(t,u,w)}}}]}function Pb(a,b,d,c,e,f,g,k,h){this.$modelValue=this.$viewValue=Number.NaN;this.$$rawModelValue=void 0;this.$validators={};this.$asyncValidators={};this.$parsers=[];this.$formatters=[];this.$viewChangeListeners=[];this.$untouched=!0;this.$touched=!1;this.$pristine=!0;this.$dirty=!1;this.$valid=!0;this.$invalid=!1;this.$error={};this.$$success={};this.$pending=void 0;this.$name=h(d.name||"",!1)(a);this.$$parentForm=Nb;this.$options=Qb;this.$$parsedNgModel=e(d.ngModel);
+this.$$parsedNgModelAssign=this.$$parsedNgModel.assign;this.$$ngModelGet=this.$$parsedNgModel;this.$$ngModelSet=this.$$parsedNgModelAssign;this.$$pendingDebounce=null;this.$$parserValid=void 0;this.$$currentValidationRunId=0;Object.defineProperty(this,"$$scope",{value:a});this.$$attr=d;this.$$element=c;this.$$animate=f;this.$$timeout=g;this.$$parse=e;this.$$q=k;this.$$exceptionHandler=b;$d(this);Vg(this)}function Vg(a){a.$$scope.$watch(function(b){b=a.$$ngModelGet(b);if(b!==a.$modelValue&&(a.$modelValue===
+a.$modelValue||b===b)){a.$modelValue=a.$$rawModelValue=b;a.$$parserValid=void 0;for(var d=a.$formatters,c=d.length,e=b;c--;)e=d[c](e);a.$viewValue!==e&&(a.$$updateEmptyClasses(e),a.$viewValue=a.$$lastCommittedViewValue=e,a.$render(),a.$$runValidators(a.$modelValue,a.$viewValue,B))}return b})}function Jc(a){this.$$options=a}function he(a,b){p(b,function(b,c){t(a[c])||(a[c]=b)})}function Ha(a,b){a.prop("selected",b);a.attr("selected",b)}var Lc={objectMaxDepth:5},Wg=/^\/(.+)\/([a-z]*)$/,wa=Object.prototype.hasOwnProperty,
+N=function(a){return C(a)?a.toLowerCase():a},wb=function(a){return C(a)?a.toUpperCase():a},Ba,z,ta,xa=[].slice,vg=[].splice,Xg=[].push,la=Object.prototype.toString,Oc=Object.getPrototypeOf,za=K("ng"),fa=x.angular||(x.angular={}),dc,sb=0;Ba=x.document.documentMode;var ba=Number.isNaN||function(a){return a!==a};B.$inject=[];ab.$inject=[];var I=Array.isArray,te=/^\[object (?:Uint8|Uint8Clamped|Uint16|Uint32|Int8|Int16|Int32|Float32|Float64)Array]$/,P=function(a){return C(a)?a.trim():a},Nd=function(a){return a.replace(/([-()[\]{}+?*.$^|,:#<!\\])/g,
+"\\$1").replace(/\x08/g,"\\x08")},Ja=function(){if(!t(Ja.rules)){var a=x.document.querySelector("[ng-csp]")||x.document.querySelector("[data-ng-csp]");if(a){var b=a.getAttribute("ng-csp")||a.getAttribute("data-ng-csp");Ja.rules={noUnsafeEval:!b||-1!==b.indexOf("no-unsafe-eval"),noInlineStyle:!b||-1!==b.indexOf("no-inline-style")}}else{a=Ja;try{new Function(""),b=!1}catch(d){b=!0}a.rules={noUnsafeEval:b,noInlineStyle:!1}}}return Ja.rules},tb=function(){if(t(tb.name_))return tb.name_;var a,b,d=Na.length,
+c,e;for(b=0;b<d;++b)if(c=Na[b],a=x.document.querySelector("["+c.replace(":","\\:")+"jq]")){e=a.getAttribute(c+"jq");break}return tb.name_=e},ve=/:/g,Na=["ng-","data-ng-","ng:","x-ng-"],ye=function(a){var b=a.currentScript;if(!b)return!0;if(!(b instanceof x.HTMLScriptElement||b instanceof x.SVGScriptElement))return!1;b=b.attributes;return[b.getNamedItem("src"),b.getNamedItem("href"),b.getNamedItem("xlink:href")].every(function(b){if(!b)return!0;if(!b.value)return!1;var c=a.createElement("a");c.href=
+b.value;if(a.location.origin===c.origin)return!0;switch(c.protocol){case "http:":case "https:":case "ftp:":case "blob:":case "file:":case "data:":return!0;default:return!1}})}(x.document),Be=/[A-Z]/g,Wc=!1,Ma=3,Ge={full:"1.6.5",major:1,minor:6,dot:5,codeName:"toffee-salinization"};S.expando="ng339";var jb=S.cache={},hg=1;S._data=function(a){return this.cache[a[this.expando]]||{}};var dg=/-([a-z])/g,Yg=/^-ms-/,Bb={mouseleave:"mouseout",mouseenter:"mouseover"},gc=K("jqLite"),gg=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,
+fc=/<|&#?\w+;/,eg=/<([\w:-]+)/,fg=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,pa={option:[1,'<select multiple="multiple">',"</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};pa.optgroup=pa.option;pa.tbody=pa.tfoot=pa.colgroup=pa.caption=pa.thead;pa.th=pa.td;var mg=x.Node.prototype.contains||function(a){return!!(this.compareDocumentPosition(a)&
+16)},Ra=S.prototype={ready:gd,toString:function(){var a=[];p(this,function(b){a.push(""+b)});return"["+a.join(", ")+"]"},eq:function(a){return 0<=a?z(this[a]):z(this[this.length+a])},length:0,push:Xg,sort:[].sort,splice:[].splice},Hb={};p("multiple selected checked disabled readOnly required open".split(" "),function(a){Hb[N(a)]=a});var ld={};p("input select option textarea button form details".split(" "),function(a){ld[a]=!0});var td={ngMinlength:"minlength",ngMaxlength:"maxlength",ngMin:"min",ngMax:"max",
+ngPattern:"pattern",ngStep:"step"};p({data:kc,removeData:jc,hasData:function(a){for(var b in jb[a.ng339])return!0;return!1},cleanData:function(a){for(var b=0,d=a.length;b<d;b++)jc(a[b])}},function(a,b){S[b]=a});p({data:kc,inheritedData:Fb,scope:function(a){return z.data(a,"$scope")||Fb(a.parentNode||a,["$isolateScope","$scope"])},isolateScope:function(a){return z.data(a,"$isolateScope")||z.data(a,"$isolateScopeNoTemplate")},controller:id,injector:function(a){return Fb(a,"$injector")},removeAttr:function(a,
+b){a.removeAttribute(b)},hasClass:Cb,css:function(a,b,d){b=yb(b.replace(Yg,"ms-"));if(t(d))a.style[b]=d;else return a.style[b]},attr:function(a,b,d){var c=a.nodeType;if(c!==Ma&&2!==c&&8!==c&&a.getAttribute){var c=N(b),e=Hb[c];if(t(d))null===d||!1===d&&e?a.removeAttribute(b):a.setAttribute(b,e?c:d);else return a=a.getAttribute(b),e&&null!==a&&(a=c),null===a?void 0:a}},prop:function(a,b,d){if(t(d))a[b]=d;else return a[b]},text:function(){function a(a,d){if(v(d)){var c=a.nodeType;return 1===c||c===Ma?
+a.textContent:""}a.textContent=d}a.$dv="";return a}(),val:function(a,b){if(v(b)){if(a.multiple&&"select"===ya(a)){var d=[];p(a.options,function(a){a.selected&&d.push(a.value||a.text)});return d}return a.value}a.value=b},html:function(a,b){if(v(b))return a.innerHTML;zb(a,!0);a.innerHTML=b},empty:jd},function(a,b){S.prototype[b]=function(b,c){var e,f,g=this.length;if(a!==jd&&v(2===a.length&&a!==Cb&&a!==id?b:c)){if(G(b)){for(e=0;e<g;e++)if(a===kc)a(this[e],b);else for(f in b)a(this[e],f,b[f]);return this}e=
+a.$dv;g=v(e)?Math.min(g,1):g;for(f=0;f<g;f++){var k=a(this[f],b,c);e=e?e+k:k}return e}for(e=0;e<g;e++)a(this[e],b,c);return this}});p({removeData:jc,on:function(a,b,d,c){if(t(c))throw gc("onargs");if(ec(a)){c=Ab(a,!0);var e=c.events,f=c.handle;f||(f=c.handle=jg(a,e));c=0<=b.indexOf(" ")?b.split(" "):[b];for(var g=c.length,k=function(b,c,g){var k=e[b];k||(k=e[b]=[],k.specialHandlerWrapper=c,"$destroy"===b||g||a.addEventListener(b,f));k.push(d)};g--;)b=c[g],Bb[b]?(k(Bb[b],lg),k(b,void 0,!0)):k(b)}},
+off:hd,one:function(a,b,d){a=z(a);a.on(b,function e(){a.off(b,d);a.off(b,e)});a.on(b,d)},replaceWith:function(a,b){var d,c=a.parentNode;zb(a);p(new S(b),function(b){d?c.insertBefore(b,d.nextSibling):c.replaceChild(b,a);d=b})},children:function(a){var b=[];p(a.childNodes,function(a){1===a.nodeType&&b.push(a)});return b},contents:function(a){return a.contentDocument||a.childNodes||[]},append:function(a,b){var d=a.nodeType;if(1===d||11===d){b=new S(b);for(var d=0,c=b.length;d<c;d++)a.appendChild(b[d])}},
+prepend:function(a,b){if(1===a.nodeType){var d=a.firstChild;p(new S(b),function(b){a.insertBefore(b,d)})}},wrap:function(a,b){var d=z(b).eq(0).clone()[0],c=a.parentNode;c&&c.replaceChild(d,a);d.appendChild(a)},remove:Gb,detach:function(a){Gb(a,!0)},after:function(a,b){var d=a,c=a.parentNode;if(c){b=new S(b);for(var e=0,f=b.length;e<f;e++){var g=b[e];c.insertBefore(g,d.nextSibling);d=g}}},addClass:Eb,removeClass:Db,toggleClass:function(a,b,d){b&&p(b.split(" "),function(b){var e=d;v(e)&&(e=!Cb(a,b));
+(e?Eb:Db)(a,b)})},parent:function(a){return(a=a.parentNode)&&11!==a.nodeType?a:null},next:function(a){return a.nextElementSibling},find:function(a,b){return a.getElementsByTagName?a.getElementsByTagName(b):[]},clone:ic,triggerHandler:function(a,b,d){var c,e,f=b.type||b,g=Ab(a);if(g=(g=g&&g.events)&&g[f])c={preventDefault:function(){this.defaultPrevented=!0},isDefaultPrevented:function(){return!0===this.defaultPrevented},stopImmediatePropagation:function(){this.immediatePropagationStopped=!0},isImmediatePropagationStopped:function(){return!0===
+this.immediatePropagationStopped},stopPropagation:B,type:f,target:a},b.type&&(c=O(c,b)),b=ra(g),e=d?[c].concat(d):[c],p(b,function(b){c.isImmediatePropagationStopped()||b.apply(a,e)})}},function(a,b){S.prototype[b]=function(b,c,e){for(var f,g=0,k=this.length;g<k;g++)v(f)?(f=a(this[g],b,c,e),t(f)&&(f=z(f))):hc(f,a(this[g],b,c,e));return t(f)?f:this}});S.prototype.bind=S.prototype.on;S.prototype.unbind=S.prototype.off;var Zg=Object.create(null);md.prototype={_idx:function(a){if(a===this._lastKey)return this._lastIndex;
+this._lastKey=a;return this._lastIndex=this._keys.indexOf(a)},_transformKey:function(a){return ba(a)?Zg:a},get:function(a){a=this._transformKey(a);a=this._idx(a);if(-1!==a)return this._values[a]},set:function(a,b){a=this._transformKey(a);var d=this._idx(a);-1===d&&(d=this._lastIndex=this._keys.length);this._keys[d]=a;this._values[d]=b},delete:function(a){a=this._transformKey(a);a=this._idx(a);if(-1===a)return!1;this._keys.splice(a,1);this._values.splice(a,1);this._lastKey=NaN;this._lastIndex=-1;return!0}};
+var Ib=md,bg=[function(){this.$get=[function(){return Ib}]}],og=/^([^(]+?)=>/,pg=/^[^(]*\(\s*([^)]*)\)/m,$g=/,/,ah=/^\s*(_?)(\S+?)\1\s*$/,ng=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg,Ka=K("$injector");gb.$$annotate=function(a,b,d){var c;if("function"===typeof a){if(!(c=a.$inject)){c=[];if(a.length){if(b)throw C(d)&&d||(d=a.name||qg(a)),Ka("strictdi",d);b=nd(a);p(b[1].split($g),function(a){a.replace(ah,function(a,b,d){c.push(d)})})}a.$inject=c}}else I(a)?(b=a.length-1,ub(a[b],"fn"),c=a.slice(0,b)):ub(a,"fn",
+!0);return c};var ie=K("$animate"),tf=function(){this.$get=B},uf=function(){var a=new Ib,b=[];this.$get=["$$AnimateRunner","$rootScope",function(d,c){function e(a,b,c){var d=!1;b&&(b=C(b)?b.split(" "):I(b)?b:[],p(b,function(b){b&&(d=!0,a[b]=c)}));return d}function f(){p(b,function(b){var c=a.get(b);if(c){var d=rg(b.attr("class")),e="",f="";p(c,function(a,b){a!==!!d[b]&&(a?e+=(e.length?" ":"")+b:f+=(f.length?" ":"")+b)});p(b,function(a){e&&Eb(a,e);f&&Db(a,f)});a.delete(b)}});b.length=0}return{enabled:B,
+on:B,off:B,pin:B,push:function(g,k,h,l){l&&l();h=h||{};h.from&&g.css(h.from);h.to&&g.css(h.to);if(h.addClass||h.removeClass)if(k=h.addClass,l=h.removeClass,h=a.get(g)||{},k=e(h,k,!0),l=e(h,l,!1),k||l)a.set(g,h),b.push(g),1===b.length&&c.$$postDigest(f);g=new d;g.complete();return g}}}]},rf=["$provide",function(a){var b=this,d=null,c=null;this.$$registeredAnimations=Object.create(null);this.register=function(c,d){if(c&&"."!==c.charAt(0))throw ie("notcsel",c);var g=c+"-animation";b.$$registeredAnimations[c.substr(1)]=
+g;a.factory(g,d)};this.customFilter=function(a){1===arguments.length&&(c=E(a)?a:null);return c};this.classNameFilter=function(a){if(1===arguments.length&&(d=a instanceof RegExp?a:null)&&/[(\s|\/)]ng-animate[(\s|\/)]/.test(d.toString()))throw d=null,ie("nongcls","ng-animate");return d};this.$get=["$$animateQueue",function(a){function b(a,c,d){if(d){var e;a:{for(e=0;e<d.length;e++){var f=d[e];if(1===f.nodeType){e=f;break a}}e=void 0}!e||e.parentNode||e.previousElementSibling||(d=null)}d?d.after(a):
+c.prepend(a)}return{on:a.on,off:a.off,pin:a.pin,enabled:a.enabled,cancel:function(a){a.end&&a.end()},enter:function(c,d,h,l){d=d&&z(d);h=h&&z(h);d=d||h.parent();b(c,d,h);return a.push(c,"enter",Ca(l))},move:function(c,d,h,l){d=d&&z(d);h=h&&z(h);d=d||h.parent();b(c,d,h);return a.push(c,"move",Ca(l))},leave:function(b,c){return a.push(b,"leave",Ca(c),function(){b.remove()})},addClass:function(b,c,d){d=Ca(d);d.addClass=kb(d.addclass,c);return a.push(b,"addClass",d)},removeClass:function(b,c,d){d=Ca(d);
+d.removeClass=kb(d.removeClass,c);return a.push(b,"removeClass",d)},setClass:function(b,c,d,f){f=Ca(f);f.addClass=kb(f.addClass,c);f.removeClass=kb(f.removeClass,d);return a.push(b,"setClass",f)},animate:function(b,c,d,f,m){m=Ca(m);m.from=m.from?O(m.from,c):c;m.to=m.to?O(m.to,d):d;m.tempClasses=kb(m.tempClasses,f||"ng-inline-animate");return a.push(b,"animate",m)}}}]}],wf=function(){this.$get=["$$rAF",function(a){function b(b){d.push(b);1<d.length||a(function(){for(var a=0;a<d.length;a++)d[a]();d=
+[]})}var d=[];return function(){var a=!1;b(function(){a=!0});return function(d){a?d():b(d)}}}]},vf=function(){this.$get=["$q","$sniffer","$$animateAsyncRun","$$isDocumentHidden","$timeout",function(a,b,d,c,e){function f(a){this.setHost(a);var b=d();this._doneCallbacks=[];this._tick=function(a){c()?e(a,0,!1):b(a)};this._state=0}f.chain=function(a,b){function c(){if(d===a.length)b(!0);else a[d](function(a){!1===a?b(!1):(d++,c())})}var d=0;c()};f.all=function(a,b){function c(f){e=e&&f;++d===a.length&&
+b(e)}var d=0,e=!0;p(a,function(a){a.done(c)})};f.prototype={setHost:function(a){this.host=a||{}},done:function(a){2===this._state?a():this._doneCallbacks.push(a)},progress:B,getPromise:function(){if(!this.promise){var b=this;this.promise=a(function(a,c){b.done(function(b){!1===b?c():a()})})}return this.promise},then:function(a,b){return this.getPromise().then(a,b)},"catch":function(a){return this.getPromise()["catch"](a)},"finally":function(a){return this.getPromise()["finally"](a)},pause:function(){this.host.pause&&
+this.host.pause()},resume:function(){this.host.resume&&this.host.resume()},end:function(){this.host.end&&this.host.end();this._resolve(!0)},cancel:function(){this.host.cancel&&this.host.cancel();this._resolve(!1)},complete:function(a){var b=this;0===b._state&&(b._state=1,b._tick(function(){b._resolve(a)}))},_resolve:function(a){2!==this._state&&(p(this._doneCallbacks,function(b){b(a)}),this._doneCallbacks.length=0,this._state=2)}};return f}]},sf=function(){this.$get=["$$rAF","$q","$$AnimateRunner",
+function(a,b,d){return function(b,e){function f(){a(function(){g.addClass&&(b.addClass(g.addClass),g.addClass=null);g.removeClass&&(b.removeClass(g.removeClass),g.removeClass=null);g.to&&(b.css(g.to),g.to=null);k||h.complete();k=!0});return h}var g=e||{};g.$$prepared||(g=Ia(g));g.cleanupStyles&&(g.from=g.to=null);g.from&&(b.css(g.from),g.from=null);var k,h=new d;return{start:f,end:f}}}]},ga=K("$compile"),oc=new function(){};Yc.$inject=["$provide","$$sanitizeUriProvider"];Jb.prototype.isFirstChange=
+function(){return this.previousValue===oc};var od=/^((?:x|data)[:\-_])/i,ug=/[:\-_]+(.)/g,vd=K("$controller"),ud=/^(\S+)(\s+as\s+([\w$]+))?$/,Df=function(){this.$get=["$document",function(a){return function(b){b?!b.nodeType&&b instanceof z&&(b=b[0]):b=a[0].body;return b.offsetWidth+1}}]},wd="application/json",sc={"Content-Type":wd+";charset=utf-8"},xg=/^\[|^\{(?!\{)/,yg={"[":/]$/,"{":/}$/},wg=/^\)]\}',?\n/,rc=K("$http"),Fa=fa.$interpolateMinErr=K("$interpolate");Fa.throwNoconcat=function(a){throw Fa("noconcat",
+a);};Fa.interr=function(a,b){return Fa("interr",a,b.toString())};var Lf=function(){this.$get=function(){function a(a){var b=function(a){b.data=a;b.called=!0};b.id=a;return b}var b=fa.callbacks,d={};return{createCallback:function(c){c="_"+(b.$$counter++).toString(36);var e="angular.callbacks."+c,f=a(c);d[e]=b[c]=f;return e},wasCalled:function(a){return d[a].called},getResponse:function(a){return d[a].data},removeCallback:function(a){delete b[d[a].id];delete d[a]}}}},bh=/^([^?#]*)(\?([^#]*))?(#(.*))?$/,
+Ag={http:80,https:443,ftp:21},mb=K("$location"),Bg=/^\s*[\\/]{2,}/,ch={$$absUrl:"",$$html5:!1,$$replace:!1,absUrl:Kb("$$absUrl"),url:function(a){if(v(a))return this.$$url;var b=bh.exec(a);(b[1]||""===a)&&this.path(decodeURIComponent(b[1]));(b[2]||b[1]||""===a)&&this.search(b[3]||"");this.hash(b[5]||"");return this},protocol:Kb("$$protocol"),host:Kb("$$host"),port:Kb("$$port"),path:Ed("$$path",function(a){a=null!==a?a.toString():"";return"/"===a.charAt(0)?a:"/"+a}),search:function(a,b){switch(arguments.length){case 0:return this.$$search;
+case 1:if(C(a)||W(a))a=a.toString(),this.$$search=Tc(a);else if(G(a))a=Ia(a,{}),p(a,function(b,c){null==b&&delete a[c]}),this.$$search=a;else throw mb("isrcharg");break;default:v(b)||null===b?delete this.$$search[a]:this.$$search[a]=b}this.$$compose();return this},hash:Ed("$$hash",function(a){return null!==a?a.toString():""}),replace:function(){this.$$replace=!0;return this}};p([Dd,wc,vc],function(a){a.prototype=Object.create(ch);a.prototype.state=function(b){if(!arguments.length)return this.$$state;
+if(a!==vc||!this.$$html5)throw mb("nostate");this.$$state=v(b)?null:b;this.$$urlUpdatedByLocation=!0;return this}});var Xa=K("$parse"),Fg={}.constructor.prototype.valueOf,Rb=R();p("+ - * / % === !== == != < > <= >= && || ! = |".split(" "),function(a){Rb[a]=!0});var dh={n:"\n",f:"\f",r:"\r",t:"\t",v:"\v","'":"'",'"':'"'},zc=function(a){this.options=a};zc.prototype={constructor:zc,lex:function(a){this.text=a;this.index=0;for(this.tokens=[];this.index<this.text.length;)if(a=this.text.charAt(this.index),
+'"'===a||"'"===a)this.readString(a);else if(this.isNumber(a)||"."===a&&this.isNumber(this.peek()))this.readNumber();else if(this.isIdentifierStart(this.peekMultichar()))this.readIdent();else if(this.is(a,"(){}[].,;:?"))this.tokens.push({index:this.index,text:a}),this.index++;else if(this.isWhitespace(a))this.index++;else{var b=a+this.peek(),d=b+this.peek(2),c=Rb[b],e=Rb[d];Rb[a]||c||e?(a=e?d:c?b:a,this.tokens.push({index:this.index,text:a,operator:!0}),this.index+=a.length):this.throwError("Unexpected next character ",
+this.index,this.index+1)}return this.tokens},is:function(a,b){return-1!==b.indexOf(a)},peek:function(a){a=a||1;return this.index+a<this.text.length?this.text.charAt(this.index+a):!1},isNumber:function(a){return"0"<=a&&"9">=a&&"string"===typeof a},isWhitespace:function(a){return" "===a||"\r"===a||"\t"===a||"\n"===a||"\v"===a||"\u00a0"===a},isIdentifierStart:function(a){return this.options.isIdentifierStart?this.options.isIdentifierStart(a,this.codePointAt(a)):this.isValidIdentifierStart(a)},isValidIdentifierStart:function(a){return"a"<=
+a&&"z">=a||"A"<=a&&"Z">=a||"_"===a||"$"===a},isIdentifierContinue:function(a){return this.options.isIdentifierContinue?this.options.isIdentifierContinue(a,this.codePointAt(a)):this.isValidIdentifierContinue(a)},isValidIdentifierContinue:function(a,b){return this.isValidIdentifierStart(a,b)||this.isNumber(a)},codePointAt:function(a){return 1===a.length?a.charCodeAt(0):(a.charCodeAt(0)<<10)+a.charCodeAt(1)-56613888},peekMultichar:function(){var a=this.text.charAt(this.index),b=this.peek();if(!b)return a;
+var d=a.charCodeAt(0),c=b.charCodeAt(0);return 55296<=d&&56319>=d&&56320<=c&&57343>=c?a+b:a},isExpOperator:function(a){return"-"===a||"+"===a||this.isNumber(a)},throwError:function(a,b,d){d=d||this.index;b=t(b)?"s "+b+"-"+this.index+" ["+this.text.substring(b,d)+"]":" "+d;throw Xa("lexerr",a,b,this.text);},readNumber:function(){for(var a="",b=this.index;this.index<this.text.length;){var d=N(this.text.charAt(this.index));if("."===d||this.isNumber(d))a+=d;else{var c=this.peek();if("e"===d&&this.isExpOperator(c))a+=
+d;else if(this.isExpOperator(d)&&c&&this.isNumber(c)&&"e"===a.charAt(a.length-1))a+=d;else if(!this.isExpOperator(d)||c&&this.isNumber(c)||"e"!==a.charAt(a.length-1))break;else this.throwError("Invalid exponent")}this.index++}this.tokens.push({index:b,text:a,constant:!0,value:Number(a)})},readIdent:function(){var a=this.index;for(this.index+=this.peekMultichar().length;this.index<this.text.length;){var b=this.peekMultichar();if(!this.isIdentifierContinue(b))break;this.index+=b.length}this.tokens.push({index:a,
+text:this.text.slice(a,this.index),identifier:!0})},readString:function(a){var b=this.index;this.index++;for(var d="",c=a,e=!1;this.index<this.text.length;){var f=this.text.charAt(this.index),c=c+f;if(e)"u"===f?(e=this.text.substring(this.index+1,this.index+5),e.match(/[\da-f]{4}/i)||this.throwError("Invalid unicode escape [\\u"+e+"]"),this.index+=4,d+=String.fromCharCode(parseInt(e,16))):d+=dh[f]||f,e=!1;else if("\\"===f)e=!0;else{if(f===a){this.index++;this.tokens.push({index:b,text:c,constant:!0,
+value:d});return}d+=f}this.index++}this.throwError("Unterminated quote",b)}};var r=function(a,b){this.lexer=a;this.options=b};r.Program="Program";r.ExpressionStatement="ExpressionStatement";r.AssignmentExpression="AssignmentExpression";r.ConditionalExpression="ConditionalExpression";r.LogicalExpression="LogicalExpression";r.BinaryExpression="BinaryExpression";r.UnaryExpression="UnaryExpression";r.CallExpression="CallExpression";r.MemberExpression="MemberExpression";r.Identifier="Identifier";r.Literal=
+"Literal";r.ArrayExpression="ArrayExpression";r.Property="Property";r.ObjectExpression="ObjectExpression";r.ThisExpression="ThisExpression";r.LocalsExpression="LocalsExpression";r.NGValueParameter="NGValueParameter";r.prototype={ast:function(a){this.text=a;this.tokens=this.lexer.lex(a);a=this.program();0!==this.tokens.length&&this.throwError("is an unexpected token",this.tokens[0]);return a},program:function(){for(var a=[];;)if(0<this.tokens.length&&!this.peek("}",")",";","]")&&a.push(this.expressionStatement()),
+!this.expect(";"))return{type:r.Program,body:a}},expressionStatement:function(){return{type:r.ExpressionStatement,expression:this.filterChain()}},filterChain:function(){for(var a=this.expression();this.expect("|");)a=this.filter(a);return a},expression:function(){return this.assignment()},assignment:function(){var a=this.ternary();if(this.expect("=")){if(!Id(a))throw Xa("lval");a={type:r.AssignmentExpression,left:a,right:this.assignment(),operator:"="}}return a},ternary:function(){var a=this.logicalOR(),
+b,d;return this.expect("?")&&(b=this.expression(),this.consume(":"))?(d=this.expression(),{type:r.ConditionalExpression,test:a,alternate:b,consequent:d}):a},logicalOR:function(){for(var a=this.logicalAND();this.expect("||");)a={type:r.LogicalExpression,operator:"||",left:a,right:this.logicalAND()};return a},logicalAND:function(){for(var a=this.equality();this.expect("&&");)a={type:r.LogicalExpression,operator:"&&",left:a,right:this.equality()};return a},equality:function(){for(var a=this.relational(),
+b;b=this.expect("==","!=","===","!==");)a={type:r.BinaryExpression,operator:b.text,left:a,right:this.relational()};return a},relational:function(){for(var a=this.additive(),b;b=this.expect("<",">","<=",">=");)a={type:r.BinaryExpression,operator:b.text,left:a,right:this.additive()};return a},additive:function(){for(var a=this.multiplicative(),b;b=this.expect("+","-");)a={type:r.BinaryExpression,operator:b.text,left:a,right:this.multiplicative()};return a},multiplicative:function(){for(var a=this.unary(),
+b;b=this.expect("*","/","%");)a={type:r.BinaryExpression,operator:b.text,left:a,right:this.unary()};return a},unary:function(){var a;return(a=this.expect("+","-","!"))?{type:r.UnaryExpression,operator:a.text,prefix:!0,argument:this.unary()}:this.primary()},primary:function(){var a;this.expect("(")?(a=this.filterChain(),this.consume(")")):this.expect("[")?a=this.arrayDeclaration():this.expect("{")?a=this.object():this.selfReferential.hasOwnProperty(this.peek().text)?a=Ia(this.selfReferential[this.consume().text]):
+this.options.literals.hasOwnProperty(this.peek().text)?a={type:r.Literal,value:this.options.literals[this.consume().text]}:this.peek().identifier?a=this.identifier():this.peek().constant?a=this.constant():this.throwError("not a primary expression",this.peek());for(var b;b=this.expect("(","[",".");)"("===b.text?(a={type:r.CallExpression,callee:a,arguments:this.parseArguments()},this.consume(")")):"["===b.text?(a={type:r.MemberExpression,object:a,property:this.expression(),computed:!0},this.consume("]")):
+"."===b.text?a={type:r.MemberExpression,object:a,property:this.identifier(),computed:!1}:this.throwError("IMPOSSIBLE");return a},filter:function(a){a=[a];for(var b={type:r.CallExpression,callee:this.identifier(),arguments:a,filter:!0};this.expect(":");)a.push(this.expression());return b},parseArguments:function(){var a=[];if(")"!==this.peekToken().text){do a.push(this.filterChain());while(this.expect(","))}return a},identifier:function(){var a=this.consume();a.identifier||this.throwError("is not a valid identifier",
+a);return{type:r.Identifier,name:a.text}},constant:function(){return{type:r.Literal,value:this.consume().value}},arrayDeclaration:function(){var a=[];if("]"!==this.peekToken().text){do{if(this.peek("]"))break;a.push(this.expression())}while(this.expect(","))}this.consume("]");return{type:r.ArrayExpression,elements:a}},object:function(){var a=[],b;if("}"!==this.peekToken().text){do{if(this.peek("}"))break;b={type:r.Property,kind:"init"};this.peek().constant?(b.key=this.constant(),b.computed=!1,this.consume(":"),
+b.value=this.expression()):this.peek().identifier?(b.key=this.identifier(),b.computed=!1,this.peek(":")?(this.consume(":"),b.value=this.expression()):b.value=b.key):this.peek("[")?(this.consume("["),b.key=this.expression(),this.consume("]"),b.computed=!0,this.consume(":"),b.value=this.expression()):this.throwError("invalid key",this.peek());a.push(b)}while(this.expect(","))}this.consume("}");return{type:r.ObjectExpression,properties:a}},throwError:function(a,b){throw Xa("syntax",b.text,a,b.index+
+1,this.text,this.text.substring(b.index));},consume:function(a){if(0===this.tokens.length)throw Xa("ueoe",this.text);var b=this.expect(a);b||this.throwError("is unexpected, expecting ["+a+"]",this.peek());return b},peekToken:function(){if(0===this.tokens.length)throw Xa("ueoe",this.text);return this.tokens[0]},peek:function(a,b,d,c){return this.peekAhead(0,a,b,d,c)},peekAhead:function(a,b,d,c,e){if(this.tokens.length>a){a=this.tokens[a];var f=a.text;if(f===b||f===d||f===c||f===e||!(b||d||c||e))return a}return!1},
+expect:function(a,b,d,c){return(a=this.peek(a,b,d,c))?(this.tokens.shift(),a):!1},selfReferential:{"this":{type:r.ThisExpression},$locals:{type:r.LocalsExpression}}};var Gd=2;Kd.prototype={compile:function(a){var b=this;this.state={nextId:0,filters:{},fn:{vars:[],body:[],own:{}},assign:{vars:[],body:[],own:{}},inputs:[]};X(a,b.$filter);var d="",c;this.stage="assign";if(c=Jd(a))this.state.computing="assign",d=this.nextId(),this.recurse(c,d),this.return_(d),d="fn.assign="+this.generateFunction("assign",
+"s,v,l");c=Hd(a.body);b.stage="inputs";p(c,function(a,c){var d="fn"+c;b.state[d]={vars:[],body:[],own:{}};b.state.computing=d;var k=b.nextId();b.recurse(a,k);b.return_(k);b.state.inputs.push({name:d,isPure:a.isPure});a.watchId=c});this.state.computing="fn";this.stage="main";this.recurse(a);a='"'+this.USE+" "+this.STRICT+'";\n'+this.filterPrefix()+"var fn="+this.generateFunction("fn","s,l,a,i")+d+this.watchFns()+"return fn;";a=(new Function("$filter","getStringValue","ifDefined","plus",a))(this.$filter,
+Cg,Dg,Fd);this.state=this.stage=void 0;return a},USE:"use",STRICT:"strict",watchFns:function(){var a=[],b=this.state.inputs,d=this;p(b,function(b){a.push("var "+b.name+"="+d.generateFunction(b.name,"s"));b.isPure&&a.push(b.name,".isPure="+JSON.stringify(b.isPure)+";")});b.length&&a.push("fn.inputs=["+b.map(function(a){return a.name}).join(",")+"];");return a.join("")},generateFunction:function(a,b){return"function("+b+"){"+this.varsPrefix(a)+this.body(a)+"};"},filterPrefix:function(){var a=[],b=this;
+p(this.state.filters,function(d,c){a.push(d+"=$filter("+b.escape(c)+")")});return a.length?"var "+a.join(",")+";":""},varsPrefix:function(a){return this.state[a].vars.length?"var "+this.state[a].vars.join(",")+";":""},body:function(a){return this.state[a].body.join("")},recurse:function(a,b,d,c,e,f){var g,k,h=this,l,m,n;c=c||B;if(!f&&t(a.watchId))b=b||this.nextId(),this.if_("i",this.lazyAssign(b,this.computedMember("i",a.watchId)),this.lazyRecurse(a,b,d,c,e,!0));else switch(a.type){case r.Program:p(a.body,
+function(b,c){h.recurse(b.expression,void 0,void 0,function(a){k=a});c!==a.body.length-1?h.current().body.push(k,";"):h.return_(k)});break;case r.Literal:m=this.escape(a.value);this.assign(b,m);c(b||m);break;case r.UnaryExpression:this.recurse(a.argument,void 0,void 0,function(a){k=a});m=a.operator+"("+this.ifDefined(k,0)+")";this.assign(b,m);c(m);break;case r.BinaryExpression:this.recurse(a.left,void 0,void 0,function(a){g=a});this.recurse(a.right,void 0,void 0,function(a){k=a});m="+"===a.operator?
+this.plus(g,k):"-"===a.operator?this.ifDefined(g,0)+a.operator+this.ifDefined(k,0):"("+g+")"+a.operator+"("+k+")";this.assign(b,m);c(m);break;case r.LogicalExpression:b=b||this.nextId();h.recurse(a.left,b);h.if_("&&"===a.operator?b:h.not(b),h.lazyRecurse(a.right,b));c(b);break;case r.ConditionalExpression:b=b||this.nextId();h.recurse(a.test,b);h.if_(b,h.lazyRecurse(a.alternate,b),h.lazyRecurse(a.consequent,b));c(b);break;case r.Identifier:b=b||this.nextId();d&&(d.context="inputs"===h.stage?"s":this.assign(this.nextId(),
+this.getHasOwnProperty("l",a.name)+"?l:s"),d.computed=!1,d.name=a.name);h.if_("inputs"===h.stage||h.not(h.getHasOwnProperty("l",a.name)),function(){h.if_("inputs"===h.stage||"s",function(){e&&1!==e&&h.if_(h.isNull(h.nonComputedMember("s",a.name)),h.lazyAssign(h.nonComputedMember("s",a.name),"{}"));h.assign(b,h.nonComputedMember("s",a.name))})},b&&h.lazyAssign(b,h.nonComputedMember("l",a.name)));c(b);break;case r.MemberExpression:g=d&&(d.context=this.nextId())||this.nextId();b=b||this.nextId();h.recurse(a.object,
+g,void 0,function(){h.if_(h.notNull(g),function(){a.computed?(k=h.nextId(),h.recurse(a.property,k),h.getStringValue(k),e&&1!==e&&h.if_(h.not(h.computedMember(g,k)),h.lazyAssign(h.computedMember(g,k),"{}")),m=h.computedMember(g,k),h.assign(b,m),d&&(d.computed=!0,d.name=k)):(e&&1!==e&&h.if_(h.isNull(h.nonComputedMember(g,a.property.name)),h.lazyAssign(h.nonComputedMember(g,a.property.name),"{}")),m=h.nonComputedMember(g,a.property.name),h.assign(b,m),d&&(d.computed=!1,d.name=a.property.name))},function(){h.assign(b,
+"undefined")});c(b)},!!e);break;case r.CallExpression:b=b||this.nextId();a.filter?(k=h.filter(a.callee.name),l=[],p(a.arguments,function(a){var b=h.nextId();h.recurse(a,b);l.push(b)}),m=k+"("+l.join(",")+")",h.assign(b,m),c(b)):(k=h.nextId(),g={},l=[],h.recurse(a.callee,k,g,function(){h.if_(h.notNull(k),function(){p(a.arguments,function(b){h.recurse(b,a.constant?void 0:h.nextId(),void 0,function(a){l.push(a)})});m=g.name?h.member(g.context,g.name,g.computed)+"("+l.join(",")+")":k+"("+l.join(",")+
+")";h.assign(b,m)},function(){h.assign(b,"undefined")});c(b)}));break;case r.AssignmentExpression:k=this.nextId();g={};this.recurse(a.left,void 0,g,function(){h.if_(h.notNull(g.context),function(){h.recurse(a.right,k);m=h.member(g.context,g.name,g.computed)+a.operator+k;h.assign(b,m);c(b||m)})},1);break;case r.ArrayExpression:l=[];p(a.elements,function(b){h.recurse(b,a.constant?void 0:h.nextId(),void 0,function(a){l.push(a)})});m="["+l.join(",")+"]";this.assign(b,m);c(b||m);break;case r.ObjectExpression:l=
+[];n=!1;p(a.properties,function(a){a.computed&&(n=!0)});n?(b=b||this.nextId(),this.assign(b,"{}"),p(a.properties,function(a){a.computed?(g=h.nextId(),h.recurse(a.key,g)):g=a.key.type===r.Identifier?a.key.name:""+a.key.value;k=h.nextId();h.recurse(a.value,k);h.assign(h.member(b,g,a.computed),k)})):(p(a.properties,function(b){h.recurse(b.value,a.constant?void 0:h.nextId(),void 0,function(a){l.push(h.escape(b.key.type===r.Identifier?b.key.name:""+b.key.value)+":"+a)})}),m="{"+l.join(",")+"}",this.assign(b,
+m));c(b||m);break;case r.ThisExpression:this.assign(b,"s");c(b||"s");break;case r.LocalsExpression:this.assign(b,"l");c(b||"l");break;case r.NGValueParameter:this.assign(b,"v"),c(b||"v")}},getHasOwnProperty:function(a,b){var d=a+"."+b,c=this.current().own;c.hasOwnProperty(d)||(c[d]=this.nextId(!1,a+"&&("+this.escape(b)+" in "+a+")"));return c[d]},assign:function(a,b){if(a)return this.current().body.push(a,"=",b,";"),a},filter:function(a){this.state.filters.hasOwnProperty(a)||(this.state.filters[a]=
+this.nextId(!0));return this.state.filters[a]},ifDefined:function(a,b){return"ifDefined("+a+","+this.escape(b)+")"},plus:function(a,b){return"plus("+a+","+b+")"},return_:function(a){this.current().body.push("return ",a,";")},if_:function(a,b,d){if(!0===a)b();else{var c=this.current().body;c.push("if(",a,"){");b();c.push("}");d&&(c.push("else{"),d(),c.push("}"))}},not:function(a){return"!("+a+")"},isNull:function(a){return a+"==null"},notNull:function(a){return a+"!=null"},nonComputedMember:function(a,
+b){var d=/[^$_a-zA-Z0-9]/g;return/^[$_a-zA-Z][$_a-zA-Z0-9]*$/.test(b)?a+"."+b:a+'["'+b.replace(d,this.stringEscapeFn)+'"]'},computedMember:function(a,b){return a+"["+b+"]"},member:function(a,b,d){return d?this.computedMember(a,b):this.nonComputedMember(a,b)},getStringValue:function(a){this.assign(a,"getStringValue("+a+")")},lazyRecurse:function(a,b,d,c,e,f){var g=this;return function(){g.recurse(a,b,d,c,e,f)}},lazyAssign:function(a,b){var d=this;return function(){d.assign(a,b)}},stringEscapeRegex:/[^ a-zA-Z0-9]/g,
+stringEscapeFn:function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)},escape:function(a){if(C(a))return"'"+a.replace(this.stringEscapeRegex,this.stringEscapeFn)+"'";if(W(a))return a.toString();if(!0===a)return"true";if(!1===a)return"false";if(null===a)return"null";if("undefined"===typeof a)return"undefined";throw Xa("esc");},nextId:function(a,b){var d="v"+this.state.nextId++;a||this.current().vars.push(d+(b?"="+b:""));return d},current:function(){return this.state[this.state.computing]}};
+Ld.prototype={compile:function(a){var b=this;X(a,b.$filter);var d,c;if(d=Jd(a))c=this.recurse(d);d=Hd(a.body);var e;d&&(e=[],p(d,function(a,c){var d=b.recurse(a);d.isPure=a.isPure;a.input=d;e.push(d);a.watchId=c}));var f=[];p(a.body,function(a){f.push(b.recurse(a.expression))});a=0===a.body.length?B:1===a.body.length?f[0]:function(a,b){var c;p(f,function(d){c=d(a,b)});return c};c&&(a.assign=function(a,b,d){return c(a,d,b)});e&&(a.inputs=e);return a},recurse:function(a,b,d){var c,e,f=this,g;if(a.input)return this.inputs(a.input,
+a.watchId);switch(a.type){case r.Literal:return this.value(a.value,b);case r.UnaryExpression:return e=this.recurse(a.argument),this["unary"+a.operator](e,b);case r.BinaryExpression:return c=this.recurse(a.left),e=this.recurse(a.right),this["binary"+a.operator](c,e,b);case r.LogicalExpression:return c=this.recurse(a.left),e=this.recurse(a.right),this["binary"+a.operator](c,e,b);case r.ConditionalExpression:return this["ternary?:"](this.recurse(a.test),this.recurse(a.alternate),this.recurse(a.consequent),
+b);case r.Identifier:return f.identifier(a.name,b,d);case r.MemberExpression:return c=this.recurse(a.object,!1,!!d),a.computed||(e=a.property.name),a.computed&&(e=this.recurse(a.property)),a.computed?this.computedMember(c,e,b,d):this.nonComputedMember(c,e,b,d);case r.CallExpression:return g=[],p(a.arguments,function(a){g.push(f.recurse(a))}),a.filter&&(e=this.$filter(a.callee.name)),a.filter||(e=this.recurse(a.callee,!0)),a.filter?function(a,c,d,f){for(var n=[],q=0;q<g.length;++q)n.push(g[q](a,c,
+d,f));a=e.apply(void 0,n,f);return b?{context:void 0,name:void 0,value:a}:a}:function(a,c,d,f){var n=e(a,c,d,f),q;if(null!=n.value){q=[];for(var p=0;p<g.length;++p)q.push(g[p](a,c,d,f));q=n.value.apply(n.context,q)}return b?{value:q}:q};case r.AssignmentExpression:return c=this.recurse(a.left,!0,1),e=this.recurse(a.right),function(a,d,f,g){var n=c(a,d,f,g);a=e(a,d,f,g);n.context[n.name]=a;return b?{value:a}:a};case r.ArrayExpression:return g=[],p(a.elements,function(a){g.push(f.recurse(a))}),function(a,
+c,d,e){for(var f=[],q=0;q<g.length;++q)f.push(g[q](a,c,d,e));return b?{value:f}:f};case r.ObjectExpression:return g=[],p(a.properties,function(a){a.computed?g.push({key:f.recurse(a.key),computed:!0,value:f.recurse(a.value)}):g.push({key:a.key.type===r.Identifier?a.key.name:""+a.key.value,computed:!1,value:f.recurse(a.value)})}),function(a,c,d,e){for(var f={},q=0;q<g.length;++q)g[q].computed?f[g[q].key(a,c,d,e)]=g[q].value(a,c,d,e):f[g[q].key]=g[q].value(a,c,d,e);return b?{value:f}:f};case r.ThisExpression:return function(a){return b?
+{value:a}:a};case r.LocalsExpression:return function(a,c){return b?{value:c}:c};case r.NGValueParameter:return function(a,c,d){return b?{value:d}:d}}},"unary+":function(a,b){return function(d,c,e,f){d=a(d,c,e,f);d=t(d)?+d:0;return b?{value:d}:d}},"unary-":function(a,b){return function(d,c,e,f){d=a(d,c,e,f);d=t(d)?-d:-0;return b?{value:d}:d}},"unary!":function(a,b){return function(d,c,e,f){d=!a(d,c,e,f);return b?{value:d}:d}},"binary+":function(a,b,d){return function(c,e,f,g){var k=a(c,e,f,g);c=b(c,
+e,f,g);k=Fd(k,c);return d?{value:k}:k}},"binary-":function(a,b,d){return function(c,e,f,g){var k=a(c,e,f,g);c=b(c,e,f,g);k=(t(k)?k:0)-(t(c)?c:0);return d?{value:k}:k}},"binary*":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)*b(c,e,f,g);return d?{value:c}:c}},"binary/":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)/b(c,e,f,g);return d?{value:c}:c}},"binary%":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)%b(c,e,f,g);return d?{value:c}:c}},"binary===":function(a,b,d){return function(c,
+e,f,g){c=a(c,e,f,g)===b(c,e,f,g);return d?{value:c}:c}},"binary!==":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)!==b(c,e,f,g);return d?{value:c}:c}},"binary==":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)==b(c,e,f,g);return d?{value:c}:c}},"binary!=":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)!=b(c,e,f,g);return d?{value:c}:c}},"binary<":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)<b(c,e,f,g);return d?{value:c}:c}},"binary>":function(a,b,d){return function(c,e,
+f,g){c=a(c,e,f,g)>b(c,e,f,g);return d?{value:c}:c}},"binary<=":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)<=b(c,e,f,g);return d?{value:c}:c}},"binary>=":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)>=b(c,e,f,g);return d?{value:c}:c}},"binary&&":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)&&b(c,e,f,g);return d?{value:c}:c}},"binary||":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)||b(c,e,f,g);return d?{value:c}:c}},"ternary?:":function(a,b,d,c){return function(e,f,
+g,k){e=a(e,f,g,k)?b(e,f,g,k):d(e,f,g,k);return c?{value:e}:e}},value:function(a,b){return function(){return b?{context:void 0,name:void 0,value:a}:a}},identifier:function(a,b,d){return function(c,e,f,g){c=e&&a in e?e:c;d&&1!==d&&c&&null==c[a]&&(c[a]={});e=c?c[a]:void 0;return b?{context:c,name:a,value:e}:e}},computedMember:function(a,b,d,c){return function(e,f,g,k){var h=a(e,f,g,k),l,m;null!=h&&(l=b(e,f,g,k),l+="",c&&1!==c&&h&&!h[l]&&(h[l]={}),m=h[l]);return d?{context:h,name:l,value:m}:m}},nonComputedMember:function(a,
+b,d,c){return function(e,f,g,k){e=a(e,f,g,k);c&&1!==c&&e&&null==e[b]&&(e[b]={});f=null!=e?e[b]:void 0;return d?{context:e,name:b,value:f}:f}},inputs:function(a,b){return function(d,c,e,f){return f?f[b]:a(d,c,e)}}};xc.prototype={constructor:xc,parse:function(a){a=this.ast.ast(a);var b=this.astCompiler.compile(a);b.literal=0===a.body.length||1===a.body.length&&(a.body[0].expression.type===r.Literal||a.body[0].expression.type===r.ArrayExpression||a.body[0].expression.type===r.ObjectExpression);b.constant=
+a.constant;return b}};var qa=K("$sce"),ka={HTML:"html",CSS:"css",URL:"url",RESOURCE_URL:"resourceUrl",JS:"js"},Ac=/_([a-z])/g,Hg=K("$compile"),ea=x.document.createElement("a"),Pd=ua(x.location.href);Qd.$inject=["$document"];ed.$inject=["$provide"];var Xd=22,Wd=".",Cc="0";Rd.$inject=["$locale"];Td.$inject=["$locale"];var Sg={yyyy:$("FullYear",4,0,!1,!0),yy:$("FullYear",2,0,!0,!0),y:$("FullYear",1,0,!1,!0),MMMM:ob("Month"),MMM:ob("Month",!0),MM:$("Month",2,1),M:$("Month",1,1),LLLL:ob("Month",!1,!0),
+dd:$("Date",2),d:$("Date",1),HH:$("Hours",2),H:$("Hours",1),hh:$("Hours",2,-12),h:$("Hours",1,-12),mm:$("Minutes",2),m:$("Minutes",1),ss:$("Seconds",2),s:$("Seconds",1),sss:$("Milliseconds",3),EEEE:ob("Day"),EEE:ob("Day",!0),a:function(a,b){return 12>a.getHours()?b.AMPMS[0]:b.AMPMS[1]},Z:function(a,b,d){a=-1*d;return a=(0<=a?"+":"")+(Lb(Math[0<a?"floor":"ceil"](a/60),2)+Lb(Math.abs(a%60),2))},ww:Zd(2),w:Zd(1),G:Dc,GG:Dc,GGG:Dc,GGGG:function(a,b){return 0>=a.getFullYear()?b.ERANAMES[0]:b.ERANAMES[1]}},
+Rg=/((?:[^yMLdHhmsaZEwG']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|L+|d+|H+|h+|m+|s+|a|Z|G+|w+))([\s\S]*)/,Qg=/^-?\d+$/;Sd.$inject=["$locale"];var Lg=aa(N),Mg=aa(wb);Ud.$inject=["$parse"];var Ie=aa({restrict:"E",compile:function(a,b){if(!b.href&&!b.xlinkHref)return function(a,b){if("a"===b[0].nodeName.toLowerCase()){var e="[object SVGAnimatedString]"===la.call(b.prop("href"))?"xlink:href":"href";b.on("click",function(a){b.attr(e)||a.preventDefault()})}}}}),xb={};p(Hb,function(a,b){function d(a,d,e){a.$watch(e[c],
+function(a){e.$set(b,!!a)})}if("multiple"!==a){var c=Ea("ng-"+b),e=d;"checked"===a&&(e=function(a,b,e){e.ngModel!==e[c]&&d(a,b,e)});xb[c]=function(){return{restrict:"A",priority:100,link:e}}}});p(td,function(a,b){xb[b]=function(){return{priority:100,link:function(a,c,e){if("ngPattern"===b&&"/"===e.ngPattern.charAt(0)&&(c=e.ngPattern.match(Wg))){e.$set("ngPattern",new RegExp(c[1],c[2]));return}a.$watch(e[b],function(a){e.$set(b,a)})}}}});p(["src","srcset","href"],function(a){var b=Ea("ng-"+a);xb[b]=
+function(){return{priority:99,link:function(d,c,e){var f=a,g=a;"href"===a&&"[object SVGAnimatedString]"===la.call(c.prop("href"))&&(g="xlinkHref",e.$attr[g]="xlink:href",f=null);e.$observe(b,function(b){b?(e.$set(g,b),Ba&&f&&c.prop(f,e[g])):"href"===a&&e.$set(g,null)})}}}});var Nb={$addControl:B,$$renameControl:function(a,b){a.$name=b},$removeControl:B,$setValidity:B,$setDirty:B,$setPristine:B,$setSubmitted:B};Mb.$inject=["$element","$attrs","$scope","$animate","$interpolate"];Mb.prototype={$rollbackViewValue:function(){p(this.$$controls,
+function(a){a.$rollbackViewValue()})},$commitViewValue:function(){p(this.$$controls,function(a){a.$commitViewValue()})},$addControl:function(a){Oa(a.$name,"input");this.$$controls.push(a);a.$name&&(this[a.$name]=a);a.$$parentForm=this},$$renameControl:function(a,b){var d=a.$name;this[d]===a&&delete this[d];this[b]=a;a.$name=b},$removeControl:function(a){a.$name&&this[a.$name]===a&&delete this[a.$name];p(this.$pending,function(b,d){this.$setValidity(d,null,a)},this);p(this.$error,function(b,d){this.$setValidity(d,
+null,a)},this);p(this.$$success,function(b,d){this.$setValidity(d,null,a)},this);cb(this.$$controls,a);a.$$parentForm=Nb},$setDirty:function(){this.$$animate.removeClass(this.$$element,Ya);this.$$animate.addClass(this.$$element,Sb);this.$dirty=!0;this.$pristine=!1;this.$$parentForm.$setDirty()},$setPristine:function(){this.$$animate.setClass(this.$$element,Ya,Sb+" ng-submitted");this.$dirty=!1;this.$pristine=!0;this.$submitted=!1;p(this.$$controls,function(a){a.$setPristine()})},$setUntouched:function(){p(this.$$controls,
+function(a){a.$setUntouched()})},$setSubmitted:function(){this.$$animate.addClass(this.$$element,"ng-submitted");this.$submitted=!0;this.$$parentForm.$setSubmitted()}};be({clazz:Mb,set:function(a,b,d){var c=a[b];c?-1===c.indexOf(d)&&c.push(d):a[b]=[d]},unset:function(a,b,d){var c=a[b];c&&(cb(c,d),0===c.length&&delete a[b])}});var je=function(a){return["$timeout","$parse",function(b,d){function c(a){return""===a?d('this[""]').assign:d(a).assign||B}return{name:"form",restrict:a?"EAC":"E",require:["form",
+"^^?form"],controller:Mb,compile:function(d,f){d.addClass(Ya).addClass(pb);var g=f.name?"name":a&&f.ngForm?"ngForm":!1;return{pre:function(a,d,e,f){var n=f[0];if(!("action"in e)){var q=function(b){a.$apply(function(){n.$commitViewValue();n.$setSubmitted()});b.preventDefault()};d[0].addEventListener("submit",q);d.on("$destroy",function(){b(function(){d[0].removeEventListener("submit",q)},0,!1)})}(f[1]||n.$$parentForm).$addControl(n);var p=g?c(n.$name):B;g&&(p(a,n),e.$observe(g,function(b){n.$name!==
+b&&(p(a,void 0),n.$$parentForm.$$renameControl(n,b),p=c(n.$name),p(a,n))}));d.on("$destroy",function(){n.$$parentForm.$removeControl(n);p(a,void 0);O(n,Nb)})}}}}}]},Je=je(),Ve=je(!0),Tg=/^\d{4,}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+(?:[+-][0-2]\d:[0-5]\d|Z)$/,eh=/^[a-z][a-z\d.+-]*:\/*(?:[^:@]+(?::[^@]+)?@)?(?:[^\s:/?#]+|\[[a-f\d:]+])(?::\d+)?(?:\/[^?#]*)?(?:\?[^#]*)?(?:#.*)?$/i,fh=/^(?=.{1,254}$)(?=.{1,64}@)[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+(\.[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+)*@[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?(\.[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?)*$/,
+Ug=/^\s*(-|\+)?(\d+|(\d*(\.\d*)))([eE][+-]?\d+)?\s*$/,ke=/^(\d{4,})-(\d{2})-(\d{2})$/,le=/^(\d{4,})-(\d\d)-(\d\d)T(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,Kc=/^(\d{4,})-W(\d\d)$/,me=/^(\d{4,})-(\d\d)$/,ne=/^(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,de=R();p(["date","datetime-local","month","time","week"],function(a){de[a]=!0});var oe={text:function(a,b,d,c,e,f){Va(a,b,d,c,e,f);Fc(c)},date:qb("date",ke,Ob(ke,["yyyy","MM","dd"]),"yyyy-MM-dd"),"datetime-local":qb("datetimelocal",le,Ob(le,"yyyy MM dd HH mm ss sss".split(" ")),
+"yyyy-MM-ddTHH:mm:ss.sss"),time:qb("time",ne,Ob(ne,["HH","mm","ss","sss"]),"HH:mm:ss.sss"),week:qb("week",Kc,function(a,b){if(ia(a))return a;if(C(a)){Kc.lastIndex=0;var d=Kc.exec(a);if(d){var c=+d[1],e=+d[2],f=d=0,g=0,k=0,h=Yd(c),e=7*(e-1);b&&(d=b.getHours(),f=b.getMinutes(),g=b.getSeconds(),k=b.getMilliseconds());return new Date(c,0,h.getDate()+e,d,f,g,k)}}return NaN},"yyyy-Www"),month:qb("month",me,Ob(me,["yyyy","MM"]),"yyyy-MM"),number:function(a,b,d,c,e,f){Gc(a,b,d,c);ee(c);Va(a,b,d,c,e,f);var g,
+k;if(t(d.min)||d.ngMin)c.$validators.min=function(a){return c.$isEmpty(a)||v(g)||a>=g},d.$observe("min",function(a){g=Wa(a);c.$validate()});if(t(d.max)||d.ngMax)c.$validators.max=function(a){return c.$isEmpty(a)||v(k)||a<=k},d.$observe("max",function(a){k=Wa(a);c.$validate()});if(t(d.step)||d.ngStep){var h;c.$validators.step=function(a,b){return c.$isEmpty(b)||v(h)||fe(b,g||0,h)};d.$observe("step",function(a){h=Wa(a);c.$validate()})}},url:function(a,b,d,c,e,f){Va(a,b,d,c,e,f);Fc(c);c.$$parserName=
+"url";c.$validators.url=function(a,b){var d=a||b;return c.$isEmpty(d)||eh.test(d)}},email:function(a,b,d,c,e,f){Va(a,b,d,c,e,f);Fc(c);c.$$parserName="email";c.$validators.email=function(a,b){var d=a||b;return c.$isEmpty(d)||fh.test(d)}},radio:function(a,b,d,c){var e=!d.ngTrim||"false"!==P(d.ngTrim);v(d.name)&&b.attr("name",++sb);b.on("click",function(a){var g;b[0].checked&&(g=d.value,e&&(g=P(g)),c.$setViewValue(g,a&&a.type))});c.$render=function(){var a=d.value;e&&(a=P(a));b[0].checked=a===c.$viewValue};
+d.$observe("value",c.$render)},range:function(a,b,d,c,e,f){function g(a,c){b.attr(a,d[a]);d.$observe(a,c)}function k(a){n=Wa(a);ba(c.$modelValue)||(m?(a=b.val(),n>a&&(a=n,b.val(a)),c.$setViewValue(a)):c.$validate())}function h(a){q=Wa(a);ba(c.$modelValue)||(m?(a=b.val(),q<a&&(b.val(q),a=q<n?n:q),c.$setViewValue(a)):c.$validate())}function l(a){p=Wa(a);ba(c.$modelValue)||(m&&c.$viewValue!==b.val()?c.$setViewValue(b.val()):c.$validate())}Gc(a,b,d,c);ee(c);Va(a,b,d,c,e,f);var m=c.$$hasNativeValidators&&
+"range"===b[0].type,n=m?0:void 0,q=m?100:void 0,p=m?1:void 0,r=b[0].validity;a=t(d.min);e=t(d.max);f=t(d.step);var w=c.$render;c.$render=m&&t(r.rangeUnderflow)&&t(r.rangeOverflow)?function(){w();c.$setViewValue(b.val())}:w;a&&(c.$validators.min=m?function(){return!0}:function(a,b){return c.$isEmpty(b)||v(n)||b>=n},g("min",k));e&&(c.$validators.max=m?function(){return!0}:function(a,b){return c.$isEmpty(b)||v(q)||b<=q},g("max",h));f&&(c.$validators.step=m?function(){return!r.stepMismatch}:function(a,
+b){return c.$isEmpty(b)||v(p)||fe(b,n||0,p)},g("step",l))},checkbox:function(a,b,d,c,e,f,g,k){var h=ge(k,a,"ngTrueValue",d.ngTrueValue,!0),l=ge(k,a,"ngFalseValue",d.ngFalseValue,!1);b.on("click",function(a){c.$setViewValue(b[0].checked,a&&a.type)});c.$render=function(){b[0].checked=c.$viewValue};c.$isEmpty=function(a){return!1===a};c.$formatters.push(function(a){return sa(a,h)});c.$parsers.push(function(a){return a?h:l})},hidden:B,button:B,submit:B,reset:B,file:B},Zc=["$browser","$sniffer","$filter",
+"$parse",function(a,b,d,c){return{restrict:"E",require:["?ngModel"],link:{pre:function(e,f,g,k){k[0]&&(oe[N(g.type)]||oe.text)(e,f,g,k[0],b,a,d,c)}}}}],gh=/^(true|false|\d+)$/,nf=function(){function a(a,d,c){var e=t(c)?c:9===Ba?"":null;a.prop("value",e);d.$set("value",c)}return{restrict:"A",priority:100,compile:function(b,d){return gh.test(d.ngValue)?function(b,d,f){b=b.$eval(f.ngValue);a(d,f,b)}:function(b,d,f){b.$watch(f.ngValue,function(b){a(d,f,b)})}}}},Ne=["$compile",function(a){return{restrict:"AC",
+compile:function(b){a.$$addBindingClass(b);return function(b,c,e){a.$$addBindingInfo(c,e.ngBind);c=c[0];b.$watch(e.ngBind,function(a){c.textContent=cc(a)})}}}}],Pe=["$interpolate","$compile",function(a,b){return{compile:function(d){b.$$addBindingClass(d);return function(c,d,f){c=a(d.attr(f.$attr.ngBindTemplate));b.$$addBindingInfo(d,c.expressions);d=d[0];f.$observe("ngBindTemplate",function(a){d.textContent=v(a)?"":a})}}}}],Oe=["$sce","$parse","$compile",function(a,b,d){return{restrict:"A",compile:function(c,
+e){var f=b(e.ngBindHtml),g=b(e.ngBindHtml,function(b){return a.valueOf(b)});d.$$addBindingClass(c);return function(b,c,e){d.$$addBindingInfo(c,e.ngBindHtml);b.$watch(g,function(){var d=f(b);c.html(a.getTrustedHtml(d)||"")})}}}}],mf=aa({restrict:"A",require:"ngModel",link:function(a,b,d,c){c.$viewChangeListeners.push(function(){a.$eval(d.ngChange)})}}),Qe=Ic("",!0),Se=Ic("Odd",0),Re=Ic("Even",1),Te=Ua({compile:function(a,b){b.$set("ngCloak",void 0);a.removeClass("ng-cloak")}}),Ue=[function(){return{restrict:"A",
+scope:!0,controller:"@",priority:500}}],dd={},hh={blur:!0,focus:!0};p("click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste".split(" "),function(a){var b=Ea("ng-"+a);dd[b]=["$parse","$rootScope",function(d,c){return{restrict:"A",compile:function(e,f){var g=d(f[b]);return function(b,d){d.on(a,function(d){var e=function(){g(b,{$event:d})};hh[a]&&c.$$phase?b.$evalAsync(e):b.$apply(e)})}}}}]});var Xe=["$animate","$compile",
+function(a,b){return{multiElement:!0,transclude:"element",priority:600,terminal:!0,restrict:"A",$$tlb:!0,link:function(d,c,e,f,g){var k,h,l;d.$watch(e.ngIf,function(d){d?h||g(function(d,f){h=f;d[d.length++]=b.$$createComment("end ngIf",e.ngIf);k={clone:d};a.enter(d,c.parent(),c)}):(l&&(l.remove(),l=null),h&&(h.$destroy(),h=null),k&&(l=vb(k.clone),a.leave(l).done(function(a){!1!==a&&(l=null)}),k=null))})}}}],Ye=["$templateRequest","$anchorScroll","$animate",function(a,b,d){return{restrict:"ECA",priority:400,
+terminal:!0,transclude:"element",controller:fa.noop,compile:function(c,e){var f=e.ngInclude||e.src,g=e.onload||"",k=e.autoscroll;return function(c,e,m,n,q){var p=0,r,w,u,A=function(){w&&(w.remove(),w=null);r&&(r.$destroy(),r=null);u&&(d.leave(u).done(function(a){!1!==a&&(w=null)}),w=u,u=null)};c.$watch(f,function(f){var m=function(a){!1===a||!t(k)||k&&!c.$eval(k)||b()},y=++p;f?(a(f,!0).then(function(a){if(!c.$$destroyed&&y===p){var b=c.$new();n.template=a;a=q(b,function(a){A();d.enter(a,null,e).done(m)});
+r=b;u=a;r.$emit("$includeContentLoaded",f);c.$eval(g)}},function(){c.$$destroyed||y!==p||(A(),c.$emit("$includeContentError",f))}),c.$emit("$includeContentRequested",f)):(A(),n.template=null)})}}}}],pf=["$compile",function(a){return{restrict:"ECA",priority:-400,require:"ngInclude",link:function(b,d,c,e){la.call(d[0]).match(/SVG/)?(d.empty(),a(fd(e.template,x.document).childNodes)(b,function(a){d.append(a)},{futureParentElement:d})):(d.html(e.template),a(d.contents())(b))}}}],Ze=Ua({priority:450,compile:function(){return{pre:function(a,
+b,d){a.$eval(d.ngInit)}}}}),lf=function(){return{restrict:"A",priority:100,require:"ngModel",link:function(a,b,d,c){var e=d.ngList||", ",f="false"!==d.ngTrim,g=f?P(e):e;c.$parsers.push(function(a){if(!v(a)){var b=[];a&&p(a.split(g),function(a){a&&b.push(f?P(a):a)});return b}});c.$formatters.push(function(a){if(I(a))return a.join(e)});c.$isEmpty=function(a){return!a||!a.length}}}},pb="ng-valid",ae="ng-invalid",Ya="ng-pristine",Sb="ng-dirty",rb=K("ngModel");Pb.$inject="$scope $exceptionHandler $attrs $element $parse $animate $timeout $q $interpolate".split(" ");
+Pb.prototype={$$initGetterSetters:function(){if(this.$options.getOption("getterSetter")){var a=this.$$parse(this.$$attr.ngModel+"()"),b=this.$$parse(this.$$attr.ngModel+"($$$p)");this.$$ngModelGet=function(b){var c=this.$$parsedNgModel(b);E(c)&&(c=a(b));return c};this.$$ngModelSet=function(a,c){E(this.$$parsedNgModel(a))?b(a,{$$$p:c}):this.$$parsedNgModelAssign(a,c)}}else if(!this.$$parsedNgModel.assign)throw rb("nonassign",this.$$attr.ngModel,Aa(this.$$element));},$render:B,$isEmpty:function(a){return v(a)||
+""===a||null===a||a!==a},$$updateEmptyClasses:function(a){this.$isEmpty(a)?(this.$$animate.removeClass(this.$$element,"ng-not-empty"),this.$$animate.addClass(this.$$element,"ng-empty")):(this.$$animate.removeClass(this.$$element,"ng-empty"),this.$$animate.addClass(this.$$element,"ng-not-empty"))},$setPristine:function(){this.$dirty=!1;this.$pristine=!0;this.$$animate.removeClass(this.$$element,Sb);this.$$animate.addClass(this.$$element,Ya)},$setDirty:function(){this.$dirty=!0;this.$pristine=!1;this.$$animate.removeClass(this.$$element,
+Ya);this.$$animate.addClass(this.$$element,Sb);this.$$parentForm.$setDirty()},$setUntouched:function(){this.$touched=!1;this.$untouched=!0;this.$$animate.setClass(this.$$element,"ng-untouched","ng-touched")},$setTouched:function(){this.$touched=!0;this.$untouched=!1;this.$$animate.setClass(this.$$element,"ng-touched","ng-untouched")},$rollbackViewValue:function(){this.$$timeout.cancel(this.$$pendingDebounce);this.$viewValue=this.$$lastCommittedViewValue;this.$render()},$validate:function(){if(!ba(this.$modelValue)){var a=
+this.$$lastCommittedViewValue,b=this.$$rawModelValue,d=this.$valid,c=this.$modelValue,e=this.$options.getOption("allowInvalid"),f=this;this.$$runValidators(b,a,function(a){e||d===a||(f.$modelValue=a?b:void 0,f.$modelValue!==c&&f.$$writeModelToScope())})}},$$runValidators:function(a,b,d){function c(){var c=!0;p(h.$validators,function(d,e){var g=Boolean(d(a,b));c=c&&g;f(e,g)});return c?!0:(p(h.$asyncValidators,function(a,b){f(b,null)}),!1)}function e(){var c=[],d=!0;p(h.$asyncValidators,function(e,
+g){var h=e(a,b);if(!h||!E(h.then))throw rb("nopromise",h);f(g,void 0);c.push(h.then(function(){f(g,!0)},function(){d=!1;f(g,!1)}))});c.length?h.$$q.all(c).then(function(){g(d)},B):g(!0)}function f(a,b){k===h.$$currentValidationRunId&&h.$setValidity(a,b)}function g(a){k===h.$$currentValidationRunId&&d(a)}this.$$currentValidationRunId++;var k=this.$$currentValidationRunId,h=this;(function(){var a=h.$$parserName||"parse";if(v(h.$$parserValid))f(a,null);else return h.$$parserValid||(p(h.$validators,function(a,
+b){f(b,null)}),p(h.$asyncValidators,function(a,b){f(b,null)})),f(a,h.$$parserValid),h.$$parserValid;return!0})()?c()?e():g(!1):g(!1)},$commitViewValue:function(){var a=this.$viewValue;this.$$timeout.cancel(this.$$pendingDebounce);if(this.$$lastCommittedViewValue!==a||""===a&&this.$$hasNativeValidators)this.$$updateEmptyClasses(a),this.$$lastCommittedViewValue=a,this.$pristine&&this.$setDirty(),this.$$parseAndValidate()},$$parseAndValidate:function(){var a=this.$$lastCommittedViewValue,b=this;if(this.$$parserValid=
+v(a)?void 0:!0)for(var d=0;d<this.$parsers.length;d++)if(a=this.$parsers[d](a),v(a)){this.$$parserValid=!1;break}ba(this.$modelValue)&&(this.$modelValue=this.$$ngModelGet(this.$$scope));var c=this.$modelValue,e=this.$options.getOption("allowInvalid");this.$$rawModelValue=a;e&&(this.$modelValue=a,b.$modelValue!==c&&b.$$writeModelToScope());this.$$runValidators(a,this.$$lastCommittedViewValue,function(d){e||(b.$modelValue=d?a:void 0,b.$modelValue!==c&&b.$$writeModelToScope())})},$$writeModelToScope:function(){this.$$ngModelSet(this.$$scope,
+this.$modelValue);p(this.$viewChangeListeners,function(a){try{a()}catch(b){this.$$exceptionHandler(b)}},this)},$setViewValue:function(a,b){this.$viewValue=a;this.$options.getOption("updateOnDefault")&&this.$$debounceViewValueCommit(b)},$$debounceViewValueCommit:function(a){var b=this.$options.getOption("debounce");W(b[a])?b=b[a]:W(b["default"])&&(b=b["default"]);this.$$timeout.cancel(this.$$pendingDebounce);var d=this;0<b?this.$$pendingDebounce=this.$$timeout(function(){d.$commitViewValue()},b):this.$$scope.$root.$$phase?
+this.$commitViewValue():this.$$scope.$apply(function(){d.$commitViewValue()})},$overrideModelOptions:function(a){this.$options=this.$options.createChild(a)}};be({clazz:Pb,set:function(a,b){a[b]=!0},unset:function(a,b){delete a[b]}});var kf=["$rootScope",function(a){return{restrict:"A",require:["ngModel","^?form","^?ngModelOptions"],controller:Pb,priority:1,compile:function(b){b.addClass(Ya).addClass("ng-untouched").addClass(pb);return{pre:function(a,b,e,f){var g=f[0];b=f[1]||g.$$parentForm;if(f=f[2])g.$options=
+f.$options;g.$$initGetterSetters();b.$addControl(g);e.$observe("name",function(a){g.$name!==a&&g.$$parentForm.$$renameControl(g,a)});a.$on("$destroy",function(){g.$$parentForm.$removeControl(g)})},post:function(b,c,e,f){function g(){k.$setTouched()}var k=f[0];if(k.$options.getOption("updateOn"))c.on(k.$options.getOption("updateOn"),function(a){k.$$debounceViewValueCommit(a&&a.type)});c.on("blur",function(){k.$touched||(a.$$phase?b.$evalAsync(g):b.$apply(g))})}}}}}],Qb,ih=/(\s+|^)default(\s+|$)/;Jc.prototype=
+{getOption:function(a){return this.$$options[a]},createChild:function(a){var b=!1;a=O({},a);p(a,function(d,c){"$inherit"===d?"*"===c?b=!0:(a[c]=this.$$options[c],"updateOn"===c&&(a.updateOnDefault=this.$$options.updateOnDefault)):"updateOn"===c&&(a.updateOnDefault=!1,a[c]=P(d.replace(ih,function(){a.updateOnDefault=!0;return" "})))},this);b&&(delete a["*"],he(a,this.$$options));he(a,Qb.$$options);return new Jc(a)}};Qb=new Jc({updateOn:"",updateOnDefault:!0,debounce:0,getterSetter:!1,allowInvalid:!1,
+timezone:null});var of=function(){function a(a,d){this.$$attrs=a;this.$$scope=d}a.$inject=["$attrs","$scope"];a.prototype={$onInit:function(){var a=this.parentCtrl?this.parentCtrl.$options:Qb,d=this.$$scope.$eval(this.$$attrs.ngModelOptions);this.$options=a.createChild(d)}};return{restrict:"A",priority:10,require:{parentCtrl:"?^^ngModelOptions"},bindToController:!0,controller:a}},$e=Ua({terminal:!0,priority:1E3}),jh=K("ngOptions"),kh=/^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+group\s+by\s+([\s\S]+?))?(?:\s+disable\s+when\s+([\s\S]+?))?\s+for\s+(?:([$\w][$\w]*)|(?:\(\s*([$\w][$\w]*)\s*,\s*([$\w][$\w]*)\s*\)))\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?$/,
+hf=["$compile","$document","$parse",function(a,b,d){function c(a,b,c){function e(a,b,c,d,f){this.selectValue=a;this.viewValue=b;this.label=c;this.group=d;this.disabled=f}function f(a){var b;if(!p&&oa(a))b=a;else{b=[];for(var c in a)a.hasOwnProperty(c)&&"$"!==c.charAt(0)&&b.push(c)}return b}var n=a.match(kh);if(!n)throw jh("iexp",a,Aa(b));var q=n[5]||n[7],p=n[6];a=/ as /.test(n[0])&&n[1];var r=n[9];b=d(n[2]?n[1]:q);var w=a&&d(a)||b,t=r&&d(r),A=r?function(a,b){return t(c,b)}:function(a){return Sa(a)},
+v=function(a,b){return A(a,z(a,b))},s=d(n[2]||n[1]),y=d(n[3]||""),D=d(n[4]||""),H=d(n[8]),x={},z=p?function(a,b){x[p]=b;x[q]=a;return x}:function(a){x[q]=a;return x};return{trackBy:r,getTrackByValue:v,getWatchables:d(H,function(a){var b=[];a=a||[];for(var d=f(a),e=d.length,g=0;g<e;g++){var k=a===d?g:d[g],l=a[k],k=z(l,k),l=A(l,k);b.push(l);if(n[2]||n[1])l=s(c,k),b.push(l);n[4]&&(k=D(c,k),b.push(k))}return b}),getOptions:function(){for(var a=[],b={},d=H(c)||[],g=f(d),k=g.length,n=0;n<k;n++){var q=d===
+g?n:g[n],p=z(d[q],q),t=w(c,p),q=A(t,p),u=s(c,p),F=y(c,p),p=D(c,p),t=new e(q,t,u,F,p);a.push(t);b[q]=t}return{items:a,selectValueMap:b,getOptionFromViewValue:function(a){return b[v(a)]},getViewValueFromOption:function(a){return r?Ia(a.viewValue):a.viewValue}}}}}var e=x.document.createElement("option"),f=x.document.createElement("optgroup");return{restrict:"A",terminal:!0,require:["select","ngModel"],link:{pre:function(a,b,c,d){d[0].registerOption=B},post:function(d,k,h,l){function m(a){var b=(a=A.getOptionFromViewValue(a))&&
+a.element;b&&!b.selected&&(b.selected=!0);return a}function n(a,b){a.element=b;b.disabled=a.disabled;a.label!==b.label&&(b.label=a.label,b.textContent=a.label);b.value=a.selectValue}var q=l[0],r=l[1],v=h.multiple;l=0;for(var w=k.children(),u=w.length;l<u;l++)if(""===w[l].value){q.hasEmptyOption=!0;q.emptyOption=w.eq(l);break}k.empty();l=!!q.emptyOption;z(e.cloneNode(!1)).val("?");var A,x=c(h.ngOptions,k,d),s=b[0].createDocumentFragment();q.generateUnknownOptionValue=function(a){return"?"};v?(q.writeValue=
+function(a){if(A){var b=a&&a.map(m)||[];A.items.forEach(function(a){a.element.selected&&-1===Array.prototype.indexOf.call(b,a)&&(a.element.selected=!1)})}},q.readValue=function(){var a=k.val()||[],b=[];p(a,function(a){(a=A.selectValueMap[a])&&!a.disabled&&b.push(A.getViewValueFromOption(a))});return b},x.trackBy&&d.$watchCollection(function(){if(I(r.$viewValue))return r.$viewValue.map(function(a){return x.getTrackByValue(a)})},function(){r.$render()})):(q.writeValue=function(a){if(A){var b=k[0].options[k[0].selectedIndex],
+c=A.getOptionFromViewValue(a);b&&b.removeAttribute("selected");c?(k[0].value!==c.selectValue&&(q.removeUnknownOption(),k[0].value=c.selectValue,c.element.selected=!0),c.element.setAttribute("selected","selected")):q.selectUnknownOrEmptyOption(a)}},q.readValue=function(){var a=A.selectValueMap[k.val()];return a&&!a.disabled?(q.unselectEmptyOption(),q.removeUnknownOption(),A.getViewValueFromOption(a)):null},x.trackBy&&d.$watch(function(){return x.getTrackByValue(r.$viewValue)},function(){r.$render()}));
+l&&(a(q.emptyOption)(d),k.prepend(q.emptyOption),8===q.emptyOption[0].nodeType?(q.hasEmptyOption=!1,q.registerOption=function(a,b){""===b.val()&&(q.hasEmptyOption=!0,q.emptyOption=b,q.emptyOption.removeClass("ng-scope"),r.$render(),b.on("$destroy",function(){var a=q.$isEmptyOptionSelected();q.hasEmptyOption=!1;q.emptyOption=void 0;a&&r.$render()}))}):q.emptyOption.removeClass("ng-scope"));d.$watchCollection(x.getWatchables,function(){var a=A&&q.readValue();if(A)for(var b=A.items.length-1;0<=b;b--){var c=
+A.items[b];t(c.group)?Gb(c.element.parentNode):Gb(c.element)}A=x.getOptions();var d={};A.items.forEach(function(a){var b;if(t(a.group)){b=d[a.group];b||(b=f.cloneNode(!1),s.appendChild(b),b.label=null===a.group?"null":a.group,d[a.group]=b);var c=e.cloneNode(!1);b.appendChild(c);n(a,c)}else b=e.cloneNode(!1),s.appendChild(b),n(a,b)});k[0].appendChild(s);r.$render();r.$isEmpty(a)||(b=q.readValue(),(x.trackBy||v?sa(a,b):a===b)||(r.$setViewValue(b),r.$render()))})}}}}],af=["$locale","$interpolate","$log",
+function(a,b,d){var c=/{}/g,e=/^when(Minus)?(.+)$/;return{link:function(f,g,k){function h(a){g.text(a||"")}var l=k.count,m=k.$attr.when&&g.attr(k.$attr.when),n=k.offset||0,q=f.$eval(m)||{},r={},t=b.startSymbol(),w=b.endSymbol(),u=t+l+"-"+n+w,A=fa.noop,x;p(k,function(a,b){var c=e.exec(b);c&&(c=(c[1]?"-":"")+N(c[2]),q[c]=g.attr(k.$attr[b]))});p(q,function(a,d){r[d]=b(a.replace(c,u))});f.$watch(l,function(b){var c=parseFloat(b),e=ba(c);e||c in q||(c=a.pluralCat(c-n));c===x||e&&ba(x)||(A(),e=r[c],v(e)?
+(null!=b&&d.debug("ngPluralize: no rule defined for '"+c+"' in "+m),A=B,h()):A=f.$watch(e,h),x=c)})}}}],bf=["$parse","$animate","$compile",function(a,b,d){var c=K("ngRepeat"),e=function(a,b,c,d,e,m,n){a[c]=d;e&&(a[e]=m);a.$index=b;a.$first=0===b;a.$last=b===n-1;a.$middle=!(a.$first||a.$last);a.$odd=!(a.$even=0===(b&1))};return{restrict:"A",multiElement:!0,transclude:"element",priority:1E3,terminal:!0,$$tlb:!0,compile:function(f,g){var k=g.ngRepeat,h=d.$$createComment("end ngRepeat",k),l=k.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+track\s+by\s+([\s\S]+?))?\s*$/);
+if(!l)throw c("iexp",k);var m=l[1],n=l[2],q=l[3],r=l[4],l=m.match(/^(?:(\s*[$\w]+)|\(\s*([$\w]+)\s*,\s*([$\w]+)\s*\))$/);if(!l)throw c("iidexp",m);var t=l[3]||l[1],w=l[2];if(q&&(!/^[$a-zA-Z_][$a-zA-Z0-9_]*$/.test(q)||/^(null|undefined|this|\$index|\$first|\$middle|\$last|\$even|\$odd|\$parent|\$root|\$id)$/.test(q)))throw c("badident",q);var u,v,x,s,y={$id:Sa};r?u=a(r):(x=function(a,b){return Sa(b)},s=function(a){return a});return function(a,d,f,g,l){u&&(v=function(b,c,d){w&&(y[w]=b);y[t]=c;y.$index=
+d;return u(a,y)});var m=R();a.$watchCollection(n,function(f){var g,n,r=d[0],u,y=R(),F,z,E,B,G,C,I;q&&(a[q]=f);if(oa(f))G=f,n=v||x;else for(I in n=v||s,G=[],f)wa.call(f,I)&&"$"!==I.charAt(0)&&G.push(I);F=G.length;I=Array(F);for(g=0;g<F;g++)if(z=f===G?g:G[g],E=f[z],B=n(z,E,g),m[B])C=m[B],delete m[B],y[B]=C,I[g]=C;else{if(y[B])throw p(I,function(a){a&&a.scope&&(m[a.id]=a)}),c("dupes",k,B,E);I[g]={id:B,scope:void 0,clone:void 0};y[B]=!0}for(u in m){C=m[u];B=vb(C.clone);b.leave(B);if(B[0].parentNode)for(g=
+0,n=B.length;g<n;g++)B[g].$$NG_REMOVED=!0;C.scope.$destroy()}for(g=0;g<F;g++)if(z=f===G?g:G[g],E=f[z],C=I[g],C.scope){u=r;do u=u.nextSibling;while(u&&u.$$NG_REMOVED);C.clone[0]!==u&&b.move(vb(C.clone),null,r);r=C.clone[C.clone.length-1];e(C.scope,g,t,E,w,z,F)}else l(function(a,c){C.scope=c;var d=h.cloneNode(!1);a[a.length++]=d;b.enter(a,null,r);r=d;C.clone=a;y[C.id]=C;e(C.scope,g,t,E,w,z,F)});m=y})}}}}],cf=["$animate",function(a){return{restrict:"A",multiElement:!0,link:function(b,d,c){b.$watch(c.ngShow,
+function(b){a[b?"removeClass":"addClass"](d,"ng-hide",{tempClasses:"ng-hide-animate"})})}}}],We=["$animate",function(a){return{restrict:"A",multiElement:!0,link:function(b,d,c){b.$watch(c.ngHide,function(b){a[b?"addClass":"removeClass"](d,"ng-hide",{tempClasses:"ng-hide-animate"})})}}}],df=Ua(function(a,b,d){a.$watch(d.ngStyle,function(a,d){d&&a!==d&&p(d,function(a,c){b.css(c,"")});a&&b.css(a)},!0)}),ef=["$animate","$compile",function(a,b){return{require:"ngSwitch",controller:["$scope",function(){this.cases=
+{}}],link:function(d,c,e,f){var g=[],k=[],h=[],l=[],m=function(a,b){return function(c){!1!==c&&a.splice(b,1)}};d.$watch(e.ngSwitch||e.on,function(c){for(var d,e;h.length;)a.cancel(h.pop());d=0;for(e=l.length;d<e;++d){var r=vb(k[d].clone);l[d].$destroy();(h[d]=a.leave(r)).done(m(h,d))}k.length=0;l.length=0;(g=f.cases["!"+c]||f.cases["?"])&&p(g,function(c){c.transclude(function(d,e){l.push(e);var f=c.element;d[d.length++]=b.$$createComment("end ngSwitchWhen");k.push({clone:d});a.enter(d,f.parent(),
+f)})})})}}}],ff=Ua({transclude:"element",priority:1200,require:"^ngSwitch",multiElement:!0,link:function(a,b,d,c,e){a=d.ngSwitchWhen.split(d.ngSwitchWhenSeparator).sort().filter(function(a,b,c){return c[b-1]!==a});p(a,function(a){c.cases["!"+a]=c.cases["!"+a]||[];c.cases["!"+a].push({transclude:e,element:b})})}}),gf=Ua({transclude:"element",priority:1200,require:"^ngSwitch",multiElement:!0,link:function(a,b,d,c,e){c.cases["?"]=c.cases["?"]||[];c.cases["?"].push({transclude:e,element:b})}}),lh=K("ngTransclude"),
+jf=["$compile",function(a){return{restrict:"EAC",terminal:!0,compile:function(b){var d=a(b.contents());b.empty();return function(a,b,f,g,k){function h(){d(a,function(a){b.append(a)})}if(!k)throw lh("orphan",Aa(b));f.ngTransclude===f.$attr.ngTransclude&&(f.ngTransclude="");f=f.ngTransclude||f.ngTranscludeSlot;k(function(a,c){var d;if(d=a.length)a:{d=0;for(var f=a.length;d<f;d++){var g=a[d];if(g.nodeType!==Ma||g.nodeValue.trim()){d=!0;break a}}d=void 0}d?b.append(a):(h(),c.$destroy())},null,f);f&&!k.isSlotFilled(f)&&
+h()}}}}],Ke=["$templateCache",function(a){return{restrict:"E",terminal:!0,compile:function(b,d){"text/ng-template"===d.type&&a.put(d.id,b[0].text)}}}],mh={$setViewValue:B,$render:B},nh=["$element","$scope",function(a,b){function d(){g||(g=!0,b.$$postDigest(function(){g=!1;e.ngModelCtrl.$render()}))}function c(a){k||(k=!0,b.$$postDigest(function(){b.$$destroyed||(k=!1,e.ngModelCtrl.$setViewValue(e.readValue()),a&&e.ngModelCtrl.$render())}))}var e=this,f=new Ib;e.selectValueMap={};e.ngModelCtrl=mh;
+e.multiple=!1;e.unknownOption=z(x.document.createElement("option"));e.hasEmptyOption=!1;e.emptyOption=void 0;e.renderUnknownOption=function(b){b=e.generateUnknownOptionValue(b);e.unknownOption.val(b);a.prepend(e.unknownOption);Ha(e.unknownOption,!0);a.val(b)};e.updateUnknownOption=function(b){b=e.generateUnknownOptionValue(b);e.unknownOption.val(b);Ha(e.unknownOption,!0);a.val(b)};e.generateUnknownOptionValue=function(a){return"? "+Sa(a)+" ?"};e.removeUnknownOption=function(){e.unknownOption.parent()&&
+e.unknownOption.remove()};e.selectEmptyOption=function(){e.emptyOption&&(a.val(""),Ha(e.emptyOption,!0))};e.unselectEmptyOption=function(){e.hasEmptyOption&&Ha(e.emptyOption,!1)};b.$on("$destroy",function(){e.renderUnknownOption=B});e.readValue=function(){var b=a.val(),b=b in e.selectValueMap?e.selectValueMap[b]:b;return e.hasOption(b)?b:null};e.writeValue=function(b){var c=a[0].options[a[0].selectedIndex];c&&Ha(z(c),!1);e.hasOption(b)?(e.removeUnknownOption(),c=Sa(b),a.val(c in e.selectValueMap?
+c:b),Ha(z(a[0].options[a[0].selectedIndex]),!0)):e.selectUnknownOrEmptyOption(b)};e.addOption=function(a,b){if(8!==b[0].nodeType){Oa(a,'"option value"');""===a&&(e.hasEmptyOption=!0,e.emptyOption=b);var c=f.get(a)||0;f.set(a,c+1);d()}};e.removeOption=function(a){var b=f.get(a);b&&(1===b?(f.delete(a),""===a&&(e.hasEmptyOption=!1,e.emptyOption=void 0)):f.set(a,b-1))};e.hasOption=function(a){return!!f.get(a)};e.$hasEmptyOption=function(){return e.hasEmptyOption};e.$isUnknownOptionSelected=function(){return a[0].options[0]===
+e.unknownOption[0]};e.$isEmptyOptionSelected=function(){return e.hasEmptyOption&&a[0].options[a[0].selectedIndex]===e.emptyOption[0]};e.selectUnknownOrEmptyOption=function(a){null==a&&e.emptyOption?(e.removeUnknownOption(),e.selectEmptyOption()):e.unknownOption.parent().length?e.updateUnknownOption(a):e.renderUnknownOption(a)};var g=!1,k=!1;e.registerOption=function(a,b,f,g,k){if(f.$attr.ngValue){var p,r=NaN;f.$observe("value",function(a){var d,f=b.prop("selected");t(r)&&(e.removeOption(p),delete e.selectValueMap[r],
+d=!0);r=Sa(a);p=a;e.selectValueMap[r]=a;e.addOption(a,b);b.attr("value",r);d&&f&&c()})}else g?f.$observe("value",function(a){e.readValue();var d,f=b.prop("selected");t(p)&&(e.removeOption(p),d=!0);p=a;e.addOption(a,b);d&&f&&c()}):k?a.$watch(k,function(a,d){f.$set("value",a);var g=b.prop("selected");d!==a&&e.removeOption(d);e.addOption(a,b);d&&g&&c()}):e.addOption(f.value,b);f.$observe("disabled",function(a){if("true"===a||a&&b.prop("selected"))e.multiple?c(!0):(e.ngModelCtrl.$setViewValue(null),e.ngModelCtrl.$render())});
+b.on("$destroy",function(){var a=e.readValue(),b=f.value;e.removeOption(b);d();(e.multiple&&a&&-1!==a.indexOf(b)||a===b)&&c(!0)})}}],Le=function(){return{restrict:"E",require:["select","?ngModel"],controller:nh,priority:1,link:{pre:function(a,b,d,c){var e=c[0],f=c[1];if(f){if(e.ngModelCtrl=f,b.on("change",function(){e.removeUnknownOption();a.$apply(function(){f.$setViewValue(e.readValue())})}),d.multiple){e.multiple=!0;e.readValue=function(){var a=[];p(b.find("option"),function(b){b.selected&&!b.disabled&&
+(b=b.value,a.push(b in e.selectValueMap?e.selectValueMap[b]:b))});return a};e.writeValue=function(a){p(b.find("option"),function(b){var c=!!a&&(-1!==Array.prototype.indexOf.call(a,b.value)||-1!==Array.prototype.indexOf.call(a,e.selectValueMap[b.value]));c!==b.selected&&Ha(z(b),c)})};var g,k=NaN;a.$watch(function(){k!==f.$viewValue||sa(g,f.$viewValue)||(g=ra(f.$viewValue),f.$render());k=f.$viewValue});f.$isEmpty=function(a){return!a||0===a.length}}}else e.registerOption=B},post:function(a,b,d,c){var e=
+c[1];if(e){var f=c[0];e.$render=function(){f.writeValue(e.$viewValue)}}}}}},Me=["$interpolate",function(a){return{restrict:"E",priority:100,compile:function(b,d){var c,e;t(d.ngValue)||(t(d.value)?c=a(d.value,!0):(e=a(b.text(),!0))||d.$set("value",b.text()));return function(a,b,d){var h=b.parent();(h=h.data("$selectController")||h.parent().data("$selectController"))&&h.registerOption(a,b,d,c,e)}}}}],ad=function(){return{restrict:"A",require:"?ngModel",link:function(a,b,d,c){c&&(d.required=!0,c.$validators.required=
+function(a,b){return!d.required||!c.$isEmpty(b)},d.$observe("required",function(){c.$validate()}))}}},$c=function(){return{restrict:"A",require:"?ngModel",link:function(a,b,d,c){if(c){var e,f=d.ngPattern||d.pattern;d.$observe("pattern",function(a){C(a)&&0<a.length&&(a=new RegExp("^"+a+"$"));if(a&&!a.test)throw K("ngPattern")("noregexp",f,a,Aa(b));e=a||void 0;c.$validate()});c.$validators.pattern=function(a,b){return c.$isEmpty(b)||v(e)||e.test(b)}}}}},cd=function(){return{restrict:"A",require:"?ngModel",
+link:function(a,b,d,c){if(c){var e=-1;d.$observe("maxlength",function(a){a=Q(a);e=ba(a)?-1:a;c.$validate()});c.$validators.maxlength=function(a,b){return 0>e||c.$isEmpty(b)||b.length<=e}}}}},bd=function(){return{restrict:"A",require:"?ngModel",link:function(a,b,d,c){if(c){var e=0;d.$observe("minlength",function(a){e=Q(a)||0;c.$validate()});c.$validators.minlength=function(a,b){return c.$isEmpty(b)||b.length>=e}}}}};x.angular.bootstrap?x.console&&console.log("WARNING: Tried to load angular more than once."):
+(Ce(),Fe(fa),fa.module("ngLocale",[],["$provide",function(a){function b(a){a+="";var b=a.indexOf(".");return-1==b?0:a.length-b-1}a.value("$locale",{DATETIME_FORMATS:{AMPMS:["AM","PM"],DAY:"Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),ERANAMES:["Before Christ","Anno Domini"],ERAS:["BC","AD"],FIRSTDAYOFWEEK:6,MONTH:"January February March April May June July August September October November December".split(" "),SHORTDAY:"Sun Mon Tue Wed Thu Fri Sat".split(" "),SHORTMONTH:"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),
+STANDALONEMONTH:"January February March April May June July August September October November December".split(" "),WEEKENDRANGE:[5,6],fullDate:"EEEE, MMMM d, y",longDate:"MMMM d, y",medium:"MMM d, y h:mm:ss a",mediumDate:"MMM d, y",mediumTime:"h:mm:ss a","short":"M/d/yy h:mm a",shortDate:"M/d/yy",shortTime:"h:mm a"},NUMBER_FORMATS:{CURRENCY_SYM:"$",DECIMAL_SEP:".",GROUP_SEP:",",PATTERNS:[{gSize:3,lgSize:3,maxFrac:3,minFrac:0,minInt:1,negPre:"-",negSuf:"",posPre:"",posSuf:""},{gSize:3,lgSize:3,maxFrac:2,
+minFrac:2,minInt:1,negPre:"-\u00a4",negSuf:"",posPre:"\u00a4",posSuf:""}]},id:"en-us",localeID:"en_US",pluralCat:function(a,c){var e=a|0,f=c;void 0===f&&(f=Math.min(b(a),3));Math.pow(10,f);return 1==e&&0==f?"one":"other"}})}]),z(function(){xe(x.document,Uc)}))})(window);!window.angular.$$csp().noInlineStyle&&window.angular.element(document.head).prepend('<style type="text/css">@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide:not(.ng-hide-animate){display:none !important;}ng\\:form{display:block;}.ng-animate-shim{visibility:hidden;}.ng-anchor{position:absolute;}</style>');
//# sourceMappingURL=angular.min.js.map
diff --git a/libs/bower_components/angular/angular.min.js.gzip b/libs/bower_components/angular/angular.min.js.gzip
index 64c240da57..e6467fc2a6 100644
--- a/libs/bower_components/angular/angular.min.js.gzip
+++ b/libs/bower_components/angular/angular.min.js.gzip
Binary files differ
diff --git a/libs/bower_components/angular/angular.min.js.map b/libs/bower_components/angular/angular.min.js.map
index 1a7fdbe49c..7b413c95cc 100644
--- a/libs/bower_components/angular/angular.min.js.map
+++ b/libs/bower_components/angular/angular.min.js.map
@@ -1,8 +1,8 @@
{
"version":3,
"file":"angular.min.js",
-"lineCount":300,
-"mappings":"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",
+"lineCount":333,
+"mappings":"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",
"sources":["angular.js"],
-"names":["window","document","undefined","minErr","isArrayLike","obj","isWindow","isArray","isString","jqLite","length","Object","isNumber","Array","item","forEach","iterator","context","key","isFunction","hasOwnProperty","call","isPrimitive","isBlankObject","forEachSorted","keys","sort","i","reverseParams","iteratorFn","value","nextUid","uid","baseExtend","dst","objs","deep","h","$$hashKey","ii","isObject","j","jj","src","isDate","Date","valueOf","isRegExp","RegExp","nodeName","cloneNode","isElement","clone","extend","slice","arguments","merge","toInt","str","parseInt","inherit","parent","extra","create","noop","identity","$","valueFn","hasCustomToString","toString","isUndefined","isDefined","getPrototypeOf","isScope","$evalAsync","$watch","isBoolean","isTypedArray","TYPED_ARRAY_REGEXP","test","node","prop","attr","find","makeMap","items","split","nodeName_","element","lowercase","arrayRemove","array","index","indexOf","splice","copy","source","destination","copyRecurse","push","copyElement","stackSource","stackDest","ngMinErr","needsRecurse","constructor","getTime","match","lastIndex","type","shallowCopy","charAt","equals","o1","o2","t1","t2","keySet","createMap","concat","array1","array2","bind","self","fn","curryArgs","startIndex","apply","toJsonReplacer","val","toJson","pretty","JSON","stringify","fromJson","json","parse","timezoneToOffset","timezone","fallback","replace","ALL_COLONS","requestedTimezoneOffset","isNaN","convertTimezoneToLocal","date","reverse","dateTimezoneOffset","getTimezoneOffset","timezoneOffset","setMinutes","getMinutes","minutes","startingTag","empty","e","elemHtml","append","html","nodeType","NODE_TYPE_TEXT","tryDecodeURIComponent","decodeURIComponent","parseKeyValue","keyValue","splitPoint","substring","toKeyValue","parts","arrayValue","encodeUriQuery","join","encodeUriSegment","pctEncodeSpaces","encodeURIComponent","getNgAttribute","ngAttr","ngAttrPrefixes","getAttribute","angularInit","bootstrap","appElement","module","config","prefix","name","hasAttribute","candidate","querySelector","strictDi","modules","defaultConfig","doBootstrap","injector","tag","unshift","$provide","debugInfoEnabled","$compileProvider","createInjector","invoke","bootstrapApply","scope","compile","$apply","data","NG_ENABLE_DEBUG_INFO","NG_DEFER_BOOTSTRAP","angular","resumeBootstrap","angular.resumeBootstrap","extraModules","resumeDeferredBootstrap","reloadWithDebugInfo","location","reload","getTestability","rootElement","get","snake_case","separator","SNAKE_CASE_REGEXP","letter","pos","toLowerCase","bindJQuery","originalCleanData","bindJQueryFired","jqName","jq","jQuery","on","JQLitePrototype","isolateScope","controller","inheritedData","cleanData","jQuery.cleanData","elems","events","skipDestroyOnNextJQueryCleanData","elem","_data","$destroy","triggerHandler","JQLite","assertArg","arg","reason","assertArgFn","acceptArrayAnnotation","assertNotHasOwnProperty","getter","path","bindFnToScope","lastInstance","len","getBlockNodes","nodes","endNode","blockNodes","nextSibling","setupModuleLoader","ensure","factory","$injectorMinErr","$$minErr","requires","configFn","invokeLater","provider","method","insertMethod","queue","invokeQueue","moduleInstance","invokeLaterAndSetModuleName","recipeName","factoryFunction","$$moduleName","configBlocks","runBlocks","_invokeQueue","_configBlocks","_runBlocks","service","constant","decorator","animation","filter","directive","run","block","publishExternalAPI","version","uppercase","counter","csp","angularModule","ngModule","$$sanitizeUri","$$SanitizeUriProvider","$CompileProvider","a","htmlAnchorDirective","input","inputDirective","textarea","form","formDirective","script","scriptDirective","select","selectDirective","style","styleDirective","option","optionDirective","ngBind","ngBindDirective","ngBindHtml","ngBindHtmlDirective","ngBindTemplate","ngBindTemplateDirective","ngClass","ngClassDirective","ngClassEven","ngClassEvenDirective","ngClassOdd","ngClassOddDirective","ngCloak","ngCloakDirective","ngController","ngControllerDirective","ngForm","ngFormDirective","ngHide","ngHideDirective","ngIf","ngIfDirective","ngInclude","ngIncludeDirective","ngInit","ngInitDirective","ngNonBindable","ngNonBindableDirective","ngPluralize","ngPluralizeDirective","ngRepeat","ngRepeatDirective","ngShow","ngShowDirective","ngStyle","ngStyleDirective","ngSwitch","ngSwitchDirective","ngSwitchWhen","ngSwitchWhenDirective","ngSwitchDefault","ngSwitchDefaultDirective","ngOptions","ngOptionsDirective","ngTransclude","ngTranscludeDirective","ngModel","ngModelDirective","ngList","ngListDirective","ngChange","ngChangeDirective","pattern","patternDirective","ngPattern","required","requiredDirective","ngRequired","minlength","minlengthDirective","ngMinlength","maxlength","maxlengthDirective","ngMaxlength","ngValue","ngValueDirective","ngModelOptions","ngModelOptionsDirective","ngIncludeFillContentDirective","ngAttributeAliasDirectives","ngEventDirectives","$anchorScroll","$AnchorScrollProvider","$animate","$AnimateProvider","$animateCss","$CoreAnimateCssProvider","$$animateJs","$$CoreAnimateJsProvider","$$animateQueue","$$CoreAnimateQueueProvider","$$AnimateRunner","$$AnimateRunnerFactoryProvider","$$animateAsyncRun","$$AnimateAsyncRunFactoryProvider","$browser","$BrowserProvider","$cacheFactory","$CacheFactoryProvider","$controller","$ControllerProvider","$document","$DocumentProvider","$exceptionHandler","$ExceptionHandlerProvider","$filter","$FilterProvider","$$forceReflow","$$ForceReflowProvider","$interpolate","$InterpolateProvider","$interval","$IntervalProvider","$http","$HttpProvider","$httpParamSerializer","$HttpParamSerializerProvider","$httpParamSerializerJQLike","$HttpParamSerializerJQLikeProvider","$httpBackend","$HttpBackendProvider","$xhrFactory","$xhrFactoryProvider","$location","$LocationProvider","$log","$LogProvider","$parse","$ParseProvider","$rootScope","$RootScopeProvider","$q","$QProvider","$$q","$$QProvider","$sce","$SceProvider","$sceDelegate","$SceDelegateProvider","$sniffer","$SnifferProvider","$templateCache","$TemplateCacheProvider","$templateRequest","$TemplateRequestProvider","$$testability","$$TestabilityProvider","$timeout","$TimeoutProvider","$window","$WindowProvider","$$rAF","$$RAFProvider","$$jqLite","$$jqLiteProvider","$$HashMap","$$HashMapProvider","$$cookieReader","$$CookieReaderProvider","camelCase","SPECIAL_CHARS_REGEXP","_","offset","toUpperCase","MOZ_HACK_REGEXP","jqLiteAcceptsData","NODE_TYPE_ELEMENT","NODE_TYPE_DOCUMENT","jqLiteBuildFragment","tmp","fragment","createDocumentFragment","HTML_REGEXP","appendChild","createElement","TAG_NAME_REGEXP","exec","wrap","wrapMap","_default","innerHTML","XHTML_TAG_REGEXP","lastChild","childNodes","firstChild","textContent","createTextNode","jqLiteWrapNode","wrapper","parentNode","replaceChild","argIsString","trim","jqLiteMinErr","parsed","SINGLE_TAG_REGEXP","jqLiteAddNodes","jqLiteClone","jqLiteDealoc","onlyDescendants","jqLiteRemoveData","querySelectorAll","descendants","l","jqLiteOff","unsupported","expandoStore","jqLiteExpandoStore","handle","removeHandler","listenerFns","removeEventListener","MOUSE_EVENT_MAP","expandoId","ng339","jqCache","createIfNecessary","jqId","jqLiteData","isSimpleSetter","isSimpleGetter","massGetter","jqLiteHasClass","selector","jqLiteRemoveClass","cssClasses","setAttribute","cssClass","jqLiteAddClass","existingClasses","root","elements","jqLiteController","jqLiteInheritedData","documentElement","names","NODE_TYPE_DOCUMENT_FRAGMENT","host","jqLiteEmpty","removeChild","jqLiteRemove","keepData","jqLiteDocumentLoaded","action","win","readyState","setTimeout","getBooleanAttrName","booleanAttr","BOOLEAN_ATTR","BOOLEAN_ELEMENTS","createEventHandler","eventHandler","event","isDefaultPrevented","event.isDefaultPrevented","defaultPrevented","eventFns","eventFnsLength","immediatePropagationStopped","originalStopImmediatePropagation","stopImmediatePropagation","event.stopImmediatePropagation","stopPropagation","isImmediatePropagationStopped","event.isImmediatePropagationStopped","handlerWrapper","specialHandlerWrapper","defaultHandlerWrapper","handler","specialMouseHandlerWrapper","target","related","relatedTarget","jqLiteContains","$get","this.$get","hasClass","classes","addClass","removeClass","hashKey","nextUidFn","objType","HashMap","isolatedUid","this.nextUid","put","anonFn","args","fnText","STRIP_COMMENTS","FN_ARGS","modulesToLoad","supportObject","delegate","provider_","providerInjector","instantiate","providerCache","providerSuffix","enforceReturnValue","enforcedReturnValue","result","instanceInjector","factoryFn","enforce","loadModules","moduleFn","runInvokeQueue","invokeArgs","loadedModules","message","stack","createInternalInjector","cache","getService","serviceName","caller","INSTANTIATING","err","shift","locals","$inject","$$annotate","Type","instance","prototype","returnedValue","annotate","has","$injector","instanceCache","decorFn","origProvider","orig$get","origProvider.$get","origInstance","$delegate","autoScrollingEnabled","disableAutoScrolling","this.disableAutoScrolling","getFirstAnchor","list","some","scrollTo","scrollIntoView","scroll","yOffset","getComputedStyle","position","getBoundingClientRect","bottom","elemTop","top","scrollBy","hash","elm","getElementById","getElementsByName","autoScrollWatch","autoScrollWatchAction","newVal","oldVal","mergeClasses","b","splitClasses","klass","prepareAnimateOptions","options","Browser","completeOutstandingRequest","outstandingRequestCount","outstandingRequestCallbacks","pop","error","cacheStateAndFireUrlChange","pendingLocation","cacheState","fireUrlChange","history","state","cachedState","lastCachedState","lastBrowserUrl","url","lastHistoryState","urlChangeListeners","listener","clearTimeout","pendingDeferIds","isMock","$$completeOutstandingRequest","$$incOutstandingRequestCount","self.$$incOutstandingRequestCount","notifyWhenNoOutstandingRequests","self.notifyWhenNoOutstandingRequests","callback","href","baseElement","self.url","sameState","sameBase","stripHash","substr","self.state","urlChangeInit","onUrlChange","self.onUrlChange","$$applicationDestroyed","self.$$applicationDestroyed","off","$$checkUrlChange","baseHref","self.baseHref","defer","self.defer","delay","timeoutId","cancel","self.defer.cancel","deferId","cacheFactory","cacheId","refresh","entry","freshEnd","staleEnd","n","link","p","nextEntry","prevEntry","caches","size","stats","id","capacity","Number","MAX_VALUE","lruHash","lruEntry","remove","removeAll","destroy","info","cacheFactory.info","cacheFactory.get","$$sanitizeUriProvider","parseIsolateBindings","directiveName","isController","LOCAL_REGEXP","bindings","definition","scopeName","bindingCache","$compileMinErr","mode","collection","optional","attrName","assertValidDirectiveName","hasDirectives","COMMENT_DIRECTIVE_REGEXP","CLASS_DIRECTIVE_REGEXP","ALL_OR_NOTHING_ATTRS","REQUIRE_PREFIX_REGEXP","EVENT_HANDLER_ATTR_REGEXP","this.directive","registerDirective","directiveFactory","Suffix","directives","priority","require","restrict","aHrefSanitizationWhitelist","this.aHrefSanitizationWhitelist","regexp","imgSrcSanitizationWhitelist","this.imgSrcSanitizationWhitelist","this.debugInfoEnabled","enabled","safeAddClass","$element","className","$compileNodes","transcludeFn","maxPriority","ignoreDirective","previousCompileContext","NOT_EMPTY","domNode","nodeValue","compositeLinkFn","compileNodes","$$addScopeClass","namespace","publicLinkFn","cloneConnectFn","needsNewScope","$parent","$new","parentBoundTranscludeFn","transcludeControllers","futureParentElement","$$boundTransclude","$linkNode","wrapTemplate","controllerName","$$addScopeInfo","nodeList","$rootElement","childLinkFn","childScope","childBoundTranscludeFn","stableNodeList","nodeLinkFnFound","linkFns","idx","nodeLinkFn","transcludeOnThisElement","createBoundTranscludeFn","transclude","templateOnThisElement","attrs","linkFnFound","Attributes","collectDirectives","applyDirectivesToNode","$$element","terminal","previousBoundTranscludeFn","boundTranscludeFn","transcludedScope","cloneFn","controllers","containingScope","$$transcluded","attrsMap","$attr","addDirective","directiveNormalize","isNgAttr","nAttrs","attributes","attrStartName","attrEndName","ngAttrName","NG_ATTR_BINDING","PREFIX_REGEXP","multiElementMatch","MULTI_ELEMENT_DIR_RE","directiveIsMultiElement","nName","addAttrInterpolateDirective","animVal","msie","addTextInterpolateDirective","NODE_TYPE_COMMENT","byPriority","groupScan","attrStart","attrEnd","depth","groupElementsLinkFnWrapper","linkFn","compileNode","templateAttrs","jqCollection","originalReplaceDirective","preLinkFns","postLinkFns","addLinkFns","pre","post","newIsolateScopeDirective","$$isolateScope","cloneAndAnnotateFn","getControllers","elementControllers","inheritType","dataName","setupControllers","controllerDirectives","controllerKey","$scope","$attrs","$transclude","controllerInstance","controllerAs","linkNode","controllersBoundTransclude","cloneAttachFn","hasElementTranscludeDirective","scopeToChild","controllerScope","removeScopeBindingWatches","newScopeDirective","templateDirective","$$originalDirective","$$isolateBindings","initializeDirectiveBindings","$on","controllerDirective","$$bindings","bindToController","identifier","removeControllerBindingWatches","controllerResult","invokeLinkFn","template","templateUrl","terminalPriority","nonTlbTranscludeDirective","hasTranscludeDirective","hasTemplate","$compileNode","$template","childTranscludeFn","$$start","$$end","directiveValue","assertNoDuplicate","$$tlb","createComment","replaceWith","replaceDirective","contents","$$newScope","denormalizeTemplate","removeComments","templateNamespace","newTemplateAttrs","templateDirectives","unprocessedDirectives","markDirectiveScope","mergeTemplateAttributes","compileTemplateUrl","Math","max","newScope","tDirectives","startAttrName","endAttrName","ident","CNTRL_REG","multiElement","srcAttr","dstAttr","$set","tAttrs","linkQueue","afterTemplateNodeLinkFn","afterTemplateChildLinkFn","beforeTemplateCompileNode","origAsyncDirective","derivedSyncDirective","then","content","tempTemplateAttrs","beforeTemplateLinkNode","linkRootElement","$$destroyed","oldClasses","delayedNodeLinkFn","ignoreChildLinkFn","diff","what","previousDirective","wrapModuleNameIfDefined","moduleName","text","interpolateFn","textInterpolateCompileFn","templateNode","templateNodeParent","hasCompileParent","$$addBindingClass","textInterpolateLinkFn","$$addBindingInfo","expressions","interpolateFnWatchAction","getTrustedContext","attrNormalizedName","HTML","RESOURCE_URL","allOrNothing","trustedContext","attrInterpolatePreLinkFn","$$observers","newValue","$$inter","$$scope","oldValue","$updateClass","elementsToRemove","newNode","firstElementToRemove","removeCount","j2","hasData","expando","k","kk","annotation","removeWatchCollection","lastValue","parentGet","parentSet","compare","$observe","literal","assign","parentValueWatch","parentValue","$stateful","removeWatch","$watchCollection","removeWatches","attributesToCopy","$normalize","$addClass","classVal","$removeClass","newClasses","toAdd","tokenDifference","toRemove","writeAttr","booleanKey","aliasedKey","ALIASED_ATTR","observer","trimmedSrcset","srcPattern","rawUris","nbrUrisWith2parts","floor","innerIdx","lastTuple","removeAttr","listeners","startSymbol","endSymbol","binding","isolated","noTemplate","str1","str2","values","tokens1","tokens2","token","jqNodes","globals","register","this.register","allowGlobals","this.allowGlobals","addIdentifier","expression","later","$controllerMinErr","controllerPrototype","exception","cause","serializeValue","v","toISOString","ngParamSerializer","params","jQueryLikeParamSerializer","serialize","toSerialize","topLevel","defaultHttpResponseTransform","headers","tempData","JSON_PROTECTION_PREFIX","contentType","jsonStart","JSON_START","JSON_ENDS","parseHeaders","line","headerVal","headerKey","headersGetter","headersObj","transformData","status","fns","defaults","transformResponse","transformRequest","d","common","CONTENT_TYPE_APPLICATION_JSON","patch","xsrfCookieName","xsrfHeaderName","paramSerializer","useApplyAsync","this.useApplyAsync","useLegacyPromise","useLegacyPromiseExtensions","this.useLegacyPromiseExtensions","interceptorFactories","interceptors","requestConfig","response","resp","reject","executeHeaderFns","headerContent","processedHeaders","headerFn","header","mergeHeaders","defHeaders","reqHeaders","defHeaderName","lowercaseDefHeaderName","reqHeaderName","chain","serverRequest","reqData","withCredentials","sendReq","promise","when","reversedInterceptors","interceptor","request","requestError","responseError","thenFn","rejectFn","success","promise.success","promise.error","$httpMinErrLegacyFn","done","headersString","statusText","resolveHttpPromise","resolvePromise","$applyAsync","$$phase","deferred","resolve","resolvePromiseWithResult","removePendingReq","pendingRequests","cachedResp","buildUrl","defaultCache","xsrfValue","urlIsSameOrigin","timeout","responseType","serializedParams","interceptorFactory","createShortMethods","createShortMethodsWithData","createXhr","XMLHttpRequest","createHttpBackend","callbacks","$browserDefer","rawDocument","jsonpReq","callbackId","async","body","called","addEventListener","timeoutRequest","jsonpDone","xhr","abort","completeRequest","open","setRequestHeader","onload","xhr.onload","responseText","urlResolve","protocol","getAllResponseHeaders","onerror","onabort","send","this.startSymbol","this.endSymbol","escape","ch","unescapeText","escapedStartRegexp","escapedEndRegexp","mustHaveExpression","parseStringifyInterceptor","getTrusted","$interpolateMinErr","interr","endIndex","parseFns","textLength","expressionPositions","startSymbolLength","exp","endSymbolLength","throwNoconcat","compute","interpolationFn","$$watchDelegate","$watchGroup","interpolateFnWatcher","oldValues","currValue","$interpolate.startSymbol","$interpolate.endSymbol","interval","count","invokeApply","hasParams","setInterval","clearInterval","iteration","skipApply","$$intervalId","tick","notify","intervals","interval.cancel","encodePath","segments","parseAbsoluteUrl","absoluteUrl","locationObj","parsedUrl","$$protocol","$$host","hostname","$$port","port","DEFAULT_PORTS","parseAppUrl","relativeUrl","prefixed","$$path","pathname","$$search","search","$$hash","beginsWith","begin","whole","trimEmptyHash","LocationHtml5Url","appBase","appBaseNoFile","basePrefix","$$html5","$$parse","this.$$parse","pathUrl","$locationMinErr","$$compose","this.$$compose","$$url","$$absUrl","$$parseLinkUrl","this.$$parseLinkUrl","relHref","appUrl","prevAppUrl","rewrittenUrl","LocationHashbangUrl","hashPrefix","withoutBaseUrl","withoutHashUrl","windowsFilePathExp","base","firstPathSegmentMatch","LocationHashbangInHtml5Url","locationGetter","property","locationGetterSetter","preprocess","html5Mode","requireBase","rewriteLinks","this.hashPrefix","this.html5Mode","setBrowserUrlWithFallback","oldUrl","oldState","$$state","afterLocationChange","$broadcast","absUrl","LocationMode","initialUrl","lastIndexOf","IGNORE_URI_REGEXP","ctrlKey","metaKey","shiftKey","which","button","absHref","preventDefault","initializing","newUrl","newState","$digest","$locationWatch","currentReplace","$$replace","urlOrStateChanged","debug","debugEnabled","this.debugEnabled","flag","formatError","Error","sourceURL","consoleLog","console","logFn","log","hasApply","arg1","arg2","warn","ensureSafeMemberName","fullExpression","$parseMinErr","getStringValue","ensureSafeObject","children","ensureSafeFunction","CALL","APPLY","BIND","ensureSafeAssignContext","Function","ifDefined","plusFn","r","findConstantAndWatchExpressions","ast","allConstants","argsToWatch","AST","Program","expr","Literal","toWatch","UnaryExpression","argument","BinaryExpression","left","right","LogicalExpression","ConditionalExpression","alternate","consequent","Identifier","MemberExpression","object","computed","CallExpression","callee","AssignmentExpression","ArrayExpression","ObjectExpression","properties","ThisExpression","getInputs","lastExpression","isAssignable","assignableAST","NGValueParameter","operator","isLiteral","ASTCompiler","astBuilder","ASTInterpreter","isPossiblyDangerousMemberName","getValueOf","objectValueOf","cacheDefault","cacheExpensive","interceptorFn","expensiveChecks","parsedExpression","oneTime","cacheKey","runningChecksEnabled","parseOptions","$parseOptionsExpensive","$parseOptions","lexer","Lexer","parser","Parser","constantWatchDelegate","oneTimeLiteralWatchDelegate","oneTimeWatchDelegate","inputs","inputsWatchDelegate","expensiveChecksInterceptor","addInterceptor","expensiveCheckFn","expensiveCheckOldValue","expressionInputDirtyCheck","oldValueOfValue","objectEquality","prettyPrintExpression","inputExpressions","lastResult","oldInputValueOf","expressionInputWatch","newInputValue","oldInputValueOfValues","oldInputValues","expressionInputsWatch","changed","unwatch","oneTimeWatch","oneTimeListener","old","$$postDigest","isAllDefined","allDefined","constantWatch","constantListener","watchDelegate","useInputs","regularInterceptedExpression","oneTimeInterceptedExpression","noUnsafeEval","$$runningExpensiveChecks","$parse.$$runningExpensiveChecks","qFactory","nextTick","exceptionHandler","callOnce","resolveFn","Promise","simpleBind","scheduleProcessQueue","processScheduled","pending","Deferred","$qMinErr","TypeError","onFulfilled","onRejected","progressBack","catch","finally","handleCallback","$$reject","$$resolve","progress","makePromise","resolved","isResolved","callbackOutput","errback","$Q","Q","resolver","all","promises","results","requestAnimationFrame","webkitRequestAnimationFrame","cancelAnimationFrame","webkitCancelAnimationFrame","webkitCancelRequestAnimationFrame","rafSupported","raf","timer","supported","createChildScopeClass","ChildScope","$$watchers","$$nextSibling","$$childHead","$$childTail","$$listeners","$$listenerCount","$$watchersCount","$id","$$ChildScope","TTL","$rootScopeMinErr","lastDirtyWatch","applyAsyncId","digestTtl","this.digestTtl","destroyChildScope","$event","currentScope","cleanUpScope","$$prevSibling","$root","Scope","beginPhase","phase","incrementWatchersCount","current","decrementListenerCount","initWatchVal","flushApplyAsync","applyAsyncQueue","scheduleApplyAsync","isolate","child","watchExp","watcher","last","eq","deregisterWatch","watchExpressions","watchGroupAction","changeReactionScheduled","firstRun","newValues","deregisterFns","shouldCall","deregisterWatchGroup","unwatchFn","watchGroupSubAction","$watchCollectionInterceptor","_value","bothNaN","newItem","oldItem","internalArray","oldLength","changeDetected","newLength","internalObject","veryOldValue","trackVeryOldValue","changeDetector","initRun","$watchCollectionAction","watch","watchers","dirty","ttl","watchLog","logIdx","asyncTask","asyncQueue","$eval","msg","next","postDigestQueue","eventName","this.$watchGroup","$applyAsyncExpression","namedListeners","indexOfListener","$emit","targetScope","listenerArgs","$$asyncQueue","$$postDigestQueue","$$applyAsyncQueue","sanitizeUri","uri","isImage","regex","normalizedVal","adjustMatcher","matcher","$sceMinErr","escapeForRegexp","adjustMatchers","matchers","adjustedMatchers","SCE_CONTEXTS","resourceUrlWhitelist","resourceUrlBlacklist","this.resourceUrlWhitelist","this.resourceUrlBlacklist","matchUrl","generateHolderType","Base","holderType","trustedValue","$$unwrapTrustedValue","this.$$unwrapTrustedValue","holderType.prototype.valueOf","holderType.prototype.toString","htmlSanitizer","trustedValueHolderBase","byType","CSS","URL","JS","trustAs","Constructor","maybeTrusted","allowed","this.enabled","sce","isEnabled","sce.isEnabled","sce.getTrusted","parseAs","sce.parseAs","enumValue","lName","eventSupport","android","userAgent","navigator","boxee","vendorPrefix","vendorRegex","bodyStyle","transitions","animations","webkitTransition","webkitAnimation","pushState","hasEvent","divElm","handleRequestFn","tpl","ignoreRequestError","totalPendingRequests","getTrustedResourceUrl","transformer","httpOptions","handleError","testability","testability.findBindings","opt_exactMatch","getElementsByClassName","matches","dataBinding","bindingName","testability.findModels","prefixes","attributeEquals","testability.getLocation","testability.setLocation","testability.whenStable","deferreds","$$timeoutId","timeout.cancel","urlParsingNode","requestUrl","originUrl","$$CookieReader","safeDecodeURIComponent","lastCookies","lastCookieString","cookieArray","cookie","currentCookieString","filters","suffix","currencyFilter","dateFilter","filterFilter","jsonFilter","limitToFilter","lowercaseFilter","numberFilter","orderByFilter","uppercaseFilter","comparator","matchAgainstAnyProp","getTypeForFilter","expressionType","predicateFn","createPredicateFn","shouldMatchPrimitives","actual","expected","deepCompare","dontMatchWholeObject","actualType","expectedType","expectedVal","matchAnyProperty","actualVal","$locale","formats","NUMBER_FORMATS","amount","currencySymbol","fractionSize","CURRENCY_SYM","PATTERNS","maxFrac","formatNumber","GROUP_SEP","DECIMAL_SEP","number","numStr","exponent","digits","numberOfIntegerDigits","zeros","ZERO_CHAR","MAX_DIGITS","roundNumber","parsedNumber","minFrac","fractionLen","min","roundAt","digit","carry","reduceRight","groupSep","decimalSep","isInfinity","isFinite","isZero","abs","formattedText","integerLen","decimals","reduce","groups","lgSize","gSize","negPre","negSuf","posPre","posSuf","padNumber","num","neg","dateGetter","dateStrGetter","shortForm","getFirstThursdayOfYear","year","dayOfWeekOnFirst","getDay","weekGetter","firstThurs","getFullYear","thisThurs","getMonth","getDate","round","eraGetter","ERAS","jsonStringToDate","string","R_ISO8601_STR","tzHour","tzMin","dateSetter","setUTCFullYear","setFullYear","timeSetter","setUTCHours","setHours","m","s","ms","parseFloat","format","DATETIME_FORMATS","NUMBER_STRING","DATE_FORMATS_SPLIT","DATE_FORMATS","spacing","limit","Infinity","processPredicates","sortPredicate","reverseOrder","map","predicate","descending","predicates","compareValues","getComparisonObject","predicateValues","doComparison","v1","v2","ngDirective","FormController","controls","$error","$$success","$pending","$name","$dirty","$pristine","$valid","$invalid","$submitted","$$parentForm","nullFormCtrl","$rollbackViewValue","form.$rollbackViewValue","control","$commitViewValue","form.$commitViewValue","$addControl","form.$addControl","$$renameControl","form.$$renameControl","newName","oldName","$removeControl","form.$removeControl","$setValidity","addSetValidityMethod","ctrl","set","unset","$setDirty","form.$setDirty","PRISTINE_CLASS","DIRTY_CLASS","$setPristine","form.$setPristine","setClass","SUBMITTED_CLASS","$setUntouched","form.$setUntouched","$setSubmitted","form.$setSubmitted","stringBasedInputType","$formatters","$isEmpty","baseInputType","composing","ev","ngTrim","$viewValue","$$hasNativeValidators","$setViewValue","deferListener","origValue","keyCode","PARTIAL_VALIDATION_TYPES","PARTIAL_VALIDATION_EVENTS","validity","origBadInput","badInput","origTypeMismatch","typeMismatch","$render","ctrl.$render","createDateParser","mapping","iso","ISO_DATE_REGEXP","yyyy","MM","dd","HH","getHours","mm","ss","getSeconds","sss","getMilliseconds","part","NaN","createDateInputType","parseDate","dynamicDateInputType","isValidDate","parseObservedDateValue","badInputChecker","$options","previousDate","$$parserName","$parsers","parsedDate","ngModelMinErr","ngMin","minVal","$validators","ctrl.$validators.min","$validate","ngMax","maxVal","ctrl.$validators.max","VALIDITY_STATE_PROPERTY","parseConstantExpr","parseFn","classDirective","arrayDifference","arrayClasses","digestClassCounts","classCounts","classesToUpdate","ngClassWatchAction","$index","old$index","mod","cachedToggleClass","switchValue","classCache","toggleValidationCss","validationErrorKey","isValid","VALID_CLASS","INVALID_CLASS","setValidity","isObjectEmpty","PENDING_CLASS","combinedState","REGEX_STRING_REGEXP","documentMode","rules","ngCspElement","ngCspAttribute","noInlineStyle","name_","el","full","major","minor","dot","codeName","JQLite._data","mouseleave","mouseenter","optgroup","tbody","tfoot","colgroup","caption","thead","th","td","Node","contains","compareDocumentPosition","ready","trigger","fired","removeData","jqLiteHasData","removeAttribute","css","NODE_TYPE_ATTRIBUTE","lowercasedName","specified","getNamedItem","ret","getText","$dv","multiple","selected","nodeCount","jqLiteOn","types","addHandler","noEventListener","one","onFn","replaceNode","insertBefore","contentDocument","prepend","wrapNode","detach","after","newElement","toggleClass","condition","classCondition","nextElementSibling","getElementsByTagName","extraParameters","dummyEvent","handlerArgs","eventFnsCopy","arg3","unbind","FN_ARG_SPLIT","FN_ARG","argDecl","underscore","$animateMinErr","postDigestElements","updateData","handleCSSClassChanges","existing","pin","domOperation","from","to","classesAdded","add","classesRemoved","runner","complete","$$registeredAnimations","classNameFilter","this.classNameFilter","$$classNameFilter","reservedRegex","NG_ANIMATE_CLASSNAME","domInsert","parentElement","afterElement","afterNode","ELEMENT_NODE","previousElementSibling","end","enter","move","leave","addclass","animate","tempClasses","waitForTick","waitQueue","passed","AnimateRunner","setHost","rafTick","_doneCallbacks","_tick","this._tick","doc","hidden","_state","AnimateRunner.chain","AnimateRunner.all","runners","onProgress","DONE_COMPLETE_STATE","getPromise","resolveHandler","rejectHandler","pause","resume","_resolve","INITIAL_STATE","DONE_PENDING_STATE","initialOptions","closed","$$prepared","cleanupStyles","start","offsetWidth","APPLICATION_JSON","$httpMinErr","$interpolateMinErr.throwNoconcat","$interpolateMinErr.interr","PATH_MATCH","locationPrototype","paramValue","Location","Location.prototype.state","OPERATORS","ESCAPE","lex","tokens","readString","peek","readNumber","isIdent","readIdent","is","isWhitespace","ch2","ch3","op2","op3","op1","throwError","chars","isExpOperator","colStr","peekCh","quote","rawString","hex","String","fromCharCode","rep","ExpressionStatement","Property","program","expressionStatement","expect","filterChain","assignment","ternary","logicalOR","consume","logicalAND","equality","relational","additive","multiplicative","unary","primary","arrayDeclaration","constants","parseArguments","baseExpression","peekToken","kind","e1","e2","e3","e4","peekAhead","t","nextId","vars","own","assignable","stage","computing","recurse","return_","generateFunction","fnKey","intoId","watchId","fnString","USE","STRICT","filterPrefix","watchFns","varsPrefix","section","nameId","recursionFn","skipWatchIdCheck","if_","lazyAssign","computedMember","lazyRecurse","plus","not","getHasOwnProperty","nonComputedMember","addEnsureSafeObject","notNull","addEnsureSafeAssignContext","addEnsureSafeMemberName","addEnsureSafeFunction","member","filterName","defaultValue","stringEscapeRegex","stringEscapeFn","c","charCodeAt","skip","init","fn.assign","rhs","lhs","unary+","unary-","unary!","binary+","binary-","binary*","binary/","binary%","binary===","binary!==","binary==","binary!=","binary<","binary>","binary<=","binary>=","binary&&","binary||","ternary?:","astCompiler","yy","y","MMMM","MMM","M","H","hh","EEEE","EEE","ampmGetter","AMPMS","Z","timeZoneGetter","zone","paddedZone","ww","w","G","GG","GGG","GGGG","longEraGetter","ERANAMES","xlinkHref","propName","defaultLinkFn","normalized","ngBooleanAttrWatchAction","htmlAttr","ngAttrAliasWatchAction","nullFormRenameControl","formDirectiveFactory","isNgForm","getSetter","ngFormCompile","formElement","nameAttr","ngFormPreLink","ctrls","handleFormSubmission","setter","URL_REGEXP","EMAIL_REGEXP","NUMBER_REGEXP","DATE_REGEXP","DATETIMELOCAL_REGEXP","WEEK_REGEXP","MONTH_REGEXP","TIME_REGEXP","inputType","textInputType","weekParser","isoWeek","existingDate","week","hours","seconds","milliseconds","addDays","numberInputType","urlInputType","ctrl.$validators.url","modelValue","viewValue","emailInputType","email","ctrl.$validators.email","radioInputType","checked","checkboxInputType","trueValue","ngTrueValue","falseValue","ngFalseValue","ctrl.$isEmpty","CONSTANT_VALUE_REGEXP","tplAttr","ngValueConstantLink","ngValueLink","valueWatchAction","$compile","ngBindCompile","templateElement","ngBindLink","ngBindWatchAction","ngBindTemplateCompile","ngBindTemplateLink","ngBindHtmlCompile","tElement","ngBindHtmlGetter","ngBindHtmlWatch","ngBindHtmlLink","ngBindHtmlWatchAction","getTrustedHtml","$viewChangeListeners","forceAsyncEvents","ngEventHandler","previousElements","ngIfWatchAction","srcExp","onloadExp","autoScrollExp","autoscroll","changeCounter","previousElement","currentElement","cleanupLastIncludeContent","ngIncludeWatchAction","afterAnimation","thisChangeId","namespaceAdaptedClone","trimValues","NgModelController","$modelValue","$$rawModelValue","$asyncValidators","$untouched","$touched","parsedNgModel","parsedNgModelAssign","ngModelGet","ngModelSet","pendingDebounce","parserValid","$$setOptions","this.$$setOptions","getterSetter","invokeModelGetter","invokeModelSetter","$$$p","this.$isEmpty","currentValidationRunId","this.$setPristine","this.$setDirty","this.$setUntouched","UNTOUCHED_CLASS","TOUCHED_CLASS","$setTouched","this.$setTouched","this.$rollbackViewValue","$$lastCommittedViewValue","this.$validate","prevValid","prevModelValue","allowInvalid","$$runValidators","allValid","$$writeModelToScope","this.$$runValidators","doneCallback","processSyncValidators","syncValidatorsValid","validator","processAsyncValidators","validatorPromises","validationDone","localValidationRunId","processParseErrors","errorKey","this.$commitViewValue","$$parseAndValidate","this.$$parseAndValidate","this.$$writeModelToScope","this.$setViewValue","updateOnDefault","$$debounceViewValueCommit","this.$$debounceViewValueCommit","debounceDelay","debounce","ngModelWatch","formatters","ngModelCompile","ngModelPreLink","modelCtrl","formCtrl","ngModelPostLink","updateOn","DEFAULT_REGEXP","that","ngOptionsMinErr","NG_OPTIONS_REGEXP","parseOptionsExpression","optionsExp","selectElement","Option","selectValue","label","group","disabled","getOptionValuesKeys","optionValues","optionValuesKeys","keyName","itemKey","valueName","selectAs","trackBy","viewValueFn","trackByFn","getTrackByValueFn","getHashOfValue","getTrackByValue","getLocals","displayFn","groupByFn","disableWhenFn","valuesFn","getWatchables","watchedArray","optionValuesLength","disableWhen","getOptions","optionItems","selectValueMap","optionItem","getOptionFromViewValue","getViewValueFromOption","optionTemplate","optGroupTemplate","ngOptionsPreLink","registerOption","ngOptionsPostLink","updateOptionElement","addOrReuseElement","removeExcessElements","skipEmptyAndUnknownOptions","emptyOption_","emptyOption","unknownOption_","unknownOption","updateOptions","previousValue","selectCtrl","readValue","groupMap","providedEmptyOption","updateOption","optionElement","groupElement","currentOptionElement","ngModelCtrl","nextValue","ngModelCtrl.$isEmpty","writeValue","selectCtrl.writeValue","selectCtrl.readValue","selectedValues","selections","selectedOption","BRACE","IS_WHEN","updateElementText","newText","numberExp","whenExp","whens","whensExpFns","braceReplacement","watchRemover","lastCount","attributeName","tmpMatch","whenKey","ngPluralizeWatchAction","countIsNaN","pluralCat","whenExpFn","ngRepeatMinErr","updateScope","valueIdentifier","keyIdentifier","arrayLength","$first","$last","$middle","$odd","$even","ngRepeatCompile","ngRepeatEndComment","aliasAs","trackByExp","trackByExpGetter","trackByIdExpFn","trackByIdArrayFn","trackByIdObjFn","hashFnLocals","ngRepeatLink","lastBlockMap","ngRepeatAction","previousNode","nextNode","nextBlockMap","collectionLength","trackById","collectionKeys","nextBlockOrder","trackByIdFn","blockKey","ngRepeatTransclude","ngShowWatchAction","NG_HIDE_CLASS","NG_HIDE_IN_PROGRESS_CLASS","ngHideWatchAction","ngStyleWatchAction","newStyles","oldStyles","ngSwitchController","cases","selectedTranscludes","selectedElements","previousLeaveAnimations","selectedScopes","spliceFactory","ngSwitchWatchAction","selectedTransclude","caseElement","selectedScope","anchor","noopNgModelController","SelectController","optionsMap","renderUnknownOption","self.renderUnknownOption","unknownVal","removeUnknownOption","self.removeUnknownOption","self.readValue","self.writeValue","hasOption","addOption","self.addOption","removeOption","self.removeOption","self.hasOption","self.registerOption","optionScope","optionAttrs","interpolateValueFn","interpolateTextFn","valueAttributeObserveAction","interpolateWatchAction","selectPreLink","lastView","lastViewRef","selectMultipleWatch","selectPostLink","ngModelCtrl.$render","selectCtrlName","ctrl.$validators.required","patternExp","ctrl.$validators.pattern","intVal","ctrl.$validators.maxlength","ctrl.$validators.minlength","getDecimals","opt_precision","pow","ONE","OTHER","$$csp","head"]
+"names":["window","errorHandlingConfig","config","isObject","isDefined","objectMaxDepth","minErrConfig","isValidObjectMaxDepth","NaN","maxDepth","isNumber","minErr","isArrayLike","obj","isWindow","isArray","isString","jqLite","length","Object","Array","item","forEach","iterator","context","key","isFunction","hasOwnProperty","call","isPrimitive","isBlankObject","forEachSorted","keys","sort","i","reverseParams","iteratorFn","value","nextUid","uid","baseExtend","dst","objs","deep","h","$$hashKey","ii","j","jj","src","isDate","Date","valueOf","isRegExp","RegExp","nodeName","cloneNode","isElement","clone","extend","slice","arguments","merge","toInt","str","parseInt","inherit","parent","extra","create","noop","identity","$","valueFn","valueRef","hasCustomToString","toString","isUndefined","getPrototypeOf","isError","tag","Error","isScope","$evalAsync","$watch","isBoolean","isTypedArray","TYPED_ARRAY_REGEXP","test","node","prop","attr","find","makeMap","items","split","nodeName_","element","lowercase","arrayRemove","array","index","indexOf","splice","copy","source","destination","copyRecurse","push","copyElement","stackSource","stackDest","ngMinErr","needsRecurse","copyType","undefined","constructor","buffer","byteOffset","copied","ArrayBuffer","byteLength","set","Uint8Array","re","match","lastIndex","type","simpleCompare","a","b","equals","o1","o2","t1","t2","getTime","keySet","createMap","charAt","concat","array1","array2","bind","self","fn","curryArgs","startIndex","apply","toJsonReplacer","val","document","toJson","pretty","JSON","stringify","fromJson","json","parse","timezoneToOffset","timezone","fallback","replace","ALL_COLONS","requestedTimezoneOffset","isNumberNaN","convertTimezoneToLocal","date","reverse","dateTimezoneOffset","getTimezoneOffset","timezoneOffset","setMinutes","getMinutes","minutes","startingTag","empty","elemHtml","append","html","nodeType","NODE_TYPE_TEXT","e","tryDecodeURIComponent","decodeURIComponent","parseKeyValue","keyValue","splitPoint","substring","toKeyValue","parts","arrayValue","encodeUriQuery","join","encodeUriSegment","pctEncodeSpaces","encodeURIComponent","getNgAttribute","ngAttr","ngAttrPrefixes","getAttribute","angularInit","bootstrap","appElement","module","prefix","name","hasAttribute","candidate","querySelector","isAutoBootstrapAllowed","strictDi","console","error","modules","defaultConfig","doBootstrap","injector","unshift","$provide","debugInfoEnabled","$compileProvider","createInjector","invoke","bootstrapApply","scope","compile","$apply","data","NG_ENABLE_DEBUG_INFO","NG_DEFER_BOOTSTRAP","angular","resumeBootstrap","angular.resumeBootstrap","extraModules","resumeDeferredBootstrap","reloadWithDebugInfo","location","reload","getTestability","rootElement","get","snake_case","separator","SNAKE_CASE_REGEXP","letter","pos","toLowerCase","bindJQuery","originalCleanData","bindJQueryFired","jqName","jq","jQuery","on","JQLitePrototype","isolateScope","controller","inheritedData","cleanData","jQuery.cleanData","elems","events","elem","_data","$destroy","triggerHandler","JQLite","assertArg","arg","reason","assertArgFn","acceptArrayAnnotation","assertNotHasOwnProperty","getter","path","bindFnToScope","lastInstance","len","getBlockNodes","nodes","endNode","blockNodes","nextSibling","setupModuleLoader","ensure","factory","$injectorMinErr","$$minErr","requires","configFn","info","invokeLater","provider","method","insertMethod","queue","invokeQueue","moduleInstance","invokeLaterAndSetModuleName","recipeName","factoryFunction","$$moduleName","configBlocks","runBlocks","_invokeQueue","_configBlocks","_runBlocks","service","constant","decorator","animation","filter","directive","component","run","block","shallowCopy","serializeObject","seen","publishExternalAPI","version","uppercase","$$counter","csp","angularModule","ngModule","$$sanitizeUri","$$SanitizeUriProvider","$CompileProvider","htmlAnchorDirective","input","inputDirective","textarea","form","formDirective","script","scriptDirective","select","selectDirective","option","optionDirective","ngBind","ngBindDirective","ngBindHtml","ngBindHtmlDirective","ngBindTemplate","ngBindTemplateDirective","ngClass","ngClassDirective","ngClassEven","ngClassEvenDirective","ngClassOdd","ngClassOddDirective","ngCloak","ngCloakDirective","ngController","ngControllerDirective","ngForm","ngFormDirective","ngHide","ngHideDirective","ngIf","ngIfDirective","ngInclude","ngIncludeDirective","ngInit","ngInitDirective","ngNonBindable","ngNonBindableDirective","ngPluralize","ngPluralizeDirective","ngRepeat","ngRepeatDirective","ngShow","ngShowDirective","ngStyle","ngStyleDirective","ngSwitch","ngSwitchDirective","ngSwitchWhen","ngSwitchWhenDirective","ngSwitchDefault","ngSwitchDefaultDirective","ngOptions","ngOptionsDirective","ngTransclude","ngTranscludeDirective","ngModel","ngModelDirective","ngList","ngListDirective","ngChange","ngChangeDirective","pattern","patternDirective","ngPattern","required","requiredDirective","ngRequired","minlength","minlengthDirective","ngMinlength","maxlength","maxlengthDirective","ngMaxlength","ngValue","ngValueDirective","ngModelOptions","ngModelOptionsDirective","ngIncludeFillContentDirective","ngAttributeAliasDirectives","ngEventDirectives","$anchorScroll","$AnchorScrollProvider","$animate","$AnimateProvider","$animateCss","$CoreAnimateCssProvider","$$animateJs","$$CoreAnimateJsProvider","$$animateQueue","$$CoreAnimateQueueProvider","$$AnimateRunner","$$AnimateRunnerFactoryProvider","$$animateAsyncRun","$$AnimateAsyncRunFactoryProvider","$browser","$BrowserProvider","$cacheFactory","$CacheFactoryProvider","$controller","$ControllerProvider","$document","$DocumentProvider","$$isDocumentHidden","$$IsDocumentHiddenProvider","$exceptionHandler","$ExceptionHandlerProvider","$filter","$FilterProvider","$$forceReflow","$$ForceReflowProvider","$interpolate","$InterpolateProvider","$interval","$IntervalProvider","$http","$HttpProvider","$httpParamSerializer","$HttpParamSerializerProvider","$httpParamSerializerJQLike","$HttpParamSerializerJQLikeProvider","$httpBackend","$HttpBackendProvider","$xhrFactory","$xhrFactoryProvider","$jsonpCallbacks","$jsonpCallbacksProvider","$location","$LocationProvider","$log","$LogProvider","$parse","$ParseProvider","$rootScope","$RootScopeProvider","$q","$QProvider","$$q","$$QProvider","$sce","$SceProvider","$sceDelegate","$SceDelegateProvider","$sniffer","$SnifferProvider","$templateCache","$TemplateCacheProvider","$templateRequest","$TemplateRequestProvider","$$testability","$$TestabilityProvider","$timeout","$TimeoutProvider","$window","$WindowProvider","$$rAF","$$RAFProvider","$$jqLite","$$jqLiteProvider","$$Map","$$MapProvider","$$cookieReader","$$CookieReaderProvider","angularVersion","fnCamelCaseReplace","all","toUpperCase","kebabToCamel","DASH_LOWERCASE_REGEXP","jqLiteAcceptsData","NODE_TYPE_ELEMENT","NODE_TYPE_DOCUMENT","jqLiteBuildFragment","tmp","fragment","createDocumentFragment","HTML_REGEXP","appendChild","createElement","TAG_NAME_REGEXP","exec","wrap","wrapMap","_default","innerHTML","XHTML_TAG_REGEXP","lastChild","childNodes","firstChild","textContent","createTextNode","argIsString","trim","jqLiteMinErr","parsed","SINGLE_TAG_REGEXP","jqLiteAddNodes","jqLiteReady","jqLiteClone","jqLiteDealoc","onlyDescendants","querySelectorAll","jqLiteOff","unsupported","expandoStore","jqLiteExpandoStore","handle","removeHandler","listenerFns","removeEventListener","MOUSE_EVENT_MAP","jqLiteRemoveData","expandoId","ng339","jqCache","createIfNecessary","jqId","jqLiteData","isSimpleSetter","isSimpleGetter","massGetter","jqLiteHasClass","selector","jqLiteRemoveClass","cssClasses","setAttribute","cssClass","jqLiteAddClass","existingClasses","root","elements","jqLiteController","jqLiteInheritedData","documentElement","names","parentNode","NODE_TYPE_DOCUMENT_FRAGMENT","host","jqLiteEmpty","removeChild","jqLiteRemove","keepData","jqLiteDocumentLoaded","action","win","readyState","setTimeout","trigger","addEventListener","getBooleanAttrName","booleanAttr","BOOLEAN_ATTR","BOOLEAN_ELEMENTS","createEventHandler","eventHandler","event","isDefaultPrevented","event.isDefaultPrevented","defaultPrevented","eventFns","eventFnsLength","immediatePropagationStopped","originalStopImmediatePropagation","stopImmediatePropagation","event.stopImmediatePropagation","stopPropagation","isImmediatePropagationStopped","event.isImmediatePropagationStopped","handlerWrapper","specialHandlerWrapper","defaultHandlerWrapper","handler","specialMouseHandlerWrapper","target","related","relatedTarget","jqLiteContains","$get","this.$get","hasClass","classes","addClass","removeClass","hashKey","nextUidFn","objType","NgMapShim","_keys","_values","_lastKey","_lastIndex","extractArgs","fnText","Function","prototype","STRIP_COMMENTS","ARROW_ARG","FN_ARGS","anonFn","args","modulesToLoad","supportObject","delegate","provider_","providerInjector","instantiate","providerCache","providerSuffix","enforceReturnValue","enforcedReturnValue","result","instanceInjector","factoryFn","enforce","loadModules","moduleFn","runInvokeQueue","invokeArgs","loadedModules","message","stack","createInternalInjector","cache","getService","serviceName","caller","INSTANTIATING","err","shift","injectionArgs","locals","$inject","$$annotate","msie","func","$$ngIsClass","Type","ctor","annotate","has","NgMap","$injector","instanceCache","decorFn","origProvider","orig$get","origProvider.$get","origInstance","$delegate","protoInstanceInjector","autoScrollingEnabled","disableAutoScrolling","this.disableAutoScrolling","getFirstAnchor","list","some","scrollTo","scrollIntoView","offset","scroll","yOffset","getComputedStyle","style","position","getBoundingClientRect","bottom","elemTop","top","scrollBy","hash","elm","getElementById","getElementsByName","autoScrollWatch","autoScrollWatchAction","newVal","oldVal","mergeClasses","splitClasses","klass","prepareAnimateOptions","options","Browser","completeOutstandingRequest","outstandingRequestCount","outstandingRequestCallbacks","pop","cacheStateAndFireUrlChange","pendingLocation","fireStateOrUrlChange","cacheState","cachedState","getCurrentState","lastCachedState","lastHistoryState","prevLastHistoryState","lastBrowserUrl","url","urlChangeListeners","listener","history","clearTimeout","pendingDeferIds","isMock","$$completeOutstandingRequest","$$incOutstandingRequestCount","self.$$incOutstandingRequestCount","notifyWhenNoOutstandingRequests","self.notifyWhenNoOutstandingRequests","callback","href","baseElement","state","self.url","sameState","sameBase","stripHash","substr","self.state","urlChangeInit","onUrlChange","self.onUrlChange","$$applicationDestroyed","self.$$applicationDestroyed","off","$$checkUrlChange","baseHref","self.baseHref","defer","self.defer","delay","timeoutId","cancel","self.defer.cancel","deferId","cacheFactory","cacheId","refresh","entry","freshEnd","staleEnd","n","link","p","nextEntry","prevEntry","caches","size","stats","id","capacity","Number","MAX_VALUE","lruHash","put","lruEntry","remove","removeAll","destroy","cacheFactory.info","cacheFactory.get","$$sanitizeUriProvider","parseIsolateBindings","directiveName","isController","LOCAL_REGEXP","bindings","definition","scopeName","bindingCache","$compileMinErr","mode","collection","optional","attrName","assertValidDirectiveName","getDirectiveRequire","require","REQUIRE_PREFIX_REGEXP","hasDirectives","COMMENT_DIRECTIVE_REGEXP","CLASS_DIRECTIVE_REGEXP","ALL_OR_NOTHING_ATTRS","EVENT_HANDLER_ATTR_REGEXP","this.directive","registerDirective","directiveFactory","Suffix","directives","priority","restrict","this.component","registerComponent","makeInjectable","tElement","tAttrs","$element","$attrs","template","templateUrl","ddo","controllerAs","identifierForController","transclude","bindToController","aHrefSanitizationWhitelist","this.aHrefSanitizationWhitelist","regexp","imgSrcSanitizationWhitelist","this.imgSrcSanitizationWhitelist","this.debugInfoEnabled","enabled","preAssignBindingsEnabled","this.preAssignBindingsEnabled","TTL","onChangesTtl","this.onChangesTtl","commentDirectivesEnabledConfig","commentDirectivesEnabled","this.commentDirectivesEnabled","cssClassDirectivesEnabledConfig","cssClassDirectivesEnabled","this.cssClassDirectivesEnabled","flushOnChangesQueue","onChangesQueue","errors","Attributes","attributesToCopy","l","$attr","$$element","setSpecialAttr","specialAttrHolder","attributes","attribute","removeNamedItem","setNamedItem","safeAddClass","className","$compileNodes","transcludeFn","maxPriority","ignoreDirective","previousCompileContext","compositeLinkFn","compileNodes","$$addScopeClass","namespace","publicLinkFn","cloneConnectFn","needsNewScope","$parent","$new","parentBoundTranscludeFn","transcludeControllers","futureParentElement","$$boundTransclude","$linkNode","wrapTemplate","controllerName","instance","$$addScopeInfo","nodeList","$rootElement","childLinkFn","childScope","childBoundTranscludeFn","stableNodeList","nodeLinkFnFound","linkFns","idx","nodeLinkFn","transcludeOnThisElement","createBoundTranscludeFn","templateOnThisElement","notLiveList","attrs","linkFnFound","mergeConsecutiveTextNodes","collectDirectives","applyDirectivesToNode","terminal","sibling","nodeValue","previousBoundTranscludeFn","boundTranscludeFn","transcludedScope","cloneFn","controllers","containingScope","$$transcluded","boundSlots","$$slots","slotName","attrsMap","addDirective","directiveNormalize","isNgAttr","nAttrs","attrStartName","attrEndName","ngAttrName","NG_ATTR_BINDING","PREFIX_REGEXP","multiElementMatch","MULTI_ELEMENT_DIR_RE","directiveIsMultiElement","nName","addAttrInterpolateDirective","animVal","addTextInterpolateDirective","NODE_TYPE_COMMENT","collectCommentDirectives","byPriority","groupScan","attrStart","attrEnd","depth","groupElementsLinkFnWrapper","linkFn","groupedElementsLink","compilationGenerator","eager","compiled","lazyCompilation","compileNode","templateAttrs","jqCollection","originalReplaceDirective","preLinkFns","postLinkFns","addLinkFns","pre","post","newIsolateScopeDirective","$$isolateScope","cloneAndAnnotateFn","linkNode","controllersBoundTransclude","cloneAttachFn","hasElementTranscludeDirective","elementControllers","slotTranscludeFn","scopeToChild","controllerScope","newScopeDirective","isSlotFilled","transcludeFn.isSlotFilled","controllerDirectives","setupControllers","templateDirective","$$originalDirective","$$isolateBindings","scopeBindingInfo","initializeDirectiveBindings","removeWatches","$on","controllerDirective","$$bindings","bindingInfo","controllerResult","getControllers","controllerInstance","$onChanges","initialChanges","$onInit","$doCheck","$onDestroy","callOnDestroyHook","invokeLinkFn","$postLink","terminalPriority","nonTlbTranscludeDirective","hasTranscludeDirective","hasTemplate","$compileNode","$template","childTranscludeFn","didScanForMultipleTransclusion","mightHaveMultipleTransclusionError","directiveValue","$$start","$$end","assertNoDuplicate","$$tlb","scanningIndex","candidateDirective","$$createComment","replaceWith","$$parentNode","replaceDirective","slots","slotMap","filledSlots","elementSelector","contents","filled","$$newScope","denormalizeTemplate","removeComments","templateNamespace","newTemplateAttrs","templateDirectives","unprocessedDirectives","markDirectiveScope","mergeTemplateAttributes","compileTemplateUrl","Math","max","inheritType","dataName","property","controllerKey","$scope","$transclude","newScope","tDirectives","startAttrName","endAttrName","multiElement","srcAttr","dstAttr","$set","linkQueue","afterTemplateNodeLinkFn","afterTemplateChildLinkFn","beforeTemplateCompileNode","origAsyncDirective","derivedSyncDirective","then","content","tempTemplateAttrs","beforeTemplateLinkNode","linkRootElement","$$destroyed","oldClasses","catch","delayedNodeLinkFn","ignoreChildLinkFn","diff","what","previousDirective","wrapModuleNameIfDefined","moduleName","text","interpolateFn","textInterpolateCompileFn","templateNode","templateNodeParent","hasCompileParent","$$addBindingClass","textInterpolateLinkFn","$$addBindingInfo","expressions","interpolateFnWatchAction","wrapper","getTrustedContext","attrNormalizedName","HTML","RESOURCE_URL","trustedContext","allOrNothing","mustHaveExpression","attrInterpolatePreLinkFn","$$observers","newValue","$$inter","$$scope","oldValue","$updateClass","elementsToRemove","newNode","firstElementToRemove","removeCount","j2","replaceChild","hasData","annotation","recordChanges","currentValue","previousValue","$$postDigest","changes","triggerOnChangesHook","SimpleChange","removeWatchCollection","initializeBinding","lastValue","parentGet","parentSet","compare","removeWatch","$observe","_UNINITIALIZED_VALUE","literal","assign","parentValueWatch","parentValue","$stateful","$watchCollection","deepWatch","initialValue","parentValueWatchAction","SIMPLE_ATTR_NAME","$normalize","$addClass","classVal","$removeClass","newClasses","toAdd","tokenDifference","toRemove","writeAttr","booleanKey","aliasedKey","ALIASED_ATTR","observer","trimmedSrcset","srcPattern","rawUris","nbrUrisWith2parts","floor","innerIdx","lastTuple","removeAttr","listeners","startSymbol","endSymbol","binding","isolated","noTemplate","compile.$$createComment","comment","createComment","previous","current","SPECIAL_CHARS_REGEXP","str1","str2","values","tokens1","tokens2","token","jqNodes","ident","CNTRL_REG","globals","this.has","register","this.register","allowGlobals","this.allowGlobals","addIdentifier","identifier","expression","later","$controllerMinErr","controllerPrototype","$controllerInit","changeListener","hidden","doc","exception","cause","serializeValue","v","toISOString","ngParamSerializer","params","jQueryLikeParamSerializer","serialize","toSerialize","topLevel","defaultHttpResponseTransform","headers","tempData","JSON_PROTECTION_PREFIX","contentType","jsonStart","JSON_START","JSON_ENDS","$httpMinErr","parseHeaders","line","headerVal","headerKey","headersGetter","headersObj","transformData","status","fns","defaults","transformResponse","transformRequest","d","common","CONTENT_TYPE_APPLICATION_JSON","patch","xsrfCookieName","xsrfHeaderName","paramSerializer","jsonpCallbackParam","useApplyAsync","this.useApplyAsync","interceptorFactories","interceptors","requestConfig","chainInterceptors","promise","thenFn","rejectFn","executeHeaderFns","headerContent","processedHeaders","headerFn","header","response","resp","reject","mergeHeaders","defHeaders","reqHeaders","defHeaderName","lowercaseDefHeaderName","reqHeaderName","requestInterceptors","responseInterceptors","resolve","reversedInterceptors","interceptor","request","requestError","responseError","serverRequest","reqData","withCredentials","sendReq","finally","createApplyHandlers","eventHandlers","applyHandlers","callEventHandler","$applyAsync","$$phase","done","headersString","statusText","resolveHttpPromise","resolvePromise","deferred","resolvePromiseWithResult","removePendingReq","pendingRequests","cachedResp","isJsonp","getTrustedResourceUrl","buildUrl","sanitizeJsonpCallbackParam","defaultCache","xsrfValue","urlIsSameOrigin","timeout","responseType","uploadEventHandlers","serializedParams","callbackParamRegex","interceptorFactory","createShortMethods","createShortMethodsWithData","createXhr","XMLHttpRequest","createHttpBackend","$browserDefer","callbacks","rawDocument","jsonpReq","callbackPath","async","body","wasCalled","timeoutRequest","jsonpDone","xhr","abort","createCallback","getResponse","removeCallback","open","setRequestHeader","onload","xhr.onload","responseText","urlResolve","protocol","getAllResponseHeaders","onerror","onabort","ontimeout","upload","send","this.startSymbol","this.endSymbol","escape","ch","unescapeText","escapedStartRegexp","escapedEndRegexp","constantWatchDelegate","objectEquality","constantInterp","unwatch","constantInterpolateWatch","parseStringifyInterceptor","getTrusted","$interpolateMinErr","interr","unescapedText","exp","$$watchDelegate","endIndex","parseFns","textLength","expressionPositions","startSymbolLength","endSymbolLength","throwNoconcat","compute","interpolationFn","$watchGroup","interpolateFnWatcher","oldValues","currValue","$interpolate.startSymbol","$interpolate.endSymbol","interval","count","invokeApply","hasParams","iteration","setInterval","clearInterval","skipApply","$$intervalId","tick","notify","intervals","interval.cancel","$$state","pur","encodePath","segments","parseAbsoluteUrl","absoluteUrl","locationObj","parsedUrl","$$protocol","$$host","hostname","$$port","port","DEFAULT_PORTS","parseAppUrl","DOUBLE_SLASH_REGEX","$locationMinErr","prefixed","$$path","pathname","$$search","search","$$hash","startsWith","stripBaseUrl","base","trimEmptyHash","LocationHtml5Url","appBase","appBaseNoFile","basePrefix","$$html5","$$parse","this.$$parse","pathUrl","$$compose","this.$$compose","$$url","$$absUrl","$$urlUpdatedByLocation","$$parseLinkUrl","this.$$parseLinkUrl","relHref","appUrl","prevAppUrl","rewrittenUrl","LocationHashbangUrl","hashPrefix","withoutBaseUrl","withoutHashUrl","windowsFilePathExp","firstPathSegmentMatch","LocationHashbangInHtml5Url","locationGetter","locationGetterSetter","preprocess","html5Mode","requireBase","rewriteLinks","this.hashPrefix","this.html5Mode","setBrowserUrlWithFallback","oldUrl","oldState","afterLocationChange","$broadcast","absUrl","LocationMode","initialUrl","lastIndexOf","IGNORE_URI_REGEXP","ctrlKey","metaKey","shiftKey","which","button","absHref","preventDefault","initializing","newUrl","newState","$digest","$locationWatch","currentReplace","$$replace","urlOrStateChanged","debug","debugEnabled","this.debugEnabled","flag","formatError","formatStackTrace","sourceURL","consoleLog","logFn","log","navigator","userAgent","warn","getStringValue","ifDefined","plusFn","r","isPure","parentIsPure","AST","MemberExpression","computed","UnaryExpression","PURITY_ABSOLUTE","BinaryExpression","operator","CallExpression","PURITY_RELATIVE","findConstantAndWatchExpressions","ast","allConstants","argsToWatch","astIsPure","Program","expr","Literal","toWatch","argument","left","right","LogicalExpression","ConditionalExpression","alternate","consequent","Identifier","object","isStatelessFilter","callee","AssignmentExpression","ArrayExpression","ObjectExpression","properties","ThisExpression","LocalsExpression","getInputs","lastExpression","isAssignable","assignableAST","NGValueParameter","ASTCompiler","ASTInterpreter","Parser","lexer","astCompiler","getValueOf","objectValueOf","literals","identStart","identContinue","addLiteral","this.addLiteral","literalName","literalValue","setIdentifierFns","this.setIdentifierFns","identifierStart","identifierContinue","expressionInputDirtyCheck","oldValueOfValue","compareObjectIdentity","inputsWatchDelegate","parsedExpression","prettyPrintExpression","inputExpressions","inputs","lastResult","oldInputValueOf","expressionInputWatch","newInputValue","oldInputValueOfValues","oldInputValues","expressionInputsWatch","changed","oneTimeWatchDelegate","oneTimeWatch","oneTimeListener","old","oneTimeLiteralWatchDelegate","isAllDefined","allDefined","constantWatch","addInterceptor","interceptorFn","watchDelegate","useInputs","regularInterceptedExpression","oneTimeInterceptedExpression","map","depurifier","s","$parseOptions","noUnsafeEval","isIdentifierStart","isIdentifierContinue","oneTime","cacheKey","Lexer","parser","errorOnUnhandledRejections","qFactory","this.errorOnUnhandledRejections","nextTick","exceptionHandler","Deferred","Promise","this.resolve","this.reject","rejectPromise","this.notify","progress","notifyPromise","processChecks","queueSize","checkQueue","toCheck","errorMessage","scheduleProcessQueue","pending","processScheduled","$$reject","$qMinErr","$$resolve","doResolve","doReject","doNotify","handleCallback","resolver","callbackOutput","when","errback","progressBack","$Q","resolveFn","TypeError","onFulfilled","onRejected","promises","counter","results","race","requestAnimationFrame","webkitRequestAnimationFrame","cancelAnimationFrame","webkitCancelAnimationFrame","webkitCancelRequestAnimationFrame","rafSupported","raf","timer","supported","createChildScopeClass","ChildScope","$$watchers","$$nextSibling","$$childHead","$$childTail","$$listeners","$$listenerCount","$$watchersCount","$id","$$ChildScope","$rootScopeMinErr","lastDirtyWatch","applyAsyncId","digestTtl","this.digestTtl","destroyChildScope","$event","currentScope","cleanUpScope","$$prevSibling","$root","Scope","beginPhase","phase","incrementWatchersCount","decrementListenerCount","initWatchVal","flushApplyAsync","applyAsyncQueue","scheduleApplyAsync","isolate","child","watchExp","watcher","last","eq","$$digestWatchIndex","deregisterWatch","watchExpressions","watchGroupAction","changeReactionScheduled","firstRun","newValues","deregisterFns","shouldCall","deregisterWatchGroup","unwatchFn","watchGroupSubAction","$watchCollectionInterceptor","_value","bothNaN","newItem","oldItem","internalArray","oldLength","changeDetected","newLength","internalObject","veryOldValue","trackVeryOldValue","changeDetector","initRun","$watchCollectionAction","watch","watchers","dirty","ttl","watchLog","logIdx","asyncTask","asyncQueuePosition","asyncQueue","msg","next","postDigestQueuePosition","postDigestQueue","eventName","this.$watchGroup","$eval","$applyAsyncExpression","namedListeners","indexOfListener","$emit","targetScope","listenerArgs","$$asyncQueue","$$postDigestQueue","$$applyAsyncQueue","sanitizeUri","uri","isImage","regex","normalizedVal","adjustMatcher","matcher","$sceMinErr","escapeForRegexp","adjustMatchers","matchers","adjustedMatchers","SCE_CONTEXTS","resourceUrlWhitelist","resourceUrlBlacklist","this.resourceUrlWhitelist","this.resourceUrlBlacklist","matchUrl","generateHolderType","Base","holderType","trustedValue","$$unwrapTrustedValue","this.$$unwrapTrustedValue","holderType.prototype.valueOf","holderType.prototype.toString","htmlSanitizer","trustedValueHolderBase","byType","CSS","URL","JS","trustAs","Constructor","maybeTrusted","allowed","this.enabled","sce","isEnabled","sce.isEnabled","sce.getTrusted","parseAs","sce.parseAs","enumValue","lName","UNDERSCORE_LOWERCASE_REGEXP","eventSupport","hasHistoryPushState","nw","process","chrome","app","runtime","pushState","android","boxee","bodyStyle","transitions","animations","hasEvent","divElm","httpOptions","this.httpOptions","handleRequestFn","tpl","ignoreRequestError","totalPendingRequests","transformer","handleError","$templateRequestMinErr","testability","testability.findBindings","opt_exactMatch","getElementsByClassName","matches","dataBinding","bindingName","testability.findModels","prefixes","attributeEquals","testability.getLocation","testability.setLocation","testability.whenStable","deferreds","$$timeoutId","timeout.cancel","urlParsingNode","requestUrl","originUrl","$$CookieReader","safeDecodeURIComponent","lastCookies","lastCookieString","cookieArray","cookie","currentCookieString","filters","suffix","currencyFilter","dateFilter","filterFilter","jsonFilter","limitToFilter","lowercaseFilter","numberFilter","orderByFilter","uppercaseFilter","comparator","anyPropertyKey","matchAgainstAnyProp","getTypeForFilter","expressionType","predicateFn","createPredicateFn","shouldMatchPrimitives","actual","expected","deepCompare","dontMatchWholeObject","actualType","expectedType","expectedVal","matchAnyProperty","actualVal","$locale","formats","NUMBER_FORMATS","amount","currencySymbol","fractionSize","CURRENCY_SYM","PATTERNS","maxFrac","formatNumber","GROUP_SEP","DECIMAL_SEP","number","numStr","exponent","digits","numberOfIntegerDigits","zeros","ZERO_CHAR","MAX_DIGITS","roundNumber","parsedNumber","minFrac","fractionLen","min","roundAt","digit","k","carry","reduceRight","groupSep","decimalSep","isNaN","isInfinity","isFinite","isZero","abs","formattedText","integerLen","decimals","reduce","groups","lgSize","gSize","negPre","negSuf","posPre","posSuf","padNumber","num","negWrap","neg","dateGetter","dateStrGetter","shortForm","standAlone","getFirstThursdayOfYear","year","dayOfWeekOnFirst","getDay","weekGetter","firstThurs","getFullYear","thisThurs","getMonth","getDate","round","eraGetter","ERAS","jsonStringToDate","string","R_ISO8601_STR","tzHour","tzMin","dateSetter","setUTCFullYear","setFullYear","timeSetter","setUTCHours","setHours","m","ms","parseFloat","format","DATETIME_FORMATS","NUMBER_STRING","DATE_FORMATS_SPLIT","DATE_FORMATS","spacing","limit","begin","Infinity","sliceFn","end","processPredicates","sortPredicates","predicate","descending","defaultCompare","v1","v2","type1","type2","value1","value2","sortPredicate","reverseOrder","compareFn","predicates","compareValues","getComparisonObject","tieBreaker","predicateValues","doComparison","ngDirective","FormController","$$controls","$error","$$success","$pending","$name","$dirty","$valid","$pristine","$submitted","$invalid","$$parentForm","nullFormCtrl","$$animate","setupValidity","$$classCache","INVALID_CLASS","VALID_CLASS","addSetValidityMethod","cachedToggleClass","ctrl","switchValue","toggleValidationCss","validationErrorKey","isValid","unset","clazz","$setValidity","clazz.prototype.$setValidity","isObjectEmpty","PENDING_CLASS","combinedState","stringBasedInputType","$formatters","$isEmpty","baseInputType","composing","ev","ngTrim","$viewValue","$$hasNativeValidators","$setViewValue","deferListener","origValue","keyCode","PARTIAL_VALIDATION_TYPES","PARTIAL_VALIDATION_EVENTS","validity","origBadInput","badInput","origTypeMismatch","typeMismatch","$render","ctrl.$render","createDateParser","mapping","iso","ISO_DATE_REGEXP","yyyy","MM","dd","HH","getHours","mm","ss","getSeconds","sss","getMilliseconds","part","createDateInputType","parseDate","dynamicDateInputType","isValidDate","parseObservedDateValue","badInputChecker","$options","getOption","previousDate","$$parserName","$parsers","parsedDate","ngModelMinErr","ngMin","minVal","$validators","ctrl.$validators.min","$validate","ngMax","maxVal","ctrl.$validators.max","VALIDITY_STATE_PROPERTY","numberFormatterParser","NUMBER_REGEXP","parseNumberAttrVal","countDecimals","numString","decimalSymbolIndex","isValidForStep","viewValue","stepBase","step","isNonIntegerValue","isNonIntegerStepBase","isNonIntegerStep","valueDecimals","stepBaseDecimals","stepDecimals","decimalCount","multiplier","pow","parseConstantExpr","parseFn","classDirective","arrayDifference","toClassString","classValue","classString","toFlatValue","flatValue","hasUndefined","indexWatchExpression","digestClassCounts","classArray","classesToUpdate","classCounts","ngClassIndexWatchAction","newModulo","oldClassString","oldModulo","ngClassOneTimeWatchAction","newClassValue","newClassString","ngClassWatchAction","oldClassArray","newClassArray","toRemoveArray","toAddArray","toRemoveString","toAddString","isOneTime","watchExpression","watchInterceptor","watchAction","moduloTwo","$index","NgModelController","$modelValue","$$rawModelValue","$asyncValidators","$viewChangeListeners","$untouched","$touched","defaultModelOptions","$$parsedNgModel","$$parsedNgModelAssign","$$ngModelGet","$$ngModelSet","$$pendingDebounce","$$parserValid","$$currentValidationRunId","defineProperty","$$attr","$$timeout","$$exceptionHandler","setupModelWatcher","ngModelWatch","modelValue","formatters","$$updateEmptyClasses","$$lastCommittedViewValue","$$runValidators","ModelOptions","$$options","setOptionSelectedStatus","optionEl","REGEX_STRING_REGEXP","documentMode","rules","ngCspElement","ngCspAttribute","noInlineStyle","name_","el","allowAutoBootstrap","currentScript","HTMLScriptElement","SVGScriptElement","srcs","getNamedItem","every","origin","full","major","minor","dot","codeName","expando","JQLite._data","MS_HACK_REGEXP","mouseleave","mouseenter","optgroup","tbody","tfoot","colgroup","caption","thead","th","td","Node","contains","compareDocumentPosition","ready","removeData","jqLiteHasData","jqLiteCleanData","removeAttribute","css","NODE_TYPE_ATTRIBUTE","lowercasedName","isBooleanAttr","ret","getText","$dv","multiple","selected","arg1","arg2","nodeCount","jqLiteOn","types","addHandler","noEventListener","one","onFn","replaceNode","insertBefore","children","contentDocument","prepend","wrapNode","detach","after","newElement","toggleClass","condition","classCondition","nextElementSibling","getElementsByTagName","extraParameters","dummyEvent","handlerArgs","eventFnsCopy","arg3","unbind","nanKey","_idx","_transformKey","delete","FN_ARG_SPLIT","FN_ARG","argDecl","underscore","$animateMinErr","postDigestElements","updateData","handleCSSClassChanges","existing","pin","domOperation","from","to","classesAdded","add","classesRemoved","runner","complete","classNameFilter","customFilter","$$registeredAnimations","this.customFilter","filterFn","this.classNameFilter","reservedRegex","NG_ANIMATE_CLASSNAME","domInsert","parentElement","afterElement","afterNode","ELEMENT_NODE","previousElementSibling","enter","move","leave","addclass","setClass","animate","tempClasses","waitForTick","waitQueue","passed","AnimateRunner","setHost","rafTick","_doneCallbacks","_tick","this._tick","_state","chain","AnimateRunner.chain","AnimateRunner.all","runners","onProgress","DONE_COMPLETE_STATE","getPromise","resolveHandler","rejectHandler","pause","resume","_resolve","INITIAL_STATE","DONE_PENDING_STATE","initialOptions","closed","$$prepared","cleanupStyles","start","UNINITIALIZED_VALUE","isFirstChange","SimpleChange.prototype.isFirstChange","domNode","offsetWidth","APPLICATION_JSON","$interpolateMinErr.throwNoconcat","$interpolateMinErr.interr","callbackId","called","callbackMap","PATH_MATCH","locationPrototype","paramValue","Location","Location.prototype.state","$parseMinErr","OPERATORS","ESCAPE","lex","tokens","readString","peek","readNumber","peekMultichar","readIdent","is","isWhitespace","ch2","ch3","op2","op3","op1","throwError","chars","codePointAt","isValidIdentifierStart","isValidIdentifierContinue","cp","charCodeAt","cp1","cp2","isExpOperator","colStr","peekCh","quote","rawString","hex","String","fromCharCode","rep","ExpressionStatement","Property","program","expressionStatement","expect","filterChain","assignment","ternary","logicalOR","consume","logicalAND","equality","relational","additive","multiplicative","unary","primary","arrayDeclaration","selfReferential","parseArguments","baseExpression","peekToken","kind","e1","e2","e3","e4","peekAhead","t","nextId","vars","own","assignable","stage","computing","recurse","return_","generateFunction","fnKey","intoId","watchId","fnString","USE","STRICT","filterPrefix","watchFns","varsPrefix","section","nameId","recursionFn","skipWatchIdCheck","if_","lazyAssign","computedMember","lazyRecurse","plus","not","getHasOwnProperty","isNull","nonComputedMember","notNull","member","filterName","defaultValue","UNSAFE_CHARACTERS","SAFE_IDENTIFIER","stringEscapeFn","stringEscapeRegex","c","skip","init","fn.assign","rhs","lhs","unary+","unary-","unary!","binary+","binary-","binary*","binary/","binary%","binary===","binary!==","binary==","binary!=","binary<","binary>","binary<=","binary>=","binary&&","binary||","ternary?:","yy","y","MMMM","MMM","M","LLLL","H","hh","EEEE","EEE","ampmGetter","AMPMS","Z","timeZoneGetter","zone","paddedZone","ww","w","G","GG","GGG","GGGG","longEraGetter","ERANAMES","xlinkHref","propName","defaultLinkFn","normalized","ngBooleanAttrWatchAction","htmlAttr","ngAttrAliasWatchAction","$addControl","$$renameControl","nullFormRenameControl","control","$removeControl","$setDirty","$setPristine","$setSubmitted","$rollbackViewValue","$commitViewValue","newName","oldName","PRISTINE_CLASS","DIRTY_CLASS","SUBMITTED_CLASS","$setUntouched","formDirectiveFactory","isNgForm","getSetter","ngFormCompile","formElement","nameAttr","ngFormPreLink","ctrls","handleFormSubmission","setter","URL_REGEXP","EMAIL_REGEXP","DATE_REGEXP","DATETIMELOCAL_REGEXP","WEEK_REGEXP","MONTH_REGEXP","TIME_REGEXP","inputType","textInputType","weekParser","isoWeek","existingDate","week","hours","seconds","milliseconds","addDays","numberInputType","ngStep","stepVal","ctrl.$validators.step","urlInputType","ctrl.$validators.url","emailInputType","email","ctrl.$validators.email","radioInputType","doTrim","checked","rangeInputType","setInitialValueAndObserver","htmlAttrName","changeFn","minChange","supportsRange","elVal","maxChange","stepChange","hasMinAttr","hasMaxAttr","hasStepAttr","originalRender","rangeUnderflow","rangeOverflow","rangeRender","noopMinValidator","minValidator","noopMaxValidator","maxValidator","nativeStepValidator","stepMismatch","stepValidator","checkboxInputType","trueValue","ngTrueValue","falseValue","ngFalseValue","ctrl.$isEmpty","CONSTANT_VALUE_REGEXP","updateElementValue","propValue","tplAttr","ngValueConstantLink","ngValueLink","valueWatchAction","$compile","ngBindCompile","templateElement","ngBindLink","ngBindWatchAction","ngBindTemplateCompile","ngBindTemplateLink","ngBindHtmlCompile","ngBindHtmlGetter","ngBindHtmlWatch","sceValueOf","ngBindHtmlLink","ngBindHtmlWatchAction","getTrustedHtml","forceAsyncEvents","ngEventHandler","previousElements","ngIfWatchAction","srcExp","onloadExp","autoScrollExp","autoscroll","changeCounter","previousElement","currentElement","cleanupLastIncludeContent","ngIncludeWatchAction","afterAnimation","thisChangeId","namespaceAdaptedClone","trimValues","$$initGetterSetters","invokeModelGetter","invokeModelSetter","this.$$ngModelGet","this.$$ngModelSet","$$$p","NOT_EMPTY_CLASS","EMPTY_CLASS","UNTOUCHED_CLASS","TOUCHED_CLASS","$setTouched","prevValid","prevModelValue","allowInvalid","that","allValid","$$writeModelToScope","doneCallback","processSyncValidators","syncValidatorsValid","validator","Boolean","setValidity","processAsyncValidators","validatorPromises","validationDone","localValidationRunId","processParseErrors","errorKey","$$parseAndValidate","$$debounceViewValueCommit","debounceDelay","$overrideModelOptions","createChild","ngModelCompile","ngModelPreLink","modelCtrl","formCtrl","optionsCtrl","ngModelPostLink","setTouched","DEFAULT_REGEXP","inheritAll","updateOnDefault","updateOn","debounce","getterSetter","NgModelOptionsController","$$attrs","parentOptions","parentCtrl","modelOptionsDefinition","ngOptionsMinErr","NG_OPTIONS_REGEXP","parseOptionsExpression","optionsExp","selectElement","Option","selectValue","label","group","disabled","getOptionValuesKeys","optionValues","optionValuesKeys","keyName","itemKey","valueName","selectAs","trackBy","viewValueFn","trackByFn","getTrackByValueFn","getHashOfValue","getTrackByValue","getLocals","displayFn","groupByFn","disableWhenFn","valuesFn","getWatchables","watchedArray","optionValuesLength","disableWhen","getOptions","optionItems","selectValueMap","optionItem","getOptionFromViewValue","getViewValueFromOption","optionTemplate","optGroupTemplate","ngOptionsPreLink","registerOption","ngOptionsPostLink","getAndUpdateSelectedOption","updateOptionElement","selectCtrl","ngModelCtrl","hasEmptyOption","emptyOption","providedEmptyOption","unknownOption","listFragment","generateUnknownOptionValue","selectCtrl.generateUnknownOptionValue","writeValue","selectCtrl.writeValue","selectedOptions","readValue","selectCtrl.readValue","selectedValues","selections","selectedOption","selectedIndex","removeUnknownOption","selectUnknownOrEmptyOption","unselectEmptyOption","selectCtrl.registerOption","optionScope","needsRerender","$isEmptyOptionSelected","updateOptions","groupElementMap","addOption","groupElement","optionElement","nextValue","BRACE","IS_WHEN","updateElementText","newText","numberExp","whenExp","whens","whensExpFns","braceReplacement","watchRemover","lastCount","attributeName","tmpMatch","whenKey","ngPluralizeWatchAction","countIsNaN","pluralCat","whenExpFn","ngRepeatMinErr","updateScope","valueIdentifier","keyIdentifier","arrayLength","$first","$last","$middle","$odd","$even","ngRepeatCompile","ngRepeatEndComment","aliasAs","trackByExp","trackByExpGetter","trackByIdExpFn","trackByIdArrayFn","trackByIdObjFn","hashFnLocals","ngRepeatLink","lastBlockMap","ngRepeatAction","previousNode","nextNode","nextBlockMap","collectionLength","trackById","collectionKeys","nextBlockOrder","trackByIdFn","blockKey","ngRepeatTransclude","ngShowWatchAction","NG_HIDE_CLASS","NG_HIDE_IN_PROGRESS_CLASS","ngHideWatchAction","ngStyleWatchAction","newStyles","oldStyles","NgSwitchController","cases","ngSwitchController","selectedTranscludes","selectedElements","previousLeaveAnimations","selectedScopes","spliceFactory","ngSwitchWatchAction","selectedTransclude","caseElement","selectedScope","anchor","ngSwitchWhenSeparator","whenCase","ngTranscludeMinErr","ngTranscludeCompile","fallbackLinkFn","ngTranscludePostLink","useFallbackContent","ngTranscludeSlot","ngTranscludeCloneAttachFn","noopNgModelController","SelectController","scheduleRender","renderScheduled","scheduleViewValueUpdate","renderAfter","updateScheduled","optionsMap","renderUnknownOption","self.renderUnknownOption","unknownVal","updateUnknownOption","self.updateUnknownOption","self.generateUnknownOptionValue","self.removeUnknownOption","selectEmptyOption","self.selectEmptyOption","self.unselectEmptyOption","self.readValue","realVal","hasOption","self.writeValue","currentlySelectedOption","hashedVal","self.addOption","removeOption","self.removeOption","self.hasOption","$hasEmptyOption","self.$hasEmptyOption","$isUnknownOptionSelected","self.$isUnknownOptionSelected","self.$isEmptyOptionSelected","self.selectUnknownOrEmptyOption","self.registerOption","optionAttrs","interpolateValueFn","interpolateTextFn","valueAttributeObserveAction","removal","previouslySelected","interpolateWatchAction","removeValue","selectPreLink","shouldBeSelected","lastView","lastViewRef","selectMultipleWatch","ngModelCtrl.$isEmpty","selectPostLink","ngModelCtrl.$render","selectCtrlName","ctrl.$validators.required","patternExp","ctrl.$validators.pattern","intVal","ctrl.$validators.maxlength","ctrl.$validators.minlength","getDecimals","opt_precision","ONE","OTHER","$$csp","head"]
}
diff --git a/libs/bower_components/angular/bower.json b/libs/bower_components/angular/bower.json
index 97cd24e4ef..18333fa6a3 100644
--- a/libs/bower_components/angular/bower.json
+++ b/libs/bower_components/angular/bower.json
@@ -1,6 +1,6 @@
{
"name": "angular",
- "version": "1.4.10",
+ "version": "1.6.5",
"license": "MIT",
"main": "./angular.js",
"ignore": [],
diff --git a/libs/bower_components/angular/package.json b/libs/bower_components/angular/package.json
index ac67549ee7..445d290f9d 100644
--- a/libs/bower_components/angular/package.json
+++ b/libs/bower_components/angular/package.json
@@ -1,6 +1,6 @@
{
"name": "angular",
- "version": "1.4.10",
+ "version": "1.6.5",
"description": "HTML enhanced for web apps",
"main": "index.js",
"scripts": {
diff --git a/libs/bower_components/ngDialog/.bower.json b/libs/bower_components/ngDialog/.bower.json
index c690de1684..6dec19b8f7 100644
--- a/libs/bower_components/ngDialog/.bower.json
+++ b/libs/bower_components/ngDialog/.bower.json
@@ -1,6 +1,5 @@
{
- "name": "ngDialog",
- "version": "0.2.14",
+ "name": "ng-dialog",
"homepage": "https://github.com/likeastore/ngDialog",
"description": "Modal dialogs and popups provider for Angular.js applications",
"main": [
@@ -33,15 +32,22 @@
"Gruntfile.js"
],
"dependencies": {
- "angular": "~1"
+ "angular": ">=1.5"
},
- "_release": "0.2.14",
+ "devDependencies": {
+ "angular-mocks": ">=1.5"
+ },
+ "resolutions": {
+ "angular": "1.6.1"
+ },
+ "version": "1.3.0",
+ "_release": "1.3.0",
"_resolution": {
"type": "version",
- "tag": "0.2.14",
- "commit": "c81c4e3b51837ea03b848bf63a8590cd0cb45aef"
+ "tag": "v1.3.0",
+ "commit": "6077308105abd0ed8636f7d67af614c711df626a"
},
- "_source": "git://github.com/likeastore/ngDialog.git",
- "_target": "~0.2.0",
+ "_source": "https://github.com/likeastore/ngDialog.git",
+ "_target": "~1.3.0",
"_originalSource": "ngDialog"
} \ No newline at end of file
diff --git a/libs/bower_components/ngDialog/CHANGELOG.md b/libs/bower_components/ngDialog/CHANGELOG.md
new file mode 100644
index 0000000000..62937c8b90
--- /dev/null
+++ b/libs/bower_components/ngDialog/CHANGELOG.md
@@ -0,0 +1,109 @@
+# 1.0.0
+- [x] Changes close element to button with proper accessibility rules ([PR-553](https://github.com/likeastore/ngDialog/pull/533))
+
+# 0.5.0
+- [x] Angular version in `package.json` is now `1.4.x` ([ISSUE-244](https://github.com/likeastore/ngDialog/issues/244))
+- [x] fixed spelling of `ariaLabelledById` and `ariaLabelledBySelector` inside README file by [@rylan](https://github.com/rylan) ([PR-242](https://github.com/likeastore/ngDialog/pull/242))
+- [x] fixed bug with $templateCache when template was already cached before calling ngDialog by [@mixer2](https://github.com/mixer2) ([PR-241](https://github.com/likeastore/ngDialog/pull/241))
+- [x] add dialog close value to the $broadcast'ed events by [@Kidlike](https://github.com/Kidlike) ([PR-252](https://github.com/likeastore/ngDialog/pull/252))
+- [x] fix for removing package version from bower.json as it's ignored by bower by [@kkirsche](https://github.com/kkirsche) ([PR-255](https://github.com/likeastore/ngDialog/pull/255))
+- [x] fix for non-working `ngDialog.close()` when no arguments are provided by [@egor-smirnov](https://github.com/egor-smirnov) ([ISSUE-243](https://github.com/likeastore/ngDialog/issues/243))
+- [x] added documentation for `controllerAs` option by [@egor-smirnov](https://github.com/egor-smirnov) ([ISSUE-248](https://github.com/likeastore/ngDialog/issues/248))
+- [x] new option `disableAnimation` that could be used for disabling animation of dialog by [@egor-smirnov](https://github.com/egor-smirnov) ([ISSUE-159](https://github.com/likeastore/ngDialog/issues/159))
+- [x] new attribute `ng-dialog-overlay` for ngDialog directive by [@egor-smirnov](https://github.com/egor-smirnov) ([ISSUE-198](https://github.com/likeastore/ngDialog/issues/198))
+- [x] new attribute `ng-dialog-bind-to-controller` for ngDialog directive by [@egor-smirnov](https://github.com/egor-smirnov) ([ISSUE-236](https://github.com/likeastore/ngDialog/issues/236))
+- [x] fix for error when `controllerAs` is used together with inline controller definition by [@andrewogburn](https://github.com/andrewogburn) ([PR-260](https://github.com/likeastore/ngDialog/pull/260), [ISSUE-259](https://github.com/likeastore/ngDialog/issues/259))
+- [x] added method `getOpenDialogs()` that returns array of all opened dialogs by [@egor-smirnov](https://github.com/egor-smirnov) ([ISSUE-240](https://github.com/likeastore/ngDialog/issues/240))
+- [x] added two new events emmited by ngDialog - `ngDialog.templateLoading` and `ngDialog.templateLoaded` by [@egor-smirnov](https://github.com/egor-smirnov) ([ISSUE-231](https://github.com/likeastore/ngDialog/issues/231))
+- [x] added `ngDialogId` field to scope of opened dialog (this field is equal to id of dialog) by [@egor-smirnov](https://github.com/egor-smirnov) ([ISSUE-274](https://github.com/likeastore/ngDialog/issues/274), [ISSUE-264](https://github.com/likeastore/ngDialog/issues/264))
+- [x] fix for odd timing issue when using the `closeByNavigation` option alongside `angular-ui-router package` by [@jdelibas](https://github.com/jdelibas) ([PR-277](https://github.com/likeastore/ngDialog/pull/277))
+- [x] fix for disabling of body scroll when dialog is opened for some cases by [@marmotz](https://github.com/marmotz) ([PR-280](https://github.com/likeastore/ngDialog/pull/280), [ISSUE-206](https://github.com/likeastore/ngDialog/issues/206))
+- [x] fix for avoiding require multiple angular when it's required already when using CommonJS by [@michaeleekk](https://github.com/michaeleekk) ([PR-284](https://github.com/likeastore/ngDialog/pull/284))
+- [x] fix for `frunt build` that was resetting html.ngdialog changes by [@davidvuong](https://github.com/davidvuong) ([PR-285](https://github.com/likeastore/ngDialog/pull/285))
+- [x] moved Angular to dev.dependencies by [@platdesign](https://github.com/platdesign) ([PR-287](https://github.com/likeastore/ngDialog/pull/287))
+- [x] fix for unboudning all keydown events when dialog is closed by [@daanoz](https://github.com/daanoz) ([PR-291](https://github.com/likeastore/ngDialog/pull/291))
+- [x] ignore elements with tabindex=-1 when tabbing by [@roaks3](https://github.com/roaks3) ([PR-292](https://github.com/likeastore/ngDialog/pull/292), [ISSUE-281](https://github.com/likeastore/ngDialog/issues/281))
+
+That was huge. Thanks everybody!
+
+# 0.4.0
+
+- [x] new `resolve` option for defining locals for ngDialog controller by [@rur](https://github.com/rur) ([PR-182](https://github.com/likeastore/ngDialog/pull/182))
+- [x] support for `controllerAs` pattern by [@andrewogburn](https://github.com/andrewogburn) and [@sprbikkel](https://github.com/sprbikkel) ([PR-205](https://github.com/likeastore/ngDialog/pull/205), [PR-224](https://github.com/likeastore/ngDialog/pull/224))
+- [x] added accessibility improvements (keyboard focus management / ARIA attribute) by [@richardszalay](https://github.com/richardszalay) ([PR-166](https://github.com/likeastore/ngDialog/pull/166))
+- [x] added `isOpen(id)` public method by [@kasimoglou](https://github.com/kasimoglou) ([PR-219](https://github.com/likeastore/ngDialog/pull/219))
+- [x] fix for `esc` should only close top dialog by [@jemise111](https://github.com/jemise111) ([PR-226](https://github.com/likeastore/ngDialog/pull/226))
+- [x] fix for flickering dialogs in Internet Explorer by [@MvHMontySCOUT](https://github.com/MvHMontySCOUT) ([PR-207](https://github.com/likeastore/ngDialog/pull/207), discussion - [ISSUE-142](https://github.com/likeastore/ngDialog/issues/142))
+- [x] fix issue when opening multiple dialogs simultaneously by [@bchelli](https://github.com/bchelli) ([PR-221](https://github.com/likeastore/ngDialog/pull/221))
+- [x] various minor bug fixes, general improvements and examples updates
+
+Thanks everybody, you're awesome! :dancer: :+1:
+
+# 0.3.12
+
+- [x] better `box-sizing` policy
+
+# 0.3.11
+
+- [x] prevent the modal from closing if preCloseCallback returns a falsy value
+
+# 0.3.10
+
+- [x] fix negative dialogs count
+
+# 0.3.9
+
+- [x] fix destroy scope with animation for multiple dialog [ISSUE-125](https://github.com/likeastore/ngDialog/issues/125)
+
+# 0.3.8
+
+- [x] Make ngDialog work with AngularJS 1.3 when `$compileProvider` debug info is disabled - `$compileProvider.debugInfoEnabled(false)`.
+
+# 0.3.7
+
+- [x] support for [UMD pattern](https://github.com/umdjs/umd)
+- [x] get rid of `module` variable in source code
+- [x] get rid of `window` dependency in favor of `$window`
+
+# 0.3.6
+
+- [x] finally (after many requests) `$scope.ngDialogData` holds reference to the objects passed instead of copying them.
+
+# 0.3.5
+
+- [x] fix for HammerJS 1.1 breaking dialog
+
+# 0.3.4
+
+- [x] add support for `overlay` option (https://github.com/likeastore/ngDialog/issues/117)
+
+# 0.3.3
+
+- [x] successful tests and support for Angular.js `1.3.x`
+
+# 0.3.2
+
+- [x] fixed an issue with Hammer.js manager
+
+# 0.3.1
+
+- [x] `ngDialog.closing` event
+- [x] `closeByNavigation` option
+- [x] `templateUrl` option
+
+# 0.3.0
+
+- [x] `.openConfirm()` method
+- [x] `.setForceBodyReload()` method
+- [x] add support for `.setDefaults()` method
+- [x] fix scroll jump bug
+- [x] fix event broadcasting to occur at the times they should
+- [x] fix for `ngDialogData` being passed after controller instantiation
+- [x] allow objects for `ngDialogData`
+- [x] `cache` option
+- [x] `preCloseCallback` option
+- [x] `appendTo` option
+- [x] `name` option
+- [x] minor code fixes and optimizations, examples improvements
+
+# 0.2.2
diff --git a/libs/bower_components/ngDialog/CONTRIBUTING.md b/libs/bower_components/ngDialog/CONTRIBUTING.md
new file mode 100644
index 0000000000..3c60d97e8f
--- /dev/null
+++ b/libs/bower_components/ngDialog/CONTRIBUTING.md
@@ -0,0 +1,37 @@
+# Testing
+
+ngDialog is in use by many people. In order to ensure quality and prevent regressions, all contributions require unit tests proving that the contribution:
+
+1. Fixes a bug
+2. Performs new functionality as expected
+3. Behaves in a predictable manner when misused (bad input given as an option for example)
+
+In addition, where a contribution is aimed at resolving a bug or implementing a feature that can only be measured in a real browser, an e2e test proving the expected behaviour should be included.
+
+# README
+
+If your PR adds new behaviour or modifies existing behaviour, the README should be updated.
+
+# Coding style
+
+> All code in any code-base should look like a single person typed it, no matter how many people contributed.
+
+This section describes the coding style guide of the repo. You might not agree with it and that's fine, but if you're going to send PRs, treat this guide as a law.
+
+##### There are not too much of rules to follow:
+
+- indent style is 4 spaces
+- always use single quotes
+- one space after `if`, `for`, `while`, etc.
+- no spaces between `(`,`)` and statement content
+- use one `var` per variable unless you don't assign any values to it (and it's short enough)
+- always `'use strict'` mode
+- always use strict comparisons: `===` and `!==`
+- use semicolons
+- don't use comma-first notation
+
+##### These tools will help your IDE to remind you with some of the rules listed above:
+
+- [EditorConfig](http://editorconfig.org)
+- [JSHint](http://jshint.com)
+- [ESLint](http://eslint.org)
diff --git a/libs/bower_components/ngDialog/README.md b/libs/bower_components/ngDialog/README.md
index 907dc44d65..357cf73c0b 100644
--- a/libs/bower_components/ngDialog/README.md
+++ b/libs/bower_components/ngDialog/README.md
@@ -1,33 +1,71 @@
+<!-- ### LOOKING FOR MAINTAINER. PLEASE PING [@voronianski](https://twitter.com/voronianski)! -->
# ngDialog
-Modal dialogs and popups provider for [Angular.js](http://angularjs.org/) applications.
+[![build status](http://img.shields.io/travis/likeastore/ngDialog.svg)](https://travis-ci.org/likeastore/ngDialog)
+[![npm version](http://badge.fury.io/js/ng-dialog.svg)](http://badge.fury.io/js/ng-dialog)
+[![github tag](https://img.shields.io/github/tag/likeastore/ngDialog.svg)](https://github.com/likeastore/ngDialog/tags)
+[![Download Count](https://img.shields.io/npm/dm/ng-dialog.svg)](http://www.npmjs.com/package/ng-dialog)
+[![Code Climate](https://codeclimate.com/github/likeastore/ngDialog/badges/gpa.svg)](https://codeclimate.com/github/likeastore/ngDialog)
-ngDialog is small (~2Kb), has minimalistic API, highly customizable through themes and has only Angular.js as dependency.
+> Modal dialogs and popups provider for [AngularJS](http://angularjs.org/) applications.
+
+ngDialog is ~10KB (minified), has minimalistic API, is highly customizable through themes and has only AngularJS as dependency.
### [Demo](http://likeastore.github.io/ngDialog)
## Install
-You can download all necessary ngDialog files manually or install it with bower:
+You can download all necessary ngDialog files manually, or install it with bower:
```bash
-bower install ngDialog
+bower install ng-dialog
+```
+
+or npm:
+
+```bash
+npm install ng-dialog
```
## Usage
-You need only to include ``ngDialog.js`` and ``ngDialog.css`` (as minimal setup) to your project and then you can start using ``ngDialog`` provider in your directives, controllers and services. For example in controllers:
+You need only to include ``ngDialog.js``, ``ngDialog.css`` and ``ngDialog-theme-default.css`` (as minimal setup) to your project and then you can start using the ``ngDialog`` provider in your directives, controllers and services. For example:
+
+```html
+<link rel="stylesheet" href="lib/ng-dialog/css/ngDialog.min.css">
+<link rel="stylesheet" href="lib/ng-dialog/css/ngDialog-theme-default.min.css">
+<script src="lib/ng-dialog/js/ngDialog.min.js"></script>
+```
+
+Define the className to be the ``ngDialog-theme-default``.
+
+For example in controllers:
```javascript
var app = angular.module('exampleApp', ['ngDialog']);
app.controller('MainCtrl', function ($scope, ngDialog) {
- $scope.clickToOpen = function () {
- ngDialog.open({ template: 'popupTmpl.html' });
- };
+ $scope.clickToOpen = function () {
+ ngDialog.open({ template: 'popupTmpl.html', className: 'ngdialog-theme-default' });
+ };
});
```
+## Collaboration
+
+Your help is appreciated! If you've found a bug or if something is not clear, please raise an issue.
+
+Ideally, if you've found an issue, you will submit a PR that meets our [contributor guidelines][contributor-guidelines].
+
+### Running Tests
+
+```bash
+git clone git@github.com:likeastore/ngDialog.git
+cd ngDialog
+npm i
+npm run test
+```
+
## API
ngDialog service provides easy to use and minimalistic API, but in the same time it's powerful enough. Here is the list of accessible methods that you can use:
@@ -38,7 +76,7 @@ ngDialog service provides easy to use and minimalistic API, but in the same time
Method allows to open dialog window, creates new dialog instance on each call. It accepts ``options`` object as the only argument.
-### Options:
+#### Options:
##### ``template {String}``
@@ -46,8 +84,8 @@ Dialog template can be loaded through ``path`` to external html template or ``<s
```html
<script type="text/ng-template" id="templateId">
- <h1>Template heading</h1>
- <p>Content goes here</p>
+ <h1>Template heading</h1>
+ <p>Content goes here</p>
</script>
```
@@ -55,7 +93,29 @@ Dialog template can be loaded through ``path`` to external html template or ``<s
ngDialog.open({ template: 'templateId' });
```
-Also it is possible to use simple string as template together with ``plain`` option.
+Also it is possible to use a simple string as template together with ``plain`` option.
+
+##### Pro Tip about templates
+
+It's not always necessary to place your external html template inside ``<script>`` tag. You could put these templates into ``$templateCache`` like this:
+
+```javascript
+angular.module('dialog.templates').run(['$templateCache', function($templateCache) {
+ $templateCache.put('templateId', 'template content');
+}]);
+```
+
+Then it would be possible to include the ``dialog.templates`` module into the dependencies of your main module and start using this template as ``templateId``.
+
+There is no need to do these actions manually.
+You could use one of the plugins specifically for these purposes. They are available for different build systems including most popular Gulp / Grunt:
+
+- [gulp-angular-templatecache](https://github.com/miickel/gulp-angular-templatecache)
+- [gulp-ng-html2js](https://www.npmjs.com/package/gulp-ng-html2js)
+- [grunt-html2js](https://github.com/karlgoldstein/grunt-html2js)
+- [broccoli-html2js](https://www.npmjs.com/package/broccoli-html2js)
+
+You could find more detailed examples on each of these pages.
##### ``plain {Boolean}``
@@ -63,19 +123,19 @@ If ``true`` allows to use plain string as template, default ``false``:
```javascript
ngDialog.open({
- template: '<p>my template</p>',
- plain: true
+ template: '<p>my template</p>',
+ plain: true
});
```
##### ``controller {String} | {Array} | {Object}``
-Controller that will be used for dialog window if necessary. The controller can be specified either by referring it by name or directly inline.
+Controller that will be used for the dialog window if necessary. The controller can be specified either by referring it by name or directly inline.
```javascript
ngDialog.open({
- template: 'externalTemplate.html',
- controller: 'SomeController'
+ template: 'externalTemplate.html',
+ controller: 'SomeController'
});
```
@@ -83,24 +143,59 @@ or
```javascript
ngDialog.open({
- template: 'externalTemplate.html',
- controller: ['$scope', 'otherService', function($scope, otherService) {
- // controller logic
- }]
+ template: 'externalTemplate.html',
+ controller: ['$scope', 'otherService', function($scope, otherService) {
+ // controller logic
+ }]
+});
+```
+
+##### ``controllerAs {String} ``
+
+You could optionally specify `controllerAs` parameter for your controller. Then inside your template it will be possible to refer this controller by the value specified by `controllerAs`.
+
+Usage of `controllerAs` syntax is currently recommended by the AngularJS team.
+
+##### ``resolve {Object.<String, Function>}``
+
+An optional map of dependencies which should be injected into the controller.
+If any of these dependencies are promises, ngDialog will wait for them all to be resolved
+or one to be rejected before the controller is instantiated.
+
+If all the promises are resolved successfully, the values of the resolved promises are
+injected.
+
+The map object
+is:
+- `key` – `{String}`: a name of a dependency to be injected into the controller.
+- `factory` - `{String | Function}`: If `String` then it is an alias for a service.
+ Otherwise if `Function`, then it is injected using `$injector.invoke` and the return
+ value is treated as the dependency. If the result is a promise, it is resolved
+ before its value is injected into the controller.
+
+
+```javascript
+ngDialog.open({
+ controller: function Ctrl(dep) {/*...*/},
+ resolve: {
+ dep: function depFactory() {
+ return 'dep value';
+ }
+ }
});
```
##### ``scope {Object}``
-Scope object that will be passed to dialog. If you use controller with separate ``$scope`` service this object will be passed to ``$scope.$parent`` param:
+Scope object that will be passed to the dialog. If you use a controller with separate ``$scope`` service this object will be passed to the ``$scope.$parent`` param:
```javascript
$scope.value = true;
ngDialog.open({
- template: 'externalTemplate.html',
- className: 'ngdialog-theme-plain',
- scope: $scope
+ template: 'externalTemplate.html',
+ className: 'ngdialog-theme-plain',
+ scope: $scope
});
```
@@ -112,12 +207,12 @@ ngDialog.open({
##### ``scope.closeThisDialog(value)``
-In addition ``.closeThisDialog(value)`` method gets injected to passed ``$scope``. This allows you to close dialog straight from handler in a popup element, for example:
+In addition ``.closeThisDialog(value)`` method gets injected to passed ``$scope``. This allows you to close the dialog straight from the handler in a popup element, for example:
```html
<div class="dialog-contents">
- <input type="text"/>
- <input type="button" value="OK" ng-click="checkInput() && closeThisDialog('Some value')"/>
+ <input type="text"/>
+ <input type="button" value="OK" ng-click="checkInput() && closeThisDialog('Some value')"/>
</div>
```
@@ -125,32 +220,70 @@ Any value passed to this function will be attached to the object which resolves
##### ``data {String | Object | Array}``
-Any data that you want to be stored in controller's ``$parent`` scope, it could be stringified JSON as well.
+Any serializable data that you want to be stored in the controller's dialog scope. (``$scope.ngDialogData``). From version `0.3.6` `$scope.ngDialogData` keeps references to the objects instead of copying them.
+
+Additionally, you will have the dialog id available as ``$scope.ngDialogId``. If you are using ``$scope.ngDialogData``, it'll be also available under ``$scope.ngDialogData.ngDialogId``.
##### ``className {String}``
-This option allows to controll dialog look, you can use built-in [themes](https://github.com/likeastore/ngDialog#themes) or create your own styled modals.
+This option allows you to control the dialog's look, you can use built-in [themes](https://github.com/likeastore/ngDialog#themes) or create your own styled modals.
-This example enables one of built-in ngDialog themes - ``ngdialog-theme-default`` (do not forget to include necessary css files):
+This example enables one of the built-in ngDialog themes - ``ngdialog-theme-default`` (do not forget to include necessary css files):
```javascript
ngDialog.open({
- template: 'templateId',
- className: 'ngdialog-theme-default'
+ template: 'templateId',
+ className: 'ngdialog-theme-default'
});
```
+Note: If the className is not mentioned, the dialog will not display correctly.
Check [themes](https://github.com/likeastore/ngDialog#themes) block to learn more.
+##### ``appendClassName {String}``
+
+Unlike the `className` property, which overrides any default classes specified through the `setDefaults()` method ([see docs](https://github.com/likeastore/ngDialog#setdefaultsoptions)), `appendClassName` allows for the addition of a class on top of any defaults.
+
+For example, the following would add both the `ngdialog-theme-default` and `ngdialog-custom` classes to the dialog opened:
+
+```javascript
+ngDialogProvider.setDefaults({
+ className: 'ngdialog-theme-default'
+});
+```
+```javascript
+ngDialog.open({
+ template: 'template.html',
+ appendClassName: 'ngdialog-custom'
+});
+```
+
+##### ``disableAnimation {Boolean}``
+
+If ``true`` then animation for the dialog will be disabled, default ``false``.
+
+##### ``overlay {Boolean}``
+
+If ``false`` it allows to hide the overlay div behind the modals, default ``true``.
+
##### ``showClose {Boolean}``
-If ``false`` it allows to hide close button on modals, default ``true``.
+If ``false`` it allows to hide the close button on modals, default ``true``.
##### ``closeByEscape {Boolean}``
-It allows to close modals by clicking ``Esc`` button, default ``true``.
+It allows to close modals by clicking the ``Esc`` key, default ``true``.
+
+This will close all open modals if there are several of them opened at the same time.
-This will close all open modals if there several of them open at the same time.
+##### ``closeByNavigation {Boolean}``
+
+It allows to close modals on state change (history.back, $state.go, etc.), default ``false``.
+Compatible with ui-router and angular-router.
+Set this value to true if you want your modal to close when you go back or change state.
+Set this value to false if you want your modal to stay open when you change state within your app.
+
+This will close all open modals if there are several of them opened at the same time.
##### ``closeByDocument {Boolean}``
@@ -160,26 +293,154 @@ It allows to close modals by clicking on overlay background, default ``true``. I
Specify your element where to append dialog instance, accepts selector string (e.g. ``#yourId``, ``.yourClass``). If not specified appends dialog to ``body`` as default behavior.
-### Defaults
+##### ``cache {Boolean}``
-##### ``setDefaults(options)``
+Pass ``false`` to disable template caching. Useful for developing purposes, default is ``true``.
-You're able to set default settings through ``ngDialogProvider``:
+##### ``name {String} | {Number}``
+
+Give a name for a dialog instance. It is useful for identifying specific dialog if there are multiple dialog boxes opened.
+
+#### ``onOpenCallback {String} | {Function}``
+
+Provide either the name of a function or a function to be called after the dialog is opened. This callback can be used instead of the `ngdialog.opened` event.
+It provides with a way to register a hook for when the dialog is appended to the DOM and about to be shown to the user.
+
+##### ``preCloseCallback {String} | {Function}``
+
+Provide either the name of a function or a function to be called before the dialog is closed. If the callback function specified in the option returns ``false`` then the dialog will not be closed. Alternatively, if the callback function returns a promise that gets resolved the dialog will be closed.
+
+The ``preCloseCallback`` function receives as a parameter ``value`` which is the same value sent to ``.close(id, value)``.
+
+The primary use case for this feature is a dialog which contains user actions (e.g. editing data) for which you want the ability to confirm whether to discard unsaved changes upon exiting the dialog (e.g. via the escape key).
+
+This example uses an inline function with a ``window.confirm`` call in the ``preCloseCallback`` function:
```javascript
-var app = angular.module('myApp', ['ngDialog']);
-app.config(['ngDialogProvider', function (ngDialogProvider) {
- ngDialogProvider.setDefaults({
- className: 'ngdialog-theme-default',
- plain: true,
- showClose: true,
- closeByDocument: true,
- closeByEscape: true
- });
-}]);
+ngDialog.open({
+ preCloseCallback: function(value) {
+ if (confirm('Are you sure you want to close without saving your changes?')) {
+ return true;
+ }
+ return false;
+ }
+});
+```
+
+In another example, a callback function with a nested confirm ngDialog is used:
+
+```javascript
+ngDialog.open({
+ preCloseCallback: function(value) {
+ var nestedConfirmDialog = ngDialog.openConfirm({
+ template:'\
+ <p>Are you sure you want to close the parent dialog?</p>\
+ <div class="ngdialog-buttons">\
+ <button type="button" class="ngdialog-button ngdialog-button-secondary" ng-click="closeThisDialog(0)">No</button>\
+ <button type="button" class="ngdialog-button ngdialog-button-primary" ng-click="confirm(1)">Yes</button>\
+ </div>',
+ plain: true
+ });
+
+ // NOTE: return the promise from openConfirm
+ return nestedConfirmDialog;
+ }
+});
+```
+
+##### ``trapFocus {Boolean}``
+
+When ``true``, ensures that the focused element remains within the dialog to conform to accessibility recommendations. Default value is ``true``
+
+##### ``preserveFocus {Boolean}``
+
+When ``true``, closing the dialog restores focus to the element that launched it. Designed to improve keyboard accessibility. Default value is ``true``
+
+##### ``ariaAuto {Boolean}``
+
+When ``true``, automatically selects appropriate values for any unspecified accessibility attributes. Default value is ``true``
+
+See [Accessibility](#Accessibility) for more information.
+
+##### ``ariaRole {String}``
+
+Specifies the value for the ``role`` attribute that should be applied to the dialog element. Default value is ``null`` (unspecified)
+
+See [Accessibility](#Accessibility) for more information.
+
+##### ``ariaLabelledById {String}``
+
+Specifies the value for the ``aria-labelledby`` attribute that should be applied to the dialog element. Default value is ``null`` (unspecified)
+
+If specified, the value is not validated against the DOM. See [Accessibility](#Accessibility) for more information.
+
+##### ``ariaLabelledBySelector {String}``
+
+Specifies the CSS selector for the element to be referenced by the ``aria-labelledby`` attribute on the dialog element. Default value is ``null`` (unspecified)
+
+If specified, the first matching element is used. See [Accessibility](#Accessibility) for more information.
+
+##### ``ariaDescribedById {String}``
+
+Specifies the value for the ``aria-describedby`` attribute that should be applied to the dialog element. Default value is ``null`` (unspecified)
+
+If specified, the value is not validated against the DOM. See [Accessibility](#Accessibility) for more information.
+
+##### ``ariaDescribedBySelector {String}``
+
+Specifies the CSS selector for the element to be referenced by the ``aria-describedby`` attribute on the dialog element. Default value is ``null`` (unspecified)
+
+If specified, the first matching element is used. See [Accessibility](#Accessibility) for more information.
+
+##### ``width {Number | String}``
+
+This option allows you to control the dialog's width. Default value is `null` (unspecified)
+
+If you provide a Number, 'px' will be appended. To use a custom metric, use a String, e.g. `'40%'`.
+
+For example, the following will add `width: 400px;` to the dialog when opened:
+
+```
+ngDialog.open({
+ template: 'template.html',
+ width: 400
+});
+```
+
+In another example, the following will add `width: 40%;`:
+
+```
+ngDialog.open({
+ template: 'template.html',
+ width: '40%'
+});
+```
+
+##### ``height {Number | String}``
+
+This option allows you to control the dialog's height. Default value is `null` (unspecified)
+
+If you provide a Number, 'px' will be appended. To use a custom metric, use a String, e.g. `'40%'`.
+
+For example, the following will add `height: 400px;` to the dialog when opened:
+
+```
+ngDialog.open({
+ template: 'template.html',
+ height: 400
+});
+```
+
+In another example, the following will add `height: 40%;`:
+
+```
+ngDialog.open({
+ template: 'template.html',
+ height: '40%'
+});
```
-### Returns:
+#### Returns:
The ``open()`` method returns an object with some useful properties.
@@ -201,21 +462,40 @@ This allows you do to something like this:
```javascript
var dialog = ngDialog.open({
- template: 'templateId'
+ template: 'templateId'
});
dialog.closePromise.then(function (data) {
- console.log(data.id + ' has been dismissed.');
+ console.log(data.id + ' has been dismissed.');
});
```
===
+### ``.setDefaults(options)``
+
+You're able to set default settings through ``ngDialogProvider``:
+
+```javascript
+var app = angular.module('myApp', ['ngDialog']);
+app.config(['ngDialogProvider', function (ngDialogProvider) {
+ ngDialogProvider.setDefaults({
+ className: 'ngdialog-theme-default',
+ plain: true,
+ showClose: true,
+ closeByDocument: true,
+ closeByEscape: true
+ });
+}]);
+```
+
+===
+
### ``.openConfirm(options)``
Opens a dialog that by default does not close when hitting escape or clicking outside the dialog window. The function returns a promise that is either resolved or rejected depending on the way the dialog was closed.
-### Options:
+#### Options:
The options are the same as the regular [``.open()``](https://github.com/likeastore/ngDialog#options) method with an extra function added to the scope:
@@ -227,18 +507,24 @@ The function accepts a single optional parameter which is used as the value of t
```html
<div class="dialog-contents">
- Some message
- <button ng-click="closeThisDialog()">Cancel</button>
- <button ng-click="confirm()">Confirm</button>
+ Some message
+ <button ng-click="closeThisDialog()">Cancel</button>
+ <button ng-click="confirm()">Confirm</button>
</div>
```
-### Returns:
+#### Returns:
An Angular promise object that is resolved if the ``.confirm()`` function is used to close the dialog, otherwise the promise is rejected. The resolve value and the reject reason is defined by the value passed to the ``confirm()`` or ``closeThisDialog()`` call respectively.
===
+### ``.isOpen(id)``
+
+Method accepts dialog's ``id`` and returns a ``Boolean`` value indicating whether the specified dialog is open.
+
+===
+
### ``.close(id, value)``
Method accepts dialog's ``id`` as string argument to close specific dialog window, if ``id`` is not specified it will close all currently active modals (same behavior as ``.closeAll()``). Takes an optional value to resolve the dialog promise with (or all dialog promises).
@@ -251,71 +537,165 @@ Method manages closing all active modals on the page. Takes an optional value to
===
+### ``.getOpenDialogs()``
+
+Method that returns array which includes the ids of opened dialogs.
+
+===
+
+### ``.setForceHtmlReload({Boolean})``
+
+Adds an additional listener on every ``$locationChangeSuccess`` event and gets update version of ``html`` into dialog. May be useful in some rare cases when you're dependant on DOM changes, defaults to ``false``. Use it in module's config as provider instance:
+
+```javascript
+var app = angular.module('exampleApp', ['ngDialog']);
+
+app.config(function (ngDialogProvider) {
+ ngDialogProvider.setForceHtmlReload(true);
+});
+```
+
+===
+
### ``.setForceBodyReload({Boolean})``
-Adds additional listener on every ``$locationChangeSuccess`` event and gets update version of ``body`` into dialog. Maybe useful in some rare cases when you're dependant on DOM changes, defaults to ``false``. Use it in module's config as provider instance:
+Adds additional listener on every ``$locationChangeSuccess`` event and gets updated version of ``body`` into dialog. Maybe useful in some rare cases when you're dependant on DOM changes, defaults to ``false``. Use it in module's config as provider instance:
```javascript
var app = angular.module('exampleApp', ['ngDialog']);
app.config(function (ngDialogProvider) {
- ngDialogProvider.setForceBodyReload(true);
+ ngDialogProvider.setForceBodyReload(true);
});
```
+===
+
+### ``.setOpenOnePerName({Boolean})``
+Default value: false
+
+Define whether or not opening a dialog with the same name more than once simultaneously is allowed. Assigning true prevents opening a second dialog.
+
+Setting it in the ngDialogProvider:
+```javascript
+var app = angular.module('exampleApp', ['ngDialog']);
+
+app.config(function (ngDialogProvider) {
+ ngDialogProvider.setOpenOnePerName(true);
+});
+```
+
+Make sure to remember to add a 'name' when opening a dialog.
+**ngDialog 'open' and 'openConfirm' functions will return `undefined` if the dialog was not opened.**
+
## Directive
-By default ngDialog module is served with ``ngDialog`` directive which can be used as attribute for buttons, links, etc. Almost all ``.open()`` options are available through tag attributes as well, the only difference is that ``ng-template`` id or path of template file is required.
+By default the ngDialog module is served with the ``ngDialog`` directive which can be used as attribute for buttons, links, etc. Almost all ``.open()`` options are available through tag attributes as well, the only difference is that ``ng-template`` id or path of template file is required.
Some imaginary button, for example, will look like:
```html
<button type="button"
- ng-dialog="templateId.html"
- ng-dialog-class="ngdialog-theme-flat"
- ng-dialog-controller="ModalCtrl"
- ng-dialog-close-previous>
- Open modal text
+ ng-dialog="templateId.html"
+ ng-dialog-class="ngdialog-theme-flat"
+ ng-dialog-controller="ModalCtrl"
+ ng-dialog-close-previous>
+ Open modal text
</button>
```
-Directive contains one more additional but very useful option, it's an attribute named ``ng-dialog-close-previous``. It allows you to close previously opened dialogs automaticly.
+You could optionally use ``ng-dialog-bind-to-controller`` to bind scope you've defined via parameter of directive to controller.
+More information about bindToController is available [here](http://blog.thoughtram.io/angularjs/2015/01/02/exploring-angular-1.3-bindToController.html).
+
+Directive contains one more additional but very useful option, it's an attribute named ``ng-dialog-close-previous``. It allows you to close previously opened dialogs automatically.
## Events
-Everytime when ngDialog is opened or closed we're broadcasting two events (dispatching events downwards to all child scopes):
+Everytime ngDialog is opened or closed we're broadcasting three events (dispatching events downwards to all child scopes):
- ``ngDialog.opened``
+- ``ngDialog.closing``
+
- ``ngDialog.closed``
This allows you to register your own listeners, example:
```javascript
$rootScope.$on('ngDialog.opened', function (e, $dialog) {
- console.log('ngDialog opened: ' + $dialog.attr('id'));
+ console.log('ngDialog opened: ' + $dialog.attr('id'));
});
```
+``ngDialog.closing`` is different than ``ngDialog.closed`` in that it is fired immediately when the dialog begins closing, whereas ``ngDialog.closed`` is fired after all animations are complete. Both will be fired even when animation end support is not detected.
+
+Additionally we trigger following 2 events related to loading of template for dialog:
+
+- ``ngDialog.templateLoading``
+
+- ``ngDialog.templateLoaded``
+
+In case you are loading your templates from an external location, you could use above events to show some kind of loader.
+
+Finally, we trigger the following event when adding padding to or removing padding from the body tag to compensate for scrollbar toggling:
+
+- ``ngDialog.setPadding``
+
+The ``ngDialog.setPadding`` event will communicate the pixel value being added to the body tag so you can add it to any other elements in your layout at the same time (often fixed-position elements will need this).
+
+
## Themes
-Currently ngDialog contains two default themes that show how easily you can create your own. Check ``example`` folder for demonstration purposes.
+Currently _ngDialog_ contains two default themes that show how easily you can create your own. Check ``example`` folder for demonstration purposes.
+
+## Accessibility
+
+ngDialog supports accessible keyboard navigation via the ``trapFocus`` and ``preserveFocus`` options.
+
+The ``role``, ``aria-labelledby`` and ``aria-describedby`` attributes are also supported, and are rendered as follows.
+
+Dialog ``role`` attribute:
+
+* ``options.ariaRole``, if specified
+* "dialog" if ``options.ariaAuto`` is ``true`` and the dialog contains any focusable elements
+* "alertdialog" is ``options.ariaAuto`` is ``true`` and the dialog does *not* contain any focusable elements
+
+Dialog ``aria-labelledby`` attribute:
+
+* ``options.ariaLabelledById``, if specified
+* If ``options.ariaLabelledBySelector`` is specified, the first matching element will be found and assigned an id (if required) and that id will be used
+* If ``options.ariaAuto`` is ``true``, the first heading element in the dialog (h1-6) will be found and processed as per ``ariaLabelledBySelector``
+
+Dialog ``aria-describedby`` attribute:
+
+* ``options.ariaDescribedById``, if specified
+* If ``options.ariaDescribedBySelector`` is specified, the first matching element will be found and assigned an id (if required) and that id will be used
+* If ``options.ariaAuto`` is ``true``, the first content element in the dialog (article,section,p) will be found and processed as per ``ariaDescribedBySelector``
+
+Dialog Content ``role`` attribute:
+
+* Always assigned a value of "document"
## CDN
-ngDialog is available for public on [cdnjs](http://cdnjs.com/libraries/ng-dialog). Please use following urls for version 0.1.6.
+_ngDialog_ is available for public on [cdnjs](http://cdnjs.com/libraries/ng-dialog). For example, please use following urls for version ``0.4.0``.
```html
-//cdnjs.cloudflare.com/ajax/libs/ng-dialog/0.1.6/ng-dialog.min.css
-//cdnjs.cloudflare.com/ajax/libs/ng-dialog/0.1.6/ng-dialog-theme-plain.min.css
-//cdnjs.cloudflare.com/ajax/libs/ng-dialog/0.1.6/ng-dialog.min.js
+//cdnjs.cloudflare.com/ajax/libs/ng-dialog/0.4.0/css/ngDialog.min.css
+//cdnjs.cloudflare.com/ajax/libs/ng-dialog/0.4.0/css/ngDialog-theme-default.min.css
+//cdnjs.cloudflare.com/ajax/libs/ng-dialog/0.4.0/css/ngDialog-theme-plain.min.css
+//cdnjs.cloudflare.com/ajax/libs/ng-dialog/0.4.0/js/ngDialog.min.js
```
+## References
+
+_ngDialog_ default styles are heavily inspired by awesome [Hubspot/Vex](https://github.com/HubSpot/vex) jQuery modals.
+
## License
MIT Licensed
-Copyright (c) 2013-2014, Likeastore.com <info@likeastore.com>
+Copyright (c) 2013-2015, Likeastore.com <info@likeastore.com>
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
@@ -324,3 +704,5 @@ The above copyright notice and this permission notice shall be included in all c
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/likeastore/ngdialog/trend.png)](https://bitdeli.com/free "Bitdeli Badge")
+
+[contributor-guidelines]: https://github.com/likeastore/ngDialog/blob/master/CONTRIBUTING.md
diff --git a/libs/bower_components/ngDialog/bower.json b/libs/bower_components/ngDialog/bower.json
index 8d7dd14e7a..3ffe95cb4d 100644
--- a/libs/bower_components/ngDialog/bower.json
+++ b/libs/bower_components/ngDialog/bower.json
@@ -1,12 +1,11 @@
{
- "name": "ngDialog",
- "version": "0.2.14",
+ "name": "ng-dialog",
"homepage": "https://github.com/likeastore/ngDialog",
"description": "Modal dialogs and popups provider for Angular.js applications",
"main": [
- "js/ngDialog.js",
- "css/ngDialog.css",
- "css/ngDialog-theme-default.css"
+ "js/ngDialog.js",
+ "css/ngDialog.css",
+ "css/ngDialog-theme-default.css"
],
"keywords": [
"angular.js",
@@ -33,6 +32,12 @@
"Gruntfile.js"
],
"dependencies": {
- "angular": "~1"
+ "angular": ">=1.5"
+ },
+ "devDependencies": {
+ "angular-mocks": ">=1.5"
+ },
+ "resolutions": {
+ "angular": "1.6.1"
}
}
diff --git a/libs/bower_components/ngDialog/css/ngDialog-custom-width.css b/libs/bower_components/ngDialog/css/ngDialog-custom-width.css
new file mode 100644
index 0000000000..2dd9cd2461
--- /dev/null
+++ b/libs/bower_components/ngDialog/css/ngDialog-custom-width.css
@@ -0,0 +1,3 @@
+.ngdialog.ngdialog-theme-plain.custom-width .ngdialog-content {
+ width: 150px;
+}
diff --git a/libs/bower_components/ngDialog/css/ngDialog-theme-default.css b/libs/bower_components/ngDialog/css/ngDialog-theme-default.css
index d163a5403a..e4da01ae32 100644
--- a/libs/bower_components/ngDialog/css/ngDialog-theme-default.css
+++ b/libs/bower_components/ngDialog/css/ngDialog-theme-default.css
@@ -16,14 +16,12 @@
0% {
opacity: 0;
-webkit-transform: translateY(-40px);
- -ms-transform: translateY(-40px);
transform: translateY(-40px);
}
100% {
opacity: 1;
-webkit-transform: translateY(0);
- -ms-transform: translateY(0);
transform: translateY(0);
}
}
@@ -46,14 +44,12 @@
0% {
opacity: 1;
-webkit-transform: translateY(0);
- -ms-transform: translateY(0);
transform: translateY(0);
}
100% {
opacity: 0;
-webkit-transform: translateY(-40px);
- -ms-transform: translateY(-40px);
transform: translateY(-40px);
}
}
@@ -143,7 +139,6 @@
.ngdialog.ngdialog-theme-default .ngdialog-input input[type="password"]:focus,
.ngdialog.ngdialog-theme-default .ngdialog-input input[type="email"]:focus,
.ngdialog.ngdialog-theme-default .ngdialog-input input[type="url"]:focus {
- -webkit-box-shadow: inset 0 0 0 2px #8dbdf1;
box-shadow: inset 0 0 0 2px #8dbdf1;
outline: none;
}
diff --git a/libs/bower_components/ngDialog/css/ngDialog-theme-default.min.css b/libs/bower_components/ngDialog/css/ngDialog-theme-default.min.css
index 24bcfccb27..057c311c1f 100644
--- a/libs/bower_components/ngDialog/css/ngDialog-theme-default.min.css
+++ b/libs/bower_components/ngDialog/css/ngDialog-theme-default.min.css
@@ -1,3 +1 @@
-/*! ng-dialog - v0.2.14 (https://github.com/likeastore/ngDialog) */
-
-@-webkit-keyframes ngdialog-flyin{0%{opacity:0;-webkit-transform:translateY(-40px);transform:translateY(-40px)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes ngdialog-flyin{0%{opacity:0;-webkit-transform:translateY(-40px);-ms-transform:translateY(-40px);transform:translateY(-40px)}100%{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}@-webkit-keyframes ngdialog-flyout{0%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}100%{opacity:0;-webkit-transform:translateY(-40px);transform:translateY(-40px)}}@keyframes ngdialog-flyout{0%{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}100%{opacity:0;-webkit-transform:translateY(-40px);-ms-transform:translateY(-40px);transform:translateY(-40px)}}.ngdialog.ngdialog-theme-default{padding-bottom:160px;padding-top:160px}.ngdialog.ngdialog-theme-default.ngdialog-closing .ngdialog-content{-webkit-animation:ngdialog-flyout .5s;animation:ngdialog-flyout .5s}.ngdialog.ngdialog-theme-default .ngdialog-content{-webkit-animation:ngdialog-flyin .5s;animation:ngdialog-flyin .5s;background:#f0f0f0;border-radius:5px;color:#444;font-family:Helvetica,sans-serif;font-size:1.1em;line-height:1.5em;margin:0 auto;max-width:100%;padding:1em;position:relative;width:450px}.ngdialog.ngdialog-theme-default .ngdialog-close{border-radius:5px;cursor:pointer;position:absolute;right:0;top:0}.ngdialog.ngdialog-theme-default .ngdialog-close:before{background:0 0;border-radius:3px;color:#bbb;content:'\00D7';font-size:26px;font-weight:400;height:30px;line-height:26px;position:absolute;right:3px;text-align:center;top:3px;width:30px}.ngdialog.ngdialog-theme-default .ngdialog-close:active:before,.ngdialog.ngdialog-theme-default .ngdialog-close:hover:before{color:#777}.ngdialog.ngdialog-theme-default .ngdialog-message{margin-bottom:.5em}.ngdialog.ngdialog-theme-default .ngdialog-input{margin-bottom:1em}.ngdialog.ngdialog-theme-default .ngdialog-input input[type=email],.ngdialog.ngdialog-theme-default .ngdialog-input input[type=password],.ngdialog.ngdialog-theme-default .ngdialog-input input[type=text],.ngdialog.ngdialog-theme-default .ngdialog-input input[type=url],.ngdialog.ngdialog-theme-default .ngdialog-input textarea{background:#fff;border:0;border-radius:3px;font-family:inherit;font-size:inherit;font-weight:inherit;margin:0 0 .25em;min-height:2.5em;padding:.25em .67em;width:100%}.ngdialog.ngdialog-theme-default .ngdialog-input input[type=email]:focus,.ngdialog.ngdialog-theme-default .ngdialog-input input[type=password]:focus,.ngdialog.ngdialog-theme-default .ngdialog-input input[type=text]:focus,.ngdialog.ngdialog-theme-default .ngdialog-input input[type=url]:focus,.ngdialog.ngdialog-theme-default .ngdialog-input textarea:focus{-webkit-box-shadow:inset 0 0 0 2px #8dbdf1;box-shadow:inset 0 0 0 2px #8dbdf1;outline:0}.ngdialog.ngdialog-theme-default .ngdialog-buttons{*zoom:1}.ngdialog.ngdialog-theme-default .ngdialog-buttons:after{content:'';display:table;clear:both}.ngdialog.ngdialog-theme-default .ngdialog-button{border:0;border-radius:3px;cursor:pointer;float:right;font-family:inherit;font-size:.8em;letter-spacing:.1em;line-height:1em;margin:0 0 0 .5em;padding:.75em 2em;text-transform:uppercase}.ngdialog.ngdialog-theme-default .ngdialog-button:focus{-webkit-animation:ngdialog-pulse 1.1s infinite;animation:ngdialog-pulse 1.1s infinite;outline:0}@media (max-width:568px){.ngdialog.ngdialog-theme-default .ngdialog-button:focus{-webkit-animation:none;animation:none}}.ngdialog.ngdialog-theme-default .ngdialog-button.ngdialog-button-primary{background:#3288e6;color:#fff}.ngdialog.ngdialog-theme-default .ngdialog-button.ngdialog-button-secondary{background:#e0e0e0;color:#777} \ No newline at end of file
+@-webkit-keyframes ngdialog-flyin{0%{opacity:0;-webkit-transform:translateY(-40px);transform:translateY(-40px)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes ngdialog-flyin{0%{opacity:0;-webkit-transform:translateY(-40px);transform:translateY(-40px)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@-webkit-keyframes ngdialog-flyout{0%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}100%{opacity:0;-webkit-transform:translateY(-40px);transform:translateY(-40px)}}@keyframes ngdialog-flyout{0%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}100%{opacity:0;-webkit-transform:translateY(-40px);transform:translateY(-40px)}}.ngdialog.ngdialog-theme-default{padding-bottom:160px;padding-top:160px}.ngdialog.ngdialog-theme-default.ngdialog-closing .ngdialog-content{-webkit-animation:ngdialog-flyout .5s;animation:ngdialog-flyout .5s}.ngdialog.ngdialog-theme-default .ngdialog-content{-webkit-animation:ngdialog-flyin .5s;animation:ngdialog-flyin .5s;background:#f0f0f0;border-radius:5px;color:#444;font-family:Helvetica,sans-serif;font-size:1.1em;line-height:1.5em;margin:0 auto;max-width:100%;padding:1em;position:relative;width:450px}.ngdialog.ngdialog-theme-default .ngdialog-close{border-radius:5px;cursor:pointer;position:absolute;right:0;top:0}.ngdialog.ngdialog-theme-default .ngdialog-close:before{background:0 0;border-radius:3px;color:#bbb;content:'\00D7';font-size:26px;font-weight:400;height:30px;line-height:26px;position:absolute;right:3px;text-align:center;top:3px;width:30px}.ngdialog.ngdialog-theme-default .ngdialog-close:active:before,.ngdialog.ngdialog-theme-default .ngdialog-close:hover:before{color:#777}.ngdialog.ngdialog-theme-default .ngdialog-message{margin-bottom:.5em}.ngdialog.ngdialog-theme-default .ngdialog-input{margin-bottom:1em}.ngdialog.ngdialog-theme-default .ngdialog-input input[type=text],.ngdialog.ngdialog-theme-default .ngdialog-input input[type=password],.ngdialog.ngdialog-theme-default .ngdialog-input input[type=email],.ngdialog.ngdialog-theme-default .ngdialog-input input[type=url],.ngdialog.ngdialog-theme-default .ngdialog-input textarea{background:#fff;border:0;border-radius:3px;font-family:inherit;font-size:inherit;font-weight:inherit;margin:0 0 .25em;min-height:2.5em;padding:.25em .67em;width:100%}.ngdialog.ngdialog-theme-default .ngdialog-input input[type=text]:focus,.ngdialog.ngdialog-theme-default .ngdialog-input input[type=password]:focus,.ngdialog.ngdialog-theme-default .ngdialog-input input[type=email]:focus,.ngdialog.ngdialog-theme-default .ngdialog-input input[type=url]:focus,.ngdialog.ngdialog-theme-default .ngdialog-input textarea:focus{box-shadow:inset 0 0 0 2px #8dbdf1;outline:0}.ngdialog.ngdialog-theme-default .ngdialog-buttons:after{content:'';display:table;clear:both}.ngdialog.ngdialog-theme-default .ngdialog-button{border:0;border-radius:3px;cursor:pointer;float:right;font-family:inherit;font-size:.8em;letter-spacing:.1em;line-height:1em;margin:0 0 0 .5em;padding:.75em 2em;text-transform:uppercase}.ngdialog.ngdialog-theme-default .ngdialog-button:focus{-webkit-animation:ngdialog-pulse 1.1s infinite;animation:ngdialog-pulse 1.1s infinite;outline:0}@media (max-width:568px){.ngdialog.ngdialog-theme-default .ngdialog-button:focus{-webkit-animation:none;animation:none}}.ngdialog.ngdialog-theme-default .ngdialog-button.ngdialog-button-primary{background:#3288e6;color:#fff}.ngdialog.ngdialog-theme-default .ngdialog-button.ngdialog-button-secondary{background:#e0e0e0;color:#777} \ No newline at end of file
diff --git a/libs/bower_components/ngDialog/css/ngDialog-theme-plain.css b/libs/bower_components/ngDialog/css/ngDialog-theme-plain.css
index b058b53eb9..a0fc38ce6d 100644
--- a/libs/bower_components/ngDialog/css/ngDialog-theme-plain.css
+++ b/libs/bower_components/ngDialog/css/ngDialog-theme-plain.css
@@ -84,7 +84,6 @@
.ngdialog.ngdialog-theme-plain .ngdialog-input input[type="password"]:focus,
.ngdialog.ngdialog-theme-plain .ngdialog-input input[type="email"]:focus,
.ngdialog.ngdialog-theme-plain .ngdialog-input input[type="url"]:focus {
- -webkit-box-shadow: inset 0 0 0 2px rgba(0,0,0,0.2);
box-shadow: inset 0 0 0 2px rgba(0,0,0,0.2);
outline: none;
}
diff --git a/libs/bower_components/ngDialog/css/ngDialog-theme-plain.min.css b/libs/bower_components/ngDialog/css/ngDialog-theme-plain.min.css
index 45e07ec821..2892de150a 100644
--- a/libs/bower_components/ngDialog/css/ngDialog-theme-plain.min.css
+++ b/libs/bower_components/ngDialog/css/ngDialog-theme-plain.min.css
@@ -1,3 +1 @@
-/*! ng-dialog - v0.2.14 (https://github.com/likeastore/ngDialog) */
-
-.ngdialog.ngdialog-theme-plain{padding-bottom:160px;padding-top:160px}.ngdialog.ngdialog-theme-plain .ngdialog-content{background:#fff;color:#444;font-family:'Helvetica Neue',sans-serif;font-size:1.1em;line-height:1.5em;margin:0 auto;max-width:100%;padding:1em;position:relative;width:450px}.ngdialog.ngdialog-theme-plain .ngdialog-content h1,.ngdialog.ngdialog-theme-plain .ngdialog-content h2,.ngdialog.ngdialog-theme-plain .ngdialog-content h3,.ngdialog.ngdialog-theme-plain .ngdialog-content h4,.ngdialog.ngdialog-theme-plain .ngdialog-content h5,.ngdialog.ngdialog-theme-plain .ngdialog-content h6,.ngdialog.ngdialog-theme-plain .ngdialog-content li,.ngdialog.ngdialog-theme-plain .ngdialog-content p,.ngdialog.ngdialog-theme-plain .ngdialog-content ul{color:inherit}.ngdialog.ngdialog-theme-plain .ngdialog-close{cursor:pointer;position:absolute;right:0;top:0}.ngdialog.ngdialog-theme-plain .ngdialog-close:before{background:0 0;color:#bbb;content:"\00D7";font-size:26px;font-weight:400;height:30px;line-height:26px;position:absolute;right:3px;text-align:center;top:3px;width:30px}.ngdialog.ngdialog-theme-plain .ngdialog-close:active:before,.ngdialog.ngdialog-theme-plain .ngdialog-close:hover:before{color:#777}.ngdialog.ngdialog-theme-plain .ngdialog-message{margin-bottom:.5em}.ngdialog.ngdialog-theme-plain .ngdialog-input{margin-bottom:1em}.ngdialog.ngdialog-theme-plain .ngdialog-input input[type=email],.ngdialog.ngdialog-theme-plain .ngdialog-input input[type=password],.ngdialog.ngdialog-theme-plain .ngdialog-input input[type=text],.ngdialog.ngdialog-theme-plain .ngdialog-input input[type=url],.ngdialog.ngdialog-theme-plain .ngdialog-input textarea{background:#f0f0f0;border:0;font-family:inherit;font-size:inherit;font-weight:inherit;margin:0 0 .25em;min-height:2.5em;padding:.25em .67em;width:100%}.ngdialog.ngdialog-theme-plain .ngdialog-input input[type=email]:focus,.ngdialog.ngdialog-theme-plain .ngdialog-input input[type=password]:focus,.ngdialog.ngdialog-theme-plain .ngdialog-input input[type=text]:focus,.ngdialog.ngdialog-theme-plain .ngdialog-input input[type=url]:focus,.ngdialog.ngdialog-theme-plain .ngdialog-input textarea:focus{-webkit-box-shadow:inset 0 0 0 2px rgba(0,0,0,.2);box-shadow:inset 0 0 0 2px rgba(0,0,0,.2);outline:0}.ngdialog.ngdialog-theme-plain .ngdialog-buttons:after{clear:both;content:'';display:table}.ngdialog.ngdialog-theme-plain .ngdialog-button{border:0;cursor:pointer;float:right;font-family:inherit;font-size:.8em;letter-spacing:.1em;line-height:1em;margin:0 0 0 .5em;padding:.75em 2em;text-transform:uppercase}.ngdialog.ngdialog-theme-plain .ngdialog-button:focus{-webkit-animation:ngdialog-pulse 1.1s infinite;animation:ngdialog-pulse 1.1s infinite;outline:0}@media (max-width:568px){.ngdialog.ngdialog-theme-plain .ngdialog-button:focus{-webkit-animation:none;animation:none}}.ngdialog.ngdialog-theme-plain .ngdialog-button.ngdialog-button-primary{background:#3288e6;color:#fff}.ngdialog.ngdialog-theme-plain .ngdialog-button.ngdialog-button-secondary{background:#e0e0e0;color:#777} \ No newline at end of file
+.ngdialog.ngdialog-theme-plain{padding-bottom:160px;padding-top:160px}.ngdialog.ngdialog-theme-plain .ngdialog-content{background:#fff;color:#444;font-family:'Helvetica Neue',sans-serif;font-size:1.1em;line-height:1.5em;margin:0 auto;max-width:100%;padding:1em;position:relative;width:450px}.ngdialog.ngdialog-theme-plain .ngdialog-content h1,.ngdialog.ngdialog-theme-plain .ngdialog-content h2,.ngdialog.ngdialog-theme-plain .ngdialog-content h3,.ngdialog.ngdialog-theme-plain .ngdialog-content h4,.ngdialog.ngdialog-theme-plain .ngdialog-content h5,.ngdialog.ngdialog-theme-plain .ngdialog-content h6,.ngdialog.ngdialog-theme-plain .ngdialog-content li,.ngdialog.ngdialog-theme-plain .ngdialog-content p,.ngdialog.ngdialog-theme-plain .ngdialog-content ul{color:inherit}.ngdialog.ngdialog-theme-plain .ngdialog-close{cursor:pointer;position:absolute;right:0;top:0}.ngdialog.ngdialog-theme-plain .ngdialog-close:before{background:0 0;color:#bbb;content:"\00D7";font-size:26px;font-weight:400;height:30px;line-height:26px;position:absolute;right:3px;text-align:center;top:3px;width:30px}.ngdialog.ngdialog-theme-plain .ngdialog-close:active:before,.ngdialog.ngdialog-theme-plain .ngdialog-close:hover:before{color:#777}.ngdialog.ngdialog-theme-plain .ngdialog-message{margin-bottom:.5em}.ngdialog.ngdialog-theme-plain .ngdialog-input{margin-bottom:1em}.ngdialog.ngdialog-theme-plain .ngdialog-input input[type=text],.ngdialog.ngdialog-theme-plain .ngdialog-input input[type=password],.ngdialog.ngdialog-theme-plain .ngdialog-input input[type=email],.ngdialog.ngdialog-theme-plain .ngdialog-input input[type=url],.ngdialog.ngdialog-theme-plain .ngdialog-input textarea{background:#f0f0f0;border:0;font-family:inherit;font-size:inherit;font-weight:inherit;margin:0 0 .25em;min-height:2.5em;padding:.25em .67em;width:100%}.ngdialog.ngdialog-theme-plain .ngdialog-input input[type=text]:focus,.ngdialog.ngdialog-theme-plain .ngdialog-input input[type=password]:focus,.ngdialog.ngdialog-theme-plain .ngdialog-input input[type=email]:focus,.ngdialog.ngdialog-theme-plain .ngdialog-input input[type=url]:focus,.ngdialog.ngdialog-theme-plain .ngdialog-input textarea:focus{box-shadow:inset 0 0 0 2px rgba(0,0,0,.2);outline:0}.ngdialog.ngdialog-theme-plain .ngdialog-buttons:after{clear:both;content:'';display:table}.ngdialog.ngdialog-theme-plain .ngdialog-button{border:0;cursor:pointer;float:right;font-family:inherit;font-size:.8em;letter-spacing:.1em;line-height:1em;margin:0 0 0 .5em;padding:.75em 2em;text-transform:uppercase}.ngdialog.ngdialog-theme-plain .ngdialog-button:focus{-webkit-animation:ngdialog-pulse 1.1s infinite;animation:ngdialog-pulse 1.1s infinite;outline:0}@media (max-width:568px){.ngdialog.ngdialog-theme-plain .ngdialog-button:focus{-webkit-animation:none;animation:none}}.ngdialog.ngdialog-theme-plain .ngdialog-button.ngdialog-button-primary{background:#3288e6;color:#fff}.ngdialog.ngdialog-theme-plain .ngdialog-button.ngdialog-button-secondary{background:#e0e0e0;color:#777} \ No newline at end of file
diff --git a/libs/bower_components/ngDialog/css/ngDialog.css b/libs/bower_components/ngDialog/css/ngDialog.css
index cfbbb65272..0e91643675 100644
--- a/libs/bower_components/ngDialog/css/ngDialog.css
+++ b/libs/bower_components/ngDialog/css/ngDialog.css
@@ -38,13 +38,14 @@
}
}
-.ngdialog,
+.ngdialog {
+ box-sizing: border-box;
+}
+
.ngdialog *,
.ngdialog *:before,
.ngdialog *:after {
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
+ box-sizing: inherit;
}
.ngdialog {
@@ -58,6 +59,13 @@
left: 0;
}
+.ngdialog.ngdialog-disabled-animation,
+.ngdialog.ngdialog-disabled-animation .ngdialog-overlay,
+.ngdialog.ngdialog-disabled-animation .ngdialog-content {
+ -webkit-animation: none!important;
+ animation: none!important;
+}
+
.ngdialog-overlay {
position: fixed;
background: rgba(0, 0, 0, 0.4);
@@ -70,6 +78,10 @@
animation: ngdialog-fadein 0.5s;
}
+.ngdialog-no-overlay {
+ pointer-events: none;
+}
+
.ngdialog.ngdialog-closing .ngdialog-overlay {
-webkit-backface-visibility: hidden;
-webkit-animation: ngdialog-fadeout 0.5s;
@@ -81,6 +93,7 @@
-webkit-backface-visibility: hidden;
-webkit-animation: ngdialog-fadein 0.5s;
animation: ngdialog-fadein 0.5s;
+ pointer-events: all;
}
.ngdialog.ngdialog-closing .ngdialog-content {
@@ -95,6 +108,7 @@
cursor: pointer;
}
+html.ngdialog-open,
body.ngdialog-open {
overflow: hidden;
} \ No newline at end of file
diff --git a/libs/bower_components/ngDialog/css/ngDialog.min.css b/libs/bower_components/ngDialog/css/ngDialog.min.css
index 746f2564fc..f30b684dfe 100644
--- a/libs/bower_components/ngDialog/css/ngDialog.min.css
+++ b/libs/bower_components/ngDialog/css/ngDialog.min.css
@@ -1,3 +1 @@
-/*! ng-dialog - v0.2.14 (https://github.com/likeastore/ngDialog) */
-
-@-webkit-keyframes ngdialog-fadeout{0%{opacity:1}100%{opacity:0}}@keyframes ngdialog-fadeout{0%{opacity:1}100%{opacity:0}}@-webkit-keyframes ngdialog-fadein{0%{opacity:0}100%{opacity:1}}@keyframes ngdialog-fadein{0%{opacity:0}100%{opacity:1}}.ngdialog,.ngdialog *,.ngdialog :after,.ngdialog :before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.ngdialog{position:fixed;overflow:auto;-webkit-overflow-scrolling:touch;z-index:10000;top:0;right:0;bottom:0;left:0}.ngdialog-overlay{position:fixed;background:rgba(0,0,0,.4);top:0;right:0;bottom:0;left:0;-webkit-backface-visibility:hidden;-webkit-animation:ngdialog-fadein .5s;animation:ngdialog-fadein .5s}.ngdialog.ngdialog-closing .ngdialog-overlay{-webkit-backface-visibility:hidden;-webkit-animation:ngdialog-fadeout .5s;animation:ngdialog-fadeout .5s}.ngdialog-content{background:#fff;-webkit-backface-visibility:hidden;-webkit-animation:ngdialog-fadein .5s;animation:ngdialog-fadein .5s}.ngdialog.ngdialog-closing .ngdialog-content{-webkit-backface-visibility:hidden;-webkit-animation:ngdialog-fadeout .5s;animation:ngdialog-fadeout .5s}.ngdialog-close:before{font-family:Helvetica,Arial,sans-serif;content:'\00D7';cursor:pointer}body.ngdialog-open{overflow:hidden} \ No newline at end of file
+.ngdialog,.ngdialog-overlay{position:fixed;top:0;right:0;bottom:0;left:0}@-webkit-keyframes ngdialog-fadeout{0%{opacity:1}100%{opacity:0}}@keyframes ngdialog-fadeout{0%{opacity:1}100%{opacity:0}}@-webkit-keyframes ngdialog-fadein{0%{opacity:0}100%{opacity:1}}@keyframes ngdialog-fadein{0%{opacity:0}100%{opacity:1}}.ngdialog{box-sizing:border-box;overflow:auto;-webkit-overflow-scrolling:touch;z-index:10000}.ngdialog *,.ngdialog :after,.ngdialog :before{box-sizing:inherit}.ngdialog.ngdialog-disabled-animation,.ngdialog.ngdialog-disabled-animation .ngdialog-content,.ngdialog.ngdialog-disabled-animation .ngdialog-overlay{-webkit-animation:none!important;animation:none!important}.ngdialog-overlay{background:rgba(0,0,0,.4);-webkit-backface-visibility:hidden;-webkit-animation:ngdialog-fadein .5s;animation:ngdialog-fadein .5s}.ngdialog-no-overlay{pointer-events:none}.ngdialog.ngdialog-closing .ngdialog-overlay{-webkit-backface-visibility:hidden;-webkit-animation:ngdialog-fadeout .5s;animation:ngdialog-fadeout .5s}.ngdialog-content{background:#fff;-webkit-backface-visibility:hidden;-webkit-animation:ngdialog-fadein .5s;animation:ngdialog-fadein .5s;pointer-events:all}.ngdialog.ngdialog-closing .ngdialog-content{-webkit-backface-visibility:hidden;-webkit-animation:ngdialog-fadeout .5s;animation:ngdialog-fadeout .5s}.ngdialog-close:before{font-family:Helvetica,Arial,sans-serif;content:'\00D7';cursor:pointer}body.ngdialog-open,html.ngdialog-open{overflow:hidden} \ No newline at end of file
diff --git a/libs/bower_components/ngDialog/js/ngDialog.js b/libs/bower_components/ngDialog/js/ngDialog.js
index 5c393901e8..ddd287c142 100644
--- a/libs/bower_components/ngDialog/js/ngDialog.js
+++ b/libs/bower_components/ngDialog/js/ngDialog.js
@@ -1,348 +1,953 @@
/*
* ngDialog - easy modals and popup windows
* http://github.com/likeastore/ngDialog
- * (c) 2013 MIT License, https://likeastore.com
+ * (c) 2013-2015 MIT License, https://likeastore.com
*/
-(function (window, angular, undefined) {
- 'use strict';
-
- var module = angular.module('ngDialog', []);
-
- var $el = angular.element;
- var isDef = angular.isDefined;
- var style = (document.body || document.documentElement).style;
- var animationEndSupport = isDef(style.animation) || isDef(style.WebkitAnimation) || isDef(style.MozAnimation) || isDef(style.MsAnimation) || isDef(style.OAnimation);
- var animationEndEvent = 'animationend webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend';
- var forceBodyReload = false;
-
- module.provider('ngDialog', function () {
- var defaults = this.defaults = {
- className: 'ngdialog-theme-default',
- plain: false,
- showClose: true,
- closeByDocument: true,
- closeByEscape: true,
- appendTo: false
- };
-
- this.setForceBodyReload = function (_useIt) {
- forceBodyReload = _useIt || false;
- };
-
- this.setDefaults = function (newDefaults) {
- angular.extend(defaults, newDefaults);
- };
-
- var globalID = 0, dialogsCount = 0, closeByDocumentHandler, defers = {};
-
- this.$get = ['$document', '$templateCache', '$compile', '$q', '$http', '$rootScope', '$timeout', '$window', '$controller',
- function ($document, $templateCache, $compile, $q, $http, $rootScope, $timeout, $window, $controller) {
- var $body = $document.find('body');
- if (forceBodyReload) {
- $rootScope.$on('$locationChangeSuccess', function () {
- $body = $document.find('body');
- });
- }
-
- var privateMethods = {
- onDocumentKeydown: function (event) {
- if (event.keyCode === 27) {
- publicMethods.close('$escape');
- }
- },
-
- setBodyPadding: function (width) {
- var originalBodyPadding = parseInt(($body.css('padding-right') || 0), 10);
- $body.css('padding-right', (originalBodyPadding + width) + 'px');
- $body.data('ng-dialog-original-padding', originalBodyPadding);
- },
-
- resetBodyPadding: function () {
- var originalBodyPadding = $body.data('ng-dialog-original-padding');
- if (originalBodyPadding) {
- $body.css('padding-right', originalBodyPadding + 'px');
- } else {
- $body.css('padding-right', '');
- }
- },
-
- closeDialog: function ($dialog, value) {
- var id = $dialog.attr('id');
- if (typeof window.Hammer !== 'undefined') {
- window.Hammer($dialog[0]).off('tap', closeByDocumentHandler);
- } else {
- $dialog.unbind('click');
- }
-
- if (dialogsCount === 1) {
- $body.unbind('keydown');
- }
-
- if (!$dialog.hasClass("ngdialog-closing")){
- dialogsCount -= 1;
- }
-
- if (animationEndSupport) {
- $dialog.unbind(animationEndEvent).bind(animationEndEvent, function () {
- $dialog.scope().$destroy();
- $dialog.remove();
- if (dialogsCount === 0) {
- $body.removeClass('ngdialog-open');
- privateMethods.resetBodyPadding();
- }
- $rootScope.$broadcast('ngDialog.closed', $dialog);
- }).addClass('ngdialog-closing');
- } else {
- $dialog.scope().$destroy();
- $dialog.remove();
- if (dialogsCount === 0) {
- $body.removeClass('ngdialog-open');
- privateMethods.resetBodyPadding();
- }
- $rootScope.$broadcast('ngDialog.closed', $dialog);
- }
- if (defers[id]) {
- defers[id].resolve({
- id: id,
- value: value,
- $dialog: $dialog,
- remainingDialogs: dialogsCount
- });
- delete defers[id];
- }
- }
- };
-
- var publicMethods = {
-
- /*
- * @param {Object} options:
- * - template {String} - id of ng-template, url for partial, plain string (if enabled)
- * - plain {Boolean} - enable plain string templates, default false
- * - scope {Object}
- * - controller {String}
- * - className {String} - dialog theme class
- * - showClose {Boolean} - show close button, default true
- * - closeByEscape {Boolean} - default true
- * - closeByDocument {Boolean} - default true
- *
- * @return {Object} dialog
- */
- open: function (opts) {
- var self = this;
- var options = angular.copy(defaults);
-
- opts = opts || {};
- angular.extend(options, opts);
-
- globalID += 1;
-
- self.latestID = 'ngdialog' + globalID;
-
- var defer;
- defers[self.latestID] = defer = $q.defer();
-
- var scope = angular.isObject(options.scope) ? options.scope.$new() : $rootScope.$new();
- var $dialog, $dialogParent;
-
- $q.when(loadTemplate(options.template)).then(function (template) {
- template = angular.isString(template) ?
- template :
- template.data && angular.isString(template.data) ?
- template.data :
- '';
-
- $templateCache.put(options.template, template);
-
- if (options.showClose) {
- template += '<div class="ngdialog-close"></div>';
- }
-
- self.$result = $dialog = $el('<div id="ngdialog' + globalID + '" class="ngdialog"></div>');
- $dialog.html('<div class="ngdialog-overlay"></div><div class="ngdialog-content">' + template + '</div>');
-
- if (options.data && angular.isString(options.data)) {
- var firstLetter = options.data.replace(/^\s*/, '')[0];
- scope.ngDialogData = (firstLetter === '{' || firstLetter === '[') ? angular.fromJson(options.data) : options.data;
- } else if (options.data && angular.isObject(options.data)) {
- scope.ngDialogData = angular.fromJson(angular.toJson(options.data));
- }
-
- if (options.controller && (angular.isString(options.controller) || angular.isArray(options.controller) || angular.isFunction(options.controller))) {
- var controllerInstance = $controller(options.controller, {
- $scope: scope,
- $element: $dialog
- });
- $dialog.data('$ngDialogControllerController', controllerInstance);
- }
-
- if (options.className) {
- $dialog.addClass(options.className);
- }
-
- if (options.appendTo && angular.isString(options.appendTo)) {
- $dialogParent = angular.element(document.querySelector(options.appendTo));
- } else {
- $dialogParent = $body;
- }
-
- scope.closeThisDialog = function (value) {
- privateMethods.closeDialog($dialog, value);
- };
-
- $timeout(function () {
- $compile($dialog)(scope);
-
- var widthDiffs = $window.innerWidth - $body.prop('clientWidth');
- $body.addClass('ngdialog-open');
- var scrollBarWidth = widthDiffs - ($window.innerWidth - $body.prop('clientWidth'));
- if (scrollBarWidth > 0) {
- privateMethods.setBodyPadding(scrollBarWidth);
- }
- $dialogParent.append($dialog);
- $rootScope.$broadcast('ngDialog.opened', $dialog);
- });
-
- if (options.closeByEscape) {
- $body.bind('keydown', privateMethods.onDocumentKeydown);
- }
-
- closeByDocumentHandler = function (event) {
- var isOverlay = options.closeByDocument ? $el(event.target).hasClass('ngdialog-overlay') : false;
- var isCloseBtn = $el(event.target).hasClass('ngdialog-close');
-
- if (isOverlay || isCloseBtn) {
- publicMethods.close($dialog.attr('id'), isCloseBtn ? '$closeButton' : '$document');
- }
- };
-
- if (typeof window.Hammer !== 'undefined') {
- window.Hammer($dialog[0]).on('tap', closeByDocumentHandler);
- } else {
- $dialog.bind('click', closeByDocumentHandler);
- }
-
- dialogsCount += 1;
-
- return publicMethods;
- });
-
- return {
- id: 'ngdialog' + globalID,
- closePromise: defer.promise,
- close: function(value) {
- privateMethods.closeDialog($dialog, value);
- }
- };
-
- function loadTemplate (tmpl) {
- if (!tmpl) {
- return 'Empty template';
- }
-
- if (angular.isString(tmpl) && options.plain) {
- return tmpl;
- }
-
- return $templateCache.get(tmpl) || $http.get(tmpl, { cache: true });
- }
- },
-
- /*
- * @param {Object} options:
- * - template {String} - id of ng-template, url for partial, plain string (if enabled)
- * - plain {Boolean} - enable plain string templates, default false
- * - scope {Object}
- * - controller {String}
- * - className {String} - dialog theme class
- * - showClose {Boolean} - show close button, default true
- * - closeByEscape {Boolean} - default false
- * - closeByDocument {Boolean} - default false
- *
- * @return {Object} dialog
- */
- openConfirm: function (opts) {
- var defer = $q.defer();
-
- var options = {
- closeByEscape: false,
- closeByDocument: false
- };
- angular.extend(options, opts);
-
- options.scope = angular.isObject(options.scope) ? options.scope.$new() : $rootScope.$new();
- options.scope.confirm = function (value) {
- defer.resolve(value);
- openResult.close(value);
- };
-
- var openResult = publicMethods.open(options);
- openResult.closePromise.then(function (data) {
- if (data) {
- return defer.reject(data.value);
- }
- return defer.reject();
- });
-
- return defer.promise;
- },
-
- /*
- * @param {String} id
- * @return {Object} dialog
- */
- close: function (id, value) {
- var $dialog = $el(document.getElementById(id));
-
- if ($dialog.length) {
- privateMethods.closeDialog($dialog, value);
- } else {
- publicMethods.closeAll(value);
- }
-
- return publicMethods;
- },
-
- closeAll: function (value) {
- var $all = document.querySelectorAll('.ngdialog');
-
- angular.forEach($all, function (dialog) {
- privateMethods.closeDialog($el(dialog), value);
- });
- }
- };
-
- return publicMethods;
- }];
- });
-
- module.directive('ngDialog', ['ngDialog', function (ngDialog) {
- return {
- restrict: 'A',
- scope : {
- ngDialogScope : '='
- },
- link: function (scope, elem, attrs) {
- elem.on('click', function (e) {
- e.preventDefault();
-
- var ngDialogScope = angular.isDefined(scope.ngDialogScope) ? scope.ngDialogScope : 'noScope';
- angular.isDefined(attrs.ngDialogClosePrevious) && ngDialog.close(attrs.ngDialogClosePrevious);
-
- ngDialog.open({
- template: attrs.ngDialog,
- className: attrs.ngDialogClass,
- controller: attrs.ngDialogController,
- scope: ngDialogScope ,
- data: attrs.ngDialogData,
- showClose: attrs.ngDialogShowClose === 'false' ? false : true,
- closeByDocument: attrs.ngDialogCloseByDocument === 'false' ? false : true,
- closeByEscape: attrs.ngDialogCloseByEscape === 'false' ? false : true
- });
- });
- }
- };
- }]);
-
-})(window, window.angular);
+(function (root, factory) {
+ if (typeof module !== 'undefined' && module.exports) {
+ // CommonJS
+ if (typeof angular === 'undefined') {
+ factory(require('angular'));
+ } else {
+ factory(angular);
+ }
+ module.exports = 'ngDialog';
+ } else if (typeof define === 'function' && define.amd) {
+ // AMD
+ define(['angular'], factory);
+ } else {
+ // Global Variables
+ factory(root.angular);
+ }
+}(this, function (angular) {
+ 'use strict';
+
+ var m = angular.module('ngDialog', []);
+
+ var $el = angular.element;
+ var isDef = angular.isDefined;
+ var style = (document.body || document.documentElement).style;
+ var animationEndSupport = isDef(style.animation) || isDef(style.WebkitAnimation) || isDef(style.MozAnimation) || isDef(style.MsAnimation) || isDef(style.OAnimation);
+ var animationEndEvent = 'animationend webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend';
+ var focusableElementSelector = 'a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, *[tabindex], *[contenteditable]';
+ var disabledAnimationClass = 'ngdialog-disabled-animation';
+ var forceElementsReload = { html: false, body: false };
+ var scopes = {};
+ var openIdStack = [];
+ var activeBodyClasses = [];
+ var keydownIsBound = false;
+ var openOnePerName = false;
+ var closeByNavigationDialogStack = [];
+
+ var UI_ROUTER_VERSION_LEGACY = 'legacy';
+ var UI_ROUTER_VERSION_ONE_PLUS = '1.0.0+';
+
+ m.provider('ngDialog', function () {
+ var defaults = this.defaults = {
+ className: 'ngdialog-theme-default',
+ appendClassName: '',
+ disableAnimation: false,
+ plain: false,
+ showClose: true,
+ closeByDocument: true,
+ closeByEscape: true,
+ closeByNavigation: false,
+ appendTo: false,
+ preCloseCallback: false,
+ onOpenCallback: false,
+ overlay: true,
+ cache: true,
+ trapFocus: true,
+ preserveFocus: true,
+ ariaAuto: true,
+ ariaRole: null,
+ ariaLabelledById: null,
+ ariaLabelledBySelector: null,
+ ariaDescribedById: null,
+ ariaDescribedBySelector: null,
+ bodyClassName: 'ngdialog-open',
+ width: null,
+ height: null
+ };
+
+ this.setForceHtmlReload = function (_useIt) {
+ forceElementsReload.html = _useIt || false;
+ };
+
+ this.setForceBodyReload = function (_useIt) {
+ forceElementsReload.body = _useIt || false;
+ };
+
+ this.setDefaults = function (newDefaults) {
+ angular.extend(defaults, newDefaults);
+ };
+
+ this.setOpenOnePerName = function (isOpenOne) {
+ openOnePerName = isOpenOne || false;
+ };
+
+ var globalID = 0, dialogsCount = 0, closeByDocumentHandler, defers = {};
+
+ this.$get = ['$document', '$templateCache', '$compile', '$q', '$http', '$rootScope', '$timeout', '$window', '$controller', '$injector',
+ function ($document, $templateCache, $compile, $q, $http, $rootScope, $timeout, $window, $controller, $injector) {
+ var $elements = [];
+
+ var privateMethods = {
+ onDocumentKeydown: function (event) {
+ if (event.keyCode === 27) {
+ publicMethods.close('$escape');
+ }
+ },
+
+ activate: function($dialog) {
+ var options = $dialog.data('$ngDialogOptions');
+
+ if (options.trapFocus) {
+ $dialog.on('keydown', privateMethods.onTrapFocusKeydown);
+
+ // Catch rogue changes (eg. after unfocusing everything by clicking a non-focusable element)
+ $elements.body.on('keydown', privateMethods.onTrapFocusKeydown);
+ }
+ },
+
+ deactivate: function ($dialog) {
+ $dialog.off('keydown', privateMethods.onTrapFocusKeydown);
+ $elements.body.off('keydown', privateMethods.onTrapFocusKeydown);
+ },
+
+ deactivateAll: function (els) {
+ angular.forEach(els,function(el) {
+ var $dialog = angular.element(el);
+ privateMethods.deactivate($dialog);
+ });
+ },
+
+ setBodyPadding: function (width) {
+ var originalBodyPadding = parseInt(($elements.body.css('padding-right') || 0), 10);
+ $elements.body.css('padding-right', (originalBodyPadding + width) + 'px');
+ $elements.body.data('ng-dialog-original-padding', originalBodyPadding);
+ $rootScope.$broadcast('ngDialog.setPadding', width);
+ },
+
+ resetBodyPadding: function () {
+ var originalBodyPadding = $elements.body.data('ng-dialog-original-padding');
+ if (originalBodyPadding) {
+ $elements.body.css('padding-right', originalBodyPadding + 'px');
+ } else {
+ $elements.body.css('padding-right', '');
+ }
+ $rootScope.$broadcast('ngDialog.setPadding', 0);
+ },
+
+ performCloseDialog: function ($dialog, value) {
+ var options = $dialog.data('$ngDialogOptions');
+ var id = $dialog.attr('id');
+ var scope = scopes[id];
+ privateMethods.deactivate($dialog);
+
+ if (!scope) {
+ // Already closed
+ return;
+ }
+
+ if (typeof $window.Hammer !== 'undefined') {
+ var hammerTime = scope.hammerTime;
+ hammerTime.off('tap', closeByDocumentHandler);
+ hammerTime.destroy && hammerTime.destroy();
+ delete scope.hammerTime;
+ } else {
+ $dialog.unbind('click');
+ }
+
+ if (dialogsCount === 1) {
+ $elements.body.unbind('keydown', privateMethods.onDocumentKeydown);
+ }
+
+ if (!$dialog.hasClass('ngdialog-closing')){
+ dialogsCount -= 1;
+ }
+
+ var previousFocus = $dialog.data('$ngDialogPreviousFocus');
+ if (previousFocus && previousFocus.focus) {
+ previousFocus.focus();
+ }
+
+ $rootScope.$broadcast('ngDialog.closing', $dialog, value);
+ dialogsCount = dialogsCount < 0 ? 0 : dialogsCount;
+ if (animationEndSupport && !options.disableAnimation) {
+ scope.$destroy();
+ $dialog.unbind(animationEndEvent).bind(animationEndEvent, function () {
+ privateMethods.closeDialogElement($dialog, value);
+ }).addClass('ngdialog-closing');
+ } else {
+ scope.$destroy();
+ privateMethods.closeDialogElement($dialog, value);
+ }
+ if (defers[id]) {
+ defers[id].resolve({
+ id: id,
+ value: value,
+ $dialog: $dialog,
+ remainingDialogs: dialogsCount
+ });
+ delete defers[id];
+ }
+ if (scopes[id]) {
+ delete scopes[id];
+ }
+ openIdStack.splice(openIdStack.indexOf(id), 1);
+ if (!openIdStack.length) {
+ $elements.body.unbind('keydown', privateMethods.onDocumentKeydown);
+ keydownIsBound = false;
+ }
+
+ if (dialogsCount == 0)
+ {
+ closeByDocumentHandler = undefined;
+ }
+ },
+
+ closeDialogElement: function($dialog, value) {
+ var options = $dialog.data('$ngDialogOptions');
+ $dialog.remove();
+
+ activeBodyClasses.splice(activeBodyClasses.indexOf(options.bodyClassName), 1);
+ if (activeBodyClasses.indexOf(options.bodyClassName) === -1) {
+ $elements.html.removeClass(options.bodyClassName);
+ $elements.body.removeClass(options.bodyClassName);
+ }
+
+ if (dialogsCount === 0) {
+ privateMethods.resetBodyPadding();
+ }
+
+ $rootScope.$broadcast('ngDialog.closed', $dialog, value);
+ },
+
+ closeDialog: function ($dialog, value) {
+ var preCloseCallback = $dialog.data('$ngDialogPreCloseCallback');
+
+ if (preCloseCallback && angular.isFunction(preCloseCallback)) {
+
+ var preCloseCallbackResult = preCloseCallback.call($dialog, value);
+
+ if (angular.isObject(preCloseCallbackResult)) {
+ if (preCloseCallbackResult.closePromise) {
+ preCloseCallbackResult.closePromise.then(function () {
+ privateMethods.performCloseDialog($dialog, value);
+ }, function () {
+ return false;
+ });
+ } else {
+ preCloseCallbackResult.then(function () {
+ privateMethods.performCloseDialog($dialog, value);
+ }, function () {
+ return false;
+ });
+ }
+ } else if (preCloseCallbackResult !== false) {
+ privateMethods.performCloseDialog($dialog, value);
+ } else {
+ return false;
+ }
+ } else {
+ privateMethods.performCloseDialog($dialog, value);
+ }
+ },
+
+ onTrapFocusKeydown: function(ev) {
+ var el = angular.element(ev.currentTarget);
+ var $dialog;
+
+ if (el.hasClass('ngdialog')) {
+ $dialog = el;
+ } else {
+ $dialog = privateMethods.getActiveDialog();
+
+ if ($dialog === null) {
+ return;
+ }
+ }
+
+ var isTab = (ev.keyCode === 9);
+ var backward = (ev.shiftKey === true);
+
+ if (isTab) {
+ privateMethods.handleTab($dialog, ev, backward);
+ }
+ },
+
+ handleTab: function($dialog, ev, backward) {
+ var focusableElements = privateMethods.getFocusableElements($dialog);
+
+ if (focusableElements.length === 0) {
+ if (document.activeElement && document.activeElement.blur) {
+ document.activeElement.blur();
+ }
+ return;
+ }
+
+ var currentFocus = document.activeElement;
+ var focusIndex = Array.prototype.indexOf.call(focusableElements, currentFocus);
+
+ var isFocusIndexUnknown = (focusIndex === -1);
+ var isFirstElementFocused = (focusIndex === 0);
+ var isLastElementFocused = (focusIndex === focusableElements.length - 1);
+
+ var cancelEvent = false;
+
+ if (backward) {
+ if (isFocusIndexUnknown || isFirstElementFocused) {
+ focusableElements[focusableElements.length - 1].focus();
+ cancelEvent = true;
+ }
+ } else {
+ if (isFocusIndexUnknown || isLastElementFocused) {
+ focusableElements[0].focus();
+ cancelEvent = true;
+ }
+ }
+
+ if (cancelEvent) {
+ ev.preventDefault();
+ ev.stopPropagation();
+ }
+ },
+
+ autoFocus: function($dialog) {
+ var dialogEl = $dialog[0];
+
+ // Browser's (Chrome 40, Forefix 37, IE 11) don't appear to honor autofocus on the dialog, but we should
+ var autoFocusEl = dialogEl.querySelector('*[autofocus]');
+ if (autoFocusEl !== null) {
+ autoFocusEl.focus();
+
+ if (document.activeElement === autoFocusEl) {
+ return;
+ }
+
+ // Autofocus element might was display: none, so let's continue
+ }
+
+ var focusableElements = privateMethods.getFocusableElements($dialog);
+
+ if (focusableElements.length > 0) {
+ focusableElements[0].focus();
+ return;
+ }
+
+ // We need to focus something for the screen readers to notice the dialog
+ var contentElements = privateMethods.filterVisibleElements(dialogEl.querySelectorAll('h1,h2,h3,h4,h5,h6,p,span'));
+
+ if (contentElements.length > 0) {
+ var contentElement = contentElements[0];
+ $el(contentElement).attr('tabindex', '-1').css('outline', '0');
+ contentElement.focus();
+ }
+ },
+
+ getFocusableElements: function ($dialog) {
+ var dialogEl = $dialog[0];
+
+ var rawElements = dialogEl.querySelectorAll(focusableElementSelector);
+
+ // Ignore untabbable elements, ie. those with tabindex = -1
+ var tabbableElements = privateMethods.filterTabbableElements(rawElements);
+
+ return privateMethods.filterVisibleElements(tabbableElements);
+ },
+
+ filterTabbableElements: function (els) {
+ var tabbableFocusableElements = [];
+
+ for (var i = 0; i < els.length; i++) {
+ var el = els[i];
+
+ if ($el(el).attr('tabindex') !== '-1') {
+ tabbableFocusableElements.push(el);
+ }
+ }
+
+ return tabbableFocusableElements;
+ },
+
+ filterVisibleElements: function (els) {
+ var visibleFocusableElements = [];
+
+ for (var i = 0; i < els.length; i++) {
+ var el = els[i];
+
+ if (el.offsetWidth > 0 || el.offsetHeight > 0) {
+ visibleFocusableElements.push(el);
+ }
+ }
+
+ return visibleFocusableElements;
+ },
+
+ getActiveDialog: function () {
+ var dialogs = document.querySelectorAll('.ngdialog');
+
+ if (dialogs.length === 0) {
+ return null;
+ }
+
+ // TODO: This might be incorrect if there are a mix of open dialogs with different 'appendTo' values
+ return $el(dialogs[dialogs.length - 1]);
+ },
+
+ applyAriaAttributes: function ($dialog, options) {
+ if (options.ariaAuto) {
+ if (!options.ariaRole) {
+ var detectedRole = (privateMethods.getFocusableElements($dialog).length > 0) ?
+ 'dialog' :
+ 'alertdialog';
+
+ options.ariaRole = detectedRole;
+ }
+
+ if (!options.ariaLabelledBySelector) {
+ options.ariaLabelledBySelector = 'h1,h2,h3,h4,h5,h6';
+ }
+
+ if (!options.ariaDescribedBySelector) {
+ options.ariaDescribedBySelector = 'article,section,p';
+ }
+ }
+
+ if (options.ariaRole) {
+ $dialog.attr('role', options.ariaRole);
+ }
+
+ privateMethods.applyAriaAttribute(
+ $dialog, 'aria-labelledby', options.ariaLabelledById, options.ariaLabelledBySelector);
+
+ privateMethods.applyAriaAttribute(
+ $dialog, 'aria-describedby', options.ariaDescribedById, options.ariaDescribedBySelector);
+ },
+
+ applyAriaAttribute: function($dialog, attr, id, selector) {
+ if (id) {
+ $dialog.attr(attr, id);
+ return;
+ }
+
+ if (selector) {
+ var dialogId = $dialog.attr('id');
+
+ var firstMatch = $dialog[0].querySelector(selector);
+
+ if (!firstMatch) {
+ return;
+ }
+
+ var generatedId = dialogId + '-' + attr;
+
+ $el(firstMatch).attr('id', generatedId);
+
+ $dialog.attr(attr, generatedId);
+
+ return generatedId;
+ }
+ },
+
+ detectUIRouter: function() {
+ // Detect if ui-router module is installed
+ // Returns ui-router version string if installed
+ // Otherwise false
+
+ if ($injector.has('$transitions')) {
+ // Only 1.0.0+ ui.router allows us to inject $transitions
+ return UI_ROUTER_VERSION_ONE_PLUS;
+ }
+ else if ($injector.has('$state')) {
+ // The legacy ui.router allows us to inject $state
+ return UI_ROUTER_VERSION_LEGACY;
+ }
+ return false;
+ },
+
+ getRouterLocationEventName: function() {
+ if (privateMethods.detectUIRouter()) {
+ return '$stateChangeStart';
+ }
+ return '$locationChangeStart';
+ }
+ };
+
+ var publicMethods = {
+ __PRIVATE__: privateMethods,
+
+ /*
+ * @param {Object} options:
+ * - template {String} - id of ng-template, url for partial, plain string (if enabled)
+ * - plain {Boolean} - enable plain string templates, default false
+ * - scope {Object}
+ * - controller {String}
+ * - controllerAs {String}
+ * - className {String} - dialog theme class
+ * - appendClassName {String} - dialog theme class to be appended to defaults
+ * - disableAnimation {Boolean} - set to true to disable animation
+ * - showClose {Boolean} - show close button, default true
+ * - closeByEscape {Boolean} - default true
+ * - closeByDocument {Boolean} - default true
+ * - preCloseCallback {String|Function} - user supplied function name/function called before closing dialog (if set)
+ * - onOpenCallback {String|Function} - user supplied function name/function called after opening dialog (if set)
+ * - bodyClassName {String} - class added to body at open dialog
+ * @return {Object} dialog
+ */
+ open: function (opts) {
+ var dialogID = null;
+ opts = opts || {};
+ if (openOnePerName && opts.name) {
+ dialogID = opts.name.toLowerCase().replace(/\s/g, '-') + '-dialog';
+ if (this.isOpen(dialogID)) {
+ return;
+ }
+ }
+ var options = angular.copy(defaults);
+ var localID = ++globalID;
+ dialogID = dialogID || 'ngdialog' + localID;
+ openIdStack.push(dialogID);
+
+ // Merge opts.data with predefined via setDefaults
+ if (typeof options.data !== 'undefined') {
+ if (typeof opts.data === 'undefined') {
+ opts.data = {};
+ }
+ opts.data = angular.merge(angular.copy(options.data), opts.data);
+ }
+
+ angular.extend(options, opts);
+
+ var defer;
+ defers[dialogID] = defer = $q.defer();
+
+ var scope;
+ scopes[dialogID] = scope = angular.isObject(options.scope) ? options.scope.$new() : $rootScope.$new();
+
+ var $dialog, $dialogParent, $dialogContent;
+
+ var resolve = angular.extend({}, options.resolve);
+
+ angular.forEach(resolve, function (value, key) {
+ resolve[key] = angular.isString(value) ? $injector.get(value) : $injector.invoke(value, null, null, key);
+ });
+
+ $q.all({
+ template: loadTemplate(options.template || options.templateUrl),
+ locals: $q.all(resolve)
+ }).then(function (setup) {
+ var template = setup.template,
+ locals = setup.locals;
+
+ if (options.showClose) {
+ template += '<button aria-label="Dismiss" class="ngdialog-close"></button>';
+ }
+
+ var hasOverlayClass = options.overlay ? '' : ' ngdialog-no-overlay';
+ $dialog = $el('<div id="' + dialogID + '" class="ngdialog' + hasOverlayClass + '"></div>');
+ $dialog.html((options.overlay ?
+ '<div class="ngdialog-overlay"></div><div class="ngdialog-content" role="document">' + template + '</div>' :
+ '<div class="ngdialog-content" role="document">' + template + '</div>'));
+
+ $dialog.data('$ngDialogOptions', options);
+
+ scope.ngDialogId = dialogID;
+
+ if (options.data && angular.isString(options.data)) {
+ var firstLetter = options.data.replace(/^\s*/, '')[0];
+ scope.ngDialogData = (firstLetter === '{' || firstLetter === '[') ? angular.fromJson(options.data) : new String(options.data);
+ scope.ngDialogData.ngDialogId = dialogID;
+ } else if (options.data && angular.isObject(options.data)) {
+ scope.ngDialogData = options.data;
+ scope.ngDialogData.ngDialogId = dialogID;
+ }
+
+ if (options.className) {
+ $dialog.addClass(options.className);
+ }
+
+ if (options.appendClassName) {
+ $dialog.addClass(options.appendClassName);
+ }
+
+ if (options.width) {
+ $dialogContent = $dialog[0].querySelector('.ngdialog-content');
+ if (angular.isString(options.width)) {
+ $dialogContent.style.width = options.width;
+ } else {
+ $dialogContent.style.width = options.width + 'px';
+ }
+ }
+
+ if (options.height) {
+ $dialogContent = $dialog[0].querySelector('.ngdialog-content');
+ if (angular.isString(options.height)) {
+ $dialogContent.style.height = options.height;
+ } else {
+ $dialogContent.style.height = options.height + 'px';
+ }
+ }
+
+ if (options.disableAnimation) {
+ $dialog.addClass(disabledAnimationClass);
+ }
+
+ if (options.appendTo && angular.isString(options.appendTo)) {
+ $dialogParent = angular.element(document.querySelector(options.appendTo));
+ } else {
+ $dialogParent = $elements.body;
+ }
+
+ privateMethods.applyAriaAttributes($dialog, options);
+
+ [
+ { name: '$ngDialogPreCloseCallback', value: options.preCloseCallback },
+ { name: '$ngDialogOnOpenCallback', value: options.onOpenCallback }
+ ].forEach(function (option) {
+ if (option.value) {
+ var callback;
+
+ if (angular.isFunction(option.value)) {
+ callback = option.value;
+ } else if (angular.isString(option.value)) {
+ if (scope) {
+ if (angular.isFunction(scope[option.value])) {
+ callback = scope[option.value];
+ } else if (scope.$parent && angular.isFunction(scope.$parent[option.value])) {
+ callback = scope.$parent[option.value];
+ } else if ($rootScope && angular.isFunction($rootScope[option.value])) {
+ callback = $rootScope[option.value];
+ }
+ }
+ }
+
+ if (callback) {
+ $dialog.data(option.name, callback);
+ }
+ }
+ });
+
+ scope.closeThisDialog = function (value) {
+ privateMethods.closeDialog($dialog, value);
+ };
+
+ if (options.controller && (angular.isString(options.controller) || angular.isArray(options.controller) || angular.isFunction(options.controller))) {
+
+ var label;
+
+ if (options.controllerAs && angular.isString(options.controllerAs)) {
+ label = options.controllerAs;
+ }
+
+ var controllerInstance = $controller(options.controller, angular.extend(
+ locals,
+ {
+ $scope: scope,
+ $element: $dialog
+ }),
+ true,
+ label
+ );
+
+ if(options.bindToController) {
+ angular.extend(controllerInstance.instance, {ngDialogId: scope.ngDialogId, ngDialogData: scope.ngDialogData, closeThisDialog: scope.closeThisDialog, confirm: scope.confirm});
+ }
+
+ if(typeof controllerInstance === 'function'){
+ $dialog.data('$ngDialogControllerController', controllerInstance());
+ } else {
+ $dialog.data('$ngDialogControllerController', controllerInstance);
+ }
+ }
+
+ $timeout(function () {
+ var $activeDialogs = document.querySelectorAll('.ngdialog');
+ privateMethods.deactivateAll($activeDialogs);
+
+ $compile($dialog)(scope);
+ var widthDiffs = $window.innerWidth - $elements.body.prop('clientWidth');
+ $elements.html.addClass(options.bodyClassName);
+ $elements.body.addClass(options.bodyClassName);
+ activeBodyClasses.push(options.bodyClassName);
+ var scrollBarWidth = widthDiffs - ($window.innerWidth - $elements.body.prop('clientWidth'));
+ if (scrollBarWidth > 0) {
+ privateMethods.setBodyPadding(scrollBarWidth);
+ }
+ $dialogParent.append($dialog);
+
+ privateMethods.activate($dialog);
+
+ if (options.trapFocus) {
+ privateMethods.autoFocus($dialog);
+ }
+
+ if (options.name) {
+ $rootScope.$broadcast('ngDialog.opened', {dialog: $dialog, name: options.name});
+ } else {
+ $rootScope.$broadcast('ngDialog.opened', $dialog);
+ }
+ var onOpenCallback = $dialog.data('$ngDialogOnOpenCallback');
+ if (onOpenCallback && angular.isFunction(onOpenCallback)) {
+ onOpenCallback.call($dialog);
+ }
+
+ });
+
+ if (!keydownIsBound) {
+ $elements.body.bind('keydown', privateMethods.onDocumentKeydown);
+ keydownIsBound = true;
+ }
+
+ if (options.closeByNavigation) {
+ closeByNavigationDialogStack.push($dialog);
+ }
+
+ if (options.preserveFocus) {
+ $dialog.data('$ngDialogPreviousFocus', document.activeElement);
+ }
+
+ closeByDocumentHandler = function (event) {
+ var isOverlay = options.closeByDocument ? $el(event.target).hasClass('ngdialog-overlay') : false;
+ var isCloseBtn = $el(event.target).hasClass('ngdialog-close');
+
+ if (isOverlay || isCloseBtn) {
+ publicMethods.close($dialog.attr('id'), isCloseBtn ? '$closeButton' : '$document');
+ }
+ };
+
+ if (typeof $window.Hammer !== 'undefined') {
+ var hammerTime = scope.hammerTime = $window.Hammer($dialog[0]);
+ hammerTime.on('tap', closeByDocumentHandler);
+ } else {
+ $dialog.bind('click', closeByDocumentHandler);
+ }
+
+ dialogsCount += 1;
+
+ return publicMethods;
+ });
+
+ return {
+ id: dialogID,
+ closePromise: defer.promise,
+ close: function (value) {
+ privateMethods.closeDialog($dialog, value);
+ }
+ };
+
+ function loadTemplateUrl (tmpl, config) {
+ var config = config || {};
+ config.headers = config.headers || {};
+
+ angular.extend(config.headers, {'Accept': 'text/html'});
+
+ $rootScope.$broadcast('ngDialog.templateLoading', tmpl);
+ return $http.get(tmpl, config).then(function(res) {
+ $rootScope.$broadcast('ngDialog.templateLoaded', tmpl);
+ return res.data || '';
+ });
+ }
+
+ function loadTemplate (tmpl) {
+ if (!tmpl) {
+ return 'Empty template';
+ }
+
+ if (angular.isString(tmpl) && options.plain) {
+ return tmpl;
+ }
+
+ if (typeof options.cache === 'boolean' && !options.cache) {
+ return loadTemplateUrl(tmpl, {cache: false});
+ }
+
+ return loadTemplateUrl(tmpl, {cache: $templateCache});
+ }
+ },
+
+ /*
+ * @param {Object} options:
+ * - template {String} - id of ng-template, url for partial, plain string (if enabled)
+ * - plain {Boolean} - enable plain string templates, default false
+ * - name {String}
+ * - scope {Object}
+ * - controller {String}
+ * - controllerAs {String}
+ * - className {String} - dialog theme class
+ * - appendClassName {String} - dialog theme class to be appended to defaults
+ * - showClose {Boolean} - show close button, default true
+ * - closeByEscape {Boolean} - default false
+ * - closeByDocument {Boolean} - default false
+ * - preCloseCallback {String|Function} - user supplied function name/function called before closing dialog (if set); not called on confirm
+ * - bodyClassName {String} - class added to body at open dialog
+ *
+ * @return {Object} dialog
+ */
+ openConfirm: function (opts) {
+ var defer = $q.defer();
+ var options = angular.copy(defaults);
+
+ opts = opts || {};
+
+ // Merge opts.data with predefined via setDefaults
+ if (typeof options.data !== 'undefined') {
+ if (typeof opts.data === 'undefined') {
+ opts.data = {};
+ }
+ opts.data = angular.merge(angular.copy(options.data), opts.data);
+ }
+
+ angular.extend(options, opts);
+
+ options.scope = angular.isObject(options.scope) ? options.scope.$new() : $rootScope.$new();
+ options.scope.confirm = function (value) {
+ defer.resolve(value);
+ var $dialog = $el(document.getElementById(openResult.id));
+ privateMethods.performCloseDialog($dialog, value);
+ };
+
+ var openResult = publicMethods.open(options);
+ if (openResult) {
+ openResult.closePromise.then(function (data) {
+ if (data) {
+ return defer.reject(data.value);
+ }
+ return defer.reject();
+ });
+ return defer.promise;
+ }
+ },
+
+ isOpen: function(id) {
+ var $dialog = $el(document.getElementById(id));
+ return $dialog.length > 0;
+ },
+
+ /*
+ * @param {String} id
+ * @return {Object} dialog
+ */
+ close: function (id, value) {
+ var $dialog = $el(document.getElementById(id));
+
+ if ($dialog.length) {
+ privateMethods.closeDialog($dialog, value);
+ } else {
+ if (id === '$escape') {
+ var topDialogId = openIdStack[openIdStack.length - 1];
+ $dialog = $el(document.getElementById(topDialogId));
+ if ($dialog.data('$ngDialogOptions').closeByEscape) {
+ privateMethods.closeDialog($dialog, '$escape');
+ }
+ } else {
+ publicMethods.closeAll(value);
+ }
+ }
+
+ return publicMethods;
+ },
+
+ closeAll: function (value) {
+ var $all = document.querySelectorAll('.ngdialog');
+
+ // Reverse order to ensure focus restoration works as expected
+ for (var i = $all.length - 1; i >= 0; i--) {
+ var dialog = $all[i];
+ privateMethods.closeDialog($el(dialog), value);
+ }
+ },
+
+ getOpenDialogs: function() {
+ return openIdStack;
+ },
+
+ getDefaults: function () {
+ return defaults;
+ }
+ };
+
+ angular.forEach(
+ ['html', 'body'],
+ function(elementName) {
+ $elements[elementName] = $document.find(elementName);
+ if (forceElementsReload[elementName]) {
+ var eventName = privateMethods.getRouterLocationEventName();
+ $rootScope.$on(eventName, function () {
+ $elements[elementName] = $document.find(elementName);
+ });
+ }
+ }
+ );
+
+ // Listen to navigation events to close dialog
+ var uiRouterVersion = privateMethods.detectUIRouter();
+ if (uiRouterVersion === UI_ROUTER_VERSION_ONE_PLUS) {
+ var $transitions = $injector.get('$transitions');
+ $transitions.onStart({}, function (trans) {
+ while (closeByNavigationDialogStack.length > 0) {
+ var toCloseDialog = closeByNavigationDialogStack.pop();
+ if (privateMethods.closeDialog(toCloseDialog) === false) {
+ return false;
+ }
+ }
+ });
+ }
+ else {
+ var eventName = uiRouterVersion === UI_ROUTER_VERSION_LEGACY ? '$stateChangeStart' : '$locationChangeStart';
+ $rootScope.$on(eventName, function ($event) {
+ while (closeByNavigationDialogStack.length > 0) {
+ var toCloseDialog = closeByNavigationDialogStack.pop();
+ if (privateMethods.closeDialog(toCloseDialog) === false) {
+ $event.preventDefault();
+ }
+ }
+ });
+ }
+
+ return publicMethods;
+ }];
+ });
+
+ m.directive('ngDialog', ['ngDialog', function (ngDialog) {
+ return {
+ restrict: 'A',
+ scope: {
+ ngDialogScope: '='
+ },
+ link: function (scope, elem, attrs) {
+ elem.on('click', function (e) {
+ e.preventDefault();
+
+ var ngDialogScope = angular.isDefined(scope.ngDialogScope) ? scope.ngDialogScope : 'noScope';
+ angular.isDefined(attrs.ngDialogClosePrevious) && ngDialog.close(attrs.ngDialogClosePrevious);
+
+ var defaults = ngDialog.getDefaults();
+
+ ngDialog.open({
+ template: attrs.ngDialog,
+ className: attrs.ngDialogClass || defaults.className,
+ appendClassName: attrs.ngDialogAppendClass,
+ controller: attrs.ngDialogController,
+ controllerAs: attrs.ngDialogControllerAs,
+ bindToController: attrs.ngDialogBindToController,
+ disableAnimation: attrs.ngDialogDisableAnimation,
+ scope: ngDialogScope,
+ data: attrs.ngDialogData,
+ showClose: attrs.ngDialogShowClose === 'false' ? false : (attrs.ngDialogShowClose === 'true' ? true : defaults.showClose),
+ closeByDocument: attrs.ngDialogCloseByDocument === 'false' ? false : (attrs.ngDialogCloseByDocument === 'true' ? true : defaults.closeByDocument),
+ closeByEscape: attrs.ngDialogCloseByEscape === 'false' ? false : (attrs.ngDialogCloseByEscape === 'true' ? true : defaults.closeByEscape),
+ overlay: attrs.ngDialogOverlay === 'false' ? false : (attrs.ngDialogOverlay === 'true' ? true : defaults.overlay),
+ preCloseCallback: attrs.ngDialogPreCloseCallback || defaults.preCloseCallback,
+ onOpenCallback: attrs.ngDialogOnOpenCallback || defaults.onOpenCallback,
+ bodyClassName: attrs.ngDialogBodyClass || defaults.bodyClassName
+ });
+ });
+ }
+ };
+ }]);
+
+ return m;
+}));
diff --git a/libs/bower_components/ngDialog/js/ngDialog.min.js b/libs/bower_components/ngDialog/js/ngDialog.min.js
index 1849205be8..aa9cee34f6 100644
--- a/libs/bower_components/ngDialog/js/ngDialog.min.js
+++ b/libs/bower_components/ngDialog/js/ngDialog.min.js
@@ -1,2 +1,2 @@
-/*! ng-dialog - v0.2.14 (https://github.com/likeastore/ngDialog) */
-!function(a,b){"use strict";var c=b.module("ngDialog",[]),d=b.element,e=b.isDefined,f=(document.body||document.documentElement).style,g=e(f.animation)||e(f.WebkitAnimation)||e(f.MozAnimation)||e(f.MsAnimation)||e(f.OAnimation),h="animationend webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend",i=!1;c.provider("ngDialog",function(){var c=this.defaults={className:"ngdialog-theme-default",plain:!1,showClose:!0,closeByDocument:!0,closeByEscape:!0,appendTo:!1};this.setForceBodyReload=function(a){i=a||!1},this.setDefaults=function(a){b.extend(c,a)};var e,f=0,j=0,k={};this.$get=["$document","$templateCache","$compile","$q","$http","$rootScope","$timeout","$window","$controller",function(l,m,n,o,p,q,r,s,t){var u=l.find("body");i&&q.$on("$locationChangeSuccess",function(){u=l.find("body")});var v={onDocumentKeydown:function(a){27===a.keyCode&&w.close("$escape")},setBodyPadding:function(a){var b=parseInt(u.css("padding-right")||0,10);u.css("padding-right",b+a+"px"),u.data("ng-dialog-original-padding",b)},resetBodyPadding:function(){var a=u.data("ng-dialog-original-padding");a?u.css("padding-right",a+"px"):u.css("padding-right","")},closeDialog:function(b,c){var d=b.attr("id");"undefined"!=typeof a.Hammer?a.Hammer(b[0]).off("tap",e):b.unbind("click"),1===j&&u.unbind("keydown"),b.hasClass("ngdialog-closing")||(j-=1),g?b.unbind(h).bind(h,function(){b.scope().$destroy(),b.remove(),0===j&&(u.removeClass("ngdialog-open"),v.resetBodyPadding()),q.$broadcast("ngDialog.closed",b)}).addClass("ngdialog-closing"):(b.scope().$destroy(),b.remove(),0===j&&(u.removeClass("ngdialog-open"),v.resetBodyPadding()),q.$broadcast("ngDialog.closed",b)),k[d]&&(k[d].resolve({id:d,value:c,$dialog:b,remainingDialogs:j}),delete k[d])}},w={open:function(g){function h(a){return a?b.isString(a)&&l.plain?a:m.get(a)||p.get(a,{cache:!0}):"Empty template"}var i=this,l=b.copy(c);g=g||{},b.extend(l,g),f+=1,i.latestID="ngdialog"+f;var x;k[i.latestID]=x=o.defer();var y,z,A=b.isObject(l.scope)?l.scope.$new():q.$new();return o.when(h(l.template)).then(function(c){if(c=b.isString(c)?c:c.data&&b.isString(c.data)?c.data:"",m.put(l.template,c),l.showClose&&(c+='<div class="ngdialog-close"></div>'),i.$result=y=d('<div id="ngdialog'+f+'" class="ngdialog"></div>'),y.html('<div class="ngdialog-overlay"></div><div class="ngdialog-content">'+c+"</div>"),l.data&&b.isString(l.data)){var g=l.data.replace(/^\s*/,"")[0];A.ngDialogData="{"===g||"["===g?b.fromJson(l.data):l.data}else l.data&&b.isObject(l.data)&&(A.ngDialogData=b.fromJson(b.toJson(l.data)));if(l.controller&&(b.isString(l.controller)||b.isArray(l.controller)||b.isFunction(l.controller))){var h=t(l.controller,{$scope:A,$element:y});y.data("$ngDialogControllerController",h)}return l.className&&y.addClass(l.className),z=l.appendTo&&b.isString(l.appendTo)?b.element(document.querySelector(l.appendTo)):u,A.closeThisDialog=function(a){v.closeDialog(y,a)},r(function(){n(y)(A);var a=s.innerWidth-u.prop("clientWidth");u.addClass("ngdialog-open");var b=a-(s.innerWidth-u.prop("clientWidth"));b>0&&v.setBodyPadding(b),z.append(y),q.$broadcast("ngDialog.opened",y)}),l.closeByEscape&&u.bind("keydown",v.onDocumentKeydown),e=function(a){var b=l.closeByDocument?d(a.target).hasClass("ngdialog-overlay"):!1,c=d(a.target).hasClass("ngdialog-close");(b||c)&&w.close(y.attr("id"),c?"$closeButton":"$document")},"undefined"!=typeof a.Hammer?a.Hammer(y[0]).on("tap",e):y.bind("click",e),j+=1,w}),{id:"ngdialog"+f,closePromise:x.promise,close:function(a){v.closeDialog(y,a)}}},openConfirm:function(a){var c=o.defer(),d={closeByEscape:!1,closeByDocument:!1};b.extend(d,a),d.scope=b.isObject(d.scope)?d.scope.$new():q.$new(),d.scope.confirm=function(a){c.resolve(a),e.close(a)};var e=w.open(d);return e.closePromise.then(function(a){return a?c.reject(a.value):c.reject()}),c.promise},close:function(a,b){var c=d(document.getElementById(a));return c.length?v.closeDialog(c,b):w.closeAll(b),w},closeAll:function(a){var c=document.querySelectorAll(".ngdialog");b.forEach(c,function(b){v.closeDialog(d(b),a)})}};return w}]}),c.directive("ngDialog",["ngDialog",function(a){return{restrict:"A",scope:{ngDialogScope:"="},link:function(c,d,e){d.on("click",function(d){d.preventDefault();var f=b.isDefined(c.ngDialogScope)?c.ngDialogScope:"noScope";b.isDefined(e.ngDialogClosePrevious)&&a.close(e.ngDialogClosePrevious),a.open({template:e.ngDialog,className:e.ngDialogClass,controller:e.ngDialogController,scope:f,data:e.ngDialogData,showClose:"false"===e.ngDialogShowClose?!1:!0,closeByDocument:"false"===e.ngDialogCloseByDocument?!1:!0,closeByEscape:"false"===e.ngDialogCloseByEscape?!1:!0})})}}}])}(window,window.angular); \ No newline at end of file
+/*! ng-dialog - v1.2.0 (https://github.com/likeastore/ngDialog) */
+!function(a,b){"undefined"!=typeof module&&module.exports?(b("undefined"==typeof angular?require("angular"):angular),module.exports="ngDialog"):"function"==typeof define&&define.amd?define(["angular"],b):b(a.angular)}(this,function(a){"use strict";var b=a.module("ngDialog",[]),c=a.element,d=a.isDefined,e=(document.body||document.documentElement).style,f=d(e.animation)||d(e.WebkitAnimation)||d(e.MozAnimation)||d(e.MsAnimation)||d(e.OAnimation),g="animationend webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend",h="a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, *[tabindex], *[contenteditable]",i="ngdialog-disabled-animation",j={html:!1,body:!1},k={},l=[],m=[],n=!1,o=!1,p=[],q="legacy",r="1.0.0+";return b.provider("ngDialog",function(){var b=this.defaults={className:"ngdialog-theme-default",appendClassName:"",disableAnimation:!1,plain:!1,showClose:!0,closeByDocument:!0,closeByEscape:!0,closeByNavigation:!1,appendTo:!1,preCloseCallback:!1,onOpenCallback:!1,overlay:!0,cache:!0,trapFocus:!0,preserveFocus:!0,ariaAuto:!0,ariaRole:null,ariaLabelledById:null,ariaLabelledBySelector:null,ariaDescribedById:null,ariaDescribedBySelector:null,bodyClassName:"ngdialog-open",width:null,height:null};this.setForceHtmlReload=function(a){j.html=a||!1},this.setForceBodyReload=function(a){j.body=a||!1},this.setDefaults=function(c){a.extend(b,c)},this.setOpenOnePerName=function(a){o=a||!1};var d,e=0,s=0,t={};this.$get=["$document","$templateCache","$compile","$q","$http","$rootScope","$timeout","$window","$controller","$injector",function(u,v,w,x,y,z,A,B,C,D){var E=[],F={onDocumentKeydown:function(a){27===a.keyCode&&G.close("$escape")},activate:function(a){var b=a.data("$ngDialogOptions");b.trapFocus&&(a.on("keydown",F.onTrapFocusKeydown),E.body.on("keydown",F.onTrapFocusKeydown))},deactivate:function(a){a.off("keydown",F.onTrapFocusKeydown),E.body.off("keydown",F.onTrapFocusKeydown)},deactivateAll:function(b){a.forEach(b,function(b){var c=a.element(b);F.deactivate(c)})},setBodyPadding:function(a){var b=parseInt(E.body.css("padding-right")||0,10);E.body.css("padding-right",b+a+"px"),E.body.data("ng-dialog-original-padding",b),z.$broadcast("ngDialog.setPadding",a)},resetBodyPadding:function(){var a=E.body.data("ng-dialog-original-padding");a?E.body.css("padding-right",a+"px"):E.body.css("padding-right",""),z.$broadcast("ngDialog.setPadding",0)},performCloseDialog:function(a,b){var c=a.data("$ngDialogOptions"),e=a.attr("id"),h=k[e];if(F.deactivate(a),h){if("undefined"!=typeof B.Hammer){var i=h.hammerTime;i.off("tap",d),i.destroy&&i.destroy(),delete h.hammerTime}else a.unbind("click");1===s&&E.body.unbind("keydown",F.onDocumentKeydown),a.hasClass("ngdialog-closing")||(s-=1);var j=a.data("$ngDialogPreviousFocus");j&&j.focus&&j.focus(),z.$broadcast("ngDialog.closing",a,b),s=s<0?0:s,f&&!c.disableAnimation?(h.$destroy(),a.unbind(g).bind(g,function(){F.closeDialogElement(a,b)}).addClass("ngdialog-closing")):(h.$destroy(),F.closeDialogElement(a,b)),t[e]&&(t[e].resolve({id:e,value:b,$dialog:a,remainingDialogs:s}),delete t[e]),k[e]&&delete k[e],l.splice(l.indexOf(e),1),l.length||(E.body.unbind("keydown",F.onDocumentKeydown),n=!1),0==s&&(d=void 0)}},closeDialogElement:function(a,b){var c=a.data("$ngDialogOptions");a.remove(),m.splice(m.indexOf(c.bodyClassName),1),m.indexOf(c.bodyClassName)===-1&&(E.html.removeClass(c.bodyClassName),E.body.removeClass(c.bodyClassName)),0===s&&F.resetBodyPadding(),z.$broadcast("ngDialog.closed",a,b)},closeDialog:function(b,c){var d=b.data("$ngDialogPreCloseCallback");if(d&&a.isFunction(d)){var e=d.call(b,c);if(a.isObject(e))e.closePromise?e.closePromise.then(function(){F.performCloseDialog(b,c)},function(){return!1}):e.then(function(){F.performCloseDialog(b,c)},function(){return!1});else{if(e===!1)return!1;F.performCloseDialog(b,c)}}else F.performCloseDialog(b,c)},onTrapFocusKeydown:function(b){var c,d=a.element(b.currentTarget);if(d.hasClass("ngdialog"))c=d;else if(c=F.getActiveDialog(),null===c)return;var e=9===b.keyCode,f=b.shiftKey===!0;e&&F.handleTab(c,b,f)},handleTab:function(a,b,c){var d=F.getFocusableElements(a);if(0===d.length)return void(document.activeElement&&document.activeElement.blur&&document.activeElement.blur());var e=document.activeElement,f=Array.prototype.indexOf.call(d,e),g=f===-1,h=0===f,i=f===d.length-1,j=!1;c?(g||h)&&(d[d.length-1].focus(),j=!0):(g||i)&&(d[0].focus(),j=!0),j&&(b.preventDefault(),b.stopPropagation())},autoFocus:function(a){var b=a[0],d=b.querySelector("*[autofocus]");if(null===d||(d.focus(),document.activeElement!==d)){var e=F.getFocusableElements(a);if(e.length>0)return void e[0].focus();var f=F.filterVisibleElements(b.querySelectorAll("h1,h2,h3,h4,h5,h6,p,span"));if(f.length>0){var g=f[0];c(g).attr("tabindex","-1").css("outline","0"),g.focus()}}},getFocusableElements:function(a){var b=a[0],c=b.querySelectorAll(h),d=F.filterTabbableElements(c);return F.filterVisibleElements(d)},filterTabbableElements:function(a){for(var b=[],d=0;d<a.length;d++){var e=a[d];"-1"!==c(e).attr("tabindex")&&b.push(e)}return b},filterVisibleElements:function(a){for(var b=[],c=0;c<a.length;c++){var d=a[c];(d.offsetWidth>0||d.offsetHeight>0)&&b.push(d)}return b},getActiveDialog:function(){var a=document.querySelectorAll(".ngdialog");return 0===a.length?null:c(a[a.length-1])},applyAriaAttributes:function(a,b){if(b.ariaAuto){if(!b.ariaRole){var c=F.getFocusableElements(a).length>0?"dialog":"alertdialog";b.ariaRole=c}b.ariaLabelledBySelector||(b.ariaLabelledBySelector="h1,h2,h3,h4,h5,h6"),b.ariaDescribedBySelector||(b.ariaDescribedBySelector="article,section,p")}b.ariaRole&&a.attr("role",b.ariaRole),F.applyAriaAttribute(a,"aria-labelledby",b.ariaLabelledById,b.ariaLabelledBySelector),F.applyAriaAttribute(a,"aria-describedby",b.ariaDescribedById,b.ariaDescribedBySelector)},applyAriaAttribute:function(a,b,d,e){if(d)return void a.attr(b,d);if(e){var f=a.attr("id"),g=a[0].querySelector(e);if(!g)return;var h=f+"-"+b;return c(g).attr("id",h),a.attr(b,h),h}},detectUIRouter:function(){return D.has("$transitions")?r:!!D.has("$state")&&q},getRouterLocationEventName:function(){return F.detectUIRouter()?"$stateChangeStart":"$locationChangeStart"}},G={__PRIVATE__:F,open:function(f){function g(b,c){var c=c||{};return c.headers=c.headers||{},a.extend(c.headers,{Accept:"text/html"}),z.$broadcast("ngDialog.templateLoading",b),y.get(b,c).then(function(a){return z.$broadcast("ngDialog.templateLoaded",b),a.data||""})}function h(b){return b?a.isString(b)&&q.plain?b:"boolean"!=typeof q.cache||q.cache?g(b,{cache:v}):g(b,{cache:!1}):"Empty template"}var j=null;if(f=f||{},!(o&&f.name&&(j=f.name.toLowerCase().replace(/\s/g,"-")+"-dialog",this.isOpen(j)))){var q=a.copy(b),r=++e;j=j||"ngdialog"+r,l.push(j),"undefined"!=typeof q.data&&("undefined"==typeof f.data&&(f.data={}),f.data=a.merge(a.copy(q.data),f.data)),a.extend(q,f);var u;t[j]=u=x.defer();var H;k[j]=H=a.isObject(q.scope)?q.scope.$new():z.$new();var I,J,K,L=a.extend({},q.resolve);return a.forEach(L,function(b,c){L[c]=a.isString(b)?D.get(b):D.invoke(b,null,null,c)}),x.all({template:h(q.template||q.templateUrl),locals:x.all(L)}).then(function(b){var e=b.template,f=b.locals;q.showClose&&(e+='<button aria-label="Dismiss" class="ngdialog-close"></button>');var g=q.overlay?"":" ngdialog-no-overlay";if(I=c('<div id="'+j+'" class="ngdialog'+g+'"></div>'),I.html(q.overlay?'<div class="ngdialog-overlay"></div><div class="ngdialog-content" role="document">'+e+"</div>":'<div class="ngdialog-content" role="document">'+e+"</div>"),I.data("$ngDialogOptions",q),H.ngDialogId=j,q.data&&a.isString(q.data)){var h=q.data.replace(/^\s*/,"")[0];H.ngDialogData="{"===h||"["===h?a.fromJson(q.data):new String(q.data),H.ngDialogData.ngDialogId=j}else q.data&&a.isObject(q.data)&&(H.ngDialogData=q.data,H.ngDialogData.ngDialogId=j);if(q.className&&I.addClass(q.className),q.appendClassName&&I.addClass(q.appendClassName),q.width&&(K=I[0].querySelector(".ngdialog-content"),a.isString(q.width)?K.style.width=q.width:K.style.width=q.width+"px"),q.height&&(K=I[0].querySelector(".ngdialog-content"),a.isString(q.height)?K.style.height=q.height:K.style.height=q.height+"px"),q.disableAnimation&&I.addClass(i),J=q.appendTo&&a.isString(q.appendTo)?a.element(document.querySelector(q.appendTo)):E.body,F.applyAriaAttributes(I,q),[{name:"$ngDialogPreCloseCallback",value:q.preCloseCallback},{name:"$ngDialogOnOpenCallback",value:q.onOpenCallback}].forEach(function(b){if(b.value){var c;a.isFunction(b.value)?c=b.value:a.isString(b.value)&&H&&(a.isFunction(H[b.value])?c=H[b.value]:H.$parent&&a.isFunction(H.$parent[b.value])?c=H.$parent[b.value]:z&&a.isFunction(z[b.value])&&(c=z[b.value])),c&&I.data(b.name,c)}}),H.closeThisDialog=function(a){F.closeDialog(I,a)},q.controller&&(a.isString(q.controller)||a.isArray(q.controller)||a.isFunction(q.controller))){var k;q.controllerAs&&a.isString(q.controllerAs)&&(k=q.controllerAs);var l=C(q.controller,a.extend(f,{$scope:H,$element:I}),!0,k);q.bindToController&&a.extend(l.instance,{ngDialogId:H.ngDialogId,ngDialogData:H.ngDialogData,closeThisDialog:H.closeThisDialog,confirm:H.confirm}),"function"==typeof l?I.data("$ngDialogControllerController",l()):I.data("$ngDialogControllerController",l)}if(A(function(){var b=document.querySelectorAll(".ngdialog");F.deactivateAll(b),w(I)(H);var c=B.innerWidth-E.body.prop("clientWidth");E.html.addClass(q.bodyClassName),E.body.addClass(q.bodyClassName),m.push(q.bodyClassName);var d=c-(B.innerWidth-E.body.prop("clientWidth"));d>0&&F.setBodyPadding(d),J.append(I),F.activate(I),q.trapFocus&&F.autoFocus(I),q.name?z.$broadcast("ngDialog.opened",{dialog:I,name:q.name}):z.$broadcast("ngDialog.opened",I);var e=I.data("$ngDialogOnOpenCallback");e&&a.isFunction(e)&&e.call(I)}),n||(E.body.bind("keydown",F.onDocumentKeydown),n=!0),q.closeByNavigation&&p.push(I),q.preserveFocus&&I.data("$ngDialogPreviousFocus",document.activeElement),d=function(a){var b=!!q.closeByDocument&&c(a.target).hasClass("ngdialog-overlay"),d=c(a.target).hasClass("ngdialog-close");(b||d)&&G.close(I.attr("id"),d?"$closeButton":"$document")},"undefined"!=typeof B.Hammer){var o=H.hammerTime=B.Hammer(I[0]);o.on("tap",d)}else I.bind("click",d);return s+=1,G}),{id:j,closePromise:u.promise,close:function(a){F.closeDialog(I,a)}}}},openConfirm:function(d){var e=x.defer(),f=a.copy(b);d=d||{},"undefined"!=typeof f.data&&("undefined"==typeof d.data&&(d.data={}),d.data=a.merge(a.copy(f.data),d.data)),a.extend(f,d),f.scope=a.isObject(f.scope)?f.scope.$new():z.$new(),f.scope.confirm=function(a){e.resolve(a);var b=c(document.getElementById(g.id));F.performCloseDialog(b,a)};var g=G.open(f);if(g)return g.closePromise.then(function(a){return a?e.reject(a.value):e.reject()}),e.promise},isOpen:function(a){var b=c(document.getElementById(a));return b.length>0},close:function(a,b){var d=c(document.getElementById(a));if(d.length)F.closeDialog(d,b);else if("$escape"===a){var e=l[l.length-1];d=c(document.getElementById(e)),d.data("$ngDialogOptions").closeByEscape&&F.closeDialog(d,"$escape")}else G.closeAll(b);return G},closeAll:function(a){for(var b=document.querySelectorAll(".ngdialog"),d=b.length-1;d>=0;d--){var e=b[d];F.closeDialog(c(e),a)}},getOpenDialogs:function(){return l},getDefaults:function(){return b}};a.forEach(["html","body"],function(a){if(E[a]=u.find(a),j[a]){var b=F.getRouterLocationEventName();z.$on(b,function(){E[a]=u.find(a)})}});var H=F.detectUIRouter();if(H===r){var I=D.get("$transitions");I.onStart({},function(a){for(;p.length>0;){var b=p.pop();if(F.closeDialog(b)===!1)return!1}})}else{var J=H===q?"$stateChangeStart":"$locationChangeStart";z.$on(J,function(a){for(;p.length>0;){var b=p.pop();F.closeDialog(b)===!1&&a.preventDefault()}})}return G}]}),b.directive("ngDialog",["ngDialog",function(b){return{restrict:"A",scope:{ngDialogScope:"="},link:function(c,d,e){d.on("click",function(d){d.preventDefault();var f=a.isDefined(c.ngDialogScope)?c.ngDialogScope:"noScope";a.isDefined(e.ngDialogClosePrevious)&&b.close(e.ngDialogClosePrevious);var g=b.getDefaults();b.open({template:e.ngDialog,className:e.ngDialogClass||g.className,appendClassName:e.ngDialogAppendClass,controller:e.ngDialogController,controllerAs:e.ngDialogControllerAs,bindToController:e.ngDialogBindToController,disableAnimation:e.ngDialogDisableAnimation,scope:f,data:e.ngDialogData,showClose:"false"!==e.ngDialogShowClose&&("true"===e.ngDialogShowClose||g.showClose),closeByDocument:"false"!==e.ngDialogCloseByDocument&&("true"===e.ngDialogCloseByDocument||g.closeByDocument),closeByEscape:"false"!==e.ngDialogCloseByEscape&&("true"===e.ngDialogCloseByEscape||g.closeByEscape),overlay:"false"!==e.ngDialogOverlay&&("true"===e.ngDialogOverlay||g.overlay),preCloseCallback:e.ngDialogPreCloseCallback||g.preCloseCallback,onOpenCallback:e.ngDialogOnOpenCallback||g.onOpenCallback,bodyClassName:e.ngDialogBodyClass||g.bodyClassName})})}}}]),b}); \ No newline at end of file
diff --git a/libs/bower_components/ngDialog/karma.conf.js b/libs/bower_components/ngDialog/karma.conf.js
new file mode 100644
index 0000000000..c877682026
--- /dev/null
+++ b/libs/bower_components/ngDialog/karma.conf.js
@@ -0,0 +1,46 @@
+var testMinified = process.argv.indexOf('--min') > -1, subject;
+
+if (testMinified) {
+ subject = 'js/ngDialog.min.js';
+ console.log('Testing minifed ngDialog');
+} else {
+ subject = 'js/ngDialog.js';
+}
+
+module.exports = function(config) {
+ config.set({
+ basePath: '',
+ frameworks: ['jasmine'],
+ files: [
+ 'bower_components/angular/angular.js',
+ 'bower_components/angular-mocks/angular-mocks.js',
+ 'example/inside-directive/**/*.js',
+ subject,
+ 'tests/unit/**/*.js'
+ ],
+ port: 9877,
+ colors: true,
+ logLevel: config.LOG_INFO,
+ autoWatch: false,
+ browsers: ['PhantomJS'],
+ singleRun: false,
+ reporters: ['dots', 'coverage'],
+ preprocessors: {
+ 'js/ngDialog.js': ['coverage']
+ },
+ plugins: [
+ 'karma-phantomjs-launcher',
+ 'karma-coverage',
+ 'karma-jasmine'
+ ],
+ coverageReporter: {
+ reporters: [{
+ type: 'html',
+ subdir: 'report-html'
+ }, {
+ type: 'lcov',
+ subdir: 'report-lcov'
+ }]
+ }
+ });
+};
diff --git a/libs/bower_components/ngDialog/package.json b/libs/bower_components/ngDialog/package.json
index cd2140bb0e..bee0455e8c 100644
--- a/libs/bower_components/ngDialog/package.json
+++ b/libs/bower_components/ngDialog/package.json
@@ -1,9 +1,27 @@
{
"name": "ng-dialog",
- "version": "0.2.14",
+ "version": "1.3.0",
"homepage": "https://github.com/likeastore/ngDialog",
"description": "Modal dialogs and popups provider for Angular.js applications",
"main": "./js/ngDialog.js",
+ "style": "./css/ngDialog.css",
+ "scripts": {
+ "pretest": "npm install && bower install --allow-root",
+ "test": "./node_modules/karma/bin/karma start --single-run --browsers PhantomJS",
+ "test-min": "./node_modules/karma/bin/karma start --single-run --browsers PhantomJS --min",
+ "test-watch": "./node_modules/karma/bin/karma start --auto-watch --browsers PhantomJS",
+ "serve": "node server",
+ "webdriver-update": "node_modules/.bin/webdriver-manager update --standalone",
+ "webdriver": "node_modules/.bin/webdriver-manager start",
+ "preprotractor": "npm install && bower install --allow-root",
+ "protractor": "node_modules/.bin/protractor protractor.conf.js",
+ "protractor-a11y": "node_modules/.bin/protractor protractor.conf.js --a11y",
+ "protractor-console": "node_modules/.bin/protractor protractor.conf.js --console-error",
+ "build": "grunt build"
+ },
+ "directories": {
+ "test": "tests"
+ },
"keywords": [
"angular.js",
"modals",
@@ -28,13 +46,20 @@
"readmeFilename": "README.md",
"license": "MIT",
"devDependencies": {
- "grunt": "~0.4.2",
- "grunt-contrib-cssmin": "^0.9.0",
- "grunt-contrib-jshint": "~0.7.2",
- "grunt-contrib-uglify": "~0.2.7",
- "grunt-myth": "~0.1.0",
- "myth": "~0.1.6",
- "network-address": "0.0.4",
- "strata": "~0.20.1"
+ "express": "^4.13.3",
+ "grunt": "^0.4.5",
+ "grunt-cli": "^0.1.13",
+ "grunt-contrib-cssmin": "^0.14.0",
+ "grunt-contrib-jshint": "^0.11.3",
+ "grunt-contrib-uglify": "^0.9.2",
+ "grunt-myth": "^1.0.1",
+ "jasmine-core": "^2.3.4",
+ "karma": "^1.3.0",
+ "karma-coverage": "^1.1.1",
+ "karma-jasmine": "^1.1.0",
+ "karma-phantomjs-launcher": "^1.0.2",
+ "myth": "^1.5.0",
+ "phantomjs": "^2.1.7",
+ "protractor": "^2.2.0"
}
}
diff --git a/libs/bower_components/ngDialog/protractor.conf.js b/libs/bower_components/ngDialog/protractor.conf.js
new file mode 100644
index 0000000000..769dfae6e2
--- /dev/null
+++ b/libs/bower_components/ngDialog/protractor.conf.js
@@ -0,0 +1,75 @@
+var args = process.argv.slice(2);
+var plugins = [];
+
+var useA11y = args.indexOf('--a11y') > -1;
+var useConsole = args.indexOf('--console-warning') > -1 || args.indexOf('--console-error') > -1;
+
+if (useA11y) {
+ plugins.push({
+ path: 'node_modules/protractor/plugins/accessibility',
+ chromeA11YDevTools: {
+ treatWarningsAsFailures: true
+ }
+ });
+}
+
+if (useConsole) {
+ plugins.push({
+ path: 'node_modules/protractor/plugins/console',
+ failOnWarning: args.indexOf('--console-warning') > -1,
+ failOnError: args.indexOf('--console-error') > -1
+ });
+}
+var multiCapabilities = [{
+ browserName: 'firefox'
+}];
+
+// if (process.env.TRAVIS_PULL_REQUEST === 'false') {
+// multiCapabilities.push({
+// browserName: 'chrome'
+// });
+
+// if (!useA11y) {
+// multiCapabilities.push({
+// browserName: 'safari'
+// });
+// }
+
+// if (!useA11y && !useConsole) {
+// multiCapabilities.push({
+// browserName: 'internet explorer',
+// version: 10
+// });
+// multiCapabilities.push({
+// browserName: 'internet explorer',
+// version: 11
+// });
+// }
+
+// multiCapabilities.forEach(function(capability) {
+// capability['tunnel-identifier'] = process.env.TRAVIS_JOB_NUMBER;
+// capability.name = 'ngDialog Protractor ' + process.env.TRAVIS_JOB_NUMBER;
+// });
+// }
+
+var config = {
+ allScriptsTimeout: 11000,
+ specs: ['tests/protractor/**/*.js'],
+ multiCapabilities: multiCapabilities,
+ framework: 'jasmine2',
+ jasmineNodeOpts: {
+ defaultTimeoutInterval: 30000
+ },
+ plugins: plugins
+};
+
+// if (process.env.TRAVIS_PULL_REQUEST === 'false') {
+// config.sauceUser = process.env.SAUCE_USERNAME;
+// config.sauceKey = process.env.SAUCE_ACCESS_KEY;
+// }
+
+console.log('TRAVIS_PULL_REQUEST', process.env.TRAVIS_PULL_REQUEST);
+console.log('protractor config: ', config);
+console.log('multiCapabilities: ', multiCapabilities);
+
+module.exports.config = config;
diff --git a/libs/bower_components/ngDialog/server.js b/libs/bower_components/ngDialog/server.js
new file mode 100644
index 0000000000..e2fdd1b011
--- /dev/null
+++ b/libs/bower_components/ngDialog/server.js
@@ -0,0 +1,9 @@
+var express = require('express');
+var http = require('http');
+var app = express();
+
+app.use(express.static( __dirname ));
+
+var port = process.env.PORT || 3000;
+http.createServer(app).listen(port);
+console.log('Server running on ' + port);
diff --git a/libs/bower_components/ngDialog/yarn.lock b/libs/bower_components/ngDialog/yarn.lock
new file mode 100644
index 0000000000..ec57e22a79
--- /dev/null
+++ b/libs/bower_components/ngDialog/yarn.lock
@@ -0,0 +1,3281 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+abbrev@1, abbrev@1.0.x:
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135"
+
+accepts@1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.1.4.tgz#d71c96f7d41d0feda2c38cd14e8a27c04158df4a"
+ dependencies:
+ mime-types "~2.0.4"
+ negotiator "0.4.9"
+
+accepts@~1.3.3:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.3.tgz#c3ca7434938648c3e0d9c1e328dd68b622c284ca"
+ dependencies:
+ mime-types "~2.1.11"
+ negotiator "0.6.1"
+
+accessibility-developer-tools@~2.6.0:
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/accessibility-developer-tools/-/accessibility-developer-tools-2.6.0.tgz#fcedaff014eddc3f54c4b365931be1f715746afc"
+
+adm-zip@0.4.4:
+ version "0.4.4"
+ resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.4.tgz#a61ed5ae6905c3aea58b3a657d25033091052736"
+
+after@0.8.1:
+ version "0.8.1"
+ resolved "https://registry.yarnpkg.com/after/-/after-0.8.1.tgz#ab5d4fb883f596816d3515f8f791c0af486dd627"
+
+agent-base@2:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-2.0.1.tgz#bd8f9e86a8eb221fffa07bd14befd55df142815e"
+ dependencies:
+ extend "~3.0.0"
+ semver "~5.0.1"
+
+align-text@^0.1.1, align-text@^0.1.3:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117"
+ dependencies:
+ kind-of "^3.0.2"
+ longest "^1.0.1"
+ repeat-string "^1.5.2"
+
+amdefine@>=0.0.4:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
+
+ansi-regex@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.0.0.tgz#c5061b6e0ef8a81775e50f5d66151bf6bf371107"
+
+ansi-styles@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
+
+anymatch@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507"
+ dependencies:
+ arrify "^1.0.0"
+ micromatch "^2.1.5"
+
+aproba@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.0.4.tgz#2713680775e7614c8ba186c065d4e2e52d1072c0"
+
+are-we-there-yet@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.2.tgz#80e470e95a084794fe1899262c5667c6e88de1b3"
+ dependencies:
+ delegates "^1.0.0"
+ readable-stream "^2.0.0 || ^1.1.13"
+
+argparse@^1.0.7:
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86"
+ dependencies:
+ sprintf-js "~1.0.2"
+
+"argparse@~ 0.1.11":
+ version "0.1.16"
+ resolved "https://registry.yarnpkg.com/argparse/-/argparse-0.1.16.tgz#cfd01e0fbba3d6caed049fbd758d40f65196f57c"
+ dependencies:
+ underscore "~1.7.0"
+ underscore.string "~2.4.0"
+
+arr-diff@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf"
+ dependencies:
+ arr-flatten "^1.0.1"
+
+arr-flatten@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.1.tgz#e5ffe54d45e19f32f216e91eb99c8ce892bb604b"
+
+array-find-index@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1"
+
+array-flatten@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
+
+array-slice@^0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-0.2.3.tgz#dd3cfb80ed7973a75117cdac69b0b99ec86186f5"
+
+array-unique@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53"
+
+arraybuffer.slice@0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz#f33b2159f0532a3f3107a272c0ccfbd1ad2979ca"
+
+arrify@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
+
+asn1@0.1.11:
+ version "0.1.11"
+ resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.1.11.tgz#559be18376d08a4ec4dbe80877d27818639b2df7"
+
+asn1@~0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86"
+
+assert-plus@^0.1.5:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.1.5.tgz#ee74009413002d84cec7219c6ac811812e723160"
+
+assert-plus@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234"
+
+assert-plus@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
+
+async-each@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d"
+
+async@1.x, async@^1.4.0:
+ version "1.5.2"
+ resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
+
+async@^2.0.1:
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/async/-/async-2.1.4.tgz#2d2160c7788032e4dd6cbe2502f1f9a2c8f6cde4"
+ dependencies:
+ lodash "^4.14.0"
+
+async@~0.1.22:
+ version "0.1.22"
+ resolved "https://registry.yarnpkg.com/async/-/async-0.1.22.tgz#0fc1aaa088a0e3ef0ebe2d8831bab0dcf8845061"
+
+async@~0.2.6:
+ version "0.2.10"
+ resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1"
+
+async@~0.9.0:
+ version "0.9.2"
+ resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d"
+
+asynckit@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+
+atob@~1.1.0:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/atob/-/atob-1.1.3.tgz#95f13629b12c3a51a5d215abdce2aa9f32f80773"
+
+autoprefixer-core@^5.2.1:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/autoprefixer-core/-/autoprefixer-core-5.2.1.tgz#e640c414ae419aae21c1ad43c8ea0f3db82a566d"
+ dependencies:
+ browserslist "~0.4.0"
+ caniuse-db "^1.0.30000214"
+ num2fraction "^1.1.0"
+ postcss "~4.1.12"
+
+aws-sign2@~0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.5.0.tgz#c57103f7a17fc037f02d7c2e64b602ea223f7d63"
+
+aws-sign2@~0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f"
+
+aws4@^1.2.1:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.5.0.tgz#0a29ffb79c31c9e712eeb087e8e7a64b4a56d755"
+
+backo2@1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947"
+
+balanced-match@0.1.0, balanced-match@~0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.1.0.tgz#b504bd05869b39259dd0c5efc35d843176dccc4a"
+
+balanced-match@^0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.0.0.tgz#86efc32ae583496c1c1fbb51cd648de0363ebb03"
+
+balanced-match@^0.4.1:
+ version "0.4.2"
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838"
+
+base64-arraybuffer@0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.2.tgz#474df4a9f2da24e05df3158c3b1db3c3cd46a154"
+
+base64id@0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/base64id/-/base64id-0.1.0.tgz#02ce0fdeee0cef4f40080e1e73e834f0b1bfce3f"
+
+bcrypt-pbkdf@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.0.tgz#3ca76b85241c7170bf7d9703e7b9aa74630040d4"
+ dependencies:
+ tweetnacl "^0.14.3"
+
+benchmark@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/benchmark/-/benchmark-1.0.0.tgz#2f1e2fa4c359f11122aa183082218e957e390c73"
+
+better-assert@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522"
+ dependencies:
+ callsite "1.0.0"
+
+binary-extensions@^1.0.0:
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.8.0.tgz#48ec8d16df4377eae5fa5884682480af4d95c774"
+
+bindings@1.2.x, bindings@~1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.2.1.tgz#14ad6113812d2d37d72e67b4cacb4bb726505f11"
+
+bl@~0.9.0:
+ version "0.9.5"
+ resolved "https://registry.yarnpkg.com/bl/-/bl-0.9.5.tgz#c06b797af085ea00bc527afc8efcf11de2232054"
+ dependencies:
+ readable-stream "~1.0.26"
+
+bl@~1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/bl/-/bl-1.0.3.tgz#fc5421a28fd4226036c3b3891a66a25bc64d226e"
+ dependencies:
+ readable-stream "~2.0.5"
+
+blob@0.0.4:
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.4.tgz#bcf13052ca54463f30f9fc7e95b9a47630a94921"
+
+block-stream@*:
+ version "0.0.9"
+ resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a"
+ dependencies:
+ inherits "~2.0.0"
+
+bluebird@^2.9.30:
+ version "2.11.0"
+ resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-2.11.0.tgz#534b9033c022c9579c56ba3b3e5a5caafbb650e1"
+
+bluebird@^3.3.0:
+ version "3.4.7"
+ resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.4.7.tgz#f72d760be09b7f76d08ed8fae98b289a8d05fab3"
+
+body-parser@^1.12.4:
+ version "1.15.2"
+ resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.15.2.tgz#d7578cf4f1d11d5f6ea804cef35dc7a7ff6dae67"
+ dependencies:
+ bytes "2.4.0"
+ content-type "~1.0.2"
+ debug "~2.2.0"
+ depd "~1.1.0"
+ http-errors "~1.5.0"
+ iconv-lite "0.4.13"
+ on-finished "~2.3.0"
+ qs "6.2.0"
+ raw-body "~2.1.7"
+ type-is "~1.6.13"
+
+boom@2.x.x:
+ version "2.10.1"
+ resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f"
+ dependencies:
+ hoek "2.x.x"
+
+brace-expansion@^1.0.0:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.6.tgz#7197d7eaa9b87e648390ea61fc66c84427420df9"
+ dependencies:
+ balanced-match "^0.4.1"
+ concat-map "0.0.1"
+
+braces@^0.1.2:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-0.1.5.tgz#c085711085291d8b75fdd74eab0f8597280711e6"
+ dependencies:
+ expand-range "^0.1.0"
+
+braces@^1.8.2:
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7"
+ dependencies:
+ expand-range "^1.8.1"
+ preserve "^0.2.0"
+ repeat-element "^1.1.2"
+
+browserify-zlib@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.1.4.tgz#bb35f8a519f600e0fa6b8485241c979d0141fb2d"
+ dependencies:
+ pako "~0.2.0"
+
+browserslist@~0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-0.4.0.tgz#3bd4ab9199dc1b9150d4d6dba4d9d3aabbc86dd4"
+ dependencies:
+ caniuse-db "^1.0.30000153"
+
+buffer-shims@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51"
+
+bufferutil@1.2.x:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-1.2.1.tgz#37be5d36e1e06492221e68d474b1ac58e510cbd7"
+ dependencies:
+ bindings "1.2.x"
+ nan "^2.0.5"
+
+builtin-modules@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
+
+bytes@2.4.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.4.0.tgz#7d97196f9d5baf7f6935e25985549edd2a6c2339"
+
+callsite@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20"
+
+camelcase-keys@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7"
+ dependencies:
+ camelcase "^2.0.0"
+ map-obj "^1.0.0"
+
+camelcase@^1.0.2:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39"
+
+camelcase@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f"
+
+caniuse-db@^1.0.30000153, caniuse-db@^1.0.30000214:
+ version "1.0.30000604"
+ resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000604.tgz#bc139270a777564d19c0aadcd832b491d093bda5"
+
+caseless@~0.10.0:
+ version "0.10.0"
+ resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.10.0.tgz#ed6b2719adcd1fd18f58dc081c0f1a5b43963909"
+
+caseless@~0.11.0:
+ version "0.11.0"
+ resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7"
+
+center-align@^0.1.1:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad"
+ dependencies:
+ align-text "^0.1.3"
+ lazy-cache "^1.0.3"
+
+chalk@^1.0.0, chalk@^1.1.1:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
+ dependencies:
+ ansi-styles "^2.2.1"
+ escape-string-regexp "^1.0.2"
+ has-ansi "^2.0.0"
+ strip-ansi "^3.0.0"
+ supports-color "^2.0.0"
+
+chokidar@^1.4.1:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.6.1.tgz#2f4447ab5e96e50fb3d789fd90d4c72e0e4c70c2"
+ dependencies:
+ anymatch "^1.3.0"
+ async-each "^1.0.0"
+ glob-parent "^2.0.0"
+ inherits "^2.0.1"
+ is-binary-path "^1.0.0"
+ is-glob "^2.0.0"
+ path-is-absolute "^1.0.0"
+ readdirp "^2.0.0"
+ optionalDependencies:
+ fsevents "^1.0.0"
+
+clean-css@~3.4.2:
+ version "3.4.23"
+ resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-3.4.23.tgz#604fbbca24c12feb59b02f00b84f1fb7ded6d001"
+ dependencies:
+ commander "2.8.x"
+ source-map "0.4.x"
+
+cli@0.6.x:
+ version "0.6.6"
+ resolved "https://registry.yarnpkg.com/cli/-/cli-0.6.6.tgz#02ad44a380abf27adac5e6f0cdd7b043d74c53e3"
+ dependencies:
+ exit "0.1.2"
+ glob "~ 3.2.1"
+
+cliui@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1"
+ dependencies:
+ center-align "^0.1.1"
+ right-align "^0.1.1"
+ wordwrap "0.0.2"
+
+clone-component@~0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/clone-component/-/clone-component-0.2.2.tgz#82e56c2e92cd34e7c42b668630c620128fa926ba"
+ dependencies:
+ component-type "*"
+
+clone@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.2.tgz#260b7a99ebb1edfe247538175f783243cb19d149"
+
+code-point-at@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
+
+coffee-script@~1.3.3:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/coffee-script/-/coffee-script-1.3.3.tgz#150d6b4cb522894369efed6a2101c20bc7f4a4f4"
+
+color-convert@^1.3.0:
+ version "1.8.2"
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.8.2.tgz#be868184d7c8631766d54e7078e2672d7c7e3339"
+ dependencies:
+ color-name "^1.1.1"
+
+color-name@^1.0.0, color-name@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.1.tgz#4b1415304cf50028ea81643643bd82ea05803689"
+
+color-string@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/color-string/-/color-string-0.3.0.tgz#27d46fb67025c5c2fa25993bfbf579e47841b991"
+ dependencies:
+ color-name "^1.0.0"
+
+color@^0.11.0:
+ version "0.11.4"
+ resolved "https://registry.yarnpkg.com/color/-/color-0.11.4.tgz#6d7b5c74fb65e841cd48792ad1ed5e07b904d764"
+ dependencies:
+ clone "^1.0.2"
+ color-convert "^1.3.0"
+ color-string "^0.3.0"
+
+colors@^1.1.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63"
+
+colors@~0.6.2:
+ version "0.6.2"
+ resolved "https://registry.yarnpkg.com/colors/-/colors-0.6.2.tgz#2423fe6678ac0c5dae8852e5d0e5be08c997abcc"
+
+combine-lists@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/combine-lists/-/combine-lists-1.0.1.tgz#458c07e09e0d900fc28b70a3fec2dacd1d2cb7f6"
+ dependencies:
+ lodash "^4.5.0"
+
+combined-stream@^1.0.5, combined-stream@~1.0.1, combined-stream@~1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009"
+ dependencies:
+ delayed-stream "~1.0.0"
+
+combined-stream@~0.0.4:
+ version "0.0.7"
+ resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-0.0.7.tgz#0137e657baa5a7541c57ac37ac5fc07d73b4dc1f"
+ dependencies:
+ delayed-stream "0.0.5"
+
+commander@2.8.x:
+ version "2.8.1"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.8.1.tgz#06be367febfda0c330aa1e2a072d3dc9762425d4"
+ dependencies:
+ graceful-readlink ">= 1.0.0"
+
+commander@^2.1.0, commander@^2.8.1, commander@^2.9.0:
+ version "2.9.0"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4"
+ dependencies:
+ graceful-readlink ">= 1.0.0"
+
+component-bind@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1"
+
+component-emitter@1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.1.2.tgz#296594f2753daa63996d2af08d15a95116c9aec3"
+
+component-emitter@1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.0.tgz#ccd113a86388d06482d03de3fc7df98526ba8efe"
+
+component-inherit@0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143"
+
+component-type@*:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/component-type/-/component-type-1.2.1.tgz#8a47901700238e4fc32269771230226f24b415a9"
+
+concat-map@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+
+concat-stream@1.5.0, concat-stream@^1.4.1:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.5.0.tgz#53f7d43c51c5e43f81c8fdd03321c631be68d611"
+ dependencies:
+ inherits "~2.0.1"
+ readable-stream "~2.0.0"
+ typedarray "~0.0.5"
+
+connect@^3.3.5:
+ version "3.5.0"
+ resolved "https://registry.yarnpkg.com/connect/-/connect-3.5.0.tgz#b357525a0b4c1f50599cd983e1d9efeea9677198"
+ dependencies:
+ debug "~2.2.0"
+ finalhandler "0.5.0"
+ parseurl "~1.3.1"
+ utils-merge "1.0.0"
+
+console-browserify@1.1.x:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10"
+ dependencies:
+ date-now "^0.1.4"
+
+console-control-strings@^1.0.0, console-control-strings@~1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
+
+content-disposition@0.5.1:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.1.tgz#87476c6a67c8daa87e32e87616df883ba7fb071b"
+
+content-type@~1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.2.tgz#b7d113aee7a8dd27bd21133c4dc2529df1721eed"
+
+convert-source-map@^0.3.3:
+ version "0.3.5"
+ resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-0.3.5.tgz#f1d802950af7dd2631a1febe0596550c86ab3190"
+
+cookie-signature@1.0.6:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
+
+cookie@0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb"
+
+core-js@^2.2.0:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e"
+
+core-util-is@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
+
+cryptiles@2.x.x:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8"
+ dependencies:
+ boom "2.x.x"
+
+css-color-function@^1.2.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/css-color-function/-/css-color-function-1.3.0.tgz#72c767baf978f01b8a8a94f42f17ba5d22a776fc"
+ dependencies:
+ balanced-match "0.1.0"
+ color "^0.11.0"
+ debug "~0.7.4"
+ rgb "~0.1.0"
+
+css@^2.0.0:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/css/-/css-2.2.1.tgz#73a4c81de85db664d4ee674f7d47085e3b2d55dc"
+ dependencies:
+ inherits "^2.0.1"
+ source-map "^0.1.38"
+ source-map-resolve "^0.3.0"
+ urix "^0.1.0"
+
+ctype@0.5.3:
+ version "0.5.3"
+ resolved "https://registry.yarnpkg.com/ctype/-/ctype-0.5.3.tgz#82c18c2461f74114ef16c135224ad0b9144ca12f"
+
+currently-unhandled@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea"
+ dependencies:
+ array-find-index "^1.0.1"
+
+custom-event@~1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425"
+
+dashdash@^1.12.0:
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
+ dependencies:
+ assert-plus "^1.0.0"
+
+date-now@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b"
+
+dateformat@1.0.2-1.2.3:
+ version "1.0.2-1.2.3"
+ resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-1.0.2-1.2.3.tgz#b0220c02de98617433b72851cf47de3df2cdbee9"
+
+dateformat@^1.0.6:
+ version "1.0.12"
+ resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-1.0.12.tgz#9f124b67594c937ff706932e4a642cca8dbbfee9"
+ dependencies:
+ get-stdin "^4.0.1"
+ meow "^3.3.0"
+
+debug@0.7.4, debug@~0.7.4:
+ version "0.7.4"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-0.7.4.tgz#06e1ea8082c2cb14e39806e22e2f6f757f92af39"
+
+debug@2, debug@2.2.0, debug@~2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da"
+ dependencies:
+ ms "0.7.1"
+
+decamelize@^1.0.0, decamelize@^1.1.2:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
+
+deep-extend@~0.4.0:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253"
+
+deep-is@~0.1.3:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
+
+delayed-stream@0.0.5:
+ version "0.0.5"
+ resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-0.0.5.tgz#d4b1f43a93e8296dfe02694f4680bc37a313c73f"
+
+delayed-stream@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
+
+delegates@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
+
+depd@~1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.0.tgz#e1bd82c6aab6ced965b97b88b17ed3e528ca18c3"
+
+destroy@~1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
+
+di@^0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c"
+
+dom-serialize@^2.2.0:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/dom-serialize/-/dom-serialize-2.2.1.tgz#562ae8999f44be5ea3076f5419dcd59eb43ac95b"
+ dependencies:
+ custom-event "~1.0.0"
+ ent "~2.2.0"
+ extend "^3.0.0"
+ void-elements "^2.0.0"
+
+dom-serializer@0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82"
+ dependencies:
+ domelementtype "~1.1.1"
+ entities "~1.1.1"
+
+domelementtype@1:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2"
+
+domelementtype@~1.1.1:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b"
+
+domhandler@2.3:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.3.0.tgz#2de59a0822d5027fabff6f032c2b25a2a8abe738"
+ dependencies:
+ domelementtype "1"
+
+domutils@1.5:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf"
+ dependencies:
+ dom-serializer "0"
+ domelementtype "1"
+
+each-async@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/each-async/-/each-async-1.1.1.tgz#dee5229bdf0ab6ba2012a395e1b869abf8813473"
+ dependencies:
+ onetime "^1.0.0"
+ set-immediate-shim "^1.0.0"
+
+ecc-jsbn@~0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505"
+ dependencies:
+ jsbn "~0.1.0"
+
+ee-first@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
+
+encodeurl@~1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20"
+
+engine.io-client@1.6.9:
+ version "1.6.9"
+ resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-1.6.9.tgz#1d6ad48048a5083c95096943b29d36efdb212401"
+ dependencies:
+ component-emitter "1.1.2"
+ component-inherit "0.0.3"
+ debug "2.2.0"
+ engine.io-parser "1.2.4"
+ has-cors "1.1.0"
+ indexof "0.0.1"
+ parsejson "0.0.1"
+ parseqs "0.0.2"
+ parseuri "0.0.4"
+ ws "1.0.1"
+ xmlhttprequest-ssl "1.5.1"
+ yeast "0.1.2"
+
+engine.io-parser@1.2.4:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-1.2.4.tgz#e0897b0bf14e792d4cd2a5950553919c56948c42"
+ dependencies:
+ after "0.8.1"
+ arraybuffer.slice "0.0.6"
+ base64-arraybuffer "0.1.2"
+ blob "0.0.4"
+ has-binary "0.1.6"
+ utf8 "2.1.0"
+
+engine.io@1.6.10:
+ version "1.6.10"
+ resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-1.6.10.tgz#f87d84e1bd21d1a2ec7f8deef0c62054acdfb27a"
+ dependencies:
+ accepts "1.1.4"
+ base64id "0.1.0"
+ debug "2.2.0"
+ engine.io-parser "1.2.4"
+ ws "1.0.1"
+
+ent@~2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d"
+
+entities@1.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/entities/-/entities-1.0.0.tgz#b2987aa3821347fcde642b24fdfc9e4fb712bf26"
+
+entities@~1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0"
+
+error-ex@^1.2.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.0.tgz#e67b43f3e82c96ea3a584ffee0b9fc3325d802d9"
+ dependencies:
+ is-arrayish "^0.2.1"
+
+es6-promise@~2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-2.3.0.tgz#96edb9f2fdb01995822b263dd8aadab6748181bc"
+
+es6-promise@~4.0.3:
+ version "4.0.5"
+ resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.0.5.tgz#7882f30adde5b240ccfa7f7d78c548330951ae42"
+
+escape-html@~1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
+
+escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+
+escodegen@1.8.x:
+ version "1.8.1"
+ resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018"
+ dependencies:
+ esprima "^2.7.1"
+ estraverse "^1.9.1"
+ esutils "^2.0.2"
+ optionator "^0.8.1"
+ optionalDependencies:
+ source-map "~0.2.0"
+
+esprima@2.7.x, esprima@^2.6.0, esprima@^2.7.1:
+ version "2.7.3"
+ resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581"
+
+"esprima@~ 1.0.2":
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/esprima/-/esprima-1.0.4.tgz#9f557e08fc3b4d26ece9dd34f8fbf476b62585ad"
+
+estraverse@^1.9.1:
+ version "1.9.3"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44"
+
+esutils@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
+
+etag@~1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/etag/-/etag-1.7.0.tgz#03d30b5f67dd6e632d2945d30d6652731a34d5d8"
+
+eventemitter2@~0.4.13:
+ version "0.4.14"
+ resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-0.4.14.tgz#8f61b75cde012b2e9eb284d4545583b5643b61ab"
+
+eventemitter3@1.x.x:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-1.2.0.tgz#1c86991d816ad1e504750e73874224ecf3bec508"
+
+exit@0.1.2, exit@0.1.x, exit@^0.1.2, exit@~0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c"
+
+expand-braces@^0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/expand-braces/-/expand-braces-0.1.2.tgz#488b1d1d2451cb3d3a6b192cfc030f44c5855fea"
+ dependencies:
+ array-slice "^0.2.3"
+ array-unique "^0.2.1"
+ braces "^0.1.2"
+
+expand-brackets@^0.1.4:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b"
+ dependencies:
+ is-posix-bracket "^0.1.0"
+
+expand-range@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-0.1.1.tgz#4cb8eda0993ca56fa4f41fc42f3cbb4ccadff044"
+ dependencies:
+ is-number "^0.1.1"
+ repeat-string "^0.2.2"
+
+expand-range@^1.8.1:
+ version "1.8.2"
+ resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337"
+ dependencies:
+ fill-range "^2.1.0"
+
+express@^4.13.3:
+ version "4.14.0"
+ resolved "https://registry.yarnpkg.com/express/-/express-4.14.0.tgz#c1ee3f42cdc891fb3dc650a8922d51ec847d0d66"
+ dependencies:
+ accepts "~1.3.3"
+ array-flatten "1.1.1"
+ content-disposition "0.5.1"
+ content-type "~1.0.2"
+ cookie "0.3.1"
+ cookie-signature "1.0.6"
+ debug "~2.2.0"
+ depd "~1.1.0"
+ encodeurl "~1.0.1"
+ escape-html "~1.0.3"
+ etag "~1.7.0"
+ finalhandler "0.5.0"
+ fresh "0.3.0"
+ merge-descriptors "1.0.1"
+ methods "~1.1.2"
+ on-finished "~2.3.0"
+ parseurl "~1.3.1"
+ path-to-regexp "0.1.7"
+ proxy-addr "~1.1.2"
+ qs "6.2.0"
+ range-parser "~1.2.0"
+ send "0.14.1"
+ serve-static "~1.11.1"
+ type-is "~1.6.13"
+ utils-merge "1.0.0"
+ vary "~1.1.0"
+
+extend@3, extend@^3.0.0, extend@~3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4"
+
+extglob@^0.3.1:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1"
+ dependencies:
+ is-extglob "^1.0.0"
+
+extract-zip@~1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.5.0.tgz#92ccf6d81ef70a9fa4c1747114ccef6d8688a6c4"
+ dependencies:
+ concat-stream "1.5.0"
+ debug "0.7.4"
+ mkdirp "0.5.0"
+ yauzl "2.4.1"
+
+extsprintf@1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550"
+
+fast-levenshtein@~2.0.4:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
+
+fd-slicer@~1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.0.1.tgz#8b5bcbd9ec327c5041bf9ab023fd6750f1177e65"
+ dependencies:
+ pend "~1.2.0"
+
+figures@^1.0.1:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e"
+ dependencies:
+ escape-string-regexp "^1.0.5"
+ object-assign "^4.1.0"
+
+filename-regex@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.0.tgz#996e3e80479b98b9897f15a8a58b3d084e926775"
+
+fill-range@^2.1.0:
+ version "2.2.3"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723"
+ dependencies:
+ is-number "^2.1.0"
+ isobject "^2.0.0"
+ randomatic "^1.1.3"
+ repeat-element "^1.1.2"
+ repeat-string "^1.5.2"
+
+finalhandler@0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-0.5.0.tgz#e9508abece9b6dba871a6942a1d7911b91911ac7"
+ dependencies:
+ debug "~2.2.0"
+ escape-html "~1.0.3"
+ on-finished "~2.3.0"
+ statuses "~1.3.0"
+ unpipe "~1.0.0"
+
+find-file@~0.1.0:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/find-file/-/find-file-0.1.4.tgz#f806bb8132a8265232bf1c9ef95ba0746511d871"
+
+find-up@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
+ dependencies:
+ path-exists "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+findup-sync@~0.1.0, findup-sync@~0.1.2:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-0.1.3.tgz#7f3e7a97b82392c653bf06589bd85190e93c3683"
+ dependencies:
+ glob "~3.2.9"
+ lodash "~2.4.1"
+
+for-in@^0.1.5:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.6.tgz#c9f96e89bfad18a545af5ec3ed352a1d9e5b4dc8"
+
+for-own@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.4.tgz#0149b41a39088c7515f51ebe1c1386d45f935072"
+ dependencies:
+ for-in "^0.1.5"
+
+forever-agent@~0.6.0, forever-agent@~0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
+
+form-data@~0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-0.2.0.tgz#26f8bc26da6440e299cbdcfb69035c4f77a6e466"
+ dependencies:
+ async "~0.9.0"
+ combined-stream "~0.0.4"
+ mime-types "~2.0.3"
+
+form-data@~1.0.0-rc3:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-1.0.1.tgz#ae315db9a4907fa065502304a66d7733475ee37c"
+ dependencies:
+ async "^2.0.1"
+ combined-stream "^1.0.5"
+ mime-types "^2.1.11"
+
+form-data@~2.1.1:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.2.tgz#89c3534008b97eada4cbb157d58f6f5df025eae4"
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.5"
+ mime-types "^2.1.12"
+
+forwarded@~0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.0.tgz#19ef9874c4ae1c297bcf078fde63a09b66a84363"
+
+fresh@0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.3.0.tgz#651f838e22424e7566de161d8358caa199f83d4f"
+
+fs-extra@~0.26.4:
+ version "0.26.7"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.26.7.tgz#9ae1fdd94897798edab76d0918cf42d0c3184fa9"
+ dependencies:
+ graceful-fs "^4.1.2"
+ jsonfile "^2.1.0"
+ klaw "^1.0.0"
+ path-is-absolute "^1.0.0"
+ rimraf "^2.2.8"
+
+fs-extra@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-1.0.0.tgz#cd3ce5f7e7cb6145883fcae3191e9877f8587950"
+ dependencies:
+ graceful-fs "^4.1.2"
+ jsonfile "^2.1.0"
+ klaw "^1.0.0"
+
+fs.realpath@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+
+fsevents@^1.0.0:
+ version "1.0.17"
+ resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.0.17.tgz#8537f3f12272678765b4fd6528c0f1f66f8f4558"
+ dependencies:
+ nan "^2.3.0"
+ node-pre-gyp "^0.6.29"
+
+fstream-ignore@~1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105"
+ dependencies:
+ fstream "^1.0.0"
+ inherits "2"
+ minimatch "^3.0.0"
+
+fstream@^1.0.0, fstream@^1.0.2, fstream@~1.0.10:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.10.tgz#604e8a92fe26ffd9f6fae30399d4984e1ab22822"
+ dependencies:
+ graceful-fs "^4.1.2"
+ inherits "~2.0.0"
+ mkdirp ">=0.5 0"
+ rimraf "2"
+
+gather-stream@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/gather-stream/-/gather-stream-1.0.0.tgz#b33994af457a8115700d410f317733cbe7a0904b"
+
+gauge@~2.7.1:
+ version "2.7.2"
+ resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.2.tgz#15cecc31b02d05345a5d6b0e171cdb3ad2307774"
+ dependencies:
+ aproba "^1.0.3"
+ console-control-strings "^1.0.0"
+ has-unicode "^2.0.0"
+ object-assign "^4.1.0"
+ signal-exit "^3.0.0"
+ string-width "^1.0.1"
+ strip-ansi "^3.0.1"
+ supports-color "^0.2.0"
+ wide-align "^1.1.0"
+
+generate-function@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74"
+
+generate-object-property@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0"
+ dependencies:
+ is-property "^1.0.0"
+
+get-stdin@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
+
+getobject@~0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/getobject/-/getobject-0.1.0.tgz#047a449789fa160d018f5486ed91320b6ec7885c"
+
+getpass@^0.1.1:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.6.tgz#283ffd9fc1256840875311c1b60e8c40187110e6"
+ dependencies:
+ assert-plus "^1.0.0"
+
+glob-base@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4"
+ dependencies:
+ glob-parent "^2.0.0"
+ is-glob "^2.0.0"
+
+glob-parent@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28"
+ dependencies:
+ is-glob "^2.0.0"
+
+glob@^3.2.11, "glob@~ 3.2.1", glob@~3.2, glob@~3.2.9:
+ version "3.2.11"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-3.2.11.tgz#4a973f635b9190f715d10987d5c00fd2815ebe3d"
+ dependencies:
+ inherits "2"
+ minimatch "0.3"
+
+glob@^5.0.15:
+ version "5.0.15"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1"
+ dependencies:
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "2 || 3"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+glob@^7.0.3, glob@^7.0.5:
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8"
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.0.2"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+glob@~3.1.21:
+ version "3.1.21"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-3.1.21.tgz#d29e0a055dea5138f4d07ed40e8982e83c2066cd"
+ dependencies:
+ graceful-fs "~1.2.0"
+ inherits "1"
+ minimatch "~0.2.11"
+
+graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9:
+ version "4.1.11"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
+
+graceful-fs@~1.2.0:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-1.2.3.tgz#15a4806a57547cb2d2dbf27f42e89a8c3451b364"
+
+"graceful-readlink@>= 1.0.0":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725"
+
+grunt-cli@^0.1.13:
+ version "0.1.13"
+ resolved "https://registry.yarnpkg.com/grunt-cli/-/grunt-cli-0.1.13.tgz#e9ebc4047631f5012d922770c39378133cad10f4"
+ dependencies:
+ findup-sync "~0.1.0"
+ nopt "~1.0.10"
+ resolve "~0.3.1"
+
+grunt-contrib-cssmin@^0.14.0:
+ version "0.14.0"
+ resolved "https://registry.yarnpkg.com/grunt-contrib-cssmin/-/grunt-contrib-cssmin-0.14.0.tgz#88b0a92536969bb566281c5c61ec5062d833f3b7"
+ dependencies:
+ chalk "^1.0.0"
+ clean-css "~3.4.2"
+ maxmin "^1.1.0"
+
+grunt-contrib-jshint@^0.11.3:
+ version "0.11.3"
+ resolved "https://registry.yarnpkg.com/grunt-contrib-jshint/-/grunt-contrib-jshint-0.11.3.tgz#80368181dccd551186e5b8385c011cee24d640a0"
+ dependencies:
+ hooker "^0.2.3"
+ jshint "~2.8.0"
+
+grunt-contrib-uglify@^0.9.2:
+ version "0.9.2"
+ resolved "https://registry.yarnpkg.com/grunt-contrib-uglify/-/grunt-contrib-uglify-0.9.2.tgz#1a61c6f212410e4abb4f7c89153717b101560260"
+ dependencies:
+ chalk "^1.0.0"
+ lodash "^3.2.0"
+ maxmin "^1.0.0"
+ uglify-js "^2.4.24"
+ uri-path "0.0.2"
+
+grunt-legacy-log-utils@~0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/grunt-legacy-log-utils/-/grunt-legacy-log-utils-0.1.1.tgz#c0706b9dd9064e116f36f23fe4e6b048672c0f7e"
+ dependencies:
+ colors "~0.6.2"
+ lodash "~2.4.1"
+ underscore.string "~2.3.3"
+
+grunt-legacy-log@~0.1.0:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/grunt-legacy-log/-/grunt-legacy-log-0.1.3.tgz#ec29426e803021af59029f87d2f9cd7335a05531"
+ dependencies:
+ colors "~0.6.2"
+ grunt-legacy-log-utils "~0.1.1"
+ hooker "~0.2.3"
+ lodash "~2.4.1"
+ underscore.string "~2.3.3"
+
+grunt-legacy-util@~0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/grunt-legacy-util/-/grunt-legacy-util-0.2.0.tgz#93324884dbf7e37a9ff7c026dff451d94a9e554b"
+ dependencies:
+ async "~0.1.22"
+ exit "~0.1.1"
+ getobject "~0.1.0"
+ hooker "~0.2.3"
+ lodash "~0.9.2"
+ underscore.string "~2.2.1"
+ which "~1.0.5"
+
+grunt-myth@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/grunt-myth/-/grunt-myth-1.1.0.tgz#f08b38b62d355aa2d9f555db8d4fea34af0ed87d"
+ dependencies:
+ each-async "^1.0.0"
+ myth "^1.0.1"
+
+grunt@^0.4.5:
+ version "0.4.5"
+ resolved "https://registry.yarnpkg.com/grunt/-/grunt-0.4.5.tgz#56937cd5194324adff6d207631832a9d6ba4e7f0"
+ dependencies:
+ async "~0.1.22"
+ coffee-script "~1.3.3"
+ colors "~0.6.2"
+ dateformat "1.0.2-1.2.3"
+ eventemitter2 "~0.4.13"
+ exit "~0.1.1"
+ findup-sync "~0.1.2"
+ getobject "~0.1.0"
+ glob "~3.1.21"
+ grunt-legacy-log "~0.1.0"
+ grunt-legacy-util "~0.2.0"
+ hooker "~0.2.3"
+ iconv-lite "~0.2.11"
+ js-yaml "~2.0.5"
+ lodash "~0.9.2"
+ minimatch "~0.2.12"
+ nopt "~1.0.10"
+ rimraf "~2.2.8"
+ underscore.string "~2.2.1"
+ which "~1.0.5"
+
+gzip-size@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-1.0.0.tgz#66cf8b101047227b95bace6ea1da0c177ed5c22f"
+ dependencies:
+ browserify-zlib "^0.1.4"
+ concat-stream "^1.4.1"
+
+handlebars@^4.0.1:
+ version "4.0.6"
+ resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.6.tgz#2ce4484850537f9c97a8026d5399b935c4ed4ed7"
+ dependencies:
+ async "^1.4.0"
+ optimist "^0.6.1"
+ source-map "^0.4.4"
+ optionalDependencies:
+ uglify-js "^2.6"
+
+har-validator@^1.6.1:
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-1.8.0.tgz#d83842b0eb4c435960aeb108a067a3aa94c0eeb2"
+ dependencies:
+ bluebird "^2.9.30"
+ chalk "^1.0.0"
+ commander "^2.8.1"
+ is-my-json-valid "^2.12.0"
+
+har-validator@~2.0.2, har-validator@~2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d"
+ dependencies:
+ chalk "^1.1.1"
+ commander "^2.9.0"
+ is-my-json-valid "^2.12.4"
+ pinkie-promise "^2.0.0"
+
+has-ansi@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
+ dependencies:
+ ansi-regex "^2.0.0"
+
+has-binary@0.1.6:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/has-binary/-/has-binary-0.1.6.tgz#25326f39cfa4f616ad8787894e3af2cfbc7b6e10"
+ dependencies:
+ isarray "0.0.1"
+
+has-binary@0.1.7:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/has-binary/-/has-binary-0.1.7.tgz#68e61eb16210c9545a0a5cce06a873912fe1e68c"
+ dependencies:
+ isarray "0.0.1"
+
+has-cors@1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39"
+
+has-flag@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa"
+
+has-unicode@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
+
+hasha@^2.2.0, hasha@~2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/hasha/-/hasha-2.2.0.tgz#78d7cbfc1e6d66303fe79837365984517b2f6ee1"
+ dependencies:
+ is-stream "^1.0.1"
+ pinkie-promise "^2.0.0"
+
+hawk@~2.3.0:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/hawk/-/hawk-2.3.1.tgz#1e731ce39447fa1d0f6d707f7bceebec0fd1ec1f"
+ dependencies:
+ boom "2.x.x"
+ cryptiles "2.x.x"
+ hoek "2.x.x"
+ sntp "1.x.x"
+
+hawk@~3.1.0, hawk@~3.1.3:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4"
+ dependencies:
+ boom "2.x.x"
+ cryptiles "2.x.x"
+ hoek "2.x.x"
+ sntp "1.x.x"
+
+hoek@2.x.x:
+ version "2.16.3"
+ resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed"
+
+hooker@^0.2.3, hooker@~0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/hooker/-/hooker-0.2.3.tgz#b834f723cc4a242aa65963459df6d984c5d3d959"
+
+hosted-git-info@^2.1.4:
+ version "2.1.5"
+ resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.1.5.tgz#0ba81d90da2e25ab34a332e6ec77936e1598118b"
+
+html-entities@~1.1.1:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.1.3.tgz#7e3b47640f5ea69b097ae8bbbe7cb8ca941d85bd"
+
+htmlparser2@3.8.x:
+ version "3.8.3"
+ resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.8.3.tgz#996c28b191516a8be86501a7d79757e5c70c1068"
+ dependencies:
+ domelementtype "1"
+ domhandler "2.3"
+ domutils "1.5"
+ entities "1.0"
+ readable-stream "1.1"
+
+http-errors@~1.5.0:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.5.1.tgz#788c0d2c1de2c81b9e6e8c01843b6b97eb920750"
+ dependencies:
+ inherits "2.0.3"
+ setprototypeof "1.0.2"
+ statuses ">= 1.3.1 < 2"
+
+http-proxy@^1.13.0:
+ version "1.16.2"
+ resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.16.2.tgz#06dff292952bf64dbe8471fa9df73066d4f37742"
+ dependencies:
+ eventemitter3 "1.x.x"
+ requires-port "1.x.x"
+
+http-signature@~0.11.0:
+ version "0.11.0"
+ resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-0.11.0.tgz#1796cf67a001ad5cd6849dca0991485f09089fe6"
+ dependencies:
+ asn1 "0.1.11"
+ assert-plus "^0.1.5"
+ ctype "0.5.3"
+
+http-signature@~1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf"
+ dependencies:
+ assert-plus "^0.2.0"
+ jsprim "^1.2.2"
+ sshpk "^1.7.0"
+
+https-proxy-agent@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz#35f7da6c48ce4ddbfa264891ac593ee5ff8671e6"
+ dependencies:
+ agent-base "2"
+ debug "2"
+ extend "3"
+
+iconv-lite@0.4.13:
+ version "0.4.13"
+ resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2"
+
+iconv-lite@~0.2.11:
+ version "0.2.11"
+ resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.2.11.tgz#1ce60a3a57864a292d1321ff4609ca4bb965adc8"
+
+indent-string@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80"
+ dependencies:
+ repeating "^2.0.0"
+
+indexof@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d"
+
+inflight@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+ dependencies:
+ once "^1.3.0"
+ wrappy "1"
+
+inherits@1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-1.0.2.tgz#ca4309dadee6b54cc0b8d247e8d7c7a0975bdc9b"
+
+inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@~2.0.0, inherits@~2.0.1:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
+
+ini@~1.3.0:
+ version "1.3.4"
+ resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e"
+
+ipaddr.js@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.1.1.tgz#c791d95f52b29c1247d5df80ada39b8a73647230"
+
+is-arrayish@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
+
+is-binary-path@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
+ dependencies:
+ binary-extensions "^1.0.0"
+
+is-browser@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/is-browser/-/is-browser-2.0.1.tgz#8bf0baf799a9c62fd9de5bcee4cf3397c3e7529a"
+
+is-buffer@^1.0.2:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.4.tgz#cfc86ccd5dc5a52fa80489111c6920c457e2d98b"
+
+is-builtin-module@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe"
+ dependencies:
+ builtin-modules "^1.0.0"
+
+is-dotfile@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d"
+
+is-equal-shallow@^0.1.3:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534"
+ dependencies:
+ is-primitive "^2.0.0"
+
+is-extendable@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
+
+is-extglob@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0"
+
+is-finite@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa"
+ dependencies:
+ number-is-nan "^1.0.0"
+
+is-fullwidth-code-point@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
+ dependencies:
+ number-is-nan "^1.0.0"
+
+is-glob@^2.0.0, is-glob@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863"
+ dependencies:
+ is-extglob "^1.0.0"
+
+is-my-json-valid@^2.12.0, is-my-json-valid@^2.12.4:
+ version "2.15.0"
+ resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz#936edda3ca3c211fd98f3b2d3e08da43f7b2915b"
+ dependencies:
+ generate-function "^2.0.0"
+ generate-object-property "^1.1.0"
+ jsonpointer "^4.0.0"
+ xtend "^4.0.0"
+
+is-number@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-0.1.1.tgz#69a7af116963d47206ec9bd9b48a14216f1e3806"
+
+is-number@^2.0.2, is-number@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f"
+ dependencies:
+ kind-of "^3.0.2"
+
+is-posix-bracket@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4"
+
+is-primitive@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575"
+
+is-property@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84"
+
+is-stream@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
+
+is-typedarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
+
+is-utf8@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
+
+isarray@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
+
+isarray@1.0.0, isarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+
+isbinaryfile@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-3.0.2.tgz#4a3e974ec0cba9004d3fc6cde7209ea69368a621"
+
+isexe@^1.1.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/isexe/-/isexe-1.1.2.tgz#36f3e22e60750920f5e7241a476a8c6a42275ad0"
+
+isobject@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
+ dependencies:
+ isarray "1.0.0"
+
+isstream@~0.1.1, isstream@~0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
+
+istanbul@^0.4.0:
+ version "0.4.5"
+ resolved "https://registry.yarnpkg.com/istanbul/-/istanbul-0.4.5.tgz#65c7d73d4c4da84d4f3ac310b918fb0b8033733b"
+ dependencies:
+ abbrev "1.0.x"
+ async "1.x"
+ escodegen "1.8.x"
+ esprima "2.7.x"
+ glob "^5.0.15"
+ handlebars "^4.0.1"
+ js-yaml "3.x"
+ mkdirp "0.5.x"
+ nopt "3.x"
+ once "1.x"
+ resolve "1.1.x"
+ supports-color "^3.1.0"
+ which "^1.1.1"
+ wordwrap "^1.0.0"
+
+jasmine-core@^2.3.4:
+ version "2.5.2"
+ resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-2.5.2.tgz#6f61bd79061e27f43e6f9355e44b3c6cab6ff297"
+
+jasmine-core@~2.3.0:
+ version "2.3.4"
+ resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-2.3.4.tgz#ad772662b32d16c564ee25c863edae1d65a038f2"
+
+jasmine@2.3.2:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/jasmine/-/jasmine-2.3.2.tgz#febf0e4b4afff63c2d09211f077da0b859f5f191"
+ dependencies:
+ exit "^0.1.2"
+ glob "^3.2.11"
+ jasmine-core "~2.3.0"
+
+jasminewd2@0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/jasminewd2/-/jasminewd2-0.0.6.tgz#259157f06d2d149fbecb96302c80aa322a377222"
+
+jasminewd@1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/jasminewd/-/jasminewd-1.1.0.tgz#25751a6845ef2fb424c2fa39647987ae156fd433"
+
+jodid25519@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967"
+ dependencies:
+ jsbn "~0.1.0"
+
+js-base64@~2.1.8:
+ version "2.1.9"
+ resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.1.9.tgz#f0e80ae039a4bd654b5f281fc93f04a914a7fcce"
+
+js-yaml@3.x:
+ version "3.7.0"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80"
+ dependencies:
+ argparse "^1.0.7"
+ esprima "^2.6.0"
+
+js-yaml@~2.0.5:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-2.0.5.tgz#a25ae6509999e97df278c6719da11bd0687743a8"
+ dependencies:
+ argparse "~ 0.1.11"
+ esprima "~ 1.0.2"
+
+jsbn@~0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.0.tgz#650987da0dd74f4ebf5a11377a2aa2d273e97dfd"
+
+jshint@~2.8.0:
+ version "2.8.0"
+ resolved "https://registry.yarnpkg.com/jshint/-/jshint-2.8.0.tgz#1d09a3bd913c4cadfa81bf18d582bd85bffe0d44"
+ dependencies:
+ cli "0.6.x"
+ console-browserify "1.1.x"
+ exit "0.1.x"
+ htmlparser2 "3.8.x"
+ lodash "3.7.x"
+ minimatch "2.0.x"
+ shelljs "0.3.x"
+ strip-json-comments "1.0.x"
+
+json-schema@0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
+
+json-stringify-safe@~5.0.0, json-stringify-safe@~5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
+
+json3@3.2.6:
+ version "3.2.6"
+ resolved "https://registry.yarnpkg.com/json3/-/json3-3.2.6.tgz#f6efc93c06a04de9aec53053df2559bb19e2038b"
+
+json3@3.3.2:
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1"
+
+jsonfile@^2.1.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8"
+ optionalDependencies:
+ graceful-fs "^4.1.6"
+
+jsonpointer@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9"
+
+jsprim@^1.2.2:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.3.1.tgz#2a7256f70412a29ee3670aaca625994c4dcff252"
+ dependencies:
+ extsprintf "1.0.2"
+ json-schema "0.2.3"
+ verror "1.3.6"
+
+karma-coverage@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/karma-coverage/-/karma-coverage-1.1.1.tgz#5aff8b39cf6994dc22de4c84362c76001b637cf6"
+ dependencies:
+ dateformat "^1.0.6"
+ istanbul "^0.4.0"
+ lodash "^3.8.0"
+ minimatch "^3.0.0"
+ source-map "^0.5.1"
+
+karma-jasmine@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/karma-jasmine/-/karma-jasmine-1.1.0.tgz#22e4c06bf9a182e5294d1f705e3733811b810acf"
+
+karma-phantomjs-launcher@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/karma-phantomjs-launcher/-/karma-phantomjs-launcher-1.0.2.tgz#19e1041498fd75563ed86730a22c1fe579fa8fb1"
+ dependencies:
+ lodash "^4.0.1"
+ phantomjs-prebuilt "^2.1.7"
+
+karma@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/karma/-/karma-1.3.0.tgz#b2b94e8f499fadd0069d54f9aef4a4d48ec5cc1f"
+ dependencies:
+ bluebird "^3.3.0"
+ body-parser "^1.12.4"
+ chokidar "^1.4.1"
+ colors "^1.1.0"
+ combine-lists "^1.0.0"
+ connect "^3.3.5"
+ core-js "^2.2.0"
+ di "^0.0.1"
+ dom-serialize "^2.2.0"
+ expand-braces "^0.1.1"
+ glob "^7.0.3"
+ graceful-fs "^4.1.2"
+ http-proxy "^1.13.0"
+ isbinaryfile "^3.0.0"
+ lodash "^3.8.0"
+ log4js "^0.6.31"
+ mime "^1.3.4"
+ minimatch "^3.0.0"
+ optimist "^0.6.1"
+ qjobs "^1.1.4"
+ range-parser "^1.2.0"
+ rimraf "^2.3.3"
+ socket.io "1.4.7"
+ source-map "^0.5.3"
+ tmp "0.0.28"
+ useragent "^2.1.9"
+
+kew@~0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/kew/-/kew-0.7.0.tgz#79d93d2d33363d6fdd2970b335d9141ad591d79b"
+
+kind-of@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.1.0.tgz#475d698a5e49ff5e53d14e3e732429dc8bf4cf47"
+ dependencies:
+ is-buffer "^1.0.2"
+
+klaw@^1.0.0:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439"
+ optionalDependencies:
+ graceful-fs "^4.1.9"
+
+lazy-cache@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e"
+
+levn@~0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
+ dependencies:
+ prelude-ls "~1.1.2"
+ type-check "~0.3.2"
+
+load-json-file@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0"
+ dependencies:
+ graceful-fs "^4.1.2"
+ parse-json "^2.2.0"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+ strip-bom "^2.0.0"
+
+lodash@3.7.x:
+ version "3.7.0"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.7.0.tgz#3678bd8ab995057c07ade836ed2ef087da811d45"
+
+lodash@^3.2.0, lodash@^3.8.0:
+ version "3.10.1"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6"
+
+lodash@^4.0.1, lodash@^4.14.0, lodash@^4.5.0:
+ version "4.17.4"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
+
+lodash@~0.9.2:
+ version "0.9.2"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-0.9.2.tgz#8f3499c5245d346d682e5b0d3b40767e09f1a92c"
+
+lodash@~2.4.1:
+ version "2.4.2"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-2.4.2.tgz#fadd834b9683073da179b3eae6d9c0d15053f73e"
+
+log4js@^0.6.31:
+ version "0.6.38"
+ resolved "https://registry.yarnpkg.com/log4js/-/log4js-0.6.38.tgz#2c494116695d6fb25480943d3fc872e662a522fd"
+ dependencies:
+ readable-stream "~1.0.2"
+ semver "~4.3.3"
+
+longest@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097"
+
+loud-rejection@^1.0.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f"
+ dependencies:
+ currently-unhandled "^0.4.1"
+ signal-exit "^3.0.0"
+
+lru-cache@2:
+ version "2.7.3"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.7.3.tgz#6d4524e8b955f95d4f5b58851ce21dd72fb4e952"
+
+lru-cache@2.2.x:
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.2.4.tgz#6c658619becf14031d0d0b594b16042ce4dc063d"
+
+map-obj@^1.0.0, map-obj@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
+
+maxmin@^1.0.0, maxmin@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/maxmin/-/maxmin-1.1.0.tgz#71365e84a99dd8f8b3f7d5fde2f00d1e7f73be61"
+ dependencies:
+ chalk "^1.0.0"
+ figures "^1.0.1"
+ gzip-size "^1.0.0"
+ pretty-bytes "^1.0.0"
+
+media-typer@0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
+
+meow@^3.1.0, meow@^3.3.0:
+ version "3.7.0"
+ resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb"
+ dependencies:
+ camelcase-keys "^2.0.0"
+ decamelize "^1.1.2"
+ loud-rejection "^1.0.0"
+ map-obj "^1.0.1"
+ minimist "^1.1.3"
+ normalize-package-data "^2.3.4"
+ object-assign "^4.0.1"
+ read-pkg-up "^1.0.1"
+ redent "^1.0.0"
+ trim-newlines "^1.0.0"
+
+merge-descriptors@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
+
+methods@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
+
+micromatch@^2.1.5:
+ version "2.3.11"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565"
+ dependencies:
+ arr-diff "^2.0.0"
+ array-unique "^0.2.1"
+ braces "^1.8.2"
+ expand-brackets "^0.1.4"
+ extglob "^0.3.1"
+ filename-regex "^2.0.0"
+ is-extglob "^1.0.0"
+ is-glob "^2.0.1"
+ kind-of "^3.0.2"
+ normalize-path "^2.0.1"
+ object.omit "^2.0.0"
+ parse-glob "^3.0.4"
+ regex-cache "^0.4.2"
+
+mime-db@~1.12.0:
+ version "1.12.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.12.0.tgz#3d0c63180f458eb10d325aaa37d7c58ae312e9d7"
+
+mime-db@~1.25.0:
+ version "1.25.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.25.0.tgz#c18dbd7c73a5dbf6f44a024dc0d165a1e7b1c392"
+
+mime-types@^2.1.11, mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.13, mime-types@~2.1.7:
+ version "2.1.13"
+ resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.13.tgz#e07aaa9c6c6b9a7ca3012c69003ad25a39e92a88"
+ dependencies:
+ mime-db "~1.25.0"
+
+mime-types@~2.0.1, mime-types@~2.0.3, mime-types@~2.0.4:
+ version "2.0.14"
+ resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.0.14.tgz#310e159db23e077f8bb22b748dabfa4957140aa6"
+ dependencies:
+ mime-db "~1.12.0"
+
+mime@1.3.4, mime@^1.3.4:
+ version "1.3.4"
+ resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53"
+
+minijasminenode@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/minijasminenode/-/minijasminenode-1.1.1.tgz#7f9637d66428a531c05f4f10b69a311b5dfb60e9"
+
+minimatch@0.3:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-0.3.0.tgz#275d8edaac4f1bb3326472089e7949c8394699dd"
+ dependencies:
+ lru-cache "2"
+ sigmund "~1.0.0"
+
+"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774"
+ dependencies:
+ brace-expansion "^1.0.0"
+
+minimatch@2.0.x:
+ version "2.0.10"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-2.0.10.tgz#8d087c39c6b38c001b97fca7ce6d0e1e80afbac7"
+ dependencies:
+ brace-expansion "^1.0.0"
+
+minimatch@~0.2.11, minimatch@~0.2.12:
+ version "0.2.14"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-0.2.14.tgz#c74e780574f63c6f9a090e90efbe6ef53a6a756a"
+ dependencies:
+ lru-cache "2"
+ sigmund "~1.0.0"
+
+minimist@0.0.8:
+ version "0.0.8"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
+
+minimist@^1.1.3, minimist@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
+
+minimist@~0.0.1:
+ version "0.0.10"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf"
+
+mkdirp@0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.0.tgz#1d73076a6df986cd9344e15e71fcc05a4c9abf12"
+ dependencies:
+ minimist "0.0.8"
+
+mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@~0.5.1:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
+ dependencies:
+ minimist "0.0.8"
+
+ms@0.7.1:
+ version "0.7.1"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098"
+
+myth@^1.0.1, myth@^1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/myth/-/myth-1.5.0.tgz#6df392daa734d3df26cb7d15fbfe075353d59353"
+ dependencies:
+ autoprefixer-core "^5.2.1"
+ clone-component "~0.2.2"
+ colors "~0.6.2"
+ commander "^2.1.0"
+ is-browser "^2.0.0"
+ node-watch "~0.3.4"
+ pad-component "~0.0.1"
+ postcss "^4.1.16"
+ read-file-stdin "^0.2.0"
+ rework "^1.0.0"
+ rework-calc "^1.1.0"
+ rework-color-function "^1.0.0"
+ rework-custom-media "~0.1.1"
+ rework-font-variant "1.0.1"
+ rework-hex-alpha "^1.0.0"
+ rework-import "^1.2.0"
+ rework-rebeccapurple "^1.0.1"
+ rework-vars "^3.0.0"
+ to-slug-case "~0.1.2"
+ to-space-case "~0.1.3"
+ write-file-stdout "~0.0.2"
+
+nan@^2.0.5, nan@^2.3.0:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/nan/-/nan-2.5.0.tgz#aa8f1e34531d807e9e27755b234b4a6ec0c152a8"
+
+nan@~2.4.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/nan/-/nan-2.4.0.tgz#fb3c59d45fe4effe215f0b890f8adf6eb32d2232"
+
+negotiator@0.4.9:
+ version "0.4.9"
+ resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.4.9.tgz#92e46b6db53c7e421ed64a2bc94f08be7630df3f"
+
+negotiator@0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9"
+
+node-pre-gyp@^0.6.29:
+ version "0.6.32"
+ resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.32.tgz#fc452b376e7319b3d255f5f34853ef6fd8fe1fd5"
+ dependencies:
+ mkdirp "~0.5.1"
+ nopt "~3.0.6"
+ npmlog "^4.0.1"
+ rc "~1.1.6"
+ request "^2.79.0"
+ rimraf "~2.5.4"
+ semver "~5.3.0"
+ tar "~2.2.1"
+ tar-pack "~3.3.0"
+
+node-uuid@~1.4.0, node-uuid@~1.4.7:
+ version "1.4.7"
+ resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.7.tgz#6da5a17668c4b3dd59623bda11cf7fa4c1f60a6f"
+
+node-watch@~0.3.4:
+ version "0.3.5"
+ resolved "https://registry.yarnpkg.com/node-watch/-/node-watch-0.3.5.tgz#a07f253a4f538de9d4ca522dd7f1996eeec0d97e"
+
+nopt@3.x, nopt@~3.0.6:
+ version "3.0.6"
+ resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9"
+ dependencies:
+ abbrev "1"
+
+nopt@~1.0.10:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee"
+ dependencies:
+ abbrev "1"
+
+normalize-package-data@^2.3.2, normalize-package-data@^2.3.4:
+ version "2.3.5"
+ resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.5.tgz#8d924f142960e1777e7ffe170543631cc7cb02df"
+ dependencies:
+ hosted-git-info "^2.1.4"
+ is-builtin-module "^1.0.0"
+ semver "2 || 3 || 4 || 5"
+ validate-npm-package-license "^3.0.1"
+
+normalize-path@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.0.1.tgz#47886ac1662760d4261b7d979d241709d3ce3f7a"
+
+npmlog@^4.0.1:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.2.tgz#d03950e0e78ce1527ba26d2a7592e9348ac3e75f"
+ dependencies:
+ are-we-there-yet "~1.1.2"
+ console-control-strings "~1.1.0"
+ gauge "~2.7.1"
+ set-blocking "~2.0.0"
+
+num2fraction@^1.1.0:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede"
+
+number-is-nan@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
+
+oauth-sign@~0.8.0, oauth-sign@~0.8.1:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"
+
+object-assign@^4.0.1, object-assign@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.0.tgz#7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0"
+
+object-component@0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291"
+
+object.omit@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa"
+ dependencies:
+ for-own "^0.1.4"
+ is-extendable "^0.1.1"
+
+on-finished@~2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
+ dependencies:
+ ee-first "1.1.1"
+
+once@1.x, once@^1.3.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+ dependencies:
+ wrappy "1"
+
+once@~1.3.3:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20"
+ dependencies:
+ wrappy "1"
+
+onetime@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789"
+
+optimist@^0.6.1, optimist@~0.6.0:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686"
+ dependencies:
+ minimist "~0.0.1"
+ wordwrap "~0.0.2"
+
+optionator@^0.8.1:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64"
+ dependencies:
+ deep-is "~0.1.3"
+ fast-levenshtein "~2.0.4"
+ levn "~0.3.0"
+ prelude-ls "~1.1.2"
+ type-check "~0.3.2"
+ wordwrap "~1.0.0"
+
+options@>=0.0.5:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/options/-/options-0.0.6.tgz#ec22d312806bb53e731773e7cdaefcf1c643128f"
+
+os-tmpdir@~1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
+
+pad-component@~0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/pad-component/-/pad-component-0.0.1.tgz#ad1f22ce1bf0fdc0d6ddd908af17f351a404b8ac"
+
+pako@~0.2.0:
+ version "0.2.9"
+ resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75"
+
+parse-glob@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c"
+ dependencies:
+ glob-base "^0.3.0"
+ is-dotfile "^1.0.0"
+ is-extglob "^1.0.0"
+ is-glob "^2.0.0"
+
+parse-import@~0.1.3:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/parse-import/-/parse-import-0.1.3.tgz#fe7d4cc1938dadc1da38dc2a03dba5604203fdac"
+
+parse-json@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
+ dependencies:
+ error-ex "^1.2.0"
+
+parsejson@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/parsejson/-/parsejson-0.0.1.tgz#9b10c6c0d825ab589e685153826de0a3ba278bcc"
+ dependencies:
+ better-assert "~1.0.0"
+
+parseqs@0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.2.tgz#9dfe70b2cddac388bde4f35b1f240fa58adbe6c7"
+ dependencies:
+ better-assert "~1.0.0"
+
+parseuri@0.0.4:
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.4.tgz#806582a39887e1ea18dd5e2fe0e01902268e9350"
+ dependencies:
+ better-assert "~1.0.0"
+
+parseurl@~1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.1.tgz#c8ab8c9223ba34888aa64a297b28853bec18da56"
+
+path-exists@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b"
+ dependencies:
+ pinkie-promise "^2.0.0"
+
+path-is-absolute@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+
+path-to-regexp@0.1.7:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
+
+path-type@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441"
+ dependencies:
+ graceful-fs "^4.1.2"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+pend@~1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50"
+
+phantomjs-prebuilt@^2.1.7:
+ version "2.1.14"
+ resolved "https://registry.yarnpkg.com/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.14.tgz#d53d311fcfb7d1d08ddb24014558f1188c516da0"
+ dependencies:
+ es6-promise "~4.0.3"
+ extract-zip "~1.5.0"
+ fs-extra "~1.0.0"
+ hasha "~2.2.0"
+ kew "~0.7.0"
+ progress "~1.1.8"
+ request "~2.79.0"
+ request-progress "~2.0.1"
+ which "~1.2.10"
+
+phantomjs@^2.1.7:
+ version "2.1.7+deprecated"
+ resolved "https://registry.yarnpkg.com/phantomjs/-/phantomjs-2.1.7.tgz#c6910f67935c37285b6114329fc2f27d5f3e3134"
+ dependencies:
+ extract-zip "~1.5.0"
+ fs-extra "~0.26.4"
+ hasha "^2.2.0"
+ kew "~0.7.0"
+ progress "~1.1.8"
+ request "~2.67.0"
+ request-progress "~2.0.1"
+ which "~1.2.2"
+
+pify@^2.0.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
+
+pinkie-promise@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
+ dependencies:
+ pinkie "^2.0.0"
+
+pinkie@^2.0.0:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
+
+postcss@^4.1.16, postcss@~4.1.12:
+ version "4.1.16"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-4.1.16.tgz#4c449b4c8af9df3caf6d37f8e1e575d0361758dc"
+ dependencies:
+ es6-promise "~2.3.0"
+ js-base64 "~2.1.8"
+ source-map "~0.4.2"
+
+prelude-ls@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
+
+preserve@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
+
+pretty-bytes@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-1.0.4.tgz#0a22e8210609ad35542f8c8d5d2159aff0751c84"
+ dependencies:
+ get-stdin "^4.0.1"
+ meow "^3.1.0"
+
+process-nextick-args@~1.0.6:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
+
+progress@~1.1.8:
+ version "1.1.8"
+ resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be"
+
+protractor@^2.2.0:
+ version "2.5.1"
+ resolved "https://registry.yarnpkg.com/protractor/-/protractor-2.5.1.tgz#03d6c93cd7c268f4250177d55a2fec8a198372cd"
+ dependencies:
+ accessibility-developer-tools "~2.6.0"
+ adm-zip "0.4.4"
+ glob "~3.2"
+ html-entities "~1.1.1"
+ jasmine "2.3.2"
+ jasminewd "1.1.0"
+ jasminewd2 "0.0.6"
+ lodash "~2.4.1"
+ minijasminenode "1.1.1"
+ optimist "~0.6.0"
+ q "1.0.0"
+ request "~2.57.0"
+ saucelabs "~1.0.1"
+ selenium-webdriver "2.47.0"
+ source-map-support "~0.2.6"
+
+proxy-addr@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-1.1.2.tgz#b4cc5f22610d9535824c123aef9d3cf73c40ba37"
+ dependencies:
+ forwarded "~0.1.0"
+ ipaddr.js "1.1.1"
+
+punycode@^1.4.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
+
+q@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/q/-/q-1.0.0.tgz#dc1f92c4587be54f7853b29dc28e6d243a88498d"
+
+qjobs@^1.1.4:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/qjobs/-/qjobs-1.1.5.tgz#659de9f2cf8dcc27a1481276f205377272382e73"
+
+qs@6.2.0:
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.0.tgz#3b7848c03c2dece69a9522b0fae8c4126d745f3b"
+
+qs@~3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-3.1.0.tgz#d0e9ae745233a12dc43fb4f3055bba446261153c"
+
+qs@~5.2.0:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-5.2.1.tgz#801fee030e0b9450d6385adc48a4cc55b44aedfc"
+
+qs@~6.3.0:
+ version "6.3.0"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.0.tgz#f403b264f23bc01228c74131b407f18d5ea5d442"
+
+randomatic@^1.1.3:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.6.tgz#110dcabff397e9dcff7c0789ccc0a49adf1ec5bb"
+ dependencies:
+ is-number "^2.0.2"
+ kind-of "^3.0.2"
+
+range-parser@^1.2.0, range-parser@~1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e"
+
+raw-body@~2.1.7:
+ version "2.1.7"
+ resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.1.7.tgz#adfeace2e4fb3098058014d08c072dcc59758774"
+ dependencies:
+ bytes "2.4.0"
+ iconv-lite "0.4.13"
+ unpipe "1.0.0"
+
+rc@~1.1.6:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/rc/-/rc-1.1.6.tgz#43651b76b6ae53b5c802f1151fa3fc3b059969c9"
+ dependencies:
+ deep-extend "~0.4.0"
+ ini "~1.3.0"
+ minimist "^1.2.0"
+ strip-json-comments "~1.0.4"
+
+read-file-stdin@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/read-file-stdin/-/read-file-stdin-0.2.1.tgz#25eccff3a153b6809afacb23ee15387db9e0ee61"
+ dependencies:
+ gather-stream "^1.0.0"
+
+read-pkg-up@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02"
+ dependencies:
+ find-up "^1.0.0"
+ read-pkg "^1.0.0"
+
+read-pkg@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28"
+ dependencies:
+ load-json-file "^1.0.0"
+ normalize-package-data "^2.3.2"
+ path-type "^1.0.0"
+
+readable-stream@1.1:
+ version "1.1.13"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.13.tgz#f6eef764f514c89e2b9e23146a75ba106756d23e"
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.1"
+ isarray "0.0.1"
+ string_decoder "~0.10.x"
+
+"readable-stream@^2.0.0 || ^1.1.13", readable-stream@~2.1.4:
+ version "2.1.5"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0"
+ dependencies:
+ buffer-shims "^1.0.0"
+ core-util-is "~1.0.0"
+ inherits "~2.0.1"
+ isarray "~1.0.0"
+ process-nextick-args "~1.0.6"
+ string_decoder "~0.10.x"
+ util-deprecate "~1.0.1"
+
+readable-stream@^2.0.2, readable-stream@~2.0.0, readable-stream@~2.0.5:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e"
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.1"
+ isarray "~1.0.0"
+ process-nextick-args "~1.0.6"
+ string_decoder "~0.10.x"
+ util-deprecate "~1.0.1"
+
+readable-stream@~1.0.2, readable-stream@~1.0.26:
+ version "1.0.34"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c"
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.1"
+ isarray "0.0.1"
+ string_decoder "~0.10.x"
+
+readdirp@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78"
+ dependencies:
+ graceful-fs "^4.1.2"
+ minimatch "^3.0.2"
+ readable-stream "^2.0.2"
+ set-immediate-shim "^1.0.1"
+
+redent@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde"
+ dependencies:
+ indent-string "^2.1.0"
+ strip-indent "^1.0.1"
+
+regex-cache@^0.4.2:
+ version "0.4.3"
+ resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145"
+ dependencies:
+ is-equal-shallow "^0.1.3"
+ is-primitive "^2.0.0"
+
+repeat-element@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a"
+
+repeat-string@^0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-0.2.2.tgz#c7a8d3236068362059a7e4651fc6884e8b1fb4ae"
+
+repeat-string@^1.5.2:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
+
+repeating@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda"
+ dependencies:
+ is-finite "^1.0.0"
+
+request-progress@~2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/request-progress/-/request-progress-2.0.1.tgz#5d36bb57961c673aa5b788dbc8141fdf23b44e08"
+ dependencies:
+ throttleit "^1.0.0"
+
+request@^2.79.0, request@~2.79.0:
+ version "2.79.0"
+ resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de"
+ dependencies:
+ aws-sign2 "~0.6.0"
+ aws4 "^1.2.1"
+ caseless "~0.11.0"
+ combined-stream "~1.0.5"
+ extend "~3.0.0"
+ forever-agent "~0.6.1"
+ form-data "~2.1.1"
+ har-validator "~2.0.6"
+ hawk "~3.1.3"
+ http-signature "~1.1.0"
+ is-typedarray "~1.0.0"
+ isstream "~0.1.2"
+ json-stringify-safe "~5.0.1"
+ mime-types "~2.1.7"
+ oauth-sign "~0.8.1"
+ qs "~6.3.0"
+ stringstream "~0.0.4"
+ tough-cookie "~2.3.0"
+ tunnel-agent "~0.4.1"
+ uuid "^3.0.0"
+
+request@~2.57.0:
+ version "2.57.0"
+ resolved "https://registry.yarnpkg.com/request/-/request-2.57.0.tgz#d445105a42d009b9d724289633b449a6d723d989"
+ dependencies:
+ aws-sign2 "~0.5.0"
+ bl "~0.9.0"
+ caseless "~0.10.0"
+ combined-stream "~1.0.1"
+ forever-agent "~0.6.0"
+ form-data "~0.2.0"
+ har-validator "^1.6.1"
+ hawk "~2.3.0"
+ http-signature "~0.11.0"
+ isstream "~0.1.1"
+ json-stringify-safe "~5.0.0"
+ mime-types "~2.0.1"
+ node-uuid "~1.4.0"
+ oauth-sign "~0.8.0"
+ qs "~3.1.0"
+ stringstream "~0.0.4"
+ tough-cookie ">=0.12.0"
+ tunnel-agent "~0.4.0"
+
+request@~2.67.0:
+ version "2.67.0"
+ resolved "https://registry.yarnpkg.com/request/-/request-2.67.0.tgz#8af74780e2bf11ea0ae9aa965c11f11afd272742"
+ dependencies:
+ aws-sign2 "~0.6.0"
+ bl "~1.0.0"
+ caseless "~0.11.0"
+ combined-stream "~1.0.5"
+ extend "~3.0.0"
+ forever-agent "~0.6.1"
+ form-data "~1.0.0-rc3"
+ har-validator "~2.0.2"
+ hawk "~3.1.0"
+ http-signature "~1.1.0"
+ is-typedarray "~1.0.0"
+ isstream "~0.1.2"
+ json-stringify-safe "~5.0.1"
+ mime-types "~2.1.7"
+ node-uuid "~1.4.7"
+ oauth-sign "~0.8.0"
+ qs "~5.2.0"
+ stringstream "~0.0.4"
+ tough-cookie "~2.2.0"
+ tunnel-agent "~0.4.1"
+
+requires-port@1.x.x:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
+
+resolve-url@~0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
+
+resolve@1.1.x:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
+
+resolve@~0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-0.3.1.tgz#34c63447c664c70598d1c9b126fc43b2a24310a4"
+
+rework-calc@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/rework-calc/-/rework-calc-1.1.0.tgz#39a148ff3fc7cc782062dbfd67ec47d1fe24718c"
+ dependencies:
+ balanced-match "~0.1.0"
+ rework-visit "^1.0.0"
+
+rework-color-function@^1.0.0:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/rework-color-function/-/rework-color-function-1.2.1.tgz#6b06b7ef2550df2ab6ed72420f0228ca3c62321f"
+ dependencies:
+ balanced-match "^0.0.0"
+ css-color-function "^1.2.0"
+
+rework-custom-media@~0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/rework-custom-media/-/rework-custom-media-0.1.1.tgz#b6b2b3d70bd960b819d323b075da2b6f18c27f39"
+
+rework-font-variant@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/rework-font-variant/-/rework-font-variant-1.0.1.tgz#6ba4dca265532cbb4d5a52cb8f81775b47c55bcd"
+
+rework-hex-alpha@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/rework-hex-alpha/-/rework-hex-alpha-1.0.0.tgz#e32fef0f076908f6235a102cec9bd15adbbbf4a4"
+ dependencies:
+ rgb "0.0.1"
+
+rework-import@^1.2.0:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/rework-import/-/rework-import-1.2.1.tgz#c2af6068d214c9e5d929779dfdba0b431a334fef"
+ dependencies:
+ css "^2.0.0"
+ find-file "~0.1.0"
+ parse-import "~0.1.3"
+
+rework-rebeccapurple@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/rework-rebeccapurple/-/rework-rebeccapurple-1.0.1.tgz#52a8c8e5f7d301af9375369d7838c6854147d2f7"
+
+rework-vars@^3.0.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/rework-vars/-/rework-vars-3.1.1.tgz#eabd9efc7af43a95f21101867382d42cae8ae021"
+ dependencies:
+ balanced-match "~0.1.0"
+ rework-visit "1.0.0"
+
+rework-visit@1.0.0, rework-visit@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/rework-visit/-/rework-visit-1.0.0.tgz#9945b2803f219e2f7aca00adb8bc9f640f842c9a"
+
+rework@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/rework/-/rework-1.0.1.tgz#30806a841342b54510aa4110850cd48534144aa7"
+ dependencies:
+ convert-source-map "^0.3.3"
+ css "^2.0.0"
+
+rgb@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/rgb/-/rgb-0.0.1.tgz#19dfcc8d1a1443633d54972338c1d5815b556c09"
+
+rgb@~0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/rgb/-/rgb-0.1.0.tgz#be27b291e8feffeac1bd99729721bfa40fc037b5"
+
+right-align@^0.1.1:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef"
+ dependencies:
+ align-text "^0.1.1"
+
+rimraf@2, rimraf@^2.2.8, rimraf@^2.3.3, rimraf@~2.5.1, rimraf@~2.5.4:
+ version "2.5.4"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04"
+ dependencies:
+ glob "^7.0.5"
+
+rimraf@~2.2.8:
+ version "2.2.8"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.2.8.tgz#e439be2aaee327321952730f99a8929e4fc50582"
+
+saucelabs@~1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/saucelabs/-/saucelabs-1.0.1.tgz#b50a100d9c5a4140748b35335a6e5d70017dadf9"
+ dependencies:
+ https-proxy-agent "^1.0.0"
+
+sax@0.6.x:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/sax/-/sax-0.6.1.tgz#563b19c7c1de892e09bfc4f2fc30e3c27f0952b9"
+
+selenium-webdriver@2.47.0:
+ version "2.47.0"
+ resolved "https://registry.yarnpkg.com/selenium-webdriver/-/selenium-webdriver-2.47.0.tgz#e29b52d2daa0f648c40f602f4d2a8e8bee351ea5"
+ dependencies:
+ adm-zip "0.4.4"
+ rimraf "^2.2.8"
+ tmp "0.0.24"
+ ws "^0.8.0"
+ xml2js "0.4.4"
+
+"semver@2 || 3 || 4 || 5", semver@~5.0.1:
+ version "5.0.3"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.0.3.tgz#77466de589cd5d3c95f138aa78bc569a3cb5d27a"
+
+semver@~4.3.3:
+ version "4.3.6"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da"
+
+semver@~5.3.0:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
+
+send@0.14.1:
+ version "0.14.1"
+ resolved "https://registry.yarnpkg.com/send/-/send-0.14.1.tgz#a954984325392f51532a7760760e459598c89f7a"
+ dependencies:
+ debug "~2.2.0"
+ depd "~1.1.0"
+ destroy "~1.0.4"
+ encodeurl "~1.0.1"
+ escape-html "~1.0.3"
+ etag "~1.7.0"
+ fresh "0.3.0"
+ http-errors "~1.5.0"
+ mime "1.3.4"
+ ms "0.7.1"
+ on-finished "~2.3.0"
+ range-parser "~1.2.0"
+ statuses "~1.3.0"
+
+serve-static@~1.11.1:
+ version "1.11.1"
+ resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.11.1.tgz#d6cce7693505f733c759de57befc1af76c0f0805"
+ dependencies:
+ encodeurl "~1.0.1"
+ escape-html "~1.0.3"
+ parseurl "~1.3.1"
+ send "0.14.1"
+
+set-blocking@~2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
+
+set-immediate-shim@^1.0.0, set-immediate-shim@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61"
+
+setprototypeof@1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.2.tgz#81a552141ec104b88e89ce383103ad5c66564d08"
+
+shelljs@0.3.x:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.3.0.tgz#3596e6307a781544f591f37da618360f31db57b1"
+
+sigmund@~1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590"
+
+signal-exit@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
+
+sntp@1.x.x:
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198"
+ dependencies:
+ hoek "2.x.x"
+
+socket.io-adapter@0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-0.4.0.tgz#fb9f82ab1aa65290bf72c3657955b930a991a24f"
+ dependencies:
+ debug "2.2.0"
+ socket.io-parser "2.2.2"
+
+socket.io-client@1.4.6:
+ version "1.4.6"
+ resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-1.4.6.tgz#49b0ba537efd15b8297c84016e642e1c7c752c3d"
+ dependencies:
+ backo2 "1.0.2"
+ component-bind "1.0.0"
+ component-emitter "1.2.0"
+ debug "2.2.0"
+ engine.io-client "1.6.9"
+ has-binary "0.1.7"
+ indexof "0.0.1"
+ object-component "0.0.3"
+ parseuri "0.0.4"
+ socket.io-parser "2.2.6"
+ to-array "0.1.4"
+
+socket.io-parser@2.2.2:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-2.2.2.tgz#3d7af6b64497e956b7d9fe775f999716027f9417"
+ dependencies:
+ benchmark "1.0.0"
+ component-emitter "1.1.2"
+ debug "0.7.4"
+ isarray "0.0.1"
+ json3 "3.2.6"
+
+socket.io-parser@2.2.6:
+ version "2.2.6"
+ resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-2.2.6.tgz#38dfd61df50dcf8ab1d9e2091322bf902ba28b99"
+ dependencies:
+ benchmark "1.0.0"
+ component-emitter "1.1.2"
+ debug "2.2.0"
+ isarray "0.0.1"
+ json3 "3.3.2"
+
+socket.io@1.4.7:
+ version "1.4.7"
+ resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-1.4.7.tgz#92b7f7cb88c5797d4daee279fe8075dbe6d3fa1c"
+ dependencies:
+ debug "2.2.0"
+ engine.io "1.6.10"
+ has-binary "0.1.7"
+ socket.io-adapter "0.4.0"
+ socket.io-client "1.4.6"
+ socket.io-parser "2.2.6"
+
+source-map-resolve@^0.3.0:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.3.1.tgz#610f6122a445b8dd51535a2a71b783dfc1248761"
+ dependencies:
+ atob "~1.1.0"
+ resolve-url "~0.2.1"
+ source-map-url "~0.3.0"
+ urix "~0.1.0"
+
+source-map-support@~0.2.6:
+ version "0.2.10"
+ resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.2.10.tgz#ea5a3900a1c1cb25096a0ae8cc5c2b4b10ded3dc"
+ dependencies:
+ source-map "0.1.32"
+
+source-map-url@~0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.3.0.tgz#7ecaf13b57bcd09da8a40c5d269db33799d4aaf9"
+
+source-map@0.1.32:
+ version "0.1.32"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.32.tgz#c8b6c167797ba4740a8ea33252162ff08591b266"
+ dependencies:
+ amdefine ">=0.0.4"
+
+source-map@0.4.x, source-map@^0.4.4, source-map@~0.4.2:
+ version "0.4.4"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b"
+ dependencies:
+ amdefine ">=0.0.4"
+
+source-map@^0.1.38:
+ version "0.1.43"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346"
+ dependencies:
+ amdefine ">=0.0.4"
+
+source-map@^0.5.1, source-map@^0.5.3, source-map@~0.5.1:
+ version "0.5.6"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412"
+
+source-map@~0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d"
+ dependencies:
+ amdefine ">=0.0.4"
+
+spdx-correct@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40"
+ dependencies:
+ spdx-license-ids "^1.0.2"
+
+spdx-expression-parse@~1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c"
+
+spdx-license-ids@^1.0.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57"
+
+sprintf-js@~1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
+
+sshpk@^1.7.0:
+ version "1.10.1"
+ resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.10.1.tgz#30e1a5d329244974a1af61511339d595af6638b0"
+ dependencies:
+ asn1 "~0.2.3"
+ assert-plus "^1.0.0"
+ dashdash "^1.12.0"
+ getpass "^0.1.1"
+ optionalDependencies:
+ bcrypt-pbkdf "^1.0.0"
+ ecc-jsbn "~0.1.1"
+ jodid25519 "^1.0.0"
+ jsbn "~0.1.0"
+ tweetnacl "~0.14.0"
+
+"statuses@>= 1.3.1 < 2", statuses@~1.3.0:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e"
+
+string-width@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
+ dependencies:
+ code-point-at "^1.0.0"
+ is-fullwidth-code-point "^1.0.0"
+ strip-ansi "^3.0.0"
+
+string_decoder@~0.10.x:
+ version "0.10.31"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
+
+stringstream@~0.0.4:
+ version "0.0.5"
+ resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878"
+
+strip-ansi@^3.0.0, strip-ansi@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
+ dependencies:
+ ansi-regex "^2.0.0"
+
+strip-bom@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e"
+ dependencies:
+ is-utf8 "^0.2.0"
+
+strip-indent@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2"
+ dependencies:
+ get-stdin "^4.0.1"
+
+strip-json-comments@1.0.x, strip-json-comments@~1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91"
+
+supports-color@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-0.2.0.tgz#d92de2694eb3f67323973d7ae3d8b55b4c22190a"
+
+supports-color@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
+
+supports-color@^3.1.0:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5"
+ dependencies:
+ has-flag "^1.0.0"
+
+tar-pack@~3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.3.0.tgz#30931816418f55afc4d21775afdd6720cee45dae"
+ dependencies:
+ debug "~2.2.0"
+ fstream "~1.0.10"
+ fstream-ignore "~1.0.5"
+ once "~1.3.3"
+ readable-stream "~2.1.4"
+ rimraf "~2.5.1"
+ tar "~2.2.1"
+ uid-number "~0.0.6"
+
+tar@~2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1"
+ dependencies:
+ block-stream "*"
+ fstream "^1.0.2"
+ inherits "2"
+
+throttleit@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.0.tgz#9e785836daf46743145a5984b6268d828528ac6c"
+
+tmp@0.0.24:
+ version "0.0.24"
+ resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.24.tgz#d6a5e198d14a9835cc6f2d7c3d9e302428c8cf12"
+
+tmp@0.0.28:
+ version "0.0.28"
+ resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.28.tgz#172735b7f614ea7af39664fa84cf0de4e515d120"
+ dependencies:
+ os-tmpdir "~1.0.1"
+
+to-array@0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890"
+
+to-no-case@0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/to-no-case/-/to-no-case-0.1.1.tgz#cf33c70e0f28168d95e4159abf150e8c542ef9fe"
+
+to-no-case@0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/to-no-case/-/to-no-case-0.1.2.tgz#a89e7daf5d7775c3ffe36be64603e160d2a1b709"
+
+to-slug-case@~0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/to-slug-case/-/to-slug-case-0.1.2.tgz#5f4e9e96856cc31fe3bd953f673c5972a942bf58"
+ dependencies:
+ to-space-case "0.1.2"
+
+to-space-case@0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/to-space-case/-/to-space-case-0.1.2.tgz#9a66be3ebe53f2779f687f0262effd1fc5b6d15e"
+ dependencies:
+ to-no-case "0.1.1"
+
+to-space-case@~0.1.3:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/to-space-case/-/to-space-case-0.1.3.tgz#b87845f0d3383f6b681515089c6bc1a11c88c2c3"
+ dependencies:
+ to-no-case "0.1.2"
+
+tough-cookie@>=0.12.0, tough-cookie@~2.3.0:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a"
+ dependencies:
+ punycode "^1.4.1"
+
+tough-cookie@~2.2.0:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.2.2.tgz#c83a1830f4e5ef0b93ef2a3488e724f8de016ac7"
+
+trim-newlines@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613"
+
+tunnel-agent@~0.4.0, tunnel-agent@~0.4.1:
+ version "0.4.3"
+ resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb"
+
+tweetnacl@^0.14.3, tweetnacl@~0.14.0:
+ version "0.14.5"
+ resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
+
+type-check@~0.3.2:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
+ dependencies:
+ prelude-ls "~1.1.2"
+
+type-is@~1.6.13:
+ version "1.6.14"
+ resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.14.tgz#e219639c17ded1ca0789092dd54a03826b817cb2"
+ dependencies:
+ media-typer "0.3.0"
+ mime-types "~2.1.13"
+
+typedarray@~0.0.5:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
+
+uglify-js@^2.4.24, uglify-js@^2.6:
+ version "2.7.5"
+ resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.7.5.tgz#4612c0c7baaee2ba7c487de4904ae122079f2ca8"
+ dependencies:
+ async "~0.2.6"
+ source-map "~0.5.1"
+ uglify-to-browserify "~1.0.0"
+ yargs "~3.10.0"
+
+uglify-to-browserify@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7"
+
+uid-number@~0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81"
+
+ultron@1.0.x:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa"
+
+underscore.string@~2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-2.2.1.tgz#d7c0fa2af5d5a1a67f4253daee98132e733f0f19"
+
+underscore.string@~2.3.3:
+ version "2.3.3"
+ resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-2.3.3.tgz#71c08bf6b428b1133f37e78fa3a21c82f7329b0d"
+
+underscore.string@~2.4.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-2.4.0.tgz#8cdd8fbac4e2d2ea1e7e2e8097c42f442280f85b"
+
+underscore@~1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.7.0.tgz#6bbaf0877500d36be34ecaa584e0db9fef035209"
+
+unpipe@1.0.0, unpipe@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
+
+uri-path@0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/uri-path/-/uri-path-0.0.2.tgz#803eb01f2feb17927dcce0f6187e72b75f53f554"
+
+urix@^0.1.0, urix@~0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
+
+useragent@^2.1.9:
+ version "2.1.10"
+ resolved "https://registry.yarnpkg.com/useragent/-/useragent-2.1.10.tgz#2456c5c2b722b47f3d8321ed257b490a3d9bb2af"
+ dependencies:
+ lru-cache "2.2.x"
+
+utf-8-validate@1.2.x:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-1.2.2.tgz#8bb871a4741e085c70487ca7acdbd7d6d36029eb"
+ dependencies:
+ bindings "~1.2.1"
+ nan "~2.4.0"
+
+utf8@2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/utf8/-/utf8-2.1.0.tgz#0cfec5c8052d44a23e3aaa908104e8075f95dfd5"
+
+util-deprecate@~1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+
+utils-merge@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.0.tgz#0294fb922bb9375153541c4f7096231f287c8af8"
+
+uuid@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1"
+
+validate-npm-package-license@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc"
+ dependencies:
+ spdx-correct "~1.0.0"
+ spdx-expression-parse "~1.0.0"
+
+vary@~1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.0.tgz#e1e5affbbd16ae768dd2674394b9ad3022653140"
+
+verror@1.3.6:
+ version "1.3.6"
+ resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c"
+ dependencies:
+ extsprintf "1.0.2"
+
+void-elements@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec"
+
+which@^1.1.1, which@~1.2.10, which@~1.2.2:
+ version "1.2.12"
+ resolved "https://registry.yarnpkg.com/which/-/which-1.2.12.tgz#de67b5e450269f194909ef23ece4ebe416fa1192"
+ dependencies:
+ isexe "^1.1.1"
+
+which@~1.0.5:
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/which/-/which-1.0.9.tgz#460c1da0f810103d0321a9b633af9e575e64486f"
+
+wide-align@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.0.tgz#40edde802a71fea1f070da3e62dcda2e7add96ad"
+ dependencies:
+ string-width "^1.0.1"
+
+window-size@0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d"
+
+wordwrap@0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f"
+
+wordwrap@^1.0.0, wordwrap@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
+
+wordwrap@~0.0.2:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107"
+
+wrappy@1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+
+write-file-stdout@~0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/write-file-stdout/-/write-file-stdout-0.0.2.tgz#c252d7c7c5b1b402897630e3453c7bfe690d9ca1"
+
+ws@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-1.0.1.tgz#7d0b2a2e58cddd819039c29c9de65045e1b310e9"
+ dependencies:
+ options ">=0.0.5"
+ ultron "1.0.x"
+
+ws@^0.8.0:
+ version "0.8.1"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-0.8.1.tgz#6b65273b99193c5f067a4cf5809598f777e3b759"
+ dependencies:
+ options ">=0.0.5"
+ ultron "1.0.x"
+ optionalDependencies:
+ bufferutil "1.2.x"
+ utf-8-validate "1.2.x"
+
+xml2js@0.4.4:
+ version "0.4.4"
+ resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.4.tgz#3111010003008ae19240eba17497b57c729c555d"
+ dependencies:
+ sax "0.6.x"
+ xmlbuilder ">=1.0.0"
+
+xmlbuilder@>=1.0.0:
+ version "8.2.2"
+ resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-8.2.2.tgz#69248673410b4ba42e1a6136551d2922335aa773"
+
+xmlhttprequest-ssl@1.5.1:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.1.tgz#3b7741fea4a86675976e908d296d4445961faa67"
+
+xtend@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
+
+yargs@~3.10.0:
+ version "3.10.0"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1"
+ dependencies:
+ camelcase "^1.0.2"
+ cliui "^2.1.0"
+ decamelize "^1.0.0"
+ window-size "0.1.0"
+
+yauzl@2.4.1:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.4.1.tgz#9528f442dab1b2284e58b4379bb194e22e0c4005"
+ dependencies:
+ fd-slicer "~1.0.1"
+
+yeast@0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419"
diff --git a/misc/log-analytics b/misc/log-analytics
-Subproject f724b5d2ae0de60cd4fec2f0eb340481eda3d21
+Subproject 6e305e17b4c9763755405b8b4c4d6853a7a4361
diff --git a/piwik.js b/piwik.js
index 0a50b8285e..4a6a602662 100644
--- a/piwik.js
+++ b/piwik.js
@@ -18,59 +18,60 @@ var I="000000";var t=function(ac,ad){return(I+(ad||0)).slice(-ac)};var z="\\u00"
}else{at=null}}else{if(typeof at.toJSON=="function"&&((ae!=N&&ae!=O&&ae!=E)||r.call(at,"toJSON"))){at=at.toJSON(ai)}}}if(ag){at=ag.call(aA,ai,at)}if(at===null){return"null"}ae=u.call(at);if(ae==A){return""+at}else{if(ae==N){return at>-1/0&&at<1/0?""+at:"null"}else{if(ae==O){return C(""+at)}}}if(typeof at=="object"){for(af=aj.length;af--;){if(aj[af]===at){throw aa()}}aj.push(at);ar=[];av=ac;ac+=ax;if(ae==E){for(ah=0,af=at.length;ah<af;ah++){ad=p(ah,at,ag,al,ax,ac,aj);ar.push(ad===L?"null":ad)}ao=ar.length?(ax?"[\n"+ac+ar.join(",\n"+ac)+"\n"+av+"]":("["+ar.join(",")+"]")):"[]"}else{m(al||at,function(aC){var aB=p(aC,at,ag,al,ax,ac,aj);if(aB!==L){ar.push(C(aC)+":"+(ax?" ":"")+aB)}});ao=ar.length?(ax?"{\n"+ac+ar.join(",\n"+ac)+"\n"+av+"}":("{"+ar.join(",")+"}")):"{}"}aj.pop();return ao}};V.stringify=function(ac,ae,af){var ad,al,aj,ai;if(e[typeof ae]&&ae){if((ai=u.call(ae))==U){al=ae}else{if(ai==E){aj={};for(var ah=0,ag=ae.length,ak;ah<ag;ak=ae[ah++],((ai=u.call(ak)),ai==O||ai==N)&&(aj[ak]=1)){}}}}if(af){if((ai=u.call(af))==N){if((af-=af%1)>0){for(ad="",af>10&&(af=10);
ad.length<af;ad+=" "){}}}else{if(ai==O){ad=af.length<=10?af:af.slice(0,10)}}}return p("",(ak={},ak[""]=ac,ak),al,aj,ad,"",[])}}if(!o("json-parse")){var M=R.fromCharCode;var l={92:"\\",34:'"',47:"/",98:"\b",116:"\t",110:"\n",102:"\f",114:"\r"};var G,X;var H=function(){G=X=null;throw T()};var y=function(){var ah=X,af=ah.length,ag,ae,ac,ai,ad;while(G<af){ad=ah.charCodeAt(G);switch(ad){case 9:case 10:case 13:case 32:G++;break;case 123:case 125:case 91:case 93:case 58:case 44:ag=F?ah.charAt(G):ah[G];G++;return ag;case 34:for(ag="@",G++;G<af;){ad=ah.charCodeAt(G);if(ad<32){H()}else{if(ad==92){ad=ah.charCodeAt(++G);switch(ad){case 92:case 34:case 47:case 98:case 116:case 110:case 102:case 114:ag+=l[ad];G++;break;case 117:ae=++G;for(ac=G+4;G<ac;G++){ad=ah.charCodeAt(G);if(!(ad>=48&&ad<=57||ad>=97&&ad<=102||ad>=65&&ad<=70)){H()}}ag+=M("0x"+ah.slice(ae,G));break;default:H()}}else{if(ad==34){break}ad=ah.charCodeAt(G);ae=G;while(ad>=32&&ad!=92&&ad!=34){ad=ah.charCodeAt(++G)}ag+=ah.slice(ae,G)}}}if(ah.charCodeAt(G)==34){G++;
return ag}H();default:ae=G;if(ad==45){ai=true;ad=ah.charCodeAt(++G)}if(ad>=48&&ad<=57){if(ad==48&&((ad=ah.charCodeAt(G+1)),ad>=48&&ad<=57)){H()}ai=false;for(;G<af&&((ad=ah.charCodeAt(G)),ad>=48&&ad<=57);G++){}if(ah.charCodeAt(G)==46){ac=++G;for(;ac<af&&((ad=ah.charCodeAt(ac)),ad>=48&&ad<=57);ac++){}if(ac==G){H()}G=ac}ad=ah.charCodeAt(G);if(ad==101||ad==69){ad=ah.charCodeAt(++G);if(ad==43||ad==45){G++}for(ac=G;ac<af&&((ad=ah.charCodeAt(ac)),ad>=48&&ad<=57);ac++){}if(ac==G){H()}G=ac}return +ah.slice(ae,G)}if(ai){H()}if(ah.slice(G,G+4)=="true"){G+=4;return true}else{if(ah.slice(G,G+5)=="false"){G+=5;return false}else{if(ah.slice(G,G+4)=="null"){G+=4;return null}}}H()}}return"$"};var W=function(ad){var ac,ae;if(ad=="$"){H()}if(typeof ad=="string"){if((F?ad.charAt(0):ad[0])=="@"){return ad.slice(1)}if(ad=="["){ac=[];for(;;ae||(ae=true)){ad=y();if(ad=="]"){break}if(ae){if(ad==","){ad=y();if(ad=="]"){H()}}else{H()}}if(ad==","){H()}ac.push(W(ad))}return ac}else{if(ad=="{"){ac={};for(;;ae||(ae=true)){ad=y();
-if(ad=="}"){break}if(ae){if(ad==","){ad=y();if(ad=="}"){H()}}else{H()}}if(ad==","||typeof ad!="string"||(F?ad.charAt(0):ad[0])!="@"||y()!=":"){H()}ac[ad.slice(1)]=W(y())}return ac}}H()}return ad};var P=function(ae,ad,af){var ac=w(ae,ad,af);if(ac===L){delete ae[ad]}else{ae[ad]=ac}};var w=function(af,ae,ag){var ad=af[ae],ac;if(typeof ad=="object"&&ad){if(u.call(ad)==E){for(ac=ad.length;ac--;){P(ad,ac,ag)}}else{m(ad,function(ah){P(ad,ah,ag)})}}return ag.call(af,ae,ad)};V.parse=function(ae,af){var ac,ad;G=0;X=""+ae;ac=W(y());if(y()!="$"){H()}G=X=null;return af&&u.call(af)==U?w((ad={},ad[""]=ac,ad),"",af):ac}}}V.runInContext=j;return V}if(h&&!c){j(i,h)}else{var f=i.JSON,k=i.JSON3,d=false;var g=j(i,(i.JSON3={noConflict:function(){if(!d){d=true;i.JSON=f;i.JSON3=k;f=k=null}return g}}));i.JSON={parse:g.parse,stringify:g.stringify}}if(c){define(function(){return g})}}).call(this);JSON_PIWIK=a})()}if(typeof _paq!=="object"){_paq=[]}if(typeof window.Piwik!=="object"){window.Piwik=(function(){var p,a={},v={},D=document,g=navigator,T=screen,Q=window,h=Q.performance||Q.mozPerformance||Q.msPerformance||Q.webkitPerformance,r=Q.encodeURIComponent,P=Q.decodeURIComponent,k=unescape,F=[],B,d,aa=[];
-function n(ah){try{return P(ah)}catch(ai){return unescape(ah)}}function G(ai){var ah=typeof ai;return ah!=="undefined"}function x(ah){return typeof ah==="function"}function S(ah){return typeof ah==="object"}function u(ah){return typeof ah==="string"||ah instanceof String}function y(ai){if(!ai){return true}var ah;var aj=true;for(ah in ai){if(Object.prototype.hasOwnProperty.call(ai,ah)){aj=false}}return aj}function ad(ah){var ai=typeof console;if(ai!=="undefined"&&console&&console.error){console.error(ah)}}function Z(){var am,al,ao,ai,ah;for(am=0;am<arguments.length;am+=1){ah=null;if(arguments[am]&&arguments[am].slice){ah=arguments[am].slice()}ai=arguments[am];ao=ai.shift();var an,aj;var ak=u(ao)&&ao.indexOf("::")>0;if(ak){an=ao.split("::");aj=an[0];ao=an[1];if("object"===typeof d[aj]&&"function"===typeof d[aj][ao]){d[aj][ao].apply(d[aj],ai)}else{if(ah){aa.push(ah)}}}else{for(al=0;al<F.length;al++){if(u(ao)){aj=F[al];var ap=ao.indexOf(".")>0;if(ap){an=ao.split(".");if(aj&&"object"===typeof aj[an[0]]){aj=aj[an[0]];
-ao=an[1]}else{if(ah){aa.push(ah);break}}}if(aj[ao]){aj[ao].apply(aj,ai)}else{var aq="The method '"+ao+'\' was not found in "_paq" variable. Please have a look at the Piwik tracker documentation: http://developer.piwik.org/api-reference/tracking-javascript';ad(aq);if(!ap){throw new TypeError(aq)}}if(ao==="addTracker"){break}if(ao==="setTrackerUrl"||ao==="setSiteId"){break}}else{ao.apply(F[al],ai)}}}}}function ag(ak,aj,ai,ah){if(ak.addEventListener){ak.addEventListener(aj,ai,ah);return true}if(ak.attachEvent){return ak.attachEvent("on"+aj,ai)}ak["on"+aj]=ai}function l(ah){if(D.readyState==="complete"){ah()}else{if(Q.addEventListener){Q.addEventListener("load",ah)}else{if(Q.attachEvent){Q.attachEvent("onload",ah)}}}}function o(ak){var ah=false;if(D.attachEvent){ah=D.readyState==="complete"}else{ah=D.readyState!=="loading"}if(ah){ak();return}var aj;if(D.addEventListener){ag(D,"DOMContentLoaded",function ai(){D.removeEventListener("DOMContentLoaded",ai,false);if(!ah){ah=true;ak()}})}else{if(D.attachEvent){D.attachEvent("onreadystatechange",function ai(){if(D.readyState==="complete"){D.detachEvent("onreadystatechange",ai);
-if(!ah){ah=true;ak()}}});if(D.documentElement.doScroll&&Q===Q.top){(function ai(){if(!ah){try{D.documentElement.doScroll("left")}catch(al){setTimeout(ai,0);return}ah=true;ak()}}())}}}ag(Q,"load",function(){if(!ah){ah=true;ak()}},false)}function W(ai,an,ao){if(!ai){return""}var ah="",ak,aj,al,am;for(ak in a){if(Object.prototype.hasOwnProperty.call(a,ak)){am=a[ak]&&"function"===typeof a[ak][ai];if(am){aj=a[ak][ai];al=aj(an||{},ao);if(al){ah+=al}}}}return ah}function ab(){var ah;W("unload");if(p){do{ah=new Date()}while(ah.getTimeAlias()<p)}}function m(aj,ai){var ah=D.createElement("script");ah.type="text/javascript";ah.src=aj;if(ah.readyState){ah.onreadystatechange=function(){var ak=this.readyState;if(ak==="loaded"||ak==="complete"){ah.onreadystatechange=null;ai()}}}else{ah.onload=ai}D.getElementsByTagName("head")[0].appendChild(ah)}function H(){var ah="";try{ah=Q.top.document.referrer}catch(aj){if(Q.parent){try{ah=Q.parent.document.referrer}catch(ai){ah=""}}}if(ah===""){ah=D.referrer}return ah
-}function q(ah){var aj=new RegExp("^([a-z]+):"),ai=aj.exec(ah);return ai?ai[1]:null}function c(ah){var aj=new RegExp("^(?:(?:https?|ftp):)/*(?:[^@]+@)?([^:/#]+)"),ai=aj.exec(ah);return ai?ai[1]:ah}function ac(ai,ah){ai=String(ai);return ai.lastIndexOf(ah,0)===0}function O(ai,ah){ai=String(ai);return ai.indexOf(ah,ai.length-ah.length)!==-1}function w(ai,ah){ai=String(ai);return ai.indexOf(ah)!==-1}function f(ai,ah){ai=String(ai);return ai.substr(0,ai.length-ah)}function C(ak,aj,am){ak=String(ak);if(!am){am=""}var ah=ak.indexOf("#");var an=ak.length;if(ah===-1){ah=an}var al=ak.substr(0,ah);var ai=ak.substr(ah,an-ah);if(al.indexOf("?")===-1){al+="?"}else{if(!O(al,"?")){al+="&"}}return al+r(aj)+"="+r(am)+ai}function j(ai,aj){ai=String(ai);if(ai.indexOf("?"+aj+"=")===-1&&ai.indexOf("&"+aj+"=")===-1){return ai}var ak=ai.indexOf("?");if(ak===-1){return ai}var ah=ai.substr(ak+1);var ao=ai.substr(0,ak);if(ah){var ap="";var ar=ah.indexOf("#");if(ar!==-1){ap=ah.substr(ar+1);ah=ah.substr(0,ar)}var al;
-var an=ah.split("&");var am=an.length-1;for(am;am>=0;am--){al=an[am].split("=")[0];if(al===aj){an.splice(am,1)}}var aq=an.join("&");if(aq){ao=ao+"?"+aq}if(ap){ao+="#"+ap}}return ao}function e(aj,ai){var ah="[\\?&#]"+ai+"=([^&#]*)";var al=new RegExp(ah);var ak=al.exec(aj);return ak?P(ak[1]):""}function A(ah){return unescape(r(ah))}function af(ax){var aj=function(aD,aC){return(aD<<aC)|(aD>>>(32-aC))},ay=function(aF){var aD="",aE,aC;for(aE=7;aE>=0;aE--){aC=(aF>>>(aE*4))&15;aD+=aC.toString(16)}return aD},am,aA,az,ai=[],aq=1732584193,ao=4023233417,an=2562383102,al=271733878,ak=3285377520,aw,av,au,at,ar,aB,ah,ap=[];ax=A(ax);ah=ax.length;for(aA=0;aA<ah-3;aA+=4){az=ax.charCodeAt(aA)<<24|ax.charCodeAt(aA+1)<<16|ax.charCodeAt(aA+2)<<8|ax.charCodeAt(aA+3);ap.push(az)}switch(ah&3){case 0:aA=2147483648;break;case 1:aA=ax.charCodeAt(ah-1)<<24|8388608;break;case 2:aA=ax.charCodeAt(ah-2)<<24|ax.charCodeAt(ah-1)<<16|32768;break;case 3:aA=ax.charCodeAt(ah-3)<<24|ax.charCodeAt(ah-2)<<16|ax.charCodeAt(ah-1)<<8|128;
-break}ap.push(aA);while((ap.length&15)!==14){ap.push(0)}ap.push(ah>>>29);ap.push((ah<<3)&4294967295);for(am=0;am<ap.length;am+=16){for(aA=0;aA<16;aA++){ai[aA]=ap[am+aA]}for(aA=16;aA<=79;aA++){ai[aA]=aj(ai[aA-3]^ai[aA-8]^ai[aA-14]^ai[aA-16],1)}aw=aq;av=ao;au=an;at=al;ar=ak;for(aA=0;aA<=19;aA++){aB=(aj(aw,5)+((av&au)|(~av&at))+ar+ai[aA]+1518500249)&4294967295;ar=at;at=au;au=aj(av,30);av=aw;aw=aB}for(aA=20;aA<=39;aA++){aB=(aj(aw,5)+(av^au^at)+ar+ai[aA]+1859775393)&4294967295;ar=at;at=au;au=aj(av,30);av=aw;aw=aB}for(aA=40;aA<=59;aA++){aB=(aj(aw,5)+((av&au)|(av&at)|(au&at))+ar+ai[aA]+2400959708)&4294967295;ar=at;at=au;au=aj(av,30);av=aw;aw=aB}for(aA=60;aA<=79;aA++){aB=(aj(aw,5)+(av^au^at)+ar+ai[aA]+3395469782)&4294967295;ar=at;at=au;au=aj(av,30);av=aw;aw=aB}aq=(aq+aw)&4294967295;ao=(ao+av)&4294967295;an=(an+au)&4294967295;al=(al+at)&4294967295;ak=(ak+ar)&4294967295}aB=ay(aq)+ay(ao)+ay(an)+ay(al)+ay(ak);return aB.toLowerCase()}function V(aj,ah,ai){if(!aj){aj=""}if(!ah){ah=""}if(aj==="translate.googleusercontent.com"){if(ai===""){ai=ah
-}ah=e(ah,"u");aj=c(ah)}else{if(aj==="cc.bingj.com"||aj==="webcache.googleusercontent.com"||aj.slice(0,5)==="74.6."){ah=D.links[0].href;aj=c(ah)}}return[aj,ah,ai]}function I(ai){var ah=ai.length;if(ai.charAt(--ah)==="."){ai=ai.slice(0,ah)}if(ai.slice(0,2)==="*."){ai=ai.slice(1)}if(ai.indexOf("/")!==-1){ai=ai.substr(0,ai.indexOf("/"))}return ai}function ae(ai){ai=ai&&ai.text?ai.text:ai;if(!u(ai)){var ah=D.getElementsByTagName("title");if(ah&&G(ah[0])){ai=ah[0].text}}return ai}function M(ah){if(!ah){return[]}if(!G(ah.children)&&G(ah.childNodes)){return ah.children}if(G(ah.children)){return ah.children}return[]}function R(ai,ah){if(!ai||!ah){return false}if(ai.contains){return ai.contains(ah)}if(ai===ah){return true}if(ai.compareDocumentPosition){return !!(ai.compareDocumentPosition(ah)&16)}return false}function J(aj,ak){if(aj&&aj.indexOf){return aj.indexOf(ak)}if(!G(aj)||aj===null){return -1}if(!aj.length){return -1}var ah=aj.length;if(ah===0){return -1}var ai=0;while(ai<ah){if(aj[ai]===ak){return ai
-}ai++}return -1}function i(aj){if(!aj){return false}function ah(al,am){if(Q.getComputedStyle){return D.defaultView.getComputedStyle(al,null)[am]}if(al.currentStyle){return al.currentStyle[am]}}function ak(al){al=al.parentNode;while(al){if(al===D){return true}al=al.parentNode}return false}function ai(an,au,al,aq,ao,ar,ap){var am=an.parentNode,at=1;if(!ak(an)){return false}if(9===am.nodeType){return true}if("0"===ah(an,"opacity")||"none"===ah(an,"display")||"hidden"===ah(an,"visibility")){return false}if(!G(au)||!G(al)||!G(aq)||!G(ao)||!G(ar)||!G(ap)){au=an.offsetTop;ao=an.offsetLeft;aq=au+an.offsetHeight;al=ao+an.offsetWidth;ar=an.offsetWidth;ap=an.offsetHeight}if(aj===an&&(0===ap||0===ar)&&"hidden"===ah(an,"overflow")){return false}if(am){if(("hidden"===ah(am,"overflow")||"scroll"===ah(am,"overflow"))){if(ao+at>am.offsetWidth+am.scrollLeft||ao+ar-at<am.scrollLeft||au+at>am.offsetHeight+am.scrollTop||au+ap-at<am.scrollTop){return false}}if(an.offsetParent===am){ao+=am.offsetLeft;au+=am.offsetTop
-}return ai(am,au,al,aq,ao,ar,ap)}return true}return ai(aj)}var Y={htmlCollectionToArray:function(aj){var ah=[],ai;if(!aj||!aj.length){return ah}for(ai=0;ai<aj.length;ai++){ah.push(aj[ai])}return ah},find:function(ah){if(!document.querySelectorAll||!ah){return[]}var ai=document.querySelectorAll(ah);return this.htmlCollectionToArray(ai)},findMultiple:function(aj){if(!aj||!aj.length){return[]}var ai,ak;var ah=[];for(ai=0;ai<aj.length;ai++){ak=this.find(aj[ai]);ah=ah.concat(ak)}ah=this.makeNodesUnique(ah);return ah},findNodesByTagName:function(ai,ah){if(!ai||!ah||!ai.getElementsByTagName){return[]}var aj=ai.getElementsByTagName(ah);return this.htmlCollectionToArray(aj)},makeNodesUnique:function(ah){var am=[].concat(ah);ah.sort(function(ao,an){if(ao===an){return 0}var aq=J(am,ao);var ap=J(am,an);if(aq===ap){return 0}return aq>ap?-1:1});if(ah.length<=1){return ah}var ai=0;var ak=0;var al=[];var aj;aj=ah[ai++];while(aj){if(aj===ah[ai]){ak=al.push(ai)}aj=ah[ai++]||null}while(ak--){ah.splice(al[ak],1)
-}return ah},getAttributeValueFromNode:function(al,aj){if(!this.hasNodeAttribute(al,aj)){return}if(al&&al.getAttribute){return al.getAttribute(aj)}if(!al||!al.attributes){return}var ak=(typeof al.attributes[aj]);if("undefined"===ak){return}if(al.attributes[aj].value){return al.attributes[aj].value}if(al.attributes[aj].nodeValue){return al.attributes[aj].nodeValue}var ai;var ah=al.attributes;if(!ah){return}for(ai=0;ai<ah.length;ai++){if(ah[ai].nodeName===aj){return ah[ai].nodeValue}}return null},hasNodeAttributeWithValue:function(ai,ah){var aj=this.getAttributeValueFromNode(ai,ah);return !!aj},hasNodeAttribute:function(aj,ah){if(aj&&aj.hasAttribute){return aj.hasAttribute(ah)}if(aj&&aj.attributes){var ai=(typeof aj.attributes[ah]);return"undefined"!==ai}return false},hasNodeCssClass:function(aj,ah){if(aj&&ah&&aj.className){var ai=typeof aj.className==="string"?aj.className.split(" "):[];if(-1!==J(ai,ah)){return true}}return false},findNodesHavingAttribute:function(al,aj,ah){if(!ah){ah=[]}if(!al||!aj){return ah
-}var ak=M(al);if(!ak||!ak.length){return ah}var ai,am;for(ai=0;ai<ak.length;ai++){am=ak[ai];if(this.hasNodeAttribute(am,aj)){ah.push(am)}ah=this.findNodesHavingAttribute(am,aj,ah)}return ah},findFirstNodeHavingAttribute:function(aj,ai){if(!aj||!ai){return}if(this.hasNodeAttribute(aj,ai)){return aj}var ah=this.findNodesHavingAttribute(aj,ai);if(ah&&ah.length){return ah[0]}},findFirstNodeHavingAttributeWithValue:function(ak,aj){if(!ak||!aj){return}if(this.hasNodeAttributeWithValue(ak,aj)){return ak}var ah=this.findNodesHavingAttribute(ak,aj);if(!ah||!ah.length){return}var ai;for(ai=0;ai<ah.length;ai++){if(this.getAttributeValueFromNode(ah[ai],aj)){return ah[ai]}}},findNodesHavingCssClass:function(al,ak,ah){if(!ah){ah=[]}if(!al||!ak){return ah}if(al.getElementsByClassName){var am=al.getElementsByClassName(ak);return this.htmlCollectionToArray(am)}var aj=M(al);if(!aj||!aj.length){return[]}var ai,an;for(ai=0;ai<aj.length;ai++){an=aj[ai];if(this.hasNodeCssClass(an,ak)){ah.push(an)}ah=this.findNodesHavingCssClass(an,ak,ah)
-}return ah},findFirstNodeHavingClass:function(aj,ai){if(!aj||!ai){return}if(this.hasNodeCssClass(aj,ai)){return aj}var ah=this.findNodesHavingCssClass(aj,ai);if(ah&&ah.length){return ah[0]}},isLinkElement:function(ai){if(!ai){return false}var ah=String(ai.nodeName).toLowerCase();var ak=["a","area"];var aj=J(ak,ah);return aj!==-1},setAnyAttribute:function(ai,ah,aj){if(!ai||!ah){return}if(ai.setAttribute){ai.setAttribute(ah,aj)}else{ai[ah]=aj}}};var t={CONTENT_ATTR:"data-track-content",CONTENT_CLASS:"piwikTrackContent",CONTENT_NAME_ATTR:"data-content-name",CONTENT_PIECE_ATTR:"data-content-piece",CONTENT_PIECE_CLASS:"piwikContentPiece",CONTENT_TARGET_ATTR:"data-content-target",CONTENT_TARGET_CLASS:"piwikContentTarget",CONTENT_IGNOREINTERACTION_ATTR:"data-content-ignoreinteraction",CONTENT_IGNOREINTERACTION_CLASS:"piwikContentIgnoreInteraction",location:undefined,findContentNodes:function(){var ai="."+this.CONTENT_CLASS;var ah="["+this.CONTENT_ATTR+"]";var aj=Y.findMultiple([ai,ah]);return aj
-},findContentNodesWithinNode:function(ak){if(!ak){return[]}var ai=Y.findNodesHavingCssClass(ak,this.CONTENT_CLASS);var ah=Y.findNodesHavingAttribute(ak,this.CONTENT_ATTR);if(ah&&ah.length){var aj;for(aj=0;aj<ah.length;aj++){ai.push(ah[aj])}}if(Y.hasNodeAttribute(ak,this.CONTENT_ATTR)){ai.push(ak)}else{if(Y.hasNodeCssClass(ak,this.CONTENT_CLASS)){ai.push(ak)}}ai=Y.makeNodesUnique(ai);return ai},findParentContentNode:function(ai){if(!ai){return}var aj=ai;var ah=0;while(aj&&aj!==D&&aj.parentNode){if(Y.hasNodeAttribute(aj,this.CONTENT_ATTR)){return aj}if(Y.hasNodeCssClass(aj,this.CONTENT_CLASS)){return aj}aj=aj.parentNode;if(ah>1000){break}ah++}},findPieceNode:function(ai){var ah;ah=Y.findFirstNodeHavingAttribute(ai,this.CONTENT_PIECE_ATTR);if(!ah){ah=Y.findFirstNodeHavingClass(ai,this.CONTENT_PIECE_CLASS)}if(ah){return ah}return ai},findTargetNodeNoDefault:function(ah){if(!ah){return}var ai=Y.findFirstNodeHavingAttributeWithValue(ah,this.CONTENT_TARGET_ATTR);if(ai){return ai}ai=Y.findFirstNodeHavingAttribute(ah,this.CONTENT_TARGET_ATTR);
-if(ai){return ai}ai=Y.findFirstNodeHavingClass(ah,this.CONTENT_TARGET_CLASS);if(ai){return ai}},findTargetNode:function(ah){var ai=this.findTargetNodeNoDefault(ah);if(ai){return ai}return ah},findContentName:function(ai){if(!ai){return}var al=Y.findFirstNodeHavingAttributeWithValue(ai,this.CONTENT_NAME_ATTR);if(al){return Y.getAttributeValueFromNode(al,this.CONTENT_NAME_ATTR)}var ah=this.findContentPiece(ai);if(ah){return this.removeDomainIfIsInLink(ah)}if(Y.hasNodeAttributeWithValue(ai,"title")){return Y.getAttributeValueFromNode(ai,"title")}var aj=this.findPieceNode(ai);if(Y.hasNodeAttributeWithValue(aj,"title")){return Y.getAttributeValueFromNode(aj,"title")}var ak=this.findTargetNode(ai);if(Y.hasNodeAttributeWithValue(ak,"title")){return Y.getAttributeValueFromNode(ak,"title")}},findContentPiece:function(ai){if(!ai){return}var ak=Y.findFirstNodeHavingAttributeWithValue(ai,this.CONTENT_PIECE_ATTR);if(ak){return Y.getAttributeValueFromNode(ak,this.CONTENT_PIECE_ATTR)}var ah=this.findPieceNode(ai);
-var aj=this.findMediaUrlInNode(ah);if(aj){return this.toAbsoluteUrl(aj)}},findContentTarget:function(aj){if(!aj){return}var ak=this.findTargetNode(aj);if(Y.hasNodeAttributeWithValue(ak,this.CONTENT_TARGET_ATTR)){return Y.getAttributeValueFromNode(ak,this.CONTENT_TARGET_ATTR)}var ai;if(Y.hasNodeAttributeWithValue(ak,"href")){ai=Y.getAttributeValueFromNode(ak,"href");return this.toAbsoluteUrl(ai)}var ah=this.findPieceNode(aj);if(Y.hasNodeAttributeWithValue(ah,"href")){ai=Y.getAttributeValueFromNode(ah,"href");return this.toAbsoluteUrl(ai)}},isSameDomain:function(ah){if(!ah||!ah.indexOf){return false}if(0===ah.indexOf(this.getLocation().origin)){return true}var ai=ah.indexOf(this.getLocation().host);if(8>=ai&&0<=ai){return true}return false},removeDomainIfIsInLink:function(aj){var ai="^https?://[^/]+";var ah="^.*//[^/]+";if(aj&&aj.search&&-1!==aj.search(new RegExp(ai))&&this.isSameDomain(aj)){aj=aj.replace(new RegExp(ah),"");if(!aj){aj="/"}}return aj},findMediaUrlInNode:function(al){if(!al){return
-}var aj=["img","embed","video","audio"];var ah=al.nodeName.toLowerCase();if(-1!==J(aj,ah)&&Y.findFirstNodeHavingAttributeWithValue(al,"src")){var ak=Y.findFirstNodeHavingAttributeWithValue(al,"src");return Y.getAttributeValueFromNode(ak,"src")}if(ah==="object"&&Y.hasNodeAttributeWithValue(al,"data")){return Y.getAttributeValueFromNode(al,"data")}if(ah==="object"){var am=Y.findNodesByTagName(al,"param");if(am&&am.length){var ai;for(ai=0;ai<am.length;ai++){if("movie"===Y.getAttributeValueFromNode(am[ai],"name")&&Y.hasNodeAttributeWithValue(am[ai],"value")){return Y.getAttributeValueFromNode(am[ai],"value")}}}var an=Y.findNodesByTagName(al,"embed");if(an&&an.length){return this.findMediaUrlInNode(an[0])}}},trim:function(ah){if(ah&&String(ah)===ah){return ah.replace(/^\s+|\s+$/g,"")}return ah},isOrWasNodeInViewport:function(am){if(!am||!am.getBoundingClientRect||am.nodeType!==1){return true}var al=am.getBoundingClientRect();var ak=D.documentElement||{};var aj=al.top<0;if(aj&&am.offsetTop){aj=(am.offsetTop+al.height)>0
-}var ai=ak.clientWidth;if(Q.innerWidth&&ai>Q.innerWidth){ai=Q.innerWidth}var ah=ak.clientHeight;if(Q.innerHeight&&ah>Q.innerHeight){ah=Q.innerHeight}return((al.bottom>0||aj)&&al.right>0&&al.left<ai&&((al.top<ah)||aj))},isNodeVisible:function(ai){var ah=i(ai);var aj=this.isOrWasNodeInViewport(ai);return ah&&aj},buildInteractionRequestParams:function(ah,ai,aj,ak){var al="";if(ah){al+="c_i="+r(ah)}if(ai){if(al){al+="&"}al+="c_n="+r(ai)}if(aj){if(al){al+="&"}al+="c_p="+r(aj)}if(ak){if(al){al+="&"}al+="c_t="+r(ak)}return al},buildImpressionRequestParams:function(ah,ai,aj){var ak="c_n="+r(ah)+"&c_p="+r(ai);if(aj){ak+="&c_t="+r(aj)}return ak},buildContentBlock:function(aj){if(!aj){return}var ah=this.findContentName(aj);var ai=this.findContentPiece(aj);var ak=this.findContentTarget(aj);ah=this.trim(ah);ai=this.trim(ai);ak=this.trim(ak);return{name:ah||"Unknown",piece:ai||"Unknown",target:ak||""}},collectContent:function(ak){if(!ak||!ak.length){return[]}var aj=[];var ah,ai;for(ah=0;ah<ak.length;
-ah++){ai=this.buildContentBlock(ak[ah]);if(G(ai)){aj.push(ai)}}return aj},setLocation:function(ah){this.location=ah},getLocation:function(){var ah=this.location||Q.location;if(!ah.origin){ah.origin=ah.protocol+"//"+ah.hostname+(ah.port?":"+ah.port:"")}return ah},toAbsoluteUrl:function(ai){if((!ai||String(ai)!==ai)&&ai!==""){return ai}if(""===ai){return this.getLocation().href}if(ai.search(/^\/\//)!==-1){return this.getLocation().protocol+ai}if(ai.search(/:\/\//)!==-1){return ai}if(0===ai.indexOf("#")){return this.getLocation().origin+this.getLocation().pathname+ai}if(0===ai.indexOf("?")){return this.getLocation().origin+this.getLocation().pathname+ai}if(0===ai.search("^[a-zA-Z]{2,11}:")){return ai}if(ai.search(/^\//)!==-1){return this.getLocation().origin+ai}var ah="(.*/)";var aj=this.getLocation().origin+this.getLocation().pathname.match(new RegExp(ah))[0];return aj+ai},isUrlToCurrentDomain:function(ai){var aj=this.toAbsoluteUrl(ai);if(!aj){return false}var ah=this.getLocation().origin;
-if(ah===aj){return true}if(0===String(aj).indexOf(ah)){if(":"===String(aj).substr(ah.length,1)){return false}return true}return false},setHrefAttribute:function(ai,ah){if(!ai||!ah){return}Y.setAnyAttribute(ai,"href",ah)},shouldIgnoreInteraction:function(aj){var ai=Y.hasNodeAttribute(aj,this.CONTENT_IGNOREINTERACTION_ATTR);var ah=Y.hasNodeCssClass(aj,this.CONTENT_IGNOREINTERACTION_CLASS);return ai||ah}};function L(ai,al){if(al){return al}ai=t.toAbsoluteUrl(ai);if(w(ai,"?")){var ak=ai.indexOf("?");ai=ai.slice(0,ak)}if(O(ai,"piwik.php")){ai=f(ai,"piwik.php".length)}else{if(O(ai,".php")){var ah=ai.lastIndexOf("/");var aj=1;ai=ai.slice(0,ah+aj)}}if(O(ai,"/js/")){ai=f(ai,"js/".length)}return ai}function K(an){var ap="Piwik_Overlay";var ai=new RegExp("index\\.php\\?module=Overlay&action=startOverlaySession&idSite=([0-9]+)&period=([^&]+)&date=([^&]+)(&segment=.*)?$");var aj=ai.exec(D.referrer);if(aj){var al=aj[1];if(al!==String(an)){return false}var am=aj[2],ah=aj[3],ak=aj[4];if(!ak){ak=""}else{if(ak.indexOf("&segment=")===0){ak=ak.substr("&segment=".length)
-}}Q.name=ap+"###"+am+"###"+ah+"###"+ak}var ao=Q.name.split("###");return ao.length===4&&ao[0]===ap}function U(ai,ao,ak){var an=Q.name.split("###"),am=an[1],ah=an[2],al=an[3],aj=L(ai,ao);m(aj+"plugins/Overlay/client/client.js?v=1",function(){Piwik_Overlay_Client.initialize(aj,ak,am,ah,al)})}function s(){var aj;try{aj=Q.frameElement}catch(ai){return true}if(G(aj)){return(aj&&String(aj.nodeName).toLowerCase()==="iframe")?true:false}try{return Q.self!==Q.top}catch(ah){return true}}function N(bW,bR){var br=this,bM=V(D.domain,Q.location.href,H()),cy=I(bM[0]),bw=n(bM[1]),a9=n(bM[2]),cw=false,b0="GET",cL=b0,az="application/x-www-form-urlencoded; charset=UTF-8",cf=az,av=bW||"",bq="",cC="",bO=bR||"",bj="",bx="",aT,a5="",cI=["7z","aac","apk","arc","arj","asf","asx","avi","azw3","bin","csv","deb","dmg","doc","docx","epub","exe","flv","gif","gz","gzip","hqx","ibooks","jar","jpg","jpeg","js","mobi","mp2","mp3","mp4","mpg","mpeg","mov","movie","msi","msp","odb","odf","odg","ods","odt","ogg","ogv","pdf","phps","png","ppt","pptx","qt","qtm","ra","ram","rar","rpm","sea","sit","tar","tbz","tbz2","bz","bz2","tgz","torrent","txt","wav","wma","wmv","wpd","xls","xlsx","xml","z","zip"],ao=[cy],bk=[],bu=[],aW=[],bs=500,co,aU,bA,by,ah,b9=["pk_campaign","piwik_campaign","utm_campaign","utm_source","utm_medium"],bp=["pk_kwd","piwik_kwd","utm_term"],a6="_pk_",an="pk_vid",cA,bb,a7=false,cu,a1,bg,cp=33955200000,b7=1800000,cH=15768000000,aR=true,b5=0,bz=false,aG=false,bT,bE={},b4={},a8={},be=200,cD={},cJ={},bS=[],bX=false,ci=false,ai=false,cK=false,cr=false,aE=false,a0=s(),cB=null,bU,aH,bl,bP=af,ba,aB,ca=0,bf=["id","ses","cvar","ref"];
-try{a5=D.title}catch(cg){a5=""}function cO(cZ,cW,cV,cY,cU,cX){if(a7){return}var cT;if(cV){cT=new Date();cT.setTime(cT.getTime()+cV)}D.cookie=cZ+"="+r(cW)+(cV?";expires="+cT.toGMTString():"")+";path="+(cY||"/")+(cU?";domain="+cU:"")+(cX?";secure":"")}function au(cV){if(a7){return 0}var cT=new RegExp("(^|;)[ ]*"+cV+"=([^;]*)"),cU=cT.exec(D.cookie);return cU?P(cU[2]):0}function bK(cT){var cU;cT=j(cT,an);if(by){cU=new RegExp("#.*");return cT.replace(cU,"")}return cT}function bD(cV,cT){var cW=q(cT),cU;if(cW){return cT}if(cT.slice(0,1)==="/"){return q(cV)+"://"+c(cV)+cT}cV=bK(cV);cU=cV.indexOf("?");if(cU>=0){cV=cV.slice(0,cU)}cU=cV.lastIndexOf("/");if(cU!==cV.length-1){cV=cV.slice(0,cU+1)}return cV+cT}function cn(cV,cT){var cU;cV=String(cV).toLowerCase();cT=String(cT).toLowerCase();if(cV===cT){return true}if(cT.slice(0,1)==="."){if(cV===cT.slice(1)){return true}cU=cV.length-cT.length;if((cU>0)&&(cV.slice(cU)===cT)){return true}}return false}function b3(cT){var cU=document.createElement("a");if(cT.indexOf("//")!==0&&cT.indexOf("http")!==0){if(cT.indexOf("*")===0){cT=cT.substr(1)
-}if(cT.indexOf(".")===0){cT=cT.substr(1)}cT="http://"+cT}cU.href=t.toAbsoluteUrl(cT);if(cU.pathname){return cU.pathname}return""}function aS(cU,cT){if(!ac(cT,"/")){cT="/"+cT}if(!ac(cU,"/")){cU="/"+cU}var cV=(cT==="/"||cT==="/*");if(cV){return true}if(cU===cT){return true}cT=String(cT).toLowerCase();cU=String(cU).toLowerCase();if(O(cT,"*")){cT=cT.slice(0,-1);cV=(!cT||cT==="/");if(cV){return true}if(cU===cT){return true}return cU.indexOf(cT)===0}if(!O(cU,"/")){cU+="/"}if(!O(cT,"/")){cT+="/"}return cU.indexOf(cT)===0}function ak(cX,cZ){var cU,cT,cV,cW,cY;for(cU=0;cU<ao.length;cU++){cW=I(ao[cU]);cY=b3(ao[cU]);if(cn(cX,cW)&&aS(cZ,cY)){return true}}return false}function aL(cW){var cU,cT,cV;for(cU=0;cU<ao.length;cU++){cT=I(ao[cU].toLowerCase());if(cW===cT){return true}if(cT.slice(0,1)==="."){if(cW===cT.slice(1)){return true}cV=cW.length-cT.length;if((cV>0)&&(cW.slice(cV)===cT)){return true}}}return false}function b8(cT,cV){var cU=new Image(1,1);cU.onload=function(){B=0;if(typeof cV==="function"){cV()
-}};cT=cT.replace("send_image=0","send_image=1");cU.src=av+(av.indexOf("?")<0?"?":"&")+cT}function cG(cU,cX,cT){if(!G(cT)||null===cT){cT=true}try{var cW=Q.XMLHttpRequest?new Q.XMLHttpRequest():Q.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):null;cW.open("POST",av,true);cW.onreadystatechange=function(){if(this.readyState===4&&!(this.status>=200&&this.status<300)&&cT){b8(cU,cX)}else{if(this.readyState===4&&(typeof cX==="function")){cX()}}};cW.setRequestHeader("Content-Type",cf);cW.send(cU)}catch(cV){if(cT){b8(cU,cX)}}}function bY(cU){var cT=new Date();var cV=cT.getTime()+cU;if(!p||cV>p){p=cV}}function b6(cT){if(bU||!aU){return}bU=setTimeout(function cU(){bU=null;if(!a0){a0=(!D.hasFocus||D.hasFocus())}if(!a0){b6(aU);return}if(bA()){return}var cV=new Date(),cW=aU-(cV.getTime()-cB);cW=Math.min(aU,cW);b6(cW)},cT||aU)}function bt(){if(!bU){return}clearTimeout(bU);bU=null}function aY(){a0=true;if(bA()){return}b6()}function ap(){bt()}function cQ(){if(aE||!aU){return}aE=true;ag(Q,"focus",aY);
-ag(Q,"blur",ap);b6()}function cj(cX){var cU=new Date();var cT=cU.getTime();cB=cT;if(ci&&cT<ci){var cV=ci-cT;setTimeout(cX,cV);bY(cV+50);ci+=50;return}if(ci===false){var cW=800;ci=cT+cW}cX()}function bo(cU,cT,cV){if(!cu&&cU){cj(function(){if(cL==="POST"||String(cU).length>2000){cG(cU,cV)}else{b8(cU,cV)}bY(cT)})}if(!aE){cQ()}else{b6()}}function b2(cT){if(cu){return false}return(cT&&cT.length)}function cP(cV,cT){if(!b2(cV)){return}var cU='{"requests":["?'+cV.join('","?')+'"]}';cj(function(){cG(cU,null,false);bY(cT)})}function aJ(cT){return a6+cT+"."+bO+"."+ba}function bN(){if(a7){return"0"}if(!G(g.cookieEnabled)){var cT=aJ("testcookie");cO(cT,"1");return au(cT)==="1"?"1":"0"}return g.cookieEnabled?"1":"0"}function a4(){ba=bP((cA||cy)+(bb||"/")).slice(0,4)}function bF(){var cU=aJ("cvar"),cT=au(cU);if(cT.length){cT=JSON_PIWIK.parse(cT);if(S(cT)){return cT}}return{}}function ck(){if(aG===false){aG=bF()}}function cv(){return bP((g.userAgent||"")+(g.platform||"")+JSON_PIWIK.stringify(cJ)+(new Date()).getTime()+Math.random()).slice(0,16)
-}function aq(){return bP((g.userAgent||"")+(g.platform||"")+JSON_PIWIK.stringify(cJ)).slice(0,6)}function a2(){return Math.floor((new Date()).getTime()/1000)}function aA(){var cU=a2();var cV=aq();var cT=String(cU)+cV;return cT}function cF(cW){cW=String(cW);var cZ=aq();var cX=cZ.length;var cY=cW.substr(-1*cX,cX);var cV=parseInt(cW.substr(0,cW.length-cX),10);if(cV&&cY&&cY===cZ){var cT=a2();var cU=45;if(cT>=cV&&cT<=(cV+cU)){return true}}return false}function cR(cT){if(!cr){return""}var cX=e(cT,an);if(!cX){return""}cX=String(cX);var cV=new RegExp("^[a-zA-Z0-9]+$");if(cX.length===32&&cV.test(cX)){var cU=cX.substr(16,32);if(cF(cU)){var cW=cX.substr(0,16);return cW}}return""}function cs(){if(!bx){bx=cR(bw)}var cV=new Date(),cT=Math.round(cV.getTime()/1000),cU=aJ("id"),cY=au(cU),cX,cW;if(cY){cX=cY.split(".");cX.unshift("0");if(bx.length){cX[1]=bx}return cX}if(bx.length){cW=bx}else{if("0"===bN()){cW=""}else{cW=cv()}}cX=["1",cW,cT,0,cT,"",""];return cX}function aN(){var c0=cs(),cW=c0[0],cX=c0[1],cU=c0[2],cT=c0[3],cY=c0[4],cV=c0[5];
-if(!G(c0[6])){c0[6]=""}var cZ=c0[6];return{newVisitor:cW,uuid:cX,createTs:cU,visitCount:cT,currentVisitTs:cY,lastVisitTs:cV,lastEcommerceOrderTs:cZ}}function ay(){var cW=new Date(),cU=cW.getTime(),cX=aN().createTs;var cT=parseInt(cX,10);var cV=(cT*1000)+cp-cU;return cV}function aC(cT){if(!bO){return}var cV=new Date(),cU=Math.round(cV.getTime()/1000);if(!G(cT)){cT=aN()}var cW=cT.uuid+"."+cT.createTs+"."+cT.visitCount+"."+cU+"."+cT.lastVisitTs+"."+cT.lastEcommerceOrderTs;cO(aJ("id"),cW,ay(),bb,cA)}function bv(){var cT=au(aJ("ref"));if(cT.length){try{cT=JSON_PIWIK.parse(cT);if(S(cT)){return cT}}catch(cU){}}return["","",0,""]}function bG(cV,cU,cT){cO(cV,"",-86400,cU,cT)}function bh(cU){var cT="testvalue";cO("test",cT,10000,null,cU);if(au("test")===cT){bG("test",null,cU);return true}return false}function aw(){var cU=a7;a7=false;var cT,cV;for(cT=0;cT<bf.length;cT++){cV=aJ(bf[cT]);if(0!==au(cV)){bG(cV,bb,cA)}}a7=cU}function bL(cT){bO=cT;aC()}function cS(cX){if(!cX||!S(cX)){return}var cW=[];var cV;
-for(cV in cX){if(Object.prototype.hasOwnProperty.call(cX,cV)){cW.push(cV)}}var cY={};cW.sort();var cT=cW.length;var cU;for(cU=0;cU<cT;cU++){cY[cW[cU]]=cX[cW[cU]]}return cY}function bV(){cO(aJ("ses"),"*",b7,bb,cA)}function a3(){var cW="";var cU="abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";var cV=cU.length;var cT;for(cT=0;cT<6;cT++){cW+=cU.charAt(Math.floor(Math.random()*cV))}return cW}function cb(cV,dg,dh,cW){var df,cU=new Date(),c3=Math.round(cU.getTime()/1000),c0,de,cX=1024,dm,c4,dc=aG,cY=aJ("ses"),da=aJ("ref"),c7=aJ("cvar"),c8=au(cY),dd=bv(),dj=aT||bw,c1,cT;if(a7){aw()}if(cu){return""}var c9=aN();if(!G(cW)){cW=""}var c6=D.characterSet||D.charset;if(!c6||c6.toLowerCase()==="utf-8"){c6=null}c1=dd[0];cT=dd[1];c0=dd[2];de=dd[3];if(!c8){var di=b7/1000;if(!c9.lastVisitTs||(c3-c9.lastVisitTs)>di){c9.visitCount++;c9.lastVisitTs=c9.currentVisitTs}if(!bg||!c1.length){for(df in b9){if(Object.prototype.hasOwnProperty.call(b9,df)){c1=e(dj,b9[df]);if(c1.length){break}}}for(df in bp){if(Object.prototype.hasOwnProperty.call(bp,df)){cT=e(dj,bp[df]);
-if(cT.length){break}}}}dm=c(a9);c4=de.length?c(de):"";if(dm.length&&!aL(dm)&&(!bg||!c4.length||aL(c4))){de=a9}if(de.length||c1.length){c0=c3;dd=[c1,cT,c0,bK(de.slice(0,cX))];cO(da,JSON_PIWIK.stringify(dd),cH,bb,cA)}}cV+="&idsite="+bO+"&rec=1&r="+String(Math.random()).slice(2,8)+"&h="+cU.getHours()+"&m="+cU.getMinutes()+"&s="+cU.getSeconds()+"&url="+r(bK(dj))+(a9.length?"&urlref="+r(bK(a9)):"")+((bj&&bj.length)?"&uid="+r(bj):"")+"&_id="+c9.uuid+"&_idts="+c9.createTs+"&_idvc="+c9.visitCount+"&_idn="+c9.newVisitor+(c1.length?"&_rcn="+r(c1):"")+(cT.length?"&_rck="+r(cT):"")+"&_refts="+c0+"&_viewts="+c9.lastVisitTs+(String(c9.lastEcommerceOrderTs).length?"&_ects="+c9.lastEcommerceOrderTs:"")+(String(de).length?"&_ref="+r(bK(de.slice(0,cX))):"")+(c6?"&cs="+r(c6):"")+"&send_image=0";for(df in cJ){if(Object.prototype.hasOwnProperty.call(cJ,df)){cV+="&"+df+"="+cJ[df]}}var dl=[];if(dg){for(df in dg){if(Object.prototype.hasOwnProperty.call(dg,df)&&/^dimension\d+$/.test(df)){var cZ=df.replace("dimension","");
-dl.push(parseInt(cZ,10));dl.push(String(cZ));cV+="&"+df+"="+dg[df];delete dg[df]}}}if(dg&&y(dg)){dg=null}for(df in a8){if(Object.prototype.hasOwnProperty.call(a8,df)){var c5=(-1===J(dl,df));if(c5){cV+="&dimension"+df+"="+a8[df]}}}if(dg){cV+="&data="+r(JSON_PIWIK.stringify(dg))}else{if(ah){cV+="&data="+r(JSON_PIWIK.stringify(ah))}}function c2(dn,dp){var dq=JSON_PIWIK.stringify(dn);if(dq.length>2){return"&"+dp+"="+r(dq)}return""}var dk=cS(bE);var db=cS(b4);cV+=c2(dk,"cvar");cV+=c2(db,"e_cvar");if(aG){cV+=c2(aG,"_cvar");for(df in dc){if(Object.prototype.hasOwnProperty.call(dc,df)){if(aG[df][0]===""||aG[df][1]===""){delete aG[df]}}}if(bz){cO(c7,JSON_PIWIK.stringify(aG),b7,bb,cA)}}if(aR){if(b5){cV+="&gt_ms="+b5}else{if(h&&h.timing&&h.timing.requestStart&&h.timing.responseEnd){cV+="&gt_ms="+(h.timing.responseEnd-h.timing.requestStart)}}}if(aB){cV+="&pv_id="+aB}c9.lastEcommerceOrderTs=G(cW)&&String(cW).length?cW:c9.lastEcommerceOrderTs;aC(c9);bV();cV+=W(dh,{tracker:br,request:cV});if(cC.length){cV+="&"+cC
-}if(x(bT)){cV=bT(cV)}return cV}bA=function aV(){var cT=new Date();if(cB+aU<=cT.getTime()){var cU=cb("ping=1",null,"ping");bo(cU,bs);return true}return false};function bc(cW,cV,c1,cX,cT,c4){var cZ="idgoal=0",c0,cU=new Date(),c2=[],c3,cY=String(cW).length;if(cY){cZ+="&ec_id="+r(cW);c0=Math.round(cU.getTime()/1000)}cZ+="&revenue="+cV;if(String(c1).length){cZ+="&ec_st="+c1}if(String(cX).length){cZ+="&ec_tx="+cX}if(String(cT).length){cZ+="&ec_sh="+cT}if(String(c4).length){cZ+="&ec_dt="+c4}if(cD){for(c3 in cD){if(Object.prototype.hasOwnProperty.call(cD,c3)){if(!G(cD[c3][1])){cD[c3][1]=""}if(!G(cD[c3][2])){cD[c3][2]=""}if(!G(cD[c3][3])||String(cD[c3][3]).length===0){cD[c3][3]=0}if(!G(cD[c3][4])||String(cD[c3][4]).length===0){cD[c3][4]=1}c2.push(cD[c3])}}cZ+="&ec_items="+r(JSON_PIWIK.stringify(c2))}cZ=cb(cZ,ah,"ecommerce",c0);bo(cZ,bs);if(cY){cD={}}}function bH(cT,cX,cW,cV,cU,cY){if(String(cT).length&&G(cX)){bc(cT,cX,cW,cV,cU,cY)}}function bd(cT){if(G(cT)){bc("",cT,"","","","")}}function bI(cU,cW,cV){aB=a3();
-var cT=cb("action_name="+r(ae(cU||a5)),cW,"log");bo(cT,bs,cV)}function aP(cV,cU){var cW,cT="(^| )(piwik[_-]"+cU;if(cV){for(cW=0;cW<cV.length;cW++){cT+="|"+cV[cW]}}cT+=")( |$)";return new RegExp(cT)}function aK(cT){return(av&&cT&&0===String(cT).indexOf(av))}function cc(cX,cT,cY,cU){if(aK(cT)){return 0}var cW=aP(bu,"download"),cV=aP(aW,"link"),cZ=new RegExp("\\.("+cI.join("|")+")([?&#]|$)","i");if(cV.test(cX)){return"link"}if(cU||cW.test(cX)||cZ.test(cT)){return"download"}if(cY){return 0}return"link"}function am(cU){var cT;cT=cU.parentNode;while(cT!==null&&G(cT)){if(Y.isLinkElement(cU)){break}cU=cT;cT=cU.parentNode}return cU}function cM(cY){cY=am(cY);if(!Y.hasNodeAttribute(cY,"href")){return}if(!G(cY.href)){return}var cX=Y.getAttributeValueFromNode(cY,"href");if(aK(cX)){return}var cU=cY.pathname||b3(cY.href);var cZ=cY.hostname||c(cY.href);var c0=cZ.toLowerCase();var cV=cY.href.replace(cZ,c0);var cW=new RegExp("^(javascript|vbscript|jscript|mocha|livescript|ecmascript|mailto|tel):","i");if(!cW.test(cV)){var cT=cc(cY.className,cV,ak(c0,cU),Y.hasNodeAttribute(cY,"download"));
-if(cT){return{type:cT,href:cV}}}}function aF(cT,cU,cV,cW){var cX=t.buildInteractionRequestParams(cT,cU,cV,cW);if(!cX){return}return cb(cX,null,"contentInteraction")}function cq(cV,cW,c0,cT,cU){if(!G(cV)){return}if(aK(cV)){return cV}var cY=t.toAbsoluteUrl(cV);var cX="redirecturl="+r(cY)+"&";cX+=aF(cW,c0,cT,(cU||cV));var cZ="&";if(av.indexOf("?")<0){cZ="?"}return av+cZ+cX}function aZ(cT,cU){if(!cT||!cU){return false}var cV=t.findTargetNode(cT);if(t.shouldIgnoreInteraction(cV)){return false}cV=t.findTargetNodeNoDefault(cT);if(cV&&!R(cV,cU)){return false}return true}function cd(cV,cU,cX){if(!cV){return}var cT=t.findParentContentNode(cV);if(!cT){return}if(!aZ(cT,cV)){return}var cW=t.buildContentBlock(cT);if(!cW){return}if(!cW.target&&cX){cW.target=cX}return t.buildInteractionRequestParams(cU,cW.name,cW.piece,cW.target)}function aM(cU){if(!bS||!bS.length){return false}var cT,cV;for(cT=0;cT<bS.length;cT++){cV=bS[cT];if(cV&&cV.name===cU.name&&cV.piece===cU.piece&&cV.target===cU.target){return true
-}}return false}function bn(cW){if(!cW){return false}var cZ=t.findTargetNode(cW);if(!cZ||t.shouldIgnoreInteraction(cZ)){return false}var c0=cM(cZ);if(cK&&c0&&c0.type){return false}if(Y.isLinkElement(cZ)&&Y.hasNodeAttributeWithValue(cZ,"href")){var cT=String(Y.getAttributeValueFromNode(cZ,"href"));if(0===cT.indexOf("#")){return false}if(aK(cT)){return true}if(!t.isUrlToCurrentDomain(cT)){return false}var cX=t.buildContentBlock(cW);if(!cX){return}var cV=cX.name;var c1=cX.piece;var cY=cX.target;if(!Y.hasNodeAttributeWithValue(cZ,t.CONTENT_TARGET_ATTR)||cZ.wasContentTargetAttrReplaced){cZ.wasContentTargetAttrReplaced=true;cY=t.toAbsoluteUrl(cT);Y.setAnyAttribute(cZ,t.CONTENT_TARGET_ATTR,cY)}var cU=cq(cT,"click",cV,c1,cY);t.setHrefAttribute(cZ,cU);return true}return false}function aD(cU){if(!cU||!cU.length){return}var cT;for(cT=0;cT<cU.length;cT++){bn(cU[cT])}}function aO(cT){return function(cU){if(!cT){return}var cX=t.findParentContentNode(cT);var cY;if(cU){cY=cU.target||cU.srcElement}if(!cY){cY=cT
-}if(!aZ(cX,cY)){return}bY(bs);if(Y.isLinkElement(cT)&&Y.hasNodeAttributeWithValue(cT,"href")&&Y.hasNodeAttributeWithValue(cT,t.CONTENT_TARGET_ATTR)){var cV=Y.getAttributeValueFromNode(cT,"href");if(!aK(cV)&&cT.wasContentTargetAttrReplaced){Y.setAnyAttribute(cT,t.CONTENT_TARGET_ATTR,"")}}var c2=cM(cT);if(ai&&c2&&c2.type){return c2.type}if(bn(cX)){return"href"}var cZ=t.buildContentBlock(cX);if(!cZ){return}var cW=cZ.name;var c3=cZ.piece;var c1=cZ.target;var c0=aF("click",cW,c3,c1);bo(c0,bs);return c0}}function bJ(cV){if(!cV||!cV.length){return}var cT,cU;for(cT=0;cT<cV.length;cT++){cU=t.findTargetNode(cV[cT]);if(cU&&!cU.contentInteractionTrackingSetupDone){cU.contentInteractionTrackingSetupDone=true;ag(cU,"click",aO(cU))}}}function bi(cV,cW){if(!cV||!cV.length){return[]}var cT,cU;for(cT=0;cT<cV.length;cT++){if(aM(cV[cT])){cV.splice(cT,1);cT--}else{bS.push(cV[cT])}}if(!cV||!cV.length){return[]}aD(cW);bJ(cW);var cX=[];for(cT=0;cT<cV.length;cT++){cU=cb(t.buildImpressionRequestParams(cV[cT].name,cV[cT].piece,cV[cT].target),undefined,"contentImpressions");
-if(cU){cX.push(cU)}}return cX}function ch(cU){var cT=t.collectContent(cU);return bi(cT,cU)}function aX(cU){if(!cU||!cU.length){return[]}var cT;for(cT=0;cT<cU.length;cT++){if(!t.isNodeVisible(cU[cT])){cU.splice(cT,1);cT--}}if(!cU||!cU.length){return[]}return ch(cU)}function ax(cV,cT,cU){var cW=t.buildImpressionRequestParams(cV,cT,cU);return cb(cW,null,"contentImpression")}function cN(cW,cU){if(!cW){return}var cT=t.findParentContentNode(cW);var cV=t.buildContentBlock(cT);if(!cV){return}if(!cU){cU="Unknown"}return aF(cU,cV.name,cV.piece,cV.target)}function ct(cU,cW,cT,cV){return"e_c="+r(cU)+"&e_a="+r(cW)+(G(cT)?"&e_n="+r(cT):"")+(G(cV)?"&e_v="+r(cV):"")}function al(cV,cX,cT,cW,cZ,cY){if(String(cV).length===0||String(cX).length===0){return false}var cU=cb(ct(cV,cX,cT,cW),cZ,"event");bo(cU,bs,cY)}function bQ(cT,cW,cU,cX){var cV=cb("search="+r(cT)+(cW?"&search_cat="+r(cW):"")+(G(cU)?"&search_count="+cU:""),cX,"sitesearch");bo(cV,bs)}function cx(cT,cW,cV){var cU=cb("idgoal="+cT+(cW?"&revenue="+cW:""),cV,"goal");
-bo(cU,bs)}function cE(cW,cT,c0,cZ,cV){var cY=cT+"="+r(bK(cW));var cU=cd(cV,"click",cW);if(cU){cY+="&"+cU}var cX=cb(cY,c0,"link");bo(cX,bs,cZ)}function bC(cU,cT){if(cU!==""){return cU+cT.charAt(0).toUpperCase()+cT.slice(1)}return cT}function bZ(cY){var cX,cT,cW=["","webkit","ms","moz"],cV;if(!a1){for(cT=0;cT<cW.length;cT++){cV=cW[cT];if(Object.prototype.hasOwnProperty.call(D,bC(cV,"hidden"))){if(D[bC(cV,"visibilityState")]==="prerender"){cX=true}break}}}if(cX){ag(D,cV+"visibilitychange",function cU(){D.removeEventListener(cV+"visibilitychange",cU,false);cY()});return}cY()}function b1(cT){if(!cT){return}if(!Y.hasNodeAttribute(cT,"href")){return}var cU=Y.getAttributeValueFromNode(cT,"href");if(!cU||aK(cU)){return}cU=j(cU,an);if(cU.indexOf("?")>0){cU+="&"}else{cU+="?"}var cW=aN().uuid;var cV=aA();cU=C(cU,an,cW+cV);Y.setAnyAttribute(cT,"href",cU)}function ar(cW){var cX=Y.getAttributeValueFromNode(cW,"href");if(!cX){return false}cX=String(cX);var cU=cX.indexOf("//")===0||cX.indexOf("http://")===0||cX.indexOf("https://")===0;
-if(!cU){return false}var cT=cW.pathname||b3(cW.href);var cV=(cW.hostname||c(cW.href)).toLowerCase();if(ak(cV,cT)){if(!cn(cy,I(cV))){return true}return false}return false}function cm(cT){var cU=cM(cT);if(cU&&cU.type){cU.href=n(cU.href);cE(cU.href,cU.type,undefined,null,cT);return}if(cr){cT=am(cT);if(ar(cT)){b1(cT)}}}function ce(){return D.all&&!D.addEventListener}function cz(cT){var cV=cT.which;var cU=(typeof cT.button);if(!cV&&cU!=="undefined"){if(ce()){if(cT.button&1){cV=1}else{if(cT.button&2){cV=3}else{if(cT.button&4){cV=2}}}}else{if(cT.button===0||cT.button==="0"){cV=1}else{if(cT.button&1){cV=2}else{if(cT.button&2){cV=3}}}}}return cV}function bB(cT){switch(cz(cT)){case 1:return"left";case 2:return"middle";case 3:return"right"}}function aQ(cT){return cT.target||cT.srcElement}function at(cT){return function(cW){cW=cW||Q.event;var cV=bB(cW);var cX=aQ(cW);if(cW.type==="click"){var cU=false;if(cT&&cV==="middle"){cU=true}if(cX&&!cU){cm(cX)}}else{if(cW.type==="mousedown"){if(cV==="middle"&&cX){aH=cV;
-bl=cX}else{aH=bl=null}}else{if(cW.type==="mouseup"){if(cV===aH&&cX===bl){cm(cX)}aH=bl=null}else{if(cW.type==="contextmenu"){cm(cX)}}}}}}function aj(cV,cU){var cT=typeof cU;if(cT==="undefined"){cU=true}ag(cV,"click",at(cU),false);if(cU){ag(cV,"mouseup",at(cU),false);ag(cV,"mousedown",at(cU),false);ag(cV,"contextmenu",at(cU),false)}}function bm(cV,cX){ai=true;var cW,cU=aP(bk,"ignore"),cY=D.links,cT=null,cZ=null;if(cY){for(cW=0;cW<cY.length;cW++){cT=cY[cW];if(!cU.test(cT.className)){cZ=typeof cT.piwikTrackers;if("undefined"===cZ){cT.piwikTrackers=[]}if(-1===J(cT.piwikTrackers,cX)){cT.piwikTrackers.push(cX);aj(cT,cV)}}}}}function aI(cV,cX,cY){if(bX){return true}bX=true;var cZ=false;var cW,cU;function cT(){cZ=true}l(function(){function c0(c2){setTimeout(function(){if(!bX){return}cZ=false;cY.trackVisibleContentImpressions();c0(c2)},c2)}function c1(c2){setTimeout(function(){if(!bX){return}if(cZ){cZ=false;cY.trackVisibleContentImpressions()}c1(c2)},c2)}if(cV){cW=["scroll","resize"];for(cU=0;cU<cW.length;
-cU++){if(D.addEventListener){D.addEventListener(cW[cU],cT)}else{Q.attachEvent("on"+cW[cU],cT)}}c1(100)}if(cX&&cX>0){cX=parseInt(cX,10);c0(cX)}})}function cl(){var cU,cW,cX={pdf:"application/pdf",qt:"video/quicktime",realp:"audio/x-pn-realaudio-plugin",wma:"application/x-mplayer2",dir:"application/x-director",fla:"application/x-shockwave-flash",java:"application/x-java-vm",gears:"application/x-googlegears",ag:"application/x-silverlight"};if(!((new RegExp("MSIE")).test(g.userAgent))){if(g.mimeTypes&&g.mimeTypes.length){for(cU in cX){if(Object.prototype.hasOwnProperty.call(cX,cU)){cW=g.mimeTypes[cX[cU]];cJ[cU]=(cW&&cW.enabledPlugin)?"1":"0"}}}if(typeof navigator.javaEnabled!=="unknown"&&G(g.javaEnabled)&&g.javaEnabled()){cJ.java="1"}if(x(Q.GearsFactory)){cJ.gears="1"}cJ.cookie=bN()}var cV=parseInt(T.width,10);var cT=parseInt(T.height,10);cJ.res=parseInt(cV,10)+"x"+parseInt(cT,10)}cl();a4();aC();this.getVisitorId=function(){return aN().uuid};this.getVisitorInfo=function(){return cs()};this.getAttributionInfo=function(){return bv()
-};this.getAttributionCampaignName=function(){return bv()[0]};this.getAttributionCampaignKeyword=function(){return bv()[1]};this.getAttributionReferrerTimestamp=function(){return bv()[2]};this.getAttributionReferrerUrl=function(){return bv()[3]};this.setTrackerUrl=function(cT){av=cT};this.getTrackerUrl=function(){return av};this.getPiwikUrl=function(){return L(this.getTrackerUrl(),bq)};this.addTracker=function(cT,cV){if(!cV){throw new Error("A siteId must be given to add a new tracker")}if(!G(cT)||null===cT){cT=this.getTrackerUrl()}var cU=new N(cT,cV);F.push(cU);return cU};this.getSiteId=function(){return bO};this.setSiteId=function(cT){bL(cT)};this.setUserId=function(cT){if(!G(cT)||!cT.length){return}bj=cT;bx=bP(bj).substr(0,16)};this.getUserId=function(){return bj};this.setCustomData=function(cT,cU){if(S(cT)){ah=cT}else{if(!ah){ah={}}ah[cT]=cU}};this.getCustomData=function(){return ah};this.setCustomRequestProcessing=function(cT){bT=cT};this.appendToTrackingUrl=function(cT){cC=cT};this.getRequest=function(cT){return cb(cT)
-};this.addPlugin=function(cT,cU){a[cT]=cU};this.setCustomDimension=function(cT,cU){cT=parseInt(cT,10);if(cT>0){if(!G(cU)){cU=""}if(!u(cU)){cU=String(cU)}a8[cT]=cU}};this.getCustomDimension=function(cT){cT=parseInt(cT,10);if(cT>0&&Object.prototype.hasOwnProperty.call(a8,cT)){return a8[cT]}};this.deleteCustomDimension=function(cT){cT=parseInt(cT,10);if(cT>0){delete a8[cT]}};this.setCustomVariable=function(cU,cT,cX,cV){var cW;if(!G(cV)){cV="visit"}if(!G(cT)){return}if(!G(cX)){cX=""}if(cU>0){cT=!u(cT)?String(cT):cT;cX=!u(cX)?String(cX):cX;cW=[cT.slice(0,be),cX.slice(0,be)];if(cV==="visit"||cV===2){ck();aG[cU]=cW}else{if(cV==="page"||cV===3){bE[cU]=cW}else{if(cV==="event"){b4[cU]=cW}}}}};this.getCustomVariable=function(cU,cV){var cT;if(!G(cV)){cV="visit"}if(cV==="page"||cV===3){cT=bE[cU]}else{if(cV==="event"){cT=b4[cU]}else{if(cV==="visit"||cV===2){ck();cT=aG[cU]}}}if(!G(cT)||(cT&&cT[0]==="")){return false}return cT};this.deleteCustomVariable=function(cT,cU){if(this.getCustomVariable(cT,cU)){this.setCustomVariable(cT,"","",cU)
-}};this.deleteCustomVariables=function(cT){if(cT==="page"||cT===3){bE={}}else{if(cT==="event"){b4={}}else{if(cT==="visit"||cT===2){aG={}}}}};this.storeCustomVariablesInCookie=function(){bz=true};this.setLinkTrackingTimer=function(cT){bs=cT};this.getLinkTrackingTimer=function(){return bs};this.setDownloadExtensions=function(cT){if(u(cT)){cT=cT.split("|")}cI=cT};this.addDownloadExtensions=function(cU){var cT;if(u(cU)){cU=cU.split("|")}for(cT=0;cT<cU.length;cT++){cI.push(cU[cT])}};this.removeDownloadExtensions=function(cV){var cU,cT=[];if(u(cV)){cV=cV.split("|")}for(cU=0;cU<cI.length;cU++){if(J(cV,cI[cU])===-1){cT.push(cI[cU])}}cI=cT};this.setDomains=function(cT){ao=u(cT)?[cT]:cT;var cX=false,cV=0,cU;for(cV;cV<ao.length;cV++){cU=String(ao[cV]);if(cn(cy,I(cU))){cX=true;break}var cW=b3(cU);if(cW&&cW!=="/"&&cW!=="/*"){cX=true;break}}if(!cX){ao.push(cy)}};this.enableCrossDomainLinking=function(){cr=true};this.disableCrossDomainLinking=function(){cr=false};this.isCrossDomainLinkingEnabled=function(){return cr
-};this.setIgnoreClasses=function(cT){bk=u(cT)?[cT]:cT};this.setRequestMethod=function(cT){cL=cT||b0};this.setRequestContentType=function(cT){cf=cT||az};this.setReferrerUrl=function(cT){a9=cT};this.setCustomUrl=function(cT){aT=bD(bw,cT)};this.getCurrentUrl=function(){return aT||bw};this.setDocumentTitle=function(cT){a5=cT};this.setAPIUrl=function(cT){bq=cT};this.setDownloadClasses=function(cT){bu=u(cT)?[cT]:cT};this.setLinkClasses=function(cT){aW=u(cT)?[cT]:cT};this.setCampaignNameKey=function(cT){b9=u(cT)?[cT]:cT};this.setCampaignKeywordKey=function(cT){bp=u(cT)?[cT]:cT};this.discardHashTag=function(cT){by=cT};this.setCookieNamePrefix=function(cT){a6=cT;aG=bF()};this.setCookieDomain=function(cT){var cU=I(cT);if(bh(cU)){cA=cU;a4()}};this.getCookieDomain=function(){return cA};this.hasCookies=function(){return"1"===bN()};this.setSessionCookie=function(cV,cU,cT){if(!cV){throw new Error("Missing cookie name")}if(!G(cT)){cT=b7}bf.push(cV);cO(aJ(cV),cU,cT,bb,cA)};this.getCookie=function(cU){var cT=au(aJ(cU));
-if(cT===0){return null}return cT};this.setCookiePath=function(cT){bb=cT;a4()};this.getCookiePath=function(cT){return bb};this.setVisitorCookieTimeout=function(cT){cp=cT*1000};this.setSessionCookieTimeout=function(cT){b7=cT*1000};this.getSessionCookieTimeout=function(){return b7};this.setReferralCookieTimeout=function(cT){cH=cT*1000};this.setConversionAttributionFirstReferrer=function(cT){bg=cT};this.disableCookies=function(){a7=true;cJ.cookie="0";if(bO){aw()}};this.deleteCookies=function(){aw()};this.setDoNotTrack=function(cU){var cT=g.doNotTrack||g.msDoNotTrack;cu=cU&&(cT==="yes"||cT==="1");if(cu){this.disableCookies()}};this.addListener=function(cU,cT){aj(cU,cT)};this.enableLinkTracking=function(cU){cK=true;var cT=this;bZ(function(){o(function(){bm(cU,cT)})})};this.enableJSErrorTracking=function(){if(cw){return}cw=true;var cT=Q.onerror;Q.onerror=function(cY,cW,cV,cX,cU){bZ(function(){var cZ="JavaScript Errors";var c0=cW+":"+cV;if(cX){c0+=":"+cX}al(cZ,c0,cY)});if(cT){return cT(cY,cW,cV,cX,cU)
-}return false}};this.disablePerformanceTracking=function(){aR=false};this.setGenerationTimeMs=function(cT){b5=parseInt(cT,10)};this.enableHeartBeatTimer=function(cT){cT=Math.max(cT,1);aU=(cT||15)*1000;if(cB!==null){cQ()}};this.disableHeartBeatTimer=function(){bt();if(aU||aE){if(Q.removeEventListener){Q.removeEventListener("focus",aY,true);Q.removeEventListener("blur",ap,true)}else{if(Q.detachEvent){Q.detachEvent("onfocus",aY);Q.detachEvent("onblur",ap)}}}aU=null;aE=false};this.killFrame=function(){if(Q.location!==Q.top.location){Q.top.location=Q.location}};this.redirectFile=function(cT){if(Q.location.protocol==="file:"){Q.location=cT}};this.setCountPreRendered=function(cT){a1=cT};this.trackGoal=function(cT,cV,cU){bZ(function(){cx(cT,cV,cU)})};this.trackLink=function(cU,cT,cW,cV){bZ(function(){cE(cU,cT,cW,cV)})};this.getNumTrackedPageViews=function(){return ca};this.trackPageView=function(cT,cV,cU){bS=[];if(K(bO)){bZ(function(){U(av,bq,bO)})}else{bZ(function(){ca++;bI(cT,cV,cU)})}};this.trackAllContentImpressions=function(){if(K(bO)){return
-}bZ(function(){o(function(){var cT=t.findContentNodes();var cU=ch(cT);cP(cU,bs)})})};this.trackVisibleContentImpressions=function(cT,cU){if(K(bO)){return}if(!G(cT)){cT=true}if(!G(cU)){cU=750}aI(cT,cU,this);bZ(function(){l(function(){var cV=t.findContentNodes();var cW=aX(cV);cP(cW,bs)})})};this.trackContentImpression=function(cV,cT,cU){if(K(bO)){return}if(!cV){return}cT=cT||"Unknown";bZ(function(){var cW=ax(cV,cT,cU);bo(cW,bs)})};this.trackContentImpressionsWithinNode=function(cT){if(K(bO)||!cT){return}bZ(function(){if(bX){l(function(){var cU=t.findContentNodesWithinNode(cT);var cV=aX(cU);cP(cV,bs)})}else{o(function(){var cU=t.findContentNodesWithinNode(cT);var cV=ch(cU);cP(cV,bs)})}})};this.trackContentInteraction=function(cV,cW,cT,cU){if(K(bO)){return}if(!cV||!cW){return}cT=cT||"Unknown";bZ(function(){var cX=aF(cV,cW,cT,cU);bo(cX,bs)})};this.trackContentInteractionNode=function(cU,cT){if(K(bO)||!cU){return}bZ(function(){var cV=cN(cU,cT);bo(cV,bs)})};this.logAllContentBlocksOnPage=function(){var cV=t.findContentNodes();
-var cT=t.collectContent(cV);var cU=typeof console;if(cU!=="undefined"&&console&&console.log){console.log(cT)}};this.trackEvent=function(cU,cW,cT,cV,cY,cX){bZ(function(){al(cU,cW,cT,cV,cY,cX)})};this.trackSiteSearch=function(cT,cV,cU,cW){bZ(function(){bQ(cT,cV,cU,cW)})};this.setEcommerceView=function(cW,cT,cV,cU){if(!G(cV)||!cV.length){cV=""}else{if(cV instanceof Array){cV=JSON_PIWIK.stringify(cV)}}bE[5]=["_pkc",cV];if(G(cU)&&String(cU).length){bE[2]=["_pkp",cU]}if((!G(cW)||!cW.length)&&(!G(cT)||!cT.length)){return}if(G(cW)&&cW.length){bE[3]=["_pks",cW]}if(!G(cT)||!cT.length){cT=""}bE[4]=["_pkn",cT]};this.addEcommerceItem=function(cX,cT,cV,cU,cW){if(cX.length){cD[cX]=[cX,cT,cV,cU,cW]}};this.trackEcommerceOrder=function(cT,cX,cW,cV,cU,cY){bH(cT,cX,cW,cV,cU,cY)};this.trackEcommerceCartUpdate=function(cT){bd(cT)};this.trackRequest=function(cU,cW,cV,cT){bZ(function(){var cX=cb(cU,cW,cT);bo(cX,bs,cV)})};d.trigger("TrackerSetup",[this])}function E(){return{push:Z}}function b(am,al){var an={};var aj,ak;
-for(aj=0;aj<al.length;aj++){var ah=al[aj];an[ah]=1;for(ak=0;ak<am.length;ak++){if(am[ak]&&am[ak][0]){var ai=am[ak][0];if(ah===ai){Z(am[ak]);delete am[ak];if(an[ai]>1){ad("The method "+ai+' is registered more than once in "_paq" variable. Only the last call has an effect. Please have a look at the multiple Piwik trackers documentation: http://developer.piwik.org/guides/tracking-javascript-guide#multiple-piwik-trackers')}an[ai]++}}}}return am}var z=["addTracker","disableCookies","setTrackerUrl","setAPIUrl","enableCrossDomainLinking","setCookiePath","setCookieDomain","setDomains","setUserId","setSiteId","enableLinkTracking"];function X(ah,aj){var ai=new N(ah,aj);F.push(ai);_paq=b(_paq,z);for(B=0;B<_paq.length;B++){if(_paq[B]){Z(_paq[B])}}_paq=new E();return ai}ag(Q,"beforeunload",ab,false);Date.prototype.getTimeAlias=Date.prototype.getTime;d={initialized:false,JSON:JSON_PIWIK,DOM:{addEventListener:function(ak,aj,ai,ah){var al=typeof ah;if(al==="undefined"){ah=false}ag(ak,aj,ai,ah)},onLoad:l,onReady:o,isNodeVisible:i,isOrWasNodeVisible:t.isNodeVisible},on:function(ai,ah){if(!v[ai]){v[ai]=[]
-}v[ai].push(ah)},off:function(aj,ai){if(!v[aj]){return}var ah=0;for(ah;ah<v[aj].length;ah++){if(v[aj][ah]===ai){v[aj].splice(ah,1)}}},trigger:function(aj,ak,ai){if(!v[aj]){return}var ah=0;for(ah;ah<v[aj].length;ah++){v[aj][ah].apply(ai||Q,ak)}},addPlugin:function(ah,ai){a[ah]=ai},getTracker:function(ah,ai){if(!G(ai)){ai=this.getAsyncTracker().getSiteId()}if(!G(ah)){ah=this.getAsyncTracker().getTrackerUrl()}return new N(ah,ai)},getAsyncTrackers:function(){return F},addTracker:function(ah,ai){if(!F.length){X(ah,ai)}else{F[0].addTracker(ah,ai)}},getAsyncTracker:function(ai,al){var ak;if(F&&F.length&&F[0]){ak=F[0]}else{return X(ai,al)}if(!al&&!ai){return ak}if((!G(al)||null===al)&&ak){al=ak.getSiteId()}if((!G(ai)||null===ai)&&ak){ai=ak.getTrackerUrl()}var aj,ah=0;for(ah;ah<F.length;ah++){aj=F[ah];if(aj&&String(aj.getSiteId())===String(al)&&aj.getTrackerUrl()===ai){return aj}}},retryMissedPluginCalls:function(){var ai=aa;aa=[];var ah=0;for(ah;ah<ai.length;ah++){Z(ai[ah])}}};if(typeof define==="function"&&define.amd){define("piwik",[],function(){return d
-})}return d}());
+if(ad=="}"){break}if(ae){if(ad==","){ad=y();if(ad=="}"){H()}}else{H()}}if(ad==","||typeof ad!="string"||(F?ad.charAt(0):ad[0])!="@"||y()!=":"){H()}ac[ad.slice(1)]=W(y())}return ac}}H()}return ad};var P=function(ae,ad,af){var ac=w(ae,ad,af);if(ac===L){delete ae[ad]}else{ae[ad]=ac}};var w=function(af,ae,ag){var ad=af[ae],ac;if(typeof ad=="object"&&ad){if(u.call(ad)==E){for(ac=ad.length;ac--;){P(ad,ac,ag)}}else{m(ad,function(ah){P(ad,ah,ag)})}}return ag.call(af,ae,ad)};V.parse=function(ae,af){var ac,ad;G=0;X=""+ae;ac=W(y());if(y()!="$"){H()}G=X=null;return af&&u.call(af)==U?w((ad={},ad[""]=ac,ad),"",af):ac}}}V.runInContext=j;return V}if(h&&!c){j(i,h)}else{var f=i.JSON,k=i.JSON3,d=false;var g=j(i,(i.JSON3={noConflict:function(){if(!d){d=true;i.JSON=f;i.JSON3=k;f=k=null}return g}}));i.JSON={parse:g.parse,stringify:g.stringify}}if(c){define(function(){return g})}}).call(this);JSON_PIWIK=a})()}if(typeof _paq!=="object"){_paq=[]}if(typeof window.Piwik!=="object"){window.Piwik=(function(){var q,b={},w={},E=document,h=navigator,U=screen,R=window,i=R.performance||R.mozPerformance||R.msPerformance||R.webkitPerformance,s=R.encodeURIComponent,Q=R.decodeURIComponent,l=unescape,G=[],C,e,ab=[];
+function o(ai){try{return Q(ai)}catch(aj){return unescape(ai)}}function H(aj){var ai=typeof aj;return ai!=="undefined"}function y(ai){return typeof ai==="function"}function T(ai){return typeof ai==="object"}function v(ai){return typeof ai==="string"||ai instanceof String}function z(aj){if(!aj){return true}var ai;var ak=true;for(ai in aj){if(Object.prototype.hasOwnProperty.call(aj,ai)){ak=false}}return ak}function ae(ai){var aj=typeof console;if(aj!=="undefined"&&console&&console.error){console.error(ai)}}function aa(){var an,am,ap,aj,ai;for(an=0;an<arguments.length;an+=1){ai=null;if(arguments[an]&&arguments[an].slice){ai=arguments[an].slice()}aj=arguments[an];ap=aj.shift();var ao,ak;var al=v(ap)&&ap.indexOf("::")>0;if(al){ao=ap.split("::");ak=ao[0];ap=ao[1];if("object"===typeof e[ak]&&"function"===typeof e[ak][ap]){e[ak][ap].apply(e[ak],aj)}else{if(ai){ab.push(ai)}}}else{for(am=0;am<G.length;am++){if(v(ap)){ak=G[am];var aq=ap.indexOf(".")>0;if(aq){ao=ap.split(".");if(ak&&"object"===typeof ak[ao[0]]){ak=ak[ao[0]];
+ap=ao[1]}else{if(ai){ab.push(ai);break}}}if(ak[ap]){ak[ap].apply(ak,aj)}else{var ar="The method '"+ap+'\' was not found in "_paq" variable. Please have a look at the Piwik tracker documentation: http://developer.piwik.org/api-reference/tracking-javascript';ae(ar);if(!aq){throw new TypeError(ar)}}if(ap==="addTracker"){break}if(ap==="setTrackerUrl"||ap==="setSiteId"){break}}else{ap.apply(G[am],aj)}}}}}function ah(al,ak,aj,ai){if(al.addEventListener){al.addEventListener(ak,aj,ai);return true}if(al.attachEvent){return al.attachEvent("on"+ak,aj)}al["on"+ak]=aj}function m(ai){if(E.readyState==="complete"){ai()}else{if(R.addEventListener){R.addEventListener("load",ai)}else{if(R.attachEvent){R.attachEvent("onload",ai)}}}}function p(al){var ai=false;if(E.attachEvent){ai=E.readyState==="complete"}else{ai=E.readyState!=="loading"}if(ai){al();return}var ak;if(E.addEventListener){ah(E,"DOMContentLoaded",function aj(){E.removeEventListener("DOMContentLoaded",aj,false);if(!ai){ai=true;al()}})}else{if(E.attachEvent){E.attachEvent("onreadystatechange",function aj(){if(E.readyState==="complete"){E.detachEvent("onreadystatechange",aj);
+if(!ai){ai=true;al()}}});if(E.documentElement.doScroll&&R===R.top){(function aj(){if(!ai){try{E.documentElement.doScroll("left")}catch(am){setTimeout(aj,0);return}ai=true;al()}}())}}}ah(R,"load",function(){if(!ai){ai=true;al()}},false)}function X(aj,ao,ap){if(!aj){return""}var ai="",al,ak,am,an;for(al in b){if(Object.prototype.hasOwnProperty.call(b,al)){an=b[al]&&"function"===typeof b[al][aj];if(an){ak=b[al][aj];am=ak(ao||{},ap);if(am){ai+=am}}}}return ai}function ac(){var ai;X("unload");if(q){do{ai=new Date()}while(ai.getTimeAlias()<q)}}function n(ak,aj){var ai=E.createElement("script");ai.type="text/javascript";ai.src=ak;if(ai.readyState){ai.onreadystatechange=function(){var al=this.readyState;if(al==="loaded"||al==="complete"){ai.onreadystatechange=null;aj()}}}else{ai.onload=aj}E.getElementsByTagName("head")[0].appendChild(ai)}function I(){var ai="";try{ai=R.top.document.referrer}catch(ak){if(R.parent){try{ai=R.parent.document.referrer}catch(aj){ai=""}}}if(ai===""){ai=E.referrer}return ai
+}function r(ai){var ak=new RegExp("^([a-z]+):"),aj=ak.exec(ai);return aj?aj[1]:null}function d(ai){var ak=new RegExp("^(?:(?:https?|ftp):)/*(?:[^@]+@)?([^:/#]+)"),aj=ak.exec(ai);return aj?aj[1]:ai}function ad(aj,ai){aj=String(aj);return aj.lastIndexOf(ai,0)===0}function P(aj,ai){aj=String(aj);return aj.indexOf(ai,aj.length-ai.length)!==-1}function x(aj,ai){aj=String(aj);return aj.indexOf(ai)!==-1}function g(aj,ai){aj=String(aj);return aj.substr(0,aj.length-ai)}function D(al,ak,an){al=String(al);if(!an){an=""}var ai=al.indexOf("#");var ao=al.length;if(ai===-1){ai=ao}var am=al.substr(0,ai);var aj=al.substr(ai,ao-ai);if(am.indexOf("?")===-1){am+="?"}else{if(!P(am,"?")){am+="&"}}return am+s(ak)+"="+s(an)+aj}function k(aj,ak){aj=String(aj);if(aj.indexOf("?"+ak+"=")===-1&&aj.indexOf("&"+ak+"=")===-1){return aj}var al=aj.indexOf("?");if(al===-1){return aj}var ai=aj.substr(al+1);var ap=aj.substr(0,al);if(ai){var aq="";var at=ai.indexOf("#");if(at!==-1){aq=ai.substr(at+1);ai=ai.substr(0,at)}var am;
+var ao=ai.split("&");var an=ao.length-1;for(an;an>=0;an--){am=ao[an].split("=")[0];if(am===ak){ao.splice(an,1)}}var ar=ao.join("&");if(ar){ap=ap+"?"+ar}if(aq){ap+="#"+aq}}return ap}function f(ak,aj){var ai="[\\?&#]"+aj+"=([^&#]*)";var am=new RegExp(ai);var al=am.exec(ak);return al?Q(al[1]):""}function a(ai){if(ai&&String(ai)===ai){return ai.replace(/^\s+|\s+$/g,"")}return ai}function B(ai){return unescape(s(ai))}function ag(ay){var ak=function(aE,aD){return(aE<<aD)|(aE>>>(32-aD))},az=function(aG){var aE="",aF,aD;for(aF=7;aF>=0;aF--){aD=(aG>>>(aF*4))&15;aE+=aD.toString(16)}return aE},an,aB,aA,aj=[],ar=1732584193,ap=4023233417,ao=2562383102,am=271733878,al=3285377520,ax,aw,av,au,at,aC,ai,aq=[];ay=B(ay);ai=ay.length;for(aB=0;aB<ai-3;aB+=4){aA=ay.charCodeAt(aB)<<24|ay.charCodeAt(aB+1)<<16|ay.charCodeAt(aB+2)<<8|ay.charCodeAt(aB+3);aq.push(aA)}switch(ai&3){case 0:aB=2147483648;break;case 1:aB=ay.charCodeAt(ai-1)<<24|8388608;break;case 2:aB=ay.charCodeAt(ai-2)<<24|ay.charCodeAt(ai-1)<<16|32768;
+break;case 3:aB=ay.charCodeAt(ai-3)<<24|ay.charCodeAt(ai-2)<<16|ay.charCodeAt(ai-1)<<8|128;break}aq.push(aB);while((aq.length&15)!==14){aq.push(0)}aq.push(ai>>>29);aq.push((ai<<3)&4294967295);for(an=0;an<aq.length;an+=16){for(aB=0;aB<16;aB++){aj[aB]=aq[an+aB]}for(aB=16;aB<=79;aB++){aj[aB]=ak(aj[aB-3]^aj[aB-8]^aj[aB-14]^aj[aB-16],1)}ax=ar;aw=ap;av=ao;au=am;at=al;for(aB=0;aB<=19;aB++){aC=(ak(ax,5)+((aw&av)|(~aw&au))+at+aj[aB]+1518500249)&4294967295;at=au;au=av;av=ak(aw,30);aw=ax;ax=aC}for(aB=20;aB<=39;aB++){aC=(ak(ax,5)+(aw^av^au)+at+aj[aB]+1859775393)&4294967295;at=au;au=av;av=ak(aw,30);aw=ax;ax=aC}for(aB=40;aB<=59;aB++){aC=(ak(ax,5)+((aw&av)|(aw&au)|(av&au))+at+aj[aB]+2400959708)&4294967295;at=au;au=av;av=ak(aw,30);aw=ax;ax=aC}for(aB=60;aB<=79;aB++){aC=(ak(ax,5)+(aw^av^au)+at+aj[aB]+3395469782)&4294967295;at=au;au=av;av=ak(aw,30);aw=ax;ax=aC}ar=(ar+ax)&4294967295;ap=(ap+aw)&4294967295;ao=(ao+av)&4294967295;am=(am+au)&4294967295;al=(al+at)&4294967295}aC=az(ar)+az(ap)+az(ao)+az(am)+az(al);
+return aC.toLowerCase()}function W(ak,ai,aj){if(!ak){ak=""}if(!ai){ai=""}if(ak==="translate.googleusercontent.com"){if(aj===""){aj=ai}ai=f(ai,"u");ak=d(ai)}else{if(ak==="cc.bingj.com"||ak==="webcache.googleusercontent.com"||ak.slice(0,5)==="74.6."){ai=E.links[0].href;ak=d(ai)}}return[ak,ai,aj]}function J(aj){var ai=aj.length;if(aj.charAt(--ai)==="."){aj=aj.slice(0,ai)}if(aj.slice(0,2)==="*."){aj=aj.slice(1)}if(aj.indexOf("/")!==-1){aj=aj.substr(0,aj.indexOf("/"))}return aj}function af(aj){aj=aj&&aj.text?aj.text:aj;if(!v(aj)){var ai=E.getElementsByTagName("title");if(ai&&H(ai[0])){aj=ai[0].text}}return aj}function N(ai){if(!ai){return[]}if(!H(ai.children)&&H(ai.childNodes)){return ai.children}if(H(ai.children)){return ai.children}return[]}function S(aj,ai){if(!aj||!ai){return false}if(aj.contains){return aj.contains(ai)}if(aj===ai){return true}if(aj.compareDocumentPosition){return !!(aj.compareDocumentPosition(ai)&16)}return false}function K(ak,al){if(ak&&ak.indexOf){return ak.indexOf(al)
+}if(!H(ak)||ak===null){return -1}if(!ak.length){return -1}var ai=ak.length;if(ai===0){return -1}var aj=0;while(aj<ai){if(ak[aj]===al){return aj}aj++}return -1}function j(ak){if(!ak){return false}function ai(am,an){if(R.getComputedStyle){return E.defaultView.getComputedStyle(am,null)[an]}if(am.currentStyle){return am.currentStyle[an]}}function al(am){am=am.parentNode;while(am){if(am===E){return true}am=am.parentNode}return false}function aj(ao,av,am,ar,ap,at,aq){var an=ao.parentNode,au=1;if(!al(ao)){return false}if(9===an.nodeType){return true}if("0"===ai(ao,"opacity")||"none"===ai(ao,"display")||"hidden"===ai(ao,"visibility")){return false}if(!H(av)||!H(am)||!H(ar)||!H(ap)||!H(at)||!H(aq)){av=ao.offsetTop;ap=ao.offsetLeft;ar=av+ao.offsetHeight;am=ap+ao.offsetWidth;at=ao.offsetWidth;aq=ao.offsetHeight}if(ak===ao&&(0===aq||0===at)&&"hidden"===ai(ao,"overflow")){return false}if(an){if(("hidden"===ai(an,"overflow")||"scroll"===ai(an,"overflow"))){if(ap+au>an.offsetWidth+an.scrollLeft||ap+at-au<an.scrollLeft||av+au>an.offsetHeight+an.scrollTop||av+aq-au<an.scrollTop){return false
+}}if(ao.offsetParent===an){ap+=an.offsetLeft;av+=an.offsetTop}return aj(an,av,am,ar,ap,at,aq)}return true}return aj(ak)}var Z={htmlCollectionToArray:function(ak){var ai=[],aj;if(!ak||!ak.length){return ai}for(aj=0;aj<ak.length;aj++){ai.push(ak[aj])}return ai},find:function(ai){if(!document.querySelectorAll||!ai){return[]}var aj=document.querySelectorAll(ai);return this.htmlCollectionToArray(aj)},findMultiple:function(ak){if(!ak||!ak.length){return[]}var aj,al;var ai=[];for(aj=0;aj<ak.length;aj++){al=this.find(ak[aj]);ai=ai.concat(al)}ai=this.makeNodesUnique(ai);return ai},findNodesByTagName:function(aj,ai){if(!aj||!ai||!aj.getElementsByTagName){return[]}var ak=aj.getElementsByTagName(ai);return this.htmlCollectionToArray(ak)},makeNodesUnique:function(ai){var an=[].concat(ai);ai.sort(function(ap,ao){if(ap===ao){return 0}var ar=K(an,ap);var aq=K(an,ao);if(ar===aq){return 0}return ar>aq?-1:1});if(ai.length<=1){return ai}var aj=0;var al=0;var am=[];var ak;ak=ai[aj++];while(ak){if(ak===ai[aj]){al=am.push(aj)
+}ak=ai[aj++]||null}while(al--){ai.splice(am[al],1)}return ai},getAttributeValueFromNode:function(am,ak){if(!this.hasNodeAttribute(am,ak)){return}if(am&&am.getAttribute){return am.getAttribute(ak)}if(!am||!am.attributes){return}var al=(typeof am.attributes[ak]);if("undefined"===al){return}if(am.attributes[ak].value){return am.attributes[ak].value}if(am.attributes[ak].nodeValue){return am.attributes[ak].nodeValue}var aj;var ai=am.attributes;if(!ai){return}for(aj=0;aj<ai.length;aj++){if(ai[aj].nodeName===ak){return ai[aj].nodeValue}}return null},hasNodeAttributeWithValue:function(aj,ai){var ak=this.getAttributeValueFromNode(aj,ai);return !!ak},hasNodeAttribute:function(ak,ai){if(ak&&ak.hasAttribute){return ak.hasAttribute(ai)}if(ak&&ak.attributes){var aj=(typeof ak.attributes[ai]);return"undefined"!==aj}return false},hasNodeCssClass:function(ak,ai){if(ak&&ai&&ak.className){var aj=typeof ak.className==="string"?ak.className.split(" "):[];if(-1!==K(aj,ai)){return true}}return false},findNodesHavingAttribute:function(am,ak,ai){if(!ai){ai=[]
+}if(!am||!ak){return ai}var al=N(am);if(!al||!al.length){return ai}var aj,an;for(aj=0;aj<al.length;aj++){an=al[aj];if(this.hasNodeAttribute(an,ak)){ai.push(an)}ai=this.findNodesHavingAttribute(an,ak,ai)}return ai},findFirstNodeHavingAttribute:function(ak,aj){if(!ak||!aj){return}if(this.hasNodeAttribute(ak,aj)){return ak}var ai=this.findNodesHavingAttribute(ak,aj);if(ai&&ai.length){return ai[0]}},findFirstNodeHavingAttributeWithValue:function(al,ak){if(!al||!ak){return}if(this.hasNodeAttributeWithValue(al,ak)){return al}var ai=this.findNodesHavingAttribute(al,ak);if(!ai||!ai.length){return}var aj;for(aj=0;aj<ai.length;aj++){if(this.getAttributeValueFromNode(ai[aj],ak)){return ai[aj]}}},findNodesHavingCssClass:function(am,al,ai){if(!ai){ai=[]}if(!am||!al){return ai}if(am.getElementsByClassName){var an=am.getElementsByClassName(al);return this.htmlCollectionToArray(an)}var ak=N(am);if(!ak||!ak.length){return[]}var aj,ao;for(aj=0;aj<ak.length;aj++){ao=ak[aj];if(this.hasNodeCssClass(ao,al)){ai.push(ao)
+}ai=this.findNodesHavingCssClass(ao,al,ai)}return ai},findFirstNodeHavingClass:function(ak,aj){if(!ak||!aj){return}if(this.hasNodeCssClass(ak,aj)){return ak}var ai=this.findNodesHavingCssClass(ak,aj);if(ai&&ai.length){return ai[0]}},isLinkElement:function(aj){if(!aj){return false}var ai=String(aj.nodeName).toLowerCase();var al=["a","area"];var ak=K(al,ai);return ak!==-1},setAnyAttribute:function(aj,ai,ak){if(!aj||!ai){return}if(aj.setAttribute){aj.setAttribute(ai,ak)}else{aj[ai]=ak}}};var u={CONTENT_ATTR:"data-track-content",CONTENT_CLASS:"piwikTrackContent",CONTENT_NAME_ATTR:"data-content-name",CONTENT_PIECE_ATTR:"data-content-piece",CONTENT_PIECE_CLASS:"piwikContentPiece",CONTENT_TARGET_ATTR:"data-content-target",CONTENT_TARGET_CLASS:"piwikContentTarget",CONTENT_IGNOREINTERACTION_ATTR:"data-content-ignoreinteraction",CONTENT_IGNOREINTERACTION_CLASS:"piwikContentIgnoreInteraction",location:undefined,findContentNodes:function(){var aj="."+this.CONTENT_CLASS;var ai="["+this.CONTENT_ATTR+"]";
+var ak=Z.findMultiple([aj,ai]);return ak},findContentNodesWithinNode:function(al){if(!al){return[]}var aj=Z.findNodesHavingCssClass(al,this.CONTENT_CLASS);var ai=Z.findNodesHavingAttribute(al,this.CONTENT_ATTR);if(ai&&ai.length){var ak;for(ak=0;ak<ai.length;ak++){aj.push(ai[ak])}}if(Z.hasNodeAttribute(al,this.CONTENT_ATTR)){aj.push(al)}else{if(Z.hasNodeCssClass(al,this.CONTENT_CLASS)){aj.push(al)}}aj=Z.makeNodesUnique(aj);return aj},findParentContentNode:function(aj){if(!aj){return}var ak=aj;var ai=0;while(ak&&ak!==E&&ak.parentNode){if(Z.hasNodeAttribute(ak,this.CONTENT_ATTR)){return ak}if(Z.hasNodeCssClass(ak,this.CONTENT_CLASS)){return ak}ak=ak.parentNode;if(ai>1000){break}ai++}},findPieceNode:function(aj){var ai;ai=Z.findFirstNodeHavingAttribute(aj,this.CONTENT_PIECE_ATTR);if(!ai){ai=Z.findFirstNodeHavingClass(aj,this.CONTENT_PIECE_CLASS)}if(ai){return ai}return aj},findTargetNodeNoDefault:function(ai){if(!ai){return}var aj=Z.findFirstNodeHavingAttributeWithValue(ai,this.CONTENT_TARGET_ATTR);
+if(aj){return aj}aj=Z.findFirstNodeHavingAttribute(ai,this.CONTENT_TARGET_ATTR);if(aj){return aj}aj=Z.findFirstNodeHavingClass(ai,this.CONTENT_TARGET_CLASS);if(aj){return aj}},findTargetNode:function(ai){var aj=this.findTargetNodeNoDefault(ai);if(aj){return aj}return ai},findContentName:function(aj){if(!aj){return}var am=Z.findFirstNodeHavingAttributeWithValue(aj,this.CONTENT_NAME_ATTR);if(am){return Z.getAttributeValueFromNode(am,this.CONTENT_NAME_ATTR)}var ai=this.findContentPiece(aj);if(ai){return this.removeDomainIfIsInLink(ai)}if(Z.hasNodeAttributeWithValue(aj,"title")){return Z.getAttributeValueFromNode(aj,"title")}var ak=this.findPieceNode(aj);if(Z.hasNodeAttributeWithValue(ak,"title")){return Z.getAttributeValueFromNode(ak,"title")}var al=this.findTargetNode(aj);if(Z.hasNodeAttributeWithValue(al,"title")){return Z.getAttributeValueFromNode(al,"title")}},findContentPiece:function(aj){if(!aj){return}var al=Z.findFirstNodeHavingAttributeWithValue(aj,this.CONTENT_PIECE_ATTR);if(al){return Z.getAttributeValueFromNode(al,this.CONTENT_PIECE_ATTR)
+}var ai=this.findPieceNode(aj);var ak=this.findMediaUrlInNode(ai);if(ak){return this.toAbsoluteUrl(ak)}},findContentTarget:function(ak){if(!ak){return}var al=this.findTargetNode(ak);if(Z.hasNodeAttributeWithValue(al,this.CONTENT_TARGET_ATTR)){return Z.getAttributeValueFromNode(al,this.CONTENT_TARGET_ATTR)}var aj;if(Z.hasNodeAttributeWithValue(al,"href")){aj=Z.getAttributeValueFromNode(al,"href");return this.toAbsoluteUrl(aj)}var ai=this.findPieceNode(ak);if(Z.hasNodeAttributeWithValue(ai,"href")){aj=Z.getAttributeValueFromNode(ai,"href");return this.toAbsoluteUrl(aj)}},isSameDomain:function(ai){if(!ai||!ai.indexOf){return false}if(0===ai.indexOf(this.getLocation().origin)){return true}var aj=ai.indexOf(this.getLocation().host);if(8>=aj&&0<=aj){return true}return false},removeDomainIfIsInLink:function(ak){var aj="^https?://[^/]+";var ai="^.*//[^/]+";if(ak&&ak.search&&-1!==ak.search(new RegExp(aj))&&this.isSameDomain(ak)){ak=ak.replace(new RegExp(ai),"");if(!ak){ak="/"}}return ak},findMediaUrlInNode:function(am){if(!am){return
+}var ak=["img","embed","video","audio"];var ai=am.nodeName.toLowerCase();if(-1!==K(ak,ai)&&Z.findFirstNodeHavingAttributeWithValue(am,"src")){var al=Z.findFirstNodeHavingAttributeWithValue(am,"src");return Z.getAttributeValueFromNode(al,"src")}if(ai==="object"&&Z.hasNodeAttributeWithValue(am,"data")){return Z.getAttributeValueFromNode(am,"data")}if(ai==="object"){var an=Z.findNodesByTagName(am,"param");if(an&&an.length){var aj;for(aj=0;aj<an.length;aj++){if("movie"===Z.getAttributeValueFromNode(an[aj],"name")&&Z.hasNodeAttributeWithValue(an[aj],"value")){return Z.getAttributeValueFromNode(an[aj],"value")}}}var ao=Z.findNodesByTagName(am,"embed");if(ao&&ao.length){return this.findMediaUrlInNode(ao[0])}}},trim:function(ai){return a(ai)},isOrWasNodeInViewport:function(an){if(!an||!an.getBoundingClientRect||an.nodeType!==1){return true}var am=an.getBoundingClientRect();var al=E.documentElement||{};var ak=am.top<0;if(ak&&an.offsetTop){ak=(an.offsetTop+am.height)>0}var aj=al.clientWidth;if(R.innerWidth&&aj>R.innerWidth){aj=R.innerWidth
+}var ai=al.clientHeight;if(R.innerHeight&&ai>R.innerHeight){ai=R.innerHeight}return((am.bottom>0||ak)&&am.right>0&&am.left<aj&&((am.top<ai)||ak))},isNodeVisible:function(aj){var ai=j(aj);var ak=this.isOrWasNodeInViewport(aj);return ai&&ak},buildInteractionRequestParams:function(ai,aj,ak,al){var am="";if(ai){am+="c_i="+s(ai)}if(aj){if(am){am+="&"}am+="c_n="+s(aj)}if(ak){if(am){am+="&"}am+="c_p="+s(ak)}if(al){if(am){am+="&"}am+="c_t="+s(al)}return am},buildImpressionRequestParams:function(ai,aj,ak){var al="c_n="+s(ai)+"&c_p="+s(aj);if(ak){al+="&c_t="+s(ak)}return al},buildContentBlock:function(ak){if(!ak){return}var ai=this.findContentName(ak);var aj=this.findContentPiece(ak);var al=this.findContentTarget(ak);ai=this.trim(ai);aj=this.trim(aj);al=this.trim(al);return{name:ai||"Unknown",piece:aj||"Unknown",target:al||""}},collectContent:function(al){if(!al||!al.length){return[]}var ak=[];var ai,aj;for(ai=0;ai<al.length;ai++){aj=this.buildContentBlock(al[ai]);if(H(aj)){ak.push(aj)}}return ak
+},setLocation:function(ai){this.location=ai},getLocation:function(){var ai=this.location||R.location;if(!ai.origin){ai.origin=ai.protocol+"//"+ai.hostname+(ai.port?":"+ai.port:"")}return ai},toAbsoluteUrl:function(aj){if((!aj||String(aj)!==aj)&&aj!==""){return aj}if(""===aj){return this.getLocation().href}if(aj.search(/^\/\//)!==-1){return this.getLocation().protocol+aj}if(aj.search(/:\/\//)!==-1){return aj}if(0===aj.indexOf("#")){return this.getLocation().origin+this.getLocation().pathname+aj}if(0===aj.indexOf("?")){return this.getLocation().origin+this.getLocation().pathname+aj}if(0===aj.search("^[a-zA-Z]{2,11}:")){return aj}if(aj.search(/^\//)!==-1){return this.getLocation().origin+aj}var ai="(.*/)";var ak=this.getLocation().origin+this.getLocation().pathname.match(new RegExp(ai))[0];return ak+aj},isUrlToCurrentDomain:function(aj){var ak=this.toAbsoluteUrl(aj);if(!ak){return false}var ai=this.getLocation().origin;if(ai===ak){return true}if(0===String(ak).indexOf(ai)){if(":"===String(ak).substr(ai.length,1)){return false
+}return true}return false},setHrefAttribute:function(aj,ai){if(!aj||!ai){return}Z.setAnyAttribute(aj,"href",ai)},shouldIgnoreInteraction:function(ak){var aj=Z.hasNodeAttribute(ak,this.CONTENT_IGNOREINTERACTION_ATTR);var ai=Z.hasNodeCssClass(ak,this.CONTENT_IGNOREINTERACTION_CLASS);return aj||ai}};function M(aj,am){if(am){return am}aj=u.toAbsoluteUrl(aj);if(x(aj,"?")){var al=aj.indexOf("?");aj=aj.slice(0,al)}if(P(aj,"piwik.php")){aj=g(aj,"piwik.php".length)}else{if(P(aj,".php")){var ai=aj.lastIndexOf("/");var ak=1;aj=aj.slice(0,ai+ak)}}if(P(aj,"/js/")){aj=g(aj,"js/".length)}return aj}function L(ao){var aq="Piwik_Overlay";var aj=new RegExp("index\\.php\\?module=Overlay&action=startOverlaySession&idSite=([0-9]+)&period=([^&]+)&date=([^&]+)(&segment=.*)?$");var ak=aj.exec(E.referrer);if(ak){var am=ak[1];if(am!==String(ao)){return false}var an=ak[2],ai=ak[3],al=ak[4];if(!al){al=""}else{if(al.indexOf("&segment=")===0){al=al.substr("&segment=".length)}}R.name=aq+"###"+an+"###"+ai+"###"+al}var ap=R.name.split("###");
+return ap.length===4&&ap[0]===aq}function V(aj,ap,al){var ao=R.name.split("###"),an=ao[1],ai=ao[2],am=ao[3],ak=M(aj,ap);n(ak+"plugins/Overlay/client/client.js?v=1",function(){Piwik_Overlay_Client.initialize(ak,al,an,ai,am)})}function t(){var ak;try{ak=R.frameElement}catch(aj){return true}if(H(ak)){return(ak&&String(ak.nodeName).toLowerCase()==="iframe")?true:false}try{return R.self!==R.top}catch(ai){return true}}function O(bZ,bU){var bu=this,bP=W(E.domain,R.location.href,I()),cC=J(bP[0]),bz=o(bP[1]),bc=o(bP[2]),cA=false,b3="GET",cQ=b3,aA="application/x-www-form-urlencoded; charset=UTF-8",cj=aA,aw=bZ||"",bt="",cG="",bR=bU||"",bm="",bA="",aW,a8="",cN=["7z","aac","apk","arc","arj","asf","asx","avi","azw3","bin","csv","deb","dmg","doc","docx","epub","exe","flv","gif","gz","gzip","hqx","ibooks","jar","jpg","jpeg","js","mobi","mp2","mp3","mp4","mpg","mpeg","mov","movie","msi","msp","odb","odf","odg","ods","odt","ogg","ogv","pdf","phps","png","ppt","pptx","qt","qtm","ra","ram","rar","rpm","sea","sit","tar","tbz","tbz2","bz","bz2","tgz","torrent","txt","wav","wma","wmv","wpd","xls","xlsx","xml","z","zip"],ap=[cC],bn=[],bx=[],aZ=[],bv=500,cs,aX,bD,bB,ai,cd=["pk_campaign","piwik_campaign","utm_campaign","utm_source","utm_medium"],bs=["pk_kwd","piwik_kwd","utm_term"],a9="_pk_",ao="pk_vid",aR=180,cE,be,ba=false,cy,a4,bj,ct=33955200000,ca=1800000,cM=15768000000,aU=true,b8=0,bC=false,aH=false,bW,bH={},b7={},bb={},bh=200,cI={},cO={},bV=[],b0=false,cm=false,aj=false,cP=false,cv=false,aF=false,a3=t(),cF=null,bX,aI,bo,bS=ag,bd,aC,ce=0,bi=["id","ses","cvar","ref"],aL=false;
+try{a8=E.title}catch(ck){a8=""}function cT(c3,c1,c0,c2,cZ){if(ba){return}var cY;if(c0){cY=new Date();cY.setTime(cY.getTime()+c0)}E.cookie=c3+"="+s(c1)+(c0?";expires="+cY.toGMTString():"")+";path="+(c2||"/")+(cZ?";domain="+cZ:"")+(aL?";secure":"")}function cH(cY){aL=!!cY}function cb(){return aL}function av(c0){if(ba){return 0}var cY=new RegExp("(^|;)[ ]*"+c0+"=([^;]*)"),cZ=cY.exec(E.cookie);return cZ?Q(cZ[2]):0}function bN(cY){var cZ;cY=k(cY,ao);if(bB){cZ=new RegExp("#.*");return cY.replace(cZ,"")}return cY}function bG(c0,cY){var c1=r(cY),cZ;if(c1){return cY}if(cY.slice(0,1)==="/"){return r(c0)+"://"+d(c0)+cY}c0=bN(c0);cZ=c0.indexOf("?");if(cZ>=0){c0=c0.slice(0,cZ)}cZ=c0.lastIndexOf("/");if(cZ!==c0.length-1){c0=c0.slice(0,cZ+1)}return c0+cY}function cr(c0,cY){var cZ;c0=String(c0).toLowerCase();cY=String(cY).toLowerCase();if(c0===cY){return true}if(cY.slice(0,1)==="."){if(c0===cY.slice(1)){return true}cZ=c0.length-cY.length;if((cZ>0)&&(c0.slice(cZ)===cY)){return true}}return false}function b6(cY){var cZ=document.createElement("a");
+if(cY.indexOf("//")!==0&&cY.indexOf("http")!==0){if(cY.indexOf("*")===0){cY=cY.substr(1)}if(cY.indexOf(".")===0){cY=cY.substr(1)}cY="http://"+cY}cZ.href=u.toAbsoluteUrl(cY);if(cZ.pathname){return cZ.pathname}return""}function aV(cZ,cY){if(!ad(cY,"/")){cY="/"+cY}if(!ad(cZ,"/")){cZ="/"+cZ}var c0=(cY==="/"||cY==="/*");if(c0){return true}if(cZ===cY){return true}cY=String(cY).toLowerCase();cZ=String(cZ).toLowerCase();if(P(cY,"*")){cY=cY.slice(0,-1);c0=(!cY||cY==="/");if(c0){return true}if(cZ===cY){return true}return cZ.indexOf(cY)===0}if(!P(cZ,"/")){cZ+="/"}if(!P(cY,"/")){cY+="/"}return cZ.indexOf(cY)===0}function al(c2,c4){var cZ,cY,c0,c1,c3;for(cZ=0;cZ<ap.length;cZ++){c1=J(ap[cZ]);c3=b6(ap[cZ]);if(cr(c2,c1)&&aV(c4,c3)){return true}}return false}function aN(c1){var cZ,cY,c0;for(cZ=0;cZ<ap.length;cZ++){cY=J(ap[cZ].toLowerCase());if(c1===cY){return true}if(cY.slice(0,1)==="."){if(c1===cY.slice(1)){return true}c0=c1.length-cY.length;if((c0>0)&&(c1.slice(c0)===cY)){return true}}}return false}function cc(cY,c0){var cZ=new Image(1,1);
+cZ.onload=function(){C=0;if(typeof c0==="function"){c0()}};cY=cY.replace("send_image=0","send_image=1");cZ.src=aw+(aw.indexOf("?")<0?"?":"&")+cY}function cL(cZ,c2,cY){if(!H(cY)||null===cY){cY=true}try{var c1=R.XMLHttpRequest?new R.XMLHttpRequest():R.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):null;c1.open("POST",aw,true);c1.onreadystatechange=function(){if(this.readyState===4&&!(this.status>=200&&this.status<300)&&cY){cc(cZ,c2)}else{if(this.readyState===4&&(typeof c2==="function")){c2()}}};c1.setRequestHeader("Content-Type",cj);c1.send(cZ)}catch(c0){if(cY){cc(cZ,c2)}}}function b1(cZ){var cY=new Date();var c0=cY.getTime()+cZ;if(!q||c0>q){q=c0}}function b9(cY){if(bX||!aX){return}bX=setTimeout(function cZ(){bX=null;if(!a3){a3=(!E.hasFocus||E.hasFocus())}if(!a3){b9(aX);return}if(bD()){return}var c0=new Date(),c1=aX-(c0.getTime()-cF);c1=Math.min(aX,c1);b9(c1)},cY||aX)}function bw(){if(!bX){return}clearTimeout(bX);bX=null}function a1(){a3=true;if(bD()){return}b9()}function aq(){bw()}function cV(){if(aF||!aX){return
+}aF=true;ah(R,"focus",a1);ah(R,"blur",aq);b9()}function cn(c2){var cZ=new Date();var cY=cZ.getTime();cF=cY;if(cm&&cY<cm){var c0=cm-cY;setTimeout(c2,c0);b1(c0+50);cm+=50;return}if(cm===false){var c1=800;cm=cY+c1}c2()}function br(cZ,cY,c0){if(!cy&&cZ){cn(function(){if(cQ==="POST"||String(cZ).length>2000){cL(cZ,c0)}else{cc(cZ,c0)}b1(cY)})}if(!aF){cV()}else{b9()}}function b5(cY){if(cy){return false}return(cY&&cY.length)}function cU(c0,cY){if(!b5(c0)){return}var cZ='{"requests":["?'+c0.join('","?')+'"]}';cn(function(){cL(cZ,null,false);b1(cY)})}function aK(cY){return a9+cY+"."+bR+"."+bd}function bQ(){if(ba){return"0"}if(!H(h.cookieEnabled)){var cY=aK("testcookie");cT(cY,"1");return av(cY)==="1"?"1":"0"}return h.cookieEnabled?"1":"0"}function a7(){bd=bS((cE||cC)+(be||"/")).slice(0,4)}function bI(){var cZ=aK("cvar"),cY=av(cZ);if(cY.length){cY=JSON_PIWIK.parse(cY);if(T(cY)){return cY}}return{}}function co(){if(aH===false){aH=bI()}}function cz(){return bS((h.userAgent||"")+(h.platform||"")+JSON_PIWIK.stringify(cO)+(new Date()).getTime()+Math.random()).slice(0,16)
+}function ar(){return bS((h.userAgent||"")+(h.platform||"")+JSON_PIWIK.stringify(cO)).slice(0,6)}function a5(){return Math.floor((new Date()).getTime()/1000)}function aB(){var cZ=a5();var c0=ar();var cY=String(cZ)+c0;return cY}function cK(c0){c0=String(c0);var c3=ar();var c1=c3.length;var c2=c0.substr(-1*c1,c1);var cZ=parseInt(c0.substr(0,c0.length-c1),10);if(cZ&&c2&&c2===c3){var cY=a5();if(aR<=0){return true}if(cY>=cZ&&cY<=(cZ+aR)){return true}}return false}function cW(cY){if(!cv){return""}var c2=f(cY,ao);if(!c2){return""}c2=String(c2);var c0=new RegExp("^[a-zA-Z0-9]+$");if(c2.length===32&&c0.test(c2)){var cZ=c2.substr(16,32);if(cK(cZ)){var c1=c2.substr(0,16);return c1}}return""}function cw(){if(!bA){bA=cW(bz)}var c0=new Date(),cY=Math.round(c0.getTime()/1000),cZ=aK("id"),c3=av(cZ),c2,c1;if(c3){c2=c3.split(".");c2.unshift("0");if(bA.length){c2[1]=bA}return c2}if(bA.length){c1=bA}else{if("0"===bQ()){c1=""}else{c1=cz()}}c2=["1",c1,cY,0,cY,"",""];return c2}function aP(){var c5=cw(),c1=c5[0],c2=c5[1],cZ=c5[2],cY=c5[3],c3=c5[4],c0=c5[5];
+if(!H(c5[6])){c5[6]=""}var c4=c5[6];return{newVisitor:c1,uuid:c2,createTs:cZ,visitCount:cY,currentVisitTs:c3,lastVisitTs:c0,lastEcommerceOrderTs:c4}}function az(){var c1=new Date(),cZ=c1.getTime(),c2=aP().createTs;var cY=parseInt(c2,10);var c0=(cY*1000)+ct-cZ;return c0}function aD(cY){if(!bR){return}var c0=new Date(),cZ=Math.round(c0.getTime()/1000);if(!H(cY)){cY=aP()}var c1=cY.uuid+"."+cY.createTs+"."+cY.visitCount+"."+cZ+"."+cY.lastVisitTs+"."+cY.lastEcommerceOrderTs;cT(aK("id"),c1,az(),be,cE)}function by(){var cY=av(aK("ref"));if(cY.length){try{cY=JSON_PIWIK.parse(cY);if(T(cY)){return cY}}catch(cZ){}}return["","",0,""]}function bJ(c0,cZ,cY){cT(c0,"",-86400,cZ,cY)}function bk(cZ){var cY="testvalue";cT("test",cY,10000,null,cZ);if(av("test")===cY){bJ("test",null,cZ);return true}return false}function ax(){var cZ=ba;ba=false;var cY,c0;for(cY=0;cY<bi.length;cY++){c0=aK(bi[cY]);if(0!==av(c0)){bJ(c0,be,cE)}}ba=cZ}function bO(cY){bR=cY;aD()}function cX(c2){if(!c2||!T(c2)){return}var c1=[];var c0;
+for(c0 in c2){if(Object.prototype.hasOwnProperty.call(c2,c0)){c1.push(c0)}}var c3={};c1.sort();var cY=c1.length;var cZ;for(cZ=0;cZ<cY;cZ++){c3[c1[cZ]]=c2[c1[cZ]]}return c3}function bY(){cT(aK("ses"),"*",ca,be,cE)}function a6(){var c1="";var cZ="abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";var c0=cZ.length;var cY;for(cY=0;cY<6;cY++){c1+=cZ.charAt(Math.floor(Math.random()*c0))}return c1}function cf(c0,dl,dm,c1){var dk,cZ=new Date(),c8=Math.round(cZ.getTime()/1000),c5,dj,c2=1024,ds,c9,dh=aH,c3=aK("ses"),df=aK("ref"),dc=aK("cvar"),dd=av(c3),di=by(),dp=aW||bz,c6,cY;if(ba){ax()}if(cy){return""}var de=aP();if(!H(c1)){c1=""}var db=E.characterSet||E.charset;if(!db||db.toLowerCase()==="utf-8"){db=null}c6=di[0];cY=di[1];c5=di[2];dj=di[3];if(!dd){var dn=ca/1000;if(!de.lastVisitTs||(c8-de.lastVisitTs)>dn){de.visitCount++;de.lastVisitTs=de.currentVisitTs}if(!bj||!c6.length){for(dk in cd){if(Object.prototype.hasOwnProperty.call(cd,dk)){c6=f(dp,cd[dk]);if(c6.length){break}}}for(dk in bs){if(Object.prototype.hasOwnProperty.call(bs,dk)){cY=f(dp,bs[dk]);
+if(cY.length){break}}}}ds=d(bc);c9=dj.length?d(dj):"";if(ds.length&&!aN(ds)&&(!bj||!c9.length||aN(c9))){dj=bc}if(dj.length||c6.length){c5=c8;di=[c6,cY,c5,bN(dj.slice(0,c2))];cT(df,JSON_PIWIK.stringify(di),cM,be,cE)}}c0+="&idsite="+bR+"&rec=1&r="+String(Math.random()).slice(2,8)+"&h="+cZ.getHours()+"&m="+cZ.getMinutes()+"&s="+cZ.getSeconds()+"&url="+s(bN(dp))+(bc.length?"&urlref="+s(bN(bc)):"")+((bm&&bm.length)?"&uid="+s(bm):"")+"&_id="+de.uuid+"&_idts="+de.createTs+"&_idvc="+de.visitCount+"&_idn="+de.newVisitor+(c6.length?"&_rcn="+s(c6):"")+(cY.length?"&_rck="+s(cY):"")+"&_refts="+c5+"&_viewts="+de.lastVisitTs+(String(de.lastEcommerceOrderTs).length?"&_ects="+de.lastEcommerceOrderTs:"")+(String(dj).length?"&_ref="+s(bN(dj.slice(0,c2))):"")+(db?"&cs="+s(db):"")+"&send_image=0";for(dk in cO){if(Object.prototype.hasOwnProperty.call(cO,dk)){c0+="&"+dk+"="+cO[dk]}}var dr=[];if(dl){for(dk in dl){if(Object.prototype.hasOwnProperty.call(dl,dk)&&/^dimension\d+$/.test(dk)){var c4=dk.replace("dimension","");
+dr.push(parseInt(c4,10));dr.push(String(c4));c0+="&"+dk+"="+dl[dk];delete dl[dk]}}}if(dl&&z(dl)){dl=null}for(dk in bb){if(Object.prototype.hasOwnProperty.call(bb,dk)){var da=(-1===K(dr,dk));if(da){c0+="&dimension"+dk+"="+bb[dk]}}}if(dl){c0+="&data="+s(JSON_PIWIK.stringify(dl))}else{if(ai){c0+="&data="+s(JSON_PIWIK.stringify(ai))}}function c7(dt,du){var dv=JSON_PIWIK.stringify(dt);if(dv.length>2){return"&"+du+"="+s(dv)}return""}var dq=cX(bH);var dg=cX(b7);c0+=c7(dq,"cvar");c0+=c7(dg,"e_cvar");if(aH){c0+=c7(aH,"_cvar");for(dk in dh){if(Object.prototype.hasOwnProperty.call(dh,dk)){if(aH[dk][0]===""||aH[dk][1]===""){delete aH[dk]}}}if(bC){cT(dc,JSON_PIWIK.stringify(aH),ca,be,cE)}}if(aU){if(b8){c0+="&gt_ms="+b8}else{if(i&&i.timing&&i.timing.requestStart&&i.timing.responseEnd){c0+="&gt_ms="+(i.timing.responseEnd-i.timing.requestStart)}}}if(aC){c0+="&pv_id="+aC}de.lastEcommerceOrderTs=H(c1)&&String(c1).length?c1:de.lastEcommerceOrderTs;aD(de);bY();c0+=X(dm,{tracker:bu,request:c0});if(cG.length){c0+="&"+cG
+}if(y(bW)){c0=bW(c0)}return c0}bD=function aY(){var cY=new Date();if(cF+aX<=cY.getTime()){var cZ=cf("ping=1",null,"ping");br(cZ,bv);return true}return false};function bf(c1,c0,c6,c2,cY,c9){var c4="idgoal=0",c5,cZ=new Date(),c7=[],c8,c3=String(c1).length;if(c3){c4+="&ec_id="+s(c1);c5=Math.round(cZ.getTime()/1000)}c4+="&revenue="+c0;if(String(c6).length){c4+="&ec_st="+c6}if(String(c2).length){c4+="&ec_tx="+c2}if(String(cY).length){c4+="&ec_sh="+cY}if(String(c9).length){c4+="&ec_dt="+c9}if(cI){for(c8 in cI){if(Object.prototype.hasOwnProperty.call(cI,c8)){if(!H(cI[c8][1])){cI[c8][1]=""}if(!H(cI[c8][2])){cI[c8][2]=""}if(!H(cI[c8][3])||String(cI[c8][3]).length===0){cI[c8][3]=0}if(!H(cI[c8][4])||String(cI[c8][4]).length===0){cI[c8][4]=1}c7.push(cI[c8])}}c4+="&ec_items="+s(JSON_PIWIK.stringify(c7))}c4=cf(c4,ai,"ecommerce",c5);br(c4,bv);if(c3){cI={}}}function bK(cY,c2,c1,c0,cZ,c3){if(String(cY).length&&H(c2)){bf(cY,c2,c1,c0,cZ,c3)}}function bg(cY){if(H(cY)){bf("",cY,"","","","")}}function bL(cZ,c1,c0){aC=a6();
+var cY=cf("action_name="+s(af(cZ||a8)),c1,"log");br(cY,bv,c0)}function aS(c0,cZ){var c1,cY="(^| )(piwik[_-]"+cZ;if(c0){for(c1=0;c1<c0.length;c1++){cY+="|"+c0[c1]}}cY+=")( |$)";return new RegExp(cY)}function aM(cY){return(aw&&cY&&0===String(cY).indexOf(aw))}function cg(c2,cY,c3,cZ){if(aM(cY)){return 0}var c1=aS(bx,"download"),c0=aS(aZ,"link"),c4=new RegExp("\\.("+cN.join("|")+")([?&#]|$)","i");if(c0.test(c2)){return"link"}if(cZ||c1.test(c2)||c4.test(cY)){return"download"}if(c3){return 0}return"link"}function an(cZ){var cY;cY=cZ.parentNode;while(cY!==null&&H(cY)){if(Z.isLinkElement(cZ)){break}cZ=cY;cY=cZ.parentNode}return cZ}function cS(c3){c3=an(c3);if(!Z.hasNodeAttribute(c3,"href")){return}if(!H(c3.href)){return}var c2=Z.getAttributeValueFromNode(c3,"href");if(aM(c2)){return}var cZ=c3.pathname||b6(c3.href);var c4=c3.hostname||d(c3.href);var c5=c4.toLowerCase();var c0=c3.href.replace(c4,c5);var c1=new RegExp("^(javascript|vbscript|jscript|mocha|livescript|ecmascript|mailto|tel):","i");if(!c1.test(c0)){var cY=cg(c3.className,c0,al(c5,cZ),Z.hasNodeAttribute(c3,"download"));
+if(cY){return{type:cY,href:c0}}}}function aG(cY,cZ,c0,c1){var c2=u.buildInteractionRequestParams(cY,cZ,c0,c1);if(!c2){return}return cf(c2,null,"contentInteraction")}function cu(c0,c1,c5,cY,cZ){if(!H(c0)){return}if(aM(c0)){return c0}var c3=u.toAbsoluteUrl(c0);var c2="redirecturl="+s(c3)+"&";c2+=aG(c1,c5,cY,(cZ||c0));var c4="&";if(aw.indexOf("?")<0){c4="?"}return aw+c4+c2}function a2(cY,cZ){if(!cY||!cZ){return false}var c0=u.findTargetNode(cY);if(u.shouldIgnoreInteraction(c0)){return false}c0=u.findTargetNodeNoDefault(cY);if(c0&&!S(c0,cZ)){return false}return true}function ch(c0,cZ,c2){if(!c0){return}var cY=u.findParentContentNode(c0);if(!cY){return}if(!a2(cY,c0)){return}var c1=u.buildContentBlock(cY);if(!c1){return}if(!c1.target&&c2){c1.target=c2}return u.buildInteractionRequestParams(cZ,c1.name,c1.piece,c1.target)}function aO(cZ){if(!bV||!bV.length){return false}var cY,c0;for(cY=0;cY<bV.length;cY++){c0=bV[cY];if(c0&&c0.name===cZ.name&&c0.piece===cZ.piece&&c0.target===cZ.target){return true
+}}return false}function bq(c1){if(!c1){return false}var c4=u.findTargetNode(c1);if(!c4||u.shouldIgnoreInteraction(c4)){return false}var c5=cS(c4);if(cP&&c5&&c5.type){return false}if(Z.isLinkElement(c4)&&Z.hasNodeAttributeWithValue(c4,"href")){var cY=String(Z.getAttributeValueFromNode(c4,"href"));if(0===cY.indexOf("#")){return false}if(aM(cY)){return true}if(!u.isUrlToCurrentDomain(cY)){return false}var c2=u.buildContentBlock(c1);if(!c2){return}var c0=c2.name;var c6=c2.piece;var c3=c2.target;if(!Z.hasNodeAttributeWithValue(c4,u.CONTENT_TARGET_ATTR)||c4.wasContentTargetAttrReplaced){c4.wasContentTargetAttrReplaced=true;c3=u.toAbsoluteUrl(cY);Z.setAnyAttribute(c4,u.CONTENT_TARGET_ATTR,c3)}var cZ=cu(cY,"click",c0,c6,c3);u.setHrefAttribute(c4,cZ);return true}return false}function aE(cZ){if(!cZ||!cZ.length){return}var cY;for(cY=0;cY<cZ.length;cY++){bq(cZ[cY])}}function aQ(cY){return function(cZ){if(!cY){return}var c2=u.findParentContentNode(cY);var c3;if(cZ){c3=cZ.target||cZ.srcElement}if(!c3){c3=cY
+}if(!a2(c2,c3)){return}b1(bv);if(Z.isLinkElement(cY)&&Z.hasNodeAttributeWithValue(cY,"href")&&Z.hasNodeAttributeWithValue(cY,u.CONTENT_TARGET_ATTR)){var c0=Z.getAttributeValueFromNode(cY,"href");if(!aM(c0)&&cY.wasContentTargetAttrReplaced){Z.setAnyAttribute(cY,u.CONTENT_TARGET_ATTR,"")}}var c7=cS(cY);if(aj&&c7&&c7.type){return c7.type}if(bq(c2)){return"href"}var c4=u.buildContentBlock(c2);if(!c4){return}var c1=c4.name;var c8=c4.piece;var c6=c4.target;var c5=aG("click",c1,c8,c6);br(c5,bv);return c5}}function bM(c0){if(!c0||!c0.length){return}var cY,cZ;for(cY=0;cY<c0.length;cY++){cZ=u.findTargetNode(c0[cY]);if(cZ&&!cZ.contentInteractionTrackingSetupDone){cZ.contentInteractionTrackingSetupDone=true;ah(cZ,"click",aQ(cZ))}}}function bl(c0,c1){if(!c0||!c0.length){return[]}var cY,cZ;for(cY=0;cY<c0.length;cY++){if(aO(c0[cY])){c0.splice(cY,1);cY--}else{bV.push(c0[cY])}}if(!c0||!c0.length){return[]}aE(c1);bM(c1);var c2=[];for(cY=0;cY<c0.length;cY++){cZ=cf(u.buildImpressionRequestParams(c0[cY].name,c0[cY].piece,c0[cY].target),undefined,"contentImpressions");
+if(cZ){c2.push(cZ)}}return c2}function cl(cZ){var cY=u.collectContent(cZ);return bl(cY,cZ)}function a0(cZ){if(!cZ||!cZ.length){return[]}var cY;for(cY=0;cY<cZ.length;cY++){if(!u.isNodeVisible(cZ[cY])){cZ.splice(cY,1);cY--}}if(!cZ||!cZ.length){return[]}return cl(cZ)}function ay(c0,cY,cZ){var c1=u.buildImpressionRequestParams(c0,cY,cZ);return cf(c1,null,"contentImpression")}function cR(c1,cZ){if(!c1){return}var cY=u.findParentContentNode(c1);var c0=u.buildContentBlock(cY);if(!c0){return}if(!cZ){cZ="Unknown"}return aG(cZ,c0.name,c0.piece,c0.target)}function cx(cZ,c1,cY,c0){return"e_c="+s(cZ)+"&e_a="+s(c1)+(H(cY)?"&e_n="+s(cY):"")+(H(c0)?"&e_v="+s(c0):"")}function am(c0,c2,cY,c1,c4,c3){if(a(String(c0)).length===0||a(String(c2)).length===0){ae("Error while logging event: Parameters `category` and `action` must not be empty or filled with whitespaces");return false}var cZ=cf(cx(c0,c2,cY,c1),c4,"event");br(cZ,bv,c3)}function bT(cY,c1,cZ,c2){var c0=cf("search="+s(cY)+(c1?"&search_cat="+s(c1):"")+(H(cZ)?"&search_count="+cZ:""),c2,"sitesearch");
+br(c0,bv)}function cB(cY,c1,c0){var cZ=cf("idgoal="+cY+(c1?"&revenue="+c1:""),c0,"goal");br(cZ,bv)}function cJ(c1,cY,c5,c4,c0){var c3=cY+"="+s(bN(c1));var cZ=ch(c0,"click",c1);if(cZ){c3+="&"+cZ}var c2=cf(c3,c5,"link");br(c2,bv,c4)}function bF(cZ,cY){if(cZ!==""){return cZ+cY.charAt(0).toUpperCase()+cY.slice(1)}return cY}function b2(c3){var c2,cY,c1=["","webkit","ms","moz"],c0;if(!a4){for(cY=0;cY<c1.length;cY++){c0=c1[cY];if(Object.prototype.hasOwnProperty.call(E,bF(c0,"hidden"))){if(E[bF(c0,"visibilityState")]==="prerender"){c2=true}break}}}if(c2){ah(E,c0+"visibilitychange",function cZ(){E.removeEventListener(c0+"visibilitychange",cZ,false);c3()});return}c3()}function b4(cY){if(!cY){return}if(!Z.hasNodeAttribute(cY,"href")){return}var cZ=Z.getAttributeValueFromNode(cY,"href");if(!cZ||aM(cZ)){return}cZ=k(cZ,ao);if(cZ.indexOf("?")>0){cZ+="&"}else{cZ+="?"}var c1=aP().uuid;var c0=aB();cZ=D(cZ,ao,c1+c0);Z.setAnyAttribute(cY,"href",cZ)}function at(c1){var c2=Z.getAttributeValueFromNode(c1,"href");
+if(!c2){return false}c2=String(c2);var cZ=c2.indexOf("//")===0||c2.indexOf("http://")===0||c2.indexOf("https://")===0;if(!cZ){return false}var cY=c1.pathname||b6(c1.href);var c0=(c1.hostname||d(c1.href)).toLowerCase();if(al(c0,cY)){if(!cr(cC,J(c0))){return true}return false}return false}function cq(cY){var cZ=cS(cY);if(cZ&&cZ.type){cZ.href=o(cZ.href);cJ(cZ.href,cZ.type,undefined,null,cY);return}if(cv){cY=an(cY);if(at(cY)){b4(cY)}}}function ci(){return E.all&&!E.addEventListener}function cD(cY){var c0=cY.which;var cZ=(typeof cY.button);if(!c0&&cZ!=="undefined"){if(ci()){if(cY.button&1){c0=1}else{if(cY.button&2){c0=3}else{if(cY.button&4){c0=2}}}}else{if(cY.button===0||cY.button==="0"){c0=1}else{if(cY.button&1){c0=2}else{if(cY.button&2){c0=3}}}}}return c0}function bE(cY){switch(cD(cY)){case 1:return"left";case 2:return"middle";case 3:return"right"}}function aT(cY){return cY.target||cY.srcElement}function au(cY){return function(c1){c1=c1||R.event;var c0=bE(c1);var c2=aT(c1);if(c1.type==="click"){var cZ=false;
+if(cY&&c0==="middle"){cZ=true}if(c2&&!cZ){cq(c2)}}else{if(c1.type==="mousedown"){if(c0==="middle"&&c2){aI=c0;bo=c2}else{aI=bo=null}}else{if(c1.type==="mouseup"){if(c0===aI&&c2===bo){cq(c2)}aI=bo=null}else{if(c1.type==="contextmenu"){cq(c2)}}}}}}function ak(c0,cZ){var cY=typeof cZ;if(cY==="undefined"){cZ=true}ah(c0,"click",au(cZ),false);if(cZ){ah(c0,"mouseup",au(cZ),false);ah(c0,"mousedown",au(cZ),false);ah(c0,"contextmenu",au(cZ),false)}}function bp(c0,c2){aj=true;var c1,cZ=aS(bn,"ignore"),c3=E.links,cY=null,c4=null;if(c3){for(c1=0;c1<c3.length;c1++){cY=c3[c1];if(!cZ.test(cY.className)){c4=typeof cY.piwikTrackers;if("undefined"===c4){cY.piwikTrackers=[]}if(-1===K(cY.piwikTrackers,c2)){cY.piwikTrackers.push(c2);ak(cY,c0)}}}}}function aJ(cZ,c2,c3){if(b0){return true}b0=true;var c4=false;var c1,c0;function cY(){c4=true}m(function(){function c5(c7){setTimeout(function(){if(!b0){return}c4=false;c3.trackVisibleContentImpressions();c5(c7)},c7)}function c6(c7){setTimeout(function(){if(!b0){return
+}if(c4){c4=false;c3.trackVisibleContentImpressions()}c6(c7)},c7)}if(cZ){c1=["scroll","resize"];for(c0=0;c0<c1.length;c0++){if(E.addEventListener){E.addEventListener(c1[c0],cY)}else{R.attachEvent("on"+c1[c0],cY)}}c6(100)}if(c2&&c2>0){c2=parseInt(c2,10);c5(c2)}})}function cp(){var cZ,c1,c2={pdf:"application/pdf",qt:"video/quicktime",realp:"audio/x-pn-realaudio-plugin",wma:"application/x-mplayer2",dir:"application/x-director",fla:"application/x-shockwave-flash",java:"application/x-java-vm",gears:"application/x-googlegears",ag:"application/x-silverlight"};if(!((new RegExp("MSIE")).test(h.userAgent))){if(h.mimeTypes&&h.mimeTypes.length){for(cZ in c2){if(Object.prototype.hasOwnProperty.call(c2,cZ)){c1=h.mimeTypes[c2[cZ]];cO[cZ]=(c1&&c1.enabledPlugin)?"1":"0"}}}if(typeof navigator.javaEnabled!=="unknown"&&H(h.javaEnabled)&&h.javaEnabled()){cO.java="1"}if(y(R.GearsFactory)){cO.gears="1"}cO.cookie=bQ()}var c0=parseInt(U.width,10);var cY=parseInt(U.height,10);cO.res=parseInt(c0,10)+"x"+parseInt(cY,10)
+}cp();a7();aD();this.getVisitorId=function(){return aP().uuid};this.getVisitorInfo=function(){return cw()};this.getAttributionInfo=function(){return by()};this.getAttributionCampaignName=function(){return by()[0]};this.getAttributionCampaignKeyword=function(){return by()[1]};this.getAttributionReferrerTimestamp=function(){return by()[2]};this.getAttributionReferrerUrl=function(){return by()[3]};this.setTrackerUrl=function(cY){aw=cY};this.getTrackerUrl=function(){return aw};this.getPiwikUrl=function(){return M(this.getTrackerUrl(),bt)};this.addTracker=function(cY,c0){if(!c0){throw new Error("A siteId must be given to add a new tracker")}if(!H(cY)||null===cY){cY=this.getTrackerUrl()}var cZ=new O(cY,c0);G.push(cZ);return cZ};this.getSiteId=function(){return bR};this.setSiteId=function(cY){bO(cY)};this.setUserId=function(cY){if(!H(cY)||!cY.length){return}bm=cY;bA=bS(bm).substr(0,16)};this.getUserId=function(){return bm};this.setCustomData=function(cY,cZ){if(T(cY)){ai=cY}else{if(!ai){ai={}}ai[cY]=cZ
+}};this.getCustomData=function(){return ai};this.setCustomRequestProcessing=function(cY){bW=cY};this.appendToTrackingUrl=function(cY){cG=cY};this.getRequest=function(cY){return cf(cY)};this.addPlugin=function(cY,cZ){b[cY]=cZ};this.setCustomDimension=function(cY,cZ){cY=parseInt(cY,10);if(cY>0){if(!H(cZ)){cZ=""}if(!v(cZ)){cZ=String(cZ)}bb[cY]=cZ}};this.getCustomDimension=function(cY){cY=parseInt(cY,10);if(cY>0&&Object.prototype.hasOwnProperty.call(bb,cY)){return bb[cY]}};this.deleteCustomDimension=function(cY){cY=parseInt(cY,10);if(cY>0){delete bb[cY]}};this.setCustomVariable=function(cZ,cY,c2,c0){var c1;if(!H(c0)){c0="visit"}if(!H(cY)){return}if(!H(c2)){c2=""}if(cZ>0){cY=!v(cY)?String(cY):cY;c2=!v(c2)?String(c2):c2;c1=[cY.slice(0,bh),c2.slice(0,bh)];if(c0==="visit"||c0===2){co();aH[cZ]=c1}else{if(c0==="page"||c0===3){bH[cZ]=c1}else{if(c0==="event"){b7[cZ]=c1}}}}};this.getCustomVariable=function(cZ,c0){var cY;if(!H(c0)){c0="visit"}if(c0==="page"||c0===3){cY=bH[cZ]}else{if(c0==="event"){cY=b7[cZ]
+}else{if(c0==="visit"||c0===2){co();cY=aH[cZ]}}}if(!H(cY)||(cY&&cY[0]==="")){return false}return cY};this.deleteCustomVariable=function(cY,cZ){if(this.getCustomVariable(cY,cZ)){this.setCustomVariable(cY,"","",cZ)}};this.deleteCustomVariables=function(cY){if(cY==="page"||cY===3){bH={}}else{if(cY==="event"){b7={}}else{if(cY==="visit"||cY===2){aH={}}}}};this.storeCustomVariablesInCookie=function(){bC=true};this.setLinkTrackingTimer=function(cY){bv=cY};this.getLinkTrackingTimer=function(){return bv};this.setDownloadExtensions=function(cY){if(v(cY)){cY=cY.split("|")}cN=cY};this.addDownloadExtensions=function(cZ){var cY;if(v(cZ)){cZ=cZ.split("|")}for(cY=0;cY<cZ.length;cY++){cN.push(cZ[cY])}};this.removeDownloadExtensions=function(c0){var cZ,cY=[];if(v(c0)){c0=c0.split("|")}for(cZ=0;cZ<cN.length;cZ++){if(K(c0,cN[cZ])===-1){cY.push(cN[cZ])}}cN=cY};this.setDomains=function(cY){ap=v(cY)?[cY]:cY;var c2=false,c0=0,cZ;for(c0;c0<ap.length;c0++){cZ=String(ap[c0]);if(cr(cC,J(cZ))){c2=true;break}var c1=b6(cZ);
+if(c1&&c1!=="/"&&c1!=="/*"){c2=true;break}}if(!c2){ap.push(cC)}};this.enableCrossDomainLinking=function(){cv=true};this.disableCrossDomainLinking=function(){cv=false};this.isCrossDomainLinkingEnabled=function(){return cv};this.setCrossDomainLinkingTimeout=function(cY){aR=cY};this.setIgnoreClasses=function(cY){bn=v(cY)?[cY]:cY};this.setRequestMethod=function(cY){cQ=cY||b3};this.setRequestContentType=function(cY){cj=cY||aA};this.setReferrerUrl=function(cY){bc=cY};this.setCustomUrl=function(cY){aW=bG(bz,cY)};this.getCurrentUrl=function(){return aW||bz};this.setDocumentTitle=function(cY){a8=cY};this.setAPIUrl=function(cY){bt=cY};this.setDownloadClasses=function(cY){bx=v(cY)?[cY]:cY};this.setLinkClasses=function(cY){aZ=v(cY)?[cY]:cY};this.setCampaignNameKey=function(cY){cd=v(cY)?[cY]:cY};this.setCampaignKeywordKey=function(cY){bs=v(cY)?[cY]:cY};this.discardHashTag=function(cY){bB=cY};this.setCookieNamePrefix=function(cY){a9=cY;aH=bI()};this.setCookieDomain=function(cY){var cZ=J(cY);if(bk(cZ)){cE=cZ;
+a7()}};this.getCookieDomain=function(){return cE};this.hasCookies=function(){return"1"===bQ()};this.setSessionCookie=function(c0,cZ,cY){if(!c0){throw new Error("Missing cookie name")}if(!H(cY)){cY=ca}bi.push(c0);cT(aK(c0),cZ,cY,be,cE)};this.getCookie=function(cZ){var cY=av(aK(cZ));if(cY===0){return null}return cY};this.setCookiePath=function(cY){be=cY;a7()};this.getCookiePath=function(cY){return be};this.setVisitorCookieTimeout=function(cY){ct=cY*1000};this.setSessionCookieTimeout=function(cY){ca=cY*1000};this.getSessionCookieTimeout=function(){return ca};this.setReferralCookieTimeout=function(cY){cM=cY*1000};this.setConversionAttributionFirstReferrer=function(cY){bj=cY};this.disableCookies=function(){ba=true;cO.cookie="0";if(bR){ax()}};this.deleteCookies=function(){ax()};this.setDoNotTrack=function(cZ){var cY=h.doNotTrack||h.msDoNotTrack;cy=cZ&&(cY==="yes"||cY==="1");if(cy){this.disableCookies()}};this.addListener=function(cZ,cY){ak(cZ,cY)};this.enableLinkTracking=function(cZ){cP=true;
+var cY=this;b2(function(){p(function(){bp(cZ,cY)})})};this.enableJSErrorTracking=function(){if(cA){return}cA=true;var cY=R.onerror;R.onerror=function(c3,c1,c0,c2,cZ){b2(function(){var c4="JavaScript Errors";var c5=c1+":"+c0;if(c2){c5+=":"+c2}am(c4,c5,c3)});if(cY){return cY(c3,c1,c0,c2,cZ)}return false}};this.disablePerformanceTracking=function(){aU=false};this.setGenerationTimeMs=function(cY){b8=parseInt(cY,10)};this.enableHeartBeatTimer=function(cY){cY=Math.max(cY,1);aX=(cY||15)*1000;if(cF!==null){cV()}};this.disableHeartBeatTimer=function(){bw();if(aX||aF){if(R.removeEventListener){R.removeEventListener("focus",a1,true);R.removeEventListener("blur",aq,true)}else{if(R.detachEvent){R.detachEvent("onfocus",a1);R.detachEvent("onblur",aq)}}}aX=null;aF=false};this.killFrame=function(){if(R.location!==R.top.location){R.top.location=R.location}};this.redirectFile=function(cY){if(R.location.protocol==="file:"){R.location=cY}};this.setCountPreRendered=function(cY){a4=cY};this.trackGoal=function(cY,c0,cZ){b2(function(){cB(cY,c0,cZ)
+})};this.trackLink=function(cZ,cY,c1,c0){b2(function(){cJ(cZ,cY,c1,c0)})};this.getNumTrackedPageViews=function(){return ce};this.trackPageView=function(cY,c0,cZ){bV=[];if(L(bR)){b2(function(){V(aw,bt,bR)})}else{b2(function(){ce++;bL(cY,c0,cZ)})}};this.trackAllContentImpressions=function(){if(L(bR)){return}b2(function(){p(function(){var cY=u.findContentNodes();var cZ=cl(cY);cU(cZ,bv)})})};this.trackVisibleContentImpressions=function(cY,cZ){if(L(bR)){return}if(!H(cY)){cY=true}if(!H(cZ)){cZ=750}aJ(cY,cZ,this);b2(function(){m(function(){var c0=u.findContentNodes();var c1=a0(c0);cU(c1,bv)})})};this.trackContentImpression=function(c0,cY,cZ){if(L(bR)){return}c0=a(c0);cY=a(cY);cZ=a(cZ);if(!c0){return}cY=cY||"Unknown";b2(function(){var c1=ay(c0,cY,cZ);br(c1,bv)})};this.trackContentImpressionsWithinNode=function(cY){if(L(bR)||!cY){return}b2(function(){if(b0){m(function(){var cZ=u.findContentNodesWithinNode(cY);var c0=a0(cZ);cU(c0,bv)})}else{p(function(){var cZ=u.findContentNodesWithinNode(cY);var c0=cl(cZ);
+cU(c0,bv)})}})};this.trackContentInteraction=function(c0,c1,cY,cZ){if(L(bR)){return}c0=a(c0);c1=a(c1);cY=a(cY);cZ=a(cZ);if(!c0||!c1){return}cY=cY||"Unknown";b2(function(){var c2=aG(c0,c1,cY,cZ);br(c2,bv)})};this.trackContentInteractionNode=function(cZ,cY){if(L(bR)||!cZ){return}b2(function(){var c0=cR(cZ,cY);br(c0,bv)})};this.logAllContentBlocksOnPage=function(){var c0=u.findContentNodes();var cY=u.collectContent(c0);var cZ=typeof console;if(cZ!=="undefined"&&console&&console.log){console.log(cY)}};this.trackEvent=function(cZ,c1,cY,c0,c3,c2){b2(function(){am(cZ,c1,cY,c0,c3,c2)})};this.trackSiteSearch=function(cY,c0,cZ,c1){b2(function(){bT(cY,c0,cZ,c1)})};this.setEcommerceView=function(c1,cY,c0,cZ){if(!H(c0)||!c0.length){c0=""}else{if(c0 instanceof Array){c0=JSON_PIWIK.stringify(c0)}}bH[5]=["_pkc",c0];if(H(cZ)&&String(cZ).length){bH[2]=["_pkp",cZ]}if((!H(c1)||!c1.length)&&(!H(cY)||!cY.length)){return}if(H(c1)&&c1.length){bH[3]=["_pks",c1]}if(!H(cY)||!cY.length){cY=""}bH[4]=["_pkn",cY]};this.addEcommerceItem=function(c2,cY,c0,cZ,c1){if(c2.length){cI[c2]=[c2,cY,c0,cZ,c1]
+}};this.trackEcommerceOrder=function(cY,c2,c1,c0,cZ,c3){bK(cY,c2,c1,c0,cZ,c3)};this.trackEcommerceCartUpdate=function(cY){bg(cY)};this.trackRequest=function(cZ,c1,c0,cY){b2(function(){var c2=cf(cZ,c1,cY);br(c2,bv,c0)})};e.trigger("TrackerSetup",[this])}function F(){return{push:aa}}function c(an,am){var ao={};var ak,al;for(ak=0;ak<am.length;ak++){var ai=am[ak];ao[ai]=1;for(al=0;al<an.length;al++){if(an[al]&&an[al][0]){var aj=an[al][0];if(ai===aj){aa(an[al]);delete an[al];if(ao[aj]>1){ae("The method "+aj+' is registered more than once in "_paq" variable. Only the last call has an effect. Please have a look at the multiple Piwik trackers documentation: http://developer.piwik.org/guides/tracking-javascript-guide#multiple-piwik-trackers')}ao[aj]++}}}}return an}var A=["addTracker","disableCookies","setTrackerUrl","setAPIUrl","enableCrossDomainLinking","setCrossDomainLinkingTimeout","setCookiePath","setCookieDomain","setDomains","setUserId","setSiteId","enableLinkTracking","setSecureCookie"];function Y(ai,ak){var aj=new O(ai,ak);
+G.push(aj);_paq=c(_paq,A);for(C=0;C<_paq.length;C++){if(_paq[C]){aa(_paq[C])}}_paq=new F();return aj}ah(R,"beforeunload",ac,false);Date.prototype.getTimeAlias=Date.prototype.getTime;e={initialized:false,JSON:JSON_PIWIK,DOM:{addEventListener:function(al,ak,aj,ai){var am=typeof ai;if(am==="undefined"){ai=false}ah(al,ak,aj,ai)},onLoad:m,onReady:p,isNodeVisible:j,isOrWasNodeVisible:u.isNodeVisible},on:function(aj,ai){if(!w[aj]){w[aj]=[]}w[aj].push(ai)},off:function(ak,aj){if(!w[ak]){return}var ai=0;for(ai;ai<w[ak].length;ai++){if(w[ak][ai]===aj){w[ak].splice(ai,1)}}},trigger:function(ak,al,aj){if(!w[ak]){return}var ai=0;for(ai;ai<w[ak].length;ai++){w[ak][ai].apply(aj||R,al)}},addPlugin:function(ai,aj){b[ai]=aj},getTracker:function(ai,aj){if(!H(aj)){aj=this.getAsyncTracker().getSiteId()}if(!H(ai)){ai=this.getAsyncTracker().getTrackerUrl()}return new O(ai,aj)},getAsyncTrackers:function(){return G},addTracker:function(ai,aj){if(!G.length){Y(ai,aj)}else{G[0].addTracker(ai,aj)}},getAsyncTracker:function(aj,am){var al;
+if(G&&G.length&&G[0]){al=G[0]}else{return Y(aj,am)}if(!am&&!aj){return al}if((!H(am)||null===am)&&al){am=al.getSiteId()}if((!H(aj)||null===aj)&&al){aj=al.getTrackerUrl()}var ak,ai=0;for(ai;ai<G.length;ai++){ak=G[ai];if(ak&&String(ak.getSiteId())===String(am)&&ak.getTrackerUrl()===aj){return ak}}},retryMissedPluginCalls:function(){var aj=ab;ab=[];var ai=0;for(ai;ai<aj.length;ai++){aa(aj[ai])}}};if(typeof define==="function"&&define.amd){define("piwik",[],function(){return e})}return e}());
/*!!! pluginTrackerHook */
-}(function(){function b(){if("object"!==typeof _paq){return false}var c=typeof _paq.length;if("undefined"===c){return false}return !!_paq.length}if(window&&"object"===typeof window.piwikPluginAsyncInit&&window.piwikPluginAsyncInit.length){var a=0;for(a;a<window.piwikPluginAsyncInit.length;a++){if(typeof window.piwikPluginAsyncInit[a]==="function"){window.piwikPluginAsyncInit[a]()}}}if(window&&window.piwikAsyncInit){window.piwikAsyncInit()}if(!window.Piwik.getAsyncTrackers().length){if(b()){window.Piwik.addTracker()}else{_paq={push:function(c){var d=typeof console;if(d!=="undefined"&&console&&console.error){console.error("_paq.push() was used but Piwik tracker was not initialized before the piwik.js file was loaded. Make sure to configure the tracker via _paq.push before loading piwik.js. Alternatively, you can create a tracker via Piwik.addTracker() manually and then use _paq.push but it may not fully work as tracker methods may not be executed in the correct order.",c)
-}}}}}window.Piwik.trigger("PiwikInitialized",[]);window.Piwik.initialized=true}());(function(){var a=(typeof AnalyticsTracker);if(a==="undefined"){AnalyticsTracker=window.Piwik}}());if(typeof piwik_log!=="function"){piwik_log=function(b,f,d,g){function a(h){try{if(window["piwik_"+h]){return window["piwik_"+h]}}catch(i){}return}var c,e=window.Piwik.getTracker(d,f);e.setDocumentTitle(b);e.setCustomData(g);c=a("tracker_pause");if(c){e.setLinkTrackingTimer(c)}c=a("download_extensions");if(c){e.setDownloadExtensions(c)}c=a("hosts_alias");if(c){e.setDomains(c)}c=a("ignore_classes");if(c){e.setIgnoreClasses(c)}e.trackPageView();if(a("install_tracker")){piwik_track=function(i,k,j,h){e.setSiteId(k);e.setTrackerUrl(j);e.trackLink(i,h)};e.enableLinkTracking()}};
+}(function(){function b(){if("object"!==typeof _paq){return false}var c=typeof _paq.length;if("undefined"===c){return false}return !!_paq.length}if(window&&"object"===typeof window.piwikPluginAsyncInit&&window.piwikPluginAsyncInit.length){var a=0;for(a;a<window.piwikPluginAsyncInit.length;a++){if(typeof window.piwikPluginAsyncInit[a]==="function"){window.piwikPluginAsyncInit[a]()}}}if(window&&window.piwikAsyncInit){window.piwikAsyncInit()}if(!window.Piwik.getAsyncTrackers().length){if(b()){window.Piwik.addTracker()
+}else{_paq={push:function(c){var d=typeof console;if(d!=="undefined"&&console&&console.error){console.error("_paq.push() was used but Piwik tracker was not initialized before the piwik.js file was loaded. Make sure to configure the tracker via _paq.push before loading piwik.js. Alternatively, you can create a tracker via Piwik.addTracker() manually and then use _paq.push but it may not fully work as tracker methods may not be executed in the correct order.",c)}}}}}window.Piwik.trigger("PiwikInitialized",[]);window.Piwik.initialized=true}());(function(){var a=(typeof AnalyticsTracker);if(a==="undefined"){AnalyticsTracker=window.Piwik}}());if(typeof piwik_log!=="function"){piwik_log=function(b,f,d,g){function a(h){try{if(window["piwik_"+h]){return window["piwik_"+h]}}catch(i){}return}var c,e=window.Piwik.getTracker(d,f);e.setDocumentTitle(b);e.setCustomData(g);c=a("tracker_pause");if(c){e.setLinkTrackingTimer(c)}c=a("download_extensions");if(c){e.setDownloadExtensions(c)}c=a("hosts_alias");
+if(c){e.setDomains(c)}c=a("ignore_classes");if(c){e.setIgnoreClasses(c)}e.trackPageView();if(a("install_tracker")){piwik_track=function(i,k,j,h){e.setSiteId(k);e.setTrackerUrl(j);e.trackLink(i,h)};e.enableLinkTracking()}};
/*!! @license-end */
}; \ No newline at end of file
diff --git a/plugins/API/Controller.php b/plugins/API/Controller.php
index 41234d5c9a..416cc728de 100644
--- a/plugins/API/Controller.php
+++ b/plugins/API/Controller.php
@@ -53,7 +53,7 @@ class Controller extends \Piwik\Plugin\Controller
$ApiDocumentation = new DocumentationGenerator();
$prefixUrls = Common::getRequestVar('prefixUrl', 'http://demo.piwik.org/', 'string');
- if (!UrlHelper::isLookLikeUrl($prefixUrls)) {
+ if (!UrlHelper::isLookLikeUrl($prefixUrls) || strpos($prefixUrls, 'http') !== 0) {
$prefixUrls = '';
}
return $ApiDocumentation->getApiDocumentationAsStringForDeveloperReference($outputExampleUrls = true, $prefixUrls);
diff --git a/plugins/API/lang/de.json b/plugins/API/lang/de.json
index 5c3d8269d0..3d4049cf68 100644
--- a/plugins/API/lang/de.json
+++ b/plugins/API/lang/de.json
@@ -11,6 +11,6 @@
"UserAuthentication": "Benutzerauthentifizierung",
"UsingTokenAuth": "Wenn Sie %1$s Daten mit einem Script, einem Crontab, etc. abrufen wollen, %2$s müssen Sie den Parameter %3$s an die URLs anhängen, deren API-Aufrufe eine Authentifizierung benötigen.",
"Glossary": "Glossar",
- "LearnAboutCommonlyUsedTerms": "Lernen Sie mehr über die häufig verwendeten Begriffe um das Beste aus Ihren Piwik Analysen zu machen: %1$s und %2$s"
+ "LearnAboutCommonlyUsedTerms": "Lernen Sie mehr über die häufig verwendeten Begriffe, um das Beste aus Ihren Piwik Analysen zu machen: %1$s und %2$s"
}
} \ No newline at end of file
diff --git a/plugins/API/lang/id.json b/plugins/API/lang/id.json
index 138242ef3f..f4d6439528 100644
--- a/plugins/API/lang/id.json
+++ b/plugins/API/lang/id.json
@@ -1,11 +1,16 @@
{
"API": {
+ "ChangeTokenHint": "Jika Anda ingin mengganti token ini, silakan menuju %1$s pengaturan halaman Anda %2$s.",
"GenerateVisits": "Bila Anda tidak memiliki data untuk hari ini, Anda dapat membuat beberapa menggunakan pengaya %1$s. Anda dapat mengaktifkan pengaya %2$s, lalu klik menu 'Pembangkit Kunjungan' di halaman Pengurus Piwik.",
"KeepTokenSecret": "token_auth ini merupakan hal yang rahasia sebagaimana nama-id dan sandi Anda, %1$s sehingga jangan memberitahukannya%2$s!",
"LoadedAPIs": "Berhasil memuat API %s",
"MoreInformation": "Untuk informasi selengkapnya tentang API Piwik, silakan melihat %1$s Pengenalan API Piwik%2$s dan %3$sReferensi API Piwik%4$s.",
+ "PluginDescription": "Semua data di Piwik tersedia melalui API sederhana. Plugin ini adalah titik masuk layanan web, yang dapat Anda hubungkan untuk mendapatkan data Web Analytics Anda dalam bentuk xml, json, php, csv, dll.",
+ "ReportingApiReference": "Referensi Pelaporan API",
"TopLinkTooltip": "Akses data Analisis Ramatraya terprogram melalui API sederhana dalam json, xml, dan lain lain.",
"UserAuthentication": "Otentikasi pengguna",
- "UsingTokenAuth": "Jika Anda ingin melakukan permintaan data %1$s menggunakan skrip, crontab, dll. %2$s Anda harus menambah parameter %3$s agar API memanggil URL yang membutuhkan otentikasi."
+ "UsingTokenAuth": "Jika Anda ingin melakukan permintaan data %1$s menggunakan skrip, crontab, dll. %2$s Anda harus menambah parameter %3$s agar API memanggil URL yang membutuhkan otentikasi.",
+ "Glossary": "Glosarium",
+ "LearnAboutCommonlyUsedTerms": "Pelajari tentang istilah yang umum digunakan untuk memanfaatkan Analitik Piwik:%1$s dan %2$s."
}
} \ No newline at end of file
diff --git a/plugins/API/lang/pl.json b/plugins/API/lang/pl.json
index 0a83b6c205..e05eb6fc53 100644
--- a/plugins/API/lang/pl.json
+++ b/plugins/API/lang/pl.json
@@ -1,13 +1,16 @@
{
"API": {
+ "ChangeTokenHint": "W celu zmiany tokenu, proszę odwiedź %1$s strony ustawień osobistych %2$s.",
"GenerateVisits": "Jeżeli nie posiadasz żadnych danych do dnia dzisiejszego, możesz na początek wygenerować trochę symulowanych danych testowych używając wtyczki o nazwie %1$s. Możesz aktywować i uruchomić wtyczkę %2$s, a następnie kliknąć w menu przycisk Potwierdź w 'generatorze odwiedzin', w strefie menu Konfiguracja administratora systemu Piwik.",
"KeepTokenSecret": "Ten token_auth jest tak samo tajny jak twój login i hasło, %1$s nie upowszechniaj go%2$s!",
"LoadedAPIs": "Środowisko API załadowano %s pomyślnie",
"MoreInformation": "Aby uzyskać więcej informacji o interfejsie API statystyk Piwik, prosimy przeczytać %1$s Wprowadzenie do interfejsu API w Piwik%2$s, a także na stronie opracowania %3$s Piwik API Reference%4$s.",
"PluginDescription": "Wszystkie dane w Piwiku są dostępne poprzez proste API. Ten plugin jest punktem końcowym serwisu web,",
+ "ReportingApiReference": "Referencje API Raportów",
"TopLinkTooltip": "Dostęp do twoich danych analitycznych programistycznie poprzez proste API w formatach json, xml itp.",
"UserAuthentication": "Uwierzytelnianie użytkownika",
"UsingTokenAuth": "Jeżeli wysuniesz żądanie %1$s ujęcia pewnych danych w statystyce za pomocą crontab, %2$s musisz dodać poniższy parametr %3$s do interfejsu API, wywołując URL-e które wymagają uwierzytelniania.",
- "Glossary": "Słownik"
+ "Glossary": "Słownik",
+ "LearnAboutCommonlyUsedTerms": "Poznaj powszechnie stosowane terminy i zrozum zebrane przez Piwik dane: %1$s i %2$s."
}
} \ No newline at end of file
diff --git a/plugins/API/lang/ru.json b/plugins/API/lang/ru.json
index 93987babb9..f3313e81fd 100644
--- a/plugins/API/lang/ru.json
+++ b/plugins/API/lang/ru.json
@@ -1,5 +1,6 @@
{
"API": {
+ "ChangeTokenHint": "Если вы хотите изменить этот токен, пожалуйста, пройдите на вашу %1$sстраницу персональных настроек%2$s.",
"GenerateVisits": "Если у вас нет данных на сегодня, вы можете для начала сгенерировать немного статистики, используя плагин: %1$s. Включите плагин %2$s, кликните на ’Visitor Generator’ в панели администрирования Piwik.",
"KeepTokenSecret": "Этот token_auth является таким же секретным, как ваш логин и пароль. %1$s НЕ СООБЩАЙТЕ ЕГО НИКОМУ%2$s!",
"LoadedAPIs": "%s API успешно загружены",
diff --git a/plugins/API/lang/sv.json b/plugins/API/lang/sv.json
index 45fe763927..af800ae80d 100644
--- a/plugins/API/lang/sv.json
+++ b/plugins/API/lang/sv.json
@@ -1,5 +1,6 @@
{
"API": {
+ "ChangeTokenHint": "Om du vill ändra denna token gå till din %1$spersonliga inställningssida%2$s.",
"GenerateVisits": "Om du inte har data för idag så kan du först skapa några data med hjälp av %1$s plugin. Du kan aktivera %2$s plugin, klicka sedan på 'Besöksgeneratorn'-menyn i Piwik administrationsområdet.",
"KeepTokenSecret": "Detta token_auth är lika hemligt som ditt användarnamn och lösenord, %1$s dela inte med dig av detta! %2$s!",
"LoadedAPIs": "Laddade in %s API'er utan problem",
diff --git a/plugins/API/lang/tr.json b/plugins/API/lang/tr.json
index dd681977f2..4f4f4c66ad 100644
--- a/plugins/API/lang/tr.json
+++ b/plugins/API/lang/tr.json
@@ -1,5 +1,6 @@
{
"API": {
+ "ChangeTokenHint": "Bu kodu değiştirmek isterseniz %1$skişisel ayarlar sayfanıza%2$s gidin.",
"GenerateVisits": "Bugün için bir veri yoksa %1$s uygulama ekini kullanarak biraz veri oluşturabilirsiniz. %2$s uygulama ekini etkinleştirin. Ardından Piwik Yönetim bölümünden 'Ziyaretçi Üreteci' menüsüne tıklayın.",
"KeepTokenSecret": "Bu token_auth kodu kullanıcı adı ve parolanız kadar gizlidir. %1$s kimseyle paylaşmayın%2$s!",
"LoadedAPIs": "%s API yazılımı yüklendi",
@@ -8,8 +9,8 @@
"ReportingApiReference": "Rapor API Referansı",
"TopLinkTooltip": "Web istatistiği verilerine json, xml ve benzer yöntemlerle Temel API üzerinden erişilmesini sağlar.",
"UserAuthentication": "Kullanıcı kimlik doğrulaması",
- "UsingTokenAuth": "Bir script, cron vb içerisinden %1$s verisi çağırmak isterseniz, %2$s kimlik doğrulama gerektiren API bağlantılarına %3$s parametresini eklemelisiniz.",
+ "UsingTokenAuth": "Bir betik, zamanlanmış görev vb içerisinden %1$s veri almak isterseniz, %2$s kimlik doğrulaması gerektiren API bağlantılarına %3$s parametresini eklemelisiniz.",
"Glossary": "Sözlük",
- "LearnAboutCommonlyUsedTerms": "Piwik analatiğin çoğu için şu sık kullanılan terimleri öğren :%1$s ve%2$s."
+ "LearnAboutCommonlyUsedTerms": "Piwik Analytics:%1$s ve%2$s üzerinde yaygın kullanılan terimler hakkında bilgi alın.."
}
} \ No newline at end of file
diff --git a/plugins/API/tests/Unit/ConsoleRendererTest.php b/plugins/API/tests/Unit/ConsoleRendererTest.php
index bd556809ff..a1757b34ec 100644
--- a/plugins/API/tests/Unit/ConsoleRendererTest.php
+++ b/plugins/API/tests/Unit/ConsoleRendererTest.php
@@ -9,7 +9,9 @@
namespace Piwik\Plugins\API\tests\Unit;
use Piwik\DataTable;
+use Piwik\Date;
use Piwik\Plugins\API\Renderer\Console;
+use Piwik\Plugins\CoreHome\Columns\Metrics\AverageTimeOnSite;
/**
* @group Plugin
@@ -82,6 +84,22 @@ class ConsoleRendererTest extends \PHPUnit_Framework_TestCase
", $response);
}
+ public function test_renderDataTableWithObjects_shouldReturnResult()
+ {
+ $dataTable = new DataTable();
+ $dataTable->addRowFromSimpleArray(array('nb_visits' => 5, 'nb_random' => 10));
+ $dataTable->setMetadata('processedRows', [
+ new AverageTimeOnSite(),
+ new \stdClass(),
+ Date::factory('2016-01-01 00:00:00')
+ ]);
+
+ $response = $this->builder->renderDataTable($dataTable);
+
+ $this->assertSame("- 1 ['nb_visits' => 5, 'nb_random' => 10] [] [idsubtable = ]<br />
+<hr />Metadata<br /><br /> <b>processedRows</b><br />0 => Object [Piwik\Plugins\CoreHome\Columns\Metrics\AverageTimeOnSite]1 => Object [stdClass]2 => 2016-01-01", $response);
+ }
+
public function test_renderArray_ShouldReturnConsoleResult()
{
$input = array(1, 2, 5, 'string', 10);
diff --git a/plugins/API/tests/Unit/HtmlRendererTest.php b/plugins/API/tests/Unit/HtmlRendererTest.php
index 22b492e10d..d1370432ff 100644
--- a/plugins/API/tests/Unit/HtmlRendererTest.php
+++ b/plugins/API/tests/Unit/HtmlRendererTest.php
@@ -9,7 +9,9 @@
namespace Piwik\Plugins\API\tests\Unit;
use Piwik\DataTable;
+use Piwik\Date;
use Piwik\Plugins\API\Renderer\Html;
+use Piwik\Plugins\CoreHome\Columns\Metrics\AverageTimeOnSite;
/**
* @group Plugin
@@ -258,6 +260,52 @@ message', $response);
', $response);
}
+ public function test_renderDataTable_shouldRenderDataTableWithComplexMetadata()
+ {
+ $dataTable = new DataTable\Simple();
+ $row = new DataTable\Row();
+ $row->setColumn('nb_visits', 3);
+ $row->setColumn('nb_random', 6);
+ $row->setMetadata('processedRows', [
+ new AverageTimeOnSite(),
+ new \stdClass(),
+ Date::factory('2016-01-01 00:00:00')
+ ]);
+ $dataTable->addRow($row);
+
+ $response = $this->builder->renderDataTable($dataTable);
+
+ $this->assertEquals('<table id="MultiSites_getAll" border="1">
+<thead>
+ <tr>
+ <th>nb_visits</th>
+ <th>nb_random</th>
+ <th>_metadata</th>
+ </tr>
+</thead>
+<tbody>
+ <tr>
+ <td>3</td>
+ <td>6</td>
+ <td>\'processedRows\' =&gt; array (
+ 0 =&gt;
+ Piwik\Plugins\CoreHome\Columns\Metrics\AverageTimeOnSite::__set_state(array(
+ )),
+ 1 =&gt;
+ stdClass::__set_state(array(
+ )),
+ 2 =&gt;
+ Piwik\Date::__set_state(array(
+ \'timestamp\' =&gt; 1451606400,
+ \'timezone\' =&gt; \'UTC\',
+ )),
+)</td>
+ </tr>
+</tbody>
+</table>
+', $response);
+ }
+
public function test_renderArray_ShouldConvertSimpleArrayToJson()
{
$input = array(1, 2, 5, 'string', 10);
diff --git a/plugins/Actions/Actions.php b/plugins/Actions/Actions.php
index 409940d495..35c673e716 100644
--- a/plugins/Actions/Actions.php
+++ b/plugins/Actions/Actions.php
@@ -30,19 +30,11 @@ class Actions extends \Piwik\Plugin
'ViewDataTable.configure' => 'configureViewDataTable',
'AssetManager.getJavaScriptFiles' => 'getJsFiles',
'Insights.addReportToOverview' => 'addReportToInsightsOverview',
- 'Live.getAllVisitorDetails' => 'extendVisitorDetails',
'Metrics.getDefaultMetricTranslations' => 'addMetricTranslations',
'Metrics.getDefaultMetricDocumentationTranslations' => 'addMetricDocumentationTranslations',
);
}
- public function extendVisitorDetails(&$visitor, $details)
- {
- $visitor['searches'] = $details['visit_total_searches'];
- $visitor['actions'] = $details['visit_total_actions'];
- $visitor['interactions'] = $details['visit_total_interactions'];
- }
-
public function addMetricTranslations(&$translations)
{
$metrics = array(
diff --git a/plugins/Actions/ArchivingHelper.php b/plugins/Actions/ArchivingHelper.php
index 192a3089ba..71386274c8 100644
--- a/plugins/Actions/ArchivingHelper.php
+++ b/plugins/Actions/ArchivingHelper.php
@@ -53,7 +53,7 @@ class ArchivingHelper
unset($row[PiwikMetrics::INDEX_SITE_SEARCH_HAS_NO_RESULT]);
}
- if (in_array($row['type'], array(Action::TYPE_CONTENT, Action::TYPE_EVENT))) {
+ if (in_array($row['type'], array(Action::TYPE_CONTENT, Action::TYPE_EVENT, Action::TYPE_EVENT_NAME, Action::TYPE_CONTENT_PIECE, Action::TYPE_CONTENT_TARGET))) {
continue;
}
diff --git a/plugins/Actions/VisitorDetails.php b/plugins/Actions/VisitorDetails.php
new file mode 100644
index 0000000000..becb6cdaf7
--- /dev/null
+++ b/plugins/Actions/VisitorDetails.php
@@ -0,0 +1,360 @@
+<?php
+/**
+ * Piwik - free/libre analytics platform
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+namespace Piwik\Plugins\Actions;
+
+use Piwik\Common;
+use Piwik\Config;
+use Piwik\Date;
+use Piwik\Db;
+use Piwik\Metrics\Formatter;
+use Piwik\Piwik;
+use Piwik\Plugins\Live\VisitorDetailsAbstract;
+use Piwik\Site;
+use Piwik\Tracker\Action;
+use Piwik\Tracker\PageUrl;
+use Piwik\View;
+
+class VisitorDetails extends VisitorDetailsAbstract
+{
+ public function extendVisitorDetails(&$visitor)
+ {
+ $visitor['searches'] = $this->details['visit_total_searches'];
+ $visitor['actions'] = $this->details['visit_total_actions'];
+ $visitor['interactions'] = $this->details['visit_total_interactions'];
+ }
+
+ public function provideActionsForVisitIds(&$actions, $visitIds)
+ {
+ $actionDetails = $this->queryActionsForVisits($visitIds);
+ // use while / array_shift combination instead of foreach to save memory
+ while (is_array($actionDetails) && count($actionDetails)) {
+ $action = array_shift($actionDetails);
+ $idVisit = $action['idvisit'];
+ unset($action['idvisit']);
+ $actions[$idVisit][] = $action;
+ }
+ }
+
+
+ public function provideActionsForVisit(&$actions, $visitorDetails)
+ {
+ $actionDetails = $actions;
+
+ $formatter = new Formatter();
+
+ // Enrich with time spent per action
+ $nextActionId = 0;
+ foreach ($actionDetails as $idx => &$action) {
+
+ if ($idx < $nextActionId || !$this->shouldHandleAction($action)) {
+ continue; // skip to next action having timeSpentRef
+ }
+
+ // search for next action with timeSpentRef
+ $nextActionId = $idx + 1;
+ $nextAction = null;
+
+ while (isset($actionDetails[$nextActionId]) &&
+ (!$this->shouldHandleAction($actionDetails[$nextActionId]) ||
+ !array_key_exists('timeSpentRef', $actionDetails[$nextActionId]))) {
+ $nextActionId++;
+ }
+ $nextAction = isset($actionDetails[$nextActionId]) ? $actionDetails[$nextActionId] : null;
+
+ // Set the time spent for this action (which is the timeSpentRef of the next action)
+ if ($nextAction) {
+ $action['timeSpent'] = $nextAction['timeSpentRef'];
+ } else {
+
+ // Last action of a visit.
+ // By default, Piwik does not know how long the user stayed on the page
+ // If enableHeartBeatTimer() is used in piwik.js then we can find the accurate time on page for the last pageview
+ $visitTotalTime = $visitorDetails['visitDuration'];
+ $timeOfLastAction = Date::factory($action['serverTimePretty'])->getTimestamp();
+
+ $timeSpentOnAllActionsApartFromLastOne = ($timeOfLastAction - $visitorDetails['firstActionTimestamp']);
+ $timeSpentOnPage = $visitTotalTime - $timeSpentOnAllActionsApartFromLastOne;
+
+ // Safe net, we assume the time is correct when it's more than 10 seconds
+ if ($timeSpentOnPage > 10) {
+ $action['timeSpent'] = $timeSpentOnPage;
+ }
+ }
+
+ if (isset($action['timeSpent'])) {
+ $action['timeSpentPretty'] = $formatter->getPrettyTimeFromSeconds($action['timeSpent'], true);
+ }
+
+ unset($action['timeSpentRef']); // not needed after timeSpent is added
+ }
+
+ $actions = $actionDetails;
+ }
+
+ private function shouldHandleAction($action) {
+ $actionTypesToHandle = array(
+ Action::TYPE_PAGE_URL,
+ Action::TYPE_SITE_SEARCH,
+ Action::TYPE_EVENT,
+ Action::TYPE_OUTLINK,
+ Action::TYPE_DOWNLOAD
+ );
+
+ return in_array($action['type'], $actionTypesToHandle) || !empty($action['eventType']);
+ }
+
+ public function extendActionDetails(&$action, $nextAction, $visitorDetails)
+ {
+ $formatter = new Formatter();
+
+ if ($action['type'] == Action::TYPE_SITE_SEARCH) {
+ // Handle Site Search
+ $action['siteSearchKeyword'] = $action['pageTitle'];
+ unset($action['pageTitle']);
+ }
+
+ // Generation time
+ if ($this->shouldHandleAction($action) && empty($action['eventType']) && isset($action['custom_float']) && $action['custom_float'] > 0) {
+ $action['generationTimeMilliseconds'] = $action['custom_float'];
+ $action['generationTime'] = $formatter->getPrettyTimeFromSeconds($action['custom_float'] / 1000, true);
+ unset($action['custom_float']);
+ }
+
+ if (array_key_exists('custom_float', $action) && is_null($action['custom_float'])) {
+ unset($action['custom_float']);
+ }
+
+ if (array_key_exists('interaction_position', $action)) {
+ $action['interactionPosition'] = $action['interaction_position'];
+ unset($action['interaction_position']);
+ }
+
+ // Reconstruct url from prefix
+ if (array_key_exists('url', $action) && array_key_exists('url_prefix', $action)) {
+ $url = PageUrl::reconstructNormalizedUrl($action['url'], $action['url_prefix']);
+ $url = Common::unsanitizeInputValue($url);
+
+ $action['url'] = $url;
+ unset($action['url_prefix']);
+ }
+
+ switch ($action['type']) {
+ case 'goal':
+ $action['icon'] = 'plugins/Morpheus/images/goal.png';
+ break;
+ case Piwik::LABEL_ID_GOAL_IS_ECOMMERCE_ORDER:
+ case Piwik::LABEL_ID_GOAL_IS_ECOMMERCE_CART:
+ $action['icon'] = 'plugins/Morpheus/images/' . $action['type'] . '.png';
+ break;
+ case Action::TYPE_DOWNLOAD:
+ $action['type'] = 'download';
+ $action['icon'] = 'plugins/Morpheus/images/download.png';
+ break;
+ case Action::TYPE_OUTLINK:
+ $action['type'] = 'outlink';
+ $action['icon'] = 'plugins/Morpheus/images/link.png';
+ break;
+ case Action::TYPE_SITE_SEARCH:
+ $action['type'] = 'search';
+ $action['icon'] = 'plugins/Morpheus/images/search_ico.png';
+ break;
+ case Action::TYPE_PAGE_URL:
+ case '':
+ $action['type'] = 'action';
+ $action['icon'] = null;
+ break;
+ }
+
+ // Convert datetimes to the site timezone
+ $dateTimeVisit = Date::factory($action['serverTimePretty'],
+ Site::getTimezoneFor($visitorDetails['idSite']));
+ $action['serverTimePretty'] = $dateTimeVisit->getLocalized(Date::DATETIME_FORMAT_SHORT);
+ $action['timestamp'] = $dateTimeVisit->getTimestamp();
+
+ unset($action['idlink_va']);
+ }
+
+ /**
+ * @param $idVisit
+ * @return array
+ * @throws \Exception
+ */
+ protected function queryActionsForVisits($idVisits)
+ {
+ $customFields = array();
+ $customJoins = array();
+
+ Piwik::postEvent('Actions.getCustomActionDimensionFieldsAndJoins', array(&$customFields, &$customJoins));
+
+ $customFields = array_filter($customFields);
+ array_unshift($customFields, ''); // add empty element at first
+ $customActionDimensionFields = implode(', ', $customFields);
+
+ // The second join is a LEFT join to allow returning records that don't have a matching page title
+ // eg. Downloads, Outlinks. For these, idaction_name is set to 0
+ $sql = "
+ SELECT
+ log_link_visit_action.idvisit,
+ COALESCE(log_action.type, log_action_title.type) AS type,
+ log_action.name AS url,
+ log_action.url_prefix,
+ log_action_title.name AS pageTitle,
+ log_action.idaction AS pageIdAction,
+ log_link_visit_action.idpageview,
+ log_link_visit_action.idlink_va,
+ log_link_visit_action.server_time as serverTimePretty,
+ log_link_visit_action.time_spent_ref_action as timeSpentRef,
+ log_link_visit_action.idlink_va AS pageId,
+ log_link_visit_action.custom_float,
+ log_link_visit_action.interaction_position
+ " . $customActionDimensionFields . "
+ FROM " . Common::prefixTable('log_link_visit_action') . " AS log_link_visit_action
+ LEFT JOIN " . Common::prefixTable('log_action') . " AS log_action
+ ON log_link_visit_action.idaction_url = log_action.idaction
+ LEFT JOIN " . Common::prefixTable('log_action') . " AS log_action_title
+ ON log_link_visit_action.idaction_name = log_action_title.idaction
+ " . implode(" ", $customJoins) . "
+ WHERE log_link_visit_action.idvisit IN ('" . implode("','", $idVisits) . "')
+ ORDER BY log_link_visit_action.idvisit, server_time ASC
+ ";
+ $actionDetails = Db::fetchAll($sql);
+ return $actionDetails;
+ }
+
+
+ private $visitedPageUrls = array();
+ private $siteSearchKeywords = array();
+ private $pageGenerationTimeTotal = 0;
+
+ public function initProfile($visits, &$profile)
+ {
+ $this->visitedPageUrls = array();
+ $this->siteSearchKeywords = array();
+ $this->pageGenerationTimeTotal = 0;
+ $profile['totalActions'] = 0;
+ $profile['totalOutlinks'] = 0;
+ $profile['totalDownloads'] = 0;
+ $profile['totalSearches'] = 0;
+ $profile['totalPageViews'] = 0;
+ $profile['totalUniquePageViews'] = 0;
+ $profile['totalRevisitedPages'] = 0;
+ $profile['totalPageViewsWithTiming'] = 0;
+ $profile['searches'] = array();
+ }
+
+ public function handleProfileVisit($visit, &$profile)
+ {
+ $profile['totalActions'] += $visit->getColumn('actions');
+ }
+
+ public function handleProfileAction($action, &$profile)
+ {
+ $this->handleIfDownloadAction($action, $profile);
+ $this->handleIfOutlinkAction($action, $profile);
+ $this->handleIfSiteSearchAction($action, $profile);
+ $this->handleIfPageViewAction($action, $profile);
+ $this->handleIfPageGenerationTime($action, $profile);
+ }
+
+ public function finalizeProfile($visits, &$profile)
+ {
+ arsort($this->visitedPageUrls);
+ $profile['visitedPages'] = $this->visitedPageUrls;
+
+ $this->handleSiteSearches($profile);
+ $this->handleAveragePageGenerationTime($profile);
+ }
+
+ /**
+ * @param $action
+ */
+ private function handleIfDownloadAction($action, &$profile)
+ {
+ if ($action['type'] != 'download') {
+ return;
+ }
+ $profile['totalDownloads']++;
+ }
+
+ /**
+ * @param $action
+ */
+ private function handleIfOutlinkAction($action, &$profile)
+ {
+ if ($action['type'] != 'outlink') {
+ return;
+ }
+ $profile['totalOutlinks']++;
+ }
+
+ /**
+ * @param $action
+ */
+ private function handleIfPageViewAction($action, &$profile)
+ {
+ if ($action['type'] != 'action') {
+ return;
+ }
+ $profile['totalPageViews']++;
+ $pageUrl = $action['url'];
+ if (!empty($pageUrl)) {
+ if (!array_key_exists($pageUrl, $this->visitedPageUrls)) {
+ $this->visitedPageUrls[$pageUrl] = 0;
+ $profile['totalUniquePageViews']++;
+ }
+ $this->visitedPageUrls[$pageUrl]++;
+ if ($this->visitedPageUrls[$pageUrl] == 2) {
+ $profile['totalRevisitedPages']++;
+ }
+ }
+ }
+
+ private function handleIfSiteSearchAction($action, &$profile)
+ {
+ if (!isset($action['siteSearchKeyword'])) {
+ return;
+ }
+ $keyword = $action['siteSearchKeyword'];
+
+ if (!isset($this->siteSearchKeywords[$keyword])) {
+ $this->siteSearchKeywords[$keyword] = 0;
+ ++$profile['totalSearches'];
+ }
+ ++$this->siteSearchKeywords[$keyword];
+ }
+
+ private function handleSiteSearches(&$profile)
+ {
+ // sort by visit/action
+ arsort($this->siteSearchKeywords);
+
+ foreach ($this->siteSearchKeywords as $keyword => $searchCount) {
+ $profile['searches'][] = array(
+ 'keyword' => $keyword,
+ 'searches' => $searchCount
+ );
+ }
+ }
+
+ private function handleIfPageGenerationTime($action, &$profile)
+ {
+ if (isset($action['generationTimeMilliseconds'])) {
+ $this->pageGenerationTimeTotal += $action['generationTimeMilliseconds'];
+ ++$profile['totalPageViewsWithTiming'];
+ }
+ }
+
+ private function handleAveragePageGenerationTime(&$profile)
+ {
+ if ($profile['totalPageViewsWithTiming']) {
+ $profile['averagePageGenerationTime'] =
+ round($this->pageGenerationTimeTotal / (1000 * $profile['totalPageViewsWithTiming']), $precision = 3);
+ }
+ }
+} \ No newline at end of file
diff --git a/plugins/Actions/javascripts/actionsDataTable.js b/plugins/Actions/javascripts/actionsDataTable.js
index 6adfe62cbd..acb3eab702 100644
--- a/plugins/Actions/javascripts/actionsDataTable.js
+++ b/plugins/Actions/javascripts/actionsDataTable.js
@@ -66,7 +66,7 @@
if (!self.param.filter_pattern_recursive) {
self.numberOfSubtables = rows.filter('.subDataTable').click(function () {
self.onClickActionSubDataTable(this)
- }).size();
+ }).length;
}
self.applyCosmetics(domElem, rows);
self.handleColumnHighlighting(domElem);
diff --git a/plugins/Actions/lang/de.json b/plugins/Actions/lang/de.json
index e3ee105099..af11dc192d 100644
--- a/plugins/Actions/lang/de.json
+++ b/plugins/Actions/lang/de.json
@@ -13,7 +13,7 @@
"ColumnNoResultKeyword": "Suchbegriff ohne Ergebnisse",
"ColumnPageName": "Seitenname",
"ColumnPagesPerSearch": "Besuchte Ergebnisseiten",
- "ColumnPagesPerSearchDocumentation": "In dieser Spalte sehen Sie, wie oft die Ergebnisseiten des Suchbegriffs im Durchschnitt aufgerufen wurden. Die Ergebnisse werden beispielsweise mehrere Male aufgerufen, wenn sie in mehrere Seite aufgespalten sind und der Besucher verschiedene Seiten aufruft.",
+ "ColumnPagesPerSearchDocumentation": "In dieser Spalte sehen Sie, wie oft die Ergebnisseiten des Suchbegriffs im Durchschnitt aufgerufen wurden. Die Ergebnisse werden beispielsweise mehrere Male aufgerufen, wenn sie in mehrere Seiten aufgespalten sind und der Besucher verschiedene Seiten aufruft.",
"ColumnPageURL": "Seiten-URL",
"ColumnSearchCategory": "Suchkategorie",
"ColumnSearches": "Suchanfragen",
diff --git a/plugins/Actions/lang/el.json b/plugins/Actions/lang/el.json
index 589edcb7d0..26d6e5747b 100644
--- a/plugins/Actions/lang/el.json
+++ b/plugins/Actions/lang/el.json
@@ -42,7 +42,9 @@
"PagesReportDocumentation": "Αυτή η αναφορά περιέχει πληροφορίες σχετικά με τις επισκεφθείσες διευθύνσεις σελίδων. %s Ο πίνακας ταξινομείται ιεραρχικά, οι διευθύνσεις σελίδων εμφανίζονται με δομή φακέλου.",
"PageTitlesReportDocumentation": "Η αναφορά αυτή περιέχει πληροφορίες σχετικά με τους τίτλους των σελίδων που επισκέφθηκαν οι χρήστες. %1$s Ο τίτλος της σελίδας είναι η σήμανση HTML %2$s που τα περισσότερα προγράμματα πλοήγησης δείχνουν στον τίτλο του παραθύρου τους.",
"PageUrls": "Διευθύνσεις σελίδων",
+ "PageViewsByVisitor": "Ο αριθμός των αναγνώσεων της σελίδας από αυτόν τον επισκέπτη σε όλες του τις επισκέψεις",
"PluginDescription": "Αναφέρει σχετικά με τις αναγνώσεις σελίδων και τους τίτλους τους. Επιτρέπει την μέτρηση της εσωτερικής μηχανής αναζήτησης του ιστοτόπου σας. Αυτόματα παρακολουθεί τα κλικ προς εξωτερικούς συνδέσμους και κατεβάσματα αρχείων.",
+ "RevisitedPages": "Σελίδες που αναγνώστηκαν παραπάνω από μία φορές",
"SiteSearchCategories1": "Αυτή η αναφορά δημιουργεί λίστα με τις Κατηγορίες που οι επισκέπτες επέλεξαν όταν έκαναν μια Αναζήτηση στην ιστοσελίδα σας.",
"SiteSearchCategories2": "Για παράδειγμα, οι ιστοσελίδες Ηλεκτρονικού Εμπορίου τυπικά έχουν έναν επιλογέα «Κατηγορίας» ώστε οι επισκέπτες μπορούν να περιορίσουν τις αναζητήσεις τους από όλα τα προϊόντα σε μια συγκεκριμένη κατηγορία.",
"SiteSearchFollowingPagesDoc": "Όταν οι επισκέπτες αναζητούν στην ιστοσελίδα σας, αναζητούν μια συγκεκριμένη σελίδα, περιεχόμενο, προϊόν ή υπηρεσία. Αυτή η αναφορά δημιουργεί μια λίστα με τις σελίδες που επιλέχθηκαν περισσότερο μετά από μια εσωτερική αναζήτηση. Με άλλα λόγια, η λίστα των σελίδων που αναζητήθηκαν περίσσότερο από τους επισκέπτες που ήταν ήδη στην ιστοσελίδα σας.",
diff --git a/plugins/Actions/lang/en.json b/plugins/Actions/lang/en.json
index 91d219f81b..ab9fbff5f7 100644
--- a/plugins/Actions/lang/en.json
+++ b/plugins/Actions/lang/en.json
@@ -42,7 +42,9 @@
"PagesReportDocumentation": "This report contains information about the page URLs that have been visited. %s The table is organized hierarchically, the URLs are displayed as a folder structure.",
"PageTitlesReportDocumentation": "This report contains information about the titles of the pages that have been visited. %1$s The page title is the HTML %2$s Tag that most browsers show in their window title.",
"PageUrls": "Page URLs",
+ "PageViewsByVisitor": "Number of times this page was viewed by this visitor across all visits",
"PluginDescription": "Reports about the page views and page titles. Lets you measure your internal website's search engine. Automatically tracks clicks on external links and file downloads. ",
+ "RevisitedPages": "Pages viewed more than once",
"SiteSearchCategories1": "This report lists the Categories that visitors selected when they made a Search on your website.",
"SiteSearchCategories2": "For example, Ecommerce websites typically have a \"Category\" selector so that visitors can restrict their searches to all products in a specific Category.",
"SiteSearchFollowingPagesDoc": "When visitors search on your website, they are looking for a particular page, content, product, or service. This report lists the pages that were clicked the most after an internal search. In other words, the list of pages the most searched for by visitors already on your website.",
diff --git a/plugins/Actions/lang/id.json b/plugins/Actions/lang/id.json
index 919ad57eda..eef74642fe 100644
--- a/plugins/Actions/lang/id.json
+++ b/plugins/Actions/lang/id.json
@@ -18,6 +18,7 @@
"ColumnSearchCategory": "Kategori Pencarian",
"ColumnSearches": "Pencarian",
"ColumnSearchesDocumentation": "Jumlah kunjungan dengan pencarian kata kunci ini dalam mesin pencari Anda.",
+ "ColumnSearchExits": "%% Pencarian Keluar",
"ColumnSearchExitsDocumentation": "Persentase jumlah pengunjung yang meninggalkan situs setelah melakukan pencarian untuk Kata Kunci ini dalam mesin Pencarian Situs Anda.",
"ColumnSearchResultsCount": "Jumlah Hasil Pencarian",
"ColumnSiteSearchKeywords": "Kata Kunci Unik",
@@ -26,9 +27,12 @@
"ColumnUniqueDownloads": "Unduhan Unik",
"ColumnUniqueOutlinks": "Tautan Luar Unik",
"ColumnIdPageview": "ID Tampilan Halaman",
+ "ColumnInteractionPosition": "Posisi Interaksi",
"DownloadsReportDocumentation": "Dalam laporan ini, Anda dapat melihat berkas yang diunduh oleh pengunjung. %s Apa yang Piwik hitung adalah yang mengeklik tautan unduhan. Namun, bila unduhan sudah lengkap atau belum Piwik tidak mengetahuinya.",
+ "EntryPagesReportDocumentation": "Laporan ini berisi informasi tentang halaman masuk yang digunakan selama periode yang ditentukan. Halaman masuk adalah halaman pertama yang dilihat pengguna selama kunjungan mereka. %s URL entri ditampilkan sebagai struktur folder.",
"EntryPageTitles": "Judul halaman masuk",
"EntryPageTitlesReportDocumentation": "Laporan ini mengandung informasi tentang judul halaman masuk yang digunakan selama rentang waktu tertentu.",
+ "ExitPagesReportDocumentation": "Laporan ini berisi informasi tentang halaman keluar yang terjadi selama periode yang ditentukan. Halaman keluar adalah halaman terakhir yang dilihat pengguna selama kunjungan mereka. %s URL keluar ditampilkan sebagai struktur folder.",
"ExitPageTitles": "Judul halaman keluar",
"ExitPageTitlesReportDocumentation": "Laporan ini mengandung informasi tentang judul halman keluar yang terjadi selama waktu tertentu.",
"LearnMoreAboutSiteSearchLink": "Pelajari selengkapnya tentang Melacak bagaimana pengunjung Anda menggunakan Mesin Pencari Anda.",
diff --git a/plugins/Actions/lang/ja.json b/plugins/Actions/lang/ja.json
index ecc48d1d29..f1c0e7b9ca 100644
--- a/plugins/Actions/lang/ja.json
+++ b/plugins/Actions/lang/ja.json
@@ -1,6 +1,6 @@
{
"Actions": {
- "AvgGenerationTimeTooltip": "%3$s ~ %4$s の間の %2$s のヒット %1$s に基づく平均",
+ "AvgGenerationTimeTooltip": "%3$s ~ %4$s の間の %2$s のヒット ( 複数 ) %1$s に基づく平均",
"ColumnClickedURL": "クリックされた URL",
"ColumnActionURL": "アクション URL",
"ColumnClicks": "クリック数",
@@ -27,6 +27,7 @@
"ColumnUniqueDownloads": "ユニークダウンロード数",
"ColumnUniqueOutlinks": "ユニーク外部リンク数",
"ColumnIdPageview": "ページビューID",
+ "ColumnInteractionPosition": "インタラクションポジション",
"DownloadsReportDocumentation": "訪問者がどのファイルをダウンロードしたか、についてのリポートです。%s Piwikはダウンロードリンクのクリック数をカウントします。ダウンロードが完了したかどうかは判別できません。",
"EntryPagesReportDocumentation": "このレポートには、指定した期間中に使用されたエントリーのページに関する情報が含まれています。 エントリーページは、ユーザーが訪問中に見る最初のページです。%s エントリ URL は、フォルダ構造として表示されます。",
"EntryPageTitles": "入口ページタイトル",
diff --git a/plugins/Actions/lang/ko.json b/plugins/Actions/lang/ko.json
index 8ee0777e1e..49250b9d50 100644
--- a/plugins/Actions/lang/ko.json
+++ b/plugins/Actions/lang/ko.json
@@ -26,6 +26,7 @@
"ColumnUniqueDownloads": "고유 다운로드 수",
"ColumnUniqueOutlinks": "고유한 외부 링크 수",
"ColumnIdPageview": "페이지뷰 아이디",
+ "ColumnInteractionPosition": "상호작용 위치",
"DownloadsReportDocumentation": "이 보고서는 방문자가 어떤 파일을 다운로드했는지에 대한 정보입니다. %s Piwik는 다운로드 링크의 클릭 수를 계산합니다. 하지만 다운로드가 완료되었는지 여부는 확인할 수 없습니다.",
"EntryPageTitles": "진입 페이지 제목",
"EntryPageTitlesReportDocumentation": "이 보고서는 기간별 진입 페이지 제목에 대한 정보입니다.",
diff --git a/plugins/Actions/lang/pl.json b/plugins/Actions/lang/pl.json
index 02a86280c9..bb3cf56cf8 100644
--- a/plugins/Actions/lang/pl.json
+++ b/plugins/Actions/lang/pl.json
@@ -18,6 +18,7 @@
"ColumnSearchCategory": "Kategoria wyszukiwania",
"ColumnSearches": "Wyszukiwania",
"ColumnSearchesDocumentation": "Liczba wizyt, która wyszukiwała tego słowa kluczowego w wyszukiwarce na Twojej stronie.",
+ "ColumnSearchExits": "%% wyjść z wyszukiwania",
"ColumnSearchExitsDocumentation": "Procent odwiedzających którzy zostawili stronę dla danego słowa Kluczowego używając twojego systemu wyszukiwania.",
"ColumnSearchResultsCount": "Liczba wyników wyszukiwania",
"ColumnSiteSearchKeywords": "Unikalne słowa kluczowe",
@@ -25,9 +26,13 @@
"ColumnUniqueClicksDocumentation": "Liczba odwiedzających którzy kliknęli na ten link. Jeśli link był kliknięty wielokrotnie podczas wizyty, wtedy liczony jest tylko raz.",
"ColumnUniqueDownloads": "Pobrania bez powtórzeń",
"ColumnUniqueOutlinks": "Unikalne linki zewnętrzne",
+ "ColumnIdPageview": "ID wyświetlenia strony",
+ "ColumnInteractionPosition": "Miejsce interakcji",
"DownloadsReportDocumentation": "W tym raporcie możesz zobaczyć które pliki twoi odwiedzający pobrali. %s Które Piwik liczy jako pobrane kliknięcia na link pobrania. Niezalerznie czy pobranie było ukończone lub czy Piwik nie ma o tym informacji.",
- "EntryPageTitles": "Tytuły stron Wejść",
+ "EntryPagesReportDocumentation": "Ten raport zawiera informacje o stronach wejścia użytych w określonym przedziale czasu. Strona wejściowa, to pierwsza strona, którą odwiedzający zobaczy podczas wizyty. %s Adresy wejścia są wyświetlane w strukturze katalogów.",
+ "EntryPageTitles": "Tytuły stron Wejściowych",
"EntryPageTitlesReportDocumentation": "Ten raport zawiera informację o tytułach stron wejściowych które były używane podczas wybranego okresu.",
+ "ExitPagesReportDocumentation": "Ten raport zawiera informacje o stronach wyjścia, które wystąpiły w określonym przedziale czasowym. Strona wyjściowa to ostatnia strona, którą odwiedzający oglądał podczas wizyty. %s Adresy stron wyjścia wyświetlane są w strukturze katalogów.",
"ExitPageTitles": "Tytuły stron Wyjść",
"ExitPageTitlesReportDocumentation": "Ten raport zawiera informację o tytułach stron wyjściowych, które wystąpiły podczas wybranego okresu.",
"LearnMoreAboutSiteSearchLink": "Poznaj więcej informacji o Śledzeniu, jak twoi odwiedzający używają twojego systemu Wyszukiwania.",
@@ -36,8 +41,10 @@
"OutlinksReportDocumentation": "Ten raport pokazuje ustrukturyzowaną listę linków wychodzących które zostały kliknięte przez odwiedzających.",
"PagesReportDocumentation": "Ten raport zawiera informację o URL-ach stron które zostały odwiedzone. %s Tabela jest organizowana w hierarchii, URL-e są wyświetlane z uwzględnieniem struktury katalogów.",
"PageTitlesReportDocumentation": "Ten raport zawiera informację o tytułach stron które zostały odwiedzone. %1$s Tytuł stron to %2$s znacznik HTML które większość przeglądarek wyświetla na belce tytułowej okna.",
- "PageUrls": "Strony URL",
+ "PageUrls": "URL strony",
+ "PageViewsByVisitor": "Łączna liczba wyświetleń tej strony przez odwiedzającego podczas wizyt",
"PluginDescription": "Raporty dotyczące odwiedzin i tytułów stron. Pozwala na analizę działania wewnętrznej wyszukiwarki serwisu. Automatycznie śledzi kliknięcia na linkach zewnętrznych i pobraniach plików.",
+ "RevisitedPages": "Strony wyświetlone więcej niż raz",
"SiteSearchCategories1": "Ten raport wyświetla listę Kategorii które odwiedzający wybrali kiedy używali wyszukiwarki na twojej stronie.",
"SiteSearchCategories2": "Na przykład, strony E-Commerce zazwyczaj mają selektor \"Kategoria\" dzięki czemu odwiedzający mogą ograniczyć wyszukiwanie wszystkich produktów dla danej kategorii.",
"SiteSearchFollowingPagesDoc": "Kiedy odwiedzający wyszukują na twojej stronie, wtedy szukają danej strony, zawartości, produktu lub usługi. Ten raport zawiera listę stron, które najczęściej były klikane po wewnętrznym wyszukiwaniu. Innymi słowy, lista stron które najczęściej użytkownicy szukają jak już znajdą się na twoje stronie.",
diff --git a/plugins/Actions/lang/ru.json b/plugins/Actions/lang/ru.json
index 4b8867814c..37922c6940 100644
--- a/plugins/Actions/lang/ru.json
+++ b/plugins/Actions/lang/ru.json
@@ -18,6 +18,7 @@
"ColumnSearchCategory": "Искать категорию",
"ColumnSearches": "Поиски",
"ColumnSearchesDocumentation": "Число посещений, когда посетитель искал именно это ключевое слово через поиск на сайте.",
+ "ColumnSearchExits": "%% уходов с поиска",
"ColumnSearchExitsDocumentation": "Процент посещений, когда посетитель ушёл с сайта после поиска на вашем сайте именно этого ключевого слова.",
"ColumnSearchResultsCount": "Счётчик результатов поиска",
"ColumnSiteSearchKeywords": "Уникальные ключевые слова",
@@ -26,9 +27,12 @@
"ColumnUniqueDownloads": "Уникальные загрузки",
"ColumnUniqueOutlinks": "Уникальные исходящие ссылки",
"ColumnIdPageview": "ID просмотра",
+ "ColumnInteractionPosition": "Местоположение взаимодействия",
"DownloadsReportDocumentation": "В этом отчёте вы можете видеть файлы, которые скачивали ваши посетители. %s За скачивание считается клик по соответствующей ссылке. Однако закончил ли посетитель скачивание остается неизвестным. За скачивание считается также открытие картинок и других расширений файлов.",
+ "EntryPagesReportDocumentation": "Этот отчет содержит информацию о начальных страницах за определенный период. Начальная страница – это первая страница сайта, которую пользователь видит во время своего посещения. %s Начальные ссылки отображаются в виде структуры, состоящей из папок.",
"EntryPageTitles": "Заголовки начальной страницы",
"EntryPageTitlesReportDocumentation": "Этот отчёт содержит информацию о заголовках входных страниц, на которые попадали посетители в конкретный период.",
+ "ExitPagesReportDocumentation": "Этот отчет содержит информацию о страницах выхода за определенный период. Страница выхода – это последняя страница сайта, которую пользователь видит во время своего посещения. %s Ссылки выхода отображаются в виде структуры, состоящей из папок.",
"ExitPageTitles": "Заголовки страниц выхода",
"ExitPageTitlesReportDocumentation": "Этот отчёт содержит информацию о заголовках выходных страниц, с которых посетитель ушел с сайта в конкретный период.",
"LearnMoreAboutSiteSearchLink": "Узнайте больше об отслеживании использования поиска на вашем сайте.",
diff --git a/plugins/Actions/lang/sv.json b/plugins/Actions/lang/sv.json
index 61aa561ade..4a154217a5 100644
--- a/plugins/Actions/lang/sv.json
+++ b/plugins/Actions/lang/sv.json
@@ -18,6 +18,7 @@
"ColumnSearchCategory": "Sökkategori",
"ColumnSearches": "Sökningar",
"ColumnSearchesDocumentation": "Antalet besök som sökte efter detta nyckelord i din webbplats sökmotor.",
+ "ColumnSearchExits": "%% Sökutgångar",
"ColumnSearchExitsDocumentation": "Procentandelen besök som lämnade webbplatsen efter att ha sökt efter detta nyckelord i din webbplats sökmotor.",
"ColumnSearchResultsCount": "Antal sökresultat",
"ColumnSiteSearchKeywords": "Unika nyckelord",
@@ -25,9 +26,13 @@
"ColumnUniqueClicksDocumentation": "Antalet besök som involverade ett klick på denna länk. Om en länk klickades på flera gånger under ett besök, så räknas det bara en gång.",
"ColumnUniqueDownloads": "Unika nedladdningar",
"ColumnUniqueOutlinks": "Unika utlänkar",
+ "ColumnIdPageview": "Pageview ID",
+ "ColumnInteractionPosition": "Interaktionsplats",
"DownloadsReportDocumentation": "I denna rapport kan du se vilka filer som besökarna har laddat ner. %s Vad Piwik räknar som en nedladdning är klicket på en nedladdningslänk. Oavsett om nedladdningen slutfördes eller inte.",
+ "EntryPagesReportDocumentation": "Denna rapport innehåller information om ingångssidor som användes under perioden. En ingångssida är den första sida en användare landar på under sitt besök. %s Ingångs-URL:er visas i en katalogstruktur.",
"EntryPageTitles": "Målsidors titel",
"EntryPageTitlesReportDocumentation": "Den här rapporten innehåller information om sidtitlar för målsidorna som använts under den valda perioden.",
+ "ExitPagesReportDocumentation": "Denna rapport innehåller information om utgångssidor som användes under perioden. En utgångssida är den sista sida en användare ser på under sitt besök. %sUtgångsside-URL:er visas i en katalogstruktur.",
"ExitPageTitles": "Utgångssidors titel",
"ExitPageTitlesReportDocumentation": "Den här rapporten innehåller information om sidtitlar för utgångssidorna som använts under den valda perioden.",
"LearnMoreAboutSiteSearchLink": "Läs mer om spårning för hur dina besökare använder din sökmotor.",
diff --git a/plugins/Actions/lang/tr.json b/plugins/Actions/lang/tr.json
index 151aedd358..bfdc78b9de 100644
--- a/plugins/Actions/lang/tr.json
+++ b/plugins/Actions/lang/tr.json
@@ -18,28 +18,33 @@
"ColumnSearchCategory": "Arama Kategorisi",
"ColumnSearches": "Aramalar",
"ColumnSearchesDocumentation": "Bu anahtar sözcük ile web sitenizin arama motorunda yapılan aramaların sayısı.",
- "ColumnSearchExitsDocumentation": "Bu Anahtar Kelimeyi sitenizin Arama Motorunda aradıktan sonra siteden ayrılanların yüzdesi.",
+ "ColumnSearchExits": "%% Arama Çıkışı",
+ "ColumnSearchExitsDocumentation": "Bu Anahtar Sözcüğü sitenizin Arama Motorunda aradıktan sonra siteden ayrılanların yüzdesi.",
"ColumnSearchResultsCount": "Arama Sonucu Sayısı",
- "ColumnSiteSearchKeywords": "Tekil Anahtar Kelimeler",
+ "ColumnSiteSearchKeywords": "Tekil Anahtar Sözcükler",
"ColumnUniqueClicks": "Tekil Tıklamalar",
- "ColumnUniqueClicksDocumentation": "Bu bağlantıyı tıklayan ziyaretçilerin sayısı. Eğer bir bağlantı ziyaretçi tarafından birçok kez tıklanmış ise ziyareti süresince bir defa sayılır.",
- "ColumnUniqueDownloads": "Tekil İndirilenler",
+ "ColumnUniqueClicksDocumentation": "Bu bağlantıyı tıklayan ziyaretçilerin sayısı. Bir bağlantı bir ziyarette birden çok kez tıklanmış ise yalnız bir kez sayılır.",
+ "ColumnUniqueDownloads": "Tekil İndirmeler",
"ColumnUniqueOutlinks": "Tekil Dış Bağlantılar",
- "DownloadsReportDocumentation": "Bu raporda, ziyaretçilerinizin hangi dosyaları indirdiğini görebilirsiniz. %s Piwik'in indirme olarak saydığı eylem indirme bağlantısına tıklanmasıdır. İndirmenin tamamlanıp tamamlanmadığı Piwik tarafından bilinmemektedir.",
+ "ColumnIdPageview": "Sayfa Görüntüleme Kodu",
+ "ColumnInteractionPosition": "Etkileşim Konumu",
+ "DownloadsReportDocumentation": "Bu rapor, ziyaretçilerinizin indirdiği dosyalar hakkında bilgi içerir. %s indirme bağlantısına tıklandığında Piwik indirme sayısını arttırır. İndirmenin tamamlanıp tamamlanmadığı Piwik tarafından bilinmez.",
+ "EntryPagesReportDocumentation": "Bu rapor, belirtilen dönemde kullanılan giriş sayfaları hakkında bilgi içerir. Bir giriş sayfası, kullanıcının ziyaretine başladığı ilk sayfadır. %s giriş adresleri bir klasör yapısı biçiminde görüntülenir.",
"EntryPageTitles": "Giriş sayfası başlıkları",
"EntryPageTitlesReportDocumentation": "Bu rapor, belirtilen dönemde kullanılan giriş sayfalarının başlıkları hakkında bilgi içerir.",
+ "ExitPagesReportDocumentation": "Bu rapor, belirtilen dönemde kullanılan çıkış sayfaları hakkında bilgi içerir. Bir çıkış sayfası, kullanıcının ziyaretini bitirdiği son sayfadır. %s çıkış adresleri bir klasör yapısı biçiminde görüntülenir.",
"ExitPageTitles": "Çıkış sayfası başlıkları",
- "ExitPageTitlesReportDocumentation": "Bu rapor, belirli bir süre içinde meydana gelen çıkış sayfalarının başlıkları hakkında bilgi içerir.",
- "LearnMoreAboutSiteSearchLink": "Ziyaretçilerinizin Arama motoru nasıl kullandığı hakkında daha fazla bilgi edinin.",
+ "ExitPageTitlesReportDocumentation": "Bu rapor, belirtilen dönemde kullanılan çıkış sayfalarının başlıkları hakkında bilgi içerir.",
+ "LearnMoreAboutSiteSearchLink": "Ziyaretçilerinizin arama motoru kullanımını izlemek hakkında ayrıntılı bilgi alın.",
"OneSearch": "1 arama",
- "OutlinkDocumentation": "Bu dış bağlantı linki ziyaretçilerinizin sitenizden uzaklaştığı diğer alan adlarını kapsar.",
- "OutlinksReportDocumentation": "Bu rapor, ziyaretçilerin tıkladıkları dış linklerin hiyerarşik listesini gösterir.",
- "PagesReportDocumentation": "Bu rapor ziyaret edilen sayfa URL'leri hakkında bilgi içerir. %s Tablo hiyerarşik olarak düzenlenmiştir, URL'ler klasör yapısı ile görüntülenmektedir.",
- "PageTitlesReportDocumentation": "Bu rapor ziyaret edilen sayfaların başlıkları ile ilgili bilgi içerir. %1$s Sayfa başlığı, birçok tarayıcının pencere başlığında gösterdiği HTML %2$s imidir.",
+ "OutlinkDocumentation": "Dış bağlantı, ziyaretçinin web sitenizden ayrılmasını sağlayan (başka bir etki alanına) bir bağlantıdır.",
+ "OutlinksReportDocumentation": "Bu rapor, ziyaretçilerinizin tıkladığı dış bağlantıların hiyerarşik listesini içerir.",
+ "PagesReportDocumentation": "Bu rapor, ziyaret edilen sayfa adresleri hakkında bilgi içerir. %s Tablo hiyerarşik olarak düzenlenmiştir, adresler klasör yapısında görüntülenir.",
+ "PageTitlesReportDocumentation": "Bu rapor, ziyaret edilen sayfaların başlıkları ile ilgili bilgi içerir. %1$s Sayfa başlığı, birçok tarayıcının pencere başlığında gösterdiği %2$s HTML kod imidir.",
"PageUrls": "Sayfa Adresleri",
- "PluginDescription": "Sayfa ziyaretleri ve sayfa başlıkları hakkında Raporlar. Kendi iç websitenin arama motorunu ölçmeye başla. Otomatik olarak harici linkleri ve dosya indirmeleri takip eder.",
- "SiteSearchCategories1": "Bu rapor, ziyaretçilerin sitenizde arama yaptıklarında seçtikleri kategorileri listelemektedir.",
- "SiteSearchCategories2": "Örnek olarak, E-Ticaret websitelerinde tipik bir \"Kategori\" seçimi vardır böylece ziyaretçiler aramalarını belirli bir kategori içindeki tüm ürünler ile kısıtlayabilirler.",
+ "PluginDescription": "Bu raporlar, sayfa ziyaretleri ve sayfa başlıkları hakkında bilgiler içerir. Web sitesinin iç arama motorunun ölçülebilmesini sağlar. Dış bağlantı ve dosya indirme bağlantılarına tıklamalar otomatik olarak izlenir.",
+ "SiteSearchCategories1": "Bu rapor, ziyaretçilerin sitede arama yaparken seçtiği kategori bilgilerini içerir.",
+ "SiteSearchCategories2": "Örnek olarak, E-Ticaret web sitelerinde tipik bir \"Kategori\" seçicisi bulunur. Ziyaretçiler bu seçiciyi kullanarak aramalarını belirli bir kategori içindeki ürünleri görüntüleyecek şekilde süzebilir.",
"SiteSearchFollowingPagesDoc": "Ziyaretçileriniz web sitenizde arama yaptığında belirli bir sayfa, içerik, ürün ya da hizmete bakarlar. Bu rapor, web siteniz içinde yapılan bir aramadan sonra en çok tıklanan sayfalarınızı listeler. Diğer bir deyişle, web sitenizdeki mevcut ziyaretçilerinizin en çok aradığı sayfaları gösterir.",
"SiteSearchIntro": "Sitenizi ziyaret edenleri takip etmek, hedef kitlenizin nee baktığını anlamak için çok etkili bir yol, yeni içerik ile potansiyel müşterilerin arayabileceği yeni e-ticaret ürünlerini eklemde yardımcı, ve ziyaretçilerin genel kullanıcı deneyimini arttıran bir araçtır.",
"SiteSearchKeyword": "Anahtar Kelime (Site Arama)",
diff --git a/plugins/Actions/lang/zh-cn.json b/plugins/Actions/lang/zh-cn.json
index ff2166c0f4..8e945b1ddc 100644
--- a/plugins/Actions/lang/zh-cn.json
+++ b/plugins/Actions/lang/zh-cn.json
@@ -2,68 +2,68 @@
"Actions": {
"AvgGenerationTimeTooltip": "平均值基于 %1$s 次访问 %2$s,介于 %3$s 和 %4$s 之间",
"ColumnClickedURL": "点击的网址",
- "ColumnActionURL": "操作网址",
+ "ColumnActionURL": "活动网址",
"ColumnClicks": "点击次数",
"ColumnClicksDocumentation": "链接被点击的次数",
- "ColumnDownloadURL": "下载的网址",
- "ColumnEntryPageTitle": "入口页面标题",
- "ColumnEntryPageURL": "入口页面网址",
- "ColumnExitPageTitle": "跳出页面标题",
- "ColumnExitPageURL": "跳出页面网址",
- "ColumnNoResultKeyword": "没有找到搜索结果的关键词",
- "ColumnPageName": "页面标题",
+ "ColumnDownloadURL": "下载网址",
+ "ColumnEntryPageTitle": "进入页面标题",
+ "ColumnEntryPageURL": "进入页面网址",
+ "ColumnExitPageTitle": "退出页面标题",
+ "ColumnExitPageURL": "退出页面网址",
+ "ColumnNoResultKeyword": "查无资料的关键词",
+ "ColumnPageName": "页面名称",
"ColumnPagesPerSearch": "搜索结果页",
- "ColumnPagesPerSearchDocumentation": "访客在您的网站上搜索,有时会点击 \"下一页\" 来查看更多结果。这里表示的是访客平均查看该关键词的搜索结果的页数。",
+ "ColumnPagesPerSearchDocumentation": "访客会在您的网站上搜索,有时会点击“下一页”来查看更多结果。这是此关键词搜索结果页面被访问的平均页数。",
"ColumnPageURL": "页面网址",
"ColumnSearchCategory": "搜索类别",
"ColumnSearches": "搜索",
- "ColumnSearchesDocumentation": "使用站内搜索来查找这个关键词的次数。",
- "ColumnSearchExits": "%%搜索跳出",
- "ColumnSearchExitsDocumentation": "使用站内搜索查找这个关键词之后的访问量所占的百分比。",
+ "ColumnSearchesDocumentation": "使用站内搜索功能检索此关键词的次数。",
+ "ColumnSearchExits": "%%搜索退出数",
+ "ColumnSearchExitsDocumentation": "访客使用站内搜索功能检索此关键词后即离开网站的百分比。",
"ColumnSearchResultsCount": "搜索结果数",
- "ColumnSiteSearchKeywords": "唯一关键词",
- "ColumnUniqueClicks": "唯一点击数",
- "ColumnUniqueClicksDocumentation": "链接的点击次数。如果在一次访问期间被点击多次,仅计算一次",
- "ColumnUniqueDownloads": "唯一下载次数",
- "ColumnUniqueOutlinks": "唯一离站链接数量",
- "ColumnIdPageview": "PV ID",
- "ColumnInteractionPosition": "交互位置",
- "DownloadsReportDocumentation": "在这份报表中,您可以看到用户下载了那些文件。%s Piwik计算的是下载链接的点击数量,至于文件是否下载完成 Piwik 无法知道。",
- "EntryPagesReportDocumentation": "本报表包含指定区间的入口页面的信息。入口页面是指用户访问的第一个页面。%s入口页的URL作为一个目录结构显示。",
- "EntryPageTitles": "入口页面标题",
- "EntryPageTitlesReportDocumentation": "本报表包含指定时间段内各入口页面的标题。",
- "ExitPagesReportDocumentation": "本报表包含指定区间的跳出页面的信息。进入页面是指用户访问的最后一个页面。%s跳出页面的URL作为一个目录结构显示。",
- "ExitPageTitles": "出口页面标题",
- "ExitPageTitlesReportDocumentation": "本报表包含指定时间段内各出口页面的标题。",
- "LearnMoreAboutSiteSearchLink": "了解更多关于跟踪访客如何使用您的搜索引擎的信息。",
+ "ColumnSiteSearchKeywords": "不重复关键词",
+ "ColumnUniqueClicks": "不重复点击数",
+ "ColumnUniqueClicksDocumentation": "访客点击此链接的次数。如果链接在同一次访问期间被点击多次,只算作一次。",
+ "ColumnUniqueDownloads": "不重复下载次数",
+ "ColumnUniqueOutlinks": "不重复退出链接数",
+ "ColumnIdPageview": "页面浏览 ID",
+ "ColumnInteractionPosition": "互动位置",
+ "DownloadsReportDocumentation": "在这份报表中,您可以看到用户下载了那些文件。%s Piwik 计算的是下载链接的点击数量,至于文件是否下载完成 Piwik 无法知道。",
+ "EntryPagesReportDocumentation": "此报表包含在指定时间段内的进入页面的相关信息。进入页面是指用户进入网站时访问的第一个页面。%s进入页面的网址以文件夹结构展示。",
+ "EntryPageTitles": "进入页面标题",
+ "EntryPageTitlesReportDocumentation": "此报表包含指定时间段内的进入页面的标题信息。",
+ "ExitPagesReportDocumentation": "此报表包含指定时间段内的退出页面的信息。退出页面是指用户离开网站前访问的最后一个页面。%s退出页面的网址以文件夹结构展示。",
+ "ExitPageTitles": "退出页面标题",
+ "ExitPageTitlesReportDocumentation": "此报表包含指定时间段内的退出页面的标题信息。",
+ "LearnMoreAboutSiteSearchLink": "了解更多关于追踪访客如何使用您的搜索引擎的信息。",
"OneSearch": "一个搜索",
- "OutlinkDocumentation": "离站链接指导致访客离开您的网站或域名的链接。",
- "OutlinksReportDocumentation": "本报表显示访客点击的离站链接网址的的分级列表。",
- "PagesReportDocumentation": "本报表显示被访问的网页地址。%s 表格分级归类,网址按照目录结构显示。",
- "PageTitlesReportDocumentation": "本报表显示被访问页面的标题。%1$s 网页标题为 HTML %2$s 标签,多数浏览器显示为窗口的标题。",
- "PageUrls": "页面地址",
- "PluginDescription": "有关页面访问量和页面标题的报告。让你衡量你的内部网站的搜索引擎。自动跟踪外部链接和文件下载点击。",
- "SiteSearchCategories1": "本报表显示访客使用站内搜索时选择的分类。",
- "SiteSearchCategories2": "例如,购物网站通常有个\"分类\"选项,访客可以限制在某个分类中搜索产品。",
- "SiteSearchFollowingPagesDoc": "当访客在网站上搜索时,他们是在寻找特定的页面、内容、产品或者服务,本报表显示站内搜索后点击最多的页面。也就是说,显示了已有访客搜索最多的页面。",
- "SiteSearchIntro": "统计访客在网站上的搜索对了解用户需求非常有效,有助于了解潜在用户对新内容、新产品的需求,有助于改进用户的网站体验。",
- "SiteSearchKeyword": "关键词(站点搜索)",
- "SiteSearchKeywordsDocumentation": "本报表显示访客使用站内搜索时用到的搜索关键词。",
- "SiteSearchKeywordsNoResultDocumentation": "本报表显示没有返回结果的搜索关键词: 也许搜索算法需要改进,或者访客要找的内容您的网站上还没有?",
- "SubmenuPagesEntry": "入口页面",
- "SubmenuPagesExit": "出口页面",
+ "OutlinkDocumentation": "离站链接指将访客从您的网站带出到其他域名的链接。",
+ "OutlinksReportDocumentation": "此报表以分级列表方式显示访客点击的离站链接网址。",
+ "PagesReportDocumentation": "此报表显示被访问的网页地址信息。%s 表格以分级显示,网址以目录结构显示。",
+ "PageTitlesReportDocumentation": "此报表包含被访问页面的标题信息。%1$s 网页标题是 HTML 标签 %2$s 中的内容,在大部分浏览器上都会显示为窗口的标题。",
+ "PageUrls": "网页网址",
+ "PluginDescription": "有关页面访问量和页面标题的报告。让您衡量您的内部网站的搜索引擎。自动跟踪外部链接及文件下载链接的点击。",
+ "SiteSearchCategories1": "此报表显示访客使用站内搜索时选择的分类。",
+ "SiteSearchCategories2": "例如,电子商务网站通常有“分类”选项,以便访客可以限制在某个分类中搜索产品。",
+ "SiteSearchFollowingPagesDoc": "当访客在您的网站上搜索时,他们是在寻找特定的页面、内容、产品或者服务。此报表显示站内搜索后点击最多的页面。也就是说,是一个在您的网站上最常被访客搜索并前往的页面列表。",
+ "SiteSearchIntro": "追踪访客在您网站上的搜索,是一个了解用户在寻找什么的有效方法。它有助于发现潜在用户可能在搜寻的新内容、新商品的点子,并从整体上改进访客在您网站的体验。",
+ "SiteSearchKeyword": "关键词(站内搜索)",
+ "SiteSearchKeywordsDocumentation": "此报表显示访客使用站内搜索时用到的搜索关键词。",
+ "SiteSearchKeywordsNoResultDocumentation": "此报表列出没有任何搜索结果的关键词:或许搜索算法需要改进,或是访客要找的内容在您的网站上还没有?",
+ "SubmenuPagesEntry": "进入页面",
+ "SubmenuPagesExit": "退出页面",
"SubmenuPageTitles": "页面标题",
"SubmenuSitesearch": "站内搜索",
- "WidgetEntryPageTitles": "入口页面标题",
- "WidgetExitPageTitles": "出口页面标题",
- "WidgetPagesEntry": "入口页面",
- "WidgetPagesExit": "出口页面",
+ "WidgetEntryPageTitles": "进入页面标题",
+ "WidgetExitPageTitles": "退出页面标题",
+ "WidgetPagesEntry": "进入页面",
+ "WidgetPagesExit": "退出页面",
"WidgetPageTitles": "页面标题",
- "WidgetPageTitlesFollowingSearch": "站内搜索的结果页面标题",
- "WidgetPageUrlsFollowingSearch": "站内搜索的结果页面",
- "WidgetSearchCategories": "搜索类别",
+ "WidgetPageTitlesFollowingSearch": "从站内搜索前往的页面标题",
+ "WidgetPageUrlsFollowingSearch": "从站内搜索前往的页面",
+ "WidgetSearchCategories": "搜索分类",
"WidgetSearchKeywords": "站内搜索关键词",
- "WidgetSearchNoResultKeywords": "没有查到结果的关键词",
- "ActionType": "操作类型"
+ "WidgetSearchNoResultKeywords": "查无资料的关键词",
+ "ActionType": "活动类型"
}
} \ No newline at end of file
diff --git a/plugins/Actions/lang/zh-tw.json b/plugins/Actions/lang/zh-tw.json
index 7ac8bdd29e..edaec01e0a 100644
--- a/plugins/Actions/lang/zh-tw.json
+++ b/plugins/Actions/lang/zh-tw.json
@@ -42,7 +42,9 @@
"PagesReportDocumentation": "這份報表包含瀏覽過的網頁網址資訊。%s表格以分層顯示,網址以資料夾結構顯示。",
"PageTitlesReportDocumentation": "這份報表包含瀏覽過的網頁標題資訊。%1$s網頁標題是在 HTML 標籤 %2$s 中的內容,也是多數瀏覽器上顯示的標題內容。",
"PageUrls": "網頁網址",
+ "PageViewsByVisitor": "這個訪客所有訪問紀錄中瀏覽此網頁的次數",
"PluginDescription": "報告關於瀏覽數和網頁標題。讓你衡量你的站內搜尋引擎。自動追蹤外部網站連結點擊數和檔案下載數。",
+ "RevisitedPages": "網頁瀏覽數超過一次",
"SiteSearchCategories1": "這份報表列出訪客在站內搜尋時所選擇的分類。",
"SiteSearchCategories2": "例如,電子商務網站通常會有「分類」選項,訪客就可以將他們的搜尋結果限制於所有產品或是特定分類。",
"SiteSearchFollowingPagesDoc": "當訪客在你的網站上搜尋時,他們會尋找特定的網頁、內容、產品或服務。這份報表列出站內搜尋最常被點擊的網頁連結。換句話說,是一個在你網站上最常被訪客搜尋並前往的網頁網址列表。",
diff --git a/plugins/Actions/templates/_profileSummary.twig b/plugins/Actions/templates/_profileSummary.twig
new file mode 100644
index 0000000000..fa30e694b8
--- /dev/null
+++ b/plugins/Actions/templates/_profileSummary.twig
@@ -0,0 +1,25 @@
+{% if visitorData.totalPageViews > 0 %}
+ <div class="visitor-profile-summary visitor-profile-pages">
+ <h1>{{ 'Actions_RevisitedPages'|translate }}</h1>
+ <div>
+ <ul>
+ {% for url,count in visitorData.visitedPages %}
+ {% if loop.index < 6 and count > 1 %}
+ <li><span class="repeat icon-refresh" title="{{ 'Actions_PageViewsByVisitor'|translate }}">{{ count }}</span>
+ {% if url|trim|lower starts with 'javascript:' or
+ url|trim|lower starts with 'vbscript:' or
+ url|trim|lower starts with 'data:' %}
+ {{ url }}
+ {% else %}
+ <a href="{{ url }}" rel="noreferrer" target="_blank"
+ class="action-list-url truncated-text-line">
+ {{ url|replace({'http://': '', 'https://': ''}) }}
+ </a>
+ {% endif %}
+ </li>
+ {% endif %}
+ {% endfor %}
+ </ul>
+ </div>
+ </div>
+{% endif %} \ No newline at end of file
diff --git a/plugins/Annotations/lang/de.json b/plugins/Annotations/lang/de.json
index 95eef591f4..cffeff1089 100644
--- a/plugins/Annotations/lang/de.json
+++ b/plugins/Annotations/lang/de.json
@@ -12,10 +12,10 @@
"HideAnnotationsFor": "Anmerkungen für %s verbergen …",
"IconDesc": "Notizen für diesen Zeitraum anzeigen.",
"IconDescHideNotes": "Notizen für diesen Zeitraum verbergen.",
- "InlineQuickHelp": "Sie können Anmerkungen erstellen um spezielle Ereignisse (wie einen Blog-Eintrag, oder eine Neugestaltung der Website) zu markieren, Stichtage für die Datenanalyse zu speichern oder einfach alles zu speichern was Ihnen wichtig erscheint.",
+ "InlineQuickHelp": "Sie können Anmerkungen erstellen um spezielle Ereignisse (wie einen Blog-Eintrag oder eine Neugestaltung der Website) zu markieren, Stichtage für die Datenanalyse zu speichern oder einfach alles zu speichern was Ihnen wichtig erscheint.",
"LoginToAnnotate": "Sie müssen sich einloggen um eine Anmerkung hinzufügen zu können.",
"NoAnnotations": "Für diesen Zeitraum sind keine Anmerkungen vorhanden.",
- "PluginDescription": "Erlaubt Ihnen Hinweise zu verschiedenen Tagen hinzuzufügen um Änderungen zu markieren die an der Website gemacht wurden, Analysen zu speichern die bezüglich Ihrer Daten gemacht wurden und um Ihre Gedanken mit Ihren Kollegen zu teilen. Durch das Hinzufügen von Hinweisen stellen Sie sicher, dass Sie sich daran erinnern warum die Daten so sind wie sie sind.",
+ "PluginDescription": "Erlaubt Ihnen Hinweise zu verschiedenen Tagen hinzuzufügen, um Änderungen zu markieren, die an der Website gemacht wurden, Analysen zu speichern, die bezüglich Ihrer Daten gemacht wurden und um Ihre Gedanken mit Ihren Kollegen zu teilen. Durch das Hinzufügen von Hinweisen stellen Sie sicher, dass Sie sich daran erinnern warum die Daten so sind, wie sie sind.",
"ViewAndAddAnnotations": "Anmerkungen zu %s ansehen und hinzufügen …",
"YouCannotModifyThisNote": "Sie können diese Anmerkung nicht ändern, da Sie sie weder erstellt haben noch administrativen Zugang für diese Seite besitzen."
}
diff --git a/plugins/Annotations/lang/zh-cn.json b/plugins/Annotations/lang/zh-cn.json
index 590ddd53a4..61d8cc81c2 100644
--- a/plugins/Annotations/lang/zh-cn.json
+++ b/plugins/Annotations/lang/zh-cn.json
@@ -1,22 +1,22 @@
{
"Annotations": {
- "AddAnnotationsFor": "为%s添加备注",
- "AnnotationOnDate": "在%1$s的备注:%2$s",
+ "AddAnnotationsFor": "给%s添加备注……",
+ "AnnotationOnDate": "%1$s的备注:%2$s",
"Annotations": "备注",
- "ClickToDelete": "点击删除备注",
- "ClickToEdit": "点击编辑本备注。",
- "ClickToEditOrAdd": "点击编辑备注或新增备注",
- "ClickToStarOrUnstar": "点击为本备注增加或取消星标。",
- "CreateNewAnnotation": "新增备注",
- "EnterAnnotationText": "输入备注……",
- "HideAnnotationsFor": "为%s隐藏备注",
- "IconDesc": "查看本时间段内的备注",
- "IconDescHideNotes": "隐藏本时间段的备注。",
- "InlineQuickHelp": "您可以添加备注用于记录特别事件,(例如新的博客文章,或者网站重新设计),用于保存数据分析或其他重要的东西。",
- "LoginToAnnotate": "请登录后添加备注。",
+ "ClickToDelete": "点击删除此备注。",
+ "ClickToEdit": "点击编辑此备注。",
+ "ClickToEditOrAdd": "点击编辑或新增备注。",
+ "ClickToStarOrUnstar": "点击为此备注增加或取消星标。",
+ "CreateNewAnnotation": "新增备注……",
+ "EnterAnnotationText": "输入您的记录……",
+ "HideAnnotationsFor": "隐藏%s的备注……",
+ "IconDesc": "查看此时间段内的备注。",
+ "IconDescHideNotes": "隐藏此时间段内的备注。",
+ "InlineQuickHelp": "您可以添加备注用于记录特别事件(例如新的博客文章,或者网站重新设计),保存您的数据分析或任何您觉得重要的事情。",
+ "LoginToAnnotate": "登录以添加备注。",
"NoAnnotations": "该时间段内没有备注。",
- "PluginDescription": "可以添加说明文字到不同的日期,记录网站的修改,保存关于数据的分析或者与同事分享想法。通过备注资料,就能记住为什么数据是这样的。",
- "ViewAndAddAnnotations": "为%s查看和添加备注",
- "YouCannotModifyThisNote": "您不能修改这个备注。此备注不是您创建的或您没有管理员赋予的权限。"
+ "PluginDescription": "可以添加说明文字到不同的日期来标记您网站的修改,保存您关于数据的分析并与同事分享您的想法。通过备注资料,您能确保记住为什么您的数据看起来是这样的。",
+ "ViewAndAddAnnotations": "查看并添加%s的备注……",
+ "YouCannotModifyThisNote": "您无法修改此备注,因为这个备注不是您创建的,并且您也没有此网站的管理员权限。"
}
} \ No newline at end of file
diff --git a/plugins/AnonymousPiwikUsageMeasurement b/plugins/AnonymousPiwikUsageMeasurement
-Subproject fbe7cba991289c3670976fb18094c7949179d78
+Subproject 5ca838bce8d2ad5b8e575af1ba302ffc56708bc
diff --git a/plugins/Bandwidth b/plugins/Bandwidth
-Subproject 395189a4d93e19738bb60c33b2437552fd9e757
+Subproject 7ec9607b800d175ebeddc217e8091f499e7e3a4
diff --git a/plugins/Contents/Columns/ContentInteraction.php b/plugins/Contents/Columns/ContentInteraction.php
index 149ed94059..a50467f9d6 100644
--- a/plugins/Contents/Columns/ContentInteraction.php
+++ b/plugins/Contents/Columns/ContentInteraction.php
@@ -11,6 +11,7 @@ namespace Piwik\Plugins\Contents\Columns;
use Piwik\Piwik;
use Piwik\Plugin\Dimension\ActionDimension;
use Piwik\Plugins\Actions\Segment;
+use Piwik\Plugins\Contents\Actions\ActionContent;
use Piwik\Tracker\Action;
use Piwik\Tracker\Request;
@@ -40,12 +41,11 @@ class ContentInteraction extends ActionDimension
public function onLookupAction(Request $request, Action $action)
{
- $interaction = $request->getParam('c_i');
-
- if (empty($interaction)) {
+ if (!($action instanceof ActionContent)) {
return false;
}
+ $interaction = $request->getParam('c_i');
$interaction = trim($interaction);
if (strlen($interaction) > 0) {
diff --git a/plugins/Contents/Columns/ContentName.php b/plugins/Contents/Columns/ContentName.php
index 5ed5485791..6168a48725 100644
--- a/plugins/Contents/Columns/ContentName.php
+++ b/plugins/Contents/Columns/ContentName.php
@@ -8,9 +8,11 @@
*/
namespace Piwik\Plugins\Contents\Columns;
+use Piwik\Exception\InvalidRequestParameterException;
use Piwik\Piwik;
use Piwik\Plugin\Dimension\ActionDimension;
use Piwik\Plugins\Actions\Segment;
+use Piwik\Plugins\Contents\Actions\ActionContent;
use Piwik\Tracker\Action;
use Piwik\Tracker\Request;
@@ -40,18 +42,17 @@ class ContentName extends ActionDimension
public function onLookupAction(Request $request, Action $action)
{
- $contentName = $request->getParam('c_n');
-
- if (empty($contentName)) {
+ if (!($action instanceof ActionContent)) {
return false;
}
+ $contentName = $request->getParam('c_n');
$contentName = trim($contentName);
if (strlen($contentName) > 0) {
return $contentName;
}
- return false;
+ throw new InvalidRequestParameterException('Param `c_n` must not be empty or filled with whitespaces');
}
} \ No newline at end of file
diff --git a/plugins/Contents/Columns/ContentPiece.php b/plugins/Contents/Columns/ContentPiece.php
index 6affe9a3d0..4cd0722e5a 100644
--- a/plugins/Contents/Columns/ContentPiece.php
+++ b/plugins/Contents/Columns/ContentPiece.php
@@ -11,6 +11,7 @@ namespace Piwik\Plugins\Contents\Columns;
use Piwik\Piwik;
use Piwik\Plugin\Dimension\ActionDimension;
use Piwik\Plugins\Actions\Segment;
+use Piwik\Plugins\Contents\Actions\ActionContent;
use Piwik\Tracker\Action;
use Piwik\Tracker\Request;
@@ -40,12 +41,11 @@ class ContentPiece extends ActionDimension
public function onLookupAction(Request $request, Action $action)
{
- $contentPiece = $request->getParam('c_p');
-
- if (empty($contentPiece)) {
+ if (!($action instanceof ActionContent)) {
return false;
}
+ $contentPiece = $request->getParam('c_p');
$contentPiece = trim($contentPiece);
if (strlen($contentPiece) > 0) {
diff --git a/plugins/Contents/Columns/ContentTarget.php b/plugins/Contents/Columns/ContentTarget.php
index 26c7a0d7a2..9e81c687f3 100644
--- a/plugins/Contents/Columns/ContentTarget.php
+++ b/plugins/Contents/Columns/ContentTarget.php
@@ -11,6 +11,7 @@ namespace Piwik\Plugins\Contents\Columns;
use Piwik\Piwik;
use Piwik\Plugin\Dimension\ActionDimension;
use Piwik\Plugins\Actions\Segment;
+use Piwik\Plugins\Contents\Actions\ActionContent;
use Piwik\Tracker\Action;
use Piwik\Tracker\Request;
@@ -40,6 +41,10 @@ class ContentTarget extends ActionDimension
public function onLookupAction(Request $request, Action $action)
{
+ if (!($action instanceof ActionContent)) {
+ return false;
+ }
+
$contentTarget = $request->getParam('c_t');
$contentTarget = trim($contentTarget);
diff --git a/plugins/Contents/Contents.php b/plugins/Contents/Contents.php
index 99e47bf8fd..289bdb25ec 100644
--- a/plugins/Contents/Contents.php
+++ b/plugins/Contents/Contents.php
@@ -8,6 +8,7 @@
*/
namespace Piwik\Plugins\Contents;
+use Piwik\Common;
use Piwik\Piwik;
class Contents extends \Piwik\Plugin
@@ -21,6 +22,7 @@ class Contents extends \Piwik\Plugin
'Metrics.getDefaultMetricTranslations' => 'addMetricTranslations',
'Metrics.getDefaultMetricDocumentationTranslations' => 'addMetricDocumentationTranslations',
'AssetManager.getJavaScriptFiles' => 'getJsFiles',
+ 'Actions.getCustomActionDimensionFieldsAndJoins' => 'provideActionDimensionFields'
);
}
@@ -41,4 +43,20 @@ class Contents extends \Piwik\Plugin
$translations['nb_impressions'] = Piwik::translate('Contents_ImpressionsMetricDocumentation');
$translations['nb_interactions'] = Piwik::translate('Contents_InteractionsMetricDocumentation');
}
+
+ public function provideActionDimensionFields(&$fields, &$joins)
+ {
+ $fields[] = 'log_action_content_name.name as contentName';
+ $fields[] = 'log_action_content_piece.name as contentPiece';
+ $fields[] = 'log_action_content_target.name as contentTarget';
+ $fields[] = 'log_action_content_interaction.name as contentInteraction';
+ $joins[] = 'LEFT JOIN ' . Common::prefixTable('log_action') . ' AS log_action_content_name
+ ON log_link_visit_action.idaction_content_name = log_action_content_name.idaction';
+ $joins[] = 'LEFT JOIN ' . Common::prefixTable('log_action') . ' AS log_action_content_piece
+ ON log_link_visit_action.idaction_content_piece = log_action_content_piece.idaction';
+ $joins[] = 'LEFT JOIN ' . Common::prefixTable('log_action') . ' AS log_action_content_target
+ ON log_link_visit_action.idaction_content_target = log_action_content_target.idaction';
+ $joins[] = 'LEFT JOIN ' . Common::prefixTable('log_action') . ' AS log_action_content_interaction
+ ON log_link_visit_action.idaction_content_interaction = log_action_content_interaction.idaction';
+ }
}
diff --git a/plugins/Contents/VisitorDetails.php b/plugins/Contents/VisitorDetails.php
new file mode 100644
index 0000000000..acf3363d38
--- /dev/null
+++ b/plugins/Contents/VisitorDetails.php
@@ -0,0 +1,50 @@
+<?php
+/**
+ * Piwik - free/libre analytics platform
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+namespace Piwik\Plugins\Contents;
+
+use Piwik\Plugins\Live\VisitorDetailsAbstract;
+use Piwik\Tracker\Action;
+use Piwik\View;
+
+class VisitorDetails extends VisitorDetailsAbstract
+{
+ public function extendActionDetails(&$action, $nextAction, $visitorDetails)
+ {
+ if ($action['type'] != Action::TYPE_CONTENT) {
+ unset($action['contentName']);
+ unset($action['contentPiece']);
+ unset($action['contentTarget']);
+ unset($action['contentInteraction']);
+ }
+ }
+
+ public function renderAction($action, $previousAction, $visitorDetails)
+ {
+ if ($action['type'] != Action::TYPE_CONTENT) {
+ return;
+ }
+
+ $view = new View('@Contents/_actionContent.twig');
+ $view->action = $action;
+ $view->previousAction = $previousAction;
+ $view->visitInfo = $visitorDetails;
+ return $view->render();
+ }
+
+ public function renderActionTooltip($action, $visitInfo)
+ {
+ if ($action['type'] != Action::TYPE_CONTENT) {
+ return [];
+ }
+
+ $view = new View('@Contents/_actionTooltip');
+ $view->action = $action;
+ return [[ 10, $view->render() ]];
+ }
+} \ No newline at end of file
diff --git a/plugins/Contents/lang/el.json b/plugins/Contents/lang/el.json
index 1460b25528..59afbdcfaf 100644
--- a/plugins/Contents/lang/el.json
+++ b/plugins/Contents/lang/el.json
@@ -2,6 +2,7 @@
"Contents": {
"PluginDescription": "Η παρακολούθηση περιεχομένου και εικόνων επιτρέπει να μετράτε την απόδοση (επισκέψεις, κλικ, CTR) οποιουδήποτε είδους περιεχομένου των σελίδων σας (εικόνες διαφημίσεων, εικόνες, οποιαδήποτε αντικείμενα).",
"Impressions": "Αποτυπώσεις",
+ "ContentImpression": "Αποτύπωμα Περιεχομένου",
"ContentInteraction": "Αλληλεπίδραση σε Περιεχόμενο",
"ContentInteractions": "Αλληλεπιδράσεις σε Περιεχόμενο",
"InteractionRate": "Ρυθμός αλληλεπίδρασης",
diff --git a/plugins/Contents/lang/en.json b/plugins/Contents/lang/en.json
index 915b9d9746..0947590f69 100644
--- a/plugins/Contents/lang/en.json
+++ b/plugins/Contents/lang/en.json
@@ -2,6 +2,7 @@
"Contents": {
"PluginDescription": "Content and banner tracking lets you measure the performance (views, clicks, CTR) of any piece of content on your pages (Banner ad, image, any item).",
"Impressions": "Impressions",
+ "ContentImpression": "Content Impression",
"ContentInteraction": "Content Interaction",
"ContentInteractions": "Content Interactions",
"InteractionRate": "Interaction Rate",
diff --git a/plugins/Contents/lang/id.json b/plugins/Contents/lang/id.json
new file mode 100644
index 0000000000..ab3e8d9707
--- /dev/null
+++ b/plugins/Contents/lang/id.json
@@ -0,0 +1,11 @@
+{
+ "Contents": {
+ "Impressions": "Impresi",
+ "ContentInteraction": "Interaksi Konten",
+ "ContentInteractions": "Interaksi Konten",
+ "InteractionRate": "Nilai Interaksi",
+ "ContentName": "Nama Konten",
+ "ContentPiece": "Potongan Konten",
+ "Contents": "Konten"
+ }
+} \ No newline at end of file
diff --git a/plugins/Contents/lang/pl.json b/plugins/Contents/lang/pl.json
index f80a193a26..4910ef0655 100644
--- a/plugins/Contents/lang/pl.json
+++ b/plugins/Contents/lang/pl.json
@@ -1,6 +1,17 @@
{
"Contents": {
+ "PluginDescription": "Śledzenie treści i banerów pozwala Ci zmierzyć wydajność (wyświetleń, kliknięć, CTR) dowolnego fragmentu treści na Twojej stronie (baner reklamowy, obrazek, dowolny element).",
+ "Impressions": "Wyświetlenia treści",
+ "ContentImpression": "Wyświetlenia treści",
+ "ContentInteraction": "Interakcja",
+ "ContentInteractions": "Interakcje",
+ "InteractionRate": "Częstość interakcji",
"ContentName": "Nazwa treści",
- "Contents": "Treść"
+ "ContentPiece": "Fragment treści",
+ "ContentTarget": "Cel treści",
+ "Contents": "Treść",
+ "InteractionsMetricDocumentation": "Liczba interakcji wykonanych na zawartości (np. 'kliknięcie' w baner lub reklamę).",
+ "ImpressionsMetricDocumentation": "Liczba wyświetleń bloku treści, takiego jak baner czy reklama, na stronie.",
+ "InteractionRateMetricDocumentation": "Stosunek wyświetleń treści do interakcji"
}
} \ No newline at end of file
diff --git a/plugins/Contents/lang/ru.json b/plugins/Contents/lang/ru.json
index 6240e4888f..8b5b48fe3c 100644
--- a/plugins/Contents/lang/ru.json
+++ b/plugins/Contents/lang/ru.json
@@ -2,6 +2,8 @@
"Contents": {
"PluginDescription": "Отслеживание контента и баннеров позволяет вам измерять эффективность (просмотры, клики, CTR) любой части контента на ваших страницах (баннер-реклама, изображение, любой элемент).",
"Impressions": "Показы",
+ "ContentInteraction": "Взаимодействие с контентом",
+ "ContentInteractions": "Взаимодействия с контентом",
"InteractionRate": "Коэффициент взаимодествия",
"ContentName": "Название публикации",
"ContentPiece": "Часть публикации",
diff --git a/plugins/Contents/lang/sv.json b/plugins/Contents/lang/sv.json
index 5562463bca..053eb2c4ce 100644
--- a/plugins/Contents/lang/sv.json
+++ b/plugins/Contents/lang/sv.json
@@ -2,6 +2,8 @@
"Contents": {
"PluginDescription": "Innehålls- och bannertracking ger dig möjlighet att mäta prestanda (visningar, klick, CTR) för alla typer av innehåll på dina sidor (bannerannonser, bilder mm).",
"Impressions": "Visningar",
+ "ContentInteraction": "Innehållsinteraktion",
+ "ContentInteractions": "Innehållsinteraktioner",
"InteractionRate": "Andel interaktioner",
"ContentName": "Namn på innehåll",
"ContentPiece": "Innehållsdel",
diff --git a/plugins/Contents/lang/zh-cn.json b/plugins/Contents/lang/zh-cn.json
index 9ed12a2719..e423e21b51 100644
--- a/plugins/Contents/lang/zh-cn.json
+++ b/plugins/Contents/lang/zh-cn.json
@@ -1,16 +1,16 @@
{
"Contents": {
- "PluginDescription": "内容和横幅跟踪,您可以衡量您的网页上任何一部分内容(横幅广告,图像,任何项目)的性能(浏览次数,点击次数,点击率)。",
- "Impressions": "印象",
- "ContentInteraction": "内容交互",
- "ContentInteractions": "内容交互",
+ "PluginDescription": "追踪内容和横幅可以让您衡量您网页上任何一部分内容(横幅广告,图像,任何项目)的表现(浏览次数,点击次数,点击率)。",
+ "Impressions": "展示次数",
+ "ContentInteraction": "内容互动",
+ "ContentInteractions": "内容互动",
"InteractionRate": "互动率",
"ContentName": "内容名称",
- "ContentPiece": "内容块",
+ "ContentPiece": "内容区块",
"ContentTarget": "内容目标",
"Contents": "内容",
- "InteractionsMetricDocumentation": "内容块上的互动次数(例如,点击横幅或广告)",
- "ImpressionsMetricDocumentation": "内容块的次数,例如显示在页面上的一个横幅或是广告。",
+ "InteractionsMetricDocumentation": "内容区块的互动次数(例如点击横幅或广告)",
+ "ImpressionsMetricDocumentation": "内容区块(例如横幅或广告)在页面上的展示次数。",
"InteractionRateMetricDocumentation": "内容展示和互动的比率。"
}
} \ No newline at end of file
diff --git a/plugins/Contents/lang/zh-tw.json b/plugins/Contents/lang/zh-tw.json
index e9496f622e..ce6c197ad5 100644
--- a/plugins/Contents/lang/zh-tw.json
+++ b/plugins/Contents/lang/zh-tw.json
@@ -2,6 +2,7 @@
"Contents": {
"PluginDescription": "追蹤內容和橫幅讓你衡量網頁中任何區塊內容(橫幅廣告、圖片、任何項目)的表現(瀏覽數、點擊數、CTR)。",
"Impressions": "曝光",
+ "ContentImpression": "內容曝光",
"ContentInteraction": "內容互動",
"ContentInteractions": "內容互動",
"InteractionRate": "互動率",
diff --git a/plugins/Contents/templates/_actionContent.twig b/plugins/Contents/templates/_actionContent.twig
new file mode 100644
index 0000000000..138f0e350e
--- /dev/null
+++ b/plugins/Contents/templates/_actionContent.twig
@@ -0,0 +1,15 @@
+<li class="content"
+ title="{{ postEvent('Live.renderActionTooltip', action, visitInfo) }}">
+ <div>
+ {% if action.contentInteraction %}
+ <span class="icon-document action-list-action-icon" title="{{ 'Contents_ContentInteraction'|translate }}"></span>
+ {% else %}
+ <span class="icon-show action-list-action-icon" title="{{ 'Contents_ContentImpression'|translate }}"></span>
+ {% endif %}
+ {% if action.contentInteraction %}
+ [{{ action.contentInteraction }}]
+ {% endif %}
+ {{ action.contentName }} -
+ {{ action.contentPiece }}
+ </div>
+</li>
diff --git a/plugins/Contents/templates/_actionTooltip.twig b/plugins/Contents/templates/_actionTooltip.twig
new file mode 100644
index 0000000000..c81c6883b4
--- /dev/null
+++ b/plugins/Contents/templates/_actionTooltip.twig
@@ -0,0 +1,9 @@
+{% if action.contentName %}
+
+{{ 'Contents_ContentName'|translate }}: {{ action.contentName }}{% endif %}{% if action.contentPiece %}
+
+{{ 'Contents_ContentPiece'|translate }}: {{ action.contentPiece }}{% endif %}{% if action.contentTarget %}
+
+{{ 'Contents_ContentTarget'|translate }}: {{ action.contentTarget }}{% endif %}{% if action.contentInteraction %}
+
+{{ 'Contents_ContentInteraction'|translate }}: {{ action.contentInteraction }}{% endif %} \ No newline at end of file
diff --git a/plugins/Contents/tests/System/expected/test_Contents__Live.getLastVisitsDetails_day.xml b/plugins/Contents/tests/System/expected/test_Contents__Live.getLastVisitsDetails_day.xml
index 0513e6b34b..52061fb273 100644
--- a/plugins/Contents/tests/System/expected/test_Contents__Live.getLastVisitsDetails_day.xml
+++ b/plugins/Contents/tests/System/expected/test_Contents__Live.getLastVisitsDetails_day.xml
@@ -12,14 +12,215 @@
<pageTitle>Ads</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>1</pageId>
+ <bandwidth />
+ <timeSpent>271</timeSpent>
+ <timeSpentPretty>4 min 31s</timeSpentPretty>
<generationTimeMilliseconds>333</generationTimeMilliseconds>
<generationTime>0.33s</generationTime>
<interactionPosition>1</interactionPosition>
- <timeSpent>271</timeSpent>
- <timeSpentPretty>4 min 31s</timeSpentPretty>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>2</pageId>
+ <contentName>ImageAd</contentName>
+ <contentPiece>Unknown</contentPiece>
+ <contentTarget />
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>3</pageId>
+ <contentName>ImageAd</contentName>
+ <contentPiece />
+ <contentTarget />
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>120</timeSpentRef>
+ <pageId>4</pageId>
+ <contentName>ImageAd</contentName>
+ <contentPiece>/path/ad.jpg</contentPiece>
+ <contentTarget>http://www.example.com</contentTarget>
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>5</pageId>
+ <contentName>ImageAd</contentName>
+ <contentPiece>/path/ad2.jpg</contentPiece>
+ <contentTarget>http://www.example.com</contentTarget>
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>6</pageId>
+ <contentName>ImageAd</contentName>
+ <contentPiece>/path/ad.jpg</contentPiece>
+ <contentTarget>http://www.example.com</contentTarget>
+ <contentInteraction>submit</contentInteraction>
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>60</timeSpentRef>
+ <pageId>7</pageId>
+ <contentName>Text Ad</contentName>
+ <contentPiece>Click to download Piwik now</contentPiece>
+ <contentTarget>http://piwik.org/download</contentTarget>
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>8</pageId>
+ <contentName>Text Ad</contentName>
+ <contentPiece>Click NOW</contentPiece>
+ <contentTarget>http://piwik.org/</contentTarget>
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>9</pageId>
+ <contentName>Text Ad</contentName>
+ <contentPiece>Click to download Piwik now</contentPiece>
+ <contentTarget>http://piwik.org/download</contentTarget>
+ <contentInteraction>click</contentInteraction>
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>10</pageId>
+ <contentName>Text Ad</contentName>
+ <contentPiece>Click NOW</contentPiece>
+ <contentTarget>http://piwik.org/download</contentTarget>
+ <contentInteraction>click</contentInteraction>
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>60</timeSpentRef>
+ <pageId>11</pageId>
+ <contentName>Text Ad</contentName>
+ <contentPiece>Click to download Piwik now</contentPiece>
+ <contentTarget />
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>30</timeSpentRef>
+ <pageId>12</pageId>
+ <contentName>Video Ad</contentName>
+ <contentPiece>movie.mov</contentPiece>
+ <contentTarget />
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -71,6 +272,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -89,9 +296,13 @@
<customVariables>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -100,17 +311,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -124,14 +324,215 @@
<pageTitle>Ads</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>13</pageId>
+ <bandwidth />
+ <timeSpent>271</timeSpent>
+ <timeSpentPretty>4 min 31s</timeSpentPretty>
<generationTimeMilliseconds>333</generationTimeMilliseconds>
<generationTime>0.33s</generationTime>
<interactionPosition>1</interactionPosition>
- <timeSpent>271</timeSpent>
- <timeSpentPretty>4 min 31s</timeSpentPretty>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>14</pageId>
+ <contentName>ImageAd</contentName>
+ <contentPiece>Unknown</contentPiece>
+ <contentTarget />
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>15</pageId>
+ <contentName>ImageAd</contentName>
+ <contentPiece />
+ <contentTarget />
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>120</timeSpentRef>
+ <pageId>16</pageId>
+ <contentName>ImageAd</contentName>
+ <contentPiece>/path/ad.jpg</contentPiece>
+ <contentTarget>http://www.example.com</contentTarget>
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>17</pageId>
+ <contentName>ImageAd</contentName>
+ <contentPiece>/path/ad2.jpg</contentPiece>
+ <contentTarget>http://www.example.com</contentTarget>
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>18</pageId>
+ <contentName>ImageAd</contentName>
+ <contentPiece>/path/ad.jpg</contentPiece>
+ <contentTarget>http://www.example.com</contentTarget>
+ <contentInteraction>submit</contentInteraction>
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>60</timeSpentRef>
+ <pageId>19</pageId>
+ <contentName>Text Ad</contentName>
+ <contentPiece>Click to download Piwik now</contentPiece>
+ <contentTarget>http://piwik.org/download</contentTarget>
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>20</pageId>
+ <contentName>Text Ad</contentName>
+ <contentPiece>Click NOW</contentPiece>
+ <contentTarget>http://piwik.org/</contentTarget>
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>21</pageId>
+ <contentName>Text Ad</contentName>
+ <contentPiece>Click to download Piwik now</contentPiece>
+ <contentTarget>http://piwik.org/download</contentTarget>
+ <contentInteraction>click</contentInteraction>
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>22</pageId>
+ <contentName>Text Ad</contentName>
+ <contentPiece>Click NOW</contentPiece>
+ <contentTarget>http://piwik.org/download</contentTarget>
+ <contentInteraction>click</contentInteraction>
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>60</timeSpentRef>
+ <pageId>23</pageId>
+ <contentName>Text Ad</contentName>
+ <contentPiece>Click to download Piwik now</contentPiece>
+ <contentTarget />
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>30</timeSpentRef>
+ <pageId>24</pageId>
+ <contentName>Video Ad</contentName>
+ <contentPiece>movie.mov</contentPiece>
+ <contentTarget />
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -183,6 +584,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -201,23 +608,16 @@
<customVariables>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>director</plugins>
+ <plugins>cookie, director</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/director.png</pluginIcon>
<pluginName>director</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
</result> \ No newline at end of file
diff --git a/plugins/Contents/tests/System/expected/test_Contents__Live.getLastVisitsDetails_month.xml b/plugins/Contents/tests/System/expected/test_Contents__Live.getLastVisitsDetails_month.xml
index 0513e6b34b..52061fb273 100644
--- a/plugins/Contents/tests/System/expected/test_Contents__Live.getLastVisitsDetails_month.xml
+++ b/plugins/Contents/tests/System/expected/test_Contents__Live.getLastVisitsDetails_month.xml
@@ -12,14 +12,215 @@
<pageTitle>Ads</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>1</pageId>
+ <bandwidth />
+ <timeSpent>271</timeSpent>
+ <timeSpentPretty>4 min 31s</timeSpentPretty>
<generationTimeMilliseconds>333</generationTimeMilliseconds>
<generationTime>0.33s</generationTime>
<interactionPosition>1</interactionPosition>
- <timeSpent>271</timeSpent>
- <timeSpentPretty>4 min 31s</timeSpentPretty>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>2</pageId>
+ <contentName>ImageAd</contentName>
+ <contentPiece>Unknown</contentPiece>
+ <contentTarget />
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>3</pageId>
+ <contentName>ImageAd</contentName>
+ <contentPiece />
+ <contentTarget />
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>120</timeSpentRef>
+ <pageId>4</pageId>
+ <contentName>ImageAd</contentName>
+ <contentPiece>/path/ad.jpg</contentPiece>
+ <contentTarget>http://www.example.com</contentTarget>
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>5</pageId>
+ <contentName>ImageAd</contentName>
+ <contentPiece>/path/ad2.jpg</contentPiece>
+ <contentTarget>http://www.example.com</contentTarget>
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>6</pageId>
+ <contentName>ImageAd</contentName>
+ <contentPiece>/path/ad.jpg</contentPiece>
+ <contentTarget>http://www.example.com</contentTarget>
+ <contentInteraction>submit</contentInteraction>
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>60</timeSpentRef>
+ <pageId>7</pageId>
+ <contentName>Text Ad</contentName>
+ <contentPiece>Click to download Piwik now</contentPiece>
+ <contentTarget>http://piwik.org/download</contentTarget>
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>8</pageId>
+ <contentName>Text Ad</contentName>
+ <contentPiece>Click NOW</contentPiece>
+ <contentTarget>http://piwik.org/</contentTarget>
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>9</pageId>
+ <contentName>Text Ad</contentName>
+ <contentPiece>Click to download Piwik now</contentPiece>
+ <contentTarget>http://piwik.org/download</contentTarget>
+ <contentInteraction>click</contentInteraction>
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>10</pageId>
+ <contentName>Text Ad</contentName>
+ <contentPiece>Click NOW</contentPiece>
+ <contentTarget>http://piwik.org/download</contentTarget>
+ <contentInteraction>click</contentInteraction>
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>60</timeSpentRef>
+ <pageId>11</pageId>
+ <contentName>Text Ad</contentName>
+ <contentPiece>Click to download Piwik now</contentPiece>
+ <contentTarget />
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>30</timeSpentRef>
+ <pageId>12</pageId>
+ <contentName>Video Ad</contentName>
+ <contentPiece>movie.mov</contentPiece>
+ <contentTarget />
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -71,6 +272,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -89,9 +296,13 @@
<customVariables>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -100,17 +311,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -124,14 +324,215 @@
<pageTitle>Ads</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>13</pageId>
+ <bandwidth />
+ <timeSpent>271</timeSpent>
+ <timeSpentPretty>4 min 31s</timeSpentPretty>
<generationTimeMilliseconds>333</generationTimeMilliseconds>
<generationTime>0.33s</generationTime>
<interactionPosition>1</interactionPosition>
- <timeSpent>271</timeSpent>
- <timeSpentPretty>4 min 31s</timeSpentPretty>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>14</pageId>
+ <contentName>ImageAd</contentName>
+ <contentPiece>Unknown</contentPiece>
+ <contentTarget />
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>15</pageId>
+ <contentName>ImageAd</contentName>
+ <contentPiece />
+ <contentTarget />
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>120</timeSpentRef>
+ <pageId>16</pageId>
+ <contentName>ImageAd</contentName>
+ <contentPiece>/path/ad.jpg</contentPiece>
+ <contentTarget>http://www.example.com</contentTarget>
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>17</pageId>
+ <contentName>ImageAd</contentName>
+ <contentPiece>/path/ad2.jpg</contentPiece>
+ <contentTarget>http://www.example.com</contentTarget>
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>18</pageId>
+ <contentName>ImageAd</contentName>
+ <contentPiece>/path/ad.jpg</contentPiece>
+ <contentTarget>http://www.example.com</contentTarget>
+ <contentInteraction>submit</contentInteraction>
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>60</timeSpentRef>
+ <pageId>19</pageId>
+ <contentName>Text Ad</contentName>
+ <contentPiece>Click to download Piwik now</contentPiece>
+ <contentTarget>http://piwik.org/download</contentTarget>
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>20</pageId>
+ <contentName>Text Ad</contentName>
+ <contentPiece>Click NOW</contentPiece>
+ <contentTarget>http://piwik.org/</contentTarget>
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>21</pageId>
+ <contentName>Text Ad</contentName>
+ <contentPiece>Click to download Piwik now</contentPiece>
+ <contentTarget>http://piwik.org/download</contentTarget>
+ <contentInteraction>click</contentInteraction>
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>22</pageId>
+ <contentName>Text Ad</contentName>
+ <contentPiece>Click NOW</contentPiece>
+ <contentTarget>http://piwik.org/download</contentTarget>
+ <contentInteraction>click</contentInteraction>
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>60</timeSpentRef>
+ <pageId>23</pageId>
+ <contentName>Text Ad</contentName>
+ <contentPiece>Click to download Piwik now</contentPiece>
+ <contentTarget />
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>30</timeSpentRef>
+ <pageId>24</pageId>
+ <contentName>Video Ad</contentName>
+ <contentPiece>movie.mov</contentPiece>
+ <contentTarget />
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -183,6 +584,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -201,23 +608,16 @@
<customVariables>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>director</plugins>
+ <plugins>cookie, director</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/director.png</pluginIcon>
<pluginName>director</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
</result> \ No newline at end of file
diff --git a/plugins/Contents/tests/System/expected/test_Contents_contentInteractionMatch__Live.getLastVisitsDetails_day.xml b/plugins/Contents/tests/System/expected/test_Contents_contentInteractionMatch__Live.getLastVisitsDetails_day.xml
index 0513e6b34b..52061fb273 100644
--- a/plugins/Contents/tests/System/expected/test_Contents_contentInteractionMatch__Live.getLastVisitsDetails_day.xml
+++ b/plugins/Contents/tests/System/expected/test_Contents_contentInteractionMatch__Live.getLastVisitsDetails_day.xml
@@ -12,14 +12,215 @@
<pageTitle>Ads</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>1</pageId>
+ <bandwidth />
+ <timeSpent>271</timeSpent>
+ <timeSpentPretty>4 min 31s</timeSpentPretty>
<generationTimeMilliseconds>333</generationTimeMilliseconds>
<generationTime>0.33s</generationTime>
<interactionPosition>1</interactionPosition>
- <timeSpent>271</timeSpent>
- <timeSpentPretty>4 min 31s</timeSpentPretty>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>2</pageId>
+ <contentName>ImageAd</contentName>
+ <contentPiece>Unknown</contentPiece>
+ <contentTarget />
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>3</pageId>
+ <contentName>ImageAd</contentName>
+ <contentPiece />
+ <contentTarget />
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>120</timeSpentRef>
+ <pageId>4</pageId>
+ <contentName>ImageAd</contentName>
+ <contentPiece>/path/ad.jpg</contentPiece>
+ <contentTarget>http://www.example.com</contentTarget>
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>5</pageId>
+ <contentName>ImageAd</contentName>
+ <contentPiece>/path/ad2.jpg</contentPiece>
+ <contentTarget>http://www.example.com</contentTarget>
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>6</pageId>
+ <contentName>ImageAd</contentName>
+ <contentPiece>/path/ad.jpg</contentPiece>
+ <contentTarget>http://www.example.com</contentTarget>
+ <contentInteraction>submit</contentInteraction>
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>60</timeSpentRef>
+ <pageId>7</pageId>
+ <contentName>Text Ad</contentName>
+ <contentPiece>Click to download Piwik now</contentPiece>
+ <contentTarget>http://piwik.org/download</contentTarget>
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>8</pageId>
+ <contentName>Text Ad</contentName>
+ <contentPiece>Click NOW</contentPiece>
+ <contentTarget>http://piwik.org/</contentTarget>
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>9</pageId>
+ <contentName>Text Ad</contentName>
+ <contentPiece>Click to download Piwik now</contentPiece>
+ <contentTarget>http://piwik.org/download</contentTarget>
+ <contentInteraction>click</contentInteraction>
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>10</pageId>
+ <contentName>Text Ad</contentName>
+ <contentPiece>Click NOW</contentPiece>
+ <contentTarget>http://piwik.org/download</contentTarget>
+ <contentInteraction>click</contentInteraction>
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>60</timeSpentRef>
+ <pageId>11</pageId>
+ <contentName>Text Ad</contentName>
+ <contentPiece>Click to download Piwik now</contentPiece>
+ <contentTarget />
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>30</timeSpentRef>
+ <pageId>12</pageId>
+ <contentName>Video Ad</contentName>
+ <contentPiece>movie.mov</contentPiece>
+ <contentTarget />
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -71,6 +272,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -89,9 +296,13 @@
<customVariables>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -100,17 +311,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -124,14 +324,215 @@
<pageTitle>Ads</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>13</pageId>
+ <bandwidth />
+ <timeSpent>271</timeSpent>
+ <timeSpentPretty>4 min 31s</timeSpentPretty>
<generationTimeMilliseconds>333</generationTimeMilliseconds>
<generationTime>0.33s</generationTime>
<interactionPosition>1</interactionPosition>
- <timeSpent>271</timeSpent>
- <timeSpentPretty>4 min 31s</timeSpentPretty>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>14</pageId>
+ <contentName>ImageAd</contentName>
+ <contentPiece>Unknown</contentPiece>
+ <contentTarget />
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>15</pageId>
+ <contentName>ImageAd</contentName>
+ <contentPiece />
+ <contentTarget />
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>120</timeSpentRef>
+ <pageId>16</pageId>
+ <contentName>ImageAd</contentName>
+ <contentPiece>/path/ad.jpg</contentPiece>
+ <contentTarget>http://www.example.com</contentTarget>
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>17</pageId>
+ <contentName>ImageAd</contentName>
+ <contentPiece>/path/ad2.jpg</contentPiece>
+ <contentTarget>http://www.example.com</contentTarget>
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>18</pageId>
+ <contentName>ImageAd</contentName>
+ <contentPiece>/path/ad.jpg</contentPiece>
+ <contentTarget>http://www.example.com</contentTarget>
+ <contentInteraction>submit</contentInteraction>
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>60</timeSpentRef>
+ <pageId>19</pageId>
+ <contentName>Text Ad</contentName>
+ <contentPiece>Click to download Piwik now</contentPiece>
+ <contentTarget>http://piwik.org/download</contentTarget>
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>20</pageId>
+ <contentName>Text Ad</contentName>
+ <contentPiece>Click NOW</contentPiece>
+ <contentTarget>http://piwik.org/</contentTarget>
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>21</pageId>
+ <contentName>Text Ad</contentName>
+ <contentPiece>Click to download Piwik now</contentPiece>
+ <contentTarget>http://piwik.org/download</contentTarget>
+ <contentInteraction>click</contentInteraction>
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>22</pageId>
+ <contentName>Text Ad</contentName>
+ <contentPiece>Click NOW</contentPiece>
+ <contentTarget>http://piwik.org/download</contentTarget>
+ <contentInteraction>click</contentInteraction>
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>60</timeSpentRef>
+ <pageId>23</pageId>
+ <contentName>Text Ad</contentName>
+ <contentPiece>Click to download Piwik now</contentPiece>
+ <contentTarget />
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>30</timeSpentRef>
+ <pageId>24</pageId>
+ <contentName>Video Ad</contentName>
+ <contentPiece>movie.mov</contentPiece>
+ <contentTarget />
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -183,6 +584,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -201,23 +608,16 @@
<customVariables>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>director</plugins>
+ <plugins>cookie, director</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/director.png</pluginIcon>
<pluginName>director</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
</result> \ No newline at end of file
diff --git a/plugins/Contents/tests/System/expected/test_Contents_contentTargetMatch__Live.getLastVisitsDetails_day.xml b/plugins/Contents/tests/System/expected/test_Contents_contentTargetMatch__Live.getLastVisitsDetails_day.xml
index 0513e6b34b..52061fb273 100644
--- a/plugins/Contents/tests/System/expected/test_Contents_contentTargetMatch__Live.getLastVisitsDetails_day.xml
+++ b/plugins/Contents/tests/System/expected/test_Contents_contentTargetMatch__Live.getLastVisitsDetails_day.xml
@@ -12,14 +12,215 @@
<pageTitle>Ads</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>1</pageId>
+ <bandwidth />
+ <timeSpent>271</timeSpent>
+ <timeSpentPretty>4 min 31s</timeSpentPretty>
<generationTimeMilliseconds>333</generationTimeMilliseconds>
<generationTime>0.33s</generationTime>
<interactionPosition>1</interactionPosition>
- <timeSpent>271</timeSpent>
- <timeSpentPretty>4 min 31s</timeSpentPretty>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>2</pageId>
+ <contentName>ImageAd</contentName>
+ <contentPiece>Unknown</contentPiece>
+ <contentTarget />
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>3</pageId>
+ <contentName>ImageAd</contentName>
+ <contentPiece />
+ <contentTarget />
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>120</timeSpentRef>
+ <pageId>4</pageId>
+ <contentName>ImageAd</contentName>
+ <contentPiece>/path/ad.jpg</contentPiece>
+ <contentTarget>http://www.example.com</contentTarget>
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>5</pageId>
+ <contentName>ImageAd</contentName>
+ <contentPiece>/path/ad2.jpg</contentPiece>
+ <contentTarget>http://www.example.com</contentTarget>
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>6</pageId>
+ <contentName>ImageAd</contentName>
+ <contentPiece>/path/ad.jpg</contentPiece>
+ <contentTarget>http://www.example.com</contentTarget>
+ <contentInteraction>submit</contentInteraction>
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>60</timeSpentRef>
+ <pageId>7</pageId>
+ <contentName>Text Ad</contentName>
+ <contentPiece>Click to download Piwik now</contentPiece>
+ <contentTarget>http://piwik.org/download</contentTarget>
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>8</pageId>
+ <contentName>Text Ad</contentName>
+ <contentPiece>Click NOW</contentPiece>
+ <contentTarget>http://piwik.org/</contentTarget>
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>9</pageId>
+ <contentName>Text Ad</contentName>
+ <contentPiece>Click to download Piwik now</contentPiece>
+ <contentTarget>http://piwik.org/download</contentTarget>
+ <contentInteraction>click</contentInteraction>
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>10</pageId>
+ <contentName>Text Ad</contentName>
+ <contentPiece>Click NOW</contentPiece>
+ <contentTarget>http://piwik.org/download</contentTarget>
+ <contentInteraction>click</contentInteraction>
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>60</timeSpentRef>
+ <pageId>11</pageId>
+ <contentName>Text Ad</contentName>
+ <contentPiece>Click to download Piwik now</contentPiece>
+ <contentTarget />
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>30</timeSpentRef>
+ <pageId>12</pageId>
+ <contentName>Video Ad</contentName>
+ <contentPiece>movie.mov</contentPiece>
+ <contentTarget />
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -71,6 +272,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -89,9 +296,13 @@
<customVariables>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -100,17 +311,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -124,14 +324,215 @@
<pageTitle>Ads</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>13</pageId>
+ <bandwidth />
+ <timeSpent>271</timeSpent>
+ <timeSpentPretty>4 min 31s</timeSpentPretty>
<generationTimeMilliseconds>333</generationTimeMilliseconds>
<generationTime>0.33s</generationTime>
<interactionPosition>1</interactionPosition>
- <timeSpent>271</timeSpent>
- <timeSpentPretty>4 min 31s</timeSpentPretty>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>14</pageId>
+ <contentName>ImageAd</contentName>
+ <contentPiece>Unknown</contentPiece>
+ <contentTarget />
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>15</pageId>
+ <contentName>ImageAd</contentName>
+ <contentPiece />
+ <contentTarget />
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>120</timeSpentRef>
+ <pageId>16</pageId>
+ <contentName>ImageAd</contentName>
+ <contentPiece>/path/ad.jpg</contentPiece>
+ <contentTarget>http://www.example.com</contentTarget>
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>17</pageId>
+ <contentName>ImageAd</contentName>
+ <contentPiece>/path/ad2.jpg</contentPiece>
+ <contentTarget>http://www.example.com</contentTarget>
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>18</pageId>
+ <contentName>ImageAd</contentName>
+ <contentPiece>/path/ad.jpg</contentPiece>
+ <contentTarget>http://www.example.com</contentTarget>
+ <contentInteraction>submit</contentInteraction>
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>60</timeSpentRef>
+ <pageId>19</pageId>
+ <contentName>Text Ad</contentName>
+ <contentPiece>Click to download Piwik now</contentPiece>
+ <contentTarget>http://piwik.org/download</contentTarget>
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>20</pageId>
+ <contentName>Text Ad</contentName>
+ <contentPiece>Click NOW</contentPiece>
+ <contentTarget>http://piwik.org/</contentTarget>
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>21</pageId>
+ <contentName>Text Ad</contentName>
+ <contentPiece>Click to download Piwik now</contentPiece>
+ <contentTarget>http://piwik.org/download</contentTarget>
+ <contentInteraction>click</contentInteraction>
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>22</pageId>
+ <contentName>Text Ad</contentName>
+ <contentPiece>Click NOW</contentPiece>
+ <contentTarget>http://piwik.org/download</contentTarget>
+ <contentInteraction>click</contentInteraction>
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>60</timeSpentRef>
+ <pageId>23</pageId>
+ <contentName>Text Ad</contentName>
+ <contentPiece>Click to download Piwik now</contentPiece>
+ <contentTarget />
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>30</timeSpentRef>
+ <pageId>24</pageId>
+ <contentName>Video Ad</contentName>
+ <contentPiece>movie.mov</contentPiece>
+ <contentTarget />
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -183,6 +584,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -201,23 +608,16 @@
<customVariables>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>director</plugins>
+ <plugins>cookie, director</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/director.png</pluginIcon>
<pluginName>director</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
</result> \ No newline at end of file
diff --git a/plugins/Contents/tests/System/expected/test_ContentscontentNameOrPieceMatch__Live.getLastVisitsDetails_day.xml b/plugins/Contents/tests/System/expected/test_ContentscontentNameOrPieceMatch__Live.getLastVisitsDetails_day.xml
index 0513e6b34b..52061fb273 100644
--- a/plugins/Contents/tests/System/expected/test_ContentscontentNameOrPieceMatch__Live.getLastVisitsDetails_day.xml
+++ b/plugins/Contents/tests/System/expected/test_ContentscontentNameOrPieceMatch__Live.getLastVisitsDetails_day.xml
@@ -12,14 +12,215 @@
<pageTitle>Ads</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>1</pageId>
+ <bandwidth />
+ <timeSpent>271</timeSpent>
+ <timeSpentPretty>4 min 31s</timeSpentPretty>
<generationTimeMilliseconds>333</generationTimeMilliseconds>
<generationTime>0.33s</generationTime>
<interactionPosition>1</interactionPosition>
- <timeSpent>271</timeSpent>
- <timeSpentPretty>4 min 31s</timeSpentPretty>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>2</pageId>
+ <contentName>ImageAd</contentName>
+ <contentPiece>Unknown</contentPiece>
+ <contentTarget />
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>3</pageId>
+ <contentName>ImageAd</contentName>
+ <contentPiece />
+ <contentTarget />
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>120</timeSpentRef>
+ <pageId>4</pageId>
+ <contentName>ImageAd</contentName>
+ <contentPiece>/path/ad.jpg</contentPiece>
+ <contentTarget>http://www.example.com</contentTarget>
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>5</pageId>
+ <contentName>ImageAd</contentName>
+ <contentPiece>/path/ad2.jpg</contentPiece>
+ <contentTarget>http://www.example.com</contentTarget>
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>6</pageId>
+ <contentName>ImageAd</contentName>
+ <contentPiece>/path/ad.jpg</contentPiece>
+ <contentTarget>http://www.example.com</contentTarget>
+ <contentInteraction>submit</contentInteraction>
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>60</timeSpentRef>
+ <pageId>7</pageId>
+ <contentName>Text Ad</contentName>
+ <contentPiece>Click to download Piwik now</contentPiece>
+ <contentTarget>http://piwik.org/download</contentTarget>
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>8</pageId>
+ <contentName>Text Ad</contentName>
+ <contentPiece>Click NOW</contentPiece>
+ <contentTarget>http://piwik.org/</contentTarget>
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>9</pageId>
+ <contentName>Text Ad</contentName>
+ <contentPiece>Click to download Piwik now</contentPiece>
+ <contentTarget>http://piwik.org/download</contentTarget>
+ <contentInteraction>click</contentInteraction>
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>10</pageId>
+ <contentName>Text Ad</contentName>
+ <contentPiece>Click NOW</contentPiece>
+ <contentTarget>http://piwik.org/download</contentTarget>
+ <contentInteraction>click</contentInteraction>
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>60</timeSpentRef>
+ <pageId>11</pageId>
+ <contentName>Text Ad</contentName>
+ <contentPiece>Click to download Piwik now</contentPiece>
+ <contentTarget />
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>30</timeSpentRef>
+ <pageId>12</pageId>
+ <contentName>Video Ad</contentName>
+ <contentPiece>movie.mov</contentPiece>
+ <contentTarget />
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -71,6 +272,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -89,9 +296,13 @@
<customVariables>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -100,17 +311,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -124,14 +324,215 @@
<pageTitle>Ads</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>13</pageId>
+ <bandwidth />
+ <timeSpent>271</timeSpent>
+ <timeSpentPretty>4 min 31s</timeSpentPretty>
<generationTimeMilliseconds>333</generationTimeMilliseconds>
<generationTime>0.33s</generationTime>
<interactionPosition>1</interactionPosition>
- <timeSpent>271</timeSpent>
- <timeSpentPretty>4 min 31s</timeSpentPretty>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>14</pageId>
+ <contentName>ImageAd</contentName>
+ <contentPiece>Unknown</contentPiece>
+ <contentTarget />
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>15</pageId>
+ <contentName>ImageAd</contentName>
+ <contentPiece />
+ <contentTarget />
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>120</timeSpentRef>
+ <pageId>16</pageId>
+ <contentName>ImageAd</contentName>
+ <contentPiece>/path/ad.jpg</contentPiece>
+ <contentTarget>http://www.example.com</contentTarget>
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>17</pageId>
+ <contentName>ImageAd</contentName>
+ <contentPiece>/path/ad2.jpg</contentPiece>
+ <contentTarget>http://www.example.com</contentTarget>
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>18</pageId>
+ <contentName>ImageAd</contentName>
+ <contentPiece>/path/ad.jpg</contentPiece>
+ <contentTarget>http://www.example.com</contentTarget>
+ <contentInteraction>submit</contentInteraction>
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>60</timeSpentRef>
+ <pageId>19</pageId>
+ <contentName>Text Ad</contentName>
+ <contentPiece>Click to download Piwik now</contentPiece>
+ <contentTarget>http://piwik.org/download</contentTarget>
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>20</pageId>
+ <contentName>Text Ad</contentName>
+ <contentPiece>Click NOW</contentPiece>
+ <contentTarget>http://piwik.org/</contentTarget>
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>21</pageId>
+ <contentName>Text Ad</contentName>
+ <contentPiece>Click to download Piwik now</contentPiece>
+ <contentTarget>http://piwik.org/download</contentTarget>
+ <contentInteraction>click</contentInteraction>
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>0</timeSpentRef>
+ <pageId>22</pageId>
+ <contentName>Text Ad</contentName>
+ <contentPiece>Click NOW</contentPiece>
+ <contentTarget>http://piwik.org/download</contentTarget>
+ <contentInteraction>click</contentInteraction>
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>60</timeSpentRef>
+ <pageId>23</pageId>
+ <contentName>Text Ad</contentName>
+ <contentPiece>Click to download Piwik now</contentPiece>
+ <contentTarget />
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
+ </row>
+ <row>
+ <type>13</type>
+ <url>http://www.example.org/page</url>
+ <pageTitle />
+ <pageIdAction>3</pageIdAction>
+
+
+ <timeSpentRef>30</timeSpentRef>
+ <pageId>24</pageId>
+ <contentName>Video Ad</contentName>
+ <contentPiece>movie.mov</contentPiece>
+ <contentTarget />
+ <contentInteraction />
+ <bandwidth />
+ <interactionPosition />
+
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -183,6 +584,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -201,23 +608,16 @@
<customVariables>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>director</plugins>
+ <plugins>cookie, director</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/director.png</pluginIcon>
<pluginName>director</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
</result> \ No newline at end of file
diff --git a/plugins/CoreAdminHome/Commands/SetConfig.php b/plugins/CoreAdminHome/Commands/SetConfig.php
index 9f2d6f0b9a..8b80c6905e 100644
--- a/plugins/CoreAdminHome/Commands/SetConfig.php
+++ b/plugins/CoreAdminHome/Commands/SetConfig.php
@@ -34,20 +34,23 @@ You can set config values two ways, via --section, --key, --value or by command
To use --section, --key, --value, simply supply those options. You can only set one setting this way, and you cannot
append to arrays.
-To use arguments, supply one or more arguments in the following format: Section.config_setting_name=\"value\"
-'Section' is the name of the section, 'config_setting_name' the name of the setting and 'value' is the value.
-NOTE: 'value' must be JSON encoded, so Section.config_setting_name=\"value\" would work but
-Section.config_setting_name=value would not.
+To use arguments, supply one or more arguments in the following format:
+$ ./console config:set 'Section.config_setting_name=\"value\"'
+'Section' is the name of the section,
+'config_setting_name' the name of the setting and
+'value' is the value.
-To append to an array setting, supply an argument like this: Section.config_setting_name[]=\"value to append\"
+NOTE: 'value' must be JSON encoded, so 'Section.config_setting_name=\"value\"' would work but 'Section.config_setting_name=value' would not.
+
+To append to an array setting, supply an argument like this:
+$ ./console config:set 'Section.config_setting_name[]=\"value to append\"'
+
+To reset an array setting, supply an argument like this:
+$ ./console config:set 'Section.config_setting_name=[]'
-To reset an array setting, supply an argument like this: Section.config_setting_name=[]
Resetting an array will not work if the array has default values in global.ini.php (such as, [log] log_writers).
In this case the values in global.ini.php will be used, since there is no way to explicitly set an
array setting to empty in INI config.
-
-Use the --piwik-domain option to specify which instance to modify.
-
");
}
diff --git a/plugins/CoreAdminHome/Controller.php b/plugins/CoreAdminHome/Controller.php
index 3b96590946..8ca2d69077 100644
--- a/plugins/CoreAdminHome/Controller.php
+++ b/plugins/CoreAdminHome/Controller.php
@@ -27,6 +27,7 @@ use Piwik\Translation\Translator;
use Piwik\Url;
use Piwik\View;
use Piwik\Widget\WidgetsList;
+use Piwik\SettingsPiwik;
class Controller extends ControllerAdmin
{
@@ -48,6 +49,8 @@ class Controller extends ControllerAdmin
public function home()
{
+ $isInternetEnabled = SettingsPiwik::isInternetEnabled();
+
$isMarketplaceEnabled = Marketplace::isMarketplaceEnabled();
$isFeedbackEnabled = Plugin\Manager::getInstance()->isPluginLoaded('Feedback');
$widgetsList = WidgetsList::get();
@@ -59,6 +62,7 @@ class Controller extends ControllerAdmin
$hasDiagnostics = $widgetsList->isDefined('Installation', 'getSystemCheck');
return $this->renderTemplate('home', array(
+ 'isInternetEnabled' => $isInternetEnabled,
'isMarketplaceEnabled' => $isMarketplaceEnabled,
'hasPremiumFeatures' => $hasPremiumFeatures,
'hasNewPlugins' => $hasNewPlugins,
diff --git a/plugins/CoreAdminHome/Tasks.php b/plugins/CoreAdminHome/Tasks.php
index 01290f0cff..8c856fdce3 100644
--- a/plugins/CoreAdminHome/Tasks.php
+++ b/plugins/CoreAdminHome/Tasks.php
@@ -18,6 +18,7 @@ use Piwik\Option;
use Piwik\Plugins\CoreAdminHome\Tasks\ArchivesToPurgeDistributedList;
use Piwik\Tracker\Visit\ReferrerSpamFilter;
use Psr\Log\LoggerInterface;
+use Piwik\SettingsPiwik;
class Tasks extends \Piwik\Plugin\Tasks
{
@@ -48,7 +49,9 @@ class Tasks extends \Piwik\Plugin\Tasks
// lowest priority since tables should be optimized after they are modified
$this->daily('optimizeArchiveTable', null, self::LOWEST_PRIORITY);
- $this->weekly('updateSpammerBlacklist');
+ if(SettingsPiwik::isInternetEnabled() === true){
+ $this->weekly('updateSpammerBlacklist');
+ }
}
/**
diff --git a/plugins/CoreAdminHome/lang/da.json b/plugins/CoreAdminHome/lang/da.json
index a8b5187e1f..37469d8f90 100644
--- a/plugins/CoreAdminHome/lang/da.json
+++ b/plugins/CoreAdminHome/lang/da.json
@@ -26,9 +26,11 @@
"JSTracking_CampaignNameParam": "Kampagnenavn parameter",
"JSTracking_CodeNoteBeforeClosingHead": "Sørg for, at denne kode er på alle side på dit website. Vi anbefaler at indsætte koden lige før det afsluttende %1$s tag.",
"JSTracking_CustomCampaignQueryParam": "Brug brugerdefineret forespørgsel parameternavne for kampagnenavnet & søgeord",
+ "JSTracking_CrossDomain": "Som standard, er det Visitor ID som identificere en unik besøgende gemt i browserens første-parts cookies, som kun kan tilgås af sider på samme domæne. Aktivering af kryds domæne linkning lader dig spore alle handlinger og sidevisninger af en bestemt bruger i det samme besøg, selv når de ser sider på adskillige domæner. Når en bruger klikker på et link til et af dine websites alias URL'er, vil der bliver tilføjet en URL paramter pk_vid, som viderestiller brugerens Visitor ID.",
"JSTracking_CustomCampaignQueryParamDesc": "Note: %1$sPiwik registrerer automatisk Google Analytics parametre.%2$s",
"JSTracking_DisableCookies": "Deaktivere alle sporingscookies",
"JSTracking_DisableCookiesDesc": "Deaktiverer alle førstepartscookies. Eksisterende Piwik cookies for denne hjemmeside vil blive slettet ved den næste side visning.",
+ "JSTracking_EnableCrossDomainLinking": "Aktiverer kryds domæne linkning",
"JSTracking_EnableDoNotTrack": "Aktiver klientside DoNotTrack detektering",
"JSTracking_EnableDoNotTrack_AlreadyEnabled": "Bemærk: Server side DoNotTrack understøttelse er blevet aktiveret, så denne indstilling har ingen virkning.",
"JSTracking_EnableDoNotTrackDesc": "Så sporing anmodninger sendes ikke, hvis de besøgende ikke vil spores.",
@@ -43,6 +45,7 @@
"JSTracking_TrackNoScript": "Spor brugere med JavaScript déaktiveret",
"JSTracking_VisitorCustomVars": "Spor brugerdefinerede variabler for denne besøgende",
"JSTracking_VisitorCustomVarsDesc": "For eksempel med variabelnavn \"Type\" og værdi \"Kunde\".",
+ "JSTracking_EndNote": "Bemærk: Du kan generere en tilpasset sporingskode i %1$sSporingskode%2$s administrationssektionen.",
"JSTrackingIntro1": "Du kan spore besøgende til hjemmesiden på mange forskellige måder. Den anbefalede måde at gøre det på er vha. JavaScript. For at bruge denne metode, skal du sørge for alle sider på hjemmesiden har noget JavaScript-kode, som du kan generere her.",
"JSTrackingIntro2": "Når du har JavaScript sporingskoden til hjemmesiden, kopier og indsæt den på alle de sider, der skal spores med Piwik.",
"JSTrackingIntro3b": "På de fleste websider, blogs, CMS'er osv., kan du bruge en foruddefineret plugin til at klare det tekniske arbejde for dig. (se hvores %1$sliste over programtilføjelser brugt til at integrere Piwik%2$s). Er der ingen plugin, kan du ændre i din webside skabelon, og tilføje denne kode til &lt;\/head&gt; mærkerne, som ofte er defineret i 'header.php', 'header.tpl' eller lignende skabelon filer.",
diff --git a/plugins/CoreAdminHome/lang/de.json b/plugins/CoreAdminHome/lang/de.json
index 6fbf8a17e0..09ea50ad89 100644
--- a/plugins/CoreAdminHome/lang/de.json
+++ b/plugins/CoreAdminHome/lang/de.json
@@ -24,7 +24,7 @@
"JavaScriptTracking": "Tracking mit JavaScript",
"JSTracking_CampaignKwdParam": "Kampagnen Suchbegriff Parameter",
"JSTracking_CampaignNameParam": "Parameter für Kampagnenname",
- "JSTracking_CodeNoteBeforeClosingHead": "Stellen Sie sicher, dass sich dieser Code auf jeder Seite Ihrer Webseite befindet. Wir empfehlen, ihn direkt vor dem schliessenden %1$s Tag zu positionieren.",
+ "JSTracking_CodeNoteBeforeClosingHead": "Stellen Sie sicher, dass sich dieser Code auf jeder Seite Ihrer Webseite befindet. Wir empfehlen, ihn direkt vor dem schließenden %1$s Tag zu positionieren.",
"JSTracking_CustomCampaignQueryParam": "Eigene Anfrage-Parameter für Kampagnen Name & Suchbegriff verwenden",
"JSTracking_CrossDomain": "Standardmäßig wird die Besucher-ID, welche einen eindeutigen Besucher identifiziert, in den Cookies des Browsers, auf welche nur von einer einzelnen Domain zugegriffen werden kann, gespeichert. Wenn Sie Domainübergreifendes Tracking aktivieren, können Sie alle Aktionen und Seitenaufrufe eines bestimmten Besuchers in demselben Besuch verfolgen, auch wenn sie Seiten auf mehreren Domänen anzeigen. Wenn ein Benutzer auf einen Link zu einer der Alias-URL Ihrer Website klickt, wird automatisch der URL-Parameter pk_vid angefügt, der die Besucher-ID an die neue Domain übergibt.",
"JSTracking_CustomCampaignQueryParamDesc": "Hinweis: %1$sPiwik erkennt Parameter von Google Analytics automatisch.%2$s",
@@ -46,12 +46,12 @@
"JSTracking_VisitorCustomVars": "Benutzerdefinierte Variable für diesen Besucher aufzeichnen",
"JSTracking_VisitorCustomVarsDesc": "Zum Beispiel mit dem Variablennamen \"Typ\" und dem Wert \"Kunde\".",
"JSTracking_EndNote": "Hinweis: Sie können sich einen angepassten Tracking Code unter Einstellungen > %1$sTracking Code%2$s erzeugen.",
- "JSTrackingIntro1": "Es gibt viele verschiedene Möglichkeiten Besucher Ihrer Website zu tracken. Die empfohlene Art und Weise dies zu tun, ist die Verwendung von JavaScript. Um diese Methode zu nutzen müssen Sie sicher stellen, dass auf jeder Seite Ihrer Website ein JavaScript-Code eingebunden ist. Diesen können Sie hier generieren.",
+ "JSTrackingIntro1": "Es gibt viele verschiedene Möglichkeiten Besucher Ihrer Website zu tracken. Die empfohlene Art und Weise dies zu tun, ist die Verwendung von JavaScript. Um diese Methode zu nutzen, müssen Sie sicher stellen, dass auf jeder Seite Ihrer Website ein JavaScript-Code eingebunden ist. Diesen können Sie hier generieren.",
"JSTrackingIntro2": "Sobald Sie den JavaScript Tracking Code für Ihre Website haben, fügen Sie ihn auf allen Seiten ein, die Sie mit Piwik überwachen möchten.",
"JSTrackingIntro3b": "Bei den meisten Webseiten, Blogs und CMS, etc. können Sie ein existierendes Plugin benutzen, das Ihnen die technische Arbeit abnimmt. (Schauen Sie hierzu in die %1$sListe der Plugins um Piwik zu integrieren%2$s.) Falls kein passendes Plugin besteht können Sie die Templates Ihrer Webseite bearbeiten und diesen Quellcode in den %lt;\/head&gt;-Tag einfügen. Dieser ist häufig in einer 'header.php' oder header.tpl' oder ähnlich benannten Template-Datei definiert.",
"JSTrackingIntro4": "Falls Sie kein JavaScript nutzen möchten um Ihre Besucher zu tracken, %1$sgenerieren Sie einen Link zum Tracking mit Hilfe eines Bildes unterhalb.%2$s",
"JSTrackingIntro5": "Sollte Sie mehr als nur Seitenaufrufe aufzeichnen wollen, werfen Sie einen Blick in die %1$sPiwik Javascript Tracking Dokumentation%2$s für eine Liste an verfügbaren Funktionen. Mit der Verwendung dieser Funktionen können Sie Ziele, benutzerdefinierte Variablen, Ecommerce Bestellungen, verlassene Warenkörbe und mehr aufzeichnen.",
- "LogoNotWriteableInstruction": "Um Ihr eigenes Logo anstelle des Piwik Logos verwenden zu können werden Schreibrechte auf diesen Ordner benötigt: %1$s Piwik benötigt Schreibzugriff auf Ihre Logos die gespeichert sind in %2$s.",
+ "LogoNotWriteableInstruction": "Um Ihr eigenes Logo anstelle des Piwik Logos verwenden zu können werden Schreibrechte auf diesen Ordner benötigt: %1$s Piwik benötigt Schreibzugriff auf Ihre Logos, die gespeichert sind in %2$s.",
"FileUploadDisabled": "Das Hochladen von Dateien ist in Ihrer PHP-Konfiguration nicht aktiviert. Um Ihr eigenes Logo hochladen zu können setzen Sie bitte %s in Ihrer php.ini und starten Sie den Webserver neu.",
"LogoUploadFailed": "Die hochgeladene Datei konnte nicht verarbeitet werden. Bitte überprüfen Sie ob die Datei ein gültiges Format hat.",
"LogoUpload": "Wählen Sie ein Logo für den Upload",
@@ -80,7 +80,7 @@
"SettingsSaveSuccess": "Einstellungen aktualisiert",
"SendPluginUpdateCommunication": "Sende mir eine E-Mail wenn eine neue Plugin-Aktualisierung zur Verfügung steht",
"SendPluginUpdateCommunicationHelp": "Der Hauptadministrator wird per E-Mail benachrichtigt, sobald eine neue Version eines Plugins zur Verfügung steht.",
- "StableReleases": "Sollte Piwik eine wichtige Komponente Ihres Unternehmens sein, empfehlen wir Ihnen den letzen stabilen Release zu verwenden. Sollten Sie die letze Beta Version verwenden und einen Fehler finden oder einen Vorschlag haben, %1$slesen Sie bitte hier%2$s.",
+ "StableReleases": "Sollte Piwik eine wichtige Komponente Ihres Unternehmens sein, empfehlen wir Ihnen den letzten stabilen Release zu verwenden. Sollten Sie die letzte Beta Version verwenden und einen Fehler finden oder einen Vorschlag haben, %1$slesen Sie bitte hier%2$s.",
"LtsReleases": "LTS (Long Term Support \/ Langzeit Support) Versionen erhalten nur Sicherheitsupdates und Bug Fixe.",
"SystemPluginSettings": "Globale Plugin Einstellungen",
"TrackAGoal": "Ein Ziel aufzeichnen",
diff --git a/plugins/CoreAdminHome/lang/id.json b/plugins/CoreAdminHome/lang/id.json
index b0842272fe..918468064f 100644
--- a/plugins/CoreAdminHome/lang/id.json
+++ b/plugins/CoreAdminHome/lang/id.json
@@ -1,7 +1,10 @@
{
"CoreAdminHome": {
+ "AddNewTrustedHost": "Tambahkan host terpercaya",
"Administration": "Administrasi",
+ "ArchivingSettings": "Pengaturan pengarsipan",
"BrandingSettings": "Pengaturan merek",
+ "ReleaseChannel": "Rilis kanal",
"ClickHereToOptIn": "Klik di sini agar terekam.",
"ClickHereToOptOut": "Klik di sini agar tak-terekam.",
"CustomLogoFeedbackInfo": "Jika Anda menyesuaikan logo Piwik, Anda mungkin juga tertarik untuk menyembunyikan tautan %1$s di menu atas. Untuk melakukannya, Anda mematikan pengaya Umpan Balik di halaman %2$s Pengelolaan Pengaya%3$s.",
@@ -44,6 +47,7 @@
"LogoUploadHelp": "Harap mengunggah berkas dalam bentuk %1$s dengan tinggi minimal %2$s pixel.",
"MenuDiagnostic": "Diagnosis",
"MenuGeneralSettings": "Pengaturan Umum",
+ "MenuMeasurables": "Terukur",
"OptOutComplete": "Jangan-Lacak selesai. Bila Anda mengunjungi situs ini, Anda tidak akan terekam oleh perangkat Analisis Ramatraya.",
"OptOutCompleteBis": "Perhatikan bahwa jika Anda menghapus kuki Anda, menghapus kuki Jangan-Lacak, atau jika Anda mengganti komputer atau peramban ramatraya, Anda perlu melakukan prosedur Jangan-Lacak lagi.",
"OptOutExplanation": "Piwik berdedikasi untuk menyediakan privasi Internet. Agar pengunjung Anda memiliki pilihan untuk tidak terekam oleh Analisis Ramatraya Piwik, Anda dapat menambahkan kode HTML di salah satu halaman situs Anda, misalnya di halaman Kebijakan Privasi.",
diff --git a/plugins/CoreAdminHome/lang/ja.json b/plugins/CoreAdminHome/lang/ja.json
index a2a6134794..da2cf547f2 100644
--- a/plugins/CoreAdminHome/lang/ja.json
+++ b/plugins/CoreAdminHome/lang/ja.json
@@ -61,6 +61,7 @@
"MenuGeneralSettings": "全般の設定",
"MenuSystem": "システム",
"MenuDevelopment": "開発",
+ "MenuMeasurables": "Measurables",
"OptOutComplete": "オプトアウトが完了しました。 このウェブサイトへのあなたの訪問は、ウェブ解析ツールで記録されません。",
"OptOutCompleteBis": "Cookie をクリアしてオプトアウト Cookie を削除したり、コンピュータやブラウザを変更した場合は、オプトアウト手続きを再度実行する必要があることに注意してください。",
"OptOutDntFound": "ユーザーにより、このブラウザではトラッキングしない設定になっております。これはブラウザの設定によるもので、'Do Not Track' 機能を無効にするまでオプトインできません。",
diff --git a/plugins/CoreAdminHome/lang/nl.json b/plugins/CoreAdminHome/lang/nl.json
index 903c76affb..7e01b26c89 100644
--- a/plugins/CoreAdminHome/lang/nl.json
+++ b/plugins/CoreAdminHome/lang/nl.json
@@ -44,6 +44,7 @@
"JSTracking_TrackNoScript": "Volg gebruikers via JavaScript is uitgeschakeld",
"JSTracking_VisitorCustomVars": "Hou custom variabelen bij voor deze bezoeker",
"JSTracking_VisitorCustomVarsDesc": "Bijvoorbeeld met variabele naam \"Type\" en waarde \"Klant\"",
+ "JSTracking_EndNote": "Opmerking: Na het installatie proces, kun je custom tracking code genereren in het %1$sTracking Code%2$s admin gedeelte.",
"JSTrackingIntro1": "Je kunt bezoekers volgen op verschillende manieren. De aanbevolen manier is via JavaScript. Om van deze methode gebruik te maken, moet elke pagina van je website de JavaScript code bevatten, die je hier kan genereren.",
"JSTrackingIntro2": "Wanneer je de JavaScript code voor je website hebt, kopieer en plak de code naar alle pagina's die je wilt volgen met Piwik",
"JSTrackingIntro3b": "In de meeste websites, blogs, CMS-en, etc kan je een plugin gebruiken die de technische integratie van Piwik uit handen nemen. (Zie daarvoor onze %1$slijst van plugins om Piwik te integreren%2$s.) In sommige gevallen bestaat er (nog) geen plugin. De Piwik code kan dan door het bewerken van je website template in de &lt;\/head&gt; tag, welke vaak in de 'header.php', 'header.tpl'of een soortgelijke bestandsnaam staat, toegevoegd worden.",
diff --git a/plugins/CoreAdminHome/lang/pl.json b/plugins/CoreAdminHome/lang/pl.json
index d0b3d82b96..1c2c6130ff 100644
--- a/plugins/CoreAdminHome/lang/pl.json
+++ b/plugins/CoreAdminHome/lang/pl.json
@@ -1,12 +1,14 @@
{
"CoreAdminHome": {
+ "AddNewTrustedHost": "Dodaj zaufanego hosta",
"Administration": "Zarządzanie",
"ArchivingSettings": "Ustawienia archiwizacji",
"BrandingSettings": "Ustawienia logo",
+ "ReleaseChannel": "Kanał aktualizacji",
"ClickHereToOptIn": "Kliknij tutaj by włączyć analizę.",
"ClickHereToOptOut": "Kliknij tutaj by wyłączyć analizę.",
- "CustomLogoFeedbackInfo": "Jeśli dostosujesz logo Piwik, może będziesz także chciał ukryć %1$s odnośnik w górnym menu. Aby to zrobić możesz wyłączyć plugin Feedback na stronie %2$sManage Plugins%3$s.",
- "CustomLogoHelpText": "Można dostosować logo Piwik, które będą wyświetlane w interfejsie użytkownika i w raportach e-mail.",
+ "CustomLogoFeedbackInfo": "Jeśli dostosujesz logo Piwik, może będziesz także chciał ukryć %1$s odnośnik w górnym menu. Aby to zrobić możesz wyłączyć plugin Feedback na stronie %2$sZarządzaj wtyczkami%3$s.",
+ "CustomLogoHelpText": "Można dostosować logo Piwik, które będzie wyświetlane w interfejsie użytkownika i w raportach e-mail.",
"DevelopmentProcess": "Podczas gdy %1$sproces rozwoju%2$s składa się z tysięcy testów automatycznych, Beta Testerzy odgrywają kluczową rolę w osiągnięciu \"polityki braku błędów\" w Piwik'u.",
"EmailServerSettings": "Konfiguracja serwera poczty",
"ForBetaTestersOnly": "Tylko dla beta testerów",
@@ -16,16 +18,19 @@
"ImageTrackingIntro3": "Dla pełnej listy opcji które możesz używać z linkiem obrazka śledzącego zobacz %1$sDokumentację API Śledzenia%2$s.",
"ImageTrackingLink": "Link Obrazka Śledzącego",
"ImportingServerLogs": "Importuj logi Serwera",
- "ImportingServerLogsDesc": "Alternatywa do śledzenia odwiedzających przez przeglądarkę (przez JavaScript lub przez link do obrazka) jest ciągły import logów serwera. Poznaj więcej informacji o %1$sAnalizie na podstawie Logów Serwera%2$s.",
- "InvalidPluginsWarning": "Poniższe pluginy nie są kompatybilne z %1$s i nie moŋa zostać załadowane: %2$s.",
+ "ImportingServerLogsDesc": "Alternatywą do śledzenia odwiedzających przez przeglądarkę (przez JavaScript lub przez link do obrazka) jest ciągły import logów serwera. Poznaj więcej informacji o %1$sAnalizie na podstawie Logów Serwera%2$s.",
+ "InvalidPluginsWarning": "Poniższe wtyczki nie są kompatybilne z %1$s i nie mogą zostać załadowane: %2$s.",
"InvalidPluginsYouCanUninstall": "Możesz zaktualizować lub odinstalować te pluginy na stronie %1$sObsługa Pluginów%2$s",
- "JavaScriptTracking": "Śledzenie JavaScriptowe",
- "JSTracking_CampaignKwdParam": "Parametr Słowa Kluczowego Kampanii",
- "JSTracking_CampaignNameParam": "Nazwa parametru Kampanii",
- "JSTracking_CustomCampaignQueryParam": "Użyto niestandardowych nazw parametrów dla zapytanie do nazwy kampanii i hasła",
+ "JavaScriptTracking": "Śledzenie JavaScript",
+ "JSTracking_CampaignKwdParam": "Parametr Słowo Kluczowe kampanii",
+ "JSTracking_CampaignNameParam": "Parametr Nazwa kampanii",
+ "JSTracking_CodeNoteBeforeClosingHead": "Dopilnuj, aby ten kod znalazł się na każdej stronie Twojego serwisu. Zalecamy, aby został on umieszczony bezpośrednio przed zamykającym tagiem %1$s.",
+ "JSTracking_CustomCampaignQueryParam": "Użyto niestandardowych nazw parametrów dla nazwy kampanii i słów kluczowych",
+ "JSTracking_CrossDomain": "Domyślnie, ID użytkownika identyfikujące unikalnego odwiedzającego jest przechowywane w podstawowych ciasteczkach przeglądarki, które dostępne są jedynie w ramach stron w tej samej domenie. Włączenie linkowania między domenami pozwala Ci śledzić działania i otwarcia stron wybranego użytkownika podczas całej wizyty, nawet gdy dotyczy ona kilku domen. Za każdym razem, gdy użytkownik kliknie w link, który został skonfigurowany jako alias URL, do adresu URL zostanie dołączony parametr pk_vid przekazujący ID odwiedzającego.",
"JSTracking_CustomCampaignQueryParamDesc": "Ważne: %1$sPiwik automatycznie wykryje parametry Google Analystics..%2$s",
"JSTracking_DisableCookies": "Wyłącz wszystkie pliki cookie",
- "JSTracking_DisableCookiesDesc": "Wyłącza wszystkie pliki cookie. Istniejące pliki cookie Piwik dla tej witryny zostaną usunięte w następnym widoku strony.",
+ "JSTracking_DisableCookiesDesc": "Wyłącza wszystkie pliki cookie. Istniejące pliki cookie Piwik dla tej witryny zostaną usunięte po następnym odświeżeniu strony.",
+ "JSTracking_EnableCrossDomainLinking": "Włącza powiązania między domenowe",
"JSTracking_EnableDoNotTrack": "Włącz wykrywanie DoNotTrack u klienta",
"JSTracking_EnableDoNotTrack_AlreadyEnabled": "NOTKA: Serwerowa opcja DoNotTrack została aktywowana, ustawienie które edytujesz nie będzie brane pod uwagę.",
"JSTracking_EnableDoNotTrackDesc": "Więc żądania śledzenia nie będą wysyłane jeżeli odwiedzający nie życzą sobie śledzenia.",
@@ -37,32 +42,47 @@
"JSTracking_MergeSubdomainsDesc": "A więc jeśli odwiedzający odwiedza %1$s i %2$s, zostanie policzony jako unikalny odwiedzający.",
"JSTracking_PageCustomVars": "Śledź własną zmienną dla widoku każdej ze stron",
"JSTracking_PageCustomVarsDesc": "Dla przykładu, z nazwą zmiennej \"Kategoria\" i wartością \"Biała Księga\".",
+ "JSTracking_TrackNoScript": "Śledzenie użytkowników przy pomocy JavaScript wyłączone",
"JSTracking_VisitorCustomVars": "Śledź własne zmienne dla tego odwiedzającego",
"JSTracking_VisitorCustomVarsDesc": "Dla przykładu, ze nazwą zmiennej \"Typ\" i wartością \"Klient\".",
+ "JSTracking_EndNote": "Ważne: Możesz wygenerować spersonalizowany kod śledzący w sekcji %1$sKod śledzący%2$s w panelu administracyjnym.",
"JSTrackingIntro1": "Możesz śledzić odwiedzających na wiele sposobów. Rekomendowane jest użycie Javascript. By użyć tej metody musisz upewnić się, że każda podstrona ma kod, który możesz wygenerować poniżej.",
- "JSTrackingIntro2": "Kiedy już massz kod śledzenia JavaScript, skopiuj i wklej go na wszystkie strony, które chcesz śledzić w Piwik.",
+ "JSTrackingIntro2": "Kiedy już masz kod śledzenia JavaScript, skopiuj i wklej go na wszystkie strony, które chcesz śledzić w Piwik.",
+ "JSTrackingIntro3b": "W większości stron, blogów czy CMS'ów, itd. możesz skorzystać z pre-konfigurowanej wtyczki, która zajmie się stroną techniczną zadania. Zajrzyj na naszą %1$s listę wtyczek pozwalającą zintegrować Piwik%2$s. Jeśli nie znajdziesz właściwej wtyczki możesz dodać kod śledzący edytując szablony swojej strony, po prostu wklejając ten kod przed zamykającym znacznikiem &lt;\/head&gt;, który najczęściej znajdziesz w 'header.php', 'header.tpl' lub podobnych plikach.",
"JSTrackingIntro4": "Jeśli nie chcesz używać JavaScript'u do śledzenia odwiedzających, %1$swygeneruj link śledzenia obrazkiem poniżej%2$s.",
"JSTrackingIntro5": "Jeśli chcesz zrobić więcej niż śledzić odwiedziny stron, sprawdz listę dostępnych funkcji w %1$sdokumentacji Piwik Śledzenie Javascript%2$s. Przy użyciu tych funkcji możesz śledzić cele, własne zmienne, zamówienia biznesowe i inne.",
"LogoNotWriteableInstruction": "Aby użyć swojego własnego logo zamiast domyślnego loga Piwik, nadaj uprawnienia do zapisu do katalogu: %1$s Piwik potrzebuje tych uprawnień aby zapisać Twoje loga do pliku %2$s.",
"FileUploadDisabled": "Przesyłanie plików nie jest włączone w konfiguracji PHP. Aby przesłać własne logo należy ustawić %s w pliku php.ini i ponownie uruchomić serwer WWW.",
+ "LogoUploadFailed": "Wgrany plik nie mógł zostać przetworzony. Proszę sprawdź poprawność formatu tego pliku.",
"LogoUpload": "Wybierz logo",
"FaviconUpload": "Wybierz Favikonę do wysłania",
"LogoUploadHelp": "Prześlij plik w formatach %1$s i o minimalnej wysokości %2$s pikseli.",
"MenuDiagnostic": "Diagnostyka",
"MenuGeneralSettings": "Konfiguracja ogólna",
+ "MenuSystem": "System",
"MenuDevelopment": "Rozwój",
+ "MenuMeasurables": "Wartości mierzalne",
"OptOutComplete": "Pełna dezaktywacja. Nie będziesz odnotowywany przez narzędzie statystyk i analityki.",
"OptOutCompleteBis": "Prosimy zauważyć, że jeśli usuniesz swoje pliki ciasteczek cookies, zostaną skasowane ciasteczka wyłączające śledzenie, lub jeśli zmienisz komputer czy przeglądarkę, będziesz musiał powtórzyć procedurę wyłączenia analizy statystycznej raz jeszcze.",
+ "OptOutDntFound": "Twoja aktywność nie jest śledzona, ponieważ Twoja przeglądarka zgłasza, że sobie tego nie życzysz. Jest to ustawienie Twojej przeglądarki, więc nie możesz wyrazić zgodny na śledzenie do momentu wyłączenia opcji \"Ochrona przed śledzeniem\".",
"OptOutExplanation": "Statystyki Piwik są zaprojektowane by nie naruszać prywatności w internecie. By zapewnić odwiedzającym możliwość wyboru rezygnacji ze śledzenia przez statystyki Piwik, możesz dodać następującą informację w kodzie HTML na jednej ze swoich stron, na przykład na stronie Polityka prywatności.",
"OptOutExplanationBis": "Ten kod wyświetli ramkę Iframe zawierającą link dla odwiedzających do wyłączenia śledzenia przez ustawienie ciasteczka cookie dla ich przeglądarek. %1$s Kliknij tutaj%2$s, by zapoznać się z treścią wyświetlaną przez ramkę iFrame.",
"OptOutForYourVisitors": "Wyłączenie działania Piwik dla twoich odwiedzających",
"PiwikIsInstalledAt": "Piwik jest zainstalowany w",
+ "PersonalPluginSettings": "Osobiste ustawienia wtyczek",
"PluginSettingChangeNotAllowed": "Nie masz uprawnień do zmiany wartości parametru\"%1$s\" w pluginie \"%2$s\"",
"PluginSettingReadNotAllowed": "Nie masz uprawnień do odczytu wartości ustawienia \"%1$s\" w pluginie \"%2$s\"",
+ "PluginSettings": "Ustawienia wtyczek",
"PluginSettingsIntro": "Możesz tu zmienić ustawienia dla następujących pluginów innych autorów:",
"PluginSettingsValueNotAllowed": "Wartość dla pola \"%1$s\" w pluginie \"%2$s\" jest niedozwolona",
+ "PluginSettingsSaveFailed": "Nie udało się zapisać ustawień wtyczki",
+ "PluginSettingsSaveSuccess": "Ustawienia wtyczki zaktualizowane.",
+ "SettingsSaveSuccess": "Ustawienia zaktualizowane.",
+ "SendPluginUpdateCommunication": "Wyślij e-mail, gdy pojawi się aktualizacja wtyczki",
"SendPluginUpdateCommunicationHelp": "Email zostanie wysłany do Super Użytkowników gdy pojawi się nowa wersja pluginu.",
"StableReleases": "Jeśli Piwik jest ważną częścią firmy , zalecamy użycie najnowszej stabilnej wersji. Jeśli używasz najnowszej wersji beta i znajdziesz błąd lub masz sugestię , prosimy %1$szobacz tutaj%2$s.",
+ "LtsReleases": "Wersje LTS (Wydłużone Wsparcie) otrzymują jedynie łatki bezpieczeństwa i błędów.",
+ "SystemPluginSettings": "Systemowe ustawienia wtyczek",
"TrackAGoal": "Śledź cel",
"TrackingCode": "Kod śledzenia",
"TrustedHostConfirm": "Czy na pewno chcesz zmienić zaufaną nazwę hosta Piwik?",
@@ -74,6 +94,9 @@
"YouAreOptedIn": "Bierzesz udział w procesie analityki statystycznej",
"YouAreOptedOut": "Wykluczono Cię z procesu analityki statystycznej",
"YouMayOptOut": "Możesz wybrać, by nie otrzymywać unikalnego numeru identyfikacyjnego w ciasteczku cookie, przypisanego tylko do Twojego komputera, celem uniknięcia gromadzenia i statystycznej analizy danych na tej stronie.",
- "YouMayOptOutBis": "Aby dokonać tego wyboru, prosimy kliknąć poniżej by uzyskać ciasteczko cookie wyłączające analitykę statystyczną."
+ "YouMayOptOutBis": "Aby dokonać tego wyboru, prosimy kliknąć poniżej by uzyskać ciasteczko cookie wyłączające analitykę statystyczną.",
+ "OptingYouOut": "Wypisuję Cię, proszę zaczekaj...",
+ "ProtocolNotDetectedCorrectly": "Przeglądasz Piwik poprzez bezpieczne połączenie SSL (korzystając z HTTPS), jednak Piwik po stronie serwera wykrył jedynie połączenie niezabezpieczone.",
+ "ProtocolNotDetectedCorrectlySolution": "W celu upewnienia się, że Piwik w bezpieczny sposób pobiera i wysyła zawartość przez HTTPS, możesz edytować plik %1$s i wprowadzić dane dostępowe swojego proxy lub też dodać linię %2$s poniżej sekcji %3$s. %4$sDowiedz się więcej%5$s"
}
} \ No newline at end of file
diff --git a/plugins/CoreAdminHome/lang/ru.json b/plugins/CoreAdminHome/lang/ru.json
index f0286f69c8..0236d0cffe 100644
--- a/plugins/CoreAdminHome/lang/ru.json
+++ b/plugins/CoreAdminHome/lang/ru.json
@@ -26,9 +26,11 @@
"JSTracking_CampaignNameParam": "Параметр Имени кампании",
"JSTracking_CodeNoteBeforeClosingHead": "Удостоверьтесь, что этот код находится на каждой странице вашего вебсайта. Мы рекомендуем вставлять его сразу перед закрытием тега %1$s.",
"JSTracking_CustomCampaignQueryParam": "Использовать пользовательские имена параметров в запросе для названия кампании и ключевого слова",
+ "JSTracking_CrossDomain": "По умолчанию, ID посетителя, которое идентифицирует уникального посетителя, хранится в файлах cookies браузера, которые доступны только страницам этого же домена. Включение кросс-доменной связи позволяет вам отслеживать все действия и просмотры страниц определенного пользователя за одно посещение, даже если он просматривал страницы на нескольких доменах. Когда пользователь нажимает на одну из ссылок на вашем веб-сайте , будет добавлен параметр URL pk_vid, возвращающий ID посетителя.",
"JSTracking_CustomCampaignQueryParamDesc": "Примечание: %1$sPiwik автоматически определит параметры Google Analytics.%2$s",
"JSTracking_DisableCookies": "Отключить все отслеживания cookies",
"JSTracking_DisableCookiesDesc": "Отключение всех first party cookies. Существующие cookies Piwik'а для этого веб-сайта будут удалены при следующем просмотре страницы.",
+ "JSTracking_EnableCrossDomainLinking": "Включает кросс-доменную связь",
"JSTracking_EnableDoNotTrack": "Включить обнаружение DoNotTrack на стороне пользователя.",
"JSTracking_EnableDoNotTrack_AlreadyEnabled": "Примечание: на стороне сервера поддержка DoNotTrack была включена, так что эта опция не будет иметь никакого эффекта.",
"JSTracking_EnableDoNotTrackDesc": "Пользователь не будет отслеживаться, если он этого не хочет.",
@@ -40,10 +42,13 @@
"JSTracking_MergeSubdomainsDesc": "Если один посетитель заходил на %1$s и %2$s, то посещения будут учитываться как уникальный посетитель.",
"JSTracking_PageCustomVars": "Отслеживать пользовательские переменные для каждого вида страницы",
"JSTracking_PageCustomVarsDesc": "Например, имя переменной «Категория», а значение — «Официальные документы».",
+ "JSTracking_TrackNoScript": "Отслеживать пользователей при отключенном JavaScript",
"JSTracking_VisitorCustomVars": "Отслеживать пользовательские переменные для посетителя",
"JSTracking_VisitorCustomVarsDesc": "Например, имя переменной «Тип», а значение — «Клиент».",
+ "JSTracking_EndNote": "Примечание: Вы можете сгенерировать пользовательский код отслеживания в разделе для администратора %1$sКод отслеживания%2$s.",
"JSTrackingIntro1": "Вы можете отслеживать посетителей разными способами. Мы рекомендуем использовать для этого JavaScript. Чтобы использовать данный метод вы должны убедиться, что этот код размещён на каждой странице.",
"JSTrackingIntro2": "Как только вы получили JavaScript-код для вашего сайта, скопируйте и вставьте его на все страницы вашего сайта, на которых вы хотите отслеживать посетителей.",
+ "JSTrackingIntro3b": "В большинстве веб-сайтов, блогов, CMS и т.д. вы можете использовать готовый плагин, чтобы сделать техническую работу на сайте вместо вас. (Смотрите %1$sсписок плагинов для интеграции с Piwik%2$s.) Если пока не существует подходящего плагина - вы можете отредактировать свои шаблоны веб-сайта и добавить этот код в таг &lt;\/head&gt;, который часто определен в \"header.php\", \"header.tpl\" или в подобном файле шаблона.",
"JSTrackingIntro4": "Если вы не хотите или не можете использовать JavaScript, %1$sвоспользуйтесь отслеживанием посетителей через изображение%2$s.",
"JSTrackingIntro5": "Если вы хотите больше, чем простое отслеживание страниц, пожалуйста, ознакомьтесь с %1$sPiwik Javascript Tracking documentation%2$s для просмотра всех функций. С помощью этих функций вы можете отслеживать цели, пользовательские переменные, заказы электронной коммерции, неоформленные заказы и многое другое.",
"LogoNotWriteableInstruction": "Чтобы использовать собственное лого вместо стандартного Piwik, откройте для записи эту папку: %1$s Piwik' нужен доступ на запись к вашим лого, храняшимся в файлах %2$s.",
diff --git a/plugins/CoreAdminHome/lang/sk.json b/plugins/CoreAdminHome/lang/sk.json
index bad1a9dcfb..850c153fa6 100644
--- a/plugins/CoreAdminHome/lang/sk.json
+++ b/plugins/CoreAdminHome/lang/sk.json
@@ -33,6 +33,8 @@
"MenuSystem": "Systém",
"MenuDevelopment": "Vývoj",
"MenuMeasurables": "Metriky",
+ "OptOutComplete": "Odhlásenie nastavené. Vaše návštevy nebudú sledované nástrojom webovej analýzy.",
+ "OptOutCompleteBis": "Poznámka: ak zmažete cookie, odstránite vylučovací cookie alebo zmeníte počítač alebo prehliadač, budete musieť vykonať procedúru nastavenia odhlásenia znova.",
"OptOutForYourVisitors": "Odhlásenie pre Vašich návštevníkov",
"PiwikIsInstalledAt": "Piwik je nainštalovaný na",
"PersonalPluginSettings": "Osobné nastavenia modulu",
@@ -45,6 +47,10 @@
"TrackingCode": "Kód sledovania",
"TrustedHostConfirm": "Ste si istí, že chcete zmeniť dôveryhodné hostname pre Piwik?",
"UpdateSettings": "Aktualizovať nastavenia",
- "UseCustomLogo": "Použiť vlastné logo"
+ "UseCustomLogo": "Použiť vlastné logo",
+ "YouAreOptedIn": "Aktuálne ste prihlásený.",
+ "YouAreOptedOut": "Aktuálne ste odhlásený.",
+ "YouMayOptOut": "Zakliknutím v rámčeku nižšie, môžete zakázať uloženie cookie s identifikačným číslom prideleným vášmu počítaču a tým zamedziť prevádzkovateľovi tohto webu zhromažďovať a analyzovať štatistické údaje.",
+ "YouMayOptOutBis": "Ak ste sa rozhodli pre túto možnosť, kliknite prosím na priložený odkaz pre uloženie deaktivačného cookie vo svojom prehliadači."
}
} \ No newline at end of file
diff --git a/plugins/CoreAdminHome/lang/sv.json b/plugins/CoreAdminHome/lang/sv.json
index f26d433753..6efe05dcd6 100644
--- a/plugins/CoreAdminHome/lang/sv.json
+++ b/plugins/CoreAdminHome/lang/sv.json
@@ -26,9 +26,11 @@
"JSTracking_CampaignNameParam": "villkor för kampanjnamn",
"JSTracking_CodeNoteBeforeClosingHead": "Säkerställ att denna kod finns på varje sida på din webbplats. Vi rekommenderar att klistra in koden alldeles innan den stängande %1$s-taggen.",
"JSTracking_CustomCampaignQueryParam": "Använd den egna förfrågan för parameterns namn för kampanjnamn och nyckelord",
+ "JSTracking_CrossDomain": "Som standard lagras besökarens ID i webbläsarens förstapartscookies som bara kan nås från samma domän. Genom att möjliggöra cross domain-länkning kan du spåra alla aktiviteter och sidvisningar av en användare även om de besöker flera olika domäner. När en användare klickar på en länk till en alias-URL kommer den lägga till URL-parametern pk_vid för att vidarebefordra besökarens ID.",
"JSTracking_CustomCampaignQueryParamDesc": "Observera: %1$sPiwik kommer automatiskt upptäcka parametrar för Google Analytics. %2$s",
"JSTracking_DisableCookies": "Inaktivera spårnings cookies",
"JSTracking_DisableCookiesDesc": "Inaktivera alla direkta cookies. Befintliga Piwik cookies för denna webbsida kommer att raderas vid nästa sidvisning.",
+ "JSTracking_EnableCrossDomainLinking": "Möjliggör cross domain-länkning",
"JSTracking_EnableDoNotTrack": "Aktivera klientsidan för sidan \"SpåraInte\" upptäckt",
"JSTracking_EnableDoNotTrack_AlreadyEnabled": "Observera: Rapporten till serversidan DoNotTrack har aktiverats, så det här valet kommer inte att ha någon effekt.",
"JSTracking_EnableDoNotTrackDesc": "Ingen spårningsförfrågan kommer att skickas om inte besökare önskar att bli spårade.",
@@ -40,10 +42,13 @@
"JSTracking_MergeSubdomainsDesc": "Om en besökare besöker %1$s och %2$s, kommer de räknas som en unik besökare",
"JSTracking_PageCustomVars": "Spåra en anpassad variabel för varje sidvisning",
"JSTracking_PageCustomVarsDesc": "Till exempel med varierande namn \"kategori\" och värde \"vita papper\".",
+ "JSTracking_TrackNoScript": "Spåra användare utan javaskript",
"JSTracking_VisitorCustomVars": "Spåra anpassade variabler för denna besökare",
"JSTracking_VisitorCustomVarsDesc": "Till exempel med varierande namn \"sort\" och värde \"kund\".",
+ "JSTracking_EndNote": "OBS: Du kan skapa anpassad spårkningskod under %1$sSpårningskod %2$si administrationsgränssnittet.",
"JSTrackingIntro1": "Du kan spåra besöken till din sida på många olika sätt. Det sättet som vi rekommenderar är via JavaScript. För att använda den här metoden behöver du ge varje undersida på din hemsida en JavaScript kod. Du kan hämta den koden här:",
"JSTrackingIntro2": "När du har JavaScripts spårningskod till din webbsida, kopiera och klistra in det på alla sidor du vill spåra med Piwik.",
+ "JSTrackingIntro3b": "I de flesta webbplatser, CS-verktyg mm. kan du använda en färdig plugin för att göra den tekniska anpassningen åt dig. (se vår %1$slista över plugin för att integrera Piwik%2$s.) Om du inte hittar någon plugin kan du redigera den webbplats mallar och lägga till koden till &lt;\/head&gt;-tagen. Den finns ofta i 'header.php', 'header.tpl' eller liknande filer.",
"JSTrackingIntro4": "Om du inte vill använda JavaScript för att spåra besökare, %1$sgenerera en bild spårningslänk nedan%2$s.",
"JSTrackingIntro5": "Om du vill göra mer än att spåra antal sedda sidor, titta på %1$sPiwiks lista av dokumentation för Javascripts Spårning%2$s, där hittar du en lista med tillgängliga funktioner. Använd dessa funktioner för att spåra mål, skräddarsy variabler, e-handel, övergivna korgar med mera.",
"LogoNotWriteableInstruction": "Om du vill använda din egen logotyp istället för Piwiks logotyp, se till så att det finns skrivrättigheter till denna katalog: %1$s. Piwik behöver skrivrättighet för dina logotyper som lagras i filerna %2$s.",
@@ -54,7 +59,9 @@
"LogoUploadHelp": "Ladda upp en fil i %1$s format med en minsta höjd på %2$s pixlar.",
"MenuDiagnostic": "Diagnostik",
"MenuGeneralSettings": "Allmänna inställningar",
+ "MenuSystem": "System",
"MenuDevelopment": "Utveckling",
+ "MenuMeasurables": "Mätbara enheter",
"OptOutComplete": "Exkludering utförd; dina besök på denna webbplatsen kommer inte att spåras av webbanalys-verktyget.",
"OptOutCompleteBis": "Observera att om du rensar cookies, tar bort cookien för exkludering eller om du byter dator eller webbläsare måste du utföra exkluderingen igen.",
"OptOutDntFound": "Du spåras inte eftersom din webbläsare rapporterar att du inte vill det. Detta är en inställning i webbläsaren så du kan inte delta för än du avaktiverat 'Do Not Track'.",
@@ -69,6 +76,8 @@
"PluginSettingsIntro": "Här kan du ändra inställningarna för tredje parts plugin:",
"PluginSettingsValueNotAllowed": "Värdet för det här området \"%1$s\" i Plugin \"%2$s\" är inte tillåtet",
"PluginSettingsSaveFailed": "Misslyckades att spara plugin-inställningar",
+ "PluginSettingsSaveSuccess": "Plugininställningar uppdaterade",
+ "SettingsSaveSuccess": "Inställningar uppdaterade.",
"SendPluginUpdateCommunication": "Skicka e-post när pluginuppdateringar finns tillgängliga",
"SendPluginUpdateCommunicationHelp": "Ett e-postmeddelande kommer att skickas till Administratörerna när det finns en ny uppdatering för ett tillägg",
"StableReleases": "Om Piwik är en viktig del av dina affärer, rekommenderar vi dig att använda den senaste versionen. Om du använder den senaste beta versionen och hittar en bugg eller har ett förslag, var vänlig att gå in %1$shär%2$s.",
diff --git a/plugins/CoreAdminHome/lang/tr.json b/plugins/CoreAdminHome/lang/tr.json
index 72f318fd41..8555b0d166 100644
--- a/plugins/CoreAdminHome/lang/tr.json
+++ b/plugins/CoreAdminHome/lang/tr.json
@@ -6,23 +6,23 @@
"BrandingSettings": "Markalama ayarları",
"ReleaseChannel": "Dağıtım kanalı",
"ClickHereToOptIn": "İzin vermek için tıklayın.",
- "ClickHereToOptOut": "İzni iptal etmek için tıklayınız.",
- "CustomLogoFeedbackInfo": "Eğer Piwik logosunu değiştirdiyseniz, üst menüden %1$s bağlantısını da kaldırmak isteyebilirsiniz. Bunun için, %2$sManage Plugins%3$s sayfasından Geribildirim ( Feedback ) eklentisini iptal edebilirsiniz.",
+ "ClickHereToOptOut": "İzni iptal etmek için tıklayın.",
+ "CustomLogoFeedbackInfo": "Piwik logosunu değiştirdiyseniz, üst menüden %1$s bağlantısını da kaldırmak isteyebilirsiniz. Bunun için, %2$sUygulama Eki Yönetimi%3$s bölümünden Geribildirim ( Feedback ) uygulama ekini devre dışı bırakabilirsiniz.",
"CustomLogoHelpText": "E-posta raporlarında ve kullanıcı arayüzünde kullanılacak olan Piwik logosunu değiştirebilirsiniz.",
- "DevelopmentProcess": "%1$sdevelopment process%2$s sırasında binlerce otomasyon testleri Piwik'te beta testerleriniz hatasız kullanım politikası yürütebilir",
+ "DevelopmentProcess": "%1$sGeliştirme işlemi%2$s sırasında binlerce otomatik sınama yapılır. Bununla birlikte Piwik \"Hatasızlık ilkesi\" hedefine ulaşmak için Beta Testi yapan kullanıcılar önemli bir rol üstlenir.",
"EmailServerSettings": "E-Posta sunucusu ayarları",
- "ForBetaTestersOnly": "Yalnızca beta test edenler için",
- "ImageTracking": "Resimle İzleme",
- "ImageTrackingIntro1": "Ziyaretçi JavaScript'i devre dışı bıraktığında veya JavaScript kullanılamadığında, ziyaretçileri takip etmek için resim kullanabilirsiniz.",
- "ImageTrackingIntro2": "Aşağıdaki linke tıklayın ve oluşturulan kodu HTML sayfanıza yapıştırın. Bunu eğer geri javascript geri beslemek için kullanacaksanız etiketler %1$s olacaktır",
- "ImageTrackingLink": "Resimle İzleme Linki",
- "ImportingServerLogs": "Sunucu Loglarını İçe Aktar",
- "InvalidPluginsWarning": "Eklentiler %1$s ve %2$s birbiriyle uyumlu olmadığından yüklenemedi.",
- "InvalidPluginsYouCanUninstall": "Eklentileri %1$sEklenti Yönetimi%2$s sayfasından güncelleştirebilir veya kaldırabilirsiniz.",
- "JavaScriptTracking": "Javascript İzleme Kodu",
- "JSTracking_CampaignKwdParam": "Kampanya Anahtar Kelime Parametreleri",
- "JSTracking_CampaignNameParam": "Kampanya Parametresi",
- "JSTracking_CustomCampaignQueryParam": "Kampanya adı ve anahtar kelime için özel sorgu parametresi kullanın",
+ "ForBetaTestersOnly": "Yalnız beta testi yapan kullanıcılar için",
+ "ImageTracking": "Görsel İle İzleme",
+ "ImageTrackingIntro1": "JavaScript devre dışı bırakılmış ya da kullanılamıyor ise, ziyaretçiler görsel izleme bağlantısı ile izlenebilir.",
+ "ImageTrackingIntro2": "Aşağıdan bağlantıyı oluşturun oluşturulan HTML kodunu kopyalayıp sayfanıza yapıştırın. Bu bağlantıyı yalnız JavaScript kullanılamadığında kullanmak istiyorsanız%1$s kod imleri arasına alın.",
+ "ImageTrackingLink": "Görsel İle İzleme Bağlantısı",
+ "ImportingServerLogs": "Sunucu Günlükleri Alınıyor",
+ "InvalidPluginsWarning": "Şu uygulama ekleri %1$sile uyumlu olmadığından yüklenemedi: %2$s.",
+ "InvalidPluginsYouCanUninstall": "Bu uygulama eklerini %1$sUygulama Eki Yönetimi%2$s sayfasından güncelleyebilir ya da kaldırabilirsiniz.",
+ "JavaScriptTracking": "Javascript İle İzleme",
+ "JSTracking_CampaignKwdParam": "Kampanya Anahtar Sözcük Parametreleri",
+ "JSTracking_CampaignNameParam": "Kampanya Adı Parametresi",
+ "JSTracking_CustomCampaignQueryParam": "Kampanya adı ve anahtar sözcük için özel sorgu parametresi adları kullanılsın",
"JSTracking_CustomCampaignQueryParamDesc": "Not: %1$sPiwik otomatik olarak Google Analytics parametreleri algılar. %2$s",
"JSTracking_DisableCookies": "Tüm takip cookilerini devredışı bırak",
"JSTracking_EnableDoNotTrack": "İstemci tarafında İZLEMEMEYİ etkinleştirin",
diff --git a/plugins/CoreAdminHome/lang/zh-cn.json b/plugins/CoreAdminHome/lang/zh-cn.json
index 6f0876ece1..e578629c40 100644
--- a/plugins/CoreAdminHome/lang/zh-cn.json
+++ b/plugins/CoreAdminHome/lang/zh-cn.json
@@ -4,99 +4,99 @@
"Administration": "管理",
"ArchivingSettings": "归档设置",
"BrandingSettings": "图标设置",
- "ReleaseChannel": "释放通道",
+ "ReleaseChannel": "发布通道",
"ClickHereToOptIn": "点这里主动加入。",
"ClickHereToOptOut": "点这里主动退出。",
- "CustomLogoFeedbackInfo": "如果您定制 Piwik 图标,可能想在顶部菜单隐藏 %1$s 链接,在 %2$s管理插件%3$s 页面禁用 Feedback 插件。",
- "CustomLogoHelpText": "您可以定制 Piwik 图标,显示在用户界面和报表邮件上。",
- "DevelopmentProcess": "虽然在%1$s开发过程%2$s中已进行过成千上万次的自动测试,Beta 版本测试仍然是实现 Piwik \"无错理念\"的很重要的一部分。",
+ "CustomLogoFeedbackInfo": "如果您定制了 Piwik 图标,那您可能也想在顶部菜单隐藏 %1$s 链接。在 %2$s管理插件%3$s 页面禁用反馈(Feedback)插件就可以了。",
+ "CustomLogoHelpText": "您可以定制 Piwik 图标,它会显示在用户界面和报表邮件中。",
+ "DevelopmentProcess": "虽然我们的%1$s开发过程%2$s已包含上千个自动测试,但 Beta 测试者依然是 Piwik 达成“无 Bug 策略”的关键角色。",
"EmailServerSettings": "邮件服务器设置",
- "ForBetaTestersOnly": "仅供测试",
- "ImageTracking": "图片跟踪",
- "ImageTrackingIntro1": "当访客禁用 JavaScript 或者无法使用 JavaScript 时,您也可以使用图片跟踪链接来统计访客。",
- "ImageTrackingIntro2": "在下面的链接生成,在页面中复制并粘贴生成的 HTML。如果这是作为 JavaScript 的跟踪反馈,可以放在 %1$s 标签中。",
- "ImageTrackingIntro3": "图片跟踪链接可用的详细的选项列表,见 %1$s跟踪 API 文档%2$s。",
- "ImageTrackingLink": "图片跟踪链接",
+ "ForBetaTestersOnly": "仅限 Beta 测试者",
+ "ImageTracking": "图片追踪",
+ "ImageTrackingIntro1": "当访客禁用 JavaScript 或者无法使用 JavaScript 时,您可以使用图片追踪链接来统计访客。",
+ "ImageTrackingIntro2": "在下方产生链接,并将生成的 HTML 粘贴到网页中。如果要把它用作 JavaScript 的追踪功能失败时的备用方式,您可以把它放在 %1$s 标签中。",
+ "ImageTrackingIntro3": "查看 %1$s追踪 API 说明文档%2$s阅读可用于图片追踪链接的全部参数列表。",
+ "ImageTrackingLink": "图片追踪链接",
"ImportingServerLogs": "导入服务器日志",
- "ImportingServerLogsDesc": "除了通过浏览器(用 JavaScript 或图片链接)跟踪访客,另外一种方法是不断导入服务器日志。了解 %1$s服务器日志分析%2$s详情。",
- "InvalidPluginsWarning": "下面的插件不兼容 %1$s,无法加载: %2$s。",
- "InvalidPluginsYouCanUninstall": "您可以在%1$s管理插件%2$s页面更新或者卸载这些插件。",
- "JavaScriptTracking": "JavaScript 跟踪",
- "JSTracking_CampaignKwdParam": "广告关键词参数",
- "JSTracking_CampaignNameParam": "广告名称参数",
- "JSTracking_CodeNoteBeforeClosingHead": "请保证此代码在您的每一个页面上。我们建议您马上粘贴这些代码在这些标签之前:%1$s。",
- "JSTracking_CustomCampaignQueryParam": "广告名称和关键词使用自定义搜索参数名",
- "JSTracking_CrossDomain": "默认情况下,访问者ID是存储在浏览器中的第一方cookie用来标识唯一使用的,并且尽可以被同域名的页面访问。允许跨域链接将允许跨域的情况也可以跟踪到同一访问者的行为和PV情况。当用户点击了你网站的任何一个链接,都会给访问者ID添加一个URL参数pk_vid。",
- "JSTracking_CustomCampaignQueryParamDesc": "提示: %1$sPiwik 会自动检测 Google 分析参数。%2$s",
- "JSTracking_DisableCookies": "禁用所有跟踪cookie",
- "JSTracking_DisableCookiesDesc": "禁用所有第一次访问的Cookie。本网站现有的Piwik cookes将会在下次页面访问时全部删除。",
- "JSTracking_EnableCrossDomainLinking": "允许跨域链接",
- "JSTracking_EnableDoNotTrack": "启用访客 DoNotTrack 检测",
- "JSTracking_EnableDoNotTrack_AlreadyEnabled": "提示: 服务器端的 DoNotTrack 支持已启用,这个选项无效。",
- "JSTracking_EnableDoNotTrackDesc": "如果访客不愿意被统计,将不会发送统计请求。",
- "JSTracking_GroupPageTitlesByDomain": "跟踪时在页面标题前加上网站域名",
- "JSTracking_GroupPageTitlesByDomainDesc1": "如果访问博客的 '简介' 页面,%1$s 将记录为 '博客 \/ 简介',这样的话就很容易查看子域名的流量。",
- "JSTracking_MergeAliases": "在\"离站链接\"报表中, 不要统计别名网站",
- "JSTracking_MergeAliasesDesc": "点击网址别名(例如 %s)的链接,不会被统计为\"离站链接\"。",
- "JSTracking_MergeSubdomains": "在所有子域名下跟踪访客",
- "JSTracking_MergeSubdomainsDesc": "如果一个访客访问 %1$s 和 %2$s, 统计为同一访客。",
- "JSTracking_PageCustomVars": "每次查看页面都跟踪自定义变量",
- "JSTracking_PageCustomVarsDesc": "例如, 带变量名 \"Category\" 及值 \"White Papers\".",
- "JSTracking_TrackNoScript": "禁止JavaScript跟踪用户",
- "JSTracking_VisitorCustomVars": "跟踪访客自定义变量",
- "JSTracking_VisitorCustomVarsDesc": "例如, 变量名 \"Type\" 及内容 \"Customer\".",
- "JSTracking_EndNote": "提示:你可以在管理模块的%1$s跟踪代码%2$s里生成自定义跟踪代码。",
- "JSTrackingIntro1": "您可以用多种方式统计网站访问,推荐使用 JavaScript。要使用这种方式,需要在网站的每个页面添加一些 JavaScript 代码。在这里可以生成代码。",
- "JSTrackingIntro2": "有了网站的 JavaScript 跟踪代码,您就可以复制并粘贴到所有需要 Piwik 统计的页面上。",
- "JSTrackingIntro3b": "多数网站,例如博客、内容管理网站等,您可以使用已有的插件。(见 %1$s用于集成 Piwik 的插件列表%2$s) 如果没有插件,您可以修改网站模板,把这段代码加入到'header.php', 'header.tpl' 或者类似的模板文件。",
- "JSTrackingIntro4": "如果您不想用 JavaScript 来跟踪访客,%1$s在下面生成图片跟踪链接%2$s。",
- "JSTrackingIntro5": "如果除了统计访问次数,请在 %1$sPiwik Javascript 跟踪文档%2$s 中查看更多的功能列表。通过这些功能,您可以跟踪目标、自定义变量、订单、丢弃的购物车等。",
- "LogoNotWriteableInstruction": "要使用您的自定义logo替代默认Piwik logo,您需要此目录的权限:%1$s。Piwik需要%2$s的写入权限以便将您的logo存入。",
- "FileUploadDisabled": "您的php配置关闭了PHP文件上传,如果你要上传你的自定义Logo,你需要设置 %s 在 php.ini文件,然后重启您的WEB服务器。",
- "LogoUploadFailed": "上传的文件无法处理。请检查文件是否具有有效的格式。",
+ "ImportingServerLogsDesc": "除了通过浏览器(用 JavaScript 或图片链接)追踪访客,另外一种方法是持续导入服务器日志。更多详情请参见 %1$s服务器日志分析%2$s。",
+ "InvalidPluginsWarning": "以下插件不兼容 %1$s,无法加载:%2$s。",
+ "InvalidPluginsYouCanUninstall": "您可以在%1$s插件管理%2$s页面更新或者卸载这些插件。",
+ "JavaScriptTracking": "JavaScript 追踪",
+ "JSTracking_CampaignKwdParam": "广告活动关键词参数",
+ "JSTracking_CampaignNameParam": "广告活动名称参数",
+ "JSTracking_CodeNoteBeforeClosingHead": "请确保此代码在您网站里的每一个页面。我们建议您马上把它粘贴在%1$s标签之前。",
+ "JSTracking_CustomCampaignQueryParam": "广告活动名称和关键词使用自定义搜索参数",
+ "JSTracking_CrossDomain": "用来辨识独立访客的访问者 ID 默认被储存在浏览器的第一方 \u0004Cookies 中,并且只能被相同域名的网页访问。启用跨域链接将能辨识出某位用户在不同域名下的活动和页面访问是同一位用户所为。每当用户点击任何一个您网站的别名地址,都会在网址后方添加参数 pk_vid 来传递访问者 ID。",
+ "JSTracking_CustomCampaignQueryParamDesc": "提示:%1$sPiwik 会自动检测谷歌分析(Google Analytics)的参数。%2$s",
+ "JSTracking_DisableCookies": "禁用所有追踪 Cookies",
+ "JSTracking_DisableCookiesDesc": "禁用所有第一方 Cookies。这个网站现有的 Piwik cookies 将会在下次页面访问时全部删除。",
+ "JSTracking_EnableCrossDomainLinking": "启用跨域链接",
+ "JSTracking_EnableDoNotTrack": "启用客户端禁止追踪(DoNotTrack)检测",
+ "JSTracking_EnableDoNotTrack_AlreadyEnabled": "注意:服务器端禁止追踪(DoNotTrack)支持已启用,所以这个选项不会有效果。",
+ "JSTracking_EnableDoNotTrackDesc": "如果访客不愿意被追踪,将不会发送追踪记录。",
+ "JSTracking_GroupPageTitlesByDomain": "追踪时在页面标题前加上网站域名",
+ "JSTracking_GroupPageTitlesByDomainDesc1": "如果有人访问博客的“关于”页面,%1$s 将记录为“博客 \/ 关于”,这是获得子域名流量概览的最简易方式。",
+ "JSTracking_MergeAliases": "在“离站链接”报表中,隐藏已知的网站别名网页点击:",
+ "JSTracking_MergeAliasesDesc": "所以如果点击网站别名的链接(例如 %s),不会被统计为“离站链接”。",
+ "JSTracking_MergeSubdomains": "跨越所有子域名追踪访客:",
+ "JSTracking_MergeSubdomainsDesc": "如果一个访客访问 %1$s 和 %2$s,将被算作同一访客。",
+ "JSTracking_PageCustomVars": "为每个页面访问追踪自定义变量",
+ "JSTracking_PageCustomVarsDesc": "例如,使用变量名“分类”,值“白皮书”。",
+ "JSTracking_TrackNoScript": "已停用 JavaScript 追踪用户功能",
+ "JSTracking_VisitorCustomVars": "为此访客追踪自定义变量",
+ "JSTracking_VisitorCustomVarsDesc": "例如,使用变量名“类型”,值“顾客”。",
+ "JSTracking_EndNote": "提示:您可以在管理模块的%1$s跟踪代码%2$s页面中生成自定义的追踪代码。",
+ "JSTrackingIntro1": "您可以使用多种不同方式统计网站访问。推荐使用 JavaScript。要使用这种方式,需要在网站的每个页面添加一些 JavaScript 代码。在这里可以生成这些代码。",
+ "JSTrackingIntro2": "当有了网站的 JavaScript 追踪代码,您就可以复制并粘贴到所有需要 Piwik 追踪的页面上。",
+ "JSTrackingIntro3b": "多数网站,例如博客、内容管理网站等,您可以使用预制的插件来帮你完成技术性的工作。(参见%1$s用于集成 Piwik 的插件列表%2$s。)如果没有插件,您可以修改网站模板,把这段代码加入到 &lt;\/head&gt; tag标签里,该标签一般定义在“header.php”、“header.tpl”或者类似的模板文件中。",
+ "JSTrackingIntro4": "如果您不想用 JavaScript 来追踪访客,%1$s在下面生成图片追踪链接%2$s。",
+ "JSTrackingIntro5": "如果您不只是想追踪页面访问,请查看 %1$sPiwik Javascript 追踪文档%2$s 中的更多功能列表。通过这些功能,您可以追踪目标、自定义变量、电子商务订单、被放弃的购物车等等。",
+ "LogoNotWriteableInstruction": "要使用您的自定义图标替代 Piwik 默认的,请给予此文件夹写入权限:%1$s。Piwik 需要%2$s的写入权限以便将您的图标存储下来。",
+ "FileUploadDisabled": "您的 PHP 配置中关闭了文件上传功能。如果要上传您的自定义图标,请在 php.ini 文件中设置 %s ,并重启您的 WEB 服务器。",
+ "LogoUploadFailed": "无法处理上传的文件。请检查该文件是否为有效格式。",
"LogoUpload": "选择一个图标上传",
- "FaviconUpload": "选择上传图标",
- "LogoUploadHelp": "请上传 %1$s 格式的文件,最小高度 %2$s 点。",
- "MenuDiagnostic": "检测",
+ "FaviconUpload": "选择图示(Favicon)上传",
+ "LogoUploadHelp": "请上传 %1$s 格式的文件,高度至少 %2$s 像素。",
+ "MenuDiagnostic": "诊断",
"MenuGeneralSettings": "一般设置",
"MenuSystem": "系统",
- "MenuDevelopment": "展开",
+ "MenuDevelopment": "开发",
"MenuMeasurables": "衡量标准",
- "OptOutComplete": "主动退出 成功; 网站分析工具将不会统计您对这个网站的访问。",
- "OptOutCompleteBis": "如果您清空了cookies、删除了主动退出cookie、或者更换了电脑或者浏览器,您需要重新执行主动退出的操作。",
- "OptOutDntFound": "您的访问没有被记录,因为您的浏览器设置了“请勿跟踪”。这是您的浏览器的设置,您可以关闭“请勿跟踪”设置,以便于正确记录访问数量。",
- "OptOutExplanation": "Piwik 致力于 Internet 隐私保护。为了给访客提供主动退出 Piwik 网页分析的选项, 您可以在一个网页上添加下面的HTML代码, 例如在隐私保护页面。",
- "OptOutExplanationBis": "本代码将显示一个包含链接的 Iframe,供访客在浏览器中设置主动退出的 cookie 来退出 Piwik 的统计。%1$s 点这里%2$s 查看将在 iFrame 里显示的内容。",
- "OptOutForYourVisitors": "访客主动退出 Piwik",
+ "OptOutComplete": "已选择退出追踪;您在此网站的访问将不会被记录、追踪。",
+ "OptOutCompleteBis": "注意:如果您清空了浏览器的 Cookies、删除了退出追踪的 Cookie 或是您更换了电脑或浏览器,您需要重新执行选择退出追踪的操作。",
+ "OptOutDntFound": "您的访问没有被记录,因为您的浏览器禁止追踪(Do Not Track)。这是您的浏览器的设置,所以除非您关闭禁止追踪,否则无法记录、追踪您的访问。",
+ "OptOutExplanation": "Piwik 致力于互联网隐私保护。要让您的访客可以选择退出 Piwik 网页分析追踪,您可以在类似隐私保护的某个网页上添加以下 HTML 代码。",
+ "OptOutExplanationBis": "此代码将显示为一个包含链接的页框(Iframe),里面的链接供访客在浏览器中设置 Cookie 以选择退出追踪。%1$s点击这里%2$s查看将在页框里显示的内容。",
+ "OptOutForYourVisitors": "访客选择退出 Piwik 追踪",
"PiwikIsInstalledAt": "Piwik 安装在",
"PersonalPluginSettings": "个人插件设置",
- "PluginSettingChangeNotAllowed": "不允许更改插件"%1$s"中配置"%2$s"的值",
- "PluginSettingReadNotAllowed": "不允许读取插件"%1$s"中配置"%2$s"的值",
+ "PluginSettingChangeNotAllowed": "您无权修改插件“%1$s”中的“%2$s”设置",
+ "PluginSettingReadNotAllowed": "您无权查看插件“%1$s”中的“%2$s”设置",
"PluginSettings": "插件设置",
- "PluginSettingsIntro": "这里,你可以更改下列第三方插件的配置:",
- "PluginSettingsValueNotAllowed": "插件\"%1$s\"中的域\"%2$s\"的值是不被允许的",
+ "PluginSettingsIntro": "您可以在这里修改下列第三方插件的配置:",
+ "PluginSettingsValueNotAllowed": "插件“%1$s”中字段“%2$s”的值是不被允许的",
"PluginSettingsSaveFailed": "保存插件设置失败",
- "PluginSettingsSaveSuccess": "插件设置更新。",
- "SettingsSaveSuccess": "设置更新。",
- "SendPluginUpdateCommunication": "有新的插件更新时给我发送邮件",
- "SendPluginUpdateCommunicationHelp": "插件有新版本时将会给超级管理员发送邮件",
- "StableReleases": "如果Piwik对您的业务很重要,我们建议您使用最新的稳定版。如果使用最新测试版,发现了问题或有建议,请%1$s看这里%2$s。",
- "LtsReleases": "LTS(长期支持)版本只接收安全性和bug修复。",
+ "PluginSettingsSaveSuccess": "插件设置已更新。",
+ "SettingsSaveSuccess": "设置已更新。",
+ "SendPluginUpdateCommunication": "当插件有更新时发送邮件",
+ "SendPluginUpdateCommunicationHelp": "当插件有新版本可用时,将会给超级用户发送邮件。",
+ "StableReleases": "如果 Piwik 对您的业务非常关键,我们建议您使用最新稳定版本。如果您使用最新测试版并发现了问题,或是有建议,请%1$s参见这里的说明%2$s。",
+ "LtsReleases": "LTS(长期支持)版本只接收安全性和缺陷修复更新。",
"SystemPluginSettings": "系统插件设置",
- "TrackAGoal": "跟踪目标",
- "TrackingCode": "跟踪代码",
- "TrustedHostConfirm": "您确信要修改 Piwik 主机名?",
- "TrustedHostSettings": "Piwik 主机名",
+ "TrackAGoal": "追踪目标",
+ "TrackingCode": "追踪代码",
+ "TrustedHostConfirm": "您确定要变更 Piwik 信任的域名?",
+ "TrustedHostSettings": "受 Piwik 信任的域名",
"UpdateSettings": "更新设置",
"UseCustomLogo": "使用自定义图标",
- "ValidPiwikHostname": "有效的 Piwik 主机名",
- "WithOptionalRevenue": "包含可选收入",
- "YouAreOptedIn": "现在是主动加入。",
- "YouAreOptedOut": "现在是主动退出。",
- "YouMayOptOut": "您可以选择不给您的电脑设定唯一的网站分析 cookie 标识号,以避免被这个网站搜集和分析访问数据。",
- "YouMayOptOutBis": "点击下面链接可设置主动退出的 cookie。",
- "OptingYouOut": "选择加入你,请稍候...",
- "ProtocolNotDetectedCorrectly": "您正在浏览Piwik通过安全SSL连接 (使用HTTPS),但Piwik只能检测到服务器上的非安全连接。",
- "ProtocolNotDetectedCorrectlySolution": "为了确保Piwik安全要求,可以通过HTTPS来访问您的内容,你可以编辑你的%1$s 文件,无论是配置代理服务器设置,或者可以添加如下代码%2$s在%3$s下。 %4$s详细了解%5$s"
+ "ValidPiwikHostname": "有效的 Piwik 域名",
+ "WithOptionalRevenue": "选填的收入",
+ "YouAreOptedIn": "您目前选择接受追踪。",
+ "YouAreOptedOut": "您目前选择退出追踪。",
+ "YouMayOptOut": "您可以选择不让您的电脑分配唯一的网站分析 Cookie 标识编码,以避免被此网站搜集和分析访问数据。",
+ "YouMayOptOutBis": "想要如此的话,请点击下方以设置一个选择退出追踪的 Cookie 记录。",
+ "OptingYouOut": "正在帮您设置选择退出追踪,请稍候……",
+ "ProtocolNotDetectedCorrectly": "您目前正在以安全 SSL 连接(HTTPS)查看 Piwik,但 Piwik 服务器上只检测到非安全连接。",
+ "ProtocolNotDetectedCorrectlySolution": "为了确保 Piwik 通过 HTTPS 来安全地请求和响应您的内容,您可以编辑%1$s 文件,要么配置代理设置,要么在%3$s下添加代码%2$s。 %4$s了解详情%5$s"
}
} \ No newline at end of file
diff --git a/plugins/CoreAdminHome/templates/home.twig b/plugins/CoreAdminHome/templates/home.twig
index e34b8ce349..232efd7785 100644
--- a/plugins/CoreAdminHome/templates/home.twig
+++ b/plugins/CoreAdminHome/templates/home.twig
@@ -36,10 +36,10 @@
{{ feedbackHelp|raw }}
{% endif %}
- {% if hasPremiumFeatures and isMarketplaceEnabled %}
+ {% if hasPremiumFeatures and isMarketplaceEnabled and isInternetEnabled %}
<div piwik-widget-loader='{"module":"Marketplace","action":"getPremiumFeatures"}'></div>
{% endif %}
- {% if hasNewPlugins and isMarketplaceEnabled %}
+ {% if hasNewPlugins and isMarketplaceEnabled and isInternetEnabled %}
<div piwik-widget-loader='{"module":"Marketplace","action":"getNewPlugins", "isAdminPage": "1"}'></div>
{% endif %}
@@ -63,7 +63,7 @@
<div piwik-widget-loader='{"module":"CoreHome","action":"getDonateForm","widget": "0"}'></div>
</div>
{% endif %}
- {% if hasPiwikBlog %}
+ {% if hasPiwikBlog and isInternetEnabled %}
<div class="col s12 {% if hasDonateForm %}m6{% endif %}">
<div piwik-widget-loader='{"module":"RssWidget","action":"rssPiwik"}'></div>
</div>
diff --git a/plugins/CoreHome/Controller.php b/plugins/CoreHome/Controller.php
index 60f0aa22f9..ebf3b61ead 100644
--- a/plugins/CoreHome/Controller.php
+++ b/plugins/CoreHome/Controller.php
@@ -11,7 +11,6 @@ namespace Piwik\Plugins\CoreHome;
use Exception;
use Piwik\API\Request;
use Piwik\Common;
-use Piwik\Container\StaticContainer;
use Piwik\Date;
use Piwik\FrontController;
use Piwik\Notification\Manager as NotificationManager;
@@ -264,9 +263,6 @@ class Controller extends \Piwik\Plugin\Controller
// perform check (but only once every 10s)
UpdateCheck::check($force = false, UpdateCheck::UI_CLICK_CHECK_INTERVAL);
- $marketplace = StaticContainer::get('Piwik\Plugins\Marketplace\Api\Client');
- $marketplace->clearAllCacheEntries();
-
$view = new View('@CoreHome/checkForUpdates');
$this->setGeneralVariablesView($view);
return $view->render();
diff --git a/plugins/CoreHome/CoreHome.php b/plugins/CoreHome/CoreHome.php
index fd3e729f74..be56c144f8 100644
--- a/plugins/CoreHome/CoreHome.php
+++ b/plugins/CoreHome/CoreHome.php
@@ -30,7 +30,6 @@ class CoreHome extends \Piwik\Plugin
'AssetManager.getJavaScriptFiles' => 'getJsFiles',
'AssetManager.filterMergedJavaScripts' => 'filterMergedJavaScripts',
'Translate.getClientSideTranslationKeys' => 'getClientSideTranslationKeys',
- 'Live.getAllVisitorDetails' => 'extendVisitorDetails',
);
}
@@ -39,25 +38,6 @@ class CoreHome extends \Piwik\Plugin
$mergedContent = preg_replace('/(sourceMappingURL=(.*?).map)/', '', $mergedContent);
}
- public function extendVisitorDetails(&$visitor, $details)
- {
- $instance = new Visitor($details);
-
- $visitor['userId'] = $instance->getUserId();
- $visitor['visitorType'] = $instance->getVisitorReturning();
- $visitor['visitorTypeIcon'] = $instance->getVisitorReturningIcon();
- $visitor['visitConverted'] = $instance->isVisitorGoalConverted();
- $visitor['visitConvertedIcon'] = $instance->getVisitorGoalConvertedIcon();
- $visitor['visitCount'] = $instance->getVisitCount();
- $visitor['firstActionTimestamp'] = $instance->getTimestampFirstAction();
- $visitor['visitEcommerceStatus'] = $instance->getVisitEcommerceStatus();
- $visitor['visitEcommerceStatusIcon'] = $instance->getVisitEcommerceStatusIcon();
- $visitor['daysSinceFirstVisit'] = $instance->getDaysSinceFirstVisit();
- $visitor['daysSinceLastEcommerceOrder'] = $instance->getDaysSinceLastEcommerceOrder();
- $visitor['visitDuration'] = $instance->getVisitLength();
- $visitor['visitDurationPretty'] = $instance->getVisitLengthPretty();
- }
-
public function getStylesheetFiles(&$stylesheets)
{
$stylesheets[] = "libs/jquery/themes/base/jquery-ui.min.css";
diff --git a/plugins/CoreHome/Tracker/LogTable/Action.php b/plugins/CoreHome/Tracker/LogTable/Action.php
index fdb69e5ec6..66f1d1fd81 100644
--- a/plugins/CoreHome/Tracker/LogTable/Action.php
+++ b/plugins/CoreHome/Tracker/LogTable/Action.php
@@ -17,6 +17,11 @@ class Action extends LogTable
return 'log_action';
}
+ public function getIdColumn()
+ {
+ return 'idaction';
+ }
+
public function getColumnToJoinOnIdAction()
{
return 'idaction';
diff --git a/plugins/CoreHome/Tracker/LogTable/Conversion.php b/plugins/CoreHome/Tracker/LogTable/Conversion.php
index e920864088..b579b32d81 100644
--- a/plugins/CoreHome/Tracker/LogTable/Conversion.php
+++ b/plugins/CoreHome/Tracker/LogTable/Conversion.php
@@ -17,6 +17,11 @@ class Conversion extends LogTable
return 'log_conversion';
}
+ public function getIdColumn()
+ {
+ return 'idvisit';
+ }
+
public function getColumnToJoinOnIdVisit()
{
return 'idvisit';
diff --git a/plugins/CoreHome/Tracker/LogTable/ConversionItem.php b/plugins/CoreHome/Tracker/LogTable/ConversionItem.php
index 566841b4fa..cf24614458 100644
--- a/plugins/CoreHome/Tracker/LogTable/ConversionItem.php
+++ b/plugins/CoreHome/Tracker/LogTable/ConversionItem.php
@@ -17,6 +17,11 @@ class ConversionItem extends LogTable
return 'log_conversion_item';
}
+ public function getIdColumn()
+ {
+ return 'idvisit';
+ }
+
public function getColumnToJoinOnIdVisit()
{
return 'idvisit';
diff --git a/plugins/CoreHome/Tracker/LogTable/LinkVisitAction.php b/plugins/CoreHome/Tracker/LogTable/LinkVisitAction.php
index cb102d407c..8dabf66a66 100644
--- a/plugins/CoreHome/Tracker/LogTable/LinkVisitAction.php
+++ b/plugins/CoreHome/Tracker/LogTable/LinkVisitAction.php
@@ -17,6 +17,11 @@ class LinkVisitAction extends LogTable
return 'log_link_visit_action';
}
+ public function getIdColumn()
+ {
+ return 'idlink_va';
+ }
+
public function getColumnToJoinOnIdAction()
{
return 'idaction_url';
diff --git a/plugins/CoreHome/Tracker/LogTable/Visit.php b/plugins/CoreHome/Tracker/LogTable/Visit.php
index f403c37697..a72fb24d11 100644
--- a/plugins/CoreHome/Tracker/LogTable/Visit.php
+++ b/plugins/CoreHome/Tracker/LogTable/Visit.php
@@ -17,6 +17,11 @@ class Visit extends LogTable
return 'log_visit';
}
+ public function getIdColumn()
+ {
+ return 'idvisit';
+ }
+
public function getColumnToJoinOnIdVisit()
{
return 'idvisit';
diff --git a/plugins/CoreHome/Visitor.php b/plugins/CoreHome/Visitor.php
deleted file mode 100644
index 962eabce31..0000000000
--- a/plugins/CoreHome/Visitor.php
+++ /dev/null
@@ -1,114 +0,0 @@
-<?php
-/**
- * Piwik - free/libre analytics platform
- *
- * @link http://piwik.org
- * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- *
- */
-namespace Piwik\Plugins\CoreHome;
-
-use Piwik\Metrics\Formatter;
-use Piwik\Plugins\CoreHome\Columns\VisitGoalBuyer;
-
-class Visitor
-{
- private $details = array();
- private $metricsFormatter = null;
-
- public function __construct($details)
- {
- $this->details = $details;
- $this->metricsFormatter = new Formatter();
- }
-
- function getTimestampFirstAction()
- {
- return strtotime($this->details['visit_first_action_time']);
- }
-
- function getVisitEcommerceStatusIcon()
- {
- $status = $this->getVisitEcommerceStatus();
-
- if (in_array($status, array('ordered', 'orderedThenAbandonedCart'))) {
- return "plugins/Morpheus/images/ecommerceOrder.png";
- } elseif ($status == 'abandonedCart') {
- return "plugins/Morpheus/images/ecommerceAbandonedCart.png";
- }
- // Note: it is important that there is no icon when there was no ecommerce conversion
- return null;
- }
-
- function getVisitEcommerceStatus()
- {
- return VisitGoalBuyer::getVisitEcommerceStatusFromId($this->details['visit_goal_buyer']);
- }
-
- function isVisitorGoalConverted()
- {
- return $this->details['visit_goal_converted'];
- }
-
- function getVisitorGoalConvertedIcon()
- {
- return $this->isVisitorGoalConverted()
- ? "plugins/Morpheus/images/goal.png"
- : null;
- }
-
- function getDaysSinceFirstVisit()
- {
- return $this->details['visitor_days_since_first'];
- }
-
- function getDaysSinceLastEcommerceOrder()
- {
- return $this->details['visitor_days_since_order'];
- }
-
- function getVisitorReturning()
- {
- $type = $this->details['visitor_returning'];
- return $type == 2
- ? 'returningCustomer'
- : ($type == 1
- ? 'returning'
- : 'new');
- }
-
- function getVisitorReturningIcon()
- {
- $type = $this->getVisitorReturning();
- if ($type == 'returning'
- || $type == 'returningCustomer'
- ) {
- return "plugins/Live/images/returningVisitor.png";
- }
- return null;
- }
-
- function getVisitCount()
- {
- return $this->details['visitor_count_visits'];
- }
-
- function getVisitLength()
- {
- return $this->details['visit_total_time'];
- }
-
- function getVisitLengthPretty()
- {
- return $this->metricsFormatter->getPrettyTimeFromSeconds($this->details['visit_total_time'], true);
- }
-
- function getUserId()
- {
- if (isset($this->details['user_id'])
- && strlen($this->details['user_id']) > 0) {
- return $this->details['user_id'];
- }
- return null;
- }
-} \ No newline at end of file
diff --git a/plugins/CoreHome/VisitorDetails.php b/plugins/CoreHome/VisitorDetails.php
new file mode 100644
index 0000000000..88ae63a09c
--- /dev/null
+++ b/plugins/CoreHome/VisitorDetails.php
@@ -0,0 +1,119 @@
+<?php
+/**
+ * Piwik - free/libre analytics platform
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+namespace Piwik\Plugins\CoreHome;
+
+use Piwik\Metrics\Formatter;
+use Piwik\Plugins\CoreHome\Columns\VisitGoalBuyer;
+use Piwik\Plugins\Live\VisitorDetailsAbstract;
+
+class VisitorDetails extends VisitorDetailsAbstract
+{
+ public function extendVisitorDetails(&$visitor)
+ {
+ $visitor['userId'] = $this->getUserId();
+ $visitor['visitorType'] = $this->getVisitorReturning();
+ $visitor['visitorTypeIcon'] = $this->getVisitorReturningIcon();
+ $visitor['visitConverted'] = $this->isVisitorGoalConverted();
+ $visitor['visitConvertedIcon'] = $this->getVisitorGoalConvertedIcon();
+ $visitor['visitCount'] = $this->getVisitCount();
+ $visitor['visitEcommerceStatus'] = $this->getVisitEcommerceStatus();
+ $visitor['visitEcommerceStatusIcon'] = $this->getVisitEcommerceStatusIcon();
+ $visitor['daysSinceFirstVisit'] = $this->getDaysSinceFirstVisit();
+ $visitor['daysSinceLastEcommerceOrder'] = $this->getDaysSinceLastEcommerceOrder();
+ $visitor['visitDuration'] = $this->getVisitLength();
+ $visitor['visitDurationPretty'] = $this->getVisitLengthPretty();
+ }
+
+ protected function getVisitEcommerceStatusIcon()
+ {
+ $status = $this->getVisitEcommerceStatus();
+
+ if (in_array($status, array('ordered', 'orderedThenAbandonedCart'))) {
+ return "plugins/Morpheus/images/ecommerceOrder.png";
+ } elseif ($status == 'abandonedCart') {
+ return "plugins/Morpheus/images/ecommerceAbandonedCart.png";
+ }
+ // Note: it is important that there is no icon when there was no ecommerce conversion
+ return null;
+ }
+
+ protected function getVisitEcommerceStatus()
+ {
+ return VisitGoalBuyer::getVisitEcommerceStatusFromId($this->details['visit_goal_buyer']);
+ }
+
+ protected function isVisitorGoalConverted()
+ {
+ return $this->details['visit_goal_converted'];
+ }
+
+ protected function getVisitorGoalConvertedIcon()
+ {
+ return $this->isVisitorGoalConverted()
+ ? "plugins/Morpheus/images/goal.png"
+ : null;
+ }
+
+ protected function getDaysSinceFirstVisit()
+ {
+ return $this->details['visitor_days_since_first'];
+ }
+
+ protected function getDaysSinceLastEcommerceOrder()
+ {
+ return $this->details['visitor_days_since_order'];
+ }
+
+ protected function getVisitorReturning()
+ {
+ $type = $this->details['visitor_returning'];
+ return $type == 2
+ ? 'returningCustomer'
+ : ($type == 1
+ ? 'returning'
+ : 'new');
+ }
+
+ protected function getVisitorReturningIcon()
+ {
+ $type = $this->getVisitorReturning();
+ if ($type == 'returning'
+ || $type == 'returningCustomer'
+ ) {
+ return "plugins/Live/images/returningVisitor.png";
+ }
+ return null;
+ }
+
+ protected function getVisitCount()
+ {
+ return $this->details['visitor_count_visits'];
+ }
+
+ protected function getVisitLength()
+ {
+ return $this->details['visit_total_time'];
+ }
+
+ protected function getVisitLengthPretty()
+ {
+ $formatter = new Formatter();
+ return $formatter->getPrettyTimeFromSeconds($this->details['visit_total_time'], true);
+ }
+
+ protected function getUserId()
+ {
+ if (isset($this->details['user_id'])
+ && strlen($this->details['user_id']) > 0
+ ) {
+ return $this->details['user_id'];
+ }
+ return null;
+ }
+} \ No newline at end of file
diff --git a/plugins/CoreHome/angularjs/common/directives/field-condition.js b/plugins/CoreHome/angularjs/common/directives/field-condition.js
index 5d936c4480..d3fd46d2a2 100644
--- a/plugins/CoreHome/angularjs/common/directives/field-condition.js
+++ b/plugins/CoreHome/angularjs/common/directives/field-condition.js
@@ -59,7 +59,7 @@
scope.allValues = {};
angular.forEach(fieldNames, function (name) {
var actualField = $('.form-group [name=' + name + ']').first();
- if (actualField.size()) {
+ if (actualField.length) {
scope.allValues[name] = getValueFromElement(actualField);
actualField.on('change', function () {
scope.allValues[name] = getValueFromElement($(this));
diff --git a/plugins/CoreHome/angularjs/common/services/reporting-pages-model.js b/plugins/CoreHome/angularjs/common/services/reporting-pages-model.js
index 1f0bbd91d7..80f5d08cb6 100644
--- a/plugins/CoreHome/angularjs/common/services/reporting-pages-model.js
+++ b/plugins/CoreHome/angularjs/common/services/reporting-pages-model.js
@@ -16,18 +16,36 @@
var model = {
pages : [],
findPage: findPage,
+ findPageInCategory: findPageInCategory,
reloadAllPages : reloadAllPages,
getAllPages : getAllPages
};
return model;
+ function findPageInCategory(categoryId) {
+ var found = null;
+
+ angular.forEach(model.pages, function (page) {
+ // happens when user switches between sites, in this case check if the same category exists and if so,
+ // select first entry from that category
+ if (!found && page &&
+ page.category && page.subcategory &&
+ page.category.id === categoryId && page.subcategory.id) {
+ found = page;
+ }
+ });
+
+ return found;
+ }
+
function findPage(categoryId, subcategoryId)
{
var found = null;
angular.forEach(model.pages, function (page) {
- if (page &&
+ if (!found &&
+ page &&
page.category && page.subcategory &&
page.category.id === categoryId && ('' + page.subcategory.id) === subcategoryId) {
found = page;
diff --git a/plugins/CoreHome/angularjs/content-block/content-block.directive.js b/plugins/CoreHome/angularjs/content-block/content-block.directive.js
index 852e74015d..d0955526ad 100644
--- a/plugins/CoreHome/angularjs/content-block/content-block.directive.js
+++ b/plugins/CoreHome/angularjs/content-block/content-block.directive.js
@@ -38,7 +38,7 @@
return function (scope, element, attrs) {
var inlineHelp = element.find('[ng-transclude] > .contentHelp');
- if (inlineHelp.size()) {
+ if (inlineHelp.length) {
scope.helpText = inlineHelp.html();
inlineHelp.remove();
}
@@ -54,14 +54,14 @@
var contentTopPosition = false;
- if (adminContent.size()) {
+ if (adminContent.length) {
contentTopPosition = adminContent.offset().top;
}
if (contentTopPosition || contentTopPosition === 0) {
var parents = element.parentsUntil('.col', '[piwik-widget-loader]');
var topThis;
- if (parents.size()) {
+ if (parents.length) {
// when shown within the widget loader, we need to get the offset of that element
// as the widget loader might be still shown. Would otherwise not position correctly
// the widgets on the admin home page
diff --git a/plugins/CoreHome/angularjs/piwikApp.js b/plugins/CoreHome/angularjs/piwikApp.js
index d505e34817..aba5bb47de 100644
--- a/plugins/CoreHome/angularjs/piwikApp.js
+++ b/plugins/CoreHome/angularjs/piwikApp.js
@@ -16,4 +16,8 @@
'piwikApp.filter'
]);
angular.module('app', []);
+
+ angular.module('piwikApp').config(['$locationProvider', function($locationProvider) {
+ $locationProvider.hashPrefix('');
+ }]);
})(); \ No newline at end of file
diff --git a/plugins/CoreHome/angularjs/reporting-page/reportingpage.controller.js b/plugins/CoreHome/angularjs/reporting-page/reportingpage.controller.js
index 8bf2590abe..606f30e334 100644
--- a/plugins/CoreHome/angularjs/reporting-page/reportingpage.controller.js
+++ b/plugins/CoreHome/angularjs/reporting-page/reportingpage.controller.js
@@ -7,9 +7,9 @@
(function () {
angular.module('piwikApp').controller('ReportingPageController', ReportingPageController);
- ReportingPageController.$inject = ['$scope', 'piwik', '$rootScope', '$location', 'reportingPageModel'];
+ ReportingPageController.$inject = ['$scope', 'piwik', '$rootScope', '$location', 'reportingPageModel', 'reportingPagesModel'];
- function ReportingPageController($scope, piwik, $rootScope, $location, pageModel) {
+ function ReportingPageController($scope, piwik, $rootScope, $location, pageModel, pagesModel) {
pageModel.resetPage();
$scope.pageModel = pageModel;
@@ -53,6 +53,17 @@
}
pageModel.fetchPage(category, subcategory).then(function () {
+
+ if (!pageModel.page) {
+ var page = pagesModel.findPageInCategory(category);
+ if (page && page.subcategory) {
+ var $search = $location.search();
+ $search.subcategory = page.subcategory.id;
+ $location.search($search);
+ return;
+ }
+ }
+
$scope.hasNoPage = !pageModel.page;
$scope.loading = false;
});
diff --git a/plugins/CoreHome/angularjs/selector/selector.directive.js b/plugins/CoreHome/angularjs/selector/selector.directive.js
index 7779ce37a0..9340cc6da0 100644
--- a/plugins/CoreHome/angularjs/selector/selector.directive.js
+++ b/plugins/CoreHome/angularjs/selector/selector.directive.js
@@ -24,7 +24,7 @@
var $position = element.find('.dropdown.positionInViewport');
- if ($position.size()) {
+ if ($position.length) {
piwik.helper.setMarginLeftToBeInViewport($position);
}
});
@@ -66,7 +66,7 @@
var $position = element.find('.dropdown.positionInViewport');
- if ($position.size()) {
+ if ($position.length) {
piwik.helper.setMarginLeftToBeInViewport($position);
}
});
diff --git a/plugins/CoreHome/angularjs/siteselector/siteselector.directive.less b/plugins/CoreHome/angularjs/siteselector/siteselector.directive.less
index 96336373f8..d9634a30f2 100644
--- a/plugins/CoreHome/angularjs/siteselector/siteselector.directive.less
+++ b/plugins/CoreHome/angularjs/siteselector/siteselector.directive.less
@@ -55,10 +55,15 @@
width: 100%;
}
-.siteSelector a.title {
+.siteSelector.piwikSelector a.title {
+ padding: 11px 30px 10px 19px;
+
+ .icon:not(.icon-fixed) {
+ margin-right: -11px;
+ }
+
> span {
max-width: 161px;
- display: inline-block;
overflow: hidden;
text-overflow: ellipsis;
}
diff --git a/plugins/CoreHome/angularjs/widget-loader/widgetloader.directive.js b/plugins/CoreHome/angularjs/widget-loader/widgetloader.directive.js
index f3d5317b7b..ca83354741 100644
--- a/plugins/CoreHome/angularjs/widget-loader/widgetloader.directive.js
+++ b/plugins/CoreHome/angularjs/widget-loader/widgetloader.directive.js
@@ -116,8 +116,8 @@
httpCanceler = $q.defer();
- $http.get(url, {timeout: httpCanceler.promise}).success(function(response) {
- if (thisChangeId !== changeCounter || !response) {
+ $http.get(url, {timeout: httpCanceler.promise}).then(function(response) {
+ if (thisChangeId !== changeCounter || !response.data) {
// another widget was requested meanwhile, ignore this response
return;
}
@@ -130,24 +130,23 @@
scope.loading = false;
scope.loadingFailed = false;
- currentElement = contentNode.html(response).children();
+ currentElement = contentNode.html(response.data).children();
if (scope.widgetName) {
// we need to respect the widget title, which overwrites a possibly set report title
var $title = currentElement.find('> .card-content .card-title');
- if ($title.size()) {
+ if ($title.length) {
$title.text(scope.widgetName);
} else {
$title = currentElement.find('> h2');
- if ($title.size()) {
+ if ($title.length) {
$title.text(scope.widgetName);
}
}
}
$compile(currentElement)(newScope);
-
- }).error(function () {
+ })['catch'](function () {
if (thisChangeId !== changeCounter) {
// another widget was requested meanwhile, ignore this response
return;
diff --git a/plugins/CoreHome/javascripts/broadcast.js b/plugins/CoreHome/javascripts/broadcast.js
index a58868261f..4b9a8f21ed 100644
--- a/plugins/CoreHome/javascripts/broadcast.js
+++ b/plugins/CoreHome/javascripts/broadcast.js
@@ -315,10 +315,15 @@ var broadcast = {
if (!currentSearchStr) {
currentSearchStr = '?';
}
-
+
var oldUrl = currentSearchStr + currentHashStr;
for (var i = 0; i < params_vals.length; i++) {
+
+ if(params_vals[i].length == 0) {
+ continue; // updating with empty string would destroy some values
+ }
+
// update both the current search query and hash string
currentSearchStr = broadcast.updateParamValue(params_vals[i], currentSearchStr);
diff --git a/plugins/CoreHome/javascripts/dataTable.js b/plugins/CoreHome/javascripts/dataTable.js
index 408c45692f..4fa6e14f7b 100644
--- a/plugins/CoreHome/javascripts/dataTable.js
+++ b/plugins/CoreHome/javascripts/dataTable.js
@@ -603,14 +603,14 @@ $.extend(DataTable.prototype, UIControl.prototype, {
} else {
var inReportPage = domElem.parents('.theWidgetContent').first();
var displayedAsCard = inReportPage.find('> .card > .card-content');
- if (displayedAsCard.size()) {
+ if (displayedAsCard.length) {
$domNodeToSetOverflow = displayedAsCard.first();
} else {
$domNodeToSetOverflow = inReportPage;
}
}
- if (!$domNodeToSetOverflow || !$domNodeToSetOverflow.size()) {
+ if (!$domNodeToSetOverflow || !$domNodeToSetOverflow.length) {
return;
}
@@ -795,7 +795,7 @@ $.extend(DataTable.prototype, UIControl.prototype, {
});
var $searchAction = $('.dataTableAction.searchAction', domElem);
- if (!$searchAction.size()) {
+ if (!$searchAction.length) {
return;
}
@@ -1353,7 +1353,7 @@ $.extend(DataTable.prototype, UIControl.prototype, {
$('.dropdownConfigureIcon', domElem).remove();
}
- if (ul.find('li').size() == 0) {
+ if (!ul.find('li').length) {
hideConfigurationIcon();
return;
}
@@ -1680,7 +1680,7 @@ $.extend(DataTable.prototype, UIControl.prototype, {
$(this).toggleClass('expanded');
self.repositionRowActions($(this));
}
- ).size();
+ ).length;
},
// tooltip for column documentation
@@ -1710,7 +1710,7 @@ $.extend(DataTable.prototype, UIControl.prototype, {
// headline
top = top + thPosTop;
- if (th.next().size() == 0) {
+ if (!th.next().length) {
left = (-1 * tooltip.outerWidth()) + th.width() +
parseInt(th.css('padding-right'), 10);
}
@@ -1734,7 +1734,7 @@ $.extend(DataTable.prototype, UIControl.prototype, {
},
canHandleRowEvents: function (domElem) {
- return domElem.find('table > tbody > tr').size() <= this.maxNumRowsToHandleEvents;
+ return domElem.find('table > tbody > tr').length <= this.maxNumRowsToHandleEvents;
},
handleRowActions: function (domElem) {
@@ -1773,19 +1773,19 @@ $.extend(DataTable.prototype, UIControl.prototype, {
}
var $headline = domElem.prev('h2');
- if (!$headline.size()) {
+ if (!$headline.length) {
return;
}
var $title = $headline.find('.title:not(.ng-hide)');
- if ($title.size()) {
+ if ($title.length) {
$title.text(relatedReportName);
var scope = $title.scope();
if (scope) {
var $doc = domElem.find('.reportDocumentation');
- if ($doc.size()) {
+ if ($doc.length) {
scope.inlineHelp = $.trim($doc.html());
}
scope.featureName = $.trim(relatedReportName);
diff --git a/plugins/CoreHome/javascripts/dataTable_rowactions.js b/plugins/CoreHome/javascripts/dataTable_rowactions.js
index 347d19f467..b90ec1a780 100644
--- a/plugins/CoreHome/javascripts/dataTable_rowactions.js
+++ b/plugins/CoreHome/javascripts/dataTable_rowactions.js
@@ -79,7 +79,7 @@ DataTable_RowActions_Registry.register({
// we look for the data table instance in the dom
var report = param.split(':')[0];
var div = $(require('piwik/UI').DataTable.getDataTableByReport(report));
- if (div.size() > 0 && div.data('uiControlObject')) {
+ if (div.length && div.data('uiControlObject')) {
dataTable = div.data('uiControlObject');
if (typeof dataTable.rowEvolutionActionInstance != 'undefined') {
return dataTable.rowEvolutionActionInstance;
@@ -184,7 +184,7 @@ DataTable_RowAction.prototype.trigger = function (tr, e, subTableLabel) {
// .prev(.levelX) does not work for some reason => do it "by hand"
var findLevel = 'level' + (level - 1);
var ptr = tr;
- while ((ptr = ptr.prev()).size() > 0) {
+ while ((ptr = ptr.prev()).length) {
if (!ptr.hasClass(findLevel) || ptr.hasClass('nodata')) {
continue;
}
@@ -360,7 +360,7 @@ DataTable_RowActions_RowEvolution.prototype.showRowEvolution = function (apiMeth
// use the popover title returned from the server
var title = box.find('div.popover-title');
- if (title.size() > 0) {
+ if (title.length) {
Piwik_Popover.setTitle(title.html());
title.remove();
}
diff --git a/plugins/CoreHome/lang/da.json b/plugins/CoreHome/lang/da.json
index d66fb96d36..24ade34329 100644
--- a/plugins/CoreHome/lang/da.json
+++ b/plugins/CoreHome/lang/da.json
@@ -5,8 +5,10 @@
"CheckForUpdates": "Søg efter opdateringer",
"CheckPiwikOut": "Tjek Piwik!",
"ClickToEditX": "Klik for at redigere %s",
+ "ClickToSeeFullInformation": "Klik for at se den fulde information",
"CloseSearch": "Luk søgning",
"CloseWidgetDirections": "Luk modulet ved at klikke på 'X' ikonet øverst.",
+ "ChooseX": "Vælg %1$s",
"DataForThisReportHasBeenPurged": "Data til rapporten er er mere end %s måneder gamle og er blevet ryddet op.",
"DataTableExcludeAggregateRows": "Samlede rækker vises %s Skjul dem",
"DataTableIncludeAggregateRows": "Samlede rækker er skjult %s Vis dem",
@@ -49,11 +51,20 @@
"YouAreUsingTheLatestVersion": "Du bruger den seneste version af Piwik!",
"ClickRowToExpandOrContract": "Klik på rækken for at udvide eller sammentrække undertabelen.",
"UndoPivotBySubtable": "Rapporten er blevet pivoteret %s Fortryd pivot.",
+ "NoSuchPage": "Denne side findes ikke",
"PivotBySubtable": "Rapporten er ikke pivoteret %1$s Pivoter med %2$s.",
+ "SystemSummaryWidget": "Systemoversigt",
+ "SystemSummaryNWebsites": "%d websteder",
+ "SystemSummaryNSegments": "%d segmenter",
+ "SystemSummaryNActivatedPlugins": "%d aktiverede programudvidelser",
+ "SystemSummaryPiwikVersion": "Piwik version",
+ "SystemSummaryMysqlVersion": "MySQL version",
+ "SystemSummaryPhpVersion": "PHP version",
"QuickAccessTitle": "Søg efter %s. Brug pil-tasterne for at navigere igennem søgeresultaterne. Genvej: Tryk 'f' for at søge.",
"MenuEntries": "Menu indgange",
"Segments": "Segmenter",
"AdblockIsMaybeUsed": "Hvis du bruger en annonce blokering skal du deaktivere denne for at sikre, at Piwik arbejder uden problemer.",
- "ChangeCurrentWebsite": "Vælg et website. Det aktuelle website er: %s"
+ "ChangeCurrentWebsite": "Vælg et website. Det aktuelle website er: %s",
+ "LeadingAnalyticsPlatformRespectsYourPrivacy": "Den førende åbne analyse platform som respekterer dit privatliv."
}
} \ No newline at end of file
diff --git a/plugins/CoreHome/lang/de.json b/plugins/CoreHome/lang/de.json
index d2b780f908..1c5339d993 100644
--- a/plugins/CoreHome/lang/de.json
+++ b/plugins/CoreHome/lang/de.json
@@ -4,7 +4,7 @@
"ChangeVisualization": "Visualisierung ändern",
"CheckForUpdates": "Nach Aktualisierungen suchen",
"CheckPiwikOut": "Sieh dir Piwik an!",
- "ClickToEditX": "Klicken Sie um %s zu bearbeiten",
+ "ClickToEditX": "Klicken Sie, um %s zu bearbeiten",
"ClickToSeeFullInformation": "Klicken Sie hier für die komplette Information",
"CloseSearch": "Suche schließen",
"CloseWidgetDirections": "Sie können das Widget schließen, indem Sie auf das 'X' oben im Widget klicken.",
@@ -21,12 +21,12 @@
"ExcludeRowsWithLowPopulation": "Alle Zeilen werden angezeigt %s Niedrige Werte ausschließen",
"ExternalHelp": "Hilfe (öffnet in neuem Tab)",
"FlattenDataTable": "Der Bericht ist hierarchisch strukturiert %s Flach anzeigen",
- "HowMuchIsPiwikWorth": "Wieviel ist Piwik Ihnen wert?",
+ "HowMuchIsPiwikWorth": "Wie viel ist Piwik Ihnen wert?",
"IncludeRowsWithLowPopulation": "Niedrige Werte sind ausgeschlossen %s Alle Zeilen anzeigen",
"InjectedHostEmailBody": "Hallo, ich habe gerade versucht Piwik aufzurufen und erhielt eine Warnung, dass der Hostname unbekannt ist.",
"InjectedHostEmailSubject": "Piwik wurde mit einem unbekannten Hostnamen aufgerufen: %s",
"InjectedHostNonSuperUserWarning": "%1$sHier klicken um Piwik sicher zu betreten%2$s und die Warnung zu entfernen. Zusätzlich können Sie den Piwik Administrator kontaktieren und ihn auf dieses Problem hinweisen (%3$sHier klicken um eine E-Mail zu senden%4$s).",
- "InjectedHostSuperUserWarning": "Piwik könnte falsch konfiguriert sein (zum Beispiel wenn Piwik vor kurzem auf einen neuen Server oder eine neue URL umgezogen ist). Sie können entweder %1$shier klicken und %2$s als gültigen Hostnamen hinzufügen (wenn Sie ihm vertrauen)%3$s, oder %4$shier klicken um Piwik unter %5$s sicher zu betreten%6$s",
+ "InjectedHostSuperUserWarning": "Piwik könnte falsch konfiguriert sein (zum Beispiel, wenn Piwik vor kurzem auf einen neuen Server oder eine neue URL umgezogen ist). Sie können entweder %1$shier klicken und %2$s als gültigen Hostnamen hinzufügen (wenn Sie ihm vertrauen)%3$s, oder %4$shier klicken um Piwik unter %5$s sicher zu betreten%6$s",
"InjectedHostWarningIntro": "Sie betreten Piwik aktuell von %1$s, allerdings wurde Piwik so konfiguriert, dass es unter dieser Adresse läuft: %2$s.",
"JavascriptDisabled": "JavaScript muss aktiviert sein, um die Standardansicht von Piwik zu benutzen.<br\/>Es scheint jedoch so, als wäre JavaScript bei Ihnen deaktiviert bzw. würde nicht von Ihrem Browser unterstützt.<br \/>Um die Standardansicht zu benutzen, aktivieren Sie JavaScript in Ihren Browseroptionen und %1$sversuchen Sie es erneut%2$s.<br \/>",
"MainNavigation": "Hauptnavigation",
diff --git a/plugins/CoreHome/lang/id.json b/plugins/CoreHome/lang/id.json
index bbbed38323..917ac75fdb 100644
--- a/plugins/CoreHome/lang/id.json
+++ b/plugins/CoreHome/lang/id.json
@@ -1,9 +1,13 @@
{
"CoreHome": {
"CategoryNoData": "Tak ada data untuk kategori ini. Coba untuk \"Masukkan seluruh populasi\".",
+ "ChangeVisualization": "Ubah visualisasi",
"CheckForUpdates": "Periksa pembaruan",
"CheckPiwikOut": "Periksa Piwik!",
+ "ClickToEditX": "Klik untuk mengubah %s",
+ "ClickToSeeFullInformation": "Klik untuk melihat informasi lengkap",
"CloseWidgetDirections": "Anda dapat menutup gawit ini dengan mengeklik ikon 'X' di atas gawit.",
+ "ChooseX": "Pilih %1$s",
"DataForThisReportHasBeenPurged": "Data untuk laporan ini telah berumur lebih dari %s bulan dan telah dibersihkan.",
"DataTableExcludeAggregateRows": "Keseluruhan baris ditampilkan %s Sembunyikan sekarang",
"DataTableIncludeAggregateRows": "Keseluruhan baris tersembunyi %s Tampilkan sekarang",
@@ -22,6 +26,7 @@
"InjectedHostWarningIntro": "Sekarang Anda mengakses Piwik dari %1$s, tetapi Piwik telah diatur untuk berjalan di alamat ini: %2$s.",
"JavascriptDisabled": "JavaScript harus diaktifkan untuk melihat Piwik di tampilan standar. <br \/>Namun, tampaknya JavaScript dimatikan atau tidak didukung oleh peramban Anda. <br \/>Untuk menggunakan tampilan standar, aktifkan JavaScript dengan mengubah pengaturab peramban Anda, lalu %1$scoba lagi%2$s. <br \/>",
"MakeOneTimeDonation": "Buat satu kali sumbangan saja.",
+ "Menu": "Menu",
"NoPrivilegesAskPiwikAdmin": "Anda masuk sebagai '%1$s' tetapi sepertinya Anda tidak memiliki izin apapun di Piwik. %2$s Tanyakan kepada pengelola Piwik Anda (klik untuk kirim surel)%3$s untuk memberikan akses 'Lihat' ke situs.",
"PageOf": "%1$s dari %2$s",
"PeriodRange": "Rentang",
@@ -31,6 +36,7 @@
"SharePiwikShort": "Piwik! Analisis ramatraya sumber terbuka dan gratis. Miliki sendiri data Anda.",
"ShareThis": "Bagi ini",
"ShowJSCode": "Tampilkan kode JavaScript untuk disisipkan",
+ "SkipToContent": "Lewati ke konten",
"SubscribeAndBecomePiwikSupporter": "Meneruskan ke halaman pembayaran aman kartu kredit (Paypal) untuk to menjadi pendukung Piwik!",
"SupportPiwik": "Dukung!",
"ThereIsNoDataForThisReport": "Tidak ada data untuk laporan ini.",
diff --git a/plugins/CoreHome/lang/pl.json b/plugins/CoreHome/lang/pl.json
index 898d381718..f21b995f6f 100644
--- a/plugins/CoreHome/lang/pl.json
+++ b/plugins/CoreHome/lang/pl.json
@@ -1,16 +1,24 @@
{
"CoreHome": {
"CategoryNoData": "Brak danych w tej kategorii. Spróbuj opcji \"Uwzględnij całą populację\".",
+ "ChangeVisualization": "Zmień wizualizację",
"CheckForUpdates": "Sprawdź aktualizacje",
"CheckPiwikOut": "Sprawdź Piwik!",
+ "ClickToEditX": "Edytuj %s",
+ "ClickToSeeFullInformation": "Zobacz pełną informację",
+ "CloseSearch": "Zamknij wyszukiwanie",
"CloseWidgetDirections": "Możesz zamknąć ten widżet klikając na ikonie 'X' na górze widżetu.",
+ "ChooseX": "Wybierz %1$s",
"DataForThisReportHasBeenPurged": "Dane do tego raportu są starsze niż %s miesięcy i zostały wyczyszczone.",
"DataTableExcludeAggregateRows": "Sumaryczne wiersze są widoczne %s Ukryj je",
"DataTableIncludeAggregateRows": "Sumaryczne wiersze są ukryte %s Pokaż je",
+ "DataTableHowToSearch": "Naciśnij Enter lub kliknij lupkę aby wyszukać",
"Default": "domyślne",
"DonateCall1": "Piwik zawsze nie będzie Cię nic kosztował, ale to nie znaczy, że nic nas nie kosztuje aby go tworzyć.",
"DonateCall2": "Piwik potrzebuje Twojego ciągłego wsparcia by rosnąć i kwitnąć.",
+ "DonateCall3": "Jeśli uważasz, że Piwik wniósł znaczącą wartość do Twojego przedsięwzięcia lub projektu, %1$srozważ proszę datek %2$s lub %3$s zakup funkcjonalności premium%4$s. Każdy grosik może pomóc.",
"DonateFormInstructions": "Kliknij na suwaku aby wybrać ilość, następnie kliknij subskrybuj aby wesprzeć.",
+ "ExcludeRowsWithLowPopulation": "Wyświetlane są wszystkie rzędy %s Ukryj rzędy małej populacji",
"ExternalHelp": "Pomoc (otworzy się w nowym oknie)",
"FlattenDataTable": "Raport jest hierarchiczny %s Przełącz na płaski",
"HowMuchIsPiwikWorth": "Ile Piwik jest warty dla Ciebie?",
@@ -21,9 +29,11 @@
"InjectedHostSuperUserWarning": "Piwik mógł zostać błędnie skonfigurowany (np. jeśli Piwik został ostatnio przeniesiony na nowy serwer lub adres URL). Możesz %1$skliknąć tutaj i dodać %2$s jako prawidłową nazwę hosta Piwik (jeśli jej ufasz)%3$s, lub %4$skliknąć tutaj aby przejść do %5$s aby uzyskać bezpieczny dostęp do Piwik'a%6$s.",
"InjectedHostWarningIntro": "Uzyskujesz obecnie dostęp do Piwik pod adresem %1$s, ale Piwik został skonfigurowany aby działać pod adresem: %2$s.",
"JavascriptDisabled": "Aby użyć standardowego widoku Piwik, wymagane jest zezwolenie do działanie skryptów Java.<br \/>Wydaje się jednak, że tutaj JavaScript nie działa lub jest niepoprawnie wspierany przez twoją przeglądarkę.<br \/>By użyć standardowego widoku, włącz działanie JavaScript w opcjach swojej przeglądarki, i wtedy %1$sspróbuj ponownie%2$s.<br \/>",
+ "MainNavigation": "Główna nawigacja",
"MakeOneTimeDonation": "Zamiast, przekaż jednorazową dotację.",
"Menu": "Menu",
"NoPrivilegesAskPiwikAdmin": "Jesteś zalogowany jako '%1$s' ale wygląda na to, że nie masz nadanych żadnych uprawnień w Piwik'u. %2$s Poproś swojego administratora Piwik'a (kliknij aby wysłąć email)%3$s aby nadał Ci uprawnienia 'przeglądania' strony.",
+ "OnlyForSuperUserAccess": "Ten widżet jest wyświetlany na domyślnym pulpicie jedynie użytkownikom w uprawnieniami Super Użytkownika.",
"PageOf": "%1$s z %2$s",
"PeriodRange": "Zakres",
"ReportGeneratedOn": "Raport wygenerowany %s",
@@ -41,6 +51,23 @@
"ViewAllPiwikVideoTutorials": "Obejrzyj wszystkie tutoriale wideo Piwik",
"WebAnalyticsReports": "Raport analityki statystyk stron",
"YouAreUsingTheLatestVersion": "Używasz najnowszej wersji Piwik'a!",
- "ClickRowToExpandOrContract": "Kliknij ten wiersz aby rozwinić lub zwinąć tabelę podrzędną"
+ "ClickRowToExpandOrContract": "Kliknij ten wiersz aby rozwinić lub zwinąć tabelę podrzędną",
+ "UndoPivotBySubtable": "Ten raport został obrócony %s Przywróć normalny wygląd",
+ "NoSuchPage": "Ta strona nie istnieje",
+ "PivotBySubtable": "Ten raport nie jest obrócony %1$s Obróć o %2$s",
+ "SystemSummaryWidget": "Statystyka systemu",
+ "SystemSummaryNWebsites": "%d serwisów",
+ "SystemSummaryNSegments": "%d grup użytkowników",
+ "SystemSummaryNActivatedPlugins": "%d aktywnych wtyczek",
+ "SystemSummaryPiwikVersion": "Wersja Piwik",
+ "SystemSummaryMysqlVersion": "Wersja MySQL",
+ "SystemSummaryPhpVersion": "Wersja PHP",
+ "QuickAccessTitle": "Wyszukaj %s. Użyj strzałek do nawigacji po wynikach wyszukiwania. Skrót: Naciśnij 'f' aby wyszukać.",
+ "MenuEntries": "Pozycje menu",
+ "Segments": "Grypy użytkowników",
+ "OneClickUpdateNotPossibleAsMultiServerEnvironment": "Aktualizacja One-click nie jest dostępna dla Piwik korzystającego z wielu serwerów. Proszę pobierz najnowszą wersję z %1$s aby kontynuować.",
+ "AdblockIsMaybeUsed": "W sytuacji gdy korzystasz z blokady reklam, proszę wyłącz ją dla tej strony, aby upewnić się, że Piwik może działać bez przeszkód.",
+ "ChangeCurrentWebsite": "Wybierz stronę. Aktualnie wybrana: %s",
+ "LeadingAnalyticsPlatformRespectsYourPrivacy": "Wiodąca otwarta platforma analityczna respektująca Twoją prywatność."
}
} \ No newline at end of file
diff --git a/plugins/CoreHome/lang/ru.json b/plugins/CoreHome/lang/ru.json
index 05650de252..90e2094f5b 100644
--- a/plugins/CoreHome/lang/ru.json
+++ b/plugins/CoreHome/lang/ru.json
@@ -5,6 +5,7 @@
"CheckForUpdates": "Проверить на обновления",
"CheckPiwikOut": "Проверить Piwik на обновления!",
"ClickToEditX": "Редактировать %s",
+ "ClickToSeeFullInformation": "Нажмите, чтобы увидеть полную информацию",
"CloseSearch": "Закрыть поиск",
"CloseWidgetDirections": "Вы можете закрыть этот виджет, нажав на значок 'X' в верхней части виджета.",
"ChooseX": "Выберите %1$s",
@@ -15,6 +16,7 @@
"Default": "по умолчанию",
"DonateCall1": "Piwik всегда будет бесплатным для использования, но это не значит, что нам это ничего не стоит.",
"DonateCall2": "Piwik нуждается в вашей постоянной поддержке, чтобы расти и процветать.",
+ "DonateCall3": "Если вы думаете, что Piwik добавил существенное значение для вашего бизнеса или деятельности, %1$sпожалуйста, сделайте пожертвование!%2$s или %3$sкупите премиум-возможность%4$s. Поможет каждый цент.",
"DonateFormInstructions": "Выберите ползунком нужную сумму, а затем нажмите Subscribe для пожертвования и подписки.",
"ExcludeRowsWithLowPopulation": "Все строки отображены %s Кроме низких показателей",
"ExternalHelp": "Помощь (откроется в новой вкладке)",
@@ -65,6 +67,7 @@
"Segments": "Сегменты",
"OneClickUpdateNotPossibleAsMultiServerEnvironment": "Автоматическое обновление недоступно так как вы используете Piwik с несколькими серверами. Пожалуйста, скачайте вручную последнюю версию с %1$s для продолжения.",
"AdblockIsMaybeUsed": "В случае, если вы используете блокировщик рекламы, пожалуйста, отключите его, чтобы убедиться, что Piwik работает без проблем.",
- "ChangeCurrentWebsite": "Выбор вебсайта, сейчас выбран вебсайт: %s"
+ "ChangeCurrentWebsite": "Выбор вебсайта, сейчас выбран вебсайт: %s",
+ "LeadingAnalyticsPlatformRespectsYourPrivacy": "Лидирующая бесплатная платформа для аналитики, которая соблюдает вашу конфиденциальность."
}
} \ No newline at end of file
diff --git a/plugins/CoreHome/lang/sv.json b/plugins/CoreHome/lang/sv.json
index b0c1f65209..d25211fe05 100644
--- a/plugins/CoreHome/lang/sv.json
+++ b/plugins/CoreHome/lang/sv.json
@@ -16,6 +16,7 @@
"Default": "standard",
"DonateCall1": "Piwik kommer alltid vara gratis att använda men det innebär inte att det inte kostar något att skapa den.",
"DonateCall2": "Piwik behöver ditt fortsatta stöd för att växa och frodas.",
+ "DonateCall3": "Om du tycker att Piwik bidragit till din verksamhet är vi tacksamma om du överväger att %1$sdonera%2$s eller %3$sköpa premiumfunktioner%4$s. Varje öre bidrar.",
"DonateFormInstructions": "Klicka på slidern för att välja ett värde, klicka sedan på registrera för att donera.",
"ExcludeRowsWithLowPopulation": "Alla rader visas %s Dölj rader med låga värden",
"ExternalHelp": "Hjälp (öppnas i en ny flik)",
@@ -32,6 +33,7 @@
"MakeOneTimeDonation": "Donera en engångssumma istället.",
"Menu": "Meny",
"NoPrivilegesAskPiwikAdmin": "Du är inloggad som '%1$s' men det verkar som om du inte har några rättigheter satta i Piwik. %2$s Fråga din Piwik administratör (klicka för att e-posta)%3$s för att få läsrättighet till en webbplats.",
+ "OnlyForSuperUserAccess": "Denna widget visas bara för superanvändare i standardkontrollpanelen.",
"PageOf": "%1$s av %2$s",
"PeriodRange": "Intervall",
"ReportGeneratedOn": "Rapporten genererades på %s",
@@ -63,7 +65,9 @@
"QuickAccessTitle": "Sök efter %s. Använd piltangenterna för att navigera i sökresultatet. Genväg: Tryck på 'f' för att söka.",
"MenuEntries": "Menyposter",
"Segments": "Segment",
+ "OneClickUpdateNotPossibleAsMultiServerEnvironment": "En-klicksuppgradering är inte tillgängligt för du använder Piwik på flera servrar. Ladda ner den senaste versionen från %1$sför att fortsätta.",
"AdblockIsMaybeUsed": "Om du blockerar annonser vänligen inaktivera blockeringen på den här webbplatsen för att Piwik ska fungera utan några problem.",
- "ChangeCurrentWebsite": "Välj en webbplats, vald webbplats just nu: %s"
+ "ChangeCurrentWebsite": "Välj en webbplats, vald webbplats just nu: %s",
+ "LeadingAnalyticsPlatformRespectsYourPrivacy": "Den ledande analysplattformen som respekterar personlig integritet."
}
} \ No newline at end of file
diff --git a/plugins/CoreHome/stylesheets/layout.less b/plugins/CoreHome/stylesheets/layout.less
index 4d03fdbc3a..dac9dd0925 100644
--- a/plugins/CoreHome/stylesheets/layout.less
+++ b/plugins/CoreHome/stylesheets/layout.less
@@ -173,6 +173,7 @@ nav {
padding: 12px 21px 12px 19px;
color: @theme-color-menu-contrast-text;
decoration: none !important;
+ word-wrap: break-word;
word-break: break-word;
&:hover, &:focus {
diff --git a/plugins/CoreHome/templates/_dataTableActions.twig b/plugins/CoreHome/templates/_dataTableActions.twig
index 2f4c813b4e..dca99c47c7 100644
--- a/plugins/CoreHome/templates/_dataTableActions.twig
+++ b/plugins/CoreHome/templates/_dataTableActions.twig
@@ -70,13 +70,13 @@
<ul id='dropdownExport{{ randomIdForDropdown }}' class='dropdown-content exportToFormatItems'>
{% set requestParams = properties.request_parameters_to_modify|json_encode %}
- <li><a target="_blank" requestParams="{{ requestParams|e('html_attr') }}" methodToCall="{{ properties.apiMethodToRequestDataTable }}" format="CSV" filter_limit="{{ properties.export_limit }}">CSV</a></li>
- <li><a target="_blank" requestParams="{{ requestParams|e('html_attr') }}" methodToCall="{{ properties.apiMethodToRequestDataTable }}" format="TSV" filter_limit="{{ properties.export_limit }}">TSV (Excel)</a></li>
- <li><a target="_blank" requestParams="{{ requestParams|e('html_attr') }}" methodToCall="{{ properties.apiMethodToRequestDataTable }}" format="XML" filter_limit="{{ properties.export_limit }}">XML</a></li>
- <li><a target="_blank" requestParams="{{ requestParams|e('html_attr') }}" methodToCall="{{ properties.apiMethodToRequestDataTable }}" format="JSON" filter_limit="{{ properties.export_limit }}">Json</a></li>
- <li><a target="_blank" requestParams="{{ requestParams|e('html_attr') }}" methodToCall="{{ properties.apiMethodToRequestDataTable }}" format="PHP" filter_limit="{{ properties.export_limit }}">Php</a></li>
+ <li><a target="_blank" requestParams="{{ requestParams|e('html_attr') }}" methodToCall="{{ properties.apiMethodToRequestDataTable }}" format="CSV" filter_limit="{{ properties.filter_limit }}">CSV</a></li>
+ <li><a target="_blank" requestParams="{{ requestParams|e('html_attr') }}" methodToCall="{{ properties.apiMethodToRequestDataTable }}" format="TSV" filter_limit="{{ properties.filter_limit }}">TSV (Excel)</a></li>
+ <li><a target="_blank" requestParams="{{ requestParams|e('html_attr') }}" methodToCall="{{ properties.apiMethodToRequestDataTable }}" format="XML" filter_limit="{{ properties.filter_limit }}">XML</a></li>
+ <li><a target="_blank" requestParams="{{ requestParams|e('html_attr') }}" methodToCall="{{ properties.apiMethodToRequestDataTable }}" format="JSON" filter_limit="{{ properties.filter_limit }}">Json</a></li>
+ <li><a target="_blank" requestParams="{{ requestParams|e('html_attr') }}" methodToCall="{{ properties.apiMethodToRequestDataTable }}" format="PHP" filter_limit="{{ properties.filter_limit }}">Php</a></li>
{% if properties.show_export_as_rss_feed %}
- <li><a target="_blank" requestParams="{{ requestParams|e('html_attr') }}" methodToCall="{{ properties.apiMethodToRequestDataTable }}" format="RSS" filter_limit="{{ properties.export_limit }}" date="last10">
+ <li><a target="_blank" requestParams="{{ requestParams|e('html_attr') }}" methodToCall="{{ properties.apiMethodToRequestDataTable }}" format="RSS" filter_limit="{{ properties.filter_limit }}" date="last10">
<span class="icon-feed"></span> RSS
</a>
</li>
diff --git a/plugins/CoreHome/templates/_dataTableFooter.twig b/plugins/CoreHome/templates/_dataTableFooter.twig
index ef043e6090..9aa46ebb3f 100644
--- a/plugins/CoreHome/templates/_dataTableFooter.twig
+++ b/plugins/CoreHome/templates/_dataTableFooter.twig
@@ -21,7 +21,7 @@
{% include "@CoreHome/_dataTableActions.twig" %}
</div>
- {% if properties.show_footer_icons and properties.show_pagination_control or properties.show_limit_control %}
+ {% if not isDataTableEmpty and (properties.show_footer_icons and properties.show_pagination_control or properties.show_limit_control) %}
<div class="col s3 m3 limitSelection"
title="{{ 'General_RowsToDisplay'|translate }}" alt="{{ 'General_RowsToDisplay'|translate }}"
></div>
diff --git a/plugins/CoreHome/templates/widgetContainer.twig b/plugins/CoreHome/templates/widgetContainer.twig
index 06121d1eba..f09cbbc23e 100755
--- a/plugins/CoreHome/templates/widgetContainer.twig
+++ b/plugins/CoreHome/templates/widgetContainer.twig
@@ -7,7 +7,7 @@
$(function () {
var piwikWidget = $('[piwik-widget][containerid={{ containerId|e('js') }}]');
- var isExportedAsWidget = $('body > .widget').size();
+ var isExportedAsWidget = $('body > .widget').length;
if (!isExportedAsWidget) {
angular.element(document).injector().invoke(function($compile) {
diff --git a/plugins/CorePluginsAdmin/Commands/ActivatePlugin.php b/plugins/CorePluginsAdmin/Commands/ActivatePlugin.php
index eae153481f..a62f707c1d 100644
--- a/plugins/CorePluginsAdmin/Commands/ActivatePlugin.php
+++ b/plugins/CorePluginsAdmin/Commands/ActivatePlugin.php
@@ -23,27 +23,29 @@ class ActivatePlugin extends ConsoleCommand
{
$this->setName('plugin:activate');
$this->setDescription('Activate a plugin.');
- $this->addArgument('plugin', InputArgument::REQUIRED, 'The plugin name.');
+ $this->addArgument('plugin', InputArgument::IS_ARRAY, 'The plugin name you want to activate. Multiple plugin names can be specified separated by a space.');
}
protected function execute(InputInterface $input, OutputInterface $output)
{
$pluginManager = Manager::getInstance();
- $plugin = $input->getArgument('plugin');
+ $plugins = $input->getArgument('plugin');
- if ($pluginManager->isPluginActivated($plugin)) {
- $output->writeln('<comment>The plugin is already activated.</comment>');
- return;
- }
+ foreach ($plugins as $plugin) {
+ if ($pluginManager->isPluginActivated($plugin)) {
+ $output->writeln(sprintf('<comment>The plugin %s is already activated.</comment>', $plugin));
+ continue;
+ }
- if ($dependencies = $pluginManager->loadPlugin($plugin)->getMissingDependenciesAsString()) {
- $output->writeln("<error>$dependencies</error>");
- return;
- }
+ if ($dependencies = $pluginManager->loadPlugin($plugin)->getMissingDependenciesAsString()) {
+ $output->writeln("<error>$dependencies</error>");
+ continue;
+ }
- $pluginManager->activatePlugin($plugin);
+ $pluginManager->activatePlugin($plugin);
- $output->writeln("Activated plugin <info>$plugin</info>");
+ $output->writeln("Activated plugin <info>$plugin</info>");
+ }
}
}
diff --git a/plugins/CorePluginsAdmin/Commands/DeactivatePlugin.php b/plugins/CorePluginsAdmin/Commands/DeactivatePlugin.php
index 33f5671e48..451529368b 100644
--- a/plugins/CorePluginsAdmin/Commands/DeactivatePlugin.php
+++ b/plugins/CorePluginsAdmin/Commands/DeactivatePlugin.php
@@ -23,22 +23,24 @@ class DeactivatePlugin extends ConsoleCommand
{
$this->setName('plugin:deactivate');
$this->setDescription('Deactivate a plugin.');
- $this->addArgument('plugin', InputArgument::REQUIRED, 'The plugin name.');
+ $this->addArgument('plugin', InputArgument::IS_ARRAY, 'The plugin name you want to activate. Multiple plugin names can be specified separated by a space.');
}
protected function execute(InputInterface $input, OutputInterface $output)
{
$pluginManager = Manager::getInstance();
- $plugin = $input->getArgument('plugin');
+ $plugins = $input->getArgument('plugin');
- if (!$pluginManager->isPluginActivated($plugin)) {
- $output->writeln('<comment>The plugin is already deactivated.</comment>');
- return;
- }
+ foreach ($plugins as $plugin) {
+ if (!$pluginManager->isPluginActivated($plugin)) {
+ $output->writeln(sprintf('<comment>The plugin %s is already deactivated.</comment>', $plugin));
+ continue;
+ }
- $pluginManager->deactivatePlugin($plugin);
+ $pluginManager->deactivatePlugin($plugin);
- $output->writeln("Deactivated plugin <info>$plugin</info>");
+ $output->writeln("Deactivated plugin <info>$plugin</info>");
+ }
}
}
diff --git a/plugins/CorePluginsAdmin/angularjs/form-field/form-field.directive.js b/plugins/CorePluginsAdmin/angularjs/form-field/form-field.directive.js
index 30d73fee7c..00fe79523f 100644
--- a/plugins/CorePluginsAdmin/angularjs/form-field/form-field.directive.js
+++ b/plugins/CorePluginsAdmin/angularjs/form-field/form-field.directive.js
@@ -274,11 +274,16 @@
field.defaultValue = defaultValue.join(',');
}
+ // convert boolean values since angular 1.6 uses strict equals when determining if a model value
+ // matches the ng-value of an input.
if (field.type === 'boolean') {
- if (field.value && field.value > 0 && field.value !== '0') {
- field.value = true;
- } else {
- field.value = false;
+ var valueIsTruthy = field.value && field.value > 0 && field.value !== '0';
+
+ // for checkboxes, the value MUST be either true or faluse
+ if (field.uiControl === 'checkbox') {
+ field.value = valueIsTruthy;
+ } else if (field.uiControl === 'radio') {
+ field.value = valueIsTruthy ? '1' : '0';
}
}
diff --git a/plugins/CorePluginsAdmin/lang/cs.json b/plugins/CorePluginsAdmin/lang/cs.json
index abc2dfff87..0672963481 100644
--- a/plugins/CorePluginsAdmin/lang/cs.json
+++ b/plugins/CorePluginsAdmin/lang/cs.json
@@ -41,6 +41,8 @@
"OriginThirdParty": "Třetí strana",
"PluginHomepage": "Domovská stránka zásuvného modulu",
"PluginNotCompatibleWith": "%1$s zásuvný modul není kompatibilní s %2$s",
+ "PluginNotFound": "Plugin %1$s nebyl nalezen v souborovém systému.",
+ "PluginNotFoundAlternative": "Pokud jste tento zásuvný modul používali, zkuste jej znovu načíst nebo jej znovu nainstalovat z tržiště. V opačném případě klikněte na Odinstalovat a odeberte ho ze seznamu.",
"PluginNotWorkingAlternative": "Pokud jste tento zásuvný modul používali, možná najdete v obchodě novější verzi. Pokud ne, možná ho chcete odinstalovat.",
"PluginRequirement": "%1$s vyžaduje %2$s.",
"PluginsManagement": "Správa zásuvných modulů",
@@ -51,6 +53,7 @@
"Status": "Stav",
"SuccessfullyActicated": "Úspěšně jste aktivovali <strong>%s<\/strong>.",
"TeaserExtendPiwik": "Rozšiřte Piwik s použitím zásuvných modulů a šablon",
+ "TeaserExtendPiwikByPlugin": "Rozšiřte Piwik o %1$sinstalací zásuvného module z tržiště %2$s nebo %3$snahrajte zásuvný modul ve formátu .zip%4$s.",
"TeaserExtendPiwikByTheme": "Užijte si nový vzhled po %1$sinstalaci nového vzhledu%2$s.",
"InstallingNewPluginViaMarketplaceOrUpload": "Můžete zásuvný modul nainstalovat automaticky z obchodu, %1$snebo ho nahrát%2$s ve formátu .zip.",
"Theme": "Šablona",
@@ -60,7 +63,7 @@
"UninstallConfirm": "Chystáte se odebrat zásuvný modul %s. Tento modul bude kompletně odebrán z platformy a akci nebude možné vrátit zpět. Jste si jisti, že to chcete provést?",
"Version": "Verze",
"ViewAllMarketplacePlugins": "Zobrazit všechny zásuvné moduly v marketplace zásuvných modulů",
- "WeDeactivatedThePluginAsItHasMissingDependencies": "Zásuvný modul %s byl vypnut, chybí závislosti:",
+ "WeCouldNotLoadThePluginAsItHasMissingDependencies": "Zásuvný modul %1$s nelze načíst, protože chybí závislosti: %2$s",
"Websites": "Stránky"
}
} \ No newline at end of file
diff --git a/plugins/CorePluginsAdmin/lang/de.json b/plugins/CorePluginsAdmin/lang/de.json
index 50a5ba1423..097acd8abb 100644
--- a/plugins/CorePluginsAdmin/lang/de.json
+++ b/plugins/CorePluginsAdmin/lang/de.json
@@ -19,13 +19,13 @@
"InstalledThemes": "Installierte Themes",
"InfoPluginUpdateIsRecommended": "Aktualisieren Sie Ihre Plugins jetzt, um von den neuesten Verbesserungen zu profitieren.",
"InfoThemeIsUsedByOtherUsersAsWell": "Hinweis: Die anderen %1$s Benutzer, die in diesem Piwik registriert sind, nutzen ebenfalls das Theme %2$s.",
- "InfoThemeUpdateIsRecommended": "Aktualisieren Sie Ihre Themes, um die neueste Version zu geniessen.",
+ "InfoThemeUpdateIsRecommended": "Aktualisieren Sie Ihre Themes, um die neueste Version zu genießen.",
"InstallNewPlugins": "Neue Plugins installieren",
"InstallNewThemes": "Neue Themes installieren",
"LicenseHomepage": "Lizenz-Website",
"LikeThisPlugin": "Finden Sie dieses Plugin nützlich?",
"ConsiderDonating": "Spenden Sie",
- "CommunityContributedPlugin": "Dies ist ein Plugin dass aus der Community kostenlos zur Verfügung gestellt wird.",
+ "CommunityContributedPlugin": "Dies ist ein Plugin, das von der Community kostenlos zur Verfügung gestellt wird.",
"ConsiderDonatingCreatorOf": "Bitte ziehen Sie es in Erwägung dem Ersteller von %s etwas zu spenden.",
"PluginsExtendPiwik": "Plugins erweitern die Funktionalität von Piwik.",
"OncePluginIsInstalledYouMayActivateHere": "Sobald ein Plugin installiert wurde, können Sie es hier aktivieren bzw. deaktivieren.",
@@ -41,6 +41,8 @@
"OriginThirdParty": "Dritt-Anbieter",
"PluginHomepage": "Plugin-Website",
"PluginNotCompatibleWith": "Das Plugin %1$s ist nicht kompatibel mit %2$s.",
+ "PluginNotFound": "Plugin %1$s ist am Dateisystem nicht vorhanden.",
+ "PluginNotFoundAlternative": "Wenn Sie dieses Plugin benutzt haben, versuchen Sie es erneut hochzuladen oder erneut aus dem Marketplace zu installieren. Falls nicht, klicken Sie auf deinstallieren um es aus der Liste zu entfernen.",
"PluginNotWorkingAlternative": "Wenn Sie dieses Plugin eingesetzt haben, finden Sie möglicherweise eine neuere Version im Marketplace. Wenn nicht, sollten Sie es deinstallieren.",
"PluginRequirement": "%1$s benötigt %2$s",
"PluginsManagement": "Pluginverwaltung",
@@ -51,16 +53,17 @@
"Status": "Status",
"SuccessfullyActicated": "Sie haben <strong>%s<\/strong> erfolgreich aktiviert.",
"TeaserExtendPiwik": "Erweitere Piwik mit Plugins und Themes",
+ "TeaserExtendPiwikByPlugin": "Erweitern Sie Piwik, indem Sie %1$sPlugins aus dem Marketplace installieren%2$s oder %3$sein Plugin im .zip Format hochladen%4$s.",
"TeaserExtendPiwikByTheme": "Wechseln Sie das Erscheinungsbild durch die %1$sInstallation eines neuen Themes%2$s.",
"InstallingNewPluginViaMarketplaceOrUpload": "Sie können Plugins aus dem Marketplace automatisiert installieren oder ein Plugin im .zip Format %1$shochladen%2$s.",
"Theme": "Theme",
"Themes": "Themes",
- "ThemesDescription": "Themes können das Aussehen der Benutzeroberfläche für Piwik Anwender ändern, und bringen so ein komplett neues visuelles Erlebnis, das Ihnen die Analyse Ihrer Berichte angenehm gestaltet.",
+ "ThemesDescription": "Themes können das Aussehen der Benutzeroberfläche für Piwik Anwender ändern und bringen so ein komplett neues visuelles Erlebnis, das Ihnen die Analyse Ihrer Berichte angenehm gestaltet.",
"ThemesManagement": "Themes verwalten",
"UninstallConfirm": "Sie sind gerade dabei, das Plugin %s zu deinstallieren. Das Plugin wird vollständig von ihrer Plattform entfernt und kann nicht wiederhergestellt werden. Sind sie sicher, dass sie das tun wollen?",
"Version": "Version",
"ViewAllMarketplacePlugins": "Alle Marketplace Plugins anzeigen",
- "WeDeactivatedThePluginAsItHasMissingDependencies": "Wir haben das Plugin %s wegen fehlender Abhängigkeiten deaktiviert:",
+ "WeCouldNotLoadThePluginAsItHasMissingDependencies": "Das Plugin %1$s konnte nicht geladen werden, da folgende Abhängigkeiten fehlen: %2$s",
"Websites": "Websites"
}
} \ No newline at end of file
diff --git a/plugins/CorePluginsAdmin/lang/el.json b/plugins/CorePluginsAdmin/lang/el.json
index 66ad0bc678..4a1374434c 100644
--- a/plugins/CorePluginsAdmin/lang/el.json
+++ b/plugins/CorePluginsAdmin/lang/el.json
@@ -63,7 +63,7 @@
"UninstallConfirm": "Πρόκειται να απεγκαταστήσετε το πρόσθετο %s. Το πρόσθετο θα αφαιρεθεί εντελώς από την πλατφόρμα και δε θα είναι δυνατή η επανάκτησή του. Είστε σίγουροι για την ενέργεια αυτή;",
"Version": "Έκδοση",
"ViewAllMarketplacePlugins": "Εμφάνιση όλων των πρόσθετων στην Αγορά",
- "WeDeactivatedThePluginAsItHasMissingDependencies": "Απενεργοποιήθηκε το πρόσθετο %s καθώς έχει ελλιπείς εξαρτήσεις:",
+ "WeCouldNotLoadThePluginAsItHasMissingDependencies": "Δεν ήταν δυνατή η φόρτωση του πρόσθετου %1$s καθώς έχει ελλιπείς εξαρτήσεις: %2$s",
"Websites": "Ιστοτόποι"
}
} \ No newline at end of file
diff --git a/plugins/CorePluginsAdmin/lang/es.json b/plugins/CorePluginsAdmin/lang/es.json
index c2b5afa58e..57287f420e 100644
--- a/plugins/CorePluginsAdmin/lang/es.json
+++ b/plugins/CorePluginsAdmin/lang/es.json
@@ -60,7 +60,6 @@
"UninstallConfirm": "Estás a punto de desinstalar el complemento %s. El complemento será completamente eliminado de su plataforma y no será recuperable. ¿Está seguro que desea hacer esto?",
"Version": "Versión",
"ViewAllMarketplacePlugins": "Ver todos los complementos del \"Marketplace\"",
- "WeDeactivatedThePluginAsItHasMissingDependencies": "Desactivamos el complemento %s porque le faltan las siguientes dependencias:",
"Websites": "Sitios de internet"
}
} \ No newline at end of file
diff --git a/plugins/CorePluginsAdmin/lang/fr.json b/plugins/CorePluginsAdmin/lang/fr.json
index 97904918e4..0d860bc068 100644
--- a/plugins/CorePluginsAdmin/lang/fr.json
+++ b/plugins/CorePluginsAdmin/lang/fr.json
@@ -41,6 +41,8 @@
"OriginThirdParty": "Tierce-Partie",
"PluginHomepage": "Page d'accueil du plugin",
"PluginNotCompatibleWith": "Le composant %1$s n'est pas compatible avec %2$s.",
+ "PluginNotFound": "Le composant %1$s est introuvable.",
+ "PluginNotFoundAlternative": "Si vous utilisiez ce composant, essayez de le téléverser à nouveau ou de le réinstaller depuis le marché. Sinon, cliquez sur désinstaller pour le supprimer de la liste.",
"PluginNotWorkingAlternative": "Si vous avez utilisé ce composant additionnel, peut être pourriez vous trouver une version plus récente sur le Marché. Le cas échéant vous devriez le désinstaller.",
"PluginRequirement": "%1$s requiert %2$s.",
"PluginsManagement": "Gestionnaire de plugins",
@@ -51,6 +53,7 @@
"Status": "État",
"SuccessfullyActicated": "Vous avez activé avec succès <strong>%s<\/strong>.",
"TeaserExtendPiwik": "Etendre Piwik avec des composants additionnels et des thèmes",
+ "TeaserExtendPiwikByPlugin": "Enrichissez Piwik en %1$sinstallant des composants depuis le marché%2$s ou %3$sen téléversant un composant au format .zip%4$s.",
"TeaserExtendPiwikByTheme": "Profitez d'une nouvelle charte graphique en %1$sinstallant un nouveau thème%2$s.",
"InstallingNewPluginViaMarketplaceOrUpload": "Vous pouvez installer automatiquement un plugin à partir du Marketplace ou %1$supload a plugin%2$s au format .zip.",
"Theme": "Thème",
@@ -60,7 +63,7 @@
"UninstallConfirm": "Vous êtes sur le point de désinstaller le composant %s. Ce composant sera supprimé de manière définitive de votre plateforme et cette action est irréversible. Etes vous sûr(e) de vouloir effectuer cela?",
"Version": "Version",
"ViewAllMarketplacePlugins": "Voir tous les plugins du marché",
- "WeDeactivatedThePluginAsItHasMissingDependencies": "Nous avons désactiver le composant %s car certaines dépendances lui manquent :",
+ "WeCouldNotLoadThePluginAsItHasMissingDependencies": "Le composant %1$s n'a pas pu être chargé car il a des dépendances manquantes: %2$s",
"Websites": "Sites web"
}
} \ No newline at end of file
diff --git a/plugins/CorePluginsAdmin/lang/id.json b/plugins/CorePluginsAdmin/lang/id.json
index 10a88e80ca..9c9af83ff0 100644
--- a/plugins/CorePluginsAdmin/lang/id.json
+++ b/plugins/CorePluginsAdmin/lang/id.json
@@ -1,14 +1,23 @@
{
"CorePluginsAdmin": {
+ "ActionUninstall": "Lepaskan",
"Activate": "Diaktifkan",
"Activated": "Teraktivasi",
"Active": "Aktif",
+ "Activity": "Aktivitas",
"AuthorHomepage": "Alamat Penulis",
"Deactivate": "Dimatikan",
+ "History": "Riwayat",
"Inactive": "Tak Aktif",
+ "InstalledPlugins": "Plugin terinstal",
+ "InstalledThemes": "Tema terinstal",
+ "InstallNewPlugins": "Instal plugin baru",
"LicenseHomepage": "Alamat Lisensi",
+ "LikeThisPlugin": "Suka plugin ini?",
"PluginsExtendPiwik": "Pengaya menambah dan memperluas kegunaan dari Piwik.",
"OncePluginIsInstalledYouMayActivateHere": "Sekali pengaya terinstal, Anda dapat mengaktifkan dan mematikan di sini.",
+ "MenuPlatform": "Pelantar",
+ "NoZipFileSelected": "Silakan pilih sebuah berkas ZIP.",
"PluginHomepage": "Alamat Pengaya",
"PluginsManagement": "Pengatur Pengaya",
"Status": "Status",
diff --git a/plugins/CorePluginsAdmin/lang/it.json b/plugins/CorePluginsAdmin/lang/it.json
index 5af9808204..ec806d77e1 100644
--- a/plugins/CorePluginsAdmin/lang/it.json
+++ b/plugins/CorePluginsAdmin/lang/it.json
@@ -59,7 +59,6 @@
"UninstallConfirm": "State per disinstallare un plugin %s. Questo verrà completamente rimosso dalla vostra piattaforma e non potrà essere recuperato. Siete sicuri di volerlo fare?",
"Version": "Versione",
"ViewAllMarketplacePlugins": "Scopri tutti i plugin del Marketplace",
- "WeDeactivatedThePluginAsItHasMissingDependencies": "Abbiamo disabilitato il plugin %s perché ha delle dipendenze mancanti:",
"Websites": "Siti web"
}
} \ No newline at end of file
diff --git a/plugins/CorePluginsAdmin/lang/ja.json b/plugins/CorePluginsAdmin/lang/ja.json
index e6cc09cc03..10ce4e5a58 100644
--- a/plugins/CorePluginsAdmin/lang/ja.json
+++ b/plugins/CorePluginsAdmin/lang/ja.json
@@ -41,6 +41,8 @@
"OriginThirdParty": "サードパーティ",
"PluginHomepage": "プラグインのホームページ",
"PluginNotCompatibleWith": "%1$s plugin is not compatible with %2$s.",
+ "PluginNotFound": "プラグイン %1$s はファイルシステム上に見つかりませんでした。",
+ "PluginNotFoundAlternative": "このプラグインを使用していた場合は、マーケットプレイスから再アップロードまたは再インストールしてみてください。 そうでない場合は、アンインストールをクリックしてリストから削除します。",
"PluginNotWorkingAlternative": "このプラグインを以前から使用している場合、マーケットプレイス上で、より最新のバージョンを見つけることができます。使用していない場合、アンインストールすることをお勧めします。",
"PluginRequirement": "%1$s requires %2$s.",
"PluginsManagement": "プラグインの管理",
@@ -51,6 +53,7 @@
"Status": "状態",
"SuccessfullyActicated": "<strong> %s <\/strong> の有効化に成功しました。",
"TeaserExtendPiwik": "Piwik のプラグインとテーマを拡張",
+ "TeaserExtendPiwikByPlugin": "%1$sマーケットプレイスからプラグインをインストール%2$sするか、%3$s.zip形式のプラグインをアップロード%4$sしてPiwikを拡張します。",
"TeaserExtendPiwikByTheme": "%1$s新しいテーマをインストール%2$s し、別の外観と雰囲気をお楽しみください。",
"InstallingNewPluginViaMarketplaceOrUpload": "自動的にマーケットプレイスからプラグインをインストールまたは.zip形式のプラグイン %1$s を %2$s アップロードすることができます。",
"Theme": "テーマ",
@@ -60,7 +63,7 @@
"UninstallConfirm": "プラグイン %s をアンインストールしようとしています。実行されると、プラグインは完全にプラットフォームから削除され、回復できなくなります。本当にアンインストールを実行してもよろしいですか?",
"Version": "バージョン",
"ViewAllMarketplacePlugins": "マーケットプレイスのプラグインをすべて表示",
- "WeDeactivatedThePluginAsItHasMissingDependencies": "依存関係がないため、プラグイン %s を無効にしました:",
+ "WeCouldNotLoadThePluginAsItHasMissingDependencies": "依存関係がないため、プラグイン%1$sをロードできませんでした:%2$s",
"Websites": "ウェブサイト"
}
} \ No newline at end of file
diff --git a/plugins/CorePluginsAdmin/lang/nl.json b/plugins/CorePluginsAdmin/lang/nl.json
index 24250dc591..93ce372fec 100644
--- a/plugins/CorePluginsAdmin/lang/nl.json
+++ b/plugins/CorePluginsAdmin/lang/nl.json
@@ -37,9 +37,11 @@
"NoPluginSettings": "De plugins settings kunnen niet worden aangepast.",
"Origin": "Herkomst",
"OriginCore": "Core",
+ "OriginOfficial": "Officieel",
"OriginThirdParty": "Derde",
"PluginHomepage": "Homepagina plugin",
"PluginNotCompatibleWith": "%1$s-plugin is niet compatibel met %2$s.",
+ "PluginNotFound": "Plugin %1$s niet gevonden op filesystem.",
"PluginNotWorkingAlternative": "Als je deze plugin hebt gebruikt, kun je wellicht een meer recente versie in de Marktplaats vinden. Zo niet, dan wil je deze plugin waarschijnlijk verwijderen.",
"PluginRequirement": "%1$s vereist %2$s.",
"PluginsManagement": "Plugins beheren",
@@ -59,7 +61,6 @@
"UninstallConfirm": "Je staat op het punt een plugin %s installatie ongedaan te maken. De plugin zal volledig worden verwijderd van het platform, dit kan niet ongedaan worden. Weet je zeker dat je dat wil?",
"Version": "Versie",
"ViewAllMarketplacePlugins": "Alle Marktplaats-plugins bekijken",
- "WeDeactivatedThePluginAsItHasMissingDependencies": "We hebben de plugin %s uitgeschakeld, omdat het afhankelijkheden mist:",
"Websites": "Websites"
}
} \ No newline at end of file
diff --git a/plugins/CorePluginsAdmin/lang/pl.json b/plugins/CorePluginsAdmin/lang/pl.json
index b8233ec608..6d7bd59895 100644
--- a/plugins/CorePluginsAdmin/lang/pl.json
+++ b/plugins/CorePluginsAdmin/lang/pl.json
@@ -5,43 +5,65 @@
"Activated": "Aktywowano",
"Active": "Aktywna",
"Activity": "Aktywność",
+ "AlwaysActivatedPluginsList": "Następujące wtyczki są zawsze aktywne i nie mogą być wyłączone: %s",
"AuthorHomepage": "Strona główna Piwik",
"Changelog": "Log zmian",
"ChangeSettingsPossible": "Możesz zmienić %1$sustawienia%2$s dla tego plugin'u.",
"CorePluginTooltip": "Pluginy do Core nie mają wersji, ponieważ są rozpowszechniane z Piwik.",
"Deactivate": "Wyłącz",
"DoMoreContactPiwikAdmins": "Aby zainstalować nowy plugin lub nową skórę, skontaktuj się z administratorami Piwik'a.",
+ "ChangeLookByManageThemes": "Możesz zmieniać wygląd Piwik'a korzystając z %1$sZarządzania szablonami%2$s.",
"History": "Historia",
"Inactive": "Nieaktywna",
- "InfoPluginUpdateIsRecommended": "Zaktualizuj swoje pluginy teraz, w celu uzyskania korzyści z najnowszych ulepszeń.",
+ "InstalledPlugins": "Zainstalowane wtyczki",
+ "InstalledThemes": "Zainstalowane szablony",
+ "InfoPluginUpdateIsRecommended": "Zaktualizuj swoje wtyczki teraz, w celu uzyskania korzyści z ostatnich ulepszeń.",
"InfoThemeIsUsedByOtherUsersAsWell": "Uwaga: %1$s innych użytkowników zarejestrowanych w tym Piwik'u także używają skóry %2$s.",
"InfoThemeUpdateIsRecommended": "Zaktualizuj swoje skóry aby cieszyć się najnowszymi wersjami.",
- "InstallNewPlugins": "Zainstaluj nowe pluginy",
+ "InstallNewPlugins": "Zainstaluj nowe wtyczki",
"InstallNewThemes": "Zainstaluj nowe szablony",
"LicenseHomepage": "Licencja strony głównej",
+ "LikeThisPlugin": "Podoba Ci się ta wtyczka?",
+ "ConsiderDonating": "Rozważ wsparcie",
+ "CommunityContributedPlugin": "To wtyczka wytworzona przez społeczność, dostępna bezpłatnie.",
+ "ConsiderDonatingCreatorOf": "Zachęcamy do wsparcia twórcy %s",
"PluginsExtendPiwik": "Wtyczki zwiększają i rozszerzają funkcjonalność statystyk Piwik.",
"OncePluginIsInstalledYouMayActivateHere": "Po instalacji wtyczki, możesz ją tutaj włączyć lub wyłączyć.",
"MenuPlatform": "Platforma",
"MissingRequirementsNotice": "Zaktualizuj %1$s %2$s do nowszej wersji, %1$s %3$s jest wymagana.",
+ "MissingRequirementsPleaseInstallNotice": "Proszę zainstaluj %1$s %2$s ponieważ jest wymagane przez %3$s.",
"NoZipFileSelected": "Proszę wybrać plik ZIP.",
"NumUpdatesAvailable": "%s aktualizacji dostępnych",
+ "NoPluginSettings": "Wtyczka nie wymaga konfiguracji",
"Origin": "Pochodzenie",
"OriginCore": "Jądro",
- "OriginThirdParty": "osoba trzecia",
+ "OriginOfficial": "Oficjalne",
+ "OriginThirdParty": "Osoby trzecie",
"PluginHomepage": "Strona główna Wtyczki",
"PluginNotCompatibleWith": "%1$s jest niekompatybilny z %2$s.",
+ "PluginNotFound": "Wtyczki %1$s nie udało się odnaleźć w systemie plików.",
+ "PluginNotFoundAlternative": "Jeśli korzystałeś\/aś z tej wtyczki, spróbuj ją ponownie wgrać lub zainstalować z marketplace. Jeśli nie, kliknij odinstaluj, aby usunąć ją z listy.",
"PluginNotWorkingAlternative": "Przy użyciu tej wtyczki, może znajdziesz nowszą wersję w Marketplace. Jeśli nie, możesz ją odinstalować.",
"PluginRequirement": "%1$s wymaga %2$s.",
"PluginsManagement": "Zarządzanie wtyczkami",
+ "NotDownloadable": "Nie można pobrać",
+ "PluginNotDownloadable": "Wtyczki nie można pobrać.",
+ "PluginNotDownloadablePaidReason": "Możliwą przyczyną jest wygaszona lub przekroczona licencja.",
+ "PluginActivated": "Wtyczka włączona",
"Status": "Status",
"SuccessfullyActicated": "Pomyślnie aktywowano <strong>%s<\/strong>.",
"TeaserExtendPiwik": "Rozszerz Piwik o pluginy i szablony",
+ "TeaserExtendPiwikByPlugin": "Rozszerzaj Piwik'a %1$sinstalując wtyczki z Marketplace%2$s lub %3$swgrywając wtyczki w formacie .zip%4$s.",
+ "TeaserExtendPiwikByTheme": "Ciesz się nowym wyglądem %1$sinstalując nowy szablon%2$s.",
+ "InstallingNewPluginViaMarketplaceOrUpload": "Możesz automatycznie instalować wtyczki z Marketplace lub%1$swgrać wtyczkę%2$s w formacie .zip.",
"Theme": "Szablon",
"Themes": "Szablony",
"ThemesDescription": "Skórki mogą zmienić wygląd interfejsu użytkownika Piwik , i zapewniają zupełnie nowe wrażenia wizualne w raportach Analytic",
"ThemesManagement": "Zarządzaj szablonami",
"UninstallConfirm": "Chcesz odinstalować wstyczkę %s. Wtyczka zostanie całokowicie i trwale usunięta z twojej platformy. Czy jesteś pewny, że chcesz to zrobić?",
"Version": "Wersja",
+ "ViewAllMarketplacePlugins": "Przeglądaj dostępne wtyczki Marketplace",
+ "WeCouldNotLoadThePluginAsItHasMissingDependencies": "Wtyczka %1$s nie mogła zostać załadowana z powodu brakujących zależności: %2$s",
"Websites": "Serwisy internetowe"
}
} \ No newline at end of file
diff --git a/plugins/CorePluginsAdmin/lang/ru.json b/plugins/CorePluginsAdmin/lang/ru.json
index ff56dd8a3b..f186393a2e 100644
--- a/plugins/CorePluginsAdmin/lang/ru.json
+++ b/plugins/CorePluginsAdmin/lang/ru.json
@@ -37,9 +37,12 @@
"NoPluginSettings": "Нет настроек плагинов, которые могут быть сконфигурированы",
"Origin": "Происхождение",
"OriginCore": "Основные",
+ "OriginOfficial": "Официальные",
"OriginThirdParty": "Сторонние",
"PluginHomepage": "Дом. страница плагина",
"PluginNotCompatibleWith": "Плагин %1$s не совместим с %2$s.",
+ "PluginNotFound": "Плагин %1$s не найден в файловой системе.",
+ "PluginNotFoundAlternative": "Если вы использовали этот плагин, попробуйте перезагрузить или переустановить его с маркета. Если нет, нажмите удалить, чтобы убрать его из списка.",
"PluginNotWorkingAlternative": "Если вы используете этот плагин, может быть, вы сможете найти более новые версии в Marketplace. Если нет — можете удалить его.",
"PluginRequirement": "%1$s требуется %2$s.",
"PluginsManagement": "Управление плагинами",
@@ -50,6 +53,7 @@
"Status": "Статус",
"SuccessfullyActicated": "Вы успешно активировали <strong>%s<\/strong>.",
"TeaserExtendPiwik": "Улучшение Piwik с помощью Плагинов и Тем",
+ "TeaserExtendPiwikByPlugin": "Расширьте Piwik, %1$sустановив плагины из Маркета%2$s или %3$sзагрузив плагин в формате .zip%4$s.",
"TeaserExtendPiwikByTheme": "Насладитесь другим внешним видом %1$sустановив новую тему%2$s.",
"InstallingNewPluginViaMarketplaceOrUpload": "Вы автоматически можете установить плагины из Marketplace или %1$sзагрузить плагин%2$s в формате zip.",
"Theme": "Тема",
@@ -59,7 +63,7 @@
"UninstallConfirm": "Вы собираетесь удалить плагин %s. Плагин будет безвозвратно удалён из системы. Вы уверены, что хотите сделать это?",
"Version": "Версия",
"ViewAllMarketplacePlugins": "Посмотреть все плагины в Marketplace",
- "WeDeactivatedThePluginAsItHasMissingDependencies": "Мы отключили плагин %s, потому что у него есть недостающие зависимости:",
+ "WeCouldNotLoadThePluginAsItHasMissingDependencies": "Плагин %1$s не может быть загружен, потому что у него есть недостающие зависимости: %2$s",
"Websites": "Сайты"
}
} \ No newline at end of file
diff --git a/plugins/CorePluginsAdmin/lang/sq.json b/plugins/CorePluginsAdmin/lang/sq.json
index afc3b8eb05..920c7039da 100644
--- a/plugins/CorePluginsAdmin/lang/sq.json
+++ b/plugins/CorePluginsAdmin/lang/sq.json
@@ -63,7 +63,7 @@
"UninstallConfirm": "Ju ndan një hap nga çinstalimi i shtojcës %s. Shtojca do të hiqet plotësisht nga platforma juaj dhe ky veprim s’mund të zhbëhet. Jeni i sigurt se doni të bëhet kështu?",
"Version": "Version",
"ViewAllMarketplacePlugins": "Shihni krejt shtojcat e Marketplace-it",
- "WeDeactivatedThePluginAsItHasMissingDependencies": "E çaktivizuam shtojcën %s, ngaqë ka varësi të paplotësuara:",
+ "WeCouldNotLoadThePluginAsItHasMissingDependencies": "Shtojca %1$s s’u ngarkua dot, ngaqë ka varësi të paplotësuara: %2$s",
"Websites": "Sajte"
}
} \ No newline at end of file
diff --git a/plugins/CorePluginsAdmin/lang/sr.json b/plugins/CorePluginsAdmin/lang/sr.json
index 7f9476d000..e4984a63ab 100644
--- a/plugins/CorePluginsAdmin/lang/sr.json
+++ b/plugins/CorePluginsAdmin/lang/sr.json
@@ -60,7 +60,6 @@
"UninstallConfirm": "Ukoliko deinstalirate dodatak %s, on će biti uklonjen sa vaše platforme i više neće biti moguće vratiti ga. Da li ste sigurni da želite to da uradite?",
"Version": "Verzija",
"ViewAllMarketplacePlugins": "Prikaži sve dodatke sa Marketa",
- "WeDeactivatedThePluginAsItHasMissingDependencies": "Dodatak %s je isključen zato što mu nedostaju zavisnosti:",
"Websites": "Sajtovi"
}
} \ No newline at end of file
diff --git a/plugins/CorePluginsAdmin/lang/uk.json b/plugins/CorePluginsAdmin/lang/uk.json
index 24fa024d2b..f6e16cb654 100644
--- a/plugins/CorePluginsAdmin/lang/uk.json
+++ b/plugins/CorePluginsAdmin/lang/uk.json
@@ -59,7 +59,6 @@
"UninstallConfirm": "Ви збираєтеся видалити плагін %s. Плагін буде безповоротно видалений з системи. Ви впевнені, що хочете зробити це?",
"Version": "Версія",
"ViewAllMarketplacePlugins": "Переглянути всі плагіни Маркету",
- "WeDeactivatedThePluginAsItHasMissingDependencies": "Ми відключили плагін %s так як він має відсутні залежності:",
"Websites": "Сайти"
}
} \ No newline at end of file
diff --git a/plugins/CorePluginsAdmin/lang/zh-cn.json b/plugins/CorePluginsAdmin/lang/zh-cn.json
index 8dee344267..0f09d80bf3 100644
--- a/plugins/CorePluginsAdmin/lang/zh-cn.json
+++ b/plugins/CorePluginsAdmin/lang/zh-cn.json
@@ -3,52 +3,67 @@
"ActionUninstall": "卸载",
"Activate": "启用",
"Activated": "已启用",
- "Active": "已启用",
+ "Active": "活跃",
"Activity": "活动",
+ "AlwaysActivatedPluginsList": "下面的插件总是被启用的并且不可被停用:%s",
"AuthorHomepage": "作者主页",
"Changelog": "修改日志",
- "ChangeSettingsPossible": "你可以%1$s配置%2$s此插件。",
- "CorePluginTooltip": "核心插件没有版本,因为它们由Piwik分配。",
+ "ChangeSettingsPossible": "您可以修改此插件的%1$s设置%2$s。",
+ "CorePluginTooltip": "核心插件没有版本,因为它们是与Piwik一起发布的。",
"Deactivate": "停用",
- "DoMoreContactPiwikAdmins": "要安装新插件或者一个新的主题,请与您的Piwik管理员联系。",
- "ChangeLookByManageThemes": "你可以进入%1$s管理主题%2$s来改变Piwik的外观。",
+ "DoMoreContactPiwikAdmins": "要安装新插件或者的主题,请联系您的 Piwik 管理员。",
+ "ChangeLookByManageThemes": "您可以进入%1$s管理主题%2$s来改变 Piwik 的外观。",
"History": "历史记录",
- "Inactive": "已停用",
- "InfoPluginUpdateIsRecommended": "立即更新您的插件从最新改进中受益。",
- "InfoThemeIsUsedByOtherUsersAsWell": "注意:有其它%1$s个Piwik注册用户也在使用这个主题%2$s。",
+ "Inactive": "不活跃",
+ "InstalledPlugins": "已安装的插件",
+ "InstalledThemes": "已安装的主题",
+ "InfoPluginUpdateIsRecommended": "立即更新您的插件以从最新改进中受益。",
+ "InfoThemeIsUsedByOtherUsersAsWell": "提示:有%1$s个 Piwik 注册用户在使用主题%2$s。",
"InfoThemeUpdateIsRecommended": "更新你的主题,以享受最新版本。",
"InstallNewPlugins": "安装新插件",
"InstallNewThemes": "安装新主题",
- "LicenseHomepage": "许可首页",
+ "LicenseHomepage": "许可证主页",
"LikeThisPlugin": "喜欢这个插件?",
"ConsiderDonating": "考虑捐赠",
- "CommunityContributedPlugin": "这是一个社区贡献的插件,赞助商是免费的。",
- "ConsiderDonatingCreatorOf": "请考虑捐赠给%s的作者",
+ "CommunityContributedPlugin": "这是一个社区贡献的免费插件。",
+ "ConsiderDonatingCreatorOf": "请考虑一下给%s的作者捐赠",
"PluginsExtendPiwik": "插件延伸并扩展了 Piwik 的功能。",
"OncePluginIsInstalledYouMayActivateHere": "当一个插件安装了以后,您可以在这里启用或停用它。",
"MenuPlatform": "平台",
"MissingRequirementsNotice": "请升级%1$s %2$s到最新的版本, %1$s %3$s 是必需的。",
- "MissingRequirementsPleaseInstallNotice": "%3$s的前提是您要先安装 %1$s %2$s。",
- "NoZipFileSelected": "请选择一个ZIP文件",
- "NumUpdatesAvailable": "%s 有更新",
+ "MissingRequirementsPleaseInstallNotice": "安装%3$s前请先安装 %1$s %2$s。",
+ "NoZipFileSelected": "请选择一个ZIP文件。",
+ "NumUpdatesAvailable": "有%s个更新",
+ "NoPluginSettings": "没有可以配置的插件设置",
"Origin": "原始",
"OriginCore": "核心",
+ "OriginOfficial": "官方",
"OriginThirdParty": "第三方",
- "PluginHomepage": "插件首页",
+ "PluginHomepage": "插件主页",
"PluginNotCompatibleWith": "插件 %1$s 与 %2$s 不兼容。",
- "PluginNotWorkingAlternative": "如果您使用这个插件,可以到商城查找更新的版本。如果没有用,可以卸载。",
+ "PluginNotFound": "在文件系统中没有找到插件 %1$s。",
+ "PluginNotFoundAlternative": "如果您正在使用这个插件,请尝试重新上传或者从市场重新安装。否则,点击卸载从列表中删除。",
+ "PluginNotWorkingAlternative": "如果您在使用这个插件,可以到市场查找更新的版本。如果没在用,可以卸载它。",
"PluginRequirement": "%1$s需要%2$s。",
"PluginsManagement": "插件管理",
+ "NotDownloadable": "不可下载",
+ "PluginNotDownloadable": "插件无法下载。",
+ "PluginNotDownloadablePaidReason": "可能是因为使用了过期或超过使用权的许可证。",
+ "PluginActivated": "插件已启用",
"Status": "状态",
- "SuccessfullyActicated": "您已成功激活<strong>%s<\/strong>。",
- "TeaserExtendPiwik": "使用插件主题来扩展Piwik",
- "InstallingNewPluginViaMarketplaceOrUpload": "你可以从市场里自动安装插件,或%1$s上传%2$s一个ZIP格式的插件。",
+ "SuccessfullyActicated": "您已成功启用<strong>%s<\/strong>。",
+ "TeaserExtendPiwik": "使用插件和主题来扩展 Piwik",
+ "TeaserExtendPiwikByPlugin": "您可以通过%1$s从市场里安装插件%2$s或%3$s上传一个 ZIP 格式的插件%4$s来扩充 Piwik 功能。",
+ "TeaserExtendPiwikByTheme": "%1$s安装一个新的主题%2$s来感受一下不同的外观吧。",
+ "InstallingNewPluginViaMarketplaceOrUpload": "你可以从市场里自动安装插件,或%1$s上传%2$s一个.zip格式的插件。",
"Theme": "主题",
"Themes": "主题",
- "ThemesDescription": "主题可以改变Piwik外观,提供一个全新的视觉体验,让您享受分析报告。",
+ "ThemesDescription": "主题可以改变 Piwik 界面外观,提供全新的分析报告视觉体验。",
"ThemesManagement": "管理主题",
- "UninstallConfirm": "你将卸载%s插件。插件将被彻底从您的平台删除,数据将无法恢复。你确定要这么做吗?",
+ "UninstallConfirm": "您正在卸载%s插件。插件将从您的平台彻底删除,无法恢复。您确定要这么做吗?",
"Version": "版本",
+ "ViewAllMarketplacePlugins": "浏览所有的市场插件",
+ "WeCouldNotLoadThePluginAsItHasMissingDependencies": "插件%1$s不能被加载,因为缺少依赖:%2$s",
"Websites": "网站"
}
} \ No newline at end of file
diff --git a/plugins/CorePluginsAdmin/lang/zh-tw.json b/plugins/CorePluginsAdmin/lang/zh-tw.json
index ed9a73b1a8..6621fa1825 100644
--- a/plugins/CorePluginsAdmin/lang/zh-tw.json
+++ b/plugins/CorePluginsAdmin/lang/zh-tw.json
@@ -63,7 +63,7 @@
"UninstallConfirm": "你將要移除外掛 %s。這個外掛將完全從你的平台中刪除,而且操作無法復原。你確定要繼續?",
"Version": "版本",
"ViewAllMarketplacePlugins": "查看市集中的所有外掛",
- "WeDeactivatedThePluginAsItHasMissingDependencies": "我們停用了外掛 %s,因為他遺失了依賴元件:",
+ "WeCouldNotLoadThePluginAsItHasMissingDependencies": "外掛 %1$s 無法載入,因為它遺失了依賴元件:%2$s",
"Websites": "網站"
}
} \ No newline at end of file
diff --git a/plugins/CoreUpdater/SystemSettings.php b/plugins/CoreUpdater/SystemSettings.php
index bc09bfaec5..70bab5bdd1 100644
--- a/plugins/CoreUpdater/SystemSettings.php
+++ b/plugins/CoreUpdater/SystemSettings.php
@@ -100,8 +100,8 @@ class SystemSettings extends \Piwik\Settings\Plugin\SystemSettings
return $this->makeSetting('enable_plugin_update_communication', $default = true, FieldConfig::TYPE_BOOL, function (FieldConfig $field) {
$field->introduction = Piwik::translate('CoreAdminHome_SendPluginUpdateCommunication');
$field->uiControl = FieldConfig::UI_CONTROL_RADIO;
- $field->availableValues = array('1' => Piwik::translate('General_Yes'),
- '0' => sprintf('%s (%s)', Piwik::translate('General_No'), Piwik::translate('General_Default')));
+ $field->availableValues = array('1' => sprintf('%s (%s)', Piwik::translate('General_Yes'), Piwik::translate('General_Default')),
+ '0' => Piwik::translate('General_No'));
$field->inlineHelp = Piwik::translate('CoreAdminHome_SendPluginUpdateCommunicationHelp');
});
}
diff --git a/plugins/CoreUpdater/UpdateCommunication.php b/plugins/CoreUpdater/UpdateCommunication.php
index 971bd16fa0..43271c83dc 100644
--- a/plugins/CoreUpdater/UpdateCommunication.php
+++ b/plugins/CoreUpdater/UpdateCommunication.php
@@ -30,9 +30,13 @@ class UpdateCommunication
*/
public function isEnabled()
{
- $isEnabled = Config::getInstance()->General['enable_update_communication'];
+ $isEnabled = (bool) Config::getInstance()->General['enable_update_communication'];
- return !empty($isEnabled);
+ if($isEnabled === true && SettingsPiwik::isInternetEnabled() === true){
+ return true;
+ }
+
+ return false;
}
/**
diff --git a/plugins/CoreUpdater/lang/de.json b/plugins/CoreUpdater/lang/de.json
index f02471ea36..d654f7cdf2 100644
--- a/plugins/CoreUpdater/lang/de.json
+++ b/plugins/CoreUpdater/lang/de.json
@@ -12,7 +12,7 @@
"ErrorDIYHelp_1": "identifizieren und korrigieren Sie die Quelle des Problems (z.B. memory_limit oder max_execution_time)",
"ErrorDIYHelp_2": "führen Sie die fehlgeschlagenen Befehle zur Aktualisierung nochmal aus",
"ErrorDIYHelp_3": "Aktualisieren Sie die Tabelle `option` in der Datenbank und setzen dabei den Wert version_core auf die aktuelle Version, deren Aktualisierung fehlgeschlagen ist",
- "ErrorDIYHelp_4": "starten Sie die Aktualisierung erneut (im Browser oder auf der Kommandozeile), um die Aktualisierung zu fortzusetzen",
+ "ErrorDIYHelp_4": "Starten Sie die Aktualisierung erneut (im Browser oder auf der Kommandozeile), um die Aktualisierung fortzusetzen",
"ErrorDIYHelp_5": "Melden Sie den Fehler (und die Lösung), um Piwik zu verbessern",
"ErrorDuringPluginsUpdates": "Fehler während Plugin-Aktualisierungen:",
"ExceptionAlreadyLatestVersion": "Ihre Piwik Version %s ist aktuell.",
diff --git a/plugins/CoreUpdater/lang/id.json b/plugins/CoreUpdater/lang/id.json
index 4c48f73553..228ce1007f 100644
--- a/plugins/CoreUpdater/lang/id.json
+++ b/plugins/CoreUpdater/lang/id.json
@@ -1,5 +1,6 @@
{
"CoreUpdater": {
+ "CheckingForPluginUpdates": "Memeriksa untuk pembaruan plugin",
"ClickHereToViewSqlQueries": "Klik di sini untuk melihat dan menyalin daftar kueri SQL yang akan dieksekusi",
"CriticalErrorDuringTheUpgradeProcess": "Kesalahan fatal terjadi selama pembaruan:",
"DatabaseUpgradeRequired": "Membutuhkan Pembaruan Basisdata",
diff --git a/plugins/CoreUpdater/lang/pl.json b/plugins/CoreUpdater/lang/pl.json
index e0bc6c2325..5fba5dd8ff 100644
--- a/plugins/CoreUpdater/lang/pl.json
+++ b/plugins/CoreUpdater/lang/pl.json
@@ -1,5 +1,6 @@
{
"CoreUpdater": {
+ "CheckingForPluginUpdates": "Sprawdzanie aktualizacji wtyczek",
"ClickHereToViewSqlQueries": "Kliknij tutaj, aby wyświetlić i skopiować listę zapytań SQL, która zostanie wykonana",
"CriticalErrorDuringTheUpgradeProcess": "Błąd krytyczny w trakcie procesu aktualizacji:",
"DatabaseUpgradeRequired": "Wymagana aktualizacja bazy danych",
@@ -23,9 +24,18 @@
"HelpMessageIntroductionWhenError": "Powyżej znajduje się główny komunikat o błędzie. To powinno pomóc ustalić przyczynę problemu, ale jeżeli problem wymaga dodatkowej pomocy:",
"HelpMessageIntroductionWhenWarning": "Aktualizacja zakończona sukcesem, jednakże nie obyło się bez problemów podczas tego procesu. Proszę zaposnać się z powyższym opisem by poznać szczegóły. Więcej pomocy możesz uzyskać:",
"HighTrafficPiwikServerEnableMaintenance": "Jeśli zarządzasz serwerem Piwik o dużym ruchu, zalecamy %1$stymczasowo wyłączyć śledzenie odwiedzających i przełączyć Interfejs Użytkownika Piwik w tryb konserwacji%2$s",
+ "IncompatbilePluginsWillBeDisabledInfo": "Uwaga: niektóre wtyczki nie są kompatybilne z Piwik'iem %s. Zostaną one zaktualizowane, jeśli na Marketplace znajduje się aktualizacja, w przeciwnym przypadku zostaną wyłączone podczas aktualizacji:",
"InstallingTheLatestVersion": "Instalowanie najnowszej wersji",
+ "LatestBetaRelease": "Aktualna wersja beta",
+ "LatestStableRelease": "Aktualne wydanie stabilne",
+ "Latest2XStableRelease": "Aktualne stabilne wydanie 2.X",
+ "Latest2XBetaRelease": "Aktualne wydanie beta 2.X",
+ "LtsSupportVersion": "Wersja z wydłużonym okresem wsparcia",
+ "ListOfSqlQueriesFYI": "FYI: oto kwerendy SQL, które zostaną wykonane w celu aktualizacji Twojej bazy Piwik %s",
"MajorUpdateWarning1": "To jest znacząca aktualizacja i potrwa dłużej niż zwykle.",
"MajorUpdateWarning2": "Poniższe porady są szczególnie ważne dla dużych instalacji.",
+ "NeedHelpUpgrading": "Potrzebujesz pomocy przy aktualizacji Piwik'a?",
+ "NeedHelpUpgradingText": "Jeśli potrzebujesz pomocy podczas aktualizacji Twojego Piwik'a, twórcy aplikacji służą Ci pomocą, aby aktualizacja zakończyła się powodzeniem i dostarczają instrukcji, informacji o dobrych praktykach i ciągłego wsparcia. %1$sSkontaktuj się z ekspertami Piwik, aby rozpocząć bezpieczną aktualizację Twojego Piwik'a.%2$s",
"NoteForLargePiwikInstances": "Istotne informacje, w przypadku instalacji statystyk Piwik na dużych portalach",
"NotificationClickToUpdatePlugins": "Kliknij tutaj, aby zaktualizować Twoje pluginy:",
"NotificationClickToUpdateThemes": "Kliknij tutaj aby uaktualnić swój motyw:",
@@ -45,7 +55,20 @@
"UpdateAutomatically": "Aktualizacja automatyczna",
"UpdateHasBeenCancelledExplanation": "Automatyczna jedno-kliknięciowa aktualizacja Piwik została przerwana. Jeżeli nie możesz usunąć przyczyny pojawienia się powyższych komunikatów o błędach, zalecana jest ręczna aktualizacja oprogramowania Piwik. %1$s Prosimy zapoznać się z %2$sdokumentacją aktualizacji%3$s by ponowić ten proces!",
"UpdateTitle": "Aktualizacja",
+ "UpdatingPluginXToVersionY": "Aktualizacja wtyczki %1$s do wersji %2$s",
"UpdateSuccessTitle": "Statystyki Piwik zostały zaktualizowane pomyślnie!",
+ "UpdateErrorTitle": "Błąd aktualizacji",
+ "ThankYouUpdatePiwik": "Dziękujemy za korzystanie z Piwika i jego regularną aktualizację!",
+ "PostUpdateMessage": "Korzystanie i pobieranie Piwika zawsze będzie bezpłatne, jednak potrzebne jest Twoje ciągłe wsparcie, aby mógł być rozwijany i ulepszany.",
+ "PostUpdateSupport": "Potrzebujesz pomocy w korzystaniu z Piwik'a? Wsparcie otrzymasz od twórców:",
+ "ServicesSupport": "Usługi i wsparcie",
+ "CloudHosting": "Hosting w chmurze",
+ "Updating": "Aktualizacja",
+ "UpdateUsingHttpsFailed": "Pobieranie aktualnej wersji Piwik przy pomocy bezpiecznego połączenia HTTPS nie powiodło się z powodu wystąpienia następującego błędu:",
+ "UpdateUsingHttpsFailedHelp": "Dlaczego się nie udało? Pobieranie aktualnej wersji Piwik (poprzez bezpieczne połączenie HTTPS) może zakończyć się niepowodzeniem z wielu przyczyn, takich jak: błąd sieciowy, wolne połączenie czy błędna konfiguracja systemu. Zwróć uwagę na fakt, że może to również oznaczać, że Twój serwer może być celem ataku MITM i ktoś próbuje zamienić aktualizację na spreparowaną wersję Piwik.",
+ "UpdateUsingHttpsFailedHelpWhatToDo": "Zalecamy ponowienie pobierania przy pomocy bezpiecznego połączenia HTTPS, które zabezpiecza przed atakami MITM.",
+ "UsingHttps": "korzystaj z bezpiecznego połączenia HTTPS (zalecane)",
+ "UsingHttp": "korzystaj z niezabezpieczonego połączenia HTTP",
"UpgradeComplete": "Aktualizacja zakończona powodzeniem!",
"UpgradePiwik": "Aktualizacja Piwik",
"VerifyingUnpackedFiles": "Sprawdzenie rozpakowanych plików",
@@ -53,6 +76,8 @@
"WeAutomaticallyDeactivatedTheFollowingPlugins": "Automatycznie wyłączono następujące wtyczki: %s",
"YouCanUpgradeAutomaticallyOrDownloadPackage": "Możesz zaktualizować do wersji %s automatycznie lub pobrać pakiet i zainstalować go ręcznie:",
"YouMustDownloadPackageOrFixPermissions": "Piwik nie jest w stanie zastąpić bieżącej instalacji. Możesz ustawić uprawnienia chmod dla katalogów i plików by to naprawić, lub pobrać i zainstalować ręcznie wersję %s:",
- "YourDatabaseIsOutOfDate": "Twoja baza danych statystyk Piwik jest już nieaktualna, i musi zostać zaktualizowana zanim można będzie kontynuować."
+ "YourDatabaseIsOutOfDate": "Twoja baza danych statystyk Piwik jest już nieaktualna, i musi zostać zaktualizowana zanim można będzie kontynuować.",
+ "ViewVersionChangelog": "Przeglądaj rejestr zmian tej wersji:",
+ "ReceiveEmailBecauseIsSuperUser": "Otrzymujesz tą wiadomość jako Super Użytkownik Piwik na: %s"
}
} \ No newline at end of file
diff --git a/plugins/CoreUpdater/lang/ru.json b/plugins/CoreUpdater/lang/ru.json
index ba2b10669a..4fca0249f6 100644
--- a/plugins/CoreUpdater/lang/ru.json
+++ b/plugins/CoreUpdater/lang/ru.json
@@ -33,6 +33,7 @@
"LtsSupportVersion": "Версия Долгосрочной поддержки",
"MajorUpdateWarning1": "Это большое обновление! Может потребоваться больше времени, чем обычно.",
"MajorUpdateWarning2": "Следующий совет особенно важен для больших обновлений!",
+ "NeedHelpUpgrading": "Нужна помощь в апгрейдинге Piwik?",
"NoteForLargePiwikInstances": "Важное замечание для больших инсталляций Piwik",
"NotificationClickToUpdatePlugins": "Для обновления плагинов, нажмите сюда:",
"NotificationClickToUpdateThemes": "Для обновления тем нажмите сюда:",
@@ -58,6 +59,7 @@
"ThankYouUpdatePiwik": "Спасибо за то, что пользуетесь Piwik и обновляете его!",
"PostUpdateMessage": "Piwik всегда будет свободным для скачивания и использования, но ему нужна постоянная поддержка чтобы расти и улучшаться.",
"PostUpdateSupport": "Если вам нужна помощь в использовании Piwik, то вы сможете получить поддержку от его создателей:",
+ "ServicesSupport": "Сервисы и поддержка",
"CloudHosting": "Облачный хостинг",
"Updating": "Обновление",
"UpdateUsingHttpsFailed": "Не удалось скачать последнюю версию Piwik по безопасному HTTPS, возникла следующая ошибка:",
diff --git a/plugins/CoreUpdater/lang/zh-cn.json b/plugins/CoreUpdater/lang/zh-cn.json
index 9df4ae67a0..9079252fd1 100644
--- a/plugins/CoreUpdater/lang/zh-cn.json
+++ b/plugins/CoreUpdater/lang/zh-cn.json
@@ -1,75 +1,83 @@
{
"CoreUpdater": {
- "ClickHereToViewSqlQueries": "选择这里来查看并复制即将执行的 SQL 语句列表",
- "CriticalErrorDuringTheUpgradeProcess": "在升级过程中发生严重的错误:",
+ "CheckingForPluginUpdates": "检查插件更新",
+ "ClickHereToViewSqlQueries": "点击这里查看并复制即将执行的 SQL 语句列表",
+ "CriticalErrorDuringTheUpgradeProcess": "在升级过程中发生严重的错误:",
"DatabaseUpgradeRequired": "数据库需要升级",
- "DisablingIncompatiblePlugins": "禁用不兼容的插件: %s",
+ "DisablingIncompatiblePlugins": "正在停用不兼容的插件:%s",
"DownloadingUpdateFromX": "正在从 %s 下载新版本",
"DownloadX": "下载 %s",
"EmptyDatabaseError": "数据库 %s 是空的。您可能要编辑或移除您的 Piwik 配置文件。",
- "ErrorDIYHelp": "如果您是高级用户,在升级数据库时发生错误:",
- "ErrorDIYHelp_1": "识别并修复问题来源(例如 memory_limit 或 max_execution_time)",
+ "ErrorDIYHelp": "如果您是高级用户,在升级数据库时遇到错误:",
+ "ErrorDIYHelp_1": "识别并修复问题根源(例如 memory_limit 或 max_execution_time)",
"ErrorDIYHelp_2": "执行升级失败时剩余的 SQL 语法",
- "ErrorDIYHelp_3": "手动更新您的 Piwik 数据库內的 'option' 数据表,version_core 的设定值更新失败",
- "ErrorDIYHelp_4": "重新执行更新程序(通过浏览器或指令列)来继续剩余的更新",
- "ErrorDIYHelp_5": "报告问题(或解決办法)以改善 Piwik",
- "ErrorDuringPluginsUpdates": "插件升级期间发生错误:",
+ "ErrorDIYHelp_3": "手动更新您 Piwik 数据库内的“option”数据表,设置 version_core 的值为更新失败的版本",
+ "ErrorDIYHelp_4": "重新执行更新程序(通过浏览器或命令行)继续剩余的更新",
+ "ErrorDIYHelp_5": "报告问题(及解決办法)以帮助 Piwik 改进",
+ "ErrorDuringPluginsUpdates": "插件升级期间发生错误:",
"ExceptionAlreadyLatestVersion": "您的 Piwik 版本 %s 是最新的。",
- "ExceptionArchiveEmpty": "空的文件。",
- "ExceptionArchiveIncompatible": "不兼容的文件: %s",
- "ExceptionArchiveIncomplete": "文件不完整: 缺少部分文件(例如 %s)。",
+ "ExceptionArchiveEmpty": "空的归档文件。",
+ "ExceptionArchiveIncompatible": "不兼容的归档文件:%s",
+ "ExceptionArchiveIncomplete": "归档文件不完整:缺少部分文件(例如 %s)。",
"FeedbackRequest": "随时在这里给Piwik团队分享你的想法和建议:",
- "HelpMessageContent": "请检查 %1$s Piwik FAQ %2$s ,在其中已试图解释最常见的升级过程中的错误。 %3$s 请询问您的系统管理员 - 他们可以协助您解决几乎所有有关您的服务器或 MySQL 设定的问题!",
+ "HelpMessageContent": "请检查%1$s Piwik 常见问题列表%2$s ,在其中已试图解释最常见的升级过程中的错误。 %3$s请询问您的系统管理员——他们可以协助您解决几乎所有关于您服务器或 MySQL 设定的问题!",
"HelpMessageIntroductionWhenError": "以上是核心的错误讯息。它应有助于解释原因,但如果您需要进一步的说明,请:",
"HelpMessageIntroductionWhenWarning": "此次升级成功完成,但在过程中有发生一些问题,请仔细阅读上面的详细说明。如需更进一步的说明:",
- "HighTrafficPiwikServerEnableMaintenance": "如果你管理一个高流量的Piwik服务器,我们建议您 %1$s暂时禁止访问者跟踪,并设置Piwik用户界面为维护模式%2$s。",
+ "HighTrafficPiwikServerEnableMaintenance": "如果你管理一个高流量的Piwik服务器,我们建议您%1$s暂时禁止访问者跟踪,并设置Piwik用户界面为维护模式%2$s。",
+ "IncompatbilePluginsWillBeDisabledInfo": "注意:某些插件与Piwik不兼容%s。当您升级时,如果市场中有它的更新,我们将会升级它,否则将被禁用:",
"InstallingTheLatestVersion": "正在安装最新版本",
- "LatestBetaRelease": "最新测试版",
- "LatestStableRelease": "最新的稳定版本",
- "Latest2XStableRelease": "最新的稳定 2.X",
- "Latest2XBetaRelease": "最新的测试版 2.X",
+ "LatestBetaRelease": "最新测试版本",
+ "LatestStableRelease": "最新稳定版本",
+ "Latest2XStableRelease": "最新的 2.X 稳定版本",
+ "Latest2XBetaRelease": "最新的 2.X 测试版本",
"LtsSupportVersion": "长期支持版本",
+ "ListOfSqlQueriesFYI": "谨供参考:这是升级您的数据库到 Piwiki%s所要执行的 SQL 语句",
"MajorUpdateWarning1": "这是全面升级!会比平时多花些时间。",
- "MajorUpdateWarning2": "下面的建议对大型网站很重要。",
+ "MajorUpdateWarning2": "下面的建议对大型网站格外重要。",
+ "NeedHelpUpgrading": "升级 PIwik 时需要帮助?",
+ "NeedHelpUpgradingText": "如果您在升级 Piwik 时需要技术支持,Piwik 的创建者可以帮助您成功升级 Piwik,还可以提供包括指导、最佳实践和持续支持在内的所有帮助。%1$s联系 Piwik 专家开始安全升级您的 Piwik。%2$s",
"NoteForLargePiwikInstances": "大型 Piwik 网站重要注意事项",
- "NotificationClickToUpdatePlugins": "点击这里更新你的插件:",
- "NotificationClickToUpdateThemes": "点击这里现在就更新你的主题",
- "NotificationSubjectAvailableCoreUpdate": "有一个全新的版本Piwik %s",
- "NotificationSubjectAvailablePluginUpdate": "Piwik插件有可用的更新",
+ "NotificationClickToUpdatePlugins": "点击这里立即更新您的插件:",
+ "NotificationClickToUpdateThemes": "点击这里立即更新您的主题:",
+ "NotificationSubjectAvailableCoreUpdate": "有新版本 Piwik %s 了",
+ "NotificationSubjectAvailablePluginUpdate": "Piwik 插件有更新",
"PiwikHasBeenSuccessfullyUpgraded": "Piwik 升级成功!",
"PiwikUpdatedSuccessfully": "Piwik 升级成功!",
"PiwikWillBeUpgradedFromVersionXToVersionY": "Piwik 数据库将从版本 %1$s 升级到新版本 %2$s。",
"ReadyToGo": "准备好了吗?",
- "TheFollowingPluginsWillBeUpgradedX": "以下插件将被升级: %s!",
+ "TheFollowingPluginsWillBeUpgradedX": "以下插件将被升级: %s。",
"TheFollowingDimensionsWillBeUpgradedX": "将更新以下内容: %s。",
- "ThereIsNewPluginVersionAvailableForUpdate": "您使用的一些插件已经在市场里有了更新:",
- "ThereIsNewVersionAvailableForUpdate": "已经有新的Piwik版本可以升级",
- "TheUpgradeProcessMayFailExecuteCommand": "如果您有一个大型的 Piwik 数据库,通过浏览器更新可能需要花费很长时间。在此情況下,您可以通过下面的命令行来更新: %s",
- "TheUpgradeProcessMayTakeAWhilePleaseBePatient": "升级过程可能需要一段时间,请耐心等待!",
+ "ThereIsNewPluginVersionAvailableForUpdate": "您使用的一些插件在市场里已经有更新了:",
+ "ThereIsNewVersionAvailableForUpdate": "Piwik有新版本可以升级",
+ "TheUpgradeProcessMayFailExecuteCommand": "如果您有一个大型的 Piwik 数据库,通过浏览器更新可能需要花费很长时间。在此情況下,您可以通过命令行来更新: %s",
+ "TheUpgradeProcessMayTakeAWhilePleaseBePatient": "升级过程可能需要一段时间,请耐心等待。",
"UnpackingTheUpdate": "正在解压新版本",
"UpdateAutomatically": "自动升级",
- "UpdateHasBeenCancelledExplanation": "Piwik 一键升级已被取消。如果您无法修正以上的错误信息,建议您手动升级 Piwik。%1$s 请查看 %2$s升级文件%3$s 来开始吧!",
+ "UpdateHasBeenCancelledExplanation": "Piwik 一键升级已被取消。如果您无法修正以上的错误信息,建议您手动升级 Piwik。%1$s 请查看 %2$s升级说明%3$s 准备开始吧!",
"UpdateTitle": "升级",
+ "UpdatingPluginXToVersionY": "升级插件%1$s到版本%2$s",
"UpdateSuccessTitle": "Piwik 升级成功!",
- "UpdateErrorTitle": "更新错误",
+ "UpdateErrorTitle": "升级出错",
"ThankYouUpdatePiwik": "感谢您使用Piwik并保持及时更新!",
- "PostUpdateMessage": "Piwik将永远是免费下载和使用,但它需要你们继续支持增长和提高。",
- "PostUpdateSupport": "如果你需要使用Piwik帮助,您可以从它的创造者那里获取支持:",
+ "PostUpdateMessage": "Piwik将永远免费下载和使用,但它的提高和改进需要您的持续支持。",
+ "PostUpdateSupport": "如果在使用Piwik时需要帮助,您可以通过它的创建者获得支持:",
+ "ServicesSupport": "服务与支持",
"CloudHosting": "云主机",
"Updating": "更新中",
- "UpdateUsingHttpsFailed": "下载最新版本的Piwik通过安全的HTTPS连接没有成功,因为以下错误:",
- "UpdateUsingHttpsFailedHelp": "为什么会失败?下载最新版本的Piwik(超过安全的HTTPS连接)可能会失败,因为各种原因,例如,因为网络故障,网络速度慢或错误的系统配置。请注意,这也可能意味着你的服务器是MITM攻击的目标,有人正在尝试将Piwik的更新文件替换。",
- "UpdateUsingHttpsFailedHelpWhatToDo": "建议重试使用安全的HTTPS连接下载,因为它能防止MITM攻击。",
- "UsingHttps": "使用安全的HTTPS连接(推荐)",
- "UsingHttp": "使用非安全HTTP连接",
+ "UpdateUsingHttpsFailed": "由于以下错误,通过安全的HTTPS连接下载最新版本Piwik失败了:",
+ "UpdateUsingHttpsFailedHelp": "为什么会失败?下载最新版本的Piwik(通过安全的HTTPS连接)可能由于各种原因而失败,例如,网络故障,网络速度慢或错误的系统配置。请注意,这也有可能意味着您的服务器是MITM(中间人)攻击的目标,有人想把Piwik的更新文件用含有恶意代码的版本替换掉。",
+ "UpdateUsingHttpsFailedHelpWhatToDo": "建议使用能防止MITM攻击的安全HTTPS连接重新下载。",
+ "UsingHttps": "使用安全的HTTPS连接(推荐)",
+ "UsingHttp": "使用不安全的HTTP连接",
"UpgradeComplete": "升级完成!",
"UpgradePiwik": "升级 Piwik",
"VerifyingUnpackedFiles": "正在验证解压后的文件",
- "WarningMessages": "警告讯息:",
- "WeAutomaticallyDeactivatedTheFollowingPlugins": "我们自动停用了以下的插件: %s",
- "YouCanUpgradeAutomaticallyOrDownloadPackage": "您可以自动升级到版本%s,或者下载安装包手动安装:",
- "YouMustDownloadPackageOrFixPermissions": "Piwik 无法覆盖您之前的安裝。您可以直接修改目录\/文件权限,或是下载压缩包然后手动安裝 %s 版本:",
- "YourDatabaseIsOutOfDate": "您的 Piwik 数据库版本太旧了,必须先升级才能继续!",
- "ViewVersionChangelog": "查看该版本的更新日志:"
+ "WarningMessages": "警告信息:",
+ "WeAutomaticallyDeactivatedTheFollowingPlugins": "我们自动停用了以下插件: %s",
+ "YouCanUpgradeAutomaticallyOrDownloadPackage": "您可以自动升级到版本%s,或者下载软件包并手动安装:",
+ "YouMustDownloadPackageOrFixPermissions": "Piwik 无法覆盖您目前的安裝。您可以直接修改目录、文件的权限,或是下载软件包然后手动安装 %s 版本:",
+ "YourDatabaseIsOutOfDate": "您的 Piwik 数据库版本太旧了,必须先升级才能继续。",
+ "ViewVersionChangelog": "查看该版本的更新日志:",
+ "ReceiveEmailBecauseIsSuperUser": "您会收到本邮件是源于您是 Piwik %s 的管理员"
}
} \ No newline at end of file
diff --git a/plugins/CoreVisualizations/javascripts/seriesPicker.js b/plugins/CoreVisualizations/javascripts/seriesPicker.js
index 2e4f968a14..f1e8c7eb3a 100644
--- a/plugins/CoreVisualizations/javascripts/seriesPicker.js
+++ b/plugins/CoreVisualizations/javascripts/seriesPicker.js
@@ -266,8 +266,8 @@
}
});
- var noRowSelected = this._pickerPopover.find('.pickRow').size() > 0
- && this._pickerPopover.find('.pickRow input:checked').size() == 0;
+ var noRowSelected = this._pickerPopover.find('.pickRow').length > 0
+ && this._pickerPopover.find('.pickRow input:checked').length === 0;
if (columns.length > 0 && !noRowSelected) {
$(this).trigger('seriesPicked', [columns, rows]);
diff --git a/plugins/CoreVisualizations/stylesheets/jqplot.css b/plugins/CoreVisualizations/stylesheets/jqplot.css
index 025c179847..ef08f1292f 100644
--- a/plugins/CoreVisualizations/stylesheets/jqplot.css
+++ b/plugins/CoreVisualizations/stylesheets/jqplot.css
@@ -157,6 +157,12 @@ a.rowevolution-startmulti {
font-weight: bold;
}
+.rowevolution table.metrics td.text img {
+ max-width: 16px;
+ max-height: 16px;
+ vertical-align: bottom;
+}
+
.multirowevolution table.metrics td.text {
padding-top: 8px;
}
@@ -190,6 +196,7 @@ a.rowevolution-startmulti {
color: #444;
margin: 8px 0 0 0;
padding: 0;
+ display: block;
}
/**
diff --git a/plugins/CustomAlerts b/plugins/CustomAlerts
-Subproject 6fd36a5531331e94cfef770641b8ee4d76fdebb
+Subproject c61c515a0505b483b673c35dee8d05363876e44
diff --git a/plugins/CustomDimensions b/plugins/CustomDimensions
-Subproject 1106815d3bd9e1cd562d8863d15c040dbd363ba
+Subproject b06e443fe307963929b2a9701929586b8c2fa76
diff --git a/plugins/CustomPiwikJs/API.php b/plugins/CustomPiwikJs/API.php
index dc028e1de9..78bfc0c09b 100644
--- a/plugins/CustomPiwikJs/API.php
+++ b/plugins/CustomPiwikJs/API.php
@@ -8,6 +8,7 @@
namespace Piwik\Plugins\CustomPiwikJs;
+use Piwik\Container\StaticContainer;
use Piwik\Piwik;
use Piwik\Plugins\CustomPiwikJs\Exception\AccessDeniedException;
@@ -28,7 +29,7 @@ class API extends \Piwik\Plugin\API
Piwik::checkUserHasSomeAdminAccess();
try {
- $updater = new TrackerUpdater();
+ $updater = StaticContainer::get('Piwik\Plugins\CustomPiwikJs\TrackerUpdater');
$updater->checkWillSucceed();
return true;
} catch (AccessDeniedException $e) {
diff --git a/plugins/CustomPiwikJs/Commands/UpdateTracker.php b/plugins/CustomPiwikJs/Commands/UpdateTracker.php
index 1bdbd7e5f3..6da2ab3684 100644
--- a/plugins/CustomPiwikJs/Commands/UpdateTracker.php
+++ b/plugins/CustomPiwikJs/Commands/UpdateTracker.php
@@ -8,6 +8,7 @@
namespace Piwik\Plugins\CustomPiwikJs\Commands;
+use Piwik\Container\StaticContainer;
use Piwik\Plugin\ConsoleCommand;
use Piwik\Plugins\CustomPiwikJs\TrackerUpdater;
use Piwik\Plugins\CustomPiwikJs\TrackingCode\PluginTrackerFiles;
@@ -44,7 +45,7 @@ class UpdateTracker extends ConsoleCommand
public function updateTracker($sourceFile, $targetFile, $ignoreMinified)
{
- $pluginTrackerFiles = new PluginTrackerFiles();
+ $pluginTrackerFiles = StaticContainer::get('Piwik\Plugins\CustomPiwikJs\TrackingCode\PluginTrackerFiles');
if ($ignoreMinified) {
if (empty($sourceFile) || $sourceFile === $this->getPathOriginalPiwikJs()) {
diff --git a/plugins/CustomPiwikJs/CustomPiwikJs.php b/plugins/CustomPiwikJs/CustomPiwikJs.php
index 0230ce4d56..b4028c8120 100644
--- a/plugins/CustomPiwikJs/CustomPiwikJs.php
+++ b/plugins/CustomPiwikJs/CustomPiwikJs.php
@@ -8,6 +8,7 @@
namespace Piwik\Plugins\CustomPiwikJs;
+use Piwik\Container\StaticContainer;
use Piwik\Log;
use Piwik\Plugin;
@@ -30,8 +31,10 @@ class CustomPiwikJs extends Plugin
public function updateTracker()
{
try {
- $trackerUpdater = new TrackerUpdater();
- $trackerUpdater->update();
+ if (Plugin\Manager::getInstance()->isPluginActivated('CustomPiwikJs')) {
+ $trackerUpdater = StaticContainer::get('Piwik\Plugins\CustomPiwikJs\TrackerUpdater');
+ $trackerUpdater->update();
+ }
} catch (\Exception $e) {
Log::error('There was an error while updating the javascript tracker: ' . $e->getMessage());
}
diff --git a/plugins/CustomPiwikJs/File.php b/plugins/CustomPiwikJs/File.php
index 03d874e61d..4d167d72fb 100644
--- a/plugins/CustomPiwikJs/File.php
+++ b/plugins/CustomPiwikJs/File.php
@@ -52,6 +52,11 @@ class File
return file_get_contents($this->file);
}
+ public function getPath()
+ {
+ return $this->file;
+ }
+
public function getName()
{
return basename($this->file);
diff --git a/plugins/CustomPiwikJs/Tasks.php b/plugins/CustomPiwikJs/Tasks.php
index 1bb1bae384..4e9688937c 100644
--- a/plugins/CustomPiwikJs/Tasks.php
+++ b/plugins/CustomPiwikJs/Tasks.php
@@ -8,6 +8,8 @@
namespace Piwik\Plugins\CustomPiwikJs;
+use Piwik\Container\StaticContainer;
+
class Tasks extends \Piwik\Plugin\Tasks
{
public function schedule()
@@ -17,7 +19,7 @@ class Tasks extends \Piwik\Plugin\Tasks
public function updateTracker()
{
- $updater = new TrackerUpdater();
+ $updater = StaticContainer::get('Piwik\Plugins\CustomPiwikJs\TrackerUpdater');
$updater->update();
}
}
diff --git a/plugins/CustomPiwikJs/TrackerUpdater.php b/plugins/CustomPiwikJs/TrackerUpdater.php
index d90d8c166d..add1c0dd20 100644
--- a/plugins/CustomPiwikJs/TrackerUpdater.php
+++ b/plugins/CustomPiwikJs/TrackerUpdater.php
@@ -8,11 +8,15 @@
namespace Piwik\Plugins\CustomPiwikJs;
+use Piwik\Container\StaticContainer;
use Piwik\Plugins\CustomPiwikJs\TrackingCode\PiwikJsManipulator;
use Piwik\Plugins\CustomPiwikJs\TrackingCode\PluginTrackerFiles;
/**
- * Updates the Javascript file containing the Tracker.
+ * Updates the Piwik JavaScript Tracker "piwik.js" in case plugins extend the tracker.
+ *
+ * Usage:
+ * StaticContainer::get('Piwik\Plugins\CustomPiwikJs\TrackerUpdater')->update();
*/
class TrackerUpdater
{
@@ -46,9 +50,35 @@ class TrackerUpdater
$toFile = PIWIK_DOCUMENT_ROOT . self::TARGET_PIWIK_JS;
}
- $this->fromFile = new File($fromFile);
- $this->toFile = new File($toFile);
- $this->trackerFiles = new PluginTrackerFiles();
+ $this->setFromFile($fromFile);
+ $this->setToFile($toFile);
+ $this->trackerFiles = StaticContainer::get('Piwik\Plugins\CustomPiwikJs\TrackingCode\PluginTrackerFiles');
+ }
+
+ public function setFromFile($fromFile)
+ {
+ if (is_string($fromFile)) {
+ $fromFile = new File($fromFile);
+ }
+ $this->fromFile = $fromFile;
+ }
+
+ public function getFromFile()
+ {
+ return $this->fromFile;
+ }
+
+ public function setToFile($toFile)
+ {
+ if (is_string($toFile)) {
+ $toFile = new File($toFile);
+ }
+ $this->toFile = $toFile;
+ }
+
+ public function getToFile()
+ {
+ return $this->toFile;
}
public function setTrackerFiles(PluginTrackerFiles $trackerFiles)
@@ -56,6 +86,12 @@ class TrackerUpdater
$this->trackerFiles = $trackerFiles;
}
+ /**
+ * Checks whether the Piwik JavaScript tracker file "piwik.js" is writable.
+ * @throws \Exception In case the piwik.js file is not writable.
+ *
+ * @api
+ */
public function checkWillSucceed()
{
$this->fromFile->checkReadable();
@@ -75,6 +111,15 @@ class TrackerUpdater
return $newContent;
}
+ /**
+ * Updates / re-generates the Piwik JavaScript tracker "piwik.js".
+ *
+ * It may not be possible to update the "piwik.js" tracker file if the file is not writable. It won't throw
+ * an exception in such a case and instead just to nothing. To check if the update would succeed, call
+ * {@link checkWillSucceed()}.
+ *
+ * @api
+ */
public function update()
{
if (!$this->toFile->hasWriteAccess() || !$this->fromFile->hasReadAccess()) {
diff --git a/plugins/CustomPiwikJs/TrackingCode/PluginTrackerFiles.php b/plugins/CustomPiwikJs/TrackingCode/PluginTrackerFiles.php
index f114565990..a3987b2004 100644
--- a/plugins/CustomPiwikJs/TrackingCode/PluginTrackerFiles.php
+++ b/plugins/CustomPiwikJs/TrackingCode/PluginTrackerFiles.php
@@ -7,7 +7,7 @@
*/
namespace Piwik\Plugins\CustomPiwikJs\TrackingCode;
-use Piwik\Filesystem;
+use Piwik\Piwik;
use Piwik\Plugin;
use Piwik\Plugins\CustomPiwikJs\File;
@@ -71,9 +71,32 @@ class PluginTrackerFiles
}
}
+ foreach ($jsFiles as $plugin => $file) {
+ if (!$this->shouldIncludeFile($plugin)) {
+ unset($jsFiles[$plugin]);
+ }
+ }
+
return $jsFiles;
}
+ protected function shouldIncludeFile($pluginName)
+ {
+ $shouldAddFile = true;
+
+ /**
+ * Detect if a custom tracker file should be added to the piwik.js tracker or not.
+ *
+ * This is useful for example if a plugin only wants to add its tracker file when the plugin is configured.
+ *
+ * @param bool &$shouldAddFile Decides whether the tracker file belonging to the given plugin should be added or not.
+ * @param string $pluginName The name of the plugin this file belongs to
+ */
+ Piwik::postEvent('CustomPiwikJs.shouldAddTrackerFile', array(&$shouldAddFile, $pluginName));
+
+ return $shouldAddFile;
+ }
+
protected function isPluginActivated($pluginName)
{
return $this->pluginManager->isPluginActivated($pluginName);
diff --git a/plugins/CustomPiwikJs/lang/id.json b/plugins/CustomPiwikJs/lang/id.json
new file mode 100644
index 0000000000..1e2c445b43
--- /dev/null
+++ b/plugins/CustomPiwikJs/lang/id.json
@@ -0,0 +1,5 @@
+{
+ "CustomPiwikJs": {
+ "DiagnosticPiwikJsWritable": "Pelacak JavaScript yang Dapat Ditulis (\"\/piwik.js\")"
+ }
+} \ No newline at end of file
diff --git a/plugins/CustomPiwikJs/lang/pl.json b/plugins/CustomPiwikJs/lang/pl.json
new file mode 100644
index 0000000000..36b1493cc4
--- /dev/null
+++ b/plugins/CustomPiwikJs/lang/pl.json
@@ -0,0 +1,8 @@
+{
+ "CustomPiwikJs": {
+ "PluginDescription": "Pozwala dowolnej wtyczce rozszerzyć JavaScript'owy plik Śledzenia Piwik'a (piwik.js) i dodawać nowe funkcjonalności i możliwości mierzenia serwisu.",
+ "DiagnosticPiwikJsWritable": "Zapisywalny Traker JavaScript (\"\/piwik.js\")",
+ "DiagnosticPiwikJsNotWritable": "Plik JavaScript'owego trakera Piwik \"\/piwik.js\" nie jest zapisywalny, co oznacza, że inne wtyczki nie mogą rozszerzać trakera. W przyszłości możliwe jest, że nawet niektóre core'owe funkcjonalności mogą nie działać zgodnie z oczekiwaniami.",
+ "DiagnosticPiwikJsMakeWritable": "Sugerujemy uczynić plik Piwik,.js zapisywalnym poprzez wywołanie następującej komendy: %s"
+ }
+} \ No newline at end of file
diff --git a/plugins/CustomPiwikJs/lang/sv.json b/plugins/CustomPiwikJs/lang/sv.json
new file mode 100644
index 0000000000..14b5b302ec
--- /dev/null
+++ b/plugins/CustomPiwikJs/lang/sv.json
@@ -0,0 +1,8 @@
+{
+ "CustomPiwikJs": {
+ "PluginDescription": "Låter alla plugins utöka Piwiks trackfil (piwik.js) med ny funktionalitet och webbplatsmätningsmöjligheter.",
+ "DiagnosticPiwikJsWritable": "Skrivbar javskript-tracker (\"\/piwik.js\")",
+ "DiagnosticPiwikJsNotWritable": "Piwiks javaskriptbaserade trackingfil \"\/piwik.js\" är inte ksrivbar vilket innebär att andra plugins inte kan utöka den. Det är möjligt att framtida funktionalitet i Piwik också kan påverkas.",
+ "DiagnosticPiwikJsMakeWritable": "Vi rekommenderar att göra piwik.js skrivbar genom att köra detta kommando: %s"
+ }
+} \ No newline at end of file
diff --git a/plugins/CustomPiwikJs/lang/tr.json b/plugins/CustomPiwikJs/lang/tr.json
index 0f24431c6b..a52361cea9 100644
--- a/plugins/CustomPiwikJs/lang/tr.json
+++ b/plugins/CustomPiwikJs/lang/tr.json
@@ -1,7 +1,8 @@
{
"CustomPiwikJs": {
+ "PluginDescription": "Piwik JavaScript İzleme dosyasına (piwik.js) tüm uygulama eklerinin katkıda bulunmasını sağlayarak yeni özellik ve web sitesi ölçüm yetenekleri ekler.",
"DiagnosticPiwikJsWritable": "Yazılabilir JavaScript İzleyici (\"\/piwik.js\")",
- "DiagnosticPiwikJsNotWritable": "\"\/piwik.js\" Piwik JavaScript izleyici dosyası yazılabilir olmadığından diğer uygulama ekleri JavaScript izleyiciyi kullanamaz. İleride bazı temel özellikler de beklendiği gibi çalışmayabilir.",
- "DiagnosticPiwikJsMakeWritable": "Piwik.js dosyasını şu komutu kullanarak yazılabilir yapmanız önerilir: %s"
+ "DiagnosticPiwikJsNotWritable": "\"\/piwik.js\" Piwik JavaScript izleyici dosyası yazılabilir olmadığından diğer uygulama ekleri JavaScript İzleyiciyi kullanamaz. İleride bazı temel özellikler de beklendiği gibi çalışmayabilir.",
+ "DiagnosticPiwikJsMakeWritable": "Şu komutu kullanarak piwik.js dosyasını yazılabilir yapmanız önerilir: %s"
}
} \ No newline at end of file
diff --git a/plugins/CustomPiwikJs/lang/zh-cn.json b/plugins/CustomPiwikJs/lang/zh-cn.json
new file mode 100644
index 0000000000..66dc01c6c7
--- /dev/null
+++ b/plugins/CustomPiwikJs/lang/zh-cn.json
@@ -0,0 +1,8 @@
+{
+ "CustomPiwikJs": {
+ "PluginDescription": "允许任意插件扩展 Piwik Javascript 追踪文件(piwik.js)并添加新的功能及网站测度能力。",
+ "DiagnosticPiwikJsWritable": "可写的 Javascript 追踪器(“\/piwik.js”)",
+ "DiagnosticPiwikJsNotWritable": "Piwik Javascript 追踪器文件“\/piwiki.js”不可以写,这意味着其他插件无法扩展 Javascript 追踪器。将来甚至某些核心功能也可能无法像预期一样正常工作。",
+ "DiagnosticPiwikJsMakeWritable": "我们建议通过运行这条命令来使 Piwki.js 文件可写:%s"
+ }
+} \ No newline at end of file
diff --git a/plugins/CustomPiwikJs/tests/Integration/FileTest.php b/plugins/CustomPiwikJs/tests/Integration/FileTest.php
index aa8cee9c5d..dcc5131ab5 100644
--- a/plugins/CustomPiwikJs/tests/Integration/FileTest.php
+++ b/plugins/CustomPiwikJs/tests/Integration/FileTest.php
@@ -98,6 +98,11 @@ class FileTest extends IntegrationTestCase
$this->assertSame('notExisTinGFile.js', $this->makeNotReadableFile()->getName());
}
+ public function test_getPath()
+ {
+ $this->assertSame($this->dir . 'notExisTinGFile.js', $this->makeNotReadableFile()->getPath());
+ }
+
public function test_hasReadAccess()
{
$this->assertTrue($this->makeFile()->hasReadAccess());
diff --git a/plugins/CustomPiwikJs/tests/Integration/PluginTrackerFilesTest.php b/plugins/CustomPiwikJs/tests/Integration/PluginTrackerFilesTest.php
index 8c0cd2ee01..edd913ae9c 100644
--- a/plugins/CustomPiwikJs/tests/Integration/PluginTrackerFilesTest.php
+++ b/plugins/CustomPiwikJs/tests/Integration/PluginTrackerFilesTest.php
@@ -8,6 +8,7 @@
namespace Piwik\Plugins\CustomPiwikJs\tests\Integration;
+use Piwik\Piwik;
use Piwik\Plugins\CustomPiwikJs\TrackingCode\PluginTrackerFiles;
use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
@@ -83,6 +84,24 @@ class PluginTrackerFilesTest extends IntegrationTestCase
$this->assertEquals('tracker.min.js', $foundFiles['Goals']->getName());
}
+ public function test_find_EventsCanIgnoreFiles()
+ {
+ $trackerFiles = new CustomPluginTrackerFiles('CustomPiwikJs', 'Goals');
+ $foundFiles = $trackerFiles->find();
+ $this->assertCount(2, $foundFiles);
+
+ Piwik::addAction('CustomPiwikJs.shouldAddTrackerFile', function (&$shouldAdd, $pluginName) {
+ if ($pluginName === 'Goals') {
+ $shouldAdd = false;
+ }
+ });
+
+ $foundFiles = $trackerFiles->find();
+ $this->assertCount(1, $foundFiles);
+ $this->assertTrue(isset($foundFiles['CustomPiwikJs']));
+ $this->assertFalse(isset($foundFiles['Goals']));
+ }
+
public function test_find_shouldNotReturnATrackerFile_IfPluginIsNotActivatedOrLoaded()
{
$trackerFiles = new CustomPluginTrackerFiles('MyNotExistingPlugin', 'Goals');
diff --git a/plugins/CustomPiwikJs/tests/Integration/TrackerUpdaterTest.php b/plugins/CustomPiwikJs/tests/Integration/TrackerUpdaterTest.php
index ef90785a5f..95d44f9c07 100644
--- a/plugins/CustomPiwikJs/tests/Integration/TrackerUpdaterTest.php
+++ b/plugins/CustomPiwikJs/tests/Integration/TrackerUpdaterTest.php
@@ -8,6 +8,7 @@
namespace Piwik\Plugins\CustomPiwikJs\tests\Integration;
+use Piwik\Plugins\CustomPiwikJs\File;
use Piwik\Plugins\CustomPiwikJs\tests\Framework\Mock\PluginTrackerFilesMock;
use Piwik\Plugins\CustomPiwikJs\TrackerUpdater;
use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
@@ -50,6 +51,52 @@ class TrackerUpdaterTest extends IntegrationTestCase
return new TrackerUpdater($from, $to);
}
+ public function test_construct_setsDefaults()
+ {
+ $updater = $this->makeUpdater();
+ $fromFile = $updater->getFromFile();
+ $toFile = $updater->getToFile();
+ $this->assertTrue($fromFile instanceof File);
+ $this->assertTrue($toFile instanceof File);
+
+ $this->assertSame(basename(TrackerUpdater::ORIGINAL_PIWIK_JS), $fromFile->getName());
+ $this->assertSame(basename(TrackerUpdater::TARGET_PIWIK_JS), $toFile->getName());
+ }
+
+ public function test_setFormFile_getFromFile()
+ {
+ $updater = $this->makeUpdater();
+ $testFile = new File('foobar');
+ $updater->setFromFile($testFile);
+
+ $this->assertSame($testFile, $updater->getFromFile());
+ }
+
+ public function test_setFormFile_CanBeString()
+ {
+ $updater = $this->makeUpdater();
+ $updater->setFromFile('foobar');
+
+ $this->assertSame('foobar', $updater->getFromFile()->getName());
+ }
+
+ public function test_setToFile_getToFile()
+ {
+ $updater = $this->makeUpdater();
+ $testFile = new File('foobar');
+ $updater->setToFile($testFile);
+
+ $this->assertSame($testFile, $updater->getToFile());
+ }
+
+ public function test_setToFile_CanBeString()
+ {
+ $updater = $this->makeUpdater();
+ $updater->setToFile('foobar');
+
+ $this->assertSame('foobar', $updater->getToFile()->getName());
+ }
+
public function test_checkWillSucceed_shouldNotThrowExceptionIfPiwikJsTargetIsWritable()
{
$updater = $this->makeUpdater();
diff --git a/plugins/CustomVariables/CustomVariables.php b/plugins/CustomVariables/CustomVariables.php
index 78a779e5f9..e5a13bc52a 100644
--- a/plugins/CustomVariables/CustomVariables.php
+++ b/plugins/CustomVariables/CustomVariables.php
@@ -20,10 +20,10 @@ class CustomVariables extends \Piwik\Plugin
public function registerEvents()
{
return array(
- 'Live.getAllVisitorDetails' => 'extendVisitorDetails',
'AssetManager.getJavaScriptFiles' => 'getJsFiles',
'Translate.getClientSideTranslationKeys' => 'getClientSideTranslationKeys',
'AssetManager.getStylesheetFiles' => 'getStylesheetFiles',
+ 'Actions.getCustomActionDimensionFieldsAndJoins' => 'provideActionDimensionFields'
);
}
@@ -37,24 +37,6 @@ class CustomVariables extends \Piwik\Plugin
Model::uninstall();
}
- public function extendVisitorDetails(&$visitor, $details)
- {
- $customVariables = array();
-
- $maxCustomVariables = self::getNumUsableCustomVariables();
-
- for ($i = 1; $i <= $maxCustomVariables; $i++) {
- if (!empty($details['custom_var_k' . $i])) {
- $customVariables[$i] = array(
- 'customVariableName' . $i => $details['custom_var_k' . $i],
- 'customVariableValue' . $i => $details['custom_var_v' . $i],
- );
- }
- }
-
- $visitor['customVariables'] = $customVariables;
- }
-
/**
* There are also some hardcoded places in JavaScript
* @return int
@@ -136,4 +118,13 @@ class CustomVariables extends \Piwik\Plugin
$jsFiles[] = "plugins/CustomVariables/angularjs/manage-custom-vars/manage-custom-vars.directive.js";
}
+ public function provideActionDimensionFields(&$fields, &$joins)
+ {
+ $maxCustomVariables = CustomVariables::getNumUsableCustomVariables();
+
+ for ($i = 1; $i <= $maxCustomVariables; $i++) {
+ $fields[] = 'custom_var_k' . $i;
+ $fields[] = 'custom_var_v' . $i;
+ }
+ }
}
diff --git a/plugins/CustomVariables/ProfileSummary/VisitScopeSummary.php b/plugins/CustomVariables/ProfileSummary/VisitScopeSummary.php
new file mode 100644
index 0000000000..8bab78187e
--- /dev/null
+++ b/plugins/CustomVariables/ProfileSummary/VisitScopeSummary.php
@@ -0,0 +1,56 @@
+<?php
+/**
+ * Piwik - free/libre analytics platform
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+
+namespace Piwik\Plugins\CustomVariables\ProfileSummary;
+
+use Piwik\Common;
+use Piwik\Piwik;
+use Piwik\Plugins\CustomVariables\Model;
+use Piwik\Plugins\Live\ProfileSummary\ProfileSummaryAbstract;
+use Piwik\View;
+
+/**
+ * Class VisitScopeSummary
+ *
+ * @api
+ */
+class VisitScopeSummary extends ProfileSummaryAbstract
+{
+ /**
+ * @inheritdoc
+ */
+ public function getName()
+ {
+ return Piwik::translate('CustomVariables_CustomVariables') . ' ' . Piwik::translate('General_TrackingScopeVisit');
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function render()
+ {
+ if (empty($this->profile['customVariables']) || empty($this->profile['customVariables'][Model::SCOPE_VISIT])) {
+ return '';
+ }
+
+ $view = new View('@CustomVariables/_profileSummary.twig');
+ $view->visitorData = $this->profile;
+ $view->scopeName = Piwik::translate('General_TrackingScopeVisit');
+ $view->variables = $this->profile['customVariables'][Model::SCOPE_VISIT];
+ return $view->render();
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function getOrder()
+ {
+ return 15;
+ }
+} \ No newline at end of file
diff --git a/plugins/CustomVariables/VisitorDetails.php b/plugins/CustomVariables/VisitorDetails.php
new file mode 100644
index 0000000000..6be82c6e43
--- /dev/null
+++ b/plugins/CustomVariables/VisitorDetails.php
@@ -0,0 +1,207 @@
+<?php
+/**
+ * Piwik - free/libre analytics platform
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+namespace Piwik\Plugins\CustomVariables;
+
+use Piwik\Piwik;
+use Piwik\Plugins\Actions\Actions\ActionSiteSearch;
+use Piwik\Plugins\Live\VisitorDetailsAbstract;
+use Piwik\View;
+
+class VisitorDetails extends VisitorDetailsAbstract
+{
+ public function extendVisitorDetails(&$visitor)
+ {
+ $customVariables = array();
+
+ $maxCustomVariables = CustomVariables::getNumUsableCustomVariables();
+
+ for ($i = 1; $i <= $maxCustomVariables; $i++) {
+ if (!empty($this->details['custom_var_k' . $i])) {
+ $customVariables[$i] = array(
+ 'customVariableName' . $i => $this->details['custom_var_k' . $i],
+ 'customVariableValue' . $i => $this->details['custom_var_v' . $i],
+ );
+ }
+ }
+
+ $visitor['customVariables'] = $customVariables;
+ }
+
+ public function extendActionDetails(&$action, $nextAction, $visitorDetails)
+ {
+ $maxCustomVariables = CustomVariables::getNumUsableCustomVariables();
+ $customVariablesPage = array();
+
+ for ($i = 1; $i <= $maxCustomVariables; $i++) {
+ if (!empty($action['custom_var_k' . $i])) {
+ $cvarKey = $action['custom_var_k' . $i];
+ $cvarKey = static::getCustomVariablePrettyKey($cvarKey);
+ $customVariablesPage[$i] = array(
+ 'customVariablePageName' . $i => $cvarKey,
+ 'customVariablePageValue' . $i => $action['custom_var_v' . $i],
+ );
+ }
+ unset($action['custom_var_k' . $i]);
+ unset($action['custom_var_v' . $i]);
+ }
+ if (!empty($customVariablesPage)) {
+ $action['customVariables'] = $customVariablesPage;
+ }
+ }
+
+ public function renderActionTooltip($action, $visitInfo)
+ {
+ if (empty($action['customVariables'])) {
+ return [];
+ }
+
+ $view = new View('@CustomVariables/_actionTooltip');
+ $view->action = $action;
+ return [[ 40, $view->render() ]];
+ }
+
+ public function renderVisitorDetails($visitInfo)
+ {
+ if (empty($visitInfo['customVariables'])) {
+ return [];
+ }
+
+ $view = new View('@CustomVariables/_visitorDetails');
+ $view->visitInfo = $visitInfo;
+ return [[ 50, $view->render() ]];
+ }
+
+ private static function getCustomVariablePrettyKey($key)
+ {
+ $rename = array(
+ ActionSiteSearch::CVAR_KEY_SEARCH_CATEGORY => Piwik::translate('Actions_ColumnSearchCategory'),
+ ActionSiteSearch::CVAR_KEY_SEARCH_COUNT => Piwik::translate('Actions_ColumnSearchResultsCount'),
+ );
+ if (isset($rename[$key])) {
+ return $rename[$key];
+ }
+ return $key;
+ }
+
+
+ protected $customVariables = [];
+
+ public function initProfile($visits, &$profile)
+ {
+ $this->customVariables = [
+ Model::SCOPE_PAGE => [],
+ Model::SCOPE_VISIT => [],
+ ];
+ }
+
+ public function handleProfileAction($action, &$profile)
+ {
+ if (empty($action['customVariables'])) {
+ return;
+ }
+
+ foreach ($action['customVariables'] as $index => $customVariable) {
+
+ $scope = Model::SCOPE_PAGE;
+ $name = $customVariable['customVariablePageName'.$index];
+ $value = $customVariable['customVariablePageValue'.$index];
+
+ if (empty($value)) {
+ continue;
+ }
+
+ if (!array_key_exists($name, $this->customVariables[$scope])) {
+ $this->customVariables[$scope][$name] = [];
+ }
+
+ if (!array_key_exists($value, $this->customVariables[$scope][$name])) {
+ $this->customVariables[$scope][$name][$value] = 0;
+ }
+
+ $this->customVariables[$scope][$name][$value]++;
+ }
+ }
+
+ public function handleProfileVisit($visit, &$profile)
+ {
+ if (empty($visit['customVariables'])) {
+ return;
+ }
+
+ foreach ($visit['customVariables'] as $index => $customVariable) {
+
+ $scope = Model::SCOPE_VISIT;
+ $name = $customVariable['customVariableName'.$index];
+ $value = $customVariable['customVariableValue'.$index];
+
+ if (empty($value)) {
+ continue;
+ }
+
+ if (!array_key_exists($name, $this->customVariables[$scope])) {
+ $this->customVariables[$scope][$name] = [];
+ }
+
+ if (!array_key_exists($value, $this->customVariables[$scope][$name])) {
+ $this->customVariables[$scope][$name][$value] = 0;
+ }
+
+ $this->customVariables[$scope][$name][$value]++;
+ }
+ }
+
+ public function finalizeProfile($visits, &$profile)
+ {
+ $customVariables = $this->customVariables;
+ foreach ($customVariables as $scope => &$variables) {
+
+ if (empty($variables)) {
+ unset($customVariables[$scope]);
+ continue;
+ }
+
+ foreach ($variables AS $name => &$values) {
+ arsort($values);
+ }
+ }
+ if (!empty($customVariables)) {
+
+ $profile['customVariables'] = $this->convertForProfile($customVariables);
+ }
+ }
+
+ protected function convertForProfile($customVariables)
+ {
+ $convertedVariables = [];
+
+ foreach ($customVariables as $scope => $scopeVariables) {
+
+ $convertedVariables[$scope] = [];
+
+ foreach ($scopeVariables as $name => $values) {
+
+ $variable = [
+ 'name' => $name,
+ 'values' => []
+ ];
+
+ foreach ($values as $value => $count) {
+ $variable['values'][] = [
+ 'value' => $value,
+ 'count' => $count
+ ];
+ }
+
+ $convertedVariables[$scope][] = $variable;
+ }
+ }
+
+ return $convertedVariables;
+ }
+} \ No newline at end of file
diff --git a/plugins/CustomVariables/lang/de.json b/plugins/CustomVariables/lang/de.json
index 7e152f0346..1b6256d578 100644
--- a/plugins/CustomVariables/lang/de.json
+++ b/plugins/CustomVariables/lang/de.json
@@ -14,7 +14,7 @@
"Unused": "Unbenutzt",
"CreateNewSlot": "Die Anzahl verfügbarer benutzerdefinierter Variablen erhöhen",
"UsageDetails": "%1$s Besuche und %2$s Aktionen seit der Erstellung dieser Website.",
- "CreatingCustomVariableTakesTime": "Neue benutzerdefinierte Variablen zu erstellen kann viel Zeit beanspruchen, abhängig von der Grösse Ihrer Datenbank. Deshalb ist dieser Vorgang nur über Kommandozeilen verfügbar.",
+ "CreatingCustomVariableTakesTime": "Neue benutzerdefinierte Variablen zu erstellen kann viel Zeit beanspruchen, abhängig von der Größe Ihrer Datenbank. Deshalb ist dieser Vorgang nur über Kommandozeilen verfügbar.",
"CurrentAvailableCustomVariables": "Aktuell können Sie bis zu %s benutzerdefinierte Variablen pro Seite einsetzen.",
"ToCreateCustomVarExecute": "Um eine neue benutzerdefinierte Variable zu erstellen, führen Sie in Ihrer Piwik Installation folgende Befehle aus:",
"SlotsReportIsGeneratedOverTime": "Daten für diesen Bericht werden periodisch veröffentlicht. Es mag ein oder zwei Tage dauern, bis Daten sichtbar sind und einige Wochen bis der Bericht vollständig aussagekräftig ist.",
diff --git a/plugins/CustomVariables/lang/id.json b/plugins/CustomVariables/lang/id.json
index 545429db06..730133fb62 100644
--- a/plugins/CustomVariables/lang/id.json
+++ b/plugins/CustomVariables/lang/id.json
@@ -5,6 +5,9 @@
"CustomVariables": "Variabel Kustom",
"CustomVariablesReportDocumentation": "Laporan ini mengandung informasi tentang Variabel Kustom Anda. Klik di nama variabel untuk melihat distribusi nilai. %1$s Informasi lebih lengkap tentang Vabiabel Kustom, baca %2$sdokumentasi Vabiabel Kustom di piwik.org%3$s",
"ScopePage": "cakupan halaman",
- "ScopeVisit": "cakupan kunjungan"
+ "ScopeVisit": "cakupan kunjungan",
+ "Index": "Indeks",
+ "Usages": "Penggunaan",
+ "Unused": "Tidak digunakan"
}
} \ No newline at end of file
diff --git a/plugins/CustomVariables/lang/zh-cn.json b/plugins/CustomVariables/lang/zh-cn.json
index 0124ed49a3..4a50063c81 100644
--- a/plugins/CustomVariables/lang/zh-cn.json
+++ b/plugins/CustomVariables/lang/zh-cn.json
@@ -7,7 +7,7 @@
"PluginDescription": "您可以使用JavaScript API对游客或他们的任何行动分配对应的自定义变量是(名字,值)。这样Piwik将报告有多少人访问,页面转换为每个自定义名称和值。您可以在访问者日志里查看每个用户和行动的详细自定义变量。<br\/>需要使用<a href=\"http:\/\/piwik.org\/docs\/ecommerce-analytics\/\">电子商务分析<\/a>功能!",
"ScopePage": "页面范围",
"ScopeVisit": "访问范围",
- "ManageDescription": "这个总览显示了所有的自定义变量位置和它们在各个站点 '%s'的使用方法。各个位置的变量名字按总的使用频率进行排序。",
+ "ManageDescription": "这个概览显示了所有的自定义变量位置和它们在各个站点“%s”的使用方法。各个位置的变量名字按总的使用频率进行排序。",
"ScopeX": "范围 %s",
"Index": "主页",
"Usages": "用法",
diff --git a/plugins/CustomVariables/templates/_actionTooltip.twig b/plugins/CustomVariables/templates/_actionTooltip.twig
new file mode 100644
index 0000000000..52084a4be5
--- /dev/null
+++ b/plugins/CustomVariables/templates/_actionTooltip.twig
@@ -0,0 +1,10 @@
+{% if action.customVariables is defined %}
+
+ {{ 'CustomVariables_CustomVariables'|translate }}:{% for id,customVariable in action.customVariables %}
+ {% set name = 'customVariablePageName' ~ id %}
+ {% set value = 'customVariablePageValue' ~ id %}
+
+ {# line break above is important #}
+ - {{ customVariable[name]|raw }} {% if customVariable[value]|length > 0 %} = {{ customVariable[value]|raw }}{% endif %}
+ {% endfor %}
+{% endif -%} \ No newline at end of file
diff --git a/plugins/CustomVariables/templates/_profileSummary.twig b/plugins/CustomVariables/templates/_profileSummary.twig
new file mode 100644
index 0000000000..3540faf5c6
--- /dev/null
+++ b/plugins/CustomVariables/templates/_profileSummary.twig
@@ -0,0 +1,13 @@
+<div class="visitor-profile-summary visitor-profile-customvariables">
+ <h1>{{ 'CustomVariables_CustomVariables'|translate }} ({{ scopeName }})</h1>
+ <div>
+ {%- for variable in variables -%}
+ <p>
+ <span>{{ variable.name }}: </span>
+ {%- for value in variable.values -%}
+ <strong title="{{ value.count }}x">{{ value.value }}</strong>{% if not loop.last %}, {% endif %}
+ {%- endfor -%}
+ </p>
+ {%- endfor -%}
+ </div>
+</div>
diff --git a/plugins/CustomVariables/templates/_visitorDetails.twig b/plugins/CustomVariables/templates/_visitorDetails.twig
new file mode 100644
index 0000000000..010f9f7d22
--- /dev/null
+++ b/plugins/CustomVariables/templates/_visitorDetails.twig
@@ -0,0 +1,11 @@
+<div class="visitorCustomVariables">
+ {% for id,customVariable in visitInfo.getColumn('customVariables') %}
+ {% set name='customVariableName' ~ id %}
+ {% set value='customVariableValue' ~ id %}
+ <br/>
+ <abbr class="visitorLogTooltip" title="{{ 'CustomVariables_CustomVariables'|translate }} ({{ 'CustomVariables_Index'|translate }} {{ id }})">
+ {{ customVariable[name]|truncate(30) }}
+ </abbr>
+ {% if customVariable[value]|length > 0 %}: {{ customVariable[value]|truncate(50) }}{% endif %}
+ {% endfor %}
+</div> \ No newline at end of file
diff --git a/plugins/CustomVariables/tests/System/expected/test_CustomVariablesSystemTest__Live.getLastVisitsDetails_day.xml b/plugins/CustomVariables/tests/System/expected/test_CustomVariablesSystemTest__Live.getLastVisitsDetails_day.xml
index 3c1c505115..5357171fef 100644
--- a/plugins/CustomVariables/tests/System/expected/test_CustomVariablesSystemTest__Live.getLastVisitsDetails_day.xml
+++ b/plugins/CustomVariables/tests/System/expected/test_CustomVariablesSystemTest__Live.getLastVisitsDetails_day.xml
@@ -23,7 +23,12 @@
<pageTitle>Profile page</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>1</pageId>
+ <bandwidth />
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>Name_PAGE_1</customVariablePageName1>
@@ -58,9 +63,7 @@
<customVariablePageValue8>Val_PAGE8</customVariablePageValue8>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -91,7 +94,7 @@
<referrerName>Google</referrerName>
<referrerKeyword>this keyword should be ranked</referrerKeyword>
<referrerKeywordPosition>1</referrerKeywordPosition>
- <referrerUrl>http://www.google.com/search?q=this+keyword+should+be+ranked</referrerUrl>
+ <referrerUrl>http://www.google.com/url?sa=t&amp;source=web&amp;cd=1&amp;ved=0CB4QFjAA&amp;url=http://piwik.org/&amp;rct=j&amp;q=this keyword should be ranked&amp;ei=V8WfTePkKKLfiALrpZWGAw&amp;usg=AFQjCNF_MGJRqKPvaKuUokHtZ3VvNG9ALw&amp;sig2=BvKAdCtNixsmfNWXjsNyMw</referrerUrl>
<referrerSearchEngineUrl>http://google.com</referrerSearchEngineUrl>
<referrerSearchEngineIcon>plugins/Morpheus/icons/dist/searchEngines/google.com.png</referrerSearchEngineIcon>
<languageCode>fr</languageCode>
@@ -112,6 +115,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -162,9 +171,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -173,16 +186,5 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
</result> \ No newline at end of file
diff --git a/plugins/DBStats/lang/pl.json b/plugins/DBStats/lang/pl.json
index 0d2e546a6f..308ad71fe5 100644
--- a/plugins/DBStats/lang/pl.json
+++ b/plugins/DBStats/lang/pl.json
@@ -2,15 +2,20 @@
"DBStats": {
"DatabaseUsage": "Stopień wykorzystania bazy danych",
"DataSize": "Rozmiar danych",
- "DBSize": "rozmiar DB",
+ "DBSize": "rozmiar bazy",
"EstimatedSize": "szacunkowa wielkość",
"IndexSize": "Rozmiar indeksu",
"LearnMore": "Aby dowiedzieć się więcej o tym, jak Piwik przetwarza dane i jak konfigurować go do pracy z serwisami o średnim i wysokim ruchu na stronach, sprawdź dokumentację %s.",
"MainDescription": "Piwik przechowuje wszystkie dane analityki statystycznej stron w bazie danych MySQL serwera. Obecnie jego tabele zajmują %s.",
+ "MetricDataByYear": "Metryka Tabele wg Roku",
+ "MetricTables": "Metryka Tabele",
"OtherTables": "Inne Tabele",
+ "PluginDescription": "Dostarcza szczegółowych raportów dotyczących wykorzystania bazy MySQL. Dostępne dla Super Użytkownika w sekcji Diagnostyka",
"ReportDataByYear": "Raport Tabele według roku",
+ "ReportTables": "Raport Tabele",
"RowCount": "Liczba wierszy",
"Table": "Tabela",
- "TotalSize": "Całkowity rozmiar"
+ "TotalSize": "Całkowity rozmiar",
+ "TrackerTables": "Tabele trakera"
}
} \ No newline at end of file
diff --git a/plugins/Dashboard/javascripts/dashboardObject.js b/plugins/Dashboard/javascripts/dashboardObject.js
index 4165bfcaec..c79feea1c5 100644
--- a/plugins/Dashboard/javascripts/dashboardObject.js
+++ b/plugins/Dashboard/javascripts/dashboardObject.js
@@ -353,7 +353,7 @@
var $dashboardElement = $(' > .col', dashboardElement);
- if (!$dashboardElement.size()) {
+ if (!$dashboardElement.length) {
return;
}
@@ -605,7 +605,7 @@
$(layoutColumnSelector).each(function () {
columns[columnNumber] = [];
var items = $('[widgetId]', this);
- for (var j = 0; j < items.size(); j++) {
+ for (var j = 0; j < items.length; j++) {
columns[columnNumber][j] = $(items[j]).dashboardWidget('getWidgetObject');
// Do not store segment in the dashboard layout
diff --git a/plugins/Dashboard/javascripts/dashboardWidget.js b/plugins/Dashboard/javascripts/dashboardWidget.js
index 995223e86f..7f86767125 100755
--- a/plugins/Dashboard/javascripts/dashboardWidget.js
+++ b/plugins/Dashboard/javascripts/dashboardWidget.js
@@ -125,12 +125,12 @@
/* move widget icons into datatable top actions
var $buttons = currentWidget.find('.buttons .button');
var $controls = currentWidget.find('.dataTableControls .dataTableAction').first();
- if ($buttons.size() && $controls.size()) {
+ if ($buttons.length && $controls.length) {
$buttons.find('.button').addClass('dataTableAction');
$buttons.insertBefore($controls);
}*/
- if (currentWidget.parents('body').size()) {
+ if (currentWidget.parents('body').length) {
// there might be race conditions, eg widget might be just refreshed while whole dashboard is also
// removed from DOM
piwikHelper.compileAngularComponents($widgetContent);
diff --git a/plugins/Dashboard/lang/fr.json b/plugins/Dashboard/lang/fr.json
index 1dc3fdb4a1..e13ce2ee48 100644
--- a/plugins/Dashboard/lang/fr.json
+++ b/plugins/Dashboard/lang/fr.json
@@ -1,6 +1,6 @@
{
"Dashboard": {
- "AddAWidget": "Ajouter un widget",
+ "AddAWidget": "Ajouter un gadget",
"AddPreviewedWidget": "Ajouter le widget visualisé au tableau de bord",
"ChangeDashboardLayout": "Modifier mise en page du tableau de bord",
"CopyDashboardToUser": "Copier le tableau de bord vers l'utilisateur",
diff --git a/plugins/Dashboard/lang/lv.json b/plugins/Dashboard/lang/lv.json
index 0367ed07df..affc3629fc 100644
--- a/plugins/Dashboard/lang/lv.json
+++ b/plugins/Dashboard/lang/lv.json
@@ -1,11 +1,25 @@
{
"Dashboard": {
+ "AddAWidget": "Pievienot logrīku",
"AddPreviewedWidget": "Pievienot apskatīto logdaļu panelim",
+ "ChangeDashboardLayout": "Izmainīt paneļa izkārtojumu",
+ "CopyDashboardToUser": "Kopēt paneli uz lietotāju",
+ "CreateNewDashboard": "Izveidot jaunu paneli",
"Dashboard": "Panelis",
+ "DashboardName": "Paneļa vārds:",
+ "DashboardOf": "%s panelis",
"DeleteWidgetConfirm": "Vai tiešām vēlaties dzēst šo logdaļu no paneļa?",
"LoadingWidget": "Notiek logdaļas ielāde, lūdzu uzgaidiet...",
+ "ManageDashboard": "Pārvaldīt paneli",
"Maximise": "Izvērst",
"Minimise": "Samazināt",
+ "NotUndo": "Jūs nevarēsiet atgriezt šo operāciju.",
+ "RemoveDashboard": "Noņemt paneli",
+ "RemoveDashboardConfirm": "Vai Jūs tiešām vēlaties noņemt paneli \"%s\"?",
+ "RemoveDefaultDashboardNotPossible": "Noklusējuma paneli nevar noņemt",
+ "RenameDashboard": "Pārsaukt paneli",
+ "ResetDashboard": "Atiestatīt paneli",
+ "SelectDashboardLayout": "Lūdzu izvēlieties Jūsu jaunā paneļa izkārtojumu",
"SelectWidget": "Izvēlieties to logdaļu, kuru vēlaties pievienot panelim",
"WidgetNotFound": "Logdaļa nav atrasta",
"WidgetPreview": "Logdaļas priekšstatījums"
diff --git a/plugins/Dashboard/lang/sv.json b/plugins/Dashboard/lang/sv.json
index 4f2b0f7772..588289f4d2 100644
--- a/plugins/Dashboard/lang/sv.json
+++ b/plugins/Dashboard/lang/sv.json
@@ -1,30 +1,30 @@
{
"Dashboard": {
"AddAWidget": "Lägg till en widget",
- "AddPreviewedWidget": "Lägg till förhandsgranskad widget i instrumentpanelen",
+ "AddPreviewedWidget": "Lägg till widget i instrumentpanelen",
"ChangeDashboardLayout": "Ändra instrumentpanelens layout",
"CopyDashboardToUser": "Kopiera instrumentpanel till användare",
"CreateNewDashboard": "Skapa ny instrumentpanel",
"Dashboard": "Instrumentpanel",
- "DashboardCopied": "Den nuvarande instrumentpanelen har kopierats till den valda användare.",
- "DashboardEmptyNotification": "Instrumentpanelen innehåller inga widgets. Börja med att lägga till widgets eller återställ instrumentpanelen till standardutséendet.",
+ "DashboardCopied": "Den nuvarande instrumentpanelen har kopierats till den valda användaren.",
+ "DashboardEmptyNotification": "Instrumentpanelen innehåller inga widgets. Börja med att lägga till widgets eller återställ instrumentpanelen till standardutseendet.",
"DashboardName": "Instrumentpanelens namn:",
"DashboardOf": "Instrumentpanel för %s",
"DefaultDashboard": "Standardinstrumentpanel - Använder standardval för widgets och kolumnlayout",
- "DeleteWidgetConfirm": "Är du säker på att du vill ta bort denna widget från Instrumentpanelen?",
+ "DeleteWidgetConfirm": "Är du säker på att du vill ta bort denna widget från instrumentpanelen?",
"EmptyDashboard": "Tom instrumentpanel - Välj dina favoritwidgets",
"LoadingWidget": "Laddar widget, vänligen vänta...",
- "ManageDashboard": "Hantera instrumentpanelen",
+ "ManageDashboard": "Hantera instrumentpanel",
"Maximise": "Maximera",
"Minimise": "Minimera",
"NotUndo": "Du kommer inte kunna ångra den här åtgärden.",
- "PluginDescription": "Ditt dashboard för webbanalys. Anpassa ditt dashboard genom att lägga till nya widgets, flytta runt dem och ändra kolumnindelning. Varje användare kan anpassa sin egen dashboard.",
+ "PluginDescription": "Din instrumentpanel för webbanalys. Anpassa din instrumentpanel genom att lägga till nya widgets, flytta runt dem och ändra kolumnindelning. Varje användare kan anpassa sin egen instrumentpanel.",
"RemoveDashboard": "Ta bort instrumentpanel",
"RemoveDashboardConfirm": "Vill du verkligen radera instrumentpanelen \"%s\"?",
"RemoveDefaultDashboardNotPossible": "Standardinstrumentpanelen kan inte tas bort",
- "RenameDashboard": "Byt namn på instrumentpanelen",
+ "RenameDashboard": "Byt namn på instrumentpanel",
"ResetDashboard": "Återställ instrumentpanel",
- "ResetDashboardConfirm": "Vill du verkligen återställa instrumentpanelens layout för Widgets?",
+ "ResetDashboardConfirm": "Vill du verkligen återställa instrumentpanelens layout för widgets?",
"SelectDashboardLayout": "Vänligen välj din nya instrumentpanels layout",
"SelectWidget": "Välj vilken widget som ska läggas till i instrumentpanelen",
"SetAsDefaultWidgets": "Ställ in som standardval för widgets",
diff --git a/plugins/Dashboard/lang/zh-cn.json b/plugins/Dashboard/lang/zh-cn.json
index 52952d5ec3..85ad8788d6 100644
--- a/plugins/Dashboard/lang/zh-cn.json
+++ b/plugins/Dashboard/lang/zh-cn.json
@@ -10,27 +10,27 @@
"DashboardEmptyNotification": "您的面板没有任何小工具,请增加一些小工具或重置为默认的小工具选择。",
"DashboardName": "面板名称:",
"DashboardOf": "%s报表",
- "DefaultDashboard": "默认面板 - 使用默认的小工具和布局",
- "DeleteWidgetConfirm": "您确定要从报表面板中删除此这个小工具吗?",
- "EmptyDashboard": "空白面板 - 请选择您要的小工具",
- "LoadingWidget": "小工具加载中,请稍候 ...",
+ "DefaultDashboard": "默认面板——使用默认的小工具和布局",
+ "DeleteWidgetConfirm": "您确定要从报表面板中删除这个小工具吗?",
+ "EmptyDashboard": "空白面板——请选择您喜欢的小工具",
+ "LoadingWidget": "小工具加载中,请稍候……",
"ManageDashboard": "管理面板",
"Maximise": "最大化",
"Minimise": "最小化",
"NotUndo": "此操作不可撤消。",
"PluginDescription": "您的 Web 分析面板。如果需要自定义,您可以添加新的小工具,拖动这些小工具,和更改面板的列数和布局。每个用户都可以独立定制属于他自己的面板。",
"RemoveDashboard": "删除面板",
- "RemoveDashboardConfirm": "确认要删除面板\"%s\"吗?",
- "RemoveDefaultDashboardNotPossible": "默认的仪表盘无法删除",
+ "RemoveDashboardConfirm": "确认要删除面板“%s”吗?",
+ "RemoveDefaultDashboardNotPossible": "默认的面板无法删除",
"RenameDashboard": "重命名面板",
"ResetDashboard": "重置面板",
- "ResetDashboardConfirm": "确认重置面板布局并且使用默认的小工具?",
+ "ResetDashboardConfirm": "确认重置面板布局为默认的小工具列表?",
"SelectDashboardLayout": "请选择新报表布局",
- "SelectWidget": "请选择要加入面板的小工具",
- "SetAsDefaultWidgets": "设置为默认小工具",
- "SetAsDefaultWidgetsConfirm": "您确定要设置当前的小工具和面板为默认的模板吗?",
- "SetAsDefaultWidgetsConfirmHelp": "用户创建新面板时,或者使用 \"%s\" 功能时,将使用这些小工具和面板布局。",
- "TopLinkTooltip": "查看%s的统计报表",
+ "SelectWidget": "选择要加入面板的小工具",
+ "SetAsDefaultWidgets": "设置为默认小工具列表",
+ "SetAsDefaultWidgetsConfirm": "您确定要设置当前的小工具列表和布局为默认的面板模板吗?",
+ "SetAsDefaultWidgetsConfirmHelp": "用户创建新面板时,或者“%s”功能启用时,将使用当前小工具列表和面板布局。",
+ "TopLinkTooltip": "查看%s的统计报表。",
"WidgetNotFound": "找不到小工具",
"WidgetPreview": "小工具预览"
}
diff --git a/plugins/Dashboard/templates/index.twig b/plugins/Dashboard/templates/index.twig
index 17f3a5363d..d30f72fb36 100644
--- a/plugins/Dashboard/templates/index.twig
+++ b/plugins/Dashboard/templates/index.twig
@@ -3,6 +3,7 @@
{% include "@CoreHome/_periodSelect.twig" %}
{{ postEvent("Template.nextToCalendar") }}
{% render dashboardSettingsControl %}
+ {% if dashboards|length %}
<div id="Dashboard" class="piwikTopControl borderedControl piwikSelector">
<ul>
{% for dashboard in dashboards %}
@@ -13,6 +14,7 @@
{% endfor %}
</ul>
</div>
+ {% endif %}
</div>
{% import 'ajaxMacros.twig' as ajax %}
{{ ajax.loadingDiv }}
diff --git a/plugins/DevicePlugins/Archiver.php b/plugins/DevicePlugins/Archiver.php
index acec8c0cde..1bc8cffa21 100644
--- a/plugins/DevicePlugins/Archiver.php
+++ b/plugins/DevicePlugins/Archiver.php
@@ -12,6 +12,7 @@ namespace Piwik\Plugins\DevicePlugins;
use Piwik\DataAccess\LogAggregator;
use Piwik\DataTable;
use Piwik\Metrics;
+use Piwik\Plugins\DevicePlugins\Columns\DevicePluginColumn;
require_once PIWIK_INCLUDE_PATH . '/plugins/DevicePlugins/functions.php';
@@ -52,20 +53,22 @@ class Archiver extends \Piwik\Plugin\Archiver
);
}
+ /**
+ * Archives reports for all available plugin columns
+ * @see DevicePluginColumn
+ */
protected function aggregateByPlugin()
{
- $selects = array(
- "sum(case log_visit.config_pdf when 1 then 1 else 0 end) as pdf",
- "sum(case log_visit.config_flash when 1 then 1 else 0 end) as flash",
- "sum(case log_visit.config_java when 1 then 1 else 0 end) as java",
- "sum(case log_visit.config_director when 1 then 1 else 0 end) as director",
- "sum(case log_visit.config_quicktime when 1 then 1 else 0 end) as quicktime",
- "sum(case log_visit.config_realplayer when 1 then 1 else 0 end) as realplayer",
- "sum(case log_visit.config_windowsmedia when 1 then 1 else 0 end) as windowsmedia",
- "sum(case log_visit.config_gears when 1 then 1 else 0 end) as gears",
- "sum(case log_visit.config_silverlight when 1 then 1 else 0 end) as silverlight",
- "sum(case log_visit.config_cookie when 1 then 1 else 0 end) as cookie"
- );
+ $selects = array();
+ $columns = DevicePlugins::getAllPluginColumns();
+
+ foreach ($columns as $column) {
+ $selects[] = sprintf(
+ "sum(case log_visit.%s when 1 then 1 else 0 end) as %s",
+ $column->getColumnName(),
+ substr($column->getColumnName(), 7) // remove leading `config_`
+ );
+ }
$query = $this->getLogAggregator()->queryVisitsByDimension(array(), false, $selects, $metrics = array());
$data = $query->fetch();
diff --git a/plugins/DevicePlugins/Columns/DevicePluginColumn.php b/plugins/DevicePlugins/Columns/DevicePluginColumn.php
new file mode 100644
index 0000000000..9dc34ac569
--- /dev/null
+++ b/plugins/DevicePlugins/Columns/DevicePluginColumn.php
@@ -0,0 +1,25 @@
+<?php
+/**
+ * Piwik - free/libre analytics platform
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+namespace Piwik\Plugins\DevicePlugins\Columns;
+
+use Piwik\Plugin\Dimension\VisitDimension;
+
+/**
+ * Columns extending this class will be automatically considered as new browser plugin
+ *
+ * Note: The column name needs to start with `config_` to be handled correctly
+ */
+abstract class DevicePluginColumn extends VisitDimension
+{
+ /**
+ * Can be overwritten by Columns in other plugins to
+ * set a custom icon not included in Piwik Core
+ */
+ public $columnIcon = null;
+}
diff --git a/plugins/DevicePlugins/Columns/PluginCookie.php b/plugins/DevicePlugins/Columns/PluginCookie.php
index f5c88a1dc2..19dd1e226d 100644
--- a/plugins/DevicePlugins/Columns/PluginCookie.php
+++ b/plugins/DevicePlugins/Columns/PluginCookie.php
@@ -9,12 +9,11 @@
namespace Piwik\Plugins\DevicePlugins\Columns;
use Piwik\Common;
-use Piwik\Plugin\Dimension\VisitDimension;
use Piwik\Tracker\Request;
use Piwik\Tracker\Visitor;
use Piwik\Tracker\Action;
-class PluginCookie extends VisitDimension
+class PluginCookie extends DevicePluginColumn
{
protected $columnName = 'config_cookie';
protected $columnType = 'TINYINT(1) NULL';
diff --git a/plugins/DevicePlugins/Columns/PluginDirector.php b/plugins/DevicePlugins/Columns/PluginDirector.php
index e1a60bb92a..b1b479d92d 100644
--- a/plugins/DevicePlugins/Columns/PluginDirector.php
+++ b/plugins/DevicePlugins/Columns/PluginDirector.php
@@ -9,12 +9,11 @@
namespace Piwik\Plugins\DevicePlugins\Columns;
use Piwik\Common;
-use Piwik\Plugin\Dimension\VisitDimension;
use Piwik\Tracker\Request;
use Piwik\Tracker\Visitor;
use Piwik\Tracker\Action;
-class PluginDirector extends VisitDimension
+class PluginDirector extends DevicePluginColumn
{
protected $columnName = 'config_director';
protected $columnType = 'TINYINT(1) NULL';
diff --git a/plugins/DevicePlugins/Columns/PluginFlash.php b/plugins/DevicePlugins/Columns/PluginFlash.php
index 448a02a9b1..e307ef0c84 100644
--- a/plugins/DevicePlugins/Columns/PluginFlash.php
+++ b/plugins/DevicePlugins/Columns/PluginFlash.php
@@ -9,12 +9,11 @@
namespace Piwik\Plugins\DevicePlugins\Columns;
use Piwik\Common;
-use Piwik\Plugin\Dimension\VisitDimension;
use Piwik\Tracker\Request;
use Piwik\Tracker\Visitor;
use Piwik\Tracker\Action;
-class PluginFlash extends VisitDimension
+class PluginFlash extends DevicePluginColumn
{
protected $columnName = 'config_flash';
protected $columnType = 'TINYINT(1) NULL';
diff --git a/plugins/DevicePlugins/Columns/PluginGears.php b/plugins/DevicePlugins/Columns/PluginGears.php
index f6e2e0aa61..c0845f0904 100644
--- a/plugins/DevicePlugins/Columns/PluginGears.php
+++ b/plugins/DevicePlugins/Columns/PluginGears.php
@@ -9,12 +9,11 @@
namespace Piwik\Plugins\DevicePlugins\Columns;
use Piwik\Common;
-use Piwik\Plugin\Dimension\VisitDimension;
use Piwik\Tracker\Request;
use Piwik\Tracker\Visitor;
use Piwik\Tracker\Action;
-class PluginGears extends VisitDimension
+class PluginGears extends DevicePluginColumn
{
protected $columnName = 'config_gears';
protected $columnType = 'TINYINT(1) NULL';
diff --git a/plugins/DevicePlugins/Columns/PluginJava.php b/plugins/DevicePlugins/Columns/PluginJava.php
index 351328ce17..bd9877a1b5 100644
--- a/plugins/DevicePlugins/Columns/PluginJava.php
+++ b/plugins/DevicePlugins/Columns/PluginJava.php
@@ -9,12 +9,11 @@
namespace Piwik\Plugins\DevicePlugins\Columns;
use Piwik\Common;
-use Piwik\Plugin\Dimension\VisitDimension;
use Piwik\Tracker\Request;
use Piwik\Tracker\Visitor;
use Piwik\Tracker\Action;
-class PluginJava extends VisitDimension
+class PluginJava extends DevicePluginColumn
{
protected $columnName = 'config_java';
protected $columnType = 'TINYINT(1) NULL';
diff --git a/plugins/DevicePlugins/Columns/PluginPdf.php b/plugins/DevicePlugins/Columns/PluginPdf.php
index 1a9a22dc21..bd1fccfad3 100644
--- a/plugins/DevicePlugins/Columns/PluginPdf.php
+++ b/plugins/DevicePlugins/Columns/PluginPdf.php
@@ -9,12 +9,11 @@
namespace Piwik\Plugins\DevicePlugins\Columns;
use Piwik\Common;
-use Piwik\Plugin\Dimension\VisitDimension;
use Piwik\Tracker\Request;
use Piwik\Tracker\Visitor;
use Piwik\Tracker\Action;
-class PluginPdf extends VisitDimension
+class PluginPdf extends DevicePluginColumn
{
protected $columnName = 'config_pdf';
protected $columnType = 'TINYINT(1) NULL';
diff --git a/plugins/DevicePlugins/Columns/PluginQuickTime.php b/plugins/DevicePlugins/Columns/PluginQuickTime.php
index 8626adbfb2..a203dedccb 100644
--- a/plugins/DevicePlugins/Columns/PluginQuickTime.php
+++ b/plugins/DevicePlugins/Columns/PluginQuickTime.php
@@ -9,12 +9,11 @@
namespace Piwik\Plugins\DevicePlugins\Columns;
use Piwik\Common;
-use Piwik\Plugin\Dimension\VisitDimension;
use Piwik\Tracker\Request;
use Piwik\Tracker\Visitor;
use Piwik\Tracker\Action;
-class PluginQuickTime extends VisitDimension
+class PluginQuickTime extends DevicePluginColumn
{
protected $columnName = 'config_quicktime';
protected $columnType = 'TINYINT(1) NULL';
diff --git a/plugins/DevicePlugins/Columns/PluginRealPlayer.php b/plugins/DevicePlugins/Columns/PluginRealPlayer.php
index baeadb4b4c..d805aafccd 100644
--- a/plugins/DevicePlugins/Columns/PluginRealPlayer.php
+++ b/plugins/DevicePlugins/Columns/PluginRealPlayer.php
@@ -9,12 +9,11 @@
namespace Piwik\Plugins\DevicePlugins\Columns;
use Piwik\Common;
-use Piwik\Plugin\Dimension\VisitDimension;
use Piwik\Tracker\Request;
use Piwik\Tracker\Visitor;
use Piwik\Tracker\Action;
-class PluginRealPlayer extends VisitDimension
+class PluginRealPlayer extends DevicePluginColumn
{
protected $columnName = 'config_realplayer';
protected $columnType = 'TINYINT(1) NULL';
diff --git a/plugins/DevicePlugins/Columns/PluginSilverlight.php b/plugins/DevicePlugins/Columns/PluginSilverlight.php
index e3b62cd409..897d2939da 100644
--- a/plugins/DevicePlugins/Columns/PluginSilverlight.php
+++ b/plugins/DevicePlugins/Columns/PluginSilverlight.php
@@ -9,12 +9,11 @@
namespace Piwik\Plugins\DevicePlugins\Columns;
use Piwik\Common;
-use Piwik\Plugin\Dimension\VisitDimension;
use Piwik\Tracker\Request;
use Piwik\Tracker\Visitor;
use Piwik\Tracker\Action;
-class PluginSilverlight extends VisitDimension
+class PluginSilverlight extends DevicePluginColumn
{
protected $columnName = 'config_silverlight';
protected $columnType = 'TINYINT(1) NULL';
diff --git a/plugins/DevicePlugins/Columns/PluginWindowsMedia.php b/plugins/DevicePlugins/Columns/PluginWindowsMedia.php
index 569133ba04..99e25f4bdc 100644
--- a/plugins/DevicePlugins/Columns/PluginWindowsMedia.php
+++ b/plugins/DevicePlugins/Columns/PluginWindowsMedia.php
@@ -9,12 +9,11 @@
namespace Piwik\Plugins\DevicePlugins\Columns;
use Piwik\Common;
-use Piwik\Plugin\Dimension\VisitDimension;
use Piwik\Tracker\Request;
use Piwik\Tracker\Visitor;
use Piwik\Tracker\Action;
-class PluginWindowsMedia extends VisitDimension
+class PluginWindowsMedia extends DevicePluginColumn
{
protected $columnName = 'config_windowsmedia';
protected $columnType = 'TINYINT(1) NULL';
diff --git a/plugins/DevicePlugins/DevicePlugins.php b/plugins/DevicePlugins/DevicePlugins.php
index a41a2aeb9d..2d7bab595f 100644
--- a/plugins/DevicePlugins/DevicePlugins.php
+++ b/plugins/DevicePlugins/DevicePlugins.php
@@ -8,9 +8,10 @@
*/
namespace Piwik\Plugins\DevicePlugins;
+use Piwik\Cache;
+use Piwik\CacheId;
use Piwik\Piwik;
-use Piwik\Plugins\CoreVisualizations\Visualizations\Graph;
-use Piwik\Plugins\CoreVisualizations\Visualizations\HtmlTable;
+use Piwik\Plugin;
/**
*
@@ -18,24 +19,15 @@ use Piwik\Plugins\CoreVisualizations\Visualizations\HtmlTable;
class DevicePlugins extends \Piwik\Plugin
{
/**
- * @see Piwik\Plugin::registerEvents
+ * @see Plugin::registerEvents
*/
public function registerEvents()
{
return array(
'Metrics.getDefaultMetricTranslations' => 'addMetricTranslations',
- 'Live.getAllVisitorDetails' => 'extendVisitorDetails',
);
}
- public function extendVisitorDetails(&$visitor, $details)
- {
- $instance = new Visitor($details);
-
- $visitor['plugins'] = $instance->getPlugins();
- $visitor['pluginsIcons'] = $instance->getPluginIcons();
- }
-
public function addMetricTranslations(&$translations)
{
$metrics = array(
@@ -44,4 +36,40 @@ class DevicePlugins extends \Piwik\Plugin
$translations = array_merge($translations, $metrics);
}
+
+
+ /**
+ * Returns all available DevicePlugins Columns
+ *
+ * @return Columns\DevicePluginColumn[]
+ * @throws \Exception
+ */
+ public static function getAllPluginColumns()
+ {
+ $cacheId = CacheId::pluginAware('DevicePluginColumns');
+ $cache = Cache::getTransientCache();
+
+ if (!$cache->contains($cacheId)) {
+ $instances = [];
+
+ foreach (self::getAllDevicePluginsColumnClasses() as $className) {
+ $instance = new $className();
+ $instances[] = $instance;
+ }
+ $cache->save($cacheId, $instances);
+ }
+
+ return $cache->fetch($cacheId);
+ }
+
+ /**
+ * Returns class names of all DevicePlugins Column classes.
+ *
+ * @return string[]
+ * @api
+ */
+ protected static function getAllDevicePluginsColumnClasses()
+ {
+ return Plugin\Manager::getInstance()->findMultipleComponents('Columns', 'Piwik\Plugins\DevicePlugins\Columns\DevicePluginColumn');
+ }
}
diff --git a/plugins/DevicePlugins/Reports/GetPlugin.php b/plugins/DevicePlugins/Reports/GetPlugin.php
index 42fef1cb89..a2c6dad79a 100644
--- a/plugins/DevicePlugins/Reports/GetPlugin.php
+++ b/plugins/DevicePlugins/Reports/GetPlugin.php
@@ -11,6 +11,7 @@ namespace Piwik\Plugins\DevicePlugins\Reports;
use Piwik\Piwik;
use Piwik\Plugin\ViewDataTable;
use Piwik\Plugins\DevicePlugins\Columns\Plugin;
+use Piwik\Plugins\DevicePlugins\DevicePlugins;
class GetPlugin extends Base
{
@@ -48,7 +49,7 @@ class GetPlugin extends Base
$view->requestConfig->filter_sort_column = 'nb_visits_percentage';
$view->requestConfig->filter_sort_order = 'desc';
- $view->requestConfig->filter_limit = 10;
+ $view->requestConfig->filter_limit = count(DevicePlugins::getAllPluginColumns());
}
}
diff --git a/plugins/DevicePlugins/Visitor.php b/plugins/DevicePlugins/VisitorDetails.php
index 501e241a50..04620c0e31 100644
--- a/plugins/DevicePlugins/Visitor.php
+++ b/plugins/DevicePlugins/VisitorDetails.php
@@ -2,38 +2,35 @@
/**
* Piwik - free/libre analytics platform
*
- * @link http://piwik.org
+ * @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*
*/
namespace Piwik\Plugins\DevicePlugins;
+use Piwik\Plugins\Live\VisitorDetailsAbstract;
+
require_once PIWIK_INCLUDE_PATH . '/plugins/DevicePlugins/functions.php';
-class Visitor
+class VisitorDetails extends VisitorDetailsAbstract
{
const DELIMITER_PLUGIN_NAME = ", ";
- private $details = array();
-
- public function __construct($details)
+ public function extendVisitorDetails(&$visitor)
{
- $this->details = $details;
+ $visitor['plugins'] = $this->getPlugins();
+ $visitor['pluginsIcons'] = $this->getPluginIcons();
}
- function getPlugins()
+ protected function getPlugins()
{
- $plugins = array(
- 'config_pdf',
- 'config_flash',
- 'config_java',
- 'config_director',
- 'config_quicktime',
- 'config_realplayer',
- 'config_windowsmedia',
- 'config_gears',
- 'config_silverlight',
- );
+ $plugins = array();
+ $columns = DevicePlugins::getAllPluginColumns();
+
+ foreach ($columns as $column) {
+ $plugins[] = $column->getColumnName();
+ }
+
$pluginShortNames = array();
foreach ($plugins as $plugin) {
@@ -46,7 +43,7 @@ class Visitor
return implode(self::DELIMITER_PLUGIN_NAME, $pluginShortNames);
}
- function getPluginIcons()
+ protected function getPluginIcons()
{
$pluginNames = $this->getPlugins();
if (!empty($pluginNames)) {
diff --git a/plugins/DevicePlugins/functions.php b/plugins/DevicePlugins/functions.php
index 30a6cf504b..020736a89e 100644
--- a/plugins/DevicePlugins/functions.php
+++ b/plugins/DevicePlugins/functions.php
@@ -16,5 +16,20 @@ function getPluginsLogo($label)
if ($label == Piwik::translate('General_Others')) {
return false;
}
- return 'plugins/Morpheus/icons/dist/plugins/' . $label . '.png';
+ $icon = 'plugins/Morpheus/icons/dist/plugins/' . $label . '.png';
+
+ if (file_exists(PIWIK_INCLUDE_PATH . '/' . $icon)) {
+ return $icon;
+ }
+
+ // try to use column icon defined in Column class
+ $columns = DevicePlugins::getAllPluginColumns();
+
+ foreach ($columns as $column) {
+ if (strtolower($label) == substr($column->getColumnName(), 7) && $column->columnIcon) {
+ return $column->columnIcon;
+ }
+ }
+
+ return false;
}
diff --git a/plugins/DevicePlugins/lang/pl.json b/plugins/DevicePlugins/lang/pl.json
index 4eba8d6909..2f1afe2f8d 100644
--- a/plugins/DevicePlugins/lang/pl.json
+++ b/plugins/DevicePlugins/lang/pl.json
@@ -1,5 +1,10 @@
{
"DevicePlugins": {
- "WidgetPlugins": "Lista wtyczek"
+ "BrowserWithNoPluginsEnabled": "%1$s bez aktywnych wtyczek",
+ "BrowserWithPluginsEnabled": "%1$s z aktywnymi wtyczkami: %2$s",
+ "PluginDescription": "Zwraca listę wtyczek wspieranych przez przeglądarki odwiedzających.",
+ "PluginDetectionDoesNotWorkInIE": "NOTKA: Wykrywanie wtyczek nie działa w starszych niż 11 wersjach Internet Explorer'a. Ten raport bazuje na danych z nowszych wersji IE i pozostałych przeglądarek.",
+ "WidgetPlugins": "Lista wtyczek",
+ "WidgetPluginsDocumentation": "Ten raport pokazuje, które wtyczki były aktywne w przeglądarkach Twoich odwiedzających. To może być ważna informacja, która pomoże zdecydować w jaki sposób zwracać treści."
}
} \ No newline at end of file
diff --git a/plugins/DevicePlugins/lang/zh-cn.json b/plugins/DevicePlugins/lang/zh-cn.json
index 67f62d32b7..78508cb668 100644
--- a/plugins/DevicePlugins/lang/zh-cn.json
+++ b/plugins/DevicePlugins/lang/zh-cn.json
@@ -1,10 +1,10 @@
{
"DevicePlugins": {
- "BrowserWithNoPluginsEnabled": "%1$s 没有启用插件",
- "BrowserWithPluginsEnabled": "%1$s 启用插件%2$s",
+ "BrowserWithNoPluginsEnabled": "%1$s 没有启用任何插件",
+ "BrowserWithPluginsEnabled": "%1$s 启用了插件%2$s",
"PluginDescription": "报告访客浏览器支持的插件列表。",
- "PluginDetectionDoesNotWorkInIE": "注意: 插件检查无法在 Internet Explorer 11 之前的版本运行。这个报表仅提供非 IE 浏览器或者IE的新版本。",
- "WidgetPlugins": "浏览器插件清单",
- "WidgetPluginsDocumentation": "本报表显示访客使用的浏览器插件,这可能对如何发布您的内容很重要。"
+ "PluginDetectionDoesNotWorkInIE": "注意:插件检测无法在 Internet Explorer 11 之前的版本运行。此报表仅用于非 IE 浏览器或者 IE 的新版本。",
+ "WidgetPlugins": "浏览器插件",
+ "WidgetPluginsDocumentation": "此报表显示访客浏览器已启用的插件。这些信息可能对选择发布您内容的合适方式至关重要。"
}
} \ No newline at end of file
diff --git a/plugins/DevicesDetection/Columns/DeviceBrand.php b/plugins/DevicesDetection/Columns/DeviceBrand.php
index 37d284fa83..8b0bfdc35e 100644
--- a/plugins/DevicesDetection/Columns/DeviceBrand.php
+++ b/plugins/DevicesDetection/Columns/DeviceBrand.php
@@ -28,6 +28,7 @@ class DeviceBrand extends Base
protected function configureSegments()
{
$brands = DeviceParserAbstract::$deviceBrands;
+ natcasesort ($brands);
$brandList = implode(", ", $brands);
$segment = new Segment();
diff --git a/plugins/DevicesDetection/DevicesDetection.php b/plugins/DevicesDetection/DevicesDetection.php
index 2a3f074017..ab36c9fe2d 100644
--- a/plugins/DevicesDetection/DevicesDetection.php
+++ b/plugins/DevicesDetection/DevicesDetection.php
@@ -9,42 +9,8 @@
namespace Piwik\Plugins\DevicesDetection;
-use Piwik\ArchiveProcessor;
-use Piwik\Db;
-
require_once PIWIK_INCLUDE_PATH . '/plugins/DevicesDetection/functions.php';
class DevicesDetection extends \Piwik\Plugin
{
- /**
- * @see Piwik\Plugin::registerEvents
- */
- public function registerEvents()
- {
- return array(
- 'Live.getAllVisitorDetails' => 'extendVisitorDetails',
- );
- }
-
- public function extendVisitorDetails(&$visitor, $details)
- {
- $instance = new Visitor($details);
-
- $visitor['deviceType'] = $instance->getDeviceType();
- $visitor['deviceTypeIcon'] = $instance->getDeviceTypeIcon();
- $visitor['deviceBrand'] = $instance->getDeviceBrand();
- $visitor['deviceModel'] = $instance->getDeviceModel();
- $visitor['operatingSystem'] = $instance->getOperatingSystem();
- $visitor['operatingSystemName'] = $instance->getOperatingSystemName();
- $visitor['operatingSystemIcon'] = $instance->getOperatingSystemIcon();
- $visitor['operatingSystemCode'] = $instance->getOperatingSystemCode();
- $visitor['operatingSystemVersion'] = $instance->getOperatingSystemVersion();
- $visitor['browserFamily'] = $instance->getBrowserEngine();
- $visitor['browserFamilyDescription'] = $instance->getBrowserEngineDescription();
- $visitor['browser'] = $instance->getBrowser();
- $visitor['browserName'] = $instance->getBrowserName();
- $visitor['browserIcon'] = $instance->getBrowserIcon();
- $visitor['browserCode'] = $instance->getBrowserCode();
- $visitor['browserVersion'] = $instance->getBrowserVersion();
- }
}
diff --git a/plugins/DevicesDetection/ProfileSummary/DevicesSummary.php b/plugins/DevicesDetection/ProfileSummary/DevicesSummary.php
new file mode 100644
index 0000000000..7d61784cf1
--- /dev/null
+++ b/plugins/DevicesDetection/ProfileSummary/DevicesSummary.php
@@ -0,0 +1,52 @@
+<?php
+/**
+ * Piwik - free/libre analytics platform
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+
+namespace Piwik\Plugins\DevicesDetection\ProfileSummary;
+
+use Piwik\Piwik;
+use Piwik\Plugins\Live\ProfileSummary\ProfileSummaryAbstract;
+use Piwik\View;
+
+/**
+ * Class DevicesSummary
+ *
+ * @api
+ */
+class DevicesSummary extends ProfileSummaryAbstract
+{
+ /**
+ * @inheritdoc
+ */
+ public function getName()
+ {
+ return Piwik::translate('DevicesDetection_Devices');
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function render()
+ {
+ if (empty($this->profile['devices'])) {
+ return '';
+ }
+
+ $view = new View('@DevicesDetection/_profileSummary.twig');
+ $view->visitorData = $this->profile;
+ return $view->render();
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function getOrder()
+ {
+ return 50;
+ }
+} \ No newline at end of file
diff --git a/plugins/DevicesDetection/Visitor.php b/plugins/DevicesDetection/Visitor.php
deleted file mode 100644
index af05191995..0000000000
--- a/plugins/DevicesDetection/Visitor.php
+++ /dev/null
@@ -1,101 +0,0 @@
-<?php
-/**
- * Piwik - free/libre analytics platform
- *
- * @link http://piwik.org
- * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- *
- */
-namespace Piwik\Plugins\DevicesDetection;
-
-require_once PIWIK_INCLUDE_PATH . '/plugins/DevicesDetection/functions.php';
-
-class Visitor
-{
- private $details = array();
-
- public function __construct($details)
- {
- $this->details = $details;
- }
-
- public function getDeviceType()
- {
- return getDeviceTypeLabel($this->details['config_device_type']);
- }
-
- public function getDeviceTypeIcon()
- {
- return getDeviceTypeLogo($this->details['config_device_type']);
- }
-
- public function getDeviceBrand()
- {
- return getDeviceBrandLabel($this->details['config_device_brand']);
- }
-
- public function getDeviceModel()
- {
- return $this->details['config_device_model'];
- }
-
- public function getOperatingSystemCode()
- {
- return $this->details['config_os'];
- }
-
- public function getOperatingSystem()
- {
- return getOsFullName($this->details['config_os'] . ";" . $this->details['config_os_version']);
- }
-
- public function getOperatingSystemName()
- {
- return getOsFullName($this->details['config_os']);
- }
-
- public function getOperatingSystemVersion()
- {
- return $this->details['config_os_version'];
- }
-
- public function getOperatingSystemIcon()
- {
- return getOsLogo($this->details['config_os']);
- }
-
- public function getBrowserEngineDescription()
- {
- return getBrowserEngineName($this->getBrowserEngine());
- }
-
- public function getBrowserEngine()
- {
- return $this->details['config_browser_engine'];
- }
-
- public function getBrowserCode()
- {
- return $this->details['config_browser_name'];
- }
-
- public function getBrowserVersion()
- {
- return $this->details['config_browser_version'];
- }
-
- public function getBrowser()
- {
- return getBrowserNameWithVersion($this->details['config_browser_name'] . ";" . $this->details['config_browser_version']);
- }
-
- public function getBrowserName()
- {
- return getBrowserName($this->details['config_browser_name'] . ";" . $this->details['config_browser_version']);
- }
-
- public function getBrowserIcon()
- {
- return getBrowserLogo($this->details['config_browser_name'] . ";" . $this->details['config_browser_version']);
- }
-} \ No newline at end of file
diff --git a/plugins/DevicesDetection/VisitorDetails.php b/plugins/DevicesDetection/VisitorDetails.php
new file mode 100644
index 0000000000..d358c2d1ef
--- /dev/null
+++ b/plugins/DevicesDetection/VisitorDetails.php
@@ -0,0 +1,175 @@
+<?php
+/**
+ * Piwik - free/libre analytics platform
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+namespace Piwik\Plugins\DevicesDetection;
+
+use Piwik\Plugins\Live\VisitorDetailsAbstract;
+use Piwik\View;
+
+require_once PIWIK_INCLUDE_PATH . '/plugins/DevicesDetection/functions.php';
+
+class VisitorDetails extends VisitorDetailsAbstract
+{
+ public function extendVisitorDetails(&$visitor)
+ {
+ $visitor['deviceType'] = $this->getDeviceType();
+ $visitor['deviceTypeIcon'] = $this->getDeviceTypeIcon();
+ $visitor['deviceBrand'] = $this->getDeviceBrand();
+ $visitor['deviceModel'] = $this->getDeviceModel();
+ $visitor['operatingSystem'] = $this->getOperatingSystem();
+ $visitor['operatingSystemName'] = $this->getOperatingSystemName();
+ $visitor['operatingSystemIcon'] = $this->getOperatingSystemIcon();
+ $visitor['operatingSystemCode'] = $this->getOperatingSystemCode();
+ $visitor['operatingSystemVersion'] = $this->getOperatingSystemVersion();
+ $visitor['browserFamily'] = $this->getBrowserEngine();
+ $visitor['browserFamilyDescription'] = $this->getBrowserEngineDescription();
+ $visitor['browser'] = $this->getBrowser();
+ $visitor['browserName'] = $this->getBrowserName();
+ $visitor['browserIcon'] = $this->getBrowserIcon();
+ $visitor['browserCode'] = $this->getBrowserCode();
+ $visitor['browserVersion'] = $this->getBrowserVersion();
+ }
+
+ protected function getDeviceType()
+ {
+ return getDeviceTypeLabel($this->details['config_device_type']);
+ }
+
+ protected function getDeviceTypeIcon()
+ {
+ return getDeviceTypeLogo($this->details['config_device_type']);
+ }
+
+ protected function getDeviceBrand()
+ {
+ return getDeviceBrandLabel($this->details['config_device_brand']);
+ }
+
+ protected function getDeviceModel()
+ {
+ return $this->details['config_device_model'];
+ }
+
+ protected function getOperatingSystemCode()
+ {
+ return $this->details['config_os'];
+ }
+
+ protected function getOperatingSystem()
+ {
+ return getOsFullName($this->details['config_os'] . ";" . $this->details['config_os_version']);
+ }
+
+ protected function getOperatingSystemName()
+ {
+ return getOsFullName($this->details['config_os']);
+ }
+
+ protected function getOperatingSystemVersion()
+ {
+ return $this->details['config_os_version'];
+ }
+
+ protected function getOperatingSystemIcon()
+ {
+ return getOsLogo($this->details['config_os']);
+ }
+
+ protected function getBrowserEngineDescription()
+ {
+ return getBrowserEngineName($this->getBrowserEngine());
+ }
+
+ protected function getBrowserEngine()
+ {
+ return $this->details['config_browser_engine'];
+ }
+
+ protected function getBrowserCode()
+ {
+ return $this->details['config_browser_name'];
+ }
+
+ protected function getBrowserVersion()
+ {
+ return $this->details['config_browser_version'];
+ }
+
+ protected function getBrowser()
+ {
+ return getBrowserNameWithVersion($this->details['config_browser_name'] . ";" . $this->details['config_browser_version']);
+ }
+
+ protected function getBrowserName()
+ {
+ return getBrowserName($this->details['config_browser_name'] . ";" . $this->details['config_browser_version']);
+ }
+
+ protected function getBrowserIcon()
+ {
+ return getBrowserLogo($this->details['config_browser_name'] . ";" . $this->details['config_browser_version']);
+ }
+
+
+ private $devices = array();
+
+ public function initProfile($visits, &$profile)
+ {
+ $this->devices = array();
+ }
+
+ public function handleProfileVisit($visit, &$profile)
+ {
+ $deviceType = $visit->getColumn('deviceType');
+ $deviceTypeIcon = $visit->getColumn('deviceTypeIcon');
+ $deviceBrand = $visit->getColumn('deviceBrand');
+ $deviceModel = $visit->getColumn('deviceModel');
+ $deviceName = trim($deviceBrand . " " . $deviceModel);
+
+ if (!isset($this->devices[$deviceType])) {
+ $this->devices[$deviceType] = array(
+ 'count' => 0,
+ 'icon' => $deviceTypeIcon,
+ 'devices' => array()
+ );
+ }
+
+ ++$this->devices[$deviceType]['count'];
+
+ if (!isset($this->devices[$deviceType]['devices'][$deviceName])) {
+ $this->devices[$deviceType]['devices'][$deviceName] = 0;
+ }
+
+ ++$this->devices[$deviceType]['devices'][$deviceName];
+ }
+
+ public function finalizeProfile($visits, &$profile)
+ {
+ $devices = $this->devices;
+ uksort($this->devices, function($a, $b) use ($devices) {
+ $cmp = strcmp($devices[$b]['count'], $devices[$a]['count']);
+ if (0 == $cmp) {
+ $cmp = strcmp($a, $b);
+ }
+ return $cmp;
+ });
+
+ foreach ($this->devices as $type => $devicesData) {
+ $typeDevices = [];
+ foreach ($devicesData['devices'] as $name => $count) {
+ $typeDevices[] = [
+ 'name' => $name,
+ 'count' => $count
+ ];
+ }
+ $this->devices[$type]['devices'] = $typeDevices;
+ }
+
+ $profile['devices'] = $this->devices;
+ }
+} \ No newline at end of file
diff --git a/plugins/DevicesDetection/lang/el.json b/plugins/DevicesDetection/lang/el.json
index 6ad83c3190..6a13c53d3d 100644
--- a/plugins/DevicesDetection/lang/el.json
+++ b/plugins/DevicesDetection/lang/el.json
@@ -38,6 +38,7 @@
"Phablet": "Phablet",
"TV": "Τηλεόραση",
"UserAgent": "Πρόγραμμα πελάτη χρήστη",
+ "XVisitsFromDevices": "%1$s επισκέψεις από %2$s συσκευές",
"WidgetBrowsers": "Φυλλομετρητές επισκεπτών",
"WidgetBrowsersDocumentation": "Αυτή η αναφορά περιέχει πληροφορίες για το φυλλομετρητή που χρησιμοποιούσαν οι επισκέπτες. Κάθε έκδοση φυλλομετρητή κατατάσσεται διαφορετικά."
}
diff --git a/plugins/DevicesDetection/lang/en.json b/plugins/DevicesDetection/lang/en.json
index 1322f582ab..7015cefe04 100644
--- a/plugins/DevicesDetection/lang/en.json
+++ b/plugins/DevicesDetection/lang/en.json
@@ -38,6 +38,7 @@
"Phablet": "Phablet",
"TV": "Tv",
"UserAgent": "User-Agent",
+ "XVisitsFromDevices": "%1$s visits from %2$s devices",
"WidgetBrowsers": "Visitor Browser",
"WidgetBrowsersDocumentation": "This report contains information about what kind of browser your visitors were using. Each browser version is listed separately."
}
diff --git a/plugins/DevicesDetection/lang/id.json b/plugins/DevicesDetection/lang/id.json
index 772e65e81b..957bc81c96 100644
--- a/plugins/DevicesDetection/lang/id.json
+++ b/plugins/DevicesDetection/lang/id.json
@@ -2,14 +2,32 @@
"DevicesDetection": {
"BrowserEngine": "Peramban",
"BrowserEngineDocumentation": "Bagan ini menampilkan peramban pengunjung Anda yang dipecah menjadi keluarga peramban. %s Informasi terpenting untuk pengembang ramatraya adalah jenis mesin pembuat yang pengunung gunakan. Etiket mengandung nama mesin diikuti dengan peramban yang umum menggunakan mesin tersebut dalam tanda kurung.",
+ "BrowserEngines": "Mesin peramban",
"BrowserFamily": "Keluarga Peramban",
"Browsers": "Perambang",
"BrowserVersion": "Versi Perambang",
+ "BrowserVersions": "Versi peramban",
+ "Camera": "Kamera",
+ "Software": "Perangkat lunak",
"ColumnBrowser": "Peramban",
"ColumnOperatingSystem": "Sistem Operasi",
+ "ColumnOperatingSystemVersion": "Versi sistem operasi",
+ "Console": "Konsol",
+ "dataTableLabelBrands": "Jenama",
+ "dataTableLabelModels": "Model",
"dataTableLabelTypes": "Jenis",
+ "Device": "Perangkat",
+ "DeviceBrand": "Jenama perangkat",
+ "DeviceModel": "Model perangkat",
+ "DevicesDetection": "Perangkat pengunjung",
+ "DeviceType": "Tipe perangkat",
+ "OperatingSystemFamilies": "Keluarga sistem operasi",
"OperatingSystemFamily": "Keluarga sistem operasi",
"OperatingSystems": "Sistem Operasi",
+ "SmartDisplay": "Tampilan pintar",
+ "Smartphone": "Telepon pintar",
+ "Devices": "Perangkat",
+ "TV": "Tv",
"WidgetBrowsers": "Peramban Pengunjung",
"WidgetBrowsersDocumentation": "Laporan ini mengandung informasi tentabg jenis peramban yang pengunjung Anda gunakan. Setiap versi peramban diurutkan terpisah."
}
diff --git a/plugins/DevicesDetection/lang/pl.json b/plugins/DevicesDetection/lang/pl.json
index a9bb05270b..c8ec3edae7 100644
--- a/plugins/DevicesDetection/lang/pl.json
+++ b/plugins/DevicesDetection/lang/pl.json
@@ -1,37 +1,45 @@
{
"DevicesDetection": {
"BrowserEngine": "Silnik przeglądarki",
+ "BrowserEngineDocumentation": "Ten raport pokazuje przeglądarki, z których korzystają odwiedzający podzielone pod względem silników. %s Najważniejszą tu informacją dla deweloperów jest typ silnika renderującego używanego przez ich odwiedzających. Etykiety zawierają nazwy silników poprzedzające podane w nawiasach najpopularniejsze przeglądarki z danym silnikiem.",
"BrowserEngines": "Silniki przeglądarek",
- "BrowserFamily": "Rodzina przeglądarek",
+ "BrowserFamily": "Rodzina przeglądarki",
"Browsers": "Przeglądarki",
"BrowserVersion": "Wersja przeglądarki",
"BrowserVersions": "Wersje przeglądarek",
"Camera": "Aparat fotograficzny",
"CarBrowser": "Przeglądarka samochodowa",
+ "Software": "Oprogramowanie",
"ColumnBrowser": "Przeglądarka",
"ColumnOperatingSystem": "System operacyjny",
+ "ColumnOperatingSystemVersion": "Wersja systemu operacyjnego",
"Console": "Konsola",
"dataTableLabelBrands": "Marka",
"dataTableLabelModels": "Model",
"dataTableLabelSystemVersion": "Wersja systemu operacyjnego",
"dataTableLabelTypes": "Rodzaj",
"Device": "Urządzenie",
- "DeviceBrand": "Urządzenie marki",
+ "DeviceBrand": "Marka urządzenia",
"DeviceDetection": "Wykrywanie urządzeń",
"DeviceModel": "Model urządzenia",
"DevicesDetection": "Urządzenia gości",
"DeviceType": "Typ urządzenia",
"FeaturePhone": "Zaawansowany telefon",
- "OperatingSystemFamilies": "Rodzaj systemu operacyjnego",
+ "OperatingSystemFamilies": "Rodziny systemu operacyjnego",
"OperatingSystemFamily": "Rodzina systemu operacyjnego",
"OperatingSystems": "Systemy operacyjne",
- "OperatingSystemVersions": "Wersja systemu operacyjnego",
+ "OperatingSystemVersions": "Wersje systemu operacyjnego",
+ "PluginDescription": "Dostarcza poszerzonej informacji o urządzeniach użytkowników, takich jak Marka (producent), Model (wersja urządzenia), typ urządzenia (tv, konsola, smartfon, komputer, etc) i innych.",
"SmartDisplay": "Inteligentny wyświetlacz",
"Smartphone": "Smartfon",
+ "PortableMediaPlayer": "Odtwarzacz przenośny",
"Devices": "Urządzenia",
"Tablet": "Tablet",
+ "Phablet": "Phablet",
"TV": "TV",
"UserAgent": "User-Agent",
- "WidgetBrowsers": "Przeglądarki odwiedzających"
+ "XVisitsFromDevices": "%1$s wizyt z %2$s urządzeń",
+ "WidgetBrowsers": "Przeglądarki odwiedzających",
+ "WidgetBrowsersDocumentation": "Ten raport zawiera informacje o rodzajach przeglądarek używanych przez Twoich odwiedzających. Każda wersja przeglądarki prezentowana jest osobno."
}
} \ No newline at end of file
diff --git a/plugins/DevicesDetection/lang/zh-cn.json b/plugins/DevicesDetection/lang/zh-cn.json
index eef51002ec..e49bf8a236 100644
--- a/plugins/DevicesDetection/lang/zh-cn.json
+++ b/plugins/DevicesDetection/lang/zh-cn.json
@@ -1,16 +1,44 @@
{
"DevicesDetection": {
- "BrowserEngine": "浏览器名称",
- "BrowserEngineDocumentation": "本报表显示访客的浏览器分类。%s对网站开发者来说最重要的就是访客使用何种渲染引擎。标签包括引擎名称,加上括号中的使用这种引擎的最常用的浏览器。",
- "BrowserFamily": "浏览器种类",
- "Browsers": "浏览器名称",
+ "BrowserEngine": "浏览器引擎",
+ "BrowserEngineDocumentation": "此报表展示访客使用的浏览器核心。%s对网站开发者来说最重要的就是访客使用何种渲染引擎。标签包括引擎名称以及在括号中标注的此引擎最常见浏览器。",
+ "BrowserEngines": "浏览器引擎",
+ "BrowserFamily": "浏览器家族",
+ "Browsers": "浏览器",
"BrowserVersion": "浏览器版本",
- "ColumnBrowser": "浏览器名称",
+ "BrowserVersions": "浏览器版本",
+ "Camera": "摄像头",
+ "CarBrowser": "车用浏览器",
+ "Software": "软件",
+ "ColumnBrowser": "浏览器",
"ColumnOperatingSystem": "操作系统",
+ "ColumnOperatingSystemVersion": "操作系统版本",
+ "Console": "控制台",
+ "dataTableLabelBrands": "品牌",
+ "dataTableLabelModels": "型号",
+ "dataTableLabelSystemVersion": "操作系统版本",
"dataTableLabelTypes": "类型",
- "OperatingSystemFamily": "操作系统种类",
+ "Device": "设备",
+ "DeviceBrand": "设备品牌",
+ "DeviceDetection": "设备检测",
+ "DeviceModel": "设备型号",
+ "DevicesDetection": "访客设备",
+ "DeviceType": "设备类型",
+ "FeaturePhone": "功能手机",
+ "OperatingSystemFamilies": "操作系统家族",
+ "OperatingSystemFamily": "操作系统家族",
"OperatingSystems": "操作系统",
+ "OperatingSystemVersions": "操作系统版本",
+ "PluginDescription": "提供使用者设备的品牌(制造商)、型号(版本)、类型(电视、手机或电脑等)以及更多扩展信息。",
+ "SmartDisplay": "智能显示器",
+ "Smartphone": "智能手机",
+ "PortableMediaPlayer": "便携媒体播放器",
+ "Devices": "设备",
+ "Tablet": "平板电脑",
+ "Phablet": "平板手机",
+ "TV": "TV",
+ "UserAgent": "用户代理(User-Agent)",
"WidgetBrowsers": "访客浏览器",
- "WidgetBrowsersDocumentation": "本报表包含访客所用的浏览器信息,每个浏览器版本单独列出。"
+ "WidgetBrowsersDocumentation": "此报表包含访客所用的浏览器信息,每个浏览器版本单独列出。"
}
} \ No newline at end of file
diff --git a/plugins/DevicesDetection/lang/zh-tw.json b/plugins/DevicesDetection/lang/zh-tw.json
index 907584ce81..d3c863c36b 100644
--- a/plugins/DevicesDetection/lang/zh-tw.json
+++ b/plugins/DevicesDetection/lang/zh-tw.json
@@ -38,6 +38,7 @@
"Phablet": "平板手機",
"TV": "電視",
"UserAgent": "User Agent",
+ "XVisitsFromDevices": "來自%2$s裝置的%1$s個訪問數",
"WidgetBrowsers": "訪客瀏覽器",
"WidgetBrowsersDocumentation": "這份報表包含訪客所使用的瀏覽器資訊。每個瀏覽器的版本都會分開排列。"
}
diff --git a/plugins/DevicesDetection/templates/_profileSummary.twig b/plugins/DevicesDetection/templates/_profileSummary.twig
new file mode 100644
index 0000000000..05348864c5
--- /dev/null
+++ b/plugins/DevicesDetection/templates/_profileSummary.twig
@@ -0,0 +1,21 @@
+{% if visitorData.devices is defined %}
+ <div class="visitor-profile-summary visitor-profile-devices">
+ <h1>{{ 'DevicesDetection_Devices'|translate }}</h1>
+ <div>
+ {%- for type,entry in visitorData.devices -%}
+ <p>
+ <img height="16" src="{{ entry.icon }}" />
+ {% if entry.devices|length == 1 and 'General_Unknown'|translate in entry.devices[0].name %}
+ <span>{{ 'DevicesDetection_XVisitsFromDevices'|translate('<strong>' ~ entry.count ~ '</strong>', '<strong>' ~ type ~ '</strong>')|raw }}
+ {% else %}
+ <span>{{ 'DevicesDetection_XVisitsFromDevices'|translate('<strong>' ~ entry.count ~ '</strong>', '<strong>' ~ type ~ '</strong>')|raw }}:
+ {% for device in entry.devices -%}
+ {{ device.name }} ({{ device.count }}x){% if not loop.last %}, {% endif %}
+ {%- endfor -%}
+ </span>
+ {% endif %}
+ </p>
+ {%- endfor -%}
+ </div>
+ </div>
+{% endif %} \ No newline at end of file
diff --git a/plugins/Diagnostics/Commands/Run.php b/plugins/Diagnostics/Commands/Run.php
index 1932faae51..24c3be51fa 100644
--- a/plugins/Diagnostics/Commands/Run.php
+++ b/plugins/Diagnostics/Commands/Run.php
@@ -47,13 +47,13 @@ class Run extends ConsoleCommand
}
if (count($items) === 1) {
- $output->writeln($result->getLabel() . ': ' . $this->formatItem($items[0]), OutputInterface::OUTPUT_PLAIN);
+ $output->writeln($result->getLabel() . ': ' . $this->formatItem($items[0]), OutputInterface::OUTPUT_NORMAL);
continue;
}
$output->writeln($result->getLabel() . ':');
foreach ($items as $item) {
- $output->writeln("\t- " . $this->formatItem($item), OutputInterface::OUTPUT_PLAIN);
+ $output->writeln("\t- " . $this->formatItem($item), OutputInterface::OUTPUT_NORMAL);
}
}
@@ -82,7 +82,7 @@ class Run extends ConsoleCommand
'<%s>%s %s</%s>',
$tag,
strtoupper($item->getStatus()),
- preg_replace('/\<br\s*\/?\>/i', "\n", $item->getComment()),
+ preg_replace('%</?[a-z][a-z0-9]*[^<>]*>%sim', '', preg_replace('/\<br\s*\/?\>/i', "\n", $item->getComment())),
$tag
);
}
diff --git a/plugins/Diagnostics/Diagnostic/PageSpeedCheck.php b/plugins/Diagnostics/Diagnostic/PageSpeedCheck.php
index 495e13ee45..3e852a852c 100644
--- a/plugins/Diagnostics/Diagnostic/PageSpeedCheck.php
+++ b/plugins/Diagnostics/Diagnostic/PageSpeedCheck.php
@@ -42,7 +42,7 @@ class PageSpeedCheck implements Diagnostic
return array(DiagnosticResult::singleResult($label, DiagnosticResult::STATUS_OK));
}
- $comment = $this->translator->translate('Installation_SystemCheckPageSpeedWarn', array(
+ $comment = $this->translator->translate('Installation_SystemCheckPageSpeedWarning', array(
'(eg. Apache, Nginx or IIS)',
));
diff --git a/plugins/Diagnostics/lang/de.json b/plugins/Diagnostics/lang/de.json
index b40af46d52..ebb11506c7 100644
--- a/plugins/Diagnostics/lang/de.json
+++ b/plugins/Diagnostics/lang/de.json
@@ -2,7 +2,7 @@
"Diagnostics": {
"ConfigFileTitle": "Konfigurationsdatei",
"ConfigFileIntroduction": "Hier können Sie die Piwik Konfiguration einsehen. Sollten Sie Piwik auf lastverteilten Systemen einsetzen könnte diese Seite unterschiedlich sein, abhängig vom Server auf dem die Seite geladen wurde. Zeilen mit einer anderen Hintergrundfarbe sind geänderte Konfigurationswerte, die beispielsweise in der Datei %1$s definiert wurden.",
- "HideUnchanged": "Falls Sie nur die geänderten Werte einsehen möchten können Sie %1$salle unveränderten Werte ausblenden%2$s.",
+ "HideUnchanged": "Falls Sie nur die geänderten Werte einsehen möchten, können Sie %1$salle unveränderten Werte ausblenden%2$s.",
"Sections": "Sektionen"
}
} \ No newline at end of file
diff --git a/plugins/Diagnostics/lang/id.json b/plugins/Diagnostics/lang/id.json
new file mode 100644
index 0000000000..8a216189c2
--- /dev/null
+++ b/plugins/Diagnostics/lang/id.json
@@ -0,0 +1,6 @@
+{
+ "Diagnostics": {
+ "ConfigFileTitle": "Berkas konfigurasi",
+ "Sections": "Bagian"
+ }
+} \ No newline at end of file
diff --git a/plugins/Diagnostics/lang/pl.json b/plugins/Diagnostics/lang/pl.json
new file mode 100644
index 0000000000..b01afca647
--- /dev/null
+++ b/plugins/Diagnostics/lang/pl.json
@@ -0,0 +1,8 @@
+{
+ "Diagnostics": {
+ "ConfigFileTitle": "Plik konfiguracyjny",
+ "ConfigFileIntroduction": "Tu możesz zobaczyć konfigurację Piwik'a. Jeśli Piwik został uruchomiony na środowisku z load balancer'em strona może wyświetlać różne dane w zależności od serwera, który ją wygenerował. Rzędy z innym kolorem tła zawierają inne dane niż te zawarte w przykładowym %1$s pliku.",
+ "HideUnchanged": "W celu zobaczenia tylko zmienionych wartości %1$sukryj niezmienione wartości%2$s.",
+ "Sections": "Sekcje"
+ }
+} \ No newline at end of file
diff --git a/plugins/Ecommerce/Controller.php b/plugins/Ecommerce/Controller.php
index c1716a5808..c0215a1bb4 100644
--- a/plugins/Ecommerce/Controller.php
+++ b/plugins/Ecommerce/Controller.php
@@ -10,8 +10,8 @@ namespace Piwik\Plugins\Ecommerce;
use Piwik\API\Request;
use Piwik\Common;
-use Piwik\DataTable;
use Piwik\FrontController;
+use Piwik\Http;
use Piwik\Piwik;
use Piwik\Plugins\Goals\API as GoalsApi;
use Piwik\Translation\Translator;
@@ -97,10 +97,19 @@ class Controller extends \Piwik\Plugins\Goals\Controller
public function getEcommerceLog($fetch = false)
{
$saveGET = $_GET;
- $_GET['segment'] = urlencode('visitEcommerceStatus!=none');
+ $originalQuery = $_SERVER['QUERY_STRING'];
+
+ if (!empty($_GET['segment'])) {
+ $_GET['segment'] = $_GET['segment'] . ';' . 'visitEcommerceStatus!=none';
+ } else {
+ $_GET['segment'] = 'visitEcommerceStatus!=none';
+ }
+ $_SERVER['QUERY_STRING'] = Http::buildQuery($_GET);
+
$_GET['widget'] = 1;
$output = FrontController::getInstance()->dispatch('Live', 'getVisitorLog', array($fetch));
$_GET = $saveGET;
+ $_SERVER['QUERY_STRING'] = $originalQuery;
return $output;
}
diff --git a/plugins/Ecommerce/ProfileSummary/EcommerceSummary.php b/plugins/Ecommerce/ProfileSummary/EcommerceSummary.php
new file mode 100644
index 0000000000..5761549aaf
--- /dev/null
+++ b/plugins/Ecommerce/ProfileSummary/EcommerceSummary.php
@@ -0,0 +1,54 @@
+<?php
+/**
+ * Piwik - free/libre analytics platform
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+
+namespace Piwik\Plugins\Ecommerce\ProfileSummary;
+
+use Piwik\Common;
+use Piwik\Piwik;
+use Piwik\Plugins\Live\ProfileSummary\ProfileSummaryAbstract;
+use Piwik\View;
+
+/**
+ * Class EcommerceSummary
+ *
+ * @api
+ */
+class EcommerceSummary extends ProfileSummaryAbstract
+{
+ /**
+ * @inheritdoc
+ */
+ public function getName()
+ {
+ return Piwik::translate('Goals_Ecommerce');
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function render()
+ {
+ if (empty($this->profile['totalEcommerceRevenue'])) {
+ return '';
+ }
+
+ $view = new View('@Ecommerce/_profileSummary.twig');
+ $view->idSite = Common::getRequestVar('idSite', null, 'int');
+ $view->visitorData = $this->profile;
+ return $view->render();
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function getOrder()
+ {
+ return 20;
+ }
+} \ No newline at end of file
diff --git a/plugins/Ecommerce/VisitorDetails.php b/plugins/Ecommerce/VisitorDetails.php
new file mode 100644
index 0000000000..f04f38f01d
--- /dev/null
+++ b/plugins/Ecommerce/VisitorDetails.php
@@ -0,0 +1,216 @@
+<?php
+/**
+ * Piwik - free/libre analytics platform
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+namespace Piwik\Plugins\Ecommerce;
+
+use Piwik\Common;
+use Piwik\Config;
+use Piwik\DataAccess\LogAggregator;
+use Piwik\Date;
+use Piwik\Db;
+use Piwik\Metrics\Formatter;
+use Piwik\Piwik;
+use Piwik\Plugins\Live\VisitorDetailsAbstract;
+use Piwik\Site;
+use Piwik\Tracker\Action;
+use Piwik\Tracker\GoalManager;
+use Piwik\Tracker\PageUrl;
+use Piwik\View;
+
+class VisitorDetails extends VisitorDetailsAbstract
+{
+ public function extendVisitorDetails(&$visitor)
+ {
+ $ecommerceMetrics = $this->queryEcommerceConversionsVisitorLifeTimeMetricsForVisitor($visitor['idSite'],
+ $visitor['visitorId']);
+ $visitor['totalEcommerceRevenue'] = $ecommerceMetrics['totalEcommerceRevenue'];
+ $visitor['totalEcommerceConversions'] = $ecommerceMetrics['totalEcommerceConversions'];
+ $visitor['totalEcommerceItems'] = $ecommerceMetrics['totalEcommerceItems'];
+
+ $visitor['totalAbandonedCartsRevenue'] = $ecommerceMetrics['totalAbandonedCartsRevenue'];
+ $visitor['totalAbandonedCarts'] = $ecommerceMetrics['totalAbandonedCarts'];
+ $visitor['totalAbandonedCartsItems'] = $ecommerceMetrics['totalAbandonedCartsItems'];
+ }
+
+ public function provideActionsForVisitIds(&$actions, $idVisits)
+ {
+ $ecommerceDetails = $this->queryEcommerceConversionsForVisits($idVisits);
+
+ // use while / array_shift combination instead of foreach to save memory
+ while (is_array($ecommerceDetails) && count($ecommerceDetails)) {
+ $ecommerceDetail = array_shift($ecommerceDetails);
+
+ $idVisit = $ecommerceDetail['idvisit'];
+
+ unset($ecommerceDetail['idvisit']);
+
+ if ($ecommerceDetail['type'] == Piwik::LABEL_ID_GOAL_IS_ECOMMERCE_CART) {
+ unset($ecommerceDetail['orderId']);
+ unset($ecommerceDetail['revenueSubTotal']);
+ unset($ecommerceDetail['revenueTax']);
+ unset($ecommerceDetail['revenueShipping']);
+ unset($ecommerceDetail['revenueDiscount']);
+ }
+
+ // 25.00 => 25
+ foreach ($ecommerceDetail as $column => $value) {
+ if (strpos($column, 'revenue') !== false) {
+ if ($value == round($value)) {
+ $ecommerceDetail[$column] = round($value);
+ }
+ }
+ }
+
+ $idOrder = isset($ecommerceDetail['orderId']) ? $ecommerceDetail['orderId'] : GoalManager::ITEM_IDORDER_ABANDONED_CART;
+
+ $itemsDetails = $this->queryEcommerceItemsForOrder($idVisit, $idOrder);
+ foreach ($itemsDetails as &$detail) {
+ if ($detail['price'] == round($detail['price'])) {
+ $detail['price'] = round($detail['price']);
+ }
+ }
+ $ecommerceDetail['itemDetails'] = $itemsDetails;
+
+ $actions[$idVisit][] = $ecommerceDetail;
+ }
+ }
+
+ /**
+ * @param $idSite
+ * @param $idVisitor
+ * @return array
+ * @throws \Exception
+ */
+ protected function queryEcommerceConversionsVisitorLifeTimeMetricsForVisitor($idSite, $idVisitor)
+ {
+ $sql = $this->getSqlEcommerceConversionsLifeTimeMetricsForIdGoal(GoalManager::IDGOAL_ORDER);
+ $ecommerceOrders = Db::fetchRow($sql, array($idSite, @Common::hex2bin($idVisitor)));
+
+ $sql = $this->getSqlEcommerceConversionsLifeTimeMetricsForIdGoal(GoalManager::IDGOAL_CART);
+ $abandonedCarts = Db::fetchRow($sql, array($idSite, @Common::hex2bin($idVisitor)));
+
+ return array(
+ 'totalEcommerceRevenue' => $ecommerceOrders['lifeTimeRevenue'],
+ 'totalEcommerceConversions' => $ecommerceOrders['lifeTimeConversions'],
+ 'totalEcommerceItems' => $ecommerceOrders['lifeTimeEcommerceItems'],
+ 'totalAbandonedCartsRevenue' => $abandonedCarts['lifeTimeRevenue'],
+ 'totalAbandonedCarts' => $abandonedCarts['lifeTimeConversions'],
+ 'totalAbandonedCartsItems' => $abandonedCarts['lifeTimeEcommerceItems']
+ );
+ }
+
+
+ /**
+ * @param $ecommerceIdGoal
+ * @return string
+ */
+ protected function getSqlEcommerceConversionsLifeTimeMetricsForIdGoal($ecommerceIdGoal)
+ {
+ $sql = "SELECT
+ COALESCE(SUM(" . LogAggregator::getSqlRevenue('revenue') . "), 0) as lifeTimeRevenue,
+ COUNT(*) as lifeTimeConversions,
+ COALESCE(SUM(" . LogAggregator::getSqlRevenue('items') . "), 0) as lifeTimeEcommerceItems
+ FROM " . Common::prefixTable('log_visit') . " AS log_visit
+ LEFT JOIN " . Common::prefixTable('log_conversion') . " AS log_conversion
+ ON log_visit.idvisit = log_conversion.idvisit
+ WHERE
+ log_visit.idsite = ?
+ AND log_visit.idvisitor = ?
+ AND log_conversion.idgoal = " . $ecommerceIdGoal . "
+ ";
+ return $sql;
+ }
+
+ /**
+ * @param $idVisit
+ * @param $limit
+ * @return array
+ * @throws \Exception
+ */
+ protected function queryEcommerceConversionsForVisits($idVisits)
+ {
+ $sql = "SELECT
+ idvisit,
+ case idgoal when " . GoalManager::IDGOAL_CART
+ . " then '" . Piwik::LABEL_ID_GOAL_IS_ECOMMERCE_CART
+ . "' else '" . Piwik::LABEL_ID_GOAL_IS_ECOMMERCE_ORDER . "' end as type,
+ idorder as orderId,
+ " . LogAggregator::getSqlRevenue('revenue') . " as revenue,
+ " . LogAggregator::getSqlRevenue('revenue_subtotal') . " as revenueSubTotal,
+ " . LogAggregator::getSqlRevenue('revenue_tax') . " as revenueTax,
+ " . LogAggregator::getSqlRevenue('revenue_shipping') . " as revenueShipping,
+ " . LogAggregator::getSqlRevenue('revenue_discount') . " as revenueDiscount,
+ items as items,
+ log_conversion.server_time as serverTimePretty,
+ log_conversion.idlink_va
+ FROM " . Common::prefixTable('log_conversion') . " AS log_conversion
+ WHERE idvisit IN ('" . implode("','", $idVisits) . "')
+ AND idgoal <= " . GoalManager::IDGOAL_ORDER . "
+ ORDER BY idvisit, server_time ASC";
+ $ecommerceDetails = Db::fetchAll($sql);
+ return $ecommerceDetails;
+ }
+
+ /**
+ * @param $idVisit
+ * @param $idOrder
+ * @param $actionsLimit
+ * @return array
+ * @throws \Exception
+ */
+ protected function queryEcommerceItemsForOrder($idVisit, $idOrder)
+ {
+ $sql = "SELECT
+ log_action_sku.name as itemSKU,
+ log_action_name.name as itemName,
+ log_action_category.name as itemCategory,
+ " . LogAggregator::getSqlRevenue('price') . " as price,
+ quantity as quantity
+ FROM " . Common::prefixTable('log_conversion_item') . "
+ INNER JOIN " . Common::prefixTable('log_action') . " AS log_action_sku
+ ON idaction_sku = log_action_sku.idaction
+ LEFT JOIN " . Common::prefixTable('log_action') . " AS log_action_name
+ ON idaction_name = log_action_name.idaction
+ LEFT JOIN " . Common::prefixTable('log_action') . " AS log_action_category
+ ON idaction_category = log_action_category.idaction
+ WHERE idvisit = ?
+ AND idorder = ?
+ AND deleted = 0
+ ";
+
+ $bind = array($idVisit, $idOrder);
+
+ $itemsDetails = Db::fetchAll($sql, $bind);
+ return $itemsDetails;
+ }
+
+ public function initProfile($visits, &$profile)
+ {
+ if (Site::isEcommerceEnabledFor($visits->getFirstRow()->getColumn('idSite'))) {
+ $profile['totalEcommerceRevenue'] = 0;
+ $profile['totalEcommerceConversions'] = 0;
+ $profile['totalEcommerceItems'] = 0;
+ $profile['totalAbandonedCarts'] = 0;
+ $profile['totalAbandonedCartsRevenue'] = 0;
+ $profile['totalAbandonedCartsItems'] = 0;
+ }
+ }
+
+ public function finalizeProfile($visits, &$profile)
+ {
+ $lastVisit = $visits->getLastRow();
+ if ($lastVisit && Site::isEcommerceEnabledFor($lastVisit->getColumn('idSite'))) {
+ $profile['totalEcommerceRevenue'] = $lastVisit->getColumn('totalEcommerceRevenue');
+ $profile['totalEcommerceConversions'] = $lastVisit->getColumn('totalEcommerceConversions');
+ $profile['totalEcommerceItems'] = $lastVisit->getColumn('totalEcommerceItems');
+ $profile['totalAbandonedCartsRevenue'] = $lastVisit->getColumn('totalAbandonedCartsRevenue');
+ $profile['totalAbandonedCarts'] = $lastVisit->getColumn('totalAbandonedCarts');
+ $profile['totalAbandonedCartsItems'] = $lastVisit->getColumn('totalAbandonedCartsItems');
+ }
+ }
+} \ No newline at end of file
diff --git a/plugins/Ecommerce/lang/de.json b/plugins/Ecommerce/lang/de.json
index bb5c0a6099..f681bb7814 100644
--- a/plugins/Ecommerce/lang/de.json
+++ b/plugins/Ecommerce/lang/de.json
@@ -1,6 +1,6 @@
{
"Ecommerce": {
- "PluginDescription": "Mit E-Commerce haben Sie die Möglichkeit zu Erfassen wenn ein Besucher Produkte in den Warenkorb legt, und wann es zu einem Verkauf kommt. Zusätzlich lassen sich auch Besuche von Produkt- sowie Kategorieseiten und verlassene Warenkörbe erfassen.",
+ "PluginDescription": "Mit E-Commerce haben Sie die Möglichkeit zu Erfassen, wenn ein Besucher Produkte in den Warenkorb legt, und wann es zu einem Verkauf kommt. Zusätzlich lassen sich auch Besuche von Produkt- sowie Kategorieseiten und verlassene Warenkörbe erfassen.",
"Sales": "Umsatz",
"SalesBy": "Umsatz nach %s",
"SalesAdjective": "Umsatz %s",
diff --git a/plugins/Ecommerce/lang/id.json b/plugins/Ecommerce/lang/id.json
new file mode 100644
index 0000000000..a665423bf6
--- /dev/null
+++ b/plugins/Ecommerce/lang/id.json
@@ -0,0 +1,7 @@
+{
+ "Ecommerce": {
+ "Sales": "Penjualan",
+ "SalesBy": "Penjualan oleh %s",
+ "SalesAdjective": "Penjualan %s"
+ }
+} \ No newline at end of file
diff --git a/plugins/Ecommerce/lang/pl.json b/plugins/Ecommerce/lang/pl.json
new file mode 100644
index 0000000000..dda935265d
--- /dev/null
+++ b/plugins/Ecommerce/lang/pl.json
@@ -0,0 +1,13 @@
+{
+ "Ecommerce": {
+ "PluginDescription": "Ecommerce pozwala śledzić kiedy odwiedzający dodają produkty do koszyków oraz kiedy następuje konwersja koszyków na sprzedaż. Pozwala również śledzić produkty i ich kategorie oraz porzucone koszyki.",
+ "Sales": "Sprzedaż",
+ "SalesBy": "Sprzedaż według %s",
+ "SalesAdjective": "Sprzedaż %s",
+ "LifeTimeValue": "Łączna kwota zakupów",
+ "LifeTimeValueDescription": "Całkowita sprzedaż przypisana do tego użytkownika w trakcie wszystkich wizyt: suma sprzedaży dla użytkownika o numerze %s.",
+ "VisitorProfileLTV": "Zakupił na łączną kwotę %1$s.",
+ "VisitorProfileItemsAndOrders": "zakupił łącznie %1$s przedmiotów w trakcie %2$s zamówień.",
+ "VisitorProfileAbandonedCartSummary": "Porzucił %1$s koszyków zakupowych zawierających %2$s przedmiotów o łącznej wartości %3$s."
+ }
+} \ No newline at end of file
diff --git a/plugins/Ecommerce/lang/zh-cn.json b/plugins/Ecommerce/lang/zh-cn.json
index de22d029fa..91cafadffd 100644
--- a/plugins/Ecommerce/lang/zh-cn.json
+++ b/plugins/Ecommerce/lang/zh-cn.json
@@ -1,9 +1,13 @@
{
"Ecommerce": {
+ "PluginDescription": "电子商务插件可以让您追踪用户何时添加商品到购物车,何时转化为电子商务销售。它也可以追踪产品和产品分类的浏览以及被放弃的购物车信息。",
"Sales": "销售",
"SalesBy": "由%s销售",
"SalesAdjective": "销售%s",
- "LifeTimeValue": "商业生命周期",
- "VisitorProfileLTV": "生成一个生命周期值%1$s"
+ "LifeTimeValue": "电商终生价值",
+ "LifeTimeValueDescription": "电子商务总收入由此客户的全部行为而来:访客编码%s的所有电商订单的收入总和。",
+ "VisitorProfileLTV": "生成一个%1$s的终生收入。",
+ "VisitorProfileItemsAndOrders": "在%2$s电商订单中共购买了%1$s个商品。",
+ "VisitorProfileAbandonedCartSummary": "被放弃的%1$s购物车包含了%2$s个商品,总值%3$s。"
}
} \ No newline at end of file
diff --git a/plugins/Ecommerce/templates/_profileSummary.twig b/plugins/Ecommerce/templates/_profileSummary.twig
new file mode 100644
index 0000000000..b3865096ac
--- /dev/null
+++ b/plugins/Ecommerce/templates/_profileSummary.twig
@@ -0,0 +1,14 @@
+<div class="visitor-profile-summary visitor-profile-lifetimevalue">
+ <h1>{{ 'Goals_Ecommerce'|translate }}</h1>
+ <div>
+ <p title="{{ 'Ecommerce_LifeTimeValueDescription'|translate(visitorData.visitorId) }}">
+ {{ 'Ecommerce_VisitorProfileLTV'|translate( "<strong>" ~ visitorData.totalEcommerceRevenue|money(idSite) ~ "</strong>")|raw }}
+ {{ 'Ecommerce_VisitorProfileItemsAndOrders'|translate("<strong>" ~ visitorData.totalEcommerceItems ~ "</strong>", "<strong>" ~ visitorData.totalEcommerceConversions ~ "</strong>")|raw }}
+ </p>
+ <p>
+ {%- if visitorData.totalAbandonedCarts|default(0) > 0 %}
+ {{ 'Ecommerce_VisitorProfileAbandonedCartSummary'|translate('<strong>' ~ visitorData.totalAbandonedCarts ~ '</strong>', '<strong>' ~ visitorData.totalAbandonedCartsItems ~ '</strong>', '<strong>' ~ visitorData.totalAbandonedCartsRevenue|money(idSite) ~ '</strong>')|raw }}
+ {%- endif -%}
+ </p>
+ </div>
+</div> \ No newline at end of file
diff --git a/plugins/Events/Columns/EventAction.php b/plugins/Events/Columns/EventAction.php
index 79b3b5867b..30c33fe8da 100644
--- a/plugins/Events/Columns/EventAction.php
+++ b/plugins/Events/Columns/EventAction.php
@@ -8,6 +8,7 @@
*/
namespace Piwik\Plugins\Events\Columns;
+use Piwik\Exception\InvalidRequestParameterException;
use Piwik\Piwik;
use Piwik\Plugin\Dimension\ActionDimension;
use Piwik\Plugins\Events\Segment;
@@ -44,13 +45,13 @@ class EventAction extends ActionDimension
return false;
}
- $eventAction = $request->getParam('e_a');
+ $eventAction = $action->getEventAction();
$eventAction = trim($eventAction);
if (strlen($eventAction) > 0) {
return $eventAction;
}
- return false;
+ throw new InvalidRequestParameterException('Param `e_a` must not be empty or filled with whitespaces');
}
} \ No newline at end of file
diff --git a/plugins/Events/Columns/EventCategory.php b/plugins/Events/Columns/EventCategory.php
index 7c6b5fd02a..731dd9615c 100644
--- a/plugins/Events/Columns/EventCategory.php
+++ b/plugins/Events/Columns/EventCategory.php
@@ -8,6 +8,7 @@
*/
namespace Piwik\Plugins\Events\Columns;
+use Piwik\Exception\InvalidRequestParameterException;
use Piwik\Piwik;
use Piwik\Plugin\Dimension\ActionDimension;
use Piwik\Plugins\Events\Segment;
@@ -44,13 +45,13 @@ class EventCategory extends ActionDimension
return false;
}
- $eventCategory = $request->getParam('e_c');
+ $eventCategory = $action->getEventCategory();
$eventCategory = trim($eventCategory);
if (strlen($eventCategory) > 0) {
return $eventCategory;
}
- return false;
+ throw new InvalidRequestParameterException('Param `e_c` must not be empty or filled with whitespaces');
}
} \ No newline at end of file
diff --git a/plugins/Events/Columns/EventName.php b/plugins/Events/Columns/EventName.php
index e672d316a3..bbe01ae0ff 100644
--- a/plugins/Events/Columns/EventName.php
+++ b/plugins/Events/Columns/EventName.php
@@ -43,7 +43,7 @@ class EventName extends ActionDimension
return false;
}
- $eventName = $request->getParam('e_n');
+ $eventName = $action->getEventName();
$eventName = trim($eventName);
if (strlen($eventName) > 0) {
diff --git a/plugins/Events/Events.php b/plugins/Events/Events.php
index 8ae0f5cb2e..d3fc8501f1 100644
--- a/plugins/Events/Events.php
+++ b/plugins/Events/Events.php
@@ -27,16 +27,11 @@ class Events extends \Piwik\Plugin
'Metrics.getDefaultMetricDocumentationTranslations' => 'addMetricDocumentationTranslations',
'Metrics.getDefaultMetricTranslations' => 'addMetricTranslations',
'ViewDataTable.configure' => 'configureViewDataTable',
- 'Live.getAllVisitorDetails' => 'extendVisitorDetails',
'AssetManager.getStylesheetFiles' => 'getStylesheetFiles',
+ 'Actions.getCustomActionDimensionFieldsAndJoins' => 'provideActionDimensionFields'
);
}
- public function extendVisitorDetails(&$visitor, $details)
- {
- $visitor['events'] = $details['visit_total_events'];
- }
-
public function addMetricTranslations(&$translations)
{
$translations = array_merge($translations, $this->getMetricTranslations());
@@ -265,4 +260,15 @@ class Events extends \Piwik\Plugin
{
$stylesheets[] = "plugins/Events/stylesheets/datatable.less";
}
+
+ public function provideActionDimensionFields(&$fields, &$joins)
+ {
+ $fields[] = 'log_action_event_category.type AS eventType';
+ $fields[] = 'log_action_event_category.name AS eventCategory';
+ $fields[] = 'log_action_event_action.name as eventAction';
+ $joins[] = 'LEFT JOIN ' . Common::prefixTable('log_action') . ' AS log_action_event_action
+ ON log_link_visit_action.idaction_event_action = log_action_event_action.idaction';
+ $joins[] = 'LEFT JOIN ' . Common::prefixTable('log_action') . ' AS log_action_event_category
+ ON log_link_visit_action.idaction_event_category = log_action_event_category.idaction';
+ }
}
diff --git a/plugins/Events/VisitorDetails.php b/plugins/Events/VisitorDetails.php
new file mode 100644
index 0000000000..ecf76847d8
--- /dev/null
+++ b/plugins/Events/VisitorDetails.php
@@ -0,0 +1,74 @@
+<?php
+/**
+ * Piwik - free/libre analytics platform
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+
+namespace Piwik\Plugins\Events;
+
+use Piwik\Plugins\Live\VisitorDetailsAbstract;
+use Piwik\Tracker\Action;
+use Piwik\View;
+
+class VisitorDetails extends VisitorDetailsAbstract
+{
+ const EVENT_VALUE_PRECISION = 3;
+
+ public function extendActionDetails(&$action, $nextAction, $visitorDetails)
+ {
+ if (!empty($action['eventType'])) {
+ $action['type'] = 'event';
+ $action['icon'] = 'plugins/Morpheus/images/event.png';
+
+ if (strlen($action['pageTitle']) > 0) {
+ $action['eventName'] = $action['pageTitle'];
+ }
+
+ if (isset($action['custom_float']) && strlen($action['custom_float']) > 0) {
+ $action['eventValue'] = round($action['custom_float'], self::EVENT_VALUE_PRECISION);
+ }
+
+ unset($action['pageTitle']);
+ unset($action['custom_float']);
+ } else {
+ unset($action['eventCategory']);
+ unset($action['eventAction']);
+ }
+ unset($action['eventType']);
+ }
+
+ public function extendVisitorDetails(&$visitor)
+ {
+ $visitor['events'] = $this->details['visit_total_events'];
+ }
+
+ public function renderAction($action, $previousAction, $visitorDetails)
+ {
+ if ($action['type'] != 'event') {
+ return;
+ }
+
+ $view = new View('@Events/_actionEvent.twig');
+ $view->action = $action;
+ $view->previousAction = $previousAction;
+ $view->visitInfo = $visitorDetails;
+ return $view->render();
+ }
+
+
+ public function initProfile($visits, &$profile)
+ {
+ $profile['totalEvents'] = 0;
+ }
+
+ public function handleProfileAction($action, &$profile)
+ {
+ if ($action['type'] != 'event') {
+ return;
+ }
+ $profile['totalEvents']++;
+ }
+} \ No newline at end of file
diff --git a/plugins/Events/lang/de.json b/plugins/Events/lang/de.json
index 00c1c9849a..17c218c59f 100644
--- a/plugins/Events/lang/de.json
+++ b/plugins/Events/lang/de.json
@@ -13,7 +13,7 @@
"EventNames": "Ereignisnamen",
"Events": "Ereignisse",
"EventsWithValue": "Ereignisse mit einem Wert",
- "EventsWithValueDocumentation": "Anzahl der Ereignisse bei denen ein Ereigniswert gesetzt war",
+ "EventsWithValueDocumentation": "Anzahl der Ereignisse, bei denen ein Ereigniswert gesetzt war",
"EventValue": "Ereigniswert",
"EventValueTooltip": "Der Gesamtereigniswert ist die Summe von %1$s Ereigniswerten %2$s zwischen dem Minimum von %3$s und dem Maximum von %4$s.",
"MaxValue": "Maximaler Wert",
diff --git a/plugins/Events/lang/id.json b/plugins/Events/lang/id.json
new file mode 100644
index 0000000000..8383a04d06
--- /dev/null
+++ b/plugins/Events/lang/id.json
@@ -0,0 +1,8 @@
+{
+ "Events": {
+ "AvgValue": "Nilai rata-rata",
+ "MaxValue": "Nilai maksimal",
+ "MinValue": "Nilai minimal",
+ "TotalValue": "Nilai total"
+ }
+} \ No newline at end of file
diff --git a/plugins/Events/lang/pl.json b/plugins/Events/lang/pl.json
index 1895c4518e..3cdefa588a 100644
--- a/plugins/Events/lang/pl.json
+++ b/plugins/Events/lang/pl.json
@@ -1,5 +1,6 @@
{
"Events": {
+ "PluginDescription": "Śledź zdarzenia i pobierz raporty aktywności Twoich odwiedzających,",
"AvgEventValue": "Średnia wartość zdarzenia: %s",
"AvgValue": "Średnia wartość",
"AvgValueDocumentation": "Średnia wszystkich wartości w tym przypadku",
@@ -12,7 +13,9 @@
"EventNames": "Nazwy zdarzeń",
"Events": "Zdarzenia",
"EventsWithValue": "Zdarzenia z wartością",
+ "EventsWithValueDocumentation": "Liczba zdarzeń z ustaloną wartością zdarzenia",
"EventValue": "Wartość wydarzenia",
+ "EventValueTooltip": "Łączna wartość Zdarzeń jest sumą %1$s wartości zdarzeń %2$s pomiędzy minimum %3$s i maksimum %4$s.",
"MaxValue": "Wartość maksymalna",
"MaxValueDocumentation": "Maksymalna wartość dla tego zdarzenia",
"MinValue": "Minimalna wartość",
diff --git a/plugins/Events/templates/_actionEvent.twig b/plugins/Events/templates/_actionEvent.twig
new file mode 100644
index 0000000000..6fa44108b1
--- /dev/null
+++ b/plugins/Events/templates/_actionEvent.twig
@@ -0,0 +1,25 @@
+<li class="action" title="{{ postEvent('Live.renderActionTooltip', action, visitInfo) }}">
+ <div>
+ {% if action.pageTitle|default(false) is not empty %}
+ <span class="truncated-text-line">{{ action.pageTitle|rawSafeDecoded }}</span>
+ {% endif %}
+ <img src='plugins/Morpheus/images/event.png' title='{{ 'Events_Event'|translate }}' class="action-list-action-icon event">
+ <span class="truncated-text-line event">{{ action.eventCategory|rawSafeDecoded }}
+ - {{ action.eventAction|rawSafeDecoded }} {% if action.eventName is defined %}- {{ action.eventName|rawSafeDecoded }}{% endif %} {% if action.eventValue is defined %}[{{ action.eventValue }}]{% endif %}</span>
+ {% if action.url is not empty %}
+ {% if previousAction.url|default(false) == action.url %}
+ {# For events, do not show (url) if the Event URL is the same as the URL last displayed #}
+ {% else %}
+ {% if action.url|trim|lower starts with 'javascript:' or
+ action.url|trim|lower starts with 'vbscript:' or
+ action.url|trim|lower starts with 'data:' %}
+ {{ action.url }}
+ {% else %}
+ <a href="{{ action.url }}" rel="noreferrer" target="_blank" class="truncated-text-line">
+ {{ action.url|replace({'http://': '', 'https://': ''}) }}
+ </a>
+ {% endif %}
+ {% endif %}
+ {% endif %}
+ </div>
+</li>
diff --git a/plugins/Feedback/lang/id.json b/plugins/Feedback/lang/id.json
index 32eaf8c16b..ad342d65e4 100644
--- a/plugins/Feedback/lang/id.json
+++ b/plugins/Feedback/lang/id.json
@@ -6,6 +6,7 @@
"ManuallySendEmailTo": "Silakan kirim manual pesan Anda ke",
"SendFeedback": "Kirim Umpanbalik",
"ThankYou": "Terimaksih telah membantu kami menjadikan Piwik lebih baik!",
- "TopLinkTooltip": "Katakan apa yang Anda pikirkan, atau membutuhkan Bantuan Profesional."
+ "TopLinkTooltip": "Katakan apa yang Anda pikirkan, atau membutuhkan Bantuan Profesional.",
+ "ContactUs": "Kontak kami"
}
} \ No newline at end of file
diff --git a/plugins/Feedback/lang/nl.json b/plugins/Feedback/lang/nl.json
index 478f1e7398..dced90ddaf 100644
--- a/plugins/Feedback/lang/nl.json
+++ b/plugins/Feedback/lang/nl.json
@@ -22,6 +22,7 @@
"ProfessionalServicesReviewPiwikSetup": "Een overzicht van je Piwik omgeving",
"ProfessionalServicesPhoneEmailSupport": "Telefoon en Email ondersteuning",
"ProfessionalServicesPremiumFeatures": "Premium functies",
+ "ProfessionalServicesAnalystConsulting": "Analytisch consulting services",
"ContactUs": "Contacteer ons",
"VisitTheForums": "Bezoek het %1$s Forums%2$s en ontvang hulp van de community van Piwik users"
}
diff --git a/plugins/Feedback/lang/pl.json b/plugins/Feedback/lang/pl.json
index d877c5039b..07e3549b42 100644
--- a/plugins/Feedback/lang/pl.json
+++ b/plugins/Feedback/lang/pl.json
@@ -1,17 +1,34 @@
{
"Feedback": {
- "DoYouHaveBugReportOrFeatureRequest": "Czy odkryłeś błąd o którym chcesz poinformować, lub masz pomysł na nową funkcjonalność?",
+ "DoYouHaveBugReportOrFeatureRequest": "Odkryłeś błąd o którym chcesz poinformować, czy masz pomysł na nową funkcjonalność?",
+ "HowToCreateTicket": "Zapraszamy, zapoznaj się z zaleceniami dotyczącymi pisania dobrych %1$szgłoszeń błędóœ%2$s lub %3$spomysłów na nowe funkcjonalności%4$s. Następnie zarejestruj się lub zaloguj do %5$snaszego systemu zgłoszeń%6$s i utwórz %7$snowe zgłoszenie%8$s.",
"IWantTo": "Pragnę:",
- "LearnWaysToParticipate": "Poznaj wszystkie sposoby %1$s uczestnictwa%2$s",
- "ManuallySendEmailTo": "Prosimy ręcznie wysłać swoją wiadomość",
+ "LearnWaysToParticipate": "Poznaj wszystkie sposoby %1$suczestnictwa%2$s",
+ "ManuallySendEmailTo": "Prosimy ręcznie wysłać swoją wiadomość do",
+ "PluginDescription": "Wyślij informację zwrotną do Zespołu Piwik. Dziel się pomysłami i sugestiami, które pomogą uczynić Piwik najlepszą platformą analityczną Świata!",
"PrivacyClaim": "Piwik respektuje twoją %1$sprywatność%2$s i oddaje ci pełną kontrolę nad twoimi danymi.",
- "RateFeatureLeaveMessageDislike": "Przykro nam słyszeć, że Tobie się nie podoba! Proszę pozwól nam wiedzieć, jak możemy to poprawić.",
+ "RateFeatureLeaveMessageDislike": "Przykro nam słyszeć, że Ci się nie podoba! Proszę napisz, jak możemy to poprawić.",
+ "RateFeatureLeaveMessageLike": "Cieszymy, że podoba Ci się ta funkcjonalność! Prosimy pisz, aby podzielić się swoimi spostrzeżeniami lub nowymi pomysłami.",
"RateFeatureSendFeedbackInformation": "Twoja platforma Piwik wyśle nam (Ekipa Piwik) wiadomość email (zawierającą twój adres email), dzięki temu będziemy mogli mieć z toba kontakt jeśli miałbyś jakieś pytania.",
"RateFeatureThankYouTitle": "Dziękujemy za ocenę '%s'!",
- "RateFeatureTitle": "Czy podoba Ci się '%s' funkcja? Proszę ocenić i zostawić komentarz",
+ "RateFeatureTitle": "Czy podoba Ci się funkcjonalność '%s'? Prosimy oceń ją i zostaw komentarz",
"SendFeedback": "Wyślij opinię",
"ThankYou": "Dziękujemy za pomoc, która pozwala uczynić statystyki Piwik jeszcze lepszymi!",
"TopLinkTooltip": "Powiedz nam co myslisz albo poproś o profesjonalne wsparcie.",
- "ViewUserGuides": "Naucz się jak skonfigurować Piwik i jak efektywnie analizować twoje dane z naszym %1$spodręcznikiem użytkownika%2$s"
+ "ViewAnswersToFAQ": "Zobacz odpowiedzi na %1$sNajczęściej Zadawane Pytania (FAQ)%2$s",
+ "ViewUserGuides": "Naucz się jak skonfigurować Piwik i jak efektywnie analizować twoje dane z naszym %1$spodręcznikiem użytkownika%2$s",
+ "CommunityHelp": "Wsparcie społeczności",
+ "ProfessionalHelp": "Profesjonalna pomoc",
+ "ProfessionalServicesIntro": "Nasza ogólnoświatowa sieć profesjonalnych konsultantów wsparcia Piwik dla Klientów korzystających z własnej instalacji Piwik.",
+ "ProfessionalServicesOfferIntro": "Jakie usługi przyniosą Ci korzyści?",
+ "ProfessionalServicesReviewPiwikSetup": "Przegląd ustawień Twojego Piwik'a",
+ "ProfessionalServicesOptimizationMaintenance": "Usługi optymalizacji i utrzymania Piwik",
+ "ProfessionalServicesPhoneEmailSupport": "Wsparcie telefoniczne i e-mail",
+ "ProfessionalServicesTraining": "Szkolenie użytkowników, techników i deweloperów",
+ "ProfessionalServicesPremiumFeatures": "Funkcjonalności premium",
+ "ProfessionalServicesCustomDevelopment": "Usługi programistyczne na zamówienie",
+ "ProfessionalServicesAnalystConsulting": "Usługi konsultacji analitycznej",
+ "ContactUs": "Skontaktuj się z nami",
+ "VisitTheForums": "Odwiedź %1$sFora%2$s i uzyskaj pomoc społeczności użytkowników Piwik"
}
} \ No newline at end of file
diff --git a/plugins/Goals/VisitorDetails.php b/plugins/Goals/VisitorDetails.php
new file mode 100644
index 0000000000..0d45b06367
--- /dev/null
+++ b/plugins/Goals/VisitorDetails.php
@@ -0,0 +1,124 @@
+<?php
+/**
+ * Piwik - free/libre analytics platform
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+namespace Piwik\Plugins\Goals;
+
+use Piwik\Common;
+use Piwik\Config;
+use Piwik\Date;
+use Piwik\Db;
+use Piwik\Metrics\Formatter;
+use Piwik\Piwik;
+use Piwik\Plugins\CustomVariables\CustomVariables;
+use Piwik\Plugins\Live\VisitorDetailsAbstract;
+use Piwik\Site;
+use Piwik\Tracker\Action;
+use Piwik\Tracker\PageUrl;
+
+class VisitorDetails extends VisitorDetailsAbstract
+{
+ const EVENT_VALUE_PRECISION = 3;
+
+ protected $lastGoalResults = array();
+ protected $lastVisitIds = array();
+
+ public function extendVisitorDetails(&$visitor)
+ {
+ $idVisit = $visitor['idVisit'];
+
+ if (in_array($idVisit, $this->lastVisitIds)) {
+ $goalConversionDetails = isset($this->lastGoalResults[$idVisit]) ? $this->lastGoalResults[$idVisit] : array();
+ } else {
+ $goalConversionDetails = $this->queryGoalConversionsForVisits(array($idVisit));
+ }
+
+ $visitor['goalConversions'] = count($goalConversionDetails);
+ }
+
+ public function provideActionsForVisitIds(&$actions, $idVisits)
+ {
+ $this->lastVisitIds = $idVisits;
+ $this->lastGoalResults = array();
+ $goalConversionDetails = $this->queryGoalConversionsForVisits($idVisits);
+
+ // use while / array_shift combination instead of foreach to save memory
+ while (is_array($goalConversionDetails) && count($goalConversionDetails)) {
+ $goalConversionDetail = array_shift($goalConversionDetails);
+ $idVisit = $goalConversionDetail['idvisit'];
+
+ unset($goalConversionDetail['idvisit']);
+
+ $this->lastGoalResults[$idVisit][] = $actions[$idVisit][] = $goalConversionDetail;
+ }
+ }
+
+ /**
+ * @param $idVisit
+ * @return array
+ * @throws \Exception
+ */
+ protected function queryGoalConversionsForVisits($idVisits)
+ {
+ $sql = "
+ SELECT
+ log_conversion.idvisit,
+ 'goal' as type,
+ goal.name as goalName,
+ goal.idgoal as goalId,
+ log_conversion.revenue as revenue,
+ log_conversion.idlink_va,
+ log_conversion.idlink_va as goalPageId,
+ log_conversion.server_time as serverTimePretty,
+ log_conversion.url as url
+ FROM " . Common::prefixTable('log_conversion') . " AS log_conversion
+ LEFT JOIN " . Common::prefixTable('goal') . " AS goal
+ ON (goal.idsite = log_conversion.idsite
+ AND
+ goal.idgoal = log_conversion.idgoal)
+ AND goal.deleted = 0
+ WHERE log_conversion.idvisit IN ('" . implode("','", $idVisits) . "')
+ AND log_conversion.idgoal > 0
+ ORDER BY log_conversion.idvisit, server_time ASC
+ ";
+ return Db::fetchAll($sql);
+ }
+
+
+ public function initProfile($visits, &$profile)
+ {
+ $profile['totalGoalConversions'] = 0;
+ $profile['totalConversionsByGoal'] = array();
+ }
+
+ public function handleProfileVisit($visit, &$profile)
+ {
+ $profile['totalGoalConversions'] += $visit->getColumn('goalConversions');
+ }
+
+ public function handleProfileAction($action, &$profile)
+ {
+ if ($action['type'] != 'goal') {
+ return;
+ }
+
+ $idGoal = $action['goalId'];
+ $idGoalKey = 'idgoal=' . $idGoal;
+
+ if (!isset($profile['totalConversionsByGoal'][$idGoalKey])) {
+ $profile['totalConversionsByGoal'][$idGoalKey] = 0;
+ }
+ ++$profile['totalConversionsByGoal'][$idGoalKey];
+
+ if (!empty($action['revenue'])) {
+ if (!isset($profile['totalRevenueByGoal'][$idGoalKey])) {
+ $profile['totalRevenueByGoal'][$idGoalKey] = 0;
+ }
+ $profile['totalRevenueByGoal'][$idGoalKey] += $action['revenue'];
+ }
+ }
+} \ No newline at end of file
diff --git a/plugins/Goals/Widgets/AddNewGoal.php b/plugins/Goals/Widgets/AddNewGoal.php
index c1207cde37..91e68595b7 100644
--- a/plugins/Goals/Widgets/AddNewGoal.php
+++ b/plugins/Goals/Widgets/AddNewGoal.php
@@ -34,7 +34,7 @@ class AddNewGoal extends \Piwik\Widget\Widget
if (Piwik::isUserHasAdminAccess($idSite)) {
$config->setName('Goals_AddNewGoal');
} else {
- $config->setName('Goals_CreateNewGOal');
+ $config->setName('Goals_CreateNewGoal');
}
if (count($goals) !== 0) {
diff --git a/plugins/Goals/lang/de.json b/plugins/Goals/lang/de.json
index c1896c1f90..bee3f0199d 100644
--- a/plugins/Goals/lang/de.json
+++ b/plugins/Goals/lang/de.json
@@ -25,13 +25,13 @@
"ColumnConversionRateProductDocumentation": "Die %s Konversionsrate ist die Anzahl der Bestellungen, die dieses Produkt enthalten, geteilt durch die Anzahl der Besuche auf der entsprechenden Produktseite.",
"ColumnConversions": "Konversionen",
"ColumnConversionsDocumentation": "Die Anzahl der Konversationen für %s",
- "ColumnOrdersDocumentation": "Die Gesamtzahl aller Ecommerce Bestellungen welche %s mindestens einmal enthielten.",
+ "ColumnOrdersDocumentation": "Die Gesamtzahl aller Ecommerce Bestellungen, welche %s mindestens einmal enthielten.",
"ColumnPurchasedProductsDocumentation": "Die Anzahl der bestellten Produkte ist die Summe der Bestellmengen aller Bestellungen",
"ColumnQuantityDocumentation": "Die insgesamt verkaufte Menge von %s.",
"ColumnRevenueDocumentation": "Gesamter Umsatz generiert von %s.",
"ColumnRevenuePerVisitDocumentation": "Der Gesamtumsatz generiert durch %s geteilt durch die Anzahl der Besuche.",
- "ColumnVisits": "Die Gesamtanzahl an Besuchen, unabhängig davon ob dabei ein Ziel erreicht wurde oder nicht.",
- "ColumnVisitsProductDocumentation": "Die Anzahl der Besuche auf der Produkt-\/Kategorieseite. Wird auch genutzt um die %s Konversionsrate zu berechnen.Diese Metrik ist auch im Report der Ecommerceansicht, wenn diese auf der Produkt-\/Kategorieseite eingestellt wurde.",
+ "ColumnVisits": "Die Gesamtanzahl an Besuchen, unabhängig davon, ob dabei ein Ziel erreicht wurde oder nicht.",
+ "ColumnVisitsProductDocumentation": "Die Anzahl der Besuche auf der Produkt-\/Kategorieseite. Wird auch genutzt, um die %s Konversionsrate zu berechnen.Diese Metrik ist auch im Report der Ecommerceansicht, wenn diese auf der Produkt-\/Kategorieseite eingestellt wurde.",
"Contains": "beinhaltet %s",
"ConversionByTypeReportDocumentation": "In diesem Bericht finden Sie detaillierte Informationen über die Performance Ihrer Ziele für jede der Kategorien in der linken Leiste. %1$s Klicken Sie auf eine der Kategorien, um den entsprechenden Bericht anzuzeigen. %2$s Weitere Informationen finden Sie in der %3$sZiel-Dokumentation auf piwik.org%4$s",
"ConversionRate": "%s Konversionsrate",
@@ -84,7 +84,7 @@
"OverallRevenue": "Gesamtumsatz",
"PageTitle": "Seitentitel",
"Pattern": "Muster",
- "PluginDescription": "Erstellen Sie Ziele und sehen Sie detaililerte Berichte über Ihre Zielkonversionen: Entwicklung über einen bestimmten Zeitraum, Umsatz pro Besuch, Konversionen pro Verweis, pro Suchbegriff, und mehr.",
+ "PluginDescription": "Erstellen Sie Ziele und sehen Sie detaillierte Berichte über Ihre Zielkonversionen: Entwicklung über einen bestimmten Zeitraum, Umsatz pro Besuch, Konversionen pro Verweis, pro Suchbegriff, und mehr.",
"ProductCategory": "Produktkategorie",
"ProductName": "Produktname",
"Products": "Produkte",
diff --git a/plugins/Goals/lang/id.json b/plugins/Goals/lang/id.json
index b9c1346b08..4f10573572 100644
--- a/plugins/Goals/lang/id.json
+++ b/plugins/Goals/lang/id.json
@@ -10,6 +10,9 @@
"BestKeywords": "Kata kunci konversi terbaik Anda adalah:",
"BestReferrers": "Konversi Situs Pengarah terbaik adalah:",
"CaseSensitive": "Peka huruf sesuai",
+ "CategoryTextGeneral_Visitors": "Lokasi pengguna",
+ "CategoryTextVisitsSummary_VisitsSummary": "Atribut pengguna",
+ "CategoryTextDevicesDetection_DevicesDetection": "Perangkat",
"ClickOutlink": "Klik Tautan ke situs luar",
"ColumnAverageOrderRevenueDocumentation": "Rerata Nilai Pesanan (RNP) merupakan total pendapatan dari seluruh Permintaan Niaga-E dibagi dengan jumlah pesanan.",
"ColumnAveragePriceDocumentation": "Pendapatan rerata untuk %s ini.",
@@ -29,9 +32,11 @@
"ConversionByTypeReportDocumentation": "Laporan ini menyediakan laporan terperinci tentang kinerja tujuan (konversi, ringkat konversi, dan pendapatan tiap kunjungan) untuk setiap kategori yang tersedia di panel kiri. %1$s Silakan klik salah satu kategori untuk melihat laporan. %2$s Informasi selengkapnya, silakan melihat %3$s dokumentasi Pelacakan Tujuan di piwik.org%4$s",
"ConversionRate": "%s tingkat konversi",
"Conversions": "%s konversi",
+ "ConversionsDescription": "konversi",
"ConversionsOverview": "Iktisar Konversi",
"ConversionsOverviewBy": "Iktisar konversi berdasarkan jenis kunjungan",
"DaysToConv": "Hari ke Konversi",
+ "Details": "Detail tujuan",
"DefaultGoalConvertedOncePerVisit": "(asali) Tujuan hanya dapat dikonversi sekali tiap kunjungan",
"DefaultRevenue": "Tujuan pendapatan asali",
"DefaultRevenueHelp": "Sebagai contoh, Borang Kontak yang dikirim oleh pengunjung mungkin benilai rerata $10. Piwik akan membantu Anda mengerti bagaimana seberapa baik ruas pengunjung Anda berkinerja.",
diff --git a/plugins/Goals/lang/pl.json b/plugins/Goals/lang/pl.json
index 5d8c876cb8..dd27f5db19 100644
--- a/plugins/Goals/lang/pl.json
+++ b/plugins/Goals/lang/pl.json
@@ -1,71 +1,108 @@
{
"Goals": {
"AbandonedCart": "Opuszczony Koszyk",
- "AddGoal": "Dodaj założenia",
+ "AddGoal": "Dodaj Cel",
"AddNewGoal": "Dodaj nowy cel",
- "AddNewGoalOrEditExistingGoal": "%1$sDodaj nowe założenie celu%2$s lub %3$sedytuj%4$s istniejące trafienia",
- "AllowGoalConvertedMoreThanOncePerVisit": "Zezwól dla trafień, by były zamieniane częściej w trakcie jednej wizyty",
- "AllowMultipleConversionsPerVisit": "Zezwalaj na wiele zamian przypadających w trakcie wizyty",
- "BestCountries": "Pochodzenie najlepszych krajów:",
- "BestKeywords": "Pochodzenie najlepszych słów kluczowych:",
- "BestReferrers": "Pochodzenie najlepszych serwisów internetowych jako odsyłających do nas:",
- "CaseSensitive": "dopasowanie czułości",
- "ClickOutlink": "kliknij na link do zewnętrznej strony",
+ "AddNewGoalOrEditExistingGoal": "%1$sDodaj nowy cel%2$s lub %3$sedytuj%4$s istniejące cele",
+ "AllowGoalConvertedMoreThanOncePerVisit": "Zezwól aby konwersja celu odbywała się więcej niż 1 raz podczas wizyty",
+ "AllowMultipleConversionsPerVisit": "Zezwalaj na wiele konwersji przypadających w trakcie wizyty",
+ "BestCountries": "Kraje z najlepszą konwersją:",
+ "BestKeywords": "Słowa kluczowe z najlepszą konwersją:",
+ "BestReferrers": "Najlepiej konwertujące odsyłacze z serwisów:",
+ "CaseSensitive": "Dopasowanie z uwzględnieniem wielkości liter",
+ "CancelAndReturnToGoals": "Anuluj i %1$spowróć do listy celów%2$s",
+ "CategoryTextGeneral_Visitors": "Lokalizacja użytkownika",
+ "CategoryTextReferrers_Referrers": "Odnośniki",
+ "CategoryTextVisitsSummary_VisitsSummary": "Atrybut użytkownika",
+ "CategoryTextDevicesDetection_DevicesDetection": "Urządzenia",
+ "CategoryTextGeneral_Visit": "zaangażowanie",
+ "ClickOutlink": "Kliknij na link do zewnętrznej strony",
"SendEvent": "Wyślij zdarzenie",
+ "ColumnAverageOrderRevenueDocumentation": "Średnia Wartość Zamówienia (ŚWZ) jest łącznym dochodem z Zamówień Ecommerce podzielonym przez liczbę zamówień.",
"ColumnAveragePriceDocumentation": "Średni dochód dla tego %s.",
+ "ColumnAverageQuantityDocumentation": "Średnia ilość tego %s sprzedana w zamówieniach Ecommerce.",
"ColumnConversionRateDocumentation": "Procent odwiedzin, które wywołało cel %s.",
- "ColumnConversionRateProductDocumentation": "%s Współczynnikiem konwersji jest liczba zamówień zawierających ten produkt, podzielona przez liczbę odwiedzin na stronie produktu.",
- "ColumnConversions": "Zmiany",
- "ColumnConversionsDocumentation": "Liczba konwersji na %s.",
- "ColumnPurchasedProductsDocumentation": "Ilość zakupionych produktów jest sumą ilości produktów sprzedawanych we wszystkich zamówień E-commerce.",
- "ColumnRevenueDocumentation": "Łączne przychody generowane przez %s.",
+ "ColumnConversionRateProductDocumentation": "%s Współczynnik konwersji jest liczbą zamówień zawierających ten produkt, podzieloną przez liczbę odwiedzin na stronie produktu.",
+ "ColumnConversions": "Konwersje",
+ "ColumnConversionsDocumentation": "Liczba konwersji dla %s.",
+ "ColumnOrdersDocumentation": "Całkowita liczba zamówień Ecommerce zwierających ten %s przynajmniej raz.",
+ "ColumnPurchasedProductsDocumentation": "Liczba zakupionych produktów jest sumą ilości produktów sprzedawanych we wszystkich zamówień E-commerce.",
+ "ColumnQuantityDocumentation": "Ilość jest liczbą wszystkich produktów sprzedanych w każdym %s.",
+ "ColumnRevenueDocumentation": "Całkowity przychód wygenerowany przez %s.",
+ "ColumnRevenuePerVisitDocumentation": "Całkowity przychód wygenerowany przez %s podzielony przez liczbę odwiedzin.",
+ "ColumnVisits": "Całkowita liczba odwiedzin, bez względu na to, czy cel został osiągnięty czy nie.",
+ "ColumnVisitsProductDocumentation": "Liczba wizyt na stronach produktów \/ kategorii. Liczba wykorzystywana przy obliczaniu %s współczynnika konwersji. Wskaźnik ten znajduje się w raporcie jeśli w widoku śledzenie e-commerce włączysz strony produktowe \/ kategorie.",
"Contains": "zawiera %s",
- "ConversionRate": "%s współczynnik zmian",
- "Conversions": "%s zmian",
- "ConversionsOverview": "Opis zamian",
- "ConversionsOverviewBy": "Przegląd przepływów pod kątem typu odwiedzin",
+ "ConversionByTypeReportDocumentation": "Ten raport zawiera szczegółowe informacje o wydajności celów (konwersje, współczynnik konwersji i dochód \/ wizytę) dla każdej kategorii dostępnej w panelu po lewej. %1$s Kliknij na wybranej kategorii aby zobaczyć raport. %2$s Więcej informacji znajdziesz w %3$sdokumentacji Śledzenia Celów%4$s",
+ "ConversionRate": "%s współczynnik konwersji",
+ "Conversions": "%s konwersji",
+ "ConversionsDescription": "konwersje",
+ "ConversionsOverview": "Przegląd konwersji",
+ "ConversionsOverviewBy": "Przegląd konwersji pod kątem typu odwiedzin",
"DaysToConv": "Dni do konwersji",
- "DefaultGoalConvertedOncePerVisit": "(domyślnie) założenie może zostać zamienione tylko raz w trakcie odwiedzin",
- "DefaultRevenue": "domyślnym przychodem z trafienia jest",
- "DefaultRevenueHelp": "Dla przykładu, formularz kontaktowy wypełniony przez odwiedzającego może być nawet wart średnio $10. Piwik pomaga więc zrozumieć i przeanalizować wszelkie zachowania odwiedzających.",
- "DeleteGoalConfirm": "Czy na pewno chcesz skasować te założenie %s?",
- "DocumentationRevenueGeneratedByProductSales": "Sprzedaży produktu. Wyklucza opodatkowania, wysyłkę i zniżki",
- "Download": "pobierz plik",
- "Ecommerce": "Ecommerce",
- "EcommerceLog": "E-commerce Zaloguj",
- "EcommerceOrder": "E-commerce zamów",
+ "Details": "Szczegóły celu",
+ "DefaultGoalConvertedOncePerVisit": "(domyślnie) Konwersja celu może nastąpić tylko raz w ciągu wizyty",
+ "DefaultRevenue": "Domyślny dochód z osiągnięcia celu to",
+ "DefaultRevenueHelp": "Na przykład, wysłanie formularza kontaktowego przez odwiedzającego może średnio być warte nawet $10. Piwik pomaga więc zrozumieć zaangażowanie grup Twoich odwiedzających.",
+ "DeleteGoalConfirm": "Czy na pewno chcesz skasować cel %s?",
+ "DocumentationRevenueGeneratedByProductSales": "Sprzedaż produktu. Nie zawiera podatku, kosztów dostawy i zniżek",
+ "Download": "Pobierz plik",
+ "Ecommerce": "E-commerce",
+ "EcommerceAndGoalsMenu": "E-commerce i cele",
+ "EcommerceLog": "Log E-commerce",
+ "EcommerceOrder": "Zamówienia E-commerce",
+ "EcommerceOverview": "Przegląd E-commerce",
+ "EcommerceReports": "Raporty E-commerce",
"ExceptionInvalidMatchingString": "Jeżeli wybierasz 'dokładne dopasowanie', łańcuch dopasowujący musi być adresem URL zaczynającym się od %1$s. Na przykład, '%2$s'.",
- "ExternalWebsiteUrl": "adres zewnętrzny URL",
+ "ExternalWebsiteUrl": "zewnętrzny adres URL",
"Filename": "nazwa pliku",
- "GoalConversion": "Zmiana założenia",
- "GoalConversionsBy": "Zmiany założeń %s ze względu na typ odwiedzin",
- "GoalIsTriggered": "Założenia osiągania celów są uruchomione",
- "GoalIsTriggeredWhen": "Założenie celu jest uruchomione, gdy",
- "GoalName": "Nazwa trafienia",
- "Goals": "Założenia",
- "GoalsOverview": "Przegląd trafień",
- "GoalX": "Trafienie %s",
+ "GoalConversion": "Konwersja celu",
+ "GoalConversions": "Konwersje celu",
+ "GoalConversionsBy": "Konwersje celu %s ze względu na typ odwiedzin",
+ "GoalIsTriggered": "Cel został osiągnięty",
+ "GoalIsTriggeredWhen": "Cel został osiągnięty, gdy",
+ "GoalName": "Nazwa celu",
+ "Goals": "Cele",
+ "ManageGoals": "Zarządzaj celami",
+ "GoalsOverview": "Przegląd celów",
+ "GoalsOverviewDocumentation": "To jest przegląd konwersji Twoich celów. Wstępnie wykres pokazuje sumę wszystkich konwersji. %s Poniżej wykresu, zobaczysz raporty konwersji poszczególnych celów. Linie wykropkowane można powiększyć klikając na nie.",
+ "GoalX": "Cel %s",
"HelpOneConversionPerVisit": "Jeżeli strona pasująca do tego trafienia jest odświeżana lub wyświetlana częściej w trakcie odwiedzin, trafienie będzie śledzić tylko za pierwszym razem, gdy strona była po raz pierwszy wyświetlona w trakcie wizyty.",
- "IsExactly": "dokładnie %s",
+ "IsExactly": "równa się %s",
+ "LearnMoreAboutGoalTrackingDocumentation": "Dowiedz się więcej o %1$sŚledzeniu Celów w Piwik%2$sw dokumentacji użytkownika.",
"LeftInCart": "%s pozostało w koszyku",
"Manually": "ręcznie",
- "ManuallyTriggeredUsingJavascriptFunction": "Założenie osiągnięcia celu jest ręcznie uruchamiane używając API Javascript z funkcją trackGoal()",
+ "ManuallyTriggeredUsingJavascriptFunction": "Ręczne wyzwolenie osiągnięcia celu odbywa się przy pomocy funkcji trackGoal() w API Javascript",
"MatchesExpression": "odpowiada wyrażeniu %s",
- "NewVisitorsConversionRateIs": "Współczynnik przejść dla nowych odwiedzających to %s",
+ "NewGoalIntro": "Śledzenie konwersji celu jest jedną z najwydajniejszych metod pomiaru i polepszania osiągania celów biznesowych przy pomocy serwisu www.",
+ "NewVisitorsConversionRateIs": "Współczynnik konwersji dla nowych odwiedzających to %s",
+ "NoGoalsNeedAccess": "Tylko Administrator lub użytkownik z uprawnieniami Super Użytkownika może zarządzać Celami wybranej strony. Skontaktuj się z Administratorem Piwik w celu konfiguracji Celu. <br> Śledzenie Celów jest świetnym sposobem na zrozumienie i maksymalizację wydajności Twojej strony!",
+ "NoConversionsNoReportsMessage": "Raporty nie są wyświetlane, ponieważ nie odnotowano danych konwersji dla wybranego celu i przedziału czasowego.",
+ "NeedAccess": "Tylko Administrator lub użytkownik z uprawnieniami Super Użytkownika może zarządzać Celami wybranej strony.",
"Optional": "(opcjonalnie)",
- "PageTitle": "tytuł strony",
+ "OverallConversionRate": "całkowity współczynnik konwersji (wizyt z osiągniętym celem)",
+ "OverallRevenue": "całkowity dochód",
+ "PageTitle": "Tytuł strony",
"Pattern": "Wzorzec",
+ "PluginDescription": "Twórz Cele i uzyskaj szczegółowe raporty o konwersjach Twoich celów: rozwój w czasie, dochód z wizyty, konwersji z odnośnika, ze słowa kluczowego, i więcej.",
"ProductCategory": "Kategoria produktu",
"ProductName": "Nazwa produktu",
"Products": "Produkty",
- "ProductSKU": "Produkt SKU",
- "ReturningVisitorsConversionRateIs": "Współczynnik przejść dla powracających odwiedzających wynosi %s",
- "UpdateGoal": "Zaktualizuj założenie",
+ "ProductSKU": "SKU produktu",
+ "ReturningVisitorsConversionRateIs": "Współczynnik konwersji dla powracających odwiedzających wynosi %s",
+ "SingleGoalOverviewDocumentation": "To jest przegląd konwersji dla pojedynczego celu. %s Mini wykresy poniżej grafu można powiększyć klikając na nich.",
+ "ThereIsNoGoalToManage": "Nie zdefiniowano celów do zarządzania dla %s",
+ "UpdateGoal": "Zaktualizuj Cel",
"URL": "URL",
- "ViewAndEditGoals": "Zobacz i edytuj trafienia",
- "VisitPageTitle": "odwiedź dany tytuł strony",
- "VisitUrl": "odwiedź dany adres URL (stronę lub grupę stron)",
+ "ViewAndEditGoals": "Przeglądaj i edytuj Cele",
+ "GoalsBy": "Cele według %s",
+ "GoalsAdjective": "Cele %s",
+ "VisitPageTitle": "Odwiedź stronę o wskazanym tytule",
+ "VisitsUntilConv": "Liczba wizyt do konwersji",
+ "VisitUrl": "Odwiedź dany adres URL (stronę lub grupę stron)",
"WhenVisitors": "przez odwiedzającego",
- "WhereThe": "gdzie"
+ "WhereThe": "gdzie",
+ "WhereVisitedPageManuallyCallsJavascriptTrackerLearnMore": "Odwiedzana strona musi zawierać odwołanie do metody JavaScript 'trackGoal' (%1$s dowiedz się więcej%2$s)",
+ "YouCanEnableEcommerceReports": "Możesz włączyć %1$s dla tego serwisu na stronie %2$s."
}
} \ No newline at end of file
diff --git a/plugins/Goals/lang/sv.json b/plugins/Goals/lang/sv.json
index d5b5c9b251..b5015af87a 100644
--- a/plugins/Goals/lang/sv.json
+++ b/plugins/Goals/lang/sv.json
@@ -14,6 +14,7 @@
"CategoryTextGeneral_Visitors": "användarens plats",
"CategoryTextReferrers_Referrers": "hänvisningar",
"CategoryTextVisitsSummary_VisitsSummary": "användarinformation",
+ "CategoryTextDevicesDetection_DevicesDetection": "Enheter",
"CategoryTextGeneral_Visit": "engagemang",
"ClickOutlink": "klickar på en länk till en extern webbplats",
"SendEvent": "triggar en händelse",
@@ -35,6 +36,7 @@
"ConversionByTypeReportDocumentation": "Denna rapport ger detaljerad information om målprestanda (omvandlingar, omvandlingsgrader och intäkter per besök) för varje kategori som finns i den vänstra panelen. %1$s Klicka på en av kategorierna för att visa rapporten. %2$s För mer information, läs %3$sdokumentationen om Spårningsmål på piwik.org%4$s",
"ConversionRate": "%s omvandlingsgrad",
"Conversions": "%s omvandlingar",
+ "ConversionsDescription": "konverteringar",
"ConversionsOverview": "Omvandlingsöversikt",
"ConversionsOverviewBy": "Omvandlingsöversikt per typ av besök",
"DaysToConv": "Dagar till omvandling",
@@ -78,6 +80,8 @@
"NoConversionsNoReportsMessage": "Rapporterna visas inte eftersom det inte finns någon konverteringsdata för det valda målet och perioden.",
"NeedAccess": "Bara en administratör eller användare med Superbehörighet kan hantera mål för angiven hemsida.",
"Optional": "(frivilligt)",
+ "OverallConversionRate": "total konverteringsgrad (besök med ett uppnått mål)",
+ "OverallRevenue": "total intäkt",
"PageTitle": "Sidtitel",
"Pattern": "mönster",
"PluginDescription": "Skapa mål och se detaljerade rapporter för målkonverteringar: utveckling över tid, intäkt per besök, konverteringar per hänvisningskälla, nyckelord med mera.",
@@ -98,6 +102,7 @@
"VisitUrl": "besöker en definerad URL (sida eller grupp av sidor)",
"WhenVisitors": "när besökarna",
"WhereThe": "där",
+ "WhereVisitedPageManuallyCallsJavascriptTrackerLearnMore": "Den besökta sidan behöver inkludera ett anrop till 'trackGoal'-metoden i javaskript (%1$slär dig mer%2$s)",
"YouCanEnableEcommerceReports": "Du kan aktivera %1$s för denna webbplats på sidan %2$s."
}
} \ No newline at end of file
diff --git a/plugins/Goals/lang/zh-cn.json b/plugins/Goals/lang/zh-cn.json
index 109dfe0c1e..6cb6636aea 100644
--- a/plugins/Goals/lang/zh-cn.json
+++ b/plugins/Goals/lang/zh-cn.json
@@ -1,16 +1,21 @@
{
"Goals": {
- "AbandonedCart": "丢弃的购物车",
+ "AbandonedCart": "被放弃的购物车",
"AddGoal": "新增目标",
"AddNewGoal": "新增目标",
"AddNewGoalOrEditExistingGoal": "%1$s新增目标%2$s 或 %3$s编辑%4$s 已有目标",
- "AllowGoalConvertedMoreThanOncePerVisit": "每次访问的所有目标会被多次转化",
- "AllowMultipleConversionsPerVisit": "每次访问允许多次转化",
- "BestCountries": "您的最佳转化国家为:",
- "BestKeywords": "您的最佳转化关键字为:",
- "BestReferrers": "您的最佳转化网站来源为:",
+ "AllowGoalConvertedMoreThanOncePerVisit": "允许目标在单次访问中被多次转化",
+ "AllowMultipleConversionsPerVisit": "允许单次访问多次转化",
+ "BestCountries": "您的最佳转化国家为:",
+ "BestKeywords": "您的最佳转化关键字为:",
+ "BestReferrers": "您的最佳转化网站来源为:",
"CaseSensitive": "大小写敏感",
+ "CancelAndReturnToGoals": "取消并%1$s返回目标列表%2$s",
+ "CategoryTextGeneral_Visitors": "用户位置",
"CategoryTextReferrers_Referrers": "来源",
+ "CategoryTextVisitsSummary_VisitsSummary": "用户属性",
+ "CategoryTextDevicesDetection_DevicesDetection": "设备",
+ "CategoryTextGeneral_Visit": "交互度",
"ClickOutlink": "点击链接转向外部网站",
"ColumnAverageOrderRevenueDocumentation": "评价订单价值 (AOV) 是所有订单的总金额除以订单数。",
"ColumnAveragePriceDocumentation": "%s 的平均收入。",
@@ -30,8 +35,8 @@
"ConversionByTypeReportDocumentation": "本报表显示左边每个分类的详细的目标性能。(转化, 转化率和单次访问收入)。%1$s 请点击分类查看报表。 %2$s 详情查看 %3$s跟踪目标文档%4$s",
"ConversionRate": "%s转化率",
"Conversions": "%s 转化数",
- "ConversionsOverview": "转化总表",
- "ConversionsOverviewBy": "基于访问类型的转化总表",
+ "ConversionsOverview": "转化概览",
+ "ConversionsOverviewBy": "基于访问类型的转化概览",
"DaysToConv": "天数转化",
"DefaultGoalConvertedOncePerVisit": "(默认) 每次访问目标只能转化一次",
"DefaultRevenue": "目标默认收入是",
@@ -40,14 +45,14 @@
"DocumentationRevenueGeneratedByProductSales": "产品销售额,不含税、运费和优惠。",
"Download": "下载文件",
"Ecommerce": "电子商务",
- "EcommerceAndGoalsMenu": "电子商务目标",
- "EcommerceLog": "日志",
- "EcommerceOrder": "订单",
- "EcommerceOverview": "总表",
+ "EcommerceAndGoalsMenu": "电子商务与目标",
+ "EcommerceLog": "电子商务记录",
+ "EcommerceOrder": "电子商务订单",
+ "EcommerceOverview": "电子商务概览",
"EcommerceReports": "电子商务报表",
"ExceptionInvalidMatchingString": "如果选择 'exact match',匹配的字符串必须是以 %1$s 开头的网址,例如,'%2$s' 。",
- "ExternalWebsiteUrl": "外部网站",
- "Filename": "文件名称",
+ "ExternalWebsiteUrl": "外部网站网址",
+ "Filename": "文件名",
"GoalConversion": "目标转化",
"GoalConversions": "目标转化",
"GoalConversionsBy": "基于访问类型的目标 %s 转化",
@@ -56,8 +61,8 @@
"GoalName": "目标名称",
"Goals": "目标分析",
"ManageGoals": "管理目标",
- "GoalsOverview": "目标总表",
- "GoalsOverviewDocumentation": "这是目标转化总表。图形首先显示所有转化总和。%s 在图形下面可以看到每个目标的转化报表,点击波形图可放大。",
+ "GoalsOverview": "目标概览",
+ "GoalsOverviewDocumentation": "这是目标转化概览。图形首先显示所有转化总和。%s 在图形下面可以看到每个目标的转化报表,点击波迷你图可放大。",
"GoalX": "%s目标",
"HelpOneConversionPerVisit": "如果一次访问中,匹配目标的页面被刷新或多次查看,只有第一次访问页面的目标会被统计。",
"IsExactly": "正好是 %s",
@@ -75,11 +80,11 @@
"Products": "产品",
"ProductSKU": "产品 SKU",
"ReturningVisitorsConversionRateIs": "老访客转化率为 %s",
- "SingleGoalOverviewDocumentation": "这是单个目标转化的总表。%s 点击图形下的波形图可放大。",
+ "SingleGoalOverviewDocumentation": "这是单个目标转化的概览。%s 点击图形下的迷你图可放大。",
"ThereIsNoGoalToManage": "%s 没有设定目标",
"UpdateGoal": "更新目标",
"URL": "网址",
- "ViewAndEditGoals": "查看和编辑目标",
+ "ViewAndEditGoals": "查看并编辑目标",
"VisitPageTitle": "访问一个特定的页面标题",
"VisitsUntilConv": "访问转化",
"VisitUrl": "访问特定网址(页面或页面组)",
diff --git a/plugins/Goals/templates/_listGoalEdit.twig b/plugins/Goals/templates/_listGoalEdit.twig
index 4496f4fef6..c0ca80e08a 100644
--- a/plugins/Goals/templates/_listGoalEdit.twig
+++ b/plugins/Goals/templates/_listGoalEdit.twig
@@ -39,7 +39,7 @@
<tr>
<td colspan='8'>
<br/>
- {{ 'Goals_ThereIsNoGoalToManage'|translate(siteName)|raw }}.
+ {{ 'Goals_ThereIsNoGoalToManage'|translate(siteName)|rawSafeDecoded }}.
<br/><br/>
</td>
</tr>
diff --git a/plugins/ImageGraph/ImageGraph.php b/plugins/ImageGraph/ImageGraph.php
index 86a1d45cfc..3b021958df 100644
--- a/plugins/ImageGraph/ImageGraph.php
+++ b/plugins/ImageGraph/ImageGraph.php
@@ -14,6 +14,7 @@ use Piwik\Config;
use Piwik\Container\StaticContainer;
use Piwik\Period;
use Piwik\Period\Range;
+use Piwik\Piwik;
use Piwik\Scheduler\Scheduler;
use Piwik\Site;
use Piwik\Url;
diff --git a/plugins/ImageGraph/lang/id.json b/plugins/ImageGraph/lang/id.json
index 154544ffbc..8b6f9574ec 100644
--- a/plugins/ImageGraph/lang/id.json
+++ b/plugins/ImageGraph/lang/id.json
@@ -1,5 +1,6 @@
{
"ImageGraph": {
- "ColumnOrdinateMissing": "Kolom '%1$s' tidak ditemukan dalam laporan ini. Coba salah satu dari %2$s"
+ "ColumnOrdinateMissing": "Kolom '%1$s' tidak ditemukan dalam laporan ini. Coba salah satu dari %2$s",
+ "PluginDescription": "Buat gambar Grafik PNG statis cantik untuk semua dari laporan data Anda"
}
} \ No newline at end of file
diff --git a/plugins/ImageGraph/lang/pl.json b/plugins/ImageGraph/lang/pl.json
new file mode 100644
index 0000000000..df60892d24
--- /dev/null
+++ b/plugins/ImageGraph/lang/pl.json
@@ -0,0 +1,6 @@
+{
+ "ImageGraph": {
+ "ColumnOrdinateMissing": "Kolumna '%1$s' nie została odnaleziona w tym raporcie. Spróbuj jednej z %2$s",
+ "PluginDescription": "Generuj piękne statyczne Obrazkowe Wykresy w formacie PNG dla dowolnych danych raportu."
+ }
+} \ No newline at end of file
diff --git a/plugins/Insights/lang/de.json b/plugins/Insights/lang/de.json
index 07b2e9a8c4..640ebcf183 100644
--- a/plugins/Insights/lang/de.json
+++ b/plugins/Insights/lang/de.json
@@ -22,7 +22,7 @@
"OverviewWidgetTitle": "Insights Übersicht",
"TitleConsideredInsightsChanges": "Die Zeilen steigerten sich oder sanken um mindestens %1$s Besuche (%2$s%% von %3$s Total Besuchen).",
"TitleConsideredInsightsGrowth": "Die folgenden Zeilen steigerten sich um mindestens %1$s%% verglichen mit %2$s.",
- "TitleConsideredMoversAndShakersChanges": "Berücksichtigte Verschiebungen nur wenn sie sich um mehr als %1$s%% Besuche steigerten oder sich auf weniger als %2$s%% Besuche reduzierten, neue Einträge nur bei Steigerungen um mehr als %3$s%% Besuche (%4$s), und verlorene Zeilen wenn Sie sich auf weniger als %5$s%% Besuche (%6$s) reduzierten.",
+ "TitleConsideredMoversAndShakersChanges": "Berücksichtigte Verschiebungen, nur wenn sie sich um mehr als %1$s%% Besuche steigerten oder sich auf weniger als %2$s%% Besuche reduzierten, neue Einträge nur bei Steigerungen um mehr als %3$s%% Besuche (%4$s), und verlorene Zeilen, wenn Sie sich auf weniger als %5$s%% Besuche (%6$s) reduzierten.",
"TitleConsideredMoversAndShakersGrowth": "%1$s hat sich von %2$s auf %3$s geändert verglichen mit %4$s. Darauf basierend ist eine Entwicklung jeder Reihe über %5$s%% zu erwarten.",
"TitleRowChangeDetails": "'%1$s' hat sich geändert von %2$s (%3$s) zu %4$s (%5$s) %6$s.",
"TitleRowDisappearedDetails": "'%1$s' ist um %2$s gesunken und verschwand in %3$s verglichen zu %4$s.",
diff --git a/plugins/Insights/lang/id.json b/plugins/Insights/lang/id.json
new file mode 100644
index 0000000000..0666f16aaa
--- /dev/null
+++ b/plugins/Insights/lang/id.json
@@ -0,0 +1,11 @@
+{
+ "Insights": {
+ "ControlComparedToDescription": "Pertumbuhan dibandingkan ke",
+ "DayComparedToPreviousDay": "hari sebelumnya",
+ "Filter": "Saring",
+ "FilterOnlyNew": "Hanya baru",
+ "MonthComparedToPreviousMonth": "bulan sebelumnya",
+ "WeekComparedToPreviousWeek": "minggu sebelumnya",
+ "YearComparedToPreviousYear": "tahun sebelumnya"
+ }
+} \ No newline at end of file
diff --git a/plugins/Insights/lang/pl.json b/plugins/Insights/lang/pl.json
index 0330438507..128c280af7 100644
--- a/plugins/Insights/lang/pl.json
+++ b/plugins/Insights/lang/pl.json
@@ -1,18 +1,32 @@
{
"Insights": {
- "ControlComparedToDescription": "Wzrost stosunku do",
+ "PluginDescription": "Insights dostarcza informacji o ruchu na stronie. Informacje te dostępne są w postaci widżetów pulpitu jak też jako ikona w raportach, tak abyś widział najważniejsze trendy w swoich danych.",
+ "ControlComparedToDescription": "Wzrost w stosunku do",
+ "ControlFilterByDescription": "Pokaż wszystkich, tylko przechodzących, tylko nowych lub tylko znikających",
+ "DatePeriodCombinationNotSupported": "Nie udało się wygenerować Insights'a dla tej kombinacji daty i okresu.",
"DayComparedToPreviousDay": "poprzedniego dnia",
"DayComparedToPreviousWeek": "tego samego dnia w poprzednim tygodniu",
"DayComparedToPreviousYear": "ten sam dzień w poprzednim roku",
"Filter": "Filtr",
- "FilterOnlyNew": "Tylko nowe",
- "IgnoredChanges": "Zmiany wpływające na mniej niż %s wizyt były ignorowane.",
+ "FilterIncreaserAndDecreaser": "Wzrostowy i spadkowy",
+ "FilterOnlyDecreaser": "Tylko spadkowy",
+ "FilterOnlyDisappeared": "Tylko znikający",
+ "FilterOnlyIncreaser": "Tylko wzrostowy",
+ "FilterOnlyMovers": "Tylko przejściowy",
+ "FilterOnlyNew": "Tylko nowi",
+ "IgnoredChanges": "Zmiany wpływające na mniej niż %s wizyt zostały pominięte.",
"MonthComparedToPreviousMonth": "poprzedni miesiąc",
"MonthComparedToPreviousYear": "ten sam miesiąc w poprzednim roku",
- "NoResultMatchesCriteria": "Żaden wiesz nie spełnia kryteria",
- "OverviewWidgetTitle": "Spostrzeżenia Ogólne",
+ "NoResultMatchesCriteria": "Żaden wiesz nie spełnia kryteriów",
+ "OverviewWidgetTitle": "Przegląd Insights'ów",
+ "TitleConsideredInsightsChanges": "Wiersze wzrosły lub zmalały o przynajmniej %1$s wizyt (%2$s%% z %3$s ogółu wizyt).",
+ "TitleConsideredInsightsGrowth": "Następne wiersze odnotowują wzrost o przynajmniej %1$s%% w porównaniu do %2$s.",
+ "TitleRowChangeDetails": "'%1$s' zmienił się z %2$s (%3$s) do %4$s (%5$s) %6$s.",
+ "TitleRowDisappearedDetails": "'%1$s' zmniejszył się o %2$s i zniknął w %3$s w porównaniu do %4$s.",
+ "TitleRowMoverAndShaker": "Ten wiersz miał ponad przeciętny wpływ.",
"TitleRowNewDetails": "\"%1$s\" wzrosły o %2$s i jest nowa w porównaniu z %3$s.",
"WeekComparedToPreviousWeek": "poprzedni tydzień",
+ "WidgetCategory": "Insights",
"YearComparedToPreviousYear": "poprzedni rok"
}
} \ No newline at end of file
diff --git a/plugins/Installation/Installation.php b/plugins/Installation/Installation.php
index 023723c3b3..758d0dc0f6 100644
--- a/plugins/Installation/Installation.php
+++ b/plugins/Installation/Installation.php
@@ -14,6 +14,7 @@ use Piwik\Config;
use Piwik\FrontController;
use Piwik\Piwik;
use Piwik\Plugins\Installation\Exception\DatabaseConnectionFailedException;
+use Piwik\SettingsPiwik;
use Piwik\View as PiwikView;
/**
@@ -62,6 +63,10 @@ class Installation extends \Piwik\Plugin
{
$general = Config::getInstance()->General;
+ if (!SettingsPiwik::isPiwikInstalled() && !$general['enable_installer']) {
+ throw new \Exception('Piwik is not set up yet');
+ }
+
if (empty($general['installation_in_progress'])) {
return;
}
diff --git a/plugins/Installation/javascripts/installation.js b/plugins/Installation/javascripts/installation.js
index 64b1f18da5..05fc3d193a 100644
--- a/plugins/Installation/javascripts/installation.js
+++ b/plugins/Installation/javascripts/installation.js
@@ -15,7 +15,7 @@ $(document).ready(function() {
var $help = $(help);
var $row = $help.parents('.row').first();
- if ($row.size()) {
+ if ($row.length) {
$help.addClass('col s12 m12 l6');
$row.append($help);
}
diff --git a/plugins/Installation/lang/ar.json b/plugins/Installation/lang/ar.json
index 917def9e7d..0159302c6c 100644
--- a/plugins/Installation/lang/ar.json
+++ b/plugins/Installation/lang/ar.json
@@ -98,7 +98,6 @@
"SystemCheckOtherExtensions": "إضافات أخرى",
"SystemCheckOtherFunctions": "دوال أخرى",
"SystemCheckPageSpeedDisabled": "PageSpeed معطَّل",
- "SystemCheckPageSpeedWarn": "نقترح تعطيل وحدة PageSpeed في خادم الويب %s لديك ، وصلتنا معلومة بأن PageSpeed يسبب عدة مشاكل عند استخدامه مع Piwik",
"SystemCheckPackHelp": "الدالة pack() مطلوبة ليتمكن Piwik من تتبع الزوار.",
"SystemCheckParseIniFileHelp": "تم تعطيل الدالة المبنية ضمناً من طرف مزود الخدمة لديك. Piwik سيحاول أن يقلد هذه الدالة ذاتياً ولكنه قد يواجه عدداً من الاعتبارات الأمنية الأخرى. سيتأثر أيضاً أداء عملية التتبع.",
"SystemCheckPdoAndMysqliHelp": "على ملقم لينوكس يمكنك ضبط PHP بالإعدادات التالية: %1$s في ملف php.ini أضف السطور التالية: %2$s",
diff --git a/plugins/Installation/lang/cs.json b/plugins/Installation/lang/cs.json
index 1d7fd57e1f..e817891a2b 100644
--- a/plugins/Installation/lang/cs.json
+++ b/plugins/Installation/lang/cs.json
@@ -99,7 +99,6 @@
"SystemCheckOtherExtensions": "Ostatní rozšíření",
"SystemCheckOtherFunctions": "Ostatní funkce",
"SystemCheckPageSpeedDisabled": "PageSpeed zakázán",
- "SystemCheckPageSpeedWarn": "Doporučujeme modul PageSpeed zakázat v konfiguraci webového serveru: %s Bylo hlášeno, že způsobuje problémy s Piwikem.",
"SystemCheckPackHelp": "Funkce pack() je nutná ke sledování návštěvnosti v Piwiku.",
"SystemCheckParseIniFileHelp": "Tato vestavěná funkce byla na vašem hostiteli zakázána. Piwik se pokusí tuto funkci emulovat, ale můžete zaznamenat další bezpečnostní omezení. Výkonnost trackeru bude také omezena.",
"SystemCheckPdoAndMysqliHelp": "Na GNU\/Linux systému můžete zkompilovat PHP s následujícími volbami: %1$s Přidejte následující řádky do php.ini: %2$s",
diff --git a/plugins/Installation/lang/da.json b/plugins/Installation/lang/da.json
index 72ce439988..efeb6278f5 100644
--- a/plugins/Installation/lang/da.json
+++ b/plugins/Installation/lang/da.json
@@ -36,6 +36,7 @@
"NfsFilesystemWarning": "Din server benytter et NFS filsystem.",
"NfsFilesystemWarningSuffixAdmin": "Det betyder at Piwik vil være ekstremt langsom når der benyttes filbaserede sessioner.",
"NfsFilesystemWarningSuffixInstall": "Brug af filbaserede sessioner på et NFS filsystem er ekstrem langsomt, så Piwik vil benytte database sessioner. Hvis du har mange samtidige kontrolpanelsbrugere, vil du muligvis være nødt til at hæve det maksimale antal af klient forbindelser til database serveren.",
+ "YouMayInstallPiwikNow": "Du kan %1$sinstallere Piwik nu%2$s",
"Optional": "Valgfri",
"Password": "Password",
"PasswordDoNotMatch": "adgangskoder stemmer ikke overens",
@@ -84,12 +85,12 @@
"SystemCheckMbstringHelp": "Mbstring udvidelse er nødvendig for at håndtere multibytetegn i brugergrænsefladen og API-svar. Kontroller at mbstring.func_overload er indstillet til \"0\" i php.ini.",
"SystemCheckMemoryLimit": "Hukommelses grænse",
"SystemCheckMemoryLimitHelp": "På et stærkt trafikeret hjemmesider, kan arkiveringsprocessen kræve mere hukommelse end der er tilladt.<br \/>Se på memory_limit i php.ini filen hvis nødvendig.",
+ "SystemCheckNoErrorsOrWarnings": "Der er ingen fejl eller advarsler",
"SystemCheckOpenURL": "Åbn netadresse",
"SystemCheckOpenURLHelp": "Nyhedsbrev tilmelding, opdateringsbeskeder og et-klik opdatering kræver \"curl\" udvidelsen, allow_url_fopen=On, eller fsockopen() aktiveret.",
"SystemCheckOtherExtensions": "Andre udvidelser",
"SystemCheckOtherFunctions": "Andre funktioner",
"SystemCheckPageSpeedDisabled": "PageSpeed er deaktiveret",
- "SystemCheckPageSpeedWarn": "Vi anbefaler at deaktivere PageSpeed modulet i server %s: PageSpeed er blevet rapporteret at forårsage flere problemer med Piwik.",
"SystemCheckPackHelp": "Funktionen pack() er nødvendig for at spore besøgende i Piwik.",
"SystemCheckParseIniFileHelp": "Den indbyggede funktion er blevet deaktiveret hos udbyderen. Piwik vil forsøge at efterligne funktionen, men kan støde på yderligere sikkerhed restriktioner. Sporingsydelsen vil også blive påvirket.",
"SystemCheckPdoAndMysqliHelp": "På en linux-server kan php kompileres med følgende valg: %1$sn i php.ini, tilføj følgende linjer: %2$s",
diff --git a/plugins/Installation/lang/de.json b/plugins/Installation/lang/de.json
index c379966161..bb1881f30a 100644
--- a/plugins/Installation/lang/de.json
+++ b/plugins/Installation/lang/de.json
@@ -14,7 +14,7 @@
"DatabaseSetupDatabaseName": "Datenbankname",
"DatabaseSetupLogin": "Benutzer",
"DatabaseSetupServer": "Datenbank-Server",
- "DatabaseSetupTablePrefix": "Tabellen-Prefix",
+ "DatabaseSetupTablePrefix": "Tabellen-Präfix",
"Email": "E-Mail",
"Extension": "Erweiterung",
"Filesystem": "Dateisystem",
@@ -23,7 +23,7 @@
"HappyAnalysing": "Viel Spaß beim Analysieren!",
"Installation": "Installation",
"InstallationStatus": "Status der Installation",
- "InsufficientPrivilegesHelp": "Sie können diese Rechte mit einem Tool wie phpMyAdmin oder den entsprechenden SQL Kommandos hinzufügen. Wenn Sie nicht wissen, was zu tun ist, wenden Sie sich bitte an den System Administrator, damit er für Sie diese Rechte setzt.",
+ "InsufficientPrivilegesHelp": "Sie können diese Rechte mit einem Tool wie phpMyAdmin oder den entsprechenden SQL Kommandos hinzufügen. Wenn Sie nicht wissen, was zu tun ist, wenden Sie sich bitte an den System-Administrator, damit er für Sie diese Rechte setzt.",
"InsufficientPrivilegesMain": "Entweder existiert die Datenbank nicht (und konnte nicht erstellt werden), oder der angegebene Benutzer hat unzureichende Berechtigungen. Der Datenbankbenutzer muss folgende Berechtigungen besitzen: %s",
"InvalidStateError": "Fehler: Piwik ist bereits installiert. %1$s Zurück %2$s zu Piwik%3$s.",
"JsTagArchivingHelp1": "Für Websites mit mittlerem bis hohem Verkehrsaufkommen gibt es einige Optimierungen, die vorgenommen werden sollten, damit Piwik schneller läuft (z.B. %1$sdie Einrichtung von Auto-Archivierung%2$s).",
@@ -32,9 +32,9 @@
"LargePiwikInstances": "Hilfe für große Piwik-Installationen",
"Legend": "Legende",
"LoadDataInfileRecommended": "Falls Ihr Piwik Server Websites mit erhöhtem Verkehrsaufkommen (z.B.: > 100.000 Seiten pro Monat) verarbeiten muss empfehlen wir dieses Problem zu beheben.",
- "LoadDataInfileUnavailableHelp": "Die Benutzung von %1$s erhöht die Geschwindigkeit des Piwik Archivierungsprozesses erheblich. Um dies für Piwik verfügbar zu machen setzen Sie bitte eine neuere PHP & MySQL Software ein und stellen Sie sicher, dass der gewählte Datenbankbenutzer das %2$s Recht besitzt.",
+ "LoadDataInfileUnavailableHelp": "Die Benutzung von %1$s erhöht die Geschwindigkeit des Piwik Archivierungsprozesses erheblich. Um dies für Piwik verfügbar zu machen, setzen Sie bitte eine neuere PHP & MySQL Software ein und stellen Sie sicher, dass der gewählte Datenbankbenutzer das %2$s Recht besitzt.",
"NfsFilesystemWarning": "Ihr Server nutzt ein NFS Dateisystem",
- "NfsFilesystemWarningSuffixAdmin": "Dies bedeutet, dass Piwik extrem langsam arbeitet wenn Dateibasierte Sessions genutzt werden.",
+ "NfsFilesystemWarningSuffixAdmin": "Dies bedeutet, dass Piwik extrem langsam arbeitet, wenn Dateibasierte Sessions genutzt werden.",
"NfsFilesystemWarningSuffixInstall": "Die Benutzung von dateibasierten Sessions auf NFS ist extrem langsam, deshalb wird Piwik datenbankbasierte Sessions nutzen. Falls es viele gleichzeitige Zugriffe auf das Dashboard gibt, sollten Sie möglicherweise die maximal erlaubten Client-Zugriffe auf den Datenbankserver erhöhen.",
"NoConfigFileFound": "Sie versuchen gerade auf eine Piwik-Seite zuzugreifen, die Konfigurationsdatei von Piwik konnte jedoch nicht gefunden werden.",
"YouMayInstallPiwikNow": "Sie können %1$sPiwik jetzt installieren%2$s",
@@ -62,7 +62,7 @@
"SetupWebsiteSetupSuccess": "Website %s erfolgreich angelegt!",
"SetupWebSiteURL": "URL der Website",
"SiteSetup": "Konfigurieren Sie Ihre erste Website, welche über Piwik getrackt und analysiert werden soll:",
- "SiteSetupFootnote": "Hinweis: Sie können weitere Websites hinzuzufügen sobald die Installation von Piwik abgeschlossen wurde!",
+ "SiteSetupFootnote": "Hinweis: Sie können weitere Websites hinzuzufügen, sobald die Installation von Piwik abgeschlossen wurde!",
"SuperUser": "Hauptadministrator",
"SuperUserLogin": "Hauptadministrator Login",
"SuperUserSetupError": "Beim Hinzufügen des Hauptadministrators ist ein Fehler aufgetreten.",
@@ -99,9 +99,8 @@
"SystemCheckOtherExtensions": "Andere Erweiterungen",
"SystemCheckOtherFunctions": "Andere Funktionen",
"SystemCheckPageSpeedDisabled": "PageSpeed deaktiviert",
- "SystemCheckPageSpeedWarn": "Wir empfehlen, das PageSpeed Modul auf Ihrem Web Server zu deaktivieren %s: PageSpeed wurde als Verursacher diverser Probleme im Zusammenhang mit Piwik gemeldet.",
"SystemCheckPackHelp": "Die Funktion pack() wird benötigt um Besucher in Piwik tracken zu können.",
- "SystemCheckParseIniFileHelp": "Diese Funktion wird von Ihrem System nicht unterstützt. Piwik wird versuchen, diese Funktion zu emulieren, aber es könnte sein, dass dadurch Sicherheitseinstellungen gelockert werden müssen. Die Geschwindigkeit des Tracker könnte auch beeinflußt werden.",
+ "SystemCheckParseIniFileHelp": "Diese Funktion wird von Ihrem System nicht unterstützt. Piwik wird versuchen, diese Funktion zu emulieren, aber es könnte sein, dass dadurch Sicherheitseinstellungen gelockert werden müssen. Die Geschwindigkeit des Tracker könnte auch beeinflusst werden.",
"SystemCheckPdoAndMysqliHelp": "Auf einem Linux-Server können Sie PHP mit den folgenden Optionen kompilieren: %1$s In Ihrer php.ini fügen Sie dann die folgenden Zeilen ein: %2$s",
"SystemCheckPhp": "PHP-Version",
"SystemCheckPhpPdoAndMysqli": "Weitere Informationen unter: %1$sPHP PDO%2$s und %3$sMYSQLI%4$s.",
@@ -118,15 +117,15 @@
"SystemCheckWarnJsonHelp": "Für eine bessere Performance sollten Sie die \"json\" Erweiterung aktivieren (installieren Sie z.B. das \"php-json\" Paket).",
"SystemCheckWarnLibXmlHelp": "Sie müssen die \"libxml\" Erweiterung aktivieren (z.B. installieren Sie das \"php-libxml\" Paket), wie es auch von anderen PHP-Erweiterungen benötigt wird.",
"SystemCheckWarnSimpleXMLHelp": "Sie sollten die \"SimpleXML\" Erweiterung aktivieren (z.Bsp. installieren Sie das \"php-simplexml\" und\/oder \"php-xml\" Paket).",
- "SystemCheckWinPdoAndMysqliHelp": "Auf einem Windows-Server können Sie die folgenden Zeile in Ihre php.ini einfügen: %s",
+ "SystemCheckWinPdoAndMysqliHelp": "Auf einem Windows-Server können Sie die folgenden Zeilen in Ihre php.ini einfügen: %s",
"SystemCheckWriteDirs": "Verzeichnisse mit Schreibzugriff",
"SystemCheckWriteDirsHelp": "Um diesen Fehler im Linux-System zu beheben, versuchen Sie den\/die folgenden Befehl(e) einzugeben",
"SystemCheckZlibHelp": "Sie müssen PHP mit \"zlib\" Unterstützung konfigurieren und neu übersetzen ( --with-zlib).",
"SystemCheckCronArchiveProcess": "Archiv Cron",
"SystemCheckCronArchiveProcessCLI": "Prozesse via CLI steuern",
- "SystemCheckPhpSetting": "Um schwerwiegende Probleme zu verhinden, sollten Sie Folgendes in Ihrer php.ini setzen: %s",
+ "SystemCheckPhpSetting": "Um schwerwiegende Probleme zu verhindern, sollten Sie Folgendes in Ihrer php.ini setzen: %s",
"SystemCheckUpdateHttps": "Update über HTTPS",
- "SystemCheckUpdateHttpsNotSupported": "Piwik kann HTTPS nicht für das Update verwenden, es stattdessen auf ein unsicheres Update über HTTP zurückgegriffen. Überprüfen Sie dass Curl oder allow_url_fopen unterstützt wird und dass die openssl PHP Erweiterung installiert ist: http:\/\/piwik.org\/faq\/troubleshooting\/faq_177\/",
+ "SystemCheckUpdateHttpsNotSupported": "Piwik kann HTTPS nicht für das Update verwenden, es stattdessen auf ein unsicheres Update über HTTP zurückgegriffen. Überprüfen Sie, dass Curl oder allow_url_fopen unterstützt wird und dass die openssl PHP Erweiterung installiert ist: http:\/\/piwik.org\/faq\/troubleshooting\/faq_177\/",
"NotSupported": "nicht unterstützt",
"Tables": "Erstelle die Tabellen",
"TablesCreatedSuccess": "Die Tabellen wurden erfolgreich erzeugt!",
@@ -140,9 +139,9 @@
"Timezone": "Zeitzone der Website",
"WeHopeYouWillEnjoyPiwik": "Wir hoffen, Sie haben soviel Spaß daran, Piwik zu nutzen, wie wir hatten, es zu erstellen.",
"Welcome": "Willkommen!",
- "WelcomeHelp": "<p>Piwik ist eine freiverfügbare Webanalyse-Software, um einfach Informationen über die Besucher Ihrer Website zu erhalten.<\/p><p>Der Prozess teilt sich in %s einfache Schritte und wird rund 5 Minuten dauern.<\/p>",
+ "WelcomeHelp": "<p>Piwik ist eine frei verfügbare Webanalyse-Software, um einfach Informationen über die Besucher Ihrer Website zu erhalten.<\/p><p>Der Prozess teilt sich in %s einfache Schritte und wird rund 5 Minuten dauern.<\/p>",
"WelcomeToCommunity": "Willkommen in der Piwik Community!",
"CannotConnectToDb": "Verbindung zur Datenbank ist fehlgeschlagen",
- "CannotConnectToDbResolvingExplanation": "Dies könnte ein temporäres Problem sein. Versuchen Sie diese %1$sSeite neu zu laden%2$s. Wenn das Problem weiterhin besetht wernden Sie sich bitte an Ihren Piwik Administrator."
+ "CannotConnectToDbResolvingExplanation": "Dies könnte ein temporäres Problem sein. Versuchen Sie diese %1$sSeite neu zu laden%2$s. Wenn das Problem weiterhin besteht, wenden Sie sich bitte an Ihren Piwik Administrator."
}
} \ No newline at end of file
diff --git a/plugins/Installation/lang/el.json b/plugins/Installation/lang/el.json
index ff1d3e93d0..02a27a9cec 100644
--- a/plugins/Installation/lang/el.json
+++ b/plugins/Installation/lang/el.json
@@ -99,7 +99,7 @@
"SystemCheckOtherExtensions": "Άλλες επεκτάσεις",
"SystemCheckOtherFunctions": "Άλλες συναρτήσεις",
"SystemCheckPageSpeedDisabled": "Το PageSpeed είναι απενεργοποιημένο",
- "SystemCheckPageSpeedWarn": "Συνιστούμε την απενεργοποίηση της μονάδας PageSpeed στον διακομιστή ιστού σας %s: Έχει αναφερθεί ότι το PageSpeed δημιουργεί διάφορα προβλήματα στο Piwik.",
+ "SystemCheckPageSpeedWarning": "Προτείνουμε την απενεργοποίηση του αρθρώματος PageSpeed στον διακομιστή ιστού σας %s: Υπήρξαν αναφορές ότι το PageSpeed προκαλεί διάφορα προβλήματα στο Piwik, όπως: κατεστραμμένες αναφορές Σελίδων, καταστραμμένη Εκτίμηση Γραμμής και άλλα προβλήματα που είναι δύσκολο να αποσφαλματωθούν. Παρακαλούμε απενεργοποιήστε το mod_pagespeed στον διακομιστή σας.",
"SystemCheckPackHelp": "Η συνάρτηση pack() απαιτείται για την καταγραφή επισκεπτών στο Piwik.",
"SystemCheckParseIniFileHelp": "Αυτή η εσωτερική συνάρτηση έχει απενεργοποιηθεί στον διακομιστή σας. Το Piwik θα προσπαθήσει να εξομοιώσει αυτή τη συνάρτηση αλλά ίσως προκύψουν περαιτέρω περιορισμοί ασφάλειας. Η απόδοση της ανίχνευσης θα επηρεαστεί.",
"SystemCheckPdoAndMysqliHelp": "Σε διακομιστή Linux μπορείτε να ρυθμίσετε την php με τις ακόλουθες επιλογές: %1$s στο αρχείο php.ini, προσθέστε τις ακόλουθες γραμμές: %2$s",
diff --git a/plugins/Installation/lang/en.json b/plugins/Installation/lang/en.json
index 131b40a2a1..06fbffdc7c 100644
--- a/plugins/Installation/lang/en.json
+++ b/plugins/Installation/lang/en.json
@@ -99,7 +99,7 @@
"SystemCheckOtherExtensions": "Other extensions",
"SystemCheckOtherFunctions": "Other functions",
"SystemCheckPageSpeedDisabled": "PageSpeed disabled",
- "SystemCheckPageSpeedWarn": "We recommend to disable the PageSpeed Module in your web server %s: PageSpeed was reported to cause several issues with Piwik.",
+ "SystemCheckPageSpeedWarning": "We recommend to disable the PageSpeed Module in your web server %s: PageSpeed was reported to cause several issues with Piwik, such as: broken Pages reports, broken Row Evolution, and other issues which are hard to troubleshoot. Please disable mod_pagespeed on this server.",
"SystemCheckPackHelp": "The pack() function is required to track visitors in Piwik.",
"SystemCheckParseIniFileHelp": "This built-in function has been disabled on your host. Piwik will attempt to emulate this function but may encounter further security restrictions. Tracker performance will also be impacted.",
"SystemCheckPdoAndMysqliHelp": "On a GNU\/Linux server you can compile php with the following options: %1$s In your php.ini, add the following lines: %2$s",
diff --git a/plugins/Installation/lang/es.json b/plugins/Installation/lang/es.json
index b3569f2875..f0739a4aa1 100644
--- a/plugins/Installation/lang/es.json
+++ b/plugins/Installation/lang/es.json
@@ -99,7 +99,6 @@
"SystemCheckOtherExtensions": "Otras extensiones",
"SystemCheckOtherFunctions": "Otras funciones",
"SystemCheckPageSpeedDisabled": "PageSpeed deshabilitado",
- "SystemCheckPageSpeedWarn": "Recomendamos deshabilitar el módulo PageSpeed en su servidor de internet %s: PageSpeed fue reportado de causar diversas cuestiones con Piwik.",
"SystemCheckPackHelp": "La función pack() es obligatoria para rastrear visitantes en Piwik.",
"SystemCheckParseIniFileHelp": "Esta función integrada se ha desactivado en su host. Piwik intentará emular esta función, pero puede encontrar más restricciones de seguridad.",
"SystemCheckPdoAndMysqliHelp": "En un servidor Linux puede compilar php con las siguientes opciones: %1$s En su php.ini, añada las siguientes líneas: %2$s",
diff --git a/plugins/Installation/lang/fr.json b/plugins/Installation/lang/fr.json
index 43cd1b81d8..68dd64c2d8 100644
--- a/plugins/Installation/lang/fr.json
+++ b/plugins/Installation/lang/fr.json
@@ -99,7 +99,7 @@
"SystemCheckOtherExtensions": "Autres extensions",
"SystemCheckOtherFunctions": "Autres fonctions",
"SystemCheckPageSpeedDisabled": "PageSpeed désactivé",
- "SystemCheckPageSpeedWarn": "Nous vous recommandons de désactiver le module PageSpeed sur votre serveur web %s: PageSpeed a été rapporté comme causant de multiples erreurs avec Piwik.",
+ "SystemCheckPageSpeedWarning": "Nous recommandons de désactiver le module PageSpeed de votre serveur web 1%s : PageSpeed a été indiqué comme causant plusieurs problèmes avec Piwik tels que: rapports de Pages non-fonctionnels, évolution de la ligne non-fonctionnelle, et d'autres problèmes difficiles à diagnostiquer. Veuillez désactiver mod_pagespeed sur ce serveur.",
"SystemCheckPackHelp": "La fonction pack() est requise pour suivre les visiteurs dans Piwik.",
"SystemCheckParseIniFileHelp": "Cette fonction incluse a été désactivée sur votre serveur. Piwik va essayer d'émuler cette fonction mais il est possible que vous rencontriez des restrictions de sécurité par la suite. Les performances seront aussi impactées.",
"SystemCheckPdoAndMysqliHelp": "Sur un serveur linux vous pouvez compiler PHP avec les options suivantes : %1$s Dans votre php.ini, ajoutez les lignes suivantes: %2$s",
diff --git a/plugins/Installation/lang/hi.json b/plugins/Installation/lang/hi.json
index 38f8746790..a4fc5f7a4b 100644
--- a/plugins/Installation/lang/hi.json
+++ b/plugins/Installation/lang/hi.json
@@ -71,7 +71,6 @@
"SystemCheckOtherExtensions": "अन्य एक्सटेंशन",
"SystemCheckOtherFunctions": "अन्य फलन",
"SystemCheckPageSpeedDisabled": "अक्षम लोगों के लिए PageSpeed",
- "SystemCheckPageSpeedWarn": "हम अपने वेब सर्वर %s में PageSpeed ​​मॉड्यूल को निष्क्रिय करने की सलाह देते हैं: PageSpeed ​​Piwik के साथ कई मुद्दों के कारण की सूचना मिली थी।",
"SystemCheckPackHelp": "पैक () फलन Piwik में आगंतुकों को ट्रैक करने के लिए आवश्यक है.",
"SystemCheckParseIniFileHelp": "यह अंतर्निर्मित फलन अपने मेजबान पर निष्क्रिय कर दिया गया. Piwik इस फलन का अनुकरण करने का प्रयास करेंगे लेकिन आगे सुरक्षा प्रतिबंधों का सामना कर सकते. ट्रैकर प्रदर्शन भी प्रभावित हो जाएगा.",
"SystemCheckPdoAndMysqliHelp": "एक लिनक्स सर्वर पर आप निम्नलिखित विकल्पों के साथ php का संकलन कर सकते हैं:%1$s अपने php.ini में निम्नलिखित लाइनें जोड़ने:%2$s",
diff --git a/plugins/Installation/lang/id.json b/plugins/Installation/lang/id.json
index 22dbaf79cc..e30d1074dd 100644
--- a/plugins/Installation/lang/id.json
+++ b/plugins/Installation/lang/id.json
@@ -37,7 +37,9 @@
"NfsFilesystemWarningSuffixAdmin": "Ini berarti Piwik akan sangat lambat ketika menggunakan sesi berdasar berkas.",
"NfsFilesystemWarningSuffixInstall": "Menggunakan sesi berdasar berkas dalam sisten berkas dalam NFS sangat lambat, sehingga Piwik akan menggunakan sesi berdasar basisdata. Bila Anda memiliki pengguna panel kendali secara bersamaan, Anda munkin membutuhkan peningkatan jumlah sambungan pengguna ke peladen basisdata.",
"Optional": "Pilihan",
+ "Password": "Sandi lewat",
"PasswordDoNotMatch": "sandi tak sama",
+ "PasswordRepeat": "Sandi lewat (ulangi)",
"PercentDone": "%s%% Selesai",
"PleaseFixTheFollowingErrors": "Silakan perbaiki galat berikut ini",
"Requirements": "Persyaratan Piwik",
diff --git a/plugins/Installation/lang/it.json b/plugins/Installation/lang/it.json
index b403eaab52..de7813f3fb 100644
--- a/plugins/Installation/lang/it.json
+++ b/plugins/Installation/lang/it.json
@@ -98,7 +98,6 @@
"SystemCheckOtherExtensions": "Altre estensioni",
"SystemCheckOtherFunctions": "Altre funzioni",
"SystemCheckPageSpeedDisabled": "PageSpeed disabilitato",
- "SystemCheckPageSpeedWarn": "Raccomandiamo di disabilitare il modulo PageSpeed nel tuo server %s: PageSpeed è segnalato come causa di svariati problemi con Piwik.",
"SystemCheckPackHelp": "La funzione pack() è necessaria per monitorare i visitatori in Piwik.",
"SystemCheckParseIniFileHelp": "Questa funzione è stata disabilitata sul tuo host. Piwik proverà a simularla ma potrebbe incontrare altre restrizioni di sicurezza. Anche le prestazioni del tracker potrebbero risentirne.",
"SystemCheckPdoAndMysqliHelp": "Su un server GNU\/Linux puoi compilare PHP con le seguenti opzioni: %1$s. Nel tuo php.ini, aggiungi le seguenti righe: %2$s",
diff --git a/plugins/Installation/lang/ja.json b/plugins/Installation/lang/ja.json
index 21b881c268..8c1e65db98 100644
--- a/plugins/Installation/lang/ja.json
+++ b/plugins/Installation/lang/ja.json
@@ -99,7 +99,6 @@
"SystemCheckOtherExtensions": "その他のエクステンション",
"SystemCheckOtherFunctions": "その他の関数",
"SystemCheckPageSpeedDisabled": "無効なページスピード",
- "SystemCheckPageSpeedWarn": "Web サーバー %s Piwik でいくつかの問題を引き起こすこと報告された PageSpeed の PageSpeed モジュールを無効にするをお勧めします。",
"SystemCheckPackHelp": "pack()ファンクションはPiwikでビジターをトラックするのに必要です。",
"SystemCheckParseIniFileHelp": "この組み込み関数はホストで無効化されています。 Piwik はこの関数のエミュレートを試みますが、さらなるセキュリティ制限に遭遇する場合があります。 また、トラッカーのパフォーマンスにも影響を与えます。",
"SystemCheckPdoAndMysqliHelp": "Linux サーバーでは、次のオプションで PHP をコンパイルします:%1$sphp.ini に次の行を追加します:%2$s",
diff --git a/plugins/Installation/lang/ko.json b/plugins/Installation/lang/ko.json
index b478a02ad1..074f699493 100644
--- a/plugins/Installation/lang/ko.json
+++ b/plugins/Installation/lang/ko.json
@@ -98,7 +98,6 @@
"SystemCheckOtherExtensions": "기타 확장",
"SystemCheckOtherFunctions": "기타 함수",
"SystemCheckPageSpeedDisabled": "PageSpeed 비활성화",
- "SystemCheckPageSpeedWarn": "우리는 웹서버 %s 내 PageSpeed 모듈을 비활성화 하는 것을 추천합니다. 그간 Piwik에 여러 문제들이 PageSpeed와 연관있었습니다.",
"SystemCheckPackHelp": "pack() 함수는 Piwik에서 방문자를 추적하는 데 필요합니다.",
"SystemCheckParseIniFileHelp": "이 내장 함수는 호스트에서 비활성화되어 있습니다. Piwik이 함수의 에뮬레이션을 시도하지만, 새로운 보안 제한으로 발생하는 경우가 있습니다. 또한 트래커 성능에도 영향을 미칩니다.",
"SystemCheckPdoAndMysqliHelp": "Linux 서버는 다음 옵션으로 PHP를 컴파일합니다: %1$sphp.ini에 다음 줄을 추가합니다: %2$s",
diff --git a/plugins/Installation/lang/nb.json b/plugins/Installation/lang/nb.json
index 12bcce3ba2..b43dbae1f2 100644
--- a/plugins/Installation/lang/nb.json
+++ b/plugins/Installation/lang/nb.json
@@ -98,7 +98,6 @@
"SystemCheckOtherExtensions": "Andre utvidelser",
"SystemCheckOtherFunctions": "Andre funksjoner",
"SystemCheckPageSpeedDisabled": "PageSpeed deaktivert",
- "SystemCheckPageSpeedWarn": "Vi anbefaler å deaktivere PageSpeed-modulen i din webserver %s: PageSpeed har blitt rapportert å forårsake flere feil i Piwik.",
"SystemCheckPackHelp": "pack()-funksjonen er nødvendig for å spore besøkende i Piwik.",
"SystemCheckParseIniFileHelp": "Denne innebygde funksjonen har blitt deaktivert på verten. Piwik vil forsøke å etterligne denne funksjonen, men kan møte ytterligere sikkerhetsbegrensninger. Sporingsytelsen vil også bli påvirket.",
"SystemCheckPdoAndMysqliHelp": "På en GNU\/Linux-server kan du kompilere php med følgende valg: %1$s I din php.ini, legg til følgende linjer: %2$s",
diff --git a/plugins/Installation/lang/nl.json b/plugins/Installation/lang/nl.json
index f5d14b5439..c47328d929 100644
--- a/plugins/Installation/lang/nl.json
+++ b/plugins/Installation/lang/nl.json
@@ -1,6 +1,6 @@
{
"Installation": {
- "CollaborativeProject": "Piwik is een samenwerkingsproject, met liefde gebouwd door mensen van over de hele wereld.",
+ "CollaborativeProject": "Piwik is een samenwerkingsproject, met liefde gebouwd door mensen van over de hele were",
"ConfigurationHelp": "Uw Piwik configuratie bestand is waarschijnlijk niet correct geconfigureerd. U kunt ofwel config\/config.ini.php verwijderen en de installatie vervolgen of de toegangsgegevens voor de database corrigeren.",
"ConfirmDeleteExistingTables": "Bent u zeker dat u de tabellen wilt verwijderen: %s uit uw datbase? WAARSCHUWING: DATA VAN DEZE TABELLEN KAN NIET WORDEN HERSTELD!",
"Congratulations": "Gefeliciteerd",
@@ -12,7 +12,7 @@
"DatabaseSetup": "Database instellen",
"DatabaseSetupAdapter": "Adapter",
"DatabaseSetupDatabaseName": "Naam database",
- "DatabaseSetupLogin": "Inlog",
+ "DatabaseSetupLogin": "Login",
"DatabaseSetupServer": "Server database",
"DatabaseSetupTablePrefix": "Voorvoegsel tabel",
"Email": "Email",
@@ -84,6 +84,7 @@
"SystemCheckGlobHelp": "Deze ingebouwde functie is uitgeschakeld door uw webhoster. Piwik zal proberen deze functie te emuleren, maar kan tegen andere veiligheids restricties oplopen. Functionaliteit kan worden ingeperkt.",
"SystemCheckGzcompressHelp": "U moet de zlib-extensie en gzcompress-functie inschakelen.",
"SystemCheckGzuncompressHelp": "U moet de zlib-extensie en gzuncompress-functie inschakelen.",
+ "SystemCheckHashHelp": "Je dient PHP opnieuw te configureren en compileren met hash() support, door de optie --disable-hash weg te laten.",
"SystemCheckIconvHelp": "U moet PHP configureren met iconv support ingeschakeld --with-iconv.",
"SystemCheckJsonHelp": "De php5-json-extensie is vereist voor Piwik om JSON-gegevens te lezen en te schrijven.",
"SystemCheckMailHelp": "Feedback en vergeten wachtwoord berichten zullen niet worden verzonden zonder mail()",
@@ -98,7 +99,7 @@
"SystemCheckOtherExtensions": "Andere extensies",
"SystemCheckOtherFunctions": "Andere functies",
"SystemCheckPageSpeedDisabled": "PageSpeed uitgeschakeld",
- "SystemCheckPageSpeedWarn": "We raden aan om de PageSpeed module op je webserver uit te schakelen %s: We ontvingen meldingen erdoor over verschillende problemen met Piwik.",
+ "SystemCheckPageSpeedWarning": "Wij raden aan om de PageSpeed Module van uw web server uit te schakelen %s: PageSpeed veroorzaakt meerdere problemen met Piwik, zoals: problemen met Pages reports, Row Evolution, en andere problemen die moeilijk te adresseren zijn. Schakel daarom mod_pagespeed uit op deze server.",
"SystemCheckPackHelp": "De pack()-functie is vereist om bezoekers te volgen in Piwik.",
"SystemCheckParseIniFileHelp": "Deze ingebouwde functie is uitgeschakeld op uw host. Piwik zal proberen deze functie te emuleren maar dit kan andere veiligheidsbeperkingen oplopen. De Tracker prestaties zullen ook veranderen.",
"SystemCheckPdoAndMysqliHelp": "Op een Linux server kunt u php compileren met de volgende opties: %1$s in uw php.ini, voeg de volgende regels toe: %2$s",
diff --git a/plugins/Installation/lang/pl.json b/plugins/Installation/lang/pl.json
index f399e2c806..554d2ba3a8 100644
--- a/plugins/Installation/lang/pl.json
+++ b/plugins/Installation/lang/pl.json
@@ -1,84 +1,118 @@
{
"Installation": {
- "CollaborativeProject": "Piwik jest wspólnym projetem, tworzonym z miłością przez ludzi z całego świata.",
+ "CollaborativeProject": "Piwik jest wspólnym projektem, tworzonym z miłością przez ludzi z całego świata.",
"ConfigurationHelp": "Twój plik konfiguracyjny Piwik wydaje się nieskonfigurowany. Możesz również usunąć config\/config.ini.php i powtórzyć instalację, lub naprawić konfigurację połączenia z bazą danych.",
"ConfirmDeleteExistingTables": "Czy masz pewność, że chcesz skasować tabele: %s ze swojej bazy danych? OSTRZEŻENIE: DANE Z TYCH TABEL NIE ZOSTANĄ ODTWORZONE CZY ZABEZPIECZONE!",
"Congratulations": "Gratulacje",
- "CongratulationsHelp": "<p>Gratulacje! Twoja instalacja Piwik zakończyła się powodzeniem.<\/p><p>Miej pewność, że już dodałeś swój kod JavaScript do kodu swoich stron które chcesz badać, no i możesz teraz już czekać na swoich pierwszych odwiedzających!<\/p>",
+ "CongratulationsHelp": "<p>Gratulacje! Twoja instalacja Piwik zakończyła się powodzeniem.<\/p><p>Upewnij się, że Twój śledzący kod JavaScript znajduje się na Twoich stronach, a teraz czekaj na swoich pierwszych odwiedzających!<\/p>",
+ "DatabaseAbilities": "Możliwości bazy danych",
"DatabaseCreation": "Utworzenie bazy danych",
"DatabaseErrorConnect": "Błąd podczas próby połączenia się z serwerem baz danych",
"DatabaseServerVersion": "Wersja serwera bazy danych",
"DatabaseSetup": "Konfiguracja bazy danych",
- "DatabaseSetupAdapter": "adapter",
- "DatabaseSetupDatabaseName": "nazwa bazy",
+ "DatabaseSetupAdapter": "Adapter",
+ "DatabaseSetupDatabaseName": "Nazwa bazy danych",
"DatabaseSetupLogin": "Login",
"DatabaseSetupServer": "Serwer bazy danych",
- "DatabaseSetupTablePrefix": "prefix tabel",
+ "DatabaseSetupTablePrefix": "Prefix tabel",
"Email": "Email",
"Extension": "rozszerzenie",
"Filesystem": "System plików",
+ "GetInvolved": "Jeśli podoba Ci się to co widzisz, możesz %1$sprzyłączyć się%2$s.",
"GoBackAndDefinePrefix": "Cofnij się i zdefiniuj obowiązujący Prefix dla tabel",
"HappyAnalysing": "Powodzenia!",
"Installation": "Instalacja",
"InstallationStatus": "Postęp instalacji",
+ "InsufficientPrivilegesHelp": "Wskazane uprawnienia możesz nałożyć przy pomocy takich narządzi jak phpMyAdmin lub odpowiednich kwerend SQL. Jeśli nie wiesz, jak to zrobić, skontaktuj się ze swoim administratorem, który nałoży te uprawnienia.",
+ "InsufficientPrivilegesMain": "Baza danych nie istnieje (i nie mogła zostać utworzona), albo wskazany użytkownik nie posiada odpowiednich uprawnień. Wymagane uprawnienia użytkownika bazy danych: %s",
+ "InvalidStateError": "BŁĄD: Piwik jest już zainstalowany. %1$sWróć%2$s do Piwik%3$s",
"JsTagArchivingHelp1": "Dla stron o średnim i dużym ruchu można wykonać kilka optymalizacji, by pomóc Piwik'owi działać szybciej (na przykład %1$sustawienie automatycznej archiwizacji%2$s[en]).",
+ "JSTracking_EndNote": "NOTKA: Po zakończeniu procesu instalacji, w sekcji %1$sKod śledzący%2$s panelu administracyjnego, możesz wygenerować spersonalizowany kod śledzący.",
+ "JSTracking_Intro": "Aby śledzić ruch na swoich stronach przy pomocy Piwik upewnij się, że trochę dodatkowego kodu znajdzie się na każdej analizowanej stronie.",
"LargePiwikInstances": "Pomoc w przypadku dużych instalacji z Piwik",
"Legend": "Legenda",
+ "LoadDataInfileRecommended": "W przypadku, gdy Twój serwer Piwik śledzi strony o wysokim natężeniu ruchu (np. > 100 000 stron miesięcznie), zalecamy naprawić ten problem.",
+ "LoadDataInfileUnavailableHelp": "Użycie %1$s w znaczny sposób przyspieszy proces archiwizowania Piwik'a. Aby Piwik mógł z niego korzystać zaktualizuj PHP i MySQL oraz upewnij się, że użytkownik bazy danych ma uprawnienia %2$s.",
"NfsFilesystemWarning": "Twój system używa systemu plików NFS",
+ "NfsFilesystemWarningSuffixAdmin": "To oznacza, że Piwik będzie ekstremalnie wolny, ponieważ korzysta z sesji opartych o pliki.",
+ "NfsFilesystemWarningSuffixInstall": "Użytkowanie sesji opartych o NFS jest ekstremalnie wolne, więc Piwik użyje do sesji bazy danych. Jeśli masz wielu użytkowników równocześnie korzystających z pulpitu, możesz zostać zmuszony do podniesienia ilości połączeń klienckich do serwera bazodanowego.",
+ "NoConfigFileFound": "Plik konfiguracyjny Piwik'a nie został znaleziony a Ty próbujesz uzyskać dostęp do strony Piwik.",
+ "YouMayInstallPiwikNow": "Teraz możesz %1$szainstalować Piwik%2$s",
+ "IfPiwikInstalledBeforeTablesCanBeKept": "Jeśli wcześniej zainstalowałeś Piwik'a i pozostały Ci jakieś tabele w bazie, nie przejmuj się, możesz ich użyć ponownie i zachować dane!",
"Optional": "Opcionalnie",
"Password": "Hasło",
- "PasswordDoNotMatch": "hasło jest nieprawidłowe",
+ "PasswordDoNotMatch": "hasła nie zgadzają się",
"PasswordRepeat": "Hasło (powtórzone)",
"PercentDone": "%s %% wykonano",
+ "ProfessionalServicesAdTitle": "Zaawansowana analityka i usługi",
+ "ProfessionalServicesfessionalServicesAdText": "Sieć naszych ekspertów może wspomóc Twoją organizację w wyzwoleniu mocy analiz Piwik",
+ "ProfessionalServicesfessionalDiscoverHow": "Dowiedz się więcej o %1$sdodatkowych produktach i usługach%2$s Piwik'a oraz jak podnieść swoją konwersję i dochód.",
"PleaseFixTheFollowingErrors": "Prosimy naprawić następujące błędy",
+ "DefaultSettings": "Domyślne ustawienia Piwik",
+ "DefaultSettingsHelp": "Piwik dostarczany jest z domyślnymi ustawieniami. Możesz je spersonalizować teraz lub później w panelu administracyjnym.",
"Requirements": "Wymagania systemu Piwik",
"RestartWebServer": "Po dokonaniu tych zmian, zrestartuj swój serwer.",
"ReusingTables": "Ponowne użycie Tabel",
"PiwikOrgNewsletter": "Wyślij mi wiadomość email z głównymi aktualizacjami społeczności Piwik",
+ "ProfessionalServicesNewsletter": "wyślij mi informacje o %1$sprofesjonalnych usługach i produktach%2$s Piwik",
"SeeBelowForMoreInfo": "Poniżej znajdziesz więcej informacji.",
"SetupWebsite": "Konfiguracja portalu",
- "SetupWebsiteError": "Pojawił się błąd podczas dodawania adresu strony",
+ "SetupWebsiteError": "Pojawił się błąd podczas dodawania portalu",
+ "SetupWebSiteName": "Nazwa portalu",
"SetupWebsiteSetupSuccess": "Serwis %s utworzono pomyślnie!",
- "SiteSetup": "Proszę utworzyć pierwszą stronę, która miała by być anmalizowana prze Piwik'a:",
- "SiteSetupFootnote": "UWAGA: Nowe strony do śledzenia będzie mozna dodawać dopiero po zakończeniu instalacji Piwik'a",
+ "SetupWebSiteURL": "URL portalu",
+ "SiteSetup": "Proszę skonfiguruj pierwszy serwis, który chcesz śledzić i analizować przy pomocy Piwik'a:",
+ "SiteSetupFootnote": "NOTKA: po zakończeniu instalacji Piwik'a, będzie możliwe dodanie kolejnych portali do śledzenia!",
"SuperUser": "Super Użytkownik",
+ "SuperUserLogin": "Login Super Użytkownika",
"SuperUserSetupError": "Wystąpił błąd podczas dodawania Super Użytkownika",
"SuperUserSetupSuccess": "Konto Super Użytkownika utworzono pomyślnie!",
"SystemCheck": "Sprawdzenie systemu",
"SystemCheckAutoUpdateHelp": "Uwaga: automatyczna aktualizacja statystyk Piwik wymaga praw do zapisu w folderze Piwik i w jego podkatalogach.",
- "SystemCheckCreateFunctionHelp": "Piwik używa funkcji anonimizujących dla wywołań zwrotnych.",
- "SystemCheckDatabaseHelp": "Piwik wymaga do prawidłowego działania również rozszerzeń MYSQLI lub jednocześnie działania rozszerzeń PDO i pdo_mysql.",
- "SystemCheckDebugBacktraceHelp": "Podgląd::czynnik ten nie będzie zdolny do wytworzenia podglądu w wywołanym module.",
- "SystemCheckError": "Wystąpił błąd - powinien zostać naprawiony przed dalszym działaniem",
+ "SystemCheckCreateFunctionHelp": "Piwik używa funkcji anonimowych dla wywołań zwrotnych.",
+ "SystemCheckDatabaseExtensions": "Rozszerzenia MySQL",
+ "SystemCheckDatabaseHelp": "Do prawidłowego działania Piwik wymaga rozszerzenia mysqli lub jednocześnie działających rozszerzeń PDO i pdo_mysql.",
+ "SystemCheckDebugBacktraceHelp": "Widok::fabryka nie będzie zdolna do wygenerowania widoku modułu.",
+ "SystemCheckError": "Wystąpił błąd - musi go naprawić przed wykonaniem kolejnego kroku",
"SystemCheckEvalHelp": "Wymagane przez HTML QuickForm system szablonów Smarty.",
"SystemCheckExtensions": "Pozostałe wymagane rozszerzenia",
"SystemCheckFileIntegrity": "Integralność pliku",
"SystemCheckFunctions": "Wymagane funkcje",
+ "SystemCheckFunctionHelp": "Należy włączyć tą wbudowaną funkcję.",
"SystemCheckGDFreeType": "GD > 2.x + Freetype (graphics)",
"SystemCheckGDHelp": "Linie przerywane (mała grafika sparklines) nie będzie wyświetlana.",
- "SystemCheckGlobHelp": "Ta wbudowana funkcja została wyłączona przez twój hosting. Piwik może podjąć próbę jej emulowania, ale może napotkać kolejne ograniczenia związane z bezpieczeństwem. Będzie to miało również wpływ na wydajność funkcjonowania systemu.",
+ "SystemCheckGlobHelp": "Ta wbudowana funkcja została wyłączona przez twój hosting. Piwik podejmie próbę jej emulowania, ale może napotkać kolejne ograniczenia związane z bezpieczeństwem. Może to mieć wpływ na funkcjonalność.",
"SystemCheckGzcompressHelp": "Musisz włączyć rozszerzenie zlib i funkcję gzcompress.",
"SystemCheckGzuncompressHelp": "Musisz włączyć rozszerzenie zlib i funkcję gzuncompress.",
+ "SystemCheckHashHelp": "Musisz skonfigurować i przebudować swoją instalację PHP usuwając opcję --disable-hash, aby włączyć wsparcie dla funkcji hash().",
"SystemCheckIconvHelp": "Potrzebujesz skonfigurować i przebudować środowisko PHP, z włączonym wsparciem dla \"iconv\", --with-iconv.",
- "SystemCheckJsonHelp": "Rozszeżenie php5-json jest wymagane by Piwik był w stanie czytać i zapisywać dane typu JSON.",
- "SystemCheckMailHelp": "Informacje zwrotne i wiadomości o utraconych hasłach nie będą mogły zostać wysłane przy pomocy funkcji mail().",
+ "SystemCheckJsonHelp": "Rozszeżenie php5-json jest wymagane przez Piwik do odczytywania i zapisywania danych w formacie JSON.",
+ "SystemCheckMailHelp": "Informacje zwrotne i wiadomości odzyskiwania hasła nie będą wysyłane bez funkcji mail().",
"SystemCheckMbstring": "mbstring",
- "SystemCheckMbstringHelp": "Rozszerzenie mbstring jest wymagane do obsługi znaków wielobajtowych w interfejsie użytkownika i API odpowiedzi. Ponadto należy sprawdzić, mbstring.func_overload jest ustawiony na \"0\" w pliku php.ini.",
+ "SystemCheckMbstringHelp": "Rozszerzenie mbstring jest wymagane do obsługi znaków wielobajtowych w interfejsie użytkownika i odpowiedziach API. Upewnij się, że wartość mbstring.func_overload jest równa \"0\" w pliku php.ini.",
"SystemCheckMemoryLimit": "Limit pamięci",
"SystemCheckMemoryLimitHelp": "Na stronach o wysokim ruchu, proces archiwizacji może wymagać więcej pamięci niż obecnie dostępna. Jeżeli okaże się to konieczne, zmień wielkość memory_limit w pliku php.ini.",
+ "SystemCheckNoErrorsOrWarnings": "Nie ma błędów ani ostrzeżeń",
+ "SystemCheckViewFullSystemCheck": "Przeglądaj pełny raport ze sprawdzenia systemu",
"SystemCheckOpenURL": "Otwórz URL",
- "SystemCheckOpenURLHelp": "Subskrypcja nowinek, informacje o aktualizacjach, i automatyczne aktualizacje wymagają rozszerzenia \"curl\", włączonych allow_url_fopen=On, lub włączonego fsockopen().",
+ "SystemCheckOpenURLHelp": "Subskrypcja newslettera, informacje o aktualizacjach i automatyczne aktualizacje wymagają włączenia rozszerzenia \"curl\", ustawienia allow_url_fopen=On, lub włączonego fsockopen().",
"SystemCheckOtherExtensions": "Pozostałe rozszerzenia",
"SystemCheckOtherFunctions": "Pozostałe funkcje",
- "SystemCheckPackHelp": "Funkcja pack() jest wymagana do działania, celem umożliwienia śledzenia odwiedzających w Piwik.",
- "SystemCheckParseIniFileHelp": "Ta wbudowana funkcja została wyłączona przez twój hosting. Piwik może podjąć próbę jej emulowania, ale może napotkać kolejne ograniczenia związane z bezpieczeństwem. Będzie to miało również wpływ na wydajność śledzenia.",
+ "SystemCheckPageSpeedDisabled": "PageSpeed wyłączone",
+ "SystemCheckPageSpeedWarning": "Zalecamy wyłączenie modułu PageSpeed Twojego serwera www %s: otrzymaliśmy wiele zgłoszeń z informacjami, że PageSpeed: psuł strony raportów, psuł Row Evolution i powodował wiele innych trudnych do zdiagnozowania sytuacji. Proszę wyłącz mod_pagespeed na tym serwerze.",
+ "SystemCheckPackHelp": "Funkcja pack() jest wymagana do śledzenia odwiedzających w Piwik.",
+ "SystemCheckParseIniFileHelp": "Ta wbudowana funkcja została wyłączona przez twój hosting. Piwik podejmie próbę jej emulacji, ale może napotkać kolejne ograniczenia związane z bezpieczeństwem. Może to mieć wpływ na wydajność śledzenia.",
"SystemCheckPdoAndMysqliHelp": "Na serwerach pracujących w oparciu o system Linux możesz skompilować PHP z użyciem następującej opcji: %1$s W pliku php.ini, dodaj następujące linie: %2$s",
"SystemCheckPhp": "wersja PHP",
- "SystemCheckPhpPdoAndMysqli": "Więcej informacji znajdziesz na: %1$sPHP PDO%2$s i %3$sMYSQLI%4$s.",
- "SystemCheckSplHelp": "Potrzebujesz skonfigurować i przebudować środowisko PHP z włączoną (domyślnie) Standardową Biblioteką PHP (SPL).",
+ "SystemCheckPhpPdoAndMysqli": "Więcej informacji na temat: %1$sPHP PDO%2$s i %3$sMYSQLI%4$s.",
+ "SystemCheckSplHelp": "Musisz skonfigurować i przebudować instalację PHP, aby włączyć (domyślnie) Standardową Biblioteką PHP (SPL).",
+ "SystemCheckSettings": "Wymagana konfiguracja PHP (php.ini)",
+ "SystemCheckSummaryNoProblems": "Hurra! Twój Piwik jest poprawnie skonfigurowany. Możesz przybić sobie piątkę.",
+ "SystemCheckSummaryThereWereErrors": "O nie! Piwik wykrył kilka %1$skrytycznych problemów%2$s w swojej konfiguracji. %3$s Te problemy powinny zostać jak najszybciej rozwiązane.%4$s",
"SystemCheckSummaryThereWereWarnings": "Są pewne problemy z systemem. Piwik będzie działać, ale mogą wystąpić drobne problemy.",
"SystemCheckTimeLimitHelp": "Na stronach o dużym ruchu, działanie i archiwizacja może wymagać więcej czasu niż jest dostępny. Jeżeli okaże się to konieczne, zmień polecenie max_execution_time w pliku php.ini.",
"SystemCheckTracker": "Status śledzenia",
+ "SystemCheckTrackerHelp": "Żądanie GET do piwik.php nie powiodło się, Spróbuj dodać do białej listy adres z uwierzytelnienia HTTP i wyłączyć mod_security (konieczny może się okazać kontakt z Twoim hostingodawcą). Więcej informacji dotyczących błędu znajdziesz w logu błędów serwera.",
"SystemCheckWarnDomHelp": "Rozszerzenie \"dom\" winno być włączone (np., instalując pakiety \"php-dom\" i\/lub pakiet \"php-xml\").",
"SystemCheckWarning": "Piwik będzie działać normalnie, ale pewnie funkcje mogą być nieosiągalne",
"SystemCheckWarnJsonHelp": "Rozszerzenie \"json\" powinno być włączone (np.poprzez instalację pakietu \"php-json\") dla uzyskania lepszej wydajności.",
@@ -88,7 +122,11 @@
"SystemCheckWriteDirs": "Katalogi z prawem do zapisu",
"SystemCheckWriteDirsHelp": "Aby naprawić ten błąd w swoim systemie Linux, próbuj wpisać następującą komendę(y)",
"SystemCheckZlibHelp": "Potrzebujesz skonfigurować i przebudować środowisko PHP, z włączonym wsparciem dla \"zlib\", --with-zlib.",
+ "SystemCheckCronArchiveProcess": "Cron archiwizujący",
"SystemCheckCronArchiveProcessCLI": "Zarządzaj procesami z wiersza poleceń",
+ "SystemCheckPhpSetting": "Aby zapobiec kilku krytycznym problemom, musisz skonfigurować php.ini zgodnie z tymi wytycznymi: %s",
+ "SystemCheckUpdateHttps": "Aktualizacja przez HTTPS",
+ "SystemCheckUpdateHttpsNotSupported": "Piwik nie może pobrać aktualizacji przez HTTP i awaryjnie skorzysta z nizabezpieczonego połączenia HTTP. Sprawdź czy w systemie dostępny jest CURL lub allow_url_fopen oraz upewnij się, że rozszerzenie PHP openssl jest zainstalowane: http:\/\/piwik.org\/faq\/troubleshooting\/faq_177\/.",
"NotSupported": "nie obsługiwane",
"Tables": "Tworzenie tabel",
"TablesCreatedSuccess": "Tabele zostały utworzone pomyślnie!",
@@ -96,11 +134,15 @@
"TablesDeletedSuccess": "Istniejące stare tabele Piwik zostały skasowane pomyślnie",
"TablesFound": "Następujące tabele zostały znalezione w bazie danych",
"TablesReuse": "Ponowne wykorzystanie istniejących tabel",
- "TablesWarningHelp": "Albo istniejące table z bazy danych zostaną wybrane do ponownego wykorzystania, albo potwierdź wybór czystej nowej instalacji, która usunie wszystkie stare dane w bazie danych.",
+ "TablesUpdatedSuccess": "Baza danych została pomyślnie zaktualizowana z wersji %1$s do %2$s!",
+ "TablesWarningHelp": "Wykorzystaj ponownie istniejące w bazie danych tabele albo wybierz czystą instalację aby usunąć wszystkie zapisane w bazie dane.",
"TablesWithSameNamesFound": "Pewne %1$s tabele w twojej bazie danych %2$s mają takie same nazwy jak tabele które Piwik stara się utworzyć",
+ "Timezone": "Strefa czasowa portalu",
+ "WeHopeYouWillEnjoyPiwik": "Mamy nadzieję, że korzystanie z Piwik przyniesie Ci tyle satysfakcji ile nam przynosi jego tworzenie.",
"Welcome": "Witaj!",
"WelcomeHelp": "<p>Piwik jest systemem analityki statystyk stron w oparciu o wolne oprogramowanie open source, które zapewnia bezpośrednie pozyskanie informacji o odwiedzinach danego serwisu www.<\/p><p>Proces ten jest podzielony na kilka łatwych kroków, obecnie w ilości: %s i zajmie około 5 minut.<\/p>",
"WelcomeToCommunity": "Witamy w społeczności Piwik",
- "CannotConnectToDb": "Nie można połączyć się z bazą danych"
+ "CannotConnectToDb": "Nie można połączyć się z bazą danych",
+ "CannotConnectToDbResolvingExplanation": "To może być sytuacja przejściowa, spróbuj %1$sodświeżyć stronę%2$s. Jeśli to nie rozwiąże sytuacji skontaktuj się ze swoim administratorem Piwik."
}
} \ No newline at end of file
diff --git a/plugins/Installation/lang/pt-br.json b/plugins/Installation/lang/pt-br.json
index f1a476e5ac..2dbe1e959a 100644
--- a/plugins/Installation/lang/pt-br.json
+++ b/plugins/Installation/lang/pt-br.json
@@ -93,7 +93,6 @@
"SystemCheckOtherExtensions": "outras extensões",
"SystemCheckOtherFunctions": "Outras funções",
"SystemCheckPageSpeedDisabled": "PageSpeed desativado",
- "SystemCheckPageSpeedWarn": "Recomendamos desativar o Módulo PageSpeed ​​em seu servidor web %s: PageSpeed ​​foi relatado por causar vários problemas com o Piwik.",
"SystemCheckPackHelp": "A função pack() é necessária para monitorar visitantes em Piwik.",
"SystemCheckParseIniFileHelp": "Essa função built-in foi desabilitada em seu host. Piwik tentará simular essa função mas poderá encontrar algumas restrições de segurança. Rastreador de performance também será impactado.",
"SystemCheckPdoAndMysqliHelp": "Num servidor Linux você poderá compilar o php com as seguintes opções: %1$s No seu php.ini, adicione as seguintes linhas: %2$s",
diff --git a/plugins/Installation/lang/ru.json b/plugins/Installation/lang/ru.json
index 8ed63da012..7b72c3ca75 100644
--- a/plugins/Installation/lang/ru.json
+++ b/plugins/Installation/lang/ru.json
@@ -84,6 +84,7 @@
"SystemCheckGlobHelp": "Эта встроенная функция отключена на сервере. Piwik попытается сэмулировать ее вызов, но могут возникнуть ограничения безопасности. Это также может нанести вред общей функциональности системы.",
"SystemCheckGzcompressHelp": "Вам необходимо разрешить модуль zlib и функцию gzcompress.",
"SystemCheckGzuncompressHelp": "Вам необходимо разрешить модуль zlib и функцию gzuncompress.",
+ "SystemCheckHashHelp": "Вам нужно сконфигурировать и пересобрать PHP с включенной поддержкой hash(), исключив опцию --disable-hash.",
"SystemCheckIconvHelp": "Вам необходимо сконфигурировать или перекомпилировать PHP со включенной поддержкой \"iconv\" --with-iconv.",
"SystemCheckJsonHelp": "Для чтения\/записи данных JSON, Piwik требуется расширение php5-json.",
"SystemCheckMailHelp": "Отзывы разработчиков и письма восстановления паролей не будут отправляться без mail().",
@@ -98,7 +99,6 @@
"SystemCheckOtherExtensions": "Другие модули",
"SystemCheckOtherFunctions": "Другие функции",
"SystemCheckPageSpeedDisabled": "Выключен PageSpeed",
- "SystemCheckPageSpeedWarn": "Мы рекомендуем отключить модуль PageSpeed на Вашем веб-сервере %s: сообщено, что модуль PageSpeed вызывает некоторые проблемы с Piwik.",
"SystemCheckPackHelp": "Функиця pack() необходима для отслеживания действий Piwik.",
"SystemCheckParseIniFileHelp": "Эта встроенная функция отключена на сервере. Piwik попытается сэмулировать ее вызов, но могут возникнуть ограничения безопасности. Это также может нанести вред общей производительности системы.",
"SystemCheckPdoAndMysqliHelp": "На сервере с Linux вы можете откомпилировать php со следующими опциями: %1$s В вашем php.ini добавьте следующие строки: %2$s",
diff --git a/plugins/Installation/lang/sq.json b/plugins/Installation/lang/sq.json
index ba5e166ded..ad58bb2421 100644
--- a/plugins/Installation/lang/sq.json
+++ b/plugins/Installation/lang/sq.json
@@ -99,7 +99,6 @@
"SystemCheckOtherExtensions": "Zgjerime të tjera",
"SystemCheckOtherFunctions": "Funksione të tjerë",
"SystemCheckPageSpeedDisabled": "PageSpeed e çaktivizuar",
- "SystemCheckPageSpeedWarn": "Këshillojmë çaktivizimin e modulit PageSpeed Module te shërbyesi juaj web %s: Është raportuar se PageSpeed shkakton një numër problemesh me Piwik-un.",
"SystemCheckPackHelp": "Që të ndiqen vizitorët me Piwik-un, funksioni pack() është i domosdoshëm.",
"SystemCheckParseIniFileHelp": "Ky funksion i trupëzuar është i çaktivizuar te streha juaj. Piwik-u do të përpiqet ta emulojë këtë funksion por mund të hasë kufizime të mëtejshme sigurie. Nga kjo do të preket edhe punimi i ndjekësit.",
"SystemCheckPdoAndMysqliHelp": "Në një shërbyes Linux mund ta përpiloni php-në me mundësitë vijuese: %1$s te php.ini juaj, shtoni rreshtat vijues: %2$s",
diff --git a/plugins/Installation/lang/sr.json b/plugins/Installation/lang/sr.json
index fe836b5629..5576d6d753 100644
--- a/plugins/Installation/lang/sr.json
+++ b/plugins/Installation/lang/sr.json
@@ -99,7 +99,6 @@
"SystemCheckOtherExtensions": "Ostala proširenja",
"SystemCheckOtherFunctions": "Ostale funkcije",
"SystemCheckPageSpeedDisabled": "PageSpeed isključen",
- "SystemCheckPageSpeedWarn": "Preporučujemo da isključite PageSpeed modul u veb serveru %s: prijavljeno je da PageSpeed uzrokuje nekoliko problema kada je u pitanju Piwik.",
"SystemCheckPackHelp": "pack() funkcija je neophodna za praćenje posetilaca.",
"SystemCheckParseIniFileHelp": "Ova funkcija je isključena na vašem serveru. Piwik će pokušati da je emulira ali može da naleti na neke dalja sigurnosna ograničenja. Takođe će biti i uticaja na treker.",
"SystemCheckPdoAndMysqliHelp": "Na Linux serveru možete kompajlirati PHP sa sledećim opcijama: %1$s U datoteku php.ini dodajte sledeće linije: %2$s",
diff --git a/plugins/Installation/lang/sv.json b/plugins/Installation/lang/sv.json
index 1aaf0b810e..03a701f319 100644
--- a/plugins/Installation/lang/sv.json
+++ b/plugins/Installation/lang/sv.json
@@ -36,11 +36,17 @@
"NfsFilesystemWarning": "Din server använder NFS-filsystem.",
"NfsFilesystemWarningSuffixAdmin": "Det betyder att Piwik kommer att vara extremt långsamt när det använder filbaserade sessioner.",
"NfsFilesystemWarningSuffixInstall": "Att använda filbaserade sessioner och NFS är extremt långsamt, så Piwik kommer att använda databassessioner. Om du har många samtidiga användare av instrumentpanelen så är det möjligt att du behöver öka det maximala antalet anslutningar till databasservern.",
+ "NoConfigFileFound": "Piwiks konfigurationsfil kan inte hittas och du försöker nå en Piwiksida.",
+ "YouMayInstallPiwikNow": "Du kan %1$sinstallera Piwik nu%2$s",
+ "IfPiwikInstalledBeforeTablesCanBeKept": "Om du installerat Piwik tidigare och har tabeller i databasen så oroa dig inte, du kan återanvända tabellerna och behålla existerande data.",
"Optional": "Frivilligt",
"Password": "Lösenord",
"PasswordDoNotMatch": "Lösenorden matchar inte",
"PasswordRepeat": "Lösenord (bekräfta)",
"PercentDone": "%s %% Klar",
+ "ProfessionalServicesAdTitle": "Avancerad analys & tjänster",
+ "ProfessionalServicesfessionalServicesAdText": "Vårt nätverk av experter kan hjälpa din organisation att ta tillvara alla möjligheter i Piwik.",
+ "ProfessionalServicesfessionalDiscoverHow": "Lär dig mer om %1$sytterligare produkter och tjänster%2$still för Piwik och hur du kan öka konvertering och intäkter.",
"PleaseFixTheFollowingErrors": "Vänligen fixa följande fel",
"DefaultSettings": "Grundinställningar för Piwik",
"DefaultSettingsHelp": "Piwik kommer med vissa standardinställningar. Du kan ändra dom redan nu, eller senare via administratörssidorna.",
@@ -48,6 +54,7 @@
"RestartWebServer": "När du har gjort den här ändringen, starta om din webbserver.",
"ReusingTables": "Återanvänder tabellerna",
"PiwikOrgNewsletter": "maila mig vid större Piwik community uppdateringar",
+ "ProfessionalServicesNewsletter": "skicka mig information om %1$stjänster och produkter%2$sför Piwik",
"SeeBelowForMoreInfo": "Se nedan för mer information.",
"SetupWebsite": "Konfigurera en webbplats",
"SetupWebsiteError": "Det uppstod ett fel när webbplatsen försökte läggas till.",
@@ -77,6 +84,7 @@
"SystemCheckGlobHelp": "Denna inbyggda funktionen har inaktiverats på din värd. Piwik försöker emulera denna funktion men kan stöta på ytterligare säkerhetsrestriktioner. Funktionalitet kan påverkas.",
"SystemCheckGzcompressHelp": "Du behöver aktivera tillägget zlib och gzcompress funktionen.",
"SystemCheckGzuncompressHelp": "Du behöver aktivera tillägget zlib och funktionen gzuncompress.",
+ "SystemCheckHashHelp": "Du behöver konfigurera och bygga om PHP med stöd för hash() genom att ta bort alternativet --disable-hash.",
"SystemCheckIconvHelp": "Du måste konfigurera och installera PHP på nytt med \"iconv\" stöd aktiverat, --with-iconv.",
"SystemCheckJsonHelp": "php5-json tillägget krävs för att Piwik ska kunna läsa och skriva JSON data.",
"SystemCheckMailHelp": "Feedback och bortglömda lösenord kommer inte att skickas utan mail().",
@@ -84,12 +92,13 @@
"SystemCheckMbstringHelp": "mbstring tillägget krävs för att hantera multibytetycken i UI och API-svaren. Kontrollera även att mbstring.func_overload är satt till \"0\" i php.ini.",
"SystemCheckMemoryLimit": "Minnesbegränsning",
"SystemCheckMemoryLimitHelp": "På en högtrafikswebbplats, kan arkiveringsprocessen kräva mer minne än vad som för tillfället är tillåtet. Om det är nödvändigt ändra memory_limit direktivet i din php.ini fil.",
+ "SystemCheckNoErrorsOrWarnings": "Inga fel eller varningar",
+ "SystemCheckViewFullSystemCheck": "Visa full systemrapport",
"SystemCheckOpenURL": "Öppna URL",
"SystemCheckOpenURLHelp": "Nyhetsbrev abonnemang, anmälningar uppdatering, och \"one-click updates\" kräver att något av tilläggen \"curl\", allow_url_fopen =On eller fsockopen() är aktiverat.",
"SystemCheckOtherExtensions": "Andra tillägg",
"SystemCheckOtherFunctions": "Andra funktioner",
"SystemCheckPageSpeedDisabled": "PageSpeed inaktiverat",
- "SystemCheckPageSpeedWarn": "Vi rekommenderar att du stänger av PageSpeed-modulen på din server %s: PageSpeed har visat sig skapa flera problem tillsammans med Piwik.",
"SystemCheckPackHelp": "pack()-funktionen krävs för att spåra besökare i Piwik.",
"SystemCheckParseIniFileHelp": "Denna inbyggda funktionen har inaktiverats på din värd. Piwik försöker emulera denna funktion men den kan stöta på ytterligare säkerhetsrestriktioner. Spårningens resultat kommer också att påverkas.",
"SystemCheckPdoAndMysqliHelp": "På en Linux server kan du kompilera php med följande alternativ: %1$s I din php.ini, lägg till följande rader: %2$s",
diff --git a/plugins/Installation/lang/uk.json b/plugins/Installation/lang/uk.json
index 9162d3058e..7161bfb11d 100644
--- a/plugins/Installation/lang/uk.json
+++ b/plugins/Installation/lang/uk.json
@@ -98,7 +98,6 @@
"SystemCheckOtherExtensions": "Інші розширення",
"SystemCheckOtherFunctions": "Інші функції",
"SystemCheckPageSpeedDisabled": "PageSpeed вимкнено",
- "SystemCheckPageSpeedWarn": "Ми рекомендуємо відключити модуль PageSpeed ​​на вашому веб-сервері %s: PageSpeed повідомляє про проблеми з Piwik.",
"SystemCheckPackHelp": "Функція pack() необхідна для відстеження відвідувачів в Piwik.",
"SystemCheckParseIniFileHelp": "Ця вбудована функція було заблокована на вашому хостингу. Piwik спробує емулювати цю функцію але може зістикнутися з подальшими обмеженнями по безпеці. Також це вплине на загальну швидкість роботи системи.",
"SystemCheckPdoAndMysqliHelp": "На Linux-сервері ви можете cкомпілювати PHP з наступними опціями: %1$s В php.ini, додати наступні рядки: %2$s",
diff --git a/plugins/Installation/lang/zh-cn.json b/plugins/Installation/lang/zh-cn.json
index 4a098e8f53..4a368a69c3 100644
--- a/plugins/Installation/lang/zh-cn.json
+++ b/plugins/Installation/lang/zh-cn.json
@@ -1,148 +1,147 @@
{
"Installation": {
- "CollaborativeProject": "Piwik 是合作项目,由遍布世界各地的有爱的人们建立而成。",
- "ConfigurationHelp": "您的 Piwik 配置文件可能出错了,您可以删除 config\/config.ini.php 然后继续安裝,或者改正数据库的参数设定。",
- "ConfirmDeleteExistingTables": "您确定要从您的数据库中删除表: %s吗?警告: 删除的表中的数据无法恢复!",
- "Congratulations": "恭喜您",
- "CongratulationsHelp": "<p>恭喜您! 您的 Piwik 安装已经完成!<\/p><p>请确认您的 Javascript 跟踪代码已插入至您的页面之中,并等候您的首位访客!<\/p>",
+ "CollaborativeProject": "Piwik 是协作项目,由世界各地的人们带着爱所创建。",
+ "ConfigurationHelp": "您的 Piwik 配置文件看起来有错误。您要么删除 config\/config.ini.php 然后重新开始安裝,要么改正数据库的参数。",
+ "ConfirmDeleteExistingTables": "您确定要从您的数据库中删除表: %s吗?警告:这些表中的数据将无法恢复!",
+ "Congratulations": "恭喜",
+ "CongratulationsHelp": "<p>恭喜! 您的 Piwik 安装已经完成!<\/p><p>请确保您的 Javascript 追踪代码已插入至您的页面之中,然后等候您的首位访客吧!<\/p>",
"DatabaseAbilities": "数据库能力",
- "DatabaseCreation": "数据库建立",
+ "DatabaseCreation": "创建数据库",
"DatabaseErrorConnect": "连接至数据库服务器时发生错误",
- "DatabaseServerVersion": "数据库服务器版本",
+ "DatabaseServerVersion": "数据库服务版本",
"DatabaseSetup": "数据库设置",
"DatabaseSetupAdapter": "适配器",
"DatabaseSetupDatabaseName": "数据库名称",
"DatabaseSetupLogin": "数据库帐号",
"DatabaseSetupServer": "数据库服务器",
- "DatabaseSetupTablePrefix": "数据表前綴词",
- "Email": "Email",
+ "DatabaseSetupTablePrefix": "数据表前缀",
+ "Email": "电子邮箱",
"Extension": "扩展",
"Filesystem": "文件系统",
"GetInvolved": "如果您喜爱所见的这一切,可以 %1$s一起参与进来%2$s。",
- "GoBackAndDefinePrefix": "返回并为 Piwik 数据表定义一个数据表前綴",
- "HappyAnalysing": "祝分析得开心!",
+ "GoBackAndDefinePrefix": "返回并为 Piwik 数据表定义数据表前缀",
+ "HappyAnalysing": "分析快乐!",
"Installation": "安装",
"InstallationStatus": "安装状态",
- "InsufficientPrivilegesHelp": "您可以使用 phpMyAdmin 等工具或运行 SQL 语句来添加权限,如果您不知道如何操作,请联系管理员帮忙设置权限。",
- "InsufficientPrivilegesMain": "数据库不存在(且无法创建),或者指定用户权限不够。数据库用户需要具有以下权限: %s",
+ "InsufficientPrivilegesHelp": "您可以用类似 phpMyAdmin 的工具或自己运行合适的 SQL 语句,来添加权限。如果您不知道如何操作,请联系您的系统管理员帮忙设置权限。",
+ "InsufficientPrivilegesMain": "要么数据库不存在(且无法创建),要么该账号权限不够。数据库账号必须具有以下权限: %s",
"InvalidStateError": "错误:Piwik已经安装了。 %1$s 返回 %2$s Piwik%3$s。",
- "JsTagArchivingHelp1": "对中高流量的网站,应该采取一些优化手段加速 Piwik (例如 %1$s设定自动处理%2$s)。",
- "JSTracking_EndNote": "提示: 安装结束后,您可以在管理页面 %1$s跟踪代码%2$s 选项下生成自定义的跟踪代码。",
- "JSTracking_Intro": "用 Piwik 统计网站流量,需要确认在您的网站的每个页面都增加一些代码。",
- "LargePiwikInstances": "Piwik 给予大型网站的协助",
+ "JsTagArchivingHelp1": "对中高流量的网站,有一些确凿的优化手段可用来加速 Piwik(例如 %1$s设定自动归档%2$s)。",
+ "JSTracking_EndNote": "提示:安装结束后,您可以在管理页面 %1$s追踪代码%2$s 选项下生成自定义的跟踪代码。",
+ "JSTracking_Intro": "要用 Piwik 追踪您网站的流量,您需要确认在您网站的每个页面都增加了一些额外的代码。",
+ "LargePiwikInstances": "给予高流量网站的协助",
"Legend": "说明",
- "LoadDataInfileRecommended": "如果您的 Piwik 服务器跟踪大流量的网站 (例如每月超过 100000 页), 建议修复这个问题。",
- "LoadDataInfileUnavailableHelp": "使用 %1$s 会大大加速 Piwik 的处理速度。要让 Piwik 能用它,请更新 PHP 和 MySQL,并确认数据库用户有 %2$s 权限。",
- "NfsFilesystemWarning": "您的服务器使用NFS文件系统。",
- "NfsFilesystemWarningSuffixAdmin": "这意味着 Piwik 使用基于文件的会话将会非常慢。",
- "NfsFilesystemWarningSuffixInstall": "在NFS上使用基于文件的会话会非常慢,所以 Piwik 将使用数据库会话。如果您有很多并发的面板用户,需要在增大客户端连接到服务器的最大数。",
- "NoConfigFileFound": "没有找到Piwik配置文件,你正在尝试访问Piwk页面。",
- "YouMayInstallPiwikNow": "你可以%1$s现在安装Piwik%2$s",
- "IfPiwikInstalledBeforeTablesCanBeKept": "如果未安装Piwik之前在你的数据库中有一些表,也没关系,你可以继续使用这些表并且里面的数据也可以继续使用。",
- "Optional": "非必需",
+ "LoadDataInfileRecommended": "如果您的 Piwik 服务器跟踪高流量的网站(比如每月超过 10 0000 页面访问),建议您修复这个问题。",
+ "LoadDataInfileUnavailableHelp": "使用 %1$s 会大大加速 Piwik 的处理速度。要让 Piwik 能用它,请更新 PHP 和 MySQL,并确认数据库账号有 %2$s 权限。",
+ "NfsFilesystemWarning": "您的服务器使用 NFS 文件系统。",
+ "NfsFilesystemWarningSuffixAdmin": "这意味着当 Piwik 使用基于文件的会话时将会极慢。",
+ "NfsFilesystemWarningSuffixInstall": "在 NFS 上使用基于文件的会话会极慢,所以 Piwik 将使用数据库会话。如果您有很多并发的面板用户,你可能需要增大客户端连接到服务器的最大数。",
+ "NoConfigFileFound": "您正在访问 Piwk 页面,但 Piwik 配置文件找不到了。",
+ "YouMayInstallPiwikNow": "你可以%1$s立即安装 Piwik%2$s",
+ "IfPiwikInstalledBeforeTablesCanBeKept": "如果您以前安装过 Piwik,并且您的数据库中还残留一些表,没关系,您可以重复使用这些表,并且里面现有的数据也会保留下来。",
+ "Optional": "可选的",
"Password": "密码",
- "PasswordDoNotMatch": "密码不匹配",
- "PasswordRepeat": "密码(重复)",
+ "PasswordDoNotMatch": "密码不符",
+ "PasswordRepeat": "密码(再输一遍)",
"PercentDone": "%s %% 已完成",
"ProfessionalServicesAdTitle": "高级分析和服务",
- "ProfessionalServicesfessionalServicesAdText": "我们的专家可以帮助你的公司解锁Piwik分析更强大的功能。",
- "ProfessionalServicesfessionalDiscoverHow": "了解Piwik%1$s附加的产品和服务%2$s,以及如何增加转换和收入。",
+ "ProfessionalServicesfessionalServicesAdText": "我们的专家网络可以帮助您的公司解锁 Piwik 分析的全部强大能力。",
+ "ProfessionalServicesfessionalDiscoverHow": "了解 Piwik %1$s附加产品和服务%2$s,以及如何增加您的转化和收入。",
"PleaseFixTheFollowingErrors": "请修复以下错误",
"DefaultSettings": "默认 Piwik 设置",
- "DefaultSettingsHelp": "Piwik自带的默认设置。现在,您可以自定义它们或稍后在管理介面上做。",
- "Requirements": "Piwik 需求",
- "RestartWebServer": "做过这个改动之后,请重新启动网络服务器。",
- "ReusingTables": "重用的表",
- "PiwikOrgNewsletter": "邮件通知我重大的 Piwik 社区更新",
- "ProfessionalServicesNewsletter": "发送Piwik的%1$s专业服务和产品%2$s 信息",
+ "DefaultSettingsHelp": "Piwik 自带默认设置。现在,您可以现在就自定义它们,也可以稍后前往管理介面设置。",
+ "Requirements": "Piwik 需求条件",
+ "RestartWebServer": "做过这个改动之后,请重新启您的网络服务器。",
+ "ReusingTables": "重复使用数据表",
+ "PiwikOrgNewsletter": "当有主要的 Piwik 社区更新时发邮件给我",
+ "ProfessionalServicesNewsletter": "发送 Piwik 的%1$s专业服务和产品%2$s 信息给我",
"SeeBelowForMoreInfo": "更详细的信息请看下面",
- "SetupWebsite": "设定一个网站",
+ "SetupWebsite": "设置网站",
"SetupWebsiteError": "增加此网站时出现错误",
"SetupWebSiteName": "网站名称",
- "SetupWebsiteSetupSuccess": "创建网站 %s 成功!",
+ "SetupWebsiteSetupSuccess": "网站 %s 已成功创建!",
"SetupWebSiteURL": "网站网址",
- "SiteSetup": "请设置用 Piwik 跟踪和分析的第一个站点:",
- "SiteSetupFootnote": "注意: 一旦Piwik安装完成,您可以添加更多的跟踪站点!",
+ "SiteSetup": "请设置第一个您想用 Piwik 追踪、分析的站点:",
+ "SiteSetupFootnote": "提示:一旦 Piwik 安装完成,您将可以添加更多要追踪的网站!",
"SuperUser": "超级用户",
"SuperUserLogin": "超级用户登录",
- "SuperUserSetupError": "添加超级用户出错",
- "SuperUserSetupSuccess": "成功创建超级用户!",
- "SystemCheck": "检查系统",
- "SystemCheckAutoUpdateHelp": "注意: Piwik 的一键更新功能必须要有 Piwik 目录及內容的写入权限。",
- "SystemCheckCreateFunctionHelp": "Piwik 在 callbacks 上使用匿名函数。",
+ "SuperUserSetupError": "添加超级用户时出错了",
+ "SuperUserSetupSuccess": "超级用户已创建成功!",
+ "SystemCheck": "系统检查",
+ "SystemCheckAutoUpdateHelp": "注意: Piwik 的一键更新功能必须要有 Piwik 文件夹及内容的写入权限。",
+ "SystemCheckCreateFunctionHelp": "Piwik 使用匿名函数用作回调。",
"SystemCheckDatabaseExtensions": "MySQL 扩展",
- "SystemCheckDatabaseHelp": "Piwik 需要 mysqli 扩展组件或包含 PDO 及 pdo_mysql 扩展组件。",
- "SystemCheckDebugBacktraceHelp": "View::factory 无法创建视图。",
- "SystemCheckError": "发生错误 - 必须先修正,才能再继续",
- "SystemCheckEvalHelp": "HTML QuickForm 及 Smarty 模板系统需要。",
- "SystemCheckExtensions": "其他需要的扩展组件",
+ "SystemCheckDatabaseHelp": "Piwik 正常工作要么需要 mysqli 扩展,要么需要 PDO 及 pdo_mysql 两个扩展。",
+ "SystemCheckDebugBacktraceHelp": "View::factory 无法为调用的模块创建视图。",
+ "SystemCheckError": "发生错误——必须先修正,才能再继续",
+ "SystemCheckEvalHelp": "被 HTML QuickForm 及 Smarty 模板系统所依赖。",
+ "SystemCheckExtensions": "其他必须的扩展",
"SystemCheckFileIntegrity": "文件完整性",
- "SystemCheckFunctions": "必需的函数",
+ "SystemCheckFunctions": "必需的功能",
"SystemCheckFunctionHelp": "您需要启用这个内置的功能。",
- "SystemCheckGDFreeType": "GD > 2.x + Freetype (graphics)",
- "SystemCheckGDHelp": "波形图 (小图) 将无法显示!",
- "SystemCheckGlobHelp": "这个内置函数在您的主机上已停用。Piwik 会尝试模拟这个功能,但可能会遇到其它的安全限制,功能可能受到影响。",
- "SystemCheckGzcompressHelp": "需要启用 zlib 扩展和 gzcompress 函数。",
- "SystemCheckGzuncompressHelp": "需要启用 zlib 扩展和 gzuncompress 函数。",
- "SystemCheckHashHelp": "你需要配置并重新编译PHP,支持hash(),使用excluding disable-hash选项。",
- "SystemCheckIconvHelp": "您需要设定及重建 PHP, 然后启用\"iconv\"支持, --with-iconv.",
+ "SystemCheckGDFreeType": "GD > 2.x + Freetype(图形功能)",
+ "SystemCheckGDHelp": "迷你图(小图)和(Piwik 手机 app 和邮件报告中的)图片将无法显示!",
+ "SystemCheckGlobHelp": "这个内置功能在您的主机上已停用。Piwik 会尝试模拟这个功能,但可能会遇到其它的安全限制。功能可能受到影响。",
+ "SystemCheckGzcompressHelp": "需要启用 zlib 扩展和 gzcompress 功能。",
+ "SystemCheckGzuncompressHelp": "需要启用 zlib 扩展和 gzuncompress 功能。",
+ "SystemCheckHashHelp": "您需要配置禁用 --disable-hash 参数并重新编译 PHP,以启用 hash() 支持。",
+ "SystemCheckIconvHelp": "您需要配置使用 --with-iconv 参数并重新编译 PHP,来启用“iconv”支持。",
"SystemCheckJsonHelp": "Piwik 需要 php5-json 扩展来读写 JSON 数据。",
- "SystemCheckMailHelp": "意见反馈及忘记密码信息若沒有 mail() 将无法寄送。",
+ "SystemCheckMailHelp": "若沒有 mail(),意见反馈及忘记密码的信息将无法寄出。",
"SystemCheckMbstring": "mbstring",
- "SystemCheckMbstringHelp": "這個mbstring扩展需要处理多字节字符的用户界面和API响应。同时请检查php.ini中的mbstring.func_overload设置为\"0\"。",
+ "SystemCheckMbstringHelp": "处理(中日韩等)多字节字符的用户界面以及 API 响应,必须使用 mbstring 扩展。同时请确保 php.ini 中的 mbstring.func_overload 已设置为“0”。",
"SystemCheckMemoryLimit": "内存限制",
- "SystemCheckMemoryLimitHelp": "在一个高流量的网站,数据处理过程中使用的内存可能超出当前系统的允许值!如果需要,请修改 php.ini文件中的 memory_limit 值!",
- "SystemCheckNoErrorsOrWarnings": "没有错误或者警告。",
- "SystemCheckViewFullSystemCheck": "查看所有的系统检查报告。",
- "SystemCheckOpenURL": "打开URL",
- "SystemCheckOpenURLHelp": "新闻订阅、更新通知及一键更新功能需要 \"curl\" 函数,allow_url_fopen=On, 或启用 fsockopen()。",
+ "SystemCheckMemoryLimitHelp": "在一个高流量的网站,归档过程中使用的内存可能超过当前系统的允许值。如果有需要,可以调整 php.ini 文件中的 memory_limit 值。",
+ "SystemCheckNoErrorsOrWarnings": "没有错误或者警告",
+ "SystemCheckViewFullSystemCheck": "查看完整的系统检查报告",
+ "SystemCheckOpenURL": "打开网址",
+ "SystemCheckOpenURLHelp": "新闻订阅、更新通知及一键更新功能需要“curl”扩展,allow_url_fopen=On,或启用 fsockopen()。",
"SystemCheckOtherExtensions": "其它扩展",
- "SystemCheckOtherFunctions": "其它函数",
- "SystemCheckPageSpeedDisabled": "PageSpeed 模块已禁用",
- "SystemCheckPageSpeedWarn": "推荐在您的网站 %s 的服务器中禁用 PageSpeed 模块:PageSpeed 可能会引起 Piwik 的一些问题。",
- "SystemCheckPackHelp": "Piwik 需要使用 pack() 函数跟踪访客",
- "SystemCheckParseIniFileHelp": "这个内置函数在您的主机上已停用。Piwik 将会尝试模拟这个功能,但可能会遇到其它的安全限制,也会影响跟踪性能。",
- "SystemCheckPdoAndMysqliHelp": "在 Linux 服务器上您可以使用以下选项编译 PHP: 在您的php.ini 中 %1$s, 加入以下几行: %2$s",
+ "SystemCheckOtherFunctions": "其它功能",
+ "SystemCheckPageSpeedDisabled": "PageSpeed 已停用",
+ "SystemCheckPackHelp": "Piwik 必须使用 pack() 功能才能追踪访客。",
+ "SystemCheckParseIniFileHelp": "您主机上这个内置功能已停用。Piwik 将会尝试模拟这个功能,但可能会遇到其它的安全限制。追踪的性能也会受到很大影响。",
+ "SystemCheckPdoAndMysqliHelp": "在 GNU\/Linux 服务器上,您可以使用以下选项编译 PHP: %1$s在您的 php.ini 中 , 加入以下几行: %2$s",
"SystemCheckPhp": "PHP 版本",
- "SystemCheckPhpPdoAndMysqli": "更多资讯: %1$sPHP PDO%2$s 和 %3$sMYSQLI%4$s.",
- "SystemCheckSplHelp": "您需要设定及重建 PHP, 然后启用 Standard PHP Library (SPL)。",
- "SystemCheckSettings": "PHP 配置需求 (php.ini)",
- "SystemCheckSummaryNoProblems": "太好了! 您的 Piwik 没有问题,放心使用吧。",
- "SystemCheckSummaryThereWereErrors": "糟糕! Piwik 检查到一些 %1$s严重的问题%2$s,%3$s这些问题需要马上修复。%4$s",
- "SystemCheckSummaryThereWereWarnings": "您的系统有些问题,Piwik 可以运行,但是可能会出现些小错误。",
- "SystemCheckTimeLimitHelp": "在一个高流量的网站,数据处理需要的时间可能会超过目前系统所允许的时间!如有必要,请修改 php.ini 文件中的 max_execution_time 值!",
- "SystemCheckTracker": "跟踪状态",
- "SystemCheckTrackerHelp": "从piwik.php请求失败。试试这个白名单网址,从HTTP验证和禁用mod_security的 (你可能要问你的虚拟主机提供商)。有关错误的详细信息,请检查您的Web服务器错误日志文件。",
- "SystemCheckWarnDomHelp": "需要启用 \"dom\" 扩展 (例如安装 \"php-dom\" 或者 \"php-xml\" 包)。",
- "SystemCheckWarning": "Piwik 将正常工作,但某些功能可能无效",
- "SystemCheckWarnJsonHelp": "为了更好的性能,您应该使 \"json\" 扩展有效 (例如安装 \"php-json\" 包)。",
- "SystemCheckWarnLibXmlHelp": "您需要启用 \"libxml\" 扩展 (例如,\"安装 php-libxml\" 包) as it is required by other core PHP extensions.",
- "SystemCheckWarnSimpleXMLHelp": "需要启用 \"SimpleXML\" 扩展 (例如,安装 \"php-simplexml\" 和\/或 \"php-xml\" 包).",
- "SystemCheckWinPdoAndMysqliHelp": "在 Windows 伺服器上您可以新增以下幾行至您的 php.ini 中: %s",
- "SystemCheckWriteDirs": "具写入权限的目录",
- "SystemCheckWriteDirsHelp": "要在您的 Linux 系统修正这个错误,尝试输入以下的命令",
- "SystemCheckZlibHelp": "您需要设定及重建 PHP, 然后启用\"zlib\"支持, --with-zlib.",
- "SystemCheckCronArchiveProcess": "定时日志",
+ "SystemCheckPhpPdoAndMysqli": "更多信息:%1$sPHP PDO%2$s 和 %3$sMYSQLI%4$s。",
+ "SystemCheckSplHelp": "您需要配置启用标准 PHP 库(SPL)(默认启用)并重建 PHP,以便启用 SPL。",
+ "SystemCheckSettings": "必要的 PHP 配置(php.ini)",
+ "SystemCheckSummaryNoProblems": "太好了!您的 Piwik 设置没有任何问题。为自己鼓掌!",
+ "SystemCheckSummaryThereWereErrors": "糟糕!Piwik 检查到您设置中的一些 %1$s严重问题%2$s,%3$s这些问题需要立即修复。%4$s",
+ "SystemCheckSummaryThereWereWarnings": "您的系统有些问题。Piwik 可以运作,但您也许会碰到一些小问题。",
+ "SystemCheckTimeLimitHelp": "在一个高流量的网站,执行归档过程可能会超过目前系统所允许的时间。如果需要,可以调整 php.ini 文件中的 max_execution_time。",
+ "SystemCheckTracker": "追踪器状态",
+ "SystemCheckTrackerHelp": "以 GET 请求 piwik.php 失败。尝试将这个地址加入 HTTP 认证机制的白名单,并停用 mod_security 扩展(您可能需要询问主机提供商)。请检查您的 Web 服务器错误日志文件,获取更多此错误的信息。",
+ "SystemCheckWarnDomHelp": "必须启用“dom”扩展(例如安装“php-dom”或“php-xml”包)。",
+ "SystemCheckWarning": "Piwik 将正常运作,但某些功能可能失效",
+ "SystemCheckWarnJsonHelp": "为了更好的性能,您应该启用“json”扩展(例如安装“php-json”包)。",
+ "SystemCheckWarnLibXmlHelp": "您必须启用“libxml”扩展(例如安装“php-libxml”包,它被其他核心 PHP 扩展所依赖。",
+ "SystemCheckWarnSimpleXMLHelp": "您必须启用“SimpleXML”扩展(例如安装“php-simplexml”和\/或“php-xml”包)。",
+ "SystemCheckWinPdoAndMysqliHelp": "在 Windows 服务器上您可以在您的 php.ini 中加入以下几行: %s",
+ "SystemCheckWriteDirs": "具有写入权限的文件夹",
+ "SystemCheckWriteDirsHelp": "要在您的 GNU\/Linux 系统中修正这个错误,可以试试输入以下命令",
+ "SystemCheckZlibHelp": "您需要设置 --with-zlib 并重新编译 PHP,以启用“zlib”支持。",
+ "SystemCheckCronArchiveProcess": "归档计划",
"SystemCheckCronArchiveProcessCLI": "通过 CLI 管理进程",
- "SystemCheckPhpSetting": "为防止出现重大问题,您需要在 php.ini 文件中加入如下几行设置:%s",
- "SystemCheckUpdateHttps": "通过 HTTPS 连接更新",
- "SystemCheckUpdateHttpsNotSupported": "Piwik 无法使用 HTTPS 更新,将使用没那么安全的 HTTP 进行更新。请确认是否支持 CURL 或者 allow_url_fopen ,以及 openssl PHP 插件是否已安装: http:\/\/piwik.org\/faq\/troubleshooting\/faq_177\/ 。",
+ "SystemCheckPhpSetting": "为预防某些严重问题,您必须在 php.ini 文件中加入如下几行:%s",
+ "SystemCheckUpdateHttps": "通过 HTTPS 更新",
+ "SystemCheckUpdateHttpsNotSupported": "Piwik 无法通过 HTTPS 更新,将降低为通过不安全的 HTTP 进行更新。请确认 CURL 或者 allow_url_fopen 已支持,且 openssl PHP 插件已安装: http:\/\/piwik.org\/faq\/troubleshooting\/faq_177\/ 。",
"NotSupported": "不支持",
"Tables": "建立数据表中",
"TablesCreatedSuccess": "数据表已成功建立!",
- "TablesDelete": "删除已检测到的数据表",
- "TablesDeletedSuccess": "已存在的 Piwik 数据表已成功删除",
- "TablesFound": "以下的数据表在数据库之中已存在",
+ "TablesDelete": "删除检测到的数据表",
+ "TablesDeletedSuccess": "存在的 Piwik 数据表已成功删除",
+ "TablesFound": "以下数据表在数据库中已存在",
"TablesReuse": "重复使用已存在的数据表",
- "TablesUpdatedSuccess": "成功更新数据库: %1$s => %2$s!",
- "TablesWarningHelp": "可以选择重复使用现存的数据表,或者选择全新安装,以清除所有现存数据库中的数据!",
- "TablesWithSameNamesFound": "数据表 %1$s 在数据库 %2$s 中与 Piwik 要建的表重名。",
+ "TablesUpdatedSuccess": "数据库已成功从 %1$s 更新为 %2$s!",
+ "TablesWarningHelp": "要么选择重复使用现存的数据表,要么选择删除现存数据库中的所有数据,全新安装!",
+ "TablesWithSameNamesFound": "部分 %1$s 数据库中的表 %2$s 中与 Piwik 要创建的表重名。",
"Timezone": "网站时区",
- "WeHopeYouWillEnjoyPiwik": "希望您能像我们一样爱上 Piwik。",
- "Welcome": "欢迎使用!",
- "WelcomeHelp": "<p>Piwik 是一个让您能够轻易取得您所想要的访客信息的开放原始码页面分析软件!<\/p><p>此安装过程分为 %s 个简易的步骤,并且将仅花大约 5 分钟的时间!<\/p>",
+ "WeHopeYouWillEnjoyPiwik": "希望您能像我们享受创建 Piwik 一样享受使用 Piwik。",
+ "Welcome": "欢迎!",
+ "WelcomeHelp": "<p>Piwik 是一个让您能够轻易取得您所想要的访客信息的免费网页分析软件。<\/p><p>此安装过程共 %s 个简易的步骤,大约需要 5 分钟的时间!<\/p>",
"WelcomeToCommunity": "欢迎来到 Piwik 社区!",
- "CannotConnectToDb": "无法连接至数据库",
- "CannotConnectToDbResolvingExplanation": "这可能是一个暂时的问题,请尝试 %1$s 刷新页面 %2$s。如果问题仍然存在,请联系您的Piwik管理员。"
+ "CannotConnectToDb": "无法连接数据库",
+ "CannotConnectToDbResolvingExplanation": "这可能是暂时的问题,试试%1$s刷新页面%2$s。如果问题仍然存在,请联系您的 Piwik 管理员。"
}
} \ No newline at end of file
diff --git a/plugins/Installation/lang/zh-tw.json b/plugins/Installation/lang/zh-tw.json
index 952c4cf2c4..b85d0cb53c 100644
--- a/plugins/Installation/lang/zh-tw.json
+++ b/plugins/Installation/lang/zh-tw.json
@@ -99,7 +99,7 @@
"SystemCheckOtherExtensions": "其他擴充功能",
"SystemCheckOtherFunctions": "其他功能",
"SystemCheckPageSpeedDisabled": "已停用 PageSpeed",
- "SystemCheckPageSpeedWarn": "我們建議停用伺服器 %s 中的 PageSpeed 模組:已知 PageSpeed 將導致 Piwik 發生多種問題。",
+ "SystemCheckPageSpeedWarning": "我們建議停用伺服器 %s 中的 PageSpeed 模組:已知 PageSpeed 將導致 Piwik 發生多種問題,如:網頁報告損壞、資料列趨勢損壞,和其他難以修復的問題。請將此伺服器中的 mod_pagespeed 停用。",
"SystemCheckPackHelp": "Piwik 必須使用 pack() 功能才能追蹤訪客。",
"SystemCheckParseIniFileHelp": "這個內建的功能已被你的主機商停用。Piwik 將嘗試模擬這個功能,但可能會遇到安全限制。追蹤性能也會受到影響。",
"SystemCheckPdoAndMysqliHelp": "在 GNU\/Linux 伺服器上你可以使用以下選項編譯 PHP:在你的 php.ini 中 %1$s,加入以下幾行內容:%2$s",
diff --git a/plugins/Intl/Commands/GenerateIntl.php b/plugins/Intl/Commands/GenerateIntl.php
index d9710f5977..59b79ae30e 100644
--- a/plugins/Intl/Commands/GenerateIntl.php
+++ b/plugins/Intl/Commands/GenerateIntl.php
@@ -265,6 +265,8 @@ class GenerateIntl extends ConsoleCommand
$translations['Intl']['Format_Time'] = '{time}';
$translations['Intl']['Format_Time_12'] = $calendarData['dateTimeFormats']['availableFormats']['hms'];
$translations['Intl']['Format_Time_24'] = $calendarData['dateTimeFormats']['availableFormats']['Hms'];
+ $translations['Intl']['Format_Hour_12'] = $calendarData['dateTimeFormats']['availableFormats']['h'];
+ $translations['Intl']['Format_Hour_24'] = $calendarData['dateTimeFormats']['availableFormats']['H'];
$translations['Intl']['Format_Date_Long'] = $calendarData['dateFormats']['full'];
$translations['Intl']['Format_Date_Day_Month'] = $calendarData['dateTimeFormats']['availableFormats']['MMMEd'];
$translations['Intl']['Format_Date_Short'] = $calendarData['dateFormats']['medium'];
diff --git a/plugins/Intl/DateTimeFormatProvider.php b/plugins/Intl/DateTimeFormatProvider.php
index 19fcd7acca..afe8a303c2 100644
--- a/plugins/Intl/DateTimeFormatProvider.php
+++ b/plugins/Intl/DateTimeFormatProvider.php
@@ -106,13 +106,9 @@ class DateTimeFormatProvider extends \Piwik\Intl\Data\Provider\DateTimeFormatPro
protected function getTimeFormat()
{
- if (is_null($this->use12HourClock)) {
- $this->use12HourClock = LanguagesManager::uses12HourClockForCurrentUser();
- }
-
$timeFormat = 'Intl_Format_Time_24';
- if ($this->use12HourClock) {
+ if ($this->uses12HourClock()) {
$timeFormat = 'Intl_Format_Time_12';
}
@@ -122,6 +118,20 @@ class DateTimeFormatProvider extends \Piwik\Intl\Data\Provider\DateTimeFormatPro
}
/**
+ * Returns if time is present as 12 hour clock (eg am/pm)
+ *
+ * @return bool
+ */
+ public function uses12HourClock()
+ {
+ if (is_null($this->use12HourClock)) {
+ $this->use12HourClock = LanguagesManager::uses12HourClockForCurrentUser();
+ }
+
+ return $this->use12HourClock;
+ }
+
+ /**
* For testing purpose only: Overwrites time format
*
* @param bool $use12HourClock
diff --git a/plugins/Intl/lang/am.json b/plugins/Intl/lang/am.json
index 4ea641a511..26aa0adb84 100644
--- a/plugins/Intl/lang/am.json
+++ b/plugins/Intl/lang/am.json
@@ -63,7 +63,7 @@
"Country_CW": "ኩራሳዎ",
"Country_CX": "የገና ደሴት",
"Country_CY": "ሳይፕረስ",
- "Country_CZ": "ቼክ ሪፑብሊክ",
+ "Country_CZ": "ቼቺያ",
"Country_DE": "ጀርመን",
"Country_DJ": "ጂቡቲ",
"Country_DK": "ዴንማርክ",
@@ -305,6 +305,8 @@
"Format_Date_Day_Month": "E፣ MMM d",
"Format_Date_Long": "EEEE ፣d MMMM y",
"Format_Date_Short": "d MMM y",
+ "Format_Hour_12": "h a",
+ "Format_Hour_24": "H",
"Format_Interval_Long_D": "MMMM d–d፣ y",
"Format_Interval_Long_M": "MMMM d – MMMM d፣ y",
"Format_Interval_Long_Y": "MMMM d፣ y – MMMM d፣ y",
diff --git a/plugins/Intl/lang/ar.json b/plugins/Intl/lang/ar.json
index c82d41c5be..5041cce381 100644
--- a/plugins/Intl/lang/ar.json
+++ b/plugins/Intl/lang/ar.json
@@ -63,7 +63,7 @@
"Country_CW": "كوراساو",
"Country_CX": "جزيرة الكريسماس",
"Country_CY": "قبرص",
- "Country_CZ": "جمهورية التشيك",
+ "Country_CZ": "التشيك",
"Country_DE": "ألمانيا",
"Country_DJ": "جيبوتي",
"Country_DK": "الدانمرك",
@@ -305,6 +305,8 @@
"Format_Date_Day_Month": "E، d MMM",
"Format_Date_Long": "EEEE، d MMMM، y",
"Format_Date_Short": "dd‏\/MM‏\/y",
+ "Format_Hour_12": "h a",
+ "Format_Hour_24": "HH",
"Format_Interval_Long_D": "d–d MMMM، y",
"Format_Interval_Long_M": "d MMMM – d MMMM، y",
"Format_Interval_Long_Y": "d MMMM، y – d MMMM، y",
diff --git a/plugins/Intl/lang/be.json b/plugins/Intl/lang/be.json
index 49eaf85f47..deea5d3a6b 100644
--- a/plugins/Intl/lang/be.json
+++ b/plugins/Intl/lang/be.json
@@ -305,6 +305,8 @@
"Format_Date_Day_Month": "E, d MMM",
"Format_Date_Long": "EEEE, d MMMM y 'г'.",
"Format_Date_Short": "d.MM.y",
+ "Format_Hour_12": "hh a",
+ "Format_Hour_24": "HH",
"Format_Interval_Long_D": "d–d MMMM y",
"Format_Interval_Long_M": "d MMMM – d MMMM y",
"Format_Interval_Long_Y": "d MMMM y – d MMMM y",
diff --git a/plugins/Intl/lang/bg.json b/plugins/Intl/lang/bg.json
index c440f820e6..216e5dee89 100644
--- a/plugins/Intl/lang/bg.json
+++ b/plugins/Intl/lang/bg.json
@@ -63,7 +63,7 @@
"Country_CW": "Кюрасао",
"Country_CX": "Остров Рождество",
"Country_CY": "Кипър",
- "Country_CZ": "Чешка република",
+ "Country_CZ": "Чехия",
"Country_DE": "Германия",
"Country_DJ": "Джибути",
"Country_DK": "Дания",
@@ -305,6 +305,8 @@
"Format_Date_Day_Month": "E, d.MM",
"Format_Date_Long": "EEEE, d MMMM y 'г'.",
"Format_Date_Short": "d.MM.y 'г'.",
+ "Format_Hour_12": "h a",
+ "Format_Hour_24": "H",
"Format_Interval_Long_D": "d – d MMMM y 'г'.",
"Format_Interval_Long_M": "d MMMM – d MMMM y 'г'.",
"Format_Interval_Long_Y": "d MMMM y 'г'. – d MMMM y 'г'.",
@@ -557,7 +559,7 @@
"NMinutesShort": "%s min",
"NSeconds": "%s секунди",
"NSecondsShort": "%s s",
- "NumberFormatCurrency": "#0.00 ¤",
+ "NumberFormatCurrency": "0.00 ¤",
"NumberFormatNumber": "#,##0.###",
"NumberFormatPercent": "#,##0%",
"NumberSymbolDecimal": ",",
diff --git a/plugins/Intl/lang/bn.json b/plugins/Intl/lang/bn.json
index 9a19537976..bcc6b97621 100644
--- a/plugins/Intl/lang/bn.json
+++ b/plugins/Intl/lang/bn.json
@@ -63,7 +63,7 @@
"Country_CW": "কিউরাসাও",
"Country_CX": "ক্রিসমাস দ্বীপ",
"Country_CY": "সাইপ্রাস",
- "Country_CZ": "চেক প্রজাতন্ত্র",
+ "Country_CZ": "চেচিয়া",
"Country_DE": "জার্মানি",
"Country_DJ": "জিবুতি",
"Country_DK": "ডেনমার্ক",
@@ -305,6 +305,8 @@
"Format_Date_Day_Month": "E d MMM",
"Format_Date_Long": "EEEE, d MMMM, y",
"Format_Date_Short": "d MMM, y",
+ "Format_Hour_12": "h a",
+ "Format_Hour_24": "HH",
"Format_Interval_Long_D": "d–d MMMM, y",
"Format_Interval_Long_M": "d MMMM – d MMMM, y",
"Format_Interval_Long_Y": "d MMMM, y – d MMMM, y",
diff --git a/plugins/Intl/lang/bs.json b/plugins/Intl/lang/bs.json
index 3c776babd7..899daef98b 100644
--- a/plugins/Intl/lang/bs.json
+++ b/plugins/Intl/lang/bs.json
@@ -63,7 +63,7 @@
"Country_CW": "Kurasao",
"Country_CX": "Božićna Ostrva",
"Country_CY": "Kipar",
- "Country_CZ": "Češka Republika",
+ "Country_CZ": "Češka",
"Country_DE": "Njemačka",
"Country_DJ": "Džibuti",
"Country_DK": "Danska",
@@ -305,6 +305,8 @@
"Format_Date_Day_Month": "E, d. MMM",
"Format_Date_Long": "EEEE, d. MMMM y.",
"Format_Date_Short": "d. MMM. y.",
+ "Format_Hour_12": "h a",
+ "Format_Hour_24": "HH",
"Format_Interval_Long_D": "d. – d. MMMM y.",
"Format_Interval_Long_M": "d. MMMM – d. MMMM y.",
"Format_Interval_Long_Y": "d. MMMM y. – d. MMMM y.",
diff --git a/plugins/Intl/lang/ca.json b/plugins/Intl/lang/ca.json
index 614fe35f72..a48b09d244 100644
--- a/plugins/Intl/lang/ca.json
+++ b/plugins/Intl/lang/ca.json
@@ -63,7 +63,7 @@
"Country_CW": "Curaçao",
"Country_CX": "Illa Christmas",
"Country_CY": "Xipre",
- "Country_CZ": "República Txeca",
+ "Country_CZ": "Txèquia",
"Country_DE": "Alemanya",
"Country_DJ": "Djibouti",
"Country_DK": "Dinamarca",
@@ -305,6 +305,8 @@
"Format_Date_Day_Month": "E, d MMM",
"Format_Date_Long": "EEEE, d MMMM 'de' y",
"Format_Date_Short": "d MMM y",
+ "Format_Hour_12": "h a",
+ "Format_Hour_24": "H",
"Format_Interval_Long_D": "d–d MMMM 'de' y",
"Format_Interval_Long_M": "d MMMM – d MMMM 'de' y",
"Format_Interval_Long_Y": "d MMMM 'de' y – d MMMM 'de' y",
diff --git a/plugins/Intl/lang/cs.json b/plugins/Intl/lang/cs.json
index 885d852428..39d03a45ac 100644
--- a/plugins/Intl/lang/cs.json
+++ b/plugins/Intl/lang/cs.json
@@ -63,7 +63,7 @@
"Country_CW": "Curaçao",
"Country_CX": "Vánoční ostrov",
"Country_CY": "Kypr",
- "Country_CZ": "Česká republika",
+ "Country_CZ": "Česko",
"Country_DE": "Německo",
"Country_DJ": "Džibutsko",
"Country_DK": "Dánsko",
@@ -305,6 +305,8 @@
"Format_Date_Day_Month": "E d. M.",
"Format_Date_Long": "EEEE d. MMMM y",
"Format_Date_Short": "d. M. y",
+ "Format_Hour_12": "h a",
+ "Format_Hour_24": "H",
"Format_Interval_Long_D": "d.–d. M. y",
"Format_Interval_Long_M": "d. M. – d. M. y",
"Format_Interval_Long_Y": "d. M. y – d. M. y",
diff --git a/plugins/Intl/lang/cy.json b/plugins/Intl/lang/cy.json
index 4b98f7551a..0b7f67eaf3 100644
--- a/plugins/Intl/lang/cy.json
+++ b/plugins/Intl/lang/cy.json
@@ -63,7 +63,7 @@
"Country_CW": "Curaçao",
"Country_CX": "Ynys y Nadolig",
"Country_CY": "Cyprus",
- "Country_CZ": "Gweriniaeth Tsiec",
+ "Country_CZ": "Tsiecia",
"Country_DE": "Yr Almaen",
"Country_DJ": "Djibouti",
"Country_DK": "Denmarc",
@@ -305,6 +305,8 @@
"Format_Date_Day_Month": "E, d MMM",
"Format_Date_Long": "EEEE, d MMMM y",
"Format_Date_Short": "d MMM y",
+ "Format_Hour_12": "h a",
+ "Format_Hour_24": "HH",
"Format_Interval_Long_D": "d–d MMMM y",
"Format_Interval_Long_M": "d MMMM – d MMMM y",
"Format_Interval_Long_Y": "d MMMM, y – d MMMM y",
diff --git a/plugins/Intl/lang/da.json b/plugins/Intl/lang/da.json
index 18fdff2299..ef3d26a411 100644
--- a/plugins/Intl/lang/da.json
+++ b/plugins/Intl/lang/da.json
@@ -305,6 +305,8 @@
"Format_Date_Day_Month": "E d. MMM",
"Format_Date_Long": "EEEE 'den' d. MMMM y",
"Format_Date_Short": "d. MMM y",
+ "Format_Hour_12": "h a",
+ "Format_Hour_24": "HH",
"Format_Interval_Long_D": "d.–d. MMMM y",
"Format_Interval_Long_M": "d. MMMM.–d. MMMM y",
"Format_Interval_Long_Y": "d. MMMM y–d. MMMM y",
diff --git a/plugins/Intl/lang/de.json b/plugins/Intl/lang/de.json
index 8de4c29cef..cbc32832ee 100644
--- a/plugins/Intl/lang/de.json
+++ b/plugins/Intl/lang/de.json
@@ -63,7 +63,7 @@
"Country_CW": "Curaçao",
"Country_CX": "Weihnachtsinsel",
"Country_CY": "Zypern",
- "Country_CZ": "Tschechische Republik",
+ "Country_CZ": "Tschechien",
"Country_DE": "Deutschland",
"Country_DJ": "Dschibuti",
"Country_DK": "Dänemark",
@@ -305,6 +305,8 @@
"Format_Date_Day_Month": "E, d. MMM",
"Format_Date_Long": "EEEE, d. MMMM y",
"Format_Date_Short": "dd.MM.y",
+ "Format_Hour_12": "h 'Uhr' a",
+ "Format_Hour_24": "HH 'Uhr'",
"Format_Interval_Long_D": "d.–d. MMMM y",
"Format_Interval_Long_M": "d. MMMM – d. MMMM y",
"Format_Interval_Long_Y": "d. MMMM y – d. MMMM y",
diff --git a/plugins/Intl/lang/el.json b/plugins/Intl/lang/el.json
index c0fdc46284..edb78624f6 100644
--- a/plugins/Intl/lang/el.json
+++ b/plugins/Intl/lang/el.json
@@ -63,7 +63,7 @@
"Country_CW": "Κουρασάο",
"Country_CX": "Νήσος των Χριστουγέννων",
"Country_CY": "Κύπρος",
- "Country_CZ": "Τσεχική Δημοκρατία",
+ "Country_CZ": "Τσεχία",
"Country_DE": "Γερμανία",
"Country_DJ": "Τζιμπουτί",
"Country_DK": "Δανία",
@@ -305,6 +305,8 @@
"Format_Date_Day_Month": "E, d MMM",
"Format_Date_Long": "EEEE, d MMMM y",
"Format_Date_Short": "d MMM y",
+ "Format_Hour_12": "h a",
+ "Format_Hour_24": "HH",
"Format_Interval_Long_D": "dd–dd MMMM y",
"Format_Interval_Long_M": "dd MMMM – dd MMMM y",
"Format_Interval_Long_Y": "dd MMMM y – dd MMMM y",
diff --git a/plugins/Intl/lang/en.json b/plugins/Intl/lang/en.json
index 063bf9187c..07e367ce8c 100644
--- a/plugins/Intl/lang/en.json
+++ b/plugins/Intl/lang/en.json
@@ -63,7 +63,7 @@
"Country_CW": "Curaçao",
"Country_CX": "Christmas Island",
"Country_CY": "Cyprus",
- "Country_CZ": "Czech Republic",
+ "Country_CZ": "Czechia",
"Country_DE": "Germany",
"Country_DJ": "Djibouti",
"Country_DK": "Denmark",
@@ -305,6 +305,8 @@
"Format_Date_Day_Month": "E, MMM d",
"Format_Date_Long": "EEEE, MMMM d, y",
"Format_Date_Short": "MMM d, y",
+ "Format_Hour_12": "h a",
+ "Format_Hour_24": "HH",
"Format_Interval_Long_D": "MMMM d – d, y",
"Format_Interval_Long_M": "MMMM d – MMMM d, y",
"Format_Interval_Long_Y": "MMMM d, y – MMMM d, y",
diff --git a/plugins/Intl/lang/es.json b/plugins/Intl/lang/es.json
index edcde23bb1..1753d1729e 100644
--- a/plugins/Intl/lang/es.json
+++ b/plugins/Intl/lang/es.json
@@ -63,7 +63,7 @@
"Country_CW": "Curazao",
"Country_CX": "Isla de Navidad",
"Country_CY": "Chipre",
- "Country_CZ": "República Checa",
+ "Country_CZ": "Chequia",
"Country_DE": "Alemania",
"Country_DJ": "Yibuti",
"Country_DK": "Dinamarca",
@@ -305,6 +305,8 @@
"Format_Date_Day_Month": "E, d MMM",
"Format_Date_Long": "EEEE, d 'de' MMMM 'de' y",
"Format_Date_Short": "d MMM y",
+ "Format_Hour_12": "h a",
+ "Format_Hour_24": "H",
"Format_Interval_Long_D": "d–d 'de' MMMM 'de' y",
"Format_Interval_Long_M": "d 'de' MMMM–d 'de' MMMM 'de' y",
"Format_Interval_Long_Y": "d 'de' MMMM 'de' y–d 'de' MMMM 'de' y",
diff --git a/plugins/Intl/lang/et.json b/plugins/Intl/lang/et.json
index d1a921756b..14c2106703 100644
--- a/plugins/Intl/lang/et.json
+++ b/plugins/Intl/lang/et.json
@@ -63,7 +63,7 @@
"Country_CW": "Curaçao",
"Country_CX": "Jõulusaar",
"Country_CY": "Küpros",
- "Country_CZ": "Tšehhi",
+ "Country_CZ": "Tšehhia",
"Country_DE": "Saksamaa",
"Country_DJ": "Djibouti",
"Country_DK": "Taani",
@@ -305,6 +305,8 @@
"Format_Date_Day_Month": "E, d. MMM",
"Format_Date_Long": "EEEE, d. MMMM y",
"Format_Date_Short": "d. MMM y",
+ "Format_Hour_12": "h a",
+ "Format_Hour_24": "HH",
"Format_Interval_Long_D": "d.–d. MMMM y",
"Format_Interval_Long_M": "d. MMMM – d. MMMM y",
"Format_Interval_Long_Y": "d. MMMM y – d. MMMM y",
diff --git a/plugins/Intl/lang/eu.json b/plugins/Intl/lang/eu.json
index e61a18ea4d..a186b7354e 100644
--- a/plugins/Intl/lang/eu.json
+++ b/plugins/Intl/lang/eu.json
@@ -63,7 +63,7 @@
"Country_CW": "Curaçao",
"Country_CX": "Christmas uhartea",
"Country_CY": "Zipre",
- "Country_CZ": "Txekiar Errepublika",
+ "Country_CZ": "Txekia",
"Country_DE": "Alemania",
"Country_DJ": "Djibuti",
"Country_DK": "Danimarka",
@@ -305,6 +305,8 @@
"Format_Date_Day_Month": "MMM d, E",
"Format_Date_Long": "y('e')'ko' MMMM d, EEEE",
"Format_Date_Short": "y MMM d",
+ "Format_Hour_12": "h a",
+ "Format_Hour_24": "HH",
"Format_Interval_Long_D": "y('e')'ko' MMMM d–d",
"Format_Interval_Long_M": "y('e')'ko' MMMM d – MMMM d",
"Format_Interval_Long_Y": "y('e')'ko' MMMM d – y('e')'ko' MMMM d",
diff --git a/plugins/Intl/lang/fa.json b/plugins/Intl/lang/fa.json
index 9edb2ecb7f..8dc4e63106 100644
--- a/plugins/Intl/lang/fa.json
+++ b/plugins/Intl/lang/fa.json
@@ -305,6 +305,8 @@
"Format_Date_Day_Month": "E d LLL",
"Format_Date_Long": "EEEE d MMMM y",
"Format_Date_Short": "d MMM y",
+ "Format_Hour_12": "h a",
+ "Format_Hour_24": "H",
"Format_Interval_Long_D": "d تا d MMMM y",
"Format_Interval_Long_M": "d LLLL تا d MMMM y",
"Format_Interval_Long_Y": "d MMMM y تا d MMMM y",
diff --git a/plugins/Intl/lang/fi.json b/plugins/Intl/lang/fi.json
index c1ac3de33a..f926d41b0a 100644
--- a/plugins/Intl/lang/fi.json
+++ b/plugins/Intl/lang/fi.json
@@ -63,7 +63,7 @@
"Country_CW": "Curaçao",
"Country_CX": "Joulusaari",
"Country_CY": "Kypros",
- "Country_CZ": "Tšekki",
+ "Country_CZ": "Tšekinmaa",
"Country_DE": "Saksa",
"Country_DJ": "Djibouti",
"Country_DK": "Tanska",
@@ -305,6 +305,8 @@
"Format_Date_Day_Month": "ccc d. MMM",
"Format_Date_Long": "cccc d. MMMM y",
"Format_Date_Short": "d.M.y",
+ "Format_Hour_12": "h a",
+ "Format_Hour_24": "H",
"Format_Interval_Long_D": "d.–d. MMMM y",
"Format_Interval_Long_M": "d. MMMM – d. MMMM y",
"Format_Interval_Long_Y": "d. MMMM y – d. MMMM y",
diff --git a/plugins/Intl/lang/fr.json b/plugins/Intl/lang/fr.json
index 9a2fd48a53..fe69b0ac95 100644
--- a/plugins/Intl/lang/fr.json
+++ b/plugins/Intl/lang/fr.json
@@ -63,7 +63,7 @@
"Country_CW": "Curaçao",
"Country_CX": "Île Christmas",
"Country_CY": "Chypre",
- "Country_CZ": "République tchèque",
+ "Country_CZ": "Tchéquie",
"Country_DE": "Allemagne",
"Country_DJ": "Djibouti",
"Country_DK": "Danemark",
@@ -305,6 +305,8 @@
"Format_Date_Day_Month": "E d MMM",
"Format_Date_Long": "EEEE d MMMM y",
"Format_Date_Short": "d MMM y",
+ "Format_Hour_12": "h a",
+ "Format_Hour_24": "HH 'h'",
"Format_Interval_Long_D": "d–d MMMM y",
"Format_Interval_Long_M": "d MMMM – d MMMM y",
"Format_Interval_Long_Y": "d MMMM y – d MMMM y",
diff --git a/plugins/Intl/lang/gl.json b/plugins/Intl/lang/gl.json
index 4b500e2221..5a58b3c716 100644
--- a/plugins/Intl/lang/gl.json
+++ b/plugins/Intl/lang/gl.json
@@ -63,7 +63,7 @@
"Country_CW": "Curaçao",
"Country_CX": "Illa de Nadal",
"Country_CY": "Chipre",
- "Country_CZ": "República Checa",
+ "Country_CZ": "Chequia",
"Country_DE": "Alemaña",
"Country_DJ": "Djibuti",
"Country_DK": "Dinamarca",
@@ -305,6 +305,8 @@
"Format_Date_Day_Month": "ccc, d 'de' MMM",
"Format_Date_Long": "EEEE, d 'de' MMMM 'de' y",
"Format_Date_Short": "d 'de' MMM 'de' y",
+ "Format_Hour_12": "h a",
+ "Format_Hour_24": "HH",
"Format_Interval_Long_D": "d–d 'de' MMMM 'de' y",
"Format_Interval_Long_M": "d MMMM – d MMMM 'de' y",
"Format_Interval_Long_Y": "d MMMM y – d MMMM y",
diff --git a/plugins/Intl/lang/he.json b/plugins/Intl/lang/he.json
index c3367fb439..98c7ca0bc9 100644
--- a/plugins/Intl/lang/he.json
+++ b/plugins/Intl/lang/he.json
@@ -63,7 +63,7 @@
"Country_CW": "קוראסאו",
"Country_CX": "האי כריסטמס",
"Country_CY": "קפריסין",
- "Country_CZ": "הרפובליקה הצ׳כית",
+ "Country_CZ": "צ׳כיה",
"Country_DE": "גרמניה",
"Country_DJ": "ג׳יבוטי",
"Country_DK": "דנמרק",
@@ -305,6 +305,8 @@
"Format_Date_Day_Month": "E, d בMMM",
"Format_Date_Long": "EEEE, d בMMMM y",
"Format_Date_Short": "d בMMM y",
+ "Format_Hour_12": "‏h a",
+ "Format_Hour_24": "H",
"Format_Interval_Long_D": "d–d בMMMM y",
"Format_Interval_Long_M": "d MMMM – d MMMM y",
"Format_Interval_Long_Y": "d MMMM y – d MMMM y",
diff --git a/plugins/Intl/lang/hi.json b/plugins/Intl/lang/hi.json
index 8d84e5b37c..9926758981 100644
--- a/plugins/Intl/lang/hi.json
+++ b/plugins/Intl/lang/hi.json
@@ -63,7 +63,7 @@
"Country_CW": "क्यूरासाओ",
"Country_CX": "क्रिसमस द्वीप",
"Country_CY": "साइप्रस",
- "Country_CZ": "चेक गणराज्य",
+ "Country_CZ": "चेकिया",
"Country_DE": "जर्मनी",
"Country_DJ": "जिबूती",
"Country_DK": "डेनमार्क",
@@ -305,6 +305,8 @@
"Format_Date_Day_Month": "E, d MMM",
"Format_Date_Long": "EEEE, d MMMM y",
"Format_Date_Short": "dd\/MM\/y",
+ "Format_Hour_12": "h a",
+ "Format_Hour_24": "HH",
"Format_Interval_Long_D": "d–d MMMM y",
"Format_Interval_Long_M": "d MMMM – d MMMM y",
"Format_Interval_Long_Y": "d MMMM y – d MMMM y",
diff --git a/plugins/Intl/lang/hr.json b/plugins/Intl/lang/hr.json
index 49c566262c..0b65845da2 100644
--- a/plugins/Intl/lang/hr.json
+++ b/plugins/Intl/lang/hr.json
@@ -63,7 +63,7 @@
"Country_CW": "Curaçao",
"Country_CX": "Božićni otok",
"Country_CY": "Cipar",
- "Country_CZ": "Češka Republika",
+ "Country_CZ": "Češka",
"Country_DE": "Njemačka",
"Country_DJ": "Džibuti",
"Country_DK": "Danska",
@@ -305,6 +305,8 @@
"Format_Date_Day_Month": "E, d. MMM",
"Format_Date_Long": "EEEE, d. MMMM y.",
"Format_Date_Short": "d. MMM y.",
+ "Format_Hour_12": "h a",
+ "Format_Hour_24": "HH",
"Format_Interval_Long_D": "dd. – dd. MMMM y.",
"Format_Interval_Long_M": "dd. MMMM – dd. MMMM y.",
"Format_Interval_Long_Y": "dd. MMMM y. – dd. MMMM y.",
diff --git a/plugins/Intl/lang/hu.json b/plugins/Intl/lang/hu.json
index 11c04ef705..e8a3bd1261 100644
--- a/plugins/Intl/lang/hu.json
+++ b/plugins/Intl/lang/hu.json
@@ -305,6 +305,8 @@
"Format_Date_Day_Month": "MMM d., E",
"Format_Date_Long": "y. MMMM d., EEEE",
"Format_Date_Short": "y. MMM d.",
+ "Format_Hour_12": "a h",
+ "Format_Hour_24": "H",
"Format_Interval_Long_D": "y. MMMM d–d.",
"Format_Interval_Long_M": "y. MMMM d. – MMMM d.",
"Format_Interval_Long_Y": "y. MMMM d. – y. MMMM d.",
@@ -428,12 +430,12 @@
"Language_mt": "Máltai",
"Language_my": "Burmai",
"Language_na": "Naurui",
- "Language_nb": "Norvég (bokmál)",
+ "Language_nb": "Norvég (bokmål)",
"Language_nd": "Északi ndebele",
"Language_ne": "Nepáli",
"Language_ng": "Ndonga",
"Language_nl": "Holland",
- "Language_nn": "Norvég (nynrosk)",
+ "Language_nn": "Norvég (nynorsk)",
"Language_no": "Norvég",
"Language_nr": "Déli ndebele",
"Language_nv": "Navahó",
diff --git a/plugins/Intl/lang/id.json b/plugins/Intl/lang/id.json
index eefdadfcf4..5b7c0fc725 100644
--- a/plugins/Intl/lang/id.json
+++ b/plugins/Intl/lang/id.json
@@ -63,7 +63,7 @@
"Country_CW": "Curaçao",
"Country_CX": "Pulau Christmas",
"Country_CY": "Siprus",
- "Country_CZ": "Republik Cheska",
+ "Country_CZ": "Cheska",
"Country_DE": "Jerman",
"Country_DJ": "Jibuti",
"Country_DK": "Denmark",
@@ -305,6 +305,8 @@
"Format_Date_Day_Month": "E, d MMM",
"Format_Date_Long": "EEEE, dd MMMM y",
"Format_Date_Short": "d MMM y",
+ "Format_Hour_12": "h a",
+ "Format_Hour_24": "HH",
"Format_Interval_Long_D": "d–d MMMM y",
"Format_Interval_Long_M": "d MMMM – d MMMM y",
"Format_Interval_Long_Y": "d MMMM y – d MMMM y",
diff --git a/plugins/Intl/lang/is.json b/plugins/Intl/lang/is.json
index 278e92d010..6424ba8f55 100644
--- a/plugins/Intl/lang/is.json
+++ b/plugins/Intl/lang/is.json
@@ -305,6 +305,8 @@
"Format_Date_Day_Month": "E, d. MMM",
"Format_Date_Long": "EEEE, d. MMMM y",
"Format_Date_Short": "d. MMM y",
+ "Format_Hour_12": "h a",
+ "Format_Hour_24": "HH",
"Format_Interval_Long_D": "d.–d. MMMM y",
"Format_Interval_Long_M": "d. MMMM – d. MMMM y",
"Format_Interval_Long_Y": "d. MMMM y – d. MMMM y",
diff --git a/plugins/Intl/lang/it.json b/plugins/Intl/lang/it.json
index 73a419fc11..b5226d723e 100644
--- a/plugins/Intl/lang/it.json
+++ b/plugins/Intl/lang/it.json
@@ -63,7 +63,7 @@
"Country_CW": "Curaçao",
"Country_CX": "Isola Christmas",
"Country_CY": "Cipro",
- "Country_CZ": "Repubblica Ceca",
+ "Country_CZ": "Cèchia",
"Country_DE": "Germania",
"Country_DJ": "Gibuti",
"Country_DK": "Danimarca",
@@ -228,7 +228,7 @@
"Country_TH": "Thailandia",
"Country_TJ": "Tagikistan",
"Country_TK": "Tokelau",
- "Country_TL": "Timor Leste",
+ "Country_TL": "Timor Est",
"Country_TM": "Turkmenistan",
"Country_TN": "Tunisia",
"Country_TO": "Tonga",
@@ -305,6 +305,8 @@
"Format_Date_Day_Month": "E d MMM",
"Format_Date_Long": "EEEE d MMMM y",
"Format_Date_Short": "dd MMM y",
+ "Format_Hour_12": "h a",
+ "Format_Hour_24": "HH",
"Format_Interval_Long_D": "dd–dd MMMM y",
"Format_Interval_Long_M": "dd MMMM – dd MMMM y",
"Format_Interval_Long_Y": "dd MMMM y – dd MMMM y",
diff --git a/plugins/Intl/lang/ja.json b/plugins/Intl/lang/ja.json
index e6f685bfc1..99dd2fb62a 100644
--- a/plugins/Intl/lang/ja.json
+++ b/plugins/Intl/lang/ja.json
@@ -63,7 +63,7 @@
"Country_CW": "キュラソー",
"Country_CX": "クリスマス島",
"Country_CY": "キプロス",
- "Country_CZ": "チェコ共和国",
+ "Country_CZ": "チェコ",
"Country_DE": "ドイツ",
"Country_DJ": "ジブチ",
"Country_DK": "デンマーク",
@@ -305,6 +305,8 @@
"Format_Date_Day_Month": "M月d日(E)",
"Format_Date_Long": "y年M月d日EEEE",
"Format_Date_Short": "y\/MM\/dd",
+ "Format_Hour_12": "aK時",
+ "Format_Hour_24": "H時",
"Format_Interval_Long_D": "y年M月d日~d日",
"Format_Interval_Long_M": "y年M月d日~M月d日",
"Format_Interval_Long_Y": "y年M月d日~y年M月d日",
diff --git a/plugins/Intl/lang/ka.json b/plugins/Intl/lang/ka.json
index f7ba2b9a72..5f2632617d 100644
--- a/plugins/Intl/lang/ka.json
+++ b/plugins/Intl/lang/ka.json
@@ -63,7 +63,7 @@
"Country_CW": "კიურასაო",
"Country_CX": "შობის კუნძული",
"Country_CY": "კვიპროსი",
- "Country_CZ": "ჩეხეთის რესპუბლიკა",
+ "Country_CZ": "ჩეხეთი",
"Country_DE": "გერმანია",
"Country_DJ": "ჯიბუტი",
"Country_DK": "დანია",
@@ -305,6 +305,8 @@
"Format_Date_Day_Month": "E, d MMM",
"Format_Date_Long": "EEEE, dd MMMM, y",
"Format_Date_Short": "d MMM. y",
+ "Format_Hour_12": "h a",
+ "Format_Hour_24": "HH",
"Format_Interval_Long_D": "d–d MMMM, y",
"Format_Interval_Long_M": "dd MMMM. – dd MMMM. y",
"Format_Interval_Long_Y": "dd MMMM. y – d MMMM. y",
diff --git a/plugins/Intl/lang/ko.json b/plugins/Intl/lang/ko.json
index 0855521b95..dad90d0008 100644
--- a/plugins/Intl/lang/ko.json
+++ b/plugins/Intl/lang/ko.json
@@ -305,6 +305,8 @@
"Format_Date_Day_Month": "MMM d일 (E)",
"Format_Date_Long": "y년 M월 d일 EEEE",
"Format_Date_Short": "y. M. d.",
+ "Format_Hour_12": "a h시",
+ "Format_Hour_24": "H시",
"Format_Interval_Long_D": "y년 M월 d일~d일",
"Format_Interval_Long_M": "y년 M월 d일 ~ M월 d일",
"Format_Interval_Long_Y": "y년 M월 d일 ~ y년 M월 d일",
diff --git a/plugins/Intl/lang/lt.json b/plugins/Intl/lang/lt.json
index 0df15e67f0..03ff52afa8 100644
--- a/plugins/Intl/lang/lt.json
+++ b/plugins/Intl/lang/lt.json
@@ -305,6 +305,8 @@
"Format_Date_Day_Month": "MM-dd, E",
"Format_Date_Long": "y 'm'. MMMM d 'd'., EEEE",
"Format_Date_Short": "y-MM-dd",
+ "Format_Hour_12": "hh a",
+ "Format_Hour_24": "HH",
"Format_Interval_Long_D": "y MMMM d–d",
"Format_Interval_Long_M": "y MMMM d – MMMM d",
"Format_Interval_Long_Y": "y MMMM d – y MMMM d",
diff --git a/plugins/Intl/lang/lv.json b/plugins/Intl/lang/lv.json
index 4a33374724..884fc7638e 100644
--- a/plugins/Intl/lang/lv.json
+++ b/plugins/Intl/lang/lv.json
@@ -63,7 +63,7 @@
"Country_CW": "Kirasao",
"Country_CX": "Ziemsvētku sala",
"Country_CY": "Kipra",
- "Country_CZ": "Čehijas Republika",
+ "Country_CZ": "Čehija",
"Country_DE": "Vācija",
"Country_DJ": "Džibutija",
"Country_DK": "Dānija",
@@ -116,7 +116,7 @@
"Country_IO": "Indijas okeāna Britu teritorija",
"Country_IQ": "Irāka",
"Country_IR": "Irāna",
- "Country_IS": "Īslande",
+ "Country_IS": "Islande",
"Country_IT": "Itālija",
"Country_JE": "Džērsija",
"Country_JM": "Jamaika",
@@ -305,6 +305,8 @@
"Format_Date_Day_Month": "E, d. MMM",
"Format_Date_Long": "EEEE, y. 'gada' d. MMMM",
"Format_Date_Short": "y. 'gada' d. MMM",
+ "Format_Hour_12": "h a",
+ "Format_Hour_24": "HH",
"Format_Interval_Long_D": "y. 'gada' d.–d. MMMM",
"Format_Interval_Long_M": "y. 'gada' d. MMMM – d. MMMM",
"Format_Interval_Long_Y": "y. 'gada' d. MMMM – y. 'gada' d. MMMM",
@@ -388,7 +390,7 @@
"Language_ii": "Sičuaņas ji",
"Language_ik": "Inupiaku",
"Language_io": "Ido",
- "Language_is": "Īslandiešu",
+ "Language_is": "Islandiešu",
"Language_it": "Itāļu",
"Language_iu": "Inuītu",
"Language_ja": "Japāņu",
diff --git a/plugins/Intl/lang/nb.json b/plugins/Intl/lang/nb.json
index b7fa781a4d..38d5d9dd76 100644
--- a/plugins/Intl/lang/nb.json
+++ b/plugins/Intl/lang/nb.json
@@ -63,7 +63,7 @@
"Country_CW": "Curaçao",
"Country_CX": "Christmasøya",
"Country_CY": "Kypros",
- "Country_CZ": "Den tsjekkiske republikk",
+ "Country_CZ": "Tsjekkia",
"Country_DE": "Tyskland",
"Country_DJ": "Djibouti",
"Country_DK": "Danmark",
@@ -305,6 +305,8 @@
"Format_Date_Day_Month": "E d. MMM",
"Format_Date_Long": "EEEE d. MMMM y",
"Format_Date_Short": "d. MMM y",
+ "Format_Hour_12": "h a",
+ "Format_Hour_24": "HH",
"Format_Interval_Long_D": "d.–d. MMMM y",
"Format_Interval_Long_M": "d. MMMM–d. MMMM y",
"Format_Interval_Long_Y": "d. MMMM y–d. MMMM y",
diff --git a/plugins/Intl/lang/nl.json b/plugins/Intl/lang/nl.json
index 3d5fbab51d..b620e278a9 100644
--- a/plugins/Intl/lang/nl.json
+++ b/plugins/Intl/lang/nl.json
@@ -63,7 +63,7 @@
"Country_CW": "Curaçao",
"Country_CX": "Christmaseiland",
"Country_CY": "Cyprus",
- "Country_CZ": "Tsjechië",
+ "Country_CZ": "Tsjechische Republiek",
"Country_DE": "Duitsland",
"Country_DJ": "Djibouti",
"Country_DK": "Denemarken",
@@ -305,6 +305,8 @@
"Format_Date_Day_Month": "E d MMM",
"Format_Date_Long": "EEEE d MMMM y",
"Format_Date_Short": "d MMM y",
+ "Format_Hour_12": "h a",
+ "Format_Hour_24": "HH",
"Format_Interval_Long_D": "d–d MMMM y",
"Format_Interval_Long_M": "d MMMM – d MMMM y",
"Format_Interval_Long_Y": "d MMMM y – d MMMM y",
diff --git a/plugins/Intl/lang/nn.json b/plugins/Intl/lang/nn.json
index 95406e4a67..9c2fe0373a 100644
--- a/plugins/Intl/lang/nn.json
+++ b/plugins/Intl/lang/nn.json
@@ -304,6 +304,8 @@
"Format_Date_Day_Month": "E d. MMM",
"Format_Date_Long": "EEEE d. MMMM y",
"Format_Date_Short": "d. MMM y",
+ "Format_Hour_12": "h a",
+ "Format_Hour_24": "HH",
"Format_Interval_Long_D": "d.–d. MMMM y",
"Format_Interval_Long_M": "d. MMMM–d. MMMM y",
"Format_Interval_Long_Y": "d. MMMM y–d. MMMM y",
diff --git a/plugins/Intl/lang/pl.json b/plugins/Intl/lang/pl.json
index b3bc1f32fd..89f64fcbfa 100644
--- a/plugins/Intl/lang/pl.json
+++ b/plugins/Intl/lang/pl.json
@@ -305,6 +305,8 @@
"Format_Date_Day_Month": "E, d MMM",
"Format_Date_Long": "EEEE, d MMMM y",
"Format_Date_Short": "d MMM y",
+ "Format_Hour_12": "h a",
+ "Format_Hour_24": "HH",
"Format_Interval_Long_D": "d–d MMMM y",
"Format_Interval_Long_M": "d MMMM – d MMMM y",
"Format_Interval_Long_Y": "d MMMM y – d MMMM y",
diff --git a/plugins/Intl/lang/pt-br.json b/plugins/Intl/lang/pt-br.json
index b52e1555a4..934d5ef107 100644
--- a/plugins/Intl/lang/pt-br.json
+++ b/plugins/Intl/lang/pt-br.json
@@ -63,7 +63,7 @@
"Country_CW": "Curaçao",
"Country_CX": "Ilha Christmas",
"Country_CY": "Chipre",
- "Country_CZ": "República Tcheca",
+ "Country_CZ": "Tchéquia",
"Country_DE": "Alemanha",
"Country_DJ": "Djibuti",
"Country_DK": "Dinamarca",
@@ -305,6 +305,8 @@
"Format_Date_Day_Month": "E, d 'de' MMM",
"Format_Date_Long": "EEEE, d 'de' MMMM 'de' y",
"Format_Date_Short": "d 'de' MMM 'de' y",
+ "Format_Hour_12": "h a",
+ "Format_Hour_24": "HH",
"Format_Interval_Long_D": "d – d 'de' MMMM 'de' y",
"Format_Interval_Long_M": "d 'de' MMMM – d 'de' MMMM 'de' y",
"Format_Interval_Long_Y": "d 'de' MMMM 'de' y – d 'de' MMMM 'de' y",
diff --git a/plugins/Intl/lang/pt.json b/plugins/Intl/lang/pt.json
index d82075c57f..ab43bc3df0 100644
--- a/plugins/Intl/lang/pt.json
+++ b/plugins/Intl/lang/pt.json
@@ -305,6 +305,8 @@
"Format_Date_Day_Month": "E, d\/MM",
"Format_Date_Long": "EEEE, d 'de' MMMM 'de' y",
"Format_Date_Short": "dd\/MM\/y",
+ "Format_Hour_12": "h a",
+ "Format_Hour_24": "HH",
"Format_Interval_Long_D": "d–d 'de' MMMM 'de' y",
"Format_Interval_Long_M": "d 'de' MMMM – d 'de' MMMM 'de' y",
"Format_Interval_Long_Y": "d 'de' MMMM 'de' y – d 'de' MMMM 'de' y",
diff --git a/plugins/Intl/lang/ro.json b/plugins/Intl/lang/ro.json
index 663d42f3ab..733cf78e7b 100644
--- a/plugins/Intl/lang/ro.json
+++ b/plugins/Intl/lang/ro.json
@@ -63,7 +63,7 @@
"Country_CW": "Curaçao",
"Country_CX": "Insula Christmas",
"Country_CY": "Cipru",
- "Country_CZ": "Republica Cehă",
+ "Country_CZ": "Cehia",
"Country_DE": "Germania",
"Country_DJ": "Djibouti",
"Country_DK": "Danemarca",
@@ -305,6 +305,8 @@
"Format_Date_Day_Month": "E, d MMM",
"Format_Date_Long": "EEEE, d MMMM y",
"Format_Date_Short": "d MMM y",
+ "Format_Hour_12": "h a",
+ "Format_Hour_24": "HH",
"Format_Interval_Long_D": "d–d MMMM y",
"Format_Interval_Long_M": "d MMMM – d MMMM y",
"Format_Interval_Long_Y": "d MMMM y – d MMMM y",
diff --git a/plugins/Intl/lang/ru.json b/plugins/Intl/lang/ru.json
index e3d47e4dc4..8a3dc80345 100644
--- a/plugins/Intl/lang/ru.json
+++ b/plugins/Intl/lang/ru.json
@@ -305,6 +305,8 @@
"Format_Date_Day_Month": "ccc, d MMM",
"Format_Date_Long": "EEEE, d MMMM y 'г'.",
"Format_Date_Short": "d MMM y 'г'.",
+ "Format_Hour_12": "h a",
+ "Format_Hour_24": "H",
"Format_Interval_Long_D": "d–d MMMM y 'г'.",
"Format_Interval_Long_M": "d MMMM – d MMMM y 'г'.",
"Format_Interval_Long_Y": "d MMMM y 'г'. – d MMMM y 'г'.",
diff --git a/plugins/Intl/lang/sk.json b/plugins/Intl/lang/sk.json
index 3efd518b7e..f9397c9ae2 100644
--- a/plugins/Intl/lang/sk.json
+++ b/plugins/Intl/lang/sk.json
@@ -63,7 +63,7 @@
"Country_CW": "Curaçao",
"Country_CX": "Vianočný ostrov",
"Country_CY": "Cyprus",
- "Country_CZ": "Česká republika",
+ "Country_CZ": "Česko",
"Country_DE": "Nemecko",
"Country_DJ": "Džibutsko",
"Country_DK": "Dánsko",
@@ -305,6 +305,8 @@
"Format_Date_Day_Month": "E d. M.",
"Format_Date_Long": "EEEE, d. MMMM y",
"Format_Date_Short": "d. M. y",
+ "Format_Hour_12": "h a",
+ "Format_Hour_24": "H",
"Format_Interval_Long_D": "d. – d. M. y",
"Format_Interval_Long_M": "d. M. – d. M. y",
"Format_Interval_Long_Y": "d. M. y – d. M. y",
diff --git a/plugins/Intl/lang/sl.json b/plugins/Intl/lang/sl.json
index 805a679a08..bd55af10ad 100644
--- a/plugins/Intl/lang/sl.json
+++ b/plugins/Intl/lang/sl.json
@@ -305,6 +305,8 @@
"Format_Date_Day_Month": "E, d. MMM",
"Format_Date_Long": "EEEE, dd. MMMM y",
"Format_Date_Short": "d. MMM y",
+ "Format_Hour_12": "h a",
+ "Format_Hour_24": "HH'h'",
"Format_Interval_Long_D": "d.–d. MMMM y",
"Format_Interval_Long_M": "d. MMMM–d. MMMM y",
"Format_Interval_Long_Y": "d. MMMM y–d. MMMM y",
@@ -561,7 +563,7 @@
"NumberFormatPercent": "#,##0 %",
"NumberSymbolDecimal": ",",
"NumberSymbolGroup": ".",
- "NumberSymbolMinus": "–",
+ "NumberSymbolMinus": "−",
"NumberSymbolPercent": "%",
"NumberSymbolPlus": "+",
"OneDay": "1 dan",
diff --git a/plugins/Intl/lang/sq.json b/plugins/Intl/lang/sq.json
index 6a5954b2df..0ac3b260f0 100644
--- a/plugins/Intl/lang/sq.json
+++ b/plugins/Intl/lang/sq.json
@@ -63,7 +63,7 @@
"Country_CW": "Kuraçao",
"Country_CX": "Ishulli i Krishtlindjes",
"Country_CY": "Qipro",
- "Country_CZ": "Republika Çeke",
+ "Country_CZ": "Çeki",
"Country_DE": "Gjermani",
"Country_DJ": "Xhibuti",
"Country_DK": "Danimarkë",
@@ -305,6 +305,8 @@
"Format_Date_Day_Month": "E, d MMM",
"Format_Date_Long": "EEEE, d MMMM y",
"Format_Date_Short": "d MMM y",
+ "Format_Hour_12": "h a",
+ "Format_Hour_24": "HH",
"Format_Interval_Long_D": "d – d MMMM y",
"Format_Interval_Long_M": "d MMMM – d MMMM y",
"Format_Interval_Long_Y": "d MMMM y – d MMMM y",
diff --git a/plugins/Intl/lang/sr.json b/plugins/Intl/lang/sr.json
index aaf5b36f1f..e13fb8bad2 100644
--- a/plugins/Intl/lang/sr.json
+++ b/plugins/Intl/lang/sr.json
@@ -305,6 +305,8 @@
"Format_Date_Day_Month": "E d. MMM",
"Format_Date_Long": "EEEE, dd. MMMM y.",
"Format_Date_Short": "dd.MM.y.",
+ "Format_Hour_12": "h a",
+ "Format_Hour_24": "HH",
"Format_Interval_Long_D": "dd.–dd. MMMM y.",
"Format_Interval_Long_M": "dd. MMMM – dd. MMMM y.",
"Format_Interval_Long_Y": "dd. MMMM y. – dd. MMMM y.",
diff --git a/plugins/Intl/lang/sv.json b/plugins/Intl/lang/sv.json
index 5313dded02..a53a7c252e 100644
--- a/plugins/Intl/lang/sv.json
+++ b/plugins/Intl/lang/sv.json
@@ -305,6 +305,8 @@
"Format_Date_Day_Month": "E d MMM",
"Format_Date_Long": "EEEE d MMMM y",
"Format_Date_Short": "d MMM y",
+ "Format_Hour_12": "h a",
+ "Format_Hour_24": "HH",
"Format_Interval_Long_D": "d–d MMMM y",
"Format_Interval_Long_M": "d MMMM–d MMMM y",
"Format_Interval_Long_Y": "d MMMM y–d MMMM y",
diff --git a/plugins/Intl/lang/ta.json b/plugins/Intl/lang/ta.json
index 35dbccb1e9..72367ea9eb 100644
--- a/plugins/Intl/lang/ta.json
+++ b/plugins/Intl/lang/ta.json
@@ -63,7 +63,7 @@
"Country_CW": "குராகவ்",
"Country_CX": "கிறிஸ்துமஸ் தீவு",
"Country_CY": "சைப்ரஸ்",
- "Country_CZ": "செக் குடியரசு",
+ "Country_CZ": "செசியா",
"Country_DE": "ஜெர்மனி",
"Country_DJ": "ஜிபௌட்டி",
"Country_DK": "டென்மார்க்",
@@ -305,6 +305,8 @@
"Format_Date_Day_Month": "MMM d, E",
"Format_Date_Long": "EEEE, d MMMM, y",
"Format_Date_Short": "d MMM, y",
+ "Format_Hour_12": "a h",
+ "Format_Hour_24": "HH",
"Format_Interval_Long_D": "d – d MMMM, y",
"Format_Interval_Long_M": "d MMMM – d MMMM, y",
"Format_Interval_Long_Y": "d MMMM, y – d MMMM, y",
diff --git a/plugins/Intl/lang/te.json b/plugins/Intl/lang/te.json
index 2442a474f5..d9fbe08276 100644
--- a/plugins/Intl/lang/te.json
+++ b/plugins/Intl/lang/te.json
@@ -63,7 +63,7 @@
"Country_CW": "కురాకవో",
"Country_CX": "క్రిస్మస్ దీవి",
"Country_CY": "సైప్రస్",
- "Country_CZ": "చెక్ రిపబ్లిక్",
+ "Country_CZ": "చెక్‌చియ",
"Country_DE": "జర్మనీ",
"Country_DJ": "జిబౌటి",
"Country_DK": "డెన్మార్క్",
@@ -305,6 +305,8 @@
"Format_Date_Day_Month": "E, d MMM",
"Format_Date_Long": "d, MMMM y, EEEE",
"Format_Date_Short": "d MMM, y",
+ "Format_Hour_12": "h a",
+ "Format_Hour_24": "HH",
"Format_Interval_Long_D": "d–d MMMM, y",
"Format_Interval_Long_M": "d MMMM – d MMMM, y",
"Format_Interval_Long_Y": "d MMMM, y – d MMMM, y",
diff --git a/plugins/Intl/lang/th.json b/plugins/Intl/lang/th.json
index f31a27b455..f1a73cf34e 100644
--- a/plugins/Intl/lang/th.json
+++ b/plugins/Intl/lang/th.json
@@ -63,7 +63,7 @@
"Country_CW": "คูราเซา",
"Country_CX": "เกาะคริสต์มาส",
"Country_CY": "ไซปรัส",
- "Country_CZ": "สาธารณรัฐเช็ก",
+ "Country_CZ": "เช็ก",
"Country_DE": "เยอรมนี",
"Country_DJ": "จิบูตี",
"Country_DK": "เดนมาร์ก",
@@ -305,6 +305,8 @@
"Format_Date_Day_Month": "E d MMM",
"Format_Date_Long": "EEEEที่ d MMMM G y",
"Format_Date_Short": "d MMM y",
+ "Format_Hour_12": "h a",
+ "Format_Hour_24": "HH",
"Format_Interval_Long_D": "d–d MMMM G y",
"Format_Interval_Long_M": "d MMMM – d MMMM G y",
"Format_Interval_Long_Y": "d MMMM G y – d MMMM y",
diff --git a/plugins/Intl/lang/tl.json b/plugins/Intl/lang/tl.json
index 50f776d514..24fcf6ee75 100644
--- a/plugins/Intl/lang/tl.json
+++ b/plugins/Intl/lang/tl.json
@@ -63,7 +63,7 @@
"Country_CW": "Curaçao",
"Country_CX": "Christmas Island",
"Country_CY": "Cyprus",
- "Country_CZ": "Czech Republic",
+ "Country_CZ": "Czechia",
"Country_DE": "Germany",
"Country_DJ": "Djibouti",
"Country_DK": "Denmark",
@@ -305,6 +305,8 @@
"Format_Date_Day_Month": "E, MMM d",
"Format_Date_Long": "EEEE, MMMM d, y",
"Format_Date_Short": "MMM d, y",
+ "Format_Hour_12": "h a",
+ "Format_Hour_24": "HH",
"Format_Interval_Long_D": "MMMM d–d, y",
"Format_Interval_Long_M": "MMMM d – MMMM d, y",
"Format_Interval_Long_Y": "MMMM d, y – MMMM d, y",
diff --git a/plugins/Intl/lang/tr.json b/plugins/Intl/lang/tr.json
index f94ba5e001..1aa9c650fe 100644
--- a/plugins/Intl/lang/tr.json
+++ b/plugins/Intl/lang/tr.json
@@ -63,7 +63,7 @@
"Country_CW": "Curaçao",
"Country_CX": "Christmas Adası",
"Country_CY": "Kıbrıs",
- "Country_CZ": "Çek Cumhuriyeti",
+ "Country_CZ": "Çekya",
"Country_DE": "Almanya",
"Country_DJ": "Cibuti",
"Country_DK": "Danimarka",
@@ -305,6 +305,8 @@
"Format_Date_Day_Month": "d MMMM E",
"Format_Date_Long": "d MMMM y EEEE",
"Format_Date_Short": "d MMM y",
+ "Format_Hour_12": "a h",
+ "Format_Hour_24": "HH",
"Format_Interval_Long_D": "d–d MMMM y",
"Format_Interval_Long_M": "d MMMM – d MMMM y",
"Format_Interval_Long_Y": "d MMMM y – d MMMM y",
diff --git a/plugins/Intl/lang/uk.json b/plugins/Intl/lang/uk.json
index e6f3e902e5..be5710fe76 100644
--- a/plugins/Intl/lang/uk.json
+++ b/plugins/Intl/lang/uk.json
@@ -63,7 +63,7 @@
"Country_CW": "Кюрасао",
"Country_CX": "Острів Різдва",
"Country_CY": "Кіпр",
- "Country_CZ": "Чеська Республіка",
+ "Country_CZ": "Чехія",
"Country_DE": "Німеччина",
"Country_DJ": "Джибуті",
"Country_DK": "Данія",
@@ -305,6 +305,8 @@
"Format_Date_Day_Month": "E, d MMM",
"Format_Date_Long": "EEEE, d MMMM y 'р'.",
"Format_Date_Short": "d MMM y 'р'.",
+ "Format_Hour_12": "h a",
+ "Format_Hour_24": "HH",
"Format_Interval_Long_D": "d–d MMMM y",
"Format_Interval_Long_M": "d MMMM – d MMMM y",
"Format_Interval_Long_Y": "d MMMM y – d MMMM y",
diff --git a/plugins/Intl/lang/vi.json b/plugins/Intl/lang/vi.json
index d90239f519..bd64a85921 100644
--- a/plugins/Intl/lang/vi.json
+++ b/plugins/Intl/lang/vi.json
@@ -63,7 +63,7 @@
"Country_CW": "Curaçao",
"Country_CX": "Đảo Giáng Sinh",
"Country_CY": "Síp",
- "Country_CZ": "Cộng hòa Séc",
+ "Country_CZ": "Czechia",
"Country_DE": "Đức",
"Country_DJ": "Djibouti",
"Country_DK": "Đan Mạch",
@@ -305,6 +305,8 @@
"Format_Date_Day_Month": "E, d MMM",
"Format_Date_Long": "EEEE, d MMMM, y",
"Format_Date_Short": "d MMM, y",
+ "Format_Hour_12": "h a",
+ "Format_Hour_24": "HH",
"Format_Interval_Long_D": "d – d MMMM, y",
"Format_Interval_Long_M": "d MMMM – d MMMM, y",
"Format_Interval_Long_Y": "'Ngày' dd 'tháng' M 'năm' y - 'Ngày' dd 'tháng' M 'năm' y",
diff --git a/plugins/Intl/lang/zh-cn.json b/plugins/Intl/lang/zh-cn.json
index 954b5b4d13..ee37bb0e57 100644
--- a/plugins/Intl/lang/zh-cn.json
+++ b/plugins/Intl/lang/zh-cn.json
@@ -63,7 +63,7 @@
"Country_CW": "库拉索",
"Country_CX": "圣诞岛",
"Country_CY": "塞浦路斯",
- "Country_CZ": "捷克共和国",
+ "Country_CZ": "捷克",
"Country_DE": "德国",
"Country_DJ": "吉布提",
"Country_DK": "丹麦",
@@ -305,6 +305,8 @@
"Format_Date_Day_Month": "M月d日E",
"Format_Date_Long": "y年M月d日EEEE",
"Format_Date_Short": "y年M月d日",
+ "Format_Hour_12": "ah时",
+ "Format_Hour_24": "H时",
"Format_Interval_Long_D": "y年M月d日至d日",
"Format_Interval_Long_M": "y年M月d日至M月d日",
"Format_Interval_Long_Y": "y年M月d日至y年M月d日",
diff --git a/plugins/Intl/lang/zh-tw.json b/plugins/Intl/lang/zh-tw.json
index c4a345a33a..fcbc0cf3ff 100644
--- a/plugins/Intl/lang/zh-tw.json
+++ b/plugins/Intl/lang/zh-tw.json
@@ -63,7 +63,7 @@
"Country_CW": "庫拉索",
"Country_CX": "聖誕島",
"Country_CY": "賽普勒斯",
- "Country_CZ": "捷克共和國",
+ "Country_CZ": "捷克",
"Country_DE": "德國",
"Country_DJ": "吉布地",
"Country_DK": "丹麥",
@@ -305,6 +305,8 @@
"Format_Date_Day_Month": "M月d日 E",
"Format_Date_Long": "y年M月d日 EEEE",
"Format_Date_Short": "y年M月d日",
+ "Format_Hour_12": "ah時",
+ "Format_Hour_24": "H時",
"Format_Interval_Long_D": "y年M月d日至d日",
"Format_Interval_Long_M": "y年M月d日至M月d日",
"Format_Interval_Long_Y": "y年M月d日至y年M月d日",
diff --git a/plugins/LanguagesManager/lang/id.json b/plugins/LanguagesManager/lang/id.json
index bf93465f66..9487e6a137 100644
--- a/plugins/LanguagesManager/lang/id.json
+++ b/plugins/LanguagesManager/lang/id.json
@@ -1,5 +1,6 @@
{
"LanguagesManager": {
- "AboutPiwikTranslations": "Tentang penerjemahan Piwik"
+ "AboutPiwikTranslations": "Tentang penerjemahan Piwik",
+ "TranslationSearch": "Pencarian Translasi"
}
} \ No newline at end of file
diff --git a/plugins/LanguagesManager/lang/pl.json b/plugins/LanguagesManager/lang/pl.json
index 464d8da898..cc5b83d434 100644
--- a/plugins/LanguagesManager/lang/pl.json
+++ b/plugins/LanguagesManager/lang/pl.json
@@ -1,5 +1,6 @@
{
"LanguagesManager": {
- "AboutPiwikTranslations": "O tłumaczeniach Piwik"
+ "AboutPiwikTranslations": "O tłumaczeniach Piwik",
+ "TranslationSearch": "Przeszukaj tłumaczenia"
}
} \ No newline at end of file
diff --git a/plugins/LanguagesManager/lang/tr.json b/plugins/LanguagesManager/lang/tr.json
index b14e183dda..0727b7daf9 100644
--- a/plugins/LanguagesManager/lang/tr.json
+++ b/plugins/LanguagesManager/lang/tr.json
@@ -1,5 +1,6 @@
{
"LanguagesManager": {
- "AboutPiwikTranslations": "Piwik çevirileri hakkında"
+ "AboutPiwikTranslations": "Piwik çevirileri hakkında",
+ "TranslationSearch": "Çeviri Arama"
}
} \ No newline at end of file
diff --git a/plugins/Live/API.php b/plugins/Live/API.php
index 8d1649746f..ba655ec1be 100644
--- a/plugins/Live/API.php
+++ b/plugins/Live/API.php
@@ -227,6 +227,8 @@ class API extends \Piwik\Plugin\API
* Triggered in the Live.getVisitorProfile API method. Plugins can use this event
* to discover and add extra data to visitor profiles.
*
+ * This event is deprecated, use [VisitorDetails](/api-reference/Piwik/Plugins/Live/VisitorDetailsAbstract#extendVisitorDetails) classes instead.
+ *
* For example, if an email address is found in a custom variable, a plugin could load the
* gravatar for the email and add it to the visitor profile, causing it to display in the
* visitor profile popup.
@@ -237,6 +239,7 @@ class API extends \Piwik\Plugin\API
* - **visitorDescription**: Text to be used as the tooltip of the avatar image.
*
* @param array &$visitorProfile The unaugmented visitor profile info.
+ * @deprecated
*/
Piwik::postEvent('Live.getExtraVisitorDetails', array(&$result));
@@ -313,40 +316,33 @@ class API extends \Piwik\Plugin\API
$dataTable->$filter(function ($table) use ($idSite, $flat, $doNotFetchActions) {
/** @var DataTable $table */
- $actionsLimit = (int)Config::getInstance()->General['visitor_log_maximum_actions_per_visit'];
-
$visitorFactory = new VisitorFactory();
- $website = new Site($idSite);
- $timezone = $website->getTimezone();
- $currency = $website->getCurrency();
- $currencies = APISitesManager::getInstance()->getCurrencySymbols();
// live api is not summable, prevents errors like "Unexpected ECommerce status value"
$table->deleteRow(DataTable::ID_SUMMARY_ROW);
- foreach ($table->getRows() as $visitorDetailRow) {
- $visitorDetailsArray = Visitor::cleanVisitorDetails($visitorDetailRow->getColumns());
+ $actionsByVisitId = array();
- $visitor = $visitorFactory->create($visitorDetailsArray);
- $visitorDetailsArray = $visitor->getAllVisitorDetails();
+ if (!$doNotFetchActions) {
+ $visitIds = $table->getColumn('idvisit');
- $visitorDetailsArray['siteCurrency'] = $currency;
- $visitorDetailsArray['siteCurrencySymbol'] = @$currencies[$visitorDetailsArray['siteCurrency']];
- $visitorDetailsArray['serverTimestamp'] = $visitorDetailsArray['lastActionTimestamp'];
+ $visitorDetailsManipulators = Visitor::getAllVisitorDetailsInstances();
- $dateTimeVisit = Date::factory($visitorDetailsArray['lastActionTimestamp'], $timezone);
- if ($dateTimeVisit) {
- $visitorDetailsArray['serverTimePretty'] = $dateTimeVisit->getLocalized(Date::TIME_FORMAT);
- $visitorDetailsArray['serverDatePretty'] = $dateTimeVisit->getLocalized(Date::DATE_FORMAT_LONG);
+ foreach ($visitorDetailsManipulators as $instance) {
+ $instance->provideActionsForVisitIds($actionsByVisitId, $visitIds);
}
+ }
+
+ foreach ($table->getRows() as $visitorDetailRow) {
+ $visitorDetailsArray = Visitor::cleanVisitorDetails($visitorDetailRow->getColumns());
- $dateTimeVisitFirstAction = Date::factory($visitorDetailsArray['firstActionTimestamp'], $timezone);
- $visitorDetailsArray['serverDatePrettyFirstAction'] = $dateTimeVisitFirstAction->getLocalized(Date::DATE_FORMAT_LONG);
- $visitorDetailsArray['serverTimePrettyFirstAction'] = $dateTimeVisitFirstAction->getLocalized(Date::TIME_FORMAT);
+ $visitor = $visitorFactory->create($visitorDetailsArray);
+ $visitorDetailsArray = $visitor->getAllVisitorDetails();
$visitorDetailsArray['actionDetails'] = array();
if (!$doNotFetchActions) {
- $visitorDetailsArray = Visitor::enrichVisitorArrayWithActions($visitorDetailsArray, $actionsLimit, $idSite, $timezone);
+ $bulkFetchedActions = isset($actionsByVisitId[$visitorDetailsArray['idVisit']]) ? $actionsByVisitId[$visitorDetailsArray['idVisit']] : array();
+ $visitorDetailsArray = Visitor::enrichVisitorArrayWithActions($visitorDetailsArray, $bulkFetchedActions);
}
if ($flat) {
diff --git a/plugins/Live/Controller.php b/plugins/Live/Controller.php
index 3a87d75559..7256eccdc2 100644
--- a/plugins/Live/Controller.php
+++ b/plugins/Live/Controller.php
@@ -9,10 +9,14 @@
namespace Piwik\Plugins\Live;
use Piwik\API\Request;
+use Piwik\Cache;
+use Piwik\CacheId;
use Piwik\Common;
use Piwik\Config;
use Piwik\Piwik;
+use Piwik\Plugin;
use Piwik\Plugins\Goals\API as APIGoals;
+use Piwik\Plugins\Live\ProfileSummary\ProfileSummaryAbstract;
use Piwik\Url;
use Piwik\View;
@@ -111,41 +115,44 @@ class Controller extends \Piwik\Plugin\Controller
$view->visitorData = Request::processRequest('Live.getVisitorProfile');
$view->exportLink = $this->getVisitorProfileExportLink();
- if (Common::getRequestVar('showMap', 1) == 1
- && !empty($view->visitorData['hasLatLong'])
- && \Piwik\Plugin\Manager::getInstance()->isPluginLoaded('UserCountryMap')
- ) {
- $view->userCountryMapUrl = $this->getUserCountryMapUrlForVisitorProfile();
+ $this->setWidgetizedVisitorProfileUrl($view);
+
+ $summaryEntries = array();
+
+ $profileSummaries = self::getAllProfileSummaryInstances();
+ foreach ($profileSummaries as $profileSummary) {
+ $profileSummary->setProfile($view->visitorData);
+ $summaryEntries[] = [$profileSummary->getOrder(), $profileSummary->render()];
}
- $this->setWidgetizedVisitorProfileUrl($view);
+ usort($summaryEntries, function($a, $b) {
+ return version_compare($a[0], $b[0]);
+ });
- return $view->render();
- }
+ $summary = '';
+
+ foreach ($summaryEntries AS $summaryEntry) {
+ $summary .= $summaryEntry[1];
+ }
+
+ $view->profileSummary = $summary;
- public function getSingleVisitSummary()
- {
- $view = new View('@Live/getSingleVisitSummary.twig');
- $visits = Request::processRequest('Live.getLastVisitsDetails', array(
- 'segment' => 'visitId==' . Common::getRequestVar('visitId'),
- 'period' => false,
- 'date' => false
- ));
- $view->visitData = $visits->getFirstRow()->getColumns();
- $view->visitReferralSummary = VisitorProfile::getReferrerSummaryForVisit($visits->getFirstRow());
- $view->showLocation = \Piwik\Plugin\Manager::getInstance()->isPluginLoaded('UserCountry');
- $this->setWidgetizedVisitorProfileUrl($view);
- $view->exportLink = $this->getVisitorProfileExportLink();
return $view->render();
}
public function getVisitList()
{
- $startCounter = Common::getRequestVar('filter_offset', 0, 'int');
+ $filterLimit = Common::getRequestVar('filter_offset', 0, 'int');
+ $startCounter = Common::getRequestVar('start_number', 0, 'int');
+
+ if ($startCounter >= API::VISITOR_PROFILE_MAX_VISITS_TO_AGGREGATE) {
+ return; // do not return more visits than configured for profile
+ }
+
$nextVisits = Request::processRequest('Live.getLastVisitsDetails', array(
'segment' => self::getSegmentWithVisitorId(),
'filter_limit' => VisitorProfile::VISITOR_PROFILE_MAX_VISITS_TO_SHOW,
- 'filter_offset' => $startCounter,
+ 'filter_offset' => $filterLimit,
'period' => false,
'date' => false
));
@@ -158,7 +165,7 @@ class Controller extends \Piwik\Plugin\Controller
$view = new View('@Live/getVisitList.twig');
$view->idSite = $idSite;
- $view->startCounter = $startCounter + 1;
+ $view->startCounter = $startCounter < count($nextVisits) ? count($nextVisits) : $startCounter;
$view->visits = $nextVisits;
return $view->render();
}
@@ -186,24 +193,7 @@ class Controller extends \Piwik\Plugin\Controller
}
}
- private function getUserCountryMapUrlForVisitorProfile()
- {
- $params = array(
- 'module' => 'UserCountryMap',
- 'action' => 'realtimeMap',
- 'segment' => self::getSegmentWithVisitorId(),
- 'visitorId' => false,
- 'changeVisitAlpha' => 0,
- 'removeOldVisits' => 0,
- 'realtimeWindow' => 'false',
- 'showFooterMessage' => 0,
- 'showDateTime' => 0,
- 'doNotRefreshVisits' => 1
- );
- return Url::getCurrentQueryStringWithParametersModified($params);
- }
-
- private static function getSegmentWithVisitorId()
+ public static function getSegmentWithVisitorId()
{
static $cached = null;
if ($cached === null) {
@@ -221,4 +211,41 @@ class Controller extends \Piwik\Plugin\Controller
}
return $cached;
}
+
+
+ /**
+ * Returns all available profile summaries
+ *
+ * @return ProfileSummaryAbstract[]
+ * @throws \Exception
+ */
+ public static function getAllProfileSummaryInstances()
+ {
+ $cacheId = CacheId::pluginAware('ProfileSummaries');
+ $cache = Cache::getTransientCache();
+
+ if (!$cache->contains($cacheId)) {
+ $instances = [];
+
+ foreach (self::getAllProfileSummaryClasses() as $className) {
+ $instance = new $className();
+ $instances[] = $instance;
+ }
+
+ $cache->save($cacheId, $instances);
+ }
+
+ return $cache->fetch($cacheId);
+ }
+
+ /**
+ * Returns class names of all VisitorDetails classes.
+ *
+ * @return string[]
+ * @api
+ */
+ protected static function getAllProfileSummaryClasses()
+ {
+ return Plugin\Manager::getInstance()->findMultipleComponents('ProfileSummary', 'Piwik\Plugins\Live\ProfileSummary\ProfileSummaryAbstract');
+ }
}
diff --git a/plugins/Live/Live.php b/plugins/Live/Live.php
index 367d19c3a7..4381adecf2 100644
--- a/plugins/Live/Live.php
+++ b/plugins/Live/Live.php
@@ -2,14 +2,12 @@
/**
* Piwik - free/libre analytics platform
*
- * @link http://piwik.org
+ * @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*
*/
namespace Piwik\Plugins\Live;
-use Piwik\Plugins\CoreVisualizations\Visualizations\HtmlTable;
-
/**
*
*/
@@ -17,14 +15,18 @@ class Live extends \Piwik\Plugin
{
/**
- * @see Piwik\Plugin::registerEvents
+ * @see \Piwik\Plugin::registerEvents
*/
public function registerEvents()
{
return array(
'AssetManager.getJavaScriptFiles' => 'getJsFiles',
'AssetManager.getStylesheetFiles' => 'getStylesheetFiles',
- 'Translate.getClientSideTranslationKeys' => 'getClientSideTranslationKeys'
+ 'Translate.getClientSideTranslationKeys' => 'getClientSideTranslationKeys',
+ 'Live.renderAction' => 'renderAction',
+ 'Live.renderActionTooltip' => 'renderActionTooltip',
+ 'Live.renderVisitorDetails' => 'renderVisitorDetails',
+ 'Live.renderVisitorIcons' => 'renderVisitorIcons',
);
}
@@ -58,4 +60,56 @@ class Live extends \Piwik\Plugin
$translationKeys[] = "General_Segment";
$translationKeys[] = "General_And";
}
+
+ public function renderAction(&$renderedAction, $action, $previousAction, $visitorDetails)
+ {
+ $visitorDetailsInstances = Visitor::getAllVisitorDetailsInstances();
+ foreach ($visitorDetailsInstances as $instance) {
+ $renderedAction .= $instance->renderAction($action, $previousAction, $visitorDetails);
+ }
+ }
+
+ public function renderActionTooltip(&$tooltip, $action, $visitInfo)
+ {
+ $detailEntries = [];
+ $visitorDetailsInstances = Visitor::getAllVisitorDetailsInstances();
+
+ foreach ($visitorDetailsInstances as $instance) {
+ $detailEntries = array_merge($detailEntries, $instance->renderActionTooltip($action, $visitInfo));
+ }
+
+ usort($detailEntries, function($a, $b) {
+ return version_compare($a[0], $b[0]);
+ });
+
+ foreach ($detailEntries AS $detailEntry) {
+ $tooltip .= $detailEntry[1];
+ }
+ }
+
+ public function renderVisitorDetails(&$renderedDetails, $visitorDetails)
+ {
+ $detailEntries = [];
+ $visitorDetailsInstances = Visitor::getAllVisitorDetailsInstances();
+
+ foreach ($visitorDetailsInstances as $instance) {
+ $detailEntries = array_merge($detailEntries, $instance->renderVisitorDetails($visitorDetails));
+ }
+
+ usort($detailEntries, function($a, $b) {
+ return version_compare($a[0], $b[0]);
+ });
+
+ foreach ($detailEntries AS $detailEntry) {
+ $renderedDetails .= $detailEntry[1];
+ }
+ }
+
+ public function renderVisitorIcons(&$renderedDetails, $visitorDetails)
+ {
+ $visitorDetailsInstances = Visitor::getAllVisitorDetailsInstances();
+ foreach ($visitorDetailsInstances as $instance) {
+ $renderedDetails .= $instance->renderIcons($visitorDetails);
+ }
+ }
} \ No newline at end of file
diff --git a/plugins/Live/Model.php b/plugins/Live/Model.php
index e19054b4d7..a475536da5 100644
--- a/plugins/Live/Model.php
+++ b/plugins/Live/Model.php
@@ -24,177 +24,6 @@ use Piwik\Tracker\GoalManager;
class Model
{
-
- /**
- * @param $idVisit
- * @param $actionsLimit
- * @return array
- * @throws \Exception
- */
- public function queryActionsForVisit($idVisit, $actionsLimit)
- {
- $maxCustomVariables = CustomVariables::getNumUsableCustomVariables();
-
- $sqlCustomVariables = '';
- for ($i = 1; $i <= $maxCustomVariables; $i++) {
- $sqlCustomVariables .= ', custom_var_k' . $i . ', custom_var_v' . $i;
- }
- // The second join is a LEFT join to allow returning records that don't have a matching page title
- // eg. Downloads, Outlinks. For these, idaction_name is set to 0
- $sql = "
- SELECT
- COALESCE(log_action_event_category.type, log_action.type, log_action_title.type) AS type,
- log_action.name AS url,
- log_action.url_prefix,
- log_action_title.name AS pageTitle,
- log_action.idaction AS pageIdAction,
- log_link_visit_action.idlink_va,
- log_link_visit_action.server_time as serverTimePretty,
- log_link_visit_action.time_spent_ref_action as timeSpentRef,
- log_link_visit_action.idlink_va AS pageId,
- log_link_visit_action.custom_float,
- log_link_visit_action.interaction_position
- " . $sqlCustomVariables . ",
- log_action_event_category.name AS eventCategory,
- log_action_event_action.name as eventAction
- FROM " . Common::prefixTable('log_link_visit_action') . " AS log_link_visit_action
- LEFT JOIN " . Common::prefixTable('log_action') . " AS log_action
- ON log_link_visit_action.idaction_url = log_action.idaction
- LEFT JOIN " . Common::prefixTable('log_action') . " AS log_action_title
- ON log_link_visit_action.idaction_name = log_action_title.idaction
- LEFT JOIN " . Common::prefixTable('log_action') . " AS log_action_event_category
- ON log_link_visit_action.idaction_event_category = log_action_event_category.idaction
- LEFT JOIN " . Common::prefixTable('log_action') . " AS log_action_event_action
- ON log_link_visit_action.idaction_event_action = log_action_event_action.idaction
- WHERE log_link_visit_action.idvisit = ?
- ORDER BY server_time ASC
- LIMIT 0, $actionsLimit
- ";
- $actionDetails = Db::fetchAll($sql, array($idVisit));
- return $actionDetails;
- }
-
- /**
- * @param $idVisit
- * @param $limit
- * @return array
- * @throws \Exception
- */
- public function queryGoalConversionsForVisit($idVisit, $limit)
- {
- $sql = "
- SELECT
- 'goal' as type,
- goal.name as goalName,
- goal.idgoal as goalId,
- log_conversion.revenue as revenue,
- log_conversion.idlink_va,
- log_conversion.idlink_va as goalPageId,
- log_conversion.server_time as serverTimePretty,
- log_conversion.url as url
- FROM " . Common::prefixTable('log_conversion') . " AS log_conversion
- LEFT JOIN " . Common::prefixTable('goal') . " AS goal
- ON (goal.idsite = log_conversion.idsite
- AND
- goal.idgoal = log_conversion.idgoal)
- AND goal.deleted = 0
- WHERE log_conversion.idvisit = ?
- AND log_conversion.idgoal > 0
- ORDER BY server_time ASC
- LIMIT 0, $limit
- ";
- $goalDetails = Db::fetchAll($sql, array($idVisit));
- return $goalDetails;
- }
-
- /**
- * @param $idVisit
- * @param $limit
- * @return array
- * @throws \Exception
- */
- public function queryEcommerceConversionsForVisit($idVisit, $limit)
- {
- $sql = "SELECT
- case idgoal when " . GoalManager::IDGOAL_CART
- . " then '" . Piwik::LABEL_ID_GOAL_IS_ECOMMERCE_CART
- . "' else '" . Piwik::LABEL_ID_GOAL_IS_ECOMMERCE_ORDER . "' end as type,
- idorder as orderId,
- " . LogAggregator::getSqlRevenue('revenue') . " as revenue,
- " . LogAggregator::getSqlRevenue('revenue_subtotal') . " as revenueSubTotal,
- " . LogAggregator::getSqlRevenue('revenue_tax') . " as revenueTax,
- " . LogAggregator::getSqlRevenue('revenue_shipping') . " as revenueShipping,
- " . LogAggregator::getSqlRevenue('revenue_discount') . " as revenueDiscount,
- items as items,
- log_conversion.server_time as serverTimePretty,
- log_conversion.idlink_va
- FROM " . Common::prefixTable('log_conversion') . " AS log_conversion
- WHERE idvisit = ?
- AND idgoal <= " . GoalManager::IDGOAL_ORDER . "
- ORDER BY server_time ASC
- LIMIT 0, $limit";
- $ecommerceDetails = Db::fetchAll($sql, array($idVisit));
- return $ecommerceDetails;
- }
-
- /**
- * @param $idSite
- * @param $idVisit
- * @return array
- * @throws \Exception
- */
- public function queryEcommerceConversionsVisitorLifeTimeMetricsForVisitor($idSite, $idVisitor)
- {
- $sql = $this->getSqlEcommerceConversionsLifeTimeMetricsForIdGoal(GoalManager::IDGOAL_ORDER);
- $ecommerceOrders = Db::fetchRow($sql, array($idSite, @Common::hex2bin($idVisitor)));
-
- $sql = $this->getSqlEcommerceConversionsLifeTimeMetricsForIdGoal(GoalManager::IDGOAL_CART);
- $abandonedCarts = Db::fetchRow($sql, array($idSite, @Common::hex2bin($idVisitor)));
-
- return array(
- 'totalEcommerceRevenue' => $ecommerceOrders['lifeTimeRevenue'],
- 'totalEcommerceConversions' => $ecommerceOrders['lifeTimeConversions'],
- 'totalEcommerceItems' => $ecommerceOrders['lifeTimeEcommerceItems'],
- 'totalAbandonedCartsRevenue' => $abandonedCarts['lifeTimeRevenue'],
- 'totalAbandonedCarts' => $abandonedCarts['lifeTimeConversions'],
- 'totalAbandonedCartsItems' => $abandonedCarts['lifeTimeEcommerceItems']
- );
- }
-
- /**
- * @param $idVisit
- * @param $idOrder
- * @param $actionsLimit
- * @return array
- * @throws \Exception
- */
- public function queryEcommerceItemsForOrder($idVisit, $idOrder, $actionsLimit)
- {
- $sql = "SELECT
- log_action_sku.name as itemSKU,
- log_action_name.name as itemName,
- log_action_category.name as itemCategory,
- " . LogAggregator::getSqlRevenue('price') . " as price,
- quantity as quantity
- FROM " . Common::prefixTable('log_conversion_item') . "
- INNER JOIN " . Common::prefixTable('log_action') . " AS log_action_sku
- ON idaction_sku = log_action_sku.idaction
- LEFT JOIN " . Common::prefixTable('log_action') . " AS log_action_name
- ON idaction_name = log_action_name.idaction
- LEFT JOIN " . Common::prefixTable('log_action') . " AS log_action_category
- ON idaction_category = log_action_category.idaction
- WHERE idvisit = ?
- AND idorder = ?
- AND deleted = 0
- LIMIT 0, $actionsLimit
- ";
-
- $bind = array($idVisit, $idOrder);
-
- $itemsDetails = Db::fetchAll($sql, $bind);
- return $itemsDetails;
- }
-
/**
* @param $idSite
* @param $period
@@ -538,25 +367,4 @@ class Model
}
return array($whereBind, $where);
}
-
- /**
- * @param $ecommerceIdGoal
- * @return string
- */
- private function getSqlEcommerceConversionsLifeTimeMetricsForIdGoal($ecommerceIdGoal)
- {
- $sql = "SELECT
- COALESCE(SUM(" . LogAggregator::getSqlRevenue('revenue') . "), 0) as lifeTimeRevenue,
- COUNT(*) as lifeTimeConversions,
- COALESCE(SUM(" . LogAggregator::getSqlRevenue('items') . "), 0) as lifeTimeEcommerceItems
- FROM " . Common::prefixTable('log_visit') . " AS log_visit
- LEFT JOIN " . Common::prefixTable('log_conversion') . " AS log_conversion
- ON log_visit.idvisit = log_conversion.idvisit
- WHERE
- log_visit.idsite = ?
- AND log_visit.idvisitor = ?
- AND log_conversion.idgoal = " . $ecommerceIdGoal . "
- ";
- return $sql;
- }
-}
+}
diff --git a/plugins/Live/ProfileSummary/ImportantVisits.php b/plugins/Live/ProfileSummary/ImportantVisits.php
new file mode 100644
index 0000000000..afb290b505
--- /dev/null
+++ b/plugins/Live/ProfileSummary/ImportantVisits.php
@@ -0,0 +1,47 @@
+<?php
+/**
+ * Piwik - free/libre analytics platform
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+
+namespace Piwik\Plugins\Live\ProfileSummary;
+
+use Piwik\Piwik;
+use Piwik\View;
+
+/**
+ * Class ImportantVisits
+ *
+ * @api
+ */
+class ImportantVisits extends ProfileSummaryAbstract
+{
+ /**
+ * @inheritdoc
+ */
+ public function getName()
+ {
+ return Piwik::translate('General_Summary');
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function render()
+ {
+ $viewVisits = new View('@Live/_profileSummaryVisits.twig');
+ $viewVisits->visitorData = $this->profile;
+ return $viewVisits->render();
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function getOrder()
+ {
+ return 30;
+ }
+} \ No newline at end of file
diff --git a/plugins/Live/ProfileSummary/ProfileSummaryAbstract.php b/plugins/Live/ProfileSummary/ProfileSummaryAbstract.php
new file mode 100644
index 0000000000..e1e0f7d0bb
--- /dev/null
+++ b/plugins/Live/ProfileSummary/ProfileSummaryAbstract.php
@@ -0,0 +1,67 @@
+<?php
+/**
+ * Piwik - free/libre analytics platform
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+namespace Piwik\Plugins\Live\ProfileSummary;
+
+/**
+ * Class ProfileSummaryAbstract
+ *
+ * This class can be implemented in a plugin to provide a new profile summary
+ *
+ * @api
+ */
+abstract class ProfileSummaryAbstract
+{
+ /**
+ * Visitor profile information
+ *
+ * @var array
+ */
+ protected $profile = [];
+
+ /**
+ * Set profile information
+ *
+ * @param array $profile
+ */
+ public function setProfile($profile)
+ {
+ $this->profile = $profile;
+ }
+
+ /**
+ * Returns the unique ID
+ *
+ * @return string
+ */
+ public function getId()
+ {
+ return static::class;
+ }
+
+ /**
+ * Returns the descriptive name
+ *
+ * @return string
+ */
+ abstract function getName();
+
+ /**
+ * Renders and returns the summary
+ *
+ * @return string
+ */
+ abstract function render();
+
+ /**
+ * Returns order indicator used to sort all summaries before displaying them
+ *
+ * @return int
+ */
+ abstract function getOrder();
+} \ No newline at end of file
diff --git a/plugins/Live/ProfileSummary/Summary.php b/plugins/Live/ProfileSummary/Summary.php
new file mode 100644
index 0000000000..db81a8e127
--- /dev/null
+++ b/plugins/Live/ProfileSummary/Summary.php
@@ -0,0 +1,52 @@
+<?php
+/**
+ * Piwik - free/libre analytics platform
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+namespace Piwik\Plugins\Live\ProfileSummary;
+
+use Piwik\Common;
+use Piwik\Piwik;
+use Piwik\View;
+use Piwik\Plugins\Goals\API as APIGoals;
+
+/**
+ * Class ProfileSummaryAbstract
+ *
+ * This class can be implemented in a plugin to provide a new profile summary
+ *
+ * @api
+ */
+class Summary extends ProfileSummaryAbstract
+{
+ /**
+ * @inheritdoc
+ */
+ public function getName()
+ {
+ return Piwik::translate('General_Summary');
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function render()
+ {
+ $idSite = Common::getRequestVar('idSite', null, 'int');
+ $view = new View('@Live/_profileSummary.twig');
+ $view->goals = APIGoals::getInstance()->getGoals($idSite);
+ $view->visitorData = $this->profile;
+ return $view->render();
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function getOrder()
+ {
+ return 0;
+ }
+} \ No newline at end of file
diff --git a/plugins/Live/Visitor.php b/plugins/Live/Visitor.php
index 19844f0f71..4984c262ca 100644
--- a/plugins/Live/Visitor.php
+++ b/plugins/Live/Visitor.php
@@ -8,24 +8,18 @@
*/
namespace Piwik\Plugins\Live;
-use Piwik\Common;
+use Piwik\Cache;
+use Piwik\CacheId;
+use Piwik\Config;
use Piwik\DataTable\Filter\ColumnDelete;
use Piwik\Date;
-use Piwik\Db;
use Piwik\Metrics\Formatter;
-use Piwik\Network\IPUtils;
+use Piwik\Plugin;
use Piwik\Piwik;
-use Piwik\Plugins\CustomVariables\CustomVariables;
-use Piwik\Plugins\UserCountry\LocationProvider\GeoIp;
-use Piwik\Plugins\Actions\Actions\ActionSiteSearch;
-use Piwik\Tracker;
-use Piwik\Tracker\Action;
use Piwik\Tracker\GoalManager;
class Visitor implements VisitorInterface
{
- const EVENT_VALUE_PRECISION = 3;
-
private $details = array();
function __construct($visitorRawData)
@@ -35,24 +29,14 @@ class Visitor implements VisitorInterface
function getAllVisitorDetails()
{
- $visitor = array(
- 'idSite' => $this->getIdSite(),
- 'idVisit' => $this->getIdVisit(),
- 'visitIp' => $this->getIp(),
- 'visitorId' => $this->getVisitorId(),
-
- // => false are placeholders to be filled in API later
- 'actionDetails' => false,
- 'goalConversions' => false,
- 'siteCurrency' => false,
- 'siteCurrencySymbol' => false,
-
- // all time entries
- 'serverDate' => $this->getServerDate(),
- 'visitServerHour' => $this->getVisitServerHour(),
- 'lastActionTimestamp' => $this->getTimestampLastAction(),
- 'lastActionDateTime' => $this->getDateTimeLastAction(),
- );
+ $visitor = array();
+
+ $instances = self::getAllVisitorDetailsInstances();
+
+ foreach ($instances as $instance) {
+ $instance->setDetails($this->details);
+ $instance->extendVisitorDetails($visitor);
+ }
/**
* This event can be used to add any details to a visitor. The visitor's details are for instance used in
@@ -70,56 +54,63 @@ class Visitor implements VisitorInterface
*
* @param array &visitor You can add or remove fields to the visitor array and it will reflected in the API output
* @param array $details The details array contains all visit dimensions (columns of log_visit table)
+ *
+ * @deprecated will be removed in Piwik 4
*/
Piwik::postEvent('Live.getAllVisitorDetails', array(&$visitor, $this->details));
return $visitor;
}
- function getVisitorId()
+ /**
+ * Returns all available visitor details instances
+ *
+ * @return VisitorDetailsAbstract[]
+ * @throws \Exception
+ */
+ public static function getAllVisitorDetailsInstances()
{
- if (isset($this->details['idvisitor'])) {
- return bin2hex($this->details['idvisitor']);
- }
- return false;
- }
+ $cacheId = CacheId::pluginAware('VisitorDetails');
+ $cache = Cache::getTransientCache();
- function getVisitServerHour()
- {
- return date('G', strtotime($this->details['visit_last_action_time']));
- }
+ if (!$cache->contains($cacheId)) {
+ $instances = [
+ new VisitorDetails() // needs to be first
+ ];
- function getServerDate()
- {
- return date('Y-m-d', strtotime($this->details['visit_last_action_time']));
- }
+ foreach (self::getAllVisitorDetailsClasses() as $className) {
+ $instance = new $className();
- function getIp()
- {
- if (isset($this->details['location_ip'])) {
- return IPUtils::binaryToStringIP($this->details['location_ip']);
- }
- return null;
- }
+ if ($instance instanceof VisitorDetails) {
+ continue;
+ }
- function getIdVisit()
- {
- return $this->details['idvisit'];
- }
+ $instances[] = $instance;
+ }
- function getIdSite()
- {
- return $this->details['idsite'];
+ $cache->save($cacheId, $instances);
+ }
+
+ return $cache->fetch($cacheId);
}
- function getTimestampLastAction()
+ /**
+ * Returns class names of all VisitorDetails classes.
+ *
+ * @return string[]
+ * @api
+ */
+ protected static function getAllVisitorDetailsClasses()
{
- return strtotime($this->details['visit_last_action_time']);
+ return Plugin\Manager::getInstance()->findComponents('VisitorDetails', 'Piwik\Plugins\Live\VisitorDetailsAbstract');
}
- function getDateTimeLastAction()
+ function getVisitorId()
{
- return date('Y-m-d H:i:s', strtotime($this->details['visit_last_action_time']));
+ if (isset($this->details['idvisitor'])) {
+ return bin2hex($this->details['idvisitor']);
+ }
+ return false;
}
/**
@@ -246,232 +237,48 @@ class Visitor implements VisitorInterface
}
/**
- * @param $visitorDetailsArray
- * @param $actionsLimit
- * @param $timezone
+ * @param array $visitorDetailsArray
+ * @param array $actionDetails preset action details
+ *
* @return array
*/
- public static function enrichVisitorArrayWithActions($visitorDetailsArray, $actionsLimit, $idSite, $timezone)
+ public static function enrichVisitorArrayWithActions($visitorDetailsArray, $actionDetails = array())
{
- $idVisit = $visitorDetailsArray['idVisit'];
-
- $model = new Model();
- $actionDetails = $model->queryActionsForVisit($idVisit, $actionsLimit);
-
- $formatter = new Formatter();
- $maxCustomVariables = CustomVariables::getNumUsableCustomVariables();
+ $actionsLimit = (int)Config::getInstance()->General['visitor_log_maximum_actions_per_visit'];
+ $visitorDetailsManipulators = self::getAllVisitorDetailsInstances();
- foreach ($actionDetails as $actionIdx => &$actionDetail) {
- $actionDetail =& $actionDetails[$actionIdx];
- $customVariablesPage = array();
-
- for ($i = 1; $i <= $maxCustomVariables; $i++) {
- if (!empty($actionDetail['custom_var_k' . $i])) {
- $cvarKey = $actionDetail['custom_var_k' . $i];
- $cvarKey = static::getCustomVariablePrettyKey($cvarKey);
- $customVariablesPage[$i] = array(
- 'customVariablePageName' . $i => $cvarKey,
- 'customVariablePageValue' . $i => $actionDetail['custom_var_v' . $i],
- );
- }
- unset($actionDetail['custom_var_k' . $i]);
- unset($actionDetail['custom_var_v' . $i]);
- }
- if (!empty($customVariablesPage)) {
- $actionDetail['customVariables'] = $customVariablesPage;
- }
-
- if ($actionDetail['type'] == Action::TYPE_CONTENT) {
-
- unset($actionDetails[$actionIdx]);
- continue;
-
- } elseif ($actionDetail['type'] == Action::TYPE_EVENT) {
- // Handle Event
- if (strlen($actionDetail['pageTitle']) > 0) {
- $actionDetail['eventName'] = $actionDetail['pageTitle'];
- }
-
- unset($actionDetail['pageTitle']);
-
- } else if ($actionDetail['type'] == Action::TYPE_SITE_SEARCH) {
- // Handle Site Search
- $actionDetail['siteSearchKeyword'] = $actionDetail['pageTitle'];
- unset($actionDetail['pageTitle']);
- }
-
- // Event value / Generation time
- if ($actionDetail['type'] == Action::TYPE_EVENT) {
- if (strlen($actionDetail['custom_float']) > 0) {
- $actionDetail['eventValue'] = round($actionDetail['custom_float'], self::EVENT_VALUE_PRECISION);
- }
- } elseif ($actionDetail['custom_float'] > 0) {
- $actionDetail['generationTimeMilliseconds'] = $actionDetail['custom_float'];
- $actionDetail['generationTime'] = $formatter->getPrettyTimeFromSeconds($actionDetail['custom_float'] / 1000, true);
- }
- unset($actionDetail['custom_float']);
-
- if ($actionDetail['type'] != Action::TYPE_EVENT) {
- unset($actionDetail['eventCategory']);
- unset($actionDetail['eventAction']);
- }
-
- $actionDetail['interactionPosition'] = $actionDetail['interaction_position'];
- unset($actionDetail['interaction_position']);
-
- // Reconstruct url from prefix
- $url = Tracker\PageUrl::reconstructNormalizedUrl($actionDetail['url'], $actionDetail['url_prefix']);
- $url = Common::unsanitizeInputValue($url);
-
- $actionDetail['url'] = $url;
- unset($actionDetail['url_prefix']);
+ foreach ($visitorDetailsManipulators as $instance) {
+ $instance->provideActionsForVisit($actionDetails, $visitorDetailsArray);
}
- // If the visitor converted a goal, we shall select all Goals
- $goalDetails = $model->queryGoalConversionsForVisit($idVisit, $actionsLimit);
-
- $ecommerceMetrics = $model->queryEcommerceConversionsVisitorLifeTimeMetricsForVisitor($idSite, $visitorDetailsArray['visitorId']);
- $visitorDetailsArray['totalEcommerceRevenue'] = $ecommerceMetrics['totalEcommerceRevenue'];
- $visitorDetailsArray['totalEcommerceConversions'] = $ecommerceMetrics['totalEcommerceConversions'];
- $visitorDetailsArray['totalEcommerceItems'] = $ecommerceMetrics['totalEcommerceItems'];
-
- $visitorDetailsArray['totalAbandonedCartsRevenue'] = $ecommerceMetrics['totalAbandonedCartsRevenue'];
- $visitorDetailsArray['totalAbandonedCarts'] = $ecommerceMetrics['totalAbandonedCarts'];
- $visitorDetailsArray['totalAbandonedCartsItems'] = $ecommerceMetrics['totalAbandonedCartsItems'];
-
- $ecommerceDetails = $model->queryEcommerceConversionsForVisit($idVisit, $actionsLimit);
- foreach ($ecommerceDetails as &$ecommerceDetail) {
- if ($ecommerceDetail['type'] == Piwik::LABEL_ID_GOAL_IS_ECOMMERCE_CART) {
- unset($ecommerceDetail['orderId']);
- unset($ecommerceDetail['revenueSubTotal']);
- unset($ecommerceDetail['revenueTax']);
- unset($ecommerceDetail['revenueShipping']);
- unset($ecommerceDetail['revenueDiscount']);
- }
-
- // 25.00 => 25
- foreach ($ecommerceDetail as $column => $value) {
- if (strpos($column, 'revenue') !== false) {
- if ($value == round($value)) {
- $ecommerceDetail[$column] = round($value);
- }
- }
- }
+ foreach ($visitorDetailsManipulators as $instance) {
+ $instance->filterActions($actionDetails, $visitorDetailsArray);
}
- // Enrich ecommerce carts/orders with the list of products
- usort($ecommerceDetails, array('static', 'sortByServerTime'));
- foreach ($ecommerceDetails as &$ecommerceConversion) {
- $idOrder = isset($ecommerceConversion['orderId']) ? $ecommerceConversion['orderId'] : GoalManager::ITEM_IDORDER_ABANDONED_CART;
-
- $itemsDetails = $model->queryEcommerceItemsForOrder($idVisit, $idOrder, $actionsLimit);
- foreach ($itemsDetails as &$detail) {
- if ($detail['price'] == round($detail['price'])) {
- $detail['price'] = round($detail['price']);
- }
- }
- $ecommerceConversion['itemDetails'] = $itemsDetails;
- }
+ usort($actionDetails, array('static', 'sortByServerTime'));
$actionDetails = array_values($actionDetails);
- // Enrich with time spent per action
- foreach($actionDetails as $actionIdx => &$actionDetail) {
-
- // Set the time spent for this action (which is the timeSpentRef of the next action)
- $nextActionFound = isset($actionDetails[$actionIdx + 1]);
- if ($nextActionFound) {
- $actionDetail['timeSpent'] = $actionDetails[$actionIdx + 1]['timeSpentRef'];
- } else {
-
- // Last action of a visit.
- // By default, Piwik does not know how long the user stayed on the page
- // If enableHeartBeatTimer() is used in piwik.js then we can find the accurate time on page for the last pageview
- $visitTotalTime = $visitorDetailsArray['visitDuration'];
- $timeOfLastAction = Date::factory($actionDetail['serverTimePretty'])->getTimestamp();
-
- $timeSpentOnAllActionsApartFromLastOne = ($timeOfLastAction - $visitorDetailsArray['firstActionTimestamp']);
- $timeSpentOnPage = $visitTotalTime - $timeSpentOnAllActionsApartFromLastOne;
-
- // Safe net, we assume the time is correct when it's more than 10 seconds
- if ($timeSpentOnPage > 10) {
- $actionDetail['timeSpent'] = $timeSpentOnPage;
- }
-
- }
-
- if (isset($actionDetail['timeSpent'])) {
- $actionDetail['timeSpentPretty'] = $formatter->getPrettyTimeFromSeconds($actionDetail['timeSpent'], true);
- }
-
- unset($actionDetails[$actionIdx]['timeSpentRef']); // not needed after timeSpent is added
-
+ // limit actions
+ if ($actionsLimit < count($actionDetails)) {
+ $visitorDetailsArray['truncatedActionsCount'] = count($actionDetails) - $actionsLimit;
+ $actionDetails = array_slice($actionDetails, 0, $actionsLimit);
}
- $actions = array_merge($actionDetails, $goalDetails, $ecommerceDetails);
- usort($actions, array('static', 'sortByServerTime'));
-
- foreach ($actions as &$action) {
- unset($action['idlink_va']);
- }
+ foreach ($actionDetails as $actionIdx => &$actionDetail) {
+ $actionDetail =& $actionDetails[$actionIdx];
+ $nextAction = isset($actionDetails[$actionIdx+1]) ? $actionDetails[$actionIdx+1] : null;
- $visitorDetailsArray['goalConversions'] = count($goalDetails);
-
- $visitorDetailsArray['actionDetails'] = $actions;
-
- foreach ($visitorDetailsArray['actionDetails'] as &$details) {
- switch ($details['type']) {
- case 'goal':
- $details['icon'] = 'plugins/Morpheus/images/goal.png';
- break;
- case Piwik::LABEL_ID_GOAL_IS_ECOMMERCE_ORDER:
- case Piwik::LABEL_ID_GOAL_IS_ECOMMERCE_CART:
- $details['icon'] = 'plugins/Morpheus/images/' . $details['type'] . '.png';
- break;
- case Action::TYPE_DOWNLOAD:
- $details['type'] = 'download';
- $details['icon'] = 'plugins/Morpheus/images/download.png';
- break;
- case Action::TYPE_OUTLINK:
- $details['type'] = 'outlink';
- $details['icon'] = 'plugins/Morpheus/images/link.png';
- break;
- case Action::TYPE_SITE_SEARCH:
- $details['type'] = 'search';
- $details['icon'] = 'plugins/Morpheus/images/search_ico.png';
- break;
- case Action::TYPE_EVENT:
- $details['type'] = 'event';
- $details['icon'] = 'plugins/Morpheus/images/event.png';
- break;
- default:
- $details['type'] = 'action';
- $details['icon'] = null;
- break;
+ foreach ($visitorDetailsManipulators as $instance) {
+ $instance->extendActionDetails($actionDetail, $nextAction, $visitorDetailsArray);
}
-
- // Convert datetimes to the site timezone
- $dateTimeVisit = Date::factory($details['serverTimePretty'], $timezone);
- $details['serverTimePretty'] = $dateTimeVisit->getLocalized(Date::DATETIME_FORMAT_SHORT);
- $details['timestamp'] = $dateTimeVisit->getTimestamp();
}
+ $visitorDetailsArray['actionDetails'] = $actionDetails;
return $visitorDetailsArray;
}
- private static function getCustomVariablePrettyKey($key)
- {
- $rename = array(
- ActionSiteSearch::CVAR_KEY_SEARCH_CATEGORY => Piwik::translate('Actions_ColumnSearchCategory'),
- ActionSiteSearch::CVAR_KEY_SEARCH_COUNT => Piwik::translate('Actions_ColumnSearchResultsCount'),
- );
- if (isset($rename[$key])) {
- return $rename[$key];
- }
- return $key;
- }
-
private static function sortByServerTime($a, $b)
{
$ta = strtotime($a['serverTimePretty']);
diff --git a/plugins/Live/VisitorDetails.php b/plugins/Live/VisitorDetails.php
new file mode 100644
index 0000000000..91be2f543b
--- /dev/null
+++ b/plugins/Live/VisitorDetails.php
@@ -0,0 +1,252 @@
+<?php
+/**
+ * Piwik - free/libre analytics platform
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+namespace Piwik\Plugins\Live;
+
+use Piwik\Date;
+use Piwik\DataTable;
+use Piwik\Metrics\Formatter;
+use Piwik\Network\IPUtils;
+use Piwik\Piwik;
+use Piwik\Site;
+use Piwik\Plugins\SitesManager\API as APISitesManager;
+use Piwik\Plugins\Referrers\API as APIReferrers;
+use Piwik\View;
+
+class VisitorDetails extends VisitorDetailsAbstract
+{
+ public function extendVisitorDetails(&$visitor)
+ {
+ $idSite = $this->getIdSite();
+ $website = new Site($idSite);
+ $timezone = $website->getTimezone();
+ $currency = $website->getCurrency();
+ $currencies = APISitesManager::getInstance()->getCurrencySymbols();
+
+ $visitor += array(
+ 'idSite' => $idSite,
+ 'idVisit' => $this->getIdVisit(),
+ 'visitIp' => $this->getIp(),
+ 'visitorId' => $this->getVisitorId(),
+
+ // => false are placeholders to be filled in API later
+ 'actionDetails' => false,
+ 'goalConversions' => false,
+ 'siteCurrency' => false,
+ 'siteCurrencySymbol' => false,
+
+ // all time entries
+ 'serverDate' => $this->getServerDate(),
+ 'visitServerHour' => $this->getVisitServerHour(),
+ 'lastActionTimestamp' => $this->getTimestampLastAction(),
+ 'lastActionDateTime' => $this->getDateTimeLastAction(),
+ );
+
+ $visitor['siteCurrency'] = $currency;
+ $visitor['siteCurrencySymbol'] = @$currencies[$visitor['siteCurrency']];
+ $visitor['serverTimestamp'] = $visitor['lastActionTimestamp'];
+ $visitor['firstActionTimestamp'] = strtotime($this->details['visit_first_action_time']);
+
+ $dateTimeVisit = Date::factory($visitor['lastActionTimestamp'], $timezone);
+ if ($dateTimeVisit) {
+ $visitor['serverTimePretty'] = $dateTimeVisit->getLocalized(Date::TIME_FORMAT);
+ $visitor['serverDatePretty'] = $dateTimeVisit->getLocalized(Date::DATE_FORMAT_LONG);
+ }
+
+ $dateTimeVisitFirstAction = Date::factory($visitor['firstActionTimestamp'], $timezone);
+ $visitor['serverDatePrettyFirstAction'] = $dateTimeVisitFirstAction->getLocalized(Date::DATE_FORMAT_LONG);
+ $visitor['serverTimePrettyFirstAction'] = $dateTimeVisitFirstAction->getLocalized(Date::TIME_FORMAT);
+ }
+
+ public function renderAction($action, $previousAction, $visitorDetails)
+ {
+ switch ($action['type']) {
+ case 'ecommerceOrder':
+ case 'ecommerceAbandonedCart':
+ $template = '@Live/_actionEcommerce.twig';
+ break;
+ case 'goal':
+ $template = '@Live/_actionGoal.twig';
+ break;
+ case 'action':
+ case 'search':
+ case 'outlink':
+ case 'download':
+ $template = '@Live/_actionCommon.twig';
+ break;
+ }
+
+ if (empty($template)) {
+ return;
+ }
+
+ $view = new View($template);
+ $view->action = $action;
+ $view->previousAction = $previousAction;
+ $view->visitInfo = $visitorDetails;
+ return $view->render();
+ }
+
+ public function renderActionTooltip($action, $visitInfo)
+ {
+ $view = new View('@Live/_actionTooltip');
+ $view->action = $action;
+ $view->visitInfo = $visitInfo;
+ return [[ 0, $view->render() ]];
+ }
+
+ public function renderVisitorDetails($visitorDetails)
+ {
+ $view = new View('@Live/_visitorDetails.twig');
+ $view->visitInfo = $visitorDetails;
+ return [[ 0, $view->render() ]];
+ }
+
+ public function renderIcons($visitorDetails)
+ {
+ $view = new View('@Live/_visitorLogIcons.twig');
+ $view->visitor = $visitorDetails;
+ return $view->render();
+ }
+
+ function getVisitorId()
+ {
+ if (isset($this->details['idvisitor'])) {
+ return bin2hex($this->details['idvisitor']);
+ }
+ return false;
+ }
+
+ function getVisitServerHour()
+ {
+ return date('G', strtotime($this->details['visit_last_action_time']));
+ }
+
+ function getServerDate()
+ {
+ return date('Y-m-d', strtotime($this->details['visit_last_action_time']));
+ }
+
+ function getIp()
+ {
+ if (isset($this->details['location_ip'])) {
+ return IPUtils::binaryToStringIP($this->details['location_ip']);
+ }
+ return null;
+ }
+
+ function getIdVisit()
+ {
+ return $this->details['idvisit'];
+ }
+
+ function getIdSite()
+ {
+ return $this->details['idsite'];
+ }
+
+ function getTimestampLastAction()
+ {
+ return strtotime($this->details['visit_last_action_time']);
+ }
+
+ function getDateTimeLastAction()
+ {
+ return date('Y-m-d H:i:s', strtotime($this->details['visit_last_action_time']));
+ }
+
+
+ public function initProfile($visits, &$profile)
+ {
+ $profile['totalVisits'] = 0;
+ $profile['totalVisitDuration'] = 0;
+ }
+
+ public function handleProfileVisit($visit, &$profile)
+ {
+ ++$profile['totalVisits'];
+
+ $profile['totalVisitDuration'] += $visit->getColumn('visitDuration');
+ }
+
+
+ public function finalizeProfile($visits, &$profile)
+ {
+ $formatter = new Formatter();
+ $profile['totalVisitDurationPretty'] = $formatter->getPrettyTimeFromSeconds($profile['totalVisitDuration'], true);
+
+ $rows = $visits->getRows();
+ $profile['userId'] = $visits->getLastRow()->getColumn('userId');
+ $profile['firstVisit'] = $this->getVisitorProfileVisitSummary(end($rows));
+ $profile['lastVisit'] = $this->getVisitorProfileVisitSummary(reset($rows));
+ $profile['visitsAggregated'] = count($rows);
+ }
+
+ /**
+ * Returns a summary for an important visit. Used to describe the first & last visits of a visitor.
+ *
+ * @param DataTable\Row $visit
+ * @return array
+ */
+ private function getVisitorProfileVisitSummary($visit)
+ {
+ $today = Date::today();
+
+ $serverDate = $visit->getColumn('firstActionTimestamp');
+ return array(
+ 'date' => $serverDate,
+ 'prettyDate' => Date::factory($serverDate)->getLocalized(Date::DATE_FORMAT_LONG),
+ 'daysAgo' => (int)Date::secondsToDays($today->getTimestamp() - Date::factory($serverDate)->getTimestamp()),
+ 'referrerType' => $visit->getColumn('referrerType'),
+ 'referrerUrl' => $visit->getColumn('referrerUrl') ?: '',
+ 'referralSummary' => self::getReferrerSummaryForVisit($visit),
+ );
+ }
+
+
+ /**
+ * Returns a summary for a visit's referral.
+ *
+ * @param DataTable\Row $visit
+ * @return bool|mixed|string
+ */
+ public static function getReferrerSummaryForVisit($visit)
+ {
+ $referrerType = $visit->getColumn('referrerType');
+ if ($referrerType === false
+ || $referrerType == 'direct'
+ ) {
+ return Piwik::translate('Referrers_DirectEntry');
+ }
+
+ if ($referrerType == 'search') {
+ $referrerName = $visit->getColumn('referrerName');
+
+ $keyword = $visit->getColumn('referrerKeyword');
+ if ($keyword !== false
+ && $keyword != APIReferrers::getKeywordNotDefinedString()
+ ) {
+ $referrerName .= ' (' . $keyword . ')';
+ }
+ return $referrerName;
+ }
+
+ if ($referrerType == 'campaign') {
+
+ $summary = Piwik::translate('Referrers_ColumnCampaign') . ': ' . $visit->getColumn('referrerName');
+ $keyword = $visit->getColumn('referrerKeyword');
+ if (!empty($keyword)) {
+ $summary .= ' - ' . $keyword;
+ }
+
+ return $summary;
+ }
+
+ return $visit->getColumn('referrerName');
+ }
+} \ No newline at end of file
diff --git a/plugins/Live/VisitorDetailsAbstract.php b/plugins/Live/VisitorDetailsAbstract.php
new file mode 100644
index 0000000000..19ae14f685
--- /dev/null
+++ b/plugins/Live/VisitorDetailsAbstract.php
@@ -0,0 +1,275 @@
+<?php
+/**
+ * Piwik - free/libre analytics platform
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+namespace Piwik\Plugins\Live;
+
+use Piwik\DataTable;
+
+/**
+ * Class VisitorDetailsAbstract
+ *
+ * This class can be implemented in a plugin to extend the Live reports, visitor log and profile
+ *
+ * @api
+ */
+abstract class VisitorDetailsAbstract
+{
+ protected $details = array();
+
+ /**
+ * Set details of current visit
+ *
+ * @param array $details
+ */
+ public function setDetails($details)
+ {
+ $this->details = $details;
+ }
+
+ /**
+ * Makes it possible to extend the visitor details returned from API
+ *
+ * **Example**
+ *
+ * public function extendVisitorDetails(&$visitor) {
+ * $crmData = Model::getCRMData($visitor['userid']);
+ *
+ * foreach ($crmData as $prop => $value) {
+ * $visitor[$prop] = $value;
+ * }
+ * }
+ *
+ * @param array $visitor
+ * @return void
+ */
+ public function extendVisitorDetails(&$visitor)
+ {
+ }
+
+ /**
+ * Makes it possible to enrich the action set for a single visit
+ *
+ * **Example**
+ *
+ * public function provideActionsForVisit(&$actions, $visitorDetails) {
+ * $adviews = Model::getAdviews($visitorDetails['visitid']);
+ * $actions += $adviews;
+ * }
+ *
+ * @param array $actions List of action to manipulate
+ * @param array $visitorDetails
+ * @return void
+ */
+ public function provideActionsForVisit(&$actions, $visitorDetails)
+ {
+ }
+
+ /**
+ * Makes it possible to enrich the action set for multiple visits identified by given visit ids
+ *
+ * action set to enrich needs to have the following structure
+ *
+ * $actions = array (
+ * 'idvisit' => array ( list of actions for this visit id ),
+ * 'idvisit' => array ( list of actions for this visit id ),
+ * ...
+ * )
+ *
+ * **Example**
+ *
+ * public function provideActionsForVisitIds(&$actions, $visitIds) {
+ * $adviews = Model::getAdviewsByVisitIds($visitIds);
+ * foreach ($adviews as $idVisit => $adView) {
+ * $actions[$idVisit][] = $adView;
+ * }
+ * }
+ *
+ * @param array $actions action set to enrich
+ * @param array $visitIds list of visit ids
+ */
+ public function provideActionsForVisitIds(&$actions, $visitIds)
+ {
+ }
+
+ /**
+ * Allows filtering the provided actions
+ *
+ * **Example:**
+ *
+ * public function filterActions(&$actions, $visitorDetailsArray) {
+ * foreach ($actions as $idx => $action) {
+ * if ($action['type'] == 'customaction') {
+ * unset($actions[$idx]);
+ * continue;
+ * }
+ * }
+ * }
+ *
+ * @param array $actions
+ * @param array $visitorDetailsArray
+ */
+ public function filterActions(&$actions, $visitorDetailsArray)
+ {
+ }
+
+ /**
+ * Allows extended each action with additional information
+ *
+ * @param array $action
+ * @param array $nextAction
+ * @param array $visitorDetails
+ */
+ public function extendActionDetails(&$action, $nextAction, $visitorDetails)
+ {
+ }
+
+ /**
+ * Called when rendering a single Action
+ *
+ * @param array $action
+ * @param array $previousAction
+ * @param array $visitorDetails
+ * @return string
+ */
+ public function renderAction($action, $previousAction, $visitorDetails)
+ {
+ }
+
+ /**
+ * Called for rendering the tooltip on actions
+ * returned array needs to look like this:
+ * array (
+ * 20, // order id
+ * 'rendered html content'
+ * )
+ *
+ * @param array $action
+ * @param array $visitInfo
+ * @return array
+ */
+ public function renderActionTooltip($action, $visitInfo)
+ {
+ return [];
+ }
+
+ /**
+ * Called when rendering the Icons in visitor log
+ *
+ * @param array $visitorDetails
+ * @return string
+ */
+ public function renderIcons($visitorDetails)
+ {
+ }
+
+ /**
+ * Called when rendering the visitor details in visitor log
+ * returned array needs to look like this:
+ * array (
+ * 20, // order id
+ * 'rendered html content'
+ * )
+ *
+ * **Example**
+ * public function renderVisitorDetails($visitorDetails) {
+ * $view = new View('@MyPlugin/_visitorDetails.twig');
+ * $view->visitInfo = $visitorDetails;
+ * return $view->render();
+ * }
+ *
+ * @param array $visitorDetails
+ * @return array
+ */
+ public function renderVisitorDetails($visitorDetails)
+ {
+ return array();
+ }
+
+ /**
+ * Allows manipulating the visitor profile properties
+ * Will be called when visitor profile is initialized
+ *
+ * **Example**
+ *
+ * public function initProfile($visit, &$profile) {
+ * // initialize properties that will be filled based on visits or actions
+ * $profile['totalActions'] = 0;
+ * $profile['totalActionsOfMyType'] = 0;
+ * }
+ *
+ * @param DataTable $visits
+ * @param array $profile
+ * @return void
+ */
+ public function initProfile($visits, &$profile)
+ {
+ }
+
+ /**
+ * Allows manipulating the visitor profile properties based on included visits
+ * Will be called for every action within the profile
+ *
+ * **Example**
+ *
+ * public function handleProfileVisit($visit, &$profile) {
+ * $profile['totalActions'] += $visit->getColumn('actions');
+ * }
+ *
+ * @param DataTable\Row $visit
+ * @param array $profile
+ * @return void
+ */
+ public function handleProfileVisit($visit, &$profile)
+ {
+ }
+
+ /**
+ * Allows manipulating the visitor profile properties based on included actions
+ * Will be called for every action within the profile
+ *
+ * **Example**
+ *
+ * public function handleProfileAction($action, &$profile)
+ * {
+ * if ($action['type'] != 'myactiontype') {
+ * return;
+ * }
+ *
+ * $profile['totalActionsOfMyType']++;
+ * }
+ *
+ * @param array $action
+ * @param array $profile
+ * @return void
+ */
+ public function handleProfileAction($action, &$profile)
+ {
+ }
+
+ /**
+ * Will be called after iterating over all actions
+ * Can be used to set profile information that requires data that was set while iterating over visits & actions
+ *
+ * **Example**
+ *
+ * public function finalizeProfile($visits, &$profile) {
+ * $profile['isPowerUser'] = false;
+ *
+ * if ($profile['totalActionsOfMyType'] > 20) {
+ * $profile['isPowerUser'] = true;
+ * }
+ * }
+ *
+ * @param DataTable $visits
+ * @param array $profile
+ * @return void
+ */
+ public function finalizeProfile($visits, &$profile)
+ {
+ }
+} \ No newline at end of file
diff --git a/plugins/Live/VisitorProfile.php b/plugins/Live/VisitorProfile.php
index dcf73413af..f4ea6a660c 100644
--- a/plugins/Live/VisitorProfile.php
+++ b/plugins/Live/VisitorProfile.php
@@ -2,7 +2,7 @@
/**
* Piwik - free/libre analytics platform
*
- * @link http://piwik.org
+ * @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*
*/
@@ -11,27 +11,16 @@ namespace Piwik\Plugins\Live;
use Exception;
use Piwik\DataTable;
-use Piwik\Date;
-use Piwik\Metrics\Formatter;
-use Piwik\Piwik;
-use Piwik\Site;
-use Piwik\Plugins\Referrers\API as APIReferrers;
class VisitorProfile
{
const VISITOR_PROFILE_MAX_VISITS_TO_SHOW = 10;
protected $profile = array();
- private $siteSearchKeywords = array();
- private $continents = array();
- private $countries = array();
- private $cities = array();
- private $pageGenerationTimeTotal = 0;
public function __construct($idSite)
{
$this->idSite = $idSite;
- $this->isEcommerceEnabled = Site::isEcommerceEnabledFor($this->idSite);
}
/**
@@ -44,345 +33,57 @@ class VisitorProfile
*/
public function makeVisitorProfile(DataTable $visits, $visitorId, $segment, $numLastVisits)
{
- $this->initVisitorProfile();
+ $visitorDetailsManipulators = Visitor::getAllVisitorDetailsInstances();
+
+ $this->profile['visitorId'] = $visitorId;
+
+ foreach ($visitorDetailsManipulators as $instance) {
+ $instance->initProfile($visits, $this->profile);
+ }
/** @var DataTable\Row $visit */
foreach ($visits->getRows() as $visit) {
- ++$this->profile['totalVisits'];
-
- $this->profile['totalVisitDuration'] += $visit->getColumn('visitDuration');
- $this->profile['totalActions'] += $visit->getColumn('actions');
- $this->profile['totalGoalConversions'] += $visit->getColumn('goalConversions');
+ foreach ($visitorDetailsManipulators as $instance) {
+ $instance->handleProfileVisit($visit, $this->profile);
+ }
- // individual goal conversions are stored in action details
foreach ($visit->getColumn('actionDetails') as $action) {
- $this->handleIfGoalAction($action);
- $this->handleIfEventAction($action);
- $this->handleIfDownloadAction($action);
- $this->handleIfOutlinkAction($action);
- $this->handleIfSiteSearchAction($action);
- $this->handleIfPageViewAction($action);
- $this->handleIfPageGenerationTime($action);
+ foreach ($visitorDetailsManipulators as $instance) {
+ $instance->handleProfileAction($action, $this->profile);
+ }
}
- $this->handleGeoLocation($visit);
}
- $this->handleGeoLocationCountries();
- $this->handleGeoLocationContinents();
- $this->handleSiteSearches();
- $this->handleAveragePageGenerationTime();
-
- $formatter = new Formatter();
- $this->profile['totalVisitDurationPretty'] = $formatter->getPrettyTimeFromSeconds($this->profile['totalVisitDuration'], true);
-
- $this->handleVisitsSummary($visits);
-
// use N most recent visits for last_visits
$visits->deleteRowsOffset($numLastVisits);
$this->profile['lastVisits'] = $visits;
-
- $this->profile['userId'] = $visit->getColumn('userId');
- $this->profile['visitorId'] = $visitorId;
$this->handleAdjacentVisitorIds($visits, $visitorId, $segment);
- if($this->isEcommerceEnabled()) {
- $this->profile['totalEcommerceRevenue'] = $visit->getColumn('totalEcommerceRevenue');
- $this->profile['totalEcommerceConversions'] = $visit->getColumn('totalEcommerceConversions');
- $this->profile['totalEcommerceItems'] = $visit->getColumn('totalEcommerceItems');
- $this->profile['totalAbandonedCartsRevenue'] = $visit->getColumn('totalAbandonedCartsRevenue');
- $this->profile['totalAbandonedCarts'] = $visit->getColumn('totalAbandonedCarts');
- $this->profile['totalAbandonedCartsItems'] = $visit->getColumn('totalAbandonedCartsItems');
+ foreach ($visitorDetailsManipulators as $instance) {
+ $instance->finalizeProfile($visits, $this->profile);
}
return $this->profile;
}
/**
- * Returns a summary for an important visit. Used to describe the first & last visits of a visitor.
- *
- * @param DataTable\Row $visit
- * @return array
- */
- private function getVisitorProfileVisitSummary($visit)
- {
- $today = Date::today();
-
- $serverDate = $visit->getColumn('firstActionTimestamp');
- return array(
- 'date' => $serverDate,
- 'prettyDate' => Date::factory($serverDate)->getLocalized(Date::DATE_FORMAT_LONG),
- 'daysAgo' => (int)Date::secondsToDays($today->getTimestamp() - Date::factory($serverDate)->getTimestamp()),
- 'referrerType' => $visit->getColumn('referrerType'),
- 'referralSummary' => self::getReferrerSummaryForVisit($visit),
- );
- }
-
-
- /**
- * Returns a summary for a visit's referral.
- *
- * @param DataTable\Row $visit
- * @return bool|mixed|string
- */
- public static function getReferrerSummaryForVisit($visit)
- {
- $referrerType = $visit->getColumn('referrerType');
- if ($referrerType === false
- || $referrerType == 'direct'
- ) {
- return Piwik::translate('Referrers_DirectEntry');
- }
-
- if ($referrerType == 'search') {
- $referrerName = $visit->getColumn('referrerName');
-
- $keyword = $visit->getColumn('referrerKeyword');
- if ($keyword !== false
- && $keyword != APIReferrers::getKeywordNotDefinedString()
- ) {
- $referrerName .= ' (' . $keyword . ')';
- }
- return $referrerName;
- }
-
- if ($referrerType == 'campaign') {
-
- $summary = Piwik::translate('Referrers_ColumnCampaign') . ': ' . $visit->getColumn('referrerName');
- $keyword = $visit->getColumn('referrerKeyword');
- if (!empty($keyword)) {
- $summary .= ' - ' . $keyword;
- }
-
- return $summary;
- }
-
- return $visit->getColumn('referrerName');
- }
-
- private function isEcommerceEnabled()
- {
- return $this->isEcommerceEnabled;
- }
-
- /**
- * @param $action
- */
- private function handleIfEventAction($action)
- {
- if ($action['type'] != 'event') {
- return;
- }
- $this->profile['totalEvents']++;
- }
-
- /**
- * @param $action
- */
- private function handleIfDownloadAction($action)
- {
- if ($action['type'] != 'download') {
- return;
- }
- $this->profile['totalDownloads']++;
- }
-
- /**
- * @param $action
- */
- private function handleIfOutlinkAction($action)
- {
- if ($action['type'] != 'outlink') {
- return;
- }
- $this->profile['totalOutlinks']++;
- }
-
- /**
- * @param $action
- */
- private function handleIfPageViewAction($action)
- {
- if ($action['type'] != 'action') {
- return;
- }
- $this->profile['totalPageViews']++;
- }
-
- private function handleIfGoalAction($action)
- {
- if ($action['type'] != 'goal') {
- return;
- }
- $idGoal = $action['goalId'];
- $idGoalKey = 'idgoal=' . $idGoal;
-
- if (!isset($this->profile['totalConversionsByGoal'][$idGoalKey])) {
- $this->profile['totalConversionsByGoal'][$idGoalKey] = 0;
- }
- ++$this->profile['totalConversionsByGoal'][$idGoalKey];
-
- if (!empty($action['revenue'])) {
- if (!isset($this->profile['totalRevenueByGoal'][$idGoalKey])) {
- $this->profile['totalRevenueByGoal'][$idGoalKey] = 0;
- }
- $this->profile['totalRevenueByGoal'][$idGoalKey] += $action['revenue'];
- }
- }
-
- private function handleIfSiteSearchAction($action)
- {
- if (!isset($action['siteSearchKeyword'])) {
- return;
- }
- $keyword = $action['siteSearchKeyword'];
-
- if (!isset($this->siteSearchKeywords[$keyword])) {
- $this->siteSearchKeywords[$keyword] = 0;
- ++$this->profile['totalSearches'];
- }
- ++$this->siteSearchKeywords[$keyword];
- }
-
- private function handleGeoLocation(DataTable\Row $visit)
- {
- // realtime map only checks for latitude
- $hasLatitude = $visit->getColumn('latitude') !== false;
- if ($hasLatitude) {
- $this->profile['hasLatLong'] = true;
- }
-
- $countryCode = $visit->getColumn('countryCode');
- if (!isset($this->countries[$countryCode])) {
- $this->countries[$countryCode] = 0;
- }
- ++$this->countries[$countryCode];
-
- $continentCode = $visit->getColumn('continentCode');
- if (!isset($this->continents[$continentCode])) {
- $this->continents[$continentCode] = 0;
- }
- ++$this->continents[$continentCode];
-
- if ($countryCode && !array_key_exists($countryCode, $this->cities)) {
- $this->cities[$countryCode] = array();
- }
- $city = $visit->getColumn('city');
- if (!empty($city)) {
- $this->cities[$countryCode][] = $city;
- }
- }
-
- private function handleSiteSearches()
- {
- // sort by visit/action
- arsort($this->siteSearchKeywords);
-
- foreach ($this->siteSearchKeywords as $keyword => $searchCount) {
- $this->profile['searches'][] = array('keyword' => $keyword,
- 'searches' => $searchCount);
- }
- }
-
- private function handleGeoLocationContinents()
- {
- // sort by visit/action
- asort($this->continents);
- foreach ($this->continents as $continentCode => $nbVisits) {
- $this->profile['continents'][] = array('continent' => $continentCode,
- 'nb_visits' => $nbVisits,
- 'prettyName' => \Piwik\Plugins\UserCountry\continentTranslate($continentCode));
- }
- }
-
- private function handleGeoLocationCountries()
- {
- // sort by visit/action
- asort($this->countries);
-
- // transform country/continents/search keywords into something that will look good in XML
- $this->profile['countries'] = $this->profile['continents'] = $this->profile['searches'] = array();
-
- foreach ($this->countries as $countryCode => $nbVisits) {
-
- $countryInfo = array('country' => $countryCode,
- 'nb_visits' => $nbVisits,
- 'flag' => \Piwik\Plugins\UserCountry\getFlagFromCode($countryCode),
- 'prettyName' => \Piwik\Plugins\UserCountry\countryTranslate($countryCode));
- if (!empty($this->cities[$countryCode])) {
- $countryInfo['cities'] = array_unique($this->cities[$countryCode]);
- }
- $this->profile['countries'][] = $countryInfo;
- }
- }
-
- private function initVisitorProfile()
- {
- $this->profile['totalVisits'] = 0;
- $this->profile['totalVisitDuration'] = 0;
- $this->profile['totalActions'] = 0;
- $this->profile['totalEvents'] = 0;
- $this->profile['totalOutlinks'] = 0;
- $this->profile['totalDownloads'] = 0;
- $this->profile['totalSearches'] = 0;
- $this->profile['totalPageViews'] = 0;
- $this->profile['totalPageViewsWithTiming'] = 0;
- $this->profile['totalGoalConversions'] = 0;
- $this->profile['totalConversionsByGoal'] = array();
- $this->profile['hasLatLong'] = false;
-
- if ($this->isEcommerceEnabled()) {
- $this->profile['totalEcommerceRevenue'] = 0;
- $this->profile['totalEcommerceConversions'] = 0;
- $this->profile['totalEcommerceItems'] = 0;
- $this->profile['totalAbandonedCarts'] = 0;
- $this->profile['totalAbandonedCartsRevenue'] = 0;
- $this->profile['totalAbandonedCartsItems'] = 0;
- }
- }
-
- private function handleAveragePageGenerationTime()
- {
- if ($this->profile['totalPageViewsWithTiming']) {
- $this->profile['averagePageGenerationTime'] =
- round($this->pageGenerationTimeTotal / (1000 * $this->profile['totalPageViewsWithTiming']), $precision = 3);
- }
- }
-
- private function handleIfPageGenerationTime($action)
- {
- if (isset($action['generationTimeMilliseconds'])) {
- $this->pageGenerationTimeTotal += $action['generationTimeMilliseconds'];
- ++$this->profile['totalPageViewsWithTiming'];
- }
- }
-
- /**
* @param DataTable $visits
- * @param $visitorId
- * @param $segment
+ * @param $visitorId
+ * @param $segment
*/
private function handleAdjacentVisitorIds(DataTable $visits, $visitorId, $segment)
{
// get visitor IDs that are adjacent to this one in log_visit
// TODO: make sure order of visitor ids is not changed if a returning visitor visits while the user is
// looking at the popup.
- $rows = $visits->getRows();
+ $rows = $visits->getRows();
$latestVisitTime = reset($rows)->getColumn('lastActionDateTime');
- $model = new Model();
- $this->profile['nextVisitorId'] = $model->queryAdjacentVisitorId($this->idSite, $visitorId, $latestVisitTime, $segment, $getNext = true);
- $this->profile['previousVisitorId'] = $model->queryAdjacentVisitorId($this->idSite, $visitorId, $latestVisitTime, $segment, $getNext = false);
- }
-
- /**
- * @param DataTable $visits
- */
- private function handleVisitsSummary(DataTable $visits)
- {
- $rows = $visits->getRows();
- $this->profile['firstVisit'] = $this->getVisitorProfileVisitSummary(end($rows));
- $this->profile['lastVisit'] = $this->getVisitorProfileVisitSummary(reset($rows));
- $this->profile['visitsAggregated'] = count($rows);
+ $model = new Model();
+ $this->profile['nextVisitorId'] = $model->queryAdjacentVisitorId($this->idSite, $visitorId,
+ $latestVisitTime, $segment, $getNext = true);
+ $this->profile['previousVisitorId'] = $model->queryAdjacentVisitorId($this->idSite, $visitorId,
+ $latestVisitTime, $segment, $getNext = false);
}
} \ No newline at end of file
diff --git a/plugins/Live/images/avatar_frame.png b/plugins/Live/images/avatar_frame.png
deleted file mode 100644
index 23eccfd5fb..0000000000
--- a/plugins/Live/images/avatar_frame.png
+++ /dev/null
Binary files differ
diff --git a/plugins/Live/images/paperclip.png b/plugins/Live/images/paperclip.png
deleted file mode 100644
index b38d33caa1..0000000000
--- a/plugins/Live/images/paperclip.png
+++ /dev/null
Binary files differ
diff --git a/plugins/Live/images/visitor_profile_close.png b/plugins/Live/images/visitor_profile_close.png
deleted file mode 100644
index ae132b7b2c..0000000000
--- a/plugins/Live/images/visitor_profile_close.png
+++ /dev/null
Binary files differ
diff --git a/plugins/Live/images/visitor_profile_gradient.png b/plugins/Live/images/visitor_profile_gradient.png
deleted file mode 100644
index ac5068b54d..0000000000
--- a/plugins/Live/images/visitor_profile_gradient.png
+++ /dev/null
Binary files differ
diff --git a/plugins/Live/javascripts/SegmentedVisitorLog.js b/plugins/Live/javascripts/SegmentedVisitorLog.js
index 1f3581423b..b831fa1a9a 100644
--- a/plugins/Live/javascripts/SegmentedVisitorLog.js
+++ b/plugins/Live/javascripts/SegmentedVisitorLog.js
@@ -3,7 +3,7 @@ var SegmentedVisitorLog = function() {
function getDataTableFromApiMethod(apiMethod)
{
var div = $(require('piwik/UI').DataTable.getDataTableByReport(apiMethod));
- if (div.size() > 0 && div.data('uiControlObject')) {
+ if (div.length && div.data('uiControlObject')) {
return div.data('uiControlObject');
}
}
@@ -107,7 +107,7 @@ var SegmentedVisitorLog = function() {
var title = box.find('h2[piwik-enriched-headline]');
var defaultTitle = title.text();
- if (title.size() > 0) {
+ if (title.length) {
title.remove();
}
diff --git a/plugins/Live/javascripts/rowaction.js b/plugins/Live/javascripts/rowaction.js
index c01aa4e7c8..473b774609 100644
--- a/plugins/Live/javascripts/rowaction.js
+++ b/plugins/Live/javascripts/rowaction.js
@@ -21,7 +21,7 @@
function getDataTableFromApiMethod(apiMethod)
{
var div = $(require('piwik/UI').DataTable.getDataTableByReport(apiMethod));
- if (div.size() > 0 && div.data('uiControlObject')) {
+ if (div.length && div.data('uiControlObject')) {
return div.data('uiControlObject');
}
}
diff --git a/plugins/Live/javascripts/visitorLog.js b/plugins/Live/javascripts/visitorLog.js
index 74393f7ff7..6e66583ae2 100644
--- a/plugins/Live/javascripts/visitorLog.js
+++ b/plugins/Live/javascripts/visitorLog.js
@@ -63,6 +63,10 @@
show: false,
hide: false,
tooltipClass: 'small',
+ content: function() {
+ var title = $(this).attr('title');
+ return $('<a>').text( title ).html().replace(/\n/g, '<br />');
+ },
open: function () {
tooltipIsOpened = true;
},
@@ -72,28 +76,27 @@
});
});
- // Replace duplicated page views by a NX count instead of using too much vertical space
+ // show refresh icon for duplicate page views in a row
$("ol.visitorLog").each(function () {
var prevelement;
var prevhtml;
- var counter = 0;
+ var counter = 0, duplicateCounter = 0;
$(this).find("> li").each(function () {
counter++;
$(this).val(counter);
var current = $(this).html();
+
if (current == prevhtml) {
- var repeat = prevelement.find(".repeat");
- if (repeat.length) {
- repeat.html((parseInt(repeat.html()) + 1) + "x");
- } else {
- prevelement.find('>div').prepend($("<span>2x</span>").attr({'class': 'repeat', 'title': _pk_translate('Live_PageRefreshed')}));
- }
- $(this).hide();
+ $(this).find('>div').prepend($("<span>"+(duplicateCounter+2)+"</span>").attr({'class': 'repeat icon-refresh', 'title': _pk_translate('Live_PageRefreshed')}));
+ duplicateCounter++;
+
} else {
- prevhtml = current;
- prevelement = $(this);
+ duplicateCounter = 0;
}
+ prevhtml = current;
+ prevelement = $(this);
+
var $this = $(this);
var tooltipIsOpened = false;
@@ -104,21 +107,22 @@
}
});
- $this.tooltip({
- track: true,
- show: false,
- hide: false,
- content: function() {
- var title = $(this).attr('title');
- return $('<a>').text( title ).html().replace(/\n/g, '<br />');
- },
- tooltipClass: 'small',
- open: function() { tooltipIsOpened = true; },
- close: function() { tooltipIsOpened = false; }
- });
});
});
+ $("ol.visitorLog > li").tooltip({
+ track: true,
+ show: false,
+ hide: false,
+ content: function() {
+ var title = $(this).attr('title');
+ return $('<a>').text( title ).html().replace(/\n/g, '<br />');
+ },
+ tooltipClass: 'small',
+ open: function() { tooltipIsOpened = true; },
+ close: function() { tooltipIsOpened = false; }
+ });
+
// launch visitor profile on visitor profile link click
this.$element.on('click', '.visitor-log-visitor-profile-link', function (e) {
e.preventDefault();
diff --git a/plugins/Live/javascripts/visitorProfile.js b/plugins/Live/javascripts/visitorProfile.js
index cbe05e0ec7..148ec3b731 100644
--- a/plugins/Live/javascripts/visitorProfile.js
+++ b/plugins/Live/javascripts/visitorProfile.js
@@ -62,9 +62,6 @@
_setupControl: function () {
// focus the popup so it will accept key events
this.$element.focus();
-
- // highlight the first visit
- $('.visitor-profile-visits>li:first-child', this.$element).addClass('visitor-profile-current-visit');
},
_bindEventCallbacks: function () {
@@ -80,20 +77,30 @@
return false;
});
- $element.on('click', '.visitor-profile-more-info>a', function (e) {
+ $element.on('click', '.visitor-profile-toggle-actions', function (e) {
e.preventDefault();
- self._loadMoreVisits();
+ $(this).toggleClass('minimized');
+ if ($(this).hasClass('minimized')) {
+ $('.visitor-profile-actions', $element).slideUp();
+ } else {
+ $('.visitor-profile-actions', $element).slideDown();
+ }
return false;
});
- $element.on('click', '.visitor-profile-see-more-cvars>a', function (e) {
+ $element.on('click', '.visitor-profile-more-info>a', function (e) {
e.preventDefault();
- $('.visitor-profile-extra-cvars', $element).slideToggle();
+ self._loadMoreVisits();
return false;
});
- $element.on('click', '.visitor-profile-visit-title-row', function () {
- self._loadIndividualVisitDetails($('h2', this));
+ $element.on('click', '.visitor-profile-visit-title', function () {
+ $('.visitor-profile-visit-details-extended', $(this).parents('li')).slideToggle();
+ });
+
+ $element.on('click', '.visitor-profile-show-actions', function () {
+ $('.visitor-profile-actions', $(this).parents('li')).slideToggle();
+ return false;
});
$element.on('click', '.visitor-profile-prev-visitor', function (e) {
@@ -140,10 +147,14 @@
});
$element.tooltip({
+ items: '[title],.visitorLogIconWithDetails',
track: true,
show: false,
hide: false,
content: function() {
+ if ($(this).hasClass('visitorLogIconWithDetails')) {
+ return $('<ul>').html($('ul', $(this)).html());
+ }
var title = $(this).attr('title');
return $('<a>').text( title ).html().replace(/\n/g, '<br />');
},
@@ -207,7 +218,8 @@
period: '',
date: '',
visitorId: $element.attr('data-visitor-id'),
- filter_offset: $('.visitor-profile-visits>li', $element).length
+ filter_offset: $('.visitor-profile-visits>li', $element).length,
+ start_number: $('.visitor-profile-visits>li:last', $element).data('number') - 1
}, 'GET');
ajax.setCallback(function (response) {
if (response == "") { // no more visits left
@@ -233,37 +245,6 @@
$('.visitor-profile-more-info', this.$element).html(noMoreSpan);
},
- _loadIndividualVisitDetails: function ($visitElement) {
- var self = this,
- $element = this.$element,
- visitId = $visitElement.attr('data-idvisit');
-
- $('.visitor-profile-avatar .loadingPiwik', $element).css('display', 'inline-block');
- piwikHelper.lazyScrollTo($('.visitor-profile-avatar', $element)[0], 400);
-
- var ajax = new ajaxHelper();
- ajax.addParams({
- module: 'Live',
- action: 'getSingleVisitSummary',
- visitId: visitId,
- idSite: piwik.idSite
- }, 'GET');
- ajax.setCallback(function (response) {
- $('.visitor-profile-avatar .loadingPiwik', $element).hide();
-
- $('.visitor-profile-current-visit', $element).removeClass('visitor-profile-current-visit');
- $visitElement.closest('li').addClass('visitor-profile-current-visit');
-
- var $latestVisitSection = $('.visitor-profile-latest-visit', $element);
- $latestVisitSection
- .html(response)
- .parent()
- .effect('highlight', {color: '#FFFFCB'}, 1200);
- });
- ajax.setFormat('html');
- ajax.send();
- },
-
_loadPreviousVisitor: function () {
this._gotoAdjacentVisitor(this.$element.attr('data-prev-visitor'));
},
diff --git a/plugins/Live/lang/cs.json b/plugins/Live/lang/cs.json
index 4c5d166fcf..b9a6a393f0 100644
--- a/plugins/Live/lang/cs.json
+++ b/plugins/Live/lang/cs.json
@@ -1,11 +1,9 @@
{
"Live": {
- "AbandonedCartSummary": "%1$s opuštěných košíků%2$s a %3$s opuštěných položek%4$s celkem za %5$s%6$s.",
"AveragePageGenerationTime": "Pro tohoto návštěvníka se každá stránka načetla v průměru za %1$s.",
"CalculatedOverNPageViews": "Vypočítáno na základě %1$s posledních zobrazení stránek tohoto návštěvníka.",
"ClickToViewMoreAboutVisit": "Klikněte pro zobrazení více informací o této návštěvě",
"ConvertedNGoals": "Proměněno %s cílů",
- "EcommerceSummaryConversions": "%1$s objednávek%2$s celkem za %3$s%4$s, zakoupeno %5$s položek%6$s.",
"FirstVisit": "První návštěva",
"GoalType": "Typ",
"HideMap": "skrýt mapu",
diff --git a/plugins/Live/lang/de.json b/plugins/Live/lang/de.json
index 644b6d1d47..df57524c50 100644
--- a/plugins/Live/lang/de.json
+++ b/plugins/Live/lang/de.json
@@ -1,11 +1,9 @@
{
"Live": {
- "AbandonedCartSummary": "%1$s verlassene Warenkörbe%2$s und %3$s verlassene Produkte%4$s im Gesamtwert von %5$s%6$s.",
"AveragePageGenerationTime": "Jede Seite benötigte im Durchschnitt %1$s um bei diesem Besucher zu laden.",
"CalculatedOverNPageViews": "Berechnet mithilfe der letzten %1$s Seitenansichten dieses Besuchers.",
"ClickToViewMoreAboutVisit": "Klicken Sie um nähere Informationen zu diesem Besuch zu sehen",
"ConvertedNGoals": "%s Ziele konvertiert",
- "EcommerceSummaryConversions": "%1$s Bestellungen%2$s für insgesamt %3$s%4$s, %5$s bestellte Produkte%6$s.",
"FirstVisit": "Erster Besuch",
"GoalType": "Typ",
"HideMap": "Karte ausblenden",
@@ -13,7 +11,7 @@
"LastHours": "Letzte %s Stunden",
"LastMinutes": "Letzte %s Minuten",
"LastVisit": "Letzter Besuch",
- "LinkVisitorLog": "detailiertes Besucher-Log anzeigen",
+ "LinkVisitorLog": "detailliertes Besucher-Log anzeigen",
"LoadMoreVisits": "Mehr Besuche laden",
"MorePagesNotDisplayed": "weitere Seiten von diesem Besucher werden nicht angezeigt",
"NbVisitor": "1 Besucher",
@@ -40,7 +38,7 @@
"RowActionTooltipDefault": "Zeige Besucher-Log aufgeteilt durch diese Zeile",
"RowActionTooltipWithDimension": "Zeige Besucher-Log segmentiert durch %s",
"RowActionTooltipTitle": "Log segmentierter Besucher öffnen",
- "SegmentedVisitorLogTitle": "Besucher-Log zeigt Besuche bei denen gilt: %1$s ist \"%2$s\"",
+ "SegmentedVisitorLogTitle": "Besucher-Log zeigt Besuche, bei denen gilt: %1$s ist \"%2$s\"",
"OnClickPause": "%s ist gestartet. Klicken Sie um zu pausieren.",
"OnClickStart": "%s ist gestoppt. Klicken Sie um zu starten."
}
diff --git a/plugins/Live/lang/el.json b/plugins/Live/lang/el.json
index 88c5184607..3dad4ed438 100644
--- a/plugins/Live/lang/el.json
+++ b/plugins/Live/lang/el.json
@@ -1,11 +1,9 @@
{
"Live": {
- "AbandonedCartSummary": "%1$s εγκαταλελειμμένα καλάθια αγορών%2$s και %3$s εγκαταλελειμμένα αντικείμενα%4$s με συνολική αξία %5$s%6$s.",
"AveragePageGenerationTime": "Κάθε σελίδα χρειάστηκε κατά μέσο όρο %1$s για να φορτωθεί στον επισκέπτη.",
"CalculatedOverNPageViews": "Έγινε υπολογισμός βάση των τελευταίων %1$s αναγνώσεων σελίδων του επισκέπτη.",
"ClickToViewMoreAboutVisit": "Κάντε κλικ για να δείτε περισσότερες λεπτομέρειες γύρω από την επίσκεψη",
"ConvertedNGoals": "Μετατράπηκαν %s Στόχοι",
- "EcommerceSummaryConversions": "%1$s αγορές%2$s για ένα σύνολο %3$s%4$s, με αγορασμένα %5$s αντικείμενα%6$s.",
"FirstVisit": "Πρώτη επίσκεψη",
"GoalType": "Τύπος",
"HideMap": "απόκρυψη χάρτη",
@@ -26,9 +24,13 @@
"RealTimeVisitorCount": "Αριθμός επισκεπτών σε πραγματικό χρόνο",
"Referrer_URL": "Διεύθυνση URL παραπομπού",
"ShowMap": "εμφάνιση χάρτη",
+ "ActionsAndDuration": "%1$s ενέργειες σε %2$s",
"SimpleRealTimeWidget_Message": "%1$s και %2$s στα τελευταία %3$s",
"ViewVisitorProfile": "Εμφάνιση του προφίλ επισκέπτη",
"VisitedPages": "Σελίδες που έχουν επισκεφθεί",
+ "RevisitedPages": "Σελίδες που αναγνώστηκαν παραπάνω από μία φορές",
+ "ToggleActions": "Εναλλαγή της ορατότητας όλων των ενεργειών",
+ "TopVisitedPages": "Κορυφαίες σε επισκεψιμότητα σελίδες",
"VisitorLog": "Καταγραφή Επισκεπτών",
"VisitorLogDocumentation": "Ο πίνακας εμφανίζει τις τελευταίες επισκέψεις στο επιλεγμένο εύρος ημερομηνιών. Μπορείτε να δείτε την τελευταία ημερομηνία επίσκεψης ενός επισκέπτη πηγαίνοντας με το ποντίκι πάνω από την ημερομηνία μιας επίσκεψης. %1$s Αν το εύρος ημερομηνιών περιλαμβάνει και τη σημερινή μέρα, μπορείτε να δείτε τους επισκέπτες σε πραγματικό χρόνο! %2$s Τα δεδομένα που εμφανίζονται είναι πάντα σε πραγματικό χρόνο, ανεξάρτητα από το αν και πόσο συχνά χρησιμοποιείτε την αυτοματοποιημένη εργασία αρχειοθέτησης του cron.",
"VisitorProfile": "Προφίλ επισκέπτη",
diff --git a/plugins/Live/lang/en.json b/plugins/Live/lang/en.json
index dafcf66a92..5ce4712ca3 100644
--- a/plugins/Live/lang/en.json
+++ b/plugins/Live/lang/en.json
@@ -24,9 +24,13 @@
"RealTimeVisitorCount": "Real Time Visitor Count",
"Referrer_URL": "Referrer URL",
"ShowMap": "show map",
+ "ActionsAndDuration": "%1$s actions in %2$s",
"SimpleRealTimeWidget_Message": "%1$s and %2$s in the last %3$s",
"ViewVisitorProfile": "View visitor profile",
"VisitedPages": "Visited pages",
+ "RevisitedPages": "Pages viewed more than once",
+ "ToggleActions": "Toggle visibility of all actions",
+ "TopVisitedPages": "Top visited pages",
"VisitorLog": "Visitor Log",
"VisitorLogDocumentation": "This table shows the latest visits within the selected date range. You can see when a visitor's last visit occurred by hovering over the date of a visit. %1$s If the date range includes today, you can see your visitors real time! %2$s The data displayed here is always live, regardless of whether and how often you are using the archiving cron job.",
"VisitorProfile": "Visitor profile",
diff --git a/plugins/Live/lang/fr.json b/plugins/Live/lang/fr.json
index 4cdf25a9dc..f710cdf5f8 100644
--- a/plugins/Live/lang/fr.json
+++ b/plugins/Live/lang/fr.json
@@ -1,11 +1,9 @@
{
"Live": {
- "AbandonedCartSummary": "%1$s caddies abandonnés%2$s et %3$s articles abandonnés%4$s pour une valeur totale de %5$s%6$s.",
"AveragePageGenerationTime": "Chaque page a pris une moyenne de %1$s à charger pour ce visiteur.",
"CalculatedOverNPageViews": "Calculé sur la base des %1$s dernières pages vues par ce visiteur.",
"ClickToViewMoreAboutVisit": "Cliquez pour afficher plus d'informations à propos de cette visite",
"ConvertedNGoals": "Conversion de %s objectifs",
- "EcommerceSummaryConversions": "%1$s commandes%2$s sur un total de %3$s%4$s, comptaient %5$s articles%6$s.",
"FirstVisit": "Première visite",
"GoalType": "Type",
"HideMap": "Cacher la carte",
@@ -35,7 +33,7 @@
"VisitorsInRealTime": "Visiteurs en temps réel",
"VisitorsLastVisit": "La dernière visite du visiteur était il y a %s jours.",
"VisitsFrom": "%1$s%2$s visites%3$s de",
- "VisitSummary": "A passé un total de %1$s%2$s sur le site web%3$s, et %4$saffiché %5$s pages en %6$s visites.%7$s",
+ "VisitSummary": "A passé un total de %1$s%2$s sur le site web%3$s, et affiché %4$s pages%5$s en %6$s visites%7$s.",
"VisitSummaryWithActionDetails": "A passé un total de %1$s%2$s sur le site web%3$s, et effectué %4$s actions %5$s (%6$s) en %7$s visites%8$s.",
"RowActionTooltipDefault": "Afficher le logs des visiteurs segmenté par cette rangée",
"RowActionTooltipWithDimension": "Afficher le log des visiteurs segmenté en fonction de %s",
diff --git a/plugins/Live/lang/id.json b/plugins/Live/lang/id.json
index 06a528cba0..748ddfdf4c 100644
--- a/plugins/Live/lang/id.json
+++ b/plugins/Live/lang/id.json
@@ -1,19 +1,30 @@
{
"Live": {
+ "AveragePageGenerationTime": "Setiap halaman rata-rata memakan %1$s membuat untuk pengguna ini.",
+ "ClickToViewMoreAboutVisit": "Klik untuk melihat informasi lebih lanjut tentang kunjungan ini",
+ "FirstVisit": "Kunjungan pertama",
"GoalType": "Jenis",
+ "HideMap": "sembunyikan peta",
"KeywordRankedOnSearchResultForThisVisitor": "Kata kunci %1$s menuduki peringkat %2$s dalam halaman pencarian %3$s untuk pengunjung ini",
"LastHours": "Jam %s terakhir",
"LastMinutes": "Menit %s terakhir",
+ "LastVisit": "Kunjungan terakhir",
"LinkVisitorLog": "Tampilkan catatan pengunjung lengkap",
+ "LoadMoreVisits": "Muat kunjungan lebih banyak",
"MorePagesNotDisplayed": "halaman lain untuk pengguna tersebut tak dapat ditampilkan",
"NbVisitor": "1 pengunjung",
"NbVisitors": "%s pengunjung",
+ "NextVisitor": "Pengunjung selanjutnya",
"PageRefreshed": "Jumlah kali halaman ini ditampilkan \/ disegarkan berurutan.",
+ "PreviousVisitor": "Pengunjung sebelumnya",
"RealTimeVisitorCount": "Jumlah Pengunjung Waktu Nyata",
"Referrer_URL": "URL Pengarah",
+ "ShowMap": "tampilkan peta",
"SimpleRealTimeWidget_Message": "%1$s dan %2$s dalam %3$s terakhir.",
+ "ViewVisitorProfile": "Lihat profil pengunjung",
"VisitorLog": "Catatan Pengunjung",
"VisitorLogDocumentation": "Tabel berikut menampilkan kunjungan terakhir selama rentang tanggal yang dipilih.%1$s Bila hari ini termasuk dalam rentang tanggal, Anda dapat melihat pengunjung Anda dalam waktu nyata! %2$s Data yang ditampilkan di sini selalu ditampilkan secara langsung, tidak terpengaruh bagaimana Anda mengatur pengarsipan di tugas Cron.",
+ "VisitorProfile": "Profil pengunjung",
"VisitorsInRealTime": "Pengunjung dalam Waktu Nyata",
"VisitorsLastVisit": "Pengunjung ini telah berkunjung %s hari yang lalu."
}
diff --git a/plugins/Live/lang/it.json b/plugins/Live/lang/it.json
index a2ac489301..7e021b4991 100644
--- a/plugins/Live/lang/it.json
+++ b/plugins/Live/lang/it.json
@@ -1,11 +1,9 @@
{
"Live": {
- "AbandonedCartSummary": "%1$s carrelli abbandonati%2$s e %3$s articoli abbandonati%4$s per un valore complessivo di %5$s%6$s.",
"AveragePageGenerationTime": "Ciascuna pagina ha richiesto una media di %1$s per essere caricata per questo visitatore.",
"CalculatedOverNPageViews": "Calcolate usando le ultime %1$s pagine visualizzate da questo visitatore.",
"ClickToViewMoreAboutVisit": "Clicca per vedere ulteriori informazioni su questa visita",
"ConvertedNGoals": "%s Obiettivi Convertiti",
- "EcommerceSummaryConversions": "%1$s ordini%2$s per un totale di %3$s%4$s, acquistati %5$s articoli%6$s.",
"FirstVisit": "Prima visita",
"GoalType": "Tipo",
"HideMap": "nascondi mappa",
diff --git a/plugins/Live/lang/ja.json b/plugins/Live/lang/ja.json
index d00df2fa51..2d0d4aaf26 100644
--- a/plugins/Live/lang/ja.json
+++ b/plugins/Live/lang/ja.json
@@ -4,7 +4,6 @@
"CalculatedOverNPageViews": "このビジターの最終 %1$s ページビューを利用して計算",
"ClickToViewMoreAboutVisit": "この訪問に関する詳細情報を見るには、クリックしてください。",
"ConvertedNGoals": "変換された %s 目標",
- "EcommerceSummaryConversions": "%1$s 件の注文%2$s は合計 %3$s%4$s 件、%5$s 件の商品%6$s を購入しました。",
"FirstVisit": "最初の訪問",
"GoalType": "タイプ",
"HideMap": "隠れたマップ",
@@ -34,6 +33,8 @@
"VisitorsInRealTime": "リアルタイムのビジター",
"VisitorsLastVisit": "このビジターの最新のビジットは %s 日前です。",
"VisitsFrom": "から %1$s%2$s が %3$s を訪問",
+ "VisitSummary": "ウェブサイト%3$sに合計%1$s%2$sを費やし、%6$s 回の訪問%7$sで %4$sページ%5$sを閲覧しました。",
+ "VisitSummaryWithActionDetails": "ウェブサイト%3$sに合計 %1$s%2$s を費やし、%7$s 回の訪問%8$sで %4$s 回のアクション%5$s (%6$s) を実行しました。",
"RowActionTooltipDefault": "この行で分割されたビジターログを表示",
"RowActionTooltipWithDimension": "この %s で分割されたビジターログを表示",
"RowActionTooltipTitle": "セグメントビジターログを表示",
diff --git a/plugins/Live/lang/nl.json b/plugins/Live/lang/nl.json
index a4793bcd92..cfc78a7822 100644
--- a/plugins/Live/lang/nl.json
+++ b/plugins/Live/lang/nl.json
@@ -33,8 +33,8 @@
"VisitorsInRealTime": "Bezoekers in realtime",
"VisitorsLastVisit": "Het laatste bezoek van deze bezoekers was %s dagen geleden.",
"VisitsFrom": "%1$s%2$s bezoeken%3$s van",
- "VisitSummary": "Bestede in totaal %1$s%2$s op de website %3$s, en bekeek %4$s pagina's %5$s in %6$s bezoeken %7$s.",
- "VisitSummaryWithActionDetails": "Bestede in totaal %1$s%2$s op de website%3$s, en verrichte %4$s acties%5$s (%6$s) in %7$s bezoeken%8$s.",
+ "VisitSummary": "Besteedde in totaal %1$s%2$s op de website %3$s, en bekeek %4$s pagina's %5$s in %6$s bezoeken %7$s.",
+ "VisitSummaryWithActionDetails": "Besteedde in totaal %1$s%2$s op de website%3$s, en verrichte %4$s acties%5$s (%6$s) in %7$s bezoeken%8$s.",
"RowActionTooltipDefault": "Toon bezoekers log verdeeld volgens deze rij",
"RowActionTooltipWithDimension": "Toon bezoekers log verdeeld volgens %s",
"RowActionTooltipTitle": "Open gesegmenteerd Bezoekerslogboek",
diff --git a/plugins/Live/lang/pl.json b/plugins/Live/lang/pl.json
index 0acd83d60d..451be42f14 100644
--- a/plugins/Live/lang/pl.json
+++ b/plugins/Live/lang/pl.json
@@ -1,28 +1,49 @@
{
"Live": {
+ "AveragePageGenerationTime": "Średni czas ładowania podstron dla tego oglądającego wyniósł:%1$s.",
+ "CalculatedOverNPageViews": "Obliczono biorąc pod uwagę ostatnie %1$s wyświetleń strony.",
"ClickToViewMoreAboutVisit": "Kliknij po więcej informacji o tej wizycie",
+ "ConvertedNGoals": "%s konwersji celów",
"FirstVisit": "Pierwsza wizyta",
"GoalType": "Rodzaj",
"HideMap": "ukryj mapę",
- "KeywordRankedOnSearchResultForThisVisitor": "Słowo kluczowe %1$s zdobyło pozycję %2$s w %3$s wynikach wyszukania strony dla tego odwiedzającego",
- "LastHours": "w czasie ostatnich %s godzin",
- "LastMinutes": "w czasie ostatnich %s minut",
+ "KeywordRankedOnSearchResultForThisVisitor": "Słowo kluczowe %1$s zdobyło pozycję %2$s w %3$s wynikach wyszukiwania strony dla tego odwiedzającego",
+ "LastHours": "Ostatnie %s godziny",
+ "LastMinutes": "Ostatnie %s minut",
"LastVisit": "Ostatnia wizyta",
- "LinkVisitorLog": "Zobacz szczegółowy log twoich odwiedzających",
+ "LinkVisitorLog": "Zobacz szczegółowy log odwiedzających",
"LoadMoreVisits": "Załaduj więcej odwiedzin",
+ "MorePagesNotDisplayed": "pozostałe podstrony dla tego oglądającego nie zostaną wyświetlone",
"NbVisitor": "1 gość",
"NbVisitors": "%s gości",
"NextVisitor": "Następny gość",
- "PageRefreshed": "Ile razy ta strona została oglądana\/ odświeżana z rzędu.",
+ "NoMoreVisits": "Nie było więcej wizyt tego odwiedzającego.",
+ "PageRefreshed": "Liczba odsłon \/ odświeżeń tej strony z rzędu.",
+ "PluginDescription": "Dostarcza podgląd \"na żywo\" Dziennika odwiedzajacych i pozwala \"na żywo\" śledzić odwiedzających w widżecie na Pulpicie. Wtyczka pozwala również oglądać profil dowolnego odwiedzającego.",
"PreviousVisitor": "Poprzedni odwiedzający",
- "Referrer_URL": "Przysyłający adres URL",
- "ShowMap": "Pokaż mapę",
+ "RealTimeVisitorCount": "Licznik odwiedzin aktualizowany w czasie rzeczywistym",
+ "Referrer_URL": "Adres URL odnośnika",
+ "ShowMap": "pokaż mapę",
+ "ActionsAndDuration": "%1$s akcji w %2$s",
"SimpleRealTimeWidget_Message": "%1$s %2$s na %3$s ostatni",
"ViewVisitorProfile": "Zobacz profil odwiedzającego",
"VisitedPages": "Odwiedzone strony",
+ "RevisitedPages": "Strony wyświetlone więcej niż raz",
+ "ToggleActions": "Przełącz widoczność wszystkich akcji",
+ "TopVisitedPages": "Najczęściej odwiedzane strony",
"VisitorLog": "Log odwiedzających",
+ "VisitorLogDocumentation": "Ta tabela prezentuje ostatnie wizyty w wybranym przedziale czasowym. Przesuwając wskaźnik nad wybraną datę wizyty, możesz określić czas ostatniej wizyty odwiedzającego. %1$s Jeśli przedział zawiera dzień dzisiejszy, możesz obserwować odwiedzających w czasie rzeczywistym! %2$s Dane tu wyświetlane są zawsze na żywo, bez względu na to jak często używasz cron'a archiwizującego.",
"VisitorProfile": "Profil odwiedzającego",
"VisitorsInRealTime": "Odwiedzający w czasie rzeczywistym",
- "VisitorsLastVisit": "Ostatnia wizyta tego gościa była %s dni temu."
+ "VisitorsLastVisit": "Ostatnia wizyta tego gościa była %s dni temu.",
+ "VisitsFrom": "%1$s%2$s wizyt%3$s z",
+ "VisitSummary": "Spędził łącznie %1$s%2$s w serwisie%3$s i obejrzał %4$s podstron%5$s w trakcie %6$s wizyt%7$s.",
+ "VisitSummaryWithActionDetails": "Spędził łącznie %1$s%2$s w serwisie%3$s i przeprowadził %4$s działań%5$s (%6$s) w trakcie %7$s wizyt%8$s.",
+ "RowActionTooltipDefault": "Pokaż Log Odwiedzających pogrupowany według tego rzędu",
+ "RowActionTooltipWithDimension": "Wyświetl Log Odwiedzających pogrupowany według %s",
+ "RowActionTooltipTitle": "Otwórz pogrupowany Log Odwiedzających",
+ "SegmentedVisitorLogTitle": "Log Odwiedzających pokazuje wizyty gdzie %1$s jest \"%2$s\"",
+ "OnClickPause": "%s został uruchomiony. Kliknij aby zatrzymać.",
+ "OnClickStart": "%s jest zatrzymany. Kliknij aby uruchomić."
}
} \ No newline at end of file
diff --git a/plugins/Live/lang/pt-br.json b/plugins/Live/lang/pt-br.json
index 7ff29e747e..9c16441241 100644
--- a/plugins/Live/lang/pt-br.json
+++ b/plugins/Live/lang/pt-br.json
@@ -1,11 +1,9 @@
{
"Live": {
- "AbandonedCartSummary": "%1$s carrinhos abandonados%2$s e %3$s itens abandonados%4$s valendo um total de %5$s%6$s.",
"AveragePageGenerationTime": "Cada página levou em média %1$s para carregar para este visitante.",
"CalculatedOverNPageViews": "Calculado usando as últimas %1$s exibições de página deste visitante.",
"ClickToViewMoreAboutVisit": "Clique para ver mais informações sobre esta visita",
"ConvertedNGoals": "%s Metas convertidas",
- "EcommerceSummaryConversions": "%1$s pedidos%2$s de um total de %3$s%4$s, comprados %5$s itens%6$s.",
"FirstVisit": "Primeiro visitante",
"GoalType": "Tipo",
"HideMap": "esconder mapa",
diff --git a/plugins/Live/lang/ru.json b/plugins/Live/lang/ru.json
index 266261bbe6..d5e1b6deb4 100644
--- a/plugins/Live/lang/ru.json
+++ b/plugins/Live/lang/ru.json
@@ -1,11 +1,9 @@
{
"Live": {
- "AbandonedCartSummary": "%1$s заброшенных корзин %2$s и %3$s заброшенных товаров%4$s в сумме стоящих %5$s%6$s.",
"AveragePageGenerationTime": "В среднем требовалось %1$s у этого посетителя для полной загрузки страницы.",
"CalculatedOverNPageViews": "Рассчитано на основе этого посетителя с %1$s просмотром страниц(ы).",
"ClickToViewMoreAboutVisit": "Посмотреть более подробную информацию об этом визите",
"ConvertedNGoals": "Целей достигнуто: %s",
- "EcommerceSummaryConversions": "%1$s заказов%2$s в общей сложности %3$s%4$s, куплено %5$s товаров%6$s.",
"FirstVisit": "Первое посещение",
"GoalType": "Тип",
"HideMap": "скрыть карту",
@@ -38,6 +36,7 @@
"VisitSummary": "Провел в общей сложности %1$s%2$s на веб-сайте%3$s и просмотрел %4$s страниц%5$s за %6$s посещений%7$s.",
"VisitSummaryWithActionDetails": "Провел в общей сложности%1$s%2$s на веб-сайте%3$s и совершил %4$s действий%5$s (%6$s) за %7$s посещений%8$s.",
"RowActionTooltipDefault": "Показать журнал посетителей, сегментированный по этой строке",
+ "RowActionTooltipWithDimension": "Показать журнал посетителей, сегментированный по этому %s",
"RowActionTooltipTitle": "Открыть сегментированный журнал посетителей",
"SegmentedVisitorLogTitle": "Просмотр посещений где %1$s равно \"%2$s\"",
"OnClickPause": "%s началось. Нажмите, чтобы приостановить.",
diff --git a/plugins/Live/lang/sq.json b/plugins/Live/lang/sq.json
index be79abf477..610d48dedd 100644
--- a/plugins/Live/lang/sq.json
+++ b/plugins/Live/lang/sq.json
@@ -1,11 +1,9 @@
{
"Live": {
- "AbandonedCartSummary": "%1$s shporta të braktisura%2$s dhe %3$s artikuj të braktisur%4$s me vlerë gjithsej %5$s%6$s.",
"AveragePageGenerationTime": "Për këtë vizitor, çdo faqeje iu desh mesatarisht %1$s të ngarkohej.",
"CalculatedOverNPageViews": "E llogaritur duke përdorur %1$s parjet e fundit të faqeve nga ky vizitor.",
"ClickToViewMoreAboutVisit": "Klikoni që të shihni më tepër të dhëna rreth kësaj vizite",
"ConvertedNGoals": "U shndërruan %s Objektiva",
- "EcommerceSummaryConversions": "%1$s porosi%2$s për një tërësi prej %3$s%4$s, %5$s artikuj%6$s të blerë.",
"FirstVisit": "Vizita e parë",
"GoalType": "Lloj",
"HideMap": "fshihe hartën",
diff --git a/plugins/Live/lang/sr.json b/plugins/Live/lang/sr.json
index 3c34885612..2b30df7077 100644
--- a/plugins/Live/lang/sr.json
+++ b/plugins/Live/lang/sr.json
@@ -1,11 +1,9 @@
{
"Live": {
- "AbandonedCartSummary": "%1$s napuštenih koripi%2$s i %3$s napuštenih artikala%4$s ukupne vrednosti %5$s%6$s.",
"AveragePageGenerationTime": "Ovom korisniku je za svaku stranicu u proseku potrebno %1$s kako bi se učitala.",
"CalculatedOverNPageViews": "Izračunato na osnovu poslednjih %1$s prikaza stranica ovog korisnika",
"ClickToViewMoreAboutVisit": "Kliknite kako biste videli više informacija o ovoj poseti.",
"ConvertedNGoals": "Ispunjeno ciljeva: %s",
- "EcommerceSummaryConversions": "%1$s narudžbina%2$s od ukupno %3$s%4$s, naručeno %5$s artikala%6$s.",
"FirstVisit": "Prva poseta",
"GoalType": "Tip",
"HideMap": "sakrij mapu",
diff --git a/plugins/Live/lang/sv.json b/plugins/Live/lang/sv.json
index 7bd00416f4..a3d84ca5a9 100644
--- a/plugins/Live/lang/sv.json
+++ b/plugins/Live/lang/sv.json
@@ -1,11 +1,9 @@
{
"Live": {
- "AbandonedCartSummary": "%1$s övergivna varukorgar%2$s och %3$s övergivna varor%4$s värda totalt %5$s%6$s.",
"AveragePageGenerationTime": "Varje sida tog i genomsnitt %1$s att ladda för besökaren.",
"CalculatedOverNPageViews": "Beräknat på denna besöakrens senaste %1$s sidvisningar.",
"ClickToViewMoreAboutVisit": "Klicka för mer information om det här besöket",
"ConvertedNGoals": "Konverteringar %s Mål",
- "EcommerceSummaryConversions": "%1$s ordrar%2$s för totalt %3$s%4$s, handlade %5$s varor%6$s.",
"FirstVisit": "Första besöket",
"GoalType": "Sort",
"HideMap": "Dölj mapp",
diff --git a/plugins/Live/lang/uk.json b/plugins/Live/lang/uk.json
index 52137fc6c9..76417c8be3 100644
--- a/plugins/Live/lang/uk.json
+++ b/plugins/Live/lang/uk.json
@@ -1,11 +1,9 @@
{
"Live": {
- "AbandonedCartSummary": "%1$s кинутих кошиків%2$s та %3$s кинуті речей%4$s на загальну суму %5$s%6$s.",
"AveragePageGenerationTime": "В середньому потрібно %1$s у цього відвідувача для повного завантаження сторінки.",
"CalculatedOverNPageViews": "Розраховано на основі цього відвідувача з %1$s переглядом сторінки(ок).",
"ClickToViewMoreAboutVisit": "Подивитися більш детальну інформацію про цей візит",
"ConvertedNGoals": "Цілей досягнуто: %s",
- "EcommerceSummaryConversions": "%1$s замовлень%2$s в цілому %3$s%4$s, куплено %5$s предметів%6$s.",
"FirstVisit": "Перше відвідування",
"GoalType": "Тип",
"HideMap": "приховати карту",
diff --git a/plugins/Live/lang/zh-cn.json b/plugins/Live/lang/zh-cn.json
index 54e6ac56f1..db17472c40 100644
--- a/plugins/Live/lang/zh-cn.json
+++ b/plugins/Live/lang/zh-cn.json
@@ -31,6 +31,10 @@
"VisitorProfile": "访客资料",
"VisitorsInRealTime": "实时访客",
"VisitorsLastVisit": "此访客上次访问是%s天前。",
- "VisitsFrom": "%1$s%2$s 次访问%3$s 来自"
+ "VisitsFrom": "%1$s%2$s 次访问%3$s 来自",
+ "RowActionTooltipDefault": "用这行显示访客日志",
+ "RowActionTooltipWithDimension": "用%s显示访客日志。",
+ "OnClickPause": "%s已经开始。点击停止。",
+ "OnClickStart": "%s已经停止。点击开始。"
}
} \ No newline at end of file
diff --git a/plugins/Live/lang/zh-tw.json b/plugins/Live/lang/zh-tw.json
index c6e2cb49fd..5a7dc65d4e 100644
--- a/plugins/Live/lang/zh-tw.json
+++ b/plugins/Live/lang/zh-tw.json
@@ -1,11 +1,9 @@
{
"Live": {
- "AbandonedCartSummary": "%1$s 個棄用的購物車%2$s 和 %3$s 項被棄用的項目%4$s,總價值 %5$s%6$s。",
"AveragePageGenerationTime": "這個訪客平均花費 %1$s 載入網頁。",
"CalculatedOverNPageViews": "以這個訪客過去 %1$s 次網頁瀏覽來計算。",
"ClickToViewMoreAboutVisit": "點擊以查看這個訪問紀錄的詳細資訊",
"ConvertedNGoals": "轉換了 %s 個目標",
- "EcommerceSummaryConversions": "%1$s 個訂單%2$s總價值 %3$s%4$s,購買了 %5$s 個項目%6$s。",
"FirstVisit": "首次訪問",
"GoalType": "類型",
"HideMap": "隱藏地圖",
@@ -26,9 +24,13 @@
"RealTimeVisitorCount": "即時訪客數量",
"Referrer_URL": "參造連結網址",
"ShowMap": "顯示地圖",
+ "ActionsAndDuration": "%2$s內 %1$s 個活動數",
"SimpleRealTimeWidget_Message": "%1$s 和 %2$s 在過去 %3$s",
"ViewVisitorProfile": "查看訪客資料",
"VisitedPages": "到達網頁",
+ "RevisitedPages": "網頁瀏覽數超過一次",
+ "ToggleActions": "切換所有活動的顯示狀態",
+ "TopVisitedPages": "熱門訪問網頁",
"VisitorLog": "訪客記錄",
"VisitorLogDocumentation": "這個表格顯示所選擇的時間範圍中最新的訪問。你可以將滑鼠移過訪問日期查看訪客最後訪問為何時。%1$s如果日期範圍包含今日,你就可以即時查看訪客!%2$s這裡顯示的資料不論是否和多常使用彙整工作排程,永遠是即時的。",
"VisitorProfile": "訪客資料",
diff --git a/plugins/Live/stylesheets/live.less b/plugins/Live/stylesheets/live.less
index 309b93cecc..9be0ca4e75 100644
--- a/plugins/Live/stylesheets/live.less
+++ b/plugins/Live/stylesheets/live.less
@@ -74,7 +74,7 @@
.ui-dialog.ui-widget {
.dataTableVizVisitorLog {
.dataTableFeatures {
- border-bottom: 0px;
+ border-bottom: 0;
}
}
}
@@ -89,7 +89,8 @@
}
ol.visitorLog {
- list-style: decimal inside none;
+ counter-reset: item;
+ list-style-type: none;
}
.truncated-text-line {
@@ -99,15 +100,27 @@ ol.visitorLog {
display:inline-block;
max-width:90%;
overflow: -moz-hidden-unscrollable;
-
- &.event {
- margin-top: 1px;
- margin-right: 15px;
- }
}
-ol.visitorLog li {
+ol.visitorLog > li {
margin-bottom: 7px;
+ line-height: 20px;
+
+ &:before {
+ content: counter(item) " ";
+ counter-increment: item;
+ padding-right: 5px;
+ vertical-align: top;
+ }
+
+ &.more {
+ list-style-type: none;
+ font-weight: bold;
+
+ .icon-info {
+ vertical-align: middle;
+ }
+ }
}
#visitsLive img {
@@ -148,12 +161,13 @@ ol.visitorLog li {
.repeat {
font-weight: bold;
- border: 1px solid @theme-color-text-light;
- border-radius: 3px;
- padding: 2px;
display: block;
- margin: 0px 5px 0px 5px;
+ margin: 5px 5px 5px 0;
float: left;
+
+ &.icon-refresh:before {
+ padding-right: 2px;
+ }
}
.dataTableVizVisitorLog hr {
@@ -201,7 +215,7 @@ ol.visitorLog p {
.dataTableVizVisitorLog {
.card {
- padding: 15px 0px;
+ padding: 15px 0;
font-size: 13px;
text-align: left;
@@ -220,7 +234,7 @@ ol.visitorLog p {
width:100%;
}
- .card {
+ .widget & .card {
&:hover .visitor-log-visitor-profile-link {
display:inline;
@@ -228,6 +242,10 @@ ol.visitorLog p {
}
}
+.visitor-log-datetime {
+ display: block;
+}
+
.visitor-log-page-list {
position:relative;
margin-top: 7px;
@@ -236,46 +254,45 @@ ol.visitorLog p {
a.visitor-log-visitor-profile-link {
z-index: 2;
position:absolute;
- display:none;
right: 15px;
top: 15px;
font-style:italic;
font-size:13px;
background-color: inherit !important;
+ .widget & {
+ display:none;
+ }
+
img {
margin-top: -2px;
margin-bottom: -3px;
}
}
-.visitorLog,.visitor-profile-actions {
+.visitorLog {
> li > div {
- display:inline-block;
- width:90%;
- vertical-align:top;
+ display: inline-block;
+ width: 90%;
+
+ > * {
+ vertical-align: top;
+ }
}
}
.action-list-action-icon {
- float:left;
- margin-right:4px;
+ display: inline;
+ margin: 2px 3px 0 0;
+ max-height: 16px;
- &.event {
- margin-top: 0;
- }
&.outlink {
- margin-top: 4px;
- margin-right: 4px;
- margin-left: 4px;
- }
- &.search {
- margin-right: 4px;
+ margin: 7px 3px 0 0;
}
}
.action-list-url {
- display:block;
+ display: inline-block;
}
.visitorLogIcons {
@@ -288,18 +305,16 @@ a.visitor-log-visitor-profile-link {
}
.visitorLogIcons>span>span>img {
- margin: auto 0 auto 0px;
+ margin: auto 5px auto 0;
}
-.visitorLogIcons .visitorLogIconWithDetails>img {
- margin: auto 5px auto 0;
- width: 16px;
+.visitorLogIconWithDetails>img {
+ margin: auto 5px -2px 0;
height: 16px;
}
.visitorLogIconWithDetails.flag>img {
border: 1px solid lightgray;
- box-sizing: content-box;
}
.visitorLogIcons>span.visitorRank>img {
@@ -316,7 +331,7 @@ a.visitor-log-visitor-profile-link {
.own-visitor-column {
.visitorLogIcons {
.visitorDetails {
- margin-top: 0px;
+ margin-top: 0;
}
.visitorType {
margin-top: 8px;
@@ -327,6 +342,10 @@ a.visitor-log-visitor-profile-link {
.visitorReferrer {
clear:both;
padding-top: 1em;
+
+ * {
+ vertical-align: middle;
+ }
}
.segmentedlog {
diff --git a/plugins/Live/stylesheets/visitor_profile.less b/plugins/Live/stylesheets/visitor_profile.less
index 5622e42f1a..e6161c2559 100644
--- a/plugins/Live/stylesheets/visitor_profile.less
+++ b/plugins/Live/stylesheets/visitor_profile.less
@@ -1,559 +1,440 @@
+.visitor-profile-popup {
+
+ width: 1150px;
+ height: auto;
+ padding: 0;
+
+ > #Piwik_Popover {
+ padding: 0;
+ margin: 0;
+ overflow: visible;
+ }
+
+ > .ui-dialog-titlebar {
+ display: none;
+ }
+}
+
.visitor-profile {
- position:relative;
- width:1150px;
- border:1px solid #a19e96;
- border-radius:5px;
- background:url(../images/visitor_profile_background.jpg) repeat;
- box-shadow:5px 5px 5px rgba(0,0,0,0.22);
- text-align:left;
-
- h1 {
- font-size:23px;
- text-shadow:0 1px 0 rgba(255,255,255,1);
- margin:9px 0 0 0;
- padding:0;
- font-weight: normal;
- color: @theme-color-text;
-
- a {
- font-size:12px;
- margin-left:3px;
- }
- }
+ position: relative;
+ width: 1150px;
+ box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.22);
+ text-align: left;
+ font-size: 13px;
+ line-height: 20px;
- h2 {
- display:inline-block;
- font-size:23px;
- margin:0 0 0 5px;
- padding:15px 17px 15px 22px;
- color:black;
- border: none;
- color: @theme-color-text;
- }
+ body .widget & {
+ width: auto;
+ box-shadow: none;
p {
- margin-left: 0;
- margin-right: 0;
- .font-default(13px, 18px);
- color: @color-silver-l60;
- strong {
- .font-default(13px, 18px);
- color: @theme-color-text;
- font-weight: normal !important;
- }
- span {
- .font-default(13px, 18px);
- }
+ margin: 0;
}
+ }
- p {
- font-size:13px;
- color:#5e5e5c;
- line-height:20px;
- }
+ a {
+ color: #255792;
+ }
+ h1 {
+ line-height: 30px;
+ vertical-align: top;
+ font-size: 23px;
+ margin: 0 0 5px 0;
+ color: @theme-color-text;
+ }
- span.truncated-text-line {
- display:inline-block;
- &.event {
- max-width: 89%;
- }
+ p {
+ color: #5e5e5c;
+
+ body:not(.widgetized) .widget & {
+ padding-bottom: 0;
}
-}
-.visitor-profile-summary,.visitor-profile-important-visits,.visitor-profile-avatar,.visitor-profile-visits-container {
- span, strong {
- display:inline;
- font-size:14px;
- color:#413838;
- line-height:19px;
- padding-left:4px;
+ strong {
+ color: @theme-color-text;
+ font-weight: normal !important;
}
-}
+ }
-.visitor-profile-widget-link {
- color:#5e5e5c;
+ p.alert {
+ margin: 8px 20px 20px 0 !important;
+ font-size: 13px;
+ }
}
-.visitor-profile-export {
- vertical-align: middle;
- margin-top:3px;
+.visitor-profile-options {
+ z-index: 10;
+ position: absolute;
+ right: 6px;
+ height: 28px;
}
-.visitor-profile-close:before {
- content: "\e60a";
+.visitor-profile-toggle-actions,
+.visitor-profile-help,
+.visitor-profile-close {
+ float: right;
+ text-decoration: none !important;
+ margin-right: 5px;
+
+ &:before {
+ color: #000;
+ background-color: #fff;
+ font-size: 16px;
+ line-height: 16px;
+ font-weight: 400;
+ font-family: piwik;
+ padding: 1px;
+ height: 18px;
+ display: block;
+ margin: 5px 0;
+ }
}
.visitor-profile-close {
- z-index: 10;
- position:absolute;
- right:6px;
- top: 4px;
- height:20px;
- width:21px;
+ margin-right: 0;
+
+ &:before {
+ padding: 4.5px;
+ content: "\e60a";
background-color: #d4291f;
- color: #FFFFFF !important;
+ color: #fff;
border-radius: 3px;
font-size: 9px;
- font-weight: 400;
- font-family: piwik;
- text-decoration: none !important;
- text-align: center !important;
- padding: 4.5px;
-}
-
-.visitor-profile a {
- color:#255792;
-}
+ line-height: 9px;
+ }
-.visitor-profile > div {
- width:100%;
+ .widget & {
+ display: none;
+ }
}
-.visitor-profile-info {
- height:auto;
- border-top:2px solid #f6f6f6;
- border-bottom:1px solid #d1cec8;
- border-radius:5px 5px 0 0;
- box-shadow:inset 0 25px 15px -10px #e0e0e0, inset 0 -25px 15px -10px #e0e0e0;
-
- > div { // row
- border-bottom:1px solid #d1cec8;
-
- > div { // columns
- vertical-align:top;
- height:auto;
- display:inline-block;
- }
- }
+.visitor-profile-toggle-actions {
+ &:before {
+ content: "\e62b";
- .visitor-profile-overview { // first column
- width:574px;
- border-left:none;
- margin:0 -3px 0 0;
- border-right:1px solid #d1cec8;
- }
- .visitor-profile-visits-info { // last column
- width:573.5px;
- border-bottom:none;
- margin:0 0 0 -4px;
- border-left:1px solid #d1cec8;
+ .minimized& {
+ content: "\e61c";
}
+ }
}
-.visitor-profile-avatar > div {
- position:relative;
- float:left;
- min-height:145px;
- margin:6px 15px 0 0;
- padding-bottom:4px;
+.visitor-profile-help {
+ &:before {
+ content: "\e61f";
+ }
}
-.visitor-profile-avatar > div:first-child {
- width:166px;
- margin-right:0;
- padding-left:7px;
-
- > .visitor-profile-image-frame {
- width:149px;
- height:154px;
- background:url(../images/avatar_frame.png) no-repeat;
-
- > img { // avatar image
- max-width:122px;
- height:120px;
- margin:11px 0 0 12px;
- }
- }
-
- > img { // paperclip image
- position:absolute;
- top:-20px;
- left:3px;
- z-index:2;
- }
+.visitor-profile-info {
+ overflow: hidden;
}
-.visitor-profile-avatar > div:last-child {
- margin-right:0;
-}
+.visitor-profile-visits-info,
+.visitor-profile-overview {
+ display: inline-block;
+ vertical-align: top;
+ height: auto;
+ border: none;
+ box-sizing: content-box;
+ float: left;
-.visitor-profile-avatar h1 {
- display:inline-block;
-}
+ body:not(.widgetized) .widget & {
+ width: 100%;
+ border: none;
+ margin: 0;
+ }
-.visitor-profile-extra-cvars {
- border-top: 1px solid #d1cec8;
+ body.widgetized .widget & {
+ width: 50%;
+ box-sizing: border-box;
+ }
}
-.visitor-profile-more-info {
- height:18px;
- border-radius:0 0 5px 5px;
- text-align:center;
- padding:0 0 13px;
-
- > a {
- font-size:14px;
- text-decoration:none;
- color:#255792;
- text-shadow:0 1px 0 rgba(255,255,255,1);
- }
-
- > .loadingPiwik {
- padding:0 0 0 4px;
+@media only screen and (max-width: 1000px) {
+ body.widgetized .widget {
+ .visitor-profile-visits-info,
+ .visitor-profile-overview {
+ width: 100%;
}
+ }
}
-.visitor-profile-latest-visit {
- position:relative;
-}
-
-.visitor-profile-latest-visit-column {
- padding-top:6px;
- display:inline-block;
- vertical-align:top;
-}
-
-.visitor-profile-browser {
- margin-left: 5px;
- display:inline-block;
-}
-
-.visitor-profile-os {
- display:inline-block;
+.visitor-profile-widget-link {
+ color: #5e5e5c;
}
-.visitor-profile-latest-visit-column:last-child {
- margin-left:9px;
-}
+.visitor-profile-overview {
+ margin: 0;
+ border-right: 1px solid #d1cec8;
+ padding: 22px 0 0 22px;
+ width: 553px;
-.visitor-profile-avatar ul {
- width:178px;
+ body:not(.widgetized) .widget & {
+ padding: 0 10px;
+ }
}
-.visitor-profile-avatar ul li {
- display:inline-block;
- min-height:24px;
- border-bottom:1px solid #d1cec8;
- width:100%;
+.visitor-profile-visits-info {
+ margin: 28px 0 0 -1px;
+ border-left: 1px solid #d1cec8;
+ width: 574px;
}
-.visitor-profile-id {
- height:24px;
-}
+.visitor-profile-header {
+ overflow: hidden;
+ font-size: 14px;
-.visitor-profile-avatar ul li:last-child {
- border-bottom:none;
-}
+ > div {
+ float: left;
+ }
-.visitor-profile-map {
- padding:0 21px 13px 21px;
+ .visitor-profile-avatar {
+ width: 149px;
+ height: 154px;
- .dataTableFeatures,.no_data {
- display:none !important;
+ > img {
+ max-width: 122px;
+ height: 120px;
}
-}
+ }
-.visitor-profile-map > div {
- border-radius:2px;
- background-color:#fff;
-}
+ .visitor-profile-header-details {
+ width: 376px;
+ }
-.visitor-profile-show-map {
- font-size:13px;
- font-style:italic;
-}
+ .visitor-profile-prev-visitor {
+ color: #7e7363;
+ display: none;
+ position: absolute;
+ right: 100%;
+ top: 0;
+ margin-right: 2px;
+ }
-.visitor-profile-summary,
-.visitor-profile-important-visits,
-.visitor-profile-location,
-.visitor-profile-lifetimevalue
-{
- overflow:hidden;
- padding: 5px 0 16px 22px;
+ .visitor-profile-next-visitor {
+ color: #7e7363;
+ display: none;
+ }
- p {
- font-size:13px;
- line-height: 20px;
- margin-top: 6px;
- margin-right: 1em;
+ &:hover {
+ .visitor-profile-next-visitor,
+ .visitor-profile-prev-visitor {
+ display: inline-block;
}
-}
-.visitor-profile-location img {
- border: 1px solid lightgray;
- box-sizing: content-box;
-}
-
-.visitor-profile-important-visits {
+ }
- > div > div > p:first-child > strong {
- padding-left:0;
- }
+ h1 {
+ display: inline-block;
+ word-wrap: break-word;
+ margin: 0;
+ max-width: 355px;
+ color: #0d0d0d;
+ }
}
-.visitor-profile-summary strong {
- padding-left:0;
+.visitor-profile-headline {
+ position: relative;
+ line-height: 30px;
}
-.visitor-profile-important-visits {
- > div {
- float:left;
- width:265px;
- height:100%;
- }
-
- span {
- padding-left:0;
- }
-}
+.visitor-profile-summary {
+ overflow: hidden;
+ padding: 5px 0 16px 0;
-.visitor-profile-location>p>.loadingPiwik {
- padding:0 0 0 4px;
+ p {
+ margin: 6px 1em 0 0;
+ }
}
-.visitor-profile-pages-visited {
- overflow-y:auto;
- position:relative;
- margin-right:10px;
- border-bottom:none!important;
- padding: 8px 18px 10px 13px;
-
- h1 {
- margin-left:3px;
- }
+.visitor-profile-pages {
+ li {
+ display: block;
+ clear: both;
+ }
}
-.visitor-profile-visits-container {
- overflow-y:auto;
- overflow-x: hidden;
- position:relative;
- margin-right:10px;
- border-bottom:none!important;
- padding:0 18px 0 13px;
-
- .action-list-action-icon {
- margin-right:4px;
- }
-
- ol {
- > li {
- display:block;
- font-size:12px;
- font-weight: normal;
- line-height:10px;
- padding:0 0 10px 13px;
- margin-right: 20px;
- color: @theme-color-text-lighter;
-
- span {
- font-size:13px;
- font-weight:700;
- padding-left:0;
- }
- }
- }
-
- ol.visitor-profile-visits > li {
- margin:0 0 10px 13px;
- padding:0;
-
- > div {
- margin:0 6px 0 6px;
- }
- }
-
- ol.visitor-profile-actions {
- counter-reset:item;
- list-style-type:none;
-
- > li:before {
- content:counter(item) " ";
- counter-increment:item;
- }
- }
-
- ol li ol {
- border-top:1px solid #d1cec8;
- }
-
- ol > li > ol > li {
- margin-left:-12px;
- }
-
- ol li ol li {
- display:block;
- color:#5e5e5c;
- font-size:13px;
- line-height:22px;
- padding-top:1px;
- padding-bottom:1px;
- }
-
- ol li ol li {
- padding-bottom:4px;
- }
-
- ol > li ol li span {
- padding-left:5px;
- }
+.visitor-profile-latest-visit {
- ol > li ol li {
- .action-list-url {
- margin-left:5px;
- line-height:15px;
- font-size:13px;
+ padding-top: 6px;
+
+ .visitorLogIcons {
+ .visitorLogIconWithDetails {
+ display: block;
+ float: left;
+ width: 50%;
+ padding: 6px 0;
+ box-sizing: content-box;
+ height: 16px;
+ position: relative;
+ font-size: 13px;
+
+ img {
+ float: left;
+ margin-left: 2px;
}
- > div > .action-list-url {
- line-height:23px;
+ &.flag img {
+ box-sizing: border-box;
+ margin-left: 0;
}
- }
- ol > li ol li img {
- margin-left:7px;
+ &:after {
+ content: attr(profile-header-text);
+ text-overflow: ellipsis;
+ display: block;
+ overflow: hidden;
+ white-space: nowrap;
+ position: absolute;
+ left: 26px;
+ }
}
- // overrides for _actionsDetails styles
- strong {
- font-size:13px;
- line-height:25px;
+ .visitorType,
+ .visitorTypeIcon {
+ display: none;
}
+ }
}
-.visitor-profile-current-visit {
- background-color:#FAFACF;
-}
+.visitor-profile-id {
+ line-height: 24px;
+ font-size: 13px;
-.visitor-profile-date {
- float:right;
- margin-top:6px;
+ a {
+ color: inherit;
+ }
}
-.visitor-profile-fog {
- height:25px;
- width:546px;
- position:absolute;
- bottom:51px;
- right:28px;
- background:url(../images/visitor_profile_gradient.png) repeat-x;
+.visitor-profile-important-visits > div {
+ float: left;
+ width: 50%;
+ height: 100%;
}
-// popup css
-.visitor-profile-popup {
- width: 1151px;
- height: auto;
- padding: 0;
+.visitor-profile-devices img {
+ height: 16px;
+ float: left;
+ margin-right: 10px;
+ margin-top: 2px;
+}
- > .ui-dialog-titlebar {
- display: none;
- }
+.visitor-profile-location {
+ .loadingPiwik {
+ padding: 0 0 0 4px;
+ border: 0;
+ }
- > #Piwik_Popover {
- padding: 0;
- margin: 0;
- overflow: visible;
- }
+ img {
+ border: 1px solid lightgray;
+ box-sizing: content-box;
+ }
}
-span.visitor-profile-goal-name {
- font-style:italic;
- font-size:14px;
+.visitor-profile-map {
+ padding: 10px 21px 13px 2px;
}
-.visitor-profile-see-more-cvars {
- text-align:center;
+.visitor-profile-visit-title {
+ display: block;
+ font-size: 23px;
+ padding: 13px 15px;
+ border: none;
+ color: @theme-color-text;
+ cursor: pointer;
+ background-color: @color-silver-l95;
- > a {
- display:inline-block;
- color:#5e5e5c;
- }
-}
+ &:hover {
+ background-color: #bfbfbf;
+ }
-.visitor-profile-visit-title-row {
- cursor:pointer;
+ .visitor-profile-date {
+ font-weight: normal;
+ float: right;
+ font-size: 13px;
+ margin-top: 4px;
+ }
}
-.visitor-profile-visit-title-row:hover {
- background-color:#bfbfbf;
-}
+.visitor-profile-visit-details-extended {
+ display: none;
+ padding: 10px 15px;
+ font-size: 13px;
+ line-height: 1.5em;
+ background-color: @color-silver-l95;
-.visitor-profile-avatar .loadingPiwik {
- padding:0;
- margin:0;
+ .visitor-log-datetime {
+ display: none;
+ }
}
-.visitor-profile-visits-info {
- position: relative;
-}
+.visitor-profile-visit-details {
+ padding: 8px 15px;
+ overflow: hidden;
-div.visitor-profile-navigation {
- height:auto;
- min-height:inherit;
- font-size:12px;
- float:none;
- display:block;
- padding:0 0 0 22px;
-}
+ .visitorLogIcons {
+ display: inline;
+ }
-.visitor-profile-header {
- position:relative;
+ .visitorLogIconWithDetails {
+ margin-right: 5px;
+ }
- .visitorProfileHelp {
- display: none;
- &:hover {
- text-decoration: none;
- }
- }
-}
+ .visitorType {
+ display: inline-block;
+ float: left;
+ margin-right: 15px;
+ }
-.visitor-profile-prev-visitor {
- display:none;
- position:absolute;
- right:100%;
- bottom:0;
- margin-right:2px;
-}
+ .visitorDetails {
+ display: inline-block;
+ visibility: hidden;
+ }
-a.visitor-profile-next-visitor,a.visitor-profile-prev-visitor {
- display:none;
- color:#7e7363;
-}
+ &:hover .visitorDetails {
+ visibility: visible;
+ }
-.visitor-profile-avatar:hover {
- .visitor-profile-next-visitor,.visitor-profile-prev-visitor,.visitorProfileHelp {
- display:inline-block;
- }
+ .visitorTypeIcon {
+ display: none;
+ }
}
-.visitor-profile-no-visits {
- color:#999;
- font-size:13px;
+.visitor-profile-visits-info {
+ position: relative;
}
-.visitor-profile-latest-visit-loc {
- display:inline-block;
- position:absolute;
- right:4px;
- top:-24px;
+.visitor-profile-show-actions {
+ float: right;
+ display: inline-block;
+ font-size: 13px;
+ line-height: 24px;
}
-// overrides for the widgetized visitor profile
-.widget .visitor-profile {
- min-width: 100% !important;
+ol.visitor-profile-actions {
+ margin-bottom: 20px;
+
+ li {
+ padding: 0 15px 8px;
+ margin: 0;
p {
- padding-bottom: 0;
+ line-height: 15px;
}
+ }
+}
- .visitor-profile-close {
- display:none;
- }
+.visitor-profile-more-info {
+ height: 18px;
+ text-align: center;
+ padding: 0 0 13px;
+ margin: 5px 0 15px 0;
- .visitor-profile-info {
- > div { // row
- > div { // columns
- min-width:50% !important;
- }
- }
- }
+ .loadingPiwik {
+ padding: 0 0 0 4px;
+ }
+}
+
+.visitor-profile-no-visits {
+ color: #999;
+ font-size: 13px;
}
diff --git a/plugins/Live/templates/_actionCommon.twig b/plugins/Live/templates/_actionCommon.twig
new file mode 100644
index 0000000000..a978588527
--- /dev/null
+++ b/plugins/Live/templates/_actionCommon.twig
@@ -0,0 +1,38 @@
+<li class="{% if action.goalName is defined %}goal{% else %}action{% endif %}"
+ title="{{ postEvent('Live.renderActionTooltip', action, visitInfo) }}">
+ <div>
+ {# Page view / Download / Outlink #}
+ {% if action.pageTitle|default(false) is not empty %}
+ <span class="truncated-text-line">{{ action.pageTitle|rawSafeDecoded }}</span>
+ {% endif %}
+ {% if action.siteSearchKeyword is defined %}
+ {% if action.type == 'search' %}
+ <img src='{{ action.icon }}' title='{{ 'Actions_SubmenuSitesearch'|translate }}'
+ class="action-list-action-icon search">
+ {% endif %}
+ <span class="truncated-text-line">{{ action.siteSearchKeyword|rawSafeDecoded }}</span>
+ {% endif %}
+ {% if action.url is not empty %}
+ {% if action.type == 'action' and action.pageTitle|default(false) is not empty %}<p>{% endif %}
+ {% if action.type == 'download' or action.type == 'outlink' %}
+ <img src='{{ action.icon }}' class="action-list-action-icon {{ action.type }}">
+ {% endif %}
+
+ {% if action.url|trim|lower starts with 'javascript:' or
+ action.url|trim|lower starts with 'vbscript:' or
+ action.url|trim|lower starts with 'data:' %}
+ {{ action.url }}
+ {% else %}
+ <a href="{{ action.url }}" rel="noreferrer" target="_blank"
+ class="action-list-url truncated-text-line">
+ {{ action.url|replace({'http://': '', 'https://': ''}) }}
+ </a>
+ {% endif %}
+ {% if action.type == 'action' and action.pageTitle|default(false) is not empty %}</p>{% endif %}
+ {% elseif action.type != 'search' %}
+ <p>
+ <span>{{ 'General_NotDefined'|translate('Actions_ColumnPageURL'|translate) }}</span>
+ </p>
+ {% endif %}
+ </div>
+</li>
diff --git a/plugins/Live/templates/_actionEcommerce.twig b/plugins/Live/templates/_actionEcommerce.twig
new file mode 100644
index 0000000000..a4b9858105
--- /dev/null
+++ b/plugins/Live/templates/_actionEcommerce.twig
@@ -0,0 +1,54 @@
+<li class="action"
+ title="{{ postEvent('Live.renderActionTooltip', action, visitInfo) }}">
+ <div>
+ {# Ecommerce Abandoned Cart / Ecommerce Order #}
+ <img src="{{ action.icon }}" class="action-list-action-icon"/>
+ {% if action.type == 'ecommerceOrder' %}
+ <strong>{{ 'Goals_EcommerceOrder'|translate }}</strong>
+ <span style='color:#666;'>({{ action.orderId }})</span>
+ {% else %}
+ <strong>{{ 'Goals_AbandonedCart'|translate }}</strong>
+
+ {# TODO: would be nice to have the icons Orders / Cart in the ecommerce log footer #}
+ {% endif %}
+ <p>
+ <span {% if not isWidget %}style='margin-left:22px;'{% endif %}>
+ {% if action.type == 'ecommerceOrder' %}
+ {# spacing is important for tooltip to look nice #}
+ {% set ecommerceOrderTooltip %}{{ 'General_ColumnRevenue'|translate }}: {{ action.revenue|money(visitInfo.idSite)|raw }}
+ {% if action.revenueSubTotal is not empty %} - {{ 'General_Subtotal'|translate }}: {{ action.revenueSubTotal|money(visitInfo.idSite)|raw }}{% endif %}
+
+ {% if action.revenueTax is not empty %} - {{ 'General_Tax'|translate }}: {{ action.revenueTax|money(visitInfo.idSite)|raw }}{% endif %}
+
+ {% if action.revenueShipping is not empty %} - {{ 'General_Shipping'|translate }}: {{ action.revenueShipping|money(visitInfo.idSite)|raw }}{% endif %}
+
+ {% if action.revenueDiscount is not empty %} - {{ 'General_Discount'|translate }}: {{ action.revenueDiscount|money(visitInfo.idSite)|raw }}{% endif %}
+ {% endset %}
+ <abbr title="{{ ecommerceOrderTooltip }}">{{ 'General_ColumnRevenue'|translate }}:
+ {% else %}
+ {% set revenueLeft %}{{ 'General_ColumnRevenue'|translate }}{% endset %}
+ {{ 'Goals_LeftInCart'|translate(revenueLeft) }}:
+ {% endif %}
+ <strong>{{ action.revenue|money(visitInfo.idSite)|raw }}</strong>
+ {% if action.type == 'ecommerceOrder' %}
+ </abbr>
+ {% endif %}, {{ 'General_Quantity'|translate }}: {{ action.items }}
+
+ {# Ecommerce items in Cart/Order #}
+ {% if action.itemDetails is not empty %}
+ <ul style='list-style:square;margin-left:{% if isWidget %}15{% else %}50{% endif %}px;'>
+ {% for product in action.itemDetails %}
+ <li>
+ {{ product.itemSKU }}{% if product.itemName is not empty %}: {{ product.itemName }}{% endif %}
+ {% if product.itemCategory is not empty %} ({{ product.itemCategory }}){% endif %}
+ ,
+ {{ 'General_Quantity'|translate }}: {{ product.quantity }},
+ {{ 'General_Price'|translate }}: {{ product.price|money(visitInfo.idSite)|raw }}
+ </li>
+ {% endfor %}
+ </ul>
+ {% endif %}
+ </span>
+ </p>
+ </div>
+</li> \ No newline at end of file
diff --git a/plugins/Live/templates/_actionGoal.twig b/plugins/Live/templates/_actionGoal.twig
new file mode 100644
index 0000000000..dadfc566e8
--- /dev/null
+++ b/plugins/Live/templates/_actionGoal.twig
@@ -0,0 +1,11 @@
+<li class="action"
+ title="{{ postEvent('Live.renderActionTooltip', action, visitInfo) }}">
+ <div>
+ {# Goal conversion #}
+ <img src="{{ action.icon }}" class="action-list-action-icon" />
+ <strong>{{ action.goalName }}</strong>
+ {% if action.revenue > 0 %}, {{ 'General_ColumnRevenue'|translate }}:
+ <strong>{{ action.revenue|money(visitInfo.idSite)|raw }}</strong>
+ {% endif %}
+ </div>
+</li> \ No newline at end of file
diff --git a/plugins/Live/templates/_actionTooltip.twig b/plugins/Live/templates/_actionTooltip.twig
new file mode 100644
index 0000000000..b0e885a1ae
--- /dev/null
+++ b/plugins/Live/templates/_actionTooltip.twig
@@ -0,0 +1,8 @@
+{{ action.serverTimePretty }}{% if action.url is defined and action.url|trim|length %}
+
+{{ action.url }}{% endif %}{%- if action.generationTime is defined %}
+
+{{ 'General_ColumnGenerationTime'|translate }}: {{ action.generationTime|raw }}{% endif %}
+{%- if action.timeSpentPretty is defined %}
+
+{{ 'General_TimeOnPage'|translate }}: {{ action.timeSpentPretty|raw }}{% endif -%} \ No newline at end of file
diff --git a/plugins/Live/templates/_actionsList.twig b/plugins/Live/templates/_actionsList.twig
index a36a9da66d..1f6ff3e7c9 100644
--- a/plugins/Live/templates/_actionsList.twig
+++ b/plugins/Live/templates/_actionsList.twig
@@ -1,133 +1,14 @@
{% set previousAction = false %}
{% for action in actionDetails %}
- {% set customVariablesTooltip %}
- {% if action.customVariables is defined %}
- {{ 'CustomVariables_CustomVariables'|translate }}:
- {% for id,customVariable in action.customVariables %}
- {% set name = 'customVariablePageName' ~ id %}
- {% set value = 'customVariablePageValue' ~ id %}
- - {{ customVariable[name]|raw }} {% if customVariable[value]|length > 0 %} = {{ customVariable[value]|raw }}{% endif %}
- {# line break above is important #}
- {% endfor %}
- {% endif %}
- {% endset %}
+ {{ postEvent('Live.renderAction', action, previousAction, visitInfo) }}
- <li class="{% if action.goalName is defined %}goal{% else %}action{% endif %}"
- title="{{ action.serverTimePretty }}{% if action.url is defined and action.url|trim|length %}
+{% set previousAction = action %}
+{% endfor %}
-{{ action.url }}{% endif %}{% if customVariablesTooltip|trim|length %}
-
-{{ customVariablesTooltip|trim }}{% endif -%}
- {%- if action.generationTime is defined %}
-
-{{ 'General_ColumnGenerationTime'|translate }}: {{ action.generationTime|raw }}{% endif %}
- {%- if action.timeSpentPretty is defined %}
-
-{{ 'General_TimeOnPage'|translate }}: {{ action.timeSpentPretty|raw }}{% endif -%}">
- <div>
- {% if action.type == 'ecommerceOrder' or action.type == 'ecommerceAbandonedCart' %}
- {# Ecommerce Abandoned Cart / Ecommerce Order #}
- <img src="{{ action.icon }}"/>
- {% if action.type == 'ecommerceOrder' %}
- <strong>{{ 'Goals_EcommerceOrder'|translate }}</strong>
- <span style='color:#666;'>({{ action.orderId }})</span>
- {% else %}
- <strong>{{'Goals_AbandonedCart'|translate}}</strong>
-
- {# TODO: would be nice to have the icons Orders / Cart in the ecommerce log footer #}
- {% endif %}
- <p>
- <span {% if not isWidget %}style='margin-left:20px;'{% endif %}>
- {% if action.type == 'ecommerceOrder' %}
-{# spacing is important for tooltip to look nice #}
-{% set ecommerceOrderTooltip %}{{ 'General_ColumnRevenue'|translate }}: {{ action.revenue|money(clientSideParameters.idSite)|raw }}
-{% if action.revenueSubTotal is not empty %} - {{ 'General_Subtotal'|translate }}: {{ action.revenueSubTotal|money(clientSideParameters.idSite)|raw }}{% endif %}
-
-{% if action.revenueTax is not empty %} - {{ 'General_Tax'|translate }}: {{ action.revenueTax|money(clientSideParameters.idSite)|raw }}{% endif %}
-
-{% if action.revenueShipping is not empty %} - {{ 'General_Shipping'|translate }}: {{ action.revenueShipping|money(clientSideParameters.idSite)|raw }}{% endif %}
-
-{% if action.revenueDiscount is not empty %} - {{ 'General_Discount'|translate }}: {{ action.revenueDiscount|money(clientSideParameters.idSite)|raw }}{% endif %}
-{% endset %}
- <abbr title="{{ ecommerceOrderTooltip }}">{{ 'General_ColumnRevenue'|translate }}:
- {% else %}
- {% set revenueLeft %}{{ 'General_ColumnRevenue'|translate }}{% endset %}
- {{ 'Goals_LeftInCart'|translate(revenueLeft) }}:
- {% endif %}
- <strong>{{ action.revenue|money(clientSideParameters.idSite)|raw }}</strong>
- {% if action.type == 'ecommerceOrder' %}
- </abbr>
- {% endif %}, {{ 'General_Quantity'|translate }}: {{ action.items }}
-
- {# Ecommerce items in Cart/Order #}
- {% if action.itemDetails is not empty %}
- <ul style='list-style:square;margin-left:{% if isWidget %}15{% else %}50{% endif %}px;'>
- {% for product in action.itemDetails %}
- <li>
- {{ product.itemSKU }}{% if product.itemName is not empty %}: {{ product.itemName }}{% endif %}
- {% if product.itemCategory is not empty %} ({{ product.itemCategory }}){% endif %}
- ,
- {{ 'General_Quantity'|translate }}: {{ product.quantity }},
- {{ 'General_Price'|translate }}: {{ product.price|money(clientSideParameters.idSite)|raw }}
- </li>
- {% endfor %}
- </ul>
- {% endif %}
- </span>
- </p>
- {% elseif action.goalName is not defined%}
- {# Page view / Download / Outlink / Event #}
- {% if action.pageTitle|default(false) is not empty %}
- <span class="truncated-text-line">{{ action.pageTitle|rawSafeDecoded }}</span>
- {% endif %}
- {% if action.siteSearchKeyword is defined %}
- {% if action.type == 'search' %}
- <img src='{{ action.icon }}' title='{{ 'Actions_SubmenuSitesearch'|translate }}' class="action-list-action-icon search">
- {% endif %}
- <span class="truncated-text-line">{{ action.siteSearchKeyword|rawSafeDecoded }}</span>
- {% endif %}
- {% if action.eventCategory|default(false) is not empty %}
- <img src='{{ action.icon }}' title='{{ 'Events_Event'|translate }}' class="action-list-action-icon event">
- <span class="truncated-text-line event">{{ action.eventCategory|rawSafeDecoded }} - {{ action.eventAction|rawSafeDecoded }} {% if action.eventName is defined %}- {{ action.eventName|rawSafeDecoded }}{% endif %} {% if action.eventValue is defined %}[{{ action.eventValue }}]{% endif %}</span>
- {% endif %}
- {% if action.url is not empty %}
- {% if action.type == 'action' and action.pageTitle|default(false) is not empty %}<p>{% endif %}
- {% if action.type == 'download' or action.type == 'outlink' %}
- <img src='{{ action.icon }}' class="action-list-action-icon {{ action.type }}">
- {% endif %}
-
- {% if action.eventCategory|default(false) is not empty
- and previousAction.url|default(false) == action.url %}
- {# For events, do not show (url) if the Event URL is the same as the URL last displayed #}
- {% else %}
- {% if action.url|trim|lower starts with 'javascript:' or
- action.url|trim|lower starts with 'vbscript:' or
- action.url|trim|lower starts with 'data:' %}
- {{ action.url }}
- {% else %}
- <a href="{{ action.url }}" rel="noreferrer" target="_blank" class="{% if action.eventCategory|default(false) is empty %}action-list-url{# don't put URL on new line for events #}{% endif %} truncated-text-line"
- {% if overrideLinkStyle is not defined or overrideLinkStyle %}style="text-decoration:underline;"{% endif %}>
- {{ action.url|replace({'http://': '', 'https://': ''}) }}
- </a>
- {% endif %}
- {% endif %}
- {% if action.type == 'action' and action.pageTitle|default(false) is not empty %}</p>{% endif %}
- {% elseif action.type != 'search' and action.type != 'event' %}
- <p>
- <span>{{ clientSideParameters.pageUrlNotDefined }}</span>
- </p>
- {% endif %}
- {% else %}
- {# Goal conversion #}
- <img src="{{ action.icon }}" />
- <strong>{{ action.goalName }}</strong>
- {% if action.revenue > 0 %}, {{ 'General_ColumnRevenue'|translate }}:
- <strong>{{ action.revenue|money(clientSideParameters.idSite)|raw }}</strong>
- {% endif %}
- {% endif %}
- </div>
+{% if visitInfo.truncatedActionsCount is defined %}
+ <li class="more">
+ <span class="icon-info"></span>
+ {{ 'Live_MorePagesNotDisplayed'|translate }}
</li>
-
- {% set previousAction = action %}
-{% endfor %} \ No newline at end of file
+{% endif %} \ No newline at end of file
diff --git a/plugins/Live/templates/_dataTableViz_visitorLog.twig b/plugins/Live/templates/_dataTableViz_visitorLog.twig
index 5281f9974f..eb09ee8730 100644
--- a/plugins/Live/templates/_dataTableViz_visitorLog.twig
+++ b/plugins/Live/templates/_dataTableViz_visitorLog.twig
@@ -2,111 +2,6 @@
{% set cycleIndex=0 %}
{% for visitor in dataTable.getRows() %}
- {% set visitHasEcommerceActivity = visitor.getColumn('visitEcommerceStatusIcon') %}
- {% set breakBeforeVisitorRank = (visitHasEcommerceActivity and visitor.getColumn('visitorTypeIcon')) ? true : false %}
- {% set visitorColumnContent %}
-
- <span class="visitorLogIcons">
-
- <span class="visitorDetails">
- {% if visitor.getColumn('browserIcon') %}
- <span class="visitorLogIconWithDetails">
- <img src="{{ visitor.getColumn('browserIcon') }}"/>
- <ul class="details">
- <li>{{ 'DevicesDetection_ColumnBrowser'|translate }}: {{ visitor.getColumn('browser') }}</li>
- <li>{{ 'DevicesDetection_BrowserEngine'|translate }}: {{ visitor.getColumn('browserFamily') }}</li>
- {% if visitor.getColumn('pluginsIcons')|length > 0 %}
- <li>
- {{ 'General_Plugins'|translate }}:
- {% for pluginIcon in visitor.getColumn('pluginsIcons') %}
- <img width="16px" height="16px" src="{{ pluginIcon.pluginIcon }}" alt="{{ pluginIcon.pluginName|capitalize(true) }}"/>
- {% endfor %}
- </li>
- {% endif %}
- </ul>
- </span>
- {% endif %}
- {% if visitor.getColumn('operatingSystemIcon') %}
- <span class="visitorLogIconWithDetails">
- <img src="{{ visitor.getColumn('operatingSystemIcon') }}"/>
- <ul class="details">
- <li>{{ 'DevicesDetection_ColumnOperatingSystem'|translate }}: {{ visitor.getColumn('operatingSystem') }}</li>
- </ul>
- </span>
- {% endif %}
- {% if visitor.getColumn('deviceTypeIcon') %}
- <span class="visitorLogIconWithDetails">
- <img src="{{ visitor.getColumn('deviceTypeIcon') }}"/>
- <ul class="details">
- <li>{{ 'DevicesDetection_DeviceType'|translate }}: {{ visitor.getColumn('deviceType') }}</li>
- {% if visitor.getColumn('deviceBrand') %}<li>{{ 'DevicesDetection_DeviceBrand'|translate }}: {{ visitor.getColumn('deviceBrand') }}</li>{% endif %}
- {% if visitor.getColumn('deviceModel') %}<li>{{ 'DevicesDetection_DeviceModel'|translate }}: {{ visitor.getColumn('deviceModel') }}</li>{% endif %}
- {% if visitor.getColumn('resolution') %}<li>{{ 'Resolution_ColumnResolution'|translate }}: {{ visitor.getColumn('resolution') }}</li>{% endif %}
- </ul>
- </span>
- {% endif %}
- </span>
-
- <span class="visitorType">
- {# Goals, and/or Ecommerce activity #}
- {% if visitor.getColumn('visitConverted') %}
- <span title="{{ 'General_VisitConvertedNGoals'|translate(visitor.getColumn('goalConversions')) }}" class='visitorRank visitorLogTooltip'
- {% if not displayVisitorsInOwnColumn or breakBeforeVisitorRank %}style="margin-left:0;"{% endif %}>
- <img src="{{ visitor.getColumn('visitConvertedIcon') }}"/>
- <span class='hash'>#</span>
- {{ visitor.getColumn('goalConversions') }}
- {% if visitHasEcommerceActivity %}
- &nbsp;
- <img src="{{ visitor.getColumn('visitEcommerceStatusIcon') }}" class='visitorLogTooltip' title="{{ visitor.getColumn('visitEcommerceStatus') }}"/>
- {% endif %}
- </span>
- {# Ecommerce activity only (no goal) #}
- {% elseif visitHasEcommerceActivity %}
- <img class="visitorLogTooltip" src="{{ visitor.getColumn('visitEcommerceStatusIcon') }}" title="{{ visitor.getColumn('visitEcommerceStatus') }}"/>
- {% endif %}
- </span>
- </span>
-
- {% endset %}
-
- {% set referrerContent %}
- <div class="visitorReferrer">
- {% if visitor.getColumn('referrerType') == 'website' %}
- {{ 'Referrers_ColumnWebsite'|translate }}:
- <a href="{{ visitor.getColumn('referrerUrl') }}" rel="noreferrer" target="_blank" class="visitorLogTooltip" title="{{ visitor.getColumn('referrerUrl') }}"
- style="text-decoration:underline;">
- {{ visitor.getColumn('referrerName') }}
- </a>
- {% endif %}
- {% if visitor.getColumn('referrerType') == 'campaign' %}
- {{ 'Referrers_ColumnCampaign'|translate }}: {{ visitor.getColumn('referrerName') }}
- {% if visitor.getColumn('referrerKeyword') is not empty %} - {{ visitor.getColumn('referrerKeyword') }}{% endif %}
- {% endif %}
- {% if visitor.getColumn('referrerType') == 'search' %}
- {%- set keywordNotDefined = 'General_NotDefined'|translate('General_ColumnKeyword'|translate) -%}
- {%- set showKeyword = visitor.getColumn('referrerKeyword') is not empty and visitor.getColumn('referrerKeyword') != keywordNotDefined -%}
- {% if visitor.getColumn('searchEngineIcon') %}
- <img src="{{ visitor.getColumn('searchEngineIcon') }}" alt="{{ visitor.getColumn('referrerName') }}"/>
- {% endif %}
- <span {% if not showKeyword %}title="{{ keywordNotDefined }}" class="visitorLogTooltip"{% endif %}>{{ visitor.getColumn('referrerName') }}</span>
- {% if showKeyword %}{{ 'Referrers_Keywords'|translate }}:
- <a href="{{ visitor.getColumn('referrerUrl') }}" rel="noreferrer" target="_blank" style="text-decoration:underline;">
- "{{ visitor.getColumn('referrerKeyword') }}"</a>
- {% endif %}
- {% set keyword %}{{ visitor.getColumn('referrerKeyword') }}{% endset %}
- {% set searchName %}{{ visitor.getColumn('referrerName') }}{% endset %}
- {% set position %}#{{ visitor.getColumn('referrerKeywordPosition') }}{% endset %}
- {% if visitor.getColumn('referrerKeywordPosition') %}
- <span title='{{ 'Live_KeywordRankedOnSearchResultForThisVisitor'|translate(keyword,position,searchName) }}' class='visitorRank visitorLogTooltip'>
- <span class='hash'>#</span>
- {{ visitor.getColumn('referrerKeywordPosition') }}
- </span>
- {% endif %}
- {% endif %}
- {% if visitor.getColumn('referrerType') == 'direct' %}{{ 'Referrers_DirectEntry'|translate }}{% endif %}
- </div>
- {% endset %}
-
{% set visitorRow %}
<div class="card row hoverable">
@@ -119,80 +14,12 @@
{% set cycleIndex=cycleIndex+1 %}
<div class="col s12 m{% if displayVisitorsInOwnColumn %}3{% else %}4{% endif %}">
- <strong class="visitorLogTooltip" title="{% if visitor.getColumn('visitorType')=='new' %}{{ 'General_NewVisitor'|translate }}{% else %}{{ 'Live_VisitorsLastVisit'|translate(visitor.getColumn('daysSinceLastVisit')) }}{% endif %}">
- {{ visitor.getColumn('serverDatePrettyFirstAction') }}
- {% if isWidget %}<br/>{% else %}-{% endif %} {{ visitor.getColumn('serverTimePrettyFirstAction') }}</strong>
- {% if visitor.getColumn('visitIp') is not empty %}
- <br/>
- <span class="visitorLogTooltip" title="{% if visitor.getColumn('userId') is not empty %}{{ 'General_UserId'|translate }}: {{ visitor.getColumn('userId')|raw }}{% endif %}
-
-{% if visitor.getColumn('visitorId') is not empty %}{{ 'General_VisitorID'|translate }}: {{ visitor.getColumn('visitorId') }}{% endif -%}
-{%- if visitor.getColumn('latitude') or visitor.getColumn('longitude') %}
-
-{{ visitor.getColumn('location') }}
-
-GPS (lat/long): {{ visitor.getColumn('latitude') }},{{ visitor.getColumn('longitude') }}{% endif %}">
- IP: {{ visitor.getColumn('visitIp') }}
- {% if visitor.getColumn('userId') is not empty %}<br/><br/>{{ visitor.getColumn('userId')|raw }}{% endif %}
-
- </span>{% endif %}
-
- {% if visitor.getColumn('provider') %}
- <br/>
- {{ 'Provider_ColumnProvider'|translate }}:
- {% if visitor.getColumn('providerUrl') %}
- <a href="{{ visitor.getColumn('providerUrl') }}" rel="noreferrer" target="_blank" class="visitorLogTooltip" title="{{ visitor.getColumn('providerName') }} {{ visitor.getColumn('providerUrl') }}" style="text-decoration:underline;">
- {% endif -%}
- {{ visitor.getColumn('providerName') }}
- {%- if visitor.getColumn('providerUrl') %}</a>{% endif %}
- {% endif %}
- {% if visitor.getColumn('visitorTypeIcon') or visitor.getColumn('countryFlag') %}
- <br/>
- {% endif %}
- {% if visitor.getColumn('visitorTypeIcon') %}
- <span class="visitorLogIconWithDetails">
- <img src="{{ visitor.getColumn('visitorTypeIcon') }}"/>
- <ul class="details">
- <li>{{ 'General_ReturningVisitor'|translate }} - {{ 'General_NVisits'|translate(visitor.getColumn('visitCount')) }}</li>
- </ul>
- </span>
- {% endif %}
- {% if visitor.getColumn('countryFlag') %}
- <span class="visitorLogIconWithDetails flag">
-
- <img height="16px" src="{{ visitor.getColumn('countryFlag') }}"/>
- {% if visitor.getColumn('city') %}{{ visitor.getColumn('city')|rawSafeDecoded }}{% endif -%}
- {%- if visitor.getColumn('region') %}{% if visitor.getColumn('city') %}, {% endif %}{{ visitor.getColumn('region')|rawSafeDecoded }}{% endif %}
-
- <ul class="details">
- <li>{{ 'UserCountry_Country'|translate }}: {{ visitor.getColumn('country') }}</li>
- {% if visitor.getColumn('region') %}<li>{{ 'UserCountry_Region'|translate }}: {{ visitor.getColumn('region') }}</li>{% endif %}
- {% if visitor.getColumn('city') %}<li>{{ 'UserCountry_City'|translate }}: {{ visitor.getColumn('city') }}</li>{% endif %}
- </ul>
- </span>
- {% endif %}
- {% if visitor.getColumn('customVariables') %}
- <br/>
- {% for id,customVariable in visitor.getColumn('customVariables') %}
- {% set name='customVariableName' ~ id %}
- {% set value='customVariableValue' ~ id %}
- <br/>
- <acronym class="visitorLogTooltip" title="{{ 'CustomVariables_CustomVariables'|translate }} (index {{ id }})">
- {{ customVariable[name]|truncate(30) }}
- </acronym>
- {% if customVariable[value]|length > 0 %}: {{ customVariable[value]|truncate(50) }}{% endif %}
- {% endfor %}
- {% endif %}
- {% if not displayVisitorsInOwnColumn %}
- <br/>
- {{ visitorColumnContent }}
- {% endif %}
- {{ referrerContent }}
+ {{ postEvent('Live.renderVisitorDetails', visitor) }}
</div>
{% if displayVisitorsInOwnColumn %}
<div class="col s12 m2 own-visitor-column">
- {{ visitorColumnContent }}
+ {{ postEvent('Live.renderVisitorIcons', visitor) }}
</div>
{% endif %}
@@ -200,8 +27,12 @@ GPS (lat/long): {{ visitor.getColumn('latitude') }},{{ visitor.getColumn('longit
{{ postEvent('Live.visitorLogViewBeforeActionsInfo', visitor) }}
<strong>
- {{ visitor.getColumn('actionDetails')|length }}
- {% if visitor.getColumn('actionDetails')|length <= 1 %}
+ {% set actionCount = visitor.getColumn('actionDetails')|length %}
+ {% if visitor.truncatedActionsCount is defined %}
+ {% set actionCount = actionCount + visitor.truncatedActionsCount %}
+ {% endif %}
+ {{ actionCount }}
+ {% if actionCount <= 1 %}
{{ 'General_Action'|translate }}
{% else %}
{{ 'General_Actions'|translate }}
@@ -211,7 +42,7 @@ GPS (lat/long): {{ visitor.getColumn('latitude') }},{{ visitor.getColumn('longit
<div class="visitor-log-page-list">
<ol class='visitorLog'>
- {% include "@Live/_actionsList.twig" with {'actionDetails': visitor.getColumn('actionDetails')} %}
+ {% include "@Live/_actionsList.twig" with {'actionDetails': visitor.getColumn('actionDetails'), 'visitInfo': visitor} %}
</ol>
</div>
{{ postEvent('Live.visitorLogViewAfterActionsInfo', visitor) }}
diff --git a/plugins/Live/templates/_profileSummary.twig b/plugins/Live/templates/_profileSummary.twig
new file mode 100644
index 0000000000..21c01ad9e8
--- /dev/null
+++ b/plugins/Live/templates/_profileSummary.twig
@@ -0,0 +1,40 @@
+{% set pageviewDetails %}
+ {{ visitorData.totalUniquePageViews }} {{ 'General_ColumnUniquePageviews'|translate }}, {{ visitorData.totalRevisitedPages }} {{ 'Actions_RevisitedPages'|translate }}
+{% endset %}
+
+<div class="visitor-profile-summary visitor-profile-resume">
+ <h1>{{ 'General_Summary'|translate }}</h1>
+ <div>
+ {% if visitorData.totalPageViews != visitorData.totalActions %}
+ {% set actionDetails = [] %}
+ {% if visitorData.totalPageViews > 0 %}{% set actionDetails = actionDetails|merge(['<span title="' ~ pageviewDetails ~ '">' ~ visitorData.totalPageViews ~ ' ' ~ 'General_ColumnPageviews'|translate ~ '</span>']) %}{% endif %}
+ {% if visitorData.totalEvents > 0 %}{% set actionDetails = actionDetails|merge([visitorData.totalEvents ~ ' ' ~ 'Events_Events'|translate]) %}{% endif %}
+ {% if visitorData.totalDownloads > 0 %}{% set actionDetails = actionDetails|merge([visitorData.totalDownloads ~ ' ' ~ 'General_Downloads'|translate]) %}{% endif %}
+ {% if visitorData.totalOutlinks > 0 %}{% set actionDetails = actionDetails|merge([visitorData.totalOutlinks ~ ' ' ~ 'General_Outlinks'|translate]) %}{% endif %}
+ {% if visitorData.totalSearches > 0 %}{% set actionDetails = actionDetails|merge([visitorData.totalSearches ~ ' ' ~ 'Actions_ColumnSearches'|translate]) %}{% endif %}
+ <p>{{ 'Live_VisitSummaryWithActionDetails'|translate('<strong>' ~ visitorData.totalVisitDurationPretty ~ '</strong>', '', '', '<strong>' ~ visitorData.totalActions, '</strong>', actionDetails|join(', ') , '<strong>' ~ visitorData.totalVisits, '</strong>')|raw }}</p>
+ {% else %}
+ <p>{{ 'Live_VisitSummary'|translate('<strong>' ~ visitorData.totalVisitDurationPretty ~ '</strong>', '', '', '<strong title="' ~ pageviewDetails ~ '">' ~ visitorData.totalActions, '</strong>', '<strong>' ~ visitorData.totalVisits, '</strong>')|raw }}</p>
+ {% endif %}
+ {% if visitorData.totalGoalConversions is defined %}
+ <p>{% if visitorData.totalGoalConversions %}<strong>{% endif %}{{ 'Live_ConvertedNGoals'|translate(visitorData.totalGoalConversions) }}{% if visitorData.totalGoalConversions %}</strong>{% endif %}
+ {%- if visitorData.totalGoalConversions %} (
+ {%- for idGoal, totalConversions in visitorData.totalConversionsByGoal -%}
+ {%- set idGoal = idGoal[7:] -%}
+ {%- if not loop.first %}, {% endif -%}{{- totalConversions }} {{ goals[idGoal]['name'] -}}
+ {%- endfor -%}
+ ){% endif %}.</p>
+ {% endif %}
+ {% if visitorData.totalSearches|default(0) %}
+ <p>
+ {{ 'Actions_WidgetSearchKeywords'|translate }}:
+ {%- for entry in visitorData.searches %} <strong title="{% if entry.searches == 1 %}{{ 'Actions_OneSearch'|translate }}{% else %}{{ 'UserCountryMap_Searches'|translate(entry.searches) }}{% endif %}">{{ entry.keyword }}</strong>{% if not loop.last %},{% endif %}{% endfor %}
+ </p>
+ {% endif %}
+ {% if visitorData.averagePageGenerationTime is defined %}
+ <p title="{{ 'Live_CalculatedOverNPageViews'|translate(visitorData.totalPageViewsWithTiming) }}">
+ {{ 'Live_AveragePageGenerationTime'|translate('<strong>' ~ visitorData.averagePageGenerationTime ~ 's</strong>')|raw }}
+ </p>
+ {% endif %}
+ </div>
+</div> \ No newline at end of file
diff --git a/plugins/Live/templates/_profileSummaryVisits.twig b/plugins/Live/templates/_profileSummaryVisits.twig
new file mode 100644
index 0000000000..a5c247ddf6
--- /dev/null
+++ b/plugins/Live/templates/_profileSummaryVisits.twig
@@ -0,0 +1,39 @@
+<div class="visitor-profile-summary visitor-profile-important-visits">
+ {%- set keywordNotDefined = 'General_NotDefined'|translate('General_ColumnKeyword'|translate) -%}
+ <div>
+ <h1>{% if visitorData.visitsAggregated == 100 %}{{ 'General_Visit'|translate }}# 100{% else %}{{ 'Live_FirstVisit'|translate }}{% endif %}</h1>
+ <div>
+ <p><strong>{{ visitorData.firstVisit.prettyDate }}</strong>&nbsp;- {{ 'UserCountryMap_DaysAgo'|translate(visitorData.firstVisit.daysAgo) }}</p>
+ <p>
+ {{ 'General_FromReferrer'|translate }} <strong {% if visitorData.firstVisit.referrerType == 'search' and '(' not in visitorData.firstVisit.referralSummary %}title="{{ keywordNotDefined }}"{% endif %}>
+ {%- if visitorData.firstVisit.referrerType == 'website' %}
+ <a href="{{ visitorData.firstVisit.referrerUrl }}" target="_blank">
+ {{ visitorData.firstVisit.referralSummary }}
+ </a>
+ {% else %}
+ {{ visitorData.firstVisit.referralSummary }}
+ {% endif %}
+ </strong>
+ </p>
+ </div>
+ </div>
+ {% if visitorData.lastVisits.getRowsCount() != 1 %}
+ <div>
+ <h1>{{ 'Live_LastVisit'|translate }}</h1>
+ <div>
+ <p><strong>{{ visitorData.lastVisit.prettyDate }}</strong>&nbsp;- {{ 'UserCountryMap_DaysAgo'|translate(visitorData.lastVisit.daysAgo) }}</p>
+ <p>
+ {{ 'General_FromReferrer'|translate }} <strong {% if visitorData.lastVisit.referrerType == 'search' and '(' not in visitorData.lastVisit.referralSummary %}title="{{ keywordNotDefined }}"{% endif %}>
+ {%- if visitorData.lastVisit.referrerType == 'website' %}
+ <a href="{{ visitorData.lastVisit.referrerUrl }}" target="_blank">
+ {{ visitorData.lastVisit.referralSummary }}
+ </a>
+ {% else %}
+ {{ visitorData.lastVisit.referralSummary }}
+ {% endif %}
+ </strong>
+ </p>
+ </div>
+ </div>
+ {% endif %}
+</div> \ No newline at end of file
diff --git a/plugins/Live/templates/_visitorDetails.twig b/plugins/Live/templates/_visitorDetails.twig
new file mode 100644
index 0000000000..63edc4fd80
--- /dev/null
+++ b/plugins/Live/templates/_visitorDetails.twig
@@ -0,0 +1,17 @@
+<strong class="visitor-log-datetime visitorLogTooltip" title="{% if visitInfo.getColumn('visitorType')=='new' %}{{ 'General_NewVisitor'|translate }}{% else %}{{ 'Live_VisitorsLastVisit'|translate(visitInfo.getColumn('daysSinceLastVisit')) }}{% endif %}">
+ {{ visitInfo.getColumn('serverDatePrettyFirstAction') }}
+ {% if isWidget %}<br/>{% else %}-{% endif %} {{ visitInfo.getColumn('serverTimePrettyFirstAction') }}</strong>
+{% if visitInfo.getColumn('visitIp') is not empty %}
+<span class="visitor-log-ip-location visitorLogTooltip" title="{% if visitInfo.getColumn('userId') is not empty %}{{ 'General_UserId'|translate }}: {{ visitInfo.getColumn('userId')|raw }}
+{% endif %}{% if visitInfo.getColumn('visitorId') is not empty %}{{ 'General_VisitorID'|translate }}: {{ visitInfo.getColumn('visitorId') }}
+{% endif %}{% if visitInfo.getColumn('idVisit') is not empty %}
+{{ 'General_Visit'|translate }} ID: {{ visitInfo.getColumn('idVisit') }}
+{% endif %}{% if visitInfo.getColumn('latitude') or visitInfo.getColumn('longitude') %}{{ visitInfo.getColumn('location') }}
+GPS (lat/long): {{ visitInfo.getColumn('latitude') }},{{ visitInfo.getColumn('longitude') }}{% endif %}">
+ IP: {{ visitInfo.getColumn('visitIp') }}
+ {% if visitInfo.getColumn('userId') is not empty %}<br/><br/>{{ visitInfo.getColumn('userId')|raw }}{% endif %}
+</span>{% endif %}
+{% if isWidget %}
+ <br />
+ {{ postEvent('Live.renderVisitorIcons', visitInfo) }}
+{% endif %}
diff --git a/plugins/Live/templates/_visitorLogIcons.twig b/plugins/Live/templates/_visitorLogIcons.twig
new file mode 100644
index 0000000000..63dbeb748a
--- /dev/null
+++ b/plugins/Live/templates/_visitorLogIcons.twig
@@ -0,0 +1,84 @@
+{% set visitHasEcommerceActivity = visitor.getColumn('visitEcommerceStatusIcon') %}
+{% set breakBeforeVisitorRank = (visitHasEcommerceActivity and visitor.getColumn('visitorTypeIcon')) ? true : false %}
+
+<span class="visitorLogIcons">
+
+ <span class="visitorDetails">
+ {% if visitor.getColumn('visitorTypeIcon') %}
+ <span class="visitorLogIconWithDetails visitorTypeIcon">
+ <img src="{{ visitor.getColumn('visitorTypeIcon') }}"/>
+ <ul class="details">
+ <li>{{ 'General_ReturningVisitor'|translate }} - {{ 'General_NVisits'|translate(visitor.getColumn('visitCount')) }}</li>
+ </ul>
+ </span>
+ {% endif %}
+ {% if visitor.getColumn('countryFlag') %}
+ <span class="visitorLogIconWithDetails flag" profile-header-text="{% if visitor.getColumn('city') %}{{ visitor.getColumn('city')|e('html_attr') }}{% else %}{{ visitor.getColumn('country') }}{% endif %}">
+
+ <img src="{{ visitor.getColumn('countryFlag') }}"/>
+ <ul class="details">
+ <li>{{ 'UserCountry_Country'|translate }}: {{ visitor.getColumn('country') }}</li>
+ {% if visitor.getColumn('region') %}<li>{{ 'UserCountry_Region'|translate }}: {{ visitor.getColumn('region') }}</li>{% endif %}
+ {% if visitor.getColumn('city') %}<li>{{ 'UserCountry_City'|translate }}: {{ visitor.getColumn('city') }}</li>{% endif %}
+ {% if visitor.getColumn('language') %}<li>{{ 'UserLanguage_BrowserLanguage'|translate }}: {{ visitor.getColumn('language') }}</li>{% endif %}
+ </ul>
+ </span>
+ {% endif %}
+ {% if visitor.getColumn('browserIcon') %}
+ <span class="visitorLogIconWithDetails" profile-header-text="{{ visitor.getColumn('browser')|e('html_attr') }}">
+ <img src="{{ visitor.getColumn('browserIcon') }}"/>
+ <ul class="details">
+ <li>{{ 'DevicesDetection_ColumnBrowser'|translate }}: {{ visitor.getColumn('browser') }}</li>
+ <li>{{ 'DevicesDetection_BrowserEngine'|translate }}: {{ visitor.getColumn('browserFamily') }}</li>
+ {% if visitor.getColumn('pluginsIcons')|length > 0 %}
+ <li>
+ {{ 'General_Plugins'|translate }}:
+ {% for pluginIcon in visitor.getColumn('pluginsIcons') %}
+ <img width="16px" height="16px" src="{{ pluginIcon.pluginIcon }}" alt="{{ pluginIcon.pluginName|capitalize(true) }}"/>
+ {% endfor %}
+ </li>
+ {% endif %}
+ </ul>
+ </span>
+ {% endif %}
+ {% if visitor.getColumn('operatingSystemIcon') %}
+ <span class="visitorLogIconWithDetails" profile-header-text="{{ visitor.getColumn('operatingSystem')|e('html_attr') }}">
+ <img src="{{ visitor.getColumn('operatingSystemIcon') }}"/>
+ <ul class="details">
+ <li>{{ 'DevicesDetection_ColumnOperatingSystem'|translate }}: {{ visitor.getColumn('operatingSystem') }}</li>
+ </ul>
+ </span>
+ {% endif %}
+ {% if visitor.getColumn('deviceTypeIcon') %}
+ <span class="visitorLogIconWithDetails" profile-header-text="{% if visitor.getColumn('resolution') %}{{ visitor.getColumn('resolution')|e('html_attr') }}{% else %}{{ visitor.getColumn('deviceType') }}{% endif %}">
+ <img src="{{ visitor.getColumn('deviceTypeIcon') }}"/>
+ <ul class="details">
+ <li>{{ 'DevicesDetection_DeviceType'|translate }}: {{ visitor.getColumn('deviceType') }}</li>
+ {% if visitor.getColumn('deviceBrand') %}<li>{{ 'DevicesDetection_DeviceBrand'|translate }}: {{ visitor.getColumn('deviceBrand') }}</li>{% endif %}
+ {% if visitor.getColumn('deviceModel') %}<li>{{ 'DevicesDetection_DeviceModel'|translate }}: {{ visitor.getColumn('deviceModel') }}</li>{% endif %}
+ {% if visitor.getColumn('resolution') %}<li>{{ 'Resolution_ColumnResolution'|translate }}: {{ visitor.getColumn('resolution') }}</li>{% endif %}
+ </ul>
+ </span>
+ {% endif %}
+ </span>
+
+ {% if visitor.getColumn('goalConversions') or visitHasEcommerceActivity %}
+ <span class="visitorType">
+ {# Goals, and/or Ecommerce activity #}
+ {% if visitor.getColumn('goalConversions') %}
+ <span title="{{ 'General_VisitConvertedNGoals'|translate(visitor.getColumn('goalConversions')) }}" class='visitorRank visitorLogTooltip'
+ {% if isWidget or breakBeforeVisitorRank %}style="margin-left:0;"{% endif %}>
+ <img src="{{ visitor.getColumn('visitConvertedIcon') }}"/>
+ {{ visitor.getColumn('goalConversions') }}
+ {% if visitHasEcommerceActivity %}
+ &nbsp;
+ <img src="{{ visitor.getColumn('visitEcommerceStatusIcon') }}" class='visitorLogTooltip' title="{{ visitor.getColumn('visitEcommerceStatus') }}"/>
+ {% endif %}
+ </span>
+ {# Ecommerce activity only (no goal) #}
+ {% elseif visitHasEcommerceActivity %}
+ <img class="visitorLogTooltip" src="{{ visitor.getColumn('visitEcommerceStatusIcon') }}" title="{{ visitor.getColumn('visitEcommerceStatus') }}"/>
+ {% endif %}
+ </span>
+ {% endif %}
+</span>
diff --git a/plugins/Live/templates/getLastVisitsStart.twig b/plugins/Live/templates/getLastVisitsStart.twig
index 4e44f75427..67d6080c44 100644
--- a/plugins/Live/templates/getLastVisitsStart.twig
+++ b/plugins/Live/templates/getLastVisitsStart.twig
@@ -144,7 +144,8 @@
{% elseif action.eventCategory|default(false) is not empty %}
<img class="iconPadding" src='{{ action.icon }}'
title="{{ 'Events_Event'|translate }} {{ action.eventCategory }} - {{ action.eventAction }} {% if action.eventName is defined %}- {{ action.eventName }}{% endif %} {% if action.eventValue is defined %}- {{ action.eventValue }}{% endif %}"/>
- {% else %}
+ {% elseif action.type == 'goal' or action.type == constant('Piwik\\Piwik::LABEL_ID_GOAL_IS_ECOMMERCE_ORDER') or
+ action.type == constant('Piwik\\Piwik::LABEL_ID_GOAL_IS_ECOMMERCE_CART') %}
<img class='iconPadding' src="{{ action.icon }}"
title="{{ action.goalName }} - {% if action.revenue > 0 %}{{ 'General_ColumnRevenue'|translate }}: {{ action.revenue|money(idSite)|raw }} - {% endif %} {{ action.serverTimePretty }}"/>
{% endif %}
diff --git a/plugins/Live/templates/getSingleVisitSummary.twig b/plugins/Live/templates/getSingleVisitSummary.twig
deleted file mode 100644
index c7af9a6c2c..0000000000
--- a/plugins/Live/templates/getSingleVisitSummary.twig
+++ /dev/null
@@ -1,68 +0,0 @@
-{% macro customVar(id, customVariable) %}
- {% set name='customVariableName' ~ id %}
- {% set value='customVariableValue' ~ id %}
- <li><span>{{ customVariable[name]|truncate(30) }}</span>{% if customVariable[value]|length > 0 %}<strong>{{ customVariable[value]|truncate(50) }}</strong>{% endif %}</li>
-{% endmacro %}
-{% import _self as macros %}
-{% if showLocation|default(false) %}
-<div class="visitor-profile-latest-visit-loc" title="{{ visitData.location }}">
- <img src="{{ visitData.countryFlag }}"/>&nbsp;<span>{% if visitData.city is not empty %}{{ visitData.city }}{% else %}{{ visitData.country }}{% endif %}</span>
-</div>
-{% endif %}
-<div class="visitor-profile-latest-visit-column">
- <ul>
- <li>
- <span>{{ 'General_IP'|translate }}</span><strong {% if visitData.providerName is defined and visitData.providerName is not empty %}title="{{ 'Provider_ColumnProvider'|translate }}: {{ visitData.providerName }}"{% endif %}>{{ visitData.visitIp }}</strong>
- </li>
- <li class="visitor-profile-id">
- <span>{{ 'General_Id'|translate|upper }}</span>
- {% if widgetizedLink is defined %}<a class="visitor-profile-widget-link" href="{{ widgetizedLink }}" target="_blank" title="{{ 'Widgetize_OpenInNewWindow'|translate }} - {{ 'Live_VisitorProfile'|translate }} {{ 'General_Id'|translate|upper }} {{ visitData.visitorId }}">{% endif %}
- <strong>{{ visitData.visitorId }}</strong>
- {% if widgetizedLink is defined %}</a>{% endif %}
- <a class="visitor-profile-export" href="{{ exportLink }}" target="_blank" title="{{ 'General_ExportThisReport'|translate }}">
- <span class="icon-export"></span>
- </a>
- </li>
- <li>
- {% if visitData.browserName is defined %}
- <div class="visitor-profile-browser" title="{% if visitData.plugins is not defined %}{{ visitData.browser }}{% elseif visitData.plugins %}{{ 'DevicePlugins_BrowserWithPluginsEnabled'|translate(visitData.browser, visitData.plugins) }}{% else %}{{ 'DevicePlugins_BrowserWithNoPluginsEnabled'|translate(visitData.browser) }}{% endif %}">
- {% if visitData.browserIcon is defined %}<img src="{{ visitData.browserIcon }}" width="16px" height="16px"/>{% endif %}<span>{{ visitData.browserName|split(' ')[0] }}</span>
- </div>
- {% endif %}
-
- <div class="visitor-profile-os">
- {% if visitData.operatingSystemIcon is defined %}<img src="{{ visitData.operatingSystemIcon }}" width="16px" height="16px"/>{% endif %}{% if visitData.operatingSystem is defined %}<span>{{ visitData.operatingSystem }}</span>{% endif %}
- </div>
- </li>
- {% if visitData.resolution is defined %}<li><span>{{ 'Resolution_ColumnResolution'|translate }}</span><strong>{{ visitData.resolution }}</strong></li>{% endif %}
- {% if visitData.userId is not empty %}<li><span>{{ 'General_UserId'|translate }}</span><strong>{{ visitData.userId|raw }}</strong></li>{% endif %}
- {% if visitReferralSummary is defined %}
- {%- set keywordNotDefined = 'General_NotDefined'|translate('General_ColumnKeyword'|translate) -%}
- <li>
- <span>{{ 'General_DateRangeFrom'|translate }}</span>
- <strong {% if visitData.referrerType == 'search' and '(' not in visitReferralSummary %}title="{{ keywordNotDefined }}"{% endif %}>{{ visitReferralSummary }}</strong>
- </li>
- {% endif %}
- </ul>
-</div>
-<div class="visitor-profile-latest-visit-column">
- {% if visitData.customVariables is defined %}
- <ul>
- {% for id,customVariable in visitData.customVariables %}
- {% if loop.index0 < 4 %}
- {{ macros.customVar(id, customVariable) }}
- {% endif %}
- {% endfor %}
- </ul>
- {% endif %}
- {% if visitData.customVariables is defined and visitData.customVariables|length > 4 %}
- <ul class="visitor-profile-extra-cvars" style="display:none;">
- {% for id,customVariable in visitData.customVariables %}
- {% if loop.index0 >= 4 %}
- {{ macros.customVar(id, customVariable) }}
- {% endif %}
- {% endfor %}
- </ul>
- <p class="visitor-profile-see-more-cvars"><a href="#">&#x25bc;</a></p>
- {% endif %}
-</div>
diff --git a/plugins/Live/templates/getVisitList.twig b/plugins/Live/templates/getVisitList.twig
index 9266afbcb6..b64ed585c5 100644
--- a/plugins/Live/templates/getVisitList.twig
+++ b/plugins/Live/templates/getVisitList.twig
@@ -1,27 +1,35 @@
{% for visitInfo in visits.getRows() %}
-<li>
+<li data-number="{{ startCounter }}">
<div>
- <div class="visitor-profile-visit-title-row">
- <h2 class="visitor-profile-visit-title" data-idvisit="{{ visitInfo.getColumn('idVisit') }}" title="{{ 'Live_ClickToViewMoreAboutVisit'|translate }}">
- {{ 'General_Visit'|translate }} #{{ startCounter }}
+ <div class="visitor-profile-visit-title" data-idvisit="{{ visitInfo.getColumn('idVisit') }}" title="{{ 'Live_ClickToViewMoreAboutVisit'|translate }}">
+ {{ 'General_Visit'|translate }} #{{ startCounter }}
+ <span class="visitor-profile-date" title="{{ visitInfo.getColumn('serverDatePrettyFirstAction') }} {{ visitInfo.getColumn('serverTimePrettyFirstAction') }}">
+ {{ visitInfo.getColumn('serverDatePrettyFirstAction') }} {{ visitInfo.getColumn('serverTimePrettyFirstAction') }}
+ </span>
+ </div>
+ <div class="visitor-profile-visit-details-extended">
+ {{ postEvent('Live.renderVisitorDetails', visitInfo) }}
+ </div>
+ <div class="visitor-profile-visit-details">
+ {{ postEvent('Live.renderVisitorIcons', visitInfo) }}
+ <a href="#" class="visitor-profile-show-actions">
+ {% set actionCount = visitInfo.getColumn('actionDetails')|length %}
+ {% if visitInfo.truncatedActionsCount is defined %}
+ {% set actionCount = actionCount + visitInfo.truncatedActionsCount %}
+ {% endif %}
{% if visitInfo.getColumn('visitDuration') != 0 %}
- <span>&nbsp; ({{ visitInfo.getColumn('visitDurationPretty')|raw }})</span>
+ {{ 'Live_ActionsAndDuration'|translate(actionCount, visitInfo.getColumn('visitDurationPretty')) }}
+ {% else %}
+ {{ actionCount }} {{ 'General_Actions'|translate }}
{% endif %}
- <span class="visitor-profile-date" title="{{ visitInfo.getColumn('serverDatePrettyFirstAction') }} {{ visitInfo.getColumn('serverTimePrettyFirstAction') }}">
- {{ visitInfo.getColumn('serverDatePrettyFirstAction') }} {{ visitInfo.getColumn('serverTimePrettyFirstAction') }}
- </span>
- </h2>
+ </a>
</div>
- <ol class="visitor-profile-actions">
+ <ol class="visitorLog visitor-profile-actions">
{% include "@Live/_actionsList.twig" with {'actionDetails': visitInfo.getColumn('actionDetails'),
- 'clientSideParameters': {
- 'idSite': idSite,
- 'pageUrlNotDefined': 'General_NotDefined'|translate('Actions_ColumnPageURL'|translate)
- },
- 'overrideLinkStyle': false} %}
+ 'visitInfo': visitInfo} %}
</ol>
</div>
</li>
-{% set startCounter = startCounter + 1 %}
-{% endfor %}
+{% set startCounter = startCounter - 1 %}
+{% endfor %} \ No newline at end of file
diff --git a/plugins/Live/templates/getVisitorProfilePopup.twig b/plugins/Live/templates/getVisitorProfilePopup.twig
index a5b69e7fbd..f21a2477a3 100644
--- a/plugins/Live/templates/getVisitorProfilePopup.twig
+++ b/plugins/Live/templates/getVisitorProfilePopup.twig
@@ -1,174 +1,88 @@
{% if not visitorData %}
<div class="pk-emptyDataTable">{{ 'CoreHome_ThereIsNoDataForThisReport'|translate }}</div>
{% else %}
-<div class="visitor-profile"
- data-visitor-id="{{ visitorData.lastVisits.getFirstRow().getColumn('visitorId') }}"
- data-next-visitor="{{ visitorData.nextVisitorId }}"
- data-prev-visitor="{{ visitorData.previousVisitorId }}"
- tabindex="0">
- <a href class="visitor-profile-close" title="{{ 'General_Close'|translate }} "></a>
- <div class="visitor-profile-info">
- <div>
+ <div class="visitor-profile"
+ data-visitor-id="{{ visitorData.lastVisits.getFirstRow().getColumn('visitorId') }}"
+ data-next-visitor="{{ visitorData.nextVisitorId }}"
+ data-prev-visitor="{{ visitorData.previousVisitorId }}"
+ tabindex="0">
+ <div class="visitor-profile-options">
+ <a href class="visitor-profile-close" title="{{ 'General_Close'|translate }} "></a>
+ <a href="http://piwik.org/docs/user-profile/" class="visitor-profile-help" rel="noreferrer"
+ target="_blank"
+ title="{{ 'General_ViewDocumentationFor'|translate("Live_VisitorProfile"|translate|ucwords) }}">
+ </a>
+ <a href class="visitor-profile-toggle-actions" title="{{ 'Live_ToggleActions'|translate }} "></a>
+ </div>
+ <div class="visitor-profile-info">
<div class="visitor-profile-overview">
- <div class="visitor-profile-avatar">
- <div>
- <div class="visitor-profile-image-frame">
- <img src="{{ visitorData.visitorAvatar|default("plugins/Live/images/unknown_avatar.png") }}"
- alt="{{ visitorData.visitorDescription|default('') }}"
- title="{{ visitorData.visitorDescription|default('') }}" />
- </div>
- <img src="plugins/Live/images/paperclip.png" alt=""/>
+ <div class="visitor-profile-header">
+ <div class="visitor-profile-avatar">
+ <img src="{{ visitorData.visitorAvatar|default("plugins/Live/images/unknown_avatar.png") }}"
+ alt="{{ visitorData.visitorDescription|default('') }}"
+ title="{{ visitorData.visitorDescription|default('') }}"/>
</div>
- <div>
- <div class="visitor-profile-header">
- {% if visitorData.previousVisitorId is not empty %}<a class="visitor-profile-prev-visitor" href="#" title="{{ 'Live_PreviousVisitor'|translate }}">&larr;</a>{% endif %}
- <h1>{{ 'Live_VisitorProfile'|translate }}
- {%- if visitorData.userId is not empty %}: <span title="{{'General_UserId'|translate}}: {{ visitorData.userId|raw }}">{{ visitorData.userId|raw }}</span>{% endif -%}
- <img class="loadingPiwik" style="display:none;" src="plugins/Morpheus/images/loading-blue.gif"/>
+ <div class="visitor-profile-header-details">
+ <div class="visitor-profile-headline">
+ {% if visitorData.previousVisitorId is not empty %}<a class="visitor-profile-prev-visitor"
+ href="#"
+ title="{{ 'Live_PreviousVisitor'|translate }}">
+ &larr;</a>{% endif %}
+ <h1>
+ {%- if visitorData.userId is empty %}
+ {{ 'Live_VisitorProfile'|translate }}
+ {%- else %}
+ <span title="{{ 'General_UserId'|translate }}: {{ visitorData.userId|raw }}">{{ visitorData.userId|raw }}</span>
+ {% endif -%}
</h1>
- <a href="http://piwik.org/docs/user-profile/" class="visitorProfileHelp" rel="noreferrer" target="_blank" title="{{ 'General_ViewDocumentationFor'|translate("Live_VisitorProfile"|translate|ucwords) }}">
- <span class="icon-help"></span>
- </a>
- {% if visitorData.nextVisitorId is not empty %}<a class="visitor-profile-next-visitor" href="#" title="{{ 'Live_NextVisitor'|translate }}">&rarr;</a>{% endif %}
+ {% if visitorData.nextVisitorId is not empty %}<a class="visitor-profile-next-visitor"
+ href="#"
+ title="{{ 'Live_NextVisitor'|translate }}">
+ &rarr;</a>{% endif %}
</div>
<div class="visitor-profile-latest-visit">
- {% include "@Live/getSingleVisitSummary.twig" with {'visitData': visitorData.lastVisits.getFirstRow().getColumns(), 'showLocation': false} %}
- </div>
- </div>
- <p style="clear:both; border:none!important;"></p>
- </div>
- <div class="visitor-profile-summary">
- <h1>{{ 'General_Summary'|translate }}</h1>
- <div>
- {% if visitorData.totalPageViews != visitorData.totalActions %}
- {% set actionDetails = [] %}
- {% if visitorData.totalPageViews > 0 %}{% set actionDetails = actionDetails|merge([visitorData.totalPageViews ~ ' ' ~ 'General_ColumnPageviews'|translate]) %}{% endif %}
- {% if visitorData.totalEvents > 0 %}{% set actionDetails = actionDetails|merge([visitorData.totalEvents ~ ' ' ~ 'Events_Events'|translate]) %}{% endif %}
- {% if visitorData.totalDownloads > 0 %}{% set actionDetails = actionDetails|merge([visitorData.totalDownloads ~ ' ' ~ 'General_Downloads'|translate]) %}{% endif %}
- {% if visitorData.totalOutlinks > 0 %}{% set actionDetails = actionDetails|merge([visitorData.totalOutlinks ~ ' ' ~ 'General_Outlinks'|translate]) %}{% endif %}
- {% if visitorData.totalSearches > 0 %}{% set actionDetails = actionDetails|merge([visitorData.totalSearches ~ ' ' ~ 'Actions_ColumnSearches'|translate]) %}{% endif %}
- <p>{{ 'Live_VisitSummaryWithActionDetails'|translate('<strong>' ~ visitorData.totalVisitDurationPretty ~ '</strong>', '', '', '<strong>' ~ visitorData.totalActions, '</strong>', actionDetails|join(', ') , '<strong>' ~ visitorData.totalVisits, '</strong>')|raw }}</p>
- {% else %}
- <p>{{ 'Live_VisitSummary'|translate('<strong>' ~ visitorData.totalVisitDurationPretty ~ '</strong>', '', '', '<strong>' ~ visitorData.totalActions, '</strong>', '<strong>' ~ visitorData.totalVisits, '</strong>')|raw }}</p>
- {% endif %}
- <p>{% if visitorData.totalGoalConversions %}<strong>{% endif %}{{ 'Live_ConvertedNGoals'|translate(visitorData.totalGoalConversions) }}{% if visitorData.totalGoalConversions %}</strong>{% endif %}
- {%- if visitorData.totalGoalConversions %} (
- {%- for idGoal, totalConversions in visitorData.totalConversionsByGoal -%}
- {%- set idGoal = idGoal[7:] -%}
- {%- if not loop.first %}, {% endif -%}{{- totalConversions }} {{ goals[idGoal]['name'] -}}
- {%- endfor -%}
- ){% endif %}.</p>
- {% if visitorData.totalSearches|default(0) %}
- <p>
- {{ 'Actions_WidgetSearchKeywords'|translate }}:
- {%- for entry in visitorData.searches %} <strong title="{% if entry.searches == 1 %}{{ 'Actions_OneSearch'|translate }}{% else %}{{ 'UserCountryMap_Searches'|translate(entry.searches) }}{% endif %}">{{ entry.keyword }}</strong>{% if not loop.last %},{% endif %}{% endfor %}
- </p>
- {% endif %}
- {% if visitorData.averagePageGenerationTime is defined %}
- <p title="{{ 'Live_CalculatedOverNPageViews'|translate(visitorData.totalPageViewsWithTiming) }}">
- {{ 'Live_AveragePageGenerationTime'|translate('<strong>' ~ visitorData.averagePageGenerationTime ~ 's</strong>')|raw }}
- </p>
- {% endif %}
- </div>
- </div>
- {% if visitorData.totalEcommerceRevenue is defined %}
- <div class="visitor-profile-lifetimevalue">
- <h1>{{ 'Goals_Ecommerce'|translate }}</h1>
- <div>
- <p title="{{ 'Ecommerce_LifeTimeValueDescription'|translate(visitorData.visitorId) }}">
- {{ 'Ecommerce_VisitorProfileLTV'|translate( "<strong>" ~ visitorData.totalEcommerceRevenue|money(idSite) ~ "</strong>")|raw }}
- {{ 'Ecommerce_VisitorProfileItemsAndOrders'|translate("<strong>" ~ visitorData.totalEcommerceItems ~ "</strong>", "<strong>" ~ visitorData.totalEcommerceConversions ~ "</strong>")|raw }}
- </p>
- <p>
- {%- if visitorData.totalAbandonedCarts|default(0) > 0 %}
- {{ 'Ecommerce_VisitorProfileAbandonedCartSummary'|translate('<strong>' ~ visitorData.totalAbandonedCarts ~ '</strong>', '<strong>' ~ visitorData.totalAbandonedCartsItems ~ '</strong>', '<strong>' ~ visitorData.totalAbandonedCartsRevenue|money(idSite) ~ '</strong>')|raw }}
- {%- endif -%}
- </p>
- </div>
- </div>
- {% endif %}
- <div class="visitor-profile-important-visits">
- {%- set keywordNotDefined = 'General_NotDefined'|translate('General_ColumnKeyword'|translate) -%}
- <div>
- <h1>{% if visitorData.visitsAggregated == 100 %}{{ 'General_Visit'|translate }}# 100{% else %}{{ 'Live_FirstVisit'|translate }}{% endif %}</h1>
- <div>
- <p><strong>{{ visitorData.firstVisit.prettyDate }}</strong>&nbsp;- {{ 'UserCountryMap_DaysAgo'|translate(visitorData.firstVisit.daysAgo) }}</p>
- <p>
- {{ 'General_FromReferrer'|translate }}<strong {% if visitorData.firstVisit.referrerType == 'search' and '(' not in visitorData.firstVisit.referralSummary %}title="{{ keywordNotDefined }}"{% endif %}>{{ visitorData.firstVisit.referralSummary }}</strong></p>
+ <div class="visitor-profile-id">
+ <span>{{ 'General_Id'|translate|upper }}</span>
+ {% if widgetizedLink is defined %}<a class="visitor-profile-widget-link"
+ href="{{ widgetizedLink }}" target="_blank"
+ title="{{ 'Widgetize_OpenInNewWindow'|translate }} - {{ 'Live_VisitorProfile'|translate }} {{ 'General_Id'|translate|upper }} {{ visitorData.visitorId }}">{% endif %}
+ <span>{{ visitorData.visitorId }}</span>
+ {%- if widgetizedLink is defined %}</a>{% endif %}
+ <a class="visitor-profile-export" href="{{ exportLink }}" target="_blank"
+ title="{{ 'General_ExportThisReport'|translate }}">
+ <span class="icon-export"></span>
+ </a>
+ </div>
+ {{ postEvent('Live.renderVisitorIcons', visitorData.lastVisits|first) }}
</div>
</div>
- {% if visitorData.lastVisits.getRowsCount() != 1 %}
- <div>
- <h1>{{ 'Live_LastVisit'|translate }}</h1>
- <div>
- <p><strong>{{ visitorData.lastVisit.prettyDate }}</strong>&nbsp;- {{ 'UserCountryMap_DaysAgo'|translate(visitorData.lastVisit.daysAgo) }}</p>
- <p>
- {{ 'General_FromReferrer'|translate }}<strong {% if visitorData.lastVisit.referrerType == 'search' and '(' not in visitorData.lastVisit.referralSummary %}title="{{ keywordNotDefined }}"{% endif %}>{{ visitorData.lastVisit.referralSummary }}</strong></p>
- </div>
- </div>
- {% endif %}
</div>
- <div class="visitor-profile-location">
- <h1>{{ 'UserCountry_Location'|translate }}</h1>
- <p>
- {%- for entry in visitorData.countries -%}
-
- {% set entryCity -%}
- {% if entry.cities is defined and 1 == entry.cities|length and entry.cities|join -%}
- {{ entry.cities|join }}
- {%- elseif entry.cities is defined and 1 < entry.cities|length -%}
- <span title="{{ entry.cities|join(', ') }}">{{ 'UserCountry_FromDifferentCities'|translate }}</span>
- {%- endif %}
- {%- endset %}
-
- {% set entryVisits -%}
- <strong>
- {% if entry.nb_visits == 1 -%}
- {{ 'General_OneVisit'|translate }}
- {%- else -%}
- {{ 'General_NVisits'|translate(entry.nb_visits) }}
- {%- endif -%}
- </strong>
- {%- endset %}
- {% set entryCountry -%}
- {%- if entryCity -%}
- {{ 'UserCountry_CityAndCountry'|translate(entryCity, entry.prettyName)|raw }}
- {%- else -%}
- {{ entry.prettyName }}
- {%- endif -%}
-
- &nbsp;<img height="16px" src="{{ entry.flag }}" title="{{ entry.prettyName }}"/>
- {%- endset %}
-
- {{- 'General_XFromY'|translate(entryVisits, entryCountry)|raw -}}{% if not loop.last %}, {% endif %}
- {%- endfor %}
- <a class="visitor-profile-show-map" href="#" {% if userCountryMapUrl|default('') is empty %}style="display:none"{% endif %}>({{ 'Live_ShowMap'|translate|replace({' ': '&nbsp;'})|raw }})</a> <img class="loadingPiwik" style="display:none;" src="plugins/Morpheus/images/loading-blue.gif"/>
- </p>
- <div class="visitor-profile-map" style="display:none" data-href="{{ userCountryMapUrl|default('') }}">
- </div>
- </div>
+ {{ profileSummary|raw }}
{{ postEvent('Template.afterVisitorProfileOverview') }}
</div>
<div class="visitor-profile-visits-info">
<div class="visitor-profile-visits-container">
<ol class="visitor-profile-visits">
- {% include "@Live/getVisitList.twig" with {'visits': visitorData.lastVisits, 'startCounter': 1} %}
+ {% include "@Live/getVisitList.twig" with {'visits': visitorData.lastVisits, 'startCounter': visitorData.totalVisits} %}
</ol>
</div>
<div class="visitor-profile-more-info">
{% if visitorData.lastVisits.getRowsCount() >= constant("Piwik\\Plugins\\Live\\VisitorProfile::VISITOR_PROFILE_MAX_VISITS_TO_SHOW") %}
- <a href="#">{{ 'Live_LoadMoreVisits'|translate }}</a> <img class="loadingPiwik" style="display:none;" src="plugins/Morpheus/images/loading-blue.gif"/>
+ <a href="#">{{ 'Live_LoadMoreVisits'|translate }}</a> <img class="loadingPiwik"
+ style="display:none;"
+ src="plugins/Morpheus/images/loading-blue.gif"/>
{% else %}
- <span class="visitor-profile-no-visits">{{ 'Live_NoMoreVisits'|translate }}</span>
+ <span class="visitor-profile-no-visits">{{ 'Live_NoMoreVisits'|translate }}</span>
{% endif %}
</div>
</div>
</div>
</div>
-</div>
-<script type="text/javascript">
-$(function() { require('piwik/UI').VisitorProfileControl.initElements(); });
-</script>
+ <script type="text/javascript">
+ $(function () {
+ require('piwik/UI').VisitorProfileControl.initElements();
+ });
+ </script>
{% endif %} \ No newline at end of file
diff --git a/plugins/Live/tests/Fixtures/VisitsWithAllActionsAndDevices.php b/plugins/Live/tests/Fixtures/VisitsWithAllActionsAndDevices.php
new file mode 100644
index 0000000000..9938f4c25c
--- /dev/null
+++ b/plugins/Live/tests/Fixtures/VisitsWithAllActionsAndDevices.php
@@ -0,0 +1,221 @@
+<?php
+/**
+ * Piwik - free/libre analytics platform
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+namespace Piwik\Plugins\Live\tests\Fixtures;
+
+use Piwik\Date;
+use Piwik\Tests\Framework\Fixture;
+use Piwik\Plugins\Goals\API as GoalsApi;
+use Piwik\Plugins\CustomDimensions\API as CustomDimensionsApi;
+
+/**
+ * Generates many visits for the same visitor
+ */
+class VisitsWithAllActionsAndDevices extends Fixture
+{
+ public $dateTime = '2010-02-01 11:22:33';
+ public $idSite = 1;
+
+ public function setUp()
+ {
+ if (!self::siteCreated($idSite = 1)) {
+ self::createWebsite($this->dateTime, 1);
+ }
+
+ GoalsApi::getInstance()->addGoal(1, 'Successfully used Search', 'manually', '', 'contains');
+
+ CustomDimensionsApi::getInstance()->configureNewCustomDimension(1, 'age', 'visit', 1);
+ CustomDimensionsApi::getInstance()->configureNewCustomDimension(1, 'currency', 'action', 1);
+
+ $t = self::getTracker($this->idSite, $this->dateTime, $defaultInit = true);
+ $t->setTokenAuth(self::getTokenAuth());
+
+ $t->setUserId('X4F66G776HGI');
+
+ // smart display
+ $this->trackDeviceVisit($t, Date::factory($this->dateTime)->addHour(0)->getDatetime(), 'Mozilla/5.0 (Linux; U; Android 4.0.4; de-de; VSD220 Build/IMM76D.UI23ED12_VSC) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30');
+
+ // media player
+ $this->trackVisitMediaPlayer($t, Date::factory($this->dateTime)->addHour(6.33)->getDatetime());
+
+ // tv
+ $this->trackDeviceVisit($t, Date::factory($this->dateTime)->addHour(16.6)->getDatetime(), 'Mozilla/5.0 (Linux; Android 4.2.2; AFTB Build/JDQ39) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.173 Mobile Safari/537.22 cordova-amazon-fireos/3.4.0 AmazonWebAppPlatform/3.4.0;2.0');
+
+ // desktop
+ $this->trackDeviceVisit($t, Date::factory($this->dateTime)->addHour(26.7)->getDatetime(), 'Mozilla/5.0 (Windows NT 6.3; Win64; x64; Trident/7.0; NP06; rv:11.0) like Gecko');
+ $this->trackDeviceVisit($t, Date::factory($this->dateTime)->addHour(32.5)->getDatetime(), 'Safari/9537.73.11 CFNetwork/673.0.3 Darwin/13.0.0 (x86_64) (MacBookAir6%2C2)');
+
+ // car browser
+ $this->trackDeviceVisit($t, Date::factory($this->dateTime)->addHour(60.4)->getDatetime(), 'Mozilla/5.0 (X11; u; Linux; C) AppleWebKit /533.3 (Khtml, like Gheko) QtCarBrowser Safari/533.3');
+
+ // unknown device
+ $this->trackDeviceVisit($t, Date::factory($this->dateTime)->addHour(75.1)->getDatetime(), 'Mozilla/5.0 (Android; Linux armv7l; rv:10.0) Gecko/20120118 Firefox/10.0 Fennec/10.0');
+
+ // smartphone
+ $this->trackDeviceVisit($t, Date::factory($this->dateTime)->addHour(79.5)->getDatetime(), 'Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; ADR910L 4G Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30');
+ $this->trackDeviceVisit($t, Date::factory($this->dateTime)->addHour(86.8)->getDatetime(), 'Mozilla/5.0 (Linux; U; Android 4.1.2; zh-cn; ZTE N799D Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30; 360browser(securitypay,securityinstalled); 360(android,uppayplugin); 360 Aphone Browser (5.4.0)');
+
+ $this->trackVisitSmartphone($t, Date::factory($this->dateTime)->addHour(101.6)->getDatetime());
+ $this->trackVisitTablet($t, Date::factory($this->dateTime)->addHour(156.9)->getDatetime());
+ }
+
+ public function tearDown()
+ {
+ // empty
+ }
+
+ private function trackVisitSmartphone(\PiwikTracker $t, $dateTime)
+ {
+ $t->setForceVisitDateTime($dateTime);
+ $t->setUserAgent('Mozilla/5.0 (Linux; U; Android 4.4.2; fr-fr; HTC One_M8 Build/KOT49H) AppleWebKit/537.16 (KHTML, like Gecko) Version/4.0 Mobile Safari/537.16');
+
+ $t->setCountry('jp');
+ $t->setRegion("40");
+ $t->setCity('Tokyo');
+ $t->setLatitude(35.70);
+ $t->setLongitude(139.71);
+
+ $t->setUrl('http://example.org/');
+ $t->setGenerationTime(251);
+ $t->setDebugStringAppend('bw_bytes=12053');
+ self::checkResponse($t->doTrackPageView('home'));
+
+ $t->doTrackContentImpression('product slider', 'product_16.jpg', 'http://example.org/product16');
+
+ $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.05)->getDatetime());
+ $t->doTrackEvent('product slider', 'next');
+ $t->doTrackContentImpression('product slider', 'product_42.jpg', 'http://example.org/product42');
+
+ $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.08)->getDatetime());
+ $t->doTrackContentInteraction('click', 'product slider', 'product_42.jpg', 'http://example.org/product42');
+
+ $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.1)->getDatetime());
+ $t->setUrl('http://example.org/product42');
+ $t->setCustomTrackingParameter('dimension2', 'NZD');
+ $t->setEcommerceView($sku = 'P42X4D', $name = 'product 42', $category = 'software', $price = 60);
+ $t->setGenerationTime(83);
+ $t->setDebugStringAppend('bw_bytes=36053');
+ self::checkResponse($t->doTrackPageView('product 42'));
+
+ $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.14)->getDatetime());
+ $t->doTrackAction('http://example.org/product42/productsheet.pdf', 'download');
+
+ $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.2)->getDatetime());
+ $t->setUrl('http://example.org/product42');
+ $t->addEcommerceItem('P42X4D', 'product 42', 'software', $price = 60, $qty = 2);
+ self::checkResponse($t->doTrackEcommerceOrder('X42FCY', 140, 120, 20, 6.9, 6.9));
+
+ $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.25)->getDatetime());
+ $t->setUrl('http://example.org/search');
+ $t->setGenerationTime(318);
+ $t->setDebugStringAppend('bw_bytes=2583');
+ self::checkResponse($t->doTrackPageView('product search'));
+
+ $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.29)->getDatetime());
+ $t->doTrackSiteSearch('fancy product', '', 12560);
+
+ $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.32)->getDatetime());
+ $t->doTrackEvent('search', 'filter', 'enormous category');
+
+ $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.35)->getDatetime());
+ $t->doTrackSiteSearch('fancy product', 'enormous category', 13);
+
+ $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.38)->getDatetime());
+ $t->doTrackGoal(1);
+
+ $t->setUrl('http://example.org/fancyproduct');
+ $t->setEcommerceView($sku = 'F4NCYX', $name = 'fancy product', $category = 'software', $price = 40);
+ $t->setGenerationTime(151);
+ $t->setDebugStringAppend('bw_bytes=68895');
+ self::checkResponse($t->doTrackPageView('fancy product'));
+
+ $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.4)->getDatetime());
+ $t->addEcommerceItem('F4NCYX', 'fancy product', 'software', $price = 40, $qty = 2);
+ self::checkResponse($t->doTrackEcommerceCartUpdate(140));
+
+ $t->setUrl('http://example.org/cart');
+ $t->setGenerationTime(33);
+ $t->setDebugStringAppend('bw_bytes=1590');
+ self::checkResponse($t->doTrackPageView('cart'));
+
+ $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.5)->getDatetime());
+ self::checkResponse($t->doTrackAction('http://vendor.site', 'link'));
+ }
+
+ private function trackVisitTablet(\PiwikTracker $t, $dateTime)
+ {
+ $t->setForceVisitDateTime($dateTime);
+ $t->setUserAgent('Mozilla/5.0 (Linux; U; en-us; KFAPWI Build/JDQ39) AppleWebKit/535.19 (KHTML, like Gecko) Silk/3.8 Safari/535.19 Silk-Accelerated=true');
+
+ $t->setUrlReferrer('http://www.google.com/search?q=product%2042');
+ $t->setUrl('http://example.org/product42');
+ $t->setGenerationTime(96);
+ $t->setDebugStringAppend('bw_bytes=6851');
+ $t->setCustomVariable(1, 'custom', 'variable', 'page');
+ $t->setCustomTrackingParameter('dimension1', '42');
+ $t->setCustomTrackingParameter('dimension2', '€');
+ self::checkResponse($t->doTrackPageView('product 42'));
+
+ $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.09)->getDatetime());
+ $t->setUrl('http://example.org/cart');
+ $t->addEcommerceItem('P42X4D', 'product 42', 'software', $price = 60, $qty = 1);
+ self::checkResponse($t->doTrackEcommerceOrder('R52Z6P', 66, 60, 6, 0, 0));
+
+ $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.2)->getDatetime());
+ $t->setUrl('http://example.org/');
+ $t->setGenerationTime(511);
+ $t->setDebugStringAppend('bw_bytes=2012');
+ self::checkResponse($t->doTrackPageView('home'));
+
+ $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.2)->getDatetime());
+ $t->setUrl('http://example.org/');
+ $t->setGenerationTime(511);
+ $t->setDebugStringAppend('bw_bytes=2012');
+ self::checkResponse($t->doTrackPageView('home'));
+
+ $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.2)->getDatetime());
+ $t->setUrl('http://example.org/');
+ $t->setGenerationTime(222);
+ $t->setDebugStringAppend('bw_bytes=950');
+ self::checkResponse($t->doTrackPageView('home'));
+
+ $t->doTrackContentImpression('product slider', 'product_16.jpg', 'http://example.org/product16');
+ }
+
+ private function trackVisitMediaPlayer(\PiwikTracker $t, $dateTime)
+ {
+ $t->setForceVisitDateTime($dateTime);
+ $t->setUserAgent('Mozilla/5.0 (iPod; U; CPU iPhone OS 4_2_1 like Mac OS X; ja-jp) AppleWebKit/533.17.9 (KHTML, like Gecko) Mobile/8C148');
+
+ $t->setUrlReferrer('http://www.nice.website/page3');
+ $t->setCustomVariable(1, 'promo', 'summer', 'visit');
+ $t->setCustomTrackingParameter('dimension1', '16');
+ $t->setUrl('http://example.org/');
+ $t->setGenerationTime(195);
+ $t->setDebugStringAppend('bw_bytes=631');
+ self::checkResponse($t->doTrackPageView('home'));
+
+ $t->doTrackContentImpression('product slider', 'product_16.jpg', 'http://example.org/product16');
+
+ $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.4)->getDatetime());
+ $t->addEcommerceItem('F4NCYX', 'fancy product', 'software', $price = 40, $qty = 3);
+ self::checkResponse($t->doTrackEcommerceCartUpdate(120));
+ }
+
+ private function trackDeviceVisit(\PiwikTracker $t, $dateTime, $useragent)
+ {
+ $t->setForceVisitDateTime($dateTime);
+ $t->setUserAgent($useragent);
+
+ $t->setUrl('http://example.org/');
+ $t->setGenerationTime(111);
+ $t->setDebugStringAppend('bw_bytes=555');
+ self::checkResponse($t->doTrackPageView('home'));
+
+ $t->doTrackContentImpression('product slider', 'product_16.jpg', 'http://example.org/product16');
+ }
+} \ No newline at end of file
diff --git a/plugins/Live/tests/System/expected/test___Live.getVisitorProfile.xml b/plugins/Live/tests/System/expected/test___Live.getVisitorProfile.xml
index 95e3605e4c..94b05f931a 100644
--- a/plugins/Live/tests/System/expected/test___Live.getVisitorProfile.xml
+++ b/plugins/Live/tests/System/expected/test___Live.getVisitorProfile.xml
@@ -1,62 +1,23 @@
<?xml version="1.0" encoding="utf-8" ?>
<result>
+
<totalVisits>31</totalVisits>
<totalVisitDuration>0</totalVisitDuration>
<totalActions>31</totalActions>
- <totalEvents>0</totalEvents>
<totalOutlinks>0</totalOutlinks>
<totalDownloads>0</totalDownloads>
<totalSearches>0</totalSearches>
<totalPageViews>31</totalPageViews>
+ <totalUniquePageViews>4</totalUniquePageViews>
+ <totalRevisitedPages>4</totalRevisitedPages>
<totalPageViewsWithTiming>0</totalPageViewsWithTiming>
+ <searches>
+ </searches>
<totalGoalConversions>0</totalGoalConversions>
<totalConversionsByGoal>
</totalConversionsByGoal>
+ <totalEvents>0</totalEvents>
<hasLatLong>0</hasLatLong>
- <searches>
- </searches>
- <continents>
- <row>
- <continent>eur</continent>
- <nb_visits>1</nb_visits>
- <prettyName>Europe</prettyName>
- </row>
- <row>
- <continent>unk</continent>
- <nb_visits>30</nb_visits>
- <prettyName>Unknown</prettyName>
- </row>
- </continents>
- <countries>
- <row>
- <country>fr</country>
- <nb_visits>1</nb_visits>
- <flag>plugins/Morpheus/icons/dist/flags/fr.png</flag>
- <prettyName>France</prettyName>
- </row>
- <row>
- <country>xx</country>
- <nb_visits>30</nb_visits>
- <flag>plugins/Morpheus/icons/dist/flags/xx.png</flag>
- <prettyName>Unknown</prettyName>
- </row>
- </countries>
- <totalVisitDurationPretty>0s</totalVisitDurationPretty>
- <firstVisit>
-
-
-
- <referrerType>direct</referrerType>
- <referralSummary>Direct Entry</referralSummary>
- </firstVisit>
- <lastVisit>
-
-
-
- <referrerType>direct</referrerType>
- <referralSummary>Direct Entry</referralSummary>
- </lastVisit>
- <visitsAggregated>31</visitsAggregated>
<lastVisits>
<row>
<idSite>1</idSite>
@@ -70,10 +31,13 @@
<pageTitle>incredible title 0</pageTitle>
<pageIdAction>6</pageIdAction>
+
<pageId>31</pageId>
+ <bandwidth />
<interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -83,13 +47,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -125,6 +94,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/UNK.png</browserIcon>
<browserCode>UNK</browserCode>
<browserVersion />
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Unknown</continent>
<continentCode>unk</continentCode>
@@ -143,9 +118,13 @@
<customVariables>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -154,17 +133,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -178,10 +146,13 @@
<pageTitle>incredible title 2</pageTitle>
<pageIdAction>4</pageIdAction>
+
<pageId>30</pageId>
+ <bandwidth />
<interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -191,13 +162,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -233,6 +209,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/UNK.png</browserIcon>
<browserCode>UNK</browserCode>
<browserVersion />
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Unknown</continent>
<continentCode>unk</continentCode>
@@ -251,9 +233,13 @@
<customVariables>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -262,17 +248,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -286,10 +261,13 @@
<pageTitle>incredible title 1</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>29</pageId>
+ <bandwidth />
<interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -299,13 +277,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -341,6 +324,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/UNK.png</browserIcon>
<browserCode>UNK</browserCode>
<browserVersion />
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Unknown</continent>
<continentCode>unk</continentCode>
@@ -359,9 +348,13 @@
<customVariables>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -370,17 +363,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -394,10 +376,13 @@
<pageTitle>incredible title 0</pageTitle>
<pageIdAction>7</pageIdAction>
+
<pageId>28</pageId>
+ <bandwidth />
<interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -407,13 +392,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -449,6 +439,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/UNK.png</browserIcon>
<browserCode>UNK</browserCode>
<browserVersion />
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Unknown</continent>
<continentCode>unk</continentCode>
@@ -467,9 +463,13 @@
<customVariables>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -478,17 +478,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -502,10 +491,13 @@
<pageTitle>incredible title 2</pageTitle>
<pageIdAction>6</pageIdAction>
+
<pageId>27</pageId>
+ <bandwidth />
<interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -515,13 +507,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -557,6 +554,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/UNK.png</browserIcon>
<browserCode>UNK</browserCode>
<browserVersion />
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Unknown</continent>
<continentCode>unk</continentCode>
@@ -575,9 +578,13 @@
<customVariables>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -586,17 +593,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -610,10 +606,13 @@
<pageTitle>incredible title 1</pageTitle>
<pageIdAction>4</pageIdAction>
+
<pageId>26</pageId>
+ <bandwidth />
<interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -623,13 +622,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -665,6 +669,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/UNK.png</browserIcon>
<browserCode>UNK</browserCode>
<browserVersion />
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Unknown</continent>
<continentCode>unk</continentCode>
@@ -683,9 +693,13 @@
<customVariables>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -694,17 +708,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -718,10 +721,13 @@
<pageTitle>incredible title 0</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>25</pageId>
+ <bandwidth />
<interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -731,13 +737,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -773,6 +784,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/UNK.png</browserIcon>
<browserCode>UNK</browserCode>
<browserVersion />
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Unknown</continent>
<continentCode>unk</continentCode>
@@ -791,9 +808,13 @@
<customVariables>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -802,17 +823,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -826,10 +836,13 @@
<pageTitle>incredible title 2</pageTitle>
<pageIdAction>7</pageIdAction>
+
<pageId>24</pageId>
+ <bandwidth />
<interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -839,13 +852,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -881,6 +899,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/UNK.png</browserIcon>
<browserCode>UNK</browserCode>
<browserVersion />
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Unknown</continent>
<continentCode>unk</continentCode>
@@ -899,9 +923,13 @@
<customVariables>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -910,17 +938,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -934,10 +951,13 @@
<pageTitle>incredible title 1</pageTitle>
<pageIdAction>6</pageIdAction>
+
<pageId>23</pageId>
+ <bandwidth />
<interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -947,13 +967,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -989,6 +1014,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/UNK.png</browserIcon>
<browserCode>UNK</browserCode>
<browserVersion />
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Unknown</continent>
<continentCode>unk</continentCode>
@@ -1007,9 +1038,13 @@
<customVariables>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -1018,17 +1053,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -1042,10 +1066,13 @@
<pageTitle>incredible title 0</pageTitle>
<pageIdAction>4</pageIdAction>
+
<pageId>22</pageId>
+ <bandwidth />
<interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -1055,13 +1082,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -1097,6 +1129,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/UNK.png</browserIcon>
<browserCode>UNK</browserCode>
<browserVersion />
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Unknown</continent>
<continentCode>unk</continentCode>
@@ -1115,9 +1153,13 @@
<customVariables>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -1126,21 +1168,81 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
</lastVisits>
- <userId>0</userId>
-
+ <totalVisitDurationPretty>0s</totalVisitDurationPretty>
+ <userId>0</userId>
+ <firstVisit>
+
+
+
+ <referrerType>direct</referrerType>
+ <referrerUrl />
+ <referralSummary>Direct Entry</referralSummary>
+ </firstVisit>
+ <lastVisit>
+
+
+
+ <referrerType>direct</referrerType>
+ <referrerUrl />
+ <referralSummary>Direct Entry</referralSummary>
+ </lastVisit>
+ <visitsAggregated>10</visitsAggregated>
+ <visitedPages>
+ <row key="http://example.org/my/dir/page0">8</row>
+ <row key="http://example.org/my/dir/page1">8</row>
+ <row key="http://example.org/my/dir/page2">8</row>
+ <row key="http://example.org/my/dir/page3">7</row>
+ </visitedPages>
+ <devices>
+ <Unknown>
+ <count>30</count>
+ <icon>plugins/Morpheus/icons/dist/devices/unknown.png</icon>
+ <devices>
+ <row>
+ <name>Unknown</name>
+ <count>30</count>
+ </row>
+ </devices>
+ </Unknown>
+ <Desktop>
+ <count>1</count>
+ <icon>plugins/Morpheus/icons/dist/devices/desktop.png</icon>
+ <devices>
+ <row>
+ <name>Unknown</name>
+ <count>1</count>
+ </row>
+ </devices>
+ </Desktop>
+ </devices>
+ <continents>
+ <row>
+ <continent>eur</continent>
+ <nb_visits>1</nb_visits>
+ <prettyName>Europe</prettyName>
+ </row>
+ <row>
+ <continent>unk</continent>
+ <nb_visits>30</nb_visits>
+ <prettyName>Unknown</prettyName>
+ </row>
+ </continents>
+ <countries>
+ <row>
+ <country>fr</country>
+ <nb_visits>1</nb_visits>
+ <flag>plugins/Morpheus/icons/dist/flags/fr.png</flag>
+ <prettyName>France</prettyName>
+ </row>
+ <row>
+ <country>xx</country>
+ <nb_visits>30</nb_visits>
+ <flag>plugins/Morpheus/icons/dist/flags/xx.png</flag>
+ <prettyName>Unknown</prettyName>
+ </row>
+ </countries>
</result> \ No newline at end of file
diff --git a/plugins/Live/tests/System/expected/test_higherLimit__Live.getVisitorProfile.xml b/plugins/Live/tests/System/expected/test_higherLimit__Live.getVisitorProfile.xml
index 42517f659c..481470e978 100644
--- a/plugins/Live/tests/System/expected/test_higherLimit__Live.getVisitorProfile.xml
+++ b/plugins/Live/tests/System/expected/test_higherLimit__Live.getVisitorProfile.xml
@@ -1,62 +1,23 @@
<?xml version="1.0" encoding="utf-8" ?>
<result>
+
<totalVisits>31</totalVisits>
<totalVisitDuration>0</totalVisitDuration>
<totalActions>31</totalActions>
- <totalEvents>0</totalEvents>
<totalOutlinks>0</totalOutlinks>
<totalDownloads>0</totalDownloads>
<totalSearches>0</totalSearches>
<totalPageViews>31</totalPageViews>
+ <totalUniquePageViews>4</totalUniquePageViews>
+ <totalRevisitedPages>4</totalRevisitedPages>
<totalPageViewsWithTiming>0</totalPageViewsWithTiming>
+ <searches>
+ </searches>
<totalGoalConversions>0</totalGoalConversions>
<totalConversionsByGoal>
</totalConversionsByGoal>
+ <totalEvents>0</totalEvents>
<hasLatLong>0</hasLatLong>
- <searches>
- </searches>
- <continents>
- <row>
- <continent>eur</continent>
- <nb_visits>1</nb_visits>
- <prettyName>Europe</prettyName>
- </row>
- <row>
- <continent>unk</continent>
- <nb_visits>30</nb_visits>
- <prettyName>Unknown</prettyName>
- </row>
- </continents>
- <countries>
- <row>
- <country>fr</country>
- <nb_visits>1</nb_visits>
- <flag>plugins/Morpheus/icons/dist/flags/fr.png</flag>
- <prettyName>France</prettyName>
- </row>
- <row>
- <country>xx</country>
- <nb_visits>30</nb_visits>
- <flag>plugins/Morpheus/icons/dist/flags/xx.png</flag>
- <prettyName>Unknown</prettyName>
- </row>
- </countries>
- <totalVisitDurationPretty>0s</totalVisitDurationPretty>
- <firstVisit>
-
-
-
- <referrerType>direct</referrerType>
- <referralSummary>Direct Entry</referralSummary>
- </firstVisit>
- <lastVisit>
-
-
-
- <referrerType>direct</referrerType>
- <referralSummary>Direct Entry</referralSummary>
- </lastVisit>
- <visitsAggregated>31</visitsAggregated>
<lastVisits>
<row>
<idSite>1</idSite>
@@ -70,10 +31,13 @@
<pageTitle>incredible title 0</pageTitle>
<pageIdAction>6</pageIdAction>
+
<pageId>31</pageId>
+ <bandwidth />
<interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -83,13 +47,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -125,6 +94,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/UNK.png</browserIcon>
<browserCode>UNK</browserCode>
<browserVersion />
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Unknown</continent>
<continentCode>unk</continentCode>
@@ -143,9 +118,13 @@
<customVariables>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -154,17 +133,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -178,10 +146,13 @@
<pageTitle>incredible title 2</pageTitle>
<pageIdAction>4</pageIdAction>
+
<pageId>30</pageId>
+ <bandwidth />
<interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -191,13 +162,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -233,6 +209,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/UNK.png</browserIcon>
<browserCode>UNK</browserCode>
<browserVersion />
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Unknown</continent>
<continentCode>unk</continentCode>
@@ -251,9 +233,13 @@
<customVariables>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -262,17 +248,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -286,10 +261,13 @@
<pageTitle>incredible title 1</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>29</pageId>
+ <bandwidth />
<interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -299,13 +277,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -341,6 +324,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/UNK.png</browserIcon>
<browserCode>UNK</browserCode>
<browserVersion />
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Unknown</continent>
<continentCode>unk</continentCode>
@@ -359,9 +348,13 @@
<customVariables>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -370,17 +363,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -394,10 +376,13 @@
<pageTitle>incredible title 0</pageTitle>
<pageIdAction>7</pageIdAction>
+
<pageId>28</pageId>
+ <bandwidth />
<interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -407,13 +392,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -449,6 +439,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/UNK.png</browserIcon>
<browserCode>UNK</browserCode>
<browserVersion />
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Unknown</continent>
<continentCode>unk</continentCode>
@@ -467,9 +463,13 @@
<customVariables>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -478,17 +478,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -502,10 +491,13 @@
<pageTitle>incredible title 2</pageTitle>
<pageIdAction>6</pageIdAction>
+
<pageId>27</pageId>
+ <bandwidth />
<interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -515,13 +507,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -557,6 +554,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/UNK.png</browserIcon>
<browserCode>UNK</browserCode>
<browserVersion />
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Unknown</continent>
<continentCode>unk</continentCode>
@@ -575,9 +578,13 @@
<customVariables>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -586,17 +593,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -610,10 +606,13 @@
<pageTitle>incredible title 1</pageTitle>
<pageIdAction>4</pageIdAction>
+
<pageId>26</pageId>
+ <bandwidth />
<interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -623,13 +622,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -665,6 +669,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/UNK.png</browserIcon>
<browserCode>UNK</browserCode>
<browserVersion />
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Unknown</continent>
<continentCode>unk</continentCode>
@@ -683,9 +693,13 @@
<customVariables>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -694,17 +708,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -718,10 +721,13 @@
<pageTitle>incredible title 0</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>25</pageId>
+ <bandwidth />
<interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -731,13 +737,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -773,6 +784,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/UNK.png</browserIcon>
<browserCode>UNK</browserCode>
<browserVersion />
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Unknown</continent>
<continentCode>unk</continentCode>
@@ -791,9 +808,13 @@
<customVariables>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -802,17 +823,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -826,10 +836,13 @@
<pageTitle>incredible title 2</pageTitle>
<pageIdAction>7</pageIdAction>
+
<pageId>24</pageId>
+ <bandwidth />
<interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -839,13 +852,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -881,6 +899,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/UNK.png</browserIcon>
<browserCode>UNK</browserCode>
<browserVersion />
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Unknown</continent>
<continentCode>unk</continentCode>
@@ -899,9 +923,13 @@
<customVariables>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -910,17 +938,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -934,10 +951,13 @@
<pageTitle>incredible title 1</pageTitle>
<pageIdAction>6</pageIdAction>
+
<pageId>23</pageId>
+ <bandwidth />
<interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -947,13 +967,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -989,6 +1014,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/UNK.png</browserIcon>
<browserCode>UNK</browserCode>
<browserVersion />
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Unknown</continent>
<continentCode>unk</continentCode>
@@ -1007,9 +1038,13 @@
<customVariables>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -1018,17 +1053,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -1042,10 +1066,13 @@
<pageTitle>incredible title 0</pageTitle>
<pageIdAction>4</pageIdAction>
+
<pageId>22</pageId>
+ <bandwidth />
<interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -1055,13 +1082,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -1097,6 +1129,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/UNK.png</browserIcon>
<browserCode>UNK</browserCode>
<browserVersion />
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Unknown</continent>
<continentCode>unk</continentCode>
@@ -1115,9 +1153,13 @@
<customVariables>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -1126,17 +1168,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -1150,10 +1181,13 @@
<pageTitle>incredible title 2</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>21</pageId>
+ <bandwidth />
<interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -1163,13 +1197,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -1205,6 +1244,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/UNK.png</browserIcon>
<browserCode>UNK</browserCode>
<browserVersion />
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Unknown</continent>
<continentCode>unk</continentCode>
@@ -1223,9 +1268,13 @@
<customVariables>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -1234,17 +1283,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -1258,10 +1296,13 @@
<pageTitle>incredible title 1</pageTitle>
<pageIdAction>7</pageIdAction>
+
<pageId>20</pageId>
+ <bandwidth />
<interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -1271,13 +1312,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -1313,6 +1359,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/UNK.png</browserIcon>
<browserCode>UNK</browserCode>
<browserVersion />
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Unknown</continent>
<continentCode>unk</continentCode>
@@ -1331,9 +1383,13 @@
<customVariables>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -1342,17 +1398,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -1366,10 +1411,13 @@
<pageTitle>incredible title 0</pageTitle>
<pageIdAction>6</pageIdAction>
+
<pageId>19</pageId>
+ <bandwidth />
<interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -1379,13 +1427,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -1421,6 +1474,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/UNK.png</browserIcon>
<browserCode>UNK</browserCode>
<browserVersion />
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Unknown</continent>
<continentCode>unk</continentCode>
@@ -1439,9 +1498,13 @@
<customVariables>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -1450,17 +1513,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -1474,10 +1526,13 @@
<pageTitle>incredible title 2</pageTitle>
<pageIdAction>4</pageIdAction>
+
<pageId>18</pageId>
+ <bandwidth />
<interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -1487,13 +1542,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -1529,6 +1589,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/UNK.png</browserIcon>
<browserCode>UNK</browserCode>
<browserVersion />
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Unknown</continent>
<continentCode>unk</continentCode>
@@ -1547,9 +1613,13 @@
<customVariables>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -1558,17 +1628,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -1582,10 +1641,13 @@
<pageTitle>incredible title 1</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>17</pageId>
+ <bandwidth />
<interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -1595,13 +1657,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -1637,6 +1704,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/UNK.png</browserIcon>
<browserCode>UNK</browserCode>
<browserVersion />
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Unknown</continent>
<continentCode>unk</continentCode>
@@ -1655,9 +1728,13 @@
<customVariables>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -1666,17 +1743,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -1690,10 +1756,13 @@
<pageTitle>incredible title 0</pageTitle>
<pageIdAction>7</pageIdAction>
+
<pageId>16</pageId>
+ <bandwidth />
<interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -1703,13 +1772,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -1745,6 +1819,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/UNK.png</browserIcon>
<browserCode>UNK</browserCode>
<browserVersion />
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Unknown</continent>
<continentCode>unk</continentCode>
@@ -1763,9 +1843,13 @@
<customVariables>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -1774,17 +1858,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -1798,10 +1871,13 @@
<pageTitle>incredible title 2</pageTitle>
<pageIdAction>6</pageIdAction>
+
<pageId>15</pageId>
+ <bandwidth />
<interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -1811,13 +1887,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -1853,6 +1934,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/UNK.png</browserIcon>
<browserCode>UNK</browserCode>
<browserVersion />
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Unknown</continent>
<continentCode>unk</continentCode>
@@ -1871,9 +1958,13 @@
<customVariables>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -1882,17 +1973,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -1906,10 +1986,13 @@
<pageTitle>incredible title 1</pageTitle>
<pageIdAction>4</pageIdAction>
+
<pageId>14</pageId>
+ <bandwidth />
<interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -1919,13 +2002,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -1961,6 +2049,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/UNK.png</browserIcon>
<browserCode>UNK</browserCode>
<browserVersion />
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Unknown</continent>
<continentCode>unk</continentCode>
@@ -1979,9 +2073,13 @@
<customVariables>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -1990,17 +2088,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -2014,10 +2101,13 @@
<pageTitle>incredible title 0</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>13</pageId>
+ <bandwidth />
<interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -2027,13 +2117,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -2069,6 +2164,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/UNK.png</browserIcon>
<browserCode>UNK</browserCode>
<browserVersion />
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Unknown</continent>
<continentCode>unk</continentCode>
@@ -2087,9 +2188,13 @@
<customVariables>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -2098,17 +2203,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -2122,10 +2216,13 @@
<pageTitle>incredible title 2</pageTitle>
<pageIdAction>7</pageIdAction>
+
<pageId>12</pageId>
+ <bandwidth />
<interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -2135,13 +2232,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -2177,6 +2279,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/UNK.png</browserIcon>
<browserCode>UNK</browserCode>
<browserVersion />
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Unknown</continent>
<continentCode>unk</continentCode>
@@ -2195,9 +2303,13 @@
<customVariables>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -2206,21 +2318,81 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0.00</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0.00</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
</lastVisits>
- <userId>0</userId>
-
+ <totalVisitDurationPretty>0s</totalVisitDurationPretty>
+ <userId>0</userId>
+ <firstVisit>
+
+
+
+ <referrerType>direct</referrerType>
+ <referrerUrl />
+ <referralSummary>Direct Entry</referralSummary>
+ </firstVisit>
+ <lastVisit>
+
+
+
+ <referrerType>direct</referrerType>
+ <referrerUrl />
+ <referralSummary>Direct Entry</referralSummary>
+ </lastVisit>
+ <visitsAggregated>20</visitsAggregated>
+ <visitedPages>
+ <row key="http://example.org/my/dir/page0">8</row>
+ <row key="http://example.org/my/dir/page1">8</row>
+ <row key="http://example.org/my/dir/page2">8</row>
+ <row key="http://example.org/my/dir/page3">7</row>
+ </visitedPages>
+ <devices>
+ <Unknown>
+ <count>30</count>
+ <icon>plugins/Morpheus/icons/dist/devices/unknown.png</icon>
+ <devices>
+ <row>
+ <name>Unknown</name>
+ <count>30</count>
+ </row>
+ </devices>
+ </Unknown>
+ <Desktop>
+ <count>1</count>
+ <icon>plugins/Morpheus/icons/dist/devices/desktop.png</icon>
+ <devices>
+ <row>
+ <name>Unknown</name>
+ <count>1</count>
+ </row>
+ </devices>
+ </Desktop>
+ </devices>
+ <continents>
+ <row>
+ <continent>eur</continent>
+ <nb_visits>1</nb_visits>
+ <prettyName>Europe</prettyName>
+ </row>
+ <row>
+ <continent>unk</continent>
+ <nb_visits>30</nb_visits>
+ <prettyName>Unknown</prettyName>
+ </row>
+ </continents>
+ <countries>
+ <row>
+ <country>fr</country>
+ <nb_visits>1</nb_visits>
+ <flag>plugins/Morpheus/icons/dist/flags/fr.png</flag>
+ <prettyName>France</prettyName>
+ </row>
+ <row>
+ <country>xx</country>
+ <nb_visits>30</nb_visits>
+ <flag>plugins/Morpheus/icons/dist/flags/xx.png</flag>
+ <prettyName>Unknown</prettyName>
+ </row>
+ </countries>
</result> \ No newline at end of file
diff --git a/plugins/Live/tests/UI/Live_spec.js b/plugins/Live/tests/UI/Live_spec.js
new file mode 100644
index 0000000000..624ac5f468
--- /dev/null
+++ b/plugins/Live/tests/UI/Live_spec.js
@@ -0,0 +1,58 @@
+/*!
+ * Piwik - free/libre analytics platform
+ *
+ * Screenshot integration tests.
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+
+describe("Live", function () {
+ this.timeout(0);
+
+ this.fixture = "Piwik\\Plugins\\Live\\tests\\Fixtures\\VisitsWithAllActionsAndDevices";
+
+ it('should show visitor log', function (done) {
+ expect.screenshot('visitor_log').to.be.captureSelector('.reporting-page', function (page) {
+ page.load("?module=CoreHome&action=index&idSite=1&period=year&date=2010-01-03#?idSite=1&period=year&date=2010-01-03&category=General_Visitors&subcategory=Live_VisitorLog");
+ page.wait(4000);
+ }, done);
+ });
+
+ it('should show visitor profile', function (done) {
+ expect.screenshot('visitor_profile').to.be.captureSelector('.ui-dialog', function (page) {
+ page.evaluate(function(){
+ $('.card:first-child .visitor-log-visitor-profile-link').click();
+ });
+ page.wait(6000);
+ }, done);
+ });
+
+ it('should hide all action details', function (done) {
+ expect.screenshot('visitor_profile_actions_hidden').to.be.captureSelector('.ui-dialog', function (page) {
+ page.evaluate(function(){
+ $('.visitor-profile-toggle-actions').click();
+ }, 500);
+ }, done);
+ });
+
+ it('should show visit details', function (done) {
+ expect.screenshot('visitor_profile_visit_details').to.be.captureSelector('.ui-dialog', function (page) {
+ page.evaluate(function(){
+ $('.visitor-profile-visit-title')[0].click();
+ }, 200);
+ }, done);
+ });
+
+ it('should show action details', function (done) {
+ expect.screenshot('visitor_profile_action_details').to.be.captureSelector('.ui-dialog', function (page) {
+ page.click('.visitor-profile-visits li:first-child .visitor-profile-show-actions', 200);
+ }, done);
+ });
+
+ it('should show action tooltip', function (done) {
+ expect.screenshot('visitor_profile_action_tooltip').to.be.captureSelector('.ui-tooltip:visible', function (page) {
+ page.mouseMove('.visitor-profile-visits li:first-child .visitor-profile-actions .action:first-child', 200);
+ }, done);
+ });
+}); \ No newline at end of file
diff --git a/plugins/Live/tests/UI/expected-ui-screenshots/Live_visitor_log.png b/plugins/Live/tests/UI/expected-ui-screenshots/Live_visitor_log.png
new file mode 100644
index 0000000000..c4f62dc683
--- /dev/null
+++ b/plugins/Live/tests/UI/expected-ui-screenshots/Live_visitor_log.png
Binary files differ
diff --git a/plugins/Live/tests/UI/expected-ui-screenshots/Live_visitor_profile.png b/plugins/Live/tests/UI/expected-ui-screenshots/Live_visitor_profile.png
new file mode 100644
index 0000000000..f727dc862a
--- /dev/null
+++ b/plugins/Live/tests/UI/expected-ui-screenshots/Live_visitor_profile.png
Binary files differ
diff --git a/plugins/Live/tests/UI/expected-ui-screenshots/Live_visitor_profile_action_details.png b/plugins/Live/tests/UI/expected-ui-screenshots/Live_visitor_profile_action_details.png
new file mode 100644
index 0000000000..4048ddfc59
--- /dev/null
+++ b/plugins/Live/tests/UI/expected-ui-screenshots/Live_visitor_profile_action_details.png
Binary files differ
diff --git a/plugins/Live/tests/UI/expected-ui-screenshots/Live_visitor_profile_action_tooltip.png b/plugins/Live/tests/UI/expected-ui-screenshots/Live_visitor_profile_action_tooltip.png
new file mode 100644
index 0000000000..3c59df6d85
--- /dev/null
+++ b/plugins/Live/tests/UI/expected-ui-screenshots/Live_visitor_profile_action_tooltip.png
Binary files differ
diff --git a/plugins/Live/tests/UI/expected-ui-screenshots/Live_visitor_profile_actions_hidden.png b/plugins/Live/tests/UI/expected-ui-screenshots/Live_visitor_profile_actions_hidden.png
new file mode 100644
index 0000000000..0838f7fd0a
--- /dev/null
+++ b/plugins/Live/tests/UI/expected-ui-screenshots/Live_visitor_profile_actions_hidden.png
Binary files differ
diff --git a/plugins/Live/tests/UI/expected-ui-screenshots/Live_visitor_profile_visit_details.png b/plugins/Live/tests/UI/expected-ui-screenshots/Live_visitor_profile_visit_details.png
new file mode 100644
index 0000000000..0358e64d08
--- /dev/null
+++ b/plugins/Live/tests/UI/expected-ui-screenshots/Live_visitor_profile_visit_details.png
Binary files differ
diff --git a/plugins/LogViewer b/plugins/LogViewer
-Subproject 62204fcd9dcc88521ab818b64a8f3f59c7b837d
+Subproject c7bb65b4ac597568dd42673b80f1a8a5f22157b
diff --git a/plugins/Login/SessionInitializer.php b/plugins/Login/SessionInitializer.php
index 2caca89aff..9db9da7dec 100644
--- a/plugins/Login/SessionInitializer.php
+++ b/plugins/Login/SessionInitializer.php
@@ -119,6 +119,9 @@ class SessionInitializer
$this->processFailedSession($rememberMe);
} else {
+
+ Piwik::postEvent('Login.authenticate.successful', array($auth->getLogin()));
+
$this->processSuccessfulSession($authResult, $rememberMe);
}
}
diff --git a/plugins/Login/lang/de.json b/plugins/Login/lang/de.json
index 45eab04ffc..50f2ef7b1b 100644
--- a/plugins/Login/lang/de.json
+++ b/plugins/Login/lang/de.json
@@ -7,7 +7,7 @@
"InvalidNonceOrHeadersOrReferrer": "Sicherheitschecks fehlgeschlagen. Bitte laden Sie das Formular erneut und prüfen Sie, ob Ihr Browser Cookies zulässt. Wenn Sie einen Proxy Server verwenden, müssen Sie %1$sPiwik so einrichten, dass es Proxy Header akzeptiert%2$s.",
"InvalidNonceSSLMisconfigured": "Sie können %1$sPiwik zur Verwendung einer sicheren Verbindung zwingen%2$s: Setzen sie dafür in der Konfigurationsdatei %3$s innerhalb der Sektion %5$s %4$s",
"InvalidOrExpiredToken": "Der Token ist ungültig oder dessen Gültigkeitsdauer ist bereits abgelaufen.",
- "InvalidUsernameEmail": "Ungültiger Bernutzername und\/oder E-Mail-Adresse",
+ "InvalidUsernameEmail": "Ungültiger Benutzername und\/oder E-Mail-Adresse",
"LogIn": "Anmelden",
"LoginOrEmail": "Benutzername oder E-Mail",
"LoginPasswordNotCorrect": "Benutzername und Passwort sind nicht korrekt",
diff --git a/plugins/Login/lang/id.json b/plugins/Login/lang/id.json
index fc7954fd4e..6e1288c5e0 100644
--- a/plugins/Login/lang/id.json
+++ b/plugins/Login/lang/id.json
@@ -2,6 +2,7 @@
"Login": {
"ConfirmationLinkSent": "Tautan konfirmasi telah dikirim ke kotak masuk Anda. Periksa surel Anda dan kunjungi tautan ini untuk memberi izin permintaan perubahan sandi Anda.",
"ContactAdmin": "Kemungkinan: inang Anda kemungkinan mematikan fungsi mail(). <br \/>Silakan hubungi pengelola Piwik Anda.",
+ "ExceptionInvalidSuperUserAccessAuthenticationMethod": "Pengguna dengan akses Pengguna Super tidak bisa diautentikasi menggunakan mekanisme '%s'",
"ExceptionPasswordMD5HashExpected": "Parameter sandi diperkirakan menjadi hash MD5 dari sandi.",
"InvalidNonceOrHeadersOrReferrer": "Borang keamanan gagal. Silkan muat ulang borang dan periksa apakah kuki Anda telah aktif. Bila Anda menggunakan peladen wali, Anda harus %1$s mengkonfigurasi Piwik untuk menerima `header` wali%2$s yang meneruskan `header` Inang. Serta, periksa apakah `header` Pengarah telah terkirim dengan benar.",
"InvalidOrExpiredToken": "Kepingan tak sahih atau telah kedaluwarsa.",
@@ -10,7 +11,10 @@
"LoginOrEmail": "Nama-id atau Surel",
"LoginPasswordNotCorrect": "Nama-id dan Sandi tak sesuai",
"LostYourPassword": "Lupa sandi?",
+ "ChangeYourPassword": "Ubah sandi lewat Anda",
"MailTopicPasswordChange": "Konfirmasi Pengubahan Sandi",
+ "NewPassword": "Sandi lewat baru",
+ "NewPasswordRepeat": "Sandi lewat baru (ulangi)",
"PasswordChanged": "Sandi Anda telah berubah.",
"PasswordRepeat": "Sandi (ulangi)",
"PasswordsDoNotMatch": "Sandi tak sesuai.",
diff --git a/plugins/Login/lang/nb.json b/plugins/Login/lang/nb.json
index 8b047aabeb..842977ee35 100644
--- a/plugins/Login/lang/nb.json
+++ b/plugins/Login/lang/nb.json
@@ -15,6 +15,7 @@
"ChangeYourPassword": "Endret ditt passord",
"MailTopicPasswordChange": "Bekreft passordendring",
"NewPassword": "Nytt passord",
+ "NewPasswordRepeat": "Nytt passord (gjenta)",
"PasswordChanged": "Passordet er endret.",
"PasswordRepeat": "Passord (gjenta)",
"PasswordsDoNotMatch": "Passordene stemmer ikke overens.",
diff --git a/plugins/Login/lang/pl.json b/plugins/Login/lang/pl.json
index 0bb184c142..7531b80833 100644
--- a/plugins/Login/lang/pl.json
+++ b/plugins/Login/lang/pl.json
@@ -2,18 +2,25 @@
"Login": {
"ConfirmationLinkSent": "Potwierdzenie zostało wysłane na skrzynkę odbiorczą. Sprawdź swój e-mail i odwiedzić link do autoryzacji żądania zmiany hasła.",
"ContactAdmin": "Prawdopodobny powód: twój host mógł wyłączyć działanie funkcji mail(). <br \/>Skontaktuj się w tej sprawie ze swoim administratorem statystyk Piwik.",
+ "ExceptionInvalidSuperUserAccessAuthenticationMethod": "Użytkownik o uprawnieniach Super Użytkownika nie może być autoryzowany przy pomocy mechanizmu '%s'.",
"ExceptionPasswordMD5HashExpected": "Oczekiwanym parametrem hasła jest hash z MD5 uzyskany z hasła.",
"InvalidNonceOrHeadersOrReferrer": "Błąd zabezpieczeń formularza. Proszę przeładować stronę z formularzem i upewnić się, że obsługa ciasteczek jest włączona. Jeśli korzystasz z serwera proxy, należy %1$s skonfigurować Piwik, tak aby akceptował nagłówek serwera proxy%2$s, który przekazuje nagłówek serwera docelowego. Ponadto sprawdź, czy naglówek Referrer jest poprawnie wysyłany.",
+ "InvalidNonceSSLMisconfigured": "Możesz także %1$s wymusić na Piwik'u korzystanie z bezpiecznego połączenia%2$s: w pliku konfiguracyjnym %3$s ustaw %4$s poniżej sekcji %5$s",
"InvalidOrExpiredToken": "Token jest błędny lub już wygasł.",
"InvalidUsernameEmail": "Błędna nazwa użytkownika i\/lub adres e-mail",
"LogIn": "Zaloguj się",
"LoginOrEmail": "Nazwa użytkownika lub e-mail",
- "LoginPasswordNotCorrect": "Nazwa użytkownika & hasło nie są poprawne",
- "LostYourPassword": "Nie pamiętam hasła",
+ "LoginPasswordNotCorrect": "Nazwa użytkownika i hasło nie są poprawne.",
+ "LostYourPassword": "Nie pamiętasz hasła?",
+ "ChangeYourPassword": "Zmień swoje hasło",
+ "MailPasswordChangeBody": "Cześć %1$s,\n\notrzymaliśmy żądanie resetu hasła od %2$s. Aby potwierdzić zmianę Twojego hasła i móc zalogować się przy pomocy nowych danych, kliknij w ten odnośnik:\n\n%3$s\n\nUwaga: Zmiana hasła powoduje zmianę token_auth. Nowy token znajdziesz na stronie ze swoimi ustawieniami.\n\nJeśli token_auth służy Ci do zasilania zewnętrznych aplikacji lub do archiwizacji, pamiętaj o jego aktualizacji. W przeciwnym przypadku wywołania API nie powiodą się.\n\nNotka: przesłany link wygaśnie w ciągu 24 godzin.\n\nI dzięki za korzystanie z Piwik'a!",
"MailTopicPasswordChange": "Zatwierdź zmianę hasła",
+ "NewPassword": "Nowe hasło",
+ "NewPasswordRepeat": "Nowe hasło (powtórz)",
"PasswordChanged": "Twoje hasło zostało zmienione.",
"PasswordRepeat": "Hasło (powtórz)",
"PasswordsDoNotMatch": "Hasła nie pasują.",
+ "PluginDescription": "Dostarcza funkcjonalności autentykacji przy pomocy nazwy użytkownika i hasła jak również resetu hasła. Metoda autentykacji może być zmieniona przy wykorzystaniu dodatkowej wtyczki Logowania jak choćby LoginLdap dostępnej w Sklepie.",
"RememberMe": "Zapamiętaj mnie"
}
} \ No newline at end of file
diff --git a/plugins/Login/lang/sv.json b/plugins/Login/lang/sv.json
index b8298ba4e4..8955e54332 100644
--- a/plugins/Login/lang/sv.json
+++ b/plugins/Login/lang/sv.json
@@ -12,8 +12,11 @@
"LoginOrEmail": "Användarnamn eller e-postadress",
"LoginPasswordNotCorrect": "Användarnamn & Lösenord är inte korrekta",
"LostYourPassword": "Glömt ditt lösenord?",
+ "ChangeYourPassword": "Ändra ditt lösenord",
"MailPasswordChangeBody": "Hej %1$s,\n\nEn begäran om återställning av ditt lösenord togs emot från %2$s. För att bekräfta ändringen av lösenordet, vänligen gå till följande länk:\n\n%3$s\n\nNotering: Genom att ändra ditt lösenord så ändras även token_auth. Du kan ta reda på ditt nya token_auth på sidan för inställningar.\n\nOm du använder din API token_auth i några externa applikationer eller för arkivering kontrollera så att du har uppdaterat din token_auth annars är risken att anrop till API't misslyckas.\n\nNotering: denna länk kommer att sluta fungera efter 24 timmar.\n\nTack för att du använder dig av Piwik!",
"MailTopicPasswordChange": "Bekräfta byte av lösenord",
+ "NewPassword": "Nytt lösenord",
+ "NewPasswordRepeat": "Nytt lösenord (upprepa)",
"PasswordChanged": "Ditt lösenord har ändrats.",
"PasswordRepeat": "Lösenord (bekräfta)",
"PasswordsDoNotMatch": "Lösenorden matchar inte.",
diff --git a/plugins/Login/lang/zh-cn.json b/plugins/Login/lang/zh-cn.json
index 165db49cc7..8949c4f1a0 100644
--- a/plugins/Login/lang/zh-cn.json
+++ b/plugins/Login/lang/zh-cn.json
@@ -11,6 +11,8 @@
"LoginPasswordNotCorrect": "用户名或密码不正确!",
"LostYourPassword": "忘记密码了?",
"MailTopicPasswordChange": "密码修改确认",
+ "NewPassword": "新密码",
+ "NewPasswordRepeat": "新密码(重复)",
"PasswordChanged": "您的密码已修改。",
"PasswordRepeat": "密码(重复)",
"PasswordsDoNotMatch": "密码不一致。",
diff --git a/plugins/Login/templates/login.twig b/plugins/Login/templates/login.twig
index 45e406ea1c..c7375b773e 100644
--- a/plugins/Login/templates/login.twig
+++ b/plugins/Login/templates/login.twig
@@ -30,7 +30,7 @@
<span id="logo" class="brand-logo center">
{% if isCustomLogo == false %}
- <a href="http://piwik.org" title="{{ linkTitle }}">
+ <a href="https://piwik.org" title="{{ linkTitle }}">
{% endif %}
{% if hasSVGLogo %}
<img src='{{ logoSVG }}' class="{% if not isCustomLogo %}default-piwik-logo{% endif %}" title="{{ linkTitle }}" alt="Piwik"/>
@@ -114,7 +114,7 @@
{% if isCustomLogo %}
<p id="piwik">
- <i><a href="http://piwik.org/" rel="noreferrer" target="_blank">{{ linkTitle }}</a></i>
+ <i><a href="https://piwik.org/" rel="noreferrer" target="_blank">{{ linkTitle }}</a></i>
</p>
{% endif %}
diff --git a/plugins/LoginHttpAuth b/plugins/LoginHttpAuth
-Subproject 989f9faea1e5954d886510f54b8391eaf4216f7
+Subproject 501588b25313abbe7c0457ed770d1f94c7830ae
diff --git a/plugins/LoginLdap b/plugins/LoginLdap
-Subproject e4b5faedcab4a9de793f72dc32b5212383c4a09
+Subproject 249b8c546979a4484b3eeda5b076b9df1b811c9
diff --git a/plugins/MarketingCampaignsReporting b/plugins/MarketingCampaignsReporting
-Subproject 50c520eb9608b59c2e1abea09bbe70a553c834a
+Subproject af1fd26ce58b602767b984f5730d2c21777eafa
diff --git a/plugins/Marketplace/Controller.php b/plugins/Marketplace/Controller.php
index 418c39dc42..679ff77cf7 100644
--- a/plugins/Marketplace/Controller.php
+++ b/plugins/Marketplace/Controller.php
@@ -303,6 +303,9 @@ class Controller extends \Piwik\Plugin\ControllerAdmin
$notification = new Notification($e->getMessage());
$notification->context = Notification::CONTEXT_ERROR;
+ if (method_exists($e, 'isHtmlMessage') && $e->isHtmlMessage()) {
+ $notification->raw = true;
+ }
Notification\Manager::notify('Marketplace_Install' . $pluginName, $notification);
$hasErrors = true;
@@ -404,6 +407,9 @@ class Controller extends \Piwik\Plugin\ControllerAdmin
$notification->context = Notification::CONTEXT_ERROR;
$notification->type = Notification::TYPE_PERSISTENT;
$notification->flags = Notification::FLAG_CLEAR;
+ if (method_exists($e, 'isHtmlMessage') && $e->isHtmlMessage()) {
+ $notification->raw = true;
+ }
Notification\Manager::notify('CorePluginsAdmin_InstallPlugin', $notification);
Url::redirectToReferrer();
diff --git a/plugins/Marketplace/Marketplace.php b/plugins/Marketplace/Marketplace.php
index 50f7682a05..c906cb0454 100644
--- a/plugins/Marketplace/Marketplace.php
+++ b/plugins/Marketplace/Marketplace.php
@@ -8,6 +8,7 @@
namespace Piwik\Plugins\Marketplace;
+use Piwik\Container\StaticContainer;
use Piwik\Plugin;
class Marketplace extends \Piwik\Plugin
@@ -21,9 +22,16 @@ class Marketplace extends \Piwik\Plugin
'AssetManager.getJavaScriptFiles' => 'getJsFiles',
'AssetManager.getStylesheetFiles' => 'getStylesheetFiles',
'Translate.getClientSideTranslationKeys' => 'getClientSideTranslationKeys',
+ 'Controller.CoreHome.checkForUpdates' => 'checkForUpdates',
);
}
+ public function checkForUpdates()
+ {
+ $marketplace = StaticContainer::get('Piwik\Plugins\Marketplace\Api\Client');
+ $marketplace->clearAllCacheEntries();
+ }
+
public function getStylesheetFiles(&$stylesheets)
{
$stylesheets[] = "plugins/Marketplace/stylesheets/marketplace.less";
diff --git a/plugins/Marketplace/UpdateCommunication.php b/plugins/Marketplace/UpdateCommunication.php
index efebfa899b..e0562af258 100644
--- a/plugins/Marketplace/UpdateCommunication.php
+++ b/plugins/Marketplace/UpdateCommunication.php
@@ -55,9 +55,12 @@ class UpdateCommunication
*/
public static function canBeEnabled()
{
- $isEnabled = Config::getInstance()->General['enable_update_communication'];
-
- return Marketplace::isMarketplaceEnabled() && !empty($isEnabled);
+ $isEnabled = (bool) Config::getInstance()->General['enable_update_communication'];
+ if($isEnabled === true && Marketplace::isMarketplaceEnabled() === true && SettingsPiwik::isInternetEnabled() === true){
+ return true;
+ }
+
+ return false;
}
/**
diff --git a/plugins/Marketplace/lang/id.json b/plugins/Marketplace/lang/id.json
index d743bf436b..d38bafaf51 100644
--- a/plugins/Marketplace/lang/id.json
+++ b/plugins/Marketplace/lang/id.json
@@ -1,6 +1,25 @@
{
"Marketplace": {
"ActivateLicenseKey": "Diaktifkan",
+ "ActionActivatePlugin": "Aktivasi plugin",
+ "ActionActivateTheme": "Aktivasi tema",
+ "ActionInstall": "Instal",
+ "AddToCart": "Tambah ke keranjang",
+ "BackToMarketplace": "Kembali ke pasar",
+ "BrowseMarketplace": "Ramban Pasar",
+ "ByXDevelopers": "oleh %s pengembang",
+ "CannotInstall": "Tidak dapat menginstal",
+ "CannotUpdate": "Tidak dapat memperbarui",
+ "ClickToCompletePurchase": "Klik untuk menyelesaikan pembelian.",
+ "CurrentNumPiwikUsers": "Piwik Anda saat ini memiliki %1$s pengguna terdaftar.",
+ "Developer": "Pengembang",
+ "Marketplace": "Pasar",
+ "InstallingPlugin": "Menginstal %s",
+ "LastUpdated": "Terakhir diperbarui",
+ "License": "Lisensi",
+ "LicenseKey": "Kunci Lisensi",
+ "LicenseKeyDeletedSuccess": "Kunci lisensi berhasil dihapus.",
+ "LicenseExpired": "Lisensi telah kadaluwarsa",
"PluginKeywords": "Kata Kunci",
"PluginVersionInfo": "%1$s dari %2$s",
"SubscriptionType": "Jenis"
diff --git a/plugins/Marketplace/lang/ja.json b/plugins/Marketplace/lang/ja.json
index 270d0e05f4..c65055574f 100644
--- a/plugins/Marketplace/lang/ja.json
+++ b/plugins/Marketplace/lang/ja.json
@@ -103,6 +103,7 @@
"Updated": "更新済",
"UpdatingPlugin": "%1$s を更新しています",
"UploadZipFile": "ZIPファイルをアップロード",
+ "PluginUploadDisabled": "設定ファイルでプラグインのアップロードが無効になっています。 この機能を有効にするには、設定を更新するか、管理者に連絡してください。",
"LicenseKeyExpiresSoon": "まもなくライセンスキーが期限切れになりますので、%1$sに連絡してください。",
"LicenseKeyIsExpired": "ライセンスキーの有効期限が切れていますので、%1$sに連絡してください。",
"MultiServerEnvironmentWarning": "複数のサーバーでPiwikを使用しているときと同じように、プラグインを直接インストールまたは更新することはできません。プラグインは1台のサーバーにのみインストールされます。プラグインをダウンロードし、すべてのサーバーに手動で展開します。",
diff --git a/plugins/Marketplace/lang/nb.json b/plugins/Marketplace/lang/nb.json
index 4e8bd7d4b2..2def5a3ae9 100644
--- a/plugins/Marketplace/lang/nb.json
+++ b/plugins/Marketplace/lang/nb.json
@@ -8,6 +8,7 @@
"Authors": "Forfattere",
"BackToMarketplace": "Tilbake til markedsplassen",
"ByXDevelopers": "av %s utviklere",
+ "CannotInstall": "Kan ikke installere",
"CannotUpdate": "Kan ikke oppdatere",
"Developer": "Utvikler",
"DevelopersLearnHowToDevelopPlugins": "Utviklere: Lær hvordan du kan utvide og tilpasse Piwik ved %1$så utvikle utvidelser og tema%2$s.",
@@ -20,6 +21,7 @@
"LicenseKey": "Lisensnøkkel",
"LicenseMissing": "Lisens mangler",
"LicenseExpired": "Lisens utløpt",
+ "LicenseKeyIsValidShort": "Lisensnøkkel er gyldig!",
"RemoveLicenseKey": "Fjern lisensnøkkel",
"NewVersion": "ny versjon",
"NotAllowedToBrowseMarketplacePlugins": "Du kan bla i listen over utvidelser som kan installeres for å utvide eller tilpasse din Piwik-plattform. Vennligst kontakt din admin hvis du trenger å installere noen av disse.",
diff --git a/plugins/Marketplace/lang/pl.json b/plugins/Marketplace/lang/pl.json
index e91edac339..72adc3733d 100644
--- a/plugins/Marketplace/lang/pl.json
+++ b/plugins/Marketplace/lang/pl.json
@@ -1,44 +1,113 @@
{
"Marketplace": {
"ActivateLicenseKey": "Włącz",
- "ActionActivatePlugin": "Włącz plugin",
+ "ActionActivatePlugin": "Włącz wtyczkę",
"ActionActivateTheme": "Aktywuj szablon",
"ActionInstall": "Zainstaluj",
- "AllowedUploadFormats": "Możesz wysłać plugin lub skórę w formacie .zip poprzez tą stronę.",
+ "AddToCart": "Dodaj do koszyka",
+ "AllowedUploadFormats": "Możesz wgrać wtyczkę lub szablon w formacie .zip poprzez tą stronę.",
"Authors": "Autorzy",
- "BackToMarketplace": "Wróć do Marketu",
+ "BackToMarketplace": "Wróć do Sklepu",
+ "BrowseMarketplace": "Przeglądaj Sklep",
"ByXDevelopers": "przez %s deweloperów",
+ "CannotInstall": "Nie można zainstalować",
+ "CannotUpdate": "Nie udało się zaktualizować",
+ "ClickToCompletePurchase": "Kliknij, aby sfinalizować zakup.",
+ "CurrentNumPiwikUsers": "W Twoim Piwik'u obecnie zarejestrowanych jest %1$s użytkowników.",
+ "ConfirmRemoveLicense": "Czy na pewno chcesz usunąć swój klucz licencyjny? Spowoduje to zakończenie aktualizacji wszystkich zakupionych wtyczek.",
"Developer": "Deweloper",
+ "DevelopersLearnHowToDevelopPlugins": "Deweloperzy: Dowiedz się więcej jak rozszerzać i dopasowywać funkcjonalności Piwik'a przez %1$stworzenie wtyczek i szablonów%2$s.",
"Marketplace": "Sklep",
- "FeaturedPlugin": "Wyróżniony plugin",
+ "PaidPlugins": "Funkcjonalności Premium",
+ "FeaturedPlugin": "Wyróżniona wtyczka",
+ "InstallingNewPluginViaMarketplaceOrUpload": "Możesz automatycznie zainstalować %1$s ze Sklepu lub %2$s wgrać %3$s %4$s z formacie .zip.",
"InstallingPlugin": "Instalowanie %s",
+ "InstallPurchasedPlugins": "Zainstaluj zakupioną wtyczkę",
"LastCommitTime": "(ostatnia aktualizacja %s)",
"LastUpdated": "Ostatnia aktualizacja",
+ "License": "Licencja",
+ "LicenseKey": "Klucz licencyjny",
+ "LicenseKeyActivatedSuccess": "Klucz licencyjny pomyślnie aktywowany!",
+ "LicenseKeyDeletedSuccess": "Klucz licencyjny pomyślnie usunięty.",
+ "Exceeded": "Przekroczony",
+ "LicenseMissing": "Brak licencji",
+ "LicenseMissingDescription": "Używasz następujących wtyczek bez licencji: %1$s. %2$sW celu rozwiązania tej sytuacji zaktualizuj swój klucz licencyjny, %3$s zakup subskrypcję%4$s lub wyłącz wtyczkę.",
+ "PluginLicenseMissingDescription": "Nie możesz pobrać tej wtyczki ponieważ nie posiadasz na nią licencji. W celu rozwiązania tej sytuacji zaktualizuj swój klucz licencyjny, zakup subskrypcję lub wyłącz wtyczkę.",
+ "LicenseExceeded": "Licencja przekroczona",
+ "LicenseExceededDescription": "Licencje następujących wtyczek straciły swoją ważność, ponieważ liczba autoryzowanych użytkowników przekroczyła: %1$s. %2$s Pobieranie aktualizacji dla tych wtyczek nie będzie możliwe. W celu rozwiązania sytuacji usuń użytkowników lub %3$szaktualizuj subskrybcję%4$s.",
+ "PluginLicenseExceededDescription": "Nie możesz pobrać tej wtyczki. Licencja tej wtyczki straciła ważność ponieważ przekroczona została liczba zarejestrowanych użytkowników przewidzianych przez licencję. W celu rozwiązania usuń kilku użytkowników lub aktualizuj subskrypcję.",
+ "LicenseExpired": "Licencja wygasła",
+ "LicenseExpiredDescription": "Licencje dla następujących wtyczek: %1$s przedawniły się. %2$sNie będą one aktualizowane. W celu rozwiązania sytuacji %3$sornów subsktypcję teraz%4$s lub wyłącz wtyczkę jeśli już z niej nie korzystasz.",
+ "LicenseRenewsNextPaymentDate": "Odnowienie przy najbliższej dacie płatności",
+ "UpgradeSubscription": "Aktualizuj Subskrypcję",
+ "ViewSubscriptionsSummary": "%1$sZobacz listę subskrybcji wtyczek.%2$s",
+ "ViewSubscriptions": "Przeglądaj subskrypcje",
+ "ExceptionLinceseKeyIsExpired": "Ten klucz licencyjny wygasł",
+ "ExceptionLinceseKeyIsNotValid": "Ten klucz licencyjny jest nieważny.",
+ "LicenseKeyIsValidShort": "Ważny klucz licencyjny!",
+ "RemoveLicenseKey": "Usuń klucz licencyjny",
+ "InstallAllPurchasedPlugins": "Zainstaluj wszystkie zakupione wtyczki na raz",
+ "InstallAllPurchasedPluginsAction": "Zainstaluj i uruchom %d zakupione wtyczki",
+ "InstallThesePlugins": "Nastąpi instalacja i uruchomienie następujących wtyczek:",
+ "AllPaidPluginsInstalledAndActivated": "Wszystkie odpłatne wtyczki zostały zainstalowane i uruchomione.",
+ "OnlySomePaidPluginsInstalledAndActivated": "Niektóre płatne wtyczki nie zostały zainstalowane.",
+ "NewVersion": "nowa wersja",
"NotAllowedToBrowseMarketplacePlugins": "Możesz przeglądać listę plugin'ów które mogą zostać zainstalowane aby zmodyfikować lub rozszerzyć Twoją platformę Piwik. Skontaktuj się z administratorem jeśli chcesz zainstalować któryś z nich.",
"NotAllowedToBrowseMarketplaceThemes": "Możesz przeglądać listę tematów, które mogą być zainstalowane, aby dostosować wygląd platformy Piwik. W celu instalacji porszę skontaktować się z administratorem.",
"NoPluginsFound": "Nie znaleziono pluginów",
"NoThemesFound": "Nie znaleziono szablonów",
+ "NoSubscriptionsFound": "Brak subskrypcji",
"NumDownloadsLatestVersion": "Ostatnia wersja: %s Pobrań",
+ "OverviewPluginSubscriptions": "Przeglądaj subskrybcje Twoich wtyczek",
+ "OverviewPluginSubscriptionsMissingLicense": "Klucz licencyjny nie został ustawiony. Jeśli zakupiłeś subskrypcję wtyczki, przejdź do %1$sSklepu%2$s i wprowadź klucz licencyjny.",
+ "OverviewPluginSubscriptionsAllDetails": "Aby zobaczyć szczegóły lub zmienić subskrypcję zaloguj się na swoje konto.",
+ "OverviewPluginSubscriptionsMissingInfo": "Brak subskrypcji może oznaczać, że na przykład Twoja płatność jeszcze nie została zaksięgowana. Spróbuj ponownie za parę godzin lub skontaktuj się z zespołem Piwik.",
+ "NoValidSubscriptionNoUpdates": "W sytuacji gdy subskrypcja wygaśnie nie będziesz otrzymywał aktualizacji tej wtyczki.",
+ "PluginSubscriptionsList": "To jest lista subskrypcji powiązanych z Twoim kluczem licencyjnym.",
+ "PaidPluginsNoLicenseKeyIntro": "Jeśli zakupiłeś %1$spłatną wtyczkę premium%2$s, proszę wpisz poniżej otrzymany klucz licencyjny.",
+ "PaidPluginsWithLicenseKeyIntro": "Ważny klucz licencyjny został skonfigurowany. Ze względów bezpieczeństwa nie jest on tu wyświetlany. Jeślu zagubiłeś klucz licencyjny skontaktuj się z zespołem Piwik.",
+ "PaidPluginsNoLicenseKeyIntroNoSuperUserAccess": "Jeśli zakupiłeś %1$spłatną wtyczkę premium%2$s w Sklepie, proszę skontaktuj się z użytkownikiem o uprawnieniach Super Użytkownika , który doda klucz licencyjny.",
+ "PluginDescription": "Rozszerzaj funkcjonalności Piwik'a poprzez wtyczki i tematy dostępne w Sklepie.",
"PluginKeywords": "Słowa kluczowe",
"PluginUpdateAvailable": "Używasz wersji %1$s, nowa wersja %2$s jest dostępna.",
"PluginVersionInfo": "%1$s z %2$s",
- "PluginWebsite": "Strona WWW",
+ "PluginWebsite": "Strona WWW wtyczki",
+ "PriceExclTax": "%1$s %2$s bez podatku",
+ "PriceFromPerPeriod": "Z %1$s \/ %2$s",
+ "Reviews": "Oceny",
+ "ShownPriceIsExclTax": "Pokazana cena bez podatku",
"Screenshots": "Screenshoty",
+ "SortByNewest": "Najnowsze",
+ "SortByAlpha": "Alpha",
+ "SortByLastUpdated": "Ostatnia aktualizacja",
+ "SortByPopular": "Popularne",
"StepDownloadingPluginFromMarketplace": "Pobieranie wtyczki ze Sklepu",
"StepDownloadingThemeFromMarketplace": "Pobieranie szablonu ze Sklepu",
- "StepUnzippingPlugin": "Rozpakowywanie pluginu",
+ "StepUnzippingPlugin": "Rozpakowywanie wtyczki",
"StepUnzippingTheme": "Rozpakowuję szablon",
"StepThemeSuccessfullyInstalled": "Pomyślnie zainstalowano szablon %1$s %2$s.",
"StepPluginSuccessfullyInstalled": "Wtyczka %1$s %2$s została pomyślnie zainstalowana.",
"StepPluginSuccessfullyUpdated": "Wtyczka została %1$s %2$s zaaktualizowana.",
- "StepReplaceExistingPlugin": "Zastępowanie istniejącego pluginu",
+ "StepReplaceExistingPlugin": "Zastępowanie istniejącej wtyczki",
"StepReplaceExistingTheme": "Zastępowania obecnego motywu",
"StepThemeSuccessfullyUpdated": "Motyw został zaaktualizowany %1$s %2$s.",
"SubscriptionType": "Rodzaj",
+ "SubscriptionStartDate": "Data początkowa",
+ "SubscriptionEndDate": "Data końcowa",
+ "SubscriptionNextPaymentDate": "Data następnej płatności",
+ "SubscriptionInvalid": "Ta subskrypcja nie jest ważna lub wygasła",
+ "SubscriptionExpiresSoon": "Ta subskrypcja niedługo wygasa",
"Support": "Wsparcie",
"TeaserExtendPiwikByUpload": "Rozbuduj Piwik poporzez wgranie plików ZIP",
+ "LicenseExceededPossibleCause": "Ta licencja została przekroczona. W tej instancji Piwik'a zostało prawdopodobnie skonfigurowanych więcej użytkowników, niż dopuszcza subskrypcja.",
"Updated": "Zaktualizowano",
- "UploadZipFile": "Wyślij plik ZIP",
+ "UpdatingPlugin": "Aktualizowanie %1$s",
+ "UploadZipFile": "Wgraj plik ZIP",
+ "PluginUploadDisabled": "Wgrywanie wtyczek zostało wyłączone w pliku konfiguracyjnym. W celu włączenia tej funkcjonalności należy zaktualizować konfigurację lub skontaktować się z administratorem",
+ "LicenseKeyExpiresSoon": "Twój klucz licencyjny niedługo wygasa, prosimy o kontakt %1$s.",
+ "LicenseKeyIsExpired": "Twój klucz licencyjny wygasł, prosimy o kontakt %1$s.",
+ "MultiServerEnvironmentWarning": "Nie można zainstalować lub zaktualizować wtyczki bezpośrednio, ponieważ Twój Piwik działa na wielu serwerach. W ten sposób wtyczka została by zainstalowana na pojedynczym serwerze. Pobierz wtyczkę i zainstaluj ją ręcznie na wszystkich swoich serwerach.",
+ "AutoUpdateDisabledWarning": "Nie można zainstalować lub zaktualizować wtyczki bezpośrednio, ponieważ aktualizacje automatyczne są wyłączone w konfiguracji. Aby włączyć automatyczne aktualizacje ustaw %1$s w %2$s.",
"ViewRepositoryChangelog": "Zobacz zmiany"
}
} \ No newline at end of file
diff --git a/plugins/Marketplace/lang/tr.json b/plugins/Marketplace/lang/tr.json
index a3380fd335..34816e6667 100644
--- a/plugins/Marketplace/lang/tr.json
+++ b/plugins/Marketplace/lang/tr.json
@@ -4,15 +4,22 @@
"ActionActivatePlugin": "Eklentiyi etkinleştir",
"ActionActivateTheme": "Temayı aktif et",
"ActionInstall": "Kur",
+ "AddToCart": "Sepete ekle",
"AllowedUploadFormats": "Bu sayfa üzerinden .zip formatında bir eklenti veya tema yükleyebilirsiniz.",
"Authors": "Yazarlar",
"BackToMarketplace": "Markete geri dön",
"ByXDevelopers": "şu geliştiriciler tarafından %s",
+ "ConfirmRemoveLicense": "Lisans anahtarınızı kaldırmak istediğinizden emin misiniz? Artık satın alınan eklentilerden herhangi birisi için güncelleme alamazsınız.",
"Developer": "Geliştirici",
"Marketplace": "Pazaryeri",
+ "PaidPlugins": "Premium Özellikler",
"InstallingPlugin": "Kuruluyor %s",
"LastCommitTime": "(son işlem %s)",
"LastUpdated": "Son Güncelleme",
+ "License": "Lisans",
+ "LicenseKey": "Lisans anahtarı",
+ "LicenseKeyActivatedSuccess": "Lisans anahtarı başarıyla aktif edildi!",
+ "LicenseKeyDeletedSuccess": "Lisans anahtarı başarıyla silindi.",
"NoPluginsFound": "Eklenti bulunamadı",
"NoThemesFound": "Tema bulunamadı",
"NumDownloadsLatestVersion": "Son versiyon: %s İndir",
diff --git a/plugins/MobileAppMeasurable/lang/id.json b/plugins/MobileAppMeasurable/lang/id.json
new file mode 100644
index 0000000000..64b67dc967
--- /dev/null
+++ b/plugins/MobileAppMeasurable/lang/id.json
@@ -0,0 +1,6 @@
+{
+ "MobileAppMeasurable": {
+ "MobileApp": "Aplikasi Mobil",
+ "MobileApps": "Aplikasi Mobil"
+ }
+} \ No newline at end of file
diff --git a/plugins/MobileAppMeasurable/lang/ru.json b/plugins/MobileAppMeasurable/lang/ru.json
index 459b4b7a79..4a05c10731 100644
--- a/plugins/MobileAppMeasurable/lang/ru.json
+++ b/plugins/MobileAppMeasurable/lang/ru.json
@@ -1,6 +1,7 @@
{
"MobileAppMeasurable": {
"MobileApp": "Мобильное приложение",
- "MobileApps": "Мобильные приложения"
+ "MobileApps": "Мобильные приложения",
+ "MobileAppDescription": "Нативное мобильное приложение для iOS, Android или любой другой мобильной оперативной системы."
}
} \ No newline at end of file
diff --git a/plugins/MobileMessaging/CountryCallingCodes.php b/plugins/MobileMessaging/CountryCallingCodes.php
index 004e8e5772..0c45202d18 100644
--- a/plugins/MobileMessaging/CountryCallingCodes.php
+++ b/plugins/MobileMessaging/CountryCallingCodes.php
@@ -234,7 +234,6 @@ class CountryCallingCodes
// 'tf' => 'MISSING CODE',
'tg' => '228',
'th' => '66',
-// 'ti' => 'MISSING CODE',
'tj' => '992',
'tk' => '690',
'tl' => '670',
diff --git a/plugins/MobileMessaging/lang/de.json b/plugins/MobileMessaging/lang/de.json
index 648a8b59d6..83e11debb0 100644
--- a/plugins/MobileMessaging/lang/de.json
+++ b/plugins/MobileMessaging/lang/de.json
@@ -28,7 +28,7 @@
"Settings_PhoneNumbers_Add": "Neue Telefonnummer hinzufügen",
"Settings_PhoneNumbers_CountryCode_Help": "Falls Sie die Ländervorwahl nicht wissen, suchen Sie hier Ihr Land.",
"Settings_PhoneNumbers_Help": "Bevor Sie SMS (Textnachrichten) auf dem Telefon empfangen können, müssen Sie unten die Telefonnummer eingeben.",
- "Settings_PhoneNumbers_HelpAdd": "Wenn Sie auf \"Hinzufügen\" klicken wird eine SMS mit einem Code an Ihre Telefon versendet. Wenn Sie den Code empfangen loggen Sie sich bitte in Piwik ein, klicken auf Einstellungen und danach Mobile Messaging. Nach dem Eingeben des Codes können Sie Textberichte auf diesem Telefon empfangen.",
+ "Settings_PhoneNumbers_HelpAdd": "Wenn Sie auf \"Hinzufügen\" klicken wird eine SMS mit einem Code an Ihr Telefon versendet. Wenn Sie den Code empfangen loggen Sie sich bitte in Piwik ein, klicken auf Einstellungen und danach Mobile Messaging. Nach dem Eingeben des Codes können Sie Textberichte auf diesem Telefon empfangen.",
"Settings_PleaseSignUp": "Um SMS Berichte zu erstellen und Textnachrichten mit Ihren Statistiken auf Ihrem Mobiltelefon empfangen zu können, registrieren Sie sich unterhalb für die SMS API.",
"Settings_SMSAPIAccount": "SMS-API Zugang verwalten",
"Settings_SMSProvider": "SMS-Anbieter",
diff --git a/plugins/MobileMessaging/lang/id.json b/plugins/MobileMessaging/lang/id.json
index cbbe46c2fe..0f47cbe567 100644
--- a/plugins/MobileMessaging/lang/id.json
+++ b/plugins/MobileMessaging/lang/id.json
@@ -9,6 +9,7 @@
"PluginDescription": "Buat dan unduh laporan SMS tersesuaikan dan kirimkan ke perangkat bergerak Anda secara harian, mingguan, atau bulanan.",
"Settings_APIKey": "Kunci API",
"Settings_CountryCode": "Kode Negara",
+ "Settings_SelectCountry": "Pilih negara",
"Settings_CredentialNotProvided": "Sebelum Anda dapat membuat dan mengelola nomor telepon, harap menghubungkan Piwik dengan Akun SMS Anda di atas.",
"Settings_CredentialNotProvidedByAdmin": "Sebelum Anda dapat membuat dan mengelola nomor telepon, harap tanyakan pengelola Anda untuk menghubungkan Piwik kepada sebuah Akun SMS.",
"Settings_CredentialProvided": "API SMS %s Anda berhasil diatur!",
diff --git a/plugins/MobileMessaging/lang/ja.json b/plugins/MobileMessaging/lang/ja.json
index b558d90ccc..ae38a5e3a3 100644
--- a/plugins/MobileMessaging/lang/ja.json
+++ b/plugins/MobileMessaging/lang/ja.json
@@ -13,6 +13,7 @@
"Settings_CredentialNotProvided": "電話番号の作成と管理の前に、Piwik を上のあなたの SMS アカウントに接続してください。",
"Settings_CredentialNotProvidedByAdmin": "電話番号の作成と管理の前に、Piwik を SMS アカウントに接続するよう管理者にお願いしてください。",
"Settings_CredentialProvided": "%s SMS API アカウントは、正しく設定されました!",
+ "Settings_CredentialInvalid": "%1$s のSMS APIアカウントが設定されていますが、使用可能なクレジットを受け取ろうとしているときにエラーが発生しました。",
"Settings_DeleteAccountConfirm": "本当にこの SMS アカウントを削除してよろしいですか?",
"Settings_DelegatedSmsProviderOnlyAppliesToYou": "設定されたSMSプロバイダは、あなただけが使用し、他のユーザは使用しません。",
"Settings_DelegatedPhoneNumbersOnlyUsedByYou": "設定された電話番号は、あなただけが見ることができ、他のユーザーは見ることができません。",
@@ -38,8 +39,10 @@
"Settings_VerificationCodeJustSent": "今この番号にコード付きの SMS を送信しました。上のコードを入力し、\"検証\" をクリックしてください。",
"SettingsMenu": "モバイルメッセージ",
"SMS_Content_Too_Long": "[ 長過ぎます ]",
+ "Available_Credits": "利用可能なクレジット:%1$s",
"TopLinkTooltip": "E メール受信箱または携帯電話に届けられたウェブ解析レポートを取得する",
"TopMenu": "Eメール & SMS レポート",
+ "UserKey": "ユーザーキー",
"VerificationText": "コードは %1$sです。電話番号を検証または Piwik SMS レポートを受け取るには、Piwik > %2$s > %3$s 経由でアクセスできるフォームでこのコードをコピーしてくださ"
}
} \ No newline at end of file
diff --git a/plugins/MobileMessaging/lang/nl.json b/plugins/MobileMessaging/lang/nl.json
index 8b29f15651..d5dda5e0f4 100644
--- a/plugins/MobileMessaging/lang/nl.json
+++ b/plugins/MobileMessaging/lang/nl.json
@@ -38,8 +38,10 @@
"Settings_VerificationCodeJustSent": "We hebben net een SMS met een code naar dit nummer verstuurd: Gelieve de code hierboven in te vullen en klik op \"Valideer\".",
"SettingsMenu": "Mobiele berichten",
"SMS_Content_Too_Long": "[te lang]",
+ "Available_Credits": "Beschikbare credits: %1$s",
"TopLinkTooltip": "Krijg je Web Analyse rapporten toegestuurd naar je mailbox of je mobiele telefoon!",
"TopMenu": "E-mail & SMS-rapporten",
+ "UserKey": "Userkey",
"VerificationText": "Code %1$s. Kopieer deze code naar Piwik > %2$s > %3$s om je telefoonnummer te valideren en sms rapporten te ontvangen."
}
} \ No newline at end of file
diff --git a/plugins/Monolog/Formatter/LineMessageFormatter.php b/plugins/Monolog/Formatter/LineMessageFormatter.php
index c9bff1e77b..f3d8608b7e 100644
--- a/plugins/Monolog/Formatter/LineMessageFormatter.php
+++ b/plugins/Monolog/Formatter/LineMessageFormatter.php
@@ -38,7 +38,7 @@ class LineMessageFormatter implements FormatterInterface
public function format(array $record)
{
$class = isset($record['extra']['class']) ? $record['extra']['class'] : '';
- $date = $record['datetime']->format('Y-m-d H:i:s');
+ $date = $record['datetime']->format('Y-m-d H:i:s T');
$message = trim($record['message']);
diff --git a/plugins/Monolog/tests/Unit/Formatter/LineMessageFormatterTest.php b/plugins/Monolog/tests/Unit/Formatter/LineMessageFormatterTest.php
index c98182e357..d1a25a00ce 100644
--- a/plugins/Monolog/tests/Unit/Formatter/LineMessageFormatterTest.php
+++ b/plugins/Monolog/tests/Unit/Formatter/LineMessageFormatterTest.php
@@ -33,7 +33,7 @@ class LineMessageFormatterTest extends \PHPUnit_Framework_TestCase
),
);
- $formatted = "ERROR Foo 1970-01-01 00:00:00 Hello world\n";
+ $formatted = "ERROR Foo 1970-01-01 00:00:00 GMT+0000 Hello world\n";
$this->assertEquals($formatted, $formatter->format($record));
}
diff --git a/plugins/Morpheus/icons b/plugins/Morpheus/icons
-Subproject 9d8522f98a2c9c5de4f7c267f0ca0618b185a87
+Subproject 3d383b913471fae94ca30a5f413454c944e1657
diff --git a/plugins/Morpheus/images/event.png b/plugins/Morpheus/images/event.png
index ad4b38a01b..bea57d4933 100644
--- a/plugins/Morpheus/images/event.png
+++ b/plugins/Morpheus/images/event.png
Binary files differ
diff --git a/plugins/Morpheus/images/logo-header.png b/plugins/Morpheus/images/logo-header.png
index 6e7b861bd3..6a717c69cb 100644
--- a/plugins/Morpheus/images/logo-header.png
+++ b/plugins/Morpheus/images/logo-header.png
Binary files differ
diff --git a/plugins/Morpheus/javascripts/piwikHelper.js b/plugins/Morpheus/javascripts/piwikHelper.js
index 2dabaacbc1..6a59e0e68a 100644
--- a/plugins/Morpheus/javascripts/piwikHelper.js
+++ b/plugins/Morpheus/javascripts/piwikHelper.js
@@ -432,7 +432,7 @@ var piwikHelper = {
lazyScrollTo: function(elem, time, forceScroll)
{
var $elem = $(elem);
- if (!$elem.size()) {
+ if (!$elem.length) {
return;
}
diff --git a/plugins/Morpheus/stylesheets/general/_default.less b/plugins/Morpheus/stylesheets/general/_default.less
index 68d1827806..cfbd8ec0af 100644
--- a/plugins/Morpheus/stylesheets/general/_default.less
+++ b/plugins/Morpheus/stylesheets/general/_default.less
@@ -11,6 +11,7 @@ html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockq
abbr {
border-bottom: 1px dotted;
+ text-decoration: none;
}
form {
diff --git a/plugins/Morpheus/stylesheets/main.less b/plugins/Morpheus/stylesheets/main.less
index db3515a1f6..1eaf784455 100644
--- a/plugins/Morpheus/stylesheets/main.less
+++ b/plugins/Morpheus/stylesheets/main.less
@@ -409,10 +409,6 @@ table.dataTable {
}
}
}
-
- &.dataTableVizVisitorLog {
-
- }
}
div.dataTableVizHtmlTable:not(.dataTableActions), div.dataTableVizAllColumns, div.dataTableVizGoals {
@@ -490,156 +486,6 @@ div.sparkline {
z-index: 1;
}
-.visitor-profile a {
- color: @theme-color-link;
- font-weight: normal;
-}
-
-.visitor-profile-info {
- box-shadow: none !important;
-}
-
-.visitor-profile-latest-visit-loc {
- display: inline-block;
- position: absolute;
- right: 4px;
- top: -19px;
-}
-
-
-.visitor-profile-more-info > a {
- color: @theme-color-link;
- .font-default(12px, 16px);
-}
-
-.visitor-profile-more-info {
- margin: 5px 0 15px 0;
-}
-
-.visitor-profile-visits-container {
- padding: 0;
- margin: 0;
- li {
- margin: 0 !important;
- background: @color-silver-l95;
- padding: 7px 10px !important;
- > div {
- border: 0px !important;
- margin: 0 !important;
- }
- }
-
- ol.visitor-profile-visits {
- > li {
- padding: 0 0 0 !important;
- span {
- font-weight: normal;
- margin-right: 20px;
- }
-
- ol {
- background: @theme-color-background-contrast !important;
- border-top: 0 !important;
- li {
- background: @theme-color-background-contrast !important;
- font-weight: normal;
- color: @theme-color-text-lighter;
- &:last-child {
- border-bottom: 0 !important;
- padding-bottom: 20px !important;
- }
- &:first-child {
- padding-top: 20px !important;
- }
- }
- }
- }
- }
-}
-
-.widget .visitor-profile .visitor-profile-info > div > div {
- min-width: 100% !important;
-}
-
-.visitor-profile {
- background: none;
- border: 0;
- .border-radius(0px);
- .visitor-profile-info {
- .border-radius(0px);
- border: 0px;
-
- > div {
- border: 0px !important;
- }
-
- .visitor-profile-image-frame {
- background: none !important;
- }
- .visitor-profile-avatar {
- > div > img {
- display: none;
- }
- }
- }
-
-
-
- .visitor-profile-avatar {
- ul {
- width: 100% !important;
- li {
- display: block;
- border: 0px;
- &:first-child {
- border: 0px !important;
- }
- span {
- color: @theme-color-text-lighter;
- .font-default(13px, 18px);
- padding-left: 0;
- }
-
- strong {
- color: @theme-color-text;
- .font-default(13px, 18px);
- font-weight: normal !important;
- }
-
- .visitor-profile-os,
- .visitor-profile-browser {
- margin-left: 0;
- img {
- margin-right: 5px;
- vertical-align: middle;
- }
- }
- }
- }
- }
-
- .visitor-profile-avatar > div:nth-child(2n) {
- width: 376px;
- }
-
- .visitor-profile-latest-visit {
- .visitor-profile-latest-visit-column {
- display: inline-block;
- margin-left: 0;
- }
-
- .visitor-profile-latest-visit-column:first-child {
- width: 50%;
- margin-right:-4px;
- }
-
- .visitor-profile-latest-visit-column:last-child {
- width: 50%;
- margin-right:-4px;
- }
- }
-}
-
.annotationView {
.font-default(10px, 12px);
text-transform: uppercase;
diff --git a/plugins/MultiSites/lang/id.json b/plugins/MultiSites/lang/id.json
index 2d27151e22..0d2a35271c 100644
--- a/plugins/MultiSites/lang/id.json
+++ b/plugins/MultiSites/lang/id.json
@@ -1,6 +1,8 @@
{
"MultiSites": {
"Evolution": "Perkembangan",
- "TopLinkTooltip": "Bandingkan statistik Analisis Ramatraya untuk seluruh Situs Anda."
+ "LoadingWebsites": "Membuat website",
+ "TopLinkTooltip": "Bandingkan statistik Analisis Ramatraya untuk seluruh Situs Anda.",
+ "Pagination": "%1$s - %2$s dari %3$s"
}
} \ No newline at end of file
diff --git a/plugins/MultiSites/lang/pl.json b/plugins/MultiSites/lang/pl.json
index c05c3bf9dd..93b2bdaa3f 100644
--- a/plugins/MultiSites/lang/pl.json
+++ b/plugins/MultiSites/lang/pl.json
@@ -2,6 +2,8 @@
"MultiSites": {
"Evolution": "Postęp",
"LoadingWebsites": "Ładowanie stron",
+ "PluginDescription": "Przeglądaj i porównuj wszystkie swoje serwisy i aplikacje w tym użytecznym panelu 'Wszystkie serwisy'",
+ "TopLinkTooltip": "Porównaj statystyki stron wszystkich swoich Serwisów.",
"Pagination": "%1$s - %2$s z %3$s"
}
} \ No newline at end of file
diff --git a/plugins/MultiSites/lang/ru.json b/plugins/MultiSites/lang/ru.json
index 6f2aec0571..31488b88b3 100644
--- a/plugins/MultiSites/lang/ru.json
+++ b/plugins/MultiSites/lang/ru.json
@@ -2,6 +2,7 @@
"MultiSites": {
"Evolution": "Эволюция",
"LoadingWebsites": "Загрузка сайтов",
+ "PluginDescription": "Смотреть и сравнивать все ваши веб-сайты и приложения на этой полезной панели управления \"Все веб-сайты\".",
"TopLinkTooltip": "Сравните веб-аналитику для всех ваших сайтов.",
"Pagination": "%1$s - %2$s из %3$s"
}
diff --git a/plugins/Overlay/client/client.js b/plugins/Overlay/client/client.js
index 5fd99c466b..9ae78cf3b1 100644
--- a/plugins/Overlay/client/client.js
+++ b/plugins/Overlay/client/client.js
@@ -185,7 +185,7 @@ var Piwik_Overlay_Client = (function () {
return function () {
item.remove();
- if (statusBar.children().size() == 0) {
+ if (!statusBar.children().length) {
statusBar.hide();
}
};
@@ -194,7 +194,7 @@ var Piwik_Overlay_Client = (function () {
/** Hide all notifications with a certain class */
hideNotifications: function (className) {
statusBar.find('.PIS_' + className).remove();
- if (statusBar.children().size() == 0) {
+ if (!statusBar.children().length) {
statusBar.hide();
}
},
diff --git a/plugins/Overlay/client/followingpages.js b/plugins/Overlay/client/followingpages.js
index d13bf68122..bc22d0a53c 100644
--- a/plugins/Overlay/client/followingpages.js
+++ b/plugins/Overlay/client/followingpages.js
@@ -246,7 +246,7 @@ var Piwik_Overlay_FollowingPages = (function () {
}
// see comment in highlightLink()
- if (hasOneChild && linkTag.find('> img').size() == 1) {
+ if (hasOneChild && linkTag.find('> img').length === 1) {
offset = linkTag.find('> img').offset();
if (offset.left == 0 && offset.top == 0) {
offset = linkTag.offset();
@@ -318,7 +318,7 @@ var Piwik_Overlay_FollowingPages = (function () {
var visibility = el.css('visibility');
if (visibility == 'inherit') {
el = el.parent();
- if (el.size() > 0) {
+ if (el.length) {
return getVisibility(el);
}
}
@@ -326,21 +326,21 @@ var Piwik_Overlay_FollowingPages = (function () {
}
/**
- * Find out whether a link has only one child. Using .children().size() == 1 doesn't work
+ * Find out whether a link has only one child. Using .children().length === 1 doesn't work
* because it doesn't take additional text nodes into account.
*/
function checkHasOneChild(linkTag) {
- var hasOneChild = (linkTag.children().size() == 1);
+ var hasOneChild = (linkTag.children().length === 1);
if (hasOneChild) {
// if the element contains one tag and some text, hasOneChild is set incorrectly
var contents = linkTag.contents();
- if (contents.size() > 1) {
+ if (contents.length > 1) {
// find non-empty text nodes
contents = contents.filter(function () {
return this.nodeType == 3 && // text node
$.trim(this.data).length > 0; // contains more than whitespaces
});
- if (contents.size() > 0) {
+ if (contents.length) {
hasOneChild = false;
}
}
@@ -354,7 +354,7 @@ var Piwik_Overlay_FollowingPages = (function () {
return typeof this.piwikDiscovered == 'undefined' || this.piwikDiscovered === null;
});
- if (newLinks.size() == 0) {
+ if (!newLinks.length) {
return;
}
@@ -386,7 +386,7 @@ var Piwik_Overlay_FollowingPages = (function () {
var offset, height;
var hasOneChild = checkHasOneChild(linkTag);
- if (hasOneChild && linkTag.find('img').size() == 1) {
+ if (hasOneChild && linkTag.find('img').length === 1) {
// if the <a> tag contains only an <img>, the offset and height methods don't work properly.
// as a result, the box around the image link would be wrong. we use the image to derive
// the offset and height instead of the link to get correct values.
diff --git a/plugins/Overlay/javascripts/Piwik_Overlay.js b/plugins/Overlay/javascripts/Piwik_Overlay.js
index 8183950542..b409911e49 100644
--- a/plugins/Overlay/javascripts/Piwik_Overlay.js
+++ b/plugins/Overlay/javascripts/Piwik_Overlay.js
@@ -72,7 +72,7 @@ var Piwik_Overlay = (function () {
$sidebar.empty().append($response).show();
- if ($sidebar.find('.overlayNoData').size() == 0) {
+ if (!$sidebar.find('.overlayNoData').length) {
$rowEvolutionLink.show();
$transitionsLink.show();
if ($('#segment').val()) {
diff --git a/plugins/Overlay/lang/de.json b/plugins/Overlay/lang/de.json
index 73e0124596..12e65afa99 100644
--- a/plugins/Overlay/lang/de.json
+++ b/plugins/Overlay/lang/de.json
@@ -5,7 +5,7 @@
"Domain": "Domain",
"ErrorNotLoading": "Die Seiten Overlay Sitzung kann gerade nicht aufgerufen werden.",
"ErrorNotLoadingDetails": "Möglicherweise hat die rechte Seite keinen Piwik Tracking Code. In diesem Fall bitte versuchen das Overlay für eine andere Seite aus dem Seitenbericht zu benutzen.",
- "ErrorNotLoadingDetailsSSL": "Da Sie Piwik über https nutzen, ist es wahrscheinlich dass Ihre Website kein SSL unterstützt. Bitte benutzen Sie Piwik über http.",
+ "ErrorNotLoadingDetailsSSL": "Da Sie Piwik über https nutzen, ist es wahrscheinlich, dass Ihre Website kein SSL unterstützt. Bitte benutzen Sie Piwik über http.",
"ErrorNotLoadingLink": "Klicken Sie hier für weitere Tipps zur Fehlerbehebung",
"Link": "Link",
"Location": "Seite",
diff --git a/plugins/Overlay/lang/pl.json b/plugins/Overlay/lang/pl.json
index c0b9d746aa..eeb4d51676 100644
--- a/plugins/Overlay/lang/pl.json
+++ b/plugins/Overlay/lang/pl.json
@@ -1,10 +1,21 @@
{
"Overlay": {
"Clicks": "%s kliknięć",
+ "ClicksFromXLinks": "%1$s kliknięć z jednego z %2$s odnośników",
"Domain": "Domena",
- "Link": "Link",
+ "ErrorNotLoading": "Sesja Nakładki Strony nie mogła zostać uruchomiona.",
+ "ErrorNotLoadingDetails": "Może strona załadowana po prawej stronie nie ma kodu śledzącego Piwik. W takim przypadku spróbuj uruchomić Nakładkę dla innej strony widocznej w raporcie.",
+ "ErrorNotLoadingDetailsSSL": "W związku z faktem, że Piwik korzysta z połączenia HTTPS i jest prawdopodobne, że Twój serwis nie korzysta z SSL'a. Spróbuj użyuć Piwik'a na HTTP.",
+ "ErrorNotLoadingLink": "Kliknij tu, aby uzyskać więcej podpowiedzi i pomocy",
+ "Link": "Odnośnik",
"Location": "Położenie",
+ "NoData": "Brak danych dla wybranej strony we wskazanym przedziale czasu.",
"OneClick": "1 kliknięcie",
+ "OpenFullScreen": "Tryb pełnoekranowy (bez paska)",
+ "Overlay": "Nakładka Strony",
+ "PluginDescription": "Oglądaj dane analityczne jako Nakładkę na Twoją stronę. Zobacz liczbę kliknięć wszystkich odwiedzających w poszczególne odnośniki. Notka: Wymaga włączenia wtyczki Transitions.",
+ "RedirectUrlError": "Próbujesz otworzyć Nakładkę Strony dla adresu \"%1$s\". %2$s Żadna z domen skonfigurowanych w Piwik'u nie pasuje do odnośnika.",
+ "RedirectUrlErrorAdmin": "Możesz dodać domenę jako dodatkowy adres URL %1$sw ustawieniach%2$s.",
"RedirectUrlErrorUser": "Zwrócić się do administratora, aby dodać domenę jako dodatkowy URL."
}
} \ No newline at end of file
diff --git a/plugins/PrivacyManager/lang/de.json b/plugins/PrivacyManager/lang/de.json
index b9be6e79e0..a915a1a897 100644
--- a/plugins/PrivacyManager/lang/de.json
+++ b/plugins/PrivacyManager/lang/de.json
@@ -2,7 +2,7 @@
"PrivacyManager": {
"AnonymizeIpDescription": "Wählen Sie \"Ja\", wenn Piwik keine vollständigen IP-Adressen speichern soll.",
"AnonymizeIpInlineHelp": "Um den Datenschutzbestimmungen Ihres Landes gerecht zu werden, können Sie mit diesem Plugin die letzten Bytes der IP-Adresse Ihrer Besucher anonymisieren.",
- "AnonymizeIpExtendedHelp": "Wenn Benutzer Ihre Website besuchen, wird Piwik nicht die komplette IP Adresse (so wie %1$s) benützen, sondern sie stattdessen zuerst anonymisieren (zu %2$s). Die Anonymisierung der IP Adresse ist in einigen Ländern eine gesetzliche Pflicht, zum Beispiel in Deutschland vorgegeben durch das Datenschutzrecht.",
+ "AnonymizeIpExtendedHelp": "Wenn Benutzer Ihre Website besuchen, wird Piwik nicht die komplette IP-Adresse (so wie %1$s) benützen, sondern sie stattdessen zuerst anonymisieren (zu %2$s). Die Anonymisierung der IP-Adresse ist in einigen Ländern eine gesetzliche Pflicht, zum Beispiel in Deutschland vorgegeben durch das Datenschutzrecht.",
"AnonymizeIpMaskLengtDescription": "Wählen Sie aus, wieviele Bytes der Besucher-IP maskiert werden sollen.",
"AnonymizeIpMaskLength": "%1$s byte(s) - z.B. %2$s",
"CannotLockSoDeleteLogActions": "Die log_action Tabelle wird nicht geleert: Bitte geben Sie dem MySQL Benutzer '%s' das LOCK TABLES Privileg.",
@@ -39,7 +39,7 @@
"DoNotTrack_SupportDNTPreference": "Do-not-Track Einstellungen",
"EstimatedDBSizeAfterPurge": "Erwartete Größe der Datenbank nach dem Löschen",
"EstimatedSpaceSaved": "Geschätzte Speichereinsparung",
- "GeolocationAnonymizeIpNote": "Hinweis: Standorterkennung wird ungefähr das gleiche Ergebnis haben wenn 1 Byte anonymisiert ist. Bei 2 Bytes oder mehr wird Geolokalisierung sehr ungenau werden.",
+ "GeolocationAnonymizeIpNote": "Hinweis: Standorterkennung wird ungefähr das gleiche Ergebnis haben, wenn 1 Byte anonymisiert ist. Bei 2 Bytes oder mehr wird Geolokalisierung sehr ungenau werden.",
"GetPurgeEstimate": "Hochrechnung der Auswirkungen anzeigen",
"KeepBasicMetrics": "Behalte Basismetriken (Besuche, Seitenansichten, Absprungrate, Ziel-Konversionen, Ecommerce-Konversionen, etc.)",
"KeepDataFor": "Behalte alle Daten für",
@@ -60,7 +60,7 @@
"Teaser": "Auf dieser Seite können Sie Piwik so anpassen, dass es die bei Ihnen herrschenden Datenschutzbestimmungen einhält. Sie können %1$sBenutzer-IPs anonymisieren%2$s, %3$sautomatisch alte Logs aus der Datenbank löschen%4$s und %5$seinen Opt-out Mechanismus auf Ihrer Website anbieten%6$s.",
"TeaserHeadline": "Privatsphäreeinstellungen",
"UseAnonymizedIpForVisitEnrichment": "Benutze die anonymisierte IP-Adresse auch für die Aufbereitung der Besuche.",
- "UseAnonymizedIpForVisitEnrichmentNote": "Plugins wie Geolokalisierung anhand IP und Provider verbessern die Metadaten eines Besuchers. Normalerweise verwenden diese Plugins die anonymisierte IP Adresse. Wenn sie 'Nein' auswählen wird stattdessen die nicht anonymisierte volle IP Adresse verwendet. Daraus resultiert eine größere Genauigkeit, jedoch weniger Privatsphäre.",
+ "UseAnonymizedIpForVisitEnrichmentNote": "Plugins wie Geolokalisierung anhand IP und Provider verbessern die Metadaten eines Besuchers. Normalerweise verwenden diese Plugins die anonymisierte IP-Adresse. Wenn sie 'Nein' auswählen wird stattdessen die nicht anonymisierte volle IP-Adresse verwendet. Daraus resultiert eine größere Genauigkeit, jedoch weniger Privatsphäre.",
"UseAnonymizeIp": "Anonymisiere die IP-Adresse von Besuchern",
"UseDeleteLog": "Alte Besucher-Logs automatisch aus der Datenbank entfernen",
"UseDeleteReports": "Lösche regelmäßig alte Berichte aus der Datenbank"
diff --git a/plugins/PrivacyManager/lang/id.json b/plugins/PrivacyManager/lang/id.json
index 8bef532eb2..926875994c 100644
--- a/plugins/PrivacyManager/lang/id.json
+++ b/plugins/PrivacyManager/lang/id.json
@@ -11,6 +11,7 @@
"DeleteDataDescription": "Anda dapat mengatur Piwik agar menghapus catatan pengunjung dan\/atau mengatur laporan agar basisdata Anda tetap berukuran kecil.",
"DeleteDataDescription2": "Bila diinginkan, laporan yang belum diproses tidak akan dihapus, hanya kunjungan, tampilan halaman, dan catatan konversi yang dihapus. Atau, laporan yang belum diproses dapat dihapus dan data tidak dihapus.",
"DeleteDataInterval": "Hapus data lama setiap",
+ "DeleteOldArchivedReports": "Hapus arsip laporan lama",
"DeleteLogDescription2": "Ketika Anda mengaktifkan catatan penghapusan otomatis, Anda harus memastikan bahwa semua laporan harian sebelumnya telah diproses, sehingga tidak ada data yang hilang.",
"DeleteLogInfo": "Catatan tabel berikut akan dihapus: %s",
"DeleteLogsConfirm": "Anda berkeinginan mengaktifkan penghapusan data catatan. Bila data lama dihapus, dan laporan belum dibuat, Anda tak dapat melihat riwayat data analisis lama. Apakah Anda yakin melakukan ini?",
diff --git a/plugins/PrivacyManager/lang/nb.json b/plugins/PrivacyManager/lang/nb.json
index ea08bda3bc..e6bc3f6aae 100644
--- a/plugins/PrivacyManager/lang/nb.json
+++ b/plugins/PrivacyManager/lang/nb.json
@@ -20,6 +20,7 @@
"LastDelete": "Siste sletting var på",
"MenuPrivacySettings": "Personvern",
"PurgeNow": "Rydd database nå",
+ "RecommendedForPrivacy": "Anbefalt for personvern",
"ReportsDataSavedEstimate": "Databasestørrelse",
"TeaserHeadline": "Personverninnstillinger"
}
diff --git a/plugins/PrivacyManager/lang/nl.json b/plugins/PrivacyManager/lang/nl.json
index 3bde4b2477..f470315e24 100644
--- a/plugins/PrivacyManager/lang/nl.json
+++ b/plugins/PrivacyManager/lang/nl.json
@@ -2,7 +2,7 @@
"PrivacyManager": {
"AnonymizeIpDescription": "Selecteer \"Ja\" als u wilt dat Piwik niet volledige IP-adressen volgt.",
"AnonymizeIpInlineHelp": "Anonimiseer de laatste byte(s) van IP-adressen van bezoekers om te voldoen aan uw lokale privacywetten\/-richtlijnen.",
- "AnonymizeIpExtendedHelp": "Als gebruikers uw website bezoeken zal Piwik niet het volledige IP adres (zoals %1$s) gebruiken maar ditt eerst anonimiseren (tot %2$s). IP adres anonimisatie is in sommige landen zoals Duitsland, een van de eisen gesteld in privacy wetten.",
+ "AnonymizeIpExtendedHelp": "Als gebruikers uw website bezoeken zal Piwik niet het volledige IP-adres (zoals %1$s) gebruiken maar dit eerst anonimiseren (tot %2$s). IP-adres anonimisatie is in sommige landen zoals Duitsland, een van de eisen gesteld in privacy wetten.",
"AnonymizeIpMaskLengtDescription": "Selecteer hoeveel bytes van IP's van de bezoekers moet worden gemaskeerd.",
"AnonymizeIpMaskLength": "%1$s byte(s) - bijv. %2$s",
"CannotLockSoDeleteLogActions": "De log_action-tabel zal niet worden geleegd: ken het LOCK TABLES-privilege aan de '%s'-MySQL-gebruiker toe.",
diff --git a/plugins/PrivacyManager/lang/pl.json b/plugins/PrivacyManager/lang/pl.json
index 153759e824..a69a5d75c3 100644
--- a/plugins/PrivacyManager/lang/pl.json
+++ b/plugins/PrivacyManager/lang/pl.json
@@ -5,34 +5,63 @@
"AnonymizeIpExtendedHelp": "Kiedy użytkownik odwiedzi twoją stronę. Piwik nie użyje całego adresu IP danej osoby (np %1$s), a zamiast tego wykona anonimizację adresu (do %2$s). Anonimizacja adresu IP jest wymogiem prawnym w niektórych krajach - na przykład w Niemczech.",
"AnonymizeIpMaskLengtDescription": "Wybierz ile bajtów z odwiedzających' adresów IP powinny być zamaskowane.",
"AnonymizeIpMaskLength": "%1$s bajt(ów) - np. %2$s",
+ "CannotLockSoDeleteLogActions": "Tabela log_action nie zostanie wymazana: proszę dodaj uprawnienie LOCK TABLES użytkownikowi '%s' w MySQL'u.",
"ClickHereSettings": "Kliknij tutaj, aby uzyskać dostęp do %s ustawień.",
"CurrentDBSize": "Obecny rozmiar bazy danych",
- "DeleteDataInterval": "Usuń stare dane co",
+ "DBPurged": "Baza danych wyczyszczona.",
+ "DeleteBothConfirm": "Masz zamiar aktywować jednoczesne usuwanie danych z logów i raportów. To na zawsze pozbawi Cię możliwości przeglądania archiwalnych danych analitycznych. Czy na pewno chcesz to zrobić?",
+ "DeleteDataDescription": "Możesz skonfigurować Piwik'a, aby regularnie usuwał archiwalne logi odwiedzin i \/ lub przetworzone raporty w celu utrzymania małej objętości bazy danych.",
+ "DeleteDataDescription2": "W razie potrzeby przetworzone raporty nie będą usuwane. Usuwane będą tylko odwiedziny, wyświetlenia strony i log konwersji. Możesz też usuwać przetworzone raporty i zachować dane zawarte w logach.",
+ "DeleteDataInterval": "Usuń archiwalne dane co",
+ "DeleteOldVisitorLogs": "Usuń archiwalne logi odwiedzin",
+ "DeleteOldArchivedReports": "Usuń stare zarchiwizowane raporty",
"DeleteLogDescription2": "Po włączeniu automatycznego usuwania logów należy się upewnić, że wszystkie poprzednie raporty dzienne zostały przetworzone, tak że żadne dane nie zostaną utracone.",
"DeleteLogInfo": "Logi z poniższych tabel zostaną usunięte: %s",
+ "DeleteLogsConfirm": "Zamierzasz aktywować usuwanie danych z logów. W przypadku, gdy archiwalne logi zostaną usunięte, a raporty nie zostały jeszcze wygenerowane, utracisz wgląd w historyczne dane. Czy na pewno kontynuować?",
"DeleteLogsOlderThan": "Usuń logi starsze niż",
"DeleteMaxRows": "Maksymalna liczba wierszy, aby usunąć w jednym przebiegu:",
"DeleteMaxRowsNoLimit": "bez limitu",
+ "DeleteReportsConfirm": "Zamierzasz aktywować usuwanie raportów. Po usunięciu archiwalnych raportów, konieczne będzie ponowne przetworzenie logów, w celu uzyskania ponownego wglądu w raporty. Kontynuować?",
+ "DeleteReportsDetailedInfo": "Dane z archiwalnych numerycznych tabel bazy danych (%1$s) oraz tabel blob (%2$s) zostaną usunięte.",
"DeleteReportsInfo": "Jeśli opcja jest włączona, stare raporty zostaną usunięte. %1$s Zalecane włączyć tylko wtedy, gdy baza danych jest ma ograniczoną przestrzeń. %2$s",
+ "DeleteReportsInfo2": "Jeśli nie została włączona opcja \"%s\", archiwalne raporty zostaną automatycznie odtworzone na żądanie.",
"DeleteReportsInfo3": "Jeśli włączysz \"%s\", dane zostaną trwale utracone.",
"DeleteReportsOlderThan": "Usuń raporty starsze niż",
+ "DeleteSchedulingSettings": "Zaplanuj usuwanie starych danych",
+ "DeleteDataSettings": "Usuń stare logi odwiedzin i raporty",
+ "DoNotTrack_Description": "\"Nie Śledź Mnie\" jest technologią i propozycją polityki, która umożliwia użytkownikom wypisanie się ze śledzenia na odwiedzanych stronach, włączając w to serwisy analityczne, sieci reklamowe i platformy społecznościowe.",
"DoNotTrack_Disable": "Wyłącz wsparcie Do Not Track",
"DoNotTrack_Disabled": "Piwik obecnie śledzi wszystkich gości, nawet wtedy, gdy wybrali oni \"Nie chcę być śledzony\" w swoich przeglądarkach internetowych.",
"DoNotTrack_DisabledMoreInfo": "Dla uszanowania prywatności odwiedzających zalecamy włączenie wsparcia DoNotTrack.",
"DoNotTrack_Enable": "Włącz wspracie Do Not Track",
"DoNotTrack_Enabled": "Obecnie szanujesz prywatności swojch użytkowników, Brawo!",
"DoNotTrack_EnabledMoreInfo": "Jeżeli użytkownik przeglądarki ustawi sobie ,,I do not want to be tracked \/ Nie chcę być śledzony'' (DoNotTrack jest aktywny) wtedy Piwik nie będzie analizował takich odwiedzin.",
- "LastDelete": "Ostatnio był usunięte",
+ "DoNotTrack_SupportDNTPreference": "Wsparcie dla ustawienia \"Do Not Track \/ Nie Śledź\"",
+ "EstimatedDBSizeAfterPurge": "Szacowana wielkość bazy danych po oczyszczaniu",
+ "EstimatedSpaceSaved": "Szacowana oszczędność miejsca",
+ "GeolocationAnonymizeIpNote": "NOTKA: Geolokalizacja zwróci zbliżone wyniki przy anonimizacji 1 bajtu. 2 bajty lub więcej znacząco obniżą dokładność.",
+ "GetPurgeEstimate": "Oszacuj wzrost wolnego miejsca",
+ "KeepBasicMetrics": "Zachowaj podstawowe wskaźniki ()wizyty, odsłony stron, wskaźnik porzuceń, konwersje celów, konwersje e-commerce, itd.)",
+ "KeepDataFor": "Zachowaj wszystkie dane przez",
+ "KeepReportSegments": "Zachowaj raporty grup dla zachowanych powyżej danych",
+ "LastDelete": "Ostatnio usunięte",
"LeastDaysInput": "Proszę podać liczbę dni większą niż %s.",
"LeastMonthsInput": "Proszę określić liczbę miesięcy większą niż %s.",
"MenuPrivacySettings": "Prywatność",
- "NextDelete": "Następne skreślenie zaplanowano w",
+ "NextDelete": "Następne oczyszczanie zaplanowano za",
+ "PluginDescription": "Podnieś Prywatność Twoich użytkowników i spraw aby zdefiniowana w Piwik'u prywatność była zgodna z obowiązującym prawem.",
"PurgeNow": "Oczyść bazę danych teraz",
+ "PurgeNowConfirm": "Zamierzasz ostatecznie skasować dane z Twojej bazy danych. Czy na pewno chcesz kontynuować?",
"PurgingData": "Czyszczenie danych...",
+ "RecommendedForPrivacy": "Zalecenia Prywatności",
"ReportsDataSavedEstimate": "Rozmiar bazy danych",
+ "SaveSettingsBeforePurge": "Zmodyfikowałeś ustawienia kasowania danych. Proszę zapisz je przed przystąpieniem do kasowania.",
"SeeAlsoOurOfficialGuidePrivacy": "Zobacz również nasz oficjalny przewodnik: : %1$sWeb Analytics Privacy%2$s",
+ "Teaser": "Ta strona umożliwia dostosowanie Piwik'a pod kątem przestrzegania zapisów prawa dotyczących prywatności poprzez: %1$sanonimizację adresów IP odwiedzających%2$s, %3$sautomatyczne usuwanie archiwalnych logów odwiedzin z bazy danych%4$s oraz %5$sdostarczanie mechanizmu wypisania się ze śledzenia w Twoim serwisie%6$s.",
"TeaserHeadline": "Ustawienia prywatności",
- "UseAnonymizeIp": "Anonimizacja odwiedzających' adres IP",
+ "UseAnonymizedIpForVisitEnrichment": "Korzystaj z Anonimizowanych adresów IP przy analizowaniu wizyt.",
+ "UseAnonymizedIpForVisitEnrichmentNote": "Wtyczki takie jak Geolokalizacja (bazując na IP i dostawcy) wzbogacają metadane odwiedzających. Domyślnie te wtyczki wykorzystują anonimizowane adresy IP. Wybierając 'Nie', wybierasz wykorzystanie pełnego, nie anonimizowanego adresu IP, co zwiększa dokładność danych kosztem prywatności.",
+ "UseAnonymizeIp": "Anonimizacja adresów IP odwiedzających",
"UseDeleteLog": "Regularnie usuwanie starych logów odwiedzających z bazy danych",
"UseDeleteReports": "Regularnie usuwaj stare raporty z bazy danych"
}
diff --git a/plugins/PrivacyManager/lang/sv.json b/plugins/PrivacyManager/lang/sv.json
index 0f8e9c4ebe..09c558c365 100644
--- a/plugins/PrivacyManager/lang/sv.json
+++ b/plugins/PrivacyManager/lang/sv.json
@@ -5,6 +5,7 @@
"AnonymizeIpExtendedHelp": "När användare besöker din webbplats kommer inte Piwik använda deras fullständiga IP-adress (exempelvis %1$s). Istället kommer Piwik anonymisera den först (till %2$s). Anonymisering av IP-adresser är ett krav enligt personuppgiftslagen i några länder såsom Tyskland.",
"AnonymizeIpMaskLengtDescription": "Välj hur många bytes av besökares IP-adresser som ska döljas.",
"AnonymizeIpMaskLength": "%1$s byte(s) - t.ex. %2$s",
+ "CannotLockSoDeleteLogActions": "Tabellen log_action kommer inte rensas: ange LOCK TABLES-behörighet för MySQL-användaren '%s'.",
"ClickHereSettings": "Klicka här för att komma åt inställningar för %s.",
"CurrentDBSize": "Aktuell databasstorlek",
"DBPurged": "DB rensad.",
diff --git a/plugins/ProfessionalServices/ProfessionalServices.php b/plugins/ProfessionalServices/ProfessionalServices.php
index d11bc22b38..5e6ef3f6f0 100644
--- a/plugins/ProfessionalServices/ProfessionalServices.php
+++ b/plugins/ProfessionalServices/ProfessionalServices.php
@@ -26,6 +26,7 @@ class ProfessionalServices extends \Piwik\Plugin
'Template.afterGoalCannotAddNewGoal' => array('function' => 'getGoalOverviewPromo', 'after' => true),
'Template.endGoalEditTable' => array('function' => 'getGoalFunnelOverviewPromo', 'after' => true),
'Template.afterEventsReport' => 'getEventsPromo',
+ 'Template.afterCampaignsReport' => 'getCampaignsPromo',
'Template.afterReferrersKeywordsReport' => 'getSearchKeywordsPerformancePromo',
'Template.afterOverlaySidebar' => 'getHeatmapPromo',
'Template.afterVisitorProfileOverview' => 'getSessionRecordingPromo',
@@ -124,6 +125,17 @@ class ProfessionalServices extends \Piwik\Plugin
$out .= $view->render();
}
+ public function getCampaignsPromo(&$out)
+ {
+ if ($this->isRequestForDashboardWidget()) {
+ return;
+ }
+
+ $view = new View('@ProfessionalServices/promoBelowCampaigns');
+ $view->displayMarketingCampaignsReportingAd = !$this->isPluginActivated('MarketingCampaignsReporting');
+ $out .= $view->render();
+ }
+
private function shouldShowPromoForPlugin($pluginName)
{
return !$this->isPluginActivated($pluginName) && !$this->isRequestForDashboardWidget();
diff --git a/plugins/ProfessionalServices/templates/promoBelowCampaigns.twig b/plugins/ProfessionalServices/templates/promoBelowCampaigns.twig
new file mode 100644
index 0000000000..f929642bd5
--- /dev/null
+++ b/plugins/ProfessionalServices/templates/promoBelowCampaigns.twig
@@ -0,0 +1,7 @@
+<p style="margin-top:3em" class=" alert-info alert">Did you know?
+ <br/> <a target="_blank" rel="noreferrer" href="https://piwik.org/docs/tracking-campaigns/">Campaign tracking</a> lets you measure the effectiveness of your marketing campaigns such as emails marketing, paid search, banner ads, affiliates links, etc.
+ Use the <a target="_blank" rel="noreferrer" href="https://piwik.org/docs/tracking-campaigns/">URL Builder tool</a> to create your links with new URL campaign parameters.
+ {% if displayMarketingCampaignsReportingAd %}
+ <br/> Install our <a target="_blank" rel="noreferrer" href="https://plugins.piwik.org/MarketingCampaignsReporting">Marketing Campaigns Reporting plugin</a> to get even more campaigns reports and new segments for up to five marketing channels (campaign, source, medium, keyword, content).
+ {% endif %}
+</p> \ No newline at end of file
diff --git a/plugins/ProfessionalServices/templates/promoSessionRecordings.twig b/plugins/ProfessionalServices/templates/promoSessionRecordings.twig
index b43bb1af32..17e350f0fd 100644
--- a/plugins/ProfessionalServices/templates/promoSessionRecordings.twig
+++ b/plugins/ProfessionalServices/templates/promoSessionRecordings.twig
@@ -1,3 +1,3 @@
-<p style="margin-top:8px" class="alert-info alert">Did you know?
+<p class="alert-info alert">Did you know?
With <a target="_blank" rel="noreferrer" href="https://piwik.org/recommends/heatmap-session-recording-learn-more/">Heatmap & Session Recording</a> you can record all clicks, mouse movements, scrolls and form interactions of your visitors and replay them in a video to truly understand your visitors.
</p> \ No newline at end of file
diff --git a/plugins/Provider/Provider.php b/plugins/Provider/Provider.php
index 4aed41100c..c275e09fc2 100644
--- a/plugins/Provider/Provider.php
+++ b/plugins/Provider/Provider.php
@@ -17,16 +17,6 @@ use Piwik\Piwik;
class Provider extends \Piwik\Plugin
{
- /**
- * @see Piwik\Plugin::registerEvents
- */
- public function registerEvents()
- {
- return array(
- 'Live.getAllVisitorDetails' => 'extendVisitorDetails'
- );
- }
-
public function install()
{
// add column hostname / hostname ext in the visit table
@@ -42,15 +32,6 @@ class Provider extends \Piwik\Plugin
}
}
- public function extendVisitorDetails(&$visitor, $details)
- {
- $instance = new Visitor($details);
-
- $visitor['provider'] = $instance->getProvider();
- $visitor['providerName'] = $instance->getProviderName();
- $visitor['providerUrl'] = $instance->getProviderUrl();
- }
-
public function uninstall()
{
// add column hostname / hostname ext in the visit table
diff --git a/plugins/Provider/Visitor.php b/plugins/Provider/Visitor.php
deleted file mode 100644
index c11f1e3a9b..0000000000
--- a/plugins/Provider/Visitor.php
+++ /dev/null
@@ -1,41 +0,0 @@
-<?php
-/**
- * Piwik - free/libre analytics platform
- *
- * @link http://piwik.org
- * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- *
- */
-namespace Piwik\Plugins\Provider;
-
-use Piwik\Piwik;
-
-require_once PIWIK_INCLUDE_PATH . '/plugins/Provider/functions.php';
-
-class Visitor
-{
- private $details = array();
-
- public function __construct($details)
- {
- $this->details = $details;
- }
-
- public function getProvider()
- {
- if (isset($this->details['location_provider'])) {
- return $this->details['location_provider'];
- }
- return Piwik::translate('General_Unknown');
- }
-
- public function getProviderName()
- {
- return getPrettyProviderName($this->getProvider());
- }
-
- public function getProviderUrl()
- {
- return getHostnameUrl(@$this->details['location_provider']);
- }
-} \ No newline at end of file
diff --git a/plugins/Provider/VisitorDetails.php b/plugins/Provider/VisitorDetails.php
new file mode 100644
index 0000000000..d0f8f146b7
--- /dev/null
+++ b/plugins/Provider/VisitorDetails.php
@@ -0,0 +1,57 @@
+<?php
+/**
+ * Piwik - free/libre analytics platform
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+namespace Piwik\Plugins\Provider;
+
+use Piwik\Piwik;
+use Piwik\Plugins\Live\VisitorDetailsAbstract;
+use Piwik\View;
+
+/**
+ * @see plugins/Provider/functions.php
+ */
+require_once PIWIK_INCLUDE_PATH . '/plugins/Provider/functions.php';
+
+class VisitorDetails extends VisitorDetailsAbstract
+{
+ public function extendVisitorDetails(&$visitor)
+ {
+ $visitor['provider'] = $this->details['location_provider'];
+ $visitor['providerName'] = $this->getProviderName();
+ $visitor['providerUrl'] = $this->getProviderUrl();
+ }
+
+ public function renderVisitorDetails($visitorDetails)
+ {
+ if (empty($visitorDetails['provider'])) {
+ return [];
+ }
+
+ $view = new View('@Provider/_visitorDetails.twig');
+ $view->visitInfo = $visitorDetails;
+ return [[ 20, $view->render() ]];
+ }
+
+ protected function getProvider()
+ {
+ if (isset($this->details['location_provider'])) {
+ return $this->details['location_provider'];
+ }
+ return Piwik::translate('General_Unknown');
+ }
+
+ protected function getProviderName()
+ {
+ return getPrettyProviderName($this->getProvider());
+ }
+
+ protected function getProviderUrl()
+ {
+ return getHostnameUrl(@$this->details['location_provider']);
+ }
+} \ No newline at end of file
diff --git a/plugins/Provider/lang/pl.json b/plugins/Provider/lang/pl.json
index b4ce6ba650..3e7e0d3caa 100644
--- a/plugins/Provider/lang/pl.json
+++ b/plugins/Provider/lang/pl.json
@@ -1,6 +1,9 @@
{
"Provider": {
"ColumnProvider": "Dostawca",
- "WidgetProviders": "Dostawcy"
+ "PluginDescription": "Raport przedstawiający dostawców internetu - ISP - odwiedzających.",
+ "ProviderReportDocumentation": "Ten raport przedstawia Dostawców Internetu, ISP, z których usług korzystają Twoi odwiedzający. Kliknij na nazwie dostawcy po więcej informacji. %s W sytuacji, gdy Piwik nie potrafi określić dostawcy, wyświetla adres IP.",
+ "WidgetProviders": "Dostawcy",
+ "ProviderReportFooter": "Nieznany dostawca oznacza, że nie udało się odczytać danych przypisanych do adresu IP."
}
} \ No newline at end of file
diff --git a/plugins/Provider/lang/ru.json b/plugins/Provider/lang/ru.json
index b4d19d7016..b2e71754cf 100644
--- a/plugins/Provider/lang/ru.json
+++ b/plugins/Provider/lang/ru.json
@@ -3,6 +3,7 @@
"ColumnProvider": "Провайдер",
"PluginDescription": "Сообщает о поставщике интернет услуг (ISP) у посетителей.",
"ProviderReportDocumentation": "Этот отчет показывает, какие интернет-провайдеры у посетителей вашего сайта. Вы можете кликнуть на имя провайдера, чтобы посмотреть детали. %s Если Piwik не может определить провайдера, отображается просто IP.",
- "WidgetProviders": "Провайдеры"
+ "WidgetProviders": "Провайдеры",
+ "ProviderReportFooter": "Неизвестный провайдер означает, что IP-адрес не может быть найден."
}
} \ No newline at end of file
diff --git a/plugins/Provider/templates/_visitorDetails.twig b/plugins/Provider/templates/_visitorDetails.twig
new file mode 100644
index 0000000000..0cfdbe6b4b
--- /dev/null
+++ b/plugins/Provider/templates/_visitorDetails.twig
@@ -0,0 +1,9 @@
+<div class="visitorProvider">
+ <br />
+ {{ 'Provider_ColumnProvider'|translate }}:
+ {% if visitInfo.getColumn('providerUrl') %}
+ <a href="{{ visitInfo.getColumn('providerUrl') }}" rel="noreferrer" target="_blank" class="visitorLogTooltip" title="{{ visitInfo.getColumn('providerName') }} {{ visitInfo.getColumn('providerUrl') }}" style="text-decoration:underline;">
+ {%- endif %}
+ {{ visitInfo.getColumn('providerName') }}
+ {%- if visitInfo.getColumn('providerUrl') %}</a>{% endif %}
+</div> \ No newline at end of file
diff --git a/plugins/QueuedTracking b/plugins/QueuedTracking
-Subproject cd13777cb6261032731cd64f32a3821ad121761
+Subproject 0443f09e2514d46e8e8e3eb8b78c2471d0ff62a
diff --git a/plugins/Referrers/Referrers.php b/plugins/Referrers/Referrers.php
index 9d4d03a4a1..4e18abc933 100644
--- a/plugins/Referrers/Referrers.php
+++ b/plugins/Referrers/Referrers.php
@@ -30,7 +30,6 @@ class Referrers extends \Piwik\Plugin
{
return array(
'Insights.addReportToOverview' => 'addReportToInsightsOverview',
- 'Live.getAllVisitorDetails' => 'extendVisitorDetails',
'Request.getRenamedModuleAndAction' => 'renameDeprecatedModuleAndAction',
'Tracker.setTrackerCacheGeneral' => 'setTrackerCacheGeneral'
);
@@ -51,20 +50,6 @@ class Referrers extends \Piwik\Plugin
}
}
- public function extendVisitorDetails(&$visitor, $details)
- {
- $instance = new Visitor($details);
-
- $visitor['referrerType'] = $instance->getReferrerType();
- $visitor['referrerTypeName'] = $instance->getReferrerTypeName();
- $visitor['referrerName'] = $instance->getReferrerName();
- $visitor['referrerKeyword'] = $instance->getKeyword();
- $visitor['referrerKeywordPosition'] = $instance->getKeywordPosition();
- $visitor['referrerUrl'] = $instance->getReferrerUrl();
- $visitor['referrerSearchEngineUrl'] = $instance->getSearchEngineUrl();
- $visitor['referrerSearchEngineIcon'] = $instance->getSearchEngineIcon();
- }
-
public function addReportToInsightsOverview(&$reports)
{
$reports['Referrers_getWebsites'] = array();
diff --git a/plugins/Referrers/Reports/GetCampaigns.php b/plugins/Referrers/Reports/GetCampaigns.php
index 1d375423d8..a1b5f6fd94 100644
--- a/plugins/Referrers/Reports/GetCampaigns.php
+++ b/plugins/Referrers/Reports/GetCampaigns.php
@@ -8,6 +8,7 @@
*/
namespace Piwik\Plugins\Referrers\Reports;
+use Piwik\EventDispatcher;
use Piwik\Piwik;
use Piwik\Plugin\ViewDataTable;
use Piwik\Plugins\Referrers\Columns\Campaign;
@@ -34,6 +35,20 @@ class GetCampaigns extends Base
$view->config->addTranslation('label', $this->dimension->getName());
$view->requestConfig->filter_limit = 25;
+
+ $this->configureFooterMessage($view);
}
+
+ protected function configureFooterMessage(ViewDataTable $view)
+ {
+ if ($this->isSubtableReport) {
+ // no footer message for subtables
+ return;
+ }
+
+ $out = '';
+ EventDispatcher::getInstance()->postEvent('Template.afterCampaignsReport', array(&$out));
+ $view->config->show_footer_message = $out;
+ }
}
diff --git a/plugins/Referrers/Tasks.php b/plugins/Referrers/Tasks.php
index da9cad1321..050692f331 100644
--- a/plugins/Referrers/Tasks.php
+++ b/plugins/Referrers/Tasks.php
@@ -11,13 +11,16 @@ namespace Piwik\Plugins\Referrers;
use Piwik\Http;
use Piwik\Option;
+use Piwik\SettingsPiwik;
class Tasks extends \Piwik\Plugin\Tasks
{
public function schedule()
{
- $this->weekly('updateSearchEngines');
- $this->weekly('updateSocials');
+ if(SettingsPiwik::isInternetEnabled() === true){
+ $this->weekly('updateSearchEngines');
+ $this->weekly('updateSocials');
+ }
}
/**
diff --git a/plugins/Referrers/Visitor.php b/plugins/Referrers/VisitorDetails.php
index b10b9b953d..f0021c9293 100644
--- a/plugins/Referrers/Visitor.php
+++ b/plugins/Referrers/VisitorDetails.php
@@ -2,27 +2,38 @@
/**
* Piwik - free/libre analytics platform
*
- * @link http://piwik.org
+ * @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*
*/
namespace Piwik\Plugins\Referrers;
-use Piwik\Url;
+use Piwik\Plugins\Live\VisitorDetailsAbstract;
use Piwik\UrlHelper;
+use Piwik\View;
-require_once PIWIK_INCLUDE_PATH . '/plugins/Referrers/functions.php';
-
-class Visitor
+class VisitorDetails extends VisitorDetailsAbstract
{
- private $details = array();
+ public function extendVisitorDetails(&$visitor)
+ {
+ $visitor['referrerType'] = $this->getReferrerType();
+ $visitor['referrerTypeName'] = $this->getReferrerTypeName();
+ $visitor['referrerName'] = $this->getReferrerName();
+ $visitor['referrerKeyword'] = $this->getKeyword();
+ $visitor['referrerKeywordPosition'] = $this->getKeywordPosition();
+ $visitor['referrerUrl'] = $this->getReferrerUrl();
+ $visitor['referrerSearchEngineUrl'] = $this->getSearchEngineUrl();
+ $visitor['referrerSearchEngineIcon'] = $this->getSearchEngineIcon();
+ }
- public function __construct($details)
+ public function renderVisitorDetails($visitorDetails)
{
- $this->details = $details;
+ $view = new View('@Referrers/_visitorDetails.twig');
+ $view->visitInfo = $visitorDetails;
+ return [[ 10, $view->render() ]];
}
- public function getReferrerType()
+ protected function getReferrerType()
{
try {
$referrerType = getReferrerTypeFromShortName($this->details['referer_type']);
@@ -33,15 +44,15 @@ class Visitor
return $referrerType;
}
- public function getReferrerTypeName()
+ protected function getReferrerTypeName()
{
return getReferrerTypeLabel($this->details['referer_type']);
}
- public function getKeyword()
+ protected function getKeyword()
{
$keyword = $this->details['referer_keyword'];
-
+
if ($this->getReferrerType() == 'search') {
$keyword = API::getCleanKeyword($keyword);
}
@@ -49,27 +60,8 @@ class Visitor
return urldecode($keyword);
}
- public function getReferrerUrl()
+ protected function getReferrerUrl()
{
- if ($this->getReferrerType() == 'search') {
- if ($this->details['referer_keyword'] == API::LABEL_KEYWORD_NOT_DEFINED) {
-
- return 'http://piwik.org/faq/general/#faq_144';
-
- } // Case URL is google.XX/url.... then we rewrite to the search result page url
- elseif ($this->getReferrerName() == 'Google'
- && strpos($this->details['referer_url'], '/url')
- ) {
- $refUrl = @parse_url($this->details['referer_url']);
- if (isset($refUrl['host'])) {
- $url = SearchEngine::getInstance()->getBackLinkFromUrlAndKeyword('http://google.com', $this->getKeyword());
- $url = str_replace('google.com', $refUrl['host'], $url);
-
- return $url;
- }
- }
- }
-
if (UrlHelper::isLookLikeUrl($this->details['referer_url'])) {
return $this->details['referer_url'];
}
@@ -77,7 +69,7 @@ class Visitor
return null;
}
- public function getKeywordPosition()
+ protected function getKeywordPosition()
{
if ($this->getReferrerType() == 'search'
&& strpos($this->getReferrerName(), 'Google') !== false
@@ -98,12 +90,12 @@ class Visitor
return null;
}
- public function getReferrerName()
+ protected function getReferrerName()
{
return urldecode($this->details['referer_name']);
}
- public function getSearchEngineUrl()
+ protected function getSearchEngineUrl()
{
if ($this->getReferrerType() == 'search'
&& !empty($this->details['referer_name'])
@@ -115,7 +107,7 @@ class Visitor
return null;
}
- public function getSearchEngineIcon()
+ protected function getSearchEngineIcon()
{
$searchEngineUrl = $this->getSearchEngineUrl();
@@ -126,5 +118,4 @@ class Visitor
return null;
}
-
} \ No newline at end of file
diff --git a/plugins/Referrers/lang/de.json b/plugins/Referrers/lang/de.json
index 3c93f4a373..75703bfd1d 100644
--- a/plugins/Referrers/lang/de.json
+++ b/plugins/Referrers/lang/de.json
@@ -1,6 +1,6 @@
{
"Referrers": {
- "AllReferrersReportDocumentation": "Dieser Bericht zeigt Ihnen all Ihre Verweise in einem einzigen Bericht. Es werden alle Websites, Suchbegriffe und Kampagnen gezeigt, die von Ihren Besuchern benutzt wurden um ihre Website zu finden.",
+ "AllReferrersReportDocumentation": "Dieser Bericht zeigt Ihnen all Ihre Verweise in einem einzigen Bericht. Es werden alle Websites, Suchbegriffe und Kampagnen gezeigt, die von Ihren Besuchern benutzt wurden, um ihre Website zu finden.",
"Campaigns": "Kampagnen",
"CampaignsDocumentation": "Besucher, die aufgrund einer Kampagne auf Ihre Website kamen. Weitere Details finden Sie %1$sim Bericht%2$s.",
"CampaignsReportDocumentation": "Dieser Bericht enthält Informationen darüber, welche Kampagnen Besucher auf Ihre Website gebracht haben. %1$s Für mehr Informationen zum Tracken von Kampagnen, lesen Sie die %2$sKampagnen-Dokumentation auf piwik.org%3$s",
diff --git a/plugins/Referrers/lang/pl.json b/plugins/Referrers/lang/pl.json
index e0880c508b..cef31c5dd5 100644
--- a/plugins/Referrers/lang/pl.json
+++ b/plugins/Referrers/lang/pl.json
@@ -1,29 +1,55 @@
{
"Referrers": {
- "Campaigns": "Kampanie reklamowe",
+ "AllReferrersReportDocumentation": "Raport prezentuje wszystkie Twoje Odnośniki w pojedynczym, zunifikowanym raporcie, zawierającym Wszystkie serwisy, frazy Wyszukiwania i Kampanie wykorzystane przez odwiedzających aby do Ciebie dotrzeć.",
+ "Campaigns": "Kampanie",
+ "CampaignsDocumentation": "Odwiedzający, którzy dotarli na Twoją stronę dzięki kampanii. %1$sZobacz%2$sszczegółowy raport.",
+ "CampaignsReportDocumentation": "Raport pokazujący, które kampanie pozwoliły odwiedzającym trafić do Twojego serwisu. %1$s Więcej o śledzeniu kampanii przeczytasz w %2$sdokumentacji kampanii na piwik.org%3$s",
"ColumnCampaign": "Kampania",
"ColumnSearchEngine": "Wyszukiwarka",
+ "ColumnSocial": "Sieć społecznościowa",
"ColumnWebsite": "Strona WWW",
"ColumnWebsitePage": "Pojedyncza strona",
- "DirectEntry": "wejścia bezpośrednie",
+ "DirectEntry": "Wejścia bezpośrednie",
+ "DirectEntryDocumentation": "Odwiedzający wprowadził adres strony w przeglądarce i zaczął przeglądać stronę - adres wprowadzono bezpośrednio.",
"Distinct": "Wyróżnione odsyłacze według ich typu",
"DistinctCampaigns": "wyróżnione kampanie",
"DistinctKeywords": "wyróżnione słowa kluczowe",
- "DistinctSearchEngines": "Wyróżnione wyszukiwarki",
+ "DistinctSearchEngines": "wyróżnione wyszukiwarki",
"DistinctWebsites": "wyróżnione serwisy internetowe",
+ "EvolutionDocumentation": "Przegląd odnośników prowadzących do Twojego serwisu.",
+ "EvolutionDocumentationMoreInfo": "Więcej informacji o różnych typach odnośników znajdziesz w tabeli %s na stronie dokumentacji.",
"Keywords": "Słowa kluczowe",
- "ReferrerName": "Nazwa odsyłacza",
- "Referrers": "Odsyłacze",
+ "KeywordsReportDocumentation": "Raport pokazuje słowa kluczowe wyszukiwane przez użytkowników zanim trafili oni do Twojego serwisu. %s Kliknij na rząd w tabeli, aby zobaczyć podział na wyszukiwarki, w których znaleziono dane słowa kluczowe.",
+ "PluginDescription": "Zawiera następujące informacje o Odnośnikach: Wyszukiwarki, Słowa kluczowe, Serwisy, Kampanie, Media społecznościowe, Wejścia bezpośrednie.",
+ "Referrer": "Odnośnik",
+ "ReferrerName": "Nazwa odnośnika",
+ "Referrers": "Odnośniki",
+ "ReferrersOverview": "Przegląd odnośników",
+ "ReferrerTypes": "Typy odnośników",
"SearchEngines": "Wyszukiwarki",
- "SubmenuSearchEngines": "Wyszukiwarki & słowa kluczowe",
- "SubmenuWebsites": "Serwisy internetowe",
+ "SearchEnginesDocumentation": "Odwiedzający trafił na Twoją stronę dzięki odnośnikowi w wyszukiwarce. %1$sZobacz%2$s szczegółowy raport.",
+ "SearchEnginesReportDocumentation": "Raport pokazuje odnośniki, których wyszukiwarek sprowadziły Twoich odwiedzających. %s Kliknij na rząd w tabeli, aby zobaczyć, czego odwiedzający szukali w danej wyszukiwarce.",
+ "SocialFooterMessage": "Ten raport jest podzbiorem raportu z lewej strony. Odfiltrowane zostały pozostałe serwisy, aby ułatwić porównanie odnośników przychodzących z sieci społecznościowych.",
+ "Socials": "Sieci społecznościowe",
+ "SocialsReportDocumentation": "Ten raport pokazuje, które sieci społecznościowe prowadzą do Twojego serwisu. <br \/>Klikając na rząd w tabeli, możesz sprawdzić, z której strony sieci społecznościowej odwiedzający trafili do Ciebie.",
+ "SubmenuSearchEngines": "Wyszukiwarki i słowa kluczowe",
+ "SubmenuWebsites": "Strony i sieci społecznościowe",
"Type": "Typ odsyłacza",
"TypeCampaigns": "%s z kampanii",
"TypeDirectEntries": "%s bezpośrednich wejść",
+ "TypeReportDocumentation": "Poniższa tabela zawieraj informację o podziale odnośników pod kątem typów.",
"TypeSearchEngines": "%s z wyszukiwarek",
"TypeWebsites": "%s ze stron",
"UsingNDistinctUrls": "(używając %s wyróżnionych adresów url)",
+ "ViewAllReferrers": "Zobacz wszystkie Odnośniki",
+ "ViewReferrersBy": "Odnośniki według %s",
"Websites": "Serwisy internetowe",
- "WidgetExternalWebsites": "Lista zewnętrznych serwisów internetowych"
+ "WebsitesDocumentation": "Odwiedzający skorzystał z linku w innym serwisie, który kierował do Ciebie. Aby uzyskać więcej informacji %1$szobacz raport%2$s.",
+ "WebsitesReportDocumentation": "Tabela prezentuje serwisy, z których użytkownicy trafili do Ciebie. %s Kliknij na rząd tabeli, aby poznać adresy stron, na których znajdują się odnośniki do Twojego serwisu.",
+ "WidgetExternalWebsites": "Serwisy polecające",
+ "WidgetGetAll": "Wszystkie odnośniki",
+ "WidgetSocials": "Lista sieci społecznościowych",
+ "WidgetTopKeywordsForPages": "Najpopularniejsze słowa kluczowe dla tej strony",
+ "XPercentOfVisits": "%s wizyt"
}
} \ No newline at end of file
diff --git a/plugins/Referrers/lang/sv.json b/plugins/Referrers/lang/sv.json
index eefbc9e7a1..a0ca71b8de 100644
--- a/plugins/Referrers/lang/sv.json
+++ b/plugins/Referrers/lang/sv.json
@@ -10,6 +10,7 @@
"ColumnWebsite": "Webbplats",
"ColumnWebsitePage": "Webbplatsens sida",
"DirectEntry": "Direkttrafik",
+ "DirectEntryDocumentation": "En besökare har angett URL:en i sin webbläsare och besökt din webbplats - det är ett direktbesök.",
"Distinct": "Distinkta hänvisningar av den refererande typen",
"DistinctCampaigns": "distinkta kampanjer",
"DistinctKeywords": "distinkta nyckelord",
diff --git a/plugins/Referrers/lang/zh-cn.json b/plugins/Referrers/lang/zh-cn.json
index 97f3ee8020..f3c47b216c 100644
--- a/plugins/Referrers/lang/zh-cn.json
+++ b/plugins/Referrers/lang/zh-cn.json
@@ -16,7 +16,7 @@
"DistinctKeywords": "不同的关键词",
"DistinctSearchEngines": "不同的搜索引擎",
"DistinctWebsites": "不同的网站",
- "EvolutionDocumentation": "这是网站访客的来源总表",
+ "EvolutionDocumentation": "这是网站访客的来源概览。",
"EvolutionDocumentationMoreInfo": "不同的来源分类详情请看 %s 表的文档.",
"Keywords": "关键词",
"KeywordsReportDocumentation": "本报表显示访客搜索哪些关键字后来到了您的网站。%s 点击表中的一行,可查看用于搜索该关键字的搜索引擎列表。",
@@ -24,7 +24,7 @@
"Referrer": "来源分析",
"ReferrerName": "来源名称",
"Referrers": "来源分析",
- "ReferrersOverview": "来源总表",
+ "ReferrersOverview": "来源概览",
"ReferrerTypes": "引荐类型",
"SearchEngines": "搜索引擎",
"SearchEnginesDocumentation": "访客来自搜索引擎。%1$s 查看 %2$s 报表了解详情。",
diff --git a/plugins/Referrers/templates/_visitorDetails.twig b/plugins/Referrers/templates/_visitorDetails.twig
new file mode 100644
index 0000000000..e3b03a2aba
--- /dev/null
+++ b/plugins/Referrers/templates/_visitorDetails.twig
@@ -0,0 +1,35 @@
+<div class="visitorReferrer {{ visitInfo.getColumn('referrerType') }}">
+ {% if visitInfo.getColumn('referrerType') == 'website' %}
+ <span>{{ 'Referrers_ColumnWebsite'|translate }}:</span>
+ <a href="{{ visitInfo.getColumn('referrerUrl') }}" rel="noreferrer" target="_blank" class="visitorLogTooltip" title="{{ visitInfo.getColumn('referrerUrl') }}"
+ style="text-decoration:underline;">
+ {{ visitInfo.getColumn('referrerName') }}
+ </a>
+ {% endif %}
+ {% if visitInfo.getColumn('referrerType') == 'campaign' %}
+ <span>{{ 'Referrers_ColumnCampaign'|translate }}: {{ visitInfo.getColumn('referrerName') }}
+ {% if visitInfo.getColumn('referrerKeyword') is not empty %} - {{ visitInfo.getColumn('referrerKeyword') }}{% endif %}</span>
+ {% endif %}
+ {% if visitInfo.getColumn('referrerType') == 'search' %}
+ {%- set keywordNotDefined = 'General_NotDefined'|translate('General_ColumnKeyword'|translate) -%}
+ {%- set showKeyword = visitInfo.getColumn('referrerKeyword') is not empty and visitInfo.getColumn('referrerKeyword') != keywordNotDefined -%}
+ {% if visitInfo.getColumn('referrerSearchEngineIcon') %}
+ <img width="16" src="{{ visitInfo.getColumn('referrerSearchEngineIcon') }}" alt="{{ visitInfo.getColumn('referrerName') }}"/>
+ {% endif %}
+ <span {% if not showKeyword %}title="{{ keywordNotDefined }}" class="visitorLogTooltip"{% endif %}>{{ visitInfo.getColumn('referrerName') }}</span>
+ {%- if showKeyword %}<span>, {{ 'Referrers_Keywords'|translate }}:</span>
+ <a href="{{ visitInfo.getColumn('referrerUrl') }}" rel="noreferrer" target="_blank" style="text-decoration:underline;">
+ "{{ visitInfo.getColumn('referrerKeyword') }}"</a>
+ {% endif %}
+ {% set keyword %}{{ visitInfo.getColumn('referrerKeyword') }}{% endset %}
+ {% set searchName %}{{ visitInfo.getColumn('referrerName') }}{% endset %}
+ {% set position %}#{{ visitInfo.getColumn('referrerKeywordPosition') }}{% endset %}
+ {% if visitInfo.getColumn('referrerKeywordPosition') %}
+ <span title='{{ 'Live_KeywordRankedOnSearchResultForThisVisitor'|translate(keyword,position,searchName) }}' class='visitorRank visitorLogTooltip'>
+ <span class='hash'>#</span>
+ {{ visitInfo.getColumn('referrerKeywordPosition') }}
+ </span>
+ {% endif %}
+ {% endif %}
+ {% if visitInfo.getColumn('referrerType') == 'direct' %}{{ 'Referrers_DirectEntry'|translate }}{% endif %}
+</div>
diff --git a/plugins/Resolution/Resolution.php b/plugins/Resolution/Resolution.php
index 5ab7692ccf..da5acd7579 100644
--- a/plugins/Resolution/Resolution.php
+++ b/plugins/Resolution/Resolution.php
@@ -8,28 +8,9 @@
*/
namespace Piwik\Plugins\Resolution;
-use Piwik\Plugins\CoreVisualizations\Visualizations\Graph;
-use Piwik\Plugins\CoreVisualizations\Visualizations\HtmlTable;
-
/**
*
*/
class Resolution extends \Piwik\Plugin
{
- /**
- * @see Piwik\Plugin::registerEvents
- */
- public function registerEvents()
- {
- return array(
- 'Live.getAllVisitorDetails' => 'extendVisitorDetails',
- );
- }
-
- public function extendVisitorDetails(&$visitor, $details)
- {
- $instance = new Visitor($details);
-
- $visitor['resolution'] = $instance->getResolution();
- }
}
diff --git a/plugins/Resolution/Visitor.php b/plugins/Resolution/VisitorDetails.php
index 47fd330868..d6ccedb0a5 100644
--- a/plugins/Resolution/Visitor.php
+++ b/plugins/Resolution/VisitorDetails.php
@@ -2,22 +2,22 @@
/**
* Piwik - free/libre analytics platform
*
- * @link http://piwik.org
+ * @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*
*/
namespace Piwik\Plugins\Resolution;
-class Visitor
-{
- private $details = array();
+use Piwik\Plugins\Live\VisitorDetailsAbstract;
- public function __construct($details)
+class VisitorDetails extends VisitorDetailsAbstract
+{
+ public function extendVisitorDetails(&$visitor)
{
- $this->details = $details;
+ $visitor['resolution'] = $this->getResolution();
}
- function getResolution()
+ protected function getResolution()
{
if (!array_key_exists('config_resolution', $this->details)) {
return null;
diff --git a/plugins/Resolution/lang/pl.json b/plugins/Resolution/lang/pl.json
index 00459e717b..aae3d03ec4 100644
--- a/plugins/Resolution/lang/pl.json
+++ b/plugins/Resolution/lang/pl.json
@@ -3,8 +3,10 @@
"ColumnConfiguration": "Konfiguracja",
"ColumnResolution": "Rozdzielczość",
"Configurations": "Konfiguracje",
- "Resolutions": "Rozdzielczość",
- "WidgetGlobalVisitors": "Ogólna konfiguracja odwiedzających",
+ "PluginDescription": "Raport zawiera rozdzielczości ekranu Twoich odwiedzających.",
+ "Resolutions": "Rozdzielczości",
+ "WidgetGlobalVisitors": "Konfiguracje odwiedzających",
+ "WidgetGlobalVisitorsDocumentation": "Ten raport prezentuje najpopularniejsze konfiguracje Twoich odwiedzających. Konfiguracja to zestawienie systemu operacyjnego, typu przeglądarki i rozdzielczości ekranu.",
"WidgetResolutions": "Rozdzielczość ekranu"
}
} \ No newline at end of file
diff --git a/plugins/SEO/lang/pl.json b/plugins/SEO/lang/pl.json
index e59847c163..c68eec194f 100644
--- a/plugins/SEO/lang/pl.json
+++ b/plugins/SEO/lang/pl.json
@@ -1,7 +1,10 @@
{
"SEO": {
- "AlexaRank": "Alexa Ranking",
+ "PluginDescription": "Ta wtyczka wydobywa i wyświetla wskaźniki SEO: rankingu Alexa, Google Pagerank, liczbę zindeksowanych stron oraz linki zwrotne do aktualnie wybranego serwisu.",
+ "AlexaRank": "Ranking Alexa",
+ "Bing_IndexedPages": "Strony zindeksowane w Bing",
"DomainAge": "Wiek domeny",
+ "Google_IndexedPages": "Strony zindeksowane w Google",
"Rank": "Pozycja",
"SeoRankings": "Pozycja SEO",
"SEORankingsFor": "SEO pozycje dla %s"
diff --git a/plugins/ScheduledReports/lang/de.json b/plugins/ScheduledReports/lang/de.json
index 0e343b5f55..aecebd7239 100644
--- a/plugins/ScheduledReports/lang/de.json
+++ b/plugins/ScheduledReports/lang/de.json
@@ -36,7 +36,7 @@
"ReportType": "Bericht versenden via",
"ReportUpdated": "Bericht aktualisiert",
"Segment_Deletion_Error": "Dieses Segment kann nicht gelöscht oder für andere Benutzer unsichtbar gemacht werden, da es zur Generierung der E-Mail-Berichte %s verwendet wird. Bitte versuchen Sie es erneut, nachdem Sie dieses Segment aus den Berichten entfernt haben.",
- "Segment_Help": "Sie können ein Segment wählen das auf die Daten des E-Mail-Berichts angewendet werden soll. Sie können Segmente auf dem Dashboard anlegen oder bearbeiten %1$s(hier klicken zum öffnen)%2$s, klicken Sie dann auf die \"%3$s\" Box und dann auf \"%4$s\".",
+ "Segment_Help": "Sie können ein Segment wählen, das auf die Daten des E-Mail-Berichts angewendet werden soll. Sie können Segmente auf dem Dashboard anlegen oder bearbeiten %1$s(hier klicken zum öffnen)%2$s, klicken Sie dann auf die \"%3$s\" Box und dann auf \"%4$s\".",
"SegmentAppliedToReports": "Das Segment '%s' wird auf die Berichte angewendet.",
"SendReportNow": "Bericht jetzt senden",
"SendReportTo": "Bericht senden an",
diff --git a/plugins/ScheduledReports/lang/id.json b/plugins/ScheduledReports/lang/id.json
index 7e42f61d3b..45298c3583 100644
--- a/plugins/ScheduledReports/lang/id.json
+++ b/plugins/ScheduledReports/lang/id.json
@@ -1,5 +1,6 @@
{
"ScheduledReports": {
+ "AggregateReportsFormat": "Opsi tampilan",
"AggregateReportsFormat_GraphsOnly": "Hanya tampilkan Grafik (tanpa tabel laporan)",
"AggregateReportsFormat_TablesAndGraphs": "Tampilkan tabel dan Grafik Laporan untuk seluruh Laporan",
"AggregateReportsFormat_TablesOnly": "(asali) Tampilkan tabel Laporan (Grafik hanya kunci metrik)",
@@ -23,7 +24,9 @@
"PiwikReports": "Laporan Piwik",
"PleaseFindBelow": "Silakan temukan di bawah laporan %1$s Anda untuk %2$s.",
"ReportFormat": "Bentuk Laporan",
+ "ReportHour": "Kirim laporan pada jam %s",
"ReportIncludeNWebsites": "Laporan akan dimasukkan dalam matriks utama untuk setiap situs dengan sekurangnya satu kunjungan (dari situs %s saat ini yang tersedia).",
+ "ReportSent": "Laporan telah dikirim",
"ReportsIncluded": "Sertakan Statistik",
"ReportType": "Kirim laporan melalui",
"Segment_Help": "Anda dapat menyeleksi pecahan kustom untuk diterapkan pada laporan surel ini. Anda dapat membuat dan menyunting pecahan kustom dalam panel kendali Anda %1$s(klik di sini untuk membuka)%2$s, lalu klik di kotak \"%3$s\", kemudian \"%4$s\".",
diff --git a/plugins/ScheduledReports/lang/ja.json b/plugins/ScheduledReports/lang/ja.json
index f6b6b7fb7d..92476d683a 100644
--- a/plugins/ScheduledReports/lang/ja.json
+++ b/plugins/ScheduledReports/lang/ja.json
@@ -23,6 +23,7 @@
"NoRecipients": "このレポートは、受取人がいません",
"Pagination": "%1$s の %2$s ページ",
"PiwikReports": "Piwik リポート",
+ "PleaseFindAttachedFile": "ウェブサイト %2$s の %1$s のレポートを添付しましたのでご確認ください。",
"SentFromX": "%s から送信されます。",
"PleaseFindBelow": "%2$s の %1$s のリポートをお届けします。",
"PluginDescription": "カスタム レポートを作成し、毎日、毎週、毎月等、 1 つまたは複数の人にメールで送信するようにスケジュールします。サポートされているレポート形式 ( html、pdf、csv、画像)。",
diff --git a/plugins/ScheduledReports/lang/pl.json b/plugins/ScheduledReports/lang/pl.json
index da17a386de..908e383b34 100644
--- a/plugins/ScheduledReports/lang/pl.json
+++ b/plugins/ScheduledReports/lang/pl.json
@@ -1,31 +1,51 @@
{
"ScheduledReports": {
+ "AggregateReportsFormat": "Opcje wyświetlania",
"AggregateReportsFormat_GraphsOnly": "Wyświetlane wykresów (brak tabeli raportu)",
- "AggregateReportsFormat_TablesAndGraphs": "Wyświetlane tabeli i wykresów dla wszystkich raportów",
+ "AggregateReportsFormat_TablesAndGraphs": "Wyświetlane tabel i wykresów dla wszystkich raportów",
"AggregateReportsFormat_TablesOnly": "(domyślny) Wyświetlane tabele raportu (wykresy tylko dla kluczowych wskaźników)",
- "AlsoSendReportToTheseEmails": "Również wyślij raport na podane adresy e-mail (jeden na linię):",
+ "AlsoSendReportToTheseEmails": "Dodatkowo wyślij ten raport na podane adresy e-mail (jeden na linię):",
+ "AreYouSureDeleteReport": "Czy na pewno chcesz usunąć raport wraz z harmonogramem?",
"CancelAndReturnToReports": "Anuluj i %1$spowróć do listy raportów%2$s",
"CreateAndScheduleReport": "Utwórz i zaplanuj raport",
"CreateReport": "Utwórz raport",
+ "CustomVisitorSegment": "Skonfigurowana grupa odwiedzających:",
"DescriptionOnFirstPage": "Opis będzie wyświetlany na pierwszej stronie raportu.",
+ "DisplayFormat_TablesOnly": "Wyświetl tylko tabele (bez wykresów)",
"EmailHello": "Witaj,",
- "EmailReports": "Raporty pocztowe",
- "EmailSchedule": "Kalendarium poczty e-mail",
+ "EmailReports": "Raporty e-mail",
+ "EmailSchedule": "Harmonogram e-mail",
+ "EvolutionGraph": "Pokaż Archiwalne wykresy dla najlepszych %s wartości",
"FrontPage": "Strona główna",
- "MonthlyScheduleHelp": "Planowanie miesięczne: raport będzie wysyłany pierwszego dnia każdego miesiąca.",
+ "PersonalEmailReports": "Osobiste raporty e-mail",
+ "MonthlyScheduleHelp": "Harmonogram miesięczny: raport będzie wysyłany pierwszego dnia każdego miesiąca.",
+ "MustBeLoggedIn": "Musisz się zalogować, aby utworzyć osobisty raport z harmonogramem.",
+ "NoRecipients": "Brak odbiorców tego raportu",
+ "Pagination": "Strona %1$s z %2$s",
"PiwikReports": "Raporty Piwik",
- "PleaseFindBelow": "Prosimy odszukać w poniższym %1$s raport %2$s.",
+ "PleaseFindAttachedFile": "Twój %1$sraport dla%2$s znajduje się w załączonym pliku.",
+ "SentFromX": "Wysłane z %s.",
+ "PleaseFindBelow": "Prosimy odszukać %2$s w poniższym raporcie %1$s .",
+ "PluginDescription": "Utwórz osobiste raporty i ich harmonogramy aby codziennie, co tydzień lub raz w miesiącu trafiały one do jednej lub kilku osób. Dostępne jest kilka formatów (html, pdf, csv, obrazki).",
"ReportFormat": "Format raportu",
+ "ReportHour": "Wyślij raport o %s",
+ "ReportHourWithUTC": "O godzinie %s UTC",
+ "ReportIncludeNWebsites": "Raport będzie zawierał główne wskaźniki dla wszystkich serwisów, które miał przynajmniej jedne odwiedziny (spośród dostępnych %s serwisów).",
+ "ReportSent": "Raport wysłany",
"ReportsIncluded": "Zawarte statystyki",
"ReportType": "Wyślij raport przez",
- "ReportUpdated": "Raport uaktualniono",
+ "ReportUpdated": "Raport zaktualizowany",
+ "Segment_Deletion_Error": "Tej grupy nie można usunąć lub ukryć przed innymi użytkownikam, ponieważ jest wykorzystywana do generowania raportów e-mail %s. Proszę ponów próbę po usunięciu tej grupy z raportu.",
+ "Segment_Help": "Możesz wybrać istniejącą grupę odwiedzających i na ich podstawie zbudować ten raport. Tworzenie i edycja własnych grup odwiedzających możliwa jest na Twoim pulpicie %1$s(kliknij aby otworzyć)%2$s, później kliknij w boks \"%3$s\", a następnie \"%4$s\".",
+ "SegmentAppliedToReports": "Grupa '%s' została nałożona na raport.",
"SendReportNow": "Wyślij raport teraz",
"SendReportTo": "Wyślij raport do",
"SentToMe": "Wyślij do mnie",
"TableOfContent": "Lista raportów",
"ThereIsNoReportToManage": "Brak raportu dla strony %s",
+ "TopLinkTooltip": "Skonfiguruj Raport E-mail aby statystyki Piwik'a były dostarczane automatycznie do Twojej skrzynki odbiorczej lub skrzynki Twojego Klienta!",
"TopOfReport": "Powrót na górę strony",
"UpdateReport": "Aktualizuj raport",
- "WeeklyScheduleHelp": "Planowanie tygodniowe: raport będzie wysyłany w każdy pierwszy poniedziałek każdego tygodnia."
+ "WeeklyScheduleHelp": "Harmonogram tygodniowy: raport będzie wysyłany w każdy pierwszy poniedziałek każdego tygodnia."
}
} \ No newline at end of file
diff --git a/plugins/ScheduledReports/lang/ru.json b/plugins/ScheduledReports/lang/ru.json
index b5ed542d04..60eb96d231 100644
--- a/plugins/ScheduledReports/lang/ru.json
+++ b/plugins/ScheduledReports/lang/ru.json
@@ -22,24 +22,25 @@
"NoRecipients": "У этого отчета нет получателей",
"Pagination": "Страница %1$s из %2$s",
"PiwikReports": "Отчеты Веб-аналитики",
+ "SentFromX": "Отправлено из %s.",
"PleaseFindBelow": "Пожалуйста, ниже вашего %1$s отчет за %2$s.",
"PluginDescription": "Создаёт пользовательские отчёты и планирует их отправку по почте ежедневно, еженедельно или ежемесячно для одного или нескольких людей. Поддерживает некоторые форматы отчётов (html, pdf, csv, изображения).",
- "ReportFormat": "Формат отчета",
+ "ReportFormat": "Формат отчёта",
"ReportHour": "Высылать отчёт в %s часов",
- "ReportIncludeNWebsites": "Отчет будет содержать основные показатели для всех сайтов, у которых было хотя бы одно посещение (всего сейчас доступно %s сайтов).",
- "ReportSent": "Отправить отчет",
- "ReportsIncluded": "Данные, включенные в отчет",
- "ReportType": "Отправить отчет с помощью",
+ "ReportIncludeNWebsites": "Отчёт будет содержать основные показатели для всех сайтов, у которых было хотя бы одно посещение (всего сейчас доступно %s сайтов).",
+ "ReportSent": "Отправить отчёт",
+ "ReportsIncluded": "Данные, включенные в отчёт",
+ "ReportType": "Отправить отчёт с помощью",
"ReportUpdated": "Отчёт обновлён",
"Segment_Help": "Вы можете выбрать существующий пользовательский сегмент для применения к данным для этого отчёта. Вы можете создавать и редактировать пользовательские сегменты на панели инструментов %1$s(нажмите здесь, чтобы открыть)%2$s, далее нажмите на \"%3$s\", затем \"%4$s\".",
- "SendReportNow": "Отправить отчет сейчас",
+ "SendReportNow": "Отправить отчёт сейчас",
"SendReportTo": "Получатели",
"SentToMe": "Отправить мне",
- "TableOfContent": "Лист отчета",
- "ThereIsNoReportToManage": "У вас пока нет отчетности для сайта %s",
+ "TableOfContent": "Лист отчёта",
+ "ThereIsNoReportToManage": "У вас пока нет отчётности для сайта %s",
"TopLinkTooltip": "Создайте Email-отчёты в Piwik, чтобы получать их прямо на ваш email или email ваших клиентов автоматически!",
"TopOfReport": "Вернуться наверх",
- "UpdateReport": "Обновить отчетность",
- "WeeklyScheduleHelp": "Еженедельное расписание: отчеты будут рассылаться каждый понедельник."
+ "UpdateReport": "Обновить отчётность",
+ "WeeklyScheduleHelp": "Еженедельное расписание: отчёты будут рассылаться каждый понедельник."
}
} \ No newline at end of file
diff --git a/plugins/ScheduledReports/lang/sk.json b/plugins/ScheduledReports/lang/sk.json
index 670870f7fa..9cb1af11db 100644
--- a/plugins/ScheduledReports/lang/sk.json
+++ b/plugins/ScheduledReports/lang/sk.json
@@ -7,10 +7,15 @@
"EmailReports": "Reporty e-mailom",
"EmailSchedule": "E-mail report",
"MonthlyScheduleHelp": "Mesačný plán: správa bude odoslaná prvý deň každého mesiaca.",
+ "Pagination": "Strana %1$s z %2$s",
"PiwikReports": "Reporty",
+ "PleaseFindAttachedFile": "Pozrite si Váš report %1$s pre %2$s v priloženom súbore.",
+ "SentFromX": "Odoslané z %s.",
+ "PleaseFindBelow": "Pozrite si nižšie Váš report %1$s pre %2$s.",
"SendReportNow": "Teraz poslať report",
"SendReportTo": "Poslať report",
"SentToMe": "Pošli na",
+ "TopOfReport": "Späť na vrch",
"WeeklyScheduleHelp": "Týždenný plán: správa bude odoslaná prvý pondelok každého týždňa."
}
} \ No newline at end of file
diff --git a/plugins/ScheduledReports/lang/sv.json b/plugins/ScheduledReports/lang/sv.json
index 2d6ad5ae77..671284e3f3 100644
--- a/plugins/ScheduledReports/lang/sv.json
+++ b/plugins/ScheduledReports/lang/sv.json
@@ -1,5 +1,6 @@
{
"ScheduledReports": {
+ "AggregateReportsFormat": "Visningsalternativ",
"AggregateReportsFormat_GraphsOnly": "Visa endast diagram (inga rapporttabeller)",
"AggregateReportsFormat_TablesAndGraphs": "Visa rapporttabeller och diagram för alla rapporter",
"AggregateReportsFormat_TablesOnly": "(standard) Visa rapporttabeller (Diagram endast för nyckeltal)",
@@ -22,11 +23,13 @@
"NoRecipients": "Rapporten har ingen mottagare",
"Pagination": "Sida %1$s av %2$s",
"PiwikReports": "Piwik Rapporter",
+ "PleaseFindAttachedFile": "Se din %1$s-rapport för %2$s i den bifogade filen.",
"SentFromX": "Skickat från %s.",
"PleaseFindBelow": "Nedan hittar du din %1$s rapport för %2$s.",
"PluginDescription": "Skapa anpassade rpaporter och schemalägg att dom ska skickas ut dagligen, veckovis eller månadsvis till en eller flera personer. Det finns stöd för flera format (html, pdf, csv och bilder).",
"ReportFormat": "Rapportformat",
"ReportHour": "Skicka rapporten klockan %s",
+ "ReportHourWithUTC": "%s UTC",
"ReportIncludeNWebsites": "Rapporten kommer att innehålla viktiga mättal för alla webbplatser som har minst ett besök (från %s webbsidorna som för tillfället är tillgängliga).",
"ReportSent": "Rapport skickad",
"ReportsIncluded": "Statistik ingår",
diff --git a/plugins/ScheduledReports/templates/_addReport.twig b/plugins/ScheduledReports/templates/_addReport.twig
index 5201911d3d..525eba47f4 100644
--- a/plugins/ScheduledReports/templates/_addReport.twig
+++ b/plugins/ScheduledReports/templates/_addReport.twig
@@ -8,7 +8,7 @@
<div piwik-field uicontrol="text" name="website"
title="{{ 'General_Website'|translate|e('html_attr') }}"
disabled="true"
- value="{{ siteName|raw }}">
+ value="{{ siteName|rawSafeDecoded }}">
</div>
<div piwik-field uicontrol="textarea" name="report_description"
diff --git a/plugins/ScheduledReports/templates/_listReports.twig b/plugins/ScheduledReports/templates/_listReports.twig
index d6b38c7c49..f755f6c0ee 100644
--- a/plugins/ScheduledReports/templates/_listReports.twig
+++ b/plugins/ScheduledReports/templates/_listReports.twig
@@ -32,7 +32,7 @@
<td colspan='7'>
<br/>
- {{ 'ScheduledReports_ThereIsNoReportToManage'|translate(siteName)|raw }}.
+ {{ 'ScheduledReports_ThereIsNoReportToManage'|translate(siteName)|rawSafeDecoded }}.
<br/><br/>
</td>
</tr>
diff --git a/plugins/ScheduledReports/templates/reportParametersScheduledReports.twig b/plugins/ScheduledReports/templates/reportParametersScheduledReports.twig
index 19acdd9276..92d7ad52ad 100644
--- a/plugins/ScheduledReports/templates/reportParametersScheduledReports.twig
+++ b/plugins/ScheduledReports/templates/reportParametersScheduledReports.twig
@@ -31,7 +31,7 @@
var i, field, fields = ['displayFormat', 'emailMe', 'evolutionGraph', 'additionalEmails'];
for (i in fields) {
field = fields[i];
- if (report.parameters[field]) {
+ if (field in report.parameters) {
report[field] = report.parameters[field];
}
}
diff --git a/plugins/SecurityInfo b/plugins/SecurityInfo
-Subproject 542b79de9671169b3833769b6498de44fd748fb
+Subproject d0674f8c265a046127b548bc13687d65225a62b
diff --git a/plugins/SegmentEditor/SegmentList.php b/plugins/SegmentEditor/SegmentList.php
index e7094d4793..79a226aa7b 100644
--- a/plugins/SegmentEditor/SegmentList.php
+++ b/plugins/SegmentEditor/SegmentList.php
@@ -20,6 +20,7 @@ class SegmentList
{
$segments = Request::processRequest('API.getSegmentsMetadata', array(
'idSites' => array($idSite),
+ 'filter_limit' => '-1'
));
foreach ($segments as $segment) {
diff --git a/plugins/SegmentEditor/javascripts/Segmentation.js b/plugins/SegmentEditor/javascripts/Segmentation.js
index d85399781b..0153a6b491 100644
--- a/plugins/SegmentEditor/javascripts/Segmentation.js
+++ b/plugins/SegmentEditor/javascripts/Segmentation.js
@@ -1012,7 +1012,6 @@ Segmentation = (function($) {
}
// remove any remaining forms
-
self.form = getFormHtml();
self.target.prepend(self.form);
@@ -1028,8 +1027,11 @@ Segmentation = (function($) {
placeSegmentationFormControls();
+ // needs to be done before jQuery selects are built, as angular compiler screws up the selected values
+ piwikHelper.compileAngularComponents(self.target);
+
if(mode == "edit") {
- var userSelector = $(self.form).find('.enable_all_users_select > option[value="' + segment.enable_all_users + '"]').prop("selected",true);
+ $(self.form).find('.enable_all_users_select > option[value="' + segment.enable_all_users + '"]').prop("selected",true);
// Replace "Visible to me" by "Visible to $login" when user is super user
if(hasSuperUserAccessAndSegmentCreatedByAnotherUser(segment)) {
@@ -1056,8 +1058,6 @@ Segmentation = (function($) {
$(".segmentListContainer", self.target).hide();
self.target.closest('.segmentEditorPanel').addClass('editing');
-
- piwikHelper.compileAngularComponents(self.target);
};
var closeForm = function () {
@@ -1314,7 +1314,7 @@ $(document).ready(function() {
this.forceSegmentReload = function (segmentDefinition) {
segmentDefinition = this.uriEncodeSegmentDefinition(segmentDefinition);
- return broadcast.propagateNewPage('segment=' + segmentDefinition, true);
+ return broadcast.propagateNewPage('', true, 'segment=' + segmentDefinition);
};
this.changeSegmentList = function () {};
diff --git a/plugins/SegmentEditor/lang/de.json b/plugins/SegmentEditor/lang/de.json
index 4b852598d2..21555667d3 100644
--- a/plugins/SegmentEditor/lang/de.json
+++ b/plugins/SegmentEditor/lang/de.json
@@ -6,7 +6,7 @@
"AreYouSureDeleteSegment": "Möchten Sie dieses Segment wirklich löschen?",
"AutoArchivePreProcessed": "Segmentierte Berichte werden im Voraus verarbeitet (schneller, benötigt archive.php Cron)",
"AutoArchiveRealTime": "Segmentierte Berichte werden in Echtzeit verarbeitet.",
- "ChangingSegmentDefinitionConfirmationNotProcessedOnRequest": "Sie sind dabei die Definition des Segments zu ändern. Die Berichte für dieses neue Segment stehen erst zur Verfügung sobald sie berechnet wurden. Es könnte einige Stunden dauern bis Daten für das Segment angezeigt werden. Möchten Sie trotzdem fortfahren?",
+ "ChangingSegmentDefinitionConfirmationNotProcessedOnRequest": "Sie sind dabei die Definition des Segments zu ändern. Die Berichte für dieses neue Segment stehen erst zur Verfügung, sobald sie berechnet wurden. Es könnte einige Stunden dauern bis Daten für das Segment angezeigt werden. Möchten Sie trotzdem fortfahren?",
"ChangingSegmentDefinitionConfirmationProcessedOnRequest": "Sie sind dabei die Definition des Segments zu ändern. Die Berichte für dieses neue Segment werden berechnet, sobald Sie das nächste mal angefragt werden. Es könnte einige Minuten dauern bis die Berichte erscheinen. Möchten Sie trotzdem fortfahren?",
"ChooseASegment": "Segment auswählen",
"CurrentlySelectedSegment": "Aktuell ausgewähltes Segment: %s",
@@ -30,8 +30,8 @@
"YouMayChangeSetting": "Alternativ können Sie die Einstellung in der Konfigurationsdatei (%1$s) ändern, oder ändern Sie dieses Segment und wählen '%2$s'.",
"VisibleToSuperUser": "Für Sie sichtbar, da Sie Hauptadministrator-Berechtigung haben",
"SharedWithYou": "Mit dir geteilt",
- "YouMustBeLoggedInToCreateSegments": "Sie müssen sich anmelden um eigene Besuchersegmente anzulegen oder zu bearbeiten.",
- "YouDontHaveAccessToCreateSegments": "Sie haben nicht die benötigten Berechtigungen um Segmente anzulegen und zu bearbeiten.",
+ "YouMustBeLoggedInToCreateSegments": "Sie müssen sich anmelden, um eigene Besuchersegmente anzulegen oder zu bearbeiten.",
+ "YouDontHaveAccessToCreateSegments": "Sie haben nicht die benötigten Berechtigungen, um Segmente anzulegen und zu bearbeiten.",
"AddingSegmentForAllWebsitesDisabled": "Das Hinzufügen von Segmenten wurde für alle Websites deaktiviert.",
"SegmentXIsAUnionOf": "%s ist eine Vereinigung dieser Segmente:",
"CustomSegment": "Benutzerdefiniertes Segment",
diff --git a/plugins/SegmentEditor/lang/id.json b/plugins/SegmentEditor/lang/id.json
index efbc998855..149ec43bb4 100644
--- a/plugins/SegmentEditor/lang/id.json
+++ b/plugins/SegmentEditor/lang/id.json
@@ -8,15 +8,19 @@
"ChooseASegment": "Pilih pecahan",
"DefaultAllVisits": "Semua kunjungan",
"DragDropCondition": "Kondisi Seret dan Taruh",
+ "HideMessageInFuture": "Sembunyikan pesan ini di masa mendatang",
"LoadingSegmentedDataMayTakeSomeTime": "Memproses pecahan data pengunjung mungkin membutuhkan waktu beberapa menit...",
"OperatorAND": "TAMBAH",
"OperatorOR": "ATAU",
"SaveAndApply": "Simpan dan Terapkan",
"SegmentDisplayedAllWebsites": "seluruh situs",
"SegmentDisplayedThisWebsiteOnly": "hanya situs ini",
+ "SegmentIsDisplayedForWebsite": "dan diproses untuk",
"ThisSegmentIsVisibleTo": "Pecahan ini tampak untuk:",
"VisibleToAllUsers": "seluruh pengunjung",
"VisibleToMe": "saya",
- "YouMustBeLoggedInToCreateSegments": "Anda harus masuk-log untuk membuat dan menyunting pecahan pengunjung kustom."
+ "SharedWithYou": "Berbagi dengan Anda",
+ "YouMustBeLoggedInToCreateSegments": "Anda harus masuk-log untuk membuat dan menyunting pecahan pengunjung kustom.",
+ "SegmentOperatorIsNotNullNorEmpty": "tidak boleh null atau kosong"
}
} \ No newline at end of file
diff --git a/plugins/SegmentEditor/lang/pl.json b/plugins/SegmentEditor/lang/pl.json
index acc41dc802..ff362b1a15 100644
--- a/plugins/SegmentEditor/lang/pl.json
+++ b/plugins/SegmentEditor/lang/pl.json
@@ -1,16 +1,41 @@
{
"SegmentEditor": {
- "AddNewSegment": "Dodaj nowy segment",
- "AreYouSureDeleteSegment": "Czy jesteś pewny, że chcesz usunąć ten segment?",
- "ChooseASegment": "Wybierz segment",
+ "PluginDescription": "Twórz i korzystaj ze skonfigurowanych przez siebie grup odwiedzających w Edytorze Grup",
+ "AddANDorORCondition": "Dodaj warunek %s",
+ "AddNewSegment": "Dodaj nową grupę",
+ "AreYouSureDeleteSegment": "Czy jesteś pewny, że chcesz usunąć tą grupę?",
+ "AutoArchivePreProcessed": "raporty dla grup są wcześniej przetwarzane (szybsze, wymaga cron'a)",
+ "AutoArchiveRealTime": "raporty grup są przetwarzane w czasie rzeczywistym",
+ "ChangingSegmentDefinitionConfirmationNotProcessedOnRequest": "Zamierzasz zmienić definicję grupy odwiedzających. Analiza Twojego raportu nie będzie dostępna dla tej grupy do momentu jej ponownego przetworzenia. Do momentu ponownej dostępności raportu może upłynąć nawet parę godzin. Czy chcesz kontynuować?",
+ "ChangingSegmentDefinitionConfirmationProcessedOnRequest": "Zamierzasz zmienić definicję grupy odwiedzających. Analiza Twojego raportu zostanie wykonana w trybie 'na żądanie' podczas kolejnego wywołania strony. Aby Twój raport został wyświetlony może upłynąć klika minut. Czy chcesz kontynuować?",
+ "ChooseASegment": "Wybierz grupę",
+ "CurrentlySelectedSegment": "Aktualnie wybrana grupa: %s",
+ "DataAvailableAtLaterDate": "Twój raport analizy grup odwiedzających będzie dostępny później. Przepraszamy za niedogodności.",
"DefaultAllVisits": "Wszystkie wizyty",
+ "DragDropCondition": "Przeciągnij i upuść warunek",
+ "HideMessageInFuture": "Nie pokazuj tego komunikatu w przyszłości",
+ "LoadingSegmentedDataMayTakeSomeTime": "Przetwarzanie danych grup odwiedzających może zająć kilka minut...",
"OperatorAND": "I",
"OperatorOR": "LUB",
- "SaveAndApply": "Zapisz i zatwierdź zmiany",
- "SegmentDisplayedAllWebsites": "wszystkie strony",
- "SegmentDisplayedThisWebsiteOnly": "jedynie ta strona",
- "ThisSegmentIsVisibleTo": "Ten segment jest widoczny dla",
- "VisibleToAllUsers": "wszyscy użytkownicy",
- "VisibleToMe": "mnie"
+ "SaveAndApply": "Zapisz i zastosuj zmiany",
+ "SegmentDisplayedAllWebsites": "wszystkie portale",
+ "SegmentDisplayedThisWebsiteOnly": "jedynie ten portal",
+ "SegmentIsDisplayedForWebsite": "i przetwarzane dla",
+ "SegmentNotApplied": "Grupa '%s' nie nałożona",
+ "SegmentNotAppliedMessage": "Próbujesz pobrać dane Skonfigurowanej przez Ciebie Grupy '%s', konfiguracja tego Piwik'a zapobiega przetwarzaniu ich w czasie rzeczywistym ze względu na wydajność.",
+ "SelectSegmentOfVisits": "Wybierz grupę odwiedzających:",
+ "ThisSegmentIsVisibleTo": "Ta grupa widoczna jest dla:",
+ "VisibleToAllUsers": "wszystkich użytkowników",
+ "VisibleToMe": "mnie",
+ "YouMayChangeSetting": "Istnieje możliwość zmiany tego ustawienia w pliku konfiguracyjnym (%1$s), lub zmień ustawienia tej Grupy wybierając '%2$s'.",
+ "VisibleToSuperUser": "Widoczne dla Ciebie, bo jesteś Super Użytkownikiem",
+ "SharedWithYou": "Współdzielone z Tobą",
+ "YouMustBeLoggedInToCreateSegments": "Musisz się zalogować aby konfigurować własne grupy użytkowników.",
+ "YouDontHaveAccessToCreateSegments": "Nie masz wymaganych uprawnień do tworzenia i edycji grup użytkowników.",
+ "AddingSegmentForAllWebsitesDisabled": "Dodawanie grup dla wszystkich portali zostało wyłączone.",
+ "SegmentXIsAUnionOf": "%s jest złączeniem tych grup:",
+ "CustomSegment": "Grupa użytkownika",
+ "SegmentOperatorIsNullOrEmpty": "nie istnieje lub puste",
+ "SegmentOperatorIsNotNullNorEmpty": "istnieje lub nie jest puste"
}
} \ No newline at end of file
diff --git a/plugins/SegmentEditor/lang/sv.json b/plugins/SegmentEditor/lang/sv.json
index 24ca92a229..bc5d85dc16 100644
--- a/plugins/SegmentEditor/lang/sv.json
+++ b/plugins/SegmentEditor/lang/sv.json
@@ -11,6 +11,7 @@
"DataAvailableAtLaterDate": "Dina segmenterade analysrapporter kommer att finnas tillgänglig senare. Vi ber om ursäkt för besväret.",
"DefaultAllVisits": "Alla besök",
"DragDropCondition": "Dra & Droppa villkor",
+ "HideMessageInFuture": "Dölj detta meddelande i framtiden",
"LoadingSegmentedDataMayTakeSomeTime": "Att processa data för segmenterade besökare kan ta några minuter...",
"OperatorAND": "OCH",
"OperatorOR": "ELLER",
diff --git a/plugins/SitesManager/Controller.php b/plugins/SitesManager/Controller.php
index 91744e84b2..2bf49e6f5c 100644
--- a/plugins/SitesManager/Controller.php
+++ b/plugins/SitesManager/Controller.php
@@ -148,8 +148,11 @@ class Controller extends \Piwik\Plugin\ControllerAdmin
$javascriptGenerator = new TrackerCodeGenerator();
$piwikUrl = Url::getCurrentUrlWithoutFileName();
- if (!$this->site) {
+ if (!$this->site && Piwik::hasUserSuperUserAccess()) {
throw new UnexpectedWebsiteFoundException('Invalid site ' . $this->idSite);
+ } elseif (!$this->site) {
+ // redirect to login form
+ Piwik::checkUserHasViewAccess($this->idSite);
}
return $this->renderTemplate('siteWithoutData', array(
diff --git a/plugins/SitesManager/lang/cs.json b/plugins/SitesManager/lang/cs.json
index bce7ce8a1b..5cb9900b3c 100644
--- a/plugins/SitesManager/lang/cs.json
+++ b/plugins/SitesManager/lang/cs.json
@@ -76,6 +76,7 @@
"SiteWithoutDataSetupTracking": "Prosím, nastavte %1$ssledovací kód%2$s uvedený níže na vašich stránkách nebo v mobilní aplikaci, pokud jste to ješště neudělali.",
"SiteWithoutDataMessageDisappears": "Tato zpráva zmizí jakmile dojde k nahrání nějakých dat pro tento web.",
"SiteWithoutDataSetupGoals": "Mezitím byste možná chtěl(a) %1$snastavit nějaké cíle%2$s, nebo se něco dozvědět o %3$sfunkcích%4$s Piwiku v některém z našich %5$snávodů%6$s, nebo %7$sFAQ%8$s.",
+ "SiteWithoutDataIgnoreMessage": "Nezobrazovat tuto zprávu další hodinu",
"SuperUserAccessCan": "Uživatel se super-uživatelským přístupem může také %1$sspecifikovat globální nastavení%2$s pro nové weby.",
"Timezone": "Časová zóna",
"TrackingSiteSearch": "Sledování interního vyhledávání na stránkách",
diff --git a/plugins/SitesManager/lang/de.json b/plugins/SitesManager/lang/de.json
index 39f17b1d9f..6f91bfc371 100644
--- a/plugins/SitesManager/lang/de.json
+++ b/plugins/SitesManager/lang/de.json
@@ -27,8 +27,8 @@
"ExcludedIps": "Ignorierte IPs",
"ExcludedParameters": "Ignorierte Parameter",
"ExcludedUserAgents": "Ausgeschlossene Browser Agenten",
- "GlobalExcludedUserAgentHelp1": "Geben Sie eine Liste aller Browser Agenten ein die von Piwik ignoriert werden sollen.",
- "GlobalExcludedUserAgentHelp2": "Dies kann benutzt werden um Bots vom Tracking auszuschliessen.",
+ "GlobalExcludedUserAgentHelp1": "Geben Sie eine Liste aller Browser Agenten ein, die von Piwik ignoriert werden sollen.",
+ "GlobalExcludedUserAgentHelp2": "Dies kann benutzt werden um Bots vom Tracking auszuschließen.",
"GlobalListExcludedIps": "Globale Liste ignorierter IPs",
"GlobalListExcludedQueryParameters": "Globale Liste von GET-Parametern, die ignoriert werden",
"GlobalListExcludedUserAgents": "Globale Liste aller ausgeschlossenen Browser Agenten",
@@ -43,7 +43,7 @@
"KeepURLFragmentsLong": "URL Fragmente beim Tracking behalten",
"ListOfIpsToBeExcludedOnAllWebsites": "Die untenstehenden IPs werden auf allen Websites ignoriert.",
"ListOfQueryParametersToBeExcludedOnAllWebsites": "Die untenstehenden GET-Parameter werden von allen URLs aller Websites ignoriert.",
- "ListOfQueryParametersToExclude": "Geben Sie die Liste der URL Query Parameter an, einen pro Zeile, um sie von der URL Berichtsseite auszuschliessen. Reguläre Ausdrücke so wie %s werden unterstützt.",
+ "ListOfQueryParametersToExclude": "Geben Sie die Liste der URL Query Parameter an, einen pro Zeile, um sie von der URL Berichtsseite auszuschließen. Reguläre Ausdrücke so wie %s werden unterstützt.",
"LogAnalytics": "Log-Analyse",
"LogAnalyticsDescription": "Wenn das Tracking per Javascript nicht möglich ist, können Sie %1$sServer Log Anayltics %2$s als Alternative Method einsetzen, um die Besucher Ihrer Webseite zu analysieren.",
"MainDescription": "Ihre Webanalyse benötigt Websites! Websites können hinzugefügt, aktualisiert und gelöscht werden. Hier wird auch der JavaScript-Code gezeigt, der in Ihre Websites eingefügt werden muss.",
@@ -62,7 +62,7 @@
"SearchCategoryParametersDesc": "Sie können eine durch Komma getrennte Liste der URL-Parameter eingeben, welche die Suchkategorie enthalten.",
"SearchKeywordLabel": "URL-Parameter",
"SearchKeywordParametersDesc": "Geben Sie eine durch Komma getrennte Liste der Namen aller URL-Parameter ein, welche den Suchbegriff enthalten können.",
- "SearchParametersNote": "Hinweis: Die URL-Parameter für Suchbegriffe und -kategorien werden nur auf Websites verwendet, bei denen die interne Suche aktiviert ist aber die Parameter leergelassen wurden.",
+ "SearchParametersNote": "Hinweis: Die URL-Parameter für Suchbegriffe und -kategorien werden nur auf Websites verwendet, bei denen die interne Suche aktiviert ist, aber die Parameter leer gelassen wurden.",
"SearchParametersNote2": "Um die interne Suche für neue Websites nicht auszuwerten, lassen Sie diese beiden Felder leer.",
"SearchUseDefault": "Die %1$sStandard Parameter%2$s für die interne Suche verwenden",
"SelectACity": "Wählen Sie eine Stadt",
@@ -74,8 +74,9 @@
"SiteWithoutDataTitle": "Bisher wurden keine Daten aufgezeichnet",
"SiteWithoutDataDescription": "Für diese Website wurden bisher noch keine Analysedaten aufgezeichnet.",
"SiteWithoutDataSetupTracking": "Bitte fügen Sie den folgenden %1$sTracking Code%2$s auf ihrer Website ein, insofern Sie dies noch nicht getan haben.",
- "SiteWithoutDataMessageDisappears": "Diese Nachricht wird verschwinden sobald die ersten Daten für diese Website aufgezeichnet wurden.",
+ "SiteWithoutDataMessageDisappears": "Diese Nachricht wird verschwinden, sobald die ersten Daten für diese Website aufgezeichnet wurden.",
"SiteWithoutDataSetupGoals": "Währenddessen möchten Sie möglicherweise %1$sZiele definieren%2$s oder mehr über die %3$sFunktionen%4$s von Piwik in einem unserer %5$sAnleitungen%6$s oder %7$sFAQs%8$s erfahren.",
+ "SiteWithoutDataIgnoreMessage": "Diese Nachricht für eine Stunde verbergen",
"SuperUserAccessCan": "Ein Nutzer mit Hauptadministrator-Berechtigung kann ebenfalls %1$sglobale Einstellungen%2$s für neue Websites vornehmen.",
"Timezone": "Zeitzone",
"TrackingSiteSearch": "Die interne Suche auswerten",
@@ -83,7 +84,7 @@
"Urls": "URLs",
"Type": "Typ",
"UTCTimeIs": "UTC-Zeit ist %s.",
- "OnlyMatchedUrlsAllowed": "Zeichne Besuche und Aktionen nur auf wenn die Aktions-URL mit einer der oben genannten URLs beginnt.",
+ "OnlyMatchedUrlsAllowed": "Zeichne Besuche und Aktionen nur auf, wenn die Aktions-URL mit einer der oben genannten URLs beginnt.",
"OnlyMatchedUrlsAllowedHelp": "Wenn aktiviert zeichnet Piwik nur noch interne Aktionen auf bei denen die Seiten-URL eine der bekannten URLs der Website ist. Dies hindert andere daran Ihre Analyse mit URLs von anderen Websites zu verfälschen.",
"OnlyMatchedUrlsAllowedHelpExamples": "Die Domain und Pfadangabe muss exakt übereinstimmen und jede gültige Subdomain muss separat definiert werden. Sind die bekannten URLs beispielsweise 'http:\/\/example.com\/path' und 'http:\/\/good.example.com', werden Tracking-Anfragen von 'http:\/\/example.com\/otherpath' oder 'http:\/\/bad.example.com' ignoriert.",
"WebsitesManagement": "Websiteverwaltung",
diff --git a/plugins/SitesManager/lang/el.json b/plugins/SitesManager/lang/el.json
index ac0012afa4..ffd0eae232 100644
--- a/plugins/SitesManager/lang/el.json
+++ b/plugins/SitesManager/lang/el.json
@@ -76,6 +76,7 @@
"SiteWithoutDataSetupTracking": "Κάντε ορισμό του %1$sκώδικα παρακολούθησης%2$s στον ιστοτόπο σας ή στην εφαρμογή για κινητά αν δεν το έχετε ήδη κάνει.",
"SiteWithoutDataMessageDisappears": "Το μήνυμα θα εξαφανιστεί με το που θα καταχωρηθούν δεδομένα παρακολούθησης για τον ιστοτόπο αυτό.",
"SiteWithoutDataSetupGoals": "Εν τω μεταξύ, μπορείτε να %1$sορίσετε ορισμένους στόχους%2$s ή να μάθετε περισσότερα σχετικά με τα %3$sχαρακτηριστικά%4$s του Piwik σε ένα από τους %5$sοδηγούς%6$s μας ή τις %7$sσυχνές ερωτήσεις-απαντήσεις%8$s.",
+ "SiteWithoutDataIgnoreMessage": "Να μην εμφανιστεί αυτό το μήνυμα για την επόμενη ώρα",
"SuperUserAccessCan": "Ένας χρήστης με πρόσβαση Υπερ Χρήστη μπορεί επίσης να %1$s ορίσει τις καθολικές παραμέτρους%2$s για νέους ιστοτόπους.",
"Timezone": "Ζώνη ώρας",
"TrackingSiteSearch": "Καταγραφή Εσωτερικής Αναζήτησης Ιστοσελίδας",
diff --git a/plugins/SitesManager/lang/fr.json b/plugins/SitesManager/lang/fr.json
index 01a5d453f6..7037af7350 100644
--- a/plugins/SitesManager/lang/fr.json
+++ b/plugins/SitesManager/lang/fr.json
@@ -45,7 +45,7 @@
"ListOfQueryParametersToBeExcludedOnAllWebsites": "Les paramètres ci-dessous seront exclus des statistiques de tous les sites web.",
"ListOfQueryParametersToExclude": "Entrez la liste de vos paramètres d'URL à exclure des rapports d'URL de page, un par ligne. Les expressions régulières comme %s sont supportées.",
"LogAnalytics": "Analyse des logs",
- "LogAnalyticsDescription": "S'il n'est pas possible d'utiliser le code de suivit JavaScript, vous pouvez utiliser %1$sl'analyse des logs serveur%2$s comme solution alternative pour suivre les utilisateurs de vos sites web.",
+ "LogAnalyticsDescription": "S'il n'est pas possible d'utiliser le code de suivi JavaScript, vous pouvez utiliser %1$sl'analyse des logs serveur%2$s comme solution alternative pour suivre les utilisateurs de vos sites web.",
"MainDescription": "Piwik a besoin de sites pour générer des rapports ! Ajoutez, éditez et supprimez des sites, et voyez le code JavaScript à inclure dans vos pages.",
"MenuManage": "Gérer",
"MobileAppsAndSDKs": "Applications mobiles et SDKs",
@@ -73,9 +73,10 @@
"SiteSearchUse": "Vous pouvez utiliser Piwik pour suivre et effectuer un rapport sur ce que vos visiteurs cherchent sur le moteur de recherche interne de votre site web.",
"SiteWithoutDataTitle": "Aucune donnée enregistrée pour le moment",
"SiteWithoutDataDescription": "Aucune donnée d'analyse n'a été enregistrée pour ce site pour le moment.",
- "SiteWithoutDataSetupTracking": "Veuillez configurer le %1$scode de suivvit%2$s ci-dessous sur votre site web ou application si vous ne l'avez pas déjà fait.",
+ "SiteWithoutDataSetupTracking": "Veuillez configurer le %1$scode de suivi%2$s ci-dessous sur votre site web ou application si vous ne l'avez pas déjà fait.",
"SiteWithoutDataMessageDisappears": "Ce message disparaitra dès lors que certaines données auront été enregistrées pour ce site web.",
"SiteWithoutDataSetupGoals": "Pendant ce temps, vous seriez peut-être intéressé (e) à %1$sconfigurer des objectifs%2$s ou en apprendre plus à propos des %3$sfonctionnalités%4$s de Piwik en utilisant l'un de nos %5$sguides%6$s ou %7$sFAQ%8$s.",
+ "SiteWithoutDataIgnoreMessage": "Ne pas afficher ce message pendant une heure",
"SuperUserAccessCan": "Un utilisateur avec un accès super utilisateur peut aussi %1$sconfigurer les paramètres globaux%2$s pour les nouveaux sites web.",
"Timezone": "Fuseau horaire",
"TrackingSiteSearch": "Suivi de la recherche interne sur le site",
diff --git a/plugins/SitesManager/lang/id.json b/plugins/SitesManager/lang/id.json
index e89b88d62e..b856513a0f 100644
--- a/plugins/SitesManager/lang/id.json
+++ b/plugins/SitesManager/lang/id.json
@@ -1,6 +1,7 @@
{
"SitesManager": {
"AddSite": "Tambahkan situs baru",
+ "AddMeasurable": "Tambah pengukuran baru",
"AdvancedTimezoneSupportNotFound": "Dukungan wilayah waktu tingkat lanjut tidak ditemukan dalam PHP Anda (didukung di PHP>=5.2). Anda dapat memilih secara manual perbedaan UTC.",
"AliasUrlHelp": "Disarankan, tetapi tak diharuskan, menentukan bermacam URL, satu tiap baris, yang pengunjung Anda gunakan untuk mengakses situs ini. Nama pengganti URL untuk situs tidak akan tampil di Pengarah > Laporan Situs. Harap diperhatikan bahwa tidak perlu menentukan URL dengan atau tanpa 'www' sebagai kedua pertimbangan otomatis Piwik.",
"ChangingYourTimezoneWillOnlyAffectDataForward": "Mengubah wilayah waktu Anda hanya berpengaruh terhadap data berikutnya, bukan data sebelumnya.",
@@ -32,6 +33,7 @@
"GlobalListExcludedQueryParameters": "Daftar umum parameter Permintaan URL untuk dikecualikan",
"GlobalListExcludedUserAgents": "Daftar Global agen pengguna terkecualikan",
"GlobalListExcludedUserAgents_Desc": "Bila agen pengguna penggunjung mengandung larik apapun yang Anda tentukan, pengunjung akan dikecualikan dari Piwik.",
+ "GlobalSettings": "Pengaturan global",
"GlobalWebsitesSettings": "Pengaturan situs umum",
"HelpExcludedIps": "Masukkan daftar IP, satu tiap baris, yang ingin Anda kecualikan pelacakan Piwik. Anda dapat gunakan `wildcards`, seperti %1$s atau %2$s",
"JsTrackingTagHelp": "Ini merupakan kode Pelacakan JavaScript untuk dimasukkan ke seluruh halaman Anda",
diff --git a/plugins/SitesManager/lang/ja.json b/plugins/SitesManager/lang/ja.json
index a0e13a643c..82cfb5c757 100644
--- a/plugins/SitesManager/lang/ja.json
+++ b/plugins/SitesManager/lang/ja.json
@@ -44,8 +44,12 @@
"ListOfIpsToBeExcludedOnAllWebsites": "次の IP は、全ウェブサイトのトラッキングから除外されます。",
"ListOfQueryParametersToBeExcludedOnAllWebsites": "次のクエリー URL パラメータは、全ウェブサイトの URL から除外されます。",
"ListOfQueryParametersToExclude": "ページ URL レポートから除外する URL クエリパラメータのリストを 1 行に 1 つずつ入力します。 %s などの正規表現がサポートされています。",
+ "LogAnalytics": "ログ解析",
+ "LogAnalyticsDescription": "もしJavascriptによるトラッキングができない場合は、ウェブサイトのユーザーをトラッキングするための代替方法として%1$sサーバーログ解析%2$sが使えます。",
"MainDescription": "ウェブ解析リポートにはウェブサイトが必要です! ウェブサイトの追加、更新、削除と、ページに挿入する Javascript を表示します。",
"MenuManage": "管理",
+ "MobileAppsAndSDKs": "モバイルアプリとSDK",
+ "MobileAppsAndSDKsDescription": "ウェブサイトの追跡をしない場合は、代わりに%1$s利用可能なSDK%2$sの一つを使用して、モバイルアプリまたは他のタイプのアプリケーションをトラッキングできます。",
"NotAnEcommerceSite": "eコマースサイトではない",
"NotFound": "ウェブサイトが見つかりませんでした:",
"NoWebsites": "管理できるウェブサイトがありません。",
@@ -69,7 +73,10 @@
"SiteSearchUse": "Piwik を利用して、ビジターがウェブサイトの内部検索エンジンで検索しているものを追跡およびレポートすることができます。",
"SiteWithoutDataTitle": "まだデータは記録されていません",
"SiteWithoutDataDescription": "まだこのウエブサイトの分析データは追跡されていません。",
+ "SiteWithoutDataSetupTracking": "ウェブサイトあるいはモバイルアプリでトラッキングコードが未設定の場合は、下記の%1$sトラッキングコード%2$sを設定してください。",
"SiteWithoutDataMessageDisappears": "このメッセージは、このウェブサイトの一部のデータが追跡されるとすぐに消えます。",
+ "SiteWithoutDataSetupGoals": "それまでの間、 %1$sいくつかの目標を設定%2$sしたり、%5$sガイド%6$sや%7$sFAQ%8$sでもっと詳しいPiwikの%3$s機能%4$sを知ってください。",
+ "SiteWithoutDataIgnoreMessage": "次からこのメッセージを表示しない",
"SuperUserAccessCan": "スーパーユーザーアクセス権限を持つユーザーは、新しいウェブサイトに対し %1$s グローバルリストを指定 %2$s することもできます。",
"Timezone": "タイムゾーン",
"TrackingSiteSearch": "サイト内検索のトラッキング",
diff --git a/plugins/SitesManager/lang/pl.json b/plugins/SitesManager/lang/pl.json
index d9b044eb9a..f68c187fc8 100644
--- a/plugins/SitesManager/lang/pl.json
+++ b/plugins/SitesManager/lang/pl.json
@@ -1,16 +1,23 @@
{
"SitesManager": {
- "AddSite": "Dodaj nową stronę",
+ "AddSite": "Dodaj nowy serwis",
+ "AddMeasurable": "Dodaj nowy wskaźnik",
"AdvancedTimezoneSupportNotFound": "Zaawansowane wsparcie dla stref czasowych nie zostało wykryte w twoim środowisku PHP (wspierane od PHP>=5.2). Nadal jednak możesz wybrać je ręcznie jako UTC.",
- "AliasUrlHelp": "Zalecane jest, ale nie jako wymóg, określić różne adresy URL, jeden na linię, które odwiedzający używają do wejść na strony serwisu. Aliasy adresów URL dla serwisu internetowego nie zostaną ujęte w odsyłaczach > raportach stron. Można też zauważyć, że nie jest istotne ujęcie adresów URL z lub bez 'www', ponieważ Piwik automatycznie akceptuje oba typy.",
- "ChangingYourTimezoneWillOnlyAffectDataForward": "Zmiana strefy czasowej będzie miało wpływ tylko na kolejne dane, nie będzie miała wpływu wstecz na poprzednie zapisy.",
+ "AliasUrlHelp": "Zalecane jest, ale nie jako wymóg, określenie różnych adresów URL, jeden na linię, których odwiedzający używają do wejścia na strony serwisu. Aliasy adresów URL dla serwisu internetowego nie zostaną ujęte w odsyłaczach > raportach stron. Można też zauważyć, że nie jest istotne ujęcie adresów URL z lub bez 'www', ponieważ Piwik automatycznie akceptuje oba typy.",
+ "ChangingYourTimezoneWillOnlyAffectDataForward": "Zmiana strefy czasowej będzie miała wpływ tylko na kolejne dane, nie będzie miała wpływu na poprzednie zapisy.",
"ChooseCityInSameTimezoneAsYou": "Wybierz miasto w tej samej strefie czasowej co twoja.",
"Currency": "Waluta",
- "CurrencySymbolWillBeUsedForGoals": "Symbol waluty zostanie wyświetlony kolejno z dochodami z trafień.",
+ "CurrencySymbolWillBeUsedForGoals": "Symbol waluty zostanie wyświetlony przy wartościach dochodów z osiągniętych celów.",
"DefaultCurrencyForNewWebsites": "Domyślna waluta dla nowych stron",
"DefaultTimezoneForNewWebsites": "Domyślna strefa czasowa dla nowych stron",
"DeleteConfirm": "Czy jesteś pewien, że chcesz skasować stronę %s?",
- "ExceptionDeleteSite": "Nie jest możliwe skasowanie tej strony jako takiej tylko zarejestrowanej strony. Najpierw dodaj nową stronę, a wtedy dopiero skasuj tę jedną.",
+ "DisableSiteSearch": "Nie śledź wyszukiwarki serwisu",
+ "EcommerceHelp": "Po włączeniu w raporcie \"Cele\" pojawi się nowa sekcja \"Ecommerce\".",
+ "EnableEcommerce": "Ecommerce włączone",
+ "EnableSiteSearch": "Śledzenie wyszukiwarki serwisu włączone",
+ "EnableSiteSpecificUserAgentExclude": "Włącz specyficzne dla serwisu wykluczenia user agent.",
+ "EnableSiteSpecificUserAgentExclude_Help": "Jeśli potrzebujesz wykluczyć róznych user agent'ów dla różnych serwisów, zaznacz to pole, kliknij zapisz i %1$sdodaj powyżej user agent'ów%2$s.",
+ "ExceptionDeleteSite": "Nie jest możliwe skasowanie tej strony jako jedynej zarejestrowanej strony. Dodaj nową stronę, a następnie skasuj tą stronę.",
"ExceptionEmptyName": "Nazwa strony internetowej nie może być pusta.",
"ExceptionInvalidCurrency": "Podana waluta \"%1$s\" jest nieprawidłowa. Proszę wprowadzić poprawny symbol waluty (np. %2$s)",
"ExceptionInvalidIPFormat": "Adres IP do wykluczenia \"%1$s\" nie ma prawidłowego formatu IP (np. %2$s).",
@@ -18,34 +25,72 @@
"ExceptionInvalidUrl": "Adres url '%s' nie jest poprawnym adresem URL.",
"ExceptionNoUrl": "Musisz określić przynajmniej jeden adres URL dla strony serwisu.",
"ExcludedIps": "Wykluczone adresy IP",
- "ExcludedParameters": "Parametry wyłączone",
+ "ExcludedParameters": "Wykluczone parametry",
+ "ExcludedUserAgents": "Wykluczone User Agent",
+ "GlobalExcludedUserAgentHelp1": "Wprowadź listę user agent, które mają zostać wykluczone ze śledzenia przez Piwik'a.",
+ "GlobalExcludedUserAgentHelp2": "Możesz użyć tej funkcjonalności, aby wykluczyć ze śledzenia niektóre boty.",
"GlobalListExcludedIps": "Pełna lista wykluczonych adresów IP",
"GlobalListExcludedQueryParameters": "Pełna lista zapytań z adresami URL, które zostały wykluczone",
+ "GlobalListExcludedUserAgents": "Globalna lista wykluczonych user agent'ów",
+ "GlobalListExcludedUserAgents_Desc": "Jeśli user agent odwiedzającego zostanie dopasowany do wprowadzonych ciągów, odwiedzający zostanie wykluczony z Piwik'a.",
+ "GlobalSettings": "Ustawienia ogólne",
"GlobalWebsitesSettings": "Ogólna konfiguracja stron",
- "HelpExcludedIps": "Wprowadź listę adresów IP, po jednym w linii, które chcesz wykluczyć ze śledzenia przez Piwik. Możesz użyć wildcardsy, np. %1$s lub %2$s",
+ "HelpExcludedIps": "Wprowadź listę adresów IP, po jednym w linii, które chcesz wykluczyć ze śledzenia przez Piwik. Możesz użyć wildcard'ów, np. %1$s lub %2$s",
"JsTrackingTagHelp": "Oto kod śledzący w JavaScript do umieszczenia na wszystkich twoich stronach",
+ "KeepURLFragments": "Śledzenie fragmentów adresów URL strony",
+ "KeepURLFragmentsHelp": "Jeżeli przycisk wyboru (checkbox) poniżej nie jest zaznaczony, fragmenty zawarte w adresie strony (zawartość po prawej stronie %1$s) nie będzie wzięte pod uwagę przy śledzeniu: %2$szostanie rozpoznane jako %3$s",
+ "KeepURLFragmentsHelp2": "To ustawienie może zostać nadpisane dla wybranych serwisów, jak to powyższe.",
+ "KeepURLFragmentsLong": "Zachowaj fragmenty adresu URL podczas śledzenia",
"ListOfIpsToBeExcludedOnAllWebsites": "Adresy IP z listy poniżej zostaną wykluczone ze śledzonych na wszystkich stronach.",
"ListOfQueryParametersToBeExcludedOnAllWebsites": "Parametry dotyczące listy zapytań z adresami URL przedstawione poniżej zostaną wykluczone ze statystyk na wszystkich stronach.",
+ "ListOfQueryParametersToExclude": "Wprowadź listę parametrów zapytania z adresu, po jednym w linii, które mają być pominięte przy śledzeniu. Wyrażenia regularne takie jak %s są wspierane.",
+ "LogAnalytics": "Analiza logów",
+ "LogAnalyticsDescription": "Jeśli śledzenie przy pomocy kodu JavaScript nie jest dostępne, możesz %1$sskorzystać z analizy logów serwera%2$s, jako alternatywnej metody śledzenia użytkowników serwisu.",
"MainDescription": "Twoje raporty z analityką statystyczną stron wymagają posiadania serwisu internetowego! Dodaj, zaktualizuj, zmień serwis internetowy, i wyświetl kod JavaScript do umieszczenia na stronach.",
+ "MenuManage": "Zarządzaj",
+ "MobileAppsAndSDKs": "Aplikacje mobilne i SDK",
+ "MobileAppsAndSDKsDescription": "Nie śledzisz serwisu WWW? Alternatywnie możesz śledzić aplikację mobilną lub dowolny inny typ aplikacji korzystając z jednego z %1$sdostępnych SDK%2$s.",
"NotAnEcommerceSite": "Strona nie jest typu Ecommerce",
"NotFound": "Nie znaleziono stron dla",
"NoWebsites": "Nie posiadasz żadnej strony którą możesz zarządzać.",
"OnlyOneSiteAtTime": "W danym momencie możesz edytować tylko jedną ze stron. Zapisz lub zrezygnuj z wprowadzonych teraz modyfikacji dla strony %s.",
+ "PiwikOffersEcommerceAnalytics": "Piwik umożliwia zaawansowane raportowanie i śledzenie w dziedzinie E-commerce. Dowiedz się więcej o %1$sAnalityce E-commerce%2$s.",
"PiwikWillAutomaticallyExcludeCommonSessionParameters": "Piwik automatycznie wyklucza wspólne parametry sesji (%s).",
+ "PluginDescription": "Zarządzanie serwisami WWW pozwala Ci dodawać nowe i edytować istniejące serwisy.",
+ "SearchCategoryDesc": "Piwik umożliwia śledzenie kategorii wyszukiwania dla każdego słowa kluczowego wewnętrznej wyszukiwarki serwisu.",
"SearchCategoryLabel": "Parametr kategorii",
+ "SearchCategoryParametersDesc": "Możesz wprowadzić oddzielaną przecinkami listę parametrów zapytania określających kategorię wyszukiwania.",
"SearchKeywordLabel": "Parametr zapytania",
+ "SearchKeywordParametersDesc": "Wprowadź oddzielaną przecinkami listę wszystkich parametrów zapytania zawierajacych słowo kluczowe wyszukiwarki serwisu.",
+ "SearchParametersNote": "NOTKA: parametry Zapytania i Kategorii będą wykorzystywane tylko dla serwisów, które mają włączoną Wyszukiwarkę serwisu bez ustawionych tych parametrów.",
"SearchParametersNote2": "W celu zablokowania opcji Szukania na Stronie dla nowych stron, te dwa pola nalezy pozostawić puste.",
+ "SearchUseDefault": "Użyj %1$sdomyślnych%2$s parametrów wyszukiwarki serwisu",
"SelectACity": "Wybierz miasto",
"SelectDefaultCurrency": "Możesz wybrać walutę jako domyślną dla nowych stron.",
"SelectDefaultTimezone": "Możesz wybrać strefę czasową jako domyślną dla nowych stron.",
"ShowTrackingTag": "Zobacz kod śledzący",
"Sites": "Serwisy internetowe",
+ "SiteSearchUse": "Możesz używać Piwik'a do śledzenia i raportowania czego odwiedzający poszukują w wewnętrznej wyszukiwarce Twojego serwisu WWW.",
+ "SiteWithoutDataTitle": "Nie zapisano jeszcze żadnych danych",
+ "SiteWithoutDataDescription": "Nie przechwycono jeszcze żadnych danych analitycznych dla tego serwisu.",
+ "SiteWithoutDataSetupTracking": "Proszę dodaj %1$skod śledzący%2$s widoczny poniżej do Twojego serwisu WWW lub aplikacji mobilnej, jeśli jeszcze tego nie zrobiłeś\/aś.",
+ "SiteWithoutDataMessageDisappears": "Ta wiadomość zniknie zaraz po zarejestrowaniu danych z pierwszych odwiedzin serwisu.",
+ "SiteWithoutDataSetupGoals": "W międzyczasie, może zainteresuję Cię %1$skonfiguracja celów%2$s lub zechcesz dowiedzieć się więcej o %3$smożliwościach%4$s Piwik'a w jednym z naszych %5$sprzewodników%6$s lub %7$sFAQ%8$s.",
+ "SiteWithoutDataIgnoreMessage": "Nie pokazuj tej wiadomości przez najbliższą godzinę",
+ "SuperUserAccessCan": "Użytkownik z uprawnieniami Super Użytkownika może również %1$sskonfigurować ustawienia globalne%2$s nowych serwisów.",
"Timezone": "Strefa czasowa",
+ "TrackingSiteSearch": "Śledzenie wewnętrznej wyszukiwarki serwisu",
"TrackingTags": "Kod śledzący dla %s",
"Urls": "URLe",
+ "Type": "Typ",
"UTCTimeIs": "Czas UTC to %s.",
+ "OnlyMatchedUrlsAllowed": "Śledź odwiedziny i akcje tylko dla adresów zaczynających się od powyższych URL'i.",
+ "OnlyMatchedUrlsAllowedHelp": "Po włączeniu, Piwik będzie śledził wyłącznie wewnętrzne akcje tylko tych stron, których adresy należą do Twojego serwisu. To zapobiega spamowaniu Twoich analiz adresami innych serwisów.",
+ "OnlyMatchedUrlsAllowedHelpExamples": "Domena i ścieżka muszą być dokładnym dopasowaniem a każda ważna subdomena musi być osobno zdefiniowana. Gdy na przykład znanymi adresami URL są 'http:\/\/example.com\/path' i 'http:\/\/good.example.com', żądania śledzenia 'http:\/\/example.com\/otherpath' lub 'http:\/\/bad.example.com' będą ignorowane.",
"WebsitesManagement": "Zarządzanie serwisami",
- "YouCurrentlyHaveAccessToNWebsites": "Masz obecnie dostęp do stron w ilości %s.",
+ "XManagement": "Zarządzanie %s",
+ "ChooseMeasurableTypeHeadline": "Co chesz zmierzyć?",
+ "YouCurrentlyHaveAccessToNWebsites": "Masz obecnie dostęp do %s stron\/y.",
"YourCurrentIpAddressIs": "Twój obecny adres IP to %s"
}
} \ No newline at end of file
diff --git a/plugins/SitesManager/lang/sq.json b/plugins/SitesManager/lang/sq.json
index 172bd50d14..e7be6ca02d 100644
--- a/plugins/SitesManager/lang/sq.json
+++ b/plugins/SitesManager/lang/sq.json
@@ -76,6 +76,7 @@
"SiteWithoutDataSetupTracking": "Ju lutemi, rregulloni më poshtë %1$skodin e gjurmimit%2$s për sajtin apo aplikacionin tuaj për celular, po qe se s’e keni bërë ende.",
"SiteWithoutDataMessageDisappears": "Ky mesazh do të zhduket sapo të ketë ndoca të dhëna të ndjekura për këtë sajt.",
"SiteWithoutDataSetupGoals": "Ndërkohë, mund të donit ndoshta të %1$scaktoni ndonjë objektiv global%2$s ose të mësoni më tepër rreth %3$sveçorive%4$s të Piwik-ut, në një nga %5$sudhërrëgyesit%6$s tanë apo %7$sFAQ%8$s.",
+ "SiteWithoutDataIgnoreMessage": "Mos e shfaq këtë mesazh për orën pasuese",
"SuperUserAccessCan": "Një përdorues me hyrje Superpërdoruesi mundet gjithashtu %1$s të caktojë rregullime të përgjithshme%2$s për sajte të rinj.",
"Timezone": "Zonë kohore",
"TrackingSiteSearch": "Ndjekje Kërkimesh Brenda Sajti",
diff --git a/plugins/SitesManager/lang/zh-tw.json b/plugins/SitesManager/lang/zh-tw.json
index 837f3f2508..5e4ed1c9a1 100644
--- a/plugins/SitesManager/lang/zh-tw.json
+++ b/plugins/SitesManager/lang/zh-tw.json
@@ -76,6 +76,7 @@
"SiteWithoutDataSetupTracking": "請在你的網站或行動應用程式中設定%1$s追蹤程式碼%2$s(如果你還沒完成的話)。",
"SiteWithoutDataMessageDisappears": "此訊息將會在這個網站開始收集到追蹤資料時隱藏。",
"SiteWithoutDataSetupGoals": "同時,你或許會想要%1$s設定一些目標%2$s,或在我們的%5$s指南%6$s和 %7$sFAQs%8$s 中了解更多關於 Piwik 的%3$s功能%4$s。",
+ "SiteWithoutDataIgnoreMessage": "一小時內不顯示此訊息",
"SuperUserAccessCan": "一個擁有超級使用者權限的使用者也可以為新網站%1$s指定全域設定%2$s。",
"Timezone": "時區",
"TrackingSiteSearch": "追蹤站內搜尋",
diff --git a/plugins/TasksTimetable b/plugins/TasksTimetable
-Subproject eb4d9e1bb420277d980c2f87b37e0defc4b0013
+Subproject 81465a621984c2c11d9931bb0302526b454d104
diff --git a/plugins/Transitions/javascripts/transitions.js b/plugins/Transitions/javascripts/transitions.js
index 789cee2915..a8fb05a363 100644
--- a/plugins/Transitions/javascripts/transitions.js
+++ b/plugins/Transitions/javascripts/transitions.js
@@ -62,7 +62,11 @@ DataTable_RowActions_Transitions.prototype.performAction = function (label, tr,
var labelPart = labelParts[i].replace('@', '');
labelParts[i] = $.trim(decodeURIComponent(labelPart));
}
- label = labelParts.join(piwik.config.action_url_category_delimiter);
+ var delimiter = piwik.config.action_url_category_delimiter;
+ if(this.dataTable.param.action.indexOf('PageTitles') !== false) {
+ delimiter = piwik.config.action_title_category_delimiter;
+ }
+ label = labelParts.join(delimiter);
this.openPopover('title:' + label);
};
@@ -1571,7 +1575,7 @@ Piwik_Transitions_Util = {
*/
replacePlaceholderInHtml: function (container, value, spanClass) {
var span = container.find('span');
- if (span.size() == 0) {
+ if (!span.length) {
var html = container.html().replace(/%s/, '<span></span>');
span = container.html(html).find('span');
if (!spanClass) {
diff --git a/plugins/Transitions/lang/id.json b/plugins/Transitions/lang/id.json
index c9a2860398..4497b1cf50 100644
--- a/plugins/Transitions/lang/id.json
+++ b/plugins/Transitions/lang/id.json
@@ -4,6 +4,7 @@
"DirectEntries": "Masukan Langsung",
"ErrorBack": "Kembali ke aksi sebelumnya",
"ExitsInline": "%s keluar",
+ "NumDownloads": "%s unduhan",
"FromCampaigns": "Dari Kampanye",
"FromPreviousPages": "Dari Halaman Dalam",
"FromPreviousPagesInline": "%s dari halaman dalam",
diff --git a/plugins/Transitions/lang/pl.json b/plugins/Transitions/lang/pl.json
index 91a1aa43d1..045e8d9ca2 100644
--- a/plugins/Transitions/lang/pl.json
+++ b/plugins/Transitions/lang/pl.json
@@ -1,16 +1,31 @@
{
"Transitions": {
+ "BouncesInline": "%s porzuceń",
"DirectEntries": "Wejścia Bezpośrednie",
+ "ErrorBack": "Cofnij do poprzedniej akcji",
"ExitsInline": "%s wyjść",
+ "NumPageviews": "%s wyświetleń strony",
+ "NumDownloads": "%s pobrań",
+ "NumOutlinks": "%s linków zewnętrznych",
"FromCampaigns": "Z Kampanii",
- "FromPreviousSiteSearches": "Z wyszukiwarki wewnętrznej",
+ "FromPreviousPages": "Ze stron serwisu",
+ "FromPreviousPagesInline": "%s ze stron serwisu",
+ "FromPreviousSiteSearches": "Z wyszukiwarki serwisu",
+ "FromPreviousSiteSearchesInline": "%s z wyszukiwarki serwisu",
"FromSearchEngines": "Z wyszukiwarek",
"FromWebsites": "Ze stron",
"IncomingTraffic": "Ruch przychodzący",
"LoopsInline": "%s odświeżeń stron",
+ "NoDataForAction": "Brak danych dla %s",
+ "NoDataForActionDetails": "Akcja nie powodowała wyświetleń strony w czasie %s lub jest błędna.",
"OutgoingTraffic": "Ruch wychodzący",
+ "PluginDescription": "Prezentuje poprzednie i następne akcje dla każdej strony w raporcie Transitions, dostępne w raporcie Akcji poprzez nową ikonę.",
+ "ShareOfAllPageviews": "Wybrana strona miała %1$s wyświetleń (%2$s wszystkich wyświetleń)",
+ "ToFollowingPages": "Do stron wewnętrznych",
+ "ToFollowingPagesInline": "%s do stron wewnętrznych",
"ToFollowingSiteSearches": "Wyszukania Wewnętrzne",
"ToFollowingSiteSearchesInline": "%s wewnętrzne wyszukiwania",
+ "XOfAllPageviews": "%s wszystkich wyświetleń tej strony",
"XOutOfYVisits": "%1$s (z %2$s)"
}
} \ No newline at end of file
diff --git a/plugins/TreemapVisualization b/plugins/TreemapVisualization
-Subproject 3829d21e14b82f4b36a4eb548bf7a7e65f64df1
+Subproject 41631ecdc69bbf5f381aaadcf5c3216c224a9eb
diff --git a/plugins/UserCountry/API.php b/plugins/UserCountry/API.php
index c4e12b550a..76acdbb8f1 100644
--- a/plugins/UserCountry/API.php
+++ b/plugins/UserCountry/API.php
@@ -32,6 +32,26 @@ class API extends \Piwik\Plugin\API
{
$dataTable = $this->getDataTable(Archiver::COUNTRY_RECORD_NAME, $idSite, $period, $date, $segment);
+ $dataTables = [$dataTable];
+
+ if ($dataTable instanceof DataTable\Map) {
+ $dataTables = $dataTable->getDataTables();
+ }
+
+ foreach ($dataTables as $dt) {
+ if ($dt->getRowFromLabel('ti')) {
+ $dt->filter('GroupBy', array(
+ 'label',
+ function ($label) {
+ if ($label == 'ti') {
+ return 'cn';
+ }
+ return $label;
+ }
+ ));
+ }
+ }
+
// apply filter on the whole datatable in order the inline search to work (searches are done on "beautiful" label)
$dataTable->filter('AddSegmentValue');
$dataTable->filter('ColumnCallbackAddMetadata', array('label', 'code'));
@@ -75,6 +95,27 @@ class API extends \Piwik\Plugin\API
$separator = Archiver::LOCATION_SEPARATOR;
$unk = Visit::UNKNOWN_CODE;
+ // show visits tracked as Tibet as region of China
+ $dataTables = [$dataTable];
+
+ if ($dataTable instanceof DataTable\Map) {
+ $dataTables = $dataTable->getDataTables();
+ }
+
+ foreach ($dataTables as $dt) {
+ if ($dt->getRowFromLabel('1|ti')) {
+ $dt->filter('GroupBy', array(
+ 'label',
+ function ($label) {
+ if ($label == '1|ti') {
+ return '14|cn';
+ }
+ return $label;
+ }
+ ));
+ }
+ }
+
// split the label and put the elements into the 'region' and 'country' metadata fields
$dataTable->filter('ColumnCallbackAddMetadata',
array('label', 'region', __NAMESPACE__ . '\getElementFromStringArray', array($separator, 0, $unk)));
diff --git a/plugins/UserCountry/GeoIPAutoUpdater.php b/plugins/UserCountry/GeoIPAutoUpdater.php
index 77636afdd1..2c44ebb66d 100755
--- a/plugins/UserCountry/GeoIPAutoUpdater.php
+++ b/plugins/UserCountry/GeoIPAutoUpdater.php
@@ -268,7 +268,11 @@ class GeoIPAutoUpdater extends Task
}
$tempFile = GeoIp::getPathForGeoIpDatabase($tempFilename);
- rename($tempFile, $oldDbFile);
+ if (@rename($tempFile, $oldDbFile) !== true) {
+ //In case the $tempfile cannot be renamed, we copy the file.
+ copy($tempFile, $oldDbFile);
+ unlink($tempFile);
+ }
// delete original archive
if ($unlink) {
diff --git a/plugins/UserCountry/LocationProvider/GeoIp.php b/plugins/UserCountry/LocationProvider/GeoIp.php
index b37c3df3c8..247ae6035a 100755
--- a/plugins/UserCountry/LocationProvider/GeoIp.php
+++ b/plugins/UserCountry/LocationProvider/GeoIp.php
@@ -54,7 +54,6 @@ abstract class GeoIp extends LocationProvider
*/
public function completeLocationResult(&$location)
{
- $this->fixupLocation($location);
parent::completeLocationResult($location);
// set region name if region code is set
@@ -69,21 +68,6 @@ abstract class GeoIp extends LocationProvider
}
/**
- * Fix up data to work with our SVG maps which include 'Tib' boundaries
- */
- protected function fixupLocation(&$location)
- {
- if (!empty($location[self::REGION_CODE_KEY])
- && $location[self::REGION_CODE_KEY] == '14'
- && !empty($location[self::COUNTRY_CODE_KEY])
- && strtoupper($location[self::COUNTRY_CODE_KEY]) == 'CN'
- ) {
- $location[self::COUNTRY_CODE_KEY] = 'ti';
- $location[self::REGION_CODE_KEY] = '1';
- }
- }
-
- /**
* Returns true if this provider has been setup correctly, the error message if
* otherwise.
*
@@ -155,6 +139,12 @@ abstract class GeoIp extends LocationProvider
$countryCode = strtoupper($countryCode);
$regionCode = strtoupper($regionCode);
+ // ensure tibet is shown as region of china
+ if ($countryCode == 'TI' && $regionCode == '1') {
+ $regionCode = '14';
+ $countryCode = 'CN';
+ }
+
if (isset($regionNames[$countryCode][$regionCode])) {
return $regionNames[$countryCode][$regionCode];
} else {
diff --git a/plugins/UserCountry/ProfileSummary/LocationSummary.php b/plugins/UserCountry/ProfileSummary/LocationSummary.php
new file mode 100644
index 0000000000..2aee622b09
--- /dev/null
+++ b/plugins/UserCountry/ProfileSummary/LocationSummary.php
@@ -0,0 +1,80 @@
+<?php
+/**
+ * Piwik - free/libre analytics platform
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+
+namespace Piwik\Plugins\UserCountry\ProfileSummary;
+
+use Piwik\Common;
+use Piwik\Piwik;
+use Piwik\Plugins\Live;
+use Piwik\Plugins\Live\ProfileSummary\ProfileSummaryAbstract;
+use Piwik\Url;
+use Piwik\View;
+
+/**
+ * Class LocationSummary
+ *
+ * @api
+ */
+class LocationSummary extends ProfileSummaryAbstract
+{
+ /**
+ * @inheritdoc
+ */
+ public function getName()
+ {
+ return Piwik::translate('UserCountry_Location');
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function render()
+ {
+ if (empty($this->profile['countries'])) {
+ return '';
+ }
+
+ $view = new View('@UserCountry/_profileSummary.twig');
+ $view->visitorData = $this->profile;
+
+ if (Common::getRequestVar('showMap', 1) == 1
+ && !empty($view->visitorData['hasLatLong'])
+ && \Piwik\Plugin\Manager::getInstance()->isPluginLoaded('UserCountryMap')
+ ) {
+ $view->userCountryMapUrl = $this->getUserCountryMapUrlForVisitorProfile();
+ }
+
+ return $view->render();
+ }
+
+ private function getUserCountryMapUrlForVisitorProfile()
+ {
+ $params = array(
+ 'module' => 'UserCountryMap',
+ 'action' => 'realtimeMap',
+ 'segment' => Live\Controller::getSegmentWithVisitorId(),
+ 'visitorId' => false,
+ 'changeVisitAlpha' => 0,
+ 'removeOldVisits' => 0,
+ 'realtimeWindow' => 'false',
+ 'showFooterMessage' => 0,
+ 'showDateTime' => 0,
+ 'doNotRefreshVisits' => 1
+ );
+ return Url::getCurrentQueryStringWithParametersModified($params);
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function getOrder()
+ {
+ return 100;
+ }
+} \ No newline at end of file
diff --git a/plugins/UserCountry/Tasks.php b/plugins/UserCountry/Tasks.php
index 7033e9e597..cd351acbb6 100644
--- a/plugins/UserCountry/Tasks.php
+++ b/plugins/UserCountry/Tasks.php
@@ -8,12 +8,13 @@
*/
namespace Piwik\Plugins\UserCountry;
+use Piwik\SettingsPiwik;
class Tasks extends \Piwik\Plugin\Tasks
{
public function schedule()
{
// add the auto updater task if GeoIP admin is enabled
- if (UserCountry::isGeoLocationAdminEnabled()) {
+ if (UserCountry::isGeoLocationAdminEnabled() && SettingsPiwik::isInternetEnabled() === true) {
$this->scheduleTask(new GeoIPAutoUpdater());
}
}
diff --git a/plugins/UserCountry/UserCountry.php b/plugins/UserCountry/UserCountry.php
index 0e1fa71728..61e5925c37 100644
--- a/plugins/UserCountry/UserCountry.php
+++ b/plugins/UserCountry/UserCountry.php
@@ -37,27 +37,9 @@ class UserCountry extends \Piwik\Plugin
'Translate.getClientSideTranslationKeys' => 'getClientSideTranslationKeys',
'Tracker.setTrackerCacheGeneral' => 'setTrackerCacheGeneral',
'Insights.addReportToOverview' => 'addReportToInsightsOverview',
- 'Live.getAllVisitorDetails' => 'extendVisitorDetails'
);
}
- public function extendVisitorDetails(&$visitor, $details)
- {
- $instance = new Visitor($details);
-
- $visitor['continent'] = $instance->getContinent();
- $visitor['continentCode'] = $instance->getContinentCode();
- $visitor['country'] = $instance->getCountryName();
- $visitor['countryCode'] = $instance->getCountryCode();
- $visitor['countryFlag'] = $instance->getCountryFlag();
- $visitor['region'] = $instance->getRegionName();
- $visitor['regionCode'] = $instance->getRegionCode();
- $visitor['city'] = $instance->getCityName();
- $visitor['location'] = $instance->getPrettyLocation();
- $visitor['latitude'] = $instance->getLatitude();
- $visitor['longitude'] = $instance->getLongitude();
- }
-
public function addReportToInsightsOverview(&$reports)
{
$reports['UserCountry_getCountry'] = array();
diff --git a/plugins/UserCountry/Visitor.php b/plugins/UserCountry/Visitor.php
deleted file mode 100644
index 2a64fcca0d..0000000000
--- a/plugins/UserCountry/Visitor.php
+++ /dev/null
@@ -1,115 +0,0 @@
-<?php
-/**
- * Piwik - free/libre analytics platform
- *
- * @link http://piwik.org
- * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- *
- */
-namespace Piwik\Plugins\UserCountry;
-
-use Piwik\ArchiveProcessor;
-use Piwik\Common;
-use Piwik\Plugins\UserCountry\LocationProvider\GeoIp;
-use Piwik\Plugins\UserCountry\LocationProvider;
-use Piwik\Tracker\Visit;
-use Piwik\Url;
-
-require_once PIWIK_INCLUDE_PATH . '/plugins/UserCountry/functions.php';
-
-class Visitor
-{
- private $details = array();
-
- public function __construct($details)
- {
- $this->details = $details;
- }
-
- public function getCountryCode()
- {
- return $this->details['location_country'];
- }
-
- public function getCountryName()
- {
- return countryTranslate($this->getCountryCode());
- }
-
- public function getCountryFlag()
- {
- return getFlagFromCode($this->getCountryCode());
- }
-
- public function getContinent()
- {
- return continentTranslate($this->getContinentCode());
- }
-
- public function getContinentCode()
- {
- return Common::getContinent($this->details['location_country']);
- }
-
- public function getCityName()
- {
- if (!empty($this->details['location_city'])) {
- return $this->details['location_city'];
- }
-
- return null;
- }
-
- public function getRegionName()
- {
- $region = $this->getRegionCode();
- if ($region != '' && $region != Visit::UNKNOWN_CODE) {
- return GeoIp::getRegionNameFromCodes(
- $this->details['location_country'], $region);
- }
-
- return null;
- }
-
- public function getRegionCode()
- {
- return $this->details['location_region'];
- }
-
- public function getPrettyLocation()
- {
- $parts = array();
-
- $city = $this->getCityName();
- if (!empty($city)) {
- $parts[] = $city;
- }
- $region = $this->getRegionName();
- if (!empty($region)) {
- $parts[] = $region;
- }
-
- // add country & return concatenated result
- $parts[] = $this->getCountryName();
-
- return implode(', ', $parts);
- }
-
- public function getLatitude()
- {
- if (!empty($this->details['location_latitude'])) {
- return $this->details['location_latitude'];
- }
-
- return null;
- }
-
- public function getLongitude()
- {
- if (!empty($this->details['location_longitude'])) {
- return $this->details['location_longitude'];
- }
-
- return null;
- }
-} \ No newline at end of file
diff --git a/plugins/UserCountry/VisitorDetails.php b/plugins/UserCountry/VisitorDetails.php
new file mode 100644
index 0000000000..1458aea307
--- /dev/null
+++ b/plugins/UserCountry/VisitorDetails.php
@@ -0,0 +1,198 @@
+<?php
+/**
+ * Piwik - free/libre analytics platform
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+namespace Piwik\Plugins\UserCountry;
+
+use Piwik\Common;
+use Piwik\Plugins\Live;
+use Piwik\Plugins\Live\VisitorDetailsAbstract;
+use Piwik\Plugins\UserCountry\LocationProvider\GeoIp;
+use Piwik\Tracker\Visit;
+use Piwik\Url;
+use Piwik\View;
+
+require_once PIWIK_INCLUDE_PATH . '/plugins/UserCountry/functions.php';
+
+class VisitorDetails extends VisitorDetailsAbstract
+{
+ public function extendVisitorDetails(&$visitor)
+ {
+ $visitor['continent'] = $this->getContinent();
+ $visitor['continentCode'] = $this->getContinentCode();
+ $visitor['country'] = $this->getCountryName();
+ $visitor['countryCode'] = $this->getCountryCode();
+ $visitor['countryFlag'] = $this->getCountryFlag();
+ $visitor['region'] = $this->getRegionName();
+ $visitor['regionCode'] = $this->getRegionCode();
+ $visitor['city'] = $this->getCityName();
+ $visitor['location'] = $this->getPrettyLocation();
+ $visitor['latitude'] = $this->getLatitude();
+ $visitor['longitude'] = $this->getLongitude();
+ }
+
+ protected function getCountryCode()
+ {
+ return $this->details['location_country'];
+ }
+
+ protected function getCountryName()
+ {
+ return countryTranslate($this->getCountryCode());
+ }
+
+ protected function getCountryFlag()
+ {
+ return getFlagFromCode($this->getCountryCode());
+ }
+
+ protected function getContinent()
+ {
+ return continentTranslate($this->getContinentCode());
+ }
+
+ protected function getContinentCode()
+ {
+ return Common::getContinent($this->details['location_country']);
+ }
+
+ protected function getCityName()
+ {
+ if (!empty($this->details['location_city'])) {
+ return $this->details['location_city'];
+ }
+
+ return null;
+ }
+
+ protected function getRegionName()
+ {
+ $region = $this->getRegionCode();
+ if ($region != '' && $region != Visit::UNKNOWN_CODE) {
+ return GeoIp::getRegionNameFromCodes(
+ $this->details['location_country'], $region);
+ }
+
+ return null;
+ }
+
+ protected function getRegionCode()
+ {
+ return $this->details['location_region'];
+ }
+
+ protected function getPrettyLocation()
+ {
+ $parts = array();
+
+ $city = $this->getCityName();
+ if (!empty($city)) {
+ $parts[] = $city;
+ }
+ $region = $this->getRegionName();
+ if (!empty($region)) {
+ $parts[] = $region;
+ }
+
+ // add country & return concatenated result
+ $parts[] = $this->getCountryName();
+
+ return implode(', ', $parts);
+ }
+
+ protected function getLatitude()
+ {
+ if (!empty($this->details['location_latitude'])) {
+ return $this->details['location_latitude'];
+ }
+
+ return null;
+ }
+
+ protected function getLongitude()
+ {
+ if (!empty($this->details['location_longitude'])) {
+ return $this->details['location_longitude'];
+ }
+
+ return null;
+ }
+
+
+ private $cities = array();
+ private $countries = array();
+ private $continents = array();
+
+ public function initProfile($visits, &$profile)
+ {
+ $this->cities = array();
+ $this->continents = array();
+ $this->countries = array();
+ $profile['hasLatLong'] = false;
+ }
+
+ public function handleProfileVisit($visit, &$profile)
+ {
+ // realtime map only checks for latitude
+ $hasLatitude = $visit->getColumn('latitude') !== false;
+ if ($hasLatitude) {
+ $profile['hasLatLong'] = true;
+ }
+
+ $countryCode = $visit->getColumn('countryCode');
+ if (!isset($this->countries[$countryCode])) {
+ $this->countries[$countryCode] = 0;
+ }
+ ++$this->countries[$countryCode];
+
+ $continentCode = $visit->getColumn('continentCode');
+ if (!isset($this->continents[$continentCode])) {
+ $this->continents[$continentCode] = 0;
+ }
+ ++$this->continents[$continentCode];
+
+ if ($countryCode && !array_key_exists($countryCode, $this->cities)) {
+ $this->cities[$countryCode] = array();
+ }
+ $city = $visit->getColumn('city');
+ if (!empty($city)) {
+ $this->cities[$countryCode][] = $city;
+ }
+ }
+
+ public function finalizeProfile($visits, &$profile)
+ {
+ // transform country/continents/search keywords into something that will look good in XML
+ $profile['countries'] = $profile['continents'] = array();
+
+ // sort by visit/action
+ asort($this->continents);
+ foreach ($this->continents as $continentCode => $nbVisits) {
+ $profile['continents'][] = array(
+ 'continent' => $continentCode,
+ 'nb_visits' => $nbVisits,
+ 'prettyName' => \Piwik\Plugins\UserCountry\continentTranslate($continentCode)
+ );
+ }
+
+ // sort by visit/action
+ asort($this->countries);
+
+ foreach ($this->countries as $countryCode => $nbVisits) {
+ $countryInfo = array(
+ 'country' => $countryCode,
+ 'nb_visits' => $nbVisits,
+ 'flag' => \Piwik\Plugins\UserCountry\getFlagFromCode($countryCode),
+ 'prettyName' => \Piwik\Plugins\UserCountry\countryTranslate($countryCode)
+ );
+ if (!empty($this->cities[$countryCode])) {
+ $countryInfo['cities'] = array_unique($this->cities[$countryCode]);
+ }
+ $profile['countries'][] = $countryInfo;
+ }
+ }
+} \ No newline at end of file
diff --git a/plugins/UserCountry/functions.php b/plugins/UserCountry/functions.php
index 008e4786a5..afab257068 100644
--- a/plugins/UserCountry/functions.php
+++ b/plugins/UserCountry/functions.php
@@ -22,6 +22,10 @@ use Piwik\Tracker\Visit;
*/
function getFlagFromCode($code)
{
+ if (strtolower($code) == 'ti') {
+ $code = 'cn';
+ }
+
$pathInPiwik = 'plugins/Morpheus/icons/dist/flags/%s.png';
$pathWithCode = sprintf($pathInPiwik, $code);
$absolutePath = PIWIK_INCLUDE_PATH . '/' . $pathWithCode;
@@ -57,6 +61,10 @@ function countryTranslate($label)
return Piwik::translate('General_Unknown');
}
+ if (strtolower($label) == 'ti') {
+ $label = 'cn';
+ }
+
// Try to get name from Intl plugin
$key = 'Intl_Country_' . strtoupper($label);
$country = Piwik::translate($key);
diff --git a/plugins/UserCountry/lang/cs.json b/plugins/UserCountry/lang/cs.json
index 6b493e14d0..89e9ce80b1 100644
--- a/plugins/UserCountry/lang/cs.json
+++ b/plugins/UserCountry/lang/cs.json
@@ -16,7 +16,6 @@
"country_a2": "Satelitní poskytovatel",
"country_cat": "Katalánsky mluvící země",
"country_o1": "ostatní země",
- "country_ti": "Tibet",
"CurrentLocationIntro": "Podle tohoto poskytovatele je vaše aktuální umístění",
"DefaultLocationProviderDesc1": "Výchozí poskytovatel umístění odhaduje zemi návštěvníka na základě použitého jazyka.",
"DefaultLocationProviderDesc2": "To není příliš přesné, proto doporučujeme %1$sinstalovat a používat %2$sGEOIP%3$s.%4$s",
@@ -94,8 +93,4 @@
"UpdaterWasLastRun": "Aktualizátor byl naposledy spuštěn v %s.",
"UpdaterWillRunNext": "Další spuštění je naplánováno na %s.",
"WidgetLocation": "Umístění návštěvníka"
- },
- "Intl": {
- "Country_TI": "Tibet"
- }
} \ No newline at end of file
diff --git a/plugins/UserCountry/lang/da.json b/plugins/UserCountry/lang/da.json
index a6bffe4c11..0eeed96716 100644
--- a/plugins/UserCountry/lang/da.json
+++ b/plugins/UserCountry/lang/da.json
@@ -16,7 +16,6 @@
"country_a2": "Satellit udbyder",
"country_cat": "Catalansk-talende samfund",
"country_o1": "Andet land",
- "country_ti": "Tibet",
"CurrentLocationIntro": "I følge denne tjeneste er din aktuelle lokation",
"DefaultLocationProviderDesc1": "Standardlokationstjenesten gætter en besøgendes land baseret på det sprog de bruger.",
"DefaultLocationProviderDesc2": "Dette er ikke særlig nøjagtigt, så %1$svi anbefaler at du installerer og bruger %2$sGeoIP%3$s.%4$s",
@@ -94,8 +93,5 @@
"UpdaterWasLastRun": "Opdateringen blev sidst blev kørt den %s.",
"UpdaterWillRunNext": "Næste planlagte kørsel %s.",
"WidgetLocation": "Besøgendes lokation"
- },
- "Intl": {
- "Country_TI": "Tibet"
}
} \ No newline at end of file
diff --git a/plugins/UserCountry/lang/de.json b/plugins/UserCountry/lang/de.json
index 66a1ec0458..61aed3dd6d 100644
--- a/plugins/UserCountry/lang/de.json
+++ b/plugins/UserCountry/lang/de.json
@@ -16,7 +16,6 @@
"country_a2": "Satelliten-Anbieter",
"country_cat": "Katalanisch sprechende Gemeinden",
"country_o1": "Anderes Land",
- "country_ti": "Tibet",
"CurrentLocationIntro": "Gemäß diesem Provider ist Ihr derzeitiger Standort",
"DefaultLocationProviderDesc1": "Die voreingestellte Standorterkennung versucht das Herkunftsland des Besuchers anhand dessen verwendeter Sprache zu erkennen.",
"DefaultLocationProviderDesc2": "Dies ist nicht sehr genau, daher %1$swird empfohlen %2$sGeoIP%3$s zu installieren und zu nutzen.%4$s",
@@ -29,7 +28,7 @@
"FromDifferentCities": "Unterschiedliche Städte",
"GeoIPCannotFindMbstringExtension": "Konnte die Funktion %1$s nicht finden. Bitte stellen Sie sicher, dass die %2$s Erweiterung installiert und geladen ist.",
"GeoIPDatabases": "GeoIP Datenbanken",
- "GeoIPDocumentationSuffix": "Um Daten für diesen Bericht sehen zu können, müssen Sie GeoIP im Standorterkennung Administrations-Reiter konfigurieren. Die kommerziellen %1$sMaxmind%2$s GeoIP Datenbanken sind weit genauer als die kostenlosen. Um zu sehen wie genau sie sind, klicken Sie %3$shier%4$s.",
+ "GeoIPDocumentationSuffix": "Um Daten für diesen Bericht sehen zu können, müssen Sie GeoIP im Standorterkennung Administrations-Reiter konfigurieren. Die kommerziellen %1$sMaxmind%2$s GeoIP Datenbanken sind weit genauer als die kostenlosen. Um zu sehen, wie genau sie sind, klicken Sie %3$shier%4$s.",
"GeoIPImplHasAccessTo": "Die GeoIP Implementierung hat Zugriff auf die folgenden Datenbanktypen",
"GeoIPIncorrectDatabaseFormat": "Ihre GeoIP Datenbank scheint nicht das korrekte Format zu haben. Möglicherweise ist diese beschädigt. Stellen Sie sicher, dass Sie die binäre Version verwenden und versuchen Sie diese durch eine andere Kopie zu ersetzen.",
"GeoIpLocationProviderDesc_Pecl1": "Diese Standorterkennung verwendet eine GeoIP-Datenbank sowie ein PECL-Modul um den Standort der Besucher effizient und genau zu bestimmen.",
@@ -37,7 +36,7 @@
"GeoIpLocationProviderDesc_Php1": "Diese Art der Standortbestimmung ist am einfachsten zu installieren, da Sie keine Serverkonfiguration benötigt (Ideal für Shared Hosting!). Sie verwendet eine GeoIP-Datenbank und die PHP-API von MaxMind um den Standort eines Besuchers genau zu bestimmen.",
"GeoIpLocationProviderDesc_Php2": "Falls Ihre Website viel Traffic hat, könnte Ihnen diese Standorterkennung zu langsam sein. In diesem Fall sollten Sie die %1$sPECL-Erweiterung%2$s oder ein %3$sServer-Modul%4$s installieren.",
"GeoIpLocationProviderDesc_ServerBased1": "Diese Art der Standortbestimmung verwendet das GeoIP-Modul das auf ihrem HTTP-Server installiert ist. Diese ist am schnellsten und genauesten, aber %1$skann nur bei normalem Browser-Tracking benutzt werden%2$s",
- "GeoIpLocationProviderDesc_ServerBased2": "Falls Sie Protokolldateien oder andere Dinge importieren welche IP-Adressen enthalten können Sie die %1$sPECL GeoIP Implementierung (empfohlen)%2$s oder die %3$sPHP GeoIP Implementierung%4$s wählen.",
+ "GeoIpLocationProviderDesc_ServerBased2": "Falls Sie Protokolldateien oder andere Dinge importieren, welche IP-Adressen enthalten, können Sie die %1$sPECL GeoIP Implementierung (empfohlen)%2$s oder die %3$sPHP GeoIP Implementierung%4$s wählen.",
"GeoIpLocationProviderDesc_ServerBasedAnonWarn": "Hinweis: IP-Anonymisierung hat keinen Einfluss auf diese Art der Standortbestimmung. Stellen Sie sicher, dass die Benutzung mit IP-Anonymisierung nicht im Widerspruch zu Privatsphärebestimmungen steht, die für Sie gelten.",
"GeoIpLocationProviderNotRecomnended": "Standorterkennung funktioniert, aber Sie nutzen keinen der empfohlenen Anbieter.",
"GeoIPNoServerVars": "Piwik konnte keine GeoIP %s Variablen finden.",
@@ -48,10 +47,10 @@
"GeoLiteCityLink": "Falls Sie die GeoLite Städte Datenbank verwenden, benutzen Sie diesen Link: %1$s%2$s%3$s.",
"Geolocation": "Standorterkennung",
"GeolocationPageDesc": "Auf dieser Seite können Sie einstellen auf welche Weise Piwik die Herkunft eines Besuchers ermittelt.",
- "getCityDocumentation": "Dieser Bericht enthält die Städte, in denen sich Ihre Besucher befanden als sie Ihre Website besuchten.",
- "getContinentDocumentation": "Dieser Bericht enthält die Kontinente auf denen sich Ihre Besucher befanden als sie Ihre Website besuchten.",
- "getCountryDocumentation": "Dieser Bericht enthält die Länder in denen sich Ihre Besucher befanden als sie Ihre Website besuchten.",
- "getRegionDocumentation": "Dieser Bericht enthält die Regionen in denen sich Ihre Besucher befanden als sie Ihre Website besuchten.",
+ "getCityDocumentation": "Dieser Bericht enthält die Städte, in denen sich Ihre Besucher befanden, als sie Ihre Website besuchten.",
+ "getContinentDocumentation": "Dieser Bericht enthält die Kontinente, auf denen sich Ihre Besucher befanden, als sie Ihre Website besuchten.",
+ "getCountryDocumentation": "Dieser Bericht enthält die Länder, in denen sich Ihre Besucher befanden, als sie Ihre Website besuchten.",
+ "getRegionDocumentation": "Dieser Bericht enthält die Regionen, in denen sich Ihre Besucher befanden, als sie Ihre Website besuchten.",
"HowToInstallApacheModule": "Wie wird das GeoIP-Modul für Apache installiert?",
"HowToInstallGeoIPDatabases": "Woher bekommt man die GeoIP-Datenbanken?",
"HowToInstallGeoIpPecl": "Wie wird die GeoIP PECL Erweiterung installiert?",
@@ -94,8 +93,5 @@
"UpdaterWasLastRun": "Die Aktualisierung wurde zuletzt ausgeführt am %s.",
"UpdaterWillRunNext": "Nächste Ausführung geplant für %s.",
"WidgetLocation": "Besucherstandort"
- },
- "Intl": {
- "Country_TI": "Tibet"
}
} \ No newline at end of file
diff --git a/plugins/UserCountry/lang/el.json b/plugins/UserCountry/lang/el.json
index ae15673e31..2477f6fd0c 100644
--- a/plugins/UserCountry/lang/el.json
+++ b/plugins/UserCountry/lang/el.json
@@ -16,7 +16,6 @@
"country_a2": "Πάροχος δορυφόρου",
"country_cat": "Καταλανικόφωνες κοινότητες",
"country_o1": "Άλλη Χώρα",
- "country_ti": "Θιβέτ",
"CurrentLocationIntro": "Σύμφωνα με τον πάροχο, η τρέχουσα τοποθεσία σας είναι",
"DefaultLocationProviderDesc1": "Ο προεπιλεγμένος πάροχος θέσης εικάζει τη χώρα του επισκέπτη με βάση τη γλώσσα που χρησιμοποιεί.",
"DefaultLocationProviderDesc2": "Αυτό δεν είναι πολύ ακριβές, έτσι %1$sπροτείνουμε την εγκατάσταση και τη χρήση %2$sGeoIP%3$s.%4$s",
@@ -94,8 +93,5 @@
"UpdaterWasLastRun": "Το πρόγραμμα ενημέρωσης εκτελέστηκε τελευταία στις %s.",
"UpdaterWillRunNext": "Είναι προγραμματισμένο για εκτέλεση στις %s.",
"WidgetLocation": "Τοποθεσία Επισκέπτη"
- },
- "Intl": {
- "Country_TI": "Θιβέτ"
}
} \ No newline at end of file
diff --git a/plugins/UserCountry/lang/en.json b/plugins/UserCountry/lang/en.json
index 1b470f2a13..80eafa2349 100644
--- a/plugins/UserCountry/lang/en.json
+++ b/plugins/UserCountry/lang/en.json
@@ -16,7 +16,6 @@
"country_a2": "Satellite Provider",
"country_cat": "Catalan-speaking communities",
"country_o1": "Other Country",
- "country_ti": "Tibet",
"CurrentLocationIntro": "According to this provider, your current location is",
"DefaultLocationProviderDesc1": "The default location provider guesses a visitor's country based on the language they use.",
"DefaultLocationProviderDesc2": "This is not very accurate, so %1$swe recommend installing and using %2$sGeoIP%3$s.%4$s",
@@ -94,8 +93,5 @@
"UpdaterWasLastRun": "The updater was last run on %s.",
"UpdaterWillRunNext": "It is next scheduled to run on %s.",
"WidgetLocation": "Visitor Location"
- },
- "Intl": {
- "Country_TI": "Tibet"
}
} \ No newline at end of file
diff --git a/plugins/UserCountry/lang/es.json b/plugins/UserCountry/lang/es.json
index 1d1855be8f..b292350f34 100644
--- a/plugins/UserCountry/lang/es.json
+++ b/plugins/UserCountry/lang/es.json
@@ -16,7 +16,6 @@
"country_a2": "Proveedor Satelital",
"country_cat": "Comunidades de habla catalana",
"country_o1": "Otro país",
- "country_ti": "Tibet",
"CurrentLocationIntro": "De acuerdo a este proveedor, su actual ubicación es",
"DefaultLocationProviderDesc1": "La ubicación predeterminada del proveedor asume que el país del visitante es por el lenguaje que el mismo utiliza.",
"DefaultLocationProviderDesc2": "No es muy preciso, por lo tanto %1$srecomendamos instalar y utilizar %2$sGeoIP%3$s.%4$s",
@@ -94,8 +93,5 @@
"UpdaterWasLastRun": "El actualizador se ejecutó por última vez en %s.",
"UpdaterWillRunNext": "Está programada la ejecución para el %s.",
"WidgetLocation": "Ubicación del visitante"
- },
- "Intl": {
- "Country_TI": "Tíbet"
}
} \ No newline at end of file
diff --git a/plugins/UserCountry/lang/et.json b/plugins/UserCountry/lang/et.json
index cd8592b7f2..362ed4a635 100644
--- a/plugins/UserCountry/lang/et.json
+++ b/plugins/UserCountry/lang/et.json
@@ -8,7 +8,6 @@
"country_a2": "Satelliidi pakkuja",
"country_cat": "Katalaani kommuunid",
"country_o1": "Muu riik",
- "country_ti": "Tiibet",
"CurrentLocationIntro": "Antud pakkuja andmete alusel on sinu praegune asukoht",
"DistinctCountries": "%s eri riigist",
"DownloadingDb": "Laen alla %s",
@@ -31,8 +30,5 @@
"SubmenuLocations": "Asukohad",
"UpdaterWasLastRun": "Uuendaja käivitus viimati %s.",
"WidgetLocation": "Külastajate asukohad"
- },
- "Intl": {
- "Country_TI": "Tiibet"
}
} \ No newline at end of file
diff --git a/plugins/UserCountry/lang/fi.json b/plugins/UserCountry/lang/fi.json
index 1cb6e70cb2..98ea0c0518 100644
--- a/plugins/UserCountry/lang/fi.json
+++ b/plugins/UserCountry/lang/fi.json
@@ -16,7 +16,6 @@
"country_a2": "Satelliittiyhteys",
"country_cat": "Katalaania puhuvat alueet",
"country_o1": "Muu maa",
- "country_ti": "Tiibet",
"CurrentLocationIntro": "Tämän toteutuksen mukaan nykyinen sijaintisi on",
"DefaultLocationProviderDesc1": "Oletustoteutus arvaa käyttäjien maan kielen perusteella.",
"DefaultLocationProviderDesc2": "Tämä ei ole erityisen tarkkaa, joten %1$ssuosittelemme asentamaan ja käyttämään %2$sGeoIp:tä%3$s.%4$s",
diff --git a/plugins/UserCountry/lang/fr.json b/plugins/UserCountry/lang/fr.json
index 2298c5b26c..7a2f1c545c 100644
--- a/plugins/UserCountry/lang/fr.json
+++ b/plugins/UserCountry/lang/fr.json
@@ -16,7 +16,6 @@
"country_a2": "Fournisseur satellite",
"country_cat": "Communautés de langue Catalane",
"country_o1": "Autre pays",
- "country_ti": "Tibet",
"CurrentLocationIntro": "D'après ce fournisseur, votre emplacement actuel est",
"DefaultLocationProviderDesc1": "Le fournisseur de localisation par défaut devine le pays d'un visiteur en se basant sur le langage de son navigateur.",
"DefaultLocationProviderDesc2": "Ce n'est pas très précis, nous recommandons donc %1$sd'installer et d'utiliser %2$sGeoIP%3$s.%4$s",
@@ -94,8 +93,5 @@
"UpdaterWasLastRun": "La dernière mise à jour a été effectuée le %s.",
"UpdaterWillRunNext": "Est planifié pour s'exécuter le %s.",
"WidgetLocation": "Emplacement du visiteur"
- },
- "Intl": {
- "Country_TI": "Tibet"
}
} \ No newline at end of file
diff --git a/plugins/UserCountry/lang/gl.json b/plugins/UserCountry/lang/gl.json
index ddff4606a2..6f61031de1 100644
--- a/plugins/UserCountry/lang/gl.json
+++ b/plugins/UserCountry/lang/gl.json
@@ -3,7 +3,6 @@
"Continent": "Continente",
"Country": "País",
"country_o1": "Outro país",
- "country_ti": "Tíbet",
"DistinctCountries": "%s continentes distintos",
"DownloadingDb": "A descargar %s",
"DownloadNewDatabasesEvery": "Actualizar as bases de datos cada",
diff --git a/plugins/UserCountry/lang/hi.json b/plugins/UserCountry/lang/hi.json
index aab14d968c..bfd8b7fc9a 100644
--- a/plugins/UserCountry/lang/hi.json
+++ b/plugins/UserCountry/lang/hi.json
@@ -15,7 +15,6 @@
"country_a2": "सैटेलाइट प्रदाता",
"country_cat": "कैटलन भाषी समुदायों",
"country_o1": "अन्य देश",
- "country_ti": "तिब्बत",
"CurrentLocationIntro": "इस प्रदाता के अनुसार, आपका वर्तमान स्थान है",
"DefaultLocationProviderDesc1": "एक आगंतुक का देश डिफ़ॉल्ट स्थान प्रदाता के अनुमान का इस्तेमाल वे भाषा के आधार पर करते है.",
"DefaultLocationProviderDesc2": "यह बहुत सही नहीं है, तो %1$sहम स्थापित करने और %2$sGeoIP%3$s का उपयोग करना चाहिये.%4$s",
diff --git a/plugins/UserCountry/lang/id.json b/plugins/UserCountry/lang/id.json
index efc27e6e38..dd015b1c10 100644
--- a/plugins/UserCountry/lang/id.json
+++ b/plugins/UserCountry/lang/id.json
@@ -16,7 +16,6 @@
"country_a2": "Penyedia Satelit",
"country_cat": "Masyarakat berbahasa Katalan",
"country_o1": "Negara Lain",
- "country_ti": "Tibet",
"CurrentLocationIntro": "Berdasar penyedia ini, lokasi Anda adalah",
"DefaultLocationProviderDesc1": "Lokasi penyedia asali menebak negara pengunjung dari bahasa yang digunakan.",
"DefaultLocationProviderDesc2": "Ini sangat tidak teliti, serta %1$skami menyarankan memasang dan menggunakan %2$sGeoIP%3$s.%4$s",
diff --git a/plugins/UserCountry/lang/it.json b/plugins/UserCountry/lang/it.json
index 50c957751b..d0355e339b 100644
--- a/plugins/UserCountry/lang/it.json
+++ b/plugins/UserCountry/lang/it.json
@@ -16,7 +16,6 @@
"country_a2": "Satellite Provider",
"country_cat": "Comunità che parlano catalano",
"country_o1": "Altri Paesi",
- "country_ti": "Tibet",
"CurrentLocationIntro": "In base a questo provider, la tua posizione attuale è",
"DefaultLocationProviderDesc1": "L'individuatore di posizione predefinito desume il paese di un visitatore dalla lingua utilizzata.",
"DefaultLocationProviderDesc2": "Quasta non è molto accurata, dunque %1$snoi raccomandiamo di installare e utilizzare %2$sGeoIP%3$s.%4$s",
@@ -94,8 +93,5 @@
"UpdaterWasLastRun": "Il programma di aggiornamento è stato eseguito per l'ultima volta il %s.",
"UpdaterWillRunNext": "È programmato per essere eseguito il %s.",
"WidgetLocation": "Posizione Visitatore"
- },
- "Intl": {
- "Country_TI": "Tibet"
}
} \ No newline at end of file
diff --git a/plugins/UserCountry/lang/ja.json b/plugins/UserCountry/lang/ja.json
index 66e2703f62..e2bbbc3573 100644
--- a/plugins/UserCountry/lang/ja.json
+++ b/plugins/UserCountry/lang/ja.json
@@ -16,10 +16,9 @@
"country_a2": "衛星プロバイダ",
"country_cat": "カタロニア語圏のコミュニティ",
"country_o1": "その他の国",
- "country_ti": "チベット",
"CurrentLocationIntro": "このプロバイダーによると、あなたの現在地は",
"DefaultLocationProviderDesc1": "デフォルトロケーションプロバイダーでは、ビジターの国は使用言語に基づいて推測されます。",
- "DefaultLocationProviderDesc2": "これは正確ではありません。%1$swe recommend installing and using %2$sGeoIP%3$s。%4$s",
+ "DefaultLocationProviderDesc2": "精度が低いため、%1$s%2$sGeoIP%3$sのインストールと使用をお勧めします。%4$s",
"DefaultLocationProviderExplanation": "デフォルトロケーションプロバイダーを使用しています。Piwik はビジターの位置情報を使用言語に基づいて推測します。より正確な位置情報探索機能をセットアップする方法は、%1$sRead this%2$s 。",
"DistinctCountries": "%s 個別の国々",
"DownloadingDb": "ダウンロード中 %s",
@@ -35,9 +34,9 @@
"GeoIpLocationProviderDesc_Pecl1": "正確に効率的にビジターの位置を決定するため、この位置情報プロバイダーは、GeoIP データベースと PECL モジュールを使用します。",
"GeoIpLocationProviderDesc_Pecl2": "このプロバイダーは 制限がないため、Piwik が推奨するプロバイダーの一つです。",
"GeoIpLocationProviderDesc_Php1": "サーバー設定 (共有ホスティングが理想です!) が必要ないため、この位置情報プロバイダーは非常に簡単にインストールできます。ビジターの位置情報を正確に決定するために、GeoIP データベースと MaxMind の PHP API を使用します。",
- "GeoIpLocationProviderDesc_Php2": "あなたのウェブサイトに多くのトラフィックがある場合、位置情報プロバイダーの動作が非常に重く感じられるかもしれません。もしそのように感じられる場合、%1$sPECL extension%2$s または %3$sserver module%4$sをインストールすることをお勧めします。",
- "GeoIpLocationProviderDesc_ServerBased1": "この位置情報プロバイダーは、お使いの HTTP サーバーに既にインストールされている GeoIP モジュールを使用します。このプロバイダーは早く、正確ですが、 %1$scan only be used with normal browser tracking.%2$s",
- "GeoIpLocationProviderDesc_ServerBased2": "ログファイルをインポートする必要がある場合、または IP アドレス設定を伴う作業を実行する必要がある場合、%1$sPECL GeoIP implementation (recommended)%2$s または %3$sPHP GeoIP implementation%4$s をご利用ください。",
+ "GeoIpLocationProviderDesc_Php2": "ウェブサイトのトラフィックが多い場合、位置情報プロバイダーの動作が非常に重く感じられるかもしれません。そのような場合は、%1$sPECL 拡張モジュール%2$s または %3$sサーバーモジュール %4$sをインストールすることをお勧めします。",
+ "GeoIpLocationProviderDesc_ServerBased1": "このロケーションプロバイダーは、HTTPサーバーにインストールされているGeoIPモジュールを使用します。 このプロバイダは高速で正確ですが、%1$s通常のブラウザトラッキングでのみ使用できます。%2$s",
+ "GeoIpLocationProviderDesc_ServerBased2": "ログファイルをインポートする必要がある場合やIPアドレスの設定が必要な場合は、%1$sPECL GeoIP実装(推奨)%2$sまたは%3$sPHP GeoIP実装%4$sを使用してください。",
"GeoIpLocationProviderDesc_ServerBasedAnonWarn": "注) このプロバイダーにより報告された位置情報は、IP の匿名化による影響を受けません。IP 匿名化をご利用になる前に、必ず利用者が遵守すべきあらゆるプライバシーに関する法律に違反しないことをご確認ください。",
"GeoIpLocationProviderNotRecomnended": "位置情報探索機能は作動していますが、ご利用中のプロバイダーは推奨プロバイダーではありません。",
"GeoIPNoServerVars": "任意の GeoIP %s 変数を見つける事ができません。",
@@ -94,8 +93,5 @@
"UpdaterWasLastRun": "アップデーターは、%s の最後に実行されました。",
"UpdaterWillRunNext": "それは次に %s で実行されるようスケジュールされています。",
"WidgetLocation": "ビジターの位置"
- },
- "Intl": {
- "Country_TI": "チベット"
}
} \ No newline at end of file
diff --git a/plugins/UserCountry/lang/ko.json b/plugins/UserCountry/lang/ko.json
index 7d4a215095..9e9fa81ee2 100644
--- a/plugins/UserCountry/lang/ko.json
+++ b/plugins/UserCountry/lang/ko.json
@@ -16,7 +16,6 @@
"country_a2": "위성 공급자",
"country_cat": "카탈로니아 지역의 커뮤니티",
"country_o1": "기타 국가",
- "country_ti": "티베트",
"CurrentLocationIntro": "이 공급자에 따르면, 현재 위치는",
"DefaultLocationProviderDesc1": "방문자의 국가에 기반하는 언어에서 추측하는 기본 위치 공급자입니다.",
"DefaultLocationProviderDesc2": "이것은 매우 부정확합니다. 그래서 %1$s우리는 %2$sGeoIP%3$s를 설치하여 사용하는 것을 추천합니다.%4$s",
@@ -94,8 +93,5 @@
"UpdaterWasLastRun": "%s에 마지막 업데이트 확인",
"UpdaterWillRunNext": "%s에 실행이 계획되어 있습니다.",
"WidgetLocation": "방문자 위치"
- },
- "Intl": {
- "Country_TI": "티베트"
}
} \ No newline at end of file
diff --git a/plugins/UserCountry/lang/nl.json b/plugins/UserCountry/lang/nl.json
index 64d6746ae8..30a0a1fbd5 100644
--- a/plugins/UserCountry/lang/nl.json
+++ b/plugins/UserCountry/lang/nl.json
@@ -16,7 +16,6 @@
"country_a2": "Satellite Provider",
"country_cat": "Catalaans-sprekende gemeenschappen",
"country_o1": "Ander land",
- "country_ti": "Tibet",
"CurrentLocationIntro": "Volgens deze provider is je huidige locatie",
"DefaultLocationProviderDesc1": "De standaard locatie provider gokt een bezoekers land gebaseerd op de taal die ze gebruiken.",
"DefaultLocationProviderDesc2": "Dit is niet erg nauwkeurig, %1$swe adviseren %2$sGeoIP%3$s. te installeren en gebruiken.%4$s",
@@ -89,8 +88,5 @@
"UpdaterWasLastRun": "De updater is voor het laatst uitgevoerd op %s.",
"UpdaterWillRunNext": "De volgende run is gepland om %s",
"WidgetLocation": "Bezoekerlocatie"
- },
- "Intl": {
- "Country_TI": "Tibet"
}
} \ No newline at end of file
diff --git a/plugins/UserCountry/lang/pl.json b/plugins/UserCountry/lang/pl.json
index b6f305be59..5158f6f2cc 100644
--- a/plugins/UserCountry/lang/pl.json
+++ b/plugins/UserCountry/lang/pl.json
@@ -1,33 +1,46 @@
{
"UserCountry": {
- "AssumingNonApache": "Nie można znaleźć funkcji apache_get_modules co oznacza serwer nie będący typu Apache.",
+ "AssumingNonApache": "Nie można znaleźć funkcji apache_get_modules co oznacza, że zainstalowano serwer inny niż Apache.",
+ "CannotFindGeoIPDatabaseInArchive": "Nie udało się odnaleźć pliku %1$s w archiwum tar %2$s!",
+ "CannotFindGeoIPServerVar": "Zmienna %s nie została ustawiona. Twój serwer mógł zostać niepoprawnie skonfigurowany.",
+ "CannotFindPeclGeoIPDb": "Nie udało się odnaleźć bazy danych kraju, regionu lub miasta wykorzystywanej przez moduł GeoIP PECL. Upewnij się, że Twoja baza danych znajduje się w %1$s i nazywa się %2$s lub %3$s. W przeciwnym przypadku moduł PECL nie będzie w stanie z niej skorzystać.",
"CannotListContent": "Błąd wyświetlenia zawartości %1$s: %2$s",
"CannotLocalizeLocalIP": "Adres IP %s jest adresem lokalnym i nie można go poddać geolokacji.",
- "CannotUnzipDatFile": "Błąd rozpakowania pliki dat w %1$s: %2$s",
+ "CannotSetupGeoIPAutoUpdating": "Zdaje się, że przechowujesz swoje bazy GeoIP poza Piwik'ie (możemy to stwierdzić ponieważ brakuje ich w katalogu misc Piwik'a, ale geolokalizacja działa). W takim przypadku Piwik nie będzie w stanie automatycznie aktualizować baz GeoIP.",
+ "CannotUnzipDatFile": "Nie udało się rozpakować plików dat w %1$s: %2$s",
"City": "Miasto",
"CityAndCountry": "%1$s, %2$s",
"Continent": "Kontynent",
"Country": "Kraj",
- "country_a1": "Anonymous Proxy",
+ "country_a1": "Anonimowe Proxy",
"country_a2": "Dostawca satelitarny",
"country_cat": "społeczność mówiąca po Katalońsku",
"country_o1": "Nieokreślony kraj pochodzenia",
"CurrentLocationIntro": "Według tego dostawcy, twoją aktualną lokalizacją jest",
"DefaultLocationProviderDesc1": "Domyślny dostawca usług geolokacyjnych zgaduje państwo odwiedzającego na podstawie języka używanego w przeglądarce.",
- "DistinctCountries": "%s wyróżniających się krajów",
+ "DefaultLocationProviderDesc2": "Ten sposób określania lokalizacji jest bardzo niedokładny, dlatego %1$szalecamy zainstalowanie i korzystanie z %2$sGeoIP%3$s. %4$s",
+ "DefaultLocationProviderExplanation": "Korzystasz z domyślnego dostawcy usług geolokalizacyjnych, co oznacza, że Piwik zgaduje lokalizację odwiedzającego na podstawie języka jego przeglądarki. %1$sPrzeczytaj%2$s aby dowiedzieć się jak skonfigurować dokładniejszą geolokalizację.",
+ "DistinctCountries": "%s różnych krajów",
"DownloadingDb": "Pobieranie %s",
"DownloadNewDatabasesEvery": "Zaktualizuj bazę danych co",
+ "FatalErrorDuringDownload": "Podczas pobierania pliku wystąpił błąd krytyczny. Coś mogło się stać z Twoim połączeniem internetowym, pobieraną bazą GeoIP lub Piwik'iem.Spróbuj pobrać i zainstalować ręcznie.",
"FoundApacheModules": "Piwik znalazł następujące moduły Apache",
"FromDifferentCities": "różne miasta",
- "GeoIPDatabases": "Baza danych GeoIP",
+ "GeoIPCannotFindMbstringExtension": "Nie udało się odnaleźć funkcji %1$s. Proszę upewnij się, że rozszerzenie %2$s jest zainstalowane i załadowane.",
+ "GeoIPDatabases": "Bazy danych GeoIP",
+ "GeoIPDocumentationSuffix": "W celu wyświetlenia danych tego raportu konieczna jest konfiguracja GeoIP w zakładce Geolokalizacja panelu administracyjnego. Płatne bazy GeoIP dostarczane przez %1$sMaxmind%2$s cechuje wyższa dokładność od baz bezpłatnych. Aby porównać ich dokładność kliknij %3$stutaj%4$s.",
"GeoIPImplHasAccessTo": "Ta implementacja GeoIP ma dostęp do następujących typów baz danych",
- "GeoIPIncorrectDatabaseFormat": "Twoja baza GeoIP ma niepoprawny format. Może być uszkodzona. Dopilnuj by używać wersji binarnej oraz spróbuj podmienić bazę na nową kopię\/wersję.",
+ "GeoIPIncorrectDatabaseFormat": "Twoja baza GeoIP ma niepoprawny format. Może być uszkodzona. Dopilnuj by używać wersji binarnej i spróbuj podmienić bazę na nową kopię.",
+ "GeoIpLocationProviderDesc_Pecl1": "Ten dostawca usług geolokalizacyjnych korzysta z bazy GeoIP i modułu PECL, aby dokładnie i efektywnie określić lokalizację odwiedzających.",
"GeoIpLocationProviderDesc_Pecl2": "Ten dostawca nie podlega żadnym ograniczeniom w działaniu, dlatego polecamy jego używanie.",
+ "GeoIpLocationProviderDesc_Php1": "Ten dostawca usług geolokalizacyjnych jest najprostszym do instalacji, ponieważ nie wymaga konfiguracji serwera (idealny dla hostingu współdzielonego!). Wykorzystuje bazę GeoIP i opracowane przez MaxMind API PHP do dokładnego określania lokalizacji Twoich odwiedzających.",
"GeoIpLocationProviderDesc_Php2": "Jeżeli twoja strona ma bardzo dużo ruchu, ten dostawca usług lokacyjnych może okazać się za wolny. W takim wypadku zaleca się instalację %1$srozszerzenia PECL%2$s lub %3$smoduło serverowego%4$s.",
- "GeoIpLocationProviderDesc_ServerBased2": "W przypadku importu plików logów lub wykonaniu innej operacji mogącej wymagać ustawienia adres IP, prosimy używać %1$simplementacji GeoIP PECL (rekomendowana)%2$s lub %3$simplementacji GeoIP PHP%4$s.",
+ "GeoIpLocationProviderDesc_ServerBased1": "Ten dostawca usług geolokalizacyjnych korzysta z modułu GeoIP zainstalowanego w Twoim serwerze HTTP.Ten dostawca jest szybki i dokładny, jednak %1$smoże być wykorzystywany wyłącznie do normalnego śledzenia.%2$s",
+ "GeoIpLocationProviderDesc_ServerBased2": "Gdy importujesz pliki logów lub robisz coś innego, co może wymagać ustawienia adresu IP, użyj %1$simplementacji GeoIP PECL (rekomendowana)%2$s lub %3$simplementacji GeoIP PHP%4$s.",
"GeoIpLocationProviderDesc_ServerBasedAnonWarn": "NOTKA: Anonimizacja IP nie wywiera żadnego efektu gdy jest używana z tym dostawcą. Przed użyciem anonimizacji adresów IP, upewnij się, iż nie narusza ono żadnych praw do prywatności, który może podlegać.",
"GeoIpLocationProviderNotRecomnended": "Geolokacja działa, ale nie używasz rekomendowanego dostawcy.",
"GeoIPNoServerVars": "Piwik nie może znaleźć żadnych zmiennych %s GeoIP",
+ "GeoIPPeclCustomDirNotSet": "Opcja %s w pliku PHP ini nie została ustawiona.",
"GeoIPServerVarsFound": "Piwik wykrył następujące zmienne GeoIP %s",
"GeoIPUpdaterInstructions": "Wprowadź poniżej linki do twoich baz danych. Jeżeli bazy zostały zakupione od %3$sMaxMind%4$s, możesz znaleźć takowe linki %1$stutaj%2$s. W przypadku problemów z dostępem do plików, należy kontaktować się z %3$sMaxMind%4$s.",
"GeoIPUpdaterIntro": "Piwik zarządza aktualizacjami dla następujących baz GeoIP",
@@ -39,26 +52,46 @@
"getCountryDocumentation": "Ten raport pokazuje, w którym kraju był odwiedzający kiedy wchodził na twoją stronę.",
"getRegionDocumentation": "Ten raport pokazuje,w którym regionie był odwiedzający kiedy wchodził na twoją stronę.",
"HowToInstallApacheModule": "W jaki sposób zainstaluję moduł GeoIP dla Apache?",
- "HowToInstallGeoIPDatabases": "W jaki sposób dostanę bazy GeoIP?",
+ "HowToInstallGeoIPDatabases": "W jaki sposób pobiorę bazy GeoIP?",
"HowToInstallGeoIpPecl": "W jaki sposób zainstaluję rozszerzenie GeoIP PECL?",
"HowToInstallNginxModule": "W jaki sposób zainstaluję moduł GeoIP dla Nginx?",
"HowToSetupGeoIP": "Jak ustawić dokładną geolokalizację z GeoIP?",
+ "HowToSetupGeoIP_Step1": "%1$sPobierz%2$s bazę GeoLite City z %3$sMaxMind%4$s.",
+ "HowToSetupGeoIP_Step2": "Rozpakuj ten plik i skopuj jego zawartość %1$s do katalogu %2$smisc%3$s Piwik'a (możesz to zrobić poprzez FTP lub SSH).",
+ "HowToSetupGeoIP_Step3": "Odśwież tą stronę. Dostawca %1$sGeoIP (PHP)%2$s zostanie teraz %3$szainstalowany%4$s. Wybierz go.",
+ "HowToSetupGeoIP_Step4": "No i skończone! Teraz tylko ustaw Piwik'a, żeby korzystał z GeoIP, co dla Ciebie oznacza, że zobaczysz regiony i miasta Twoich odwiedzających razem z bardzo dokładną informacją o kraju.",
+ "HowToSetupGeoIPIntro": "Wygląda na to, że nie skonfigurowałeś dokładnej Geolokalizacji. To przydatna funkcjonalność, bez której nie zobaczysz dokładnych i kompletnych informacji o swoich odwiedzających. Zobacz, jak szybko rozpocząć korzystanie z niej:",
"HttpServerModule": "Moduł Serwera HTTP",
- "ISPDatabase": "Baza danych dostawców internetowych",
+ "InvalidGeoIPUpdatePeriod": "Błędny przedział dla aktualizatora GeoIP: %1$s. Prawidłowe wartości to %2$s.",
+ "IPurchasedGeoIPDBs": "Zakupiłem %1$sdokładniejsze bazy danych od MaxMind%2$s i chcę uruchomić automatyczne aktualizacje.",
+ "ISPDatabase": "Baza dostawców internetowych",
"IWantToDownloadFreeGeoIP": "Chcę ściągnąć darmową bazę GeoIP...",
"Latitude": "Szerokość",
- "Location": "Położenie",
- "LocationDatabase": "Lokalizacja Bazy Danych",
- "LocationProvider": "Lokalizacja Dostawcy",
+ "Location": "Lokalizacja",
+ "LocationDatabase": "Baza lokalizacji",
+ "LocationDatabaseHint": "Baza lokalizacji to baza krajów, regionów lub miast.",
+ "LocationProvider": "Dostawca Lokalizacji",
"Longitude": "Długość",
+ "NoDataForGeoIPReport1": "Brak danych dla tego raportu ponieważ albo dane lokalizacyjne nie są dostępne albo adres IP odwiedzającego nie może zostać zlokalizowany",
+ "NoDataForGeoIPReport2": "Aby włączyć dokładną geolokalizację, zmień %1$ste ustawienia%2$s i użyj %3$sbazy lokalizacji o dokładności miasta%4$s.",
"Organization": "Organizacja",
"OrgDatabase": "Baza Danych Organizacji",
+ "PeclGeoIPNoDBDir": "Moduł PECL przeszukuje %1$s w poszukiwaniu baz danych, lecz wskazany katalog nie istnieje. Proszę utwórz go i umieść w nim bazy GeoIP. Alternatywnie możesz wskazać %2$s właściwy katalog w swoim pliku php.ini.",
+ "PeclGeoLiteError": "Twoja baza GeoIP w %1$s nazywa się %2$s. Niestety moduł PECL nie jest w stanie rozpoznać go po tej nazwie. Proszę zmień tą nazwę na %3$s.",
"PiwikNotManagingGeoIPDBs": "Piwik nie zarządza obecnie żadną baza danych GeoIP.",
+ "PluginDescription": "Informuje o położeniu Twoich odwiedzających: kraju, regionie, mieście i koordynatach geograficznych (szerokość \/ długość geograficzna).",
"Region": "Region",
"SetupAutomaticUpdatesOfGeoIP": "Ustaw automatyczne aktualizacje dla bazy danych GeoIP",
- "SubmenuLocations": "Położenia",
- "UnsupportedArchiveType": "Napotkał nieobsługiwany typ archiwum %1$s.",
- "UpdaterHasNotBeenRun": "Aktualizacja nie została jeszcze wykonana.",
+ "SubmenuLocations": "Lokalizacje",
+ "TestIPLocatorFailed": "Piwik próbował sprawdzić lokalizację znanego adresu IP (%1$s), lecz Twój serwer zwrócił %2$s. Jeśli ten dostawca zostałby poprawnie skonfigurowany, zwróciłby %3$s.",
+ "ThisUrlIsNotAValidGeoIPDB": "Pobrany plik nie jest poprawną bazą GeoIP. Proszę sprawdź ponownie adres URL lub pobierz plik ręcznie.",
+ "ToGeolocateOldVisits": "Aby ustalić lokalizację archiwalnych wizyt użyj skryptu opisanego %1$stutaj%2$s.",
+ "UnsupportedArchiveType": "Napotkano nieobsługiwany typ archiwum %1$s.",
+ "UpdaterHasNotBeenRun": "Aktualizacja nie była jeszcze uruchamiana.",
+ "UpdaterIsNotScheduledToRun": "Nie zaplanowano kolejnego przebiegu.",
+ "UpdaterScheduledForNextRun": "Zostało zaplanowane kolejne wykonanie skryptu podczas najbliższego wykonania polecenia core:archive.",
+ "UpdaterWasLastRun": "Ostatnia aktualizacja odbyła się %s.",
+ "UpdaterWillRunNext": "Następna aktualizacja zaplanowana na %s.",
"WidgetLocation": "Lokalizacja odwiedzającego"
}
} \ No newline at end of file
diff --git a/plugins/UserCountry/lang/pt-br.json b/plugins/UserCountry/lang/pt-br.json
index 224ddc906f..3df8acf2e4 100644
--- a/plugins/UserCountry/lang/pt-br.json
+++ b/plugins/UserCountry/lang/pt-br.json
@@ -16,7 +16,6 @@
"country_a2": "Provedor de satélite",
"country_cat": "Comunidades Catalães",
"country_o1": "Outro país",
- "country_ti": "Tibet",
"CurrentLocationIntro": "De acordo com este provedor, sua localização é",
"DefaultLocationProviderDesc1": "Detecta a localização padrão de um visitante baseando-se no idioma que ele usa",
"DefaultLocationProviderDesc2": "Isso não é muito preciso, então %1$s nós recomendamos a instalação e utilização de %2$s GeoIP %3$s.%4$s",
@@ -94,8 +93,5 @@
"UpdaterWasLastRun": "O atualizador foi executado pela última vez em %s.",
"UpdaterWillRunNext": "A próxima execução está programada para ser executada em %s.",
"WidgetLocation": "Localização dos visitantes"
- },
- "Intl": {
- "Country_TI": "Tibet"
}
} \ No newline at end of file
diff --git a/plugins/UserCountry/lang/sq.json b/plugins/UserCountry/lang/sq.json
index 708c0c4fd2..7663b3fafa 100644
--- a/plugins/UserCountry/lang/sq.json
+++ b/plugins/UserCountry/lang/sq.json
@@ -16,7 +16,6 @@
"country_a2": "Furnizues Satelitor",
"country_cat": "Bashkësi që flasin Katalançe",
"country_o1": "Vend Tjetër",
- "country_ti": "Tibet",
"CurrentLocationIntro": "Sipas këtij furnizuesi, gjendeni në",
"DefaultLocationProviderDesc1": "Furnizuesi parazgjedhje i vendeve e hamendëson vendin e një vizitori bazuar në gjuhën e përdorur prej tyre.",
"DefaultLocationProviderDesc2": "Kjo s’është shumë e saktë, ndaj %1$skëshillojmë instalimin dhe përdorimin e %2$sGeoIP%3$s.%4$s",
@@ -94,8 +93,5 @@
"UpdaterWasLastRun": "Përditësuesi u xhirua së fundi më %s.",
"UpdaterWillRunNext": "Është planifikuar të xhirojë sërish më %s.",
"WidgetLocation": "Vend Vizitori"
- },
- "Intl": {
- "Country_TI": "Tibet"
}
} \ No newline at end of file
diff --git a/plugins/UserCountry/lang/sr.json b/plugins/UserCountry/lang/sr.json
index e91c2ca2f1..2a201e6b54 100644
--- a/plugins/UserCountry/lang/sr.json
+++ b/plugins/UserCountry/lang/sr.json
@@ -16,7 +16,6 @@
"country_a2": "Satelitski provajder",
"country_cat": "Katalonske zajednice",
"country_o1": "Ostale zemlje",
- "country_ti": "Tibet",
"CurrentLocationIntro": "Sudeći po ovom provajderu, vaša trenutna lokacija je",
"DefaultLocationProviderDesc1": "Podrazumevani provajder lokacija nagađa zemlju posetioca na osnovu jezika koji oni koriste.",
"DefaultLocationProviderDesc2": "Ovo nije veoma precizno tako da %1$spreporučujemo da instalirate %2$sGeoIP%3$s.%4$s",
@@ -94,8 +93,5 @@
"UpdaterWasLastRun": "Poslednja provera je izvršena %s.",
"UpdaterWillRunNext": "Sledeće izvršenje je zakazano za %s.",
"WidgetLocation": "Lokacija posetioca"
- },
- "Intl": {
- "Country_TI": "Tibet"
}
} \ No newline at end of file
diff --git a/plugins/UserCountry/lang/sv.json b/plugins/UserCountry/lang/sv.json
index f408801205..13654d0609 100644
--- a/plugins/UserCountry/lang/sv.json
+++ b/plugins/UserCountry/lang/sv.json
@@ -16,7 +16,6 @@
"country_a2": "Satellitleverantör",
"country_cat": "Katalanska språkgemenskaperna",
"country_o1": "Annat land",
- "country_ti": "Tibet",
"CurrentLocationIntro": "Enligt denna leverantör är din aktuella plats",
"DefaultLocationProviderDesc1": "Som standard gissar sig platstjänsten till besökarens plats baserat på vilket språk som används.",
"DefaultLocationProviderDesc2": "Den metoden är inte så exakt, så %1$svi rekommenderar att du installerar och använder %2$sGeoIP%3$s.%4$s",
diff --git a/plugins/UserCountry/lang/uk.json b/plugins/UserCountry/lang/uk.json
index 87a786de58..7d84597d95 100644
--- a/plugins/UserCountry/lang/uk.json
+++ b/plugins/UserCountry/lang/uk.json
@@ -16,7 +16,6 @@
"country_a2": "Супутниковий провайдер",
"country_cat": "Каталаномовні суспільства",
"country_o1": "Інша країна",
- "country_ti": "Тибет",
"CurrentLocationIntro": "Згідно використовуваного способу відстеження ви знаходитесь тут",
"DefaultLocationProviderDesc1": "Цей спосіб відстеження визначає місце розташування на основі мови, яким користуються користувачі в браузері і системі.",
"DefaultLocationProviderDesc2": "Це не дуже точне визначення, тому %1$sми рекомендуємо використовувати і встановити плагін %2$sGeoIp%3$s.%4$s",
@@ -94,8 +93,5 @@
"UpdaterWasLastRun": "Оновлення останнього запуску в %s.",
"UpdaterWillRunNext": "Заплановано наступний запуск на %s.",
"WidgetLocation": "Місцезнаходження відвідувача"
- },
- "Intl": {
- "Country_TI": "Тибет"
}
} \ No newline at end of file
diff --git a/plugins/UserCountry/lang/zh-cn.json b/plugins/UserCountry/lang/zh-cn.json
index 92aa3fc4c6..f0e395f1d6 100644
--- a/plugins/UserCountry/lang/zh-cn.json
+++ b/plugins/UserCountry/lang/zh-cn.json
@@ -16,7 +16,6 @@
"country_a2": "卫星供应商",
"country_cat": "加泰罗尼亚语社区",
"country_o1": "其它国家",
- "country_ti": "中国西藏",
"CurrentLocationIntro": "根据提供商信息,您现在的位置是",
"DefaultLocationProviderDesc1": "默认的地理位置查询以访客的浏览器猜测国家。",
"DefaultLocationProviderDesc2": "这不是很准确,所以 %1$s我们建议安装使用 %2$sGeoIP%3$s.%4$s",
@@ -94,8 +93,5 @@
"UpdaterWasLastRun": "更新程序最后运行时间 %s。",
"UpdaterWillRunNext": "这是下一个计划在 %s 运行。",
"WidgetLocation": "访客位置"
- },
- "Intl": {
- "Country_TI": "中国西藏"
}
} \ No newline at end of file
diff --git a/plugins/UserCountry/lang/zh-tw.json b/plugins/UserCountry/lang/zh-tw.json
index a22da7350d..57e0c278f6 100644
--- a/plugins/UserCountry/lang/zh-tw.json
+++ b/plugins/UserCountry/lang/zh-tw.json
@@ -16,7 +16,6 @@
"country_a2": "衛星網路供應商",
"country_cat": "加泰羅尼亞語社區",
"country_o1": "其他國家",
- "country_ti": "西藏",
"CurrentLocationIntro": "根據這個地理位置供應商,你目前的位置是",
"DefaultLocationProviderDesc1": "預設的地理位置供應商是透過訪客使用的語言來猜測他的國家。",
"DefaultLocationProviderDesc2": "這不是那麼準確,所以%1$s我們推薦安裝並使用 %2$sGeoIP%3$s。%4$s",
@@ -94,8 +93,5 @@
"UpdaterWasLastRun": "上次自動更新執行於 %s。",
"UpdaterWillRunNext": "下次自動更新將於 %s 執行。",
"WidgetLocation": "訪客所在地點"
- },
- "Intl": {
- "Country_TI": "西藏"
}
} \ No newline at end of file
diff --git a/plugins/UserCountry/templates/_profileSummary.twig b/plugins/UserCountry/templates/_profileSummary.twig
new file mode 100644
index 0000000000..8e6b33ef96
--- /dev/null
+++ b/plugins/UserCountry/templates/_profileSummary.twig
@@ -0,0 +1,40 @@
+<div class="visitor-profile-summary visitor-profile-location">
+ <h1>{{ 'UserCountry_Location'|translate }}</h1>
+ <p>
+ {%- for entry in visitorData.countries -%}
+
+ {% set entryCity -%}
+ {% if entry.cities is defined and 1 == entry.cities|length and entry.cities|join -%}
+ {{ entry.cities|join }}
+ {%- elseif entry.cities is defined and 1 < entry.cities|length -%}
+ <span title="{{ entry.cities|join(', ') }}">{{ 'UserCountry_FromDifferentCities'|translate }}</span>
+ {%- endif %}
+ {%- endset %}
+
+ {% set entryVisits -%}
+ <strong>
+ {% if entry.nb_visits == 1 -%}
+ {{ 'General_OneVisit'|translate }}
+ {%- else -%}
+ {{ 'General_NVisits'|translate(entry.nb_visits) }}
+ {%- endif -%}
+ </strong>
+ {%- endset %}
+
+ {% set entryCountry -%}
+ {%- if entryCity -%}
+ {{ 'UserCountry_CityAndCountry'|translate(entryCity, entry.prettyName)|raw }}
+ {%- else -%}
+ {{ entry.prettyName }}
+ {%- endif -%}
+
+ &nbsp;<img height="16px" src="{{ entry.flag }}" title="{{ entry.prettyName }}"/>
+ {%- endset %}
+
+ {{- 'General_XFromY'|translate(entryVisits, entryCountry)|raw -}}{% if not loop.last %}, {% endif %}
+ {%- endfor %}
+ <a class="visitor-profile-show-map" href="#" {% if userCountryMapUrl|default('') is empty %}style="display:none"{% endif %}>({{ 'Live_ShowMap'|translate|replace({' ': '&nbsp;'})|raw }})</a> <img class="loadingPiwik" style="display:none;" src="plugins/Morpheus/images/loading-blue.gif"/>
+ </p>
+ <div class="visitor-profile-map" style="display:none" data-href="{{ userCountryMapUrl|default('') }}">
+ </div>
+</div> \ No newline at end of file
diff --git a/plugins/UserCountry/tests/System/expected/test_AttributeHistoricalDataWithLocationsTest_testExecute_ShouldReturnLogAfterWorkingWithSomeData__UserCountry.getCity_month.xml b/plugins/UserCountry/tests/System/expected/test_AttributeHistoricalDataWithLocationsTest_testExecute_ShouldReturnLogAfterWorkingWithSomeData__UserCountry.getCity_month.xml
index ae227475bd..1ef9b96f0c 100644
--- a/plugins/UserCountry/tests/System/expected/test_AttributeHistoricalDataWithLocationsTest_testExecute_ShouldReturnLogAfterWorkingWithSomeData__UserCountry.getCity_month.xml
+++ b/plugins/UserCountry/tests/System/expected/test_AttributeHistoricalDataWithLocationsTest_testExecute_ShouldReturnLogAfterWorkingWithSomeData__UserCountry.getCity_month.xml
@@ -95,7 +95,7 @@
<logo>plugins/Morpheus/icons/dist/flags/fr.png</logo>
</row>
<row>
- <label>Lhasa, Unknown, Tibet</label>
+ <label>Lhasa, Xizang, China</label>
<nb_visits>2</nb_visits>
<nb_actions>5</nb_actions>
<max_actions>4</max_actions>
@@ -118,13 +118,13 @@
<sum_daily_nb_users>0</sum_daily_nb_users>
<lat>29.65</lat>
<long>91.1</long>
- <segment>city==Lhasa;regionCode==1;countryCode==ti</segment>
+ <segment>city==Lhasa;regionCode==14;countryCode==cn</segment>
<city_name>Lhasa</city_name>
- <region>1</region>
- <country>ti</country>
- <country_name>Tibet</country_name>
- <region_name>Unknown</region_name>
- <logo>plugins/Morpheus/icons/dist/flags/ti.png</logo>
+ <region>14</region>
+ <country>cn</country>
+ <country_name>China</country_name>
+ <region_name>Xizang</region_name>
+ <logo>plugins/Morpheus/icons/dist/flags/cn.png</logo>
</row>
<row>
<label>Rome, Lazio, Italy</label>
diff --git a/plugins/UserCountry/tests/System/expected/test_AttributeHistoricalDataWithLocationsTest_testExecute_ShouldReturnLogAfterWorkingWithSomeData__UserCountry.getCountry_month.xml b/plugins/UserCountry/tests/System/expected/test_AttributeHistoricalDataWithLocationsTest_testExecute_ShouldReturnLogAfterWorkingWithSomeData__UserCountry.getCountry_month.xml
index 1c8ba290ed..ade01286fe 100644
--- a/plugins/UserCountry/tests/System/expected/test_AttributeHistoricalDataWithLocationsTest_testExecute_ShouldReturnLogAfterWorkingWithSomeData__UserCountry.getCountry_month.xml
+++ b/plugins/UserCountry/tests/System/expected/test_AttributeHistoricalDataWithLocationsTest_testExecute_ShouldReturnLogAfterWorkingWithSomeData__UserCountry.getCountry_month.xml
@@ -2,25 +2,25 @@
<result>
<row>
<label>China</label>
- <nb_visits>18</nb_visits>
- <nb_actions>50</nb_actions>
+ <nb_visits>20</nb_visits>
+ <nb_actions>55</nb_actions>
<max_actions>5</max_actions>
- <bounce_count>9</bounce_count>
+ <bounce_count>10</bounce_count>
<goals>
<row idgoal='1'>
- <nb_conversions>18</nb_conversions>
- <nb_visits_converted>18</nb_visits_converted>
- <revenue>90</revenue>
+ <nb_conversions>20</nb_conversions>
+ <nb_visits_converted>20</nb_visits_converted>
+ <revenue>100</revenue>
</row>
<row idgoal='2'>
- <nb_conversions>9</nb_conversions>
- <nb_visits_converted>9</nb_visits_converted>
- <revenue>45</revenue>
+ <nb_conversions>10</nb_conversions>
+ <nb_visits_converted>10</nb_visits_converted>
+ <revenue>50</revenue>
</row>
</goals>
- <nb_conversions>27</nb_conversions>
- <revenue>135</revenue>
- <sum_daily_nb_uniq_visitors>9</sum_daily_nb_uniq_visitors>
+ <nb_conversions>30</nb_conversions>
+ <revenue>150</revenue>
+ <sum_daily_nb_uniq_visitors>10</sum_daily_nb_uniq_visitors>
<sum_daily_nb_users>0</sum_daily_nb_users>
<code>cn</code>
<logo>plugins/Morpheus/icons/dist/flags/cn.png</logo>
@@ -136,33 +136,6 @@
<logoHeight>16</logoHeight>
</row>
<row>
- <label>Tibet</label>
- <nb_visits>2</nb_visits>
- <nb_actions>5</nb_actions>
- <max_actions>4</max_actions>
- <bounce_count>1</bounce_count>
- <goals>
- <row idgoal='1'>
- <nb_conversions>2</nb_conversions>
- <nb_visits_converted>2</nb_visits_converted>
- <revenue>10</revenue>
- </row>
- <row idgoal='2'>
- <nb_conversions>1</nb_conversions>
- <nb_visits_converted>1</nb_visits_converted>
- <revenue>5</revenue>
- </row>
- </goals>
- <nb_conversions>3</nb_conversions>
- <revenue>15</revenue>
- <sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
- <sum_daily_nb_users>0</sum_daily_nb_users>
- <code>ti</code>
- <logo>plugins/Morpheus/icons/dist/flags/ti.png</logo>
- <segment>countryCode==ti</segment>
- <logoHeight>16</logoHeight>
- </row>
- <row>
<label>United States</label>
<nb_visits>2</nb_visits>
<nb_actions>6</nb_actions>
diff --git a/plugins/UserCountry/tests/System/expected/test_AttributeHistoricalDataWithLocationsTest_testExecute_ShouldReturnLogAfterWorkingWithSomeData__UserCountry.getRegion_month.xml b/plugins/UserCountry/tests/System/expected/test_AttributeHistoricalDataWithLocationsTest_testExecute_ShouldReturnLogAfterWorkingWithSomeData__UserCountry.getRegion_month.xml
index 49fc389c31..34fd1a7dfe 100644
--- a/plugins/UserCountry/tests/System/expected/test_AttributeHistoricalDataWithLocationsTest_testExecute_ShouldReturnLogAfterWorkingWithSomeData__UserCountry.getRegion_month.xml
+++ b/plugins/UserCountry/tests/System/expected/test_AttributeHistoricalDataWithLocationsTest_testExecute_ShouldReturnLogAfterWorkingWithSomeData__UserCountry.getRegion_month.xml
@@ -116,7 +116,7 @@
<logo>plugins/Morpheus/icons/dist/flags/it.png</logo>
</row>
<row>
- <label>Unknown, Tibet</label>
+ <label>Xizang, China</label>
<nb_visits>2</nb_visits>
<nb_actions>5</nb_actions>
<max_actions>4</max_actions>
@@ -137,11 +137,11 @@
<revenue>15</revenue>
<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
<sum_daily_nb_users>0</sum_daily_nb_users>
- <segment>regionCode==1;countryCode==ti</segment>
- <region>1</region>
- <country>ti</country>
- <country_name>Tibet</country_name>
- <region_name>Unknown</region_name>
- <logo>plugins/Morpheus/icons/dist/flags/ti.png</logo>
+ <segment>regionCode==14;countryCode==cn</segment>
+ <region>14</region>
+ <country>cn</country>
+ <country_name>China</country_name>
+ <region_name>Xizang</region_name>
+ <logo>plugins/Morpheus/icons/dist/flags/cn.png</logo>
</row>
</result> \ No newline at end of file
diff --git a/plugins/UserCountry/tests/System/expected/test___UserCountry.getCountryCodeMapping.xml b/plugins/UserCountry/tests/System/expected/test___UserCountry.getCountryCodeMapping.xml
index 748c4b2023..30240aea9d 100644
--- a/plugins/UserCountry/tests/System/expected/test___UserCountry.getCountryCodeMapping.xml
+++ b/plugins/UserCountry/tests/System/expected/test___UserCountry.getCountryCodeMapping.xml
@@ -56,7 +56,7 @@
<cw>Curaçao</cw>
<cx>Christmas Island</cx>
<cy>Cyprus</cy>
- <cz>Czech Republic</cz>
+ <cz>Czechia</cz>
<de>Germany</de>
<dj>Djibouti</dj>
<dk>Denmark</dk>
@@ -219,7 +219,6 @@
<tf>French Southern Territories</tf>
<tg>Togo</tg>
<th>Thailand</th>
- <ti>Tibet</ti>
<tj>Tajikistan</tj>
<tk>Tokelau</tk>
<tl>Timor-Leste</tl>
diff --git a/plugins/UserCountryMap/javascripts/vendor/kartograph.min.js b/plugins/UserCountryMap/javascripts/vendor/kartograph.min.js
index daf986cfbd..9afe6ddf3a 100644
--- a/plugins/UserCountryMap/javascripts/vendor/kartograph.min.js
+++ b/plugins/UserCountryMap/javascripts/vendor/kartograph.min.js
@@ -15,7 +15,9 @@
* You should have received a copy of the GNU Lesser General Public
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*
+ * NOTE, manual modification made:
+ * - removed Function.bind implementation, does not work properly w/ angular 1.6
*/
-!function(){function t(){var t={},e=[],n=1,o=1;return t.size=function(r){return arguments.length?(o=r,t):o},t.iterations=function(r){return arguments.length?(n=r,t):n},t.add=function(r){return e.push(r),t},t.means=function(){for(var t=[],i={},a=Math.min(o,e.length),s=0,l=2*a;l>s;s++){var u=e[~~(Math.random()*e.length)],p=u.x+"/"+u.y;if(!(p in i)&&(i[p]=1,t.push({x:u.x,y:u.y})>=a))break}a=t.length;for(var h=0;n>h;h++){for(var c=r().points(t),s=0;a>s;s++){var f=t[s];f.sumX=0,f.sumY=0,f.size=0,f.points=[],f.indices=[]}for(var s=0;s<e.length;s++){var d=e[s],f=c.find(d);f.sumX+=d.x,f.sumY+=d.y,f.size++,f.points.push(d),f.indices.push(s)}for(var s=0;a>s;s++){var f=t[s];f.size&&(f.x=f.sumX/f.size,f.y=f.sumY/f.size)}}return t},t}function r(){function t(r,n){if(r.length){var o=a[n%a.length],i=r.length>>1;return r.sort(e(o)),{axis:o,point:r[i],left:t(r.slice(0,i),n+1),right:t(r.slice(i+1),n+1)}}}function r(t,r){for(var e=0,n=0;n<a.length;n++){var o=a[n],i=t[o]-r[o];e+=i*i}return e}function e(t){return function(r,e){return r=r[t],e=e[t],e>r?-1:r>e?1:0}}function n(t,e,o){if(r(t.point,e)<r(o.point,e)&&(o=t),t.left&&(o=n(t.left,e,o)),t.right){var i=t.point[t.axis]-e[t.axis];i*i<r(o.point,e)&&(o=n(t.right,e,o))}return o}var o,i={},a=["x","y"],s=[];return i.axes=function(t){return arguments.length?(a=t,i):a},i.points=function(t){return arguments.length?(s=t,o=null,i):s},i.find=function(t){return n(i.root(),t,o).point},i.root=function(){return o||(o=t(s,0))},i}var e,n,o,i,a,l,u,p,h,c,f,d,y,v,g,_,b,x,w,M,P,C,j,A,B,L,S,k,I,N,G,z,E,T,R,F,V,O,H,X,q,D,U,Q,Y,W,Z,$,K,J,tr,rr,er,nr,or,ir,ar,sr,lr,ur,pr,hr,cr,fr,dr,yr,mr,vr,gr,_r,br,xr,wr,Mr,Pr,Cr,jr,Ar,Br,Lr,Sr,kr,Ir,Nr,Gr,zr,Er,Tr,Rr,Fr,Vr,Or,Hr,Xr,qr,Dr,Ur,Qr,Yr,Wr,Zr,$r,Kr,Jr,te,re,ee,ne,oe,ie={}.hasOwnProperty,ae=function(t,r){function e(){this.constructor=t}for(var n in r)ie.call(r,n)&&(t[n]=r[n]);return e.prototype=r.prototype,t.prototype=new e,t.__super__=r.prototype,t},se=function(t,r){return function(){return t.apply(r,arguments)}},le=[].indexOf||function(t){for(var r=0,e=this.length;e>r;r++)if(r in this&&this[r]===t)return r;return-1};Br="undefined"!=typeof exports&&null!==exports?exports:this,br=Br.$K=null!=(Rr=Br.kartograph)?Rr:Br.kartograph={},br.version="0.8.1",e=Br.jQuery,br.__verbose=!1,Sr=function(){var t;try{return console.warn.apply(console,arguments)}catch(r){t=r;try{return opera.postError.apply(opera,arguments)}catch(r){return t=r,alert(Array.prototype.join.call(arguments," "))}}},xr=function(){var t;if(br.__verbose)try{return console.debug.apply(console,arguments)}catch(r){t=r;try{return opera.postError.apply(opera,arguments)}catch(r){return t=r,alert(Array.prototype.join.call(arguments," "))}}},null==(Fr=(Er=String.prototype).trim)&&(Er.trim=function(){return this.replace(/^\s+|\s+$/g,"")}),Array.prototype.indexOf||(Array.prototype.indexOf=function(t){"use strict";if(null==this)throw new TypeError;var r=Object(this),e=r.length>>>0;if(0===e)return-1;var n=0;if(arguments.length>0&&(n=Number(arguments[1]),n!=n?n=0:0!=n&&1/0!=n&&n!=-1/0&&(n=(n>0||-1)*Math.floor(Math.abs(n)))),n>=e)return-1;for(var o=n>=0?n:Math.max(e-Math.abs(n),0);e>o;o++)if(o in r&&r[o]===t)return o;return-1}),zr=function(){var t,r,e,n,o;for(t={},o="Boolean Number String Function Array Date RegExp Undefined Null".split(" "),e=0,n=o.length;n>e;e++)r=o[e],t["[object "+r+"]"]=r.toLowerCase();return function(r){var e;return e=Object.prototype.toString.call(r),t[e]||"object"}}(),i=function(){function t(t,r,e,n){var o;null==t&&(t=0),null==r&&(r=0),null==e&&(e=null),null==n&&(n=null),o=this,null===e?(o.xmin=Number.MAX_VALUE,o.xmax=-1*Number.MAX_VALUE):(o.xmin=o.left=t,o.xmax=o.right=t+e,o.width=e),null===n?(o.ymin=Number.MAX_VALUE,o.ymax=-1*Number.MAX_VALUE):(o.ymin=o.top=r,o.ymax=o.bottom=n+r,o.height=n)}return t.prototype.update=function(t,r){var e;return null==r&&(r=t[1],t=t[0]),e=this,e.xmin=Math.min(e.xmin,t),e.ymin=Math.min(e.ymin,r),e.xmax=Math.max(e.xmax,t),e.ymax=Math.max(e.ymax,r),e.left=e.xmin,e.top=e.ymin,e.right=e.xmax,e.bottom=e.ymax,e.width=e.xmax-e.xmin,e.height=e.ymax-e.ymin,this},t.prototype.intersects=function(t){return t.left<s.right&&t.right>s.left&&t.top<s.bottom&&t.bottom>s.top},t.prototype.inside=function(t,r){var e;return e=this,t>=e.left&&t<=e.right&&r>=e.top&&r<=e.bottom},t.prototype.join=function(t){var r;return r=this,r.update(t.left,t.top),r.update(t.right,t.bottom),this},t}(),i.fromXML=function(t){var r,e,n,o;return n=Number(t.getAttribute("x")),o=Number(t.getAttribute("y")),e=Number(t.getAttribute("w")),r=Number(t.getAttribute("h")),new br.BBox(n,o,e,r)},br.BBox=i,null==(Zr=br.geom)&&(br.geom={}),null==(Kr=(Tr=br.geom).clipping)&&(Tr.clipping={}),d=function(){function t(){}var r,e,n,o,i;return e=0,n=1,o=2,r=4,i=8,t.prototype.compute_out_code=function(t,r,e){var n,o;return o=this,n=o.INSIDE,r<t.left?n|=o.LEFT:r>t.right&&(n|=o.RIGHT),e<t.top?n|=o.TOP:e>t.bottom&&(n|=o.BOTTOM),n},t.prototype.clip=function(t,r,e,n,o){var i,a,s,l,u,p,h;for(u=this,a=u.compute_out_code(t,r,e),s=u.compute_out_code(t,n,o),i=False;True;){if(!(a|s)){i=True;break}if(a&s)break;l=0===code?s:a,l&u.TOP?(p=r+(n-r)*(t.top-e)/(o-e),h=t.top):l&u.BOTTOM?(p=r+(n-r)*(t.bottom-e)/(o-e),h=t.bottom):l&u.RIGHT?(h=e+(o-e)*(t.right-r)/(n-r),p=t.right):l&u.LEFT&&(h=e+(o-e)*(t.left-r)/(n-r),p=t.left),l===a?(r=p,e=h,a=u.compute_out_code(t,r,e)):(n=p,o=h,s=u.compute_out_code(t,n,o))}return i?[r,e,n,o]:null},t}(),br.geom.clipping.CohenSutherland=d,S=function(){function t(t,r,n){var o,i;i=this,i.container=o=e(t),null==r&&(r=o.width()),null==n&&(n=o.height()),0===n&&(n="auto"),i.size={h:n,w:r},i.markers=[],i.pathById={},i.container.addClass("kartograph")}return t.prototype.createSVGLayer=function(t){var r,n,o,i,a,s,l,u;return i=this,null==(u=i._layerCnt)&&(i._layerCnt=0),o=i._layerCnt++,l=i.viewport,n=i.container,a=Raphael(n[0],l.width,l.height),s=e(a.canvas),s.css({position:"absolute",top:"0px",left:"0px","z-index":o+5}),"static"===n.css("position")&&n.css({position:"relative",height:l.height+"px"}),s.addClass(t),r=e("desc",a.canvas).text(),e("desc",a.canvas).text(r.replace("with ","with kartograph "+br.version+" and ")),a},t.prototype.createHTMLLayer=function(t){var r,n,o,i,a,s;return i=this,a=i.viewport,r=i.container,null==(s=i._layerCnt)&&(i._layerCnt=0),o=i._layerCnt++,n=e('<div class="layer '+t+'" />'),n.css({position:"absolute",top:"0px",left:"0px",width:a.width+"px",height:a.height+"px","z-index":o+5}),r.append(n),n},t.prototype.load=function(t,r,n){var o,i,a,s;return i=this,o=e.Deferred(),i.clear(),i.opts=null!=n?n:{},null==(s=(a=i.opts).zoom)&&(a.zoom=1),i.mapLoadCallback=r,i._loadMapDeferred=o,i._lastMapUrl=t,i.cacheMaps&&null!=br.__mapCache[t]?i._mapLoaded(br.__mapCache[t]):e.ajax({url:t,dataType:"text",success:i._mapLoaded,context:i,error:function(t,r,e){return Sr(t,r,e)}}),o.promise()},t.prototype.loadMap=function(){return this.load.apply(this,arguments)},t.prototype.setMap=function(t,r){var e,n,o;e=this,e.opts=null!=r?r:{},null==(o=(n=e.opts).zoom)&&(n.zoom=1),e._lastMapUrl="string",e._mapLoaded(t)},t.prototype._mapLoaded=function(t){var r,n,o,a,s,l,u,p,h,c,f,d,y,m,v,g,_;l=this,l.cacheMaps&&(null==(y=br.__mapCache)&&(br.__mapCache={}),br.__mapCache[l._lastMapUrl]=t);try{t=e(t)}catch(b){return o=b,Sr("something went horribly wrong while parsing svg"),l._loadMapDeferred.reject("could not parse svg"),void 0}l.svgSrc=t,r=e("view",t),null==l.paper&&(f=l.size.w,a=l.size.h,"auto"===a&&(p=r.attr("w")/r.attr("h"),a=f/p),l.viewport=new i(0,0,f,a)),c=l.viewport,l.viewAB=n=br.View.fromXML(r[0]),u=null!=(m=l.opts.padding)?m:0,s=null!=(v=l.opts.halign)?v:"center",h=null!=(g=l.opts.valign)?g:"center",d=null!=(_=l.opts.zoom)?_:1,l.viewBC=new br.View(l.viewAB.asBBox(),c.width*d,c.height*d,u,s,h),l.proj=br.Proj.fromXML(e("proj",r)[0]),null!=l.mapLoadCallback&&l.mapLoadCallback(l),null!=l._loadMapDeferred&&l._loadMapDeferred.resolve(l)},t.prototype.addLayer=function(t,r){var n,o,i,a,s,l,u,p,h,c,f,d,y,m,v,g,_;return null==r&&(r={}),u=this,null==(v=u.layerIds)&&(u.layerIds=[]),null==(g=u.layers)&&(u.layers={}),null==u.paper&&(u.paper=u.createSVGLayer()),d=t,"object"===zr(r)?(s=r.name,c=r.key,m=r.title):r={},l=u.paper,r.add_svg_layer&&(l=u.createSVGLayer()),null==s&&(s=d),y=e("#"+d,u.svgSrc),0!==y.length?(a=new V(s,c,u,r.filter,l),n=e("*",y[0]),f=n.length,o=null!=(_=r.chunks)?_:f,i=0,h=function(){var t,e,s,l,u,c;for(t=o*i,e=u=0;o>=0?o>u:u>o;e=o>=0?++u:--u)f>t+e&&a.addPath(n.get(t+e),m);if(null!=r.styles){c=r.styles;for(s in c)l=c[s],a.style(s,l)}return i++,f>i*o?setTimeout(h,0):p()},p=function(){var t,e,n,o;for(a.paths.length>0&&(u.layers[s]=a,u.layerIds.push(s)),t=["click","mouseenter","mouseleave","dblclick","mousedown","mouseup","mouseover","mouseout"],n=0,o=t.length;o>n;n++)e=t[n],"function"===zr(r[e])&&a.on(e,r[e]);return null!=r.tooltips&&a.tooltips(r.tooltips),null!=r.done?r.done():void 0},null!=r.chunks?setTimeout(h,0):h(),u):void 0},t.prototype.getLayer=function(t){var r;return r=this,null==r.layers[t]?(Sr("could not find layer "+t),null):r.layers[t]},t.prototype.getLayerPath=function(t,r){var e,n;return n=this,e=n.getLayer(t),null!=e?"object"===zr(r)?e.getPaths(r)[0]:e.getPath(r):null},t.prototype.onLayerEvent=function(t,r,e){var n;return n=this,n.getLayer(e).on(t,r),n},t.prototype.addMarker=function(t){var r,e;return r=this,r.markers.push(t),e=r.viewBC.project(r.viewAB.project(r.proj.project(t.lonlat.lon,t.lonlat.lat))),t.render(e[0],e[1],r.container,r.paper)},t.prototype.clearMarkers=function(){var t,r,e,n,o;for(r=this,o=r.markers,e=0,n=o.length;n>e;e++)t=o[e],t.clear();return r.markers=[]},t.prototype.fadeIn=function(t){var r,e,n,o,i,a,s,l,u,p,h;null==t&&(t={}),i=this,o=null!=(l=t.layer)?l:i.layerIds[i.layerIds.length-1],e=null!=(u=t.duration)?u:500,p=i.layers[o].pathsById,h=[];for(n in p)s=p[n],h.push(function(){var t,n,o;for(o=[],t=0,n=s.length;n>t;t++)a=s[t],r="function"===zr(e)?e(a.data):e,a.svgPath.attr("opacity",0),o.push(a.svgPath.animate({opacity:1},r));return o}());return h},t.prototype.loadCoastline=function(){var t;return t=this,e.ajax({url:"coastline.json",success:t.renderCoastline,context:t})},t.prototype.resize=function(t,r){var e,n,o,i,a,s,l,u,p,h,c,f,d,y,m,v,g;a=this,e=a.container,null==t&&(t=e.width()),null==r&&(r=e.height()),a.viewport=p=new br.BBox(0,0,t,r),null!=a.paper&&a.paper.setSize(p.width,p.height),p=a.viewport,s=null!=(d=a.opts.padding)?d:0,n=null!=(y=a.opts.halign)?y:"center",u=null!=(m=a.opts.valign)?m:"center",h=a.opts.zoom,a.viewBC=new br.View(a.viewAB.asBBox(),p.width*h,p.height*h,s,n,u),v=a.layers;for(o in v)i=v[o],i.setView(a.viewBC);if(null!=a.symbolGroups)for(g=a.symbolGroups,c=0,f=g.length;f>c;c++)l=g[c],l.onResize()},t.prototype.lonlat2xy=function(t){var r,e;return e=this,2===t.length&&(t=new br.LonLat(t[0],t[1])),3===t.length&&(t=new br.LonLat(t[0],t[1],t[2])),r=e.proj.project(t.lon,t.lat,t.alt),e.viewBC.project(e.viewAB.project(r))},t.prototype.addSymbolGroup=function(t){var r,e;return r=this,null==(e=r.symbolGroups)&&(r.symbolGroups=[]),r.symbolGroups.push(t)},t.prototype.removeSymbols=function(t){var r,e,n,o,i,a;if(r=this,null!=t)return r.symbolGroups[t].remove();for(i=r.symbolGroups,a=[],n=0,o=i.length;o>n;n++)e=i[n],a.push(e.remove());return a},t.prototype.clear=function(){var t,r,n,o,i,a;if(r=this,null!=r.layers){for(t in r.layers)r.layers[t].remove();r.layers={},r.layerIds=[]}if(null!=r.symbolGroups){for(a=r.symbolGroups,o=0,i=a.length;i>o;o++)n=a[o],n.remove();r.symbolGroups=[]}return null!=r.paper?(e(r.paper.canvas).remove(),r.paper=void 0):void 0},t.prototype.loadCSS=function(t,r){var n;return n=this,Raphael.svg?(e("body").append('<link rel="stylesheet" href="'+t+'" />'),r()):e.ajax({url:t,dataType:"text",success:function(t){return n.styles=br.parsecss(t),r()},error:function(r,e,n){return Sr("error while loading "+t,r,e,n)}})},t.prototype.applyCSS=function(t,r){var e,n,o,i,a,s,l,u,p,h,c,f,d,y,m;if(o=this,null==o.styles)return t;null==(f=o._pathTypes)&&(o._pathTypes=["path","circle","rectangle","ellipse"]),null==(d=o._regardStyles)&&(o._regardStyles=["fill","stroke","fill-opacity","stroke-width","stroke-opacity"]);for(s in o.styles)for(i=s,y=i.split(","),u=0,h=y.length;h>u;u++)if(l=y[u],i=l.split(" "),i=i[i.length-1],i=i.split(":"),!(i.length>1||(i=i[0].split("."),e=i.slice(1),e.length>0&&e.indexOf(r)<0||(i=i[0],o._pathTypes.indexOf(i)>=0&&i!==t.type))))for(a=o.styles[s],m=o._regardStyles,p=0,c=m.length;c>p;p++)n=m[p],null!=a[n]&&t.attr(n,a[n]);return t},t.prototype.style=function(t,r,e,n,o){var i;return i=this,t=i.getLayer(t),null!=t?t.style(r,e,n,o):void 0},t}(),L=br,Br.kartograph=function(t,r,e){return new S(t,r,e)},br.map=function(t,r,e){return new S(t,r,e)},br.__mapCache={},e.extend(Br.kartograph,L),R=function(){function t(t,r,e){null==e&&(e=0),this.lon=Number(t),this.lat=Number(r),this.alt=Number(e)}return t.prototype.distance=function(t){var r,e,n,o,i,a,s,l,u;return u=this,r=6371,a=Math.PI/180,o=(t.lat-u.lat)*a,i=(t.lon-u.lon)*a,s=u.lat*a,l=t.lat*a,e=Math.sin(o/2)*Math.sin(o/2)+Math.sin(i/2)*Math.sin(i/2)*Math.cos(s)*Math.cos(l),n=2*Math.atan2(Math.sqrt(e),Math.sqrt(1-e)),r*n},t}(),G=function(t){function r(t,e,n){null==n&&(n=0),r.__super__.constructor.call(this,e,t,n)}return ae(r,t),r}(R),br.LonLat=R,br.LatLon=G,V=function(){function t(t,r,e,n,o){var i;i=this,i.id=t,i.path_id=r,i.paper=null!=o?o:e.paper,i.view=e.viewBC,i.map=e,i.filter=n}return t.prototype.addPath=function(t,r){var e,n,o,i,a,s,l;return n=this,null==(a=n.paths)&&(n.paths=[]),e=new O(t,n.id,n,r),"function"===zr(n.filter)&&n.filter(e.data)===!1?(e.remove(),void 0):(n.paths.push(e),null!=n.path_id?(null==(s=n.pathsById)&&(n.pathsById={}),null==(l=(o=n.pathsById)[i=e.data[n.path_id]])&&(o[i]=[]),n.pathsById[e.data[n.path_id]].push(e)):void 0)},t.prototype.hasPath=function(t){var r;return r=this,null!=r.pathsById&&null!=r.pathsById[t]},t.prototype.getPathsData=function(){var t,r,e,n,o,i;for(t=this,e=[],i=t.paths,n=0,o=i.length;o>n;n++)r=i[n],e.push(r.data);return e},t.prototype.getPath=function(t){var r;return r=this,r.hasPath(t)?r.pathsById[t][0]:null},t.prototype.getPaths=function(t){var r,e,n,o,i,a,s,l;if(o=this,n=[],"object"===zr(t))for(l=o.paths,a=0,s=l.length;s>a;a++){i=l[a],e=!0;for(r in t)e=e&&i.data[r]===t[r];e&&n.push(i)}return n},t.prototype.setView=function(t){var r,e,n,o,i;for(r=this,i=r.paths,n=0,o=i.length;o>n;n++)e=i[n],e.setView(t);return r},t.prototype.remove=function(){var t,r,e,n,o,i;for(t=this,o=t.paths,i=[],e=0,n=o.length;n>e;e++)r=o[e],i.push(r.remove());return i},t.prototype.style=function(t,r,e,n){var o,i,a,s,l,u,p,h,c,f,d;if(u=this,"object"===zr(t)){for(l in t)h=t[l],u.style(l,h);return u}for(null==e&&(e=0),null==n&&(n=0),d=u.paths,c=0,f=d.length;f>c;c++)p=d[c],h=jr(r,p.data),s=jr(e,p.data),a=jr(n,p.data),s>0?(i={},i[t]=h,o=Raphael.animation(i,1e3*s),p.svgPath.animate(o.delay(1e3*a))):p.svgPath.attr(t,h);return u},t.prototype.on=function(t,r){var n,o,i,a,s,l,u;for(i=this,n=function(){function t(t,r,e){this.type=t,this.cb=r,this.layer=e,this.handle=se(this.handle,this)}return t.prototype.handle=function(t){var r;return i=this,r=i.layer.map.pathById[t.target.getAttribute("id")],i.cb(r.data,r.svgPath,t)},t}(),o=new n(t,r,i),u=i.paths,s=0,l=u.length;l>s;s++)a=u[s],e(a.svgPath.node).bind(t,o.handle);return i},t.prototype.tooltips=function(t,r){var n,o,i,a,s,l,u;for(n=this,i=function(t,n){var o;return o={position:{target:"mouse",viewport:e(window),adjust:{x:7,y:7}},show:{delay:null!=r?r:20},events:{show:function(t,r){return e(".qtip").filter(function(){return this!==r.elements.tooltip.get(0)}).hide()}},content:{}},null!=n?"string"==typeof n?o.content.text=n:e.isArray(n)&&(o.content.title=n[0],o.content.text=n[1]):o.content.text="n/a",e(t.svgPath.node).qtip(o)},u=n.paths,s=0,l=u.length;l>s;s++)o=u[s],a=jr(t,o.data),i(o,a);return n},t.prototype.sort=function(t){var r,e,n,o,i,a;for(e=this,e.paths.sort(function(r,e){var n,o,i;return n=t(r.data),o=t(e.data),n===o?0:null!=(i=n>o)?i:{1:-1}}),r=!1,a=e.paths,o=0,i=a.length;i>o;o++)n=a[o],r&&n.svgPath.insertAfter(r.svgPath),r=n;return e},t}(),jr=function(t,r){return"function"===zr(t)?t(r):t},wr=0,O=function(){function t(t,r,e,n){var o,i,a,s,l,u,p,h,c,f,d,y,m,v;for(l=this,u=e.paper,s=e.map,d=s.viewBC,l.path=p=br.geom.Path.fromSVG(t),l.vpath=d.projectPath(p),l.svgPath=l.vpath.toSVG(u),l.svgPath.data("path",l),null==s.styles?Raphael.svg&&l.svgPath.node.setAttribute("class",r):s.applyCSS(l.svgPath,r),c="path_"+wr++,l.svgPath.node.setAttribute("id",c),s.pathById[c]=l,i={},a=m=0,v=t.attributes.length-1;v>=0?v>=m:m>=v;a=v>=0?++m:--m)o=t.attributes[a],"data-"===o.name.substr(0,5)&&(f=o.value,y=Number(f),""===f.trim()||y!==f||isNaN(y)||(f=y),i[o.name.substr(5)]=f);l.data=i,"string"===zr(n)?h=n:"function"===zr(n)&&(h=n(i)),null!=h&&l.svgPath.attr("title",h)}return t.prototype.setView=function(t){var r,e,n;return r=this,e=t.projectPath(r.path),r.vpath=e,"path"===r.path.type?(n=e.svgString(),r.svgPath.attr({path:n})):"circle"===r.path.type?r.svgPath.attr({cx:e.x,cy:e.y,r:e.r}):void 0},t.prototype.remove=function(){var t;return t=this,t.svgPath.remove()},t}(),br.parsecss=function(t,r){var e,n,o,i,a,s,l,u;for(i={},t=Mr(t),u=t.split("`b%"),s=0,l=u.length;l>s;s++)if(e=u[s],e=e.split("%b`"),!(e.length<2))if(e[0]=Ar(e[0]),o=Cr(e[1]),null!=i[e[0]])for(n in o)a=o[n],i[e[0]][n]=a;else i[e[0]]=o;return"function"!==zr(r)?i:(r(i),void 0)},Pr={},Cr=function(t){var r,e,n,o,i,a;for(n=Pr[t].replace(/^{|}$/g,""),n=Mr(n),e={},a=n.split(";"),o=0,i=a.length;i>o;o++)r=a[o],r=r.split(":"),r.length<2||(e[Ar(r[0])]=Ar(r.slice(1).join(":")));return e},J=/{[^{}]*}/,rr=/\[[^\[\]]*\]|{[^{}]*}|\([^()]*\)|function(\s+\w+)?(\s*%b`\d+`b%){2}/,tr=/(?:\/\*(?:[^\*]|\*[^\/])*\*\/)|(\\.|"(?:[^\\\"]|\\.|\\\n)*"|'(?:[^\\\']|\\.|\\\n)*')/g,er=/%\w`(\d+)`\w%/,Lr=0,Mr=function(t,r){var e,n,o;for(t=t.replace(tr,function(t,r){var e;return r?(e="%s`"+ ++Lr+"`s%",Pr[Lr]=r.replace(/^\\/,""),e):""}),e=r?rr:J;n=e.exec(t);)o="%b`"+ ++Lr+"`b%",Pr[Lr]=n[0],t=t.replace(e,o);return t},Ar=function(t){var r;if(null==t)return t;for(;r=er.exec(t);)t=t.replace(er,Pr[r[1]]);return t.trim()},null==(Jr=br.geom)&&(br.geom={}),Q=function(){function t(t,r,e){var n,o,i,a;for(null==e&&(e=!0),o=this,o.type=t,o.contours=[],i=0,a=r.length;a>i;i++)n=r[i],Ir(n)||n.reverse(),o.contours.push(n);o.closed=e}return t.prototype.clipToBBox=function(){throw"path clipping is not implemented yet"},t.prototype.toSVG=function(t){var r;return r=this.svgString(),t.path(r)},t.prototype.svgString=function(){var t,r,e,n,o,i,a,s,l,u,p,h,c;for(n=this,o="",e=n.closed?"Z M":"M",h=n.contours,s=0,u=h.length;u>s;s++)for(t=h[s],r=!0,o+=""===o?"M":e,l=0,p=t.length;p>l;l++)c=t[l],i=c[0],a=c[1],r||(o+="L"),o+=i+","+a,r=!1;return n.closed&&(o+="Z"),o},t.prototype.area=function(){var t,r,e,n,o,i;if(e=this,null!=e.areas)return e._area;for(e.areas=[],e._area=0,i=e.contours,n=0,o=i.length;o>n;n++)r=i[n],t=kr(r),e.areas.push(t),e._area+=t;return e._area},t.prototype.centroid=function(){var t,r,e,n,o,i,a,s,l,u,p,h,c,f,d,y,m,v,g,_,b,x,w,M,P,C,j,A,B,L,S,k,I,N,G,z,E;if(y=this,null!=y._centroid)return y._centroid;for(e=y.area(),i=a=0,p=j=0,I=y.contours.length-1;I>=0?I>=j:j>=I;p=I>=0?++j:--j)if(o=y.contours[p],n=[],f=o.length,r=y.areas[p],c=r/e,0!==c){for(h=A=0,N=f-1;N>=0?N>=A:A>=N;h=N>=0?++A:--A)if(m=o[h],v=o[(h+1)%f],s=0,n.push(m),m[0]===v[0]&&(s=Math.abs(m[1]-v[1])),m[1]===v[1]&&(s=Math.abs(m[0]-v[0])),s>10)for(t=Math.floor(2*s),g=B=1,G=t-1;G>=1?G>=B:B>=G;g=G>=1?++B:--B)_=[m[0]+g/t*(v[0]-m[0]),m[1]+g/t*(v[1]-m[1])],n.push(_);for(w=P=M=C=0,f=n.length,S=[],b=0,h=L=0,z=f-1;z>=0?z>=L:L>=z;h=z>=0?++L:--L)m=n[h],v=n[(h+1)%f],l=v[0]-m[0],u=v[1]-m[1],d=Math.sqrt(l*l+u*u),S.push(d),b+=d;for(h=k=0,E=f-1;E>=0?E>=k:k>=E;h=E>=0?++k:--k)m=n[h],x=S[h]/b,w+=x*m[0],P+=x*m[1];i+=w*c,a+=P*c}return y._centroid=[i,a],y._centroid},t.prototype.isInside=function(t,r){var e,n,o,i,a,s;if(i=this,e=i._bbox,t<e[0]||t>e[2]||r<e[1]||r>e[3])return!1;for(o=a=0,s=i.contours.length-1;s>=0?s>=a:a>=s;o=s>=0?++a:--a)if(n=i.contours[o],Nr(n,[t,r]))return!0;return!1},t}(),br.geom.Path=Q,f=function(t){function r(t,e,n){this.x=t,this.y=e,this.r=n,r.__super__.constructor.call(this,"circle",null,!0)}return ae(r,t),r.prototype.toSVG=function(t){var r;return r=this,t.circle(r.x,r.y,r.r)},r.prototype.centroid=function(){var t;return t=this,[t.x,t.y]},r.prototype.area=function(){var t;return t=this,Math.PI*t.r*m.r},r}(Q),br.geom.Circle=f,Q.fromSVG=function(t){var r,e,n,o,i,a,s,l,u,p,h,c,f,d;if(o=[],c=t.nodeName,p=null,"path"===c){for(l=t.getAttribute("d").trim(),s=Raphael.parsePathString(l),r="Z"===s[s.length-1],h=r?"Z M":"M",n=[],f=0,d=s.length;d>f;f++)e=s[f],0!==e.length&&("M"===e[0]?(n.length>2&&(o.push(n),n=[]),n.push([e[1],e[2]])):"L"===e[0]?n.push([e[1],e[2]]):"Z"===e[0]&&n.length>2&&(o.push(n),n=[]));n.length>=2&&(o.push(n),n=[]),p=new br.geom.Path(c,o,r)}else"circle"===c&&(i=t.getAttribute("cx"),a=t.getAttribute("cy"),u=t.getAttribute("r"),p=new br.geom.Circle(i,a,u));return p},z=function(){function t(t){this.points=t}return t.prototype.clipToBBox=function(r){var e,n,o,i,a,s,l,u,p,h,c,f,d,y,m,v,g,_,b,x;for(c=this,e=(new br.geom.clipping.CohenSutherland).clip,h=[],a=[],i=!1,o=v=0,g=c.points.length-2;g>=0?g>=v:v>=g;o=g>=0?++v:--v){_=c.points[o],s=_[0],l=_[1],b=c.points[o+1],u=b[0],p=b[1];try{x=e(r,s,l,u,p),f=x[0],y=x[1],d=x[2],m=x[3],i=!0,h.push([f,y]),(u!==d||p!==y||o===len(c.points)-2)&&h.push([d,m])}catch(w){n=w,i&&h.length>1&&(a.push(new t(h)),h=[]),i=!1}}return h.length>1&&a.push(new t(h)),a},t.prototype.toSVG=function(){var t,r,e,n,o,i,a,s;for(r=this,t=[],a=r.points,o=0,i=a.length;i>o;o++)s=a[o],e=s[0],n=s[1],t.push(e+","+n);return"M"+t.join("L")},t}(),br.geom.Line=z,Nr=function(t,r){var e,n,o,i,a,s,l,u,p,h,c,f,d,y,m;for(s=Math.PI,n=Math.atan2,p=2*s,a=t.length,e=0,i=y=0,m=a-1;m>=0?m>=y:y>=m;i=m>=0?++y:--y){for(h=t[i][0]-r[0],f=t[i][1]-r[1],c=t[(i+1)%a][0]-r[0],d=t[(i+1)%a][1]-r[1],l=n(f,h),u=n(d,c),o=u-l;o>s;)o-=p;for(;-s>o;)o+=p;e+=o}return Math.abs(e)>=s},Ir=function(t){return kr(t)>0},kr=function(t){var r,e,n,o,i,a,s,l;for(n=0,e=t.length,r=l=0;e>=0?e>l:l>e;r=e>=0?++l:--l)o=t[r][0],a=t[r][1],i=t[(r+1)%e][0],s=t[(r+1)%e][1],n+=o*s-i*a;return n*=.5},Gr=br.proj={},Function.prototype.bind=function(t){var r;return r=this,function(){return r.apply(t,arguments)}},W=function(){function t(t){var r,e,n;r=this,r.lon0=null!=(e=t.lon0)?e:0,r.lat0=null!=(n=t.lat0)?n:0,r.PI=Math.PI,r.HALFPI=.5*r.PI,r.QUARTERPI=.25*r.PI,r.RAD=r.PI/180,r.DEG=180/r.PI,r.lam0=r.rad(this.lon0),r.phi0=r.rad(this.lat0),r.minLat=-90,r.maxLat=90}return t.parameters=[],t.title="Projection",t.prototype.rad=function(t){return t*this.RAD},t.prototype.deg=function(t){return t*this.DEG},t.prototype.plot=function(t,r){var e,n,o,i,a,s,l,u,p,h,c;for(null==r&&(r=!0),i=[],e=!0,u=0,p=t.length;p>u;u++)h=t[u],o=h[0],n=h[1],a=this._visible(o,n),a&&(e=!1),c=this.project(o,n),s=c[0],l=c[1],!a&&r?i.push(this._truncate(s,l)):i.push([s,l]);return e?null:[i]},t.prototype.sea=function(){var t,r,e,n,o,i,a,s,l,u,p,h,c,f;for(i=this,o=i.project.bind(this),n=[],t=i.lon0,i.lon0=0,e=a=-180;180>=a;e=++a)n.push(o(e,i.maxLat));for(r=s=p=i.maxLat,h=i.minLat;h>=p?h>=s:s>=h;r=h>=p?++s:--s)n.push(o(180,r));for(e=l=180;l>=-180;e=--l)n.push(o(e,i.minLat));for(r=u=c=i.minLat,f=i.maxLat;f>=c?f>=u:u>=f;r=f>=c?++u:--u)n.push(o(-180,r));return i.lon0=t,n},t.prototype.world_bbox=function(){var t,r,e,n,o,i;for(r=this.project.bind(this),n=this.sea(),t=new br.BBox,o=0,i=n.length;i>o;o++)e=n[o],t.update(e[0],e[1]);return t},t.prototype.toString=function(){var t;return t=this,"[Proj: "+t.name+"]"},t}(),W.fromXML=function(t){var r,e,n,o,i,a,s;for(n=t.getAttribute("id"),o={},e=a=0,s=t.attributes.length-1;s>=0?s>=a:a>=s;e=s>=0?++a:--a)r=t.attributes[e],"id"!==r.name&&(o[r.name]=r.value);return i=new br.proj[n](o),i.name=n,i},br.Proj=W,v=function(t){function r(t){var e,n,o;null==t&&(t={}),e=this,e.flip=Number(null!=(n=t.flip)?n:0),1===e.flip&&(t.lon0=null!=(o=-t.lon0)?o:0),r.__super__.constructor.call(this,t)}return ae(r,t),r.parameters=["lon0","flip"],r.title="Cylindrical Projection",r.prototype._visible=function(){return!0},r.prototype.clon=function(t){return t-=this.lon0,-180>t?t+=360:t>180&&(t-=360),t},r.prototype.ll=function(t,r){return 1===this.flip?[-t,-r]:[t,r]},r}(W),b=function(t){function r(){return te=r.__super__.constructor.apply(this,arguments)}return ae(r,t),r.title="Equirectangular Projection",r.prototype.project=function(t,r){var e;return e=this.ll(t,r),t=e[0],r=e[1],t=this.clon(t),[1e3*t*Math.cos(this.phi0),1e3*-1*r]},r}(v),Gr.lonlat=b,h=function(t){function r(t){var e;r.__super__.constructor.call(this,t),this.lat1=null!=(e=t.lat1)?e:0,this.phi1=this.rad(this.lat1)}return ae(r,t),r.parameters=["lon0","lat1","flip"],r.title="Cylindrical Equal Area",r.prototype.project=function(t,r){var e,n,o,i,a;return a=this.ll(t,r),t=a[0],r=a[1],e=this.rad(this.clon(t)),n=this.rad(-1*r),o=e*Math.cos(this.phi1),i=Math.sin(n)/Math.cos(this.phi1),[1e3*o,1e3*i]},r}(v),Gr.cea=h,w=function(t){function r(t){t.lat1=45,r.__super__.constructor.call(this,t)}return ae(r,t),r.title="Gall-Peters Projection",r.parameters=["lon0","flip"],r}(h),Gr.gallpeters=w,j=function(t){function r(t){t.lat1=37.7,r.__super__.constructor.call(this,t)}return ae(r,t),r.title="Hobo-Dyer Projection",r.parameters=["lon0","flip"],r}(h),Gr.hobodyer=j,l=function(t){function r(t){t.lat1=30,r.__super__.constructor.call(this,t)}return ae(r,t),r.title="Behrmann Projection",r.parameters=["lon0","flip"],r}(h),Gr.behrmann=l,a=function(t){function r(t){t.lat1=50,r.__super__.constructor.call(this,t)}return ae(r,t),r.title="Balthasart Projection",r.parameters=["lon0","flip"],r}(h),Gr.balthasart=a,H=function(t){function r(t){r.__super__.constructor.call(this,t),this.minLat=-85,this.maxLat=85}return ae(r,t),r.title="Mercator Projection",r.prototype.project=function(t,r){var e,n,o,i,a,s,l;return i=this,l=i.ll(t,r),t=l[0],r=l[1],n=Math,e=i.rad(i.clon(t)),o=i.rad(-1*r),a=1e3*e,s=1e3*n.log((1+n.sin(o))/n.cos(o)),[a,s]},r}(v),Gr.mercator=H,$=function(t){function r(){return re=r.__super__.constructor.apply(this,arguments)}return ae(r,t),r.title="Pseudo-Cylindrical Projection",r}(v),q=function(t){function r(t){var e;r.__super__.constructor.call(this,t),e=this,e.A0=.8707,e.A1=-.131979,e.A2=-.013791,e.A3=.003971,e.A4=-.001529,e.B0=1.007226,e.B1=.015085,e.B2=-.044475,e.B3=.028874,e.B4=-.005916,e.C0=e.B0,e.C1=3*e.B1,e.C2=7*e.B2,e.C3=9*e.B3,e.C4=11*e.B4,e.EPS=1e-11,e.MAX_Y=.8707*.52*Math.PI}return ae(r,t),r.title="Natural Earth Projection",r.prototype.project=function(t,r){var e,n,o,i,a,s,l,u;return a=this,u=a.ll(t,r),t=u[0],r=u[1],e=a.rad(a.clon(t)),n=a.rad(-1*r),o=n*n,i=o*o,s=180*e*(a.A0+o*(a.A1+o*(a.A2+i*o*(a.A3+o*a.A4))))+500,l=180*n*(a.B0+o*(a.B1+i*(a.B2+a.B3*o+a.B4*i)))+270,[s,l]},r}($),Gr.naturalearth=q,nr=function(t){function r(t){var e;r.__super__.constructor.call(this,t),e=this,e.X=[1,-5.67239e-12,-715511e-10,311028e-11,.9986,-482241e-9,-24897e-9,-133094e-11,.9954,-831031e-9,-44861e-9,-9.86588e-7,.99,-.00135363,-596598e-10,367749e-11,.9822,-.00167442,-44975e-10,-572394e-11,.973,-.00214869,-903565e-10,1.88767e-8,.96,-.00305084,-900732e-10,164869e-11,.9427,-.00382792,-653428e-10,-261493e-11,.9216,-.00467747,-104566e-9,48122e-10,.8962,-.00536222,-323834e-10,-543445e-11,.8679,-.00609364,-1139e-7,332521e-11,.835,-.00698325,-640219e-10,9.34582e-7,.7986,-.00755337,-500038e-10,9.35532e-7,.7597,-.00798325,-359716e-10,-227604e-11,.7186,-.00851366,-70112e-9,-863072e-11,.6732,-.00986209,-199572e-9,191978e-10,.6213,-.010418,883948e-10,624031e-11,.5722,-.00906601,181999e-9,624033e-11,.5322,0,0,0],e.Y=[0,.0124,3.72529e-10,1.15484e-9,.062,.0124001,1.76951e-8,-5.92321e-9,.124,.0123998,-7.09668e-8,2.25753e-8,.186,.0124008,2.66917e-7,-8.44523e-8,.248,.0123971,-9.99682e-7,3.15569e-7,.31,.0124108,373349e-11,-11779e-10,.372,.0123598,-13935e-9,439588e-11,.434,.0125501,520034e-10,-100051e-10,.4968,.0123198,-980735e-10,922397e-11,.5571,.0120308,402857e-10,-52901e-10,.6176,.0120369,-390662e-10,7.36117e-7,.6769,.0117015,-280246e-10,-8.54283e-7,.7346,.0113572,-408389e-10,-5.18524e-7,.7903,.0109099,-486169e-10,-10718e-10,.8435,.0103433,-646934e-10,5.36384e-9,.8936,.00969679,-646129e-10,-854894e-11,.9394,.00840949,-192847e-9,-421023e-11,.9761,.00616525,-256001e-9,-421021e-11,1,0,0,0],e.NODES=18,e.FXC=.8487,e.FYC=1.3523,e.C1=11.459155902616464,e.RC1=.08726646259971647,e.ONEEPS=1.000001,e.EPS=1e-8}return ae(r,t),r.title="Robinson Projection",r.prototype._poly=function(t,r,e){return t[r]+e*(t[r+1]+e*(t[r+2]+e*t[r+3]))},r.prototype.project=function(t,r){var e,n,o,i,a,s,l,u;return a=this,u=a.ll(t,r),t=u[0],r=u[1],t=a.clon(t),n=a.rad(t),o=a.rad(-1*r),i=Math.abs(o),e=Math.floor(i*a.C1),e>=a.NODES&&(e=a.NODES-1),i=a.deg(i-a.RC1*e),e*=4,s=1e3*a._poly(a.X,e,i)*a.FXC*n,l=1e3*a._poly(a.Y,e,i)*a.FYC,0>o&&(l=-l),[s,l]},r}($),Gr.robinson=nr,g=function(t){function r(t){var e;r.__super__.constructor.call(this,t),e=this,e.C_x=.4222382003157712,e.C_y=1.3265004281770023,e.RC_y=.7538633073600218,e.C_p=3.5707963267948966,e.RC_p=.2800495767557787,e.EPS=1e-7,e.NITER=6}return ae(r,t),r.title="Eckert IV Projection",r.prototype.project=function(t,r){var e,n,o,i,a,s,l,u,p,h,c;for(s=this,c=s.ll(t,r),t=c[0],r=c[1],i=s.rad(s.clon(t)),a=s.rad(-1*r),l=s.C_p*Math.sin(a),e=a*a,a*=.895168+e*(.0218849+.00826809*e),o=s.NITER;o>0&&(n=Math.cos(a),u=Math.sin(a),e=(a+u*(n+2)-l)/(1+n*(n+2)-u*u),a-=e,!(Math.abs(e)<s.EPS));)o-=1;return 0===o?(p=s.C_x*i,h=0>a?-s.C_y:s.C_y):(p=s.C_x*i*(1+Math.cos(a)),h=s.C_y*Math.sin(a)),[p,h]},r}($),Gr.eckert4=g,ar=function(t){function r(){return ee=r.__super__.constructor.apply(this,arguments)}return ae(r,t),r.title="Sinusoidal Projection",r.prototype.project=function(t,r){var e,n,o,i,a,s;return n=this,s=n.ll(t,r),t=s[0],r=s[1],e=n.rad(n.clon(t)),o=n.rad(-1*r),i=1032*e*Math.cos(o),a=1032*o,[i,a]},r}($),Gr.sinusoidal=ar,X=function(t){function r(t,e,n,o,i){var a,s,l,u;null==e&&(e=1.5707963267948966),null==n&&(n=null),null==o&&(o=null),null==i&&(i=null),r.__super__.constructor.call(this,t),a=this,a.MAX_ITER=10,a.TOLERANCE=1e-7,null!=e?(s=e+e,u=Math.sin(e),l=Math.sqrt(2*Math.PI*u/(s+Math.sin(s))),a.cx=2*l/Math.PI,a.cy=l/u,a.cp=s+Math.sin(s)):null!=n&&null!=o&&"undefined"!=typeof cz&&null!==cz?(a.cx=n,a.cy=o,a.cp=i):Sr("kartograph.proj.Mollweide: either p or cx,cy,cp must be defined")}return ae(r,t),r.title="Mollweide Projection",r.prototype.project=function(t,r){var e,n,o,i,a,s,l,u,p,h,c;for(s=this,c=s.ll(t,r),t=c[0],r=c[1],a=Math,e=a.abs,i=s.rad(s.clon(t)),l=s.rad(r),o=s.cp*a.sin(l),n=s.MAX_ITER;0!==n&&(u=(l+a.sin(l)-o)/(1+a.cos(l)),l-=u,!(e(u)<s.TOLERANCE));)n-=1;return 0===n?l=l>=0?s.HALFPI:-s.HALFPI:l*=.5,p=1e3*s.cx*i*a.cos(l),h=1e3*s.cy*a.sin(l),[p,-1*h]},r}($),Gr.mollweide=X,dr=function(t){function r(t){r.__super__.constructor.call(this,t,1.0471975511965976)}return ae(r,t),r.title="Wagner IV Projection",r}(X),Gr.wagner4=dr,yr=function(t){function r(t){r.__super__.constructor.call(this,t,null,.90977,1.65014,3.00896)}return ae(r,t),r.title="Wagner V Projection",r}(X),Gr.wagner5=yr,F=function(t){function r(){return ne=r.__super__.constructor.apply(this,arguments)}var e,n;return ae(r,t),n=-89,e=89,r.parameters=["lon0","lat0","flip"],r.title="Loximuthal Projection (equidistant)",r.prototype.project=function(t,r){var e,n,o,i,a,s,l;return o=this,l=o.ll(t,r),t=l[0],r=l[1],n=Math,e=o.rad(o.clon(t)),i=o.rad(r),a=i===o.phi0?e*n.cos(o.phi0):e*(i-o.phi0)/(n.log(n.tan(o.QUARTERPI+.5*i))-n.log(n.tan(o.QUARTERPI+.5*o.phi0))),a*=1e3,s=1e3*(i-o.phi0),[a,-1*s]},r}($),Gr.loximuthal=F,c=function(t){function r(){return oe=r.__super__.constructor.apply(this,arguments)}var e,n,o,i,a;return ae(r,t),r.title="Canters Modified Sinusoidal I",r.parameters=["lon0"],e=1.1966,n=-.129,o=3*n,i=-.0076,a=5*i,r.prototype.project=function(t,r){var s,l,u,p,h,c;return s=this,c=s.ll(t,r),t=c[0],r=c[1],t=s.rad(s.clon(t)),r=s.rad(r),p=r*r,h=p*p,l=1e3*t*Math.cos(r)/(e+o*p+a*h),u=1e3*r*(e+n*p+i*h),[l,-1*u]},r}($),Gr.canters1=c,C=function(t){function r(t){r.__super__.constructor.call(this,t)}var e,n,o,i,a,s,l,u,p,h,c,f,d;return ae(r,t),r.title="Hatano Projection",l=20,o=1e-7,u=1.000001,e=2.67595,n=2.43763,p=.3736990601468637,h=.4102345310814193,a=1.75859,s=1.93052,f=.5686373742600607,d=.5179951515653813,i=.85,c=1.1764705882352942,r.prototype.project=function(t,r){var u,p,h,c,f,d,y,m,v,g;
+!function(){function t(){var t={},e=[],n=1,o=1;return t.size=function(r){return arguments.length?(o=r,t):o},t.iterations=function(r){return arguments.length?(n=r,t):n},t.add=function(r){return e.push(r),t},t.means=function(){for(var t=[],i={},a=Math.min(o,e.length),s=0,l=2*a;l>s;s++){var u=e[~~(Math.random()*e.length)],p=u.x+"/"+u.y;if(!(p in i)&&(i[p]=1,t.push({x:u.x,y:u.y})>=a))break}a=t.length;for(var h=0;n>h;h++){for(var c=r().points(t),s=0;a>s;s++){var f=t[s];f.sumX=0,f.sumY=0,f.size=0,f.points=[],f.indices=[]}for(var s=0;s<e.length;s++){var d=e[s],f=c.find(d);f.sumX+=d.x,f.sumY+=d.y,f.size++,f.points.push(d),f.indices.push(s)}for(var s=0;a>s;s++){var f=t[s];f.size&&(f.x=f.sumX/f.size,f.y=f.sumY/f.size)}}return t},t}function r(){function t(r,n){if(r.length){var o=a[n%a.length],i=r.length>>1;return r.sort(e(o)),{axis:o,point:r[i],left:t(r.slice(0,i),n+1),right:t(r.slice(i+1),n+1)}}}function r(t,r){for(var e=0,n=0;n<a.length;n++){var o=a[n],i=t[o]-r[o];e+=i*i}return e}function e(t){return function(r,e){return r=r[t],e=e[t],e>r?-1:r>e?1:0}}function n(t,e,o){if(r(t.point,e)<r(o.point,e)&&(o=t),t.left&&(o=n(t.left,e,o)),t.right){var i=t.point[t.axis]-e[t.axis];i*i<r(o.point,e)&&(o=n(t.right,e,o))}return o}var o,i={},a=["x","y"],s=[];return i.axes=function(t){return arguments.length?(a=t,i):a},i.points=function(t){return arguments.length?(s=t,o=null,i):s},i.find=function(t){return n(i.root(),t,o).point},i.root=function(){return o||(o=t(s,0))},i}var e,n,o,i,a,l,u,p,h,c,f,d,y,v,g,_,b,x,w,M,P,C,j,A,B,L,S,k,I,N,G,z,E,T,R,F,V,O,H,X,q,D,U,Q,Y,W,Z,$,K,J,tr,rr,er,nr,or,ir,ar,sr,lr,ur,pr,hr,cr,fr,dr,yr,mr,vr,gr,_r,br,xr,wr,Mr,Pr,Cr,jr,Ar,Br,Lr,Sr,kr,Ir,Nr,Gr,zr,Er,Tr,Rr,Fr,Vr,Or,Hr,Xr,qr,Dr,Ur,Qr,Yr,Wr,Zr,$r,Kr,Jr,te,re,ee,ne,oe,ie={}.hasOwnProperty,ae=function(t,r){function e(){this.constructor=t}for(var n in r)ie.call(r,n)&&(t[n]=r[n]);return e.prototype=r.prototype,t.prototype=new e,t.__super__=r.prototype,t},se=function(t,r){return function(){return t.apply(r,arguments)}},le=[].indexOf||function(t){for(var r=0,e=this.length;e>r;r++)if(r in this&&this[r]===t)return r;return-1};Br="undefined"!=typeof exports&&null!==exports?exports:this,br=Br.$K=null!=(Rr=Br.kartograph)?Rr:Br.kartograph={},br.version="0.8.1",e=Br.jQuery,br.__verbose=!1,Sr=function(){var t;try{return console.warn.apply(console,arguments)}catch(r){t=r;try{return opera.postError.apply(opera,arguments)}catch(r){return t=r,alert(Array.prototype.join.call(arguments," "))}}},xr=function(){var t;if(br.__verbose)try{return console.debug.apply(console,arguments)}catch(r){t=r;try{return opera.postError.apply(opera,arguments)}catch(r){return t=r,alert(Array.prototype.join.call(arguments," "))}}},null==(Fr=(Er=String.prototype).trim)&&(Er.trim=function(){return this.replace(/^\s+|\s+$/g,"")}),Array.prototype.indexOf||(Array.prototype.indexOf=function(t){"use strict";if(null==this)throw new TypeError;var r=Object(this),e=r.length>>>0;if(0===e)return-1;var n=0;if(arguments.length>0&&(n=Number(arguments[1]),n!=n?n=0:0!=n&&1/0!=n&&n!=-1/0&&(n=(n>0||-1)*Math.floor(Math.abs(n)))),n>=e)return-1;for(var o=n>=0?n:Math.max(e-Math.abs(n),0);e>o;o++)if(o in r&&r[o]===t)return o;return-1}),zr=function(){var t,r,e,n,o;for(t={},o="Boolean Number String Function Array Date RegExp Undefined Null".split(" "),e=0,n=o.length;n>e;e++)r=o[e],t["[object "+r+"]"]=r.toLowerCase();return function(r){var e;return e=Object.prototype.toString.call(r),t[e]||"object"}}(),i=function(){function t(t,r,e,n){var o;null==t&&(t=0),null==r&&(r=0),null==e&&(e=null),null==n&&(n=null),o=this,null===e?(o.xmin=Number.MAX_VALUE,o.xmax=-1*Number.MAX_VALUE):(o.xmin=o.left=t,o.xmax=o.right=t+e,o.width=e),null===n?(o.ymin=Number.MAX_VALUE,o.ymax=-1*Number.MAX_VALUE):(o.ymin=o.top=r,o.ymax=o.bottom=n+r,o.height=n)}return t.prototype.update=function(t,r){var e;return null==r&&(r=t[1],t=t[0]),e=this,e.xmin=Math.min(e.xmin,t),e.ymin=Math.min(e.ymin,r),e.xmax=Math.max(e.xmax,t),e.ymax=Math.max(e.ymax,r),e.left=e.xmin,e.top=e.ymin,e.right=e.xmax,e.bottom=e.ymax,e.width=e.xmax-e.xmin,e.height=e.ymax-e.ymin,this},t.prototype.intersects=function(t){return t.left<s.right&&t.right>s.left&&t.top<s.bottom&&t.bottom>s.top},t.prototype.inside=function(t,r){var e;return e=this,t>=e.left&&t<=e.right&&r>=e.top&&r<=e.bottom},t.prototype.join=function(t){var r;return r=this,r.update(t.left,t.top),r.update(t.right,t.bottom),this},t}(),i.fromXML=function(t){var r,e,n,o;return n=Number(t.getAttribute("x")),o=Number(t.getAttribute("y")),e=Number(t.getAttribute("w")),r=Number(t.getAttribute("h")),new br.BBox(n,o,e,r)},br.BBox=i,null==(Zr=br.geom)&&(br.geom={}),null==(Kr=(Tr=br.geom).clipping)&&(Tr.clipping={}),d=function(){function t(){}var r,e,n,o,i;return e=0,n=1,o=2,r=4,i=8,t.prototype.compute_out_code=function(t,r,e){var n,o;return o=this,n=o.INSIDE,r<t.left?n|=o.LEFT:r>t.right&&(n|=o.RIGHT),e<t.top?n|=o.TOP:e>t.bottom&&(n|=o.BOTTOM),n},t.prototype.clip=function(t,r,e,n,o){var i,a,s,l,u,p,h;for(u=this,a=u.compute_out_code(t,r,e),s=u.compute_out_code(t,n,o),i=False;True;){if(!(a|s)){i=True;break}if(a&s)break;l=0===code?s:a,l&u.TOP?(p=r+(n-r)*(t.top-e)/(o-e),h=t.top):l&u.BOTTOM?(p=r+(n-r)*(t.bottom-e)/(o-e),h=t.bottom):l&u.RIGHT?(h=e+(o-e)*(t.right-r)/(n-r),p=t.right):l&u.LEFT&&(h=e+(o-e)*(t.left-r)/(n-r),p=t.left),l===a?(r=p,e=h,a=u.compute_out_code(t,r,e)):(n=p,o=h,s=u.compute_out_code(t,n,o))}return i?[r,e,n,o]:null},t}(),br.geom.clipping.CohenSutherland=d,S=function(){function t(t,r,n){var o,i;i=this,i.container=o=e(t),null==r&&(r=o.width()),null==n&&(n=o.height()),0===n&&(n="auto"),i.size={h:n,w:r},i.markers=[],i.pathById={},i.container.addClass("kartograph")}return t.prototype.createSVGLayer=function(t){var r,n,o,i,a,s,l,u;return i=this,null==(u=i._layerCnt)&&(i._layerCnt=0),o=i._layerCnt++,l=i.viewport,n=i.container,a=Raphael(n[0],l.width,l.height),s=e(a.canvas),s.css({position:"absolute",top:"0px",left:"0px","z-index":o+5}),"static"===n.css("position")&&n.css({position:"relative",height:l.height+"px"}),s.addClass(t),r=e("desc",a.canvas).text(),e("desc",a.canvas).text(r.replace("with ","with kartograph "+br.version+" and ")),a},t.prototype.createHTMLLayer=function(t){var r,n,o,i,a,s;return i=this,a=i.viewport,r=i.container,null==(s=i._layerCnt)&&(i._layerCnt=0),o=i._layerCnt++,n=e('<div class="layer '+t+'" />'),n.css({position:"absolute",top:"0px",left:"0px",width:a.width+"px",height:a.height+"px","z-index":o+5}),r.append(n),n},t.prototype.load=function(t,r,n){var o,i,a,s;return i=this,o=e.Deferred(),i.clear(),i.opts=null!=n?n:{},null==(s=(a=i.opts).zoom)&&(a.zoom=1),i.mapLoadCallback=r,i._loadMapDeferred=o,i._lastMapUrl=t,i.cacheMaps&&null!=br.__mapCache[t]?i._mapLoaded(br.__mapCache[t]):e.ajax({url:t,dataType:"text",success:i._mapLoaded,context:i,error:function(t,r,e){return Sr(t,r,e)}}),o.promise()},t.prototype.loadMap=function(){return this.load.apply(this,arguments)},t.prototype.setMap=function(t,r){var e,n,o;e=this,e.opts=null!=r?r:{},null==(o=(n=e.opts).zoom)&&(n.zoom=1),e._lastMapUrl="string",e._mapLoaded(t)},t.prototype._mapLoaded=function(t){var r,n,o,a,s,l,u,p,h,c,f,d,y,m,v,g,_;l=this,l.cacheMaps&&(null==(y=br.__mapCache)&&(br.__mapCache={}),br.__mapCache[l._lastMapUrl]=t);try{t=e(t)}catch(b){return o=b,Sr("something went horribly wrong while parsing svg"),l._loadMapDeferred.reject("could not parse svg"),void 0}l.svgSrc=t,r=e("view",t),null==l.paper&&(f=l.size.w,a=l.size.h,"auto"===a&&(p=r.attr("w")/r.attr("h"),a=f/p),l.viewport=new i(0,0,f,a)),c=l.viewport,l.viewAB=n=br.View.fromXML(r[0]),u=null!=(m=l.opts.padding)?m:0,s=null!=(v=l.opts.halign)?v:"center",h=null!=(g=l.opts.valign)?g:"center",d=null!=(_=l.opts.zoom)?_:1,l.viewBC=new br.View(l.viewAB.asBBox(),c.width*d,c.height*d,u,s,h),l.proj=br.Proj.fromXML(e("proj",r)[0]),null!=l.mapLoadCallback&&l.mapLoadCallback(l),null!=l._loadMapDeferred&&l._loadMapDeferred.resolve(l)},t.prototype.addLayer=function(t,r){var n,o,i,a,s,l,u,p,h,c,f,d,y,m,v,g,_;return null==r&&(r={}),u=this,null==(v=u.layerIds)&&(u.layerIds=[]),null==(g=u.layers)&&(u.layers={}),null==u.paper&&(u.paper=u.createSVGLayer()),d=t,"object"===zr(r)?(s=r.name,c=r.key,m=r.title):r={},l=u.paper,r.add_svg_layer&&(l=u.createSVGLayer()),null==s&&(s=d),y=e("#"+d,u.svgSrc),0!==y.length?(a=new V(s,c,u,r.filter,l),n=e("*",y[0]),f=n.length,o=null!=(_=r.chunks)?_:f,i=0,h=function(){var t,e,s,l,u,c;for(t=o*i,e=u=0;o>=0?o>u:u>o;e=o>=0?++u:--u)f>t+e&&a.addPath(n.get(t+e),m);if(null!=r.styles){c=r.styles;for(s in c)l=c[s],a.style(s,l)}return i++,f>i*o?setTimeout(h,0):p()},p=function(){var t,e,n,o;for(a.paths.length>0&&(u.layers[s]=a,u.layerIds.push(s)),t=["click","mouseenter","mouseleave","dblclick","mousedown","mouseup","mouseover","mouseout"],n=0,o=t.length;o>n;n++)e=t[n],"function"===zr(r[e])&&a.on(e,r[e]);return null!=r.tooltips&&a.tooltips(r.tooltips),null!=r.done?r.done():void 0},null!=r.chunks?setTimeout(h,0):h(),u):void 0},t.prototype.getLayer=function(t){var r;return r=this,null==r.layers[t]?(Sr("could not find layer "+t),null):r.layers[t]},t.prototype.getLayerPath=function(t,r){var e,n;return n=this,e=n.getLayer(t),null!=e?"object"===zr(r)?e.getPaths(r)[0]:e.getPath(r):null},t.prototype.onLayerEvent=function(t,r,e){var n;return n=this,n.getLayer(e).on(t,r),n},t.prototype.addMarker=function(t){var r,e;return r=this,r.markers.push(t),e=r.viewBC.project(r.viewAB.project(r.proj.project(t.lonlat.lon,t.lonlat.lat))),t.render(e[0],e[1],r.container,r.paper)},t.prototype.clearMarkers=function(){var t,r,e,n,o;for(r=this,o=r.markers,e=0,n=o.length;n>e;e++)t=o[e],t.clear();return r.markers=[]},t.prototype.fadeIn=function(t){var r,e,n,o,i,a,s,l,u,p,h;null==t&&(t={}),i=this,o=null!=(l=t.layer)?l:i.layerIds[i.layerIds.length-1],e=null!=(u=t.duration)?u:500,p=i.layers[o].pathsById,h=[];for(n in p)s=p[n],h.push(function(){var t,n,o;for(o=[],t=0,n=s.length;n>t;t++)a=s[t],r="function"===zr(e)?e(a.data):e,a.svgPath.attr("opacity",0),o.push(a.svgPath.animate({opacity:1},r));return o}());return h},t.prototype.loadCoastline=function(){var t;return t=this,e.ajax({url:"coastline.json",success:t.renderCoastline,context:t})},t.prototype.resize=function(t,r){var e,n,o,i,a,s,l,u,p,h,c,f,d,y,m,v,g;a=this,e=a.container,null==t&&(t=e.width()),null==r&&(r=e.height()),a.viewport=p=new br.BBox(0,0,t,r),null!=a.paper&&a.paper.setSize(p.width,p.height),p=a.viewport,s=null!=(d=a.opts.padding)?d:0,n=null!=(y=a.opts.halign)?y:"center",u=null!=(m=a.opts.valign)?m:"center",h=a.opts.zoom,a.viewBC=new br.View(a.viewAB.asBBox(),p.width*h,p.height*h,s,n,u),v=a.layers;for(o in v)i=v[o],i.setView(a.viewBC);if(null!=a.symbolGroups)for(g=a.symbolGroups,c=0,f=g.length;f>c;c++)l=g[c],l.onResize()},t.prototype.lonlat2xy=function(t){var r,e;return e=this,2===t.length&&(t=new br.LonLat(t[0],t[1])),3===t.length&&(t=new br.LonLat(t[0],t[1],t[2])),r=e.proj.project(t.lon,t.lat,t.alt),e.viewBC.project(e.viewAB.project(r))},t.prototype.addSymbolGroup=function(t){var r,e;return r=this,null==(e=r.symbolGroups)&&(r.symbolGroups=[]),r.symbolGroups.push(t)},t.prototype.removeSymbols=function(t){var r,e,n,o,i,a;if(r=this,null!=t)return r.symbolGroups[t].remove();for(i=r.symbolGroups,a=[],n=0,o=i.length;o>n;n++)e=i[n],a.push(e.remove());return a},t.prototype.clear=function(){var t,r,n,o,i,a;if(r=this,null!=r.layers){for(t in r.layers)r.layers[t].remove();r.layers={},r.layerIds=[]}if(null!=r.symbolGroups){for(a=r.symbolGroups,o=0,i=a.length;i>o;o++)n=a[o],n.remove();r.symbolGroups=[]}return null!=r.paper?(e(r.paper.canvas).remove(),r.paper=void 0):void 0},t.prototype.loadCSS=function(t,r){var n;return n=this,Raphael.svg?(e("body").append('<link rel="stylesheet" href="'+t+'" />'),r()):e.ajax({url:t,dataType:"text",success:function(t){return n.styles=br.parsecss(t),r()},error:function(r,e,n){return Sr("error while loading "+t,r,e,n)}})},t.prototype.applyCSS=function(t,r){var e,n,o,i,a,s,l,u,p,h,c,f,d,y,m;if(o=this,null==o.styles)return t;null==(f=o._pathTypes)&&(o._pathTypes=["path","circle","rectangle","ellipse"]),null==(d=o._regardStyles)&&(o._regardStyles=["fill","stroke","fill-opacity","stroke-width","stroke-opacity"]);for(s in o.styles)for(i=s,y=i.split(","),u=0,h=y.length;h>u;u++)if(l=y[u],i=l.split(" "),i=i[i.length-1],i=i.split(":"),!(i.length>1||(i=i[0].split("."),e=i.slice(1),e.length>0&&e.indexOf(r)<0||(i=i[0],o._pathTypes.indexOf(i)>=0&&i!==t.type))))for(a=o.styles[s],m=o._regardStyles,p=0,c=m.length;c>p;p++)n=m[p],null!=a[n]&&t.attr(n,a[n]);return t},t.prototype.style=function(t,r,e,n,o){var i;return i=this,t=i.getLayer(t),null!=t?t.style(r,e,n,o):void 0},t}(),L=br,Br.kartograph=function(t,r,e){return new S(t,r,e)},br.map=function(t,r,e){return new S(t,r,e)},br.__mapCache={},e.extend(Br.kartograph,L),R=function(){function t(t,r,e){null==e&&(e=0),this.lon=Number(t),this.lat=Number(r),this.alt=Number(e)}return t.prototype.distance=function(t){var r,e,n,o,i,a,s,l,u;return u=this,r=6371,a=Math.PI/180,o=(t.lat-u.lat)*a,i=(t.lon-u.lon)*a,s=u.lat*a,l=t.lat*a,e=Math.sin(o/2)*Math.sin(o/2)+Math.sin(i/2)*Math.sin(i/2)*Math.cos(s)*Math.cos(l),n=2*Math.atan2(Math.sqrt(e),Math.sqrt(1-e)),r*n},t}(),G=function(t){function r(t,e,n){null==n&&(n=0),r.__super__.constructor.call(this,e,t,n)}return ae(r,t),r}(R),br.LonLat=R,br.LatLon=G,V=function(){function t(t,r,e,n,o){var i;i=this,i.id=t,i.path_id=r,i.paper=null!=o?o:e.paper,i.view=e.viewBC,i.map=e,i.filter=n}return t.prototype.addPath=function(t,r){var e,n,o,i,a,s,l;return n=this,null==(a=n.paths)&&(n.paths=[]),e=new O(t,n.id,n,r),"function"===zr(n.filter)&&n.filter(e.data)===!1?(e.remove(),void 0):(n.paths.push(e),null!=n.path_id?(null==(s=n.pathsById)&&(n.pathsById={}),null==(l=(o=n.pathsById)[i=e.data[n.path_id]])&&(o[i]=[]),n.pathsById[e.data[n.path_id]].push(e)):void 0)},t.prototype.hasPath=function(t){var r;return r=this,null!=r.pathsById&&null!=r.pathsById[t]},t.prototype.getPathsData=function(){var t,r,e,n,o,i;for(t=this,e=[],i=t.paths,n=0,o=i.length;o>n;n++)r=i[n],e.push(r.data);return e},t.prototype.getPath=function(t){var r;return r=this,r.hasPath(t)?r.pathsById[t][0]:null},t.prototype.getPaths=function(t){var r,e,n,o,i,a,s,l;if(o=this,n=[],"object"===zr(t))for(l=o.paths,a=0,s=l.length;s>a;a++){i=l[a],e=!0;for(r in t)e=e&&i.data[r]===t[r];e&&n.push(i)}return n},t.prototype.setView=function(t){var r,e,n,o,i;for(r=this,i=r.paths,n=0,o=i.length;o>n;n++)e=i[n],e.setView(t);return r},t.prototype.remove=function(){var t,r,e,n,o,i;for(t=this,o=t.paths,i=[],e=0,n=o.length;n>e;e++)r=o[e],i.push(r.remove());return i},t.prototype.style=function(t,r,e,n){var o,i,a,s,l,u,p,h,c,f,d;if(u=this,"object"===zr(t)){for(l in t)h=t[l],u.style(l,h);return u}for(null==e&&(e=0),null==n&&(n=0),d=u.paths,c=0,f=d.length;f>c;c++)p=d[c],h=jr(r,p.data),s=jr(e,p.data),a=jr(n,p.data),s>0?(i={},i[t]=h,o=Raphael.animation(i,1e3*s),p.svgPath.animate(o.delay(1e3*a))):p.svgPath.attr(t,h);return u},t.prototype.on=function(t,r){var n,o,i,a,s,l,u;for(i=this,n=function(){function t(t,r,e){this.type=t,this.cb=r,this.layer=e,this.handle=se(this.handle,this)}return t.prototype.handle=function(t){var r;return i=this,r=i.layer.map.pathById[t.target.getAttribute("id")],i.cb(r.data,r.svgPath,t)},t}(),o=new n(t,r,i),u=i.paths,s=0,l=u.length;l>s;s++)a=u[s],e(a.svgPath.node).bind(t,o.handle);return i},t.prototype.tooltips=function(t,r){var n,o,i,a,s,l,u;for(n=this,i=function(t,n){var o;return o={position:{target:"mouse",viewport:e(window),adjust:{x:7,y:7}},show:{delay:null!=r?r:20},events:{show:function(t,r){return e(".qtip").filter(function(){return this!==r.elements.tooltip.get(0)}).hide()}},content:{}},null!=n?"string"==typeof n?o.content.text=n:e.isArray(n)&&(o.content.title=n[0],o.content.text=n[1]):o.content.text="n/a",e(t.svgPath.node).qtip(o)},u=n.paths,s=0,l=u.length;l>s;s++)o=u[s],a=jr(t,o.data),i(o,a);return n},t.prototype.sort=function(t){var r,e,n,o,i,a;for(e=this,e.paths.sort(function(r,e){var n,o,i;return n=t(r.data),o=t(e.data),n===o?0:null!=(i=n>o)?i:{1:-1}}),r=!1,a=e.paths,o=0,i=a.length;i>o;o++)n=a[o],r&&n.svgPath.insertAfter(r.svgPath),r=n;return e},t}(),jr=function(t,r){return"function"===zr(t)?t(r):t},wr=0,O=function(){function t(t,r,e,n){var o,i,a,s,l,u,p,h,c,f,d,y,m,v;for(l=this,u=e.paper,s=e.map,d=s.viewBC,l.path=p=br.geom.Path.fromSVG(t),l.vpath=d.projectPath(p),l.svgPath=l.vpath.toSVG(u),l.svgPath.data("path",l),null==s.styles?Raphael.svg&&l.svgPath.node.setAttribute("class",r):s.applyCSS(l.svgPath,r),c="path_"+wr++,l.svgPath.node.setAttribute("id",c),s.pathById[c]=l,i={},a=m=0,v=t.attributes.length-1;v>=0?v>=m:m>=v;a=v>=0?++m:--m)o=t.attributes[a],"data-"===o.name.substr(0,5)&&(f=o.value,y=Number(f),""===f.trim()||y!==f||isNaN(y)||(f=y),i[o.name.substr(5)]=f);l.data=i,"string"===zr(n)?h=n:"function"===zr(n)&&(h=n(i)),null!=h&&l.svgPath.attr("title",h)}return t.prototype.setView=function(t){var r,e,n;return r=this,e=t.projectPath(r.path),r.vpath=e,"path"===r.path.type?(n=e.svgString(),r.svgPath.attr({path:n})):"circle"===r.path.type?r.svgPath.attr({cx:e.x,cy:e.y,r:e.r}):void 0},t.prototype.remove=function(){var t;return t=this,t.svgPath.remove()},t}(),br.parsecss=function(t,r){var e,n,o,i,a,s,l,u;for(i={},t=Mr(t),u=t.split("`b%"),s=0,l=u.length;l>s;s++)if(e=u[s],e=e.split("%b`"),!(e.length<2))if(e[0]=Ar(e[0]),o=Cr(e[1]),null!=i[e[0]])for(n in o)a=o[n],i[e[0]][n]=a;else i[e[0]]=o;return"function"!==zr(r)?i:(r(i),void 0)},Pr={},Cr=function(t){var r,e,n,o,i,a;for(n=Pr[t].replace(/^{|}$/g,""),n=Mr(n),e={},a=n.split(";"),o=0,i=a.length;i>o;o++)r=a[o],r=r.split(":"),r.length<2||(e[Ar(r[0])]=Ar(r.slice(1).join(":")));return e},J=/{[^{}]*}/,rr=/\[[^\[\]]*\]|{[^{}]*}|\([^()]*\)|function(\s+\w+)?(\s*%b`\d+`b%){2}/,tr=/(?:\/\*(?:[^\*]|\*[^\/])*\*\/)|(\\.|"(?:[^\\\"]|\\.|\\\n)*"|'(?:[^\\\']|\\.|\\\n)*')/g,er=/%\w`(\d+)`\w%/,Lr=0,Mr=function(t,r){var e,n,o;for(t=t.replace(tr,function(t,r){var e;return r?(e="%s`"+ ++Lr+"`s%",Pr[Lr]=r.replace(/^\\/,""),e):""}),e=r?rr:J;n=e.exec(t);)o="%b`"+ ++Lr+"`b%",Pr[Lr]=n[0],t=t.replace(e,o);return t},Ar=function(t){var r;if(null==t)return t;for(;r=er.exec(t);)t=t.replace(er,Pr[r[1]]);return t.trim()},null==(Jr=br.geom)&&(br.geom={}),Q=function(){function t(t,r,e){var n,o,i,a;for(null==e&&(e=!0),o=this,o.type=t,o.contours=[],i=0,a=r.length;a>i;i++)n=r[i],Ir(n)||n.reverse(),o.contours.push(n);o.closed=e}return t.prototype.clipToBBox=function(){throw"path clipping is not implemented yet"},t.prototype.toSVG=function(t){var r;return r=this.svgString(),t.path(r)},t.prototype.svgString=function(){var t,r,e,n,o,i,a,s,l,u,p,h,c;for(n=this,o="",e=n.closed?"Z M":"M",h=n.contours,s=0,u=h.length;u>s;s++)for(t=h[s],r=!0,o+=""===o?"M":e,l=0,p=t.length;p>l;l++)c=t[l],i=c[0],a=c[1],r||(o+="L"),o+=i+","+a,r=!1;return n.closed&&(o+="Z"),o},t.prototype.area=function(){var t,r,e,n,o,i;if(e=this,null!=e.areas)return e._area;for(e.areas=[],e._area=0,i=e.contours,n=0,o=i.length;o>n;n++)r=i[n],t=kr(r),e.areas.push(t),e._area+=t;return e._area},t.prototype.centroid=function(){var t,r,e,n,o,i,a,s,l,u,p,h,c,f,d,y,m,v,g,_,b,x,w,M,P,C,j,A,B,L,S,k,I,N,G,z,E;if(y=this,null!=y._centroid)return y._centroid;for(e=y.area(),i=a=0,p=j=0,I=y.contours.length-1;I>=0?I>=j:j>=I;p=I>=0?++j:--j)if(o=y.contours[p],n=[],f=o.length,r=y.areas[p],c=r/e,0!==c){for(h=A=0,N=f-1;N>=0?N>=A:A>=N;h=N>=0?++A:--A)if(m=o[h],v=o[(h+1)%f],s=0,n.push(m),m[0]===v[0]&&(s=Math.abs(m[1]-v[1])),m[1]===v[1]&&(s=Math.abs(m[0]-v[0])),s>10)for(t=Math.floor(2*s),g=B=1,G=t-1;G>=1?G>=B:B>=G;g=G>=1?++B:--B)_=[m[0]+g/t*(v[0]-m[0]),m[1]+g/t*(v[1]-m[1])],n.push(_);for(w=P=M=C=0,f=n.length,S=[],b=0,h=L=0,z=f-1;z>=0?z>=L:L>=z;h=z>=0?++L:--L)m=n[h],v=n[(h+1)%f],l=v[0]-m[0],u=v[1]-m[1],d=Math.sqrt(l*l+u*u),S.push(d),b+=d;for(h=k=0,E=f-1;E>=0?E>=k:k>=E;h=E>=0?++k:--k)m=n[h],x=S[h]/b,w+=x*m[0],P+=x*m[1];i+=w*c,a+=P*c}return y._centroid=[i,a],y._centroid},t.prototype.isInside=function(t,r){var e,n,o,i,a,s;if(i=this,e=i._bbox,t<e[0]||t>e[2]||r<e[1]||r>e[3])return!1;for(o=a=0,s=i.contours.length-1;s>=0?s>=a:a>=s;o=s>=0?++a:--a)if(n=i.contours[o],Nr(n,[t,r]))return!0;return!1},t}(),br.geom.Path=Q,f=function(t){function r(t,e,n){this.x=t,this.y=e,this.r=n,r.__super__.constructor.call(this,"circle",null,!0)}return ae(r,t),r.prototype.toSVG=function(t){var r;return r=this,t.circle(r.x,r.y,r.r)},r.prototype.centroid=function(){var t;return t=this,[t.x,t.y]},r.prototype.area=function(){var t;return t=this,Math.PI*t.r*m.r},r}(Q),br.geom.Circle=f,Q.fromSVG=function(t){var r,e,n,o,i,a,s,l,u,p,h,c,f,d;if(o=[],c=t.nodeName,p=null,"path"===c){for(l=t.getAttribute("d").trim(),s=Raphael.parsePathString(l),r="Z"===s[s.length-1],h=r?"Z M":"M",n=[],f=0,d=s.length;d>f;f++)e=s[f],0!==e.length&&("M"===e[0]?(n.length>2&&(o.push(n),n=[]),n.push([e[1],e[2]])):"L"===e[0]?n.push([e[1],e[2]]):"Z"===e[0]&&n.length>2&&(o.push(n),n=[]));n.length>=2&&(o.push(n),n=[]),p=new br.geom.Path(c,o,r)}else"circle"===c&&(i=t.getAttribute("cx"),a=t.getAttribute("cy"),u=t.getAttribute("r"),p=new br.geom.Circle(i,a,u));return p},z=function(){function t(t){this.points=t}return t.prototype.clipToBBox=function(r){var e,n,o,i,a,s,l,u,p,h,c,f,d,y,m,v,g,_,b,x;for(c=this,e=(new br.geom.clipping.CohenSutherland).clip,h=[],a=[],i=!1,o=v=0,g=c.points.length-2;g>=0?g>=v:v>=g;o=g>=0?++v:--v){_=c.points[o],s=_[0],l=_[1],b=c.points[o+1],u=b[0],p=b[1];try{x=e(r,s,l,u,p),f=x[0],y=x[1],d=x[2],m=x[3],i=!0,h.push([f,y]),(u!==d||p!==y||o===len(c.points)-2)&&h.push([d,m])}catch(w){n=w,i&&h.length>1&&(a.push(new t(h)),h=[]),i=!1}}return h.length>1&&a.push(new t(h)),a},t.prototype.toSVG=function(){var t,r,e,n,o,i,a,s;for(r=this,t=[],a=r.points,o=0,i=a.length;i>o;o++)s=a[o],e=s[0],n=s[1],t.push(e+","+n);return"M"+t.join("L")},t}(),br.geom.Line=z,Nr=function(t,r){var e,n,o,i,a,s,l,u,p,h,c,f,d,y,m;for(s=Math.PI,n=Math.atan2,p=2*s,a=t.length,e=0,i=y=0,m=a-1;m>=0?m>=y:y>=m;i=m>=0?++y:--y){for(h=t[i][0]-r[0],f=t[i][1]-r[1],c=t[(i+1)%a][0]-r[0],d=t[(i+1)%a][1]-r[1],l=n(f,h),u=n(d,c),o=u-l;o>s;)o-=p;for(;-s>o;)o+=p;e+=o}return Math.abs(e)>=s},Ir=function(t){return kr(t)>0},kr=function(t){var r,e,n,o,i,a,s,l;for(n=0,e=t.length,r=l=0;e>=0?e>l:l>e;r=e>=0?++l:--l)o=t[r][0],a=t[r][1],i=t[(r+1)%e][0],s=t[(r+1)%e][1],n+=o*s-i*a;return n*=.5},Gr=br.proj={},W=function(){function t(t){var r,e,n;r=this,r.lon0=null!=(e=t.lon0)?e:0,r.lat0=null!=(n=t.lat0)?n:0,r.PI=Math.PI,r.HALFPI=.5*r.PI,r.QUARTERPI=.25*r.PI,r.RAD=r.PI/180,r.DEG=180/r.PI,r.lam0=r.rad(this.lon0),r.phi0=r.rad(this.lat0),r.minLat=-90,r.maxLat=90}return t.parameters=[],t.title="Projection",t.prototype.rad=function(t){return t*this.RAD},t.prototype.deg=function(t){return t*this.DEG},t.prototype.plot=function(t,r){var e,n,o,i,a,s,l,u,p,h,c;for(null==r&&(r=!0),i=[],e=!0,u=0,p=t.length;p>u;u++)h=t[u],o=h[0],n=h[1],a=this._visible(o,n),a&&(e=!1),c=this.project(o,n),s=c[0],l=c[1],!a&&r?i.push(this._truncate(s,l)):i.push([s,l]);return e?null:[i]},t.prototype.sea=function(){var t,r,e,n,o,i,a,s,l,u,p,h,c,f;for(i=this,o=i.project.bind(this),n=[],t=i.lon0,i.lon0=0,e=a=-180;180>=a;e=++a)n.push(o(e,i.maxLat));for(r=s=p=i.maxLat,h=i.minLat;h>=p?h>=s:s>=h;r=h>=p?++s:--s)n.push(o(180,r));for(e=l=180;l>=-180;e=--l)n.push(o(e,i.minLat));for(r=u=c=i.minLat,f=i.maxLat;f>=c?f>=u:u>=f;r=f>=c?++u:--u)n.push(o(-180,r));return i.lon0=t,n},t.prototype.world_bbox=function(){var t,r,e,n,o,i;for(r=this.project.bind(this),n=this.sea(),t=new br.BBox,o=0,i=n.length;i>o;o++)e=n[o],t.update(e[0],e[1]);return t},t.prototype.toString=function(){var t;return t=this,"[Proj: "+t.name+"]"},t}(),W.fromXML=function(t){var r,e,n,o,i,a,s;for(n=t.getAttribute("id"),o={},e=a=0,s=t.attributes.length-1;s>=0?s>=a:a>=s;e=s>=0?++a:--a)r=t.attributes[e],"id"!==r.name&&(o[r.name]=r.value);return i=new br.proj[n](o),i.name=n,i},br.Proj=W,v=function(t){function r(t){var e,n,o;null==t&&(t={}),e=this,e.flip=Number(null!=(n=t.flip)?n:0),1===e.flip&&(t.lon0=null!=(o=-t.lon0)?o:0),r.__super__.constructor.call(this,t)}return ae(r,t),r.parameters=["lon0","flip"],r.title="Cylindrical Projection",r.prototype._visible=function(){return!0},r.prototype.clon=function(t){return t-=this.lon0,-180>t?t+=360:t>180&&(t-=360),t},r.prototype.ll=function(t,r){return 1===this.flip?[-t,-r]:[t,r]},r}(W),b=function(t){function r(){return te=r.__super__.constructor.apply(this,arguments)}return ae(r,t),r.title="Equirectangular Projection",r.prototype.project=function(t,r){var e;return e=this.ll(t,r),t=e[0],r=e[1],t=this.clon(t),[1e3*t*Math.cos(this.phi0),1e3*-1*r]},r}(v),Gr.lonlat=b,h=function(t){function r(t){var e;r.__super__.constructor.call(this,t),this.lat1=null!=(e=t.lat1)?e:0,this.phi1=this.rad(this.lat1)}return ae(r,t),r.parameters=["lon0","lat1","flip"],r.title="Cylindrical Equal Area",r.prototype.project=function(t,r){var e,n,o,i,a;return a=this.ll(t,r),t=a[0],r=a[1],e=this.rad(this.clon(t)),n=this.rad(-1*r),o=e*Math.cos(this.phi1),i=Math.sin(n)/Math.cos(this.phi1),[1e3*o,1e3*i]},r}(v),Gr.cea=h,w=function(t){function r(t){t.lat1=45,r.__super__.constructor.call(this,t)}return ae(r,t),r.title="Gall-Peters Projection",r.parameters=["lon0","flip"],r}(h),Gr.gallpeters=w,j=function(t){function r(t){t.lat1=37.7,r.__super__.constructor.call(this,t)}return ae(r,t),r.title="Hobo-Dyer Projection",r.parameters=["lon0","flip"],r}(h),Gr.hobodyer=j,l=function(t){function r(t){t.lat1=30,r.__super__.constructor.call(this,t)}return ae(r,t),r.title="Behrmann Projection",r.parameters=["lon0","flip"],r}(h),Gr.behrmann=l,a=function(t){function r(t){t.lat1=50,r.__super__.constructor.call(this,t)}return ae(r,t),r.title="Balthasart Projection",r.parameters=["lon0","flip"],r}(h),Gr.balthasart=a,H=function(t){function r(t){r.__super__.constructor.call(this,t),this.minLat=-85,this.maxLat=85}return ae(r,t),r.title="Mercator Projection",r.prototype.project=function(t,r){var e,n,o,i,a,s,l;return i=this,l=i.ll(t,r),t=l[0],r=l[1],n=Math,e=i.rad(i.clon(t)),o=i.rad(-1*r),a=1e3*e,s=1e3*n.log((1+n.sin(o))/n.cos(o)),[a,s]},r}(v),Gr.mercator=H,$=function(t){function r(){return re=r.__super__.constructor.apply(this,arguments)}return ae(r,t),r.title="Pseudo-Cylindrical Projection",r}(v),q=function(t){function r(t){var e;r.__super__.constructor.call(this,t),e=this,e.A0=.8707,e.A1=-.131979,e.A2=-.013791,e.A3=.003971,e.A4=-.001529,e.B0=1.007226,e.B1=.015085,e.B2=-.044475,e.B3=.028874,e.B4=-.005916,e.C0=e.B0,e.C1=3*e.B1,e.C2=7*e.B2,e.C3=9*e.B3,e.C4=11*e.B4,e.EPS=1e-11,e.MAX_Y=.8707*.52*Math.PI}return ae(r,t),r.title="Natural Earth Projection",r.prototype.project=function(t,r){var e,n,o,i,a,s,l,u;return a=this,u=a.ll(t,r),t=u[0],r=u[1],e=a.rad(a.clon(t)),n=a.rad(-1*r),o=n*n,i=o*o,s=180*e*(a.A0+o*(a.A1+o*(a.A2+i*o*(a.A3+o*a.A4))))+500,l=180*n*(a.B0+o*(a.B1+i*(a.B2+a.B3*o+a.B4*i)))+270,[s,l]},r}($),Gr.naturalearth=q,nr=function(t){function r(t){var e;r.__super__.constructor.call(this,t),e=this,e.X=[1,-5.67239e-12,-715511e-10,311028e-11,.9986,-482241e-9,-24897e-9,-133094e-11,.9954,-831031e-9,-44861e-9,-9.86588e-7,.99,-.00135363,-596598e-10,367749e-11,.9822,-.00167442,-44975e-10,-572394e-11,.973,-.00214869,-903565e-10,1.88767e-8,.96,-.00305084,-900732e-10,164869e-11,.9427,-.00382792,-653428e-10,-261493e-11,.9216,-.00467747,-104566e-9,48122e-10,.8962,-.00536222,-323834e-10,-543445e-11,.8679,-.00609364,-1139e-7,332521e-11,.835,-.00698325,-640219e-10,9.34582e-7,.7986,-.00755337,-500038e-10,9.35532e-7,.7597,-.00798325,-359716e-10,-227604e-11,.7186,-.00851366,-70112e-9,-863072e-11,.6732,-.00986209,-199572e-9,191978e-10,.6213,-.010418,883948e-10,624031e-11,.5722,-.00906601,181999e-9,624033e-11,.5322,0,0,0],e.Y=[0,.0124,3.72529e-10,1.15484e-9,.062,.0124001,1.76951e-8,-5.92321e-9,.124,.0123998,-7.09668e-8,2.25753e-8,.186,.0124008,2.66917e-7,-8.44523e-8,.248,.0123971,-9.99682e-7,3.15569e-7,.31,.0124108,373349e-11,-11779e-10,.372,.0123598,-13935e-9,439588e-11,.434,.0125501,520034e-10,-100051e-10,.4968,.0123198,-980735e-10,922397e-11,.5571,.0120308,402857e-10,-52901e-10,.6176,.0120369,-390662e-10,7.36117e-7,.6769,.0117015,-280246e-10,-8.54283e-7,.7346,.0113572,-408389e-10,-5.18524e-7,.7903,.0109099,-486169e-10,-10718e-10,.8435,.0103433,-646934e-10,5.36384e-9,.8936,.00969679,-646129e-10,-854894e-11,.9394,.00840949,-192847e-9,-421023e-11,.9761,.00616525,-256001e-9,-421021e-11,1,0,0,0],e.NODES=18,e.FXC=.8487,e.FYC=1.3523,e.C1=11.459155902616464,e.RC1=.08726646259971647,e.ONEEPS=1.000001,e.EPS=1e-8}return ae(r,t),r.title="Robinson Projection",r.prototype._poly=function(t,r,e){return t[r]+e*(t[r+1]+e*(t[r+2]+e*t[r+3]))},r.prototype.project=function(t,r){var e,n,o,i,a,s,l,u;return a=this,u=a.ll(t,r),t=u[0],r=u[1],t=a.clon(t),n=a.rad(t),o=a.rad(-1*r),i=Math.abs(o),e=Math.floor(i*a.C1),e>=a.NODES&&(e=a.NODES-1),i=a.deg(i-a.RC1*e),e*=4,s=1e3*a._poly(a.X,e,i)*a.FXC*n,l=1e3*a._poly(a.Y,e,i)*a.FYC,0>o&&(l=-l),[s,l]},r}($),Gr.robinson=nr,g=function(t){function r(t){var e;r.__super__.constructor.call(this,t),e=this,e.C_x=.4222382003157712,e.C_y=1.3265004281770023,e.RC_y=.7538633073600218,e.C_p=3.5707963267948966,e.RC_p=.2800495767557787,e.EPS=1e-7,e.NITER=6}return ae(r,t),r.title="Eckert IV Projection",r.prototype.project=function(t,r){var e,n,o,i,a,s,l,u,p,h,c;for(s=this,c=s.ll(t,r),t=c[0],r=c[1],i=s.rad(s.clon(t)),a=s.rad(-1*r),l=s.C_p*Math.sin(a),e=a*a,a*=.895168+e*(.0218849+.00826809*e),o=s.NITER;o>0&&(n=Math.cos(a),u=Math.sin(a),e=(a+u*(n+2)-l)/(1+n*(n+2)-u*u),a-=e,!(Math.abs(e)<s.EPS));)o-=1;return 0===o?(p=s.C_x*i,h=0>a?-s.C_y:s.C_y):(p=s.C_x*i*(1+Math.cos(a)),h=s.C_y*Math.sin(a)),[p,h]},r}($),Gr.eckert4=g,ar=function(t){function r(){return ee=r.__super__.constructor.apply(this,arguments)}return ae(r,t),r.title="Sinusoidal Projection",r.prototype.project=function(t,r){var e,n,o,i,a,s;return n=this,s=n.ll(t,r),t=s[0],r=s[1],e=n.rad(n.clon(t)),o=n.rad(-1*r),i=1032*e*Math.cos(o),a=1032*o,[i,a]},r}($),Gr.sinusoidal=ar,X=function(t){function r(t,e,n,o,i){var a,s,l,u;null==e&&(e=1.5707963267948966),null==n&&(n=null),null==o&&(o=null),null==i&&(i=null),r.__super__.constructor.call(this,t),a=this,a.MAX_ITER=10,a.TOLERANCE=1e-7,null!=e?(s=e+e,u=Math.sin(e),l=Math.sqrt(2*Math.PI*u/(s+Math.sin(s))),a.cx=2*l/Math.PI,a.cy=l/u,a.cp=s+Math.sin(s)):null!=n&&null!=o&&"undefined"!=typeof cz&&null!==cz?(a.cx=n,a.cy=o,a.cp=i):Sr("kartograph.proj.Mollweide: either p or cx,cy,cp must be defined")}return ae(r,t),r.title="Mollweide Projection",r.prototype.project=function(t,r){var e,n,o,i,a,s,l,u,p,h,c;for(s=this,c=s.ll(t,r),t=c[0],r=c[1],a=Math,e=a.abs,i=s.rad(s.clon(t)),l=s.rad(r),o=s.cp*a.sin(l),n=s.MAX_ITER;0!==n&&(u=(l+a.sin(l)-o)/(1+a.cos(l)),l-=u,!(e(u)<s.TOLERANCE));)n-=1;return 0===n?l=l>=0?s.HALFPI:-s.HALFPI:l*=.5,p=1e3*s.cx*i*a.cos(l),h=1e3*s.cy*a.sin(l),[p,-1*h]},r}($),Gr.mollweide=X,dr=function(t){function r(t){r.__super__.constructor.call(this,t,1.0471975511965976)}return ae(r,t),r.title="Wagner IV Projection",r}(X),Gr.wagner4=dr,yr=function(t){function r(t){r.__super__.constructor.call(this,t,null,.90977,1.65014,3.00896)}return ae(r,t),r.title="Wagner V Projection",r}(X),Gr.wagner5=yr,F=function(t){function r(){return ne=r.__super__.constructor.apply(this,arguments)}var e,n;return ae(r,t),n=-89,e=89,r.parameters=["lon0","lat0","flip"],r.title="Loximuthal Projection (equidistant)",r.prototype.project=function(t,r){var e,n,o,i,a,s,l;return o=this,l=o.ll(t,r),t=l[0],r=l[1],n=Math,e=o.rad(o.clon(t)),i=o.rad(r),a=i===o.phi0?e*n.cos(o.phi0):e*(i-o.phi0)/(n.log(n.tan(o.QUARTERPI+.5*i))-n.log(n.tan(o.QUARTERPI+.5*o.phi0))),a*=1e3,s=1e3*(i-o.phi0),[a,-1*s]},r}($),Gr.loximuthal=F,c=function(t){function r(){return oe=r.__super__.constructor.apply(this,arguments)}var e,n,o,i,a;return ae(r,t),r.title="Canters Modified Sinusoidal I",r.parameters=["lon0"],e=1.1966,n=-.129,o=3*n,i=-.0076,a=5*i,r.prototype.project=function(t,r){var s,l,u,p,h,c;return s=this,c=s.ll(t,r),t=c[0],r=c[1],t=s.rad(s.clon(t)),r=s.rad(r),p=r*r,h=p*p,l=1e3*t*Math.cos(r)/(e+o*p+a*h),u=1e3*r*(e+n*p+i*h),[l,-1*u]},r}($),Gr.canters1=c,C=function(t){function r(t){r.__super__.constructor.call(this,t)}var e,n,o,i,a,s,l,u,p,h,c,f,d;return ae(r,t),r.title="Hatano Projection",l=20,o=1e-7,u=1.000001,e=2.67595,n=2.43763,p=.3736990601468637,h=.4102345310814193,a=1.75859,s=1.93052,f=.5686373742600607,d=.5179951515653813,i=.85,c=1.1764705882352942,r.prototype.project=function(t,r){var u,p,h,c,f,d,y,m,v,g;
for(c=this,g=c.ll(t,r),t=g[0],r=g[1],h=c.rad(c.clon(t)),f=c.rad(r),u=Math.sin(f)*(0>f?n:e),p=v=l;v>=1&&(d=(f+Math.sin(f)-u)/(1+Math.cos(f)),f-=d,!(Math.abs(d)<o));p=v+=-1);return y=1e3*i*h*Math.cos(f*=.5),m=1e3*Math.sin(f)*(0>f?s:a),[y,-1*m]},r}($),Gr.hatano=C,P=function(t){function r(t){var e;r.__super__.constructor.call(this,t),e=this,e.lat1=41.737,e.p1=new X,e.p0=new ar}return ae(r,t),r.title="Goode Homolosine Projection",r.parameters=["lon0"],r.prototype.project=function(t,r){var e,n;return e=this,n=e.ll(t,r),t=n[0],r=n[1],t=e.clon(t),Math.abs(r)>e.lat1?e.p1.project(t,r):e.p0.project(t,r)},r}($),Gr.goodehomolosine=P,D=function(t){function r(t){r.__super__.constructor.call(this,t),this.r=100*this.HALFPI}var e;return ae(r,t),r.title="Nicolosi Globular Projection",r.parameters=["lon0"],e=1e-10,r.prototype._visible=function(t){var r;return r=this,t=r.clon(t),t>-90&&90>t},r.prototype.project=function(t,r){var n,o,i,a,s,l,u,p,h,c,f,d,y;return s=this,y=s.ll(t,r),t=y[0],r=y[1],i=s.rad(s.clon(t)),u=s.rad(r),Math.abs(i)<e?(f=0,d=u):Math.abs(u)<e?(f=i,d=0):Math.abs(Math.abs(i)-s.HALFPI)<e?(f=i*Math.cos(u),d=s.HALFPI*Math.sin(u)):Math.abs(Math.abs(u)-s.HALFPI)<e?(f=0,d=u):(c=s.HALFPI/i-i/s.HALFPI,n=u/s.HALFPI,h=Math.sin(u),o=(1-n*n)/(h-n),p=c/o,p*=p,a=(c*h/o-.5*c)/(1+p),l=(h/p+.5*o)/(1+1/p),f=Math.cos(u),f=Math.sqrt(a*a+f*f/(1+p)),f=s.HALFPI*(a+(0>i?-f:f)),d=Math.sqrt(l*l-(h*h/p+o*h-1)/(1+1/p)),d=s.HALFPI*(l+(0>u?d:-d))),[100*f,-100*d]},r.prototype.sea=function(){var t,r,e,n,o;for(r=[],n=this.r,t=Math,e=o=0;360>=o;e=++o)r.push([t.cos(this.rad(e))*n,t.sin(this.rad(e))*n]);return r},r.prototype.world_bbox=function(){var t;return t=this.r,new br.BBox(-t,-t,2*t,2*t)},r}($),Gr.nicolosi=D,o=function(t){function r(t,e){var n;null==e&&(e=1e3),r.__super__.constructor.call(this,t),n=this,n.r=e,n.elevation0=n.to_elevation(n.lat0),n.azimuth0=n.to_azimuth(n.lon0)}return ae(r,t),r.parameters=["lon0","lat0"],r.title="Azimuthal Projection",r.prototype.to_elevation=function(t){var r;return r=this,(t+90)/180*r.PI-r.HALFPI},r.prototype.to_azimuth=function(t){var r;return r=this,2*(t+180)/360*r.PI-r.PI},r.prototype._visible=function(t,r){var e,n,o,i,a;return a=this,i=Math,o=a.to_elevation(r),e=a.to_azimuth(t),n=i.sin(o)*i.sin(a.elevation0)+i.cos(a.elevation0)*i.cos(o)*i.cos(e-a.azimuth0),n>=0},r.prototype._truncate=function(t,r){var e,n,o,i,a;return e=Math,n=this.r,o=e.atan2(r-n,t-n),i=n+n*e.cos(o),a=n+n*e.sin(o),[i,a]},r.prototype.sea=function(){var t,r,e,n,o;for(r=[],n=this.r,t=Math,e=o=0;360>=o;e=++o)r.push([n+t.cos(this.rad(e))*n,n+t.sin(this.rad(e))*n]);return r},r.prototype.world_bbox=function(){var t;return t=this.r,new br.BBox(0,0,2*t,2*t)},r}(W),U=function(t){function r(){return Vr=r.__super__.constructor.apply(this,arguments)}return ae(r,t),r.title="Orthographic Projection",r.prototype.project=function(t,r){var e,n,o,i,a,s,l,u;return i=this,o=Math,n=i.to_elevation(r),e=i.to_azimuth(t),s=i.r*o.cos(n)*o.sin(e-i.azimuth0),u=-i.r*(o.cos(i.elevation0)*o.sin(n)-o.sin(i.elevation0)*o.cos(n)*o.cos(e-i.azimuth0)),a=i.r+s,l=i.r+u,[a,l]},r}(o),Gr.ortho=U,k=function(t){function r(t){r.__super__.constructor.call(this,t),this.scale=.5*Math.sqrt(2)}return ae(r,t),r.title="Lambert Azimuthal Equal-Area Projection",r.prototype.project=function(t,r){var e,n,o,i,a,s,l,u,p,h;return a=this.rad(r),o=this.rad(t),i=Math,s=i.sin,e=i.cos,n=i.pow(2/(1+s(this.phi0)*s(a)+e(this.phi0)*e(a)*e(o-this.lam0)),.5),n*=this.scale,u=this.r*n*e(a)*s(o-this.lam0),h=-this.r*n*(e(this.phi0)*s(a)-s(this.phi0)*e(a)*e(o-this.lam0)),l=this.r+u,p=this.r+h,[l,p]},r}(o),Gr.laea=k,ur=function(t){function r(){return Or=r.__super__.constructor.apply(this,arguments)}return ae(r,t),r.title="Stereographic Projection",r.prototype.project=function(t,r){var e,n,o,i,a,s,l,u,p,h,c;return s=this.rad(r),i=this.rad(t),a=Math,l=a.sin,e=a.cos,o=.5,n=2*o/(1+l(this.phi0)*l(s)+e(this.phi0)*e(s)*e(i-this.lam0)),p=this.r*n*e(s)*l(i-this.lam0),c=-this.r*n*(e(this.phi0)*l(s)-l(this.phi0)*e(s)*e(i-this.lam0)),u=this.r+p,h=this.r+c,[u,h]},r}(o),Gr.stereo=ur,or=function(t){function r(t){var e,n,o,i,a,s,l,u,p,h;for(r.__super__.constructor.call(this,{lon0:0,lat0:0}),this.dist=null!=(u=t.dist)?u:3,this.up=this.rad(null!=(p=t.up)?p:0),this.tilt=this.rad(null!=(h=t.tilt)?h:0),this.scale=1,i=Number.MAX_VALUE,o=-1*Number.MAX_VALUE,e=s=0;179>=s;e=++s)for(n=l=0;360>=l;n=++l)a=this.project(n-180,e-90),i=Math.min(a[0],i),o=Math.max(a[0],o);this.scale=2*this.r/(o-i),r.__super__.constructor.call(this,t)}return ae(r,t),r.parameters=["lon0","lat0","tilt","dist","up"],r.title="Satellite Projection",r.prototype.project=function(t,r,e){var n,o,i,a,s,l,u,p,h,c,f,d,y,m,v,g,_,b,x,w,M;return null==e&&(e=0),c=this.rad(r),p=this.rad(t),h=Math,y=h.sin,i=h.cos,f=this.r,d=f*(e+6371)/3671,a=y(this.phi0)*y(c)+i(this.phi0)*i(c)*i(p-this.lam0),u=(this.dist-1)/(this.dist-a),u=(this.dist-1)/(this.dist-a),u*=this.scale,_=d*u*i(c)*y(p-this.lam0),w=-d*u*(i(this.phi0)*y(c)-y(this.phi0)*i(c)*i(p-this.lam0)),l=i(this.up),v=y(this.up),s=i(this.tilt),m=y(this.tilt),o=d*(this.dist-1),n=(w*l+_*v)*y(this.tilt)/o+s,b=(_*l-w*v)*i(this.tilt)/n,M=(w*l+_*v)/n,g=f+b,x=f+M,[g,x]},r.prototype._visible=function(t,r){var e,n,o,i;return o=this.to_elevation(r),e=this.to_azimuth(t),i=Math,n=i.sin(o)*i.sin(this.elevation0)+i.cos(this.elevation0)*i.cos(o)*i.cos(e-this.azimuth0),n>=1/this.dist},r.prototype.sea=function(){var t,r,e,n,o;for(r=[],n=this.r,t=Math,e=o=0;360>=o;e=++o)r.push([n+t.cos(this.rad(e))*n,n+t.sin(this.rad(e))*n]);return r},r}(o),Gr.satellite=or,_=function(t){function r(){return Hr=r.__super__.constructor.apply(this,arguments)}return ae(r,t),r.title="Equidistant Azimuthal Projection",r.prototype.project=function(t,r){var e,n,o,i,a,s,l,u,p,h,c,f,d;return l=this,u=l.rad(r),a=l.rad(t),s=Math,p=s.sin,n=s.cos,o=p(this.phi0)*p(u)+n(this.phi0)*n(u)*n(a-this.lam0),e=s.acos(o),i=.325*e/p(e),c=this.r*i*n(u)*p(a-this.lam0),d=-this.r*i*(n(this.phi0)*p(u)-p(this.phi0)*n(u)*n(a-this.lam0)),h=this.r+c,f=this.r+d,[h,f]},r.prototype._visible=function(){return!0},r}(o),Gr.equi=_,n=function(t){function r(t){var e;e=this,t.lat0=0,r.__super__.constructor.call(this,t),e.lam0=0}var e;return ae(r,t),r.title="Aitoff Projection",r.parameters=["lon0"],e=.6366197723675814,r.prototype.project=function(t,r){var n,o,i,a,s,l,u,p;return a=this,p=a.ll(t,r),t=p[0],r=p[1],t=a.clon(t),i=a.rad(t),s=a.rad(r),n=.5*i,o=Math.acos(Math.cos(s)*Math.cos(n)),0!==o?(u=1/Math.sin(o),l=2*o*Math.cos(s)*Math.sin(n)*u,u*=o*Math.sin(s)):l=u=0,a.winkel&&(l=.5*(l+i*e),u=.5*(u+s)),[1e3*l,-1e3*u]},r.prototype._visible=function(){return!0},r}($),Gr.aitoff=n,mr=function(t){function r(t){r.__super__.constructor.call(this,t),this.winkel=!0}return ae(r,t),r.title="Winkel Tripel Projection",r}(n),Gr.winkel3=mr,y=function(t){function r(t){var e,n,o;e=this,r.__super__.constructor.call(this,t),e.lat1=null!=(n=t.lat1)?n:30,e.phi1=e.rad(e.lat1),e.lat2=null!=(o=t.lat2)?o:50,e.phi2=e.rad(e.lat2)}return ae(r,t),r.title="Conic Projection",r.parameters=["lon0","lat0","lat1","lat2"],r.prototype._visible=function(t,r){var e;return e=this,r>e.minLat&&r<e.maxLat},r.prototype._truncate=function(t,r){return[t,r]},r.prototype.clon=function(t){return t-=this.lon0,-180>t?t+=360:t>180&&(t-=360),t},r}(W),I=function(t){function r(t){var e,n,o,i,a,s,l,u,p,h,c,f,d;p=this,r.__super__.constructor.call(this,t),a=Math,d=[a.sin,a.cos,a.abs,a.log,a.tan,a.pow],h=d[0],o=d[1],e=d[2],xr=d[3],f=d[4],l=d[5],p.n=s=c=h(p.phi1),i=o(p.phi1),u=e(p.phi1-p.phi2)>=1e-10,u&&(s=xr(i/o(p.phi2))/xr(f(p.QUARTERPI+.5*p.phi2)/f(p.QUARTERPI+.5*p.phi1))),p.c=n=i*l(f(p.QUARTERPI+.5*p.phi1),s)/s,p.rho0=e(e(p.phi0)-p.HALFPI)<1e-10?0:n*l(f(p.QUARTERPI+.5*p.phi0),-s),p.minLat=-60,p.maxLat=85}return ae(r,t),r.title="Lambert Conformal Conic Projection",r.prototype.project=function(t,r){var e,n,o,i,a,s,l,u,p,h,c,f,d,y,m;return h=this,l=h.rad(r),o=h.rad(h.clon(t)),a=Math,m=[a.sin,a.cos,a.abs,a.log,a.tan,a.pow],c=m[0],n=m[1],e=m[2],xr=m[3],f=m[4],u=m[5],s=h.n,p=e(e(l)-h.HALFPI)<1e-10?0:h.c*u(f(h.QUARTERPI+.5*l),-s),i=o*s,d=1e3*p*c(i),y=1e3*(h.rho0-p*n(i)),[d,-1*y]},r}(y),Gr.lcc=I,Z=function(t){function r(){return Xr=r.__super__.constructor.apply(this,arguments)}return ae(r,t),r}(y),fr=function(){function t(t,r,e,n,o,i){var a;a=this,a.bbox=t,a.width=r,a.padding=null!=n?n:0,a.halign=null!=o?o:"center",a.valign=null!=i?i:"center",a.height=e,a.scale=Math.min((r-2*n)/t.width,(e-2*n)/t.height)}return t.prototype.project=function(t,r){var e,n,o,i,a,s,l;return null==r&&(r=t[1],t=t[0]),o=this,i=o.scale,e=o.bbox,n=o.height,a=o.width,s="center"===o.halign?.5*(a-e.width*i):"left"===o.halign?o.padding*i:a-(e.width-o.padding)*i,l="center"===o.valign?.5*(n-e.height*i):"top"===o.valign?o.padding*i:0,t=(t-e.left)*i+s,r=(r-e.top)*i+l,[t,r]},t.prototype.projectPath=function(t){var r,e,n,o,i,a,s,l,u,p,h,c,f,d,y,m,v;if(o=this,"path"===t.type){for(n=[],r=[99999,99999,-99999,-99999],d=t.contours,p=0,c=d.length;c>p;p++){for(a=d[p],e=[],h=0,f=a.length;f>h;h++)y=a[h],l=y[0],u=y[1],m=o.project(l,u),l=m[0],u=m[1],e.push([l,u]),r[0]=Math.min(r[0],l),r[1]=Math.min(r[1],u),r[2]=Math.max(r[2],l),r[3]=Math.max(r[3],u);n.push(e)}return i=new br.geom.Path(t.type,n,t.closed),i._bbox=r,i}return"circle"===t.type?(v=o.project(t.x,t.y),l=v[0],u=v[1],s=t.r*o.scale,new br.geom.Circle(l,u,s)):void 0},t.prototype.asBBox=function(){var t;return t=this,new br.BBox(0,0,t.width,t.height)},t}(),fr.fromXML=function(t){var r,e,n,o,a;return a=Number(t.getAttribute("w")),n=Number(t.getAttribute("h")),o=Number(t.getAttribute("padding")),e=t.getElementsByTagName("bbox")[0],r=i.fromXML(e),new br.View(r,a,n,o)},br.View=fr,S.prototype.dotgrid=function(t){var r,e,n,o,i,a,s,l,u,p,h,c,f,d,y,m,v,g,_,b,x,w,M,P,C,j,A,B,L,S,k,I,N,G,z,E,T,R,F,V,O,H,X,q,D,U,Q,Y,W;if(v=this,m=null!=(T=t.layer)?T:v.layerIds[v.layerIds.length-1],!v.layers.hasOwnProperty(m))return Sr('dotgrid error: layer "'+m+'" not found'),void 0;if(y=v.layers[m],e=t.data,n=t.value,o=t.key,_={},null!=o&&"array"===zr(e))for(A=0,k=e.length;k>A;A++)w=e[A],d=w[o],_[String(d)]=w;else for(d in e)w=e[d],_[String(d)]=w;if(l=null!=(R=t.style)?R:{fill:"black",stroke:"none"},P=t.size,f=null!=(F=t.gridsize)?F:15,s=null!=(V=y.dotgrid)?V:y.dotgrid={gridsize:f,grid:[]},s.gridsize!==f)for(O=s.grid,B=0,I=O.length;I>B;B++)c=O[B],null!=c.shape&&(c.shape.remove(),c.shape=null);if(f>0){if(0===s.grid.length)for(C=L=0,H=v.viewport.width;f>0?H>=L:L>=H;C=L+=f)for(j=S=0,X=v.viewport.height;f>0?X>=S:S>=X;j=S+=f){c={x:C+.2*(Math.random()-.5)*f,y:j+.2*(Math.random()-.5)*f,pathid:!1},h=!1,q=y.pathsById;for(d in q){for(b=q[d],z=0,N=b.length;N>z;z++)if(g=b[z],g.vpath.isInside(c.x,c.y)){h=!0,x=null!=(D=_[d])?D:null,M=P(x),c.pathid=d,c.shape=y.paper.circle(c.x,c.y,1);break}if(h)break}s.grid.push(c)}for(U=s.grid,E=0,G=U.length;G>E;E++)c=U[E],c.pathid&&(x=null!=(Q=_[c.pathid])?Q:null,M=P(x),p=null!=(Y=t.duration)?Y:0,i=null!=(W=t.delay)?W:0,a="function"===zr(i)?i(x):i,p>0&&Raphael.svg?(r=Raphael.animation({r:.5*M},p),c.shape.animate(r.delay(a))):c.shape.attr({r:.5*M}),u="function"===zr(l)?l(x):l,c.shape.attr(u))}},gr=null!=(qr=br.filter)?qr:br.filter={},gr.__knownFilter={},gr.__patternFills=0,V.prototype.SVG=function(t,r){var e,n;if("string"==typeof t&&(t=window.document.createElementNS("http://www.w3.org/2000/svg",t)),r)for(e in r)n=r[e],t.setAttribute(e,n);return t},S.prototype.addFilter=function(t,r,e){var n,o,i;if(null==e&&(e={}),i=this,n=window.document,null==br.filter[r])throw"unknown filter type "+r;return o=new br.filter[r](e).getFilter(t),i.paper.defs.appendChild(o)},V.prototype.applyFilter=function(t){var r;return r=this,e("."+r.id,r.paper.canvas).attr({filter:"url(#"+t+")"})},V.prototype.applyTexture=function(t,r,e){var n,o,i,a,s,l;for(null==r&&(r=!1),null==e&&(e="#000"),o=this,gr.__patternFills+=1,s=o.paths,l=[],i=0,a=s.length;a>i;i++)n=s[i],!r||r(n.data)?l.push(n.svgPath.attr({fill:"url("+t+")"})):l.push(n.svgPath.attr("fill",e));return l},x=function(){function t(t){this.params=null!=t?t:{}}return t.prototype.getFilter=function(t){var r,e;return e=this,r=e.SVG("filter",{id:t}),e.buildFilter(r),r},t.prototype._getFilter=function(){throw"not implemented"},t.prototype.SVG=function(t,r){var e,n;if("string"==typeof t&&(t=window.document.createElementNS("http://www.w3.org/2000/svg",t)),r)for(e in r)n=r[e],t.setAttribute(e,n);return t},t}(),u=function(t){function r(){return Dr=r.__super__.constructor.apply(this,arguments)}return ae(r,t),r.prototype.buildFilter=function(t){var r,e,n;return n=this,r=n.SVG,e=r("feGaussianBlur",{stdDeviation:n.params.size||4,result:"blur"}),t.appendChild(e)},r}(x),gr.blur=u,_r=function(t){var r,e,n,o;if(t.trim().match(/^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/))return(4===t.length||7===t.length)&&(t=t.substr(1)),3===t.length&&(t=t.split(""),t=t[0]+t[0]+t[1]+t[1]+t[2]+t[2]),o=parseInt(t,16),n=o>>16,e=255&o>>8,r=255&o,[n,e,r];throw'unknown color format: "'+t+'"'},M=function(t){function r(){return Ur=r.__super__.constructor.apply(this,arguments)}return ae(r,t),r.prototype.buildFilter=function(t){var r,e,n,o,i,a,s,l,u,p,h,c,f;i=this,e=null!=(l=i.params.blur)?l:4,s=null!=(u=i.params.strength)?u:1,a=null!=(p=i.params.color)?p:"#D1BEB0","string"===zr(a)&&(a=_r(a)),n=null!=(h=i.params.inner)?h:!1,o=null!=(c=i.params.knockout)?c:!1,r=null!=(f=i.params.alpha)?f:1,n?i.innerGlow(t,e,s,a,r,o):i.outerGlow(t,e,s,a,r,o)},r.prototype.outerGlow=function(t,r,e,n,o,i){var a,s,l,u,p,h,c;return p=this,a=p.SVG,u=a("feColorMatrix",{"in":"SourceGraphic",type:"matrix",values:"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0",result:"mask"}),t.appendChild(u),e>0&&(c=a("feMorphology",{"in":"mask",radius:e,operator:"dilate",result:"mask"}),t.appendChild(c)),u=a("feColorMatrix",{"in":"mask",type:"matrix",values:"0 0 0 0 "+n[0]/255+" 0 0 0 0 "+n[1]/255+" 0 0 0 0 "+n[2]/255+" 0 0 0 1 0",result:"r0"}),t.appendChild(u),s=a("feGaussianBlur",{"in":"r0",stdDeviation:r,result:"r1"}),t.appendChild(s),l=a("feComposite",{operator:"out","in":"r1",in2:"mask",result:"comp"}),t.appendChild(l),h=a("feMerge"),i||h.appendChild(a("feMergeNode",{"in":"SourceGraphic"})),h.appendChild(a("feMergeNode",{"in":"r1"})),t.appendChild(h)},r.prototype.innerGlow=function(t,r,e,n,o,i){var a,s,l,u,p,h,c;return p=this,a=p.SVG,xr("innerglow"),u=a("feColorMatrix",{"in":"SourceGraphic",type:"matrix",values:"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 500 0",result:"mask"}),t.appendChild(u),c=a("feMorphology",{"in":"mask",radius:e,operator:"erode",result:"r1"}),t.appendChild(c),s=a("feGaussianBlur",{"in":"r1",stdDeviation:r,result:"r2"}),t.appendChild(s),u=a("feColorMatrix",{type:"matrix","in":"r2",values:"1 0 0 0 "+n[0]/255+" 0 1 0 0 "+n[1]/255+" 0 0 1 0 "+n[2]/255+" 0 0 0 -1 1",result:"r3"}),t.appendChild(u),l=a("feComposite",{operator:"in","in":"r3",in2:"mask",result:"comp"}),t.appendChild(l),h=a("feMerge"),i||h.appendChild(a("feMergeNode",{"in":"SourceGraphic"})),h.appendChild(a("feMergeNode",{"in":"comp"})),t.appendChild(h)},r}(x),gr.glow=M,S.prototype.addGeoPath=function(t,r,e){var n,o,i;return null==r&&(r=[]),null==e&&(e=""),n=this,i=n.getGeoPathStr(t,r),o=n.paper.path(i),""!==e&&o.node.setAttribute("class",e),o},S.prototype.getGeoPathStr=function(t,r){var e,n,o,i,a,s,l;null==r&&(r=[]),o=this,"string"===zr(r)&&(r=r.split("")),0===r.length&&r.push("M"),i="";for(n in t)a=t[n],e=null!=(l=r[n])?l:"L",s=o.lonlat2xy(a),isNaN(s[0])||isNaN(s[1])||(i+=e+s[0]+","+s[1]);return i},S.prototype.addGeoPolygon=function(t,r){var e,n,o;o=this,e=["M"];for(n in t)e.push("L");return e.push("Z"),o.addGeoPath(t,e,r)},ir=function(){function t(t,r,e){var n,o,i,a;null==t&&(t=[0,1]),null==r&&(r=null),null==e&&(e=null),this.rangedScale=se(this.rangedScale,this),this.scale=se(this.scale,this),o=this,a=[];for(n in t)("function"!==zr(e)||e(t[n])!==!1)&&(i=null!=r?"function"===zr(r)?r(t[n]):t[n][r]:t[n],isNaN(i)||a.push(i));a=a.sort(function(t,r){return t-r}),o.values=a,o._range=[0,1],o.rangedScale.range=function(t){return o._range=t,o.rangedScale}}return t.prototype.scale=function(t){return t},t.prototype.rangedScale=function(t){var r,e;return r=this,t=r.scale(t),e=r._range,t*(e[1]-e[0])+e[0]},t}(),E=function(t){function r(){return this.scale=se(this.scale,this),Qr=r.__super__.constructor.apply(this,arguments)}return ae(r,t),r.prototype.scale=function(t){var r,e;return r=this,e=r.values,(t-e[0])/(e[e.length-1]-e[0])},r}(ir),T=function(t){function r(){return this.scale=se(this.scale,this),Yr=r.__super__.constructor.apply(this,arguments)}return ae(r,t),r.prototype.scale=function(t){var r,e;return r=this,e=r.values,xr=Math.log,(xr(t)-xr(e[0]))/(xr(e[e.length-1])-xr(e[0]))},r}(ir),sr=function(t){function r(){return this.scale=se(this.scale,this),Wr=r.__super__.constructor.apply(this,arguments)}return ae(r,t),r.prototype.scale=function(t){var r,e;return r=this,e=r.values,Math.sqrt((t-e[0])/(e[e.length-1]-e[0]))},r}(ir),K=function(t){function r(){return this.scale=se(this.scale,this),$r=r.__super__.constructor.apply(this,arguments)}return ae(r,t),r.prototype.scale=function(t){var r,e,n,o,i,a;n=this,a=n.values,e=a.length-1;for(r in a){if(i=a[Number(r)],o=a[Number(r)+1],t===i)return r/e;if(e>r&&t>i&&o>t)return r/e+(t-i)/(o-i)}},r}(ir),br.scale={},br.scale.identity=function(){return new ir(domain,prop,gr).rangedScale},br.scale.linear=function(t,r,e){return new E(t,r,e).rangedScale},br.scale.log=function(t,r,e){return new T(t,r,e).rangedScale},br.scale.sqrt=function(t,r,e){return new sr(t,r,e).rangedScale},br.scale.quantile=function(t,r,e){return new K(t,r,e).rangedScale},hr=function(){function t(t){r=this,r.location=t.location,r.data=t.data,r.map=t.map,r.layers=t.layers,r.key=t.key,r.x=t.x,r.y=t.y}var r;return r=null,t.prototype.init=function(){return r},t.prototype.overlaps=function(){return!1},t.prototype.update=function(){return r},t.prototype.nodes=function(){return[]},t.prototype.clear=function(){return r},t}(),br.Symbol=hr,cr=function(){function r(t){this._initTooltips=se(this._initTooltips,this),this._noverlap=se(this._noverlap,this),this._kMeans=se(this._kMeans,this);var e,o,i,a,s,l,u,p,h,c,f,d,y,m,v,g,_,b,x,w;for(n=this,c=["data","location","type","map"],p=["filter","tooltip","click","delay","sortBy","clustering","aggregate","clusteringOpts","mouseenter","mouseleave"],f=0,v=c.length;v>f;f++){if(h=c[f],null==t[h])throw"SymbolGroup: missing argument '"+h+"'";n[h]=t[h]}for(d=0,g=p.length;g>d;d++)h=p[d],null!=t[h]&&(n[h]=t[h]);if(e=n.type,null==e)return Sr("could not resolve symbol type",n.type),void 0;for(x=e.props,y=0,_=x.length;_>y;y++)h=x[y],null!=t[h]&&(n[h]=t[h]);for(n.layers={mapcanvas:n.map.paper},w=e.layers,m=0,b=w.length;b>m;m++)s=w[m],u=r._layerid++,a="sl_"+u,"svg"===s.type?l=n.map.createSVGLayer(a):"html"===s.type&&(l=n.map.createHTMLLayer(a)),n.layers[s.id]=l;n.symbols=[];for(i in n.data)o=n.data[i],"function"===zr(n.filter)?n.filter(o,i)&&n.add(o,i):n.add(o,i);n.layout(),n.render(),n.map.addSymbolGroup(n)}var n;return n=null,r.prototype.add=function(t,r){var e,o,i,a,s,l,u,p;for(n=this,e=n.type,o=n._evaluate(n.location,t,r),"array"===zr(o)&&(o=new br.LonLat(o[0],o[1])),a={layers:n.layers,location:o,data:t,key:null!=r?r:n.symbols.length,map:n.map},p=e.props,l=0,u=p.length;u>l;l++)i=p[l],null!=n[i]&&(a[i]=n._evaluate(n[i],t,r));return s=new e(a),n.symbols.push(s),s},r.prototype.layout=function(){var t,r,e,o,i,a,s,l,u,p;for(u=n.symbols,s=0,l=u.length;l>s;s++){if(i=u[s],r=i.location,"string"===zr(r)){if(p=r.split("."),t=p[0],o=p[1],e=n.map.getLayerPath(t,o),null==e){Sr("could not find layer path "+t+"."+o);continue}a=n.map.viewBC.project(e.path.centroid())}else a=n.map.lonlat2xy(r);i.x=a[0],i.y=a[1]}return"k-means"===n.clustering?n._kMeans():"noverlap"===n.clustering&&n._noverlap(),n},r.prototype.render=function(){var t,r,o,i,a,s,l,u,p,h,c;for(n=this,n.sortBy&&(i="asc","string"===zr(n.sortBy)&&(n.sortBy=n.sortBy.split(" ",2),o=n.sortBy[0],i=null!=(p=n.sortBy[1])?p:"asc"),n.symbols=n.symbols.sort(function(t,r){var e,a,s;return"function"===zr(n.sortBy)?(a=n.sortBy(t.data,t),s=n.sortBy(r.data,r)):(a=t[o],s=r[o]),a===s?0:(e="asc"===i?1:-1,a>s?1*e:-1*e)})),h=n.symbols,a=0,l=h.length;l>a;a++)for(r=h[a],r.render(),c=r.nodes(),s=0,u=c.length;u>s;s++)t=c[s],t.symbol=r;return"function"===zr(n.tooltip)&&n._initTooltips(),e.each(["click","mouseenter","mouseleave"],function(o,i){var a,s,l,u;if("function"===zr(n[i])){for(l=n.symbols,u=[],a=0,s=l.length;s>a;a++)r=l[a],u.push(function(){var o,a,s,l;for(s=r.nodes(),l=[],o=0,a=s.length;a>o;o++)t=s[o],l.push(e(t)[i](function(t){var r;for(r=t.target;!r.symbol;)r=e(r).parent().get(0);return t.stopPropagation(),n[i](r.symbol.data,r.symbol,t)}));return l}.call(this));return u}}),n},r.prototype.tooltips=function(t){return n=this,n.tooltips=t,n._initTooltips(),n},r.prototype.remove=function(t){var r,e,o,i,a,s,l,u,p,h;for(n=this,o=[],u=n.symbols,s=0,l=u.length;l>s;s++)if(a=u[s],null==t||t(a.data))try{a.clear()}catch(c){r=c,Sr("error: symbolgroup.remove")}else o.push(a);if(null==t){p=n.layers,h=[];for(e in p)i=p[e],"mapcanvas"!==e?h.push(i.remove()):h.push(void 0);return h}return n.symbols=o},r.prototype._evaluate=function(t,r,e){var n;return n="function"===zr(t)?t(r,e):t},r.prototype._kMeans=function(){var r,e,o,i,a,s,l,u,p,h,c,f,d,y,m,v,g,_,b,x,w,M,P;for(n=this,null==(x=n.osymbols)&&(n.osymbols=n.symbols),r=n.type,null!=n.clusteringOpts&&(h=n.clusteringOpts.size),null==h&&(h=64),e=t().iterations(16).size(h),w=n.osymbols,f=0,v=w.length;v>f;f++)p=w[f],e.add({x:p.x,y:p.y});for(s=e.means(),l=[],d=0,g=s.length;g>d;d++)if(a=s[d],0!==a.size){for(o=[],M=a.indices,y=0,_=M.length;_>y;y++)i=M[y],o.push(n.osymbols[i].data);for(o=n.aggregate(o),c={layers:n.layers,location:!1,data:o,map:n.map},P=r.props,m=0,b=P.length;b>m;m++)u=P[m],null!=n[u]&&(c[u]=n._evaluate(n[u],o));p=new r(c),p.x=a.x,p.y=a.y,l.push(p)}return n.symbols=l},r.prototype._noverlap=function(){var t,r,e,o,i,a,s,l,u,p,h,c,f,d,y,m,v,g,_,b,x,w,M,P,C,j,A,B,L,S,k,I,N,G,z,E,T,R,F,V,O,H,X,q,D,U,Q;if(n=this,null==(H=n.osymbols)&&(n.osymbols=n.symbols),u=3,t=n.type,le.call(t.props,"radius")<0)return Sr('noverlap layout only available for symbols with property "radius"'),void 0;for(j=n.osymbols.slice(),null!=n.clusteringOpts&&(L=n.clusteringOpts.tolerance,f=n.clusteringOpts.maxRatio),null==L&&(L=.05),null==f&&(f=.8),s=N=0,X=u-1;X>=0?X>=N:N>=X;s=X>=0?++N:--N){for(j.sort(function(t,r){return r.radius-t.radius}),p=j.length,d=[],y=G=0,q=p-3;q>=0?q>=G:G>=q;y=q>=0?++G:--G)if(M=j[y]){for(b=M.radius*(1-L),h=M.x-b,g=M.x+b,A=M.y-b,r=M.y+b,l=[],m=z=D=y+1,U=p-2;U>=D?U>=z:z>=U;m=U>=D?++z:--z)P=j[m],P&&(x=P.radius,c=P.x-x,_=P.x+x,B=P.y-x,e=P.y+x,x/M.radius<f&&(c>g||h>_||B>r||A>e||(i=P.x-M.x,a=P.y-M.y,(b+x)*(b+x)>i*i+a*a&&l.push(m))));if(l.length>0){for(o=[M.data],v=M.radius*M.radius,E=0,T=l.length;T>E;E++)s=l[E],o.push(j[s].data),v+=j[s].radius*j[s].radius;for(o=n.aggregate(o),C={layers:n.layers,location:!1,data:o,map:n.map},Q=t.props,V=0,R=Q.length;R>V;V++)y=Q[V],null!=n[y]&&(C[y]=n._evaluate(n[y],o));for(w=new t(C),S=M.radius*M.radius/v,k=M.x*S,I=M.y*S,O=0,F=l.length;F>O;O++)s=l[O],P=j[s],S=P.radius*P.radius/v,k+=P.x*S,I+=P.y*S,j[s]=void 0;w.x=k,w.y=I,j[y]=void 0,d.push(w)}else d.push(M)}j=d}return n.symbols=j},r.prototype._initTooltips=function(){var t,r,o,i,a,s,l,u,p,h,c;for(n=this,i=n.tooltip,h=n.symbols,s=0,u=h.length;u>s;s++)for(o=h[s],t={position:{target:"mouse",viewport:e(window),adjust:{x:7,y:7}},show:{delay:20},content:{},events:{show:function(t,r){return e(".qtip").filter(function(){return this!==r.elements.tooltip.get(0)}).hide()}}},a=i(o.data,o.key),"string"===zr(a)?t.content.text=a:"array"===zr(a)&&(t.content.title=a[0],t.content.text=a[1]),c=o.nodes(),l=0,p=c.length;p>l;l++)r=c[l],e(r).qtip(t)},r.prototype.onResize=function(){var t,r,e,o;for(n=this,n.layout(),o=n.symbols,r=0,e=o.length;e>r;r++)t=o[r],t.update()},r.prototype.update=function(t,r,e){var o,i,a,s,l,u,p,h;for(n=this,null==t&&(t={}),p=n.symbols,a=0,l=p.length;l>a;a++){for(i=p[a],h=n.type.props,s=0,u=h.length;u>s;s++)o=h[s],null!=t[o]?i[o]=n._evaluate(t[o],i.data):null!=n[o]&&(i[o]=n._evaluate(n[o],i.data));i.update(r,e)}return n},r}(),cr._layerid=0,br.SymbolGroup=cr,S.prototype.addSymbols=function(t){return t.map=this,new cr(t)},br.dorlingLayout=function(t,r){var n,o,i,a,s,l,u,p,h,c,f,d,y,m,v;for(null==r&&(r=40),f=[],e.each(t.symbols,function(t,r){return f.push({i:t,x:r.path.attrs.cx,y:r.path.attrs.cy,r:r.path.attrs.r})}),f.sort(function(t,r){return r.r-t.r}),i=function(){var r,e,n;for(e=0,n=f.length;n>e;e++)r=f[e],t.symbols[r.i].path.attr({cx:r.x,cy:r.y})},d=v=1;r>=1?r>=v:v>=r;d=r>=1?++v:--v)for(h in f)for(c in f)if(c>h){if(n=f[h],o=f[c],n.x+n.r<o.x-o.r||n.x-n.r>o.x+o.r)continue;if(n.y+n.r<o.y-o.r||n.y-n.r>o.y+o.r)continue;l=n.x-o.x,u=n.y-o.y,s=l*l+u*u,y=n.r+o.r,m=y*y,m>s&&(a=Math.sqrt(s),p=10/a,n.x+=l*p*(1-n.r/y),n.y+=u*p*(1-n.r/y),o.x-=l*p*(1-o.r/y),o.y-=u*p*(1-o.r/y))}return i()},p=function(t){function r(t){this.nodes=se(this.nodes,this),this.clear=se(this.clear,this),this.update=se(this.update,this),this.render=se(this.render,this),this.overlaps=se(this.overlaps,this);var e,n,o;e=this,r.__super__.constructor.call(this,t),e.radius=null!=(n=t.radius)?n:4,e.style=t.style,e.attrs=t.attrs,e.title=t.title,e["class"]=null!=(o=t["class"])?o:"bubble"}return ae(r,t),r.prototype.overlaps=function(t){var r,e,n,o,i,a,s,l,u,p,h;return n=this,p=[n.x,n.y,n.radius],a=p[0],l=p[1],o=p[2],h=[t.x,t.y,t.radius],s=h[0],u=h[1],i=h[2],a-o>s+i||s-i>a+o||l-o>u+i||u-i>l+o?!1:(r=a-s,e=l-u,r*r+e*e>(o+i)*(o+i)?!1:!0)},r.prototype.render=function(){var t;return t=this,null==t.path&&(t.path=t.layers.mapcanvas.circle(t.x,t.y,t.radius)),t.update(),t.map.applyCSS(t.path),t},r.prototype.update=function(t,r){var n,o,i;return null==t&&(t=!1),null==r&&(r="expo-out"),o=this,i=o.path,n={cx:o.x,cy:o.y,r:o.radius},null!=o.attrs&&(n=e.extend(n,o.attrs)),t?i.animate(n,t,r):i.attr(n),null!=i.node&&(null!=o.style&&i.node.setAttribute("style",o.style),null!=o["class"]&&i.node.setAttribute("class",o["class"])),null!=o.title&&i.attr("title",o.title),o},r.prototype.clear=function(){var t;return t=this,t.path.remove(),t},r.prototype.nodes=function(){var t;return t=this,[t.path.node]},r}(hr),p.props=["radius","style","class","title","attrs"],p.layers=[],br.Bubble=p,B=function(t){function r(t){var e,n,o,i,a,s;e=this,r.__super__.constructor.call(this,t),e.icon=null!=(n=t.icon)?n:"",e.offset=null!=(o=t.offset)?o:[0,0],e.iconsize=null!=(i=t.iconsize)?i:[10,10],e["class"]=null!=(a=t["class"])?a:"",e.title=null!=(s=t.title)?s:""}return ae(r,t),r.prototype.render=function(){var t,r;return r=this,t=r.map.container,r.img=e("<img />"),r.img.attr({src:r.icon,title:r.title,alt:r.title,width:r.iconsize[0],height:r.iconsize[1]}),r.img.addClass(r["class"]),r.img.css({position:"absolute","z-index":1e3,cursor:"pointer"}),r.img[0].symbol=r,t.append(r.img),r.update()},r.prototype.update=function(){var t;return t=this,t.img.css({left:t.x+t.offset[0]+"px",top:t.y+t.offset[1]+"px"})},r.prototype.clear=function(){var t;return t=this,t.img.remove(),t},r.prototype.nodes=function(){var t;return t=this,[t.img]},r}(br.Symbol),B.props=["icon","offset","class","title","iconsize"],B.layers=[],br.Icon=B,pr=function(t){function r(t){var e,n,o,i,a;e=this,r.__super__.constructor.call(this,t),e.text=null!=(n=t.text)?n:"",e.style=null!=(o=t.style)?o:"",e["class"]=null!=(i=t["class"])?i:"",e.offset=null!=(a=t.offset)?a:[0,0]}return ae(r,t),r.prototype.render=function(){var t,r;return r=this,r.lbl=t=r.layers.mapcanvas.text(r.x,r.y,r.text),r.update(),r},r.prototype.update=function(){var t;return t=this,t.lbl.attr({x:t.x+t.offset[0],y:t.y+t.offset[1]}),t.lbl.node.setAttribute("style",t.style),t.lbl.node.setAttribute("class",t["class"])},r.prototype.clear=function(){var t;return t=this,t.lbl.remove(),t},r.prototype.nodes=function(){var t;return t=this,[t.lbl.node]},r}(br.Symbol),pr.props=["text","style","class","offset"],pr.layers=[],br.Label=pr,A=function(t){function r(t){var e,n,o,i;e=this,r.__super__.constructor.call(this,t),e.text=null!=(n=t.text)?n:"",e.css=null!=(o=t.css)?o:"",e["class"]=null!=(i=t["class"])?i:""}return ae(r,t),r.prototype.render=function(){var t,r,n;return n=this,t=e("<div>"+n.text+"</div>"),t.css({width:"80px",position:"absolute",left:"-40px","text-align":"center"}),n.lbl=r=e('<div class="label" />'),r.append(t),n.layers.lbl.append(r),t.css({height:t.height()+"px",top:t.height()*-.4+"px"}),n.update(),n},r.prototype.update=function(){var t;return t=this,t.lbl.css({position:"absolute",left:t.x+"px",top:t.y+"px"}),t.lbl.css(t.css)},r.prototype.clear=function(){var t;return t=this,t.lbl.remove(),t},r.prototype.nodes=function(){var t;return t=this,[t.lbl[0]]},r}(br.Symbol),A.props=["text","css","class"],A.layers=[{id:"lbl",type:"html"}],br.HtmlLabel=A,N=function(t){function r(t){this.nodes=se(this.nodes,this),this.clear=se(this.clear,this),this.update=se(this.update,this),this.render=se(this.render,this);var e,n,o;e=this,r.__super__.constructor.call(this,t),e.labelattrs=null!=(n=t.labelattrs)?n:{},e.buffer=t.buffer,e.center=null!=(o=t.center)?o:!0}return ae(r,t),r.prototype.render=function(t){var e;return e=this,null!=e.title&&""!==String(e.title).trim()&&(e.buffer&&(e.bufferlabel=e.layers.mapcanvas.text(e.x,e.y,e.title)),e.label=e.layers.mapcanvas.text(e.x,e.y,e.title)),r.__super__.render.call(this,t),e},r.prototype.update=function(t,n){var o,i,a,s,l;return null==t&&(t=!1),null==n&&(n="expo-out"),i=this,r.__super__.update.call(this,t,n),null!=i.label&&(a=i.map.viewport,o=e.extend({},i.labelattrs),s=i.x,l=i.y,i.center?l-=0:s>.5*a.width?(o["text-anchor"]="end",s-=i.radius+5):s<.5*a.width&&(o["text-anchor"]="start",s+=i.radius+5),o.x=s,o.y=l,i.buffer&&(i.bufferlabel.attr(o),i.bufferlabel.attr({stroke:"#fff",fill:"#fff","stroke-linejoin":"round","stroke-linecap":"round","stroke-width":6})),i.label.attr(o),i.label.toFront()),i},r.prototype.clear=function(){var t;return t=this,r.__super__.clear.apply(this,arguments)},r.prototype.nodes=function(){var t,e;return t=this,e=r.__super__.nodes.apply(this,arguments),t.label&&e.push(t.label.node),t.bufferlabel&&e.push(t.bufferlabel.node),e},r}(p),N.props=["radius","style","class","title","labelattrs","buffer","center","attrs"],N.layers=[],br.LabeledBubble=N,Y=function(t){function r(t){var n,o,i,a,s,l,u,p,h,c;e=this,r.__super__.constructor.call(this,t),e.radius=null!=(o=t.radius)?o:4,e.styles=null!=(i=t.styles)?i:"",e.colors=null!=(a=t.colors)?a:["#3cc","#c3c","#33c","#cc3"],e.titles=null!=(s=t.titles)?s:["","","","",""],e.values=null!=(l=t.values)?l:[],e.border=null!=(u=t.border)?u:!1,e.borderWidth=null!=(p=t.borderWidth)?p:2,e["class"]=null!=(h=t["class"])?h:"piechart",null==(c=(n=Raphael.fn).pieChart)&&(n.pieChart=vr)}var e;return ae(r,t),e=null,r.prototype.overlaps=function(t){var r,n,o,i,a,s,l,u,p,h;return p=[e.x,e.y,e.radius],a=p[0],l=p[1],o=p[2],h=[t.x,t.y,t.radius],s=h[0],u=h[1],i=h[2],a-o>s+i||s-i>a+o||l-o>u+i||u-i>l+o?!1:(r=a-s,n=l-u,r*r+n*n>(o+i)*(o+i)?!1:!0)},r.prototype.render=function(){var t;return e=this,null!=e.border&&(t=e.layers.mapcanvas.circle(e.x,e.y,e.radius+e.borderWidth).attr({stroke:"none",fill:e.border})),e.chart=e.layers.mapcanvas.pieChart(e.x,e.y,e.radius,e.values,e.titles,e.colors,"none"),e.chart.push(t),e},r.prototype.update=function(){},r.prototype.clear=function(){var t,r,n,o;for(e=this,o=e.chart,r=0,n=o.length;n>r;r++)t=o[r],t.remove();return e},r.prototype.nodes=function(){var t,r,n,o,i;for(o=e.chart,i=[],r=0,n=o.length;n>r;r++)t=o[r],i.push(t.node);return i},r}(hr),Y.props=["radius","values","styles","class","titles","colors","border","borderWidth"],Y.layers=[],br.PieChart=Y,vr=function(t,r,e,n,o,i,a){var s,l,u,p,h,c,f,d,y,m,v;if(isNaN(t)||isNaN(r)||isNaN(e))return[];for(p=this,c=Math.PI/180,l=p.set(),f=function(t,r,e,n,o,i){var a,s,l,u;return a=t+e*Math.cos(-n*c),s=t+e*Math.cos(-o*c),l=r+e*Math.sin(-n*c),u=r+e*Math.sin(-o*c),p.path(["M",t,r,"L",a,l,"A",e,e,0,+(o-n>180),0,s,u,"z"]).attr(i)},s=-270,d=0,h=function(o){var u,p,h,c,y,m,v;v=n[o],u=360*v/d,m=s+.5*u,p=i[o],c=500,h=30,y=f(t,r,e,s,s+u,{fill:p,stroke:a,"stroke-width":1}),y.mouseover(function(){y.stop().animate({transform:"s1.1 1.1 "+t+" "+r},c,"elastic")
}),y.mouseout(function(){y.stop().animate({transform:""},c,"elastic")}),s+=u,l.push(y)},m=0,v=n.length;v>m;m++)y=n[m],d+=y;for(u in n)h(u);return l},drawStackedBars=function(t,r,e,n,o,i,a,s){function l(t,r,e,n,o){return u.rect(t,r,e,n).attr(o)}for(var u=this,p=this.set(),h=0,c=0,f=function(i){var u=o[i],f=n*u/c,d=t-.5*e,y=r+.5*n-h,m=e,v=a[i],g=500,_=l(d,y-f,m,f,{fill:v,stroke:s,"stroke-width":1});h+=f,_.mouseover(function(){_.stop().animate({transform:"s1.1 1.1 "+t+" "+r},g,"elastic")}).mouseout(function(){_.stop().animate({transform:""},g,"elastic")}),p.push(_)},d=0,y=o.length;y>d;d++)c+=o[d];for(d=0;y>d;d++)f(d);return p},lr=function(t){function r(t){var e,n,o,i,a,s,l,u,p,h;e=this,r.__super__.constructor.call(this,t),e.styles=null!=(o=t.styles)?o:"",e.colors=null!=(i=t.colors)?i:[],e.titles=null!=(a=t.titles)?a:["","","","",""],e.values=null!=(s=t.values)?s:[],e.width=null!=(l=t.width)?l:17,e.height=null!=(u=t.height)?u:30,e["class"]=null!=(p=t["class"])?p:"barchart",null==(h=(n=Raphael.fn).drawStackedBarChart)&&(n.drawStackedBarChart=drawStackedBars)}return ae(r,t),r.prototype.overlaps=function(t){var r,e,n,o,i,a,s,l,u,p,h;return n=this,p=[n.x,n.y,n.radius],a=p[0],l=p[1],o=p[2],h=[t.x,t.y,t.radius],s=h[0],u=h[1],i=h[2],a-o>s+i||s-i>a+o||l-o>u+i||u-i>l+o?!1:(r=a-s,e=l-u,r*r+e*e>(o+i)*(o+i)?!1:!0)},r.prototype.render=function(){var t,r,e,n,o,i;return e=this,n=e.width,r=e.height,o=e.x,i=e.y,t=e.layers.mapcanvas.rect(o-.5*n-2,i-.5*r-2,n+4,r+4).attr({stroke:"none",fill:"#fff"}),e.chart=e.layers.mapcanvas.drawStackedBarChart(e.x,e.y,e.width,e.height,e.values,e.titles,e.colors,"none"),e.chart.push(t),e},r.prototype.update=function(){var t;t=this},r.prototype.clear=function(){var t,r,e,n,o;for(t=this,o=t.chart,e=0,n=o.length;n>e;e++)r=o[e],r.remove();return t.chart=[],t},r.prototype.nodes=function(){var t,r,e,n,o,i;for(r=this,o=r.chart,i=[],e=0,n=o.length;n>e;e++)t=o[e],i.push(t.node);return i},r}(br.Symbol),lr.props=["values","styles","class","titles","colors","width","height"],lr.layers=[],br.StackedBarChart=lr}.call(this); \ No newline at end of file
diff --git a/plugins/UserCountryMap/javascripts/visitor-map.js b/plugins/UserCountryMap/javascripts/visitor-map.js
index 76093f90fe..5f7d93c4d6 100644
--- a/plugins/UserCountryMap/javascripts/visitor-map.js
+++ b/plugins/UserCountryMap/javascripts/visitor-map.js
@@ -1172,7 +1172,7 @@
// use the popover title returned from the server
var title = box.find('div.popover-title');
- if (title.size() > 0) {
+ if (title.length) {
Piwik_Popover.setTitle(title.html());
title.remove();
}
@@ -1251,7 +1251,7 @@
}
// check if CSS is already loaded
- if ($("link[href='" + config.mapCssPath + "']").size() === 0) {
+ if (!$("link[href='" + config.mapCssPath + "']").length) {
// not loaded
map.loadCSS(config.mapCssPath, postCSSLoad);
} else {
@@ -1355,10 +1355,10 @@
$.extend(UserCountryMap, {
// iso alpha-2 --> iso alpha-3
- ISO2toISO3: {"BD": "BGD", "BE": "BEL", "BF": "BFA", "BG": "BGR", "BA": "BIH", "BB": "BRB", "WF": "WLF", "BL": "BLM", "BM": "BMU", "BN": "BRN", "BO": "BOL", "BH": "BHR", "BI": "BDI", "BJ": "BEN", "BT": "BTN", "JM": "JAM", "BV": "BVT", "BW": "BWA", "WS": "WSM", "BQ": "BES", "BR": "BRA", "BS": "BHS", "JE": "JEY", "BY": "BLR", "BZ": "BLZ", "RU": "RUS", "RW": "RWA", "RS": "SRB", "TL": "TLS", "RE": "REU", "TM": "TKM", "TJ": "TJK", "RO": "ROU", "TK": "TKL", "GW": "GNB", "GU": "GUM", "GT": "GTM", "GS": "SGS", "GR": "GRC", "GQ": "GNQ", "GP": "GLP", "JP": "JPN", "GY": "GUY", "GG": "GGY", "GF": "GUF", "GE": "GEO", "GD": "GRD", "GB": "GBR", "GA": "GAB", "SV": "SLV", "GN": "GIN", "GM": "GMB", "GL": "GRL", "GI": "GIB", "GH": "GHA", "OM": "OMN", "TN": "TUN", "JO": "JOR", "HR": "HRV", "HT": "HTI", "HU": "HUN", "HK": "HKG", "HN": "HND", "HM": "HMD", "VE": "VEN", "PR": "PRI", "PS": "PSE", "PW": "PLW", "PT": "PRT", "SJ": "SJM", "PY": "PRY", "IQ": "IRQ", "PA": "PAN", "PF": "PYF", "PG": "PNG", "PE": "PER", "PK": "PAK", "PH": "PHL", "PN": "PCN", "PL": "POL", "PM": "SPM", "ZM": "ZMB", "EH": "ESH", "EE": "EST", "EG": "EGY", "ZA": "ZAF", "EC": "ECU", "IT": "ITA", "VN": "VNM", "SB": "SLB", "ET": "ETH", "SO": "SOM", "ZW": "ZWE", "SA": "SAU", "ES": "ESP", "ER": "ERI", "ME": "MNE", "MD": "MDA", "MG": "MDG", "MF": "MAF", "MA": "MAR", "MC": "MCO", "UZ": "UZB", "MM": "MMR", "ML": "MLI", "MO": "MAC", "MN": "MNG", "MH": "MHL", "MK": "MKD", "MU": "MUS", "MT": "MLT", "MW": "MWI", "MV": "MDV", "MQ": "MTQ", "MP": "MNP", "MS": "MSR", "MR": "MRT", "IM": "IMN", "UG": "UGA", "TZ": "TZA", "MY": "MYS", "MX": "MEX", "IL": "ISR", "FR": "FRA", "IO": "IOT", "SH": "SHN", "FI": "FIN", "FJ": "FJI", "FK": "FLK", "FM": "FSM", "FO": "FRO", "NI": "NIC", "NL": "NLD", "NO": "NOR", "NA": "NAM", "VU": "VUT", "NC": "NCL", "NE": "NER", "NF": "NFK", "NG": "NGA", "NZ": "NZL", "NP": "NPL", "NR": "NRU", "NU": "NIU", "CK": "COK", "XK": "XKX", "CI": "CIV", "CH": "CHE", "CO": "COL", "CN": "CHN", "CM": "CMR", "CL": "CHL", "CC": "CCK", "CA": "CAN", "CG": "COG", "CF": "CAF", "CD": "COD", "CZ": "CZE", "CY": "CYP", "CX": "CXR", "CS": "SCG", "CR": "CRI", "CW": "CUW", "CV": "CPV", "CU": "CUB", "SZ": "SWZ", "SY": "SYR", "SX": "SXM", "KG": "KGZ", "KE": "KEN", "SS": "SSD", "SR": "SUR", "KI": "KIR", "KH": "KHM", "KN": "KNA", "KM": "COM", "ST": "STP", "SK": "SVK", "KR": "KOR", "SI": "SVN", "KP": "PRK", "KW": "KWT", "SN": "SEN", "SM": "SMR", "SL": "SLE", "SC": "SYC", "KZ": "KAZ", "KY": "CYM", "SG": "SGP", "SE": "SWE", "SD": "SDN", "DO": "DOM", "DM": "DMA", "DJ": "DJI", "DK": "DNK", "VG": "VGB", "DE": "DEU", "YE": "YEM", "DZ": "DZA", "US": "USA", "UY": "URY", "YT": "MYT", "UM": "UMI", "LB": "LBN", "LC": "LCA", "LA": "LAO", "TV": "TUV", "TW": "TWN", "TT": "TTO", "TR": "TUR", "LK": "LKA", "LI": "LIE", "LV": "LVA", "TO": "TON", "LT": "LTU", "LU": "LUX", "LR": "LBR", "LS": "LSO", "TH": "THA", "TF": "ATF", "TG": "TGO", "TD": "TCD", "TC": "TCA", "LY": "LBY", "VA": "VAT", "VC": "VCT", "AE": "ARE", "AD": "AND", "AG": "ATG", "AF": "AFG", "AI": "AIA", "VI": "VIR", "IS": "ISL", "IR": "IRN", "AM": "ARM", "AL": "ALB", "AO": "AGO", "AN": "ANT", "AQ": "ATA", "AS": "ASM", "AR": "ARG", "AU": "AUS", "AT": "AUT", "AW": "ABW", "IN": "IND", "AX": "ALA", "AZ": "AZE", "IE": "IRL", "ID": "IDN", "UA": "UKR", "QA": "QAT", "MZ": "MOZ", "TI": "TIB"},
+ ISO2toISO3: {"BD": "BGD", "BE": "BEL", "BF": "BFA", "BG": "BGR", "BA": "BIH", "BB": "BRB", "WF": "WLF", "BL": "BLM", "BM": "BMU", "BN": "BRN", "BO": "BOL", "BH": "BHR", "BI": "BDI", "BJ": "BEN", "BT": "BTN", "JM": "JAM", "BV": "BVT", "BW": "BWA", "WS": "WSM", "BQ": "BES", "BR": "BRA", "BS": "BHS", "JE": "JEY", "BY": "BLR", "BZ": "BLZ", "RU": "RUS", "RW": "RWA", "RS": "SRB", "TL": "TLS", "RE": "REU", "TM": "TKM", "TJ": "TJK", "RO": "ROU", "TK": "TKL", "GW": "GNB", "GU": "GUM", "GT": "GTM", "GS": "SGS", "GR": "GRC", "GQ": "GNQ", "GP": "GLP", "JP": "JPN", "GY": "GUY", "GG": "GGY", "GF": "GUF", "GE": "GEO", "GD": "GRD", "GB": "GBR", "GA": "GAB", "SV": "SLV", "GN": "GIN", "GM": "GMB", "GL": "GRL", "GI": "GIB", "GH": "GHA", "OM": "OMN", "TN": "TUN", "JO": "JOR", "HR": "HRV", "HT": "HTI", "HU": "HUN", "HK": "HKG", "HN": "HND", "HM": "HMD", "VE": "VEN", "PR": "PRI", "PS": "PSE", "PW": "PLW", "PT": "PRT", "SJ": "SJM", "PY": "PRY", "IQ": "IRQ", "PA": "PAN", "PF": "PYF", "PG": "PNG", "PE": "PER", "PK": "PAK", "PH": "PHL", "PN": "PCN", "PL": "POL", "PM": "SPM", "ZM": "ZMB", "EH": "ESH", "EE": "EST", "EG": "EGY", "ZA": "ZAF", "EC": "ECU", "IT": "ITA", "VN": "VNM", "SB": "SLB", "ET": "ETH", "SO": "SOM", "ZW": "ZWE", "SA": "SAU", "ES": "ESP", "ER": "ERI", "ME": "MNE", "MD": "MDA", "MG": "MDG", "MF": "MAF", "MA": "MAR", "MC": "MCO", "UZ": "UZB", "MM": "MMR", "ML": "MLI", "MO": "MAC", "MN": "MNG", "MH": "MHL", "MK": "MKD", "MU": "MUS", "MT": "MLT", "MW": "MWI", "MV": "MDV", "MQ": "MTQ", "MP": "MNP", "MS": "MSR", "MR": "MRT", "IM": "IMN", "UG": "UGA", "TZ": "TZA", "MY": "MYS", "MX": "MEX", "IL": "ISR", "FR": "FRA", "IO": "IOT", "SH": "SHN", "FI": "FIN", "FJ": "FJI", "FK": "FLK", "FM": "FSM", "FO": "FRO", "NI": "NIC", "NL": "NLD", "NO": "NOR", "NA": "NAM", "VU": "VUT", "NC": "NCL", "NE": "NER", "NF": "NFK", "NG": "NGA", "NZ": "NZL", "NP": "NPL", "NR": "NRU", "NU": "NIU", "CK": "COK", "XK": "XKX", "CI": "CIV", "CH": "CHE", "CO": "COL", "CN": "CHN", "CM": "CMR", "CL": "CHL", "CC": "CCK", "CA": "CAN", "CG": "COG", "CF": "CAF", "CD": "COD", "CZ": "CZE", "CY": "CYP", "CX": "CXR", "CS": "SCG", "CR": "CRI", "CW": "CUW", "CV": "CPV", "CU": "CUB", "SZ": "SWZ", "SY": "SYR", "SX": "SXM", "KG": "KGZ", "KE": "KEN", "SS": "SSD", "SR": "SUR", "KI": "KIR", "KH": "KHM", "KN": "KNA", "KM": "COM", "ST": "STP", "SK": "SVK", "KR": "KOR", "SI": "SVN", "KP": "PRK", "KW": "KWT", "SN": "SEN", "SM": "SMR", "SL": "SLE", "SC": "SYC", "KZ": "KAZ", "KY": "CYM", "SG": "SGP", "SE": "SWE", "SD": "SDN", "DO": "DOM", "DM": "DMA", "DJ": "DJI", "DK": "DNK", "VG": "VGB", "DE": "DEU", "YE": "YEM", "DZ": "DZA", "US": "USA", "UY": "URY", "YT": "MYT", "UM": "UMI", "LB": "LBN", "LC": "LCA", "LA": "LAO", "TV": "TUV", "TW": "TWN", "TT": "TTO", "TR": "TUR", "LK": "LKA", "LI": "LIE", "LV": "LVA", "TO": "TON", "LT": "LTU", "LU": "LUX", "LR": "LBR", "LS": "LSO", "TH": "THA", "TF": "ATF", "TG": "TGO", "TD": "TCD", "TC": "TCA", "LY": "LBY", "VA": "VAT", "VC": "VCT", "AE": "ARE", "AD": "AND", "AG": "ATG", "AF": "AFG", "AI": "AIA", "VI": "VIR", "IS": "ISL", "IR": "IRN", "AM": "ARM", "AL": "ALB", "AO": "AGO", "AN": "ANT", "AQ": "ATA", "AS": "ASM", "AR": "ARG", "AU": "AUS", "AT": "AUT", "AW": "ABW", "IN": "IND", "AX": "ALA", "AZ": "AZE", "IE": "IRL", "ID": "IDN", "UA": "UKR", "QA": "QAT", "MZ": "MOZ"},
// iso alpha-3 --> continent code
- ISO3toCONT: {"AGO": "AF", "DZA": "AF", "EGY": "AF", "BGD": "AS", "NER": "AF", "LIE": "EU", "NAM": "AF", "BGR": "EU", "BOL": "SA", "GHA": "AF", "CCK": "AS", "PAK": "AS", "CPV": "AF", "JOR": "AS", "LBR": "AF", "LBY": "AF", "MYS": "AS", "DOM": "NA", "PRI": "NA", "SXM": "NA", "PRK": "AS", "PSE": "AS", "TZA": "AF", "BWA": "AF", "KHM": "AS", "UMI": "OC", "NIC": "NA", "TTO": "NA", "ETH": "AF", "PRY": "SA", "HKG": "AS", "SAU": "AS", "LBN": "AS", "SVN": "EU", "BFA": "AF", "CHE": "EU", "MRT": "AF", "HRV": "EU", "CHL": "SA", "CHN": "AS", "KNA": "NA", "SLE": "AF", "JAM": "NA", "SMR": "EU", "GIB": "EU", "DJI": "AF", "GIN": "AF", "FIN": "EU", "URY": "SA", "THA": "AS", "STP": "AF", "SYC": "AF", "NPL": "AS", "CXR": "AS", "LAO": "AS", "YEM": "AS", "BVT": "AN", "ZAF": "AF", "KIR": "OC", "PHL": "AS", "ROU": "EU", "VIR": "NA", "SYR": "AS", "MAC": "AS", "MAF": "NA", "MLT": "EU", "KAZ": "AS", "TCA": "NA", "PYF": "OC", "NIU": "OC", "DMA": "NA", "BEN": "AF", "GUF": "SA", "BEL": "EU", "MSR": "NA", "TGO": "AF", "DEU": "EU", "GUM": "OC", "LKA": "AS", "SSD": "AF", "FLK": "SA", "GBR": "EU", "BES": "NA", "GUY": "SA", "CRI": "NA", "CMR": "AF", "MAR": "AF", "MNP": "OC", "LSO": "AF", "HUN": "EU", "TKM": "AS", "SUR": "SA", "NLD": "EU", "BMU": "NA", "HMD": "AN", "TCD": "AF", "GEO": "AS", "MNE": "EU", "MNG": "AS", "MHL": "OC", "MTQ": "NA", "BLZ": "NA", "NFK": "OC", "MMR": "AS", "AFG": "AS", "BDI": "AF", "VGB": "NA", "BLR": "EU", "BLM": "NA", "GRD": "NA", "TKL": "OC", "GRC": "EU", "RUS": "EU", "GRL": "NA", "SHN": "AF", "AND": "EU", "MOZ": "AF", "TJK": "AS", "XKX": "EU", "HTI": "NA", "MEX": "NA", "ANT": "NA", "ZWE": "AF", "LCA": "NA", "IND": "AS", "LVA": "EU", "BTN": "AS", "VCT": "NA", "VNM": "AS", "NOR": "EU", "CZE": "EU", "ATF": "AN", "ATG": "NA", "FJI": "OC", "IOT": "AS", "HND": "NA", "MUS": "AF", "ATA": "AN", "LUX": "EU", "ISR": "AS", "FSM": "OC", "PER": "SA", "REU": "AF", "IDN": "AS", "VUT": "OC", "MKD": "EU", "COD": "AF", "COG": "AF", "ISL": "EU", "GLP": "NA", "COK": "OC", "COM": "AF", "COL": "SA", "NGA": "AF", "TLS": "OC", "TWN": "AS", "PRT": "EU", "MDA": "EU", "GGY": "EU", "MDG": "AF", "ECU": "SA", "SEN": "AF", "NZL": "OC", "MDV": "AS", "ASM": "OC", "SPM": "NA", "CUW": "NA", "FRA": "EU", "LTU": "EU", "RWA": "AF", "ZMB": "AF", "GMB": "AF", "WLF": "OC", "JEY": "EU", "FRO": "EU", "GTM": "NA", "DNK": "EU", "IMN": "EU", "AUS": "OC", "AUT": "EU", "SJM": "EU", "VEN": "SA", "PLW": "OC", "KEN": "AF", "MYT": "AF", "WSM": "OC", "TUR": "AS", "ALB": "EU", "OMN": "AS", "TUV": "OC", "ALA": "EU", "BRN": "AS", "TUN": "AF", "PCN": "OC", "BRB": "NA", "BRA": "SA", "CIV": "AF", "SRB": "EU", "GNQ": "AF", "USA": "NA", "QAT": "AS", "SWE": "EU", "AZE": "AS", "GNB": "AF", "SWZ": "AF", "TON": "OC", "CAN": "NA", "UKR": "EU", "KOR": "AS", "AIA": "NA", "CAF": "AF", "SVK": "EU", "CYP": "EU", "BIH": "EU", "SGP": "AS", "SGS": "AN", "SOM": "AF", "UZB": "AS", "ERI": "AF", "POL": "EU", "KWT": "AS", "SCG": "EU", "GAB": "AF", "CYM": "NA", "VAT": "EU", "EST": "EU", "MWI": "AF", "ESP": "EU", "IRQ": "AS", "SLV": "NA", "MLI": "AF", "IRL": "EU", "IRN": "AS", "ABW": "NA", "PNG": "OC", "PAN": "NA", "SDN": "AF", "SLB": "OC", "ESH": "AF", "MCO": "EU", "ITA": "EU", "JPN": "AS", "KGZ": "AS", "UGA": "AF", "NCL": "OC", "ARE": "AS", "ARG": "SA", "BHS": "NA", "BHR": "AS", "ARM": "AS", "NRU": "OC", "CUB": "NA", "TIB": "AS"},
+ ISO3toCONT: {"AGO": "AF", "DZA": "AF", "EGY": "AF", "BGD": "AS", "NER": "AF", "LIE": "EU", "NAM": "AF", "BGR": "EU", "BOL": "SA", "GHA": "AF", "CCK": "AS", "PAK": "AS", "CPV": "AF", "JOR": "AS", "LBR": "AF", "LBY": "AF", "MYS": "AS", "DOM": "NA", "PRI": "NA", "SXM": "NA", "PRK": "AS", "PSE": "AS", "TZA": "AF", "BWA": "AF", "KHM": "AS", "UMI": "OC", "NIC": "NA", "TTO": "NA", "ETH": "AF", "PRY": "SA", "HKG": "AS", "SAU": "AS", "LBN": "AS", "SVN": "EU", "BFA": "AF", "CHE": "EU", "MRT": "AF", "HRV": "EU", "CHL": "SA", "CHN": "AS", "KNA": "NA", "SLE": "AF", "JAM": "NA", "SMR": "EU", "GIB": "EU", "DJI": "AF", "GIN": "AF", "FIN": "EU", "URY": "SA", "THA": "AS", "STP": "AF", "SYC": "AF", "NPL": "AS", "CXR": "AS", "LAO": "AS", "YEM": "AS", "BVT": "AN", "ZAF": "AF", "KIR": "OC", "PHL": "AS", "ROU": "EU", "VIR": "NA", "SYR": "AS", "MAC": "AS", "MAF": "NA", "MLT": "EU", "KAZ": "AS", "TCA": "NA", "PYF": "OC", "NIU": "OC", "DMA": "NA", "BEN": "AF", "GUF": "SA", "BEL": "EU", "MSR": "NA", "TGO": "AF", "DEU": "EU", "GUM": "OC", "LKA": "AS", "SSD": "AF", "FLK": "SA", "GBR": "EU", "BES": "NA", "GUY": "SA", "CRI": "NA", "CMR": "AF", "MAR": "AF", "MNP": "OC", "LSO": "AF", "HUN": "EU", "TKM": "AS", "SUR": "SA", "NLD": "EU", "BMU": "NA", "HMD": "AN", "TCD": "AF", "GEO": "AS", "MNE": "EU", "MNG": "AS", "MHL": "OC", "MTQ": "NA", "BLZ": "NA", "NFK": "OC", "MMR": "AS", "AFG": "AS", "BDI": "AF", "VGB": "NA", "BLR": "EU", "BLM": "NA", "GRD": "NA", "TKL": "OC", "GRC": "EU", "RUS": "EU", "GRL": "NA", "SHN": "AF", "AND": "EU", "MOZ": "AF", "TJK": "AS", "XKX": "EU", "HTI": "NA", "MEX": "NA", "ANT": "NA", "ZWE": "AF", "LCA": "NA", "IND": "AS", "LVA": "EU", "BTN": "AS", "VCT": "NA", "VNM": "AS", "NOR": "EU", "CZE": "EU", "ATF": "AN", "ATG": "NA", "FJI": "OC", "IOT": "AS", "HND": "NA", "MUS": "AF", "ATA": "AN", "LUX": "EU", "ISR": "AS", "FSM": "OC", "PER": "SA", "REU": "AF", "IDN": "AS", "VUT": "OC", "MKD": "EU", "COD": "AF", "COG": "AF", "ISL": "EU", "GLP": "NA", "COK": "OC", "COM": "AF", "COL": "SA", "NGA": "AF", "TLS": "OC", "TWN": "AS", "PRT": "EU", "MDA": "EU", "GGY": "EU", "MDG": "AF", "ECU": "SA", "SEN": "AF", "NZL": "OC", "MDV": "AS", "ASM": "OC", "SPM": "NA", "CUW": "NA", "FRA": "EU", "LTU": "EU", "RWA": "AF", "ZMB": "AF", "GMB": "AF", "WLF": "OC", "JEY": "EU", "FRO": "EU", "GTM": "NA", "DNK": "EU", "IMN": "EU", "AUS": "OC", "AUT": "EU", "SJM": "EU", "VEN": "SA", "PLW": "OC", "KEN": "AF", "MYT": "AF", "WSM": "OC", "TUR": "AS", "ALB": "EU", "OMN": "AS", "TUV": "OC", "ALA": "EU", "BRN": "AS", "TUN": "AF", "PCN": "OC", "BRB": "NA", "BRA": "SA", "CIV": "AF", "SRB": "EU", "GNQ": "AF", "USA": "NA", "QAT": "AS", "SWE": "EU", "AZE": "AS", "GNB": "AF", "SWZ": "AF", "TON": "OC", "CAN": "NA", "UKR": "EU", "KOR": "AS", "AIA": "NA", "CAF": "AF", "SVK": "EU", "CYP": "EU", "BIH": "EU", "SGP": "AS", "SGS": "AN", "SOM": "AF", "UZB": "AS", "ERI": "AF", "POL": "EU", "KWT": "AS", "SCG": "EU", "GAB": "AF", "CYM": "NA", "VAT": "EU", "EST": "EU", "MWI": "AF", "ESP": "EU", "IRQ": "AS", "SLV": "NA", "MLI": "AF", "IRL": "EU", "IRN": "AS", "ABW": "NA", "PNG": "OC", "PAN": "NA", "SDN": "AF", "SLB": "OC", "ESH": "AF", "MCO": "EU", "ITA": "EU", "JPN": "AS", "KGZ": "AS", "UGA": "AF", "NCL": "OC", "ARE": "AS", "ARG": "SA", "BHS": "NA", "BHR": "AS", "ARM": "AS", "NRU": "OC", "CUB": "NA"},
// special region aggregation for some countries
aggregate: {
diff --git a/plugins/UserCountryMap/lang/pl.json b/plugins/UserCountryMap/lang/pl.json
index fd30dae476..167f77e32b 100644
--- a/plugins/UserCountryMap/lang/pl.json
+++ b/plugins/UserCountryMap/lang/pl.json
@@ -1,18 +1,22 @@
{
"UserCountryMap": {
+ "PluginDescription": "Wtyczka dostarcza widżetów Mapa Odwiedzin i Mapa Czasu Rzeczywistego. NOTKA: Wymaga włączenia wtyczki UserCountry.",
"AndNOthers": "i %s innych",
"Cities": "Miasta",
"Countries": "Państw",
"DaysAgo": "%s dni temu",
+ "GoalConversions": "%s konwersji celów",
"HoursAgo": "%s godzin temu",
"map": "mapa",
"MinutesAgo": "%s minut temu",
"None": "Brak",
"NoVisit": "Brak wizyt",
- "RealTimeMap": "Mapa czasu rzeczywistego",
+ "RealTimeMap": "Mapa Czasu Rzeczywistego",
"Regions": "Regiony",
"Searches": "%s wyszukań",
"SecondsAgo": "%s sekund temu",
+ "ShowingVisits": "Geolokalizowane wizyty z ostatnich",
+ "Unlocated": "<b>%s<\/b> %p wizyt z %c nie mogło zostać zlokalizowane.",
"VisitorMap": "Mapa Odwiedzin",
"WorldWide": "World-Wide",
"WithUnknownRegion": "%s z nieznanego regionu",
diff --git a/plugins/UserCountryMap/svg/AS.svg b/plugins/UserCountryMap/svg/AS.svg
index 0ae36a2fc8..b425e8daf0 100644
--- a/plugins/UserCountryMap/svg/AS.svg
+++ b/plugins/UserCountryMap/svg/AS.svg
@@ -1 +1,2 @@
-<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'><svg enable_background="new 0 0 450 276" height="276px" pretty_print="False" style="stroke-linejoin: round; stroke:#000; fill: none;" version="1.1" viewBox="0 0 450 276" width="450px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"><![CDATA[path { fill-rule: evenodd; }]]></style></defs><metadata><views><view h="276.168144542" padding="0" w="450"><proj id="laea" lat0="39.5" lon0="104.5"/><bbox h="858.81" w="1404.46" x="297.77" y="525.07"/></view></views></metadata><g class="" id="countries"><path d="M202.3,195.2L196.6,193.8L197.4,192.3L195.2,190.1L191.3,190.1L187.3,192.1L186.2,192.0L180.1,194.8L180.2,194.1L175.5,192.0L173.1,192.3L170.4,195.1L170.0,194.5L162.8,190.6L161.0,191.1L160.2,189.7L155.4,185.2L155.5,184.6L149.6,179.4L149.5,178.7L146.0,179.1L140.7,171.8L139.7,171.6L139.7,167.2L141.2,168.2L142.5,164.7L141.9,163.4L142.6,161.2L142.9,161.1L145.9,160.9L148.4,157.4L152.1,159.2L155.4,158.2L158.6,160.3L166.5,160.2L167.3,159.1L174.6,159.3L177.8,161.3L177.0,164.0L177.8,166.2L177.0,169.8L178.2,171.6L182.0,172.9L184.4,175.5L188.1,176.7L192.1,176.8L194.6,180.5L198.1,181.0L201.3,178.3L202.5,178.2L204.8,180.6L206.2,185.6L206.3,188.2L205.6,193.1L204.5,194.8L202.5,195.3L202.3,195.2Z " data-iso="TIB" data-name="Tibet" data-pop="3000000.0"/><path d="M134.2,145.5L133.4,145.1L132.7,145.2L133.0,145.9L133.1,145.9L132.7,146.0L125.7,144.6L122.3,146.6L122.4,148.7L121.4,150.4L119.3,151.5L119.2,153.2L116.9,153.0L115.7,155.1L113.6,155.4L110.8,159.3L108.9,159.7L104.3,159.6L103.1,158.8L100.4,159.7L98.5,163.1L91.5,161.9L83.5,156.2L82.6,155.2L83.8,154.6L87.5,151.3L85.4,148.4L88.7,138.9L91.7,137.0L93.4,134.7L93.5,134.4L93.7,134.5L95.5,137.5L98.1,137.7L99.0,136.3L103.6,136.4L105.5,134.1L108.0,134.5L109.1,133.6L110.6,135.3L110.8,135.4L111.7,135.7L112.3,136.1L113.2,136.9L114.0,137.5L113.9,137.6L113.9,137.8L115.6,138.5L121.1,139.1L124.1,136.5L125.5,139.8L124.2,143.9L130.6,143.1L134.3,145.4L134.3,145.5L134.2,145.5Z " data-iso="AFG" data-name="Afghanistan" data-pop="28400000.0"/><path d="M32.9,27.0L32.4,28.2L32.0,29.0L31.2,29.7L31.0,29.8L31.0,29.8L29.7,30.4L27.9,33.4L27.9,33.5L27.6,33.6L25.0,34.6L24.1,34.1L22.9,33.9L23.2,33.6L25.0,30.4L26.1,29.5L29.9,27.0L29.8,26.7L32.8,25.6L32.8,25.9L32.9,26.8L32.9,26.8L32.9,27.0Z " data-iso="ALB" data-name="Albania" data-pop="3639453.0"/><path d="M62.4,163.7L61.5,165.8L61.5,165.9L59.5,165.3L57.0,168.2L54.5,171.8L54.2,172.3L53.9,172.5L47.2,166.9L46.2,159.5L46.4,159.4L47.2,161.8L54.4,164.9L55.6,164.1L62.3,161.4L62.3,161.4L61.9,162.9L62.0,163.1L62.3,163.3L62.4,163.7Z " data-iso="ARE" data-name="United Arab Emirates" data-pop="4798491.0"/><path d="M64.2,97.4L63.9,97.1L63.4,97.0L63.3,96.8L63.5,96.5L64.3,93.9L63.5,93.5L62.8,91.6L62.6,91.4L62.6,91.2L62.4,89.4L61.7,88.7L63.4,84.3L63.5,84.2L63.7,84.3L65.4,85.4L67.0,86.6L67.1,86.6L67.1,86.8L65.1,92.3L65.3,94.6L64.4,97.1L64.2,97.4Z " data-iso="ARM" data-name="Armenia" data-pop="2967004.0"/><path d="M52.7,5.4L52.1,5.5L51.9,5.6L50.7,6.9L50.6,7.1L50.4,7.0L48.5,7.0L47.7,6.7L46.1,7.1L45.6,7.0L45.5,6.9L44.8,6.5L44.2,5.3L42.9,1.9L42.9,1.8L42.9,1.2L43.7,-2.9L44.3,-3.2L42.7,-7.1L42.9,-7.1L43.2,-9.5L46.7,-4.3L46.2,-1.8L50.7,-2.8L51.5,-2.4L51.6,-2.4L51.7,-0.1L53.0,-0.0L52.8,5.3L52.7,5.4L52.7,5.4Z " data-iso="AUT" data-name="Austria" data-pop="8210281.0"/><path d="M63.3,96.8L63.0,96.3L62.3,95.1L62.5,91.8L62.5,91.7L62.6,91.5L62.6,91.4L62.8,91.6L63.5,93.5L64.3,93.9L63.5,96.5L63.3,96.8Z M76.0,91.8L76.1,99.9L74.1,98.8L70.6,102.0L69.2,102.2L68.4,103.6L67.4,100.5L69.4,99.2L69.4,97.7L64.4,97.6L64.2,97.4L64.4,97.1L65.3,94.6L65.1,92.3L67.1,86.8L67.1,86.6L67.9,86.6L69.8,90.2L70.6,89.8L71.4,87.4L71.6,87.3L71.8,87.6L71.9,90.8L72.9,92.2L75.9,91.4L76.0,91.8Z " data-iso="AZE" data-name="Azerbaijan" data-pop="8238672.0"/><path d="M181.1,217.7L181.1,217.9L180.9,220.5L179.7,222.2L179.6,222.2L178.9,220.6L178.4,216.4L177.1,214.0L174.5,212.5L173.9,215.7L168.3,215.8L168.3,215.5L167.3,209.1L167.9,207.9L166.0,204.7L167.7,203.1L166.8,200.2L170.1,199.1L171.7,200.6L174.0,204.1L179.4,205.0L180.9,206.3L179.4,208.8L177.6,208.9L176.9,212.8L180.5,211.0L181.0,217.5L181.1,217.7Z " data-iso="BGD" data-name="Bangladesh" data-pop="156050883.0"/><path d="M45.9,45.0L42.3,45.3L41.1,45.3L40.4,47.7L40.2,48.0L39.4,46.7L37.2,44.5L37.1,44.6L37.1,44.2L35.8,45.0L34.4,43.5L31.8,37.5L31.7,37.2L31.8,37.2L32.7,36.6L33.1,36.4L34.1,34.0L34.4,33.2L34.6,33.3L36.4,32.1L36.8,32.6L41.4,29.1L41.5,29.2L41.5,29.5L45.3,38.6L45.9,39.3L46.8,44.4L45.9,45.0Z " data-iso="BGR" data-name="Bulgaria" data-pop="7204687.0"/><path d="M40.3,18.6L40.4,18.7L39.0,19.8L37.8,22.0L35.9,22.3L35.6,22.2L35.6,22.1L33.3,22.0L32.9,21.7L31.5,22.7L31.5,22.6L31.5,22.3L32.0,20.4L37.4,10.6L38.9,11.0L40.3,18.4L40.3,18.6Z " data-iso="BIH" data-name="Bosnia and Herz." data-pop="4613414.0"/><path d="M89.4,12.7L89.2,15.8L90.2,16.4L90.1,18.6L86.0,22.4L84.8,24.6L82.6,26.9L82.3,25.4L79.0,28.8L78.9,28.8L78.7,28.5L74.9,27.3L72.7,20.6L68.7,13.9L68.6,13.9L69.0,13.5L71.1,11.4L73.1,11.8L76.4,9.2L77.6,8.3L77.6,8.5L80.6,11.5L82.8,10.8L84.9,11.6L86.4,10.6L86.5,10.5L86.6,10.5L87.5,11.0L87.6,11.5L89.6,12.2L89.6,12.3L89.4,12.7Z " data-iso="BLR" data-name="Belarus" data-pop="9648533.0"/><path d="M170.7,194.5L175.1,191.9L178.8,193.4L180.1,194.6L180.1,194.8L181.4,196.8L179.8,198.5L175.2,197.5L172.6,197.8L170.4,195.1L170.7,194.5Z " data-iso="BTN" data-name="Bhutan" data-pop="691141.0"/><path d="M26.8,79.8L27.8,79.5L28.6,80.9L28.9,82.7L28.8,83.1L28.1,82.5L28.0,81.5L26.8,79.6L26.8,79.8Z " data-iso="CYN" data-name="N. Cyprus" data-pop="265100.0"/><path d="M28.8,83.2L25.2,81.2L25.1,80.6L26.7,79.4L26.8,79.6L28.0,81.5L28.1,82.5L28.8,83.1L28.8,83.2Z " data-iso="CYP" data-name="Cyprus" data-pop="531640.0"/><path d="M57.4,7.8L57.4,7.8L55.2,7.1L54.5,6.7L53.0,5.3L52.7,5.4L52.8,5.3L53.0,-0.0L51.7,-0.1L51.6,-2.4L51.8,-2.6L53.3,-5.8L56.5,-8.6L57.4,-8.4L60.0,-5.4L60.2,-4.0L60.2,-4.0L60.6,-3.0L58.4,1.8L59.7,1.8L58.7,6.3L57.5,7.7L57.4,7.8Z " data-iso="CZE" data-name="Czech Rep." data-pop="10211904.0"/><path d="M-1.4,190.9L-1.6,190.8L-4.8,188.3L-3.6,185.5L-1.3,184.3L-0.8,184.0L-0.6,184.0L-0.0,185.1L0.3,185.1L1.8,184.8L1.8,185.0L1.9,187.5L1.1,188.0L0.2,189.3L0.3,189.8L-0.1,190.1L-0.7,190.5L-1.4,190.9Z " data-iso="DJI" data-name="Djibouti" data-pop="516055.0"/><path d="M-19.6,27.7L-19.8,27.5L-22.4,30.7L-31.5,38.9L-33.8,39.0L-37.6,47.7L-39.5,55.3L-41.0,54.4L-52.5,47.6L-58.4,45.9L-61.8,38.2L-60.6,36.3L-58.5,28.6L-56.8,23.8L-56.1,23.1L-53.4,14.8L-50.7,7.4L-46.2,-3.6L-38.1,-20.8L-33.0,-30.4L-27.6,-33.2L-26.7,-32.2L-24.3,-27.3L-23.7,-23.4L-22.3,-23.0L-20.7,-19.4L-17.9,-20.1L-16.6,-13.3L-11.9,-17.2L-7.8,-19.7L-4.6,-20.8L-2.8,-19.2L0.1,-14.6L0.8,-10.6L2.2,-6.6L3.7,6.8L4.0,8.1L-0.4,9.7L-3.0,11.6L-5.0,12.2L-8.0,12.0L-18.8,26.8L-19.6,27.7Z " data-iso="DZA" data-name="Algeria" data-pop="34178188.0"/><path d="M18.7,96.3L18.4,97.2L17.3,99.5L16.9,100.7L15.6,103.7L15.4,103.7L11.1,107.2L9.5,105.7L9.8,102.6L11.8,96.1L9.4,100.7L8.7,105.6L6.4,111.0L3.9,121.7L4.0,125.1L3.4,124.6L1.6,128.4L2.3,134.8L2.3,134.9L-1.7,130.6L-8.5,122.8L-15.3,114.2L-23.1,103.2L-23.8,102.0L-23.2,101.3L-11.0,86.2L-4.0,78.2L-1.6,74.5L2.2,71.1L3.6,70.9L3.4,71.5L6.2,77.5L7.8,84.2L13.7,87.0L15.1,92.3L18.9,95.8L19.0,95.8L18.9,95.9L18.7,96.3Z " data-iso="EGY" data-name="Egypt" data-pop="83082869.0"/><path d="M-1.9,156.8L-3.8,165.4L-1.8,170.6L-0.4,176.5L0.7,179.4L1.1,183.5L1.9,184.3L1.8,184.8L0.3,185.1L-0.0,185.1L-0.6,184.0L-0.8,184.0L-0.9,183.4L-2.7,173.7L-6.6,167.7L-8.6,167.0L-9.5,163.8L-11.7,165.7L-14.2,162.6L-14.3,162.6L-13.8,161.4L-12.9,159.0L-10.8,157.3L-7.7,153.4L-6.4,154.3L-1.5,153.9L-1.9,156.8Z " data-iso="ERI" data-name="Eritrea" data-pop="5647168.0"/><path d="M101.9,4.7L98.6,5.3L95.2,7.5L94.2,7.7L94.1,7.8L94.0,7.7L94.1,4.3L94.4,2.7L93.1,1.7L93.3,1.6L97.7,-2.4L100.7,0.2L101.8,4.7L101.9,4.7Z " data-iso="EST" data-name="Estonia" data-pop="1299371.0"/><path d="M-0.8,184.0L-1.3,184.3L-3.6,185.5L-4.8,188.3L-1.6,190.8L-1.4,190.9L-1.5,191.1L-2.2,191.4L-0.9,201.3L7.0,211.6L9.3,213.3L10.4,214.0L9.3,214.4L1.3,217.3L-3.3,219.3L-9.4,216.3L-10.9,216.9L-14.2,216.0L-14.6,215.6L-17.3,212.1L-20.1,211.6L-22.3,212.2L-26.4,207.9L-31.6,199.1L-32.5,185.6L-34.9,177.4L-29.5,174.6L-29.5,174.5L-27.1,170.9L-24.7,171.3L-21.9,168.0L-19.9,166.7L-18.2,167.3L-15.0,163.4L-14.3,162.6L-14.2,162.6L-11.7,165.7L-9.5,163.8L-8.6,167.0L-6.6,167.7L-2.7,173.7L-0.9,183.4L-0.8,184.0Z " data-iso="ETH" data-name="Ethiopia" data-pop="85237338.0"/><path d="M139.2,-12.7L136.3,-11.9L130.8,-8.5L128.1,-5.8L124.1,-4.3L121.9,-2.3L119.3,-0.9L118.3,1.7L114.8,3.2L105.7,2.1L105.7,2.1L100.7,-4.0L99.8,-4.4L103.8,-9.4L108.9,-11.7L112.4,-12.8L113.2,-11.8L122.0,-10.6L123.6,-11.3L126.2,-14.9L128.0,-15.2L133.1,-18.3L135.9,-22.8L137.1,-21.9L135.2,-19.3L135.6,-16.8L142.8,-15.7L141.8,-13.6L139.3,-12.8L139.2,-12.7Z " data-iso="FIN" data-name="Finland" data-pop="5250275.0"/><path d="M26.6,-1.8L24.1,-0.3L21.3,0.3L24.0,-3.2L25.3,-3.4L26.6,-1.8Z M38.1,-14.3L37.6,-14.6L34.0,-13.3L31.5,-11.5L29.6,-9.1L29.6,-9.2L27.2,-10.6L26.9,-13.1L28.0,-17.9L26.7,-19.9L24.3,-19.3L23.3,-20.4L25.5,-29.5L25.5,-30.3L28.3,-34.2L33.2,-34.8L40.1,-37.3L44.3,-40.0L44.5,-41.4L47.3,-46.1L50.5,-48.5L49.6,-43.2L49.6,-40.1L54.1,-42.3L52.0,-37.6L53.6,-37.2L55.7,-34.5L58.6,-34.5L58.9,-33.1L55.3,-28.1L54.8,-26.3L53.4,-25.6L50.1,-16.4L44.8,-15.5L41.6,-17.3L38.8,-17.1L40.0,-16.3L38.2,-14.4L38.1,-14.3Z " data-iso="FRA" data-name="France" data-pop="64057792.0"/><path d="M18.9,95.9L19.0,95.8L19.8,95.7L20.2,95.6L19.4,96.0L19.2,96.2L18.7,96.3L18.9,95.9Z " data-iso="PSE" data-name="Palestine" data-pop="1604238.0"/><path d="M71.4,87.4L70.6,89.8L69.8,90.2L67.9,86.6L67.1,86.6L67.0,86.6L65.4,85.4L63.7,84.3L63.5,84.2L63.6,84.1L61.3,79.9L60.9,79.0L61.8,78.8L64.1,74.9L63.8,74.1L63.5,70.7L63.4,69.9L64.9,70.9L65.7,73.7L71.7,84.1L70.9,85.1L71.6,87.2L71.6,87.3L71.4,87.4Z " data-iso="GEO" data-name="Georgia" data-pop="4615807.0"/><path d="M33.6,46.4L32.0,42.0L30.7,40.9L29.7,43.6L28.0,41.6L28.5,38.7L26.9,39.8L23.7,43.7L23.1,42.9L21.1,48.7L20.7,47.1L18.1,48.0L17.3,49.2L15.2,49.1L16.2,46.7L15.0,47.0L16.9,44.6L17.8,42.1L20.4,42.8L20.3,46.4L21.3,46.6L20.7,42.6L19.8,41.5L20.4,39.3L22.8,34.3L22.9,33.9L24.1,34.1L25.0,34.6L27.6,33.6L27.9,33.5L28.0,33.8L29.1,35.3L31.6,37.0L31.7,37.2L31.8,37.5L34.4,43.5L35.8,45.0L37.1,44.2L37.1,44.6L37.2,44.9L35.6,45.9L34.8,46.7L33.5,46.6L33.6,46.4Z " data-iso="GRC" data-name="Greece" data-pop="10737428.0"/><path d="M259.9,216.6L260.2,216.4L260.3,216.4L260.9,216.4L260.9,216.4L259.5,217.0L259.9,216.7L259.9,216.6Z " data-iso="HKG" data-name="Hong Kong" data-pop="7055071.0"/><path d="M32.0,20.4L31.5,22.3L31.5,22.6L31.3,22.7L31.2,22.9L31.1,23.2L31.3,22.4L32.1,18.4L31.9,20.1L32.0,20.4Z M44.1,15.9L44.0,15.9L42.3,17.3L42.0,18.3L40.4,18.5L40.3,18.6L40.3,18.4L38.9,11.0L37.4,10.6L32.1,19.3L33.4,15.0L38.7,6.4L38.8,3.4L38.9,3.5L39.7,7.9L42.8,7.3L44.5,8.5L44.5,8.8L44.5,9.0L42.8,13.5L42.8,13.9L44.1,15.9L44.1,15.9Z " data-iso="HRV" data-name="Croatia" data-pop="4489409.0"/><path d="M56.1,18.0L55.6,18.6L55.6,19.1L55.0,20.4L54.9,20.5L54.8,20.5L52.5,19.6L47.1,20.3L46.0,18.7L45.9,18.7L45.9,18.6L45.2,16.9L44.5,16.3L44.2,15.9L44.1,15.9L44.1,15.9L42.8,13.9L42.8,13.5L44.5,9.0L44.5,8.8L44.6,8.7L45.2,7.9L45.7,7.5L45.6,7.0L46.1,7.1L47.7,6.7L48.5,7.0L50.4,7.0L50.6,7.1L50.6,7.1L50.9,11.3L52.0,11.2L55.2,14.0L55.9,17.7L55.9,17.8L56.1,18.0Z " data-iso="HUN" data-name="Hungary" data-pop="9905596.0"/><path d="M145.8,178.4L141.5,182.6L142.5,183.9L151.2,191.1L155.6,192.4L162.5,197.2L163.6,197.4L167.5,196.1L168.0,192.5L168.0,192.3L169.7,191.9L170.5,192.3L170.2,194.9L170.4,195.1L172.6,197.8L175.2,197.5L179.8,198.5L181.4,196.8L180.1,194.8L180.4,194.8L183.8,193.9L186.0,192.1L191.5,190.5L195.9,189.9L196.9,190.9L196.9,194.1L199.9,195.0L200.0,195.1L198.4,197.2L191.8,200.7L189.4,205.9L189.8,206.6L187.0,210.8L185.0,210.3L183.1,217.1L181.3,217.6L181.1,217.7L181.0,217.5L180.5,211.0L176.9,212.8L177.6,208.9L179.4,208.8L180.9,206.3L179.4,205.0L174.0,204.1L171.7,200.6L170.1,199.1L166.8,200.2L167.7,203.1L166.0,204.7L167.9,207.9L167.3,209.1L168.3,215.5L168.1,216.1L164.7,216.7L164.1,215.9L159.9,217.5L157.0,221.6L154.3,222.6L154.0,221.7L148.1,226.9L146.3,227.4L140.9,230.1L139.7,232.3L136.9,232.1L134.3,233.5L132.7,233.4L131.1,242.7L130.3,245.2L127.8,249.1L127.4,253.9L125.7,253.6L123.5,256.0L123.7,256.9L120.3,257.8L118.3,260.1L115.3,258.4L113.4,253.8L111.8,244.3L110.2,240.3L109.6,232.6L108.5,227.2L107.5,225.3L107.8,214.1L108.4,213.3L108.0,209.8L109.7,206.2L110.2,203.1L109.9,200.7L108.9,200.0L108.2,202.7L102.1,203.9L98.3,197.1L98.5,195.4L102.2,196.2L103.8,194.6L101.0,194.8L98.2,192.5L96.9,189.1L97.0,188.6L99.6,187.7L102.8,189.6L107.5,189.1L107.2,186.9L104.8,179.1L109.9,176.2L112.7,177.6L114.4,176.9L123.1,171.3L126.0,168.5L128.9,163.8L126.8,159.8L129.6,154.3L133.5,156.8L138.1,155.9L138.2,155.7L138.7,155.6L140.1,155.2L140.6,155.1L140.9,155.0L141.0,155.0L141.3,156.1L141.6,158.9L143.0,161.0L142.4,161.3L142.3,167.6L139.7,166.9L139.7,171.5L143.7,176.2L145.8,178.1L145.8,178.4Z " data-iso="IND" data-name="India" data-pop="1166079217.0"/><path d="M63.3,96.8L63.4,97.0L63.9,97.1L64.2,97.4L64.4,97.6L69.4,97.7L69.4,99.2L67.4,100.5L68.4,103.6L68.3,103.7L68.8,110.7L71.0,115.2L75.5,117.2L77.6,117.0L77.8,116.4L85.3,117.7L87.9,119.4L89.4,122.4L91.7,124.9L92.9,129.3L94.9,130.5L93.5,134.3L93.5,134.4L93.4,134.7L91.7,137.0L88.7,138.9L85.4,148.4L87.5,151.3L83.8,154.6L82.7,155.1L82.6,155.2L82.8,156.2L83.6,161.7L85.3,165.1L85.5,168.5L84.4,170.8L83.5,170.3L79.8,170.6L77.7,173.8L77.5,173.8L65.8,163.0L65.9,162.0L62.6,157.2L59.7,157.4L56.6,154.6L52.4,144.8L53.3,134.9L51.5,133.9L51.1,131.7L49.0,132.8L48.8,132.8L48.8,127.3L50.9,124.8L50.0,112.5L51.0,111.4L54.3,109.7L56.1,107.4L54.8,105.2L56.1,100.0L56.1,100.0L56.2,100.0L60.3,91.0L62.5,91.6L62.5,91.7L62.5,91.8L62.3,95.1L63.0,96.3L63.3,96.8Z " data-iso="IRN" data-name="Iran" data-pop="66429284.0"/><path d="M56.1,100.0L54.8,105.2L56.1,107.4L54.3,109.7L51.0,111.4L50.0,112.5L50.9,124.8L48.8,127.3L48.8,132.8L48.5,132.7L48.3,132.4L47.5,131.4L47.4,131.5L46.5,130.2L45.3,129.8L42.6,131.5L41.8,131.7L41.3,131.5L35.7,117.5L33.6,108.3L31.8,105.5L31.4,104.9L32.0,104.8L32.1,103.5L33.3,100.8L33.7,99.8L34.7,100.0L43.8,98.9L47.4,95.2L50.9,95.2L50.9,95.2L51.1,95.3L52.3,95.1L54.3,97.9L56.1,99.9L56.1,100.0L56.1,100.0Z " data-iso="IRQ" data-name="Iraq" data-pop="28945657.0"/><path d="M25.8,94.9L25.4,94.7L25.2,94.8L24.5,95.5L24.4,95.3L21.6,96.7L21.8,98.2L21.9,98.3L21.5,98.8L18.9,100.9L17.9,101.9L15.9,103.6L15.6,103.7L16.9,100.7L17.3,99.5L18.4,97.2L18.7,96.3L19.2,96.2L19.4,96.0L20.2,95.6L20.2,95.6L21.4,95.1L22.5,94.4L25.1,92.5L25.5,92.2L26.1,92.9L26.3,93.0L27.8,92.9L27.9,92.9L27.7,93.0L27.2,93.9L27.0,94.0L26.1,94.8L25.9,95.0L25.8,94.9Z " data-iso="ISR" data-name="Israel" data-pop="7233701.0"/><path d="M13.4,25.6L10.0,26.3L8.9,27.8L7.5,27.8L7.5,26.1L9.1,18.2L11.1,18.6L11.1,20.7L13.4,25.6Z M19.3,2.6L13.5,5.8L11.5,4.6L12.7,2.4L15.9,0.8L18.8,-1.4L20.4,0.9L19.3,2.6Z M42.9,1.8L42.6,1.8L41.9,1.4L40.7,2.6L39.3,3.7L39.5,3.8L38.0,0.3L34.1,2.5L31.0,8.3L28.0,11.6L27.2,13.1L24.4,24.3L22.8,28.8L21.6,29.2L22.9,23.9L21.2,23.8L18.9,26.9L17.2,27.6L12.9,27.6L12.6,26.7L16.6,25.5L19.9,21.5L21.5,17.7L22.6,11.4L27.6,0.7L30.9,-1.8L32.6,-6.9L29.9,-8.5L29.6,-9.1L31.5,-11.5L34.0,-13.3L37.6,-14.6L38.1,-14.3L38.0,-14.1L40.3,-11.4L39.1,-9.8L40.6,-7.6L42.2,-6.9L42.7,-7.1L44.3,-3.2L43.7,-2.9L42.9,1.2L42.9,1.8Z " data-iso="ITA" data-name="Italy" data-pop="58126212.0"/><path d="M30.8,105.0L25.1,101.9L24.8,107.7L22.4,108.2L20.5,106.9L17.4,107.5L15.4,104.3L15.8,103.9L15.9,103.6L17.9,101.9L18.9,100.9L21.5,98.8L21.9,98.3L22.2,98.1L22.9,97.6L23.4,96.8L24.2,96.1L24.5,95.5L25.2,94.8L25.4,94.7L25.8,94.9L25.9,95.0L26.1,95.3L26.3,97.9L26.9,98.8L32.9,99.7L33.7,99.8L33.3,100.8L32.1,103.5L32.0,104.8L31.4,104.9L30.8,105.0Z " data-iso="JOR" data-name="Jordan" data-pop="6342948.0"/><path d="M311.0,162.3L312.8,161.9L312.5,163.2L313.9,169.5L312.2,172.1L310.0,171.7L310.4,166.6L308.5,165.5L307.9,167.3L307.1,164.6L308.6,162.0L311.0,162.3Z M320.0,156.6L320.9,156.4L320.6,160.2L317.8,161.1L316.5,164.1L315.0,161.8L318.7,156.7L320.0,156.6Z M329.4,122.0L334.0,127.1L334.2,133.1L333.8,134.3L336.0,142.6L336.7,143.2L335.7,147.8L335.2,145.0L334.6,147.2L331.5,148.7L331.0,151.0L326.5,150.8L325.0,158.1L324.2,158.1L322.8,154.1L321.6,154.5L313.6,158.9L313.8,160.4L309.8,161.1L310.4,159.2L314.9,152.9L318.0,151.9L320.6,150.1L323.2,149.4L322.8,148.2L324.3,143.2L325.6,143.8L326.8,142.0L329.2,136.9L329.4,135.7L328.5,129.1L328.0,129.2L327.4,123.5L329.4,122.0Z M331.2,108.7L333.9,108.1L334.4,106.0L334.9,108.4L337.1,109.9L333.5,113.8L333.5,117.0L329.0,116.8L325.4,118.8L328.3,120.7L327.2,121.0L326.5,123.1L323.9,119.1L324.7,116.6L324.0,115.8L326.5,114.3L323.6,106.6L331.2,108.7Z " data-iso="JPN" data-name="Japan" data-pop="127078679.0"/><path d="M140.6,155.1L140.1,155.2L138.7,155.6L138.2,155.7L138.2,155.4L138.1,154.3L138.1,153.8L138.0,153.4L138.3,153.7L139.4,154.5L139.9,154.7L140.7,155.0L140.9,155.0L140.6,155.1Z " data-iso="KAS" data-name="" data-pop="6000.0"/><path d="M180.9,109.4L180.7,109.3L178.3,111.2L175.8,111.9L175.0,115.6L172.4,116.7L167.8,115.0L164.8,119.6L164.6,121.8L162.8,120.3L158.1,120.4L157.9,127.6L155.4,131.3L155.3,131.3L155.0,130.8L152.8,128.2L147.6,125.7L142.1,124.1L138.3,122.3L135.8,123.2L134.3,121.8L131.9,120.9L130.3,122.1L130.3,122.4L130.0,122.4L124.0,123.5L121.8,124.9L117.8,121.7L118.0,117.9L117.2,117.5L119.1,114.0L117.2,109.8L116.0,109.8L113.1,108.0L110.1,106.9L109.3,102.9L106.0,94.6L99.3,92.9L91.7,104.9L91.3,105.7L91.2,105.6L90.0,105.1L89.4,99.5L84.3,98.4L84.5,98.0L86.8,95.0L85.0,91.6L85.7,85.9L87.6,86.0L88.8,87.5L88.8,85.1L90.5,84.5L94.1,87.4L93.8,85.9L96.1,84.4L97.5,81.5L94.6,78.4L88.7,77.4L88.6,77.6L90.2,71.3L88.6,69.4L89.7,65.9L96.3,61.6L96.8,65.1L98.7,63.0L105.6,62.5L108.1,64.7L108.1,65.7L111.7,73.4L115.5,73.6L115.9,74.7L118.1,75.4L118.8,77.8L123.7,79.9L124.3,77.3L127.7,72.2L129.8,72.9L128.7,71.1L130.4,68.8L135.8,71.0L144.6,72.8L146.2,72.3L149.5,73.2L151.4,75.7L150.3,78.4L154.6,81.4L154.0,83.2L155.9,83.9L161.4,84.0L163.2,87.3L166.1,98.1L167.0,97.0L168.3,99.3L170.7,100.3L172.2,100.0L176.2,106.1L178.4,107.2L179.9,106.4L180.9,109.2L180.9,109.4Z " data-iso="KAZ" data-name="Kazakhstan" data-pop="15399437.0"/><path d="M155.3,131.6L145.8,133.4L144.5,133.1L142.3,135.0L138.4,133.1L133.9,135.8L133.6,135.8L133.5,135.7L129.4,135.2L127.9,133.0L121.8,130.7L122.5,129.0L127.3,130.0L127.4,129.9L127.5,129.9L129.5,131.0L134.1,130.0L129.6,126.9L129.5,123.4L130.4,122.3L130.3,122.4L130.3,122.1L131.9,120.9L134.3,121.8L135.8,123.2L138.3,122.3L142.1,124.1L147.6,125.7L152.8,128.2L155.0,130.8L155.3,131.3L155.3,131.6Z M127.5,131.5L127.1,130.5L127.2,131.0L127.5,131.5Z M126.1,131.2L125.5,130.8L125.6,131.0L126.1,131.2Z " data-iso="KGZ" data-name="Kyrgyzstan" data-pop="5431747.0"/><path d="M224.0,264.5L221.6,264.6L221.6,262.5L219.6,263.0L218.8,259.9L218.8,260.0L216.4,252.9L218.8,250.7L221.3,249.6L227.6,250.0L227.7,249.9L227.7,250.0L231.1,251.5L233.9,249.9L236.6,248.5L236.8,248.4L236.8,248.6L237.2,252.9L236.5,257.8L232.3,260.1L230.8,260.1L230.0,262.8L228.5,263.0L224.7,265.0L224.0,264.5Z " data-iso="KHM" data-name="Cambodia" data-pop="14494293.0"/><path d="M298.5,146.9L302.8,153.1L303.3,158.0L296.4,162.6L294.5,160.1L295.1,157.7L292.9,153.4L293.9,151.8L293.0,150.1L293.0,150.0L293.7,147.9L297.3,145.4L298.5,146.9Z " data-iso="KOR" data-name="S. Korea" data-pop="48508972.0"/><path d="M33.4,31.4L31.9,29.9L31.0,29.9L31.0,29.8L31.2,29.7L32.0,29.0L32.4,28.2L32.9,27.0L32.9,26.8L33.0,26.8L33.5,26.3L33.7,26.3L34.0,26.6L34.2,26.9L34.4,27.1L35.8,26.6L35.8,28.0L33.5,31.3L33.4,31.4L33.4,31.4Z " data-iso="KOS" data-name="Kosovo" data-pop="1804838.0"/><path d="M45.6,137.7L43.6,136.1L43.6,135.6L42.3,132.2L41.8,131.7L42.6,131.5L45.3,129.8L46.5,130.2L47.4,131.5L47.3,131.7L47.0,133.3L46.6,132.8L45.7,137.2L45.6,137.7Z " data-iso="KWT" data-name="Kuwait" data-pop="2691158.0"/><path d="M216.5,219.1L219.3,221.5L219.0,223.4L224.4,224.9L224.5,226.4L226.6,228.0L222.8,230.9L227.3,233.2L227.5,234.5L232.8,240.1L232.9,241.0L236.2,243.2L235.3,244.2L236.7,247.9L236.8,248.4L236.6,248.5L233.9,249.9L231.1,251.5L227.7,250.0L227.7,249.9L227.9,249.8L229.0,247.2L228.5,243.6L226.0,239.4L226.2,238.5L222.9,234.6L220.7,234.2L219.6,235.3L219.6,235.2L219.6,235.3L219.6,235.3L217.2,235.8L215.6,235.1L212.0,237.6L212.8,231.9L211.7,229.4L209.6,229.1L208.6,226.7L208.6,226.5L208.6,226.3L210.3,224.3L210.2,224.2L212.3,222.1L212.5,221.8L212.7,222.0L215.0,223.2L214.9,218.2L216.1,218.6L216.3,218.7L216.5,219.1Z " data-iso="LAO" data-name="Laos" data-pop="6834942.0"/><path d="M27.8,92.9L26.3,93.0L26.1,92.9L25.5,92.2L25.8,92.1L29.0,90.3L29.7,89.7L31.2,89.5L31.4,89.2L32.1,89.8L31.5,92.0L28.1,92.9L27.9,92.9L27.8,92.9Z " data-iso="LBN" data-name="Lebanon" data-pop="4017095.0"/><path d="M-23.8,102.0L-25.1,103.7L-27.7,107.2L-28.9,109.0L-32.2,107.7L-32.5,105.4L-34.7,75.2L-34.7,69.0L-39.5,65.8L-38.8,62.1L-39.2,57.4L-39.5,55.3L-37.6,47.7L-33.8,39.0L-31.5,38.9L-22.4,30.7L-19.8,27.5L-19.6,27.7L-19.3,27.9L-17.1,28.5L-14.8,26.3L-10.4,28.3L-7.7,26.3L-7.8,26.9L-8.0,31.2L-7.1,34.5L-7.7,40.9L-9.6,43.4L-9.9,45.8L-9.1,50.0L-9.4,57.8L-7.9,58.9L-3.5,55.6L-1.9,54.9L3.1,58.8L3.0,62.9L4.1,69.9L3.7,70.7L3.6,70.9L2.2,71.1L-1.6,74.5L-4.0,78.2L-11.0,86.2L-23.2,101.3L-23.8,102.0Z " data-iso="LBY" data-name="Libya" data-pop="6310434.0"/><path d="M127.7,256.0L131.3,260.3L133.9,267.3L132.9,270.1L127.0,270.8L125.7,267.3L125.9,262.5L127.0,260.3L127.7,256.0Z " data-iso="LKA" data-name="Sri Lanka" data-pop="21324791.0"/><path d="M80.9,0.5L80.9,0.4L81.4,0.4L81.8,0.4L81.2,0.5L80.9,0.5Z M86.5,10.5L86.4,10.6L84.9,11.6L82.8,10.8L80.6,11.5L77.6,8.5L77.6,8.3L77.6,8.2L78.3,7.8L78.8,6.0L78.6,6.0L78.8,5.8L79.6,5.3L80.5,5.1L81.0,1.1L81.1,1.1L81.3,0.9L83.0,-0.3L83.8,-0.8L84.0,-0.9L86.0,0.5L87.4,7.8L86.5,10.4L86.5,10.5Z " data-iso="LTU" data-name="Lithuania" data-pop="3555179.0"/><path d="M94.1,8.0L93.1,9.4L92.3,9.6L89.8,12.2L89.6,12.3L89.6,12.2L87.6,11.5L87.5,11.0L86.6,10.5L86.5,10.5L86.5,10.4L87.4,7.8L86.0,0.5L84.0,-0.9L84.7,-1.3L90.3,-2.5L89.2,2.3L92.8,1.8L93.1,1.7L94.4,2.7L94.1,4.3L94.0,7.7L94.1,7.8L94.1,8.0Z " data-iso="LVA" data-name="Latvia" data-pop="2231503.0"/><path d="M258.3,217.9L258.3,217.9L258.1,218.0L258.1,218.0L258.1,218.0L258.1,218.0L258.1,217.9L258.2,217.8L258.3,217.9Z " data-iso="MAC" data-name="Macau" data-pop="559846.0"/><path d="M52.1,38.6L56.5,35.2L57.0,34.5L59.9,28.3L59.8,28.1L60.0,28.0L61.7,30.3L61.6,34.2L58.6,39.1L52.2,38.9L52.0,38.9L52.1,38.6Z " data-iso="MDA" data-name="Moldova" data-pop="4320748.0"/><path d="M34.1,34.0L33.1,36.4L32.7,36.6L31.8,37.2L31.7,37.2L31.6,37.0L29.1,35.3L28.0,33.8L27.9,33.5L27.9,33.4L29.7,30.4L31.0,29.8L31.0,29.8L31.0,29.9L31.9,29.9L33.4,31.4L33.4,31.4L33.4,31.6L33.6,31.8L34.4,33.1L34.4,33.2L34.1,34.0Z " data-iso="MKD" data-name="Macedonia" data-pop="2066718.0"/><path d="M202.6,195.4L204.5,197.9L204.6,201.8L199.8,209.7L200.0,212.1L202.2,211.3L204.5,211.6L204.2,212.9L205.7,215.5L205.8,219.4L208.2,220.0L208.1,220.9L210.8,222.0L212.6,221.7L212.5,221.8L212.3,222.1L210.2,224.2L210.3,224.3L208.6,226.3L208.6,226.5L208.2,226.2L204.4,227.4L204.0,228.4L201.0,228.2L198.0,233.0L201.1,238.4L202.6,241.7L202.0,245.2L200.5,245.9L201.8,249.2L203.5,250.9L204.2,255.6L205.6,259.3L202.2,263.3L201.8,265.2L201.6,265.2L200.9,263.3L201.9,256.2L201.1,252.5L199.0,247.1L198.9,244.9L196.9,238.5L194.7,240.2L192.3,241.2L187.0,242.1L187.3,239.8L185.3,241.1L187.2,235.7L182.3,224.2L179.9,222.5L179.7,222.2L180.9,220.5L181.1,217.9L181.1,217.7L181.3,217.6L183.1,217.1L185.0,210.3L187.0,210.8L189.8,206.6L189.4,205.9L191.8,200.7L198.4,197.2L200.0,195.1L200.1,194.9L201.6,194.6L202.0,194.7L202.4,195.3L202.6,195.4Z " data-iso="MMR" data-name="Myanmar" data-pop="48137741.0"/><path d="M35.6,22.2L34.7,24.3L34.7,24.7L34.3,26.8L34.2,26.9L34.0,26.6L33.7,26.3L33.5,26.3L33.0,26.8L32.9,26.8L32.9,26.8L32.8,25.9L32.8,25.6L29.8,26.7L30.0,26.1L30.8,24.6L31.0,23.6L31.1,23.3L31.1,23.2L31.2,22.9L31.3,22.7L31.5,22.6L31.5,22.7L32.9,21.7L33.3,22.0L35.6,22.1L35.6,22.2L35.6,22.2Z " data-iso="MNE" data-name="Montenegro" data-pop="672180.0"/><path d="M255.8,109.4L255.2,117.4L256.0,116.6L259.9,115.5L266.3,119.7L263.5,119.8L259.9,121.1L259.8,122.0L255.8,126.2L252.7,126.9L250.4,129.6L247.6,129.2L245.3,132.9L245.8,133.3L242.1,138.2L239.4,139.6L231.6,140.5L227.4,142.7L225.0,142.3L216.9,139.8L210.4,139.1L203.9,137.8L201.5,137.9L198.4,131.4L196.2,129.7L192.5,127.6L190.8,127.4L187.0,124.9L188.3,122.7L188.1,119.1L187.2,116.2L182.2,111.8L182.2,109.6L182.2,109.4L182.2,109.4L183.4,108.5L187.4,108.0L188.7,106.8L194.3,105.3L196.3,105.8L199.9,108.8L207.6,109.9L208.8,109.4L208.4,105.5L211.5,101.6L215.1,103.3L219.5,107.4L222.8,109.8L226.9,108.5L233.8,110.7L235.6,112.7L240.0,112.9L244.5,111.7L249.2,108.1L253.2,108.9L255.8,108.6L255.9,108.8L255.8,109.4Z " data-iso="MNG" data-name="Mongolia" data-pop="3041142.0"/><path d="M215.9,280.9L219.7,284.5L220.8,287.8L221.0,293.8L222.1,294.6L224.0,299.0L220.2,298.4L215.2,295.7L209.4,289.1L208.1,282.3L207.3,280.2L207.1,279.7L211.0,280.9L210.6,282.4L215.2,280.7L215.9,280.9Z M275.1,276.3L278.7,277.2L278.5,278.8L280.1,278.1L285.3,280.1L281.4,282.0L282.8,283.9L278.2,285.4L271.8,285.5L271.0,286.2L270.4,290.0L267.8,295.2L266.1,296.8L263.2,298.0L260.1,297.1L258.2,297.2L250.5,300.2L246.5,297.7L249.3,297.2L252.2,297.6L254.9,292.6L260.3,290.9L265.0,285.7L266.5,287.2L268.6,285.7L272.5,278.7L275.1,276.3Z " data-iso="MYS" data-name="Malaysia" data-pop="25715819.0"/><path d="M145.9,178.7L147.3,178.1L149.4,178.6L153.5,184.3L155.3,184.5L155.5,185.8L159.0,189.1L165.2,192.1L167.7,192.4L168.0,192.5L167.5,196.1L163.6,197.4L162.5,197.2L155.6,192.4L151.2,191.1L142.5,183.9L141.5,182.6L145.8,178.4L145.9,178.7Z " data-iso="NPL" data-name="Nepal" data-pop="28563377.0"/><path d="M61.4,167.1L62.3,171.4L66.0,174.8L67.2,179.9L68.3,181.2L61.0,186.8L59.2,186.2L56.9,191.0L52.6,190.5L50.9,192.3L48.3,191.3L44.3,193.2L43.2,192.2L39.3,191.3L38.5,191.2L38.5,188.3L38.3,188.0L38.5,180.6L38.6,180.1L39.1,180.2L49.4,182.1L53.1,177.5L54.2,172.9L54.2,172.3L54.5,171.8L57.0,168.2L59.5,165.3L61.5,165.9L61.4,167.1Z M62.3,163.3L62.0,163.1L61.9,162.9L62.3,161.4L62.8,161.0L63.4,161.8L62.4,163.1L62.3,163.3Z " data-iso="OMN" data-name="Oman" data-pop="3418085.0"/><path d="M138.1,153.8L138.1,154.3L138.2,155.4L138.2,155.7L138.1,155.9L133.5,156.8L129.6,154.3L126.8,159.8L128.9,163.8L126.0,168.5L123.1,171.3L114.4,176.9L112.7,177.6L109.9,176.2L104.8,179.1L107.2,186.9L107.5,189.1L102.8,189.6L99.6,187.7L97.0,188.6L96.8,188.8L94.5,186.2L93.4,182.8L93.2,179.4L87.0,178.2L77.6,173.9L77.7,173.8L79.8,170.6L83.5,170.3L84.4,170.8L85.5,168.5L85.3,165.1L83.6,161.7L82.8,156.2L82.6,155.2L83.5,156.2L91.5,161.9L98.5,163.1L100.4,159.7L103.1,158.8L104.3,159.6L108.9,159.7L110.8,159.3L113.6,155.4L115.7,155.1L116.9,153.0L119.2,153.2L119.3,151.5L121.4,150.4L122.4,148.7L122.3,146.6L125.7,144.6L132.7,146.0L133.1,145.9L133.3,145.9L136.5,148.9L136.6,152.3L137.9,153.3L138.0,153.4L138.1,153.8Z " data-iso="PAK" data-name="Pakistan" data-pop="176242949.0"/><path d="M310.8,260.5L311.7,263.2L312.6,263.4L313.9,268.2L312.9,270.2L310.8,268.3L309.5,271.0L310.9,273.5L309.8,275.2L305.8,273.9L304.0,270.4L303.9,268.6L301.3,269.8L298.1,268.9L296.3,272.5L295.5,271.5L299.4,266.9L299.9,265.7L302.4,265.1L304.0,266.2L306.5,262.7L309.0,262.1L308.3,259.6L310.8,260.5Z M299.6,263.6L296.5,261.7L298.1,259.9L298.3,256.8L300.4,257.6L299.5,261.6L299.6,263.6Z M300.4,262.0L300.3,260.0L302.0,254.9L302.5,257.9L300.4,262.0Z M276.7,269.4L276.7,268.4L283.9,260.3L282.7,262.7L279.2,267.4L276.7,269.4Z M296.1,254.3L298.5,255.5L297.5,257.2L294.5,257.1L294.4,254.2L296.1,254.3Z M306.3,248.8L308.8,253.7L303.4,250.9L303.7,249.4L306.3,248.8Z M288.4,248.3L290.3,248.2L291.8,249.3L292.0,251.0L290.5,252.8L287.0,248.8L288.4,248.3Z M287.6,228.3L291.9,228.0L293.7,233.1L290.5,240.0L292.8,245.5L296.7,244.2L301.8,247.7L298.5,248.1L295.5,245.5L295.8,248.2L292.3,245.9L287.8,246.4L288.9,244.0L287.3,243.0L285.4,243.4L283.9,237.9L286.0,238.0L285.3,232.5L286.2,228.8L287.6,228.3Z " data-iso="PHL" data-name="Philippines" data-pop="97976603.0"/><path d="M434.3,281.9L433.2,283.2L429.3,280.5L429.8,279.3L433.7,280.9L434.3,281.9Z M418.1,279.7L419.7,281.7L418.6,284.7L414.4,289.0L410.5,291.2L405.5,291.2L405.5,290.0L415.1,285.7L418.1,279.7Z M388.1,290.1L394.9,291.6L395.1,293.8L403.5,294.4L403.7,295.1L400.3,297.5L403.6,300.4L405.3,300.6L408.1,303.4L409.3,302.6L410.1,304.2L413.0,303.8L412.6,305.3L415.0,306.7L410.6,307.2L403.5,308.4L401.0,306.0L397.1,303.6L391.0,303.9L387.2,306.9L386.6,309.7L383.7,313.2L382.7,313.0L377.4,314.5L376.6,306.0L375.4,289.8L388.1,290.1Z M422.3,279.7L420.9,277.8L412.9,275.7L413.1,274.9L418.0,275.4L422.1,277.1L422.3,279.7Z " data-iso="PNG" data-name="Papua New Guinea" data-pop="6057263.0"/><path d="M78.6,6.0L78.8,6.0L78.3,7.8L77.6,8.2L77.6,8.3L76.4,9.2L73.1,11.8L71.1,11.4L69.0,13.5L68.6,13.9L68.4,14.1L64.9,17.2L64.5,16.7L59.0,17.8L58.8,17.2L58.7,17.1L58.7,17.0L59.2,15.1L58.1,11.5L57.1,11.3L57.5,8.1L57.4,7.8L57.5,7.7L58.7,6.3L59.7,1.8L58.4,1.8L60.6,-3.0L60.2,-4.0L60.3,-4.0L65.0,-6.4L67.6,-8.7L71.9,-10.4L77.5,-4.4L76.8,-0.6L76.9,-0.6L78.2,4.8L78.6,5.9L78.6,6.0Z " data-iso="POL" data-name="Poland" data-pop="38482919.0"/><path d="M299.1,128.6L299.2,128.8L299.7,129.3L299.8,129.3L299.7,129.5L297.9,132.9L298.8,135.4L293.8,141.6L293.9,143.9L297.1,145.2L297.3,145.4L293.7,147.9L293.0,150.0L293.0,150.0L286.9,150.1L289.0,147.3L287.6,146.9L287.6,144.2L284.3,143.0L284.3,143.0L285.6,140.9L288.1,138.4L290.8,135.1L293.8,134.9L292.9,133.1L295.8,130.9L296.8,128.3L299.0,128.5L299.1,128.6Z " data-iso="PRK" data-name="N. Korea" data-pop="22665345.0"/><path d="M45.1,156.0L48.7,152.0L46.3,157.8L45.9,157.7L44.8,156.6L44.9,156.1L45.1,156.0Z " data-iso="QAT" data-name="Qatar" data-pop="833285.0"/><path d="M51.8,39.4L51.8,39.8L52.6,41.1L53.3,42.7L53.0,42.9L51.1,41.8L50.8,42.2L47.0,44.2L46.8,44.4L45.9,39.3L45.3,38.6L41.5,29.5L41.5,29.2L41.6,29.1L42.1,25.7L43.8,22.8L45.7,19.0L45.9,18.7L46.0,18.7L47.1,20.3L52.5,19.6L54.8,20.5L54.9,20.5L55.0,20.6L56.0,23.5L56.1,25.6L59.7,28.0L59.8,28.1L59.9,28.3L57.0,34.5L56.5,35.2L52.1,38.6L52.0,38.9L51.8,39.4Z " data-iso="ROU" data-name="Romania" data-pop="22215421.0"/><path d="M309.2,73.0L318.9,85.8L322.3,90.0L320.0,91.2L321.2,96.6L326.5,100.9L326.7,102.2L323.7,100.6L323.1,103.8L321.6,100.3L318.1,94.2L317.2,90.9L314.2,84.9L311.1,81.7L309.2,73.0Z M81.0,1.1L80.5,5.1L79.6,5.3L78.8,5.8L78.6,6.0L78.6,5.9L78.2,4.8L76.9,-0.6L77.3,-0.4L77.7,-0.4L79.3,0.1L80.7,0.4L80.9,0.4L80.9,0.5L80.5,0.5L79.5,0.4L80.4,1.4L81.0,1.1Z M311.2,-12.7L319.6,-16.2L322.8,-15.0L324.0,-16.2L321.4,-17.6L322.7,-19.7L325.5,-20.6L328.8,-18.6L327.9,-17.0L330.3,-16.3L332.4,-13.1L326.3,-10.9L325.6,-8.3L322.1,-7.8L324.8,-7.0L325.2,-5.7L311.0,-12.6L311.2,-12.7Z M172.6,2.2L173.2,3.3L168.5,6.5L167.3,11.5L164.8,9.8L163.6,7.7L165.1,7.6L164.2,4.2L171.4,1.2L172.6,2.2Z M265.9,0.5L269.7,-1.2L268.7,1.4L265.8,1.4L265.9,0.5Z M259.2,2.5L259.6,0.9L264.1,0.7L263.5,3.3L261.8,2.7L263.6,4.6L260.9,5.5L259.7,6.8L257.8,5.8L257.4,1.8L259.2,2.5Z M190.8,0.7L183.1,0.3L173.7,3.2L171.9,1.4L172.7,-0.1L186.1,-2.6L189.5,-1.4L193.0,-1.2L190.8,0.7Z M299.8,129.3L299.7,129.3L299.2,128.8L299.1,128.6L299.2,128.4L300.1,126.5L298.5,118.5L299.4,117.0L302.7,116.5L302.3,104.4L300.8,103.3L298.6,105.2L297.5,107.3L293.9,108.6L291.6,105.2L289.0,103.8L283.7,103.7L279.9,98.6L278.4,96.2L274.7,92.1L266.7,92.2L263.2,94.2L264.2,98.8L263.0,100.5L261.7,105.5L262.2,106.8L259.1,109.5L256.5,109.0L255.9,108.8L255.8,108.6L253.2,108.9L249.2,108.1L244.5,111.7L240.0,112.9L235.6,112.7L233.8,110.7L226.9,108.5L222.8,109.8L219.5,107.4L215.1,103.3L211.5,101.6L208.4,105.5L208.8,109.4L207.6,109.9L199.9,108.8L196.3,105.8L194.3,105.3L188.7,106.8L187.4,108.0L183.4,108.5L182.2,109.4L182.2,109.4L182.1,109.4L181.5,109.4L181.3,109.5L181.2,109.5L180.9,109.4L180.9,109.2L179.9,106.4L178.4,107.2L176.2,106.1L172.2,100.0L170.7,100.3L168.3,99.3L167.0,97.0L166.1,98.1L163.2,87.3L161.4,84.0L155.9,83.9L154.0,83.2L154.6,81.4L150.3,78.4L151.4,75.7L149.5,73.2L146.2,72.3L144.6,72.8L135.8,71.0L130.4,68.8L128.7,71.1L129.8,72.9L127.7,72.2L124.3,77.3L123.7,79.9L118.8,77.8L118.1,75.4L115.9,74.7L115.5,73.6L111.7,73.4L108.1,65.7L108.1,64.7L105.6,62.5L98.7,63.0L96.8,65.1L96.3,61.6L89.7,65.9L88.6,69.4L90.2,71.3L88.6,77.6L88.5,77.8L78.8,79.6L78.9,82.9L76.6,85.4L75.9,91.0L75.9,91.4L72.9,92.2L71.9,90.8L71.8,87.6L71.6,87.3L71.6,87.2L70.9,85.1L71.7,84.1L65.7,73.7L64.9,70.9L63.4,69.9L63.4,69.5L63.0,57.7L65.4,59.1L66.1,58.4L68.7,58.8L69.0,56.1L72.6,57.2L72.0,55.5L71.3,55.2L72.9,54.0L77.6,55.1L79.5,52.4L81.7,51.5L80.6,46.7L79.8,46.7L79.3,36.3L82.0,31.9L78.9,28.9L78.9,28.8L79.0,28.8L82.3,25.4L82.6,26.9L84.8,24.6L86.0,22.4L90.1,18.6L90.2,16.4L89.2,15.8L89.4,12.7L89.6,12.3L89.8,12.2L92.3,9.6L93.1,9.4L94.1,8.0L94.1,7.8L94.2,7.7L95.2,7.5L98.6,5.3L101.9,4.7L102.2,4.6L103.8,5.4L105.4,4.9L106.1,2.7L105.7,2.1L114.8,3.2L118.3,1.7L119.3,-0.9L121.9,-2.3L124.1,-4.3L128.1,-5.8L130.8,-8.5L136.3,-11.9L139.2,-12.7L139.4,-12.5L140.5,-12.7L144.4,-10.9L143.8,-5.9L142.5,1.5L142.3,3.9L139.8,6.2L134.6,5.2L133.3,0.6L133.9,-4.9L131.6,-1.7L131.1,0.5L128.8,1.4L126.9,3.3L126.1,9.1L126.6,9.4L128.8,5.2L131.6,10.5L132.3,9.8L136.6,8.2L139.9,10.3L139.3,11.8L146.9,6.1L147.5,4.4L149.2,7.3L148.3,9.4L145.0,8.9L144.5,12.5L145.7,13.1L148.1,11.7L156.5,13.1L158.9,14.0L155.7,15.0L161.3,17.6L163.9,17.7L162.6,19.6L166.1,19.3L167.1,16.8L168.4,16.7L170.6,19.0L173.0,24.1L173.5,26.9L175.3,25.2L177.1,17.5L180.2,15.9L185.1,12.1L187.8,14.7L184.3,18.4L184.0,21.1L177.5,32.1L174.3,34.6L172.5,34.1L171.2,32.5L172.0,34.9L173.1,35.4L178.1,34.9L180.9,32.8L182.1,29.5L185.3,29.4L184.2,34.1L186.2,32.8L186.8,30.3L185.1,28.3L182.8,27.7L184.1,23.9L185.5,22.7L185.7,19.1L190.7,15.3L190.3,17.5L189.2,18.4L188.4,21.1L191.3,23.2L189.7,20.2L193.6,18.3L198.1,22.8L195.9,24.8L196.8,25.5L195.6,27.6L197.2,27.0L198.4,22.2L197.3,19.9L197.1,17.3L197.8,15.0L206.0,14.2L204.8,12.8L210.4,10.4L219.2,9.1L220.3,10.0L221.6,8.2L222.2,5.7L224.2,4.1L227.8,6.7L227.1,8.1L231.6,7.4L234.5,12.3L229.3,18.8L227.6,20.2L228.9,20.8L231.0,19.6L230.9,18.3L235.2,18.2L235.5,19.0L238.8,17.9L241.1,17.8L241.4,19.1L247.0,18.9L248.1,15.7L252.9,16.0L254.4,20.3L257.6,23.2L259.8,23.9L259.7,19.1L262.4,20.3L267.3,18.2L268.0,16.2L266.1,13.8L268.2,11.5L272.0,11.8L274.5,9.4L277.4,8.6L277.5,10.0L280.1,10.7L280.7,9.7L284.7,9.1L286.0,6.8L288.1,5.2L291.0,4.8L293.2,6.9L296.4,6.5L296.8,4.0L300.5,-0.7L302.4,-0.1L305.7,-1.4L305.2,-2.4L302.5,-2.8L301.0,-4.2L304.3,-7.8L305.1,-9.4L311.0,-12.6L326.2,-5.2L327.5,-0.4L330.7,-0.0L335.8,1.8L333.1,4.1L333.8,5.7L333.7,11.1L335.3,18.0L336.5,20.3L334.2,20.1L332.4,21.4L332.2,26.6L331.2,25.6L328.7,29.4L329.1,30.9L335.6,38.5L337.1,39.9L339.8,41.0L338.5,42.1L339.6,45.6L342.3,47.2L341.3,49.2L341.0,52.8L343.0,55.4L342.4,59.2L343.3,60.3L343.8,67.1L332.7,57.1L330.3,54.6L327.4,49.8L326.6,44.4L327.1,42.7L326.8,38.6L326.3,37.3L323.7,24.4L321.9,21.6L320.2,22.9L322.2,25.5L321.9,26.6L322.7,31.3L322.2,32.4L319.9,30.7L318.8,28.7L317.3,29.7L315.1,33.0L316.0,37.2L316.3,42.0L317.0,44.6L314.3,48.5L311.5,47.0L309.4,47.4L309.4,49.8L308.0,50.1L304.7,53.2L303.6,52.8L299.7,55.3L298.4,57.6L297.8,60.6L298.0,63.2L296.2,67.8L295.6,72.5L293.7,76.9L293.4,78.8L296.9,78.1L299.4,81.3L302.1,80.2L303.3,76.5L308.5,78.4L308.0,79.8L311.1,83.3L310.8,84.8L311.7,89.2L314.2,95.0L314.3,98.6L313.6,107.4L312.0,112.8L310.1,120.6L306.0,125.6L299.9,129.2L299.8,129.3Z M223.7,-1.9L225.7,0.9L222.2,2.0L223.7,-1.9Z M220.1,-5.5L221.2,-4.8L221.2,-1.5L220.4,-0.4L216.7,-3.9L220.1,-5.5Z M219.8,-8.9L219.8,-5.8L217.3,-5.2L215.9,-6.4L219.8,-8.9Z " data-iso="RUS" data-name="Russia" data-pop="140041247.0"/><path d="M41.8,131.7L42.3,132.2L43.6,135.6L43.6,136.1L45.6,137.7L45.6,138.1L45.0,141.9L46.4,147.0L45.5,150.0L44.8,155.7L44.9,156.1L44.8,156.6L45.9,157.7L46.0,158.0L45.9,158.4L45.5,158.8L46.1,159.4L46.2,159.5L47.2,166.9L53.9,172.5L54.2,172.3L54.2,172.9L53.1,177.5L49.4,182.1L39.1,180.2L38.6,180.1L37.8,179.8L29.5,175.9L25.7,175.5L22.4,177.3L20.2,177.4L18.7,174.9L10.8,167.3L9.8,167.4L7.0,170.2L7.1,169.8L7.2,163.5L6.8,162.0L7.5,154.0L6.4,148.6L9.0,138.2L9.3,126.7L10.4,123.8L12.5,109.3L11.8,107.8L13.4,106.0L15.4,104.3L17.4,107.5L20.5,106.9L22.4,108.2L24.8,107.7L25.1,101.9L30.8,105.0L31.4,104.9L31.8,105.5L33.6,108.3L35.7,117.5L41.3,131.5L41.8,131.7Z " data-iso="SAU" data-name="Saudi Arabia" data-pop="28686633.0"/><path d="M1.8,135.7L0.1,141.0L-2.9,148.0L-1.5,153.5L-1.5,153.9L-6.4,154.3L-7.7,153.4L-10.8,157.3L-12.9,159.0L-13.8,161.4L-14.3,162.6L-15.0,163.4L-18.2,167.3L-19.9,166.7L-21.9,168.0L-24.7,171.3L-27.1,170.9L-29.5,174.5L-29.5,174.5L-29.5,174.4L-28.7,171.1L-29.6,166.7L-27.8,162.7L-30.2,159.1L-30.9,162.8L-36.5,165.2L-38.2,162.4L-43.3,159.6L-45.5,157.8L-45.7,156.1L-48.7,153.0L-48.9,146.8L-50.3,145.6L-53.7,147.5L-54.9,148.8L-56.2,148.4L-57.4,146.0L-55.1,142.4L-54.6,135.7L-53.6,134.6L-52.5,125.1L-50.6,124.6L-48.0,122.5L-47.4,120.5L-41.9,120.3L-41.5,121.2L-33.3,109.3L-32.2,107.7L-28.9,109.0L-27.7,107.2L-25.1,103.7L-23.8,102.0L-23.1,103.2L-15.3,114.2L-8.5,122.8L-1.7,130.6L2.3,134.9L1.8,135.7Z " data-iso="SDN" data-name="Sudan" data-pop="30894000.0"/><path d="M10.4,214.0L9.3,213.3L7.0,211.6L-0.9,201.3L-2.2,191.4L-1.5,191.1L-1.4,190.9L-0.7,190.5L-0.1,190.1L0.3,189.8L0.7,190.8L2.2,196.6L4.0,197.8L7.3,198.2L11.0,200.5L12.1,200.4L17.0,202.6L17.6,203.4L17.7,203.4L15.5,210.0L15.4,210.4L11.2,213.4L10.4,214.0Z " data-iso="SOL" data-name="Somaliland" data-pop="3500000.0"/><path d="M-14.2,216.0L-10.9,216.9L-9.4,216.3L-3.3,219.3L1.3,217.3L9.3,214.4L10.4,214.0L11.2,213.4L15.4,210.4L15.5,210.0L17.7,203.4L18.1,203.6L24.7,204.5L22.8,211.4L20.5,215.3L15.9,219.1L9.7,225.2L1.4,230.1L-2.2,231.5L-9.1,231.9L-12.7,233.0L-21.2,237.6L-22.3,233.2L-20.1,224.2L-15.5,216.9L-14.8,216.4L-14.2,216.0Z " data-iso="SOM" data-name="Somalia" data-pop="9832017.0"/><path d="M45.9,18.7L45.7,19.0L43.8,22.8L42.1,25.7L41.6,29.1L41.5,29.2L41.4,29.1L36.8,32.6L36.4,32.1L34.6,33.3L34.4,33.2L34.4,33.1L33.6,31.8L33.4,31.6L33.4,31.4L33.5,31.3L35.8,28.0L35.8,26.6L34.4,27.1L34.2,26.9L34.3,26.8L34.7,24.7L34.7,24.3L35.6,22.2L35.6,22.2L35.9,22.3L37.8,22.0L39.0,19.8L40.4,18.7L40.3,18.6L40.4,18.5L42.0,18.3L42.3,17.3L44.0,15.9L44.1,15.9L44.2,15.9L44.5,16.3L45.2,16.9L45.9,18.6L45.9,18.7Z " data-iso="SRB" data-name="Serbia" data-pop="7379339.0"/><path d="M58.6,17.2L57.9,17.3L57.4,17.4L56.5,17.4L55.9,17.8L55.9,17.7L55.2,14.0L52.0,11.2L50.9,11.3L50.6,7.1L50.6,7.1L50.7,6.9L51.9,5.6L52.1,5.5L52.7,5.4L52.7,5.4L53.0,5.3L54.5,6.7L55.2,7.1L57.4,7.8L57.4,7.8L57.5,8.1L57.1,11.3L58.1,11.5L59.2,15.1L58.7,17.0L58.7,17.1L58.6,17.2Z " data-iso="SVK" data-name="Slovakia" data-pop="5463046.0"/><path d="M44.5,8.5L42.8,7.3L39.7,7.9L38.9,3.5L39.0,3.6L39.3,3.7L40.7,2.6L41.9,1.4L42.6,1.8L42.9,1.8L42.9,1.9L44.2,5.3L44.8,6.5L45.5,6.9L45.6,7.0L45.7,7.5L45.2,7.9L44.6,8.7L44.5,8.8L44.5,8.5Z " data-iso="SVN" data-name="Slovenia" data-pop="2005692.0"/><path d="M50.9,95.2L47.4,95.2L43.8,98.9L34.7,100.0L33.7,99.8L32.9,99.7L26.9,98.8L26.3,97.9L26.1,95.3L25.9,95.0L26.1,94.8L27.0,94.0L27.2,93.9L27.7,93.0L27.9,92.9L28.1,92.9L31.5,92.0L32.1,89.8L31.4,89.2L31.8,88.3L33.4,86.5L33.5,85.6L34.5,84.9L34.7,84.8L35.0,85.7L38.5,83.7L39.7,86.0L41.9,86.9L43.6,90.2L46.7,91.5L51.1,94.7L50.9,95.2L50.9,95.2Z " data-iso="SYR" data-name="Syria" data-pop="20178485.0"/><path d="M208.6,226.5L208.6,226.7L209.6,229.1L211.7,229.4L212.8,231.9L212.0,237.6L215.6,235.1L217.2,235.8L219.6,235.3L220.7,234.2L222.9,234.6L226.2,238.5L226.0,239.4L228.5,243.6L229.0,247.2L227.9,249.8L227.7,249.9L227.6,250.0L221.3,249.6L218.8,250.7L216.4,252.9L218.8,260.0L218.7,260.0L214.0,256.1L211.1,253.2L208.2,252.9L207.2,253.8L207.2,257.2L205.0,262.7L203.6,264.8L204.2,269.0L206.5,269.5L206.7,271.2L208.7,277.0L210.8,278.3L212.4,278.2L214.0,279.8L215.2,280.7L210.6,282.4L211.0,280.9L207.1,279.7L206.1,278.5L199.7,271.8L201.2,266.5L201.8,265.2L202.2,263.3L205.6,259.3L204.2,255.6L203.5,250.9L201.8,249.2L200.5,245.9L202.0,245.2L202.6,241.7L201.1,238.4L198.0,233.0L201.0,228.2L204.0,228.4L204.4,227.4L208.2,226.2L208.6,226.5Z " data-iso="THA" data-name="Thailand" data-pop="65905410.0"/><path d="M126.1,131.2L125.6,131.0L125.5,130.8L126.1,131.2Z M127.4,129.9L127.3,130.0L122.5,129.0L121.8,130.7L127.9,133.0L129.4,135.2L133.5,135.7L133.6,135.8L133.6,136.0L133.0,139.1L135.7,141.0L134.4,145.5L134.3,145.5L134.3,145.4L130.6,143.1L124.2,143.9L125.5,139.8L124.1,136.5L121.1,139.1L115.6,138.5L113.9,137.8L113.9,137.6L114.2,137.4L117.0,132.4L116.1,129.4L122.7,128.1L123.1,126.7L127.1,126.4L127.2,129.9L127.4,129.9Z " data-iso="TJK" data-name="Tajikistan" data-pop="7349145.0"/><path d="M110.8,135.4L110.6,135.3L109.1,133.6L108.0,134.5L105.5,134.1L103.6,136.4L99.0,136.3L98.1,137.7L95.5,137.5L93.7,134.5L93.5,134.4L93.5,134.3L94.9,130.5L92.9,129.3L91.7,124.9L89.4,122.4L87.9,119.4L85.3,117.7L77.8,116.4L77.9,116.1L81.0,111.0L81.1,105.8L83.5,102.5L84.9,104.7L87.8,104.3L87.3,102.4L88.0,99.6L85.8,98.6L84.0,99.5L84.3,98.4L89.4,99.5L90.0,105.1L91.2,105.6L91.3,105.7L91.9,106.2L93.6,107.6L94.7,105.4L96.3,105.0L99.3,106.0L99.2,105.0L102.1,109.5L101.3,111.7L105.2,115.4L104.6,120.4L110.9,135.0L110.8,135.4Z " data-iso="TKM" data-name="Turkmenistan" data-pop="4884887.0"/><path d="M-7.7,26.3L-10.4,28.3L-14.8,26.3L-17.1,28.5L-19.3,27.9L-19.6,27.7L-18.8,26.8L-8.0,12.0L-5.0,12.2L-3.0,11.6L-0.4,9.7L4.0,8.1L4.3,8.7L5.8,11.3L4.7,13.6L5.2,15.9L2.8,15.5L1.7,16.1L-0.7,19.9L-4.5,19.3L-6.8,21.8L-7.7,25.8L-7.7,26.3Z " data-iso="TUN" data-name="Tunisia" data-pop="10486339.0"/><path d="M60.9,79.0L61.3,79.9L63.6,84.1L63.5,84.2L63.4,84.3L61.7,88.7L62.4,89.4L62.6,91.2L62.6,91.4L62.6,91.5L62.5,91.7L62.5,91.6L60.3,91.0L56.2,100.0L56.1,100.0L56.1,99.9L54.3,97.9L52.3,95.1L51.1,95.3L50.9,95.2L51.1,94.7L46.7,91.5L43.6,90.2L41.9,86.9L39.7,86.0L38.5,83.7L35.0,85.7L34.7,84.8L35.1,84.7L37.8,82.0L36.3,81.8L33.7,78.9L31.4,78.8L29.4,77.1L29.1,71.2L27.8,69.3L27.0,70.1L24.2,67.9L25.0,65.6L22.6,61.7L24.7,62.9L24.2,60.6L25.0,58.3L26.3,57.4L25.8,55.1L26.9,53.6L30.8,51.9L29.5,50.4L31.3,49.0L33.3,49.3L34.1,51.3L36.5,54.8L38.8,55.8L38.8,52.9L41.4,57.1L46.2,58.9L51.1,64.1L51.9,69.6L55.9,76.0L56.2,77.2L60.5,79.1L60.9,79.0Z M39.8,48.2L37.7,51.2L36.2,49.5L34.2,48.8L33.4,46.8L33.5,46.6L34.8,46.7L35.6,45.9L37.2,44.9L37.1,44.6L37.2,44.5L39.4,46.7L40.2,48.0L39.8,48.2Z " data-iso="TUR" data-name="Turkey" data-pop="76805524.0"/><path d="M285.3,212.8L282.7,213.2L281.7,211.3L283.0,205.8L285.5,202.3L287.2,204.9L285.3,212.8Z " data-iso="TWN" data-name="Taiwan" data-pop="22974347.0"/><path d="M71.2,55.2L64.8,51.2L62.2,52.9L61.7,54.1L63.3,56.2L62.3,57.6L61.2,55.7L59.5,55.7L56.1,53.7L57.5,48.4L61.0,47.7L60.0,43.2L62.4,41.8L60.7,43.6L59.0,41.6L53.6,42.6L53.3,42.7L52.6,41.1L51.8,39.8L51.8,39.4L52.0,38.9L52.2,38.9L58.6,39.1L61.6,34.2L61.7,30.3L60.0,28.0L59.8,28.1L59.7,28.0L56.1,25.6L56.0,23.5L55.0,20.6L54.9,20.5L55.0,20.4L55.6,19.1L55.6,18.6L56.1,18.0L55.9,17.8L56.5,17.4L57.4,17.4L57.9,17.3L58.6,17.2L58.7,17.1L58.8,17.2L59.0,17.8L64.5,16.7L64.9,17.2L68.4,14.1L68.6,13.9L68.7,13.9L72.7,20.6L74.9,27.3L78.7,28.5L78.9,28.8L78.9,28.9L82.0,31.9L79.3,36.3L79.8,46.7L80.6,46.7L81.7,51.5L79.5,52.4L77.6,55.1L72.9,54.0L71.3,55.2L71.2,55.2Z " data-iso="UKR" data-name="Ukraine" data-pop="45700395.0"/><path d="M510.9,42.7L507.1,39.2L508.0,38.1L510.0,38.5L510.9,42.7Z M294.2,-159.7L303.0,-157.9L309.8,-156.2L340.3,-146.1L346.2,-143.7L359.6,-137.9L374.4,-130.5L392.6,-120.1L396.6,-117.6L408.0,-108.3L406.3,-106.6L395.7,-105.9L383.7,-106.3L381.4,-106.1L375.6,-103.4L372.6,-108.1L374.7,-109.6L369.4,-107.5L364.1,-113.7L355.7,-122.2L348.6,-128.6L338.7,-136.3L330.4,-141.8L319.2,-148.4L310.0,-153.1L299.0,-157.9L294.6,-158.4L294.2,-159.7Z M356.5,-80.1L359.3,-83.8L360.9,-84.0L358.6,-80.6L356.5,-80.1Z M362.8,-41.2L364.8,-41.3L366.9,-37.5L363.9,-38.3L362.8,-41.2Z M351.0,-75.2L351.4,-76.9L352.9,-77.1L353.6,-75.6L352.9,-73.7L351.0,-75.2Z M336.3,-15.2L338.6,-19.0L339.4,-17.3L337.5,-14.6L336.3,-15.2Z M307.8,-43.6L306.9,-46.9L308.7,-48.3L307.9,-50.9L308.5,-54.3L307.9,-57.6L307.9,-61.9L311.5,-62.4L340.8,-64.8L346.9,-64.9L345.3,-68.4L349.9,-71.6L348.1,-73.3L344.9,-74.8L348.3,-79.6L351.3,-82.3L353.4,-85.1L353.3,-87.2L358.2,-87.4L359.2,-86.8L357.5,-83.1L354.7,-84.3L352.9,-81.4L353.1,-80.0L351.1,-80.1L348.6,-78.4L348.0,-76.2L350.0,-76.5L350.6,-74.9L348.1,-74.2L349.5,-72.9L351.0,-74.4L349.2,-67.2L347.3,-68.2L349.0,-66.1L348.5,-64.4L349.6,-60.3L347.9,-54.9L346.6,-55.3L348.6,-51.6L351.0,-51.7L356.3,-46.0L354.3,-44.6L350.1,-46.2L348.6,-47.9L348.8,-50.2L347.5,-47.8L349.5,-45.5L353.6,-43.3L356.0,-40.7L359.0,-40.9L361.7,-38.7L364.9,-34.2L366.7,-32.8L369.5,-28.3L370.1,-28.6L372.3,-25.2L371.5,-25.0L372.1,-21.3L373.7,-19.6L373.7,-16.8L372.0,-19.4L370.8,-23.7L369.4,-24.6L367.5,-28.1L365.5,-29.8L358.5,-34.4L359.0,-31.2L360.9,-29.9L359.2,-29.3L358.8,-26.6L359.7,-24.7L357.7,-25.6L353.1,-25.8L354.1,-24.3L351.6,-21.0L349.7,-22.1L348.7,-21.2L344.8,-22.0L341.8,-24.6L339.4,-30.8L338.0,-32.3L333.4,-32.9L335.2,-29.2L334.8,-26.1L329.1,-23.2L326.1,-29.2L327.6,-29.7L328.5,-32.6L327.5,-33.5L324.4,-33.8L323.9,-31.3L319.7,-29.7L316.0,-29.5L315.1,-33.2L309.8,-38.6L308.3,-39.1L306.2,-42.5L307.8,-43.6Z " data-iso="USA" data-name="United States" data-pop="307212123.0"/><path d="M127.5,131.5L127.2,131.0L127.1,130.5L127.5,131.5Z M130.3,122.4L130.4,122.3L129.5,123.4L129.6,126.9L134.1,130.0L129.5,131.0L127.5,129.9L127.4,129.9L127.2,129.9L127.1,126.4L123.1,126.7L122.7,128.1L116.1,129.4L117.0,132.4L114.2,137.4L113.9,137.6L114.0,137.5L113.2,136.9L112.3,136.1L111.7,135.7L110.8,135.4L110.9,135.0L104.6,120.4L105.2,115.4L101.3,111.7L102.1,109.5L99.2,105.0L99.3,106.0L96.3,105.0L94.7,105.4L93.6,107.6L91.9,106.2L91.3,105.7L91.7,104.9L99.3,92.9L106.0,94.6L109.3,102.9L110.1,106.9L113.1,108.0L116.0,109.8L117.2,109.8L119.1,114.0L117.2,117.5L118.0,117.9L117.8,121.7L121.8,124.9L124.0,123.5L130.0,122.4L130.3,122.4Z " data-iso="UZB" data-name="Uzbekistan" data-pop="27606007.0"/><path d="M237.7,222.0L233.1,224.3L233.4,225.1L229.2,232.1L233.6,238.2L237.7,241.8L238.6,242.0L241.8,245.6L243.8,251.4L244.4,254.8L242.9,261.1L233.4,267.0L230.3,266.5L231.7,268.8L226.3,271.1L226.6,267.3L225.1,265.3L224.7,265.0L228.5,263.0L230.0,262.8L230.8,260.1L232.3,260.1L236.5,257.8L237.2,252.9L236.8,248.6L236.8,248.4L236.7,247.9L235.3,244.2L236.2,243.2L232.9,241.0L232.8,240.1L227.5,234.5L227.3,233.2L222.8,230.9L226.6,228.0L224.5,226.4L224.4,224.9L219.0,223.4L219.3,221.5L216.5,219.1L216.3,218.7L216.4,218.6L221.8,217.3L222.8,218.2L226.2,216.0L233.4,217.2L233.2,220.2L237.9,222.0L237.7,222.0Z " data-iso="VNM" data-name="Vietnam" data-pop="86967524.0"/><path d="M24.2,96.1L23.4,96.8L22.9,97.6L22.2,98.1L21.9,98.3L21.8,98.2L21.6,96.7L24.4,95.3L24.5,95.5L24.2,96.1Z " data-iso="PSE" data-name="Palestine" data-pop="2514845.0"/><path d="M36.6,190.9L35.1,191.4L34.3,193.3L22.6,191.4L20.8,192.1L14.8,190.4L11.3,188.6L4.3,187.3L3.4,185.9L3.0,183.0L4.9,175.9L4.6,174.1L6.5,171.5L7.0,170.2L9.8,167.4L10.8,167.3L18.7,174.9L20.2,177.4L22.4,177.3L25.7,175.5L29.5,175.9L37.8,179.8L38.6,180.1L38.5,180.6L38.3,188.0L38.5,188.3L38.5,191.2L36.6,190.9Z " data-iso="YEM" data-name="Yemen" data-pop="23822783.0"/><path d="M249.0,227.3L247.4,232.5L244.1,234.5L241.0,233.4L242.6,228.6L245.3,227.7L249.0,227.3Z M299.1,128.6L299.0,128.5L296.8,128.3L295.8,130.9L292.9,133.1L293.8,134.9L290.8,135.1L288.1,138.4L285.6,140.9L284.3,143.0L284.2,143.0L280.7,145.2L277.7,148.5L275.7,147.3L277.6,143.0L274.3,141.5L272.7,144.5L269.8,146.9L269.6,148.3L265.4,150.1L265.1,151.2L266.6,153.7L269.6,153.8L270.0,156.6L272.6,156.8L274.0,154.7L276.2,153.9L281.4,154.2L281.2,156.1L276.8,158.4L276.1,160.2L274.8,160.2L272.2,166.2L275.0,167.3L278.8,172.4L279.0,173.8L282.8,176.5L278.9,176.5L282.5,178.5L283.5,180.0L282.4,182.9L284.8,183.9L284.7,186.9L283.4,186.7L284.2,190.4L281.8,192.2L279.5,198.0L278.1,197.4L277.4,200.8L278.2,200.5L278.8,203.0L276.6,204.3L275.9,206.4L273.1,207.4L273.9,208.1L271.4,210.6L264.9,215.3L261.1,216.2L260.9,216.4L260.3,216.4L260.2,216.4L259.9,216.6L259.6,216.6L257.7,215.2L257.3,215.3L258.3,217.9L258.2,217.8L258.1,217.9L258.1,218.0L258.1,218.0L258.1,218.0L256.6,218.1L254.9,220.0L252.5,219.9L249.2,221.4L246.2,224.1L247.5,225.4L246.1,226.5L243.9,221.1L240.8,221.4L239.7,220.4L238.2,221.9L237.9,222.0L233.2,220.2L233.4,217.2L226.2,216.0L222.8,218.2L221.8,217.3L216.4,218.6L216.3,218.7L216.1,218.6L214.9,218.2L215.0,223.2L212.7,222.0L212.5,221.8L212.6,221.7L210.8,222.0L208.1,220.9L208.2,220.0L205.8,219.4L205.7,215.5L204.2,212.9L204.5,211.6L202.2,211.3L200.0,212.1L199.8,209.7L204.6,201.8L204.5,197.9L202.6,195.4L202.4,195.3L202.5,195.3L204.5,194.8L205.6,193.1L206.3,188.2L206.2,185.6L204.8,180.6L202.5,178.2L201.3,178.3L198.1,181.0L194.6,180.5L192.1,176.8L188.1,176.7L184.4,175.5L182.0,172.9L178.2,171.6L177.0,169.8L177.8,166.2L177.0,164.0L177.8,161.3L174.6,159.3L167.3,159.1L166.5,160.2L158.6,160.3L155.4,158.2L152.1,159.2L148.4,157.4L145.9,160.9L142.9,161.1L142.7,161.2L143.0,161.0L141.6,158.9L141.3,156.1L141.0,155.0L141.0,155.0L140.9,155.0L140.7,155.0L139.9,154.7L139.4,154.5L138.3,153.7L138.0,153.4L137.9,153.3L136.6,152.3L136.5,148.9L133.3,145.9L133.1,145.9L133.0,145.9L132.7,145.2L133.4,145.1L134.2,145.5L134.3,145.5L134.4,145.5L135.7,141.0L133.0,139.1L133.6,136.0L133.6,135.8L133.9,135.8L138.4,133.1L142.3,135.0L144.5,133.1L145.8,133.4L155.3,131.6L155.3,131.3L155.4,131.3L157.9,127.6L158.1,120.4L162.8,120.3L164.6,121.8L164.8,119.6L167.8,115.0L172.4,116.7L175.0,115.6L175.8,111.9L178.3,111.2L180.7,109.3L180.9,109.4L181.2,109.5L181.3,109.5L181.5,109.4L182.1,109.4L182.2,109.4L182.2,109.6L182.2,111.8L187.2,116.2L188.1,119.1L188.3,122.7L187.0,124.9L190.8,127.4L192.5,127.6L196.2,129.7L198.4,131.4L201.5,137.9L203.9,137.8L210.4,139.1L216.9,139.8L225.0,142.3L227.4,142.7L231.6,140.5L239.4,139.6L242.1,138.2L245.8,133.3L245.3,132.9L247.6,129.2L250.4,129.6L252.7,126.9L255.8,126.2L259.8,122.0L259.9,121.1L263.5,119.8L266.3,119.7L259.9,115.5L256.0,116.6L255.2,117.4L255.8,109.4L255.9,108.8L256.5,109.0L259.1,109.5L262.2,106.8L261.7,105.5L263.0,100.5L264.2,98.8L263.2,94.2L266.7,92.2L274.7,92.1L278.4,96.2L279.9,98.6L283.7,103.7L289.0,103.8L291.6,105.2L293.9,108.6L297.5,107.3L298.6,105.2L300.8,103.3L302.3,104.4L302.7,116.5L299.4,117.0L298.5,118.5L300.1,126.5L299.2,128.4L299.1,128.6Z " data-iso="CHN" data-name="China" data-pop="1338612968.0"/></g></svg>
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'><svg enable_background="new 0 0 500 306" height="306px" style="stroke-linejoin: round; stroke:#000; fill:#f6f3f0;" version="1.1" viewBox="0 0 500 306" width="500px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"><![CDATA[path { fill-rule: evenodd; }
+#context path { fill: #eee; stroke: #bbb; } ]]></style></defs><metadata><views><view h="306.742382824" padding="0" w="500"><proj id="laea" lat0="39.5" lon0="104.5"/><bbox h="858.81" w="1404.46" x="297.77" y="525.07"/><llbbox lat0="8.0" lat1="71.0" lon0="45.0" lon1="164.0"/></view></views></metadata><g id="countries"><path d="M149.2,161.7L145.0,159.1L137.9,159.9L137.8,151.7L135.3,153.3L126.5,153.1L126.5,153.0L126.6,152.8L125.7,152.2L124.7,151.3L124.0,150.8L123.0,150.5L122.9,150.4L121.1,148.5L117.2,149.1L115.1,151.7L109.9,151.5L108.9,153.1L106.1,152.9L104.1,149.5L103.8,149.4L103.8,149.7L101.8,152.3L98.5,154.4L94.8,164.9L97.1,167.6L93.0,171.8L91.7,172.5L92.7,173.6L101.6,179.9L109.3,181.3L111.5,177.5L114.5,176.5L115.8,177.4L123.0,177.0L126.2,172.7L128.6,172.4L129.9,170.1L136.0,165.3L135.9,162.9L139.7,160.7L147.4,162.3L147.8,162.2L147.8,162.2L147.5,161.4L148.2,161.3L149.1,161.7L149.2,161.7L149.2,161.7Z " data-iso="AFG" data-name="Afghanistan" data-pop="28400000.0"/><path d="M36.5,29.8L36.4,28.8L36.4,28.4L33.1,29.6L33.1,30.0L28.9,32.8L27.7,33.8L25.7,37.4L25.4,37.7L26.7,37.9L27.7,38.4L30.6,37.4L30.9,37.2L31.0,37.1L32.9,33.8L34.4,33.1L34.4,33.1L34.6,33.1L35.5,32.2L35.9,31.3L36.5,30.0L36.5,29.8L36.5,29.8Z " data-iso="ALB" data-name="Albania" data-pop="3639453.0"/><path d="M69.2,179.4L60.4,183.3L52.4,179.8L51.4,177.2L51.2,177.3L52.4,185.5L59.8,191.7L60.2,191.5L60.4,190.9L63.3,186.9L66.1,183.7L68.2,184.5L68.3,184.3L69.2,181.9L69.2,181.5L68.8,181.3L68.7,181.0L69.2,179.3L69.2,179.4Z " data-iso="ARE" data-name="United Arab Emirates" data-pop="4798491.0"/><path d="M74.5,96.3L74.4,96.3L72.6,94.9L70.7,93.6L70.5,93.6L70.4,93.8L68.5,98.6L69.3,99.3L69.5,101.4L69.5,101.6L69.7,101.8L70.5,103.9L71.4,104.4L70.4,107.2L70.3,107.6L70.4,107.8L70.9,107.9L71.3,108.3L71.5,108.0L72.5,105.1L72.2,102.6L74.4,96.5L74.5,96.3Z " data-iso="ARM" data-name="Armenia" data-pop="2967004.0"/><path d="M47.5,2.0L47.5,2.1L49.0,5.9L49.7,7.2L50.4,7.6L50.6,7.8L51.1,7.9L52.9,7.5L53.8,7.7L55.9,7.8L56.1,7.9L56.2,7.6L57.5,6.3L57.8,6.1L58.5,6.0L58.5,6.0L58.6,5.9L58.9,2.4L58.9,0.4L57.0,0.0L47.5,0.0L47.5,0.4L47.5,0.9L47.6,1.3L47.5,2.0Z " data-iso="AUT" data-name="Austria" data-pop="8210281.0"/><path d="M69.5,101.6L69.4,101.7L69.4,101.9L69.4,102.0L69.2,105.8L69.9,107.1L70.3,107.6L70.4,107.2L71.4,104.4L70.5,103.9L69.7,101.8L69.5,101.6Z M79.5,97.1L79.3,97.1L78.3,99.8L77.5,100.2L75.4,96.2L74.5,96.3L74.4,96.5L72.2,102.6L72.5,105.1L71.5,108.0L71.3,108.3L71.5,108.5L77.1,108.5L77.1,110.3L74.8,111.7L75.9,115.1L76.9,113.6L78.4,113.3L82.2,109.8L84.5,111.1L84.4,102.0L84.3,101.6L80.9,102.5L79.8,100.9L79.7,97.4L79.5,97.1Z " data-iso="AZE" data-name="Azerbaijan" data-pop="8238672.0"/><path d="M187.0,239.9L192.2,240.5L193.4,236.9L196.8,237.9L198.2,240.6L199.6,247.0L199.6,247.0L201.0,245.1L201.2,242.2L201.2,242.0L201.1,241.7L200.6,234.5L196.4,235.3L197.3,232.2L199.3,232.1L199.3,227.8L193.4,226.9L189.0,221.4L185.3,222.5L186.3,225.8L184.4,227.5L186.6,231.1L185.9,232.4L186.9,239.5L187.0,239.9Z " data-iso="BGD" data-name="Bangladesh" data-pop="156050883.0"/><path d="M46.1,32.4L46.0,32.4L40.8,36.3L40.4,35.7L38.3,37.1L38.2,36.9L37.8,37.7L36.7,40.5L36.2,40.6L35.2,41.3L35.2,41.3L35.3,41.7L38.2,48.4L39.7,50.1L41.1,49.2L41.2,49.6L41.3,49.5L43.7,51.9L44.6,53.3L44.8,53.0L45.6,50.4L46.9,50.3L51.0,50.0L51.9,49.3L50.9,43.6L50.2,42.9L46.0,32.7L46.1,32.4Z " data-iso="BGR" data-name="Bulgaria" data-pop="7204687.0"/><path d="M34.9,25.2L34.9,25.2L36.5,24.1L36.9,24.4L39.5,24.6L39.5,24.7L39.8,24.7L43.3,22.0L44.8,20.8L44.7,20.7L44.7,20.5L43.1,12.2L41.5,11.8L35.5,22.7L34.9,24.8L34.9,25.2Z " data-iso="BIH" data-name="Bosnia and Herz." data-pop="4613414.0"/><path d="M99.5,13.6L97.3,12.8L97.2,12.2L96.2,11.7L96.1,11.7L95.9,11.8L94.2,12.9L91.9,12.0L89.5,12.8L86.1,9.4L86.1,9.2L84.8,10.3L81.2,13.1L78.9,12.6L76.6,15.0L76.2,15.4L76.3,15.4L80.8,22.9L83.2,30.3L87.4,31.6L87.6,32.0L87.7,32.0L91.7,29.9L98.7,21.5L100.1,20.7L99.0,17.5L99.3,14.1L99.5,13.7L99.5,13.6Z " data-iso="BLR" data-name="Belarus" data-pop="9648533.0"/><path d="M200.1,216.3L198.7,214.9L194.5,213.3L189.6,216.2L189.3,216.8L189.2,216.9L191.7,219.9L201.3,220.5L200.0,216.6L200.1,216.5L200.1,216.3Z " data-iso="BTN" data-name="Bhutan" data-pop="691141.0"/><path d="M276.7,252.7L269.6,254.1L267.7,259.5L271.2,260.7L274.9,258.4L276.7,252.7Z M284.4,120.9L284.2,121.6L283.6,130.5L288.8,128.4L295.9,133.0L292.8,133.2L288.8,134.6L284.3,140.2L280.8,141.1L278.2,144.1L275.1,143.6L273.1,148.1L269.0,153.6L266.0,155.1L257.4,156.2L252.7,158.6L241.0,155.4L233.8,154.6L226.6,153.2L220.4,146.1L218.0,144.1L212.0,141.6L207.7,138.8L209.2,136.4L209.0,132.4L208.0,129.1L202.4,124.3L202.5,121.8L202.5,121.6L202.3,121.6L201.6,121.6L201.5,121.7L201.3,121.7L201.0,121.7L200.8,121.5L195.4,124.4L194.5,128.5L191.5,129.7L186.5,127.9L183.1,132.9L182.9,135.4L180.8,133.8L175.6,133.9L175.4,141.8L172.6,145.9L172.5,146.0L172.5,146.3L162.0,148.2L160.5,147.9L158.1,150.1L153.8,147.9L148.7,151.0L148.4,150.9L148.4,151.1L147.7,154.7L150.7,156.7L149.3,161.7L149.2,161.7L149.1,161.7L148.2,161.3L147.5,161.4L147.8,162.2L147.8,162.2L148.0,162.2L151.6,165.5L151.8,169.3L153.2,170.3L153.3,170.5L153.6,170.8L154.9,171.7L155.4,172.0L156.3,172.2L156.6,172.3L156.6,172.3L156.6,172.3L159.1,178.6L157.8,181.2L158.4,183.3L158.4,183.3L158.5,183.6L158.3,184.3L158.4,184.6L158.1,186.3L158.0,186.5L158.0,186.5L157.6,193.5L158.4,193.7L162.0,198.0L162.0,198.3L162.1,198.6L165.9,198.6L170.6,204.8L176.7,210.2L183.5,213.6L186.3,213.8L186.6,213.9L186.6,213.8L188.6,213.3L189.4,213.8L189.1,216.6L189.3,216.8L189.6,216.2L194.5,213.3L198.7,214.9L200.1,216.3L200.1,216.5L200.4,216.5L204.2,215.6L206.7,213.5L212.4,211.2L217.7,211.1L218.7,212.2L218.8,215.7L222.1,216.7L222.2,216.8L222.3,216.7L227.2,220.0L227.3,224.3L222.0,233.1L222.3,235.7L227.2,235.1L231.2,245.5L236.2,246.4L236.1,246.5L236.4,246.7L238.8,248.1L238.8,242.6L240.1,243.0L240.3,243.1L240.5,243.0L247.6,242.5L251.3,240.1L259.3,241.4L259.2,244.8L264.3,246.7L264.7,246.7L266.4,245.0L267.6,246.1L271.0,245.7L273.4,251.7L275.0,250.5L273.5,249.1L276.9,246.1L280.6,244.4L283.2,244.5L286.7,242.4L286.8,242.4L286.8,242.3L286.8,242.1L286.9,242.1L287.0,242.2L285.9,239.3L286.4,239.1L288.5,240.7L288.8,240.8L289.2,240.6L289.3,240.5L289.8,240.6L290.1,240.3L294.3,239.3L301.6,234.1L304.4,231.4L303.4,230.5L306.6,229.4L307.3,227.0L309.9,225.6L308.2,223.2L309.0,219.5L311.9,217.4L313.1,213.7L315.8,211.6L314.9,207.6L316.4,207.7L316.5,204.4L313.8,203.3L315.0,200.1L313.9,198.5L310.0,196.2L314.2,196.2L310.0,193.2L309.8,191.6L305.5,186.0L302.4,184.7L306.8,178.1L307.6,176.0L312.5,173.5L312.6,171.4L306.9,171.1L304.5,172.0L302.9,174.3L300.0,174.0L299.5,170.9L296.3,170.8L294.9,166.8L299.5,164.9L299.8,163.3L303.0,160.6L304.8,157.2L308.5,158.9L306.3,163.8L308.6,165.1L311.9,161.3L315.8,158.9L315.9,159.0L323.1,150.1L326.5,150.0L325.5,147.9L328.7,145.5L329.8,142.6L332.2,142.8L332.4,142.9L332.5,142.7L333.5,140.6L331.7,131.7L336.3,129.5L336.7,124.1L336.0,116.1L334.3,114.9L330.6,119.2L326.6,120.7L321.2,115.4L315.3,115.2L309.4,107.0L305.2,102.3L296.3,102.5L292.5,104.7L293.5,109.8L292.2,111.7L291.4,118.7L288.0,121.7L285.0,121.2L284.4,120.9Z " data-iso="CHN" data-name="China" data-pop="1338612968.0"/><path d="M32.0,91.9L31.7,89.9L30.8,88.4L29.7,88.7L29.6,88.5L31.0,90.5L31.1,91.7L31.9,92.4L32.0,91.9Z " data-iso="CYN" data-name="N. Cyprus" data-pop="265100.0"/><path d="M29.6,88.3L27.8,89.6L28.0,90.3L31.9,92.5L31.9,92.4L31.1,91.7L31.0,90.5L29.6,88.5L29.6,88.3Z " data-iso="CYP" data-name="Cyprus" data-pop="531640.0"/><path d="M65.9,0.0L66.1,0.0L66.6,0.2L65.9,0.0Z M58.5,6.0L58.9,5.9L60.5,7.5L61.3,7.8L63.7,8.6L63.8,8.7L63.9,8.6L65.2,7.0L66.3,1.9L65.8,0.0L58.9,0.4L58.9,2.4L58.6,5.9L58.5,6.0Z " data-iso="CZE" data-name="Czech Rep." data-pop="10211904.0"/><path d="M0.1,210.4L0.0,210.3L0.0,211.1L0.3,210.9L0.1,210.4Z M1.9,205.4L0.3,205.7L0.0,205.8L0.0,209.0L1.2,209.0L2.0,208.4L1.9,205.7L1.9,205.4Z " data-iso="DJI" data-name="Djibouti" data-pop="516055.0"/><path d="M4.0,7.6L3.6,2.1L2.6,0.0L0.0,0.0L0.0,10.5L2.2,9.3L4.3,9.0L4.0,7.6Z " data-iso="DZA" data-name="Algeria" data-pop="34178188.0"/><path d="M2.5,149.8L1.7,142.8L4.4,139.1L4.3,135.3L7.1,123.4L9.6,117.4L10.4,111.9L13.0,106.8L10.8,114.0L10.5,117.5L17.0,115.3L17.2,115.3L18.7,111.9L19.2,110.6L20.3,108.0L20.7,107.0L20.9,106.6L21.0,106.5L20.9,106.5L16.7,102.6L15.1,96.7L8.6,93.6L6.8,86.2L3.7,79.5L3.9,78.8L2.3,79.0L1.1,80.7L0.0,81.9L0.0,147.3L0.7,148.0L1.6,149.0L2.4,149.9L2.5,149.8Z " data-iso="EGY" data-name="Egypt" data-pop="83082869.0"/><path d="M2.0,204.9L1.1,203.9L0.6,199.4L0.0,197.6L0.0,205.8L0.3,205.7L1.9,205.4L2.0,204.9Z " data-iso="ERI" data-name="Eritrea" data-pop="5647168.0"/><path d="M103.4,1.9L104.8,3.0L104.5,4.8L104.4,8.6L104.5,8.6L104.6,8.6L105.8,8.4L109.5,5.9L113.2,5.2L113.1,5.2L111.1,0.0L105.6,0.8L103.6,1.8L103.4,1.9Z " data-iso="EST" data-name="Estonia" data-pop="1299371.0"/><path d="M11.5,237.9L10.2,237.0L5.8,232.7L4.4,231.0L0.0,225.3L0.0,242.2L3.8,240.6L10.3,238.3L11.5,237.9Z " data-iso="ETH" data-name="Ethiopia" data-pop="85237338.0"/><path d="M117.4,2.4L127.5,3.6L131.4,1.9L132.0,0.0L116.9,0.0L115.9,0.4L117.4,2.3L117.4,2.4Z " data-iso="FIN" data-name="Finland" data-pop="5250275.0"/><path d="M21.2,107.0L21.4,106.7L22.4,106.3L21.9,106.4L21.0,106.5L20.9,106.6L20.7,107.0L21.2,107.0Z " data-iso="PSE" data-name="Palestine" data-pop="1604238.0"/><path d="M79.5,97.0L79.6,93.5L73.0,81.9L72.1,78.8L70.4,77.7L70.5,78.5L70.8,82.3L71.2,83.3L68.6,87.6L67.6,87.8L68.0,88.8L70.6,93.5L70.5,93.6L70.7,93.6L72.6,94.9L74.4,96.3L74.5,96.3L75.4,96.2L77.5,100.2L78.3,99.8L79.3,97.1L79.5,97.1L79.5,97.0Z " data-iso="GEO" data-name="Georgia" data-pop="4615807.0"/><path d="M41.2,49.6L41.1,49.2L39.7,50.1L38.2,48.4L35.3,41.7L35.2,41.3L35.1,41.2L32.3,39.2L31.1,37.6L30.9,37.2L30.6,37.4L27.7,38.4L26.7,37.9L25.4,37.7L25.2,38.2L21.9,46.1L23.5,51.8L22.5,51.5L22.6,47.6L19.7,46.8L16.8,54.6L19.2,54.7L22.9,52.3L23.4,54.1L25.5,47.7L26.2,48.5L31.6,43.0L31.0,46.2L32.9,48.5L34.0,45.5L37.2,51.6L37.1,51.8L38.6,51.9L39.4,51.1L41.2,49.9L41.2,49.6Z " data-iso="GRC" data-name="Greece" data-pop="10737428.0"/><path d="M289.8,240.6L289.3,240.5L289.2,240.6L288.8,240.8L288.8,240.9L288.4,241.2L289.9,240.6L289.8,240.6Z " data-iso="HKG" data-name="Hong Kong" data-pop="7055071.0"/><path d="M34.5,25.7L34.6,25.5L34.7,25.3L34.9,25.2L34.9,24.8L35.5,22.7L35.4,22.3L35.6,20.4L34.7,24.9L34.5,25.7Z M49.4,9.8L49.4,9.5L44.0,8.8L43.2,3.9L43.0,3.8L42.9,7.2L37.0,16.7L35.6,21.5L41.5,11.8L43.1,12.2L44.7,20.5L44.7,20.7L44.9,20.5L46.6,20.3L46.9,19.3L48.9,17.7L49.0,17.7L49.0,17.6L47.5,15.5L47.4,15.0L49.3,9.9L49.4,9.8Z " data-iso="HRV" data-name="Croatia" data-pop="4489409.0"/><path d="M62.0,19.7L61.3,15.6L57.7,12.4L56.5,12.5L56.2,7.9L56.1,7.9L55.9,7.8L53.8,7.7L52.9,7.5L51.1,7.9L50.6,7.8L50.7,8.3L50.1,8.7L49.4,9.7L49.4,9.8L49.3,9.9L47.4,15.0L47.5,15.5L49.0,17.6L49.0,17.7L49.0,17.7L49.4,18.2L50.1,18.7L51.0,20.7L50.9,20.8L51.1,20.8L52.3,22.6L58.3,21.7L60.9,22.8L61.0,22.8L61.0,22.7L61.7,21.2L61.7,20.7L62.2,20.0L62.1,19.7L62.0,19.7Z " data-iso="HUN" data-name="Hungary" data-pop="9905596.0"/><path d="M155.6,188.6L155.4,188.3L155.5,191.6L155.4,191.3L157.0,192.7L157.6,193.5L158.4,193.7L158.8,194.1L158.8,194.1L162.0,198.0L162.0,198.3L161.9,198.2L159.4,199.6L157.2,203.0L158.3,204.4L168.0,212.4L172.9,213.8L180.5,219.2L186.0,218.0L186.8,214.1L186.6,213.9L186.6,213.8L188.6,213.3L189.4,213.8L189.1,216.6L189.3,216.8L189.2,216.9L191.7,219.9L201.3,220.5L200.0,216.6L200.1,216.5L200.4,216.5L204.2,215.6L206.7,213.5L212.4,211.2L217.7,211.1L218.7,212.2L218.8,215.7L222.1,216.7L222.2,216.8L222.1,217.1L220.4,219.2L213.1,223.1L210.4,228.9L210.9,229.7L207.7,234.4L205.5,233.7L203.5,241.3L201.4,241.9L201.2,242.0L201.1,241.7L200.6,234.5L196.4,235.3L197.3,232.2L199.3,232.1L199.3,227.8L193.4,226.9L189.0,221.4L185.3,222.5L186.3,225.8L184.4,227.5L186.6,231.1L185.9,232.4L186.9,239.5L186.8,240.2L182.9,240.9L183.5,238.8L177.6,241.7L174.4,246.4L171.1,246.4L164.5,252.2L156.5,255.8L155.2,258.2L152.1,258.0L147.5,259.5L145.6,269.8L141.5,282.2L139.6,281.9L131.4,289.1L128.0,287.3L126.0,282.1L124.2,271.5L122.4,267.1L121.7,258.6L120.5,252.5L119.4,250.4L119.9,233.2L121.8,229.2L122.4,225.7L120.9,222.3L120.2,225.3L113.4,226.6L109.1,219.1L109.4,217.2L113.5,218.0L115.3,216.3L112.1,216.5L107.6,210.2L107.7,209.6L110.6,208.7L117.2,210.7L119.4,210.2L119.1,207.7L116.4,199.0L122.0,195.8L125.2,197.4L127.0,196.6L136.7,190.4L140.0,187.3L143.2,182.1L140.8,177.6L143.9,171.5L148.3,174.2L153.5,173.3L153.6,173.1L154.1,173.0L155.7,172.5L156.2,172.4L156.6,172.3L156.6,172.3L159.1,178.6L157.8,181.2L158.4,183.3L158.5,183.6L158.3,184.3L158.4,184.6L158.1,186.3L158.0,186.5L155.6,188.6Z " data-iso="IND" data-name="India" data-pop="1166079217.0"/><path d="M69.4,101.9L69.3,101.8L66.9,101.2L62.3,111.1L62.3,111.2L62.3,111.2L60.8,116.9L62.2,119.3L60.3,121.9L55.5,125.0L56.5,138.7L54.2,141.5L54.2,147.6L54.3,147.6L59.1,150.0L58.4,162.3L62.8,171.8L66.3,174.9L69.5,174.7L73.1,180.1L73.1,181.1L86.0,193.2L86.2,193.2L88.6,189.6L92.7,189.3L95.0,187.3L94.8,183.5L92.8,179.8L92.0,173.6L91.7,172.5L91.8,172.4L93.0,171.8L97.1,167.6L94.8,164.9L98.5,154.4L101.8,152.3L103.8,149.7L103.8,149.4L103.8,149.2L105.4,145.0L103.1,143.7L101.9,138.8L99.3,136.0L97.6,132.7L86.4,129.4L86.2,130.1L83.8,130.2L80.0,128.9L76.4,123.1L75.8,115.3L75.9,115.1L74.8,111.7L77.1,110.3L77.1,108.5L71.5,108.5L71.3,108.3L70.9,107.9L70.4,107.8L70.3,107.6L69.9,107.1L69.2,105.8L69.4,102.0L69.4,101.9Z " data-iso="IRN" data-name="Iran" data-pop="66429284.0"/><path d="M62.3,111.0L60.3,108.8L58.1,105.8L56.8,106.0L56.5,105.8L56.4,105.9L52.6,105.8L48.6,109.9L38.5,111.2L37.4,111.0L37.0,112.0L35.6,115.0L35.5,116.5L34.8,116.6L35.2,117.3L37.3,120.4L39.6,130.6L45.8,146.1L46.4,146.4L47.3,146.1L50.3,144.2L51.5,144.7L52.6,146.2L52.7,146.1L53.6,147.2L53.9,147.5L54.2,147.6L54.2,141.5L56.5,138.7L55.5,125.0L60.3,121.9L62.2,119.3L60.8,116.9L62.3,111.2L62.3,111.2L62.3,111.0Z " data-iso="IRQ" data-name="Iraq" data-pop="28945657.0"/><path d="M28.9,105.4L29.9,104.5L30.2,104.4L30.7,103.4L31.0,103.2L30.8,103.2L29.2,103.4L28.9,103.3L28.2,102.5L27.8,102.8L24.9,104.9L23.7,105.7L22.4,106.2L22.4,106.3L21.4,106.7L21.2,107.0L20.7,107.0L20.3,108.0L19.2,110.6L18.7,111.9L17.2,115.3L17.6,115.2L19.8,113.2L20.9,112.1L23.8,109.8L24.3,109.3L24.2,109.2L23.9,107.5L27.0,106.0L27.2,106.2L27.9,105.4L28.2,105.3L28.6,105.4L28.7,105.6L28.9,105.4Z " data-iso="ISR" data-name="Israel" data-pop="7233701.0"/><path d="M14.8,28.4L12.2,23.0L12.3,20.7L10.0,20.2L8.2,29.0L8.3,30.9L11.1,29.3L14.8,28.4Z M18.8,0.0L14.1,2.7L12.7,5.1L14.9,6.5L18.8,4.3L22.5,1.0L18.8,0.0Z M43.6,4.1L45.2,2.9L46.5,1.6L47.3,2.0L47.5,2.0L47.6,1.3L47.5,0.9L47.5,0.4L47.5,0.0L31.9,0.0L30.6,0.8L25.0,12.7L22.0,23.9L18.3,28.4L13.9,29.7L14.2,30.7L19.0,30.7L20.9,29.9L23.5,26.5L25.3,26.6L24.0,32.4L25.2,32.1L27.1,27.0L30.2,14.6L31.0,12.9L37.8,2.7L42.1,0.4L43.8,4.2L43.6,4.1Z " data-iso="ITA" data-name="Italy" data-pop="58126212.0"/><path d="M35.5,116.5L35.6,115.0L37.0,112.0L37.4,111.0L36.4,110.8L29.8,109.8L29.2,108.8L28.9,105.9L28.7,105.6L28.6,105.4L28.2,105.3L27.9,105.4L27.2,106.2L26.8,106.8L25.9,107.6L25.3,108.5L24.5,109.0L24.3,109.3L23.8,109.8L20.9,112.1L19.8,113.2L17.6,115.2L17.4,115.5L17.0,115.9L19.2,119.5L22.7,118.9L24.8,120.3L27.4,119.7L27.8,113.3L34.1,116.7L34.8,116.6L35.5,116.5Z " data-iso="JOR" data-name="Jordan" data-pop="6342948.0"/><path d="M345.6,180.4L341.3,182.9L342.1,185.9L342.8,183.9L344.9,185.1L344.5,190.8L346.9,191.3L348.8,188.3L347.2,181.4L345.6,180.4Z M355.6,174.1L354.1,174.2L350.1,179.8L351.7,182.4L353.1,179.1L356.3,178.1L356.6,173.9L355.6,174.1Z M366.0,135.6L363.8,137.3L364.5,143.7L365.1,143.5L365.9,152.2L361.8,159.8L359.2,166.1L349.9,169.9L345.0,176.9L344.3,179.0L348.6,178.3L348.5,176.6L358.7,171.3L360.3,175.8L361.2,175.7L362.8,167.7L367.9,167.9L368.4,165.3L371.8,163.6L373.0,164.3L374.2,159.2L373.4,158.5L370.9,149.3L371.4,147.9L371.2,141.3L366.0,135.6Z M368.0,120.8L359.6,118.5L362.8,127.1L360.1,128.7L359.9,132.4L362.8,136.8L364.9,134.2L361.6,132.1L365.6,129.8L370.6,130.0L370.6,126.5L374.6,122.1L368.0,120.8Z " data-iso="JPN" data-name="Japan" data-pop="127078679.0"/><path d="M156.3,172.2L155.4,172.0L154.9,171.7L153.6,170.8L153.3,170.5L153.4,170.9L153.4,171.6L153.5,172.7L153.6,173.1L154.1,173.0L155.7,172.5L156.2,172.4L156.6,172.3L156.3,172.2Z " data-iso="KAS" data-name="" data-pop="6000.0"/><path d="M98.5,86.0L105.0,87.2L108.2,90.6L106.7,93.8L104.2,95.5L104.6,97.2L100.5,93.9L98.6,94.6L98.6,97.2L95.2,95.5L94.3,101.9L96.4,105.6L93.8,109.0L93.6,109.4L99.2,110.6L99.9,116.8L101.2,117.4L101.3,117.5L101.9,116.6L110.3,103.2L117.7,105.1L121.4,114.4L122.3,118.9L130.1,122.0L130.1,130.6L131.0,131.1L130.8,135.2L135.3,138.9L137.8,137.3L144.5,136.1L144.8,136.0L144.7,135.8L146.5,134.4L152.9,137.0L153.6,135.9L157.9,137.9L169.7,142.5L172.2,145.4L172.5,146.0L172.6,145.9L175.4,141.8L175.6,133.9L180.8,133.8L182.9,135.4L183.1,132.9L186.5,127.9L191.5,129.7L194.5,128.5L195.4,124.4L200.8,121.5L201.0,121.7L201.0,121.4L199.9,118.3L198.3,119.2L195.8,117.9L191.3,111.2L187.0,110.4L185.5,107.8L184.5,109.1L181.3,97.0L179.3,93.4L173.2,93.3L171.1,92.5L171.8,90.4L167.0,87.2L168.2,84.1L166.1,81.4L162.4,80.4L160.7,80.9L150.9,79.0L144.8,76.5L143.0,79.0L144.2,81.0L141.8,80.2L138.1,85.9L137.4,88.8L131.9,86.5L131.2,83.8L128.2,81.8L124.1,81.5L120.1,71.9L117.8,70.4L109.6,70.0L107.5,72.3L106.9,68.5L99.6,73.3L98.4,77.2L100.1,79.3L98.4,86.2L98.5,86.0Z " data-iso="KAZ" data-name="Kazakhstan" data-pop="15399437.0"/><path d="M172.2,145.4L169.7,142.5L157.9,137.9L153.6,135.9L152.9,137.0L146.5,134.4L144.7,135.8L144.8,136.0L144.9,136.0L143.8,137.2L144.0,141.0L149.0,144.5L143.9,145.6L141.6,144.4L141.5,144.4L141.4,144.5L136.0,143.4L135.3,145.3L142.1,147.8L143.7,150.3L148.3,150.8L148.4,150.9L148.7,151.0L153.8,147.9L158.1,150.1L160.5,147.9L162.0,148.2L172.5,146.3L172.5,146.0L172.2,145.4Z M141.7,146.2L141.3,145.6L141.2,145.0L141.7,146.2Z M140.0,145.8L139.5,145.6L139.4,145.4L140.0,145.8Z " data-iso="KGZ" data-name="Kyrgyzstan" data-pop="5431747.0"/><path d="M263.1,276.1L262.9,276.3L259.9,277.7L256.8,279.6L253.0,277.9L253.0,277.8L252.9,277.8L245.9,277.5L243.1,278.6L240.5,281.1L243.1,289.0L243.1,288.9L244.0,292.4L246.3,291.8L246.3,294.1L248.9,294.0L249.7,294.5L255.6,292.1L256.4,289.1L258.1,289.1L262.7,286.5L263.2,276.3L263.1,276.1Z " data-iso="KHM" data-name="Cambodia" data-pop="14494293.0"/><path d="M325.6,166.9L326.6,168.7L325.5,170.5L327.9,175.3L327.3,178.0L329.3,180.7L337.1,175.6L336.4,170.2L331.7,163.3L330.4,161.6L326.3,164.4L325.6,166.7L325.6,166.9Z " data-iso="KOR" data-name="S. Korea" data-pop="48508972.0"/><path d="M37.1,34.7L39.7,31.1L39.7,29.6L38.2,30.1L37.9,29.9L37.7,29.6L37.3,29.2L37.2,29.2L36.5,29.8L36.5,29.8L36.5,30.0L35.9,31.3L35.5,32.2L34.6,33.1L34.4,33.1L34.4,33.2L35.4,33.2L37.0,34.9L37.0,34.9L37.1,34.7Z " data-iso="KOS" data-name="Kosovo" data-pop="1804838.0"/><path d="M52.6,146.2L51.5,144.7L50.3,144.2L47.3,146.1L46.4,146.4L46.9,147.0L48.3,150.7L48.4,151.3L50.6,153.0L50.7,152.5L51.7,147.6L52.1,148.2L52.5,146.3L52.6,146.2Z " data-iso="KWT" data-name="Kuwait" data-pop="2691158.0"/><path d="M240.5,243.5L243.6,246.2L243.3,248.3L249.4,250.0L249.5,251.6L251.8,253.4L247.6,256.7L252.6,259.2L252.8,260.7L262.4,270.4L261.5,271.4L263.1,275.6L263.1,276.1L262.9,276.3L259.9,277.7L256.8,279.6L253.0,277.9L253.0,277.8L253.2,277.7L254.5,274.8L253.9,270.8L251.1,266.1L251.3,265.1L247.7,260.7L245.2,260.3L244.0,261.5L244.0,261.5L244.0,261.5L244.0,261.5L239.6,261.3L235.6,264.1L236.5,257.7L235.2,254.9L232.9,254.7L231.7,252.0L231.8,251.7L231.8,251.5L233.6,249.4L233.5,249.2L235.9,246.9L236.1,246.5L236.4,246.7L238.8,248.1L238.8,242.6L240.1,243.0L240.3,243.1L240.5,243.5Z " data-iso="LAO" data-name="Laos" data-pop="6834942.0"/><path d="M31.2,103.2L34.9,102.2L35.6,99.8L34.8,99.1L34.5,99.4L32.9,99.7L32.2,100.4L28.6,102.3L28.2,102.5L28.9,103.3L29.2,103.4L30.8,103.2L31.0,103.2L31.2,103.2Z " data-iso="LBN" data-name="Lebanon" data-pop="4017095.0"/><path d="M4.1,78.5L4.5,77.7L3.2,69.9L3.7,69.2L0.0,61.6L0.0,81.9L1.1,80.7L2.3,79.0L3.9,78.8L4.1,78.5Z " data-iso="LBY" data-name="Libya" data-pop="6310434.0"/><path d="M141.9,284.6L141.0,289.3L139.8,291.8L139.7,297.1L141.0,301.0L147.6,300.3L148.7,297.1L145.8,289.3L141.9,284.6Z " data-iso="LKA" data-name="Sri Lanka" data-pop="21324791.0"/><path d="M89.8,0.4L89.8,0.6L90.2,0.6L90.8,0.4L90.4,0.4L89.8,0.4Z M90.0,1.2L89.4,5.7L88.4,5.9L87.5,6.4L87.3,6.6L87.5,6.7L87.0,8.6L86.2,9.1L86.1,9.2L86.1,9.4L89.5,12.8L91.9,12.0L94.2,12.9L95.9,11.8L96.1,11.7L96.1,11.5L97.1,8.7L96.1,2.9L94.9,0.0L91.8,0.0L90.3,1.0L90.0,1.2L90.0,1.2Z " data-iso="LTU" data-name="Lithuania" data-pop="3555179.0"/><path d="M96.1,11.7L96.2,11.7L97.2,12.2L97.3,12.8L99.5,13.6L99.5,13.7L99.7,13.6L102.5,10.7L103.4,10.4L104.6,8.9L104.5,8.6L104.4,8.6L104.5,4.8L104.8,3.0L103.4,1.9L103.0,2.0L99.4,3.0L99.0,2.5L100.5,0.0L94.9,0.0L96.1,2.9L97.1,8.7L96.1,11.5L96.1,11.7Z " data-iso="LVA" data-name="Latvia" data-pop="2231503.0"/><path d="M286.8,242.3L286.8,242.3L287.0,242.2L287.0,242.2L286.9,242.1L286.8,242.1L286.8,242.3L286.8,242.4L286.8,242.3Z " data-iso="MAC" data-name="Macau" data-pop="559846.0"/><path d="M57.9,43.2L65.0,43.4L68.4,38.0L68.5,33.6L66.6,31.2L66.4,31.2L66.5,31.4L63.3,38.4L62.7,39.1L57.9,42.9L57.7,43.2L57.9,43.2Z " data-iso="MDA" data-name="Moldova" data-pop="4320748.0"/><path d="M38.2,36.8L37.3,35.3L37.1,35.1L37.0,34.9L37.0,34.9L35.4,33.2L34.4,33.2L34.4,33.1L34.4,33.1L32.9,33.8L31.0,37.1L30.9,37.2L31.1,37.6L32.3,39.2L35.1,41.2L35.2,41.3L35.2,41.3L36.2,40.6L36.7,40.5L37.8,37.7L38.2,36.9L38.2,36.8Z " data-iso="MKD" data-name="Macedonia" data-pop="2066718.0"/><path d="M222.2,216.8L222.1,217.1L220.4,219.2L213.1,223.1L210.4,228.9L210.9,229.7L207.7,234.4L205.5,233.7L203.5,241.3L201.4,241.9L201.2,242.0L201.2,242.2L201.0,245.1L199.6,247.0L199.8,247.4L202.5,249.2L207.9,261.9L205.9,268.0L208.1,266.5L207.8,269.1L213.6,268.1L218.8,265.0L221.0,272.2L221.1,274.7L223.5,280.7L224.4,284.8L224.0,294.8L224.2,294.8L224.6,292.6L228.4,288.2L226.8,284.1L226.1,278.9L224.2,277.0L222.8,273.3L224.4,272.5L225.1,268.7L220.0,258.9L223.3,253.7L226.7,253.8L227.1,252.7L231.3,251.5L231.8,251.7L231.8,251.5L233.6,249.4L233.5,249.2L235.9,246.9L236.1,246.5L236.2,246.4L231.2,245.5L227.2,235.1L222.3,235.7L222.0,233.1L227.3,224.3L227.2,220.0L222.3,216.7L222.2,216.8Z " data-iso="MMR" data-name="Myanmar" data-pop="48137741.0"/><path d="M39.5,24.6L36.9,24.4L36.5,24.1L34.9,25.2L34.9,25.2L34.7,25.3L34.6,25.5L34.5,25.7L34.5,25.8L34.3,26.2L34.1,27.3L33.2,29.0L33.1,29.6L36.4,28.4L36.4,28.8L36.5,29.8L36.5,29.8L36.5,29.8L37.2,29.2L37.3,29.2L37.7,29.6L37.9,29.9L38.0,29.8L38.4,27.5L38.5,27.0L39.5,24.7L39.5,24.7L39.5,24.6Z " data-iso="MNE" data-name="Montenegro" data-pop="672180.0"/><path d="M284.2,120.7L276.9,120.2L271.6,124.2L266.7,125.5L261.8,125.3L254.8,121.2L252.1,120.6L247.6,122.0L243.9,119.4L239.0,114.8L235.0,113.0L231.6,117.3L232.0,121.6L230.6,122.1L222.2,120.9L218.1,117.6L209.7,118.7L208.2,120.0L202.5,121.6L202.5,121.6L202.5,121.8L202.4,124.3L208.0,129.1L209.0,132.4L209.2,136.4L207.7,138.8L212.0,141.6L218.0,144.1L220.4,146.1L226.6,153.2L233.8,154.6L241.0,155.4L252.7,158.6L257.4,156.2L266.0,155.1L269.0,153.6L273.1,148.1L275.1,143.6L278.2,144.1L280.8,141.1L284.3,140.2L288.8,134.6L292.8,133.2L295.9,133.0L288.8,128.4L283.6,130.5L284.2,121.6L284.4,120.9L284.2,120.7Z " data-iso="MNG" data-name="Mongolia" data-pop="3041142.0"/><path d="M186.3,213.8L183.5,213.6L176.7,210.2L170.6,204.8L165.9,198.6L162.1,198.6L162.0,198.3L161.9,198.2L159.4,199.6L157.2,203.0L158.3,204.4L168.0,212.4L172.9,213.8L180.5,219.2L186.0,218.0L186.8,214.1L186.6,213.9L186.3,213.8Z " data-iso="NPL" data-name="Nepal" data-pop="28563377.0"/><path d="M60.2,191.5L60.2,192.1L54.8,202.4L54.4,202.4L43.3,200.3L42.8,200.2L42.8,200.7L42.5,209.0L42.7,209.3L42.7,212.5L43.6,212.7L47.9,213.7L49.2,214.8L53.6,212.6L56.5,213.8L58.4,211.8L63.2,212.3L65.7,206.9L67.7,207.7L75.8,201.4L74.7,200.0L73.3,194.3L69.2,190.5L68.1,185.7L68.2,184.5L66.1,183.7L63.3,186.9L60.4,190.9L60.2,191.5Z M69.2,179.3L68.7,181.0L68.8,181.3L69.2,181.5L69.3,181.3L70.4,179.8L69.8,178.9L69.2,179.3Z " data-iso="OMN" data-name="Oman" data-pop="3418085.0"/><path d="M153.2,170.3L151.8,169.3L151.6,165.5L148.0,162.2L147.8,162.2L147.4,162.3L139.7,160.7L135.9,162.9L136.0,165.3L129.9,170.1L128.6,172.4L126.2,172.7L123.0,177.0L115.8,177.4L114.5,176.5L111.5,177.5L109.3,181.3L101.6,179.9L92.7,173.6L91.7,172.5L92.0,173.6L92.8,179.8L94.8,183.5L95.0,187.3L92.7,189.3L88.6,189.6L86.2,193.2L86.2,193.3L96.6,198.1L103.5,199.4L103.8,203.1L105.0,207.0L107.6,209.9L107.7,209.6L110.6,208.7L117.2,210.7L119.4,210.2L119.1,207.7L116.4,199.0L122.0,195.8L125.2,197.4L127.0,196.6L136.7,190.4L140.0,187.3L143.2,182.1L140.8,177.6L143.9,171.5L148.3,174.2L153.5,173.3L153.6,173.1L153.5,172.7L153.4,171.6L153.4,170.9L153.3,170.5L153.2,170.3Z " data-iso="PAK" data-name="Pakistan" data-pop="176242949.0"/><path d="M345.1,304.7L343.9,301.2L345.3,298.2L347.7,300.3L348.8,298.1L346.3,292.5L346.9,290.8L344.7,288.8L342.6,288.6L343.3,291.3L340.6,292.0L337.8,295.9L336.0,294.7L333.2,295.3L328.4,301.8L329.2,302.9L331.2,298.9L335.1,298.1L337.7,298.6L338.2,303.5L340.7,304.7L345.1,304.7Z M332.9,293.0L333.8,286.3L331.5,285.4L331.3,288.9L329.5,290.9L332.9,293.0Z M333.8,291.2L336.1,286.7L335.6,283.4L333.6,289.0L333.8,291.2Z M307.4,299.5L314.2,292.0L315.5,289.3L307.5,298.3L307.4,299.5Z M329.0,282.7L327.1,282.5L327.2,285.7L330.6,285.8L331.7,284.0L329.0,282.7Z M340.4,276.6L337.5,277.2L337.2,278.9L342.0,280.5L340.4,276.6Z M320.4,276.0L318.9,276.6L322.8,281.0L324.4,279.0L324.2,277.1L320.4,276.0Z M319.6,253.7L318.0,254.3L317.0,258.4L317.8,264.5L315.4,264.4L317.2,270.6L321.0,271.2L319.8,273.9L328.7,275.9L328.3,272.8L331.7,275.8L335.4,275.3L329.6,271.4L325.4,272.9L322.8,266.8L326.3,259.1L324.3,253.4L319.6,253.7Z " data-iso="PHL" data-name="Philippines" data-pop="97976603.0"/><path d="M63.8,8.7L63.8,9.0L64.5,12.8L65.7,16.7L65.2,18.8L65.2,19.0L65.3,19.1L65.5,19.8L71.7,18.5L72.0,19.1L76.0,15.7L76.2,15.4L76.6,15.0L78.9,12.6L81.2,13.1L84.8,10.3L86.1,9.2L86.2,9.1L87.0,8.6L87.5,6.7L87.3,6.6L87.2,6.6L86.8,5.3L85.5,0.0L66.6,0.2L66.1,0.0L65.9,0.0L65.8,0.0L66.3,1.9L65.2,7.0L63.9,8.6L63.8,8.7Z " data-iso="POL" data-name="Poland" data-pop="38482919.0"/><path d="M315.9,159.0L319.6,160.3L319.6,163.2L321.1,163.7L318.8,166.8L325.5,166.7L325.6,166.7L326.3,164.4L330.4,161.6L330.2,161.4L326.5,160.0L326.5,157.4L332.0,150.5L331.0,147.7L333.0,143.9L333.1,143.8L333.0,143.7L332.5,143.2L332.4,142.9L332.2,142.8L329.8,142.6L328.7,145.5L325.5,147.9L326.5,150.0L323.1,150.1L315.9,159.0L315.9,159.0Z " data-iso="PRK" data-name="N. Korea" data-pop="22665345.0"/><path d="M51.4,175.4L54.0,169.0L50.0,173.4L49.8,173.6L49.7,174.1L50.9,175.3L51.4,175.4Z " data-iso="QAT" data-name="Qatar" data-pop="833285.0"/><path d="M57.9,42.9L62.7,39.1L63.3,38.4L66.5,31.4L66.4,31.2L66.3,31.1L62.3,28.5L62.2,26.2L61.1,22.8L61.0,22.8L60.9,22.8L58.3,21.7L52.3,22.6L51.1,20.8L50.9,20.8L50.8,21.1L48.5,25.4L46.7,28.6L46.1,32.4L46.1,32.4L46.0,32.7L50.2,42.9L50.9,43.6L51.9,49.3L52.1,49.2L56.3,46.9L56.7,46.5L58.8,47.7L59.1,47.5L58.4,45.6L57.4,44.3L57.5,43.8L57.7,43.2L57.9,42.9Z " data-iso="ROU" data-name="Romania" data-pop="22215421.0"/><path d="M343.6,81.2L345.7,90.8L349.2,94.4L359.0,115.4L359.8,111.9L363.1,113.6L362.8,112.1L357.0,107.3L355.6,101.3L358.1,100.0L343.6,81.2Z M87.3,6.6L87.5,6.4L88.4,5.9L89.4,5.7L90.0,1.2L89.3,1.5L88.3,0.4L89.4,0.6L89.8,0.6L89.8,0.4L89.6,0.4L88.9,0.4L88.0,0.0L85.5,0.0L86.8,5.3L87.2,6.6L87.3,6.6Z M191.8,2.5L190.4,1.4L182.4,4.7L183.4,8.4L181.8,8.5L183.0,10.8L185.8,12.7L187.2,7.2L191.8,2.5Z M288.0,2.8L286.0,2.0L286.4,6.5L288.6,7.5L292.9,5.1L293.4,0.8L288.5,1.0L288.0,2.8Z M191.8,0.0L191.0,1.6L193.0,3.5L196.3,2.1L208.0,0.7L191.8,0.0Z M132.0,0.0L131.4,1.9L127.5,3.6L117.4,2.4L117.9,3.0L117.0,5.5L113.5,5.2L113.2,5.2L109.5,5.9L105.8,8.4L104.6,8.6L104.5,8.6L104.6,8.9L103.4,10.4L102.5,10.7L99.7,13.6L99.5,13.7L99.3,14.1L99.0,17.5L100.1,20.7L98.7,21.5L91.7,29.9L87.7,32.0L87.6,32.0L87.6,32.1L91.1,35.5L88.0,40.4L88.7,51.9L89.5,51.9L90.7,57.3L88.2,58.2L86.2,61.2L82.8,60.2L79.2,61.4L80.0,61.7L80.6,63.6L76.6,62.4L76.3,65.3L70.0,64.1L70.5,68.5L70.4,77.3L70.4,77.7L72.1,78.8L73.0,81.9L79.6,93.5L79.5,97.0L79.5,97.1L79.7,97.4L79.8,100.9L80.9,102.5L84.3,101.6L84.2,101.2L85.1,94.9L87.5,88.4L98.3,86.4L98.4,86.2L100.1,79.3L98.4,77.2L99.6,73.3L106.9,68.5L107.5,72.3L109.6,70.0L117.8,70.4L120.1,71.9L124.1,81.5L128.2,81.8L131.2,83.8L131.9,86.5L137.4,88.8L138.1,85.9L141.8,80.2L144.2,81.0L143.0,79.0L144.8,76.5L150.9,79.0L160.7,80.9L162.4,80.4L166.1,81.4L168.2,84.1L167.0,87.2L171.8,90.4L171.1,92.5L173.2,93.3L179.3,93.4L181.3,97.0L184.5,109.1L185.5,107.8L187.0,110.4L191.3,111.2L195.8,117.9L198.3,119.2L199.9,118.3L201.0,121.4L201.0,121.7L201.3,121.7L201.5,121.7L201.6,121.6L202.3,121.6L202.5,121.6L202.5,121.6L208.2,120.0L209.7,118.7L218.1,117.6L222.2,120.9L230.6,122.1L232.0,121.6L231.6,117.3L235.0,113.0L239.0,114.8L243.9,119.4L247.6,122.0L252.1,120.6L254.8,121.2L261.8,125.3L266.7,125.5L271.6,124.2L276.9,120.2L284.2,120.7L284.4,120.9L285.0,121.2L288.0,121.7L291.4,118.7L292.2,111.7L293.5,109.8L292.5,104.7L296.3,102.5L305.2,102.3L309.4,107.0L315.3,115.2L321.2,115.4L326.6,120.7L330.6,119.2L334.3,114.9L336.0,116.1L336.7,124.1L336.3,129.5L331.7,131.7L333.5,140.6L332.5,142.7L332.4,142.9L332.5,143.2L333.0,143.7L333.1,143.8L333.2,143.6L340.1,139.6L344.6,134.1L348.4,119.4L349.2,109.6L349.1,105.6L346.4,99.1L345.3,94.3L345.7,92.6L342.2,88.7L342.8,87.1L337.0,85.0L335.7,89.1L332.7,90.4L329.9,86.8L326.0,87.6L328.4,80.6L329.2,75.4L331.1,70.3L330.9,67.4L333.0,61.4L337.3,58.7L338.6,59.1L342.3,55.6L343.8,55.3L343.8,52.7L346.2,52.2L349.2,53.9L352.3,49.6L350.2,36.7L352.6,33.0L354.3,31.9L355.4,34.1L358.1,36.0L358.5,34.8L358.1,28.3L355.8,25.5L357.7,24.0L359.7,27.1L363.5,47.5L362.9,49.4L363.8,55.3L367.0,60.7L382.0,74.6L381.5,67.0L380.5,65.8L379.0,58.7L379.2,54.6L380.4,52.5L377.4,50.6L376.2,46.8L365.7,34.4L365.2,32.6L368.0,28.5L369.2,29.6L369.4,23.8L371.3,22.4L374.0,22.5L372.6,20.0L370.8,12.4L371.1,9.0L369.8,4.2L371.6,3.1L372.2,0.2L370.6,0.0L333.8,0.0L333.9,1.0L329.8,4.4L329.4,7.2L325.9,7.6L320.1,5.8L316.3,10.1L311.9,10.8L311.3,11.9L308.4,11.1L308.2,9.5L305.0,10.4L302.2,13.1L298.0,12.8L295.7,15.3L297.8,18.0L297.0,20.3L291.5,22.5L288.5,21.2L288.6,26.6L286.2,25.8L282.7,22.6L281.0,17.8L275.6,17.5L274.4,21.1L268.2,21.2L267.9,19.8L261.7,21.1L262.0,24.6L258.5,19.5L256.7,21.8L252.9,22.5L254.8,20.9L260.6,13.7L257.3,8.2L252.3,9.0L253.1,7.5L249.1,4.6L246.9,6.3L244.7,11.1L233.7,11.5L227.6,14.2L228.9,15.8L219.8,16.7L219.2,22.1L220.5,24.7L219.1,30.0L217.3,30.7L217.7,27.6L220.1,25.3L215.1,20.4L210.8,22.4L212.6,25.8L209.3,23.4L211.8,17.0L206.3,21.3L206.1,25.3L204.5,26.5L203.1,30.8L205.7,31.5L207.5,33.7L204.7,37.9L205.9,32.7L202.3,32.8L200.9,36.4L197.9,38.8L192.4,39.4L197.3,35.7L202.8,25.8L204.8,20.5L208.7,16.4L205.6,13.5L200.2,17.7L196.8,19.5L194.7,28.0L192.7,29.9L192.2,26.8L189.5,21.1L187.1,18.6L185.7,18.6L184.5,21.5L180.6,21.7L182.1,19.7L179.2,19.5L175.3,18.0L176.6,15.5L173.9,14.6L164.6,13.0L161.8,14.5L160.6,13.9L161.1,9.9L164.7,10.5L165.7,8.1L163.8,4.9L163.2,6.8L154.8,13.1L155.4,11.5L151.7,9.1L147.0,10.9L143.1,5.8L140.6,10.4L140.1,4.3L145.9,0.0L132.0,0.0Z M148.2,0.0L148.8,4.2L151.8,7.1L156.5,5.8L158.3,1.7L148.2,0.0Z " data-iso="RUS" data-name="Russia" data-pop="140041247.0"/><path d="M34.8,116.6L34.1,116.7L27.8,113.3L27.4,119.7L24.8,120.3L22.7,118.9L19.2,119.5L17.0,115.9L14.8,117.8L13.0,119.9L13.8,121.5L11.4,137.6L10.2,140.8L9.9,153.6L7.0,165.1L8.3,171.2L7.4,180.0L7.9,181.7L7.8,188.8L7.7,189.1L11.9,186.0L22.3,197.2L24.8,197.0L28.5,195.0L32.7,195.5L41.9,199.8L42.8,200.2L43.3,200.3L54.4,202.4L54.8,202.4L60.2,192.1L60.2,191.5L59.8,191.7L52.4,185.5L51.2,177.3L51.1,177.2L50.5,176.5L51.0,176.1L51.0,175.7L50.9,175.3L49.7,174.1L49.8,173.6L49.7,173.1L50.5,166.7L51.5,163.4L50.0,157.7L50.6,153.5L50.6,153.0L48.4,151.3L48.3,150.7L46.9,147.0L46.4,146.4L45.8,146.1L39.6,130.6L37.3,120.4L35.2,117.3L34.8,116.6Z " data-iso="SAU" data-name="Saudi Arabia" data-pop="28686633.0"/><path d="M2.4,149.9L1.6,149.0L0.7,148.0L0.0,147.3L0.0,156.7L1.4,154.1L1.4,153.2L1.9,150.8L2.4,149.9Z " data-iso="SDN" data-name="Sudan" data-pop="30894000.0"/><path d="M11.5,237.9L12.3,237.2L17.0,233.9L17.1,233.4L19.6,226.1L19.5,226.0L13.3,222.7L12.2,222.8L8.0,220.3L4.3,219.9L2.4,218.5L0.7,212.1L0.3,210.9L0.0,211.1L0.0,225.3L4.4,231.0L5.8,232.7L10.2,237.0L11.5,237.9Z " data-iso="SOL" data-name="Somaliland" data-pop="3500000.0"/><path d="M19.6,226.1L17.1,233.4L17.0,233.9L12.3,237.2L11.5,237.9L10.3,238.3L3.8,240.6L0.0,242.2L0.0,256.3L7.0,253.1L10.7,250.3L17.6,243.5L22.7,239.3L25.2,234.9L27.3,227.3L20.1,226.3L19.6,226.1Z " data-iso="SOM" data-name="Somalia" data-pop="9832017.0"/><path d="M49.0,17.7L48.9,17.7L46.9,19.3L46.6,20.3L44.9,20.5L44.7,20.7L44.8,20.8L43.3,22.0L39.8,24.7L39.5,24.7L39.5,24.7L38.5,27.0L38.4,27.5L38.0,29.8L37.9,29.9L38.2,30.1L39.7,29.6L39.7,31.1L37.1,34.7L37.0,34.9L37.1,35.1L37.3,35.3L38.2,36.8L38.2,36.9L38.3,37.1L40.4,35.7L40.8,36.3L46.0,32.4L46.1,32.4L46.1,32.4L46.7,28.6L48.5,25.4L50.8,21.1L50.9,20.8L51.0,20.7L50.1,18.7L49.4,18.2L49.0,17.7L49.0,17.7Z " data-iso="SRB" data-name="Serbia" data-pop="7379339.0"/><path d="M65.2,18.8L65.7,16.7L64.5,12.8L63.8,9.0L63.8,8.7L63.7,8.6L61.3,7.8L60.5,7.5L58.9,5.9L58.5,6.0L58.5,6.0L57.8,6.1L57.5,6.3L56.2,7.6L56.1,7.9L56.2,7.9L56.5,12.5L57.7,12.4L61.3,15.6L62.0,19.7L62.1,19.7L62.8,19.3L63.7,19.4L64.2,19.2L65.0,19.1L65.2,19.0L65.2,18.8Z " data-iso="SVK" data-name="Slovakia" data-pop="5463046.0"/><path d="M49.4,9.7L50.1,8.7L50.7,8.3L50.6,7.8L50.4,7.6L49.7,7.2L49.0,5.9L47.5,2.1L47.5,2.0L47.3,2.0L46.5,1.6L45.2,2.9L43.6,4.1L43.3,4.0L43.2,3.9L44.0,8.8L49.4,9.5L49.4,9.8L49.4,9.7Z " data-iso="SVN" data-name="Slovenia" data-pop="2005692.0"/><path d="M56.7,105.3L51.8,101.7L48.4,100.2L46.5,96.6L44.1,95.6L42.7,93.1L38.5,94.3L38.2,94.4L37.2,95.2L37.0,96.1L35.3,98.1L34.8,99.1L35.6,99.8L34.9,102.2L31.2,103.2L31.0,103.2L30.7,103.4L30.2,104.4L29.9,104.5L28.9,105.4L28.7,105.6L28.9,105.9L29.2,108.8L29.8,109.8L36.4,110.8L37.4,111.0L38.5,111.2L48.6,109.9L52.6,105.8L56.4,105.9L56.5,105.8L56.7,105.3Z " data-iso="SYR" data-name="Syria" data-pop="20178485.0"/><path d="M243.1,289.0L240.5,281.1L243.1,278.6L245.9,277.5L252.9,277.8L253.0,277.8L253.2,277.7L254.5,274.8L253.9,270.8L251.1,266.1L251.3,265.1L247.7,260.7L245.2,260.3L244.0,261.5L239.6,261.3L235.6,264.1L236.5,257.7L235.2,254.9L232.9,254.7L231.7,252.0L231.8,251.7L231.3,251.5L227.1,252.7L226.7,253.8L223.3,253.7L220.0,258.9L225.1,268.7L224.4,272.5L222.8,273.3L224.2,277.0L226.1,278.9L226.8,284.1L228.4,288.2L224.6,292.6L224.2,294.8L223.5,296.2L221.9,302.1L224.3,303.8L231.3,304.7L229.4,299.6L226.9,299.0L226.3,294.3L227.8,292.0L230.2,285.9L230.3,282.1L234.5,281.4L243.0,289.0L243.1,289.0Z " data-iso="THA" data-name="Thailand" data-pop="65905410.0"/><path d="M140.0,145.8L139.4,145.4L139.5,145.6L140.0,145.8Z M126.5,153.0L126.5,153.1L135.3,153.3L137.8,151.7L137.9,159.9L145.0,159.1L149.2,161.7L149.2,161.7L149.3,161.7L150.7,156.7L147.7,154.7L148.4,151.1L148.4,150.9L148.3,150.8L143.7,150.3L142.1,147.8L135.3,145.3L136.0,143.4L141.4,144.5L141.5,144.4L141.3,144.3L141.2,140.5L136.8,140.8L134.7,142.4L128.9,143.8L130.0,147.1L126.8,152.7L126.5,153.0Z " data-iso="TJK" data-name="Tajikistan" data-pop="7349145.0"/><path d="M101.3,117.5L101.2,117.4L99.9,116.8L99.2,110.6L93.6,109.4L93.3,110.6L97.8,110.7L97.5,116.0L94.2,116.3L92.8,113.9L90.0,117.6L90.0,123.3L86.5,129.1L86.4,129.4L97.6,132.7L99.3,136.0L101.9,138.8L103.1,143.7L105.4,145.0L103.8,149.2L103.8,149.4L104.1,149.5L106.1,152.9L108.9,153.1L109.9,151.5L115.1,151.7L117.2,149.1L121.1,148.5L122.9,150.4L123.0,150.5L123.2,150.0L116.2,133.8L116.5,130.2L115.4,126.9L112.5,124.1L113.3,121.7L110.2,116.7L110.2,117.9L107.0,116.7L105.2,117.1L103.9,119.5L102.0,118.0L101.3,117.5Z " data-iso="TKM" data-name="Turkmenistan" data-pop="4884887.0"/><path d="M4.3,9.0L2.2,9.3L0.0,10.5L0.0,21.1L3.0,17.2L5.7,17.7L5.1,15.1L6.4,12.6L4.7,9.7L4.3,9.0Z " data-iso="TUN" data-name="Tunisia" data-pop="10486339.0"/><path d="M38.5,94.3L42.7,93.1L44.1,95.6L46.5,96.6L48.4,100.2L51.8,101.7L56.7,105.3L56.5,105.8L56.8,106.0L58.1,105.8L60.3,108.8L62.3,111.0L62.3,111.2L62.3,111.1L66.9,101.2L69.3,101.8L69.4,101.9L69.4,101.7L69.5,101.6L69.5,101.4L69.3,99.3L68.5,98.6L70.4,93.8L70.5,93.6L70.6,93.5L68.0,88.8L67.6,87.8L67.1,87.9L62.4,85.8L57.6,77.4L56.7,77.1L56.7,71.2L51.3,65.5L45.9,63.4L43.1,58.8L43.1,62.0L40.5,60.9L37.0,54.8L34.7,54.5L32.7,56.0L34.1,57.6L29.8,59.6L28.6,61.3L26.8,67.4L27.7,72.9L26.8,75.5L32.3,79.2L32.6,85.7L34.8,87.6L37.4,87.7L40.3,91.0L41.9,91.1L38.9,94.2L38.5,94.3Z M41.2,49.6L41.2,49.9L39.4,51.1L38.6,51.9L37.1,51.8L37.0,52.1L37.9,54.2L41.8,56.9L44.1,53.6L44.6,53.3L43.7,51.9L41.3,49.5L41.2,49.6Z " data-iso="TUR" data-name="Turkey" data-pop="76805524.0"/><path d="M317.0,236.6L319.1,227.7L317.2,224.9L314.4,228.8L313.0,234.9L314.1,237.0L317.0,236.6Z " data-iso="TWN" data-name="Taiwan" data-pop="22974347.0"/><path d="M87.6,32.0L87.4,31.6L83.2,30.3L80.8,22.9L76.3,15.4L76.2,15.4L76.0,15.7L72.0,19.1L71.7,18.5L65.5,19.8L65.3,19.1L65.2,19.0L65.0,19.1L64.2,19.2L63.7,19.4L62.8,19.3L62.1,19.7L62.2,20.0L61.7,20.7L61.7,21.2L61.0,22.7L61.0,22.8L61.1,22.8L62.2,26.2L62.3,28.5L66.3,31.1L66.4,31.2L66.6,31.2L68.5,33.6L68.4,38.0L65.0,43.4L57.9,43.2L57.7,43.2L57.5,43.8L57.4,44.3L58.4,45.6L59.1,47.5L59.4,47.3L65.4,46.2L66.6,48.0L67.7,53.1L63.9,53.8L62.3,59.7L66.0,61.9L67.9,61.9L69.2,64.0L70.3,62.5L68.5,60.2L71.9,56.9L79.1,61.4L79.2,61.4L82.8,60.2L86.2,61.2L88.2,58.2L90.7,57.3L89.5,51.9L88.7,51.9L88.0,40.4L91.1,35.5L87.6,32.1L87.6,32.0Z " data-iso="UKR" data-name="Ukraine" data-pop="45700395.0"/><path d="M326.9,-177.5L336.7,-175.6L344.3,-173.6L378.2,-162.4L384.7,-159.7L399.6,-153.3L416.0,-145.1L436.3,-133.5L440.7,-130.7L453.5,-120.3L451.5,-118.5L439.8,-117.7L426.4,-118.2L423.9,-118.0L417.4,-115.0L414.5,-121.0L410.5,-119.5L404.6,-126.3L395.2,-135.8L387.3,-142.9L376.3,-151.4L367.2,-157.7L354.7,-165.0L344.5,-170.2L332.2,-175.5L327.4,-176.0L326.9,-177.5Z M396.2,-89.1L399.2,-93.2L401.1,-93.3L398.5,-89.6L396.2,-89.1Z M403.2,-45.8L405.4,-45.9L407.7,-41.7L404.4,-42.6L403.2,-45.8Z M373.7,-16.9L376.3,-21.1L377.1,-19.2L375.0,-16.2L373.7,-16.9Z M342.0,-48.4L341.1,-52.1L343.0,-53.7L342.2,-56.5L342.8,-60.4L342.1,-68.8L346.2,-69.4L378.7,-72.0L385.5,-72.2L385.0,-75.9L388.8,-79.6L386.8,-81.5L383.3,-83.1L387.0,-88.5L390.4,-91.4L392.7,-94.6L392.6,-96.9L398.1,-97.1L399.2,-96.5L394.2,-93.7L392.3,-88.9L390.1,-89.0L387.4,-87.1L386.7,-84.7L388.9,-85.0L389.6,-83.3L386.9,-82.5L388.4,-81.0L390.0,-82.7L388.5,-67.1L385.4,-58.7L387.4,-57.4L390.1,-57.4L396.0,-51.1L393.7,-49.6L389.0,-51.3L387.6,-55.8L386.2,-53.1L388.4,-50.6L392.9,-48.1L395.6,-45.3L399.0,-45.4L402.0,-43.1L405.5,-38.0L407.5,-36.4L410.6,-31.4L413.7,-28.0L412.8,-27.8L413.5,-23.7L415.3,-21.8L413.4,-21.6L412.1,-26.4L410.5,-27.4L408.4,-31.3L398.4,-38.2L399.0,-34.7L401.0,-33.2L399.2,-32.6L398.7,-29.6L399.7,-27.5L397.5,-28.4L392.4,-28.7L393.5,-27.0L390.7,-23.4L388.6,-24.6L387.5,-23.6L383.2,-24.5L379.8,-27.3L377.2,-34.2L375.6,-35.9L372.0,-29.0L365.7,-25.7L362.3,-32.4L365.1,-36.3L364.0,-37.3L360.9,-36.6L363.4,-39.4L360.5,-37.6L359.9,-34.8L355.2,-33.0L351.1,-32.8L350.2,-36.9L344.2,-42.9L342.6,-43.5L340.2,-47.3L342.0,-48.4Z " data-iso="USA" data-name="United States" data-pop="307212123.0"/><path d="M141.7,146.2L141.2,145.0L141.3,145.6L141.7,146.2Z M101.3,117.5L102.0,118.0L103.9,119.5L105.2,117.1L107.0,116.7L110.2,117.9L110.2,116.7L113.3,121.7L112.5,124.1L115.4,126.9L116.5,130.2L116.2,133.8L123.2,150.0L123.0,150.5L124.0,150.8L124.7,151.3L125.7,152.2L126.6,152.8L126.5,153.0L126.8,152.7L130.0,147.1L128.9,143.8L134.7,142.4L136.8,140.8L141.2,140.5L141.3,144.3L141.5,144.4L141.6,144.4L143.9,145.6L149.0,144.5L144.0,141.0L143.8,137.2L144.9,136.0L144.8,136.0L144.5,136.1L137.8,137.3L135.3,138.9L130.8,135.2L131.0,131.1L130.1,130.6L130.1,122.0L122.3,118.9L121.4,114.4L117.7,105.1L110.3,103.2L101.9,116.6L101.3,117.5Z " data-iso="UZB" data-name="Uzbekistan" data-pop="27606007.0"/><path d="M240.3,243.1L240.5,243.5L243.6,246.2L243.3,248.3L249.4,250.0L249.5,251.6L251.8,253.4L247.6,256.7L252.6,259.2L252.8,260.7L262.4,270.4L261.5,271.4L263.1,275.6L263.1,276.1L263.2,276.3L262.7,286.5L258.1,289.1L256.4,289.1L255.6,292.1L249.7,294.5L250.1,294.9L251.8,297.1L251.4,301.4L257.5,298.8L255.9,296.3L259.4,296.8L269.9,290.2L271.6,283.2L270.9,279.4L268.7,273.0L264.2,268.8L254.7,257.9L259.4,250.2L259.0,249.3L264.1,246.8L264.3,246.7L259.2,244.8L259.3,241.4L251.3,240.1L247.6,242.5L240.5,243.0L240.3,243.1Z " data-iso="VNM" data-name="Vietnam" data-pop="86967524.0"/><path d="M27.0,106.0L23.9,107.5L24.2,109.2L24.3,109.3L24.5,109.0L25.3,108.5L25.9,107.6L26.8,106.8L27.2,106.2L27.0,106.0Z " data-iso="PSE" data-name="Palestine" data-pop="2514845.0"/><path d="M42.8,200.2L41.9,199.8L32.7,195.5L28.5,195.0L24.8,197.0L22.3,197.2L11.9,186.0L7.7,189.1L7.1,190.7L5.0,193.5L5.4,195.5L3.3,203.4L4.7,208.2L12.5,209.7L16.4,211.6L23.0,213.5L25.0,212.7L38.1,214.8L40.6,212.2L42.7,212.5L42.7,209.3L42.5,209.0L42.8,200.7L42.8,200.2Z " data-iso="YEM" data-name="Yemen" data-pop="23822783.0"/></g></svg> \ No newline at end of file
diff --git a/plugins/UserCountryMap/svg/BGD.svg b/plugins/UserCountryMap/svg/BGD.svg
index 7f8d9db567..fa82fa1970 100644
--- a/plugins/UserCountryMap/svg/BGD.svg
+++ b/plugins/UserCountryMap/svg/BGD.svg
@@ -1 +1,2 @@
-<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'><svg enable_background="new 0 0 450 301" height="301px" pretty_print="False" style="stroke-linejoin: round; stroke:#000; fill: none;" version="1.1" viewBox="0 0 450 301" width="450px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"><![CDATA[path { fill-rule: evenodd; }]]></style></defs><metadata><views><view h="301.0" padding="0.06" w="450"><proj id="laea" lat0="24.1365502997" lon0="90.4195764378"/><bbox h="78.94" w="58.76" x="969.96" y="965.99"/></view></views></metadata><g class="" id="context"><path d="M294,251L295,247L294,243L290,242L291,248L294,251Z M291,236L291,234L289,234L288,237L289,240L291,236Z M259,220L260,215L259,212L256,204L255,224L259,220Z M277,211L273,202L272,200L270,206L273,211L275,212L277,211Z M243,224L245,221L247,210L247,206L241,199L238,191L235,188L231,190L234,200L237,203L239,208L239,213L232,226L235,226L243,224Z M237,184L234,180L233,181L238,186L237,184Z M170,228L170,234L178,242L181,242L186,237L188,233L188,227L186,219L187,216L190,229L191,239L195,234L199,232L201,229L204,221L203,215L204,211L209,207L205,214L205,219L207,228L212,224L218,221L213,228L212,234L216,237L219,237L222,233L225,226L235,217L236,212L235,208L230,201L228,194L229,187L233,186L230,183L230,179L235,176L235,169L232,166L226,165L221,161L233,162L235,154L236,161L238,169L237,178L238,181L245,195L250,201L259,200L262,199L266,194L270,191L273,187L273,191L275,195L283,205L287,214L290,214L288,218L289,221L292,234L297,243L297,251L299,267L305,276L310,285L311,285L308,272L306,270L304,261L305,258L308,255L311,254L320,260L323,262L322,246L321,231L321,229L320,226L319,209L317,196L312,186L311,185L310,178L310,166L306,149L303,150L292,150L292,160L286,165L285,168L286,177L282,181L279,183L276,182L274,180L273,175L268,173L268,178L266,177L263,164L259,155L259,151L262,139L267,134L269,130L275,131L278,128L285,125L288,127L290,126L293,118L299,116L300,112L303,103L304,94L305,93L311,95L313,95L314,90L310,87L303,83L296,80L284,81L272,82L264,80L254,80L241,81L228,81L220,80L204,75L203,75L201,71L202,62L201,49L202,44L198,34L196,32L192,35L193,38L191,41L187,42L176,37L173,32L172,27L171,24L166,22L165,24L167,28L167,30L161,30L155,28L155,25L152,21L148,17L144,14L142,15L142,19L145,21L142,26L132,37L129,46L136,51L141,55L145,61L150,65L158,65L160,71L165,75L163,79L157,80L144,79L141,90L138,93L131,92L127,101L126,105L131,112L134,113L137,112L141,116L146,118L152,119L155,122L154,135L148,150L149,153L156,161L154,168L155,170L163,173L160,180L162,189L163,199L165,204L168,216L168,224L170,228Z " data-iso="BGD"/><path d="M170,1L174,3L182,2L193,5L194,8L200,9L215,6L219,2L224,0L236,5L241,6L257,4L264,5L273,4L280,4L287,2L293,1L296,0L296,0L168,0L170,1Z " data-iso="BTN"/><path d="M390,933L388,937L382,925L379,925L379,919L381,917L387,914L389,916L392,926L390,933Z M383,909L378,913L376,911L381,906L383,909Z M369,885L365,885L363,881L366,879L369,885Z M373,877L370,874L369,871L371,869L373,869L372,872L373,877Z M355,868L353,870L351,867L353,863L355,868Z M338,827L334,826L334,824L338,822L339,825L338,827Z M324,762L323,763L318,762L318,757L317,753L324,746L326,750L327,755L324,762Z M332,723L330,724L328,723L330,721L330,717L332,719L332,723Z M347,692L349,699L344,694L347,692Z M333,654L331,657L331,651L333,650L333,654Z M334,716L331,716L327,708L326,702L325,700L328,697L330,689L336,680L333,678L333,669L335,663L334,658L337,653L338,648L337,646L339,637L339,631L342,625L348,622L349,629L346,632L349,636L346,643L343,645L340,650L344,655L345,669L343,673L340,674L340,684L340,686L335,695L335,697L336,711L334,716Z M9,1L14,3L20,1L25,-1L29,-1L31,2L32,8L37,10L43,8L48,10L53,11L72,19L74,19L85,14L88,20L96,23L102,21L111,22L120,20L126,23L129,21L133,7L133,3L131,-2L127,-10L126,-12L128,-25L130,-32L132,-36L134,-45L132,-47L133,-50L139,-51L145,-53L152,-57L161,-52L163,-46L162,-41L158,-30L159,-26L164,-19L159,-16L158,-14L162,-8L162,-4L165,-2L170,1L174,3L182,2L193,5L194,8L200,9L215,6L219,2L224,0L236,5L241,6L257,4L264,5L273,4L280,4L287,2L293,1L296,0L296,-1L293,-12L297,-19L293,-26L282,-26L276,-31L276,-34L278,-41L292,-40L297,-43L303,-45L310,-44L320,-50L321,-52L322,-59L329,-63L335,-68L339,-72L342,-81L344,-82L348,-84L361,-86L370,-91L375,-99L379,-99L386,-108L393,-111L399,-116L401,-115L405,-110L421,-107L426,-104L436,-109L436,-112L443,-117L456,-124L460,-121L463,-116L469,-114L461,-107L463,-99L470,-105L473,-106L480,-93L473,-86L470,-82L473,-74L475,-76L482,-79L484,-79L489,-75L497,-74L501,-76L504,-75L510,-70L511,-63L513,-61L512,-55L509,-54L496,-42L496,-32L505,-19L505,-17L503,-16L496,-20L492,-25L487,-27L462,-20L456,-12L449,-7L438,2L432,7L427,8L424,10L422,16L421,22L422,29L425,36L421,43L420,49L412,61L407,64L405,67L402,76L409,81L409,83L404,97L401,103L392,118L386,139L381,138L367,133L357,134L353,130L351,133L354,144L356,149L355,165L354,174L352,179L345,181L346,185L342,194L346,211L344,218L342,218L338,228L333,227L329,223L326,222L323,227L321,229L320,226L319,209L317,196L312,186L311,185L310,178L310,166L306,149L303,150L292,150L292,160L286,165L285,168L286,177L282,181L279,183L276,182L274,180L273,175L268,173L268,178L266,177L263,164L259,155L259,151L262,139L267,134L269,130L275,131L278,128L285,125L288,127L290,126L293,118L299,116L300,112L303,103L304,94L305,93L311,95L313,95L314,90L310,87L303,83L296,80L284,81L272,82L264,80L254,80L241,81L228,81L220,80L204,75L203,75L201,71L202,62L201,49L202,44L198,34L196,32L192,35L193,38L191,41L187,42L176,37L173,32L172,27L171,24L166,22L165,24L167,28L167,30L161,30L155,28L155,25L152,21L148,17L144,14L142,15L142,19L145,21L142,26L132,37L129,46L136,51L141,55L145,61L150,65L158,65L160,71L165,75L163,79L157,80L144,79L141,90L138,93L131,92L127,101L126,105L131,112L134,113L137,112L141,116L146,118L152,119L155,122L154,135L148,150L149,153L156,161L154,168L155,170L163,173L160,180L162,189L163,199L165,204L168,216L168,224L167,231L164,231L167,236L168,245L162,245L160,240L159,244L155,248L152,241L155,228L151,225L151,223L147,236L148,242L148,244L142,246L136,241L133,246L128,245L125,242L131,226L131,221L123,215L120,210L121,216L130,222L125,228L120,236L115,240L108,244L88,248L83,250L77,257L72,262L71,269L74,275L75,286L77,288L75,291L71,295L67,301L67,305L55,312L50,319L46,317L44,317L47,320L43,324L27,329L14,333L11,333L14,330L14,325L9,323L-0,329L-4,336L-1,337L5,333L8,336L-1,341L-22,358L-23,362L-26,366L-30,369L-36,378L-49,391L-53,396L-73,405L-77,408L-86,418L-94,426L-105,432L-122,440L-133,448L-136,453L-134,463L-139,473L-144,476L-161,482L-177,480L-183,481L-185,484L-190,498L-195,501L-198,507L-205,506L-206,501L-212,500L-224,504L-229,507L-238,525L-241,536L-240,549L-237,560L-237,564L-238,570L-241,577L-239,584L-236,593L-236,602L-233,611L-235,609L-236,605L-240,600L-244,605L-242,608L-234,613L-232,617L-239,648L-243,659L-248,666L-251,668L-257,679L-262,693L-263,698L-261,705L-266,710L-261,710L-259,716L-260,736L-262,757L-266,758L-276,756L-282,756L-286,758L-289,762L-289,769L-302,784L-305,789L-306,795L-302,800L-290,804L-286,805L-284,808L-293,805L-304,803L-330,809L-337,814L-341,818L-344,829L-345,836L-348,841L-362,849L-371,851L-374,854L-384,850L-394,841L-399,836L-414,814L-417,812L-419,803L-420,799L-423,795L-426,785L-427,775L-428,763L-426,764L-424,768L-423,773L-423,781L-419,782L-423,763L-429,758L-430,755L-429,750L-433,744L-434,740L-440,721L-443,708L-448,694L-451,688L-456,677L-460,671L-465,664L-470,659L-479,634L-482,621L-484,614L-485,609L-488,589L-488,581L-490,572L-494,563L-495,555L-497,545L-498,541L-504,530L-509,521L-515,512L-517,501L-520,496L-514,497L-521,488L-518,484L-522,484L-524,481L-527,473L-532,464L-532,459L-536,444L-537,409L-540,393L-539,389L-542,375L-544,366L-544,358L-545,353L-545,333L-540,327L-539,322L-539,316L-543,322L-546,324L-547,318L-546,308L-538,310L-546,305L-545,298L-548,295L-548,286L-549,283L-546,271L-536,249L-535,244L-535,237L-536,231L-539,222L-541,220L-543,210L-541,206L-543,206L-534,199L-524,197L-520,195L-526,196L-532,196L-545,194L-541,186L-536,182L-544,181L-542,173L-538,171L-530,171L-539,167L-545,168L-550,166L-557,166L-552,170L-555,177L-559,179L-562,181L-565,186L-560,189L-557,194L-558,201L-567,214L-570,217L-590,223L-598,227L-615,231L-621,231L-628,229L-637,223L-651,209L-655,204L-665,187L-672,178L-678,169L-685,161L-691,150L-692,145L-691,141L-688,139L-685,140L-680,147L-667,143L-663,144L-659,142L-656,143L-647,140L-640,140L-632,129L-626,123L-623,121L-623,117L-626,118L-630,123L-634,121L-652,124L-657,127L-660,128L-677,121L-694,108L-700,101L-703,92L-707,81L-705,79L-690,71L-695,72L-705,75L-709,79L-714,79L-715,66L-705,63L-701,63L-691,65L-689,51L-685,49L-684,52L-681,51L-678,52L-675,52L-654,56L-648,62L-635,63L-632,59L-623,57L-612,55L-612,62L-608,64L-602,64L-598,61L-594,61L-591,59L-594,55L-593,49L-589,46L-594,27L-596,20L-599,14L-601,9L-599,-1L-602,-5L-605,-4L-612,-5L-615,-7L-620,-17L-620,-25L-617,-31L-614,-43L-617,-49L-623,-50L-630,-53L-635,-57L-639,-63L-634,-78L-632,-80L-617,-92L-609,-101L-604,-108L-596,-113L-592,-114L-589,-114L-584,-109L-584,-104L-579,-97L-576,-97L-562,-101L-558,-101L-547,-100L-533,-103L-532,-107L-529,-112L-520,-119L-518,-122L-511,-135L-509,-137L-485,-147L-473,-161L-468,-169L-459,-187L-441,-192L-436,-197L-436,-207L-431,-211L-421,-221L-415,-226L-414,-226L-403,-232L-403,-235L-406,-237L-406,-239L-401,-252L-403,-264L-397,-271L-393,-274L-379,-279L-371,-280L-368,-283L-368,-288L-371,-291L-380,-296L-387,-297L-392,-305L-390,-312L-402,-314L-404,-316L-402,-321L-406,-326L-412,-333L-413,-338L-407,-344L-405,-349L-406,-351L-411,-357L-409,-363L-406,-365L-400,-366L-398,-369L-403,-372L-409,-374L-407,-384L-408,-387L-412,-389L-413,-391L-404,-403L-391,-407L-367,-398L-358,-397L-348,-391L-343,-388L-339,-388L-333,-390L-325,-394L-320,-394L-309,-397L-304,-395L-299,-397L-295,-402L-287,-405L-284,-411L-253,-425L-250,-423L-244,-424L-247,-413L-245,-408L-240,-385L-238,-382L-225,-377L-216,-368L-215,-366L-217,-361L-225,-356L-225,-355L-225,-343L-226,-329L-221,-321L-215,-315L-214,-313L-216,-306L-213,-302L-214,-281L-218,-280L-221,-276L-227,-275L-229,-278L-234,-287L-245,-286L-246,-286L-245,-279L-245,-274L-244,-270L-236,-257L-238,-250L-238,-247L-235,-241L-238,-235L-237,-233L-237,-226L-232,-228L-229,-227L-227,-231L-224,-230L-216,-216L-207,-207L-198,-208L-187,-198L-185,-198L-183,-197L-183,-193L-184,-188L-181,-187L-168,-181L-162,-176L-153,-170L-153,-166L-157,-167L-166,-159L-172,-155L-179,-148L-183,-141L-186,-134L-186,-129L-188,-123L-192,-119L-196,-109L-182,-96L-180,-95L-178,-98L-175,-97L-169,-91L-153,-80L-147,-73L-141,-67L-126,-57L-118,-58L-109,-50L-102,-46L-95,-46L-93,-46L-91,-38L-68,-30L-62,-34L-57,-34L-46,-29L-43,-32L-35,-34L-29,-31L-14,-24L-12,-14L-11,-12L-1,-6L2,-4L8,-2L9,1Z " data-iso="IND"/><path d="M438,2L432,7L427,8L424,10L422,16L421,22L422,29L425,36L421,43L420,49L412,61L407,64L405,67L402,76L409,81L409,83L404,97L401,103L392,118L386,139L381,138L367,133L357,134L353,130L351,133L354,144L356,149L355,165L354,174L352,179L345,181L346,185L342,194L346,211L344,218L342,218L338,228L333,227L329,223L326,222L323,227L321,229L321,231L322,246L323,262L320,260L311,254L308,255L305,258L304,261L306,270L308,272L311,285L313,288L323,299L329,299L328,295L329,295L331,299L450,299L450,0L441,0L438,2Z " data-iso="MMR"/><path d="M31,2L32,8L37,10L43,8L48,10L53,11L72,19L74,19L85,14L88,20L96,23L102,21L111,22L120,20L126,23L129,21L133,7L133,3L132,0L29,0L31,2Z M9,1L14,3L20,1L22,0L8,0L9,1Z " data-iso="NPL"/></g><g class="" id="regions"><path d="M233,166L228,164L230,166L233,166Z M201,70L200,70L199,73L199,77L197,79L195,86L196,95L201,101L199,113L201,133L197,136L196,139L197,142L191,144L189,144L182,139L182,139L182,141L182,142L180,148L182,150L185,150L189,157L188,159L193,161L194,168L194,171L196,171L197,174L199,174L196,176L198,178L203,186L206,188L206,188L208,188L210,186L216,179L219,180L221,183L223,179L228,181L229,180L229,179L234,178L235,175L236,171L234,168L226,165L221,161L233,164L234,161L234,155L236,154L235,157L235,159L239,158L239,156L240,156L242,150L240,148L242,142L246,141L248,142L250,139L254,131L253,130L254,127L255,125L258,124L259,123L259,123L262,119L261,116L262,115L261,110L260,106L262,104L258,99L257,94L252,95L251,94L248,89L250,85L249,81L245,82L236,80L234,81L222,80L215,79L206,75L201,71L201,70Z " data-fips="BG81" data-fips-="BG32" data-iso3="BGD" data-name="Dhaka" data-p="DA"/><path d="M172,241L172,239L168,238L170,241L172,241Z M156,126L153,131L154,132L153,140L149,141L148,146L147,151L148,153L151,155L157,160L153,168L154,170L157,171L163,172L164,173L161,177L161,185L162,187L164,189L162,194L164,201L164,202L166,208L166,210L166,215L169,219L169,221L169,225L170,228L169,233L170,237L174,238L175,242L175,244L177,245L179,244L178,237L179,237L182,232L181,231L182,239L186,239L189,230L187,227L188,227L187,222L187,224L186,218L187,215L187,220L189,224L189,229L190,229L191,223L192,222L190,230L191,233L189,240L191,243L194,240L196,240L193,235L194,232L194,234L197,237L200,237L204,234L203,227L203,225L203,219L202,216L204,212L204,209L207,208L209,207L208,202L205,197L205,195L206,194L207,189L206,188L206,188L203,186L198,178L196,176L199,174L197,174L196,171L194,171L194,168L193,161L188,159L189,157L185,150L182,150L180,148L182,142L182,141L182,139L181,138L175,138L170,135L170,134L166,128L156,128L156,126L156,126Z " data-fips="BG82" data-fips-="BG46" data-iso3="BGD" data-name="Khulna" data-p="KH"/><path d="M235,232L235,229L232,232L232,235L235,232Z M224,236L225,229L223,234L224,236Z M228,233L230,230L228,226L227,227L228,233Z M236,221L231,224L231,227L233,229L236,221Z M250,219L251,222L251,219L250,219Z M252,220L253,217L252,217L252,220Z M252,215L251,214L251,216L252,215Z M238,209L238,206L237,209L238,209Z M245,222L246,220L247,206L244,203L243,200L240,198L238,192L234,193L234,200L238,204L239,216L237,220L237,223L235,227L239,224L237,228L239,228L240,226L243,225L245,222Z M235,187L230,188L230,192L232,196L233,193L239,190L239,190L235,187Z M237,183L234,180L231,183L238,186L237,183Z M230,181L231,179L229,179L230,181Z M206,188L207,189L206,194L205,195L205,197L208,202L209,207L209,207L209,208L205,213L204,217L205,219L206,226L206,229L209,229L209,227L212,221L213,221L209,228L211,229L216,223L211,231L212,236L215,232L213,237L216,238L219,237L221,235L223,229L226,222L226,224L228,225L231,220L235,218L236,214L236,210L235,208L236,207L234,202L230,201L229,205L230,201L232,200L230,194L225,193L232,187L229,181L229,180L228,181L223,179L221,183L219,180L216,179L210,186L208,188L206,188Z " data-fips="BG85" data-fips-="BG|" data-iso3="BGD" data-name="Barisal" data-p="BA"/><path d="M294,242L292,239L290,241L291,250L290,250L295,251L295,251L294,242Z M289,241L291,234L289,233L289,240L289,241Z M262,210L260,207L260,208L262,210Z M254,224L260,219L260,212L259,210L256,207L255,220L254,224Z M277,210L276,206L272,200L270,204L271,208L273,211L275,212L277,210Z M259,123L258,124L255,125L254,127L253,130L254,131L250,139L248,142L246,141L242,142L240,148L242,150L240,156L240,156L236,160L236,166L237,167L238,170L237,173L237,180L240,185L244,194L245,196L251,202L254,200L261,201L264,199L260,195L265,196L270,193L270,192L274,186L273,193L276,196L282,203L285,211L286,216L292,208L290,213L288,214L288,220L290,223L291,230L292,235L292,238L295,239L296,245L298,245L297,252L295,254L298,261L299,268L302,273L305,275L306,278L310,286L311,287L308,276L308,272L306,271L304,267L307,255L310,253L312,254L313,257L315,258L319,258L321,263L324,260L323,255L321,240L320,225L319,222L321,220L318,205L317,196L313,187L312,186L310,173L311,168L308,161L306,148L305,148L304,151L302,147L296,152L292,148L293,158L291,161L287,163L285,167L285,172L287,178L282,182L276,183L274,180L272,173L269,170L268,170L269,177L267,178L265,175L265,165L262,159L261,159L258,152L260,151L258,148L261,146L262,143L261,140L263,137L265,135L265,135L264,128L266,124L266,124L262,125L259,123Z " data-fips="BG80" data-fips-="BG" data-iso3="BGD" data-name="Chittagong" data-p="CG"/><path d="M249,81L250,85L248,89L251,94L252,95L257,94L258,99L262,104L260,106L261,110L262,115L261,116L262,119L259,123L259,123L262,125L266,124L266,124L264,128L265,135L266,136L267,132L270,130L276,131L278,130L280,125L282,128L283,125L288,128L290,127L291,123L290,120L293,118L299,116L299,111L301,109L305,98L304,94L305,92L311,95L313,95L315,91L311,88L310,86L304,84L296,80L286,80L276,81L270,82L262,79L250,81L249,81Z " data-fips="BG86" data-fips-="" data-iso3="BGD" data-name="Sylhet" data-p="SY"/><path d="M156,126L156,128L166,128L170,134L170,135L175,138L181,138L182,139L182,139L189,144L191,144L197,142L196,139L197,136L201,133L199,113L201,101L196,95L195,86L197,79L199,77L199,73L200,70L201,70L201,69L203,59L201,50L203,45L199,40L198,35L195,31L192,38L193,38L190,44L173,35L171,27L170,24L168,22L164,22L164,25L170,30L163,28L161,31L157,28L154,29L155,27L154,22L148,19L146,16L144,16L143,12L142,12L141,19L146,21L147,23L144,24L141,26L140,30L136,32L132,35L132,38L129,45L131,51L137,51L139,54L143,57L143,60L149,65L153,66L157,65L160,67L159,70L161,73L166,76L159,79L159,80L152,79L143,80L143,87L139,94L134,90L130,92L126,103L128,107L128,109L130,111L142,117L148,120L153,119L156,121L156,125L156,126Z " data-fips="BG83" data-fips-="BG70" data-iso3="BGD" data-name="Rajshahi" data-p="RJ"/></g></svg> \ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'><svg enable_background="new 0 0 450 301" height="301px" style="stroke-linejoin: round; stroke:#000; fill:#f6f3f0;" version="1.1" viewBox="0 0 450 301" width="450px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"><![CDATA[path { fill-rule: evenodd; }
+#context path { fill: #eee; stroke: #bbb; } ]]></style></defs><metadata><views><view h="301.0" padding="0.06" w="450"><proj id="laea" lat0="24.1365502997" lon0="90.4195764378"/><bbox h="78.94" w="58.76" x="969.96" y="965.99"/><llbbox lat0="-90" lat1="90" lon0="-180" lon1="180"/></view></views></metadata><g id="context"><path d="M294,251L295,247L294,243L290,242L291,248L294,251Z M291,236L291,234L289,234L288,237L289,240L291,236Z M259,220L260,215L259,212L256,204L255,224L259,220Z M277,211L273,202L272,200L270,206L273,211L275,212L277,211Z M243,224L245,221L247,210L247,206L241,199L238,191L235,188L231,190L234,200L237,203L239,208L239,213L232,226L235,226L243,224Z M237,184L234,180L233,181L238,186L237,184Z M170,228L170,234L178,242L181,242L186,237L188,233L188,227L186,219L187,216L190,229L191,239L195,234L199,232L201,229L204,221L203,215L204,211L209,207L205,214L205,219L207,228L212,224L218,221L213,228L212,234L216,237L219,237L222,233L225,226L235,217L236,212L235,208L230,201L228,194L229,187L233,186L230,183L230,179L235,176L235,169L232,166L226,165L221,161L233,162L235,154L236,161L238,169L237,178L238,181L245,195L250,201L259,200L262,199L266,194L270,191L273,187L273,191L275,195L283,205L287,214L290,214L288,218L289,221L292,234L297,243L297,251L299,267L305,276L310,285L311,285L308,272L306,270L304,261L305,258L308,255L311,254L320,260L323,262L322,246L321,231L321,229L320,226L319,209L317,196L312,186L311,185L310,178L310,166L306,149L303,150L292,150L292,160L286,165L285,168L286,177L282,181L279,183L276,182L274,180L273,175L268,173L268,178L266,177L263,164L259,155L259,151L262,139L267,134L269,130L275,131L278,128L285,125L288,127L290,126L293,118L299,116L300,112L303,103L304,94L305,93L311,95L313,95L314,90L310,87L303,83L296,80L284,81L272,82L264,80L254,80L241,81L228,81L220,80L204,75L203,75L201,71L202,62L201,49L202,44L198,34L196,32L192,35L193,38L191,41L187,42L176,37L173,32L172,27L171,24L166,22L165,24L167,28L167,30L161,30L155,28L155,25L152,21L148,17L144,14L142,15L142,19L145,21L142,26L132,37L129,46L136,51L141,55L145,61L150,65L158,65L160,71L165,75L163,79L157,80L144,79L141,90L138,93L131,92L127,101L126,105L131,112L134,113L137,112L141,116L146,118L152,119L155,122L154,135L148,150L149,153L156,161L154,168L155,170L163,173L160,180L162,189L163,199L165,204L168,216L168,224L170,228Z " data-iso="BGD"/><path d="M170,1L174,3L182,2L193,5L194,8L200,9L215,6L219,2L224,0L236,5L241,6L257,4L264,5L273,4L280,4L287,2L293,1L296,0L296,0L168,0L170,1Z " data-iso="BTN"/><path d="M390,933L388,937L382,925L379,925L379,919L381,917L387,914L389,916L392,926L390,933Z M383,909L378,913L376,911L381,906L383,909Z M369,885L365,885L363,881L366,879L369,885Z M373,877L370,874L369,871L371,869L373,869L372,872L373,877Z M355,868L353,870L351,867L353,863L355,868Z M338,827L334,826L334,824L338,822L339,825L338,827Z M324,762L323,763L318,762L318,757L317,753L324,746L326,750L327,755L324,762Z M332,723L330,724L328,723L330,721L330,717L332,719L332,723Z M347,692L349,699L344,694L347,692Z M333,654L331,657L331,651L333,650L333,654Z M334,716L331,716L327,708L326,702L325,700L328,697L330,689L336,680L333,678L333,669L335,663L334,658L337,653L338,648L337,646L339,637L339,631L342,625L348,622L349,629L346,632L349,636L346,643L343,645L340,650L344,655L345,669L343,673L340,674L340,684L340,686L335,695L335,697L336,711L334,716Z M9,1L14,3L20,1L25,-1L29,-1L31,2L32,8L37,10L43,8L48,10L53,11L72,19L74,19L85,14L88,20L96,23L102,21L111,22L120,20L126,23L129,21L133,7L133,3L131,-2L127,-10L126,-12L128,-25L130,-32L132,-36L134,-45L132,-47L133,-50L139,-51L145,-53L152,-57L161,-52L163,-46L162,-41L158,-30L159,-26L164,-19L159,-16L158,-14L162,-8L162,-4L165,-2L170,1L174,3L182,2L193,5L194,8L200,9L215,6L219,2L224,0L236,5L241,6L257,4L264,5L273,4L280,4L287,2L293,1L296,0L296,-1L293,-12L297,-19L293,-26L282,-26L276,-31L276,-34L278,-41L292,-40L297,-43L303,-45L310,-44L320,-50L321,-52L322,-59L329,-63L335,-68L339,-72L342,-81L344,-82L348,-84L361,-86L370,-91L375,-99L379,-99L386,-108L393,-111L399,-116L401,-115L405,-110L421,-107L426,-104L436,-109L436,-112L443,-117L456,-124L460,-121L463,-116L469,-114L461,-107L463,-99L470,-105L473,-106L480,-93L473,-86L470,-82L473,-74L475,-76L482,-79L484,-79L489,-75L497,-74L501,-76L504,-75L510,-70L511,-63L513,-61L512,-55L509,-54L496,-42L496,-32L505,-19L505,-17L503,-16L496,-20L492,-25L487,-27L462,-20L456,-12L449,-7L438,2L432,7L427,8L424,10L422,16L421,22L422,29L425,36L421,43L420,49L412,61L407,64L405,67L402,76L409,81L409,83L404,97L401,103L392,118L386,139L381,138L367,133L357,134L353,130L351,133L354,144L356,149L355,165L354,174L352,179L345,181L346,185L342,194L346,211L344,218L342,218L338,228L333,227L329,223L326,222L323,227L321,229L320,226L319,209L317,196L312,186L311,185L310,178L310,166L306,149L303,150L292,150L292,160L286,165L285,168L286,177L282,181L279,183L276,182L274,180L273,175L268,173L268,178L266,177L263,164L259,155L259,151L262,139L267,134L269,130L275,131L278,128L285,125L288,127L290,126L293,118L299,116L300,112L303,103L304,94L305,93L311,95L313,95L314,90L310,87L303,83L296,80L284,81L272,82L264,80L254,80L241,81L228,81L220,80L204,75L203,75L201,71L202,62L201,49L202,44L198,34L196,32L192,35L193,38L191,41L187,42L176,37L173,32L172,27L171,24L166,22L165,24L167,28L167,30L161,30L155,28L155,25L152,21L148,17L144,14L142,15L142,19L145,21L142,26L132,37L129,46L136,51L141,55L145,61L150,65L158,65L160,71L165,75L163,79L157,80L144,79L141,90L138,93L131,92L127,101L126,105L131,112L134,113L137,112L141,116L146,118L152,119L155,122L154,135L148,150L149,153L156,161L154,168L155,170L163,173L160,180L162,189L163,199L165,204L168,216L168,224L167,231L164,231L167,236L168,245L162,245L160,240L159,244L155,248L152,241L155,228L151,225L151,223L147,236L148,242L148,244L142,246L136,241L133,246L128,245L125,242L131,226L131,221L123,215L120,210L121,216L130,222L125,228L120,236L115,240L108,244L88,248L83,250L77,257L72,262L71,269L74,275L75,286L77,288L75,291L71,295L67,301L67,305L55,312L50,319L46,317L44,317L47,320L43,324L27,329L14,333L11,333L14,330L14,325L9,323L-0,329L-4,336L-1,337L5,333L8,336L-1,341L-22,358L-23,362L-26,366L-30,369L-36,378L-49,391L-53,396L-73,405L-77,408L-86,418L-94,426L-105,432L-122,440L-133,448L-136,453L-134,463L-139,473L-144,476L-161,482L-177,480L-183,481L-185,484L-190,498L-195,501L-198,507L-205,506L-206,501L-212,500L-224,504L-229,507L-238,525L-241,536L-240,549L-237,560L-237,564L-238,570L-241,577L-239,584L-236,593L-236,602L-233,611L-235,609L-236,605L-240,600L-244,605L-242,608L-234,613L-232,617L-239,648L-243,659L-248,666L-251,668L-257,679L-262,693L-263,698L-261,705L-266,710L-261,710L-259,716L-260,736L-262,757L-266,758L-276,756L-282,756L-286,758L-289,762L-289,769L-302,784L-305,789L-306,795L-302,800L-290,804L-286,805L-284,808L-293,805L-304,803L-330,809L-337,814L-341,818L-344,829L-345,836L-348,841L-362,849L-371,851L-374,854L-384,850L-394,841L-399,836L-414,814L-417,812L-419,803L-420,799L-423,795L-426,785L-427,775L-428,763L-426,764L-424,768L-423,773L-423,781L-419,782L-423,763L-429,758L-430,755L-429,750L-433,744L-434,740L-440,721L-443,708L-448,694L-451,688L-456,677L-460,671L-465,664L-470,659L-479,634L-482,621L-484,614L-485,609L-488,589L-488,581L-490,572L-494,563L-495,555L-497,545L-498,541L-504,530L-509,521L-515,512L-517,501L-520,496L-514,497L-521,488L-518,484L-522,484L-524,481L-527,473L-532,464L-532,459L-536,444L-537,409L-540,393L-539,389L-542,375L-544,366L-544,358L-545,353L-545,333L-540,327L-539,322L-539,316L-543,322L-546,324L-547,318L-546,308L-538,310L-546,305L-545,298L-548,295L-548,286L-549,283L-546,271L-536,249L-535,244L-535,237L-536,231L-539,222L-541,220L-543,210L-541,206L-543,206L-534,199L-524,197L-520,195L-526,196L-532,196L-545,194L-541,186L-536,182L-544,181L-542,173L-538,171L-530,171L-539,167L-545,168L-550,166L-557,166L-552,170L-555,177L-559,179L-562,181L-565,186L-560,189L-557,194L-558,201L-567,214L-570,217L-590,223L-598,227L-615,231L-621,231L-628,229L-637,223L-651,209L-655,204L-665,187L-672,178L-678,169L-685,161L-691,150L-692,145L-691,141L-688,139L-685,140L-680,147L-667,143L-663,144L-659,142L-656,143L-647,140L-640,140L-632,129L-626,123L-623,121L-623,117L-626,118L-630,123L-634,121L-652,124L-657,127L-660,128L-677,121L-694,108L-700,101L-703,92L-707,81L-705,79L-690,71L-695,72L-705,75L-709,79L-714,79L-715,66L-705,63L-701,63L-691,65L-689,51L-685,49L-684,52L-681,51L-678,52L-675,52L-654,56L-648,62L-635,63L-632,59L-623,57L-612,55L-612,62L-608,64L-602,64L-598,61L-594,61L-591,59L-594,55L-593,49L-589,46L-594,27L-596,20L-599,14L-601,9L-599,-1L-602,-5L-605,-4L-612,-5L-615,-7L-620,-17L-620,-25L-617,-31L-614,-43L-617,-49L-623,-50L-630,-53L-635,-57L-639,-63L-634,-78L-632,-80L-617,-92L-609,-101L-604,-108L-596,-113L-592,-114L-589,-114L-584,-109L-584,-104L-579,-97L-576,-97L-562,-101L-558,-101L-547,-100L-533,-103L-532,-107L-529,-112L-520,-119L-518,-122L-511,-135L-509,-137L-485,-147L-473,-161L-468,-169L-459,-187L-441,-192L-436,-197L-436,-207L-431,-211L-421,-221L-415,-226L-414,-226L-403,-232L-403,-235L-406,-237L-406,-239L-401,-252L-403,-264L-397,-271L-393,-274L-379,-279L-371,-280L-368,-283L-368,-288L-371,-291L-380,-296L-387,-297L-392,-305L-390,-312L-402,-314L-404,-316L-402,-321L-406,-326L-412,-333L-413,-338L-407,-344L-405,-349L-406,-351L-411,-357L-409,-363L-406,-365L-400,-366L-398,-369L-403,-372L-409,-374L-407,-384L-408,-387L-412,-389L-413,-391L-404,-403L-391,-407L-367,-398L-358,-397L-348,-391L-343,-388L-339,-388L-333,-390L-325,-394L-320,-394L-309,-397L-304,-395L-299,-397L-295,-402L-287,-405L-284,-411L-253,-425L-250,-423L-244,-424L-247,-413L-245,-408L-240,-385L-238,-382L-225,-377L-216,-368L-215,-366L-217,-361L-225,-356L-225,-355L-225,-343L-226,-329L-221,-321L-215,-315L-214,-313L-216,-306L-213,-302L-214,-281L-218,-280L-221,-276L-227,-275L-229,-278L-234,-287L-245,-286L-246,-286L-245,-279L-245,-274L-244,-270L-236,-257L-238,-250L-238,-247L-235,-241L-238,-235L-237,-233L-237,-226L-232,-228L-229,-227L-227,-231L-224,-230L-216,-216L-207,-207L-198,-208L-187,-198L-185,-198L-183,-197L-183,-193L-184,-188L-181,-187L-168,-181L-162,-176L-153,-170L-153,-166L-157,-167L-166,-159L-172,-155L-179,-148L-183,-141L-186,-134L-186,-129L-188,-123L-192,-119L-196,-109L-182,-96L-180,-95L-178,-98L-175,-97L-169,-91L-153,-80L-147,-73L-141,-67L-126,-57L-118,-58L-109,-50L-102,-46L-95,-46L-93,-46L-91,-38L-68,-30L-62,-34L-57,-34L-46,-29L-43,-32L-35,-34L-29,-31L-14,-24L-12,-14L-11,-12L-1,-6L2,-4L8,-2L9,1Z " data-iso="IND"/><path d="M438,2L432,7L427,8L424,10L422,16L421,22L422,29L425,36L421,43L420,49L412,61L407,64L405,67L402,76L409,81L409,83L404,97L401,103L392,118L386,139L381,138L367,133L357,134L353,130L351,133L354,144L356,149L355,165L354,174L352,179L345,181L346,185L342,194L346,211L344,218L342,218L338,228L333,227L329,223L326,222L323,227L321,229L321,231L322,246L323,262L320,260L311,254L308,255L305,258L304,261L306,270L308,272L311,285L313,288L323,299L329,299L328,295L329,295L331,299L450,299L450,0L441,0L438,2Z " data-iso="MMR"/><path d="M31,2L32,8L37,10L43,8L48,10L53,11L72,19L74,19L85,14L88,20L96,23L102,21L111,22L120,20L126,23L129,21L133,7L133,3L132,0L29,0L31,2Z M9,1L14,3L20,1L22,0L8,0L9,1Z " data-iso="NPL"/></g><g fill="red" fill-opacity="0.35" id="regions"><path d="M233,166L228,164L230,166L233,166Z M201,70L200,70L199,73L199,77L197,79L195,86L196,95L201,101L199,113L201,133L197,136L196,139L197,142L191,144L189,144L182,139L182,139L182,141L182,142L180,148L182,150L185,150L189,157L188,159L193,161L194,168L194,171L196,171L197,174L199,174L196,176L198,178L203,186L206,188L206,188L208,188L210,186L216,179L219,180L221,183L223,179L228,181L229,180L229,179L234,178L235,175L236,171L234,168L226,165L221,161L233,164L234,161L234,155L236,154L235,157L235,159L239,158L239,156L240,156L242,150L240,148L242,142L246,141L248,142L250,139L254,131L253,130L254,127L255,125L258,124L259,123L259,123L262,119L261,116L262,115L261,110L260,106L262,104L258,99L257,94L252,95L251,94L248,89L250,85L249,81L245,82L236,80L234,81L222,80L215,79L206,75L201,71L201,70Z " data-fips="BG81" data-fips-="BG32" data-iso3="BGD" data-name="Dhaka"/><path d="M172,241L172,239L168,238L170,241L172,241Z M156,126L153,131L154,132L153,140L149,141L148,146L147,151L148,153L151,155L157,160L153,168L154,170L157,171L163,172L164,173L161,177L161,185L162,187L164,189L162,194L164,201L164,202L166,208L166,210L166,215L169,219L169,221L169,225L170,228L169,233L170,237L174,238L175,242L175,244L177,245L179,244L178,237L179,237L182,232L181,231L182,239L186,239L189,230L187,227L188,227L187,222L187,224L186,218L187,215L187,220L189,224L189,229L190,229L191,223L192,222L190,230L191,233L189,240L191,243L194,240L196,240L193,235L194,232L194,234L197,237L200,237L204,234L203,227L203,225L203,219L202,216L204,212L204,209L207,208L209,207L208,202L205,197L205,195L206,194L207,189L206,188L206,188L203,186L198,178L196,176L199,174L197,174L196,171L194,171L194,168L193,161L188,159L189,157L185,150L182,150L180,148L182,142L182,141L182,139L181,138L175,138L170,135L170,134L166,128L156,128L156,126L156,126Z " data-fips="BG82" data-fips-="BG46" data-iso3="BGD" data-name="Khulna"/><path d="M235,232L235,229L232,232L232,235L235,232Z M224,236L225,229L223,234L224,236Z M228,233L230,230L228,226L227,227L228,233Z M236,221L231,224L231,227L233,229L236,221Z M252,215L251,214L251,216L252,215Z M245,222L246,220L247,206L244,203L243,200L240,198L238,192L234,193L234,200L238,204L239,216L237,220L237,223L235,227L239,224L237,228L239,228L240,226L243,225L245,222Z M235,187L230,188L230,192L232,196L233,193L239,190L239,190L235,187Z M237,183L234,180L231,183L238,186L237,183Z M230,181L231,179L229,179L230,181Z M206,188L207,189L206,194L205,195L205,197L208,202L209,207L209,207L209,208L205,213L204,217L205,219L206,226L206,229L209,229L209,227L212,221L213,221L209,228L211,229L216,223L211,231L212,236L215,232L213,237L216,238L219,237L221,235L223,229L226,222L226,224L228,225L231,220L235,218L236,214L236,210L235,208L236,207L234,202L230,201L229,205L230,201L232,200L230,194L225,193L232,187L229,181L229,180L228,181L223,179L221,183L219,180L216,179L210,186L208,188L206,188Z " data-fips="BG85" data-fips-="BG|" data-iso3="BGD" data-name="Barisal"/><path d="M294,242L292,239L290,241L291,250L290,250L295,251L295,251L294,242Z M289,241L291,234L289,233L289,240L289,241Z M254,224L260,219L260,212L259,210L256,207L255,220L254,224Z M277,210L276,206L272,200L270,204L271,208L273,211L275,212L277,210Z M259,123L258,124L255,125L254,127L253,130L254,131L250,139L248,142L246,141L242,142L240,148L242,150L240,156L240,156L236,160L236,166L237,167L238,170L237,173L237,180L240,185L244,194L245,196L251,202L254,200L261,201L264,199L260,195L265,196L270,193L270,192L274,186L273,193L276,196L282,203L285,211L286,216L292,208L290,213L288,214L288,220L290,223L291,230L292,235L292,238L295,239L296,245L298,245L297,252L295,254L298,261L299,268L302,273L305,275L306,278L310,286L311,287L308,276L308,272L306,271L304,267L307,255L310,253L312,254L313,257L315,258L319,258L321,263L324,260L323,255L321,240L320,225L319,222L321,220L318,205L317,196L313,187L312,186L310,173L311,168L308,161L306,148L305,148L304,151L302,147L296,152L292,148L293,158L291,161L287,163L285,167L285,172L287,178L282,182L276,183L274,180L272,173L269,170L268,170L269,177L267,178L265,175L265,165L262,159L261,159L258,152L260,151L258,148L261,146L262,143L261,140L263,137L265,135L265,135L264,128L266,124L266,124L262,125L259,123Z " data-fips="BG80" data-fips-="BG" data-iso3="BGD" data-name="Chittagong"/><path d="M249,81L250,85L248,89L251,94L252,95L257,94L258,99L262,104L260,106L261,110L262,115L261,116L262,119L259,123L259,123L262,125L266,124L266,124L264,128L265,135L266,136L267,132L270,130L276,131L278,130L280,125L282,128L283,125L288,128L290,127L291,123L290,120L293,118L299,116L299,111L301,109L305,98L304,94L305,92L311,95L313,95L315,91L311,88L310,86L304,84L296,80L286,80L276,81L270,82L262,79L250,81L249,81Z " data-fips="BG86" data-fips-="" data-iso3="BGD" data-name="Sylhet"/><path d="M156,126L156,128L166,128L170,134L170,135L175,138L181,138L182,139L182,139L189,144L191,144L197,142L196,139L197,136L201,133L199,113L201,101L196,95L195,86L197,79L199,77L199,73L200,70L201,70L201,69L203,59L201,50L203,45L199,40L198,35L195,31L192,38L193,38L190,44L173,35L171,27L170,24L168,22L164,22L164,25L170,30L163,28L161,31L157,28L154,29L155,27L154,22L148,19L146,16L144,16L143,12L142,12L141,19L146,21L147,23L144,24L141,26L140,30L136,32L132,35L132,38L129,45L131,51L137,51L139,54L143,57L143,60L149,65L153,66L157,65L160,67L159,70L161,73L166,76L159,79L159,80L152,79L143,80L143,87L139,94L134,90L130,92L126,103L128,107L128,109L130,111L142,117L148,120L153,119L156,121L156,125L156,126Z " data-fips="BG83" data-fips-="BG70" data-iso3="BGD" data-name="Rajshahi"/></g></svg> \ No newline at end of file
diff --git a/plugins/UserCountryMap/svg/CHN.svg b/plugins/UserCountryMap/svg/CHN.svg
index 8a926d0579..e414fbb7c1 100644
--- a/plugins/UserCountryMap/svg/CHN.svg
+++ b/plugins/UserCountryMap/svg/CHN.svg
@@ -1 +1,2 @@
-<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'><svg enable_background="new 0 0 450 451" height="451px" pretty_print="False" style="stroke-linejoin: round; stroke:#000; fill: none;" version="1.1" viewBox="0 0 450 451" width="450px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"><![CDATA[path { fill-rule: evenodd; }]]></style></defs><metadata><views><view h="451" padding="0.06" w="450"><proj id="laea" lat0="37.6908779974" lon0="102.879992202"/><bbox h="489.34" w="596.01" x="693.71" y="754.35"/></view></views></metadata><g class="" id="context"><path d="M25,200L25,200L24,198L26,198L28,199L28,199L28,198L27,197L19,193L14,194L12,195L4,195L4,191L7,186L5,184L6,182L0,180L0,200L8,197L11,197L20,200L24,200L25,200Z M0,206L0,206L0,206L0,206Z " data-iso="AFG"/><path d="M136,370L135,369L135,370L136,370Z M129,364L129,360L128,364L129,364Z M133,362L132,361L132,362L133,362Z M126,364L127,360L125,359L124,364L126,364Z M111,363L114,366L120,363L122,364L125,362L124,357L125,356L124,352L125,351L126,355L128,359L133,357L135,363L136,374L138,377L139,377L138,372L141,373L142,367L142,367L142,366L140,351L137,352L135,356L132,355L131,353L133,346L137,346L141,340L143,339L137,337L125,335L121,333L121,325L119,327L115,323L111,321L107,326L113,333L109,333L106,337L110,344L109,347L111,352L111,353L111,362L111,363Z " data-iso="BGD"/><path d="M138,312L135,309L134,310L128,308L127,306L118,310L116,312L116,314L115,314L117,319L121,320L127,319L130,321L141,321L141,316L138,314L138,313L138,312L138,312Z " data-iso="BTN"/><path d="M381,268L377,266L376,266L381,268Z M387,282L385,280L384,280L387,282Z M388,282L387,282L388,283L388,282Z M382,301L381,300L381,300L382,301Z M302,387L293,388L287,390L283,395L283,401L291,404L298,399L300,393L303,390L302,387Z M314,106L314,107L311,121L310,124L313,126L315,124L321,124L324,122L327,121L333,123L339,131L333,132L324,135L324,137L322,137L315,147L307,149L307,150L302,155L291,154L290,163L291,164L283,176L276,179L267,180L258,182L248,187L243,188L242,186L237,187L222,180L208,179L192,177L187,177L186,175L179,162L170,154L155,151L152,147L155,142L154,133L152,126L148,123L143,120L140,116L140,111L140,111L139,111L138,111L137,111L137,111L137,111L136,111L135,110L130,115L125,117L123,126L117,128L111,126L106,125L99,136L98,141L94,138L83,138L85,141L83,147L83,155L79,158L77,164L77,164L77,165L63,168L60,170L51,169L46,173L42,172L42,169L37,169L33,171L29,172L26,176L26,176L26,176L24,184L29,185L31,188L29,195L30,197L28,199L28,199L28,199L26,198L24,198L25,200L25,200L25,200L33,207L34,214L37,217L37,217L38,218L41,219L42,220L44,221L44,221L44,221L44,221L46,230L50,234L47,239L49,244L49,244L49,244L48,246L49,247L48,250L48,251L48,251L45,252L44,249L42,252L43,254L42,261L47,266L49,266L57,275L57,276L57,276L60,275L65,276L68,280L75,289L79,289L80,293L88,300L91,301L96,305L97,304L103,307L109,307L110,308L110,307L114,306L116,307L115,313L116,314L116,312L118,310L127,306L128,308L134,310L135,309L138,312L138,312L139,312L145,312L152,306L158,305L165,301L169,303L176,300L178,302L178,310L185,312L186,312L186,312L192,313L192,315L196,319L197,328L196,331L193,337L191,337L186,347L187,348L186,352L191,351L197,351L197,358L201,363L200,367L200,370L206,371L206,373L212,375L215,373L216,375L216,375L217,375L217,378L222,378L221,373L222,367L224,367L225,367L225,367L238,364L240,366L242,364L244,364L247,363L248,361L256,361L257,362L264,362L265,363L263,367L265,370L276,374L277,374L280,373L280,371L286,375L290,373L292,376L294,385L295,385L299,382L295,379L297,375L302,373L305,373L310,369L316,369L320,365L323,364L323,364L323,364L323,364L324,364L324,364L321,358L327,361L328,361L328,361L329,360L330,361L330,360L332,360L337,357L339,358L346,354L347,355L355,346L355,347L360,341L358,339L361,338L361,338L361,338L361,338L365,336L367,331L369,330L369,328L372,328L370,322L368,323L370,315L372,314L373,316L376,310L378,303L381,298L384,298L383,295L384,293L382,290L385,290L385,287L381,287L385,283L380,281L376,282L370,282L382,273L380,270L372,267L372,265L380,265L376,261L371,259L371,256L365,246L362,244L355,242L355,241L360,231L361,227L364,227L366,222L376,217L376,212L371,213L365,213L362,211L359,214L356,219L350,218L350,215L348,212L341,212L338,206L338,203L348,199L349,195L355,190L359,183L362,182L367,186L363,196L367,199L374,191L383,186L383,186L386,181L392,175L394,169L394,167L396,165L398,167L405,167L403,162L409,157L412,154L412,148L417,151L417,151L417,151L419,146L415,127L417,124L424,124L425,123L424,119L426,111L425,109L425,99L426,96L420,92L415,96L413,101L404,104L401,101L398,96L392,93L386,92L380,93L377,91L374,84L370,81L367,75L358,66L339,66L331,71L328,75L333,82L331,86L328,98L329,101L322,107L316,106L314,106Z M316,370L316,370L316,370L316,370Z M297,377L297,378L298,378L297,377Z " data-iso="CHN"/><path d="M328,364L327,363L326,364L328,364Z M330,361L329,360L328,361L328,361L328,361L327,362L330,361L330,361Z " data-iso="HKG"/><path d="M145,506L143,504L145,502L145,506Z M142,495L142,494L142,494L142,495Z M139,493L138,493L138,492L139,493Z M136,484L135,484L136,483L136,484Z M134,471L132,469L134,468L134,471Z M136,464L135,463L135,463L136,464Z M139,458L140,459L139,459L139,458Z M136,462L135,461L139,445L139,454L137,458L136,462Z M43,255L42,255L42,261L43,262L42,261L46,264L47,266L49,266L50,267L50,267L57,275L57,276L56,275L51,278L47,286L49,289L55,293L59,298L65,301L70,305L75,306L81,308L97,319L100,320L109,316L109,312L110,308L110,308L110,307L114,306L116,307L115,313L116,314L115,314L117,319L121,320L127,319L130,321L141,321L141,316L138,314L138,313L138,312L139,312L145,312L152,306L158,305L165,301L169,303L176,300L178,302L178,310L185,312L186,312L185,313L182,317L183,322L180,320L175,321L169,325L166,326L166,331L161,338L162,340L155,350L150,348L150,355L146,365L142,366L142,367L142,366L140,351L137,352L135,356L132,355L131,353L133,346L137,346L141,340L143,339L137,337L125,335L121,333L121,325L119,327L115,323L111,321L107,326L113,333L109,333L106,337L110,344L109,347L111,352L111,353L111,362L111,363L111,366L108,366L107,364L106,366L103,365L101,363L95,365L91,367L85,377L79,380L78,377L75,381L71,384L64,390L60,391L47,398L44,403L38,403L33,408L32,407L28,406L24,412L24,419L23,420L23,434L18,440L17,444L16,455L12,455L7,460L-1,465L-2,469L-5,470L-12,467L-17,456L-16,452L-21,433L-24,429L-25,424L-27,406L-29,401L-30,393L-32,389L-32,385L-32,374L-32,362L-30,360L-31,352L-28,344L-26,336L-29,335L-27,330L-30,329L-32,332L-31,335L-46,339L-52,329L-55,323L-54,320L-46,320L-42,316L-49,317L-53,315L-55,312L-58,303L-56,303L-52,301L-46,303L-45,305L-38,305L-38,306L-34,306L-34,303L-34,294L-37,292L-38,290L-36,285L-40,280L-32,272L-22,276L-18,274L-6,266L-0,261L1,261L3,258L10,254L11,248L16,242L15,242L11,233L14,226L12,223L14,220L17,220L27,225L34,225L38,223L38,223L39,222L42,221L43,221L44,221L44,221L46,230L50,234L47,239L49,244L49,244L48,246L49,247L48,250L48,251L45,252L44,249L42,252L43,254L43,255Z " data-iso="IND"/><path d="M412,328L410,330L411,330L412,328Z M421,324L420,323L420,323L421,324Z M440,301L437,305L438,304L440,301Z M446,285L444,285L445,286L446,285Z M450,261L449,262L449,263L450,261Z M441,252L441,251L440,251L441,252Z M444,243L443,243L442,243L444,243Z M433,243L432,240L432,241L433,243Z M435,238L435,237L435,237L435,238Z M450,230L444,229L441,230L440,232L437,236L436,237L440,240L437,239L439,243L442,237L445,241L443,247L444,253L448,254L447,251L450,255L450,230Z M431,230L430,229L431,230L431,230Z M432,228L431,225L430,226L432,228Z M450,216L445,224L443,226L444,228L449,226L450,216Z " data-iso="JPN"/><path d="M44,221L42,220L41,219L38,218L37,217L37,218L37,219L38,222L38,223L39,222L42,221L43,221L44,221L44,221Z " data-iso="KAS"/><path d="M17,144L17,144L21,141L27,143L30,146L35,146L36,144L41,143L45,148L58,151L71,157L72,160L76,163L77,164L77,164L79,158L83,155L83,147L85,141L83,138L94,138L98,141L99,136L106,125L111,126L117,128L123,126L125,117L130,115L135,110L136,111L137,111L137,110L133,106L134,104L131,106L125,103L123,97L121,96L120,91L119,89L112,90L106,88L105,84L103,82L98,86L93,60L89,52L92,48L83,49L76,52L71,51L73,46L69,43L62,40L64,36L65,29L60,27L52,25L48,27L38,24L27,23L14,18L10,24L13,28L13,29L8,26L4,32L0,32L2,40L0,44L0,149L10,146L13,145L17,145L17,144Z M81,120L82,120L82,122L82,122L79,124L76,123L76,123L74,122L73,121L69,120L67,119L67,118L62,117L60,116L57,116L57,116L55,116L54,118L52,119L51,118L50,119L49,121L49,121L47,122L46,126L45,127L46,125L45,122L45,121L44,120L47,117L47,115L49,116L49,115L50,114L52,114L54,113L55,112L58,113L59,114L62,114L65,116L66,117L69,118L69,119L71,119L74,119L76,121L77,121L79,120L79,120L81,120Z " data-iso="KAZ"/><path d="M26,176L26,176L29,172L33,171L37,169L42,169L42,172L46,173L51,169L60,170L63,168L77,165L77,164L76,163L72,160L71,157L58,151L45,148L41,143L36,144L35,146L30,146L27,143L21,141L17,144L17,144L18,144L19,146L15,147L16,155L27,162L19,163L16,165L11,162L11,162L11,163L4,160L1,160L0,165L12,170L12,170L16,175L19,174L25,176L26,176Z M11,166L10,165L10,164L11,166Z M8,165L6,165L6,165L8,165Z M65,157L64,157L62,158L61,159L59,159L57,159L55,158L53,156L51,155L51,155L53,154L55,154L59,154L61,155L62,155L65,155L64,156L65,157Z " data-iso="KGZ"/><path d="M274,437L273,437L261,445L259,445L253,441L252,441L252,441L251,441L233,442L228,448L226,449L275,449L273,444L273,443L274,438L274,437Z " data-iso="KHM"/><path d="M412,245L415,241L411,242L412,245Z M408,234L408,233L407,234L408,234Z M407,231L407,230L406,230L407,231Z M405,214L404,214L404,215L405,214Z M434,196L434,196L433,197L434,196Z M403,202L406,206L403,210L405,212L409,220L407,226L411,234L415,229L417,230L418,226L423,225L428,221L427,213L424,202L416,195L414,191L405,197L404,202L403,202Z " data-iso="KOR"/><path d="M225,368L232,374L231,378L234,382L239,383L244,382L244,385L247,386L249,389L246,393L242,394L241,396L251,401L252,404L264,418L265,420L272,425L270,427L274,436L274,437L273,437L261,445L259,445L253,441L252,441L253,441L256,435L254,426L251,424L249,422L249,414L241,405L236,404L233,407L233,407L233,407L233,407L232,408L227,408L224,406L215,412L216,406L217,399L214,393L209,392L210,387L207,387L207,386L207,386L211,381L211,381L215,376L216,375L217,375L217,378L222,378L221,373L222,367L224,367L225,367L225,368Z " data-iso="LAO"/><path d="M323,364L323,364L324,364L324,364L324,364L323,364L323,364L323,364L323,364Z " data-iso="MAC"/><path d="M158,425L158,424L157,425L158,425Z M155,424L156,421L154,423L155,424Z M183,423L183,420L182,421L183,423Z M150,390L151,392L151,392L150,390Z M148,387L147,386L148,388L148,387Z M144,386L143,384L143,385L144,386Z M207,386L207,386L211,381L211,381L215,376L216,375L216,375L215,373L212,375L206,373L206,371L200,370L200,367L201,363L197,358L197,351L191,351L186,352L187,348L186,347L191,337L193,337L196,331L197,328L196,319L192,315L192,313L186,312L186,312L185,313L182,317L183,322L180,320L175,321L169,325L166,326L166,331L161,338L162,340L155,350L150,348L150,355L146,365L142,366L142,367L142,367L141,373L138,372L139,377L139,378L142,382L145,382L151,390L148,391L151,396L152,394L155,403L157,409L156,411L153,418L152,422L154,422L157,419L156,424L162,426L164,425L166,422L174,419L177,415L180,415L181,420L184,421L183,425L187,442L190,449L197,449L196,444L192,440L188,432L192,431L192,425L193,423L191,416L185,408L182,402L185,402L189,391L196,391L197,388L201,388L201,386L206,386L207,386Z " data-iso="MMR"/><path d="M314,105L308,106L304,104L298,105L287,113L277,116L270,116L266,116L262,113L262,111L253,107L245,106L236,109L228,105L228,104L217,95L214,94L209,91L205,94L202,100L203,104L203,109L197,112L184,109L182,108L180,103L173,101L169,99L168,100L158,104L155,104L152,107L149,108L142,108L140,111L140,111L140,111L140,116L143,120L148,123L152,126L154,133L155,142L152,147L155,151L170,154L179,162L186,175L187,177L192,177L208,179L222,180L237,187L242,186L243,188L248,187L258,182L267,180L276,179L283,176L291,164L290,163L291,154L302,155L307,150L307,149L315,147L322,137L324,137L324,135L333,132L339,131L333,123L327,121L324,122L321,124L315,124L313,126L310,124L311,121L314,107L314,106L314,105Z " data-iso="MNG"/><path d="M109,307L103,307L97,304L96,305L91,301L88,300L80,293L79,289L75,289L68,280L65,276L60,275L57,276L57,276L56,275L51,278L47,286L49,289L55,293L59,298L65,301L70,305L75,306L81,308L97,319L100,320L109,316L109,312L110,308L110,308L109,307Z " data-iso="NPL"/><path d="M1,261L3,258L10,254L11,248L16,242L15,242L11,233L14,226L12,223L14,220L17,220L27,225L34,225L38,223L38,223L38,222L37,219L37,218L37,217L37,217L34,214L33,207L25,200L25,200L24,200L20,200L11,197L8,197L0,200L0,206L0,206L0,206L0,261L1,261Z " data-iso="PAK"/><path d="M414,443L414,442L414,443L414,443Z M444,449L440,441L441,439L437,436L431,438L433,442L436,444L436,446L439,449L444,449Z M424,442L419,440L420,445L422,443L427,445L427,444L424,442Z M411,442L410,442L411,442L411,442Z M419,437L416,435L416,436L419,437Z M395,436L392,437L396,440L397,442L400,446L404,442L403,438L400,435L395,436Z M391,434L390,434L391,434L391,434Z M428,428L427,424L426,429L428,428Z M406,420L404,420L405,421L406,420Z M393,388L390,389L388,398L389,403L389,410L390,411L385,411L388,424L391,426L393,423L397,425L394,429L394,431L400,433L405,430L407,431L413,435L411,429L412,429L418,432L419,435L423,436L425,435L426,438L427,434L421,429L424,427L419,426L418,428L415,426L406,429L402,423L403,423L400,416L401,412L404,409L408,399L404,394L404,389L403,387L401,390L393,388Z M400,384L400,383L399,385L400,384Z M394,383L394,383L394,384L394,383Z M399,371L398,370L398,371L399,371Z M397,367L397,366L397,367L397,367Z " data-iso="PHL"/><path d="M387,189L387,189L387,190L387,189Z M383,186L385,189L386,188L391,189L391,191L391,195L392,197L389,203L393,202L395,205L397,202L403,202L404,202L405,197L414,191L413,191L408,188L405,188L405,182L414,173L417,167L414,162L416,157L419,154L419,153L419,153L417,152L417,151L417,151L412,148L412,154L409,157L403,162L405,167L398,167L396,165L394,167L394,169L392,175L386,181L383,186L383,186Z " data-iso="PRK"/><path d="M450,34L441,21L438,20L437,22L441,29L439,30L441,33L445,43L450,47L450,34Z M409,27L408,27L409,29L409,27Z M413,25L410,25L413,30L414,26L413,25Z M0,32L4,32L8,26L13,29L13,28L10,24L14,18L27,23L38,24L48,27L52,25L60,27L65,29L64,36L62,40L69,43L73,46L71,51L76,52L83,49L92,48L89,52L93,60L98,86L103,82L105,84L106,88L112,90L119,89L120,91L121,96L123,97L125,103L131,106L134,104L133,106L137,110L137,111L137,111L137,111L138,111L139,111L140,111L140,111L142,108L149,108L152,107L155,104L158,104L168,100L169,99L173,101L180,103L182,108L184,109L197,112L203,109L203,104L202,100L205,94L209,91L214,94L217,95L228,104L228,105L236,109L245,106L253,107L262,111L262,113L266,116L270,116L277,116L287,113L298,105L304,104L308,106L314,105L314,106L316,106L322,107L329,101L328,98L331,86L333,82L328,75L331,71L339,66L358,66L367,75L370,81L374,84L377,91L380,93L386,92L392,93L398,96L401,101L404,104L413,101L415,96L420,92L426,96L425,99L425,109L426,111L424,119L425,123L424,124L417,124L415,127L419,146L417,151L417,151L417,152L419,153L419,153L419,153L423,142L426,141L427,144L433,144L443,132L444,129L444,123L446,118L450,103L450,67L448,61L445,58L443,48L444,44L436,36L438,35L437,32L432,32L425,28L423,30L420,30L422,37L416,40L417,36L413,39L410,32L405,34L401,34L402,29L406,19L407,12L410,0L0,0L0,32Z M268,58L268,64L268,67L268,70L268,71L266,74L266,76L266,76L264,74L263,77L265,77L265,78L262,81L262,81L260,84L258,85L254,87L254,89L252,88L251,89L251,91L250,92L249,94L248,95L243,97L239,96L236,95L237,95L242,94L244,93L247,91L248,88L249,87L252,85L254,82L253,82L255,80L257,78L258,77L260,74L261,73L263,66L264,64L265,63L265,61L265,58L267,56L268,56L269,57L268,58Z " data-iso="RUS"/><path d="M252,441L253,441L256,435L254,426L251,424L249,422L249,414L241,405L236,404L233,407L232,408L227,408L224,406L215,412L216,406L217,399L214,393L209,392L210,387L207,387L207,386L206,386L201,386L201,388L197,388L196,391L189,391L185,402L182,402L185,408L191,416L193,423L192,425L192,431L188,432L192,440L196,444L197,449L206,449L210,449L210,448L212,449L226,449L228,448L233,442L251,441L252,441L252,441Z " data-iso="THA"/><path d="M8,165L6,165L6,165L8,165Z M11,162L10,162L8,162L8,159L11,158L10,154L0,158L1,160L4,160L11,163L11,162Z M28,199L28,199L30,197L29,195L31,188L29,185L24,184L26,176L26,176L25,176L19,174L16,175L12,170L12,170L0,165L0,180L6,182L5,184L7,186L4,191L4,195L12,195L14,194L19,193L27,197L28,198L28,199Z " data-iso="TJK"/><path d="M363,338L362,338L363,338L363,338Z M387,351L390,343L392,332L391,330L387,326L384,329L382,335L379,344L379,348L381,352L387,358L387,351Z " data-iso="TWN"/><path d="M11,166L10,164L10,165L11,166Z M11,162L11,162L16,165L19,163L27,162L16,155L15,147L19,146L18,144L17,144L17,145L13,145L10,146L0,149L0,158L10,154L11,158L8,159L8,162L10,162L11,162Z " data-iso="UZB"/><path d="M266,381L266,380L265,381L266,381Z M273,377L271,377L271,378L273,377Z M276,374L265,370L263,367L265,363L264,362L257,362L256,361L248,361L247,363L244,364L242,364L240,366L238,364L225,367L225,367L225,368L232,374L231,378L234,382L239,383L244,382L244,385L247,386L249,389L246,393L242,394L241,396L251,401L252,404L264,418L265,420L272,425L270,427L274,436L274,437L274,438L273,443L273,444L275,449L291,449L291,444L286,430L283,429L278,422L276,421L266,413L263,408L258,403L256,399L259,390L265,382L265,380L268,379L275,375L276,374Z " data-iso="VNM"/></g><g class="" id="regions"><path d="M187,177L187,177L187,177L184,179L183,184L177,185L173,186L163,196L161,196L160,208L160,208L160,208L171,207L178,211L181,213L185,216L188,217L192,211L196,214L202,212L204,213L207,216L210,219L211,217L215,221L222,226L225,226L225,227L229,230L228,232L230,234L231,238L232,239L230,245L227,247L227,248L224,253L223,253L225,257L223,259L216,256L216,260L218,263L223,264L223,264L223,264L224,265L223,268L228,264L227,263L232,257L235,262L241,263L245,272L249,272L252,269L252,270L253,270L255,268L254,265L256,263L257,263L259,262L260,257L261,256L259,252L260,249L267,250L268,246L275,245L274,241L275,236L264,231L264,230L264,230L260,229L258,236L259,238L261,239L262,242L258,243L258,247L255,245L254,245L253,243L250,242L251,239L249,233L243,228L242,228L242,228L237,224L235,224L235,218L241,212L238,209L234,210L228,211L225,212L225,214L222,216L220,215L217,212L216,209L214,209L207,204L212,197L211,195L209,195L203,196L198,198L199,195L196,191L195,189L196,188L192,177L187,177Z " data-fips="CH15" data-fips-="" data-iso3="CHN" data-name="Gansu" data-p="GS"/><path d="M223,264L218,263L216,260L216,256L223,259L225,257L223,253L224,253L227,248L227,247L230,245L232,239L231,238L230,234L228,232L229,230L225,227L225,226L222,226L215,221L211,217L210,219L207,216L204,213L202,212L196,214L192,211L188,217L185,216L181,213L178,211L171,207L160,208L160,208L160,208L152,209L139,212L140,218L144,222L145,223L143,227L142,227L141,230L143,231L143,235L141,235L135,232L132,233L132,233L131,240L130,240L132,245L130,253L133,258L142,261L152,267L157,269L160,270L166,269L170,273L172,275L172,278L181,279L183,277L185,277L188,272L191,272L191,272L189,268L189,263L189,260L195,259L197,260L207,271L207,269L214,273L218,272L218,267L220,267L223,265L223,264L223,264Z " data-fips="" data-fips-="" data-iso3="CHN" data-name="Qinghai" data-p=""/><path d="M286,378L286,378L286,378L286,378Z M287,332L286,332L285,335L283,334L281,337L280,337L276,339L276,340L266,338L266,340L264,341L259,344L256,346L253,344L250,343L247,347L246,345L245,346L245,346L247,348L251,349L251,351L258,351L260,353L258,357L257,357L254,360L254,360L262,362L265,363L263,366L265,370L267,372L272,374L276,374L279,372L280,373L283,372L287,375L290,372L291,373L291,373L293,370L297,370L296,367L300,366L300,363L305,358L304,356L308,349L309,342L309,342L309,342L306,342L305,343L302,339L302,337L303,332L301,332L302,329L296,329L293,331L287,332L287,332Z " data-fips="CH16" data-fips-="" data-iso3="CHN" data-name="Guangxi" data-p="GX"/><path d="M283,309L282,312L279,311L278,309L277,308L275,304L268,304L269,306L264,307L262,310L261,307L260,310L260,310L260,310L257,308L254,310L254,312L259,315L259,317L251,318L251,318L251,318L246,322L244,321L238,325L240,329L242,328L245,328L245,331L243,337L247,341L245,346L245,346L246,345L247,347L250,343L253,344L256,346L259,344L264,341L266,340L266,338L276,340L276,339L280,337L281,337L283,334L285,335L286,332L287,332L286,331L285,329L286,325L287,324L286,322L281,323L285,316L284,315L284,309L284,309L283,309Z " data-fips="CH18" data-fips-="" data-iso3="CHN" data-name="Guizhou" data-p="GZ"/><path d="M284,279L280,277L278,276L276,275L276,275L275,275L276,279L272,287L268,289L266,294L265,296L262,296L261,294L258,294L255,292L253,296L254,298L252,299L251,302L254,303L257,306L258,306L260,309L260,310L260,310L261,307L262,310L264,307L269,306L268,304L275,304L277,308L278,309L279,311L282,312L283,309L284,309L284,309L284,308L284,307L283,304L283,304L282,303L280,299L278,297L276,298L276,291L280,290L283,290L287,287L289,287L289,282L286,280L285,279L284,279L284,279Z " data-fips="CH33" data-fips-="CH18|CH32" data-iso3="CHN" data-name="Chongqing" data-p="CQ"/><path d="M333,193L332,191L328,188L326,188L327,189L322,192L323,194L320,198L323,202L330,200L331,200L331,200L331,200L331,200L331,199L331,199L331,199L330,197L330,197L332,195L333,195L333,195L334,194L334,194L334,193L333,193Z " data-fips="CH22" data-fips-="" data-iso3="CHN" data-name="Beijing" data-p="BJ"/><path d="M356,346L356,347L356,346L356,346Z M361,338L360,338L361,338L361,338Z M369,328L370,327L369,327L369,328Z M373,326L373,326L373,326L373,326Z M369,323L368,322L368,323L369,323Z M371,322L371,321L371,321L371,322Z M359,303L358,303L354,308L350,309L348,316L345,318L346,321L341,334L341,337L341,337L342,337L346,337L347,339L349,338L351,342L352,346L354,347L354,347L359,341L358,339L360,337L362,337L367,333L366,331L370,329L369,327L371,326L372,322L370,323L371,320L373,318L370,315L374,314L373,317L375,316L374,312L375,309L376,310L376,310L376,309L363,309L363,307L359,303L359,303Z " data-fips="CH07" data-fips-="" data-iso3="CHN" data-name="Fujian" data-p="FJ"/><path d="M364,275L361,274L358,275L357,271L353,269L355,265L354,264L356,262L359,262L356,259L354,261L352,262L350,258L348,257L349,253L346,253L346,252L339,248L334,246L334,246L334,247L333,247L333,247L333,247L333,247L333,248L337,252L333,254L330,253L328,260L326,264L334,271L330,277L330,277L330,278L333,279L335,281L336,286L338,291L338,292L339,292L342,288L344,289L345,292L348,290L350,291L355,292L355,293L356,292L360,287L360,283L362,283L364,276L364,275L364,275Z " data-fips="CH01" data-fips-="" data-iso3="CHN" data-name="Anhui" data-p="AH"/><path d="M299,379L299,378L299,378L299,379Z M297,377L298,378L298,377L297,377Z M298,376L298,376L299,376L298,376Z M316,370L316,370L316,370L316,370Z M322,367L322,367L321,367L322,367Z M322,365L322,365L322,365L322,365Z M353,349L353,349L352,349L353,349Z M309,342L309,342L308,349L304,356L305,358L300,363L300,366L296,367L297,370L293,370L291,373L291,373L291,379L293,383L297,384L298,382L296,377L297,374L301,374L302,372L308,372L310,368L314,369L319,366L320,365L324,364L323,359L324,358L327,361L330,360L333,361L339,356L340,357L349,354L350,350L354,347L354,347L352,346L351,342L349,338L347,339L346,337L342,337L341,337L341,337L341,339L338,339L329,342L328,340L331,336L330,334L326,335L325,334L324,334L324,334L319,334L317,336L316,340L313,338L310,338L309,342L309,342Z " data-fips="CH30" data-fips-="" data-iso3="CHN" data-name="Guangdong" data-p="GD"/><path d="M132,233L135,232L141,235L143,235L143,231L141,230L142,227L143,227L145,223L144,222L140,218L139,212L152,209L160,208L160,208L160,208L161,196L163,196L173,186L177,185L183,184L184,179L187,177L187,177L186,175L184,172L181,162L179,162L174,158L172,157L165,153L161,153L153,150L152,147L152,145L155,142L153,127L149,125L148,123L145,123L139,114L140,111L133,111L132,113L126,116L123,119L122,127L117,128L112,126L107,123L98,137L100,138L99,140L94,138L88,138L83,138L82,140L84,142L83,146L83,156L80,157L77,161L77,165L74,165L64,168L60,171L56,170L52,168L47,173L45,173L42,169L38,170L32,171L30,171L27,176L26,176L25,185L30,186L31,188L29,195L30,198L24,199L31,204L34,208L37,216L41,220L44,220L45,223L46,230L51,233L56,234L62,226L74,230L78,227L82,229L82,230L86,232L91,233L98,231L101,232L105,231L107,229L124,229L129,231L132,233Z " data-fips="CH13" data-fips-="" data-iso3="CHN" data-name="Xinjiang Uygur" data-p="XJ"/><path d="M266,223L258,219L259,218L259,209L255,212L252,221L250,224L243,227L242,228L243,228L249,233L251,239L250,242L253,243L254,245L255,245L258,247L258,243L262,242L261,239L259,238L258,236L260,229L264,230L264,230L264,230L264,225L266,224L266,223L266,223L266,223Z " data-fips="CH21" data-fips-="" data-iso3="CHN" data-name="Ningxia Hui" data-p="NX"/><path d="M290,207L290,205L287,208L284,207L280,211L276,217L276,222L271,225L269,225L267,223L266,223L266,223L266,224L264,225L264,230L264,230L264,231L275,236L274,241L275,245L268,246L267,250L260,249L259,252L261,256L260,257L259,262L257,263L256,263L254,265L255,268L253,270L252,270L252,270L253,271L256,270L257,272L264,271L264,273L268,274L272,276L276,275L276,275L276,275L278,276L280,277L284,279L284,279L284,279L285,276L283,273L285,271L288,270L288,269L283,265L294,264L294,264L294,263L291,258L291,256L288,252L288,252L288,252L290,243L287,230L289,227L289,222L287,220L287,218L289,216L290,207L290,207L290,207Z " data-fips="CH26" data-fips-="" data-iso3="CHN" data-name="Shaanxi" data-p="SA"/><path d="M312,233L310,231L311,229L314,221L309,214L310,210L314,206L315,203L310,199L314,195L312,195L311,192L311,192L310,192L310,194L307,196L298,198L294,204L293,204L291,207L290,207L290,207L289,216L287,218L287,220L289,222L289,227L287,230L290,243L288,252L288,252L289,252L291,252L294,249L296,249L301,245L308,244L312,240L312,233L312,233L312,233Z " data-fips="CH24" data-fips-="" data-iso3="CHN" data-name="Shanxi" data-p="SX"/><path d="M330,277L324,277L324,275L319,276L318,275L316,270L314,271L312,270L304,271L299,270L294,264L294,264L294,264L283,265L288,269L288,270L285,271L283,273L285,276L284,279L284,279L285,279L286,280L289,282L289,287L287,287L283,290L280,290L276,291L276,298L278,297L280,299L282,303L283,304L283,303L286,299L290,297L292,294L296,294L303,294L307,297L313,296L313,297L315,297L316,294L318,295L319,297L318,299L321,300L321,300L322,299L325,298L328,297L335,291L336,292L338,292L338,292L338,291L336,286L335,281L333,279L330,278L330,277L330,277Z " data-fips="CH12" data-fips-="" data-iso3="CHN" data-name="Hubei" data-p="HU"/><path d="M321,300L318,299L319,297L318,295L316,294L315,297L313,297L313,296L307,297L303,294L296,294L292,294L290,297L286,299L283,303L283,304L283,304L284,307L284,308L284,309L284,309L284,309L284,315L285,316L281,323L286,322L287,324L286,325L285,329L286,331L287,332L287,332L293,331L296,329L302,329L301,332L303,332L302,337L302,339L305,343L306,342L309,342L309,342L309,342L310,338L313,338L316,340L317,336L319,334L324,334L324,334L325,334L325,323L323,323L322,316L320,317L320,314L321,311L322,310L323,304L321,301L321,300L321,300Z " data-fips="CH11" data-fips-="" data-iso3="CHN" data-name="Hunan" data-p="HN"/><path d="M252,269L249,272L245,272L241,263L235,262L232,257L227,263L228,264L223,268L224,265L223,264L223,264L223,265L220,267L218,267L218,272L214,273L207,269L207,271L197,260L195,259L189,260L189,263L189,268L191,272L191,272L195,275L196,278L197,281L199,284L198,284L200,289L201,303L201,303L200,307L202,313L204,309L206,310L208,314L210,318L213,316L216,323L223,333L232,331L231,325L232,321L233,321L236,318L236,315L238,313L239,310L243,310L243,312L246,317L249,314L251,315L251,317L251,318L251,318L259,317L259,315L254,312L254,310L257,308L260,310L260,310L260,309L258,306L257,306L254,303L251,302L252,299L254,298L253,296L255,292L258,294L261,294L262,296L265,296L266,294L268,289L272,287L276,279L275,275L276,275L276,275L272,276L268,274L264,273L264,271L257,272L256,270L253,271L252,270L252,270L252,269Z " data-fips="CH32" data-fips-="CH27" data-iso3="CHN" data-name="Sichuan" data-p="SC"/><path d="M200,303L199,307L198,305L196,311L195,312L194,311L193,319L194,318L196,319L197,327L195,332L195,335L193,337L191,337L191,338L187,343L186,347L187,350L185,352L190,351L197,351L195,354L197,357L197,359L202,361L200,363L201,365L199,369L205,370L207,375L211,376L216,373L216,376L218,378L221,379L221,373L220,371L226,367L238,364L241,366L242,364L247,363L248,360L251,359L254,360L254,360L257,357L258,357L260,353L258,351L251,351L251,349L247,348L245,346L245,346L245,346L247,341L243,337L245,331L245,328L242,328L240,329L238,325L244,321L246,322L251,318L251,318L251,317L251,315L249,314L246,317L243,312L243,310L239,310L238,313L236,315L236,318L233,321L232,321L231,325L232,331L223,333L216,323L213,316L210,318L208,314L206,310L204,309L202,313L200,307L201,303L200,303Z " data-fips="CH29" data-fips-="" data-iso3="CHN" data-name="Yunnan" data-p="YN"/><path d="M345,182L339,182L338,181L335,173L333,171L327,174L328,177L323,180L320,180L317,183L314,179L308,186L308,189L310,192L311,192L311,192L312,195L314,195L310,199L315,203L314,206L310,210L309,214L314,221L311,229L310,231L312,233L312,233L312,233L315,233L322,235L325,234L326,233L325,233L324,230L332,219L340,211L340,211L339,210L338,210L337,208L337,208L334,208L331,207L332,204L331,200L331,200L330,200L323,202L320,198L323,194L322,192L327,189L326,188L328,188L332,191L333,193L334,193L334,193L336,199L338,199L340,202L340,202L342,203L347,202L351,193L351,193L348,188L343,186L345,182L345,182L345,182Z " data-fips="CH10" data-fips-="" data-iso3="CHN" data-name="Hebei" data-p="HB"/><path d="M325,234L322,235L315,233L312,233L312,233L312,233L312,240L308,244L301,245L296,249L294,249L291,252L289,252L288,252L288,252L291,256L291,258L294,263L294,264L294,264L299,270L304,271L312,270L314,271L316,270L318,275L319,276L324,275L324,277L330,277L330,277L330,277L334,271L326,264L328,260L330,253L333,254L337,252L333,248L333,247L332,247L330,248L327,247L322,243L324,241L329,235L329,234L325,235L326,233L326,233L325,234Z " data-fips="CH09" data-fips-="" data-iso3="CHN" data-name="Henan" data-p="HE"/><path d="M373,195L371,195L372,196L373,195Z M364,196L364,196L364,196L364,196Z M364,196L362,196L362,196L364,196Z M371,156L371,156L371,159L369,160L366,163L363,163L364,164L361,165L360,167L357,167L355,170L354,170L350,177L349,174L345,171L344,172L345,177L346,181L345,182L345,182L343,186L348,188L351,193L352,193L354,191L357,185L364,182L365,183L363,192L364,195L366,196L362,201L363,202L369,198L370,195L373,192L378,188L382,187L383,185L386,180L386,180L390,176L390,176L390,173L385,167L385,164L381,161L379,157L377,160L371,155L371,156L371,156Z " data-fips="CH19" data-fips-="" data-iso3="CHN" data-name="Liaoning" data-p="LN"/><path d="M361,210L360,210L360,210L361,210Z M361,210L361,210L361,210L361,210Z M340,211L332,219L324,230L325,233L326,233L326,233L325,235L329,234L329,235L324,241L322,243L327,247L330,248L332,247L333,247L333,247L333,247L333,247L334,247L334,246L334,246L337,243L340,246L344,247L347,244L350,246L350,243L352,243L352,240L355,239L356,239L357,236L364,227L365,223L371,219L374,218L376,217L376,213L372,212L369,213L362,211L360,213L353,220L351,220L349,218L349,213L347,211L342,212L341,211L340,211Z M361,207L361,207L361,207L361,207Z " data-fips="CH25" data-fips-="" data-iso3="CHN" data-name="Shandong" data-p="SD"/><path d="M331,199L333,199L333,197L333,195L333,195L332,195L330,197L330,197L331,199L331,199L331,199Z " data-fips="CH22" data-fips-="CH28" data-iso3="CHN" data-name="Tianjin" data-p="TJ"/><path d="M334,193L334,194L334,194L333,195L333,195L333,195L333,197L333,199L331,199L331,199L331,199L331,200L331,200L331,200L331,200L331,200L332,204L331,207L334,208L337,208L337,208L338,203L340,202L340,202L338,199L336,199L334,193L334,193Z " data-fips="CH28" data-fips-="" data-iso3="CHN" data-name="Tianjin" data-p="TJ"/><path d="M355,292L350,291L348,290L345,292L344,289L342,288L339,292L338,292L338,292L336,292L335,291L328,297L325,298L322,299L321,300L321,301L323,304L322,310L321,311L320,314L320,317L322,316L323,323L325,323L325,334L324,334L325,334L326,335L330,334L331,336L328,340L329,342L338,339L341,339L341,337L341,337L341,337L341,334L346,321L345,318L348,316L350,309L354,308L358,303L359,303L359,302L355,296L354,295L355,293L355,293L355,292Z " data-fips="CH03" data-fips-="" data-iso3="CHN" data-name="Jiangxi" data-p="JX"/><path d="M365,266L364,265L364,265L365,266Z M355,239L352,240L352,243L350,243L350,246L347,244L344,247L340,246L337,243L334,246L334,246L334,246L339,248L346,252L346,253L349,253L348,257L350,258L352,262L354,261L356,259L359,262L356,262L354,264L355,265L353,269L357,271L358,275L361,274L364,275L364,275L364,275L367,275L372,277L374,274L374,274L374,274L375,272L376,270L377,269L377,269L370,265L367,267L366,266L369,265L381,266L380,264L376,262L376,261L371,259L371,256L364,245L359,243L355,239L355,239Z " data-fips="CH04" data-fips-="" data-iso3="CHN" data-name="Jiangsu" data-p="JS"/><path d="M381,270L379,269L379,269L381,270Z M374,274L375,274L376,275L376,276L378,277L378,276L380,275L382,274L381,271L377,269L377,269L376,270L375,272L374,274L374,274Z M381,268L376,266L378,268L381,268Z " data-fips="CH23" data-fips-="" data-iso3="CHN" data-name="Shanghai" data-p="SH"/><path d="M381,302L380,302L381,302L381,302Z M381,300L381,301L381,301L381,300Z M385,290L384,290L385,290L385,290Z M386,290L385,290L385,290L386,290Z M387,283L387,283L387,283L387,283Z M385,283L384,282L384,282L385,283Z M384,282L383,281L383,281L384,282Z M386,281L385,282L386,282L386,281Z M386,279L385,278L385,279L386,279Z M387,274L387,274L387,275L387,274Z M364,275L364,276L362,283L360,283L360,287L356,292L355,293L355,293L354,295L355,296L359,302L359,303L359,303L363,307L363,309L376,309L376,310L376,310L380,299L382,300L383,296L382,295L384,292L382,291L382,289L385,289L385,285L383,286L384,283L382,282L378,280L374,283L372,280L375,279L378,277L378,277L376,276L376,275L375,274L374,274L374,274L372,277L367,275L364,275L364,275Z " data-fips="CH02" data-fips-="" data-iso3="CHN" data-name="Zhejiang" data-p="ZJ"/><path d="M361,131L361,131L359,136L353,136L352,138L357,141L356,142L357,147L359,150L362,149L364,146L369,153L369,156L370,156L371,156L371,156L371,155L377,160L379,157L381,161L385,164L385,167L390,173L390,176L390,176L392,175L395,166L405,166L405,165L403,161L408,159L410,155L411,155L412,149L413,148L415,151L417,149L420,147L419,141L419,141L417,142L411,138L405,143L404,145L399,141L398,139L395,143L391,138L389,138L386,135L384,134L374,135L371,136L369,135L367,132L366,129L361,131L361,131Z " data-fips="CH05" data-fips-="" data-iso3="CHN" data-name="Jilin" data-p="JL"/><path d="M192,177L196,188L195,189L196,191L199,195L198,198L203,196L209,195L211,195L212,197L207,204L214,209L216,209L217,212L220,215L222,216L225,214L225,212L228,211L234,210L238,209L241,212L235,218L235,224L237,224L242,228L242,228L243,227L250,224L252,221L255,212L259,209L259,218L258,219L266,223L266,223L267,223L269,225L271,225L276,222L276,217L280,211L284,207L287,208L290,205L290,207L290,207L291,207L293,204L294,204L298,198L307,196L310,194L310,192L311,192L310,192L308,189L308,186L314,179L317,183L320,180L323,180L328,177L327,174L333,171L335,173L338,181L339,182L345,182L345,182L346,181L345,177L344,172L345,171L349,174L350,177L354,170L355,170L357,167L360,167L361,165L364,164L363,163L366,163L369,160L371,159L371,156L371,156L370,156L369,156L369,153L364,146L362,149L359,150L357,147L356,142L357,141L352,138L353,136L359,136L361,131L361,131L360,130L360,128L362,125L360,126L355,124L354,121L357,116L358,115L362,108L364,112L363,108L364,102L366,101L364,95L365,89L366,88L361,80L359,79L358,82L351,85L347,84L345,81L344,77L342,76L339,78L335,76L334,69L334,69L328,77L332,79L333,82L329,94L328,102L326,103L322,107L314,106L311,119L311,121L310,122L313,126L314,125L318,124L322,125L324,122L328,121L334,125L339,130L338,132L329,133L327,135L324,135L324,137L321,137L317,145L313,148L307,150L302,155L299,155L294,153L290,154L289,157L289,161L292,165L290,168L286,171L283,176L280,177L258,182L247,187L246,189L243,188L243,186L237,187L233,185L225,183L220,180L212,178L208,179L192,177L192,177Z " data-fips="CH20" data-fips-="" data-iso3="CHN" data-name="Nei Mongol" data-p="NM"/><path d="M334,69L335,76L339,78L342,76L344,77L345,81L347,84L351,85L358,82L359,79L361,80L366,88L365,89L364,95L366,101L364,102L363,108L364,112L362,108L358,115L357,116L354,121L355,124L360,126L362,125L360,128L360,130L361,131L361,131L366,129L367,132L369,135L371,136L374,135L384,134L386,135L389,138L391,138L395,143L398,139L399,141L404,145L405,143L411,138L417,142L419,141L418,141L417,136L413,130L418,124L424,124L425,113L425,106L424,100L426,96L424,93L421,91L413,98L413,101L406,103L404,104L401,101L401,99L397,95L396,95L389,92L382,93L379,92L377,90L377,88L375,87L373,84L370,81L365,73L361,69L361,68L354,65L353,66L344,64L342,66L337,67L334,69L334,69Z " data-fips="CH08" data-fips-="" data-iso3="CHN" data-name="Heilongjiang" data-p="HL"/></g></svg> \ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'><svg enable_background="new 0 0 450 451" height="451px" style="stroke-linejoin: round; stroke:#000; fill:#f6f3f0;" version="1.1" viewBox="0 0 450 451" width="450px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"><![CDATA[path { fill-rule: evenodd; }
+#context path { fill: #eee; stroke: #bbb; } ]]></style></defs><metadata><views><view h="451" padding="0.06" w="450"><proj id="laea" lat0="37.6908779974" lon0="102.879992202"/><bbox h="514.82" w="596.01" x="693.71" y="754.35"/><llbbox lat0="-90" lat1="90" lon0="-180" lon1="180"/></view></views></metadata><g id="context"><path d="M25,190L25,190L24,189L26,188L28,189L28,189L28,189L27,187L19,184L14,184L12,186L4,186L4,182L7,176L5,174L6,172L0,171L0,190L8,187L11,187L20,190L24,190L25,190Z M0,196L0,196L0,196L0,196Z " data-iso="AFG"/><path d="M126,354L127,351L125,349L124,354L126,354Z M111,353L114,356L120,354L122,354L125,353L124,348L125,347L124,342L125,342L126,345L128,350L133,348L135,353L136,364L138,368L139,368L138,362L141,364L142,357L142,357L142,356L140,341L137,343L135,346L132,346L131,343L133,336L137,336L141,330L143,330L137,327L125,325L121,323L121,315L119,317L115,314L111,312L107,316L113,324L109,323L106,327L110,334L109,337L111,342L111,343L111,352L111,353Z " data-iso="BGD"/><path d="M138,302L135,299L134,300L128,299L127,296L118,301L116,303L116,304L115,304L117,309L121,310L127,310L130,311L141,311L141,306L138,305L138,303L138,303L138,302Z " data-iso="BTN"/><path d="M302,377L293,378L287,380L283,385L283,392L291,394L298,389L300,384L303,381L302,377Z M314,96L314,98L311,112L310,115L313,117L315,115L321,115L324,112L327,111L333,114L339,122L333,122L324,125L324,127L322,128L315,137L307,139L307,141L302,146L291,144L290,154L291,154L283,166L276,170L267,170L258,172L248,177L243,179L242,177L237,178L222,170L208,170L192,167L187,167L186,165L179,152L170,145L155,142L152,137L155,132L154,124L152,117L148,113L143,110L140,107L140,101L140,101L139,101L138,101L137,101L137,101L137,101L136,101L135,101L130,106L125,107L123,116L117,119L111,116L106,115L99,126L98,131L94,128L83,128L85,132L83,137L83,145L79,149L77,154L77,154L77,155L63,158L60,161L51,159L46,164L42,163L42,160L37,159L33,162L29,162L26,166L26,166L26,167L24,174L29,176L31,178L29,186L30,187L28,189L28,189L28,189L26,188L24,189L25,190L25,190L25,190L33,197L34,205L37,207L37,207L38,208L41,210L42,210L44,211L44,211L44,211L44,211L46,220L50,224L47,230L49,234L49,234L49,235L48,236L49,237L48,241L48,241L48,241L45,242L44,239L42,242L43,244L42,251L47,256L49,256L57,265L57,266L57,267L60,265L65,266L68,271L75,279L79,280L80,283L88,291L91,291L96,295L97,294L103,297L109,298L110,298L110,298L114,296L116,297L115,303L116,304L116,303L118,301L127,296L128,299L134,300L135,299L138,302L138,303L139,303L145,303L152,296L158,295L165,291L169,294L176,290L178,293L178,300L185,302L186,303L186,302L192,304L192,305L196,309L197,318L196,322L193,327L191,327L186,337L187,338L186,343L191,341L197,341L197,349L201,353L200,357L200,360L206,361L206,363L212,366L215,364L216,365L216,365L217,366L217,369L222,369L221,363L222,358L224,358L225,358L225,358L238,354L240,356L242,354L244,355L247,353L248,351L256,352L257,352L264,353L265,354L263,357L265,361L276,365L277,365L280,364L280,361L286,365L290,364L292,366L294,375L295,375L299,373L295,370L297,365L302,363L305,363L310,359L316,359L320,355L323,355L323,355L323,355L323,354L324,354L324,354L321,348L327,351L328,351L328,351L329,351L330,351L330,350L332,351L337,348L339,348L346,345L347,345L355,337L355,338L360,331L358,329L365,327L367,322L369,320L369,318L372,318L370,313L368,313L370,305L372,305L373,307L376,301L378,293L381,289L384,289L383,285L384,283L382,280L385,280L385,277L381,278L385,273L380,271L376,272L370,272L382,264L380,260L372,257L372,255L380,256L376,251L371,249L371,246L365,236L362,234L355,232L355,231L360,221L361,217L364,217L366,213L376,207L376,203L371,204L365,203L362,202L359,204L356,209L350,209L350,205L348,202L341,202L338,196L338,194L348,189L349,186L355,180L359,173L362,173L367,176L363,187L367,189L374,181L383,176L383,176L386,171L392,165L394,160L394,157L396,156L398,157L405,157L403,152L409,147L412,144L412,139L417,142L417,142L417,141L419,137L415,118L417,114L424,114L425,113L424,110L426,102L425,99L425,90L426,86L420,82L415,87L413,91L404,95L401,91L398,87L392,83L386,83L380,83L377,82L374,74L370,71L367,66L358,56L339,57L331,61L328,66L333,72L331,76L328,88L329,91L322,98L316,97L314,96Z " data-iso="CHN"/><path d="M330,351L329,351L328,351L328,351L328,352L327,352L330,351L330,351Z " data-iso="HKG"/><path d="M145,496L143,494L145,493L145,496Z M134,462L132,460L134,458L134,462Z M136,453L135,451L139,435L139,444L137,449L136,453Z M43,246L42,245L42,251L43,252L42,251L46,254L47,256L49,256L50,257L50,257L57,265L57,266L56,266L51,269L47,276L49,279L55,283L59,289L65,292L70,296L75,296L81,298L97,309L100,310L109,307L109,302L110,298L110,298L110,298L114,296L116,297L115,303L116,304L115,304L117,309L121,310L127,310L130,311L141,311L141,306L138,305L138,303L138,303L139,303L145,303L152,296L158,295L165,291L169,294L176,290L178,293L178,300L185,302L186,303L185,303L182,308L183,313L180,310L175,311L169,315L166,316L166,321L161,329L162,330L155,340L150,338L150,345L146,355L142,357L142,357L142,356L140,341L137,343L135,346L132,346L131,343L133,336L137,336L141,330L143,330L137,327L125,325L121,323L121,315L119,317L115,314L111,312L107,316L113,324L109,323L106,327L110,334L109,337L111,342L111,343L111,352L111,354L111,356L108,357L107,354L106,356L103,355L101,354L95,355L91,358L85,368L79,370L78,368L75,371L71,374L64,380L60,382L47,389L44,394L38,394L33,398L32,397L28,397L24,403L24,410L23,411L23,425L18,431L17,434L16,446L12,445L7,451L-1,455L-2,460L-5,461L-12,457L-17,446L-16,442L-21,424L-24,420L-25,415L-27,396L-29,391L-30,384L-32,379L-32,375L-32,364L-32,353L-30,351L-31,342L-28,334L-26,326L-29,325L-27,321L-30,319L-32,323L-31,326L-46,329L-52,319L-55,313L-54,311L-46,311L-42,307L-49,308L-53,306L-55,302L-58,293L-56,293L-52,291L-46,293L-45,295L-38,295L-38,296L-34,296L-34,294L-34,284L-37,282L-38,280L-36,275L-40,270L-32,263L-22,266L-18,264L-6,256L-0,252L1,251L3,249L10,244L11,238L16,233L15,232L11,223L14,217L12,213L14,210L17,210L27,216L34,215L38,213L38,213L39,213L42,212L43,211L44,211L44,211L46,220L50,224L47,230L49,234L49,235L48,236L49,237L48,241L48,241L45,242L44,239L42,242L43,244L43,246Z " data-iso="IND"/><path d="M450,220L444,219L441,221L440,223L437,227L436,227L440,231L437,230L439,233L442,228L445,231L443,237L444,244L448,245L447,241L450,245L450,220Z M450,206L445,214L443,216L444,219L449,216L450,206Z " data-iso="JPN"/><path d="M44,211L42,210L41,210L38,208L37,207L37,208L37,210L38,212L38,213L39,213L42,212L43,211L44,211L44,211Z " data-iso="KAS"/><path d="M17,135L17,134L21,131L27,133L30,136L35,136L36,134L41,133L45,138L58,141L71,147L72,150L76,153L77,154L77,154L79,149L83,145L83,137L85,132L83,128L94,128L98,131L99,126L106,115L111,116L117,119L123,116L125,107L130,106L135,101L136,101L137,101L137,101L133,96L134,94L131,96L125,93L123,88L121,87L120,82L119,80L112,80L106,78L105,75L103,73L98,76L93,50L89,42L92,38L83,39L76,43L71,41L73,37L69,34L62,30L64,27L65,20L60,18L52,16L48,17L38,15L27,14L14,9L10,14L13,18L13,20L8,17L4,22L0,22L2,30L0,34L0,140L10,136L13,135L17,135L17,135Z " data-iso="KAZ"/><path d="M26,166L26,166L29,162L33,162L37,159L42,160L42,163L46,164L51,159L60,161L63,158L77,155L77,154L76,153L72,150L71,147L58,141L45,138L41,133L36,134L35,136L30,136L27,133L21,131L17,134L17,135L18,135L19,136L15,137L16,145L27,153L19,154L16,155L11,153L11,153L11,153L4,151L1,151L0,155L12,160L12,161L16,165L19,164L25,166L26,166Z M11,156L10,155L10,154L11,156Z M8,156L6,155L6,155L8,156Z " data-iso="KGZ"/><path d="M274,427L273,428L261,435L259,435L253,432L252,431L252,432L237,431L232,434L228,439L226,439L228,447L230,449L274,449L274,443L275,438L273,434L273,431L274,428L274,427Z " data-iso="KHM"/><path d="M412,235L415,231L411,233L412,235Z M403,193L406,197L403,201L405,203L409,211L407,217L411,225L415,219L417,221L418,216L423,215L428,211L427,203L424,192L416,185L414,182L405,188L404,193L403,193Z " data-iso="KOR"/><path d="M225,359L232,364L231,369L234,372L239,373L244,372L244,376L247,377L249,379L246,383L242,385L241,386L251,392L252,395L264,408L265,410L272,415L270,418L274,426L274,427L273,428L261,435L259,435L253,432L252,431L253,431L256,425L254,416L251,415L249,412L249,404L241,395L236,394L233,397L233,397L233,397L233,397L232,398L227,398L224,397L215,403L216,396L217,389L214,383L209,383L210,377L207,377L207,377L207,376L211,371L211,371L215,366L216,365L217,366L217,369L222,369L221,363L222,358L224,358L225,358L225,359Z " data-iso="LAO"/><path d="M323,355L323,355L324,355L324,354L324,354L323,354L323,355L323,355L323,355Z " data-iso="MAC"/><path d="M207,377L207,376L211,371L211,371L215,366L216,365L216,365L215,364L212,366L206,363L206,361L200,360L200,357L201,353L197,349L197,341L191,341L186,343L187,338L186,337L191,327L193,327L196,322L197,318L196,309L192,305L192,304L186,302L186,303L185,303L182,308L183,313L180,310L175,311L169,315L166,316L166,321L161,329L162,330L155,340L150,338L150,345L146,355L142,357L142,357L142,357L141,364L138,362L139,368L139,369L142,373L145,372L151,381L148,382L151,387L152,384L155,393L157,399L156,402L153,409L152,412L154,413L157,409L156,415L162,416L164,416L166,413L174,410L177,406L180,405L181,410L184,411L183,415L185,421L185,426L188,434L188,436L192,445L192,449L199,449L196,443L197,441L196,435L192,431L188,423L192,421L192,415L193,413L191,407L185,399L182,392L185,392L189,381L196,381L197,379L201,378L201,376L206,376L207,377Z " data-iso="MMR"/><path d="M314,96L308,97L304,95L298,95L287,104L277,106L270,106L266,106L262,103L262,102L253,98L245,97L236,100L228,96L228,94L217,85L214,85L209,81L205,85L202,91L203,95L203,100L197,103L184,100L182,99L180,93L173,92L169,89L168,91L158,94L155,95L152,97L149,98L142,99L140,101L140,101L140,101L140,107L143,110L148,113L152,117L154,124L155,132L152,137L155,142L170,145L179,152L186,165L187,167L192,167L208,170L222,170L237,178L242,177L243,179L248,177L258,172L267,170L276,170L283,166L291,154L290,154L291,144L302,146L307,141L307,139L315,137L322,128L324,127L324,125L333,122L339,122L333,114L327,111L324,112L321,115L315,115L313,117L310,115L311,112L314,98L314,96L314,96Z " data-iso="MNG"/><path d="M109,298L103,297L97,294L96,295L91,291L88,291L80,283L79,280L75,279L68,271L65,266L60,265L57,267L57,266L56,266L51,269L47,276L49,279L55,283L59,289L65,292L70,296L75,296L81,298L97,309L100,310L109,307L109,302L110,298L110,298L109,298Z " data-iso="NPL"/><path d="M1,251L3,249L10,244L11,238L16,233L15,232L11,223L14,217L12,213L14,210L17,210L27,216L34,215L38,213L38,213L38,212L37,210L37,208L37,207L37,207L34,205L33,197L25,190L25,190L24,190L20,190L11,187L8,187L0,190L0,196L0,196L0,196L0,252L1,251Z " data-iso="PAK"/><path d="M423,449L424,445L419,446L418,449L423,449Z M429,449L429,444L428,441L426,449L429,449Z M438,449L440,447L435,438L432,443L434,442L436,449L438,449Z M414,449L417,447L419,443L417,440L409,438L410,440L410,449L414,449Z M438,427L429,428L431,432L436,434L439,440L443,438L441,435L441,429L438,427Z M424,432L419,430L420,435L422,433L427,436L427,434L424,432Z M395,426L392,427L396,431L397,433L400,437L404,432L403,428L400,426L395,426Z M428,418L427,415L426,419L428,418Z M393,378L390,380L388,388L389,393L389,400L390,401L385,401L388,414L391,416L393,413L397,416L394,420L394,421L400,424L405,420L407,421L413,426L411,419L412,419L418,422L419,425L423,426L425,426L426,429L427,424L421,420L424,418L419,417L418,419L415,416L406,419L402,414L403,413L400,406L401,402L404,400L408,390L404,385L404,379L403,378L401,380L393,378Z " data-iso="PHL"/><path d="M383,176L385,179L386,178L391,179L391,181L391,185L392,187L389,193L393,193L395,195L397,192L403,193L404,193L405,188L414,182L413,181L408,179L405,178L405,173L414,163L417,158L414,152L416,147L419,144L419,144L419,143L417,142L417,142L417,142L412,139L412,144L409,147L403,152L405,157L398,157L396,156L394,157L394,160L392,165L386,171L383,176L383,176Z " data-iso="PRK"/><path d="M450,24L441,12L438,10L437,12L441,19L439,21L441,24L445,33L450,37L450,24Z M413,16L410,15L413,20L414,16L413,16Z M0,22L4,22L8,17L13,20L13,18L10,14L14,9L27,14L38,15L48,17L52,16L60,18L65,20L64,27L62,30L69,34L73,37L71,41L76,43L83,39L92,38L89,42L93,50L98,76L103,73L105,75L106,78L112,80L119,80L120,82L121,87L123,88L125,93L131,96L134,94L133,96L137,101L137,101L137,101L137,101L138,101L139,101L140,101L140,101L142,99L149,98L152,97L155,95L158,94L168,91L169,89L173,92L180,93L182,99L184,100L197,103L203,100L203,95L202,91L205,85L209,81L214,85L217,85L228,94L228,96L236,100L245,97L253,98L262,102L262,103L266,106L270,106L277,106L287,104L298,95L304,95L308,97L314,96L314,96L316,97L322,98L329,91L328,88L331,76L333,72L328,66L331,61L339,57L358,56L367,66L370,71L374,74L377,82L380,83L386,83L392,83L398,87L401,91L404,95L413,91L415,87L420,82L426,86L425,90L425,99L426,102L424,110L425,113L424,114L417,114L415,118L419,137L417,141L417,142L417,142L419,143L419,144L419,143L423,133L426,132L427,135L433,135L443,123L444,119L444,113L446,108L450,93L450,57L448,52L445,48L443,38L444,34L436,26L438,26L437,23L432,22L425,18L423,20L420,21L422,27L416,30L417,27L413,29L410,22L405,24L401,24L402,20L404,15L407,0L0,0L0,22Z " data-iso="RUS"/><path d="M252,431L253,431L256,425L254,416L251,415L249,412L249,404L241,395L236,394L233,397L232,398L227,398L224,397L215,403L216,396L217,389L214,383L209,383L210,377L207,377L207,377L206,376L201,376L201,378L197,379L196,381L189,381L185,392L182,392L185,399L191,407L193,413L192,415L192,421L188,423L192,431L196,435L197,441L196,443L199,449L204,449L204,441L207,439L213,445L213,447L220,447L224,449L230,449L228,447L226,439L228,439L232,434L237,431L252,432L252,431Z " data-iso="THA"/><path d="M8,156L6,155L6,155L8,156Z M11,153L10,153L8,152L8,149L11,148L10,144L0,148L1,151L4,151L11,153L11,153Z M28,189L28,189L30,187L29,186L31,178L29,176L24,174L26,167L26,166L25,166L19,164L16,165L12,161L12,160L0,155L0,171L6,172L5,174L7,176L4,182L4,186L12,186L14,184L19,184L27,187L28,189L28,189Z " data-iso="TJK"/><path d="M387,342L390,334L392,323L391,320L387,317L384,319L382,325L379,335L379,338L381,343L387,348L387,342Z " data-iso="TWN"/><path d="M11,156L10,154L10,155L11,156Z M11,153L11,153L16,155L19,154L27,153L16,145L15,137L19,136L18,135L17,135L17,135L13,135L10,136L0,140L0,148L10,144L11,148L8,149L8,152L10,153L11,153Z " data-iso="UZB"/><path d="M276,365L265,361L263,357L265,354L264,353L257,352L256,352L248,351L247,353L244,355L242,354L240,356L238,354L225,358L225,358L225,359L232,364L231,369L234,372L239,373L244,372L244,376L247,377L249,379L246,383L242,385L241,386L251,392L252,395L264,408L265,410L272,415L270,418L274,426L274,427L274,428L273,431L273,434L275,438L274,443L274,449L290,449L292,442L291,434L286,421L283,419L278,412L276,412L266,403L263,399L258,393L256,389L259,380L265,372L265,370L268,370L275,365L276,365Z " data-iso="VNM"/></g><g fill="red" fill-opacity="0.35" id="regions"><path d="M187,167L187,167L187,167L184,169L183,174L177,175L173,177L163,186L161,186L160,198L160,198L160,198L171,198L178,201L181,204L185,207L188,208L192,201L196,204L202,202L204,203L207,207L210,209L211,208L215,211L222,216L225,217L225,218L229,221L228,222L230,224L231,228L232,229L230,236L227,237L227,239L224,243L223,243L225,248L223,249L216,246L216,251L218,253L223,254L223,254L223,254L224,255L223,258L228,254L227,253L232,247L235,252L241,253L245,262L249,263L252,260L252,260L253,260L255,259L254,255L256,253L257,254L259,252L260,247L261,247L259,243L260,239L267,240L268,237L275,235L274,231L275,227L264,221L264,221L264,220L260,220L258,226L259,228L261,229L262,233L258,234L258,238L255,236L254,236L253,234L250,233L251,229L249,224L243,218L242,218L242,218L237,215L235,214L235,209L241,202L238,199L234,201L228,201L225,202L225,205L222,206L220,206L217,202L216,199L214,199L207,195L212,187L211,186L209,185L203,187L198,188L199,185L196,182L195,179L196,178L192,167L187,167Z " data-fips="CH15" data-fips-="" data-iso3="CHN" data-name="Gansu"/><path d="M223,254L218,253L216,251L216,246L223,249L225,248L223,243L224,243L227,239L227,237L230,236L232,229L231,228L230,224L228,222L229,221L225,218L225,217L222,216L215,211L211,208L210,209L207,207L204,203L202,202L196,204L192,201L188,208L185,207L181,204L178,201L171,198L160,198L160,198L160,198L152,200L139,202L140,208L144,212L145,214L143,217L142,217L141,220L143,221L143,225L141,225L136,224L134,224L132,224L132,224L131,230L130,230L132,235L130,244L133,249L142,251L152,257L157,260L160,260L166,260L170,264L172,265L172,268L181,269L183,267L185,267L188,263L191,263L191,262L190,262L189,253L189,251L195,250L197,251L207,261L207,260L214,263L218,262L218,258L220,257L223,255L223,254L223,254Z " data-fips="" data-fips-="" data-iso3="CHN" data-name="Qinghai"/><path d="M287,322L286,323L285,325L283,325L281,327L280,327L276,329L276,330L266,328L266,331L264,331L259,335L256,336L253,334L250,334L247,337L246,336L245,336L245,336L247,339L251,340L251,341L258,341L260,344L258,347L257,347L254,350L254,350L262,352L265,353L263,357L265,361L267,362L272,364L276,364L279,363L280,364L283,363L287,365L290,363L291,364L291,363L293,361L297,360L296,357L300,356L300,353L305,348L304,346L308,339L309,333L309,333L309,332L306,333L305,334L302,329L302,327L303,322L301,322L302,319L296,319L293,322L287,322L287,322Z " data-fips="CH16" data-fips-="" data-iso3="CHN" data-name="Guangxi"/><path d="M283,300L282,302L279,301L278,299L277,298L275,295L268,294L269,296L264,298L262,300L261,298L260,300L260,300L260,300L257,298L254,300L254,302L259,305L259,307L251,308L251,308L251,308L246,312L244,311L238,315L240,320L242,318L245,319L245,322L243,327L247,331L245,336L245,336L246,336L247,337L250,334L253,334L256,336L259,335L264,331L266,331L266,328L276,330L276,329L280,327L281,327L283,325L285,325L286,323L287,322L286,322L285,320L286,316L287,315L286,312L281,313L285,307L284,305L284,300L284,299L283,300Z " data-fips="CH18" data-fips-="" data-iso3="CHN" data-name="Guizhou"/><path d="M284,269L280,268L278,267L276,266L276,265L275,266L276,270L272,277L268,280L266,284L265,286L262,286L261,284L258,285L255,283L253,286L254,288L252,290L251,292L254,294L257,296L258,297L260,300L260,300L260,300L261,298L262,300L264,298L269,296L268,294L275,295L277,298L278,299L279,301L282,302L283,300L284,299L284,299L284,298L284,297L283,294L283,294L282,293L280,289L278,287L276,288L276,281L280,280L283,280L287,277L289,277L289,272L286,271L285,269L284,269L284,269Z " data-fips="CH33" data-fips-="CH18|CH32" data-iso3="CHN" data-name="Chongqing"/><path d="M333,184L332,181L328,178L326,178L327,180L322,183L323,184L320,188L323,192L330,190L331,190L331,190L331,190L331,190L331,190L331,189L331,189L330,188L330,187L332,186L333,185L333,185L334,184L334,184L334,184L333,184Z " data-fips="CH22" data-fips-="" data-iso3="CHN" data-name="Beijing"/><path d="M359,293L358,293L354,298L350,299L348,306L345,309L346,312L341,325L341,327L341,327L342,327L346,328L347,329L349,329L351,332L352,337L354,338L354,338L359,331L358,329L360,327L362,328L367,324L366,322L370,320L369,318L371,316L372,312L370,313L371,310L373,309L370,305L374,305L373,307L375,306L374,303L375,299L376,300L376,300L376,299L363,300L363,298L359,293L359,293Z " data-fips="CH07" data-fips-="" data-iso3="CHN" data-name="Fujian"/><path d="M364,265L361,264L358,265L357,262L353,260L355,256L354,254L356,253L359,252L356,249L354,252L352,252L350,248L348,248L349,243L346,244L346,243L339,238L334,237L334,237L334,237L333,238L333,237L333,237L333,238L333,238L337,243L333,244L330,243L328,250L326,254L334,261L330,267L330,268L330,268L333,269L335,272L336,276L338,282L338,282L339,282L342,279L344,280L345,282L348,280L350,282L355,283L355,283L356,283L360,277L360,273L362,273L364,266L364,265L364,265Z " data-fips="CH01" data-fips-="" data-iso3="CHN" data-name="Anhui"/><path d="M309,333L309,333L308,339L304,346L305,348L300,353L300,356L296,357L297,360L293,361L291,363L291,363L291,370L293,373L297,375L298,372L296,367L297,365L301,364L302,363L308,362L310,359L314,360L319,357L320,355L324,354L323,350L324,348L327,352L330,350L333,351L339,346L340,347L349,344L350,341L354,338L354,338L352,337L351,332L349,329L347,329L346,328L342,327L341,327L341,327L341,329L338,329L329,333L328,331L331,327L330,324L326,325L325,324L324,324L324,324L319,325L317,326L316,330L313,328L310,328L309,333L309,333Z " data-fips="CH30" data-fips-="" data-iso3="CHN" data-name="Guangdong"/><path d="M50,224L47,232L50,235L50,238L49,241L42,240L43,246L42,250L44,251L47,256L49,256L51,259L51,261L54,263L56,265L57,267L59,267L65,266L66,268L73,276L76,280L78,279L80,280L80,281L86,289L86,290L91,290L93,295L94,293L97,295L97,294L102,297L110,298L115,297L116,297L115,303L116,304L122,297L127,297L134,300L139,301L138,303L145,303L147,302L153,296L155,296L161,292L165,291L165,292L174,291L176,290L179,296L177,300L184,301L191,303L192,304L196,302L198,296L199,298L200,294L201,294L201,294L200,280L198,274L199,274L197,272L196,268L195,265L191,263L191,262L191,263L188,263L185,267L183,267L181,269L172,268L172,265L170,264L166,260L160,260L157,260L152,257L142,251L133,249L130,244L132,235L130,230L131,230L132,224L132,224L129,222L124,219L107,219L105,222L101,223L98,221L91,223L86,223L82,221L82,219L78,218L74,220L62,216L56,225L52,223L50,224L50,224Z " data-fips="CH14" data-fips-="" data-iso3="CHN" data-name="Xizang"/><path d="M50,224L52,223L56,225L62,216L74,220L78,218L82,219L82,221L86,223L91,223L98,221L101,223L105,222L107,219L124,219L129,222L132,224L134,224L136,224L141,225L143,225L143,221L141,220L142,217L143,217L145,214L144,212L140,208L139,202L152,200L160,198L160,198L160,198L161,186L163,186L173,177L177,175L183,174L184,169L187,167L187,167L186,165L184,162L181,152L179,152L174,148L172,148L165,144L161,143L153,140L152,138L152,135L155,133L153,117L149,115L148,113L145,113L139,105L140,101L133,102L132,104L126,106L123,110L122,118L117,118L112,116L107,113L98,127L100,129L99,131L94,128L88,129L83,128L82,130L84,133L83,137L83,147L80,147L77,151L77,156L74,155L64,158L60,161L56,160L52,159L47,163L45,163L42,160L38,160L32,162L30,161L27,166L26,166L25,175L30,176L31,178L29,186L30,188L24,189L31,195L34,198L37,207L41,210L44,211L45,213L46,220L50,224L50,224Z " data-fips="CH13" data-fips-="" data-iso3="CHN" data-name="Xinjiang Uygur"/><path d="M300,376L300,378L296,377L294,378L288,379L287,381L283,384L283,389L283,392L287,394L292,395L293,393L295,393L297,390L300,388L300,385L303,381L303,377L300,376Z " data-fips="CH31" data-fips-="CH" data-iso3="CHN" data-name="Hainan"/><path d="M266,213L258,210L259,208L259,199L255,202L252,212L250,215L243,217L242,218L243,218L249,224L251,229L250,233L253,234L254,236L255,236L258,238L258,234L262,233L261,229L259,228L258,226L260,220L264,220L264,221L264,220L264,216L266,214L266,214L266,213L266,213Z " data-fips="CH21" data-fips-="" data-iso3="CHN" data-name="Ningxia Hui"/><path d="M290,197L290,196L287,199L284,197L280,202L276,207L276,212L271,215L269,215L267,213L266,213L266,214L266,214L264,216L264,220L264,221L264,221L275,227L274,231L275,235L268,237L267,240L260,239L259,243L261,247L260,247L259,252L257,254L256,253L254,255L255,259L253,260L252,260L252,260L253,262L256,260L257,262L264,261L264,263L268,264L272,266L276,265L276,265L276,266L278,267L280,268L284,269L284,269L284,269L285,266L283,263L285,261L288,261L288,259L283,256L294,254L294,254L294,253L291,249L291,246L288,242L288,242L288,242L290,233L287,220L289,217L289,213L287,211L287,209L289,206L290,197L290,197L290,197Z " data-fips="CH26" data-fips-="" data-iso3="CHN" data-name="Shaanxi"/><path d="M312,223L310,221L311,219L314,212L309,204L310,200L314,197L315,193L310,189L314,186L312,186L311,183L311,182L310,183L310,185L307,187L298,188L294,195L293,194L291,197L290,197L290,197L289,206L287,209L287,211L289,213L289,217L287,220L290,233L288,242L288,242L289,242L291,242L294,240L296,239L301,235L308,234L312,230L312,223L312,223L312,223Z " data-fips="CH24" data-fips-="" data-iso3="CHN" data-name="Shanxi"/><path d="M330,268L324,267L324,266L319,266L318,265L316,260L314,261L312,260L304,261L299,260L294,255L294,254L294,254L283,256L288,259L288,261L285,261L283,263L285,266L284,269L284,269L285,269L286,271L289,272L289,277L287,277L283,280L280,280L276,281L276,288L278,287L280,289L282,293L283,294L283,294L286,289L290,287L292,285L296,284L303,285L307,287L313,286L313,288L315,287L316,285L318,286L319,287L318,290L321,291L321,291L322,290L325,288L328,287L335,282L336,283L338,282L338,282L338,282L336,276L335,272L333,269L330,268L330,268L330,268Z " data-fips="CH12" data-fips-="" data-iso3="CHN" data-name="Hubei"/><path d="M321,291L318,290L319,287L318,286L316,285L315,287L313,288L313,286L307,287L303,285L296,284L292,285L290,287L286,289L283,294L283,294L283,294L284,297L284,298L284,299L284,299L284,300L284,305L285,307L281,313L286,312L287,315L286,316L285,320L286,322L287,322L287,322L293,322L296,319L302,319L301,322L303,322L302,327L302,329L305,334L306,333L309,332L309,333L309,333L310,328L313,328L316,330L317,326L319,325L324,324L324,324L325,324L325,314L323,313L322,307L320,307L320,305L321,301L322,301L323,295L321,292L321,291L321,291Z " data-fips="CH11" data-fips-="" data-iso3="CHN" data-name="Hunan"/><path d="M252,260L249,263L245,262L241,253L235,252L232,247L227,253L228,254L223,258L224,255L223,254L223,254L223,255L220,257L218,258L218,262L214,263L207,260L207,261L197,251L195,250L189,251L189,253L190,262L191,262L191,263L195,265L196,268L197,272L199,274L198,274L200,280L201,294L201,294L200,295L200,298L202,303L204,299L206,300L208,305L210,308L213,307L216,313L223,324L232,321L231,316L232,311L233,311L236,308L236,305L238,304L239,300L243,300L243,303L246,307L249,305L251,306L251,308L251,308L251,308L259,307L259,305L254,302L254,300L257,298L260,300L260,300L260,300L258,297L257,296L254,294L251,292L252,290L254,288L253,286L255,283L258,285L261,284L262,286L265,286L266,284L268,280L272,277L276,270L275,266L276,265L276,265L272,266L268,264L264,263L264,261L257,262L256,260L253,262L252,260L252,260L252,260Z " data-fips="CH32" data-fips-="CH27" data-iso3="CHN" data-name="Sichuan"/><path d="M201,294L200,294L199,298L198,296L196,302L192,304L192,304L193,309L194,308L196,309L197,317L195,323L195,325L193,327L191,327L191,329L187,333L186,338L187,341L185,342L190,341L197,341L195,344L197,348L197,350L202,351L200,354L201,355L199,360L205,360L207,366L211,366L216,363L216,367L218,369L221,369L221,363L220,362L226,357L238,354L241,357L242,354L247,354L248,350L251,350L254,350L254,350L257,347L258,347L260,344L258,341L251,341L251,340L247,339L245,336L245,336L245,336L247,331L243,327L245,322L245,319L242,318L240,320L238,315L244,311L246,312L251,308L251,308L251,308L251,306L249,305L246,307L243,303L243,300L239,300L238,304L236,305L236,308L233,311L232,311L231,316L232,321L223,324L216,313L213,307L210,308L208,305L206,300L204,299L202,303L200,298L200,295L201,294Z " data-fips="CH29" data-fips-="" data-iso3="CHN" data-name="Yunnan"/><path d="M345,172L339,173L338,171L335,163L333,162L327,165L328,168L323,171L320,170L317,174L314,169L308,176L308,179L310,182L311,182L311,183L312,186L314,186L310,189L315,193L314,197L310,200L309,204L314,212L311,219L310,221L312,223L312,223L312,223L315,224L322,225L325,224L326,224L325,223L324,221L332,209L340,201L340,201L339,201L338,200L337,199L337,199L334,198L331,197L332,195L331,191L331,190L330,190L323,192L320,188L323,184L322,183L327,180L326,178L328,178L332,181L333,184L334,184L334,184L336,189L338,189L340,192L340,192L342,194L347,192L351,183L351,183L348,179L343,177L345,172L345,172L345,172Z " data-fips="CH10" data-fips-="" data-iso3="CHN" data-name="Hebei"/><path d="M325,224L322,225L315,224L312,223L312,223L312,223L312,230L308,234L301,235L296,239L294,240L291,242L289,242L288,242L288,242L291,246L291,249L294,253L294,254L294,255L299,260L304,261L312,260L314,261L316,260L318,265L319,266L324,266L324,267L330,268L330,268L330,267L334,261L326,254L328,250L330,243L333,244L337,243L333,238L333,238L332,238L330,238L327,237L322,234L324,231L329,226L329,224L325,226L326,224L326,224L325,224Z " data-fips="CH09" data-fips-="" data-iso3="CHN" data-name="Henan"/><path d="M371,147L371,147L371,149L369,150L366,154L363,153L364,155L361,156L360,158L357,158L355,161L354,161L350,167L349,165L345,161L344,163L345,168L346,171L345,172L345,172L343,177L348,179L351,183L352,183L354,181L357,175L364,173L365,173L363,182L364,186L366,187L362,192L363,193L369,189L370,185L373,182L378,178L382,178L383,175L386,171L386,170L390,166L390,166L390,163L385,158L385,155L381,151L379,147L377,150L371,146L371,147L371,147Z " data-fips="CH19" data-fips-="" data-iso3="CHN" data-name="Liaoning"/><path d="M340,201L332,209L324,221L325,223L326,224L326,224L325,226L329,224L329,226L324,231L322,234L327,237L330,238L332,238L333,238L333,237L333,237L333,238L334,237L334,237L334,237L337,233L340,237L344,237L347,235L350,236L350,234L352,234L352,231L355,229L356,229L357,226L364,218L365,213L371,209L374,209L376,207L376,203L372,202L369,204L362,202L360,203L353,210L351,210L349,208L349,203L347,202L342,202L341,202L340,201Z " data-fips="CH25" data-fips-="" data-iso3="CHN" data-name="Shandong"/><path d="M331,189L333,190L333,188L333,186L333,185L332,186L330,187L330,188L331,189L331,189L331,189Z " data-fips="CH22" data-fips-="CH28" data-iso3="CHN" data-name="Tianjin"/><path d="M334,184L334,184L334,184L333,185L333,185L333,186L333,188L333,190L331,189L331,189L331,190L331,190L331,190L331,190L331,190L331,191L332,195L331,197L334,198L337,199L337,199L338,193L340,193L340,192L338,189L336,189L334,184L334,184Z " data-fips="CH28" data-fips-="" data-iso3="CHN" data-name="Tianjin"/><path d="M355,283L350,282L348,280L345,282L344,280L342,279L339,282L338,282L338,282L336,283L335,282L328,287L325,288L322,290L321,291L321,292L323,295L322,301L321,301L320,305L320,307L322,307L323,313L325,314L325,324L324,324L325,324L326,325L330,324L331,327L328,331L329,333L338,329L341,329L341,327L341,327L341,327L341,325L346,312L345,309L348,306L350,299L354,298L358,293L359,293L359,293L355,287L354,286L355,283L355,283L355,283Z " data-fips="CH03" data-fips-="" data-iso3="CHN" data-name="Jiangxi"/><path d="M355,229L352,231L352,234L350,234L350,236L347,235L344,237L340,237L337,233L334,237L334,237L334,237L339,238L346,243L346,244L349,243L348,248L350,248L352,252L354,252L356,249L359,252L356,253L354,254L355,256L353,260L357,262L358,265L361,264L364,265L364,265L364,265L367,265L372,267L374,265L374,264L374,264L375,263L376,260L377,259L377,259L370,256L367,257L366,257L369,255L381,257L380,255L376,252L376,251L371,249L371,246L364,236L359,234L355,229L355,229Z " data-fips="CH04" data-fips-="" data-iso3="CHN" data-name="Jiangsu"/><path d="M374,264L375,264L376,266L376,266L378,267L378,267L380,265L382,264L381,261L377,259L377,259L376,260L375,263L374,264L374,264Z M381,258L376,256L378,259L381,258Z " data-fips="CH23" data-fips-="" data-iso3="CHN" data-name="Shanghai"/><path d="M364,265L364,266L362,273L360,273L360,277L356,283L355,283L355,283L354,286L355,287L359,293L359,293L359,293L363,298L363,300L376,299L376,300L376,300L380,290L382,290L383,287L382,285L384,282L382,282L382,279L385,280L385,276L383,277L384,273L382,273L378,270L374,273L372,271L375,270L378,267L378,267L376,266L376,266L375,264L374,264L374,265L372,267L367,265L364,265L364,265Z " data-fips="CH02" data-fips-="" data-iso3="CHN" data-name="Zhejiang"/><path d="M361,121L361,121L359,127L353,126L352,128L357,131L356,133L357,137L359,141L362,139L364,137L369,144L369,146L370,147L371,147L371,147L371,146L377,150L379,147L381,151L385,155L385,158L390,163L390,166L390,166L392,165L395,157L405,157L405,155L403,152L408,149L410,145L411,145L412,139L413,139L415,141L417,139L420,137L419,132L419,132L417,133L411,129L405,133L404,136L399,131L398,129L395,133L391,129L389,129L386,125L384,125L374,125L371,127L369,125L367,123L366,120L361,121L361,121Z " data-fips="CH05" data-fips-="" data-iso3="CHN" data-name="Jilin"/><path d="M192,167L196,178L195,179L196,182L199,185L198,188L203,187L209,185L211,186L212,187L207,195L214,199L216,199L217,202L220,206L222,206L225,205L225,202L228,201L234,201L238,199L241,202L235,209L235,214L237,215L242,218L242,218L243,217L250,215L252,212L255,202L259,199L259,208L258,210L266,213L266,213L267,213L269,215L271,215L276,212L276,207L280,202L284,197L287,199L290,196L290,197L290,197L291,197L293,194L294,195L298,188L307,187L310,185L310,183L311,182L310,182L308,179L308,176L314,169L317,174L320,170L323,171L328,168L327,165L333,162L335,163L338,171L339,173L345,172L345,172L346,171L345,168L344,163L345,161L349,165L350,167L354,161L355,161L357,158L360,158L361,156L364,155L363,153L366,154L369,150L371,149L371,147L371,147L370,147L369,146L369,144L364,137L362,139L359,141L357,137L356,133L357,131L352,128L353,126L359,127L361,121L361,121L360,120L360,118L362,116L360,116L355,114L354,111L357,107L358,105L362,99L364,102L363,98L364,92L366,91L364,86L365,80L366,78L361,70L359,70L358,72L351,75L347,74L345,72L344,68L342,67L339,68L335,66L334,59L334,59L328,67L332,69L333,73L329,84L328,92L326,93L322,98L314,96L311,109L311,112L310,113L313,116L314,115L318,114L322,116L324,112L328,111L334,116L339,120L338,123L329,123L327,125L324,126L324,127L321,128L317,135L313,138L307,140L302,146L299,146L294,144L290,145L289,148L289,151L292,155L290,159L286,161L283,166L280,168L258,172L247,178L246,179L243,179L243,177L237,178L233,175L225,174L220,170L212,169L208,170L192,167L192,167Z " data-fips="CH20" data-fips-="" data-iso3="CHN" data-name="Nei Mongol"/><path d="M334,59L335,66L339,68L342,67L344,68L345,72L347,74L351,75L358,72L359,70L361,70L366,78L365,80L364,86L366,91L364,92L363,98L364,102L362,99L358,105L357,107L354,111L355,114L360,116L362,116L360,118L360,120L361,121L361,121L366,120L367,123L369,125L371,127L374,125L384,125L386,125L389,129L391,129L395,133L398,129L399,131L404,136L405,133L411,129L417,133L419,132L418,132L417,127L413,120L418,115L424,114L425,104L425,96L424,90L426,86L424,83L421,81L413,89L413,91L406,93L404,95L401,91L401,89L397,85L396,86L389,82L382,83L379,82L377,80L377,78L375,77L373,74L370,72L365,64L361,59L361,59L354,55L353,57L344,55L342,56L337,58L334,59L334,59Z " data-fips="CH08" data-fips-="" data-iso3="CHN" data-name="Heilongjiang"/></g></svg> \ No newline at end of file
diff --git a/plugins/UserCountryMap/svg/IND.svg b/plugins/UserCountryMap/svg/IND.svg
index 9dc42b04c2..8607b7e698 100644
--- a/plugins/UserCountryMap/svg/IND.svg
+++ b/plugins/UserCountryMap/svg/IND.svg
@@ -1 +1,2 @@
-<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'><svg enable_background="new 0 0 450 376" height="376px" pretty_print="False" style="stroke-linejoin: round; stroke:#000; fill: none;" version="1.1" viewBox="0 0 450 376" width="450px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"><![CDATA[path { fill-rule: evenodd; }]]></style></defs><metadata><views><view h="376.0" padding="0.06" w="450"><proj id="laea" lat0="30.7356565416" lon0="76.7701955882"/><bbox h="377.7" w="358.35" x="883.21" y="922.02"/></view></views></metadata><g class="" id="context"><path d="M185,35L184,36L184,36L183,36L184,43L187,46L189,53L188,56L188,56L187,56L187,56L187,57L187,57L187,57L187,57L186,57L183,54L183,54L183,54L183,54L183,54L182,55L182,55L180,55L180,55L180,55L181,58L184,62L185,70L185,70L185,70L185,70L185,70L185,70L186,69L186,69L186,70L186,70L186,70L186,70L186,70L186,69L187,69L187,69L193,74L194,74L199,77L199,77L199,77L199,77L199,77L199,77L199,77L207,82L209,85L211,84L219,81L220,83L232,90L236,94L239,93L242,93L242,95L252,102L253,104L259,103L263,108L264,105L268,107L268,105L275,107L285,106L286,106L286,106L285,106L285,106L285,105L285,105L285,105L286,105L286,105L286,105L288,104L288,104L288,104L288,104L288,104L288,104L288,104L288,104L289,104L289,104L289,104L289,104L289,104L290,104L290,103L290,103L290,103L290,103L293,106L293,111L295,110L301,101L307,99L317,101L319,100L327,103L327,103L327,103L328,102L328,102L328,102L329,102L329,102L329,102L330,102L329,101L330,101L330,101L330,102L330,102L330,102L330,102L330,102L331,101L331,101L331,101L331,101L331,102L331,102L331,102L331,101L331,101L331,101L331,101L331,101L332,101L332,101L332,101L332,101L333,101L333,101L333,100L333,100L333,100L333,100L333,100L334,100L334,100L334,99L334,97L334,97L335,96L335,96L335,96L335,96L335,96L335,96L336,96L336,95L336,95L336,95L336,95L336,95L336,95L337,95L337,95L337,95L337,94L337,94L337,94L338,94L338,93L338,92L338,90L339,90L339,90L339,90L339,90L339,90L339,90L339,90L339,90L339,90L339,90L339,90L339,90L340,90L341,89L343,89L343,89L343,89L343,89L343,89L343,89L343,89L344,89L344,89L344,89L344,88L344,88L345,88L345,88L345,88L345,87L345,87L345,87L345,87L345,87L345,87L346,87L346,87L346,87L346,87L346,87L346,87L346,87L346,87L346,86L346,86L346,86L346,86L346,86L347,86L347,86L347,86L346,85L346,85L346,85L346,85L347,85L347,85L347,85L347,85L347,85L348,84L348,83L348,83L349,82L349,82L349,82L349,82L350,82L350,82L350,81L350,81L351,81L351,81L351,81L351,81L351,81L352,80L352,80L352,80L354,81L354,81L356,81L356,81L356,81L356,81L356,81L356,81L356,81L358,81L359,81L361,82L361,82L361,82L361,81L361,80L361,80L361,80L362,80L362,80L362,80L362,80L362,79L362,79L362,79L362,79L362,79L362,79L362,79L362,79L362,79L362,79L362,79L362,79L362,79L363,78L363,78L363,78L363,78L363,78L363,78L363,78L363,78L363,78L363,78L363,78L363,78L364,78L364,77L364,77L364,77L364,77L364,77L364,77L365,77L365,77L365,76L365,76L365,76L366,76L366,76L366,75L366,75L367,75L369,78L369,78L369,78L369,77L370,77L370,77L370,77L370,77L370,77L370,77L370,78L370,78L369,79L369,79L369,79L369,80L368,80L368,80L368,80L368,80L368,80L369,81L369,81L369,82L369,82L369,82L370,81L370,81L370,80L370,80L372,79L372,81L374,83L374,83L372,84L372,84L372,84L373,84L372,85L372,85L372,85L372,85L372,85L372,86L372,86L371,86L371,86L371,86L372,87L372,87L372,87L372,87L372,87L371,87L371,87L371,88L371,88L371,88L371,88L372,88L372,88L372,88L372,88L373,88L373,87L373,87L373,87L373,87L373,87L374,87L374,87L374,87L374,87L377,87L377,87L379,87L379,87L379,87L379,87L379,87L383,88L384,84L390,87L390,87L392,84L394,86L396,84L396,76L398,77L396,62L394,54L389,48L391,47L388,44L386,40L380,35L377,35L373,36L372,42L368,44L369,47L366,47L355,48L354,44L351,43L345,39L341,42L333,42L326,41L321,42L321,41L312,36L300,36L294,31L294,19L290,13L290,13L290,4L286,3L278,1L268,3L256,7L255,11L250,14L246,13L237,18L231,19L226,18L225,16L220,15L215,20L210,20L198,19L194,32L188,32L185,35L185,35Z " data-iso="TIB"/><path d="M141,0L141,0L141,0L120,0L115,3L113,3L112,0L44,0L43,2L36,5L29,6L27,11L23,13L19,13L12,9L11,6L10,6L10,7L7,16L3,19L4,22L0,23L0,31L3,31L0,34L0,57L6,59L7,66L0,72L0,78L12,84L23,84L29,86L31,85L39,85L51,83L54,71L59,67L62,66L66,67L69,63L75,61L78,61L80,63L86,60L86,54L88,49L91,46L97,43L95,39L95,35L99,36L106,34L105,29L110,24L112,18L109,10L118,3L123,2L134,2L140,1L141,0Z " data-iso="AFG"/><path d="M336,179L334,177L335,178L336,179Z M326,172L324,168L325,173L326,172Z M330,169L328,168L329,169L330,169Z M322,173L322,169L318,165L320,171L319,174L322,173Z M303,176L306,180L307,178L307,173L308,179L314,174L314,177L316,177L319,172L317,166L318,164L316,158L318,158L319,161L323,167L325,167L328,163L337,183L341,187L341,187L339,180L343,181L342,173L342,172L342,171L338,161L336,152L332,152L331,160L329,161L326,160L324,155L326,148L331,146L334,137L336,136L332,134L314,136L307,135L307,132L304,125L302,128L297,125L293,125L291,123L287,130L293,135L295,134L297,138L292,139L292,141L289,142L288,145L294,149L295,149L296,153L295,157L297,160L297,161L300,162L299,164L302,176L303,176Z " data-iso="BGD"/><path d="M323,103L321,101L318,100L317,101L309,101L309,99L306,99L297,107L295,110L294,112L298,118L300,117L308,117L325,115L329,114L329,108L326,107L323,103L323,103Z " data-iso="BTN"/><path d="M428,374L425,370L423,369L412,368L409,369L403,369L398,366L392,368L394,374L428,374Z M393,364L392,363L392,364L393,364Z " data-iso="IDN"/><path d="M375,354L372,352L373,349L375,354Z M369,340L368,339L368,338L369,340Z M364,338L364,338L363,338L364,338Z M359,328L358,327L359,327L359,328Z M354,311L352,309L354,307L354,311Z M356,301L355,300L355,299L356,301Z M359,292L360,294L359,293L359,292Z M356,299L354,297L355,289L356,275L358,280L358,286L356,293L356,299Z M208,83L202,89L198,99L202,103L206,103L211,106L214,109L218,111L221,111L225,113L227,113L234,116L240,115L248,116L272,125L276,125L287,118L285,112L285,106L285,106L290,103L293,104L294,112L294,112L298,118L300,117L308,117L325,115L329,114L329,108L326,107L323,103L324,103L331,101L334,99L334,98L339,90L346,87L353,80L354,81L359,82L367,75L370,78L373,87L382,88L383,88L379,96L380,98L383,102L377,100L371,103L366,109L363,112L364,119L363,122L359,130L361,131L360,135L355,147L349,146L348,146L349,154L348,169L343,172L342,172L342,171L338,161L336,152L332,152L331,160L329,161L326,160L324,155L326,148L331,146L334,137L336,136L332,134L314,136L307,135L307,132L304,125L302,128L297,125L293,125L291,123L287,130L293,135L295,134L297,138L292,139L292,141L289,142L288,145L294,149L295,149L296,153L295,157L297,160L297,161L300,162L299,164L302,176L302,177L303,181L299,182L299,177L296,182L292,182L290,180L282,184L278,188L280,194L278,200L272,203L273,204L265,208L263,206L261,208L261,211L256,216L249,226L244,229L239,235L229,242L228,249L227,250L218,251L213,259L211,258L206,259L203,264L202,268L204,276L203,278L206,287L204,284L203,285L206,288L205,296L201,305L199,310L201,325L195,325L190,334L181,342L179,349L172,352L170,351L166,348L161,343L158,336L157,330L159,335L158,330L152,316L148,309L144,304L141,298L139,292L135,276L131,270L128,261L124,256L123,251L121,237L120,233L118,222L120,219L116,209L119,197L116,191L118,188L115,187L115,181L112,180L109,185L112,189L102,196L94,197L91,196L86,192L83,188L75,179L77,176L78,178L89,175L93,169L84,172L78,171L74,168L70,161L67,159L67,158L73,157L74,153L83,154L86,155L94,153L94,154L99,153L100,150L96,138L92,137L90,134L91,127L90,126L84,123L92,110L97,110L97,111L107,111L111,109L119,99L124,93L130,85L133,83L134,79L140,72L140,65L141,63L148,59L145,56L143,56L142,52L140,52L135,46L136,37L135,37L133,33L135,29L138,28L153,31L160,28L166,24L166,24L167,23L171,20L172,20L173,19L174,19L176,19L176,22L179,30L182,31L185,33L185,35L183,36L184,41L187,47L188,55L185,57L183,54L180,55L184,66L184,70L187,69L200,79L208,82L208,83Z " data-iso="IND"/><path d="M10,6L10,6L10,3L10,1L10,0L0,0L0,23L4,22L3,19L7,16L10,7L10,6Z M0,34L3,31L0,31L0,34Z M0,72L7,66L6,59L0,57L0,72Z M0,122L7,118L14,118L16,111L13,111L12,108L12,101L10,97L4,94L1,89L0,85L0,122Z " data-iso="IRN"/><path d="M173,19L170,19L168,19L164,18L163,17L164,18L164,20L166,23L166,24L167,23L171,20L172,20L173,19L173,19Z " data-iso="KAS"/><path d="M448,150L449,151L451,152L457,155L458,161L462,165L468,165L469,164L475,162L476,167L479,167L483,170L480,176L474,177L475,179L473,182L488,186L489,190L495,194L501,199L504,201L508,204L509,207L511,209L512,208L520,212L524,222L523,224L524,228L520,233L516,235L509,242L507,242L502,240L501,241L498,239L501,236L500,221L497,220L497,218L493,217L490,214L488,207L488,204L476,194L469,194L466,199L462,202L455,200L450,206L450,206L443,210L445,202L443,199L445,192L442,185L434,186L434,181L431,177L429,179L429,178L429,178L433,171L432,170L437,162L438,161L438,161L440,165L446,164L445,163L442,148L446,148L447,149L448,150Z " data-iso="LAO"/><path d="M202,333L202,333L201,332L202,333Z M219,374L225,370L226,361L221,351L220,347L218,346L212,336L208,334L204,334L204,340L202,342L202,344L200,352L202,367L204,374L219,374Z " data-iso="LKA"/><path d="M422,296L422,297L422,298L422,296Z M426,296L426,294L425,296L426,296Z M422,290L422,287L422,286L422,290Z M420,288L419,286L419,288L420,288Z M420,282L418,281L419,282L420,282Z M422,276L422,277L422,279L422,276Z M376,244L376,242L375,244L376,244Z M372,243L373,239L371,242L372,243Z M407,233L406,230L406,231L407,233Z M358,200L360,203L361,202L358,200Z M355,196L354,196L356,198L355,196Z M350,197L348,195L348,196L350,197Z M383,88L379,96L380,98L383,102L377,100L371,103L366,109L363,112L364,119L363,122L359,130L361,131L360,135L355,147L349,146L348,146L349,154L348,169L343,172L342,172L342,173L343,181L339,180L341,187L341,188L346,193L350,191L349,193L357,197L362,201L359,204L356,203L362,208L361,205L368,215L371,223L371,226L369,236L368,241L371,241L374,235L374,243L380,243L382,239L382,244L384,242L386,238L389,236L391,232L396,231L398,225L397,223L401,224L405,230L408,231L408,236L409,238L412,250L416,258L418,264L419,263L421,265L425,273L425,279L426,280L427,286L428,285L428,292L426,299L428,307L429,305L429,305L429,298L434,293L438,283L434,275L432,273L430,269L430,267L427,258L422,254L416,248L416,245L420,242L419,234L422,232L422,229L420,230L416,223L406,214L406,212L401,206L405,205L405,194L408,189L409,190L417,188L417,184L422,182L421,180L428,178L429,178L429,178L433,171L432,170L437,162L438,161L438,161L436,159L433,163L428,164L424,161L424,158L416,159L415,155L416,149L409,145L407,140L407,135L400,136L395,140L394,134L392,133L397,118L398,118L402,113L401,105L398,93L396,93L390,87L390,87L388,85L387,85L383,88L383,88Z " data-iso="MMR"/><path d="M447,347L445,348L446,350L447,347Z " data-iso="MYS"/><path d="M284,106L277,108L269,105L267,107L263,106L263,108L259,104L253,103L243,97L241,93L240,93L236,94L231,89L229,89L224,85L219,81L212,81L211,84L209,84L208,83L202,89L198,99L202,103L206,103L211,106L214,109L218,111L221,111L225,113L227,113L234,116L240,115L248,116L272,125L276,125L287,118L285,112L285,106L284,106Z " data-iso="NPL"/><path d="M67,158L73,157L74,153L83,154L86,155L94,153L94,154L99,153L100,150L96,138L92,137L90,134L91,127L90,126L84,123L92,110L97,110L97,111L107,111L111,109L119,99L124,93L130,85L133,83L134,79L140,72L140,65L141,63L148,59L145,56L143,56L142,52L140,52L135,46L136,37L135,37L133,33L135,29L138,28L153,31L160,28L166,24L166,24L166,23L164,20L164,18L163,17L163,17L158,15L156,13L155,6L149,2L142,0L141,0L140,1L134,2L123,2L118,3L109,10L112,18L110,24L105,29L106,34L99,36L95,35L95,39L97,43L91,46L88,49L86,54L86,60L80,63L78,61L75,61L69,63L66,67L62,66L59,67L54,71L51,83L39,85L31,85L29,86L23,84L12,84L0,78L0,85L1,89L4,94L10,97L12,101L12,108L13,111L16,111L14,118L7,118L0,122L0,135L4,136L12,136L17,136L18,135L22,135L28,137L31,137L41,137L48,135L52,140L52,144L57,146L58,153L61,158L67,158L67,158Z " data-iso="PAK"/><path d="M445,347L445,345L444,346L445,347Z M437,335L436,336L437,337L437,335Z M428,333L427,331L427,333L428,333Z M426,319L426,318L425,318L426,319Z M450,206L443,210L445,202L443,199L445,192L442,185L434,186L434,181L431,177L429,179L429,178L428,178L421,180L422,182L417,184L417,188L409,190L408,189L405,194L405,205L401,206L406,212L406,214L416,223L420,230L422,229L422,232L419,234L420,242L416,245L416,248L422,254L427,258L430,267L430,269L432,273L434,275L438,283L434,293L429,298L429,305L428,309L426,316L426,327L427,329L431,328L433,330L436,332L440,337L443,337L445,340L445,343L450,347L450,324L446,320L445,315L442,313L438,315L435,307L434,302L437,295L438,287L441,276L440,272L441,266L440,265L442,261L450,260L450,206L450,206Z " data-iso="THA"/><path d="M112,0L113,3L115,3L120,0L112,0Z " data-iso="TJK"/><path d="M10,6L11,6L12,9L19,13L23,13L27,11L29,6L36,5L43,2L44,0L10,0L10,1L10,3L10,6L10,6Z " data-iso="TKM"/><path d="M447,149L448,150L449,151L450,151L450,143L450,143L447,148L447,149Z " data-iso="VNM"/><path d="M141,0L142,0L149,2L155,6L156,13L158,15L163,17L163,17L164,18L168,19L170,19L173,19L173,19L174,19L174,19L176,19L176,22L179,30L182,31L185,33L185,35L184,36L185,35L185,35L188,32L194,32L198,19L210,20L215,20L220,15L225,16L226,18L231,19L237,18L246,13L250,14L255,11L256,7L268,3L278,1L286,3L290,4L290,13L290,13L294,19L294,31L300,36L312,36L321,41L321,42L326,41L333,42L341,42L345,39L351,43L354,44L355,48L366,47L369,47L368,44L372,42L373,36L377,35L380,35L386,40L388,44L391,47L389,48L394,54L396,62L398,77L396,76L396,84L394,86L392,84L390,87L390,87L390,87L396,93L398,93L401,105L402,113L398,118L397,118L392,133L394,134L395,140L400,136L407,135L407,140L409,145L416,149L415,155L416,159L424,158L424,161L428,164L433,163L436,159L438,161L438,161L438,161L440,165L446,164L445,163L442,148L446,148L447,149L447,148L450,143L450,143L450,0L141,0L141,0L141,0Z " data-iso="CHN"/></g><g class="" id="regions"><path d="M163,76L163,77L163,77L164,78L164,78L164,78L164,77L164,77L164,77L164,77L163,76Z " data-fips="IN05" data-fips-="" data-iso3="IND" data-name="Chandigarh" data-p="CH"/><path d="M167,100L164,103L164,104L169,104L169,104L169,104L168,101L168,100L168,100L167,100Z " data-fips="IN07" data-fips-="" data-iso3="IND" data-name="Delhi" data-p="DL"/><path d="M154,55L154,55L151,61L153,62L157,69L160,70L163,75L163,75L163,75L167,77L167,80L172,82L172,81L172,81L174,80L174,74L175,72L179,71L184,71L185,70L185,70L185,70L185,70L185,70L183,68L185,66L184,62L180,55L180,55L180,53L175,53L173,49L169,51L167,50L163,47L161,47L155,51L153,51L155,54L154,55L154,55Z " data-fips="IN11" data-fips-="" data-iso3="IND" data-name="Himachal Pradesh" data-p="HP"/><path d="M172,82L167,80L167,77L163,75L163,75L163,75L164,76L164,76L164,76L164,77L164,77L164,77L164,77L164,78L164,78L164,78L165,80L163,81L162,84L158,85L157,87L154,89L146,88L146,87L143,86L140,87L139,87L139,87L140,93L144,95L148,95L150,102L153,105L155,112L156,113L157,110L162,110L164,108L165,110L165,114L168,113L169,113L169,113L171,111L169,104L169,104L169,104L164,104L164,103L167,100L168,100L168,100L167,92L168,86L172,82L172,81L172,82Z " data-fips="IN10" data-fips-="" data-iso3="IND" data-name="Haryana" data-p="HR"/><path d="M148,58L150,58L153,56L154,56L154,55L154,55L155,54L153,51L155,51L161,47L163,47L167,50L169,51L173,49L175,53L180,53L180,55L180,55L180,55L180,55L180,55L183,54L183,54L183,54L183,54L183,54L183,54L185,57L185,57L187,57L187,57L187,57L187,56L187,56L188,56L188,56L188,55L190,55L191,53L190,50L190,47L187,46L184,43L184,36L184,36L185,35L185,35L186,34L179,30L176,22L176,20L173,19L166,24L161,28L160,28L153,31L152,31L148,29L146,29L138,28L135,29L135,35L134,36L138,37L135,39L137,43L135,47L139,52L142,51L141,54L147,57L148,58Z " data-fips="IN12" data-fips-="" data-iso3="IND" data-name="Jammu and Kashmir" data-p="JK"/><path d="M213,259L213,258L212,258L213,259Z M172,229L173,229L172,235L171,237L174,238L171,243L171,252L172,253L171,257L167,258L166,261L167,268L163,268L165,278L168,277L171,277L170,280L167,281L166,284L171,283L172,285L175,282L178,282L179,284L182,287L183,289L185,289L183,294L181,296L181,296L181,297L185,296L187,292L192,292L195,290L195,289L200,290L205,287L205,287L203,287L203,285L205,285L205,286L205,286L205,286L205,286L205,285L204,280L204,274L202,267L206,259L210,257L211,259L212,256L214,257L217,251L226,250L229,247L228,245L230,241L245,229L248,227L256,216L256,216L254,216L252,219L248,220L246,220L243,218L241,218L239,221L236,223L237,224L234,226L232,228L229,225L228,229L227,231L225,231L218,234L217,234L216,234L213,234L212,232L208,225L204,223L204,223L204,223L199,219L200,216L200,214L196,213L188,212L187,211L183,211L179,216L176,217L175,219L176,222L174,224L172,228L172,228L172,229Z M228,247L228,246L228,247L228,247Z " data-fips="IN02" data-fips-="" data-iso3="IND" data-name="Andhra Pradesh" data-p="AP"/><path d="M159,309L152,306L147,302L146,300L140,296L140,296L141,299L143,302L144,305L144,305L145,304L146,304L145,305L146,305L152,316L155,324L160,335L157,331L158,335L162,343L166,349L167,350L168,345L169,343L169,341L171,335L168,334L169,332L169,326L166,327L164,325L164,321L165,320L162,318L163,317L162,315L160,315L157,311L159,309L159,309L159,309Z " data-fips="IN13" data-fips-="" data-iso3="IND" data-name="Kerala" data-p="KL"/><path d="M117,349L118,349L118,349L117,349Z M125,328L125,328L125,328L125,328Z M125,327L125,327L125,327L125,327Z M113,322L113,322L113,322L113,322Z M112,319L112,319L112,319L112,319Z M126,319L125,319L126,319L126,319Z M107,318L108,318L107,318L107,318Z M114,315L114,315L114,315L114,315Z M115,314L115,313L115,314L115,314Z M114,308L114,308L114,308L114,308Z " data-fips="IN14" data-fips-="IN13" data-iso3="IND" data-name="Lakshadweep" data-p="LD"/><path d="M275,176L267,174L268,177L266,180L265,179L262,178L259,180L256,175L251,176L248,177L245,175L245,175L245,175L244,177L240,180L237,192L230,194L229,196L228,201L229,206L232,207L227,209L223,206L222,208L224,211L227,219L226,222L223,224L217,233L217,234L217,234L218,234L225,231L227,231L228,229L229,225L232,228L234,226L237,224L236,223L239,221L241,218L243,218L246,220L248,220L252,219L254,216L256,216L256,216L263,209L261,210L261,208L265,206L264,209L271,206L274,203L275,201L280,196L280,194L279,187L280,185L285,183L285,183L284,181L282,181L279,178L276,177L275,177L275,176Z " data-fips="IN21" data-fips-="" data-iso3="IND" data-name="Orissa" data-p="OR"/><path d="M122,206L121,204L121,203L119,206L119,206L119,206L121,207L121,207L122,207L122,206L122,206Z " data-fips="IN06" data-fips-="" data-iso3="IND" data-name="Dadra and Nagar Haveli" data-p="DN"/><path d="M172,229L169,228L167,230L166,230L164,234L162,236L161,235L158,237L158,240L149,240L150,243L143,245L141,246L141,247L133,250L136,253L134,260L132,261L132,261L132,261L133,262L131,270L131,270L133,272L138,284L138,287L140,295L140,296L146,300L147,302L152,306L159,309L159,309L159,309L164,310L166,307L167,308L171,308L175,304L174,303L174,297L180,296L181,296L181,296L183,294L185,289L183,289L182,287L179,284L178,282L175,282L172,285L171,283L166,284L167,281L170,280L171,277L168,277L165,278L163,268L167,268L166,261L167,258L171,257L172,253L171,252L171,243L174,238L171,237L172,235L173,229L172,229L172,229Z " data-fips="IN19" data-fips-="" data-iso3="IND" data-name="Karnataka" data-p="KA"/><path d="M208,191L205,190L202,188L198,189L198,189L188,189L184,190L181,188L178,191L171,190L172,189L171,187L167,187L163,189L162,193L157,195L156,193L153,191L147,191L143,189L140,188L138,187L137,184L133,184L133,184L132,184L130,189L130,198L125,199L124,205L122,206L122,206L122,207L121,207L121,207L119,206L119,206L119,206L118,206L117,206L116,207L116,207L116,213L118,216L117,219L119,218L118,227L121,237L122,246L124,255L126,260L127,260L129,260L129,261L131,261L132,261L132,261L134,260L136,253L133,250L141,247L141,246L143,245L150,243L149,240L158,240L158,237L161,235L162,236L164,234L166,230L167,230L169,228L172,229L172,229L172,228L172,228L174,224L176,222L175,219L176,217L179,216L183,211L187,211L188,212L196,213L200,214L200,216L199,219L204,223L204,223L204,223L205,219L206,216L210,216L211,214L206,208L207,206L205,206L207,204L207,200L206,200L205,195L208,192L208,191L208,191Z " data-fips="IN16" data-fips-="IN35" data-iso3="IND" data-name="Maharashtra" data-p="MH"/><path d="M374,349L372,350L374,355L375,352L374,349Z M371,349L372,348L370,349L371,349Z M370,340L369,340L369,341L370,340Z M369,338L369,338L369,338L369,338Z M369,338L368,338L369,340L369,338Z M370,335L369,334L370,334L370,335Z M355,308L353,308L354,312L355,308Z M355,301L355,299L355,301L355,301Z M351,300L350,299L350,300L351,300Z M360,294L359,292L358,293L360,294Z M360,291L360,290L359,291L360,291Z M354,284L355,282L354,282L354,284Z M357,274L356,277L356,278L355,286L355,291L354,295L356,299L356,292L358,287L357,281L358,280L357,274Z " data-fips="IN01" data-fips-="" data-iso3="IND" data-name="Andaman and Nicobar" data-p="AN"/><path d="M329,113L325,115L322,114L322,115L315,116L311,115L308,118L306,118L306,118L306,122L304,125L304,125L305,125L306,128L307,133L307,134L309,128L312,126L319,126L321,127L322,128L325,124L327,125L328,123L332,123L332,128L338,128L337,129L339,132L335,136L336,136L334,137L334,139L334,142L334,142L335,144L335,145L335,145L336,145L336,145L339,145L340,143L343,142L343,142L343,142L344,138L345,134L346,131L347,130L347,130L345,128L351,122L351,119L353,115L355,112L362,107L362,106L362,106L366,103L370,102L370,100L366,94L364,95L351,102L348,107L348,108L343,110L339,111L337,110L331,113L329,113L329,113Z " data-fips="IN03" data-fips-="" data-iso3="IND" data-name="Assam" data-p="AS"/><path d="M347,130L346,131L345,134L344,138L343,142L343,142L343,142L344,145L347,146L347,146L355,147L357,144L358,138L360,133L361,131L359,130L359,127L359,127L350,127L348,131L347,130L347,130Z " data-fips="IN17" data-fips-="" data-iso3="IND" data-name="Manipur" data-p="MN"/><path d="M362,106L362,107L355,112L353,115L351,119L351,122L345,128L347,130L347,130L347,130L348,131L350,127L359,127L359,127L363,122L364,111L364,111L363,110L363,109L362,107L362,106Z " data-fips="IN20" data-fips-="" data-iso3="IND" data-name="Nagaland" data-p="NL"/><path d="M307,134L308,136L311,136L316,136L323,135L325,135L331,134L335,135L335,136L339,132L337,129L338,128L332,128L332,123L328,123L327,125L325,124L322,128L321,127L319,126L312,126L309,128L307,134L307,134Z " data-fips="IN18" data-fips-="" data-iso3="IND" data-name="Meghalaya" data-p="ML"/><path d="M154,55L154,56L153,56L150,58L148,58L148,58L140,65L141,73L138,75L132,81L133,83L133,83L133,86L138,86L139,87L140,87L143,86L146,87L146,88L154,89L157,87L158,85L162,84L163,81L165,80L164,78L164,78L164,78L163,77L163,77L163,76L164,77L164,76L164,76L164,76L163,75L163,75L163,75L160,70L157,69L153,62L151,61L154,55L154,55Z " data-fips="IN23" data-fips-="" data-iso3="IND" data-name="Punjab" data-p="PB"/><path d="M133,84L127,87L126,91L122,97L116,100L111,108L110,110L103,111L100,112L94,109L92,110L84,120L84,124L87,126L90,126L90,131L90,134L91,136L96,138L96,140L100,149L100,149L108,151L114,151L116,153L124,154L124,159L125,158L126,162L130,167L136,171L136,171L136,171L140,169L138,168L142,165L143,163L142,158L141,156L141,150L143,151L145,150L152,150L152,158L149,159L151,162L152,160L154,160L156,156L163,158L165,157L164,155L166,153L164,149L165,147L169,146L170,144L168,142L165,143L160,141L161,137L175,128L179,125L179,125L179,125L174,124L170,124L174,123L171,122L172,119L170,118L169,113L169,113L168,113L165,114L165,110L164,108L162,110L157,110L156,113L155,112L153,105L150,102L148,95L144,95L140,93L139,87L139,87L138,86L133,86L133,83L133,84Z " data-fips="IN24" data-fips-="" data-iso3="IND" data-name="Rajasthan" data-p="RJ"/><path d="M172,81L172,82L168,86L167,92L168,100L168,100L168,100L168,101L169,104L169,104L169,104L171,111L169,113L169,113L169,113L170,118L172,119L171,122L174,123L170,124L174,124L179,125L179,125L179,125L185,125L187,126L188,131L185,139L181,140L181,147L179,148L181,155L183,155L186,157L188,154L187,152L185,152L183,145L183,142L187,141L187,144L192,144L195,145L197,145L201,142L204,144L202,146L208,144L207,147L212,147L213,144L215,144L221,148L224,148L226,150L230,150L229,156L230,157L231,158L231,158L232,159L234,159L236,156L237,156L237,155L238,153L237,152L237,151L238,151L238,151L238,148L236,147L236,144L237,142L244,136L249,135L249,135L242,130L244,129L243,125L246,124L244,122L243,121L240,116L240,116L235,116L235,116L228,115L227,113L225,113L219,111L215,110L210,105L206,104L203,102L199,100L199,100L193,100L184,95L186,93L183,92L179,87L178,90L175,90L174,87L175,83L172,81L172,81Z " data-fips="IN36" data-fips-="IN27" data-iso3="IND" data-name="Uttar Pradesh" data-p="UP"/><path d="M187,69L187,69L186,69L186,70L186,70L186,70L186,70L186,70L186,69L186,69L185,70L185,70L185,70L185,70L185,70L184,71L179,71L175,72L174,74L174,80L172,81L172,81L172,81L175,83L174,87L175,90L178,90L179,87L183,92L186,93L184,95L193,100L199,100L198,100L200,96L201,89L206,83L199,77L199,77L199,77L199,77L199,77L199,77L199,77L194,74L193,74L187,68L187,69Z " data-fips="IN39" data-fips-="" data-iso3="IND" data-name="Uttaranchal" data-p="UT"/><path d="M285,139L281,138L278,142L277,147L273,148L271,151L265,147L262,148L256,152L253,150L250,153L244,149L242,150L239,151L238,151L237,151L237,152L238,153L237,155L237,156L237,156L242,162L244,163L247,172L245,175L245,175L245,175L248,177L251,176L256,175L259,180L262,178L265,179L266,180L268,177L267,174L275,176L275,177L276,176L273,170L272,170L272,167L270,167L265,165L271,160L275,158L276,156L283,153L285,150L287,146L285,139L285,139L285,139Z " data-fips="IN38" data-fips-="IN04|IN34" data-iso3="IND" data-name="Jharkhand" data-p="JH"/><path d="M301,183L301,182L300,182L301,183Z M292,182L292,180L291,181L292,182Z M298,179L297,180L298,180L298,179Z M285,114L285,115L287,118L287,122L287,122L284,131L287,133L288,135L284,136L285,138L285,139L285,139L287,146L285,150L283,153L276,156L275,158L271,160L265,165L270,167L272,167L272,170L273,170L276,176L275,177L276,177L279,178L282,181L284,181L285,183L287,183L292,177L293,182L296,182L296,179L298,178L299,182L301,181L302,182L301,178L303,177L300,167L297,161L298,159L295,156L297,150L295,149L289,147L288,145L291,142L295,134L293,135L288,131L287,130L291,124L290,121L293,123L294,125L297,125L296,123L297,124L299,126L303,128L304,125L304,125L306,122L306,118L306,118L297,118L294,117L293,114L293,114L291,114L290,115L285,114L285,114Z " data-fips="IN28" data-fips-="" data-iso3="IND" data-name="West Bengal" data-p="WB"/><path d="M240,116L243,121L244,122L246,124L243,125L244,129L242,130L249,135L249,135L244,136L237,142L236,144L236,147L238,148L238,151L238,151L239,151L242,150L244,149L250,153L253,150L256,152L262,148L265,147L271,151L273,148L277,147L278,142L281,138L285,139L285,139L285,138L284,136L288,135L287,133L284,131L287,122L287,123L285,125L282,124L278,125L275,123L272,125L265,124L262,124L259,121L256,123L249,119L249,117L245,116L240,116L240,116Z " data-fips="IN34" data-fips-="" data-iso3="IND" data-name="Bihar" data-p="BR"/><path d="M290,103L290,103L290,103L290,103L290,104L289,104L289,104L289,104L289,104L289,104L288,104L288,104L288,104L288,104L288,104L288,104L288,104L286,105L286,105L286,105L285,105L285,105L285,105L285,106L285,106L286,106L286,106L286,108L285,113L285,114L290,115L291,114L293,114L293,114L294,112L293,111L293,106L293,104L290,103L290,103Z " data-fips="IN29" data-fips-="" data-iso3="IND" data-name="Sikkim" data-p="SK"/><path d="M245,175L247,172L244,163L242,162L237,156L237,156L236,156L234,159L232,159L231,158L231,158L230,158L228,161L218,160L219,164L224,167L224,169L220,172L219,175L216,177L213,178L212,180L208,190L208,191L208,192L205,195L206,200L207,200L207,204L205,206L207,206L206,208L211,214L210,216L206,216L205,219L204,223L204,223L204,223L208,225L212,232L213,234L216,234L217,234L217,234L217,233L223,224L226,222L227,219L224,211L222,208L223,206L227,209L232,207L229,206L228,201L229,196L230,194L237,192L240,180L244,177L245,175L245,175L245,175Z " data-fips="IN37" data-fips-="IN02" data-iso3="IND" data-name="Chhattisgarh" data-p="CT"/><path d="M230,157L229,156L230,150L226,150L224,148L221,148L215,144L213,144L212,147L207,147L208,144L202,146L204,144L201,142L197,145L195,145L192,144L187,144L187,141L183,142L183,145L185,152L187,152L188,154L186,157L183,155L181,155L179,148L181,147L181,140L185,139L188,131L187,126L185,125L179,125L179,125L179,125L175,128L161,137L160,141L165,143L168,142L170,144L169,146L165,147L164,149L166,153L164,155L165,157L163,158L156,156L154,160L152,160L151,162L149,159L152,158L152,150L145,150L143,151L141,150L141,156L142,158L143,163L142,165L138,168L140,169L136,171L136,171L136,172L137,173L136,176L133,177L133,183L133,184L133,184L137,184L138,187L140,188L143,189L147,191L153,191L156,193L157,195L162,193L163,189L167,187L171,187L172,189L171,190L178,191L181,188L184,190L188,189L198,189L198,189L202,188L205,190L208,191L208,191L208,190L212,180L213,178L216,177L219,175L220,172L224,169L224,167L219,164L218,160L228,161L230,158L231,158L230,157Z " data-fips="IN35" data-fips-="IN15" data-iso3="IND" data-name="Madhya Pradesh" data-p="MP"/><path d="M201,318L201,317L201,317L199,318L199,318L201,319L201,318Z M200,306L200,306L201,305L199,305L200,307L200,306Z M145,305L145,305L145,305L145,305L145,305L146,304L145,304L144,305L145,305Z " data-fips="IN22" data-fips-="" data-iso3="IND" data-name="Puducherry" data-p="PY"/><path d="M205,286L205,286L205,286L205,286L206,287L206,287L206,287L205,286Z M181,296L180,296L174,297L174,303L175,304L171,308L167,308L166,307L164,310L159,309L159,309L159,309L157,311L160,315L162,315L163,317L162,318L165,320L164,321L164,325L166,327L169,326L169,332L168,334L171,335L169,341L169,343L168,345L167,350L168,350L179,349L181,343L183,340L187,339L194,337L190,336L190,334L194,329L194,326L201,325L201,320L201,319L199,318L199,318L201,317L201,317L199,313L200,312L200,307L200,307L199,305L201,305L201,305L204,300L205,296L206,287L205,287L205,287L200,290L195,289L195,290L192,292L187,292L185,296L181,297L181,296Z " data-fips="IN22" data-fips-="IN25" data-iso3="IND" data-name="Tamil Nadu" data-p="TN"/><path d="M97,198L103,196L109,193L112,189L109,184L112,182L112,179L115,180L119,180L115,183L116,184L117,187L117,194L119,198L119,201L118,202L118,202L118,203L118,203L117,206L116,206L116,207L117,206L118,206L119,206L119,206L119,206L121,203L121,204L122,206L122,206L122,206L124,205L125,199L130,198L130,189L132,184L133,184L133,183L133,177L136,176L137,173L136,172L136,171L136,171L130,167L126,162L125,158L124,159L124,154L116,153L114,151L108,151L100,149L100,150L96,155L92,153L85,155L80,153L74,153L67,160L71,163L71,165L74,168L84,172L85,171L92,168L92,170L88,175L84,176L83,177L78,178L75,176L77,181L89,194L92,197L95,198L97,198L97,198L97,198L97,198L97,198Z " data-fips="IN32" data-fips-="" data-iso3="IND" data-name="Gujarat" data-p=""/><path d="M131,261L129,261L129,260L127,260L127,260L129,262L129,267L131,270L131,270L133,262L132,261L132,261L131,261Z " data-fips="IN08" data-fips-="IN33" data-iso3="IND" data-name="Goa" data-p="GA"/><path d="M366,75L366,75L366,76L366,76L365,76L365,76L365,76L365,77L365,77L364,77L364,77L364,77L364,77L364,77L364,77L364,78L363,78L363,78L363,78L363,78L363,78L363,78L363,78L363,78L363,78L363,78L363,78L363,78L362,79L362,79L362,79L362,79L362,79L362,79L362,79L362,79L362,79L362,79L362,79L362,79L362,79L362,80L362,80L362,80L362,80L361,80L361,80L361,80L361,81L361,82L361,82L359,81L358,81L356,81L356,81L356,81L356,81L356,81L356,81L356,81L354,81L354,81L352,80L352,80L352,80L352,80L351,81L351,81L351,81L350,81L350,81L350,81L350,81L350,82L350,82L349,82L349,82L349,82L349,82L348,83L348,83L348,84L347,85L347,85L347,85L347,85L347,85L346,85L346,85L346,85L346,85L347,86L347,86L347,86L346,86L346,86L346,86L346,86L346,86L346,87L346,87L346,87L346,87L346,87L346,87L346,87L345,87L345,87L345,87L345,87L345,87L345,87L345,87L345,88L345,88L345,88L344,88L344,88L344,89L344,89L344,89L343,89L343,89L343,89L343,89L343,89L343,89L341,89L340,90L339,90L339,90L339,90L339,90L339,90L339,90L339,90L339,90L339,90L339,90L339,90L339,90L339,90L338,92L338,93L338,94L337,94L337,94L337,94L337,95L337,95L337,95L336,95L336,95L336,95L336,95L336,95L336,95L336,96L335,96L335,96L335,96L335,96L335,96L335,96L335,96L333,98L334,98L334,99L334,100L334,100L333,100L333,100L333,100L333,100L333,100L333,101L333,101L332,101L332,101L332,101L332,101L332,101L331,101L331,101L331,101L331,101L331,101L331,101L331,102L331,102L331,102L331,101L331,101L331,101L331,101L330,102L330,102L330,102L330,102L330,101L330,101L330,101L329,101L330,102L329,102L329,102L329,102L329,102L328,102L328,102L328,102L328,102L327,103L327,103L323,104L328,106L329,113L329,113L331,113L337,110L339,111L343,110L348,108L348,107L351,102L364,95L366,94L370,100L370,102L366,103L362,106L362,106L362,107L363,109L363,110L364,111L364,111L370,105L371,103L377,100L383,102L380,99L380,95L383,92L380,87L379,87L379,87L379,87L379,87L377,87L377,87L374,87L374,87L374,87L374,87L373,87L373,87L373,87L373,87L373,87L373,88L372,88L372,88L372,88L371,88L371,88L371,88L371,87L371,87L372,87L372,87L372,87L372,87L372,87L371,86L371,86L371,86L372,86L372,86L372,85L372,85L372,85L372,85L372,85L372,85L373,85L372,84L372,84L374,83L374,83L374,83L372,81L372,81L372,79L370,80L370,80L370,81L370,81L369,82L369,82L369,82L368,80L368,80L368,80L368,80L369,80L369,79L369,79L369,79L370,78L370,78L370,78L370,78L370,77L370,77L370,77L370,77L370,77L370,77L369,77L369,78L369,78L367,75L367,75L366,75Z " data-fips="IN30" data-fips-="" data-iso3="IND" data-name="Arunachal Pradesh" data-p="AR"/><path d="M336,145L336,145L336,146L336,150L336,152L336,152L339,161L340,164L343,171L343,170L346,172L348,166L347,165L349,150L347,146L347,146L344,145L343,142L343,142L343,142L340,143L339,145L336,145L336,145Z " data-fips="IN31" data-fips-="" data-iso3="IND" data-name="Mizoram" data-p="MZ"/><path d="M333,142L333,143L328,146L324,153L327,159L332,160L332,155L335,152L336,152L336,152L336,150L336,146L336,145L336,145L335,145L335,145L335,144L334,142L333,142Z " data-fips="IN26" data-fips-="" data-iso3="IND" data-name="Tripura" data-p="TR"/><path d="M118,202L118,202L118,202L118,203L118,203L118,202L118,202L118,202Z M97,198L97,198L97,198L97,198L97,198L97,198L97,198Z " data-fips="IN32" data-fips-="" data-iso3="IND" data-name="Daman and Diu" data-p=""/></g></svg> \ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'><svg enable_background="new 0 0 450 376" height="376px" style="stroke-linejoin: round; stroke:#000; fill:#f6f3f0;" version="1.1" viewBox="0 0 450 376" width="450px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"><![CDATA[path { fill-rule: evenodd; }
+#context path { fill: #eee; stroke: #bbb; } ]]></style></defs><metadata><views><view h="376.0" padding="0.06" w="450"><proj id="laea" lat0="30.7356565416" lon0="76.7701955882"/><bbox h="377.7" w="358.35" x="883.21" y="922.02"/><llbbox lat0="-90" lat1="90" lon0="-180" lon1="180"/></view></views></metadata><g id="context"><path d="M141,0L141,0L141,0L120,0L115,3L113,3L112,0L44,0L43,2L36,5L29,6L27,11L23,13L19,13L12,9L11,6L10,6L10,7L7,16L3,19L4,22L0,23L0,31L3,31L0,34L0,57L6,59L7,66L0,72L0,78L12,84L23,84L29,86L31,85L39,85L51,83L54,71L59,67L62,66L66,67L69,63L75,61L78,61L80,63L86,60L86,54L88,49L91,46L97,43L95,39L95,35L99,36L106,34L105,29L110,24L112,18L109,10L118,3L123,2L134,2L140,1L141,0Z " data-iso="AFG"/><path d="M326,172L324,168L325,173L326,172Z M322,173L322,169L318,165L320,171L319,174L322,173Z M303,176L306,180L307,178L307,173L308,179L314,174L314,177L316,177L319,172L317,166L318,164L316,158L318,158L319,161L323,167L325,167L328,163L337,183L341,187L341,187L339,180L343,181L342,173L342,172L342,171L338,161L336,152L332,152L331,160L329,161L326,160L324,155L326,148L331,146L334,137L336,136L332,134L314,136L307,135L307,132L304,125L302,128L297,125L293,125L291,123L287,130L293,135L295,134L297,138L292,139L292,141L289,142L288,145L294,149L295,149L296,153L295,157L297,160L297,161L300,162L299,164L302,176L303,176Z " data-iso="BGD"/><path d="M323,103L321,101L318,100L317,101L309,101L309,99L306,99L297,107L295,110L294,112L294,112L298,118L300,117L308,117L309,116L315,116L329,113L328,106L323,106L323,103L323,103L323,103Z " data-iso="BTN"/><path d="M141,0L142,0L149,2L155,6L156,13L158,15L163,17L163,17L164,18L168,19L170,19L173,19L173,19L174,19L174,19L176,19L176,22L179,30L182,31L185,33L184,41L187,47L187,47L187,47L188,49L188,50L188,55L188,55L188,55L185,57L183,54L181,59L183,61L184,66L193,74L195,74L208,82L208,83L209,84L211,84L212,81L219,81L224,85L229,89L231,89L236,94L240,93L241,93L243,97L253,103L259,104L263,108L263,106L267,107L269,105L277,108L284,106L285,106L285,106L290,103L293,104L294,112L294,112L295,110L297,107L306,99L309,99L309,101L317,101L318,100L321,101L323,103L323,103L324,103L331,101L334,99L334,98L339,90L346,87L353,80L354,81L359,82L367,75L370,78L373,87L382,88L383,88L383,88L391,87L392,89L396,93L398,93L401,105L402,113L398,118L397,118L392,133L394,134L395,140L400,136L407,135L407,140L409,145L416,149L415,155L416,159L424,158L424,161L428,164L433,163L436,159L438,161L438,161L438,161L440,165L446,164L445,163L442,148L446,148L447,149L447,148L450,143L450,143L450,0L141,0L141,0L141,0Z " data-iso="CHN"/><path d="M428,374L425,370L423,369L412,368L409,369L403,369L398,366L392,368L394,374L428,374Z " data-iso="IDN"/><path d="M375,354L372,352L373,349L375,354Z M354,311L352,309L354,307L354,311Z M356,299L354,297L355,289L356,275L358,280L358,286L356,293L356,299Z M183,63L183,62L184,66L185,71L185,70L190,73L193,74L195,74L196,75L196,75L208,82L208,83L208,83L202,89L198,99L202,103L206,103L211,106L214,109L218,111L221,111L225,113L227,113L234,116L240,115L248,116L272,125L276,125L287,118L285,112L286,106L285,106L285,106L290,103L293,104L294,112L294,112L294,112L298,118L300,117L308,117L309,116L315,116L329,113L328,106L323,106L323,103L323,103L324,103L331,101L334,99L334,98L339,90L346,87L353,80L354,81L359,82L367,75L370,78L373,87L382,88L383,88L383,89L379,96L380,98L383,102L377,100L371,103L366,109L363,112L364,119L363,122L359,130L361,131L360,135L355,147L349,146L348,146L349,154L348,169L343,172L342,172L342,171L338,161L336,152L332,152L331,160L329,161L326,160L324,155L326,148L331,146L334,137L336,136L332,134L314,136L307,135L307,132L304,125L302,128L297,125L293,125L291,123L287,130L293,135L295,134L297,138L292,139L292,141L289,142L288,145L294,149L295,149L296,153L295,157L297,160L297,161L300,162L299,164L302,176L302,177L303,181L299,182L299,177L296,182L292,182L290,180L282,184L278,188L280,194L278,200L272,203L273,204L265,208L263,206L261,208L261,211L256,216L249,226L244,229L239,235L229,242L228,249L227,250L218,251L213,259L211,258L206,259L203,264L202,268L204,276L203,278L206,287L204,284L203,285L206,288L205,296L201,305L199,310L201,325L195,325L190,334L181,342L179,349L172,352L170,351L166,348L161,343L158,336L157,330L159,335L158,330L152,316L148,309L144,304L141,298L139,292L135,276L131,270L128,261L124,256L123,251L121,237L120,233L118,222L120,219L116,209L119,197L116,191L118,188L115,187L115,181L112,180L109,185L112,189L102,196L94,197L91,196L86,192L83,188L75,179L77,176L78,178L89,175L93,169L84,172L78,171L74,168L70,161L67,159L67,158L73,157L74,153L83,154L86,155L94,153L94,154L99,153L100,150L96,138L92,137L90,134L91,127L90,126L84,123L92,110L97,110L97,111L107,111L111,109L119,99L124,93L130,85L133,83L134,79L140,72L140,65L141,63L148,59L145,56L143,56L142,52L140,52L135,46L136,37L135,37L133,33L135,29L138,28L153,31L160,28L166,24L166,24L167,23L171,20L172,20L173,19L174,19L176,19L176,22L179,30L182,31L185,33L184,41L187,47L187,47L188,49L188,50L188,55L188,55L185,57L183,54L181,59L183,61L183,63Z " data-iso="IND"/><path d="M10,6L10,6L10,3L10,1L10,0L0,0L0,23L4,22L3,19L7,16L10,7L10,6Z M0,34L3,31L0,31L0,34Z M0,72L7,66L6,59L0,57L0,72Z M0,122L7,118L14,118L16,111L13,111L12,108L12,101L10,97L4,94L1,89L0,85L0,122Z " data-iso="IRN"/><path d="M173,19L170,19L168,19L164,18L163,17L164,18L164,20L166,23L166,24L167,23L171,20L172,20L173,19L173,19Z " data-iso="KAS"/><path d="M448,150L449,151L451,152L457,155L458,161L462,165L468,165L469,164L475,162L476,167L479,167L483,170L480,176L474,177L475,179L473,182L488,186L489,190L495,194L501,199L504,201L508,204L509,207L511,209L512,208L520,212L524,222L523,224L524,228L520,233L516,235L509,242L507,242L502,240L501,241L498,239L501,236L500,221L497,220L497,218L493,217L490,214L488,207L488,204L476,194L469,194L466,199L462,202L455,200L450,206L450,206L443,210L445,202L443,199L445,192L442,185L434,186L434,181L431,177L429,179L429,178L429,178L433,171L432,170L437,162L438,161L438,161L440,165L446,164L445,163L442,148L446,148L447,149L448,150Z " data-iso="LAO"/><path d="M219,374L225,370L226,361L221,351L220,347L218,346L212,336L208,334L204,334L204,340L202,342L202,344L200,352L202,367L204,374L219,374Z " data-iso="LKA"/><path d="M383,88L383,89L379,96L380,98L383,102L377,100L371,103L366,109L363,112L364,119L363,122L359,130L361,131L360,135L355,147L349,146L348,146L349,154L348,169L343,172L342,172L342,173L343,181L339,180L341,187L341,188L346,193L350,191L349,193L357,197L362,201L359,204L356,203L362,208L361,205L368,215L371,223L371,226L369,236L368,241L371,241L374,235L374,243L380,243L382,239L382,244L384,242L386,238L389,236L391,232L396,231L398,225L397,223L401,224L405,230L408,231L408,236L409,238L412,250L416,258L418,264L419,263L421,265L425,273L425,279L426,280L427,286L428,285L428,292L426,299L428,307L429,305L429,305L429,298L434,293L438,283L434,275L432,273L430,269L430,267L427,258L422,254L416,248L416,245L420,242L419,234L422,232L422,229L420,230L416,223L406,214L406,212L401,206L405,205L405,194L408,189L409,190L417,188L417,184L422,182L421,180L428,178L429,178L429,178L433,171L432,170L437,162L438,161L438,161L436,159L433,163L428,164L424,161L424,158L416,159L415,155L416,149L409,145L407,140L407,135L400,136L395,140L394,134L392,133L397,118L398,118L402,113L401,105L398,93L396,93L392,89L391,87L383,88L383,88Z " data-iso="MMR"/><path d="M447,347L445,348L446,350L447,347Z " data-iso="MYS"/><path d="M284,106L277,108L269,105L267,107L263,106L263,108L259,104L253,103L243,97L241,93L240,93L236,94L231,89L229,89L224,85L219,81L212,81L211,84L209,84L208,83L208,83L202,89L198,99L202,103L206,103L211,106L214,109L218,111L221,111L225,113L227,113L234,116L240,115L248,116L272,125L276,125L287,118L285,112L286,106L285,106L284,106Z " data-iso="NPL"/><path d="M67,158L73,157L74,153L83,154L86,155L94,153L94,154L99,153L100,150L96,138L92,137L90,134L91,127L90,126L84,123L92,110L97,110L97,111L107,111L111,109L119,99L124,93L130,85L133,83L134,79L140,72L140,65L141,63L148,59L145,56L143,56L142,52L140,52L135,46L136,37L135,37L133,33L135,29L138,28L153,31L160,28L166,24L166,24L166,23L164,20L164,18L163,17L163,17L158,15L156,13L155,6L149,2L142,0L141,0L140,1L134,2L123,2L118,3L109,10L112,18L110,24L105,29L106,34L99,36L95,35L95,39L97,43L91,46L88,49L86,54L86,60L80,63L78,61L75,61L69,63L66,67L62,66L59,67L54,71L51,83L39,85L31,85L29,86L23,84L12,84L0,78L0,85L1,89L4,94L10,97L12,101L12,108L13,111L16,111L14,118L7,118L0,122L0,135L4,136L12,136L17,136L18,135L22,135L28,137L31,137L41,137L48,135L52,140L52,144L57,146L58,153L61,158L67,158L67,158Z " data-iso="PAK"/><path d="M450,206L443,210L445,202L443,199L445,192L442,185L434,186L434,181L431,177L429,179L429,178L428,178L421,180L422,182L417,184L417,188L409,190L408,189L405,194L405,205L401,206L406,212L406,214L416,223L420,230L422,229L422,232L419,234L420,242L416,245L416,248L422,254L427,258L430,267L430,269L432,273L434,275L438,283L434,293L429,298L429,305L428,309L426,316L426,327L427,329L431,328L433,330L436,332L440,337L443,337L445,340L445,343L450,347L450,324L446,320L445,315L442,313L438,315L435,307L434,302L437,295L438,287L441,276L440,272L441,266L440,265L442,261L450,260L450,206L450,206Z " data-iso="THA"/><path d="M112,0L113,3L115,3L120,0L112,0Z " data-iso="TJK"/><path d="M10,6L11,6L12,9L19,13L23,13L27,11L29,6L36,5L43,2L44,0L10,0L10,1L10,3L10,6L10,6Z " data-iso="TKM"/><path d="M447,149L448,150L449,151L450,151L450,143L450,143L447,148L447,149Z " data-iso="VNM"/></g><g fill="red" fill-opacity="0.35" id="regions"><path d="M163,76L163,77L163,77L164,78L164,78L164,78L164,77L164,77L164,77L164,77L163,76Z " data-fips="IN05" data-fips-="" data-iso3="IND" data-name="Chandigarh"/><path d="M167,100L164,103L164,104L169,104L169,104L169,104L168,101L168,100L168,100L167,100Z " data-fips="IN07" data-fips-="" data-iso3="IND" data-name="Delhi"/><path d="M154,55L154,55L151,61L153,62L157,69L160,70L163,75L163,75L163,75L167,77L167,80L172,82L172,81L172,81L174,80L174,74L175,72L179,71L184,71L185,70L185,70L183,68L185,66L184,62L180,55L180,55L180,53L175,53L173,49L169,51L167,50L163,47L161,47L155,51L153,51L155,54L154,55L154,55Z " data-fips="IN11" data-fips-="" data-iso3="IND" data-name="Himachal Pradesh"/><path d="M172,82L167,80L167,77L163,75L163,75L163,75L164,76L164,76L164,76L164,77L164,77L164,77L164,77L164,78L164,78L164,78L165,80L163,81L162,84L158,85L157,87L154,89L146,88L146,87L143,86L140,87L139,87L139,87L140,93L144,95L148,95L150,102L153,105L155,112L156,113L157,110L162,110L164,108L165,110L165,114L168,113L169,113L169,113L171,111L169,104L169,104L169,104L164,104L164,103L167,100L168,100L168,100L167,92L168,86L172,82L172,81L172,82Z " data-fips="IN10" data-fips-="" data-iso3="IND" data-name="Haryana"/><path d="M148,58L150,58L153,56L154,56L154,55L154,55L155,54L153,51L155,51L161,47L163,47L167,50L169,51L173,49L175,53L180,53L180,55L180,55L182,55L187,57L190,55L190,51L190,47L184,43L183,37L186,34L185,33L179,30L176,22L176,20L173,19L166,24L161,28L160,28L153,31L152,31L148,29L146,29L138,28L135,29L135,35L134,36L138,37L135,39L137,43L135,47L139,52L142,51L141,54L147,57L148,58Z " data-fips="IN12" data-fips-="" data-iso3="IND" data-name="Jammu and Kashmir"/><path d="M172,229L173,229L172,235L171,237L174,238L171,243L171,252L172,253L171,257L167,258L166,261L167,268L163,268L165,278L168,277L171,277L170,280L167,281L166,284L171,283L172,285L175,282L178,282L179,284L182,287L183,289L185,289L183,294L181,296L181,296L181,297L185,296L187,292L192,292L195,290L195,289L200,290L205,287L205,287L203,287L203,285L205,285L205,286L205,286L205,286L205,286L205,285L204,280L204,274L202,267L206,259L210,257L211,259L212,256L214,257L217,251L226,250L229,247L228,245L230,241L245,229L248,227L256,216L256,216L254,216L252,219L248,220L246,220L243,218L241,218L239,221L236,223L237,224L234,226L232,228L229,225L228,229L227,231L225,231L218,234L217,234L216,234L213,234L212,232L208,225L204,223L204,223L204,223L199,219L200,216L200,214L196,213L188,212L187,211L183,211L179,216L176,217L175,219L176,222L174,224L172,228L172,228L172,229Z M228,247L228,246L228,247L228,247Z " data-fips="IN02" data-fips-="" data-iso3="IND" data-name="Andhra Pradesh"/><path d="M159,309L152,306L147,302L146,300L140,296L140,296L141,299L143,302L144,305L144,305L145,304L146,304L145,305L146,305L152,316L155,324L160,335L157,331L158,335L162,343L166,349L167,350L168,345L169,343L169,341L171,335L168,334L169,332L169,326L166,327L164,325L164,321L165,320L162,318L163,317L162,315L160,315L157,311L159,309L159,309L159,309Z " data-fips="IN13" data-fips-="" data-iso3="IND" data-name="Kerala"/><path d="M275,176L267,174L268,177L266,180L265,179L262,178L259,180L256,175L251,176L248,177L245,175L245,175L245,175L244,177L240,180L237,192L230,194L229,196L228,201L229,206L232,207L227,209L223,206L222,208L224,211L227,219L226,222L223,224L217,233L217,234L217,234L218,234L225,231L227,231L228,229L229,225L232,228L234,226L237,224L236,223L239,221L241,218L243,218L246,220L248,220L252,219L254,216L256,216L256,216L263,209L261,210L261,208L265,206L264,209L271,206L274,203L275,201L280,196L280,194L279,187L280,185L285,183L285,183L284,181L282,181L279,178L276,177L275,177L275,176Z " data-fips="IN21" data-fips-="" data-iso3="IND" data-name="Orissa"/><path d="M122,206L121,204L121,203L119,206L119,206L119,206L121,207L121,207L122,207L122,206L122,206Z " data-fips="IN06" data-fips-="" data-iso3="IND" data-name="Dadra and Nagar Haveli"/><path d="M172,229L169,228L167,230L166,230L164,234L162,236L161,235L158,237L158,240L149,240L150,243L143,245L141,246L141,247L133,250L136,253L134,260L132,261L132,261L132,261L133,262L131,270L131,270L133,272L138,284L138,287L140,295L140,296L146,300L147,302L152,306L159,309L159,309L159,309L164,310L166,307L167,308L171,308L175,304L174,303L174,297L180,296L181,296L181,296L183,294L185,289L183,289L182,287L179,284L178,282L175,282L172,285L171,283L166,284L167,281L170,280L171,277L168,277L165,278L163,268L167,268L166,261L167,258L171,257L172,253L171,252L171,243L174,238L171,237L172,235L173,229L172,229L172,229Z " data-fips="IN19" data-fips-="" data-iso3="IND" data-name="Karnataka"/><path d="M208,191L205,190L202,188L198,189L198,189L188,189L184,190L181,188L178,191L171,190L172,189L171,187L167,187L163,189L162,193L157,195L156,193L153,191L147,191L143,189L140,188L138,187L137,184L133,184L133,184L132,184L130,189L130,198L125,199L124,205L122,206L122,206L122,207L121,207L121,207L119,206L119,206L119,206L118,206L117,206L116,207L116,207L116,213L118,216L117,219L119,218L118,227L121,237L122,246L124,255L126,260L127,260L129,260L129,261L131,261L132,261L132,261L134,260L136,253L133,250L141,247L141,246L143,245L150,243L149,240L158,240L158,237L161,235L162,236L164,234L166,230L167,230L169,228L172,229L172,229L172,228L172,228L174,224L176,222L175,219L176,217L179,216L183,211L187,211L188,212L196,213L200,214L200,216L199,219L204,223L204,223L204,223L205,219L206,216L210,216L211,214L206,208L207,206L205,206L207,204L207,200L206,200L205,195L208,192L208,191L208,191Z " data-fips="IN16" data-fips-="IN35" data-iso3="IND" data-name="Maharashtra"/><path d="M374,349L372,350L374,355L375,352L374,349Z M355,308L353,308L354,312L355,308Z M357,274L356,277L356,278L355,286L355,291L354,295L356,299L356,292L358,287L357,281L358,280L357,274Z " data-fips="IN01" data-fips-="" data-iso3="IND" data-name="Andaman and Nicobar"/><path d="M329,113L325,115L322,114L322,115L315,116L311,115L308,118L306,118L306,118L306,122L304,125L304,125L305,125L306,128L307,133L307,134L309,128L312,126L319,126L321,127L322,128L325,124L327,125L328,123L332,123L332,128L338,128L337,129L339,132L335,136L336,136L334,137L334,139L334,142L334,142L335,144L335,145L335,145L336,145L336,145L339,145L340,143L343,142L343,142L343,142L344,138L345,134L346,131L347,130L347,130L345,128L351,122L351,119L353,115L355,112L362,107L362,106L362,106L366,103L370,102L370,100L366,94L364,95L351,102L348,107L348,108L343,110L339,111L337,110L331,113L329,113L329,113Z " data-fips="IN03" data-fips-="" data-iso3="IND" data-name="Assam"/><path d="M347,130L346,131L345,134L344,138L343,142L343,142L343,142L344,145L347,146L347,146L355,147L357,144L358,138L360,133L361,131L359,130L359,127L359,127L350,127L348,131L347,130L347,130Z " data-fips="IN17" data-fips-="" data-iso3="IND" data-name="Manipur"/><path d="M362,106L362,107L355,112L353,115L351,119L351,122L345,128L347,130L347,130L347,130L348,131L350,127L359,127L359,127L363,122L364,111L364,111L363,110L363,109L362,107L362,106Z " data-fips="IN20" data-fips-="" data-iso3="IND" data-name="Nagaland"/><path d="M307,134L308,136L311,136L316,136L323,135L325,135L331,134L335,135L335,136L339,132L337,129L338,128L332,128L332,123L328,123L327,125L325,124L322,128L321,127L319,126L312,126L309,128L307,134L307,134Z " data-fips="IN18" data-fips-="" data-iso3="IND" data-name="Meghalaya"/><path d="M154,55L154,56L153,56L150,58L148,58L148,58L140,65L141,73L138,75L132,81L133,83L133,83L133,86L138,86L139,87L140,87L143,86L146,87L146,88L154,89L157,87L158,85L162,84L163,81L165,80L164,78L164,78L164,78L163,77L163,77L163,76L164,77L164,76L164,76L164,76L163,75L163,75L163,75L160,70L157,69L153,62L151,61L154,55L154,55Z " data-fips="IN23" data-fips-="" data-iso3="IND" data-name="Punjab"/><path d="M133,84L127,87L126,91L122,97L116,100L111,108L110,110L103,111L100,112L94,109L92,110L84,120L84,124L87,126L90,126L90,131L90,134L91,136L96,138L96,140L100,149L100,149L108,151L114,151L116,153L124,154L124,159L125,158L126,162L130,167L136,171L136,171L136,171L140,169L138,168L142,165L143,163L142,158L141,156L141,150L143,151L145,150L152,150L152,158L149,159L151,162L152,160L154,160L156,156L163,158L165,157L164,155L166,153L164,149L165,147L169,146L170,144L168,142L165,143L160,141L161,137L175,128L179,125L179,125L179,125L174,124L170,124L174,123L171,122L172,119L170,118L169,113L169,113L168,113L165,114L165,110L164,108L162,110L157,110L156,113L155,112L153,105L150,102L148,95L144,95L140,93L139,87L139,87L138,86L133,86L133,83L133,84Z " data-fips="IN24" data-fips-="" data-iso3="IND" data-name="Rajasthan"/><path d="M172,81L172,82L168,86L167,92L168,100L168,100L168,100L168,101L169,104L169,104L169,104L171,111L169,113L169,113L169,113L170,118L172,119L171,122L174,123L170,124L174,124L179,125L179,125L179,125L185,125L187,126L188,131L185,139L181,140L181,147L179,148L181,155L183,155L186,157L188,154L187,152L185,152L183,145L183,142L187,141L187,144L192,144L195,145L197,145L201,142L204,144L202,146L208,144L207,147L212,147L213,144L215,144L221,148L224,148L226,150L230,150L229,156L230,157L231,158L231,158L232,159L234,159L236,156L237,156L237,155L238,153L237,152L237,151L238,151L238,151L238,148L236,147L236,144L237,142L244,136L249,135L249,135L242,130L244,129L243,125L246,124L244,122L243,121L240,116L240,116L235,116L235,116L228,115L227,113L225,113L219,111L215,110L210,105L206,104L203,102L199,100L199,100L193,100L184,95L186,93L183,92L179,87L178,90L175,90L174,87L175,83L172,81L172,81Z " data-fips="IN36" data-fips-="IN27" data-iso3="IND" data-name="Uttar Pradesh"/><path d="M185,70L184,71L179,71L175,72L174,74L174,80L172,81L172,81L172,81L175,83L174,87L175,90L178,90L179,87L183,92L186,93L184,95L193,100L199,100L198,100L200,96L201,89L206,83L208,83L204,80L199,79L198,76L194,74L193,74L187,68L185,70L185,70Z " data-fips="IN39" data-fips-="" data-iso3="IND" data-name="Uttaranchal"/><path d="M285,139L281,138L278,142L277,147L273,148L271,151L265,147L262,148L256,152L253,150L250,153L244,149L242,150L239,151L238,151L237,151L237,152L238,153L237,155L237,156L237,156L242,162L244,163L247,172L245,175L245,175L245,175L248,177L251,176L256,175L259,180L262,178L265,179L266,180L268,177L267,174L275,176L275,177L276,176L273,170L272,170L272,167L270,167L265,165L271,160L275,158L276,156L283,153L285,150L287,146L285,139L285,139L285,139Z " data-fips="IN38" data-fips-="IN04|IN34" data-iso3="IND" data-name="Jharkhand"/><path d="M285,114L285,115L287,118L287,122L287,122L284,131L287,133L288,135L284,136L285,138L285,139L285,139L287,146L285,150L283,153L276,156L275,158L271,160L265,165L270,167L272,167L272,170L273,170L276,176L275,177L276,177L279,178L282,181L284,181L285,183L287,183L292,177L293,182L296,182L296,179L298,178L299,182L301,181L302,182L301,178L303,177L300,167L297,161L298,159L295,156L297,150L295,149L289,147L288,145L291,142L295,134L293,135L288,131L287,130L291,124L290,121L293,123L294,125L297,125L296,123L297,124L299,126L303,128L304,125L304,125L306,122L306,118L306,118L297,118L294,117L293,114L293,114L291,114L290,115L285,114L285,114Z " data-fips="IN28" data-fips-="" data-iso3="IND" data-name="West Bengal"/><path d="M240,116L243,121L244,122L246,124L243,125L244,129L242,130L249,135L249,135L244,136L237,142L236,144L236,147L238,148L238,151L238,151L239,151L242,150L244,149L250,153L253,150L256,152L262,148L265,147L271,151L273,148L277,147L278,142L281,138L285,139L285,139L285,138L284,136L288,135L287,133L284,131L287,122L287,123L285,125L282,124L278,125L275,123L272,125L265,124L262,124L259,121L256,123L249,119L249,117L245,116L240,116L240,116Z " data-fips="IN34" data-fips-="" data-iso3="IND" data-name="Bihar"/><path d="M285,114L290,115L291,114L293,114L293,114L294,112L293,111L293,106L293,104L286,105L286,107L285,111L285,113L285,114Z " data-fips="IN29" data-fips-="" data-iso3="IND" data-name="Sikkim"/><path d="M245,175L247,172L244,163L242,162L237,156L237,156L236,156L234,159L232,159L231,158L231,158L230,158L228,161L218,160L219,164L224,167L224,169L220,172L219,175L216,177L213,178L212,180L208,190L208,191L208,192L205,195L206,200L207,200L207,204L205,206L207,206L206,208L211,214L210,216L206,216L205,219L204,223L204,223L204,223L208,225L212,232L213,234L216,234L217,234L217,234L217,233L223,224L226,222L227,219L224,211L222,208L223,206L227,209L232,207L229,206L228,201L229,196L230,194L237,192L240,180L244,177L245,175L245,175L245,175Z " data-fips="IN37" data-fips-="IN02" data-iso3="IND" data-name="Chhattisgarh"/><path d="M230,157L229,156L230,150L226,150L224,148L221,148L215,144L213,144L212,147L207,147L208,144L202,146L204,144L201,142L197,145L195,145L192,144L187,144L187,141L183,142L183,145L185,152L187,152L188,154L186,157L183,155L181,155L179,148L181,147L181,140L185,139L188,131L187,126L185,125L179,125L179,125L179,125L175,128L161,137L160,141L165,143L168,142L170,144L169,146L165,147L164,149L166,153L164,155L165,157L163,158L156,156L154,160L152,160L151,162L149,159L152,158L152,150L145,150L143,151L141,150L141,156L142,158L143,163L142,165L138,168L140,169L136,171L136,171L136,172L137,173L136,176L133,177L133,183L133,184L133,184L137,184L138,187L140,188L143,189L147,191L153,191L156,193L157,195L162,193L163,189L167,187L171,187L172,189L171,190L178,191L181,188L184,190L188,189L198,189L198,189L202,188L205,190L208,191L208,191L208,190L212,180L213,178L216,177L219,175L220,172L224,169L224,167L219,164L218,160L228,161L230,158L231,158L230,157Z " data-fips="IN35" data-fips-="IN15" data-iso3="IND" data-name="Madhya Pradesh"/><path d="M201,318L201,317L201,317L199,318L199,318L201,319L201,318Z M200,306L200,306L201,305L199,305L200,307L200,306Z M145,305L145,305L145,305L145,305L145,305L146,304L145,304L144,305L145,305Z " data-fips="IN22" data-fips-="" data-iso3="IND" data-name="Puducherry"/><path d="M205,286L205,286L205,286L205,286L206,287L206,287L206,287L205,286Z M181,296L180,296L174,297L174,303L175,304L171,308L167,308L166,307L164,310L159,309L159,309L159,309L157,311L160,315L162,315L163,317L162,318L165,320L164,321L164,325L166,327L169,326L169,332L168,334L171,335L169,341L169,343L168,345L167,350L168,350L179,349L181,343L183,340L187,339L194,337L190,336L190,334L194,329L194,326L201,325L201,320L201,319L199,318L199,318L201,317L201,317L199,313L200,312L200,307L200,307L199,305L201,305L201,305L204,300L205,296L206,287L205,287L205,287L200,290L195,289L195,290L192,292L187,292L185,296L181,297L181,296Z " data-fips="IN22" data-fips-="IN25" data-iso3="IND" data-name="Tamil Nadu"/><path d="M97,198L103,196L109,193L112,189L109,184L112,182L112,179L115,180L119,180L115,183L116,184L117,187L117,194L119,198L119,201L118,202L118,202L118,203L118,203L117,206L116,206L116,207L117,206L118,206L119,206L119,206L119,206L121,203L121,204L122,206L122,206L122,206L124,205L125,199L130,198L130,189L132,184L133,184L133,183L133,177L136,176L137,173L136,172L136,171L136,171L130,167L126,162L125,158L124,159L124,154L116,153L114,151L108,151L100,149L100,150L96,155L92,153L85,155L80,153L74,153L67,160L71,163L71,165L74,168L84,172L85,171L92,168L92,170L88,175L84,176L83,177L78,178L75,176L77,181L89,194L92,197L95,198L97,198L97,198L97,198L97,198L97,198Z " data-fips="IN32" data-fips-="" data-iso3="IND" data-name="Gujarat"/><path d="M131,261L129,261L129,260L127,260L127,260L129,262L129,267L131,270L131,270L133,262L132,261L132,261L131,261Z " data-fips="IN08" data-fips-="IN33" data-iso3="IND" data-name="Goa"/><path d="M329,113L331,113L337,110L339,111L343,110L348,108L348,107L351,102L364,95L366,94L370,100L370,102L366,103L362,106L362,106L362,107L363,109L363,110L364,111L364,111L370,105L371,103L377,100L383,102L380,99L380,95L383,92L380,87L379,87L373,87L371,88L373,82L372,79L369,82L369,79L370,78L367,75L361,82L353,80L348,83L347,86L343,89L340,90L334,97L334,99L332,101L323,104L324,107L328,106L329,113L329,113Z " data-fips="IN30" data-fips-="" data-iso3="IND" data-name="Arunachal Pradesh"/><path d="M336,145L336,145L336,146L336,150L336,152L336,152L339,161L340,164L343,171L343,170L346,172L348,166L347,165L349,150L347,146L347,146L344,145L343,142L343,142L343,142L340,143L339,145L336,145L336,145Z " data-fips="IN31" data-fips-="" data-iso3="IND" data-name="Mizoram"/><path d="M333,142L333,143L328,146L324,153L327,159L332,160L332,155L335,152L336,152L336,152L336,150L336,146L336,145L336,145L335,145L335,145L335,144L334,142L333,142Z " data-fips="IN26" data-fips-="" data-iso3="IND" data-name="Tripura"/><path d="M118,202L118,202L118,202L118,203L118,203L118,202L118,202L118,202Z M97,198L97,198L97,198L97,198L97,198L97,198L97,198Z " data-fips="IN32" data-fips-="" data-iso3="IND" data-name="Daman and Diu"/></g></svg> \ No newline at end of file
diff --git a/plugins/UserCountryMap/svg/MMR.svg b/plugins/UserCountryMap/svg/MMR.svg
index cecf0af028..4cb534677e 100644
--- a/plugins/UserCountryMap/svg/MMR.svg
+++ b/plugins/UserCountryMap/svg/MMR.svg
@@ -1 +1,2 @@
-<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'><svg enable_background="new 0 0 450 451" height="451px" pretty_print="False" style="stroke-linejoin: round; stroke:#000; fill: none;" version="1.1" viewBox="0 0 450 451" width="450px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"><![CDATA[path { fill-rule: evenodd; }]]></style></defs><metadata><views><view h="451" padding="0.06" w="450"><proj id="laea" lat0="19.238890591" lon0="97.3183282867"/><bbox h="243.51" w="115.82" x="934.62" y="879.15"/></view></views></metadata><g class="" id="context"><path d="M239,19L239,19L239,18L240,18L240,18L240,17L240,17L240,17L241,17L241,17L241,17L242,14L243,12L243,11L243,11L244,12L244,12L245,13L245,13L245,12L246,12L246,12L246,13L247,15L248,16L248,16L248,16L250,15L250,15L251,17L252,18L252,19L253,19L257,19L258,16L261,18L265,15L264,9L266,6L265,2L268,1L270,5L271,5L272,0L222,0L221,1L224,5L219,12L217,14L235,15L238,18L239,19Z M215,0L215,3L220,0L215,0Z M200,0L200,0L200,0L200,0Z M0,8L6,9L10,17L12,18L13,14L15,12L15,15L21,17L22,14L32,18L33,20L43,22L48,20L53,21L55,19L66,17L67,19L68,23L66,32L68,35L70,31L78,23L83,17L90,14L96,14L99,16L99,19L105,19L113,22L115,20L124,23L124,27L130,28L136,26L140,26L145,23L149,18L153,15L158,8L164,8L173,3L176,0L0,0L0,8Z " data-iso="TIB"/><path d="M125,169L123,165L124,168L125,169Z M109,154L108,146L107,155L109,154Z M118,149L115,147L116,149L118,149Z M101,155L102,154L103,146L101,143L99,139L96,138L97,143L99,145L99,150L95,156L101,155Z M65,155L65,159L69,163L73,160L74,150L75,162L80,157L82,150L83,150L84,156L86,154L86,159L89,161L92,156L97,151L98,149L94,140L97,137L97,132L98,131L97,126L94,126L98,125L99,122L100,128L99,132L103,141L105,144L109,144L115,140L116,138L125,161L127,165L127,177L132,186L133,186L130,179L131,173L137,174L139,175L139,160L139,159L138,157L137,143L135,137L135,128L133,120L126,120L126,125L123,127L122,134L118,135L116,132L114,131L113,133L112,126L110,122L112,114L116,110L126,108L127,105L131,102L133,97L134,93L138,94L139,92L130,86L115,85L97,85L93,84L84,80L85,75L85,67L83,60L78,66L73,62L68,55L69,58L65,59L58,51L58,54L53,60L50,66L60,76L63,76L65,80L66,81L65,83L56,83L53,89L50,88L47,93L49,98L61,104L60,110L57,117L60,123L59,126L63,129L62,132L63,141L63,144L65,154L65,155Z " data-iso="BGD"/><path d="M124,26L121,22L116,20L113,22L106,19L99,19L99,15L94,13L88,14L74,26L73,29L70,31L68,35L67,40L67,43L73,46L76,46L82,49L92,49L97,46L105,49L113,48L124,49L131,48L133,38L130,34L128,34L123,32L124,27L124,26Z " data-iso="BTN"/><path d="M161,504L159,506L157,500L156,500L159,495L162,501L161,504Z M157,492L155,494L154,493L157,491L157,492Z M153,476L151,475L151,473L153,476Z M144,472L144,472L143,471L144,472Z M137,451L135,450L137,449L137,451Z M131,419L128,419L128,414L131,411L132,416L131,419Z M135,400L134,399L134,397L135,400Z M143,386L144,389L142,387L143,386Z M136,397L133,393L135,384L136,378L137,369L139,363L140,355L141,353L145,358L142,362L142,374L140,376L140,382L137,386L137,394L136,397Z M68,35L67,40L67,43L73,46L76,46L82,49L92,49L97,46L105,49L113,48L124,49L131,48L133,38L130,34L128,34L123,32L124,27L126,27L131,28L140,26L145,23L145,20L157,8L168,6L170,5L173,1L175,1L186,-6L188,-3L195,-2L198,-0L203,-3L203,-4L213,-9L219,-4L215,-1L216,3L219,0L224,6L219,12L221,14L232,16L234,15L238,18L239,19L239,26L237,26L230,32L230,36L234,43L234,44L230,42L226,39L213,41L210,45L201,52L194,55L192,61L194,68L191,74L187,80L183,82L182,86L185,90L182,97L176,107L174,111L171,117L170,116L155,113L157,119L157,129L156,133L151,136L152,138L150,144L151,151L147,159L140,158L139,159L138,157L137,143L135,137L135,128L133,120L126,120L126,125L123,127L122,134L118,135L116,132L114,131L113,133L112,126L110,122L112,114L116,110L126,108L127,105L131,102L133,97L134,93L138,94L139,92L130,86L115,85L97,85L93,84L84,80L85,75L85,67L83,60L78,66L73,62L68,55L69,58L65,59L58,51L58,54L53,60L50,66L60,76L63,76L65,80L66,81L65,83L56,83L53,89L50,88L47,93L49,98L61,104L60,110L57,117L60,123L59,126L63,129L62,132L63,141L63,144L65,154L64,157L62,157L64,164L60,163L58,165L57,161L58,155L54,159L51,164L48,161L47,163L44,163L47,152L41,158L35,162L25,164L17,171L17,173L18,182L14,191L8,194L2,200L-12,204L-12,200L-14,199L-19,202L-20,206L-17,204L-20,208L-30,216L-38,225L-46,234L-56,238L-67,248L-72,251L-80,254L-85,258L-87,261L-89,270L-91,271L-100,274L-107,273L-118,286L-121,285L-122,283L-130,284L-133,286L-138,294L-139,300L-137,314L-139,320L-136,337L-139,331L-142,333L-136,339L-139,355L-142,360L-146,364L-149,370L-152,379L-151,382L-154,385L-151,385L-151,398L-152,408L-162,407L-165,410L-165,413L-172,421L-173,423L-172,429L-167,431L-173,430L-185,433L-191,437L-193,446L-194,449L-201,452L-207,454L-212,452L-219,446L-226,435L-230,425L-231,420L-232,409L-230,414L-230,418L-228,419L-230,409L-234,400L-237,389L-239,382L-241,375L-244,366L-251,357L-255,345L-258,333L-259,315L-261,310L-263,299L-271,285L-271,279L-273,277L-270,277L-273,273L-271,271L-276,265L-278,261L-280,251L-280,234L-281,226L-280,224L-282,217L-282,206L-282,196L-280,193L-279,188L-283,192L-282,184L-279,185L-283,183L-282,179L-283,177L-283,171L-282,166L-277,155L-276,149L-278,141L-279,134L-274,131L-270,130L-280,128L-279,122L-278,118L-272,117L-284,115L-283,116L-284,120L-289,124L-286,128L-286,131L-292,139L-302,142L-306,144L-314,145L-320,144L-325,141L-333,132L-337,123L-347,110L-349,105L-348,99L-344,104L-324,100L-316,90L-320,92L-321,91L-330,93L-334,94L-342,91L-350,84L-353,81L-355,71L-354,70L-347,66L-350,66L-357,70L-359,70L-359,64L-354,62L-348,63L-346,56L-330,59L-325,62L-323,63L-319,61L-309,59L-309,63L-305,64L-299,61L-300,57L-298,55L-301,42L-303,37L-302,32L-309,29L-312,23L-308,11L-309,8L-318,4L-320,1L-316,-7L-308,-13L-302,-21L-296,-24L-292,-21L-292,-19L-290,-15L-280,-17L-275,-16L-268,-17L-265,-22L-261,-25L-256,-33L-243,-38L-235,-49L-230,-57L-224,-59L-218,-62L-218,-67L-210,-74L-201,-79L-203,-81L-201,-94L-198,-98L-195,-99L-185,-102L-183,-103L-189,-110L-192,-110L-194,-114L-193,-117L-199,-119L-199,-122L-204,-130L-202,-132L-198,-147L-201,-148L-199,-153L-202,-155L-197,-162L-191,-164L-174,-157L-166,-154L-151,-158L-149,-157L-139,-164L-123,-170L-119,-170L-121,-165L-118,-150L-117,-149L-111,-146L-107,-141L-112,-130L-113,-127L-108,-111L-107,-110L-108,-101L-112,-97L-115,-97L-118,-103L-124,-103L-123,-95L-120,-88L-121,-85L-120,-81L-121,-77L-121,-73L-116,-75L-109,-65L-103,-64L-98,-59L-97,-59L-97,-54L-95,-53L-82,-44L-95,-34L-97,-31L-100,-22L-104,-18L-105,-15L-98,-9L-96,-10L-84,-1L-79,6L-72,11L-67,12L-60,17L-57,17L-55,21L-44,25L-43,25L-34,26L-32,25L-25,26L-18,29L-17,35L-8,40L-5,43L2,42L4,47L9,46L24,52L30,53L34,54L37,53L49,55L53,47L51,32L54,22L54,19L60,18L63,17L67,19L68,24L66,30L67,33L68,35Z " data-iso="IND"/><path d="M367,402L366,400L366,402L367,402Z M448,329L441,324L440,325L435,326L434,328L430,330L432,339L428,339L425,336L413,332L412,331L412,330L412,331L409,333L407,330L403,329L391,330L387,331L368,332L365,334L362,337L355,350L350,351L350,357L353,363L354,371L360,376L359,380L360,384L364,392L364,391L369,398L368,407L369,410L375,409L376,406L381,407L382,410L381,413L378,417L381,419L394,418L398,421L401,418L408,417L412,413L412,409L418,410L419,408L428,406L430,409L432,408L437,410L435,404L430,400L429,392L433,389L440,390L442,389L441,384L448,383L450,381L450,329L448,329Z " data-iso="KHM"/><path d="M341,152L348,159L358,165L356,175L362,183L364,184L375,187L376,184L383,181L388,184L393,188L392,190L389,192L395,195L396,197L399,197L401,202L394,211L387,210L382,211L383,214L380,219L385,221L398,229L407,232L406,236L408,240L418,247L418,249L427,260L433,264L439,271L440,277L444,281L447,279L448,283L450,284L459,290L454,295L465,307L462,313L463,320L461,323L456,325L450,329L448,329L441,324L440,325L435,326L434,328L430,330L432,339L428,339L425,336L413,332L412,331L412,330L413,330L418,326L419,314L418,312L419,307L421,304L421,299L416,296L416,293L408,289L402,283L401,278L401,269L402,264L395,257L393,255L384,243L382,241L369,239L368,240L364,246L364,246L364,246L364,246L362,249L353,252L350,250L342,245L333,252L328,256L321,262L317,260L322,245L319,240L322,236L324,228L322,220L322,216L321,214L317,214L312,216L305,213L305,210L307,205L305,199L302,196L298,199L299,198L299,197L301,188L307,185L307,184L312,175L318,171L320,169L321,170L323,178L328,176L334,177L332,174L332,163L328,153L332,148L334,150L339,149L340,150L341,152Z " data-iso="LAO"/><path d="M266,411L266,408L265,411L266,411Z M259,399L261,394L261,392L259,399Z M266,393L266,392L262,392L264,397L266,398L266,393Z M256,394L254,391L254,394L256,394Z M265,390L268,388L266,387L265,390Z M257,384L255,382L256,384L257,384Z M263,374L261,376L261,380L264,377L263,374Z M184,300L184,298L182,300L184,300Z M177,297L180,293L179,291L175,296L175,299L177,297Z M244,291L244,285L242,286L242,290L244,291Z M161,235L162,231L156,230L161,235Z M162,215L164,221L165,220L162,215Z M157,207L155,206L157,210L157,207Z M147,206L145,202L145,204L147,206Z M239,19L239,26L237,26L230,32L230,36L234,43L234,44L230,42L226,39L213,41L210,45L201,52L194,55L192,61L194,68L191,74L187,80L183,82L182,86L185,90L182,97L176,107L174,111L171,117L170,116L155,113L157,119L157,129L156,133L151,136L152,138L150,144L151,151L147,159L140,158L139,159L139,160L139,175L137,174L131,173L130,179L133,186L134,188L138,193L141,197L144,195L142,199L144,201L148,196L147,203L149,208L150,204L154,203L159,207L162,207L159,210L164,215L168,218L167,220L162,221L159,218L157,219L159,223L163,228L166,230L166,224L169,230L173,234L171,234L176,246L178,255L180,260L179,266L172,284L171,293L176,294L181,286L182,284L181,298L186,297L187,300L192,300L196,294L195,302L200,300L203,297L205,293L210,291L213,289L214,279L218,285L224,284L227,280L230,273L229,269L229,265L236,272L236,272L240,285L246,286L245,296L247,299L249,309L248,312L249,315L250,322L254,334L256,338L255,342L257,350L258,342L259,348L263,354L267,361L268,368L269,375L268,381L269,382L269,388L268,392L269,394L272,392L271,397L271,405L269,410L264,417L267,432L269,429L270,428L272,417L281,408L290,392L288,385L287,383L285,375L281,370L279,364L280,359L280,353L278,346L276,343L266,334L259,323L258,315L266,310L266,306L267,295L272,292L272,287L269,289L264,280L263,274L259,270L247,256L247,255L248,252L240,240L248,237L247,230L249,225L249,218L256,211L259,212L264,212L270,211L273,211L275,204L278,203L282,203L285,202L284,197L296,196L299,198L299,197L301,188L307,185L307,184L312,175L318,171L320,169L320,169L319,166L313,167L308,171L303,171L300,172L297,170L294,165L294,159L282,157L281,157L279,151L281,148L282,141L281,135L271,133L270,125L267,117L270,112L265,113L257,112L245,117L244,117L246,106L243,103L244,97L247,95L247,92L249,86L251,86L256,78L259,79L262,74L266,71L265,69L267,65L268,56L267,45L266,42L266,33L262,31L259,34L254,19L253,19L250,16L248,16L244,12L243,12L240,18L239,19Z " data-iso="MMR"/><path d="M301,442L298,442L298,446L301,442Z M357,393L355,395L357,396L357,393Z M353,386L350,383L350,386L353,386Z M364,392L360,384L359,380L360,376L354,371L353,363L350,357L350,351L355,350L362,337L365,334L368,332L387,331L391,330L403,329L407,330L409,333L412,331L412,330L413,330L418,326L419,314L418,312L419,307L421,304L421,299L416,296L416,293L408,289L402,283L401,278L401,269L402,264L395,257L393,255L384,243L382,241L369,239L368,240L364,246L362,249L353,252L350,250L342,245L333,252L328,256L321,262L317,260L322,245L319,240L322,236L324,228L322,220L322,216L321,214L317,214L312,216L305,213L305,210L307,205L305,199L302,196L298,199L299,198L296,196L284,197L285,202L282,203L278,203L275,204L273,211L270,211L264,212L259,212L256,211L249,218L249,225L247,230L248,237L240,240L248,252L247,255L247,256L259,270L263,274L264,280L269,289L272,287L272,292L267,295L266,306L266,310L258,315L259,323L266,334L276,343L278,346L280,353L280,359L279,364L281,370L285,375L287,383L288,385L290,392L281,408L272,417L270,428L267,436L265,443L262,449L282,449L283,446L280,434L280,425L282,424L283,420L287,412L290,399L294,393L295,389L299,379L298,371L300,363L299,356L303,353L310,352L320,354L318,368L320,373L323,371L331,372L337,371L346,376L348,379L355,383L358,382L360,385L364,392L364,392Z " data-iso="THA"/><path d="M390,421L386,422L389,430L390,421Z M442,181L440,179L439,180L442,181Z M340,150L341,152L348,159L358,165L356,175L362,183L364,184L375,187L376,184L383,181L388,184L393,188L392,190L389,192L395,195L396,197L399,197L401,202L394,211L387,210L382,211L383,214L380,219L385,221L398,229L407,232L406,236L408,240L418,247L418,249L427,260L433,264L439,271L440,277L444,281L447,279L448,283L450,284L450,265L443,260L436,249L437,247L431,241L423,235L417,225L418,223L421,217L421,210L424,202L428,201L436,191L435,188L439,183L437,177L443,178L450,176L450,162L447,160L443,157L437,154L436,155L435,148L433,146L437,137L434,135L426,135L424,133L419,134L411,131L407,126L403,127L396,131L394,137L390,138L387,141L382,139L380,140L377,145L371,140L368,144L365,141L361,144L361,146L347,141L341,149L340,150Z M450,381L448,383L441,384L442,389L440,390L433,389L429,392L430,400L435,404L437,410L432,408L430,409L428,406L419,408L418,410L412,409L412,413L408,417L401,418L398,421L400,422L412,428L413,432L409,434L408,439L408,449L424,449L438,442L438,441L437,436L430,429L432,429L439,436L443,438L445,438L447,434L445,432L438,425L437,423L447,431L449,430L447,423L444,421L450,421L449,417L450,416L450,381Z " data-iso="VNM"/><path d="M253,19L254,19L259,34L262,31L266,33L266,42L267,45L268,56L267,65L265,69L266,71L262,74L259,79L256,78L251,86L249,86L247,92L247,95L244,97L243,103L246,106L244,117L245,117L257,112L265,113L270,112L267,117L270,125L271,133L281,135L282,141L281,148L279,151L281,157L282,157L294,159L294,165L297,170L300,172L303,171L308,171L313,167L319,166L320,169L320,169L321,170L323,178L328,176L334,177L332,174L332,163L328,153L332,148L334,150L339,149L340,150L341,149L347,141L361,146L361,144L365,141L368,144L371,140L377,145L380,140L382,139L387,141L390,138L394,137L396,131L403,127L407,126L411,131L419,134L424,133L426,135L434,135L437,137L433,146L435,148L436,155L437,154L443,157L447,160L450,162L450,0L272,0L271,5L270,5L268,1L265,2L266,6L264,9L265,15L261,18L258,16L257,19L253,19L253,19Z " data-iso="CHN"/></g><g class="" id="regions"><path d="M236,206L235,206L235,211L231,214L228,222L231,227L232,231L238,235L240,238L248,236L246,230L249,226L249,224L248,219L250,217L250,215L251,215L251,215L249,213L248,213L248,213L248,213L248,213L248,213L248,213L248,213L248,213L245,213L245,210L243,208L243,208L243,208L242,208L242,208L242,208L242,208L242,208L242,208L242,208L242,208L240,207L240,207L240,207L240,207L239,207L239,208L239,208L239,208L239,208L237,208L237,208L236,206L236,206Z " data-fips="BM06" data-fips-="" data-iso3="MMR" data-name="Kayah" data-p="KH"/><path d="M225,217L225,217L223,218L223,218L221,217L219,218L219,218L222,224L221,225L225,230L224,232L225,236L228,237L230,236L231,242L233,244L235,244L236,248L235,251L236,261L237,261L237,261L240,260L242,263L242,273L243,277L246,283L247,283L247,283L248,284L248,284L248,284L252,287L253,287L257,293L250,293L251,296L250,299L252,305L258,314L258,314L264,310L266,311L266,305L266,296L266,295L269,294L272,293L271,286L267,286L264,279L265,278L260,272L259,270L253,262L248,258L247,255L247,255L247,255L247,252L247,248L245,246L242,243L241,242L238,235L235,235L231,227L228,222L228,222L229,220L228,220L225,218L225,217Z " data-fips="BM05" data-fips-="BM01" data-iso3="MMR" data-name="Kayin" data-p="KN"/><path d="M217,125L214,125L213,123L210,127L209,129L211,134L210,142L209,145L211,148L210,149L212,160L209,163L206,168L204,168L201,166L198,166L197,168L197,169L197,169L197,172L192,175L187,177L185,180L186,184L191,186L191,191L202,188L207,203L206,204L206,208L206,212L206,217L206,218L207,218L209,217L213,219L215,217L218,217L219,218L221,217L223,218L223,218L225,217L225,217L225,216L223,215L224,213L220,208L219,205L222,200L221,196L222,194L220,190L223,188L223,185L215,183L216,179L219,179L218,171L224,168L226,166L230,166L226,158L221,156L218,151L218,149L216,145L217,142L224,142L226,139L223,137L215,136L214,134L215,129L216,129L218,126L218,126L217,125Z " data-fips="BM08" data-fips-="" data-iso3="MMR" data-name="Mandalay" data-p="MD"/><path d="M206,218L206,218L206,224L195,227L193,230L193,232L191,235L191,239L192,240L192,240L197,247L199,258L204,261L205,263L205,262L212,257L217,266L219,274L224,274L228,276L228,276L230,272L229,269L230,267L228,265L229,264L229,263L229,261L235,263L237,262L237,261L236,261L235,251L236,248L235,244L233,244L231,242L230,236L228,237L225,236L224,232L225,230L221,225L222,224L219,218L219,218L218,217L215,217L213,219L209,217L207,218L206,218Z " data-fips="BM16" data-fips-="BM09" data-iso3="MMR" data-name="Bago" data-p="BA"/><path d="M205,263L204,264L205,270L206,271L208,280L208,284L206,285L210,288L210,288L214,289L217,287L215,281L218,285L220,285L227,279L228,276L228,276L224,274L219,274L217,266L212,257L205,262L205,263Z " data-fips="BM17" data-fips-="BM14" data-iso3="MMR" data-name="Yangon" data-p="YA"/><path d="M246,307L246,306L246,307L246,307Z M244,291L245,286L243,285L242,286L243,291L244,291Z M247,284L246,289L245,294L244,295L248,304L249,310L248,313L250,318L249,322L249,322L251,318L255,317L255,319L258,319L258,319L258,318L257,317L258,314L258,314L252,305L250,299L251,296L250,293L257,293L253,287L252,287L248,284L247,284Z M237,261L237,262L235,263L229,261L229,263L229,264L237,272L235,272L236,278L237,278L240,286L241,285L246,284L247,283L246,283L243,277L242,273L242,263L240,260L237,261L237,261Z " data-fips="BM13" data-fips-="" data-iso3="MMR" data-name="Mon" data-p="MO"/><path d="M161,230L157,231L160,235L161,235L162,231L161,230Z M163,216L163,221L165,221L167,219L163,216Z M157,210L156,206L156,209L157,210Z M179,263L183,265L186,254L186,252L186,244L185,243L183,237L184,235L184,232L181,226L179,225L176,215L176,211L173,204L173,202L168,192L166,192L166,189L166,188L161,185L161,189L160,190L156,189L146,180L143,179L140,174L140,175L135,173L134,171L131,172L130,177L134,188L141,198L141,194L139,188L143,193L145,197L144,202L147,197L148,201L148,206L150,205L151,203L155,203L156,206L161,207L160,210L167,218L166,221L162,222L156,218L156,219L160,227L166,231L167,228L168,220L169,223L168,231L171,231L170,234L173,236L173,239L176,243L177,247L177,251L178,255L180,260L179,262L179,263Z " data-fips="BM01" data-fips-="BM05" data-iso3="MMR" data-name="Rakhine" data-p="RA"/><path d="M140,174L143,179L146,180L156,189L160,190L161,189L161,185L166,188L166,189L168,190L170,190L169,183L171,181L170,177L170,172L171,169L169,165L170,161L169,158L170,151L169,145L169,144L169,142L170,135L169,133L172,126L173,121L172,117L172,117L166,115L164,114L158,114L157,112L157,119L158,121L156,133L154,136L151,135L152,139L150,141L150,147L151,153L149,154L147,159L142,155L140,158L139,159L139,165L139,172L140,174L140,174Z " data-fips="BM02" data-fips-="" data-iso3="MMR" data-name="Chin" data-p="CH"/><path d="M152,339L152,338L152,340L152,339Z M159,321L159,321L159,322L159,321Z M184,297L182,301L183,301L184,297Z M175,300L177,297L179,296L181,291L175,297L175,300Z M192,240L192,240L192,240L190,243L188,241L185,243L186,244L186,252L186,254L183,265L179,263L179,265L177,272L176,275L174,284L171,290L171,296L171,296L176,294L178,289L182,288L180,297L182,300L185,295L184,297L186,301L189,301L190,295L191,301L193,299L195,298L196,294L196,297L194,300L194,302L199,301L203,298L204,291L205,293L211,289L210,288L206,285L208,284L208,280L206,271L205,270L204,264L205,263L204,261L199,258L197,247L192,240L192,240Z " data-fips="BM03" data-fips-="" data-iso3="MMR" data-name="Ayeyarwady" data-p="AY"/><path d="M169,144L169,145L170,151L169,158L170,161L169,165L171,169L170,172L170,177L171,181L169,183L170,190L168,190L166,189L166,192L168,192L173,202L173,204L176,211L176,215L179,225L181,226L184,232L184,235L183,237L185,243L185,243L188,241L190,243L192,240L192,240L192,240L191,239L191,235L193,232L193,230L195,227L206,224L206,218L206,218L206,217L206,212L206,208L206,204L207,203L202,188L191,191L191,186L186,184L185,180L187,177L192,175L197,172L197,169L197,169L196,168L194,165L191,164L182,164L179,165L178,160L176,157L174,156L174,147L170,144L169,144Z " data-fips="BM15" data-fips-="BM07" data-iso3="MMR" data-name="Magway" data-p="MG"/><path d="M246,117L240,120L234,123L228,120L230,118L230,115L228,115L226,112L225,111L225,111L220,113L221,114L223,117L218,125L218,126L218,126L216,129L215,129L214,134L215,136L223,137L226,139L224,142L217,142L216,145L218,149L218,151L221,156L226,158L230,166L226,166L224,168L218,171L219,179L216,179L215,183L223,185L223,188L220,190L222,194L221,196L222,200L219,205L220,208L224,213L223,215L225,216L225,217L225,218L228,220L229,220L228,222L229,221L230,219L231,214L235,211L236,206L236,206L236,206L237,207L237,208L239,208L239,208L239,208L240,207L240,207L240,207L240,207L240,207L242,208L242,208L242,208L242,208L242,208L242,208L242,208L243,208L243,208L243,208L243,208L243,208L244,210L245,213L248,213L248,213L248,213L248,213L248,213L248,213L248,213L249,213L250,214L251,215L251,215L254,213L254,210L259,213L265,213L275,209L275,204L278,202L281,204L284,203L286,200L285,197L295,195L296,196L299,195L300,190L304,186L309,186L307,184L307,181L309,180L311,175L313,175L320,170L319,165L315,166L308,172L305,172L304,170L300,172L298,171L299,167L294,166L295,160L294,159L292,159L278,157L282,148L281,143L284,137L284,136L275,135L275,133L271,133L271,126L269,125L271,123L269,120L267,117L268,115L271,112L263,112L260,112L257,112L250,114L246,117L246,117Z " data-fips="BM11" data-fips-="" data-iso3="MMR" data-name="Shan" data-p="SH"/><path d="M252,422L252,424L252,423L252,422Z M259,412L257,411L259,417L260,417L259,412Z M260,404L260,405L261,405L260,404Z M260,399L261,395L260,393L260,399Z M266,392L264,392L264,397L266,398L266,392Z M255,393L254,394L255,395L255,393Z M247,391L246,390L246,391L247,391Z M260,390L260,390L260,391L260,390Z M266,387L264,385L265,390L268,389L266,387Z M256,383L255,382L255,383L256,383Z M256,379L253,380L255,380L256,379Z M265,378L265,378L265,378L265,378Z M260,376L259,375L259,375L260,376Z M263,374L261,372L261,380L262,380L264,374L263,374Z M260,363L260,363L260,366L260,363Z M252,347L252,345L252,346L252,347Z M250,323L252,328L254,334L257,352L258,350L258,344L258,341L259,348L263,354L264,357L267,360L267,366L269,371L269,375L268,376L268,379L266,381L267,383L270,383L268,384L270,388L268,389L272,394L270,397L271,399L270,400L271,404L270,407L270,410L267,413L266,416L265,428L267,432L270,428L272,421L271,417L276,414L277,411L281,407L286,396L290,393L290,391L289,390L289,388L285,374L281,371L280,365L278,364L279,360L280,355L278,347L273,339L266,333L260,326L258,319L258,319L255,319L255,317L251,318L249,322L250,323Z " data-fips="BM12" data-fips-="" data-iso3="MMR" data-name="Tanintharyi" data-p="TN"/><path d="M243,11L243,11L242,14L241,15L241,17L241,17L241,17L241,17L240,17L240,17L240,17L240,18L240,18L239,18L239,19L239,19L239,22L239,26L237,26L230,34L230,37L234,41L234,44L234,44L232,46L221,48L217,47L218,49L213,53L215,58L212,59L215,67L213,71L215,78L213,80L212,79L211,82L213,91L208,92L211,99L213,100L217,104L220,103L224,106L225,110L225,111L226,112L228,115L230,115L230,118L228,120L234,123L240,120L246,117L245,118L243,116L247,111L247,108L245,105L243,105L243,98L248,95L247,93L249,86L251,87L255,83L256,78L260,79L262,74L265,73L267,71L264,67L267,65L266,62L267,61L268,53L267,46L266,42L266,33L261,31L259,34L256,27L253,19L250,16L250,15L250,15L248,16L248,16L246,13L246,12L246,12L245,12L245,13L245,13L244,12L244,12L243,11Z " data-fips="BM04" data-fips-="" data-iso3="MMR" data-name="Kachin" data-p="KC"/><path d="M172,117L173,121L172,126L169,133L170,135L169,142L169,144L170,144L174,147L174,156L176,157L178,160L179,165L182,164L191,164L194,165L196,168L197,169L197,168L198,166L201,166L204,168L206,168L209,163L212,160L210,149L211,148L209,145L210,142L211,134L209,129L210,127L213,123L214,125L217,125L218,126L218,125L223,117L221,114L220,113L225,111L225,111L225,110L224,106L220,103L217,104L213,100L211,99L208,92L213,91L211,82L212,79L213,80L215,78L213,71L215,67L212,59L215,58L213,53L218,49L217,47L221,48L232,46L234,44L233,44L229,41L226,38L220,40L212,42L209,46L207,46L204,50L202,50L197,54L194,55L192,58L193,67L194,68L191,71L191,74L187,80L183,82L182,87L184,94L177,106L172,117L172,117Z " data-fips="BM10" data-fips-="" data-iso3="MMR" data-name="Sagaing" data-p="SA"/></g></svg> \ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'><svg enable_background="new 0 0 450 451" height="451px" style="stroke-linejoin: round; stroke:#000; fill:#f6f3f0;" version="1.1" viewBox="0 0 450 451" width="450px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"><![CDATA[path { fill-rule: evenodd; }
+#context path { fill: #eee; stroke: #bbb; } ]]></style></defs><metadata><views><view h="451" padding="0.06" w="450"><proj id="laea" lat0="19.238890591" lon0="97.3183282867"/><bbox h="243.51" w="115.82" x="934.62" y="879.15"/><llbbox lat0="-90" lat1="90" lon0="-180" lon1="180"/></view></views></metadata><g id="context"><path d="M109,154L108,146L107,155L109,154Z M101,155L102,154L103,146L101,143L99,139L96,138L97,143L99,145L99,150L95,156L101,155Z M65,155L65,159L69,163L73,160L74,150L75,162L80,157L82,150L83,150L84,156L86,154L86,159L89,161L92,156L97,151L98,149L94,140L97,137L97,132L98,131L97,126L94,126L98,125L99,122L100,128L99,132L103,141L105,144L109,144L115,140L116,138L125,161L127,165L127,177L132,186L133,186L130,179L131,173L137,174L139,175L139,160L139,159L138,157L137,143L135,137L135,128L133,120L126,120L126,125L123,127L122,134L118,135L116,132L114,131L113,133L112,126L110,122L112,114L116,110L126,108L127,105L131,102L133,97L134,93L138,94L139,92L130,86L115,85L97,85L93,84L84,80L85,75L85,67L83,60L78,66L73,62L68,55L69,58L65,59L58,51L58,54L53,60L50,66L60,76L63,76L65,80L66,81L65,83L56,83L53,89L50,88L47,93L49,98L61,104L60,110L57,117L60,123L59,126L63,129L62,132L63,141L63,144L65,154L65,155Z " data-iso="BGD"/><path d="M124,26L121,22L116,20L113,22L106,19L99,19L99,15L94,13L88,14L74,26L73,29L70,31L68,35L68,35L67,40L67,43L73,46L76,46L82,49L92,49L97,46L105,49L113,48L124,49L132,47L131,34L124,33L123,32L124,28L124,27L124,26Z " data-iso="BTN"/><path d="M222,0L224,6L219,12L221,14L232,16L234,15L238,18L239,19L240,18L243,12L244,12L248,16L250,16L254,20L255,24L259,34L262,31L266,33L266,42L267,45L268,56L267,65L265,69L266,71L262,74L259,79L256,78L251,86L249,86L247,92L247,95L244,97L243,103L246,106L244,117L245,117L257,112L265,113L270,112L267,117L270,125L271,133L281,135L282,141L281,148L279,151L281,157L282,157L294,159L294,165L297,170L300,172L303,171L308,171L313,167L319,166L320,169L320,169L321,170L323,178L328,176L334,177L332,174L332,163L328,153L332,148L334,150L339,149L340,150L341,149L347,141L361,146L361,144L365,141L368,144L371,140L377,145L380,140L382,139L387,141L390,138L394,137L396,131L403,127L407,126L411,131L419,134L424,133L426,135L434,135L437,137L433,146L435,148L436,155L437,154L443,157L447,160L450,162L450,0L221,0L222,0Z M215,2L215,3L216,3L219,0L220,0L215,0L215,2Z M53,21L53,20L60,18L63,17L67,19L68,24L66,30L67,33L68,35L70,31L73,29L74,26L88,14L94,13L99,15L99,19L106,19L113,22L116,20L121,22L124,26L124,27L126,27L131,28L140,26L145,23L145,20L157,8L168,6L170,5L173,1L175,1L175,0L0,0L0,8L5,9L11,17L12,17L14,13L19,18L23,14L28,17L34,21L37,21L52,21L53,21Z " data-iso="CHN"/><path d="M161,504L159,506L157,500L156,500L159,495L162,501L161,504Z M157,492L155,494L154,493L157,491L157,492Z M131,419L128,419L128,414L131,411L132,416L131,419Z M136,397L133,393L135,384L136,378L137,369L139,363L140,355L141,353L145,358L142,362L142,374L140,376L140,382L137,386L137,394L136,397Z M0,41L3,43L4,47L9,46L24,52L30,53L34,54L37,53L49,55L53,47L51,32L54,22L53,21L53,20L60,18L63,17L67,19L68,24L66,30L67,33L68,35L68,35L67,40L67,43L73,46L76,46L82,49L92,49L97,46L105,49L113,48L124,49L132,47L131,34L124,33L123,32L124,28L124,27L126,27L131,28L140,26L145,23L145,20L157,8L168,6L170,5L173,1L175,1L176,-1L185,-7L188,-3L195,-2L198,-0L203,-3L203,-4L213,-9L219,-4L215,-1L215,2L215,3L216,3L219,0L221,-0L222,0L224,6L219,12L221,14L232,16L234,15L238,18L239,19L239,20L239,26L237,26L230,32L230,36L234,43L234,44L230,42L226,39L213,41L210,45L201,52L194,55L192,61L194,68L191,74L187,80L183,82L182,86L185,90L182,97L176,107L174,111L171,117L170,116L155,113L157,119L157,129L156,133L151,136L152,138L150,144L151,151L147,159L140,158L139,159L138,157L137,143L135,137L135,128L133,120L126,120L126,125L123,127L122,134L118,135L116,132L114,131L113,133L112,126L110,122L112,114L116,110L126,108L127,105L131,102L133,97L134,93L138,94L139,92L130,86L115,85L97,85L93,84L84,80L85,75L85,67L83,60L78,66L73,62L68,55L69,58L65,59L58,51L58,54L53,60L50,66L60,76L63,76L65,80L66,81L65,83L56,83L53,89L50,88L47,93L49,98L61,104L60,110L57,117L60,123L59,126L63,129L62,132L63,141L63,144L65,154L64,157L62,157L64,164L60,163L58,165L57,161L58,155L54,159L51,164L48,161L47,163L44,163L47,152L41,158L35,162L25,164L17,171L17,173L18,182L14,191L8,194L2,200L-12,204L-12,200L-14,199L-19,202L-20,206L-17,204L-20,208L-30,216L-38,225L-46,234L-56,238L-67,248L-72,251L-80,254L-85,258L-87,261L-89,270L-91,271L-100,274L-107,273L-118,286L-121,285L-122,283L-130,284L-133,286L-138,294L-139,300L-137,314L-139,320L-136,337L-139,331L-142,333L-136,339L-139,355L-142,360L-146,364L-149,370L-152,379L-151,382L-154,385L-151,385L-151,398L-152,408L-162,407L-165,410L-165,413L-172,421L-173,423L-172,429L-167,431L-173,430L-185,433L-191,437L-193,446L-194,449L-201,452L-207,454L-212,452L-219,446L-226,435L-230,425L-231,420L-232,409L-230,414L-230,418L-228,419L-230,409L-234,400L-237,389L-239,382L-241,375L-244,366L-251,357L-255,345L-258,333L-259,315L-261,310L-263,299L-271,285L-271,279L-273,277L-270,277L-273,273L-271,271L-276,265L-278,261L-280,251L-280,234L-281,226L-280,224L-282,217L-282,206L-282,196L-280,193L-279,188L-283,192L-282,184L-279,185L-283,183L-282,179L-283,177L-283,171L-282,166L-277,155L-276,149L-278,141L-279,134L-274,131L-270,130L-280,128L-279,122L-278,118L-272,117L-284,115L-283,116L-284,120L-289,124L-286,128L-286,131L-292,139L-302,142L-306,144L-314,145L-320,144L-325,141L-333,132L-337,123L-347,110L-349,105L-348,99L-344,104L-324,100L-316,90L-320,92L-321,91L-330,93L-334,94L-342,91L-350,84L-353,81L-355,71L-354,70L-347,66L-350,66L-357,70L-359,70L-359,64L-354,62L-348,63L-346,56L-330,59L-325,62L-323,63L-319,61L-309,59L-309,63L-305,64L-299,61L-300,57L-298,55L-301,42L-303,37L-302,32L-309,29L-312,23L-308,11L-309,8L-318,4L-320,1L-316,-7L-308,-13L-302,-21L-296,-24L-292,-21L-292,-19L-290,-15L-280,-17L-275,-16L-268,-17L-265,-22L-261,-25L-256,-33L-243,-38L-235,-49L-230,-57L-224,-59L-218,-62L-218,-67L-210,-74L-201,-79L-203,-81L-201,-94L-198,-98L-195,-99L-185,-102L-183,-103L-189,-110L-192,-110L-194,-114L-193,-117L-199,-119L-199,-122L-204,-130L-202,-132L-198,-147L-201,-148L-199,-153L-202,-155L-197,-162L-191,-164L-174,-157L-166,-154L-151,-158L-149,-157L-139,-164L-123,-170L-119,-170L-121,-165L-118,-150L-117,-149L-111,-146L-107,-141L-112,-130L-113,-127L-108,-111L-107,-110L-108,-101L-112,-97L-115,-97L-118,-103L-124,-103L-123,-95L-120,-88L-121,-85L-120,-81L-121,-77L-121,-73L-116,-75L-109,-65L-103,-64L-98,-59L-97,-59L-97,-54L-95,-53L-82,-44L-95,-34L-97,-31L-100,-22L-104,-18L-105,-15L-98,-9L-96,-10L-84,-1L-79,6L-72,11L-67,12L-60,17L-57,17L-55,21L-44,25L-43,25L-34,26L-32,25L-25,26L-18,29L-17,35L-8,40L-5,43L-2,42L0,41Z " data-iso="IND"/><path d="M448,329L441,324L440,325L435,326L434,328L430,330L432,339L428,339L425,336L413,332L412,331L412,330L412,331L409,333L407,330L403,329L391,330L387,331L368,332L365,334L362,337L355,350L350,351L350,357L353,363L354,371L360,376L359,380L360,384L364,392L364,391L369,398L368,407L369,410L375,409L376,406L381,407L382,410L381,413L378,417L381,419L394,418L398,421L401,418L408,417L412,413L412,409L418,410L419,408L428,406L430,409L432,408L437,410L435,404L430,400L429,392L433,389L440,390L442,389L441,384L448,383L450,381L450,329L448,329Z " data-iso="KHM"/><path d="M341,152L348,159L358,165L356,175L362,183L364,184L375,187L376,184L383,181L388,184L393,188L392,190L389,192L395,195L396,197L399,197L401,202L394,211L387,210L382,211L383,214L380,219L385,221L398,229L407,232L406,236L408,240L418,247L418,249L427,260L433,264L439,271L440,277L444,281L447,279L448,283L450,284L459,290L454,295L465,307L462,313L463,320L461,323L456,325L450,329L448,329L441,324L440,325L435,326L434,328L430,330L432,339L428,339L425,336L413,332L412,331L412,330L413,330L418,326L419,314L418,312L419,307L421,304L421,299L416,296L416,293L408,289L402,283L401,278L401,269L402,264L395,257L393,255L384,243L382,241L369,239L368,240L364,246L364,246L364,246L364,246L362,249L353,252L350,250L342,245L333,252L328,256L321,262L317,260L322,245L319,240L322,236L324,228L322,220L322,216L321,214L317,214L312,216L305,213L305,210L307,205L305,199L302,196L298,199L299,198L299,197L301,188L307,185L307,184L312,175L318,171L320,169L321,170L323,178L328,176L334,177L332,174L332,163L328,153L332,148L334,150L339,149L340,150L341,152Z " data-iso="LAO"/><path d="M266,393L266,392L262,392L264,397L266,398L266,393Z M256,394L254,391L254,394L256,394Z M265,390L268,388L266,387L265,390Z M263,374L261,376L261,380L264,377L263,374Z M177,297L180,293L179,291L175,296L175,299L177,297Z M244,291L244,285L242,286L242,290L244,291Z M161,235L162,231L156,230L161,235Z M162,215L164,221L165,220L162,215Z M157,207L155,206L157,210L157,207Z M239,19L239,20L239,26L237,26L230,32L230,36L234,43L234,44L230,42L226,39L213,41L210,45L201,52L194,55L192,61L194,68L191,74L187,80L183,82L182,86L185,90L182,97L176,107L174,111L171,117L170,116L155,113L157,119L157,129L156,133L151,136L152,138L150,144L151,151L147,159L140,158L139,159L139,160L139,175L137,174L131,173L130,179L133,186L134,188L138,193L141,197L144,195L142,199L144,201L148,196L147,203L149,208L150,204L154,203L159,207L162,207L159,210L164,215L168,218L167,220L162,221L159,218L157,219L159,223L163,228L166,230L166,224L169,230L173,234L171,234L176,246L178,255L180,260L179,266L172,284L171,293L176,294L181,286L182,284L181,298L186,297L187,300L192,300L196,294L195,302L200,300L203,297L205,293L210,291L213,289L214,279L218,285L224,284L227,280L230,273L229,269L229,265L236,272L236,272L240,285L246,286L245,296L247,299L249,309L248,312L249,315L250,322L254,334L256,338L255,342L257,350L258,342L259,348L263,354L267,361L268,368L269,375L268,381L269,382L269,388L268,392L269,394L272,392L271,397L271,405L269,410L264,417L267,432L269,429L270,428L272,417L281,408L290,392L288,385L287,383L285,375L281,370L279,364L280,359L280,353L278,346L276,343L266,334L259,323L258,315L266,310L266,306L267,295L272,292L272,287L269,289L264,280L263,274L259,270L247,256L247,255L248,252L240,240L248,237L247,230L249,225L249,218L256,211L259,212L264,212L270,211L273,211L275,204L278,203L282,203L285,202L284,197L296,196L299,198L299,197L301,188L307,185L307,184L312,175L318,171L320,169L320,169L319,166L313,167L308,171L303,171L300,172L297,170L294,165L294,159L282,157L281,157L279,151L281,148L282,141L281,135L271,133L270,125L267,117L270,112L265,113L257,112L245,117L244,117L246,106L243,103L244,97L247,95L247,92L249,86L251,86L256,78L259,79L262,74L266,71L265,69L267,65L268,56L267,45L266,42L266,33L262,31L259,34L255,24L254,20L250,16L248,16L244,12L243,12L240,18L239,19Z " data-iso="MMR"/><path d="M0,41L3,43L4,47L9,46L24,52L30,53L34,54L37,53L49,55L53,47L51,32L54,22L53,21L52,21L37,21L34,21L28,17L23,14L19,18L14,13L12,17L11,17L5,9L0,8L0,41L0,41Z " data-iso="NPL"/><path d="M301,442L298,442L298,446L301,442Z M353,386L350,383L350,386L353,386Z M364,392L360,384L359,380L360,376L354,371L353,363L350,357L350,351L355,350L362,337L365,334L368,332L387,331L391,330L403,329L407,330L409,333L412,331L412,330L413,330L418,326L419,314L418,312L419,307L421,304L421,299L416,296L416,293L408,289L402,283L401,278L401,269L402,264L395,257L393,255L384,243L382,241L369,239L368,240L364,246L362,249L353,252L350,250L342,245L333,252L328,256L321,262L317,260L322,245L319,240L322,236L324,228L322,220L322,216L321,214L317,214L312,216L305,213L305,210L307,205L305,199L302,196L298,199L299,198L296,196L284,197L285,202L282,203L278,203L275,204L273,211L270,211L264,212L259,212L256,211L249,218L249,225L247,230L248,237L240,240L248,252L247,255L247,256L259,270L263,274L264,280L269,289L272,287L272,292L267,295L266,306L266,310L258,315L259,323L266,334L276,343L278,346L280,353L280,359L279,364L281,370L285,375L287,383L288,385L290,392L281,408L272,417L270,428L267,436L265,443L262,449L282,449L283,446L280,434L280,425L282,424L283,420L287,412L290,399L294,393L295,389L299,379L298,371L300,363L299,356L303,353L310,352L320,354L318,368L320,373L323,371L331,372L337,371L346,376L348,379L355,383L358,382L360,385L364,392L364,392Z " data-iso="THA"/><path d="M390,421L386,422L389,430L390,421Z M340,150L341,152L348,159L358,165L356,175L362,183L364,184L375,187L376,184L383,181L388,184L393,188L392,190L389,192L395,195L396,197L399,197L401,202L394,211L387,210L382,211L383,214L380,219L385,221L398,229L407,232L406,236L408,240L418,247L418,249L427,260L433,264L439,271L440,277L444,281L447,279L448,283L450,284L450,265L443,260L436,249L437,247L431,241L423,235L417,225L418,223L421,217L421,210L424,202L428,201L436,191L435,188L439,183L437,177L443,178L450,176L450,162L447,160L443,157L437,154L436,155L435,148L433,146L437,137L434,135L426,135L424,133L419,134L411,131L407,126L403,127L396,131L394,137L390,138L387,141L382,139L380,140L377,145L371,140L368,144L365,141L361,144L361,146L347,141L341,149L340,150Z M450,381L448,383L441,384L442,389L440,390L433,389L429,392L430,400L435,404L437,410L432,408L430,409L428,406L419,408L418,410L412,409L412,413L408,417L401,418L398,421L400,422L412,428L413,432L409,434L408,439L408,449L424,449L438,442L438,441L437,436L430,429L432,429L439,436L443,438L445,438L447,434L445,432L438,425L437,423L447,431L449,430L447,423L444,421L450,421L449,417L450,416L450,381Z " data-iso="VNM"/></g><g fill="red" fill-opacity="0.35" id="regions"><path d="M236,206L235,206L235,211L231,214L228,222L231,227L232,231L238,235L240,238L248,236L246,230L249,226L249,224L248,219L250,217L250,215L251,215L251,215L249,213L248,213L248,213L248,213L248,213L248,213L248,213L248,213L248,213L245,213L245,210L243,208L243,208L243,208L242,208L242,208L242,208L242,208L242,208L242,208L242,208L242,208L240,207L240,207L240,207L240,207L239,207L239,208L239,208L239,208L239,208L237,208L237,208L236,206L236,206Z " data-fips="BM06" data-fips-="" data-iso3="MMR" data-name="Kayah"/><path d="M225,217L225,217L223,218L223,218L221,217L219,218L219,218L222,224L221,225L225,230L224,232L225,236L228,237L230,236L231,242L233,244L235,244L236,248L235,251L236,261L237,261L237,261L240,260L242,263L242,273L243,277L246,283L247,283L247,283L248,284L248,284L248,284L252,287L253,287L257,293L250,293L251,296L250,299L252,305L258,314L258,314L264,310L266,311L266,305L266,296L266,295L269,294L272,293L271,286L267,286L264,279L265,278L260,272L259,270L253,262L248,258L247,255L247,255L247,255L247,252L247,248L245,246L242,243L241,242L238,235L235,235L231,227L228,222L228,222L229,220L228,220L225,218L225,217Z " data-fips="BM05" data-fips-="BM01" data-iso3="MMR" data-name="Kayin"/><path d="M217,125L214,125L213,123L210,127L209,129L211,134L210,142L209,145L211,148L210,149L212,160L209,163L206,168L204,168L201,166L198,166L197,168L197,169L197,169L197,172L192,175L187,177L185,180L186,184L191,186L191,191L202,188L207,203L206,204L206,208L206,212L206,217L206,218L207,218L209,217L213,219L215,217L218,217L219,218L221,217L223,218L223,218L225,217L225,217L225,216L223,215L224,213L220,208L219,205L222,200L221,196L222,194L220,190L223,188L223,185L215,183L216,179L219,179L218,171L224,168L226,166L230,166L226,158L221,156L218,151L218,149L216,145L217,142L224,142L226,139L223,137L215,136L214,134L215,129L216,129L218,126L218,126L217,125Z " data-fips="BM08" data-fips-="" data-iso3="MMR" data-name="Mandalay"/><path d="M206,218L206,218L206,224L195,227L193,230L193,232L191,235L191,239L192,240L192,240L197,247L199,258L204,261L205,263L205,262L212,257L217,266L219,274L224,274L228,276L228,276L230,272L229,269L230,267L228,265L229,264L229,263L229,261L235,263L237,262L237,261L236,261L235,251L236,248L235,244L233,244L231,242L230,236L228,237L225,236L224,232L225,230L221,225L222,224L219,218L219,218L218,217L215,217L213,219L209,217L207,218L206,218Z " data-fips="BM16" data-fips-="BM09" data-iso3="MMR" data-name="Bago"/><path d="M205,263L204,264L205,270L206,271L208,280L208,284L206,285L210,288L210,288L214,289L217,287L215,281L218,285L220,285L227,279L228,276L228,276L224,274L219,274L217,266L212,257L205,262L205,263Z " data-fips="BM17" data-fips-="BM14" data-iso3="MMR" data-name="Yangon"/><path d="M244,291L245,286L243,285L242,286L243,291L244,291Z M247,284L246,289L245,294L244,295L248,304L249,310L248,313L250,318L249,322L249,322L251,318L255,317L255,319L258,319L258,319L258,318L257,317L258,314L258,314L252,305L250,299L251,296L250,293L257,293L253,287L252,287L248,284L247,284Z M237,261L237,262L235,263L229,261L229,263L229,264L237,272L235,272L236,278L237,278L240,286L241,285L246,284L247,283L246,283L243,277L242,273L242,263L240,260L237,261L237,261Z " data-fips="BM13" data-fips-="" data-iso3="MMR" data-name="Mon"/><path d="M161,230L157,231L160,235L161,235L162,231L161,230Z M163,216L163,221L165,221L167,219L163,216Z M157,210L156,206L156,209L157,210Z M179,263L183,265L186,254L186,252L186,244L185,243L183,237L184,235L184,232L181,226L179,225L176,215L176,211L173,204L173,202L168,192L166,192L166,189L166,188L161,185L161,189L160,190L156,189L146,180L143,179L140,174L140,175L135,173L134,171L131,172L130,177L134,188L141,198L141,194L139,188L143,193L145,197L144,202L147,197L148,201L148,206L150,205L151,203L155,203L156,206L161,207L160,210L167,218L166,221L162,222L156,218L156,219L160,227L166,231L167,228L168,220L169,223L168,231L171,231L170,234L173,236L173,239L176,243L177,247L177,251L178,255L180,260L179,262L179,263Z " data-fips="BM01" data-fips-="BM05" data-iso3="MMR" data-name="Rakhine"/><path d="M140,174L143,179L146,180L156,189L160,190L161,189L161,185L166,188L166,189L168,190L170,190L169,183L171,181L170,177L170,172L171,169L169,165L170,161L169,158L170,151L169,145L169,144L169,142L170,135L169,133L172,126L173,121L172,117L172,117L166,115L164,114L158,114L157,112L157,119L158,121L156,133L154,136L151,135L152,139L150,141L150,147L151,153L149,154L147,159L142,155L140,158L139,159L139,165L139,172L140,174L140,174Z " data-fips="BM02" data-fips-="" data-iso3="MMR" data-name="Chin"/><path d="M175,300L177,297L179,296L181,291L175,297L175,300Z M192,240L192,240L192,240L190,243L188,241L185,243L186,244L186,252L186,254L183,265L179,263L179,265L177,272L176,275L174,284L171,290L171,296L171,296L176,294L178,289L182,288L180,297L182,300L185,295L184,297L186,301L189,301L190,295L191,301L193,299L195,298L196,294L196,297L194,300L194,302L199,301L203,298L204,291L205,293L211,289L210,288L206,285L208,284L208,280L206,271L205,270L204,264L205,263L204,261L199,258L197,247L192,240L192,240Z " data-fips="BM03" data-fips-="" data-iso3="MMR" data-name="Ayeyarwady"/><path d="M169,144L169,145L170,151L169,158L170,161L169,165L171,169L170,172L170,177L171,181L169,183L170,190L168,190L166,189L166,192L168,192L173,202L173,204L176,211L176,215L179,225L181,226L184,232L184,235L183,237L185,243L185,243L188,241L190,243L192,240L192,240L192,240L191,239L191,235L193,232L193,230L195,227L206,224L206,218L206,218L206,217L206,212L206,208L206,204L207,203L202,188L191,191L191,186L186,184L185,180L187,177L192,175L197,172L197,169L197,169L196,168L194,165L191,164L182,164L179,165L178,160L176,157L174,156L174,147L170,144L169,144Z " data-fips="BM15" data-fips-="BM07" data-iso3="MMR" data-name="Magway"/><path d="M246,117L240,120L234,123L228,120L230,118L230,115L228,115L226,112L225,111L225,111L220,113L221,114L223,117L218,125L218,126L218,126L216,129L215,129L214,134L215,136L223,137L226,139L224,142L217,142L216,145L218,149L218,151L221,156L226,158L230,166L226,166L224,168L218,171L219,179L216,179L215,183L223,185L223,188L220,190L222,194L221,196L222,200L219,205L220,208L224,213L223,215L225,216L225,217L225,218L228,220L229,220L228,222L229,221L230,219L231,214L235,211L236,206L236,206L236,206L237,207L237,208L239,208L239,208L239,208L240,207L240,207L240,207L240,207L240,207L242,208L242,208L242,208L242,208L242,208L242,208L242,208L243,208L243,208L243,208L243,208L243,208L244,210L245,213L248,213L248,213L248,213L248,213L248,213L248,213L248,213L249,213L250,214L251,215L251,215L254,213L254,210L259,213L265,213L275,209L275,204L278,202L281,204L284,203L286,200L285,197L295,195L296,196L299,195L300,190L304,186L309,186L307,184L307,181L309,180L311,175L313,175L320,170L319,165L315,166L308,172L305,172L304,170L300,172L298,171L299,167L294,166L295,160L294,159L292,159L278,157L282,148L281,143L284,137L284,136L275,135L275,133L271,133L271,126L269,125L271,123L269,120L267,117L268,115L271,112L263,112L260,112L257,112L250,114L246,117L246,117Z " data-fips="BM11" data-fips-="" data-iso3="MMR" data-name="Shan"/><path d="M259,412L257,411L259,417L260,417L259,412Z M260,399L261,395L260,393L260,399Z M266,392L264,392L264,397L266,398L266,392Z M266,387L264,385L265,390L268,389L266,387Z M263,374L261,372L261,380L262,380L264,374L263,374Z M250,323L252,328L254,334L257,352L258,350L258,344L258,341L259,348L263,354L264,357L267,360L267,366L269,371L269,375L268,376L268,379L266,381L267,383L270,383L268,384L270,388L268,389L272,394L270,397L271,399L270,400L271,404L270,407L270,410L267,413L266,416L265,428L267,432L270,428L272,421L271,417L276,414L277,411L281,407L286,396L290,393L290,391L289,390L289,388L285,374L281,371L280,365L278,364L279,360L280,355L278,347L273,339L266,333L260,326L258,319L258,319L255,319L255,317L251,318L249,322L250,323Z " data-fips="BM12" data-fips-="" data-iso3="MMR" data-name="Tanintharyi"/><path d="M234,44L232,46L221,48L217,47L218,49L213,53L215,58L212,59L215,67L213,71L215,78L213,80L212,79L211,82L213,91L208,92L211,99L213,100L217,104L220,103L224,106L225,110L225,111L226,112L228,115L230,115L230,118L228,120L234,123L240,120L246,117L245,118L243,116L247,111L247,108L245,105L243,105L243,98L248,95L247,93L249,86L251,87L255,83L256,78L260,79L262,74L265,73L267,71L264,67L267,65L266,62L267,61L268,53L267,46L266,42L266,33L261,31L259,34L256,27L250,16L247,15L246,13L243,12L239,19L239,22L239,26L237,26L230,34L230,37L234,41L234,44L234,44Z " data-fips="BM04" data-fips-="" data-iso3="MMR" data-name="Kachin"/><path d="M172,117L173,121L172,126L169,133L170,135L169,142L169,144L170,144L174,147L174,156L176,157L178,160L179,165L182,164L191,164L194,165L196,168L197,169L197,168L198,166L201,166L204,168L206,168L209,163L212,160L210,149L211,148L209,145L210,142L211,134L209,129L210,127L213,123L214,125L217,125L218,126L218,125L223,117L221,114L220,113L225,111L225,111L225,110L224,106L220,103L217,104L213,100L211,99L208,92L213,91L211,82L212,79L213,80L215,78L213,71L215,67L212,59L215,58L213,53L218,49L217,47L221,48L232,46L234,44L233,44L229,41L226,38L220,40L212,42L209,46L207,46L204,50L202,50L197,54L194,55L192,58L193,67L194,68L191,71L191,74L187,80L183,82L182,87L184,94L177,106L172,117L172,117Z " data-fips="BM10" data-fips-="" data-iso3="MMR" data-name="Sagaing"/></g></svg> \ No newline at end of file
diff --git a/plugins/UserCountryMap/svg/NPL.svg b/plugins/UserCountryMap/svg/NPL.svg
index 635cea8253..4ab700ce44 100644
--- a/plugins/UserCountryMap/svg/NPL.svg
+++ b/plugins/UserCountryMap/svg/NPL.svg
@@ -1 +1,2 @@
-<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'><svg enable_background="new 0 0 450 301" height="301px" pretty_print="False" style="stroke-linejoin: round; stroke:#000; fill: none;" version="1.1" viewBox="0 0 450 301" width="450px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"><![CDATA[path { fill-rule: evenodd; }]]></style></defs><metadata><views><view h="301.0" padding="0.06" w="450"><proj id="laea" lat0="28.3259457465" lon0="82.5275984957"/><bbox h="59.97" w="99.82" x="967.67" y="968.81"/></view></views></metadata><g class="" id="context"><path d="M72,51L72,51L73,51L74,53L74,55L76,57L76,60L76,60L79,60L82,61L85,58L85,57L86,54L90,49L91,41L97,43L98,41L102,38L113,41L119,43L123,43L125,44L128,53L127,55L140,62L151,71L153,71L158,78L166,81L170,83L176,83L181,87L181,90L185,90L186,94L190,100L194,105L194,107L200,109L201,108L201,108L204,104L207,104L212,101L218,102L222,103L225,105L224,109L226,114L229,115L228,120L228,122L229,122L236,125L240,131L250,135L251,139L263,142L269,136L274,139L271,147L271,152L271,154L282,156L284,157L287,155L297,157L300,153L301,156L304,160L309,162L311,169L314,171L315,177L319,177L320,177L322,175L320,167L324,162L326,170L330,171L332,173L338,175L341,173L342,171L344,164L346,165L349,164L352,165L354,169L358,168L364,172L365,172L365,172L369,174L371,177L380,179L395,179L398,178L400,178L408,173L417,173L421,174L420,173L424,169L433,167L437,164L440,164L444,160L450,162L450,0L0,0L0,3L3,7L5,8L17,7L22,12L25,13L28,17L33,17L36,20L35,23L33,30L40,30L45,33L53,35L62,43L66,45L72,50L72,51Z " data-iso="TIB"/><path d="M449,253L444,248L439,246L436,246L437,251L440,253L437,260L435,263L431,268L427,273L424,280L424,284L427,288L432,289L438,294L442,299L450,299L450,254L449,253Z " data-iso="BGD"/><path d="M783,1319L780,1324L773,1311L770,1310L770,1303L771,1301L779,1297L781,1299L785,1311L783,1319Z M773,1291L768,1297L766,1294L771,1288L773,1291Z M756,1264L751,1264L748,1259L749,1257L752,1256L755,1260L756,1264Z M761,1253L756,1251L756,1247L758,1244L760,1245L759,1248L761,1253Z M738,1244L740,1246L737,1246L734,1243L735,1239L738,1244Z M716,1197L714,1198L712,1194L716,1191L717,1195L716,1197Z M697,1120L695,1122L690,1121L690,1115L688,1110L689,1108L693,1103L697,1101L699,1107L701,1112L697,1120Z M705,1074L703,1075L700,1074L702,1072L702,1067L705,1069L705,1074Z M721,1036L724,1044L720,1041L718,1039L721,1036Z M703,992L701,996L700,988L703,987L703,992Z M707,1065L704,1065L698,1056L697,1050L695,1047L697,1044L699,1043L700,1039L700,1034L703,1028L708,1027L707,1023L704,1020L704,1010L705,1003L704,997L707,991L708,984L707,982L709,971L709,964L712,957L717,953L719,953L720,961L717,965L721,969L717,978L715,980L711,987L716,992L718,1009L715,1014L712,1015L713,1026L713,1029L707,1040L708,1043L709,1059L707,1065Z M73,52L68,52L57,61L50,67L43,76L39,85L36,93L36,99L34,106L29,111L27,117L25,123L26,126L30,129L43,138L46,139L48,135L51,136L59,142L79,154L86,163L95,169L113,180L122,179L125,181L134,187L142,191L151,190L153,191L156,200L166,203L172,204L183,208L187,206L188,204L191,203L196,203L210,207L213,204L220,203L223,201L230,204L242,209L249,211L251,223L253,225L265,232L269,234L276,236L277,239L283,242L297,236L301,236L303,239L305,247L308,249L311,249L319,246L325,248L330,248L346,253L354,257L357,256L369,249L373,256L377,258L383,260L389,256L400,257L406,255L411,254L418,257L421,254L426,238L425,233L423,226L416,218L416,215L417,200L419,191L421,187L422,175L420,174L420,172L428,168L435,165L442,160L445,160L451,163L454,165L456,172L456,178L452,192L454,197L460,204L454,209L453,211L458,217L459,223L474,230L483,228L496,231L497,234L505,235L523,231L526,225L533,222L547,228L553,228L573,225L580,225L587,220L588,220L591,223L599,223L607,219L615,219L618,215L618,212L616,208L614,202L617,194L612,185L605,187L600,187L596,184L592,181L591,178L593,170L597,169L610,170L616,165L623,163L631,163L643,155L644,153L641,149L644,144L652,139L659,132L663,128L666,117L668,115L673,113L688,110L699,102L704,96L704,93L708,92L716,81L724,77L731,70L733,71L739,77L748,78L750,78L757,79L764,82L769,82L775,75L774,72L783,65L791,60L798,56L803,59L806,64L814,67L811,70L804,75L807,85L815,77L819,75L821,77L822,80L828,91L820,100L818,105L822,114L823,111L831,107L834,108L840,111L850,112L855,110L858,111L868,117L868,124L870,127L869,134L865,135L854,148L851,151L850,154L852,162L864,176L864,179L861,180L853,177L848,171L845,169L842,169L813,179L806,190L799,196L786,208L779,214L774,216L771,219L768,226L768,233L770,242L774,250L769,257L768,266L760,281L754,284L752,287L749,299L750,300L756,302L758,307L756,314L753,323L749,331L741,350L738,361L735,375L732,376L729,374L712,370L700,372L695,368L693,371L697,384L700,389L700,408L700,420L697,426L689,428L690,433L687,444L689,454L692,464L691,473L688,473L684,484L681,485L678,485L673,480L669,478L667,485L664,487L663,484L660,464L657,448L651,437L649,435L648,428L646,414L640,394L624,395L625,405L625,407L618,414L617,418L619,428L618,431L615,434L611,435L608,435L605,433L601,424L598,424L598,431L595,430L591,415L586,404L585,399L588,385L593,379L596,374L602,374L606,370L614,366L618,368L620,367L623,358L630,354L631,349L634,338L635,327L636,327L643,329L646,328L646,323L641,319L633,315L625,312L610,314L596,316L587,314L574,316L558,317L544,318L534,318L515,313L513,313L511,308L512,298L510,283L510,277L504,264L502,262L497,267L498,270L497,274L493,275L484,273L478,269L474,264L473,258L471,255L466,253L464,255L467,260L467,262L460,262L453,260L452,257L449,253L444,248L439,246L436,246L437,251L440,253L437,260L435,263L431,268L427,273L424,280L424,284L427,288L432,289L438,294L443,301L450,305L459,305L462,312L468,315L466,321L459,323L444,322L441,335L438,340L431,338L429,338L425,350L424,355L427,359L430,362L434,363L437,362L440,363L443,367L448,369L456,370L460,372L460,384L459,388L456,398L454,406L455,410L463,419L461,427L463,429L473,432L470,441L471,446L473,452L474,463L477,470L482,483L481,502L477,502L481,507L483,512L483,517L479,518L476,518L473,513L472,517L468,522L465,514L466,499L462,495L461,492L458,509L460,515L459,518L452,521L445,515L442,521L435,521L432,518L434,512L438,498L438,492L432,488L427,486L425,480L426,487L428,489L432,490L436,494L431,500L426,510L420,516L412,521L388,528L383,530L375,538L371,545L370,553L373,560L376,572L378,575L375,579L371,584L367,591L367,597L354,605L347,614L343,612L341,612L344,616L339,621L320,627L306,633L302,633L305,630L305,623L300,622L289,630L284,637L288,638L295,634L299,635L299,637L288,644L264,665L263,669L260,674L256,679L248,690L233,706L229,712L206,725L201,728L192,740L181,750L170,758L149,769L137,779L133,785L137,796L135,803L131,808L125,813L105,821L85,819L79,820L77,824L71,841L65,846L62,852L56,851L54,852L52,846L45,845L30,850L25,854L15,876L12,889L14,905L18,917L18,922L18,930L14,937L16,946L20,957L21,961L21,966L25,977L22,975L21,971L17,965L11,970L14,975L24,980L26,984L20,1021L15,1034L9,1043L6,1046L-1,1059L-6,1076L-7,1082L-5,1089L-7,1093L-11,1096L-5,1095L-3,1099L-2,1103L-2,1127L-3,1151L-13,1152L-20,1150L-28,1151L-32,1154L-36,1159L-36,1166L-50,1185L-54,1192L-55,1198L-53,1201L-49,1204L-45,1206L-35,1207L-31,1209L-28,1213L-39,1209L-52,1208L-83,1216L-91,1222L-96,1227L-99,1240L-100,1248L-104,1255L-120,1265L-131,1268L-134,1271L-146,1267L-159,1257L-165,1252L-184,1227L-187,1223L-191,1213L-191,1209L-195,1205L-199,1193L-201,1180L-203,1166L-201,1168L-198,1172L-196,1179L-196,1188L-192,1188L-197,1167L-202,1162L-205,1158L-205,1151L-209,1144L-210,1140L-219,1119L-223,1103L-229,1086L-233,1080L-239,1067L-245,1061L-251,1052L-257,1046L-269,1018L-273,1002L-276,995L-278,989L-282,965L-282,956L-285,946L-290,935L-292,928L-292,925L-295,914L-296,909L-304,897L-311,886L-313,883L-318,876L-320,863L-325,858L-318,858L-326,848L-322,843L-328,843L-330,840L-334,831L-340,820L-341,814L-346,797L-349,756L-353,737L-353,732L-357,716L-360,705L-360,696L-361,690L-362,678L-364,672L-362,667L-358,659L-356,654L-357,646L-361,654L-365,656L-366,650L-365,638L-356,639L-366,634L-367,629L-365,625L-369,622L-369,612L-371,607L-368,594L-357,568L-356,562L-356,553L-358,546L-358,537L-362,536L-365,533L-367,522L-361,517L-368,517L-357,509L-346,505L-341,503L-348,505L-355,505L-370,503L-367,493L-364,490L-361,489L-365,489L-370,488L-368,478L-364,476L-355,475L-360,472L-366,471L-373,472L-379,471L-386,470L-384,472L-380,475L-384,484L-389,486L-392,489L-396,494L-389,497L-385,504L-386,511L-396,528L-400,531L-423,540L-433,544L-453,550L-460,551L-468,548L-480,542L-497,526L-502,521L-515,501L-525,490L-532,481L-541,471L-549,459L-551,453L-549,448L-546,446L-542,447L-535,455L-520,450L-515,451L-511,448L-506,449L-496,444L-488,444L-479,431L-472,423L-468,422L-469,417L-472,417L-478,424L-482,422L-489,423L-503,426L-509,430L-513,431L-534,424L-554,410L-562,401L-567,391L-572,379L-569,376L-560,370L-552,365L-559,367L-567,370L-570,371L-575,376L-581,376L-582,369L-583,362L-576,358L-566,357L-554,359L-552,342L-548,340L-547,343L-543,342L-539,343L-536,343L-532,344L-510,346L-503,353L-492,354L-487,353L-483,348L-473,345L-463,343L-460,343L-459,351L-455,353L-448,353L-443,349L-438,348L-435,347L-438,341L-437,334L-433,331L-437,319L-440,309L-443,301L-447,293L-449,288L-448,277L-452,272L-455,272L-464,272L-467,270L-474,258L-475,253L-475,249L-471,241L-468,227L-473,221L-480,219L-488,216L-495,211L-500,205L-498,197L-495,188L-493,185L-485,178L-476,170L-467,158L-461,150L-452,144L-448,142L-444,142L-437,148L-437,154L-430,161L-427,161L-411,156L-406,156L-393,156L-377,152L-375,147L-372,141L-362,132L-359,128L-353,113L-350,110L-336,103L-322,97L-319,94L-309,79L-303,69L-294,49L-290,47L-281,44L-273,41L-267,35L-267,31L-269,27L-268,23L-262,18L-251,5L-245,-1L-243,-1L-230,-8L-231,-13L-234,-14L-235,-17L-230,-32L-231,-36L-233,-46L-231,-52L-227,-56L-222,-59L-205,-66L-197,-68L-193,-72L-192,-75L-197,-81L-208,-87L-217,-87L-223,-91L-223,-96L-222,-104L-225,-104L-230,-105L-236,-106L-238,-108L-237,-111L-237,-115L-241,-120L-246,-123L-249,-127L-251,-133L-245,-141L-243,-147L-243,-149L-250,-157L-248,-163L-245,-166L-238,-168L-236,-171L-242,-175L-250,-176L-251,-181L-247,-186L-248,-188L-250,-191L-255,-194L-255,-197L-246,-212L-230,-217L-201,-208L-190,-207L-187,-205L-179,-200L-172,-198L-167,-198L-160,-201L-151,-206L-145,-206L-132,-210L-126,-209L-121,-211L-117,-217L-106,-222L-104,-228L-79,-242L-68,-247L-65,-245L-58,-247L-58,-245L-60,-237L-60,-234L-57,-228L-49,-201L-47,-198L-31,-192L-27,-189L-19,-183L-18,-180L-20,-174L-28,-168L-30,-164L-27,-153L-27,-136L-21,-127L-13,-120L-12,-117L-14,-109L-10,-104L-9,-91L-10,-79L-14,-78L-17,-73L-24,-72L-28,-75L-34,-86L-47,-84L-48,-83L-46,-75L-46,-69L-44,-65L-33,-50L-36,-42L-36,-38L-31,-31L-33,-27L-35,-23L-33,-21L-34,-15L-32,-13L-27,-15L-23,-15L-21,-19L-17,-19L-6,-2L4,7L9,6L15,6L29,17L32,17L34,18L35,23L34,29L37,30L54,36L57,38L60,41L72,48L73,52Z " data-iso="IND"/><path d="M416,173L408,174L399,178L396,178L380,178L373,178L367,173L358,169L353,168L346,164L343,165L342,172L336,174L327,169L323,164L320,166L320,174L316,176L314,175L308,163L304,159L300,156L287,156L277,155L273,154L271,151L274,140L270,138L259,141L257,141L251,138L249,135L240,130L233,124L229,122L222,105L214,102L201,107L197,107L191,100L186,93L180,86L176,83L169,83L162,79L144,65L131,58L123,44L113,42L103,40L92,43L85,56L81,59L77,59L75,56L73,52L68,52L57,61L50,67L43,76L39,85L36,93L36,99L34,106L29,111L27,117L25,123L26,126L30,129L43,138L46,139L48,135L51,136L59,142L79,154L86,163L95,169L113,180L122,179L125,181L134,187L142,191L151,190L153,191L156,200L166,203L172,204L183,208L187,206L188,204L191,203L196,203L210,207L213,204L220,203L223,201L230,204L242,209L249,211L251,223L253,225L265,232L269,234L276,236L277,239L283,242L297,236L301,236L303,239L305,247L308,249L311,249L319,246L325,248L330,248L346,253L354,257L357,256L369,249L373,256L377,258L383,260L389,256L400,257L406,255L411,254L418,257L421,254L426,238L425,233L423,226L416,218L416,215L417,200L419,191L421,187L422,175L420,174L416,173Z " data-iso="NPL"/></g><g class="" id="regions"><path d="M174,132L167,128L160,127L158,128L154,122L151,119L148,118L145,120L144,124L135,131L131,136L129,138L122,138L120,148L119,148L119,153L122,155L125,159L122,161L121,165L124,168L128,171L129,173L128,175L124,176L122,178L122,178L127,181L133,186L137,188L140,191L141,192L146,191L152,190L153,190L159,186L161,186L157,183L159,180L166,178L171,166L170,162L173,160L173,159L173,158L167,152L163,147L164,144L171,138L174,137L176,134L176,132L174,132Z " data-fips="NP12" data-fips-="" data-iso3="NPL" data-name="Rapti" data-p="MP"/><path d="M228,122L228,122L228,122L222,124L218,127L214,127L209,133L210,138L208,140L207,144L203,151L207,159L207,160L201,172L198,173L197,174L191,175L191,176L202,177L206,177L210,180L219,178L223,180L232,182L233,184L238,185L239,186L239,186L241,186L240,184L247,179L250,180L250,181L251,181L255,182L254,177L258,168L263,165L265,160L271,153L271,152L271,147L274,139L269,136L263,142L251,139L250,135L240,131L236,125L229,122L228,122Z " data-fips="NP04" data-fips-="" data-iso3="NPL" data-name="Gorkha" data-p="PM"/><path d="M98,110L95,113L91,116L95,124L97,125L99,130L96,131L96,128L92,123L88,123L80,122L78,120L73,119L71,121L76,125L78,124L82,128L81,125L82,127L85,136L84,137L77,146L74,147L73,151L78,152L79,153L82,159L85,162L86,166L89,163L90,164L99,172L101,174L106,176L108,178L113,181L114,181L119,178L121,178L122,178L124,176L128,175L129,173L128,171L124,168L121,165L122,161L125,159L122,155L119,153L119,148L120,148L122,138L129,138L131,136L135,131L144,124L145,120L148,118L145,117L142,118L140,116L140,114L138,112L133,112L128,114L124,118L121,117L116,119L113,118L99,112L98,110Z " data-fips="NP02" data-fips-="" data-iso3="NPL" data-name="Banke" data-p="MP"/><path d="M201,108L201,108L201,108L201,110L199,113L199,117L195,123L192,130L183,133L177,132L176,132L176,134L174,137L171,138L164,144L163,147L167,152L173,158L173,159L177,159L187,164L188,165L193,167L197,171L198,173L201,172L207,160L207,159L203,151L207,144L208,140L210,138L209,133L214,127L218,127L222,124L228,122L228,122L228,122L228,120L229,115L226,114L224,109L225,105L222,103L218,102L212,101L207,104L204,104L201,108L201,108Z " data-fips="NP03" data-fips-="" data-iso3="NPL" data-name="Dhawalagiri" data-p="PM"/><path d="M85,57L93,60L96,67L103,65L109,67L106,80L108,83L110,88L106,90L106,94L107,98L102,97L98,98L95,100L95,106L98,110L98,110L99,112L113,118L116,119L121,117L124,118L128,114L133,112L138,112L140,114L140,116L142,118L145,117L148,118L151,119L154,122L158,128L160,127L167,128L174,132L176,132L177,132L183,133L192,130L195,123L199,117L199,113L201,110L201,108L201,108L201,108L200,109L194,107L194,105L190,100L186,94L185,90L181,90L181,87L176,83L170,83L166,81L158,78L153,71L151,71L140,62L127,55L128,53L125,44L123,43L119,43L113,41L102,38L98,41L97,43L91,41L90,49L86,54L85,57L85,57Z " data-fips="NP06" data-fips-="" data-iso3="NPL" data-name="Karnali" data-p="MP"/><path d="M173,159L173,160L170,162L171,166L166,178L159,180L157,183L161,186L159,186L153,190L153,190L156,200L157,201L170,204L176,204L182,210L186,209L187,206L187,203L188,202L193,202L198,203L202,204L211,209L212,207L211,205L214,204L215,203L216,199L215,199L222,197L223,198L226,194L230,191L232,191L239,189L239,187L239,186L238,185L233,184L232,182L223,180L219,178L210,180L206,177L202,177L191,176L191,175L197,174L198,173L197,171L193,167L188,165L187,164L177,159L173,159Z " data-fips="NP08" data-fips-="" data-iso3="NPL" data-name="Lumbini" data-p="PM"/><path d="M48,134L48,128L47,127L47,117L55,107L57,104L60,99L66,93L59,87L61,85L60,81L62,79L74,76L75,72L73,67L72,65L75,61L76,60L76,60L76,57L74,55L74,53L73,51L72,51L72,51L68,51L66,50L64,55L61,57L58,60L52,64L49,69L46,73L43,73L41,77L42,84L36,91L34,92L36,99L37,99L35,105L33,105L34,109L31,109L28,112L24,123L24,125L31,130L33,131L37,134L39,138L42,137L45,140L46,140L48,134L48,134Z " data-fips="NP09" data-fips-="" data-iso3="NPL" data-name="Mahakali" data-p="SP"/><path d="M85,58L82,61L79,60L76,60L76,60L76,60L75,61L72,65L73,67L75,72L74,76L62,79L60,81L61,85L59,87L66,93L60,99L57,104L55,107L47,117L47,127L48,128L48,134L50,135L55,140L60,144L64,145L66,148L69,149L71,151L73,151L74,147L77,146L84,137L85,136L82,127L81,125L82,128L78,124L76,125L71,121L73,119L78,120L80,122L88,123L92,123L96,128L96,131L99,130L97,125L95,124L91,116L95,113L98,110L98,110L95,106L95,100L98,98L102,97L107,98L106,94L106,90L110,88L108,83L106,80L109,67L103,65L96,67L93,60L85,57L85,58Z " data-fips="NP14" data-fips-="" data-iso3="NPL" data-name="Achham" data-p="SP"/><path d="M271,153L265,160L263,165L258,168L254,177L255,182L251,181L250,181L250,181L250,183L251,186L256,187L258,189L261,190L267,188L271,187L275,189L279,192L279,196L281,200L285,203L292,204L293,206L294,206L302,207L304,204L307,203L308,202L312,192L315,187L318,184L318,181L319,177L319,177L315,177L314,171L311,169L309,162L304,160L301,156L300,153L297,157L287,155L284,157L282,156L271,154L271,153Z " data-fips="NP01" data-fips-="" data-iso3="NPL" data-name="Bhaktapur" data-p="MM"/><path d="M319,177L318,181L318,184L315,187L312,192L308,202L307,203L304,204L302,207L294,206L293,206L291,207L290,210L293,212L294,215L289,226L289,231L286,237L286,240L287,240L289,239L298,235L303,238L304,244L305,247L308,249L309,249L310,251L312,250L315,247L320,246L326,248L326,248L325,231L331,230L335,226L335,220L337,216L331,212L329,213L329,204L331,201L340,191L343,190L346,184L344,175L342,171L341,173L338,175L332,173L330,171L326,170L324,162L320,167L322,175L320,177L319,177Z " data-fips="NP05" data-fips-="" data-iso3="NPL" data-name="Janakpur" data-p="MM"/><path d="M250,181L250,180L247,179L240,184L241,186L239,186L239,186L239,187L239,189L232,191L230,191L226,194L223,198L222,197L215,199L216,199L215,203L215,203L220,203L223,199L230,204L233,207L247,210L250,212L251,219L250,225L250,226L256,228L259,227L263,229L266,233L269,236L275,235L277,236L278,241L286,241L286,240L286,237L289,231L289,226L294,215L293,212L290,210L291,207L293,206L292,204L285,203L281,200L279,196L279,192L275,189L271,187L267,188L261,190L258,189L256,187L251,186L250,183L250,181L250,181Z " data-fips="NP11" data-fips-="" data-iso3="NPL" data-name="Narayani" data-p="MM"/><path d="M342,171L344,175L346,184L343,190L340,191L331,201L329,204L329,213L331,212L337,216L335,220L335,226L331,230L325,231L326,248L326,248L328,249L333,247L341,251L353,258L358,257L361,255L364,252L365,251L367,245L368,240L375,233L375,228L368,230L366,230L365,221L363,218L363,211L365,207L362,201L364,195L366,184L365,172L365,172L365,172L364,172L358,168L354,169L352,165L349,164L346,165L344,164L342,171L342,171Z " data-fips="NP13" data-fips-="" data-iso3="NPL" data-name="Sagarmatha" data-p="PW"/><path d="M365,172L365,172L365,172L366,184L364,195L362,201L365,207L363,211L363,218L365,221L366,230L368,230L375,228L375,233L368,240L367,245L365,251L367,251L370,248L372,254L375,258L379,257L381,259L385,260L389,256L391,256L400,257L401,256L400,255L400,242L401,238L400,235L391,225L399,216L403,212L392,207L389,204L389,196L392,190L397,184L399,178L398,178L395,179L380,179L371,177L369,174L365,172L365,172Z " data-fips="NP07" data-fips-="" data-iso3="NPL" data-name="Bhojpur" data-p="PW"/><path d="M399,178L397,184L392,190L389,196L389,204L392,207L403,212L399,216L391,225L400,235L401,238L400,242L400,255L401,256L401,256L405,256L412,253L417,258L421,256L422,253L426,239L425,230L417,220L415,216L416,211L418,205L417,201L417,196L418,192L421,187L423,176L422,175L421,174L417,173L408,173L400,178L399,178Z " data-fips="NP10" data-fips-="" data-iso3="NPL" data-name="Mechi" data-p="PW"/></g></svg> \ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'><svg enable_background="new 0 0 450 301" height="301px" style="stroke-linejoin: round; stroke:#000; fill:#f6f3f0;" version="1.1" viewBox="0 0 450 301" width="450px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"><![CDATA[path { fill-rule: evenodd; }
+#context path { fill: #eee; stroke: #bbb; } ]]></style></defs><metadata><views><view h="301.0" padding="0.06" w="450"><proj id="laea" lat0="28.3259457465" lon0="82.5275984957"/><bbox h="59.97" w="99.82" x="967.67" y="968.81"/><llbbox lat0="-90" lat1="90" lon0="-180" lon1="180"/></view></views></metadata><g id="context"><path d="M449,253L444,248L439,246L436,246L437,251L440,253L437,260L435,263L431,268L427,273L424,280L424,284L427,288L432,289L438,294L442,299L450,299L450,254L449,253Z " data-iso="BGD"/><path d="M1,5L4,7L9,6L15,6L19,9L29,17L32,17L34,18L35,23L34,29L37,30L54,36L57,38L60,41L72,48L73,52L75,56L77,59L81,59L85,56L92,43L103,40L113,42L123,44L131,58L144,65L162,79L169,83L176,83L180,86L186,93L191,100L197,107L201,107L214,102L222,105L229,122L233,124L240,130L249,135L251,138L257,141L259,141L270,138L274,140L271,151L273,154L277,155L287,156L300,156L304,159L308,163L314,175L316,176L320,174L320,166L323,164L327,169L336,174L342,172L343,165L346,164L353,168L358,169L367,173L373,178L380,178L396,178L399,178L408,174L416,173L420,174L420,172L428,168L435,165L442,160L445,160L450,162L450,0L0,0L0,4L1,5Z " data-iso="CHN"/><path d="M783,1319L780,1324L773,1311L770,1310L770,1303L771,1301L779,1297L781,1299L785,1311L783,1319Z M773,1291L768,1297L766,1294L771,1288L773,1291Z M756,1264L751,1264L748,1259L749,1257L752,1256L755,1260L756,1264Z M761,1253L756,1251L756,1247L758,1244L760,1245L759,1248L761,1253Z M738,1244L740,1246L737,1246L734,1243L735,1239L738,1244Z M716,1197L714,1198L712,1194L716,1191L717,1195L716,1197Z M697,1120L695,1122L690,1121L690,1115L688,1110L689,1108L693,1103L697,1101L699,1107L701,1112L697,1120Z M705,1074L703,1075L700,1074L702,1072L702,1067L705,1069L705,1074Z M721,1036L724,1044L720,1041L718,1039L721,1036Z M703,992L701,996L700,988L703,987L703,992Z M707,1065L704,1065L698,1056L697,1050L695,1047L697,1044L699,1043L700,1039L700,1034L703,1028L708,1027L707,1023L704,1020L704,1010L705,1003L704,997L707,991L708,984L707,982L709,971L709,964L712,957L717,953L719,953L720,961L717,965L721,969L717,978L715,980L711,987L716,992L718,1009L715,1014L712,1015L713,1026L713,1029L707,1040L708,1043L709,1059L707,1065Z M1,5L4,7L9,6L15,6L19,9L21,11L21,11L29,17L32,17L34,18L35,23L34,29L37,30L54,36L57,38L60,41L72,48L73,52L71,51L68,52L57,61L50,67L43,76L39,85L36,93L36,99L34,106L29,111L27,117L25,123L26,126L30,129L43,138L46,139L48,135L51,136L59,142L79,154L86,163L95,169L113,180L122,179L125,181L134,187L142,191L151,190L153,191L156,200L166,203L172,204L183,208L187,206L188,204L191,203L196,203L210,207L213,204L220,203L223,201L230,204L242,209L249,211L251,223L253,225L265,232L269,234L276,236L277,239L283,242L297,236L301,236L303,239L305,247L308,249L311,249L319,246L325,248L330,248L346,253L354,257L357,256L369,249L373,256L377,258L383,260L389,256L400,257L406,255L411,254L418,257L421,254L426,238L425,233L423,226L416,218L416,215L417,200L419,191L421,187L422,175L420,174L420,172L428,168L435,165L442,160L445,160L451,163L454,165L456,172L456,178L452,192L454,197L460,204L454,209L453,211L458,217L459,223L474,230L483,228L496,231L497,234L505,235L523,231L526,225L533,222L547,228L553,228L573,225L580,225L587,220L588,220L591,223L599,223L607,219L615,219L618,215L618,212L616,208L614,202L617,194L612,185L605,187L600,187L596,184L592,181L591,178L593,170L597,169L610,170L616,165L623,163L631,163L643,155L644,153L641,149L644,144L652,139L659,132L663,128L666,117L668,115L673,113L688,110L699,102L704,96L704,93L708,92L716,81L724,77L731,70L733,71L739,77L748,78L750,78L757,79L764,82L769,82L775,75L774,72L783,65L791,60L798,56L803,59L806,64L814,67L811,70L804,75L807,85L815,77L819,75L821,77L822,80L828,91L820,100L818,105L822,114L823,111L831,107L834,108L840,111L850,112L855,110L858,111L868,117L868,124L870,127L869,134L865,135L854,148L851,151L850,154L852,162L864,176L864,179L861,180L853,177L848,171L845,169L842,169L813,179L806,190L799,196L786,208L779,214L774,216L771,219L768,226L768,233L770,242L774,250L769,257L768,266L760,281L754,284L752,287L749,299L750,300L756,302L758,307L756,314L753,323L749,331L741,350L738,361L735,375L732,376L729,374L712,370L700,372L695,368L693,371L697,384L700,389L700,408L700,420L697,426L689,428L690,433L687,444L689,454L692,464L691,473L688,473L684,484L681,485L678,485L673,480L669,478L667,485L664,487L663,484L660,464L657,448L651,437L649,435L648,428L646,414L640,394L624,395L625,405L625,407L618,414L617,418L619,428L618,431L615,434L611,435L608,435L605,433L601,424L598,424L598,431L595,430L591,415L586,404L585,399L588,385L593,379L596,374L602,374L606,370L614,366L618,368L620,367L623,358L630,354L631,349L634,338L635,327L636,327L643,329L646,328L646,323L641,319L633,315L625,312L610,314L596,316L587,314L574,316L558,317L544,318L534,318L515,313L513,313L511,308L512,298L510,283L510,277L504,264L502,262L497,267L498,270L497,274L493,275L484,273L478,269L474,264L473,258L471,255L466,253L464,255L467,260L467,262L460,262L453,260L452,257L449,253L444,248L439,246L436,246L437,251L440,253L437,260L435,263L431,268L427,273L424,280L424,284L427,288L432,289L438,294L443,301L450,305L459,305L462,312L468,315L466,321L459,323L444,322L441,335L438,340L431,338L429,338L425,350L424,355L427,359L430,362L434,363L437,362L440,363L443,367L448,369L456,370L460,372L460,384L459,388L456,398L454,406L455,410L463,419L461,427L463,429L473,432L470,441L471,446L473,452L474,463L477,470L482,483L481,502L477,502L481,507L483,512L483,517L479,518L476,518L473,513L472,517L468,522L465,514L466,499L462,495L461,492L458,509L460,515L459,518L452,521L445,515L442,521L435,521L432,518L434,512L438,498L438,492L432,488L427,486L425,480L426,487L428,489L432,490L436,494L431,500L426,510L420,516L412,521L388,528L383,530L375,538L371,545L370,553L373,560L376,572L378,575L375,579L371,584L367,591L367,597L354,605L347,614L343,612L341,612L344,616L339,621L320,627L306,633L302,633L305,630L305,623L300,622L289,630L284,637L288,638L295,634L299,635L299,637L288,644L264,665L263,669L260,674L256,679L248,690L233,706L229,712L206,725L201,728L192,740L181,750L170,758L149,769L137,779L133,785L137,796L135,803L131,808L125,813L105,821L85,819L79,820L77,824L71,841L65,846L62,852L56,851L54,852L52,846L45,845L30,850L25,854L15,876L12,889L14,905L18,917L18,922L18,930L14,937L16,946L20,957L21,961L21,966L25,977L22,975L21,971L17,965L11,970L14,975L24,980L26,984L20,1021L15,1034L9,1043L6,1046L-1,1059L-6,1076L-7,1082L-5,1089L-7,1093L-11,1096L-5,1095L-3,1099L-2,1103L-2,1127L-3,1151L-13,1152L-20,1150L-28,1151L-32,1154L-36,1159L-36,1166L-50,1185L-54,1192L-55,1198L-53,1201L-49,1204L-45,1206L-35,1207L-31,1209L-28,1213L-39,1209L-52,1208L-83,1216L-91,1222L-96,1227L-99,1240L-100,1248L-104,1255L-120,1265L-131,1268L-134,1271L-146,1267L-159,1257L-165,1252L-184,1227L-187,1223L-191,1213L-191,1209L-195,1205L-199,1193L-201,1180L-203,1166L-201,1168L-198,1172L-196,1179L-196,1188L-192,1188L-197,1167L-202,1162L-205,1158L-205,1151L-209,1144L-210,1140L-219,1119L-223,1103L-229,1086L-233,1080L-239,1067L-245,1061L-251,1052L-257,1046L-269,1018L-273,1002L-276,995L-278,989L-282,965L-282,956L-285,946L-290,935L-292,928L-292,925L-295,914L-296,909L-304,897L-311,886L-313,883L-318,876L-320,863L-325,858L-318,858L-326,848L-322,843L-328,843L-330,840L-334,831L-340,820L-341,814L-346,797L-349,756L-353,737L-353,732L-357,716L-360,705L-360,696L-361,690L-362,678L-364,672L-362,667L-358,659L-356,654L-357,646L-361,654L-365,656L-366,650L-365,638L-356,639L-366,634L-367,629L-365,625L-369,622L-369,612L-371,607L-368,594L-357,568L-356,562L-356,553L-358,546L-358,537L-362,536L-365,533L-367,522L-361,517L-368,517L-357,509L-346,505L-341,503L-348,505L-355,505L-370,503L-367,493L-364,490L-361,489L-365,489L-370,488L-368,478L-364,476L-355,475L-360,472L-366,471L-373,472L-379,471L-386,470L-384,472L-380,475L-384,484L-389,486L-392,489L-396,494L-389,497L-385,504L-386,511L-396,528L-400,531L-423,540L-433,544L-453,550L-460,551L-468,548L-480,542L-497,526L-502,521L-515,501L-525,490L-532,481L-541,471L-549,459L-551,453L-549,448L-546,446L-542,447L-535,455L-520,450L-515,451L-511,448L-506,449L-496,444L-488,444L-479,431L-472,423L-468,422L-469,417L-472,417L-478,424L-482,422L-489,423L-503,426L-509,430L-513,431L-534,424L-554,410L-562,401L-567,391L-572,379L-569,376L-560,370L-552,365L-559,367L-567,370L-570,371L-575,376L-581,376L-582,369L-583,362L-576,358L-566,357L-554,359L-552,342L-548,340L-547,343L-543,342L-539,343L-536,343L-532,344L-510,346L-503,353L-492,354L-487,353L-483,348L-473,345L-463,343L-460,343L-459,351L-455,353L-448,353L-443,349L-438,348L-435,347L-438,341L-437,334L-433,331L-437,319L-440,309L-443,301L-447,293L-449,288L-448,277L-452,272L-455,272L-464,272L-467,270L-474,258L-475,253L-475,249L-471,241L-468,227L-473,221L-480,219L-488,216L-495,211L-500,205L-498,197L-495,188L-493,185L-485,178L-476,170L-467,158L-461,150L-452,144L-448,142L-444,142L-437,148L-437,154L-430,161L-427,161L-411,156L-406,156L-393,156L-377,152L-375,147L-372,141L-362,132L-359,128L-353,113L-350,110L-336,103L-322,97L-319,94L-309,79L-303,69L-294,49L-290,47L-281,44L-273,41L-267,35L-267,31L-269,27L-268,23L-262,18L-251,5L-245,-1L-243,-1L-230,-8L-231,-13L-234,-14L-235,-17L-230,-32L-231,-36L-233,-46L-231,-52L-227,-56L-222,-59L-205,-66L-197,-68L-193,-72L-192,-75L-197,-81L-208,-87L-217,-87L-223,-91L-223,-96L-222,-104L-225,-104L-230,-105L-236,-106L-238,-108L-237,-111L-237,-115L-241,-120L-246,-123L-249,-127L-251,-133L-245,-141L-243,-147L-243,-149L-250,-157L-248,-163L-245,-166L-238,-168L-236,-171L-242,-175L-250,-176L-251,-181L-247,-186L-248,-188L-250,-191L-255,-194L-255,-197L-246,-212L-230,-217L-201,-208L-190,-207L-187,-205L-179,-200L-172,-198L-167,-198L-160,-201L-151,-206L-145,-206L-132,-210L-126,-209L-121,-211L-117,-217L-106,-222L-104,-228L-79,-242L-68,-247L-65,-245L-58,-247L-58,-245L-60,-237L-60,-234L-57,-228L-49,-201L-47,-198L-31,-192L-27,-189L-19,-183L-18,-180L-20,-174L-28,-168L-30,-164L-27,-153L-27,-136L-21,-127L-13,-120L-12,-117L-14,-109L-10,-104L-9,-91L-10,-79L-14,-78L-17,-73L-24,-72L-28,-75L-34,-86L-47,-84L-48,-83L-46,-75L-46,-69L-44,-65L-33,-50L-36,-42L-36,-38L-31,-31L-33,-27L-35,-23L-33,-21L-34,-15L-32,-13L-27,-15L-23,-15L-21,-19L-17,-19L-6,-2L-4,1L1,5Z " data-iso="IND"/><path d="M416,173L408,174L399,178L396,178L380,178L373,178L367,173L358,169L353,168L346,164L343,165L342,172L336,174L327,169L323,164L320,166L320,174L316,176L314,175L308,163L304,159L300,156L287,156L277,155L273,154L271,151L274,140L270,138L259,141L257,141L251,138L249,135L240,130L233,124L229,122L222,105L214,102L201,107L197,107L191,100L186,93L180,86L176,83L169,83L162,79L144,65L131,58L123,44L113,42L103,40L92,43L85,56L81,59L77,59L75,56L73,52L71,51L68,52L57,61L50,67L43,76L39,85L36,93L36,99L34,106L29,111L27,117L25,123L26,126L30,129L43,138L46,139L48,135L51,136L59,142L79,154L86,163L95,169L113,180L122,179L125,181L134,187L142,191L151,190L153,191L156,200L166,203L172,204L183,208L187,206L188,204L191,203L196,203L210,207L213,204L220,203L223,201L230,204L242,209L249,211L251,223L253,225L265,232L269,234L276,236L277,239L283,242L297,236L301,236L303,239L305,247L308,249L311,249L319,246L325,248L330,248L346,253L354,257L357,256L369,249L373,256L377,258L383,260L389,256L400,257L406,255L411,254L418,257L421,254L426,238L425,233L423,226L416,218L416,215L417,200L419,191L421,187L422,175L420,174L416,173Z " data-iso="NPL"/></g><g fill="red" fill-opacity="0.35" id="regions"><path d="M174,132L167,128L160,127L158,128L154,122L151,119L148,118L145,120L144,124L135,131L131,136L129,138L122,138L120,148L119,148L119,153L122,155L125,159L122,161L121,165L124,168L128,171L129,173L128,175L124,176L122,178L122,178L127,181L133,186L137,188L140,191L141,192L146,191L152,190L153,190L159,186L161,186L157,183L159,180L166,178L171,166L170,162L173,160L173,159L173,158L167,152L163,147L164,144L171,138L174,137L176,134L176,132L174,132Z " data-fips="NP12" data-fips-="" data-iso3="NPL" data-name="Rapti"/><path d="M228,122L218,127L214,127L209,133L210,138L208,140L207,144L203,151L207,159L207,160L201,172L198,173L197,174L191,175L191,176L202,177L206,177L210,180L219,178L223,180L232,182L233,184L238,185L239,186L239,186L241,186L240,184L247,179L250,180L250,181L251,181L255,182L254,177L258,168L263,165L265,160L271,153L271,152L271,147L273,143L274,139L269,136L264,140L263,142L258,142L255,139L251,139L245,133L240,131L236,125L231,124L229,122L228,122Z " data-fips="NP04" data-fips-="" data-iso3="NPL" data-name="Gorkha"/><path d="M98,110L95,113L91,116L95,124L97,125L99,130L96,131L96,128L92,123L88,123L80,122L78,120L73,119L71,121L76,125L78,124L82,128L81,125L82,127L85,136L84,137L77,146L74,147L73,151L78,152L79,153L82,159L85,162L86,166L89,163L90,164L99,172L101,174L106,176L108,178L113,181L114,181L119,178L121,178L122,178L124,176L128,175L129,173L128,171L124,168L121,165L122,161L125,159L122,155L119,153L119,148L120,148L122,138L129,138L131,136L135,131L144,124L145,120L148,118L145,117L142,118L140,116L140,114L138,112L133,112L128,114L124,118L121,117L116,119L113,118L99,112L98,110Z " data-fips="NP02" data-fips-="" data-iso3="NPL" data-name="Banke"/><path d="M201,108L199,117L195,123L192,130L183,133L177,132L176,132L176,134L174,137L171,138L164,144L163,147L167,152L173,158L173,159L177,159L187,164L188,165L193,167L197,171L198,173L201,172L207,160L207,159L203,151L207,144L208,140L210,138L209,133L214,127L218,127L228,122L228,120L229,115L226,114L224,109L225,105L222,103L219,103L218,102L212,101L207,104L204,104L201,108L201,108Z " data-fips="NP03" data-fips-="" data-iso3="NPL" data-name="Dhawalagiri"/><path d="M85,57L93,60L96,67L103,65L109,67L106,80L108,83L110,88L106,90L106,94L107,98L102,97L98,98L95,100L95,106L98,110L98,110L99,112L113,118L116,119L121,117L124,118L128,114L133,112L138,112L140,114L140,116L142,118L145,117L148,118L151,119L154,122L158,128L160,127L167,128L174,132L176,132L177,132L183,133L192,130L195,123L199,117L201,108L200,109L194,107L194,105L190,100L186,94L186,92L185,90L181,91L181,87L176,83L170,83L166,81L161,81L158,78L153,71L151,71L142,64L140,62L137,62L136,60L133,60L127,55L128,53L124,49L125,44L123,43L119,43L118,42L102,38L98,41L97,43L95,43L91,41L90,47L90,49L86,54L85,57L85,57Z " data-fips="NP06" data-fips-="" data-iso3="NPL" data-name="Karnali"/><path d="M173,159L173,160L170,162L171,166L166,178L159,180L157,183L161,186L159,186L153,190L153,190L156,200L157,201L170,204L176,204L182,210L186,209L187,206L187,203L188,202L193,202L198,203L202,204L211,209L212,207L211,205L214,204L215,203L216,199L215,199L222,197L223,198L226,194L230,191L232,191L239,189L239,187L239,186L238,185L233,184L232,182L223,180L219,178L210,180L206,177L202,177L191,176L191,175L197,174L198,173L197,171L193,167L188,165L187,164L177,159L173,159Z " data-fips="NP08" data-fips-="" data-iso3="NPL" data-name="Lumbini"/><path d="M48,134L48,128L47,127L47,117L55,107L57,104L60,99L66,93L59,87L61,85L60,81L62,79L74,76L75,72L72,65L73,63L76,60L76,57L72,50L65,51L64,55L61,57L58,60L52,64L49,69L46,73L43,73L41,77L42,84L36,91L34,92L36,99L37,99L35,105L33,105L34,109L31,109L28,112L24,123L24,125L31,130L33,131L37,134L39,138L42,137L45,140L46,140L48,134L48,134Z " data-fips="NP09" data-fips-="" data-iso3="NPL" data-name="Mahakali"/><path d="M85,58L83,59L82,61L76,60L76,60L73,63L72,65L75,72L74,76L62,79L60,81L61,85L59,87L66,93L60,99L57,104L55,107L47,117L47,127L48,128L48,134L50,135L55,140L60,144L64,145L66,148L69,149L71,151L73,151L74,147L77,146L84,137L85,136L82,127L81,125L82,128L78,124L76,125L71,121L73,119L78,120L80,122L88,123L92,123L96,128L96,131L99,130L97,125L95,124L91,116L95,113L98,110L98,110L95,106L95,100L98,98L102,97L107,98L106,94L106,90L110,88L108,83L106,80L109,67L103,65L96,67L93,60L85,57L85,58Z " data-fips="NP14" data-fips-="" data-iso3="NPL" data-name="Achham"/><path d="M271,153L265,160L263,165L258,168L254,177L255,182L251,181L250,181L250,181L250,183L251,186L256,187L258,189L261,190L267,188L271,187L275,189L279,192L279,196L281,200L285,203L292,204L293,206L294,206L302,207L304,204L307,203L308,202L312,192L315,187L318,184L318,181L319,177L319,177L315,177L314,171L311,169L309,162L304,160L301,156L300,153L297,157L287,155L284,157L282,156L280,157L275,155L271,154L271,153Z " data-fips="NP01" data-fips-="" data-iso3="NPL" data-name="Bhaktapur"/><path d="M319,177L318,181L318,184L315,187L312,192L308,202L307,203L304,204L302,207L294,206L293,206L291,207L290,210L293,212L294,215L289,226L289,231L286,237L286,240L287,240L289,239L298,235L303,238L304,244L305,247L308,249L309,249L310,251L312,250L315,247L320,246L326,248L326,248L325,231L331,230L335,226L335,220L337,216L331,212L329,213L329,204L331,201L340,191L343,190L346,184L344,175L342,171L341,173L338,175L332,173L330,171L326,170L325,162L324,162L320,167L322,175L320,177L319,177Z " data-fips="NP05" data-fips-="" data-iso3="NPL" data-name="Janakpur"/><path d="M250,181L250,180L247,179L240,184L241,186L239,186L239,186L239,187L239,189L232,191L230,191L226,194L223,198L222,197L215,199L216,199L215,203L215,203L220,203L223,199L230,204L233,207L247,210L250,212L251,219L250,225L250,226L256,228L259,227L263,229L266,233L269,236L275,235L277,236L278,241L286,241L286,240L286,237L289,231L289,226L294,215L293,212L290,210L291,207L293,206L292,204L285,203L281,200L279,196L279,192L275,189L271,187L267,188L261,190L258,189L256,187L251,186L250,183L250,181L250,181Z " data-fips="NP11" data-fips-="" data-iso3="NPL" data-name="Narayani"/><path d="M342,171L344,175L346,184L343,190L340,191L331,201L329,204L329,213L331,212L337,216L335,220L335,226L331,230L325,231L326,248L326,248L328,249L333,247L341,251L353,258L358,257L361,255L364,252L365,251L367,245L368,240L375,233L375,228L368,230L366,230L365,221L363,218L363,211L365,207L362,201L364,195L366,184L365,172L364,172L360,172L358,168L354,169L352,165L349,164L346,165L344,164L343,165L342,171L342,171Z " data-fips="NP13" data-fips-="" data-iso3="NPL" data-name="Sagarmatha"/><path d="M365,172L366,184L364,195L362,201L365,207L363,211L363,218L365,221L366,230L368,230L375,228L375,233L368,240L367,245L365,251L367,251L370,248L372,254L375,258L379,257L381,259L385,260L389,256L391,256L400,257L401,256L400,255L400,242L401,238L400,235L391,225L399,216L403,212L392,207L389,204L389,196L392,190L397,184L399,178L398,178L395,179L384,176L380,179L371,177L369,174L365,172L365,172Z " data-fips="NP07" data-fips-="" data-iso3="NPL" data-name="Bhojpur"/><path d="M399,178L397,184L392,190L389,196L389,204L392,207L403,212L399,216L391,225L400,235L401,238L400,242L400,255L401,256L401,256L405,256L412,253L417,258L421,256L422,253L426,239L425,230L417,220L415,216L416,211L418,205L417,201L417,196L418,192L421,187L423,179L422,177L417,173L408,173L400,178L399,178Z " data-fips="NP10" data-fips-="" data-iso3="NPL" data-name="Mechi"/></g></svg> \ No newline at end of file
diff --git a/plugins/UserCountryMap/svg/PAK.svg b/plugins/UserCountryMap/svg/PAK.svg
index 64fa7b7c5a..6597de8e1f 100644
--- a/plugins/UserCountryMap/svg/PAK.svg
+++ b/plugins/UserCountryMap/svg/PAK.svg
@@ -1 +1,2 @@
-<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'><svg enable_background="new 0 0 450 451" height="451px" pretty_print="False" style="stroke-linejoin: round; stroke:#000; fill: none;" version="1.1" viewBox="0 0 450 451" width="450px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"><![CDATA[path { fill-rule: evenodd; }]]></style></defs><metadata><views><view h="451" padding="0.06" w="450"><proj id="laea" lat0="28.4763500028" lon0="65.604929743"/><bbox h="188.87" w="194.08" x="938.67" y="880.23"/></view></views></metadata><g class="" id="context"><path d="M450,149L450,150L450,151L450,149Z " data-iso="TIB"/><path d="M191,34L191,33L190,33L181,33L179,33L176,30L170,29L163,30L162,30L154,28L146,23L143,26L141,32L130,33L124,36L117,58L113,61L102,67L89,72L83,80L83,83L74,89L69,88L64,90L60,85L58,83L47,82L43,77L41,77L41,79L39,86L36,99L33,104L27,107L31,114L25,114L21,120L21,127L20,131L24,135L30,137L25,142L21,147L21,151L27,173L25,180L25,190L46,198L48,201L49,207L48,214L31,234L24,241L33,245L62,255L64,256L91,254L101,256L105,257L109,254L115,252L130,252L156,244L160,240L158,238L160,230L159,222L162,213L167,210L170,205L177,202L179,204L183,205L187,204L194,201L190,196L194,195L201,191L206,187L208,188L215,187L220,191L222,192L229,186L231,183L230,169L235,157L236,152L241,149L246,149L254,143L254,141L248,131L244,126L244,123L246,122L256,124L262,124L267,123L271,121L272,119L272,112L269,107L280,94L283,88L281,85L282,80L275,66L272,64L272,61L281,52L284,52L285,50L293,44L303,39L329,36L333,37L339,35L344,32L347,31L346,31L342,27L346,25L353,24L354,24L354,24L348,20L345,21L339,20L337,23L328,26L326,26L327,21L321,20L315,22L309,27L306,29L304,34L297,35L292,38L285,44L280,44L275,32L277,9L271,10L271,3L270,0L255,0L251,7L246,12L248,16L246,21L245,22L234,21L231,22L229,32L226,35L219,29L206,35L199,40L196,40L192,35L191,34Z " data-iso="AFG"/><path d="M950,819L948,822L944,815L943,815L947,808L948,809L950,815L950,819Z M944,805L941,808L940,807L942,804L944,805Z M934,792L932,792L930,789L932,788L934,792Z M936,786L934,785L933,783L936,786Z M924,783L924,784L922,783L924,783Z M912,759L909,758L911,757L912,759Z M899,720L895,721L894,716L898,711L900,716L899,720Z M901,696L899,695L899,692L901,696Z M907,675L909,679L907,678L907,675Z M896,653L895,655L894,651L896,653Z M901,691L896,687L895,682L897,678L898,668L897,662L898,658L897,655L898,648L898,648L898,642L898,638L899,634L902,632L902,638L904,640L903,645L901,646L904,661L901,665L903,672L900,678L902,688L901,691Z M209,415L215,412L224,411L224,403L245,402L252,405L255,404L259,401L271,397L272,401L274,402L278,401L280,399L284,397L282,392L284,389L277,374L273,368L273,362L270,360L269,361L262,360L258,355L259,338L256,335L248,334L241,330L242,320L243,319L251,310L257,299L263,294L269,296L270,299L274,302L276,302L286,298L292,297L300,294L302,288L306,283L310,272L311,271L325,262L330,252L332,246L335,235L341,232L348,226L347,220L349,217L354,210L363,202L361,199L361,189L359,182L361,177L364,175L376,169L377,166L375,162L368,160L364,161L360,157L360,152L353,153L351,148L343,140L346,132L341,127L341,126L347,121L347,119L344,118L340,118L340,111L336,108L339,99L347,96L370,98L374,100L380,100L388,95L391,95L397,92L400,92L403,90L404,87L407,85L409,81L410,80L412,78L421,71L424,69L426,67L426,68L428,68L432,67L432,74L440,90L441,91L449,93L452,94L457,98L457,102L453,106L455,113L456,122L464,128L466,135L468,136L469,147L466,153L463,154L457,148L450,150L453,159L460,166L459,170L463,175L462,181L464,185L468,183L468,180L471,181L479,189L482,191L489,191L497,195L499,196L500,201L502,201L521,208L521,210L519,210L513,217L508,224L506,234L506,240L503,246L503,250L513,256L515,255L532,262L536,266L541,269L551,273L555,271L567,277L571,275L574,280L589,282L592,279L602,280L604,278L608,276L622,279L625,286L637,290L638,292L641,292L650,288L654,294L660,292L666,292L679,294L688,293L693,294L696,292L706,290L711,290L713,280L710,274L706,261L707,248L706,245L712,242L716,239L722,240L724,247L723,254L724,257L727,260L725,264L727,267L729,270L737,272L741,271L748,273L751,273L761,269L762,266L766,264L773,266L776,266L785,263L799,260L806,256L806,243L801,239L799,241L792,239L792,233L800,232L803,229L806,227L810,226L816,221L814,217L822,208L824,206L825,199L835,194L840,190L841,185L843,184L846,178L853,171L857,174L867,174L870,174L875,170L875,169L882,161L885,158L894,163L890,168L892,173L896,168L899,168L903,174L899,183L902,187L902,185L916,184L918,182L924,185L927,190L927,194L925,195L919,204L921,210L927,216L928,218L922,217L916,214L902,222L900,228L891,239L884,245L884,253L885,257L888,261L886,265L886,270L883,278L879,282L879,288L883,291L884,292L883,301L878,315L878,322L876,330L874,329L859,330L856,328L856,330L860,339L862,355L861,358L858,360L858,363L858,371L862,378L861,383L860,383L859,390L850,391L849,393L843,373L838,367L835,355L831,346L823,347L824,354L821,357L822,366L817,369L814,365L812,364L811,367L808,360L804,355L804,344L807,338L816,333L819,333L820,328L823,326L824,317L824,311L829,311L829,308L826,307L818,304L810,306L799,308L778,313L773,314L760,310L760,305L758,297L758,294L753,287L749,295L741,293L739,290L737,285L735,288L732,290L728,290L727,288L720,283L720,286L721,287L717,295L715,302L715,304L730,313L734,312L737,316L740,317L739,320L728,322L727,329L726,332L721,332L720,338L722,342L723,344L733,346L739,347L740,355L738,365L744,371L744,376L750,377L748,382L751,387L752,393L757,403L758,413L756,413L760,421L758,421L755,419L753,424L751,420L751,412L747,409L747,418L748,423L745,425L741,422L740,425L736,426L734,424L736,414L735,412L731,421L725,427L713,433L710,434L707,439L705,443L705,447L709,457L706,467L706,470L700,475L698,480L694,484L685,489L678,493L677,488L674,487L669,492L669,497L672,494L674,495L669,499L658,512L652,526L645,535L644,539L632,547L626,556L621,562L616,567L606,573L600,579L599,583L601,588L599,595L596,597L586,603L576,603L573,604L572,607L570,616L566,622L562,622L561,619L557,619L550,623L548,625L543,637L543,644L545,652L547,661L548,665L546,669L553,689L549,683L546,686L548,688L553,690L555,692L553,712L551,719L547,725L544,733L542,745L543,748L541,752L544,751L545,755L546,767L547,780L544,781L538,781L534,782L530,786L531,790L524,801L523,804L525,810L531,812L524,812L509,818L502,825L501,832L501,836L499,840L491,846L484,850L478,848L468,842L458,830L456,829L451,819L448,814L445,800L449,806L450,811L452,811L448,800L442,789L435,777L433,769L429,761L423,751L413,742L405,728L403,720L400,714L394,692L391,687L387,674L374,659L372,652L370,650L373,650L368,645L370,642L364,637L360,632L355,620L352,599L349,590L349,587L346,580L342,567L340,555L343,548L342,544L340,548L338,549L337,546L337,540L342,541L337,538L337,534L335,532L333,525L333,518L337,504L337,496L333,488L332,487L329,479L334,474L340,471L327,472L328,464L326,464L326,459L333,456L318,457L320,458L318,463L316,464L313,469L319,474L319,477L315,486L313,488L302,494L297,497L287,501L284,502L279,502L273,499L263,492L261,490L253,481L247,476L243,472L238,467L233,462L233,455L236,455L240,459L247,455L249,455L251,453L254,454L259,451L263,450L271,435L269,435L267,439L265,438L254,442L249,445L238,443L227,437L222,434L216,423L217,421L225,414L222,416L214,421L211,422L210,418L209,415Z " data-iso="IND"/><path d="M38,375L39,373L40,364L43,357L45,348L46,346L52,344L53,342L61,337L70,335L78,335L80,334L82,323L80,318L74,318L70,314L71,312L71,302L70,296L71,290L69,289L66,289L62,285L49,280L41,270L40,266L36,259L36,257L29,247L24,241L25,241L31,234L48,214L49,207L48,201L46,198L25,190L25,180L27,173L21,151L21,147L25,142L30,137L24,135L20,131L21,127L21,120L25,114L31,114L27,107L33,104L36,99L39,86L41,79L41,77L41,76L41,70L39,67L40,63L40,50L39,48L21,47L15,37L13,35L2,29L0,26L0,369L8,371L11,367L14,372L34,378L37,375L38,375Z " data-iso="IRN"/><path d="M424,68L418,69L414,68L404,66L401,65L403,67L405,71L408,78L410,80L412,78L421,71L424,69L426,67L424,68Z " data-iso="KAS"/><path d="M401,65L396,62L396,59L389,62L384,57L381,56L382,52L381,46L378,40L373,37L371,36L365,32L356,32L355,32L350,30L348,30L347,31L344,32L339,35L333,37L329,36L303,39L293,44L285,50L284,52L281,52L272,61L272,64L275,66L282,80L281,85L283,88L280,94L269,107L272,112L272,119L271,121L267,123L262,124L256,124L246,122L244,123L244,126L248,131L254,141L254,143L246,149L241,149L236,152L235,157L230,169L231,183L229,186L222,192L220,191L215,187L208,188L206,187L201,191L194,195L190,196L194,201L187,204L183,205L179,204L177,202L170,205L167,210L162,213L159,222L160,230L158,238L160,240L156,244L130,252L115,252L109,254L105,257L101,256L91,254L64,256L62,255L33,245L24,241L29,247L36,257L36,259L40,266L41,270L49,280L62,285L66,289L69,289L71,290L70,296L71,302L71,312L70,314L74,318L80,318L82,323L80,334L78,335L70,335L61,337L53,342L52,344L46,346L45,348L43,357L40,364L39,373L38,375L38,376L42,377L55,376L57,378L64,374L66,374L75,376L79,375L87,376L89,372L93,371L100,372L102,371L105,373L115,376L118,377L121,374L128,374L137,372L144,373L149,371L162,368L156,369L161,365L163,366L166,369L167,372L171,376L171,387L181,388L183,389L186,400L187,406L196,416L200,416L201,414L208,418L209,416L209,415L215,412L224,411L224,403L245,402L252,405L255,404L259,401L271,397L272,401L274,402L278,401L280,399L284,397L282,392L284,389L277,374L273,368L273,362L270,360L269,361L262,360L258,355L259,338L256,335L248,334L241,330L242,320L243,319L251,310L257,299L263,294L269,296L270,299L274,302L276,302L286,298L292,297L300,294L302,288L306,283L310,272L311,271L325,262L330,252L332,246L335,235L341,232L348,226L347,220L349,217L354,210L363,202L361,199L361,189L359,182L361,177L364,175L376,169L377,166L375,162L368,160L364,161L360,157L360,152L353,153L351,148L343,140L346,132L341,127L341,126L347,121L347,119L344,118L340,118L340,111L336,108L339,99L347,96L370,98L374,100L380,100L388,95L391,95L397,92L400,92L403,90L404,87L407,85L409,81L410,80L408,78L405,71L403,67L401,65L401,65Z " data-iso="PAK"/><path d="M354,24L355,24L359,19L358,18L353,14L354,9L350,0L270,0L271,3L271,10L277,9L275,32L280,44L285,44L292,38L297,35L304,34L306,29L309,27L315,22L321,20L327,21L326,26L328,26L337,23L339,20L345,21L348,20L354,24L354,24Z M191,34L192,35L196,40L199,40L206,35L219,29L226,35L229,32L231,22L234,21L245,22L246,21L248,16L246,12L251,7L255,0L200,0L204,4L204,7L193,25L192,32L191,34Z " data-iso="TJK"/><path d="M41,77L43,77L47,82L58,83L60,85L64,90L69,88L74,89L83,83L83,80L89,72L102,67L113,61L117,58L124,36L130,33L141,32L143,26L146,23L154,28L162,30L163,30L163,26L163,17L165,13L164,11L157,8L150,4L136,0L0,0L0,26L2,29L13,35L15,37L21,47L39,48L40,50L40,63L39,67L41,70L41,76L41,77Z " data-iso="TKM"/><path d="M163,30L170,29L176,30L179,33L181,33L190,33L191,33L191,34L192,32L193,25L204,7L204,4L200,0L136,0L150,4L157,8L164,11L165,13L163,17L163,26L163,30Z " data-iso="UZB"/><path d="M354,24L353,24L346,25L342,27L346,31L347,31L348,30L350,30L355,32L356,32L365,32L371,36L373,37L378,40L381,46L382,52L381,56L384,57L389,62L396,59L396,62L401,65L401,65L404,66L414,68L418,69L424,68L426,67L426,67L426,68L428,68L432,67L432,74L440,90L441,91L449,93L450,93L450,0L350,0L354,9L353,14L358,18L359,19L355,24L354,24Z " data-iso="CHN"/></g><g class="" id="regions"><path d="M232,183L230,184L228,189L218,190L217,188L212,187L213,189L204,187L200,191L197,193L193,196L190,195L192,199L194,199L194,201L188,204L181,205L178,204L177,202L174,202L169,205L165,212L161,213L159,222L159,233L158,236L160,241L157,244L128,253L123,252L114,252L102,256L91,254L62,255L25,242L27,245L34,255L36,256L39,264L39,265L41,270L48,279L57,283L61,284L66,289L70,289L70,296L71,301L71,312L69,317L73,319L80,317L84,321L82,323L82,327L80,330L80,334L75,335L69,335L65,337L61,337L58,338L56,342L45,347L43,357L41,359L41,361L39,373L38,375L42,380L45,380L45,378L52,378L51,376L55,375L57,376L56,378L62,374L69,374L76,376L79,375L88,376L87,375L90,372L96,372L98,373L103,372L109,374L112,376L114,375L116,375L116,378L118,377L120,373L130,374L139,372L143,373L149,371L162,369L164,370L161,367L155,369L158,366L164,366L166,368L167,373L171,376L172,377L171,386L171,386L182,375L183,371L188,363L189,358L189,351L183,338L182,335L181,316L182,311L189,300L195,299L201,296L203,293L208,289L218,282L222,283L234,282L237,281L236,279L237,278L241,272L240,268L245,263L244,258L241,254L242,248L248,243L252,232L249,229L252,221L252,218L253,217L256,212L256,207L256,206L256,198L251,197L251,199L248,195L247,186L248,183L245,183L246,182L244,179L241,180L240,181L233,183L232,183L232,183Z " data-fips="PK02" data-fips-="" data-iso3="PAK" data-name="Baluchistan" data-p="BA"/><path d="M342,86L341,87L340,92L337,95L335,95L331,103L328,102L327,106L329,117L330,119L330,119L331,121L332,129L333,130L333,135L332,136L333,140L335,143L338,146L342,146L343,147L351,151L352,151L351,147L348,146L343,141L343,139L345,137L346,132L346,131L342,128L341,125L348,119L338,116L341,112L340,110L336,109L335,108L339,99L346,96L355,97L364,98L368,97L368,97L368,92L366,91L358,92L355,91L349,85L343,86L342,86Z " data-fips="PK06" data-fips-="" data-iso3="PAK" data-name="Azad Kashmir" data-p="JK"/><path d="M314,129L314,130L315,132L319,130L323,134L324,132L325,127L321,125L321,125L321,125L320,126L319,126L318,127L316,127L314,129Z " data-fips="PK08" data-fips-="PK06" data-iso3="PAK" data-name="F.C.T." data-p="IS"/><path d="M328,36L332,40L321,40L319,41L314,42L312,49L310,49L310,52L306,55L303,57L302,60L304,63L302,66L306,67L309,67L313,66L316,66L319,72L324,75L332,75L333,77L331,80L332,82L338,84L342,86L342,86L343,86L349,85L355,91L358,92L366,91L368,92L368,97L369,98L372,100L378,101L382,100L387,95L393,94L397,91L399,92L404,88L403,87L407,86L410,83L410,80L426,67L416,69L413,68L410,68L408,67L406,67L403,65L397,63L395,60L391,62L380,55L381,45L378,40L371,36L368,38L366,33L359,31L357,31L354,33L352,31L347,31L346,33L345,31L343,32L336,38L329,36L328,36Z " data-fips="PK07" data-fips-="" data-iso3="PAK" data-name="Northern Areas" data-p="NA"/><path d="M277,96L274,101L271,103L271,106L269,107L271,111L273,112L273,117L271,121L265,124L258,124L252,124L247,122L243,125L246,131L249,131L251,134L251,136L254,142L250,146L249,146L248,148L244,149L236,151L235,152L236,156L233,160L234,160L233,165L230,168L231,180L232,183L232,183L233,183L240,181L241,180L244,179L246,182L245,183L248,183L247,186L248,195L251,199L251,197L256,198L256,206L256,207L256,207L256,204L257,204L260,203L260,202L255,188L253,180L252,180L250,175L254,171L256,171L260,166L262,165L257,160L257,156L261,150L263,150L267,148L268,145L264,144L259,140L259,139L265,134L273,134L274,132L274,129L277,131L285,132L288,134L291,132L290,130L291,128L288,126L284,129L279,118L278,118L283,111L284,111L285,104L288,100L283,99L282,97L279,95L277,96Z " data-fips="PK01" data-fips-="" data-iso3="PAK" data-name="F.A.T.A." data-p="TA"/><path d="M260,202L260,203L257,204L256,204L256,207L256,207L256,212L253,217L252,218L252,221L249,229L252,232L248,243L242,248L241,254L244,258L245,263L240,268L241,272L237,278L236,279L237,281L240,280L247,283L251,293L258,298L258,297L261,295L265,293L269,297L271,302L273,302L277,302L282,299L289,297L293,297L300,294L303,286L306,283L312,270L325,262L328,256L332,247L335,235L339,233L343,231L345,230L348,225L345,222L350,217L351,214L356,206L360,204L364,200L360,198L361,192L360,185L358,182L359,180L370,171L370,171L374,170L377,167L378,164L374,162L369,160L367,161L360,158L360,150L356,153L352,153L351,151L351,151L343,147L342,146L338,146L335,143L333,140L332,136L333,135L333,130L332,129L331,121L330,119L330,119L330,118L326,122L321,125L321,125L321,125L325,127L324,132L323,134L319,130L315,132L314,130L314,129L316,127L316,127L314,126L315,125L313,122L310,124L307,121L300,122L300,127L296,127L295,129L294,133L291,138L289,139L288,141L289,144L288,148L287,148L284,144L282,143L283,149L282,150L276,153L276,159L276,162L278,162L279,165L281,167L276,176L276,178L273,182L270,192L271,196L266,200L264,199L260,202L260,202Z " data-fips="PK04" data-fips-="PK08" data-iso3="PAK" data-name="Punjab" data-p="PB"/><path d="M191,409L190,411L191,411L191,409Z M237,281L234,282L222,283L218,282L208,289L203,293L201,296L195,299L189,300L182,311L181,316L182,335L183,338L189,351L189,358L188,363L183,371L182,375L171,386L170,386L170,387L175,387L182,388L185,390L183,391L185,394L184,396L185,398L187,407L190,409L192,414L195,415L196,413L201,416L201,414L205,416L207,419L211,414L215,412L224,411L224,402L227,403L228,401L230,403L232,402L236,403L238,402L251,405L256,405L258,403L260,400L270,397L273,402L278,401L279,400L285,397L282,395L282,390L284,389L282,385L279,380L278,376L275,372L272,368L273,362L271,360L268,361L262,360L257,354L257,349L258,347L256,335L250,336L246,333L242,331L241,329L242,322L243,318L248,314L253,307L256,300L258,298L251,293L247,283L240,280L237,281Z " data-fips="PK05" data-fips-="" data-iso3="PAK" data-name="Sind" data-p="SD"/><path d="M326,36L318,37L316,37L309,39L302,40L293,45L291,46L285,50L284,51L279,54L280,55L274,59L271,63L273,66L277,69L279,71L279,76L282,77L283,81L281,84L283,88L280,95L279,95L282,97L283,99L288,100L285,104L284,111L283,111L278,118L279,118L284,129L288,126L291,128L290,130L291,132L288,134L285,132L277,131L274,129L274,132L273,134L265,134L259,139L259,140L264,144L268,145L267,148L263,150L261,150L257,156L257,160L262,165L260,166L256,171L254,171L250,175L252,180L253,180L255,188L260,202L260,202L264,199L266,200L271,196L270,192L273,182L276,178L276,176L281,167L279,165L278,162L276,162L276,159L276,153L282,150L283,149L282,143L284,144L287,148L288,148L289,144L288,141L289,139L291,138L294,133L295,129L296,127L300,127L300,122L307,121L310,124L313,122L315,125L314,126L316,127L316,127L318,127L319,126L320,126L321,125L321,125L321,125L326,122L330,118L330,119L329,117L327,106L328,102L331,103L335,95L337,95L340,92L341,87L342,86L342,86L338,84L332,82L331,80L333,77L332,75L324,75L319,72L316,66L313,66L309,67L306,67L302,66L304,63L302,60L303,57L306,55L310,52L310,49L312,49L314,42L319,41L321,40L332,40L328,36L326,36Z " data-fips="PK03" data-fips-="" data-iso3="PAK" data-name="N.W.F.P." data-p="NW"/></g></svg> \ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'><svg enable_background="new 0 0 450 451" height="451px" style="stroke-linejoin: round; stroke:#000; fill:#f6f3f0;" version="1.1" viewBox="0 0 450 451" width="450px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"><![CDATA[path { fill-rule: evenodd; }
+#context path { fill: #eee; stroke: #bbb; } ]]></style></defs><metadata><views><view h="451" padding="0.06" w="450"><proj id="laea" lat0="28.4763500028" lon0="65.604929743"/><bbox h="188.87" w="194.08" x="938.67" y="880.23"/><llbbox lat0="-90" lat1="90" lon0="-180" lon1="180"/></view></views></metadata><g id="context"><path d="M191,34L191,33L190,33L181,33L179,33L176,30L170,29L163,30L162,30L154,28L146,23L143,26L141,32L130,33L124,36L117,58L113,61L102,67L89,72L83,80L83,83L74,89L69,88L64,90L60,85L58,83L47,82L43,77L41,77L41,79L39,86L36,99L33,104L27,107L31,114L25,114L21,120L21,127L20,131L24,135L30,137L25,142L21,147L21,151L27,173L25,180L25,190L46,198L48,201L49,207L48,214L31,234L24,241L33,245L62,255L64,256L91,254L101,256L105,257L109,254L115,252L130,252L156,244L160,240L158,238L160,230L159,222L162,213L167,210L170,205L177,202L179,204L183,205L187,204L194,201L190,196L194,195L201,191L206,187L208,188L215,187L220,191L222,192L229,186L231,183L230,169L235,157L236,152L241,149L246,149L254,143L254,141L248,131L244,126L244,123L246,122L256,124L262,124L267,123L271,121L272,119L272,112L269,107L280,94L283,88L281,85L282,80L275,66L272,64L272,61L281,52L284,52L285,50L293,44L303,39L329,36L333,37L339,35L344,32L347,31L346,31L342,27L346,25L353,24L354,24L354,24L348,20L345,21L339,20L337,23L328,26L326,26L327,21L321,20L315,22L309,27L306,29L304,34L297,35L292,38L285,44L280,44L275,32L277,9L271,10L271,3L270,0L255,0L251,7L246,12L248,16L246,21L245,22L234,21L231,22L229,32L226,35L219,29L206,35L199,40L196,40L192,35L191,34Z " data-iso="AFG"/><path d="M450,150L450,151L450,151L450,150L450,150Z M354,24L353,24L346,25L342,27L346,31L347,31L348,30L350,30L355,32L356,32L365,32L371,36L373,37L378,40L381,46L382,52L381,56L384,57L389,62L396,59L396,62L401,65L401,65L404,66L414,68L418,69L424,68L426,67L426,67L426,68L428,68L432,67L432,74L440,90L441,91L449,93L450,93L450,0L350,0L354,9L353,14L358,18L359,19L355,24L354,24Z " data-iso="CHN"/><path d="M950,819L948,822L944,815L943,815L947,808L948,809L950,815L950,819Z M944,805L941,808L940,807L942,804L944,805Z M934,792L932,792L930,789L932,788L934,792Z M912,759L909,758L911,757L912,759Z M899,720L895,721L894,716L898,711L900,716L899,720Z M907,675L909,679L907,678L907,675Z M901,691L896,687L895,682L897,678L898,668L897,662L898,658L897,655L898,648L898,648L898,642L898,638L899,634L902,632L902,638L904,640L903,645L901,646L904,661L901,665L903,672L900,678L902,688L901,691Z M209,415L215,412L224,411L224,403L245,402L252,405L255,404L259,401L271,397L272,401L274,402L278,401L280,399L284,397L282,392L284,389L277,374L273,368L273,362L270,360L269,361L262,360L258,355L259,338L256,335L248,334L241,330L242,320L243,319L251,310L257,299L263,294L269,296L270,299L274,302L276,302L286,298L292,297L300,294L302,288L306,283L310,272L311,271L325,262L330,252L332,246L335,235L341,232L348,226L347,220L349,217L354,210L363,202L361,199L361,189L359,182L361,177L364,175L376,169L377,166L375,162L368,160L364,161L360,157L360,152L353,153L351,148L343,140L346,132L341,127L341,126L347,121L347,119L344,118L340,118L340,111L336,108L339,99L347,96L370,98L374,100L380,100L388,95L391,95L397,92L400,92L403,90L404,87L407,85L409,81L410,80L412,78L421,71L424,69L426,67L426,68L428,68L432,67L432,74L440,90L441,91L449,93L452,94L457,98L457,102L453,106L455,113L456,122L464,128L466,135L468,136L469,147L466,153L463,154L457,148L450,149L450,150L450,151L451,152L453,159L460,166L459,170L463,175L462,181L464,185L468,183L468,180L471,181L479,189L482,191L489,191L497,195L499,196L500,201L502,201L521,208L521,210L519,210L513,217L508,224L506,234L506,240L503,246L503,250L513,256L515,255L532,262L536,266L541,269L551,273L555,271L567,277L571,275L574,280L589,282L592,279L602,280L604,278L608,276L622,279L625,286L637,290L638,292L641,292L650,288L654,294L660,292L666,292L679,294L688,293L693,294L696,292L706,290L711,290L713,280L710,274L706,261L707,248L706,245L712,242L716,239L722,240L724,247L723,254L724,257L727,260L725,264L727,267L729,270L737,272L741,271L748,273L751,273L761,269L762,266L766,264L773,266L776,266L785,263L799,260L806,256L806,243L801,239L799,241L792,239L792,233L800,232L803,229L806,227L810,226L816,221L814,217L822,208L824,206L825,199L835,194L840,190L841,185L843,184L846,178L853,171L857,174L867,174L870,174L875,170L875,169L882,161L885,158L894,163L890,168L892,173L896,168L899,168L903,174L899,183L902,187L902,185L916,184L918,182L924,185L927,190L927,194L925,195L919,204L921,210L927,216L928,218L922,217L916,214L902,222L900,228L891,239L884,245L884,253L885,257L888,261L886,265L886,270L883,278L879,282L879,288L883,291L884,292L883,301L878,315L878,322L876,330L874,329L859,330L856,328L856,330L860,339L862,355L861,358L858,360L858,363L858,371L862,378L861,383L860,383L859,390L850,391L849,393L843,373L838,367L835,355L831,346L823,347L824,354L821,357L822,366L817,369L814,365L812,364L811,367L808,360L804,355L804,344L807,338L816,333L819,333L820,328L823,326L824,317L824,311L829,311L829,308L826,307L818,304L810,306L799,308L778,313L773,314L760,310L760,305L758,297L758,294L753,287L749,295L741,293L739,290L737,285L735,288L732,290L728,290L727,288L720,283L720,286L721,287L717,295L715,302L715,304L730,313L734,312L737,316L740,317L739,320L728,322L727,329L726,332L721,332L720,338L722,342L723,344L733,346L739,347L740,355L738,365L744,371L744,376L750,377L748,382L751,387L752,393L757,403L758,413L756,413L760,421L758,421L755,419L753,424L751,420L751,412L747,409L747,418L748,423L745,425L741,422L740,425L736,426L734,424L736,414L735,412L731,421L725,427L713,433L710,434L707,439L705,443L705,447L709,457L706,467L706,470L700,475L698,480L694,484L685,489L678,493L677,488L674,487L669,492L669,497L672,494L674,495L669,499L658,512L652,526L645,535L644,539L632,547L626,556L621,562L616,567L606,573L600,579L599,583L601,588L599,595L596,597L586,603L576,603L573,604L572,607L570,616L566,622L562,622L561,619L557,619L550,623L548,625L543,637L543,644L545,652L547,661L548,665L546,669L553,689L549,683L546,686L548,688L553,690L555,692L553,712L551,719L547,725L544,733L542,745L543,748L541,752L544,751L545,755L546,767L547,780L544,781L538,781L534,782L530,786L531,790L524,801L523,804L525,810L531,812L524,812L509,818L502,825L501,832L501,836L499,840L491,846L484,850L478,848L468,842L458,830L456,829L451,819L448,814L445,800L449,806L450,811L452,811L448,800L442,789L435,777L433,769L429,761L423,751L413,742L405,728L403,720L400,714L394,692L391,687L387,674L374,659L372,652L370,650L373,650L368,645L370,642L364,637L360,632L355,620L352,599L349,590L349,587L346,580L342,567L340,555L343,548L342,544L340,548L338,549L337,546L337,540L342,541L337,538L337,534L335,532L333,525L333,518L337,504L337,496L333,488L332,487L329,479L334,474L340,471L327,472L328,464L326,464L326,459L333,456L318,457L320,458L318,463L316,464L313,469L319,474L319,477L315,486L313,488L302,494L297,497L287,501L284,502L279,502L273,499L263,492L261,490L253,481L247,476L243,472L238,467L233,462L233,455L236,455L240,459L247,455L249,455L251,453L254,454L259,451L263,450L271,435L269,435L267,439L265,438L254,442L249,445L238,443L227,437L222,434L216,423L217,421L225,414L222,416L214,421L211,422L210,418L209,415Z " data-iso="IND"/><path d="M38,375L39,373L40,364L43,357L45,348L46,346L52,344L53,342L61,337L70,335L78,335L80,334L82,323L80,318L74,318L70,314L71,312L71,302L70,296L71,290L69,289L66,289L62,285L49,280L41,270L40,266L36,259L36,257L29,247L24,241L25,241L31,234L48,214L49,207L48,201L46,198L25,190L25,180L27,173L21,151L21,147L25,142L30,137L24,135L20,131L21,127L21,120L25,114L31,114L27,107L33,104L36,99L39,86L41,79L41,77L41,76L41,70L39,67L40,63L40,50L39,48L21,47L15,37L13,35L2,29L0,26L0,369L8,371L11,367L14,372L34,378L37,375L38,375Z " data-iso="IRN"/><path d="M424,68L418,69L414,68L404,66L401,65L403,67L405,71L408,78L410,80L412,78L421,71L424,69L426,67L424,68Z " data-iso="KAS"/><path d="M401,65L396,62L396,59L389,62L384,57L381,56L382,52L381,46L378,40L373,37L371,36L365,32L356,32L355,32L350,30L348,30L347,31L344,32L339,35L333,37L329,36L303,39L293,44L285,50L284,52L281,52L272,61L272,64L275,66L282,80L281,85L283,88L280,94L269,107L272,112L272,119L271,121L267,123L262,124L256,124L246,122L244,123L244,126L248,131L254,141L254,143L246,149L241,149L236,152L235,157L230,169L231,183L229,186L222,192L220,191L215,187L208,188L206,187L201,191L194,195L190,196L194,201L187,204L183,205L179,204L177,202L170,205L167,210L162,213L159,222L160,230L158,238L160,240L156,244L130,252L115,252L109,254L105,257L101,256L91,254L64,256L62,255L33,245L24,241L29,247L36,257L36,259L40,266L41,270L49,280L62,285L66,289L69,289L71,290L70,296L71,302L71,312L70,314L74,318L80,318L82,323L80,334L78,335L70,335L61,337L53,342L52,344L46,346L45,348L43,357L40,364L39,373L38,375L38,376L42,377L55,376L57,378L64,374L66,374L75,376L79,375L87,376L89,372L93,371L100,372L102,371L105,373L115,376L118,377L121,374L128,374L137,372L144,373L149,371L162,368L156,369L161,365L163,366L166,369L167,372L171,376L171,387L181,388L183,389L186,400L187,406L196,416L200,416L201,414L208,418L209,416L209,415L215,412L224,411L224,403L245,402L252,405L255,404L259,401L271,397L272,401L274,402L278,401L280,399L284,397L282,392L284,389L277,374L273,368L273,362L270,360L269,361L262,360L258,355L259,338L256,335L248,334L241,330L242,320L243,319L251,310L257,299L263,294L269,296L270,299L274,302L276,302L286,298L292,297L300,294L302,288L306,283L310,272L311,271L325,262L330,252L332,246L335,235L341,232L348,226L347,220L349,217L354,210L363,202L361,199L361,189L359,182L361,177L364,175L376,169L377,166L375,162L368,160L364,161L360,157L360,152L353,153L351,148L343,140L346,132L341,127L341,126L347,121L347,119L344,118L340,118L340,111L336,108L339,99L347,96L370,98L374,100L380,100L388,95L391,95L397,92L400,92L403,90L404,87L407,85L409,81L410,80L408,78L405,71L403,67L401,65L401,65Z " data-iso="PAK"/><path d="M354,24L355,24L359,19L358,18L353,14L354,9L350,0L270,0L271,3L271,10L277,9L275,32L280,44L285,44L292,38L297,35L304,34L306,29L309,27L315,22L321,20L327,21L326,26L328,26L337,23L339,20L345,21L348,20L354,24L354,24Z M191,34L192,35L196,40L199,40L206,35L219,29L226,35L229,32L231,22L234,21L245,22L246,21L248,16L246,12L251,7L255,0L200,0L204,4L204,7L193,25L192,32L191,34Z " data-iso="TJK"/><path d="M41,77L43,77L47,82L58,83L60,85L64,90L69,88L74,89L83,83L83,80L89,72L102,67L113,61L117,58L124,36L130,33L141,32L143,26L146,23L154,28L162,30L163,30L163,26L163,17L165,13L164,11L157,8L150,4L136,0L0,0L0,26L2,29L13,35L15,37L21,47L39,48L40,50L40,63L39,67L41,70L41,76L41,77Z " data-iso="TKM"/><path d="M163,30L170,29L176,30L179,33L181,33L190,33L191,33L191,34L192,32L193,25L204,7L204,4L200,0L136,0L150,4L157,8L164,11L165,13L163,17L163,26L163,30Z " data-iso="UZB"/></g><g fill="red" fill-opacity="0.35" id="regions"><path d="M232,183L230,184L228,189L218,190L217,188L212,187L213,189L204,187L200,191L197,193L193,196L190,195L192,199L194,199L194,201L188,204L181,205L178,204L177,202L174,202L169,205L165,212L161,213L159,222L159,233L158,236L160,241L157,244L128,253L123,252L114,252L102,256L91,254L62,255L25,242L27,245L34,255L36,256L39,264L39,265L41,270L48,279L57,283L61,284L66,289L70,289L70,296L71,301L71,312L69,317L73,319L80,317L84,321L82,323L82,327L80,330L80,334L75,335L69,335L65,337L61,337L58,338L56,342L45,347L43,357L41,359L41,361L39,373L38,375L42,380L45,380L45,378L52,378L51,376L55,375L57,376L56,378L62,374L69,374L76,376L79,375L88,376L87,375L90,372L96,372L98,373L103,372L109,374L112,376L114,375L116,375L116,378L118,377L120,373L130,374L139,372L143,373L149,371L162,369L164,370L161,367L155,369L158,366L164,366L166,368L167,373L171,376L172,377L171,386L171,386L182,375L183,371L188,363L189,358L189,351L183,338L182,335L181,316L182,311L189,300L195,299L201,296L203,293L208,289L218,282L222,283L234,282L237,281L236,279L237,278L241,272L240,268L245,263L244,258L241,254L242,248L248,243L252,232L249,229L252,221L252,218L253,217L256,212L256,207L256,206L256,198L251,197L251,199L248,195L247,186L248,183L245,183L246,182L244,179L241,180L240,181L233,183L232,183L232,183Z " data-fips="PK02" data-fips-="" data-iso3="PAK" data-name="Baluchistan"/><path d="M342,86L341,87L340,92L337,95L335,95L331,103L328,102L327,106L329,117L330,119L330,119L331,121L332,129L333,130L333,135L332,136L333,140L335,143L338,146L342,146L343,147L351,151L352,151L351,147L348,146L343,141L343,139L345,137L346,132L346,131L342,128L341,125L348,119L338,116L341,112L340,110L336,109L335,108L339,99L346,96L355,97L364,98L368,97L368,97L368,92L366,91L358,92L355,91L349,85L343,86L342,86Z " data-fips="PK06" data-fips-="" data-iso3="PAK" data-name="Azad Kashmir"/><path d="M314,129L314,130L315,132L319,130L323,134L324,132L325,127L321,125L321,125L321,125L320,126L319,126L318,127L316,127L314,129Z " data-fips="PK08" data-fips-="PK06" data-iso3="PAK" data-name="F.C.T."/><path d="M328,36L332,40L321,40L319,41L314,42L312,49L310,49L310,52L306,55L303,57L302,60L304,63L302,66L306,67L309,67L313,66L316,66L319,72L324,75L332,75L333,77L331,80L332,82L338,84L342,86L342,86L343,86L349,85L355,91L358,92L366,91L368,92L368,97L369,98L372,100L378,101L382,100L387,95L393,94L397,91L399,92L404,88L403,87L407,86L410,83L410,80L426,67L416,69L413,68L410,68L408,67L406,67L403,65L397,63L395,60L391,62L380,55L381,45L378,40L371,36L368,38L366,33L359,31L357,31L354,33L352,31L347,31L346,33L345,31L343,32L336,38L329,36L328,36Z " data-fips="PK07" data-fips-="" data-iso3="PAK" data-name="Northern Areas"/><path d="M277,96L274,101L271,103L271,106L269,107L271,111L273,112L273,117L271,121L265,124L258,124L252,124L247,122L243,125L246,131L249,131L251,134L251,136L254,142L250,146L249,146L248,148L244,149L236,151L235,152L236,156L233,160L234,160L233,165L230,168L231,180L232,183L232,183L233,183L240,181L241,180L244,179L246,182L245,183L248,183L247,186L248,195L251,199L251,197L256,198L256,206L256,207L256,207L256,204L257,204L260,203L260,202L255,188L253,180L252,180L250,175L254,171L256,171L260,166L262,165L257,160L257,156L261,150L263,150L267,148L268,145L264,144L259,140L259,139L265,134L273,134L274,132L274,129L277,131L285,132L288,134L291,132L290,130L291,128L288,126L284,129L279,118L278,118L283,111L284,111L285,104L288,100L283,99L282,97L279,95L277,96Z " data-fips="PK01" data-fips-="" data-iso3="PAK" data-name="F.A.T.A."/><path d="M260,202L260,203L257,204L256,204L256,207L256,207L256,212L253,217L252,218L252,221L249,229L252,232L248,243L242,248L241,254L244,258L245,263L240,268L241,272L237,278L236,279L237,281L240,280L247,283L251,293L258,298L258,297L261,295L265,293L269,297L271,302L273,302L277,302L282,299L289,297L293,297L300,294L303,286L306,283L312,270L325,262L328,256L332,247L335,235L339,233L343,231L345,230L348,225L345,222L350,217L351,214L356,206L360,204L364,200L360,198L361,192L360,185L358,182L359,180L370,171L370,171L374,170L377,167L378,164L374,162L369,160L367,161L360,158L360,150L356,153L352,153L351,151L351,151L343,147L342,146L338,146L335,143L333,140L332,136L333,135L333,130L332,129L331,121L330,119L330,119L330,118L326,122L321,125L321,125L321,125L325,127L324,132L323,134L319,130L315,132L314,130L314,129L316,127L316,127L314,126L315,125L313,122L310,124L307,121L300,122L300,127L296,127L295,129L294,133L291,138L289,139L288,141L289,144L288,148L287,148L284,144L282,143L283,149L282,150L276,153L276,159L276,162L278,162L279,165L281,167L276,176L276,178L273,182L270,192L271,196L266,200L264,199L260,202L260,202Z " data-fips="PK04" data-fips-="PK08" data-iso3="PAK" data-name="Punjab"/><path d="M237,281L234,282L222,283L218,282L208,289L203,293L201,296L195,299L189,300L182,311L181,316L182,335L183,338L189,351L189,358L188,363L183,371L182,375L171,386L170,386L170,387L175,387L182,388L185,390L183,391L185,394L184,396L185,398L187,407L190,409L192,414L195,415L196,413L201,416L201,414L205,416L207,419L211,414L215,412L224,411L224,402L227,403L228,401L230,403L232,402L236,403L238,402L251,405L256,405L258,403L260,400L270,397L273,402L278,401L279,400L285,397L282,395L282,390L284,389L282,385L279,380L278,376L275,372L272,368L273,362L271,360L268,361L262,360L257,354L257,349L258,347L256,335L250,336L246,333L242,331L241,329L242,322L243,318L248,314L253,307L256,300L258,298L251,293L247,283L240,280L237,281Z " data-fips="PK05" data-fips-="" data-iso3="PAK" data-name="Sind"/><path d="M326,36L318,37L316,37L309,39L302,40L293,45L291,46L285,50L284,51L279,54L280,55L274,59L271,63L273,66L277,69L279,71L279,76L282,77L283,81L281,84L283,88L280,95L279,95L282,97L283,99L288,100L285,104L284,111L283,111L278,118L279,118L284,129L288,126L291,128L290,130L291,132L288,134L285,132L277,131L274,129L274,132L273,134L265,134L259,139L259,140L264,144L268,145L267,148L263,150L261,150L257,156L257,160L262,165L260,166L256,171L254,171L250,175L252,180L253,180L255,188L260,202L260,202L264,199L266,200L271,196L270,192L273,182L276,178L276,176L281,167L279,165L278,162L276,162L276,159L276,153L282,150L283,149L282,143L284,144L287,148L288,148L289,144L288,141L289,139L291,138L294,133L295,129L296,127L300,127L300,122L307,121L310,124L313,122L315,125L314,126L316,127L316,127L318,127L319,126L320,126L321,125L321,125L321,125L326,122L330,118L330,119L329,117L327,106L328,102L331,103L335,95L337,95L340,92L341,87L342,86L342,86L338,84L332,82L331,80L333,77L332,75L324,75L319,72L316,66L313,66L309,67L306,67L302,66L304,63L302,60L303,57L306,55L310,52L310,49L312,49L314,42L319,41L321,40L332,40L328,36L326,36Z " data-fips="PK03" data-fips-="" data-iso3="PAK" data-name="N.W.F.P."/></g></svg> \ No newline at end of file
diff --git a/plugins/UserCountryMap/svg/TIB.svg b/plugins/UserCountryMap/svg/TIB.svg
deleted file mode 100644
index 5428c3a549..0000000000
--- a/plugins/UserCountryMap/svg/TIB.svg
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'><svg enable_background="new 0 0 450 301" height="301px" pretty_print="False" style="stroke-linejoin: round; stroke:#000; fill: none;" version="1.1" viewBox="0 0 450 301" width="450px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"><![CDATA[path { fill-rule: evenodd; }]]></style></defs><metadata><views><view h="301.0" padding="0.06" w="450"><proj id="laea" lat0="30.4857206345" lon0="97.3202376267"/><bbox h="139.79" w="240.55" x="791.63" y="909.4"/></view></views></metadata><g class="" id="context"><path d="M39,74L36,87L41,96L41,104L40,113L34,116L31,112L31,109L26,109L24,111L25,116L28,125L27,128L29,132L27,137L27,139L33,137L35,140L38,146L41,150L44,150L50,155L52,155L51,161L59,164L62,168L65,170L67,176L72,174L76,169L79,168L88,172L88,176L97,184L98,184L109,193L113,201L115,202L120,200L125,202L126,206L127,210L129,211L134,216L134,218L139,220L144,219L142,222L142,226L147,227L148,226L152,228L154,226L157,230L158,236L161,237L161,233L163,231L164,234L170,236L171,233L180,238L182,240L191,242L197,240L202,241L204,239L215,238L216,239L217,243L215,252L217,255L219,251L227,243L232,237L240,234L246,235L248,237L248,240L254,240L262,243L265,241L274,244L274,248L279,249L283,248L289,247L290,248L295,244L299,240L303,236L308,229L315,229L323,224L329,218L337,215L338,218L351,221L360,213L364,212L370,218L367,219L366,225L370,222L374,226L370,235L368,236L386,237L390,240L394,233L395,233L403,241L404,241L408,241L410,237L413,240L416,237L415,230L417,228L417,223L419,222L422,226L426,217L423,206L425,201L423,196L422,182L419,179L419,176L416,169L421,168L415,162L411,156L412,154L407,147L407,145L403,143L397,141L391,142L389,147L385,153L378,154L379,160L373,159L370,155L368,156L368,163L367,164L364,160L361,160L352,158L352,149L350,147L347,147L342,141L337,137L332,138L327,141L321,139L313,139L309,136L301,134L291,134L290,132L286,131L280,126L275,120L272,119L264,123L261,123L253,116L253,114L243,101L246,98L247,94L246,87L248,81L243,80L242,71L244,70L248,62L249,60L244,59L243,58L244,54L247,54L239,49L226,45L206,45L205,44L198,45L183,48L179,54L173,55L170,57L162,54L158,55L155,57L144,60L133,60L122,56L120,50L116,50L112,49L104,54L101,57L94,57L93,55L83,54L71,49L65,58L62,59L62,65L58,70L47,68L43,71L41,74L39,74Z " data-iso="TIB"/><path d="M234,297L234,288L231,282L227,287L221,283L217,276L217,279L214,280L206,272L206,275L202,280L198,287L208,297L212,298L212,299L233,299L234,297Z " data-iso="BGD"/><path d="M274,247L271,243L266,241L263,243L255,240L248,239L248,236L243,234L237,235L223,246L222,249L218,252L217,255L216,261L216,263L222,267L225,267L231,270L242,270L246,267L254,270L262,270L273,270L280,270L282,260L280,256L278,256L273,253L274,248L274,247Z " data-iso="BTN"/><path d="M309,729L308,731L305,726L304,725L308,720L310,726L309,729Z M306,718L304,720L303,718L305,716L306,718Z M302,702L300,700L300,699L302,702Z M293,697L292,698L291,696L293,697Z M285,677L283,675L285,674L285,677Z M279,644L276,644L275,639L279,636L281,641L279,644Z M284,625L282,624L282,622L284,625Z M291,611L292,614L291,612L291,611Z M284,622L281,618L283,609L285,603L285,594L287,588L288,580L290,578L293,583L290,587L291,599L288,601L288,607L285,612L285,620L284,622Z M66,172L64,172L53,180L51,184L48,192L44,196L43,199L49,206L51,205L63,215L69,222L76,227L81,228L87,234L91,234L92,238L103,243L105,242L114,244L116,243L122,244L130,247L131,254L140,259L142,262L150,261L152,266L157,265L172,272L179,272L183,275L185,273L198,275L201,268L200,252L203,242L202,241L202,240L209,238L212,237L216,239L217,245L215,250L216,254L217,255L216,261L216,263L222,267L225,267L231,270L242,270L246,267L254,270L262,270L273,270L280,270L282,260L280,256L278,256L273,253L274,248L275,248L281,249L290,248L295,245L295,242L307,230L318,228L321,226L323,223L325,222L337,215L338,218L346,220L349,221L353,219L353,217L364,212L370,218L366,221L366,224L370,222L375,228L370,233L372,236L383,238L385,237L389,240L390,241L390,248L388,248L381,254L381,259L385,265L385,266L381,265L376,261L364,264L361,267L352,274L345,278L343,283L344,290L340,298L339,301L333,305L332,309L335,313L332,320L326,330L324,334L321,340L320,339L305,336L306,342L306,352L306,356L301,359L301,362L299,368L301,374L296,382L289,382L288,382L287,366L284,360L284,351L282,343L276,343L275,347L272,350L271,357L267,358L265,355L263,353L262,355L261,349L259,344L261,336L265,332L275,331L277,327L280,324L282,320L283,315L288,316L288,314L280,308L274,308L264,307L246,307L242,306L233,301L234,297L234,288L231,282L227,287L221,283L217,276L217,279L214,280L206,272L206,275L202,280L198,287L208,297L212,298L213,300L215,302L214,304L205,303L201,310L198,309L195,314L197,319L209,325L208,331L205,339L208,344L207,348L212,350L210,354L211,363L213,372L212,379L210,379L212,386L207,385L205,387L204,383L206,377L204,374L202,381L199,386L196,383L195,385L192,385L194,373L189,380L183,384L172,385L164,392L164,395L165,403L161,413L155,416L148,421L134,425L134,421L132,420L127,423L126,426L130,425L126,428L116,436L108,445L99,454L89,458L78,467L73,470L64,473L59,477L57,479L55,489L53,490L44,493L36,491L26,504L22,503L21,501L12,501L10,503L5,511L4,517L5,531L3,537L6,554L3,548L0,550L1,552L6,557L2,572L-0,577L-4,581L-8,587L-11,596L-10,599L-13,602L-10,601L-10,615L-11,625L-22,624L-25,626L-25,630L-32,637L-33,639L-32,645L-28,647L-33,646L-46,648L-52,652L-54,661L-56,663L-63,667L-69,669L-73,666L-80,659L-87,648L-92,638L-93,633L-94,622L-91,627L-91,631L-90,632L-91,622L-95,612L-99,601L-100,594L-102,587L-105,578L-112,569L-116,556L-118,544L-120,526L-122,521L-123,510L-131,495L-131,489L-133,487L-130,487L-133,482L-131,481L-136,475L-138,470L-139,460L-139,443L-140,435L-139,433L-141,426L-141,415L-141,405L-138,402L-138,397L-141,400L-140,393L-137,394L-141,391L-140,387L-141,386L-141,380L-140,374L-134,364L-133,358L-136,349L-136,342L-131,339L-127,338L-137,336L-136,330L-135,326L-129,325L-141,322L-140,324L-141,327L-147,331L-143,336L-143,339L-150,346L-160,348L-164,350L-172,351L-178,350L-183,346L-191,336L-195,327L-204,313L-207,308L-205,302L-201,307L-182,305L-173,295L-177,297L-178,296L-187,297L-191,298L-199,294L-207,287L-210,283L-212,273L-211,272L-204,269L-207,269L-214,272L-216,272L-216,265L-211,264L-204,266L-203,259L-186,263L-181,266L-179,267L-175,265L-165,264L-165,268L-161,269L-155,267L-156,263L-154,260L-157,247L-158,242L-157,237L-165,233L-167,228L-163,215L-164,212L-173,207L-175,204L-171,196L-163,191L-156,183L-150,181L-146,184L-146,186L-144,190L-134,189L-129,190L-122,189L-119,184L-115,181L-110,174L-97,169L-88,158L-83,150L-77,149L-71,146L-71,141L-68,140L-63,135L-54,130L-55,128L-53,114L-50,111L-47,110L-37,107L-35,106L-40,99L-44,98L-46,94L-45,91L-51,89L-50,86L-55,77L-54,76L-53,66L-47,62L-52,59L-50,54L-53,52L-48,45L-42,43L-25,51L-22,53L-17,55L-2,52L-1,52L0,53L7,49L10,47L10,46L13,45L21,42L24,41L26,40L26,40L30,41L29,46L31,61L32,62L38,65L42,71L41,73L37,75L36,85L41,96L41,103L40,112L37,115L34,115L30,109L24,109L25,117L29,124L27,127L29,132L27,136L27,139L32,137L40,149L45,150L50,155L52,155L52,160L53,161L66,170L66,172Z " data-iso="IND"/><path d="M24,40L19,39L17,38L10,34L8,32L8,35L9,38L10,44L10,46L13,45L21,42L24,41L26,40L24,40Z " data-iso="KAS"/><path d="M404,241L401,237L399,237L395,234L394,234L391,240L390,241L390,248L388,248L381,254L381,259L385,265L385,266L381,265L376,261L364,264L361,267L352,274L345,278L343,283L344,290L340,298L340,299L412,299L418,294L416,292L418,287L419,278L419,267L418,264L417,255L413,253L410,256L405,241L404,241Z " data-iso="MMR"/><path d="M200,241L185,241L182,240L177,236L171,233L168,237L163,232L161,236L159,236L154,227L148,227L142,224L144,219L142,218L134,217L126,209L124,202L121,200L114,202L107,191L101,188L94,181L90,178L87,171L79,169L75,169L71,175L67,174L66,172L64,172L53,180L51,184L48,192L44,196L43,199L49,206L51,205L63,215L69,222L76,227L81,228L87,234L91,234L92,238L103,243L105,242L114,244L116,243L122,244L130,247L131,254L140,259L142,262L150,261L152,266L157,265L172,272L179,272L183,275L185,273L198,275L201,268L200,252L203,242L202,241L200,241Z " data-iso="NPL"/><path d="M0,53L7,49L10,47L10,46L10,44L9,38L8,35L8,32L7,32L5,29L5,26L0,27L0,53L0,53Z " data-iso="PAK"/><path d="M8,32L10,34L17,38L19,39L24,40L26,40L26,40L26,40L30,41L29,46L31,61L32,62L38,65L42,71L41,73L39,74L41,74L43,71L47,68L58,70L62,65L62,59L65,58L71,49L83,54L93,55L94,57L101,57L104,54L112,49L116,50L120,50L122,56L133,60L144,60L155,57L158,55L162,54L170,57L173,55L179,54L183,48L198,45L205,44L206,45L226,45L239,49L247,54L244,54L243,58L244,59L249,60L248,62L244,70L242,71L243,80L248,81L246,87L247,94L246,98L243,101L253,114L253,116L261,123L264,123L272,119L275,120L280,126L286,131L290,132L291,134L301,134L309,136L313,139L321,139L327,141L332,138L337,137L342,141L347,147L350,147L352,149L352,158L361,160L364,160L367,164L368,163L368,156L370,155L373,159L379,160L378,154L385,153L389,147L391,142L397,141L403,143L407,145L407,147L412,154L411,156L415,162L421,168L416,169L419,176L419,179L422,182L423,196L425,201L423,206L426,217L422,226L419,222L417,223L417,228L415,230L416,237L413,240L410,237L408,241L404,241L404,241L405,241L410,256L413,253L417,255L418,264L419,267L419,278L418,287L416,292L418,294L412,299L450,299L450,0L0,0L0,27L5,26L5,29L7,32L8,32Z " data-iso="CHN"/></g><g class="" id="regions"><path d="M343,145L339,148L340,150L337,155L339,157L340,163L342,163L344,168L344,172L339,174L338,170L335,166L330,169L329,171L331,177L330,179L324,178L318,181L320,182L327,187L327,187L327,187L331,185L331,186L336,186L338,185L342,186L349,184L358,187L358,188L361,191L362,193L367,194L368,193L371,190L372,191L375,196L377,196L375,201L373,204L375,207L380,208L383,206L385,207L385,210L391,212L392,220L394,216L398,217L401,220L406,220L406,222L413,228L415,233L418,235L418,235L416,234L416,230L417,229L418,223L419,222L421,227L423,226L424,221L423,218L425,217L425,210L423,207L425,201L423,194L422,186L420,180L419,179L419,176L415,170L416,168L419,170L420,168L411,155L412,154L409,150L407,146L402,142L399,141L394,142L391,141L391,145L389,146L389,151L388,151L383,152L383,153L381,154L378,153L380,156L380,160L380,161L375,160L370,155L367,158L369,160L368,164L367,161L361,159L360,160L358,158L355,159L352,153L353,149L350,147L347,147L343,145L343,145Z " data-fips="" data-iso3="TIB" data-name="Changdu"/><path d="M244,196L244,196L238,198L241,203L240,205L238,206L238,208L249,211L250,211L250,211L252,213L257,211L261,211L266,207L276,207L279,207L283,207L284,208L292,205L293,205L293,205L291,201L289,202L287,200L287,198L291,198L292,196L296,192L296,192L296,192L291,191L288,190L287,192L283,193L281,190L281,185L278,180L274,181L272,173L269,172L267,173L264,174L262,172L259,174L256,182L257,185L252,189L249,188L244,196L244,196Z " data-fips="" data-iso3="TIB" data-name="Lasà"/><path d="M138,60L138,63L137,65L137,68L140,71L144,73L143,75L148,79L146,82L143,87L144,91L149,94L152,95L157,97L157,96L160,101L165,105L168,110L169,110L172,114L172,118L173,122L169,125L161,127L159,127L156,129L153,135L151,138L152,141L151,148L153,148L154,150L159,153L163,158L169,160L170,165L170,165L170,165L172,167L173,170L174,176L177,180L178,178L179,179L183,177L180,171L182,169L184,169L185,171L188,169L188,176L190,178L194,178L195,181L199,184L201,183L206,184L210,187L213,188L214,191L218,188L230,187L231,188L238,189L239,190L242,195L244,196L244,196L244,196L249,188L252,189L257,185L256,182L259,174L262,172L264,174L267,173L269,172L272,173L274,181L278,180L281,185L281,190L283,193L287,192L288,190L291,191L296,192L296,192L296,192L296,191L299,189L299,186L304,184L304,186L307,189L309,186L311,187L312,191L315,192L324,191L327,187L327,187L327,187L320,182L318,181L324,178L330,179L331,177L329,171L330,169L335,166L338,170L339,174L344,172L344,168L342,163L340,163L339,157L337,155L340,150L339,148L343,145L343,144L339,139L335,139L327,142L325,142L320,139L318,140L313,139L311,137L309,137L306,134L303,135L300,134L299,135L296,134L290,134L289,131L286,132L278,125L275,122L276,121L272,119L271,121L268,121L265,124L255,119L248,108L248,107L245,104L243,101L247,98L247,92L247,87L249,84L248,81L244,82L244,78L242,74L243,70L246,69L249,59L244,59L242,56L248,54L237,49L233,47L232,47L227,44L222,43L216,44L201,44L201,45L187,46L183,47L182,50L177,55L172,55L170,57L164,53L159,55L156,56L150,57L149,58L146,60L138,59L138,60L138,60Z " data-fips="" data-iso3="TIB" data-name="Nàqu"/><path d="M89,172L91,168L90,167L96,165L100,159L105,168L108,170L110,167L110,163L104,159L102,155L106,154L108,152L107,148L108,147L107,145L114,143L124,147L128,147L130,146L133,146L137,147L136,144L138,143L141,147L141,151L137,151L134,153L139,155L140,159L142,163L135,171L137,172L140,181L140,186L141,186L147,193L154,191L156,189L158,189L162,183L161,181L163,176L160,173L163,172L162,171L170,165L170,165L170,165L169,160L163,158L159,153L154,150L153,148L151,148L152,141L151,138L153,135L156,129L159,127L161,127L169,125L173,122L172,118L172,114L169,110L168,110L165,105L160,101L157,96L157,97L152,95L149,94L144,91L143,87L146,82L148,79L143,75L144,73L140,71L137,68L137,65L138,63L138,60L138,60L131,59L123,56L122,53L118,50L115,49L110,50L110,52L105,53L104,56L97,57L94,57L92,54L88,54L85,52L84,54L79,52L75,49L71,50L71,53L65,59L64,61L61,62L59,69L54,69L50,69L45,68L37,75L36,79L37,82L35,86L36,89L41,97L46,98L45,101L46,105L46,112L37,116L35,116L32,112L32,107L29,109L27,108L25,110L26,113L25,114L27,118L27,120L29,123L27,128L29,132L27,133L29,141L30,139L34,137L36,145L41,149L44,149L49,153L51,155L53,157L52,159L62,166L63,168L67,171L69,176L71,175L71,173L75,171L74,170L79,167L86,171L88,172L89,172Z " data-fips="" data-iso3="TIB" data-name="Ali"/><path d="M327,187L327,187L324,191L315,192L312,191L311,187L309,186L307,189L304,186L304,184L299,186L299,189L296,191L296,192L296,192L296,192L292,196L291,198L287,198L287,200L289,202L291,201L293,205L293,205L293,205L294,206L297,205L300,205L302,205L305,210L303,216L302,216L295,226L301,228L302,227L307,227L312,229L312,229L312,229L313,229L313,229L313,229L314,229L315,229L315,229L315,229L316,229L316,229L317,229L317,229L318,229L318,229L318,229L322,228L323,225L328,219L335,215L336,214L339,217L344,219L345,219L350,221L352,221L354,217L365,212L367,215L370,219L366,221L369,223L374,221L373,223L375,228L369,235L371,237L374,236L377,235L383,238L385,237L390,240L396,235L400,238L402,237L404,241L407,243L409,240L408,237L411,239L412,243L415,241L418,239L418,235L418,235L415,233L413,228L406,222L406,220L401,220L398,217L394,216L392,220L391,212L385,210L385,207L383,206L380,208L375,207L373,204L375,201L377,196L375,196L372,191L371,190L368,193L367,194L362,193L361,191L358,188L358,187L349,184L342,186L338,185L336,186L331,186L331,185L327,187L327,187Z " data-fips="" data-iso3="TIB" data-name="Línzhi"/><path d="M313,229L314,229L315,229L315,229L315,229L315,229L314,229L313,229L313,229Z M317,229L318,229L318,229L318,229L317,229L317,229Z M293,205L292,205L284,208L283,207L279,207L276,207L266,207L261,211L257,211L252,213L250,211L250,211L249,211L245,221L245,223L243,227L244,228L244,234L244,234L254,237L250,240L256,240L256,241L262,243L268,240L278,248L278,249L286,247L289,248L296,245L295,242L307,236L306,234L312,229L312,229L307,227L302,227L301,228L295,226L302,216L303,216L305,210L302,205L300,205L297,205L294,206L293,205L293,205Z " data-fips="" data-iso3="TIB" data-name="Shannán"/><path d="M89,172L89,175L89,178L92,179L97,183L97,184L101,188L109,192L109,194L114,202L116,202L121,199L122,199L127,210L130,211L131,215L135,217L140,218L145,218L143,222L145,226L150,226L152,227L155,225L155,228L157,230L158,236L159,236L164,231L164,234L168,237L171,234L175,234L176,235L182,240L184,241L191,240L192,242L197,240L202,241L204,239L211,238L213,237L217,239L218,243L215,249L219,256L219,251L228,243L227,241L230,240L233,237L237,237L239,234L244,234L244,234L244,228L243,227L245,223L245,221L249,211L250,211L249,211L238,208L238,206L240,205L241,203L238,198L244,196L244,196L244,196L242,195L239,190L238,189L231,188L230,187L218,188L214,191L213,188L210,187L206,184L201,183L199,184L195,181L194,178L190,178L188,176L188,169L185,171L184,169L182,169L180,171L183,177L179,179L178,178L177,180L174,176L173,170L172,167L170,165L170,165L170,165L162,171L163,172L160,173L163,176L161,181L162,183L158,189L156,189L154,191L147,193L141,186L140,186L140,181L137,172L135,171L142,163L140,159L139,155L134,153L137,151L141,151L141,147L138,143L136,144L137,147L133,146L130,146L128,147L124,147L114,143L107,145L108,147L107,148L108,152L106,154L102,155L104,159L110,163L110,167L108,170L105,168L100,159L96,165L90,167L91,168L89,172L89,172Z " data-fips="" data-iso3="TIB" data-name="Rìkazé"/></g></svg> \ No newline at end of file
diff --git a/plugins/UserCountryMap/svg/world.svg b/plugins/UserCountryMap/svg/world.svg
index 49d78ee43a..8929e6ac4b 100644
--- a/plugins/UserCountryMap/svg/world.svg
+++ b/plugins/UserCountryMap/svg/world.svg
@@ -1 +1 @@
-<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'><svg enable_background="new 0 0 1000 525" height="525px" pretty_print="False" style="stroke-linejoin: round; stroke:#000; fill: none;" version="1.1" viewBox="0 0 1000 525" width="1000px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"><![CDATA[path { fill-rule: evenodd; }]]></style></defs><metadata><views><view h="525.010727376" padding="0.03" w="1000"><proj flip="auto" id="naturalearth" lon0="0"/><bbox h="463.56" w="884.64" x="95.31" y="-3.13"/></view></views></metadata><g class="" id="countries"><path d="M687.20,185.87L688.68,188.96L687.36,191.79L689.20,195.61L690.07,195.53L697.12,200.63L699.84,199.56L705.90,203.27L710.26,206.83L714.66,207.55L721.73,209.91L723.60,207.40L725.44,206.87L729.91,208.10L733.01,208.00L734.28,205.51L737.93,203.26L741.81,202.63L743.27,206.36L748.57,207.11L748.70,207.13L750.07,200.49L746.58,193.56L743.88,191.54L741.01,194.39L739.71,194.52L734.58,191.08L733.38,191.78L730.41,191.10L724.66,188.77L721.00,188.11L719.27,186.64L718.63,183.28L717.18,181.47L716.76,178.88L713.29,177.63L706.94,178.72L706.68,179.76L700.12,181.44L696.47,180.26L694.21,181.82L690.33,181.16L690.08,183.81L687.46,185.74L687.20,185.87Z " data-iso="TIB" data-name="Tibet" data-pop="3000000.0"/><path d="M673.19,174.69L668.98,173.86L663.88,176.11L662.21,171.36L660.29,170.46L652.79,175.05L652.75,174.94L652.71,174.84L651.77,174.63L650.63,174.35L649.91,174.22L649.05,174.30L648.91,174.32L644.26,175.34L644.00,177.91L640.35,179.69L640.42,181.12L638.31,182.04L635.33,180.46L635.10,180.50L635.20,180.74L634.87,185.17L633.83,185.97L636.20,194.72L638.92,195.72L638.00,200.23L637.37,201.20L638.56,201.59L647.26,202.88L653.15,201.28L653.07,197.80L654.76,196.02L660.96,193.73L661.41,189.57L662.92,188.58L662.88,186.49L665.15,181.07L664.06,179.36L672.13,175.61L672.41,175.47L672.36,175.44L671.81,174.99L672.28,174.70L673.10,174.75L673.24,174.72L673.19,174.69Z " data-iso="AFG" data-name="Afghanistan" data-pop="28400000.0"/><path d="M497.63,329.25L496.11,331.69L497.04,332.99L498.63,339.18L497.68,340.32L500.01,347.19L499.22,352.05L495.96,356.17L493.42,368.46L493.29,369.82L497.44,368.81L500.20,370.39L513.52,370.35L514.79,371.67L522.50,372.51L527.70,371.43L528.66,371.22L528.07,370.62L524.58,365.18L524.85,354.60L530.56,354.60L531.17,347.46L531.11,346.99L530.99,347.06L526.02,348.16L526.03,345.29L524.59,341.97L524.60,334.27L520.99,334.14L520.98,332.92L518.09,333.28L516.45,336.73L511.64,337.08L508.18,329.22L497.82,329.09L497.63,329.25Z M497.85,324.70L497.78,324.65L495.73,324.64L495.49,325.17L494.60,326.02L494.66,326.13L495.08,327.17L495.17,327.68L495.14,328.62L495.18,328.72L496.02,328.57L497.10,325.06L497.81,324.76L497.85,324.70Z " data-iso="AGO" data-name="Angola" data-pop="12799293.0"/><path d="M513.96,155.76L513.08,155.56L512.83,155.48L512.15,158.18L512.51,158.22L512.54,162.01L512.78,163.15L514.52,165.54L514.56,165.86L515.39,165.00L516.33,164.41L517.00,162.07L517.01,161.80L516.98,161.72L515.37,159.41L515.57,158.20L515.60,158.16L515.64,158.00L515.40,157.10L514.87,156.61L514.12,155.85L514.01,155.77L513.96,155.76Z " data-iso="ALB" data-name="Albania" data-pop="3639453.0"/><path d="M462.37,155.84L462.36,155.56L461.96,155.46L461.65,155.50L461.57,155.60L461.53,155.76L462.01,156.09L462.27,155.95L462.35,155.92L462.37,155.84Z " data-iso="AND" data-name="Andorra" data-pop="83888.0"/><path d="M625.07,214.89L620.77,221.26L614.05,222.37L612.37,221.05L612.28,221.23L612.43,221.98L615.74,226.10L623.57,227.21L623.74,226.92L623.71,226.39L624.12,222.47L624.73,219.14L626.46,218.74L626.40,218.60L626.14,216.62L625.91,216.33L625.57,216.35L625.43,216.19L625.08,214.85L625.07,214.89Z " data-iso="ARE" data-name="United Arab Emirates" data-pop="4798491.0"/><path d="M274.97,495.77L276.60,500.53L276.92,501.45L277.52,503.23L277.59,503.17L284.17,503.64L286.19,502.51L280.14,500.52L275.17,495.92L274.97,495.77Z M255.24,389.81L255.88,390.45L255.32,394.16L252.16,396.31L253.36,405.13L251.10,409.45L250.29,412.92L250.30,418.86L251.52,423.92L253.48,427.42L254.06,430.80L252.33,439.05L252.72,442.16L254.46,446.97L253.55,448.64L253.46,454.29L255.17,458.76L257.26,467.03L259.01,467.24L258.49,469.14L259.72,476.54L259.17,479.63L260.04,480.52L258.61,486.36L260.61,489.21L262.73,489.02L265.42,493.51L270.67,493.57L275.12,494.76L275.20,494.59L271.15,490.21L274.10,486.18L273.87,484.39L277.18,478.22L270.65,472.91L271.13,471.24L275.36,467.37L274.89,464.93L276.69,462.35L274.83,460.96L278.54,461.45L277.66,459.00L274.30,458.96L272.96,454.35L276.92,455.57L280.82,454.38L280.03,447.62L286.37,447.33L292.58,443.42L293.53,438.41L289.69,433.20L287.37,431.63L286.65,428.78L286.96,424.83L286.97,424.50L286.86,420.71L286.89,417.74L287.37,416.43L287.45,416.29L287.56,416.12L291.72,409.70L297.17,405.26L296.51,400.33L294.42,399.71L294.19,399.71L294.32,401.25L291.71,406.32L289.38,406.58L282.89,405.53L285.20,399.79L284.41,398.13L274.81,393.53L271.64,391.10L268.77,387.80L268.68,387.70L268.63,387.64L265.50,386.87L263.71,389.59L261.37,387.23L256.43,387.64L255.32,389.64L255.24,389.81Z " data-iso="ARG" data-name="Argentina" data-pop="40913584.0"/><path d="M584.92,160.23L584.86,160.28L582.78,160.51L580.75,160.85L580.61,160.88L580.67,161.04L582.63,164.75L583.61,164.68L585.04,165.73L585.16,165.89L585.44,165.83L587.24,166.63L588.15,166.45L589.32,168.56L589.47,168.83L589.63,168.87L590.03,168.71L590.53,168.73L590.47,168.41L589.31,166.27L587.57,164.98L585.01,160.39L584.92,160.23Z " data-iso="ARM" data-name="Armenia" data-pop="2967004.0"/><path d="M645.61,483.58L643.96,485.63L646.97,485.59L649.11,484.12L645.61,483.58Z " data-iso="ATF" data-name="Fr. S. and Antarctic Lands" data-pop="140.0"/><path d="M869.03,454.28L867.11,457.98L866.20,461.88L868.01,463.94L873.54,460.93L877.95,454.85L877.34,454.26L869.03,454.28Z M896.50,350.86L895.13,346.40L891.73,352.28L892.09,353.81L888.73,365.59L886.03,370.41L881.28,370.10L871.45,361.76L873.34,357.95L873.60,355.69L877.20,352.27L874.52,352.53L870.58,350.97L865.97,349.97L862.45,348.09L864.33,351.46L858.58,352.34L855.95,355.12L852.99,359.58L853.53,361.22L849.19,360.87L845.35,357.42L841.60,359.10L838.71,362.33L837.37,365.75L836.05,366.54L833.49,370.41L832.12,366.89L829.29,370.05L829.11,372.39L825.49,377.24L822.39,379.11L818.26,379.66L817.00,380.62L808.17,383.38L803.66,386.22L801.99,388.39L801.31,386.64L797.88,394.95L798.54,402.27L796.87,399.79L796.41,403.24L797.74,412.53L796.93,417.63L797.53,421.71L794.30,428.70L793.38,428.25L796.04,433.54L800.74,433.53L807.01,429.90L811.72,429.37L816.77,429.95L822.70,425.98L827.51,423.73L829.33,423.92L836.45,421.74L844.61,421.71L848.36,423.47L851.81,429.66L851.62,432.08L857.77,428.93L857.19,432.74L854.83,434.44L857.32,434.10L858.99,431.63L860.20,432.73L858.98,435.89L861.37,434.83L860.80,443.96L863.44,445.72L866.25,445.95L868.27,447.27L873.72,443.97L876.10,446.93L883.53,443.73L887.13,443.51L889.68,441.04L892.49,436.57L897.79,430.58L907.35,420.77L912.90,411.49L913.58,405.52L914.57,402.32L914.43,396.93L911.04,392.09L911.05,388.87L908.65,388.44L908.40,383.72L907.45,380.20L901.93,376.38L896.50,350.86Z " data-iso="AUS" data-name="Australia" data-pop="21262641.0"/><path d="M503.69,134.42L498.28,133.16L497.63,134.24L495.25,133.94L495.18,133.91L495.15,133.98L493.25,138.40L490.97,137.60L488.55,138.59L483.74,138.21L483.67,138.24L483.76,138.29L483.96,138.44L483.92,138.70L483.72,139.13L483.75,139.18L483.81,139.43L483.86,139.52L483.93,139.81L483.89,139.87L484.00,139.87L486.02,140.13L486.32,140.43L486.32,140.55L486.40,140.58L491.01,139.79L490.99,140.30L494.75,141.63L495.33,141.75L495.45,141.77L497.70,142.18L498.46,141.54L501.70,140.62L501.85,140.55L502.26,140.17L502.66,138.79L503.29,138.20L504.31,136.71L504.45,136.56L504.28,136.44L503.58,135.23L503.56,135.04L503.76,134.53L503.77,134.50L503.69,134.42Z " data-iso="AUT" data-name="Austria" data-pop="8210281.0"/><path d="M585.16,165.89L585.22,165.95L585.33,166.08L585.40,166.15L587.58,168.38L588.90,168.73L589.47,168.83L589.32,168.56L588.15,166.45L587.24,166.63L585.44,165.83L585.16,165.89Z M588.60,158.10L588.56,158.22L589.66,160.24L589.38,160.95L585.46,159.76L584.92,160.23L585.01,160.39L587.57,164.98L589.31,166.27L590.47,168.41L590.53,168.73L590.71,168.74L594.38,165.96L595.48,166.97L597.61,170.41L597.33,169.06L598.49,164.14L600.76,163.83L594.98,158.47L594.68,158.26L593.07,160.51L588.92,158.17L588.60,158.10Z " data-iso="AZE" data-name="Azerbaijan" data-pop="8238672.0"/><path d="M551.74,316.71L550.39,316.76L549.17,318.13L547.11,317.67L547.06,317.86L547.06,318.00L547.70,319.05L547.66,321.31L548.14,323.50L548.21,324.04L549.18,324.06L551.15,321.65L551.39,320.97L551.76,316.81L551.82,316.72L551.74,316.71Z " data-iso="BDI" data-name="Burundi" data-pop="8988091.0"/><path d="M466.20,124.98L465.49,125.28L464.33,125.86L469.37,129.83L470.68,129.17L473.03,131.23L473.25,131.24L473.32,131.18L473.05,130.30L473.41,129.35L474.06,129.21L474.08,129.22L474.09,129.16L474.35,127.58L473.72,127.11L473.68,127.05L473.15,127.04L473.41,127.04L473.24,126.85L472.88,126.95L472.87,126.97L469.97,124.74L468.39,125.34L466.53,124.89L466.20,124.98Z " data-iso="BEL" data-name="Belgium" data-pop="10414336.0"/><path d="M468.38,266.04L465.12,264.34L464.94,265.29L464.87,265.65L464.79,265.86L463.62,267.36L460.39,268.89L460.31,268.88L460.23,269.27L459.89,271.05L461.69,273.98L462.55,285.95L463.15,285.80L464.59,285.56L465.89,285.41L466.08,275.84L467.11,275.34L469.17,270.88L468.45,266.60L468.57,266.37L468.38,266.04Z " data-iso="BEN" data-name="Benin" data-pop="8791832.0"/><path d="M457.57,254.60L455.23,254.38L447.61,259.35L447.44,260.70L444.84,260.61L444.00,263.52L441.33,265.90L440.64,270.71L440.59,270.91L440.78,271.15L444.24,273.70L445.90,272.73L449.20,274.38L449.26,274.29L449.23,274.10L448.71,270.62L449.10,268.87L456.63,268.26L457.34,268.45L458.04,268.61L459.03,268.89L459.23,269.02L459.52,268.92L460.31,268.88L460.39,268.89L463.62,267.36L464.79,265.86L464.87,265.65L464.73,265.48L462.34,263.01L460.91,261.70L458.17,255.03L458.21,254.86L457.57,254.60Z " data-iso="BFA" data-name="Burkina Faso" data-pop="15746232.0"/><path d="M726.22,229.39L730.13,226.20L732.77,226.58L736.66,233.79L736.71,233.78L737.27,232.07L736.83,229.66L736.78,229.53L736.70,229.27L734.73,223.40L731.95,224.51L731.90,221.90L734.55,219.21L732.30,218.09L726.27,217.32L723.21,214.05L720.80,215.48L722.38,217.99L721.46,219.70L723.88,222.25L723.68,223.43L726.09,229.11L726.22,229.39Z " data-iso="BGD" data-name="Bangladesh" data-pop="156050883.0"/><path d="M520.91,149.78L520.81,149.85L521.34,154.57L520.68,154.72L520.71,156.54L520.49,156.60L520.97,157.12L522.54,158.72L522.42,159.11L522.43,160.00L522.40,160.07L522.71,160.11L529.40,160.32L531.49,159.89L531.55,158.62L531.90,158.72L531.89,158.62L535.08,157.90L536.59,157.82L536.48,157.54L534.92,156.05L535.59,155.20L537.55,152.39L537.52,151.54L532.51,150.11L531.53,150.33L521.12,149.93L520.91,149.78Z " data-iso="BGR" data-name="Bulgaria" data-pop="7204687.0"/><path d="M509.42,155.72L509.47,155.71L509.34,154.27L509.83,154.06L511.22,152.27L511.30,152.27L511.46,152.09L510.88,148.92L510.52,147.55L510.42,147.56L510.24,147.57L502.45,146.84L501.35,147.92L509.17,155.63L509.42,155.72Z " data-iso="BIH" data-name="Bosnia and Herz." data-pop="4613414.0"/><path d="M530.63,108.74L528.70,109.88L528.02,109.79L526.96,110.30L526.90,110.34L526.91,110.49L527.26,111.89L525.16,113.14L524.81,114.90L519.71,116.23L519.51,116.16L519.95,117.31L520.98,120.49L519.42,121.88L520.58,124.07L520.80,124.41L520.82,124.39L530.17,123.61L538.38,124.55L541.84,122.39L542.35,122.42L542.32,122.33L542.59,119.04L541.58,116.66L538.31,111.83L538.20,110.66L534.42,110.28L531.11,109.04L530.71,108.75L530.63,108.74Z " data-iso="BLR" data-name="Belarus" data-pop="9648533.0"/><path d="M189.39,242.10L188.69,242.20L186.49,244.15L186.45,244.46L186.31,245.33L185.40,251.36L185.76,251.32L186.43,251.36L186.40,251.12L188.51,248.70L189.23,245.53L189.18,242.51L189.39,242.10Z " data-iso="BLZ" data-name="Belize" data-pop="307899.0"/><path d="M281.67,380.22L279.82,369.76L279.62,366.36L274.12,366.30L272.73,362.27L273.30,360.39L272.46,357.43L262.11,352.70L260.16,352.59L257.64,349.98L256.61,342.84L253.02,343.51L246.52,347.79L244.37,347.26L244.01,347.27L244.44,348.05L247.11,352.82L246.23,357.04L246.98,358.79L245.99,360.32L246.09,370.73L246.09,370.74L246.18,371.14L249.71,381.45L251.61,384.87L253.18,389.81L254.75,389.93L255.24,389.81L255.32,389.64L256.43,387.64L261.37,387.23L263.71,389.59L265.50,386.87L268.63,387.64L268.68,387.70L268.73,387.52L270.39,378.41L275.58,377.16L278.35,377.12L281.47,379.68L281.47,380.27L281.67,380.22Z " data-iso="BOL" data-name="Bolivia" data-pop="9775246.0"/><path d="M304.39,308.97L301.25,309.13L301.40,314.21L305.81,313.20L308.20,309.21L304.39,308.97Z M270.32,289.58L270.41,289.62L267.74,292.84L263.68,295.32L259.95,293.96L260.00,298.96L261.95,300.22L255.49,305.68L251.96,304.61L251.17,303.79L250.59,303.95L249.73,300.71L246.98,302.01L242.01,302.05L242.40,304.37L241.30,308.09L243.38,312.42L241.85,323.15L241.80,323.28L241.79,323.51L238.70,323.69L233.45,326.25L229.77,335.14L233.75,341.76L235.82,343.88L240.52,343.24L240.76,347.48L243.72,347.28L244.01,347.27L244.37,347.26L246.52,347.79L253.02,343.51L256.61,342.84L257.64,349.98L260.16,352.59L262.11,352.70L272.46,357.43L273.30,360.39L272.73,362.27L274.12,366.30L279.62,366.36L279.82,369.76L281.67,380.22L281.47,380.27L281.56,380.53L282.79,387.25L290.25,390.79L290.63,392.54L294.70,394.21L294.15,399.19L294.19,399.71L294.42,399.71L296.51,400.33L297.17,405.26L291.72,409.70L287.56,416.12L287.45,416.29L287.66,416.55L290.07,416.29L299.76,423.01L300.79,424.61L301.81,429.07L302.93,427.84L304.84,423.22L308.42,418.84L310.30,413.32L313.09,408.69L312.00,402.20L317.57,394.44L323.33,391.27L327.46,390.42L327.38,389.54L330.76,390.24L331.84,387.97L333.89,386.85L333.83,384.12L337.15,377.09L336.89,374.80L338.48,371.45L338.50,362.67L337.95,356.70L342.64,349.78L342.93,348.35L348.15,342.23L349.99,338.18L349.77,330.98L347.97,326.47L342.95,325.69L337.21,320.26L334.26,318.37L327.21,318.12L322.22,317.42L319.90,319.36L320.12,315.48L317.27,312.99L309.31,310.67L305.11,316.52L305.38,314.34L300.64,312.53L300.48,311.50L296.48,314.01L297.99,310.87L302.34,305.17L300.07,296.44L298.56,293.04L298.26,293.65L294.32,300.26L291.75,299.91L289.11,299.89L289.03,299.85L288.89,299.84L286.67,299.44L285.10,299.26L283.35,301.25L283.26,301.22L283.13,301.27L280.39,301.34L276.98,303.57L273.65,302.02L272.94,295.34L273.89,294.11L270.60,289.51L270.32,289.58Z " data-iso="BRA" data-name="Brazil" data-pop="198739269.0"/><path d="M812.15,290.66L812.47,292.48L813.15,292.51L812.15,290.66Z M812.20,290.43L812.03,290.22L811.57,290.49L809.58,291.76L809.23,291.75L810.87,293.70L811.63,292.61L812.15,290.66L812.20,290.43Z " data-iso="BRN" data-name="Brunei" data-pop="388190.0"/><path d="M730.00,208.60L728.59,207.63L725.08,206.80L722.27,209.81L722.21,210.34L724.78,212.49L730.87,212.19L731.73,210.43L730.03,208.75L730.00,208.60Z " data-iso="BTN" data-name="Bhutan" data-pop="691141.0"/><path d="M534.22,371.75L530.88,372.78L528.13,372.51L522.05,373.61L521.11,378.76L520.80,386.86L517.74,388.76L517.43,396.74L517.43,396.83L517.57,396.94L518.49,397.74L519.06,403.32L523.20,403.52L526.45,398.80L530.29,400.31L534.06,399.81L535.11,396.87L538.08,394.91L538.96,392.53L542.51,389.35L545.37,387.62L546.08,387.55L545.94,387.42L545.17,386.18L542.01,385.09L540.09,381.40L536.63,377.42L534.28,371.94L534.35,371.77L534.22,371.75Z " data-iso="BWA" data-name="Botswana" data-pop="1990876.0"/><path d="M527.58,269.12L524.19,270.51L521.40,274.56L515.84,276.23L511.86,279.64L509.54,280.89L505.53,281.32L505.20,281.29L504.89,281.88L503.32,284.74L502.60,288.53L502.90,291.49L507.33,299.71L507.48,300.05L507.69,299.56L508.66,295.79L510.90,295.24L514.78,295.62L514.95,295.73L514.91,295.02L516.33,290.69L525.10,292.96L536.22,289.19L541.13,289.59L542.02,289.91L541.80,289.63L538.74,284.46L535.06,281.17L531.96,277.25L531.81,277.20L531.51,277.11L530.16,274.79L530.20,273.07L527.94,269.59L527.71,269.15L527.58,269.12Z " data-iso="CAF" data-name="Central African Rep." data-pop="4511488.0"/><path d="M288.51,143.77L290.25,144.79L287.60,144.99L287.43,143.78L290.29,140.55L290.48,142.51L288.51,143.77Z M250.30,146.95L254.39,144.43L265.45,138.43L269.12,135.62L277.77,132.36L282.03,132.74L282.70,133.78L279.35,138.79L279.10,142.33L288.14,146.07L283.62,147.65L274.71,151.80L272.62,151.28L273.60,148.64L278.70,145.91L279.53,144.16L271.19,146.59L271.11,146.50L269.79,144.63L270.52,139.11L267.92,138.89L259.87,146.18L249.86,147.08L250.30,146.95Z M114.91,127.43L118.59,128.40L119.01,130.87L121.27,134.15L118.30,134.79L117.64,133.26L114.17,131.65L115.69,130.85L114.91,127.43Z M308.97,124.35L303.83,130.21L306.97,129.76L308.13,132.20L311.97,131.99L312.79,134.91L310.69,136.35L313.16,137.90L311.17,141.28L308.83,139.77L309.54,137.26L305.06,138.45L302.03,138.00L295.44,138.08L295.16,136.81L303.45,127.07L307.48,124.24L308.97,124.35Z M114.95,113.35L115.32,113.14L116.05,112.76L116.49,112.49L116.34,112.76L115.65,113.20L115.01,113.43L114.95,113.35Z M251.80,79.21L252.86,78.63L257.31,80.90L260.71,83.80L255.32,84.01L248.15,85.72L246.95,84.11L243.65,84.53L246.03,83.01L250.64,77.43L251.80,79.21Z M279.01,69.75L279.50,71.49L278.15,72.68L274.17,72.98L274.58,71.19L279.01,69.75Z M230.41,65.74L232.45,66.65L229.94,69.33L225.36,67.89L227.68,65.96L230.41,65.74Z M203.00,134.43L202.99,134.44L203.00,134.44L199.91,132.21L198.69,133.13L123.55,133.13L123.51,133.00L122.99,129.14L120.68,130.41L118.87,127.96L115.29,126.48L115.26,124.12L116.62,121.08L114.67,118.17L114.56,115.04L118.21,111.64L118.99,109.62L118.99,109.60L116.65,107.22L114.74,97.84L111.99,97.54L110.17,98.79L107.78,98.54L106.97,94.90L102.01,95.04L111.75,83.79L121.04,73.74L128.89,65.72L129.17,65.77L135.60,67.80L140.28,66.75L146.54,66.37L146.70,67.06L161.61,63.89L163.21,66.27L168.70,66.55L173.45,65.22L180.75,67.56L186.71,67.87L188.51,69.80L185.48,70.33L187.37,71.63L190.78,71.70L196.30,70.87L200.21,73.41L199.94,74.98L202.66,70.63L201.03,69.89L210.47,70.54L212.98,70.38L223.94,70.84L227.19,69.11L230.71,70.01L228.63,72.10L237.67,68.84L235.94,67.81L239.19,66.23L234.18,65.26L233.92,63.69L235.65,61.47L240.31,59.01L244.14,60.90L244.44,63.57L241.07,65.67L246.17,66.34L244.61,69.95L249.23,66.88L250.74,68.57L248.89,70.23L249.58,73.24L254.19,70.59L257.76,66.99L260.61,65.12L267.06,67.32L263.21,73.59L253.59,76.06L249.63,75.32L250.80,76.53L246.22,78.92L240.88,77.72L242.13,78.94L246.48,79.69L240.50,83.15L234.43,84.50L232.11,84.13L233.40,86.44L229.09,87.08L226.42,88.37L218.97,94.40L215.88,99.06L219.80,100.19L218.97,105.21L222.56,105.09L241.81,112.35L239.20,119.12L241.64,125.14L243.44,125.79L248.20,121.90L248.43,113.60L250.67,112.98L257.83,109.24L258.89,108.02L260.03,103.71L258.36,99.17L261.31,97.42L263.14,90.09L265.25,87.85L272.00,89.18L274.99,88.09L278.40,92.08L283.00,92.61L281.56,95.77L279.77,96.11L278.59,100.07L283.76,101.06L283.91,102.55L290.67,99.25L293.76,95.20L297.06,100.36L295.48,101.08L299.68,110.14L298.82,112.38L306.23,113.76L299.03,116.76L298.52,117.69L306.29,115.40L306.30,116.92L309.17,117.35L309.00,121.94L306.19,123.85L300.56,125.18L296.82,127.94L290.74,129.28L289.19,128.68L279.51,128.62L276.52,129.66L274.67,131.89L267.56,135.71L263.77,135.00L261.29,140.79L255.94,142.84L251.05,146.37L249.86,147.08L243.96,150.42L242.51,151.94L237.19,151.95L235.42,154.86L228.47,156.97L223.91,158.86L222.96,157.80L225.65,155.09L228.47,145.87L223.92,140.89L216.20,135.53L205.32,135.62L203.00,134.44L203.00,134.43Z M197.98,56.99L202.27,55.82L204.95,57.68L209.17,55.85L210.26,59.46L212.67,59.03L213.46,55.49L217.64,55.23L218.92,56.87L217.62,60.95L223.03,64.34L222.42,65.53L219.80,65.13L216.99,68.02L214.51,68.27L208.74,66.35L200.10,68.67L192.14,69.25L190.68,66.93L186.15,66.67L184.98,65.26L187.19,64.14L198.15,63.33L189.53,62.91L188.07,61.05L192.88,60.06L186.29,59.76L191.73,56.29L199.72,54.72L197.98,56.99Z M279.17,53.91L284.80,54.90L285.30,56.26L281.66,56.10L276.05,55.02L276.23,53.86L279.17,53.91Z M258.27,61.65L262.56,61.40L263.77,59.95L263.25,58.09L266.26,54.83L272.31,53.69L274.61,53.79L275.91,56.47L272.89,59.00L279.70,57.67L280.92,56.71L285.64,57.04L288.30,58.61L285.22,61.00L290.83,59.67L293.79,60.31L296.31,62.14L299.50,63.10L297.40,64.81L299.17,65.36L297.11,68.16L299.35,70.54L305.25,71.89L309.66,73.75L309.00,75.93L307.47,75.64L303.99,79.31L293.07,76.13L295.39,80.61L295.99,80.12L299.35,83.84L297.75,86.66L288.60,83.96L292.50,87.62L292.50,89.97L286.20,88.25L280.43,85.03L282.17,84.51L278.65,81.37L269.73,82.43L267.11,81.23L269.74,79.52L277.52,78.78L278.80,76.26L282.81,74.65L285.31,71.78L283.91,68.59L277.92,67.76L279.86,66.52L277.25,63.95L267.94,64.84L257.47,64.35L257.68,63.28L252.12,63.10L251.77,61.50L256.86,61.72L251.93,60.43L256.34,55.49L259.69,54.08L266.97,53.46L263.71,55.05L260.80,59.02L262.46,60.50L258.27,61.65Z M233.93,53.07L238.97,54.58L237.02,55.69L237.60,58.30L232.47,60.37L225.16,56.62L226.67,55.62L228.18,56.54L229.51,54.55L233.93,53.07Z M249.67,52.45L255.35,53.29L249.09,56.52L245.39,57.09L243.23,58.64L241.38,56.44L242.83,54.19L246.03,52.67L249.67,52.45Z M190.26,52.59L194.11,52.15L198.36,54.35L184.13,58.10L181.99,59.81L174.29,61.32L173.96,59.68L171.22,58.32L180.22,53.41L179.86,51.92L190.26,52.59Z M244.84,45.97L241.80,49.71L237.15,50.11L237.77,48.47L234.58,48.36L236.65,46.09L238.83,47.47L240.09,45.51L244.84,45.97Z M220.72,47.10L224.16,47.20L223.11,49.81L217.25,50.18L204.98,51.68L205.21,50.60L212.36,49.52L208.25,49.73L206.58,48.85L203.50,50.07L198.21,49.49L200.17,48.25L207.79,45.86L212.97,48.16L217.76,48.62L220.93,45.02L220.72,47.10Z M253.27,44.75L259.59,45.43L260.16,47.11L262.85,48.21L269.42,48.43L273.92,47.78L280.89,48.69L282.17,49.33L279.48,51.04L274.37,51.38L272.84,50.39L271.20,51.30L264.83,51.52L254.41,51.06L255.33,48.22L249.66,46.53L247.42,45.05L253.27,44.75Z M208.50,43.52L205.87,45.23L200.49,46.14L202.02,45.10L191.30,47.21L190.47,46.28L200.70,43.68L208.50,43.52Z M221.52,41.54L221.17,42.57L216.20,43.57L216.04,41.97L221.52,41.54Z M253.02,40.40L254.10,41.83L249.57,42.33L248.87,41.11L251.15,39.74L253.02,40.40Z M239.78,38.36L245.43,39.89L245.53,41.90L240.37,41.11L235.06,41.10L238.11,39.78L235.68,39.63L239.78,38.36Z M268.67,33.83L273.79,35.58L278.42,38.44L272.00,39.08L268.02,41.30L262.42,41.31L258.43,39.36L262.08,38.70L256.41,37.37L255.92,36.28L264.40,33.36L268.67,33.83Z M318.66,29.50L324.60,29.69L322.10,30.26L330.56,30.49L333.67,31.14L323.11,32.97L320.21,34.05L310.41,36.44L296.03,37.86L300.05,38.57L292.29,38.97L299.24,40.17L290.54,41.96L283.44,43.84L288.26,44.69L285.67,46.01L280.92,45.84L271.85,46.42L262.99,45.95L270.67,42.10L270.98,41.46L280.39,38.76L278.16,35.82L282.70,35.97L286.76,37.50L285.02,35.93L298.96,34.48L296.21,33.88L291.98,34.73L282.57,35.31L273.50,34.36L274.22,32.63L270.62,32.52L279.02,31.56L284.47,31.68L286.35,30.76L295.96,32.12L294.59,30.16L305.54,30.40L306.23,29.43L318.66,29.50Z " data-iso="CAN" data-name="Canada" data-pop="33487208.0"/><path d="M483.18,137.98L481.47,137.63L480.38,137.95L478.66,138.08L478.43,138.00L478.10,138.16L474.37,143.06L475.70,142.04L476.92,143.72L476.97,143.84L477.07,143.92L480.85,142.17L482.52,144.12L483.60,142.07L486.21,141.00L486.32,140.55L486.32,140.43L486.02,140.13L484.00,139.87L483.89,139.87L483.68,139.85L483.64,139.86L483.61,139.73L483.61,139.47L483.72,139.13L483.92,138.70L483.96,138.44L483.76,138.29L483.67,138.24L483.18,137.98Z " data-iso="CHE" data-name="Switzerland" data-pop="7604467.0"/><path d="M277.52,503.23L276.92,501.45L276.60,500.53L274.97,495.77L274.87,495.70L272.69,495.21L271.00,497.99L272.41,499.97L275.59,502.23L269.54,501.86L277.13,503.23L277.52,503.23Z M255.15,483.71L253.52,482.28L252.70,484.45L255.39,486.70L255.15,483.71Z M250.75,463.37L251.29,461.92L248.62,458.60L248.91,462.80L250.75,463.37Z M246.09,370.74L245.88,370.98L245.38,372.47L245.30,372.84L243.64,373.75L243.83,373.93L245.93,385.04L245.96,392.80L246.63,398.26L246.05,410.84L246.70,416.13L246.03,416.80L248.26,425.18L247.72,426.74L246.22,441.56L247.78,451.35L247.92,454.58L250.71,457.82L251.72,456.98L252.97,462.31L253.01,466.28L254.96,467.22L253.91,472.68L252.33,471.73L249.81,472.29L254.46,479.62L254.04,479.77L258.98,489.91L255.31,489.02L261.21,493.68L263.34,492.64L261.46,495.80L267.25,495.61L264.14,497.95L269.92,498.90L269.35,496.17L273.51,494.44L275.12,494.76L270.67,493.57L265.42,493.51L262.73,489.02L260.61,489.21L258.61,486.36L260.04,480.52L259.17,479.63L259.72,476.54L258.49,469.14L259.01,467.24L257.26,467.03L255.17,458.76L253.46,454.29L253.55,448.64L254.46,446.97L252.72,442.16L252.33,439.05L254.06,430.80L253.48,427.42L251.52,423.92L250.30,418.86L250.29,412.92L251.10,409.45L253.36,405.13L252.16,396.31L255.32,394.16L255.88,390.45L255.24,389.81L254.75,389.93L253.18,389.81L251.61,384.87L249.71,381.45L246.18,371.14L246.09,370.74Z " data-iso="CHL" data-name="Chile" data-pop="16601707.0"/><path d="M447.64,289.77L447.54,289.89L447.95,289.98L448.03,289.84L447.64,289.77Z M433.01,271.85L432.93,271.99L433.64,275.72L433.10,276.77L431.60,281.01L431.43,281.16L431.49,281.20L432.02,285.59L433.25,285.89L434.28,292.62L434.65,292.53L440.40,289.98L445.62,289.51L448.22,289.76L448.24,289.83L448.95,289.13L447.57,284.82L449.55,279.29L449.29,274.47L449.26,274.29L449.20,274.38L445.90,272.73L444.24,273.70L440.78,271.15L440.59,270.91L440.49,270.86L438.39,271.50L438.33,269.85L433.10,271.85L433.01,271.85Z " data-iso="CIV" data-name="Ivory Coast" data-pop="20617068.0"/><path d="M505.36,281.00L500.59,273.91L501.30,272.51L505.64,272.41L503.04,263.49L501.16,261.43L500.61,261.42L500.93,263.09L502.20,266.25L499.60,269.31L498.18,273.70L495.70,277.46L494.53,281.05L491.68,284.92L489.25,283.60L485.27,287.02L483.93,291.17L483.97,291.19L486.26,294.08L488.24,297.16L487.85,299.09L487.79,299.93L488.00,300.25L488.34,300.41L491.79,300.41L492.50,300.41L492.54,300.18L493.21,299.93L498.06,300.09L498.49,300.21L498.57,300.44L499.31,300.44L502.53,300.30L507.34,302.00L507.48,300.08L507.48,300.05L507.33,299.71L502.90,291.49L502.60,288.53L503.32,284.74L504.89,281.88L505.20,281.29L505.36,281.00Z " data-iso="CMR" data-name="Cameroon" data-pop="18879301.0"/><path d="M541.13,289.59L536.22,289.19L525.10,292.96L516.33,290.69L514.91,295.02L514.95,295.73L514.99,296.36L512.25,309.14L507.58,315.93L503.52,324.95L502.23,325.48L497.90,324.58L497.85,324.70L497.81,324.76L497.10,325.06L496.02,328.57L495.18,328.72L495.27,328.89L495.49,329.20L497.62,328.99L497.82,329.09L508.18,329.22L511.64,337.08L516.45,336.73L518.09,333.28L520.98,332.92L520.99,334.14L524.60,334.27L524.59,341.97L526.03,345.29L526.02,348.16L530.99,347.06L531.11,346.99L531.22,347.01L532.20,348.77L539.49,350.94L540.85,349.52L542.27,351.98L548.74,355.92L548.87,351.58L546.61,352.27L544.74,349.94L545.51,343.27L544.85,341.28L551.62,337.51L552.16,337.41L552.07,337.09L550.26,332.85L548.00,325.94L548.21,324.21L548.21,324.04L548.14,323.50L547.66,321.31L547.70,319.05L547.06,318.00L547.06,317.86L546.78,317.73L546.58,316.89L547.43,315.99L548.70,313.19L548.82,313.11L548.83,313.00L549.90,305.75L553.03,302.14L553.74,300.05L552.36,299.39L552.84,295.79L552.67,295.69L552.60,295.54L549.65,292.70L546.78,292.13L542.13,290.16L542.02,289.91L541.13,289.59Z " data-iso="COD" data-name="Congo (Kinshasa)" data-pop="68692542.0"/><path d="M514.78,295.62L510.90,295.24L508.66,295.79L507.69,299.56L507.48,300.05L507.48,300.08L507.34,302.00L502.53,300.30L499.31,300.44L498.57,300.44L498.55,300.68L501.49,303.43L500.40,307.47L500.97,309.12L501.36,316.56L500.72,317.04L497.03,315.05L493.35,317.42L494.35,320.12L491.87,322.14L492.59,322.90L493.86,324.45L493.99,325.13L494.55,325.94L494.60,326.02L495.49,325.17L495.73,324.64L497.78,324.65L497.85,324.70L497.90,324.58L502.23,325.48L503.52,324.95L507.58,315.93L512.25,309.14L514.99,296.36L514.95,295.73L514.78,295.62Z " data-iso="COG" data-name="Congo (Brazzaville)" data-pop="4012809.0"/><path d="M219.59,277.23L219.94,279.82L217.71,282.34L218.00,282.67L219.25,286.75L219.18,291.75L219.84,294.18L215.98,299.19L214.11,302.71L214.20,302.96L220.44,307.27L224.65,308.29L225.21,308.53L225.39,308.30L234.18,316.82L236.75,316.09L241.39,317.80L240.03,321.96L241.64,323.01L241.80,323.28L241.85,323.15L243.38,312.42L241.30,308.09L242.40,304.37L242.01,302.05L246.98,302.01L249.73,300.71L250.59,303.95L251.17,303.79L251.11,303.55L249.09,298.55L249.79,296.29L248.35,291.49L249.77,286.64L243.66,286.29L241.70,283.38L234.55,281.53L234.85,278.56L233.81,270.68L236.69,266.71L238.88,265.78L239.00,265.58L239.17,264.08L236.34,265.07L232.63,267.80L229.90,267.91L229.33,269.53L226.97,269.32L225.01,273.40L220.84,279.06L219.67,277.31L219.59,277.23Z " data-iso="COL" data-name="Colombia" data-pop="45644023.0"/><path d="M194.42,268.71L193.99,271.01L196.39,272.02L202.35,278.93L202.54,279.33L203.14,276.18L202.59,275.12L203.82,273.95L203.69,273.81L202.21,272.29L201.32,270.77L200.91,269.30L200.84,269.16L199.94,269.81L197.83,268.70L194.43,268.64L194.42,268.71Z " data-iso="CRI" data-name="Costa Rica" data-pop="4253877.0"/><path d="M211.35,225.27L204.42,227.06L202.60,229.34L211.44,227.32L210.88,228.73L214.78,229.22L220.34,232.84L223.96,234.32L222.89,237.12L232.71,236.34L228.73,232.64L225.26,231.39L220.41,228.13L211.35,225.27Z " data-iso="CUB" data-name="Cuba" data-pop="11451652.0"/><path d="M556.06,182.22L554.62,181.52L553.10,181.32L552.69,182.15L552.52,182.11L554.59,182.22L555.37,182.66L556.30,182.49L556.06,182.22Z " data-iso="CYN" data-name="N. Cyprus" data-pop="265100.0"/><path d="M552.34,182.07L552.08,183.78L552.64,183.98L556.37,182.56L556.30,182.49L555.37,182.66L554.59,182.22L552.52,182.11L552.34,182.07Z " data-iso="CYP" data-name="Cyprus" data-pop="531640.0"/><path d="M497.36,126.74L491.40,128.28L490.71,129.01L492.33,131.96L495.04,133.74L495.18,133.91L495.25,133.94L497.63,134.24L498.28,133.16L503.69,134.42L503.77,134.50L503.83,134.23L506.07,133.35L506.72,132.88L508.55,131.34L508.62,131.33L508.60,131.23L507.65,129.98L503.35,128.20L502.75,129.24L498.64,126.60L497.62,126.67L497.39,126.68L497.36,126.74Z " data-iso="CZE" data-name="Czech Rep." data-pop="10211904.0"/><path d="M494.56,115.84L493.98,115.52L494.63,116.42L494.95,116.38L495.07,116.39L495.01,116.23L495.04,116.12L494.56,115.84Z M480.33,113.28L479.37,117.83L476.49,118.24L476.62,118.39L473.46,123.58L474.15,124.51L473.82,126.52L473.68,127.05L473.72,127.11L474.35,127.58L474.09,129.16L474.08,129.22L474.06,129.31L474.07,129.52L474.77,131.33L474.76,131.53L474.86,131.51L479.71,133.50L478.29,137.95L478.43,138.00L478.66,138.08L480.38,137.95L481.47,137.63L483.18,137.98L483.67,138.24L483.74,138.21L488.55,138.59L490.97,137.60L493.25,138.40L495.15,133.98L495.18,133.91L495.04,133.74L492.33,131.96L490.71,129.01L491.40,128.28L497.36,126.74L497.39,126.68L497.40,126.63L496.60,123.34L496.94,122.48L495.22,116.87L495.20,116.86L491.81,114.56L490.61,114.37L483.11,113.23L483.09,113.17L481.64,113.10L480.89,112.93L480.28,112.90L480.33,113.28Z " data-iso="DEU" data-name="Germany" data-pop="82329758.0"/><path d="M589.93,266.84L590.21,265.39L590.60,264.60L589.67,262.92L589.62,262.75L588.59,263.77L588.30,263.94L587.48,263.51L587.39,263.61L587.11,264.12L585.82,268.93L586.06,269.02L589.03,268.87L589.27,268.86L589.63,268.17L589.95,267.55L590.20,267.07L589.93,266.84Z " data-iso="DJI" data-name="Djibouti" data-pop="516055.0"/><path d="M490.30,109.94L489.31,108.83L487.06,110.05L488.67,113.34L490.30,109.94Z M480.28,112.90L480.89,112.93L481.64,113.10L483.09,113.17L482.99,112.82L485.66,107.48L484.15,105.89L480.24,112.63L480.28,112.90Z " data-iso="DNK" data-name="Denmark" data-pop="5500510.0"/><path d="M239.58,243.78L248.94,243.00L250.05,241.61L246.70,239.45L245.55,237.80L240.19,237.58L240.05,237.64L238.98,241.61L239.42,243.66L239.58,243.78Z " data-iso="DOM" data-name="Dominican Rep." data-pop="9650054.0"/><path d="M480.99,175.87L468.45,175.92L460.36,177.54L451.69,182.42L451.10,182.35L453.81,193.18L447.44,194.56L445.81,197.41L441.91,200.48L438.33,201.38L431.81,205.40L431.74,208.24L431.72,209.12L431.71,209.72L431.69,210.45L432.25,210.85L438.90,215.62L439.46,216.02L442.43,218.18L443.10,218.69L444.01,219.37L467.25,237.38L469.41,239.91L470.37,239.70L471.03,239.55L478.70,234.94L480.17,233.49L491.99,225.09L493.52,224.00L493.22,223.36L489.59,220.28L485.77,214.83L485.37,200.05L485.65,199.87L485.45,199.02L479.43,186.92L481.69,182.42L481.43,179.85L482.28,175.78L480.99,175.87Z " data-iso="DZA" data-name="Algeria" data-pop="34178188.0"/><path d="M214.29,303.53L210.39,305.35L210.58,306.69L208.07,311.63L208.13,316.54L209.86,317.82L211.51,317.02L209.85,320.20L209.78,320.25L209.46,323.17L214.94,324.44L217.12,319.03L220.97,317.30L224.35,313.62L225.32,311.55L225.03,308.66L225.21,308.53L224.65,308.29L220.44,307.27L214.20,302.96L214.29,303.53Z " data-iso="ECU" data-name="Ecuador" data-pop="14573101.0"/><path d="M558.10,196.00L553.33,196.73L548.91,194.93L544.24,197.36L537.70,195.74L531.71,195.18L531.46,194.74L530.52,200.22L531.53,203.63L532.86,228.66L532.89,229.46L534.05,229.46L549.03,229.46L552.36,229.46L568.76,229.46L568.75,229.39L565.00,226.05L565.01,222.49L563.10,220.56L558.84,212.74L557.27,208.25L554.75,205.05L553.51,200.96L556.19,205.84L557.86,207.71L560.68,202.73L560.83,202.57L559.88,200.00L559.42,199.09L558.65,197.11L558.34,196.35L558.21,196.04L558.16,195.94L558.10,196.00Z " data-iso="EGY" data-name="Egypt" data-pop="83082869.0"/><path d="M569.20,257.21L569.26,257.20L572.35,257.61L573.27,255.08L575.23,256.61L579.04,256.34L582.20,257.61L587.11,263.24L587.39,263.61L587.48,263.51L588.30,263.94L588.59,263.77L589.62,262.75L589.50,262.33L581.66,254.97L578.10,252.64L575.94,245.85L574.90,243.78L571.56,246.99L570.18,247.31L569.06,256.18L569.20,257.21Z " data-iso="ERI" data-name="Eritrea" data-pop="5647168.0"/><path d="M432.78,157.92L437.71,157.89L437.87,165.05L436.30,165.97L436.21,174.91L436.88,174.80L442.14,178.29L444.95,176.56L449.50,176.57L454.85,173.51L457.99,169.02L457.33,165.27L459.58,161.90L466.04,158.54L466.67,156.40L466.59,156.18L464.78,156.48L464.24,156.32L462.78,156.09L462.35,155.92L462.27,155.95L462.01,156.09L461.53,155.76L461.57,155.60L461.34,155.26L456.71,154.78L452.52,152.72L452.42,152.74L441.18,151.88L432.67,152.98L431.80,153.55L432.57,157.97L432.78,157.92Z " data-iso="ESP" data-name="Spain" data-pop="40525002.0"/><path d="M520.00,103.00L521.93,102.37L523.78,103.01L527.89,104.15L527.95,104.14L527.94,104.06L528.30,103.24L527.53,100.16L528.62,97.70L528.60,97.75L522.09,97.58L517.29,98.64L520.00,102.87L520.00,103.00Z " data-iso="EST" data-name="Estonia" data-pop="1299371.0"/><path d="M569.20,257.21L569.00,258.17L564.73,269.00L563.66,269.29L562.28,274.17L562.28,274.36L562.28,274.51L559.13,279.76L559.35,280.21L566.19,288.48L566.24,288.54L566.23,288.66L568.48,292.07L572.12,292.96L575.02,295.13L579.37,295.81L583.25,292.90L586.27,293.95L586.72,293.95L586.81,293.76L590.51,291.57L596.00,290.66L604.45,280.44L605.18,279.59L604.13,279.59L591.20,274.65L590.34,273.26L589.23,269.00L589.27,268.86L589.03,268.87L586.06,269.02L585.82,268.93L587.11,264.12L587.39,263.61L587.11,263.24L582.20,257.61L579.04,256.34L575.23,256.61L573.27,255.08L572.35,257.61L569.26,257.20L569.20,257.21Z " data-iso="ETH" data-name="Ethiopia" data-pop="85237338.0"/><path d="M505.89,67.58L506.55,67.75L512.66,70.33L514.90,74.39L514.36,75.72L515.81,77.51L516.00,77.49L518.56,78.32L518.80,79.58L512.51,85.36L510.65,85.70L511.14,92.58L515.81,96.62L516.85,96.06L527.43,94.28L527.51,94.27L534.33,88.51L534.39,85.69L531.33,84.16L529.46,79.90L529.61,76.83L527.08,74.27L524.91,69.66L525.31,67.66L525.45,67.62L525.26,67.50L525.46,65.66L522.31,64.48L516.25,68.92L511.81,68.68L508.12,66.87L506.00,67.48L505.89,67.58Z " data-iso="FIN" data-name="Finland" data-pop="5250275.0"/><path d="M299.63,491.04L298.34,493.29L299.19,494.60L301.58,493.08L299.63,491.04Z " data-iso="FLK" data-name="Falkland Is." data-pop="3140.0"/><path d="M290.64,289.02L289.69,290.25L289.07,299.81L289.03,299.85L289.11,299.89L291.75,299.91L294.32,300.26L298.26,293.65L298.25,293.52L294.92,289.32L290.86,288.83L290.64,289.02Z M484.19,154.85L481.69,156.93L483.72,159.63L484.19,154.85Z M464.12,125.96L462.69,126.22L461.74,128.63L458.05,130.67L457.10,132.07L452.52,130.73L453.63,134.35L444.67,134.70L446.40,137.11L452.12,138.99L453.71,142.35L454.08,148.27L452.98,152.61L452.52,152.72L456.71,154.78L461.34,155.26L461.57,155.60L461.65,155.50L461.96,155.46L462.36,155.56L462.37,155.84L462.35,155.92L462.78,156.09L464.24,156.32L464.78,156.48L466.59,156.18L466.55,156.07L466.10,154.74L469.21,152.38L473.46,153.53L475.98,153.46L477.87,151.70L478.19,151.57L478.29,151.43L478.35,151.47L478.36,151.51L478.51,151.45L478.13,150.17L476.99,149.64L476.76,144.04L476.97,143.84L476.92,143.72L475.70,142.04L474.37,143.06L478.10,138.16L478.43,138.00L478.29,137.95L479.71,133.50L474.86,131.51L474.76,131.53L474.58,131.45L474.15,131.42L474.03,131.53L473.34,131.35L473.25,131.24L473.03,131.23L470.68,129.17L469.37,129.83L464.33,125.86L464.12,125.96Z " data-iso="FRA" data-name="France" data-pop="64057792.0"/><path d="M498.49,300.21L498.06,300.09L493.21,299.93L492.54,300.18L492.50,300.41L492.51,301.24L492.53,304.58L487.15,304.47L487.10,304.61L487.78,307.99L485.16,310.61L487.40,316.78L491.57,321.81L491.87,322.14L494.35,320.12L493.35,317.42L497.03,315.05L500.72,317.04L501.36,316.56L500.97,309.12L500.40,307.47L501.49,303.43L498.55,300.68L498.57,300.44L498.49,300.21Z " data-iso="GAB" data-name="Gabon" data-pop="1514993.0"/><path d="M558.61,196.04L558.60,195.79L558.90,194.99L558.67,195.36L558.16,195.94L558.21,196.04L558.34,196.35L558.61,196.04Z " data-iso="PSE" data-name="Palestine" data-pop="1604238.0"/><path d="M438.65,112.27L436.41,114.22L436.86,115.23L441.16,115.65L441.42,115.75L441.52,111.85L438.75,112.39L438.65,112.27Z M449.60,100.88L443.67,102.35L444.26,102.89L443.03,111.27L444.96,108.95L444.30,112.62L448.55,112.70L449.44,117.61L446.66,119.64L446.30,121.81L443.48,123.17L448.72,124.85L442.50,128.96L447.61,128.81L453.74,126.55L459.39,126.59L461.22,125.66L460.96,123.29L461.95,120.19L456.77,117.00L457.14,115.68L450.35,107.61L452.75,103.86L446.91,103.97L449.60,100.88Z " data-iso="GBR" data-name="United Kingdom" data-pop="61113205.0"/><path d="M588.54,158.05L586.27,156.02L574.18,153.39L571.38,152.27L569.57,152.68L570.23,153.06L573.13,154.77L573.99,155.09L575.36,158.76L574.92,159.42L575.85,159.73L580.60,160.82L580.61,160.88L580.75,160.85L582.78,160.51L584.86,160.28L584.92,160.23L585.46,159.76L589.38,160.95L589.66,160.24L588.56,158.22L588.60,158.10L588.54,158.05Z " data-iso="GEO" data-name="Georgia" data-pop="4615807.0"/><path d="M456.63,268.26L449.10,268.87L448.71,270.62L449.23,274.10L449.26,274.29L449.29,274.47L449.55,279.29L447.57,284.82L448.95,289.13L448.24,289.83L448.03,289.84L447.95,289.98L448.05,290.01L451.38,291.15L460.48,287.41L460.96,286.55L461.21,286.41L459.38,284.08L459.16,274.59L457.53,268.66L457.34,268.45L456.63,268.26Z " data-iso="GHA" data-name="Ghana" data-pop="23832495.0"/><path d="M422.44,263.79L419.14,263.94L416.48,262.91L415.49,262.87L415.48,263.16L414.24,266.53L412.21,267.41L411.38,269.07L411.35,269.45L413.24,271.55L414.02,271.98L416.65,275.73L416.68,275.83L419.37,272.80L420.96,272.46L424.48,274.63L425.68,277.81L425.92,277.85L426.07,277.84L428.27,278.35L428.71,280.64L431.32,281.06L431.43,281.16L431.60,281.01L433.10,276.77L433.64,275.72L432.93,271.99L433.01,271.85L433.06,271.61L430.51,265.56L423.03,265.27L422.56,263.93L422.65,263.84L422.44,263.79Z " data-iso="GIN" data-name="Guinea" data-pop="10057975.0"/><path d="M406.96,260.07L407.50,260.48L406.21,261.17L406.22,261.48L409.14,260.54L415.17,260.51L414.26,259.79L406.87,259.60L406.96,260.07Z " data-iso="GMB" data-name="Gambia" data-pop="1782893.0"/><path d="M415.49,262.87L414.47,262.87L411.00,262.85L409.02,263.72L406.34,264.01L407.17,264.55L408.07,265.58L410.22,267.08L411.23,268.82L411.38,269.07L412.21,267.41L414.24,266.53L415.48,263.16L415.49,262.87Z " data-iso="GNB" data-name="Guinea Bissau" data-pop="1533964.0"/><path d="M492.50,300.41L491.79,300.41L488.34,300.41L488.00,300.25L487.79,299.93L487.72,300.77L487.12,302.65L486.85,303.03L487.17,304.39L487.15,304.47L492.53,304.58L492.51,301.24L492.50,300.41Z " data-iso="GNQ" data-name="Eq. Guinea" data-pop="633441.0"/><path d="M531.90,158.72L531.55,158.62L531.49,159.89L529.40,160.32L522.71,160.11L522.40,160.07L522.24,160.07L519.29,161.44L517.39,161.78L517.01,161.80L517.00,162.07L516.33,164.41L515.39,165.00L514.56,165.86L514.86,166.11L519.12,170.82L518.47,172.58L522.49,177.10L523.83,175.50L524.15,172.12L525.72,172.39L522.19,168.79L523.13,168.58L521.83,163.06L523.94,164.51L526.63,163.97L524.97,162.16L531.35,162.09L531.44,162.24L532.24,161.28L532.09,160.42L532.16,158.79L531.90,158.72Z " data-iso="GRC" data-name="Greece" data-pop="10737428.0"/><path d="M334.97,64.84L331.60,63.72L332.21,66.91L334.97,64.84Z M398.22,28.32L382.74,28.46L366.78,29.83L374.42,30.02L367.46,31.19L365.37,32.18L355.11,30.70L352.60,31.60L350.92,31.04L339.51,32.57L332.67,32.49L331.60,33.70L319.49,35.30L323.12,36.44L319.44,38.46L311.45,39.55L302.11,41.29L308.25,43.24L314.97,42.98L314.31,43.56L303.68,44.31L309.21,45.56L308.53,47.08L318.17,46.66L319.58,46.29L329.40,48.64L328.49,49.07L332.50,51.41L332.14,55.85L333.65,55.90L330.70,60.42L332.98,60.54L335.54,59.04L339.43,61.33L337.80,63.16L331.70,62.70L340.39,65.20L338.01,67.05L332.74,68.87L331.83,74.26L328.63,76.42L334.70,74.26L329.66,76.98L334.01,79.40L334.63,80.99L333.09,88.23L336.38,93.40L342.24,92.46L342.54,94.26L346.50,96.04L348.61,95.82L351.97,90.57L352.38,87.63L357.33,84.65L359.55,81.66L357.96,80.44L360.38,78.39L364.22,78.07L367.36,75.82L367.54,77.56L373.30,76.04L381.44,70.76L381.57,69.84L385.24,70.24L389.50,69.63L397.58,67.62L400.88,65.92L405.83,64.29L394.87,64.07L390.37,63.29L392.18,61.70L398.62,60.89L401.52,61.25L403.58,63.32L407.70,62.90L407.77,61.07L400.31,57.57L397.20,56.63L400.49,56.02L404.81,57.77L407.42,57.55L407.76,56.04L403.81,54.65L403.43,53.59L407.60,55.02L411.48,54.37L411.96,53.35L408.05,52.32L414.16,52.14L410.82,49.87L414.69,49.42L413.66,46.65L415.26,44.89L410.91,42.37L413.01,40.34L417.55,38.63L415.76,36.42L422.43,36.12L427.78,34.17L433.36,32.77L425.89,32.17L421.28,33.12L416.65,32.80L410.48,34.36L414.43,32.49L413.80,31.61L409.38,32.38L406.49,31.78L397.64,31.41L409.31,31.12L412.37,30.00L405.37,29.32L393.68,29.35L405.39,29.05L398.22,28.32Z " data-iso="GRL" data-name="Greenland" data-pop="57600.0"/><path d="M185.81,244.46L180.80,245.16L180.14,247.47L181.54,250.71L177.84,250.71L175.69,256.17L176.84,257.31L178.79,258.39L180.44,258.38L180.82,258.48L181.94,259.07L182.14,258.47L184.36,256.60L184.42,256.64L184.51,256.48L185.13,255.73L188.39,251.94L187.37,251.14L187.50,251.50L187.26,251.81L186.59,251.43L186.43,251.36L185.76,251.32L185.40,251.36L186.31,245.33L186.45,244.46L185.81,244.46Z " data-iso="GTM" data-name="Guatemala" data-pop="13276517.0"/><path d="M281.26,288.28L280.90,285.76L278.98,283.92L277.01,284.93L277.48,283.02L276.55,280.53L273.06,277.68L272.95,277.62L273.42,278.69L270.65,281.24L271.82,282.83L270.56,283.98L269.69,288.74L270.32,289.58L270.60,289.51L273.89,294.11L272.94,295.34L273.65,302.02L276.98,303.57L280.39,301.34L283.13,301.27L283.26,301.22L283.14,301.10L280.79,296.10L279.87,296.12L279.00,290.94L281.29,288.34L281.26,288.28Z " data-iso="GUY" data-name="Guyana" data-pop="772298.0"/><path d="M801.79,227.50L801.34,227.42L801.27,227.47L801.06,227.61L801.05,227.71L800.76,227.91L801.80,227.52L801.79,227.50Z " data-iso="HKG" data-name="Hong Kong" data-pop="7055071.0"/><path d="M188.39,251.94L185.13,255.73L184.51,256.48L184.42,256.64L184.50,256.65L187.97,258.17L189.00,258.52L188.80,260.28L188.93,260.36L189.44,260.33L189.78,260.44L190.17,261.40L190.12,261.78L192.15,260.58L192.23,258.97L202.43,254.63L203.59,254.57L203.40,254.40L195.96,250.96L192.44,251.82L188.68,252.04L188.39,251.94Z " data-iso="HND" data-name="Honduras" data-pop="7792854.0"/><path d="M509.68,156.17L509.56,156.00L509.44,155.85L509.42,155.72L509.17,155.63L507.35,154.69L505.89,154.07L509.14,155.84L509.68,156.17Z M503.10,141.83L502.85,141.74L500.74,142.87L500.80,144.16L495.19,145.28L495.03,145.40L503.46,152.24L504.92,152.77L506.80,154.30L501.35,147.92L502.45,146.84L510.24,147.57L510.42,147.56L510.38,147.43L511.05,146.12L510.27,145.69L509.85,143.90L509.85,143.82L509.84,143.82L507.29,144.39L506.85,144.32L503.26,141.88L503.10,141.83Z " data-iso="HRV" data-name="Croatia" data-pop="4489409.0"/><path d="M239.42,243.66L238.98,241.61L240.05,237.64L239.87,237.71L235.03,237.62L237.14,238.63L237.65,241.80L231.35,242.19L233.20,243.36L239.19,243.37L239.42,243.66Z " data-iso="HTI" data-name="Haiti" data-pop="9035536.0"/><path d="M517.90,135.21L513.84,134.67L508.83,137.32L504.53,136.54L504.45,136.56L504.31,136.71L503.29,138.20L502.66,138.79L502.26,140.17L501.85,140.55L502.37,140.57L502.55,141.05L503.07,141.75L503.10,141.83L503.26,141.88L506.85,144.32L507.29,144.39L509.84,143.82L509.85,143.82L509.91,143.82L510.50,143.62L511.33,143.27L513.40,143.14L513.50,143.20L513.60,143.11L515.66,142.73L517.90,138.31L520.09,136.85L520.15,136.77L520.09,136.72L519.08,135.87L518.60,135.69L518.21,135.14L517.95,135.17L517.90,135.21Z " data-iso="HUN" data-name="Hungary" data-pop="9905596.0"/><path d="M826.42,341.63L823.39,341.87L826.55,344.59L828.61,344.26L826.42,341.63Z M841.55,340.18L840.96,340.52L840.75,340.71L840.52,340.85L840.11,340.98L839.97,341.42L839.53,341.82L838.80,341.52L838.61,341.63L837.56,344.15L839.72,344.40L841.68,342.32L841.92,342.13L842.12,340.97L842.30,340.73L841.66,340.09L841.55,340.18Z M835.18,338.91L835.95,337.90L830.86,338.69L828.60,337.58L826.00,339.21L835.18,338.91Z M788.37,329.60L784.39,329.27L782.40,332.37L795.61,336.11L797.85,337.26L805.96,337.75L809.92,339.47L808.64,335.41L805.38,335.50L804.10,332.89L797.89,332.78L792.02,332.18L788.37,329.60Z M857.84,318.38L855.70,318.29L852.01,319.66L858.07,320.03L860.96,321.93L861.13,320.77L857.84,318.38Z M784.78,314.11L783.37,313.60L781.95,315.45L783.95,315.94L784.56,318.24L785.72,316.95L784.78,314.11Z M890.95,340.72L891.51,332.58L891.44,331.76L892.48,317.47L891.79,317.46L882.80,313.45L878.37,316.27L875.11,320.20L871.49,315.99L871.30,311.73L866.14,309.42L862.74,311.13L865.78,316.16L870.04,317.52L865.79,317.74L867.21,322.25L869.87,320.58L870.62,321.63L883.04,327.67L884.35,332.92L885.66,335.25L884.78,337.41L888.43,336.80L890.81,340.60L890.95,340.72Z M842.96,304.60L842.85,302.53L837.99,304.84L831.20,303.41L828.06,305.68L827.22,310.88L826.36,311.39L824.36,320.59L826.45,322.56L826.36,323.95L830.82,317.69L830.50,320.85L833.40,325.46L836.42,323.83L834.62,320.92L833.58,314.20L838.36,311.59L836.80,310.85L831.40,312.93L828.62,311.25L829.67,306.27L841.55,306.47L842.96,304.60Z M851.74,305.12L851.20,306.40L855.36,307.38L853.23,303.15L851.74,305.12Z M820.28,293.44L820.64,293.86L821.20,293.68L821.18,293.55L821.07,293.21L820.64,293.28L820.34,293.27L820.28,293.44Z M795.05,301.29L793.70,306.25L796.95,312.70L797.61,317.75L799.75,319.12L802.13,318.47L810.55,320.58L811.03,322.83L816.18,319.31L817.20,316.36L816.52,314.27L820.32,310.13L820.34,306.94L823.66,303.44L819.93,295.07L820.09,293.29L820.11,293.26L814.27,293.18L811.78,301.39L808.37,303.65L804.63,302.59L798.91,305.02L797.13,303.74L795.82,300.91L795.05,301.29Z M754.97,289.48L751.17,288.18L751.00,289.29L759.29,300.00L762.42,302.82L767.11,311.10L768.75,315.06L773.26,322.32L777.61,326.29L783.63,328.42L784.02,324.41L782.40,316.57L781.14,316.79L778.69,311.80L776.77,310.21L777.50,307.12L775.63,306.40L771.64,302.36L765.75,297.48L757.92,289.46L754.97,289.48Z " data-iso="IDN" data-name="Indonesia" data-pop="240271522.0"/><path d="M696.76,200.10L694.84,204.75L696.11,205.68L705.49,210.15L708.25,209.94L711.40,212.03L717.46,213.52L720.16,211.74L719.48,208.35L719.42,208.23L720.71,207.55L721.44,207.86L722.00,210.17L722.21,210.34L724.78,212.49L730.87,212.19L731.73,210.43L730.03,208.75L730.27,208.75L732.81,207.55L734.17,205.62L741.74,202.68L743.77,206.42L746.47,207.03L746.58,207.10L745.79,209.16L741.33,212.93L740.62,217.89L741.20,218.49L739.89,222.61L738.16,222.31L738.29,228.71L736.93,229.41L736.78,229.53L736.70,229.27L734.73,223.40L731.95,224.51L731.90,221.90L734.55,219.21L732.30,218.09L726.27,217.32L723.21,214.05L720.80,215.48L722.38,217.99L721.46,219.70L723.88,222.25L723.68,223.43L726.09,229.11L726.11,229.67L723.54,230.75L723.48,228.95L719.95,232.19L718.71,236.44L716.41,237.00L711.79,243.55L708.26,247.04L707.84,249.23L705.64,249.66L702.75,251.71L703.45,260.41L702.73,271.28L701.36,271.34L700.44,274.82L694.31,278.13L692.13,274.39L689.15,266.35L687.15,263.26L684.94,256.67L681.59,250.77L677.69,237.23L676.30,228.87L675.69,231.13L673.40,233.50L671.41,233.97L666.25,229.48L665.87,227.95L668.95,227.39L669.65,225.53L667.54,226.66L662.43,223.24L662.29,222.78L663.98,221.15L669.16,220.76L670.53,219.79L669.51,217.93L664.67,212.18L667.47,208.11L670.23,208.35L675.82,199.89L676.98,196.62L677.34,191.84L673.85,189.04L673.57,183.57L677.88,184.51L681.26,182.50L681.28,182.33L681.57,182.11L681.88,181.88L682.88,181.13L683.13,180.94L683.17,180.98L683.96,181.82L685.41,184.14L687.52,185.63L687.08,186.00L689.65,191.47L687.25,191.54L689.17,195.53L696.63,199.84L696.76,200.10Z " data-iso="IND" data-name="India" data-pop="1166079217.0"/><path d="M438.78,112.12L435.89,112.09L435.92,114.24L431.49,117.20L432.16,118.42L429.89,123.45L432.64,124.48L440.32,121.58L441.51,119.04L441.27,115.77L441.16,115.65L436.86,115.23L436.41,114.22L438.65,112.27L438.78,112.12Z " data-iso="IRL" data-name="Ireland" data-pop="4203200.0"/><path d="M585.33,166.08L585.23,166.07L583.27,166.99L586.52,174.99L586.52,175.04L586.53,175.07L588.96,179.13L591.25,179.78L591.50,182.27L590.16,186.58L598.05,194.24L597.97,197.09L600.99,200.83L601.12,200.78L605.38,199.98L610.68,208.21L617.70,212.47L621.33,213.07L623.39,211.56L628.38,214.50L641.77,217.97L641.93,217.94L642.14,214.48L644.83,212.76L645.65,210.57L643.99,207.88L641.18,205.92L638.05,201.90L637.37,201.20L637.43,201.11L638.00,200.23L638.92,195.72L636.20,194.72L633.83,185.97L634.87,185.17L635.20,180.74L635.10,180.50L635.00,180.36L633.99,176.83L631.75,176.85L628.32,173.96L622.10,171.65L619.14,171.29L612.76,174.32L612.97,174.90L608.22,176.91L602.57,175.02L597.64,170.57L597.61,170.41L595.48,166.97L594.38,165.96L590.71,168.74L590.53,168.73L590.03,168.71L589.63,168.87L589.47,168.83L588.90,168.73L587.58,168.38L585.40,166.15L585.33,166.08Z " data-iso="IRN" data-name="Iran" data-pop="66429284.0"/><path d="M586.41,174.96L583.81,174.75L580.58,174.26L579.88,175.09L579.61,175.16L579.61,175.21L577.17,177.29L577.15,181.69L571.61,188.06L570.84,188.57L571.14,189.36L572.02,191.73L572.80,192.62L572.41,193.05L573.08,193.17L580.57,196.30L583.97,198.91L594.88,204.06L595.39,203.94L595.80,203.35L596.84,200.69L597.88,200.34L599.30,200.75L599.30,200.65L600.42,200.85L600.72,200.91L600.99,200.83L597.97,197.09L598.05,194.24L590.16,186.58L591.50,182.27L591.25,179.78L588.96,179.13L586.53,175.07L586.52,175.04L586.41,174.96Z " data-iso="IRQ" data-name="Iraq" data-pop="28945657.0"/><path d="M420.20,76.19L418.00,75.41L413.91,77.43L408.55,76.80L407.68,77.98L405.28,77.76L403.75,75.57L399.55,78.10L404.71,78.63L404.41,79.88L400.77,80.58L404.03,81.55L401.92,83.59L405.73,83.35L407.91,84.58L411.65,85.06L421.85,81.86L424.54,79.92L422.07,76.75L420.20,76.19Z " data-iso="ISL" data-name="Iceland" data-pop="306694.0"/><path d="M562.37,190.69L562.46,189.59L562.55,189.42L562.30,188.57L562.33,188.35L562.26,188.41L561.35,189.48L561.12,189.63L560.24,189.61L560.18,190.02L559.65,192.79L559.38,193.87L558.91,194.97L558.90,194.99L558.60,195.79L558.61,196.04L558.34,196.35L558.65,197.11L559.42,199.09L559.88,200.00L560.83,202.57L561.01,202.29L561.28,199.99L561.29,198.81L561.76,195.93L561.79,195.37L561.67,195.36L560.51,194.67L561.58,192.06L561.77,192.08L561.75,191.27L561.85,191.05L562.19,190.88L562.35,190.86L562.37,190.69Z " data-iso="ISR" data-name="Israel" data-pop="7233701.0"/><path d="M502.23,171.18L493.41,172.19L493.56,173.15L500.85,176.65L502.23,171.18Z M484.86,161.69L483.83,160.55L480.93,161.60L481.60,167.66L485.00,167.13L484.86,161.69Z M486.32,140.55L486.21,141.00L483.60,142.07L482.52,144.12L480.85,142.17L477.07,143.92L476.97,143.84L476.76,144.04L476.99,149.64L478.13,150.17L478.51,151.45L479.18,151.32L481.99,149.13L486.20,151.15L487.08,154.28L494.60,160.40L502.23,164.86L503.91,168.61L502.71,172.19L503.66,172.18L506.40,167.04L504.98,164.34L505.92,163.00L509.81,165.47L508.52,162.49L502.51,159.44L503.26,158.37L497.47,155.91L491.86,149.11L491.59,145.53L495.74,144.89L495.57,145.03L495.17,143.65L494.54,142.46L495.29,141.96L495.33,141.75L494.75,141.63L490.99,140.30L491.01,139.79L486.40,140.58L486.32,140.55Z " data-iso="ITA" data-name="Italy" data-pop="58126212.0"/><path d="M222.90,242.16L220.36,242.20L220.60,243.63L225.87,244.11L222.90,242.16Z " data-iso="JAM" data-name="Jamaica" data-pop="2825928.0"/><path d="M572.80,192.62L572.02,191.73L571.14,189.36L570.84,188.57L570.14,189.06L565.52,192.36L564.51,192.20L562.67,190.93L562.35,190.86L562.19,190.88L561.85,191.05L561.75,191.27L561.77,192.08L561.89,192.64L561.86,193.55L562.01,194.34L561.81,195.07L561.79,195.37L561.76,195.93L561.29,198.81L561.28,199.99L561.01,202.29L561.06,202.54L561.01,203.02L564.95,203.01L569.58,198.89L566.70,195.82L572.02,193.47L572.41,193.05L572.80,192.62Z " data-iso="JOR" data-name="Jordan" data-pop="6342948.0"/><path d="M840.52,187.74L837.01,188.75L840.26,191.27L840.34,195.63L842.45,196.53L843.87,194.68L842.19,187.92L840.52,187.74Z M848.90,185.39L845.15,186.00L844.00,188.41L849.72,188.66L848.90,185.39Z M857.15,159.94L855.79,165.26L856.35,165.35L857.33,171.94L853.83,176.37L851.66,180.27L843.55,180.72L839.70,184.90L839.27,186.40L843.04,186.89L842.77,185.50L851.47,184.10L853.88,188.16L855.00,182.51L859.57,184.17L859.97,182.41L863.07,182.19L864.15,183.08L865.15,179.69L864.42,178.92L862.02,171.44L862.47,166.22L857.15,159.94Z M859.17,150.21L851.09,145.30L850.57,145.68L853.87,152.81L851.04,155.65L854.00,159.76L852.78,156.52L856.65,155.65L861.70,157.58L862.48,154.26L864.46,154.16L864.53,152.52L859.17,150.21Z " data-iso="JPN" data-name="Japan" data-pop="127078679.0"/><path d="M682.93,181.00L682.13,181.02L681.66,180.90L680.36,180.52L680.00,180.35L680.21,180.67L680.52,181.16L681.08,182.02L681.28,182.33L681.57,182.11L681.88,181.88L682.88,181.13L683.13,180.94L682.93,181.00Z " data-iso="KAS" data-name="" data-pop="6000.0"/><path d="M593.35,142.23L598.56,139.73L603.14,140.23L604.35,142.91L603.82,145.08L605.19,145.93L600.22,145.84L597.77,149.37L601.46,153.55L605.24,154.85L605.65,158.12L605.80,158.49L610.28,156.63L614.62,160.30L615.85,160.11L615.97,160.12L615.80,159.30L613.16,147.11L627.87,149.39L631.19,152.42L638.01,152.21L639.16,151.63L643.23,154.61L643.77,157.69L645.16,157.73L646.47,160.63L651.40,162.49L652.97,159.96L657.27,156.97L657.47,156.83L657.28,156.67L657.88,155.11L664.08,155.22L664.08,154.15L679.79,155.00L683.12,156.63L683.63,157.04L683.68,156.97L683.92,153.19L680.10,147.07L684.24,145.87L686.69,146.66L685.68,144.73L685.83,140.19L692.84,139.18L691.51,135.87L694.67,132.74L694.95,132.81L694.79,132.59L692.24,130.41L691.28,131.37L688.43,130.80L680.84,126.55L673.03,126.86L663.64,118.27L659.34,115.98L659.59,114.46L654.29,117.69L651.98,117.75L651.12,116.08L644.77,115.24L643.58,112.75L639.86,111.55L636.03,112.04L635.03,113.01L625.66,115.15L619.01,115.89L619.55,118.20L622.05,118.98L619.62,119.44L621.06,124.50L622.70,126.67L616.94,127.40L614.35,125.97L610.73,125.97L607.61,127.63L597.30,123.76L594.52,123.97L588.72,127.74L589.07,130.07L585.70,128.25L584.64,134.58L586.82,137.31L589.53,137.60L593.46,142.40L593.35,142.23Z " data-iso="KAZ" data-name="Kazakhstan" data-pop="15399437.0"/><path d="M566.24,288.54L565.68,289.19L563.55,291.65L562.93,292.37L562.32,293.08L562.81,294.27L565.18,299.52L565.44,302.29L562.30,307.53L562.17,311.12L562.18,311.73L562.41,311.73L573.74,320.71L578.47,324.91L578.49,324.81L581.55,318.93L582.95,317.22L585.26,314.82L585.71,314.21L584.01,311.26L583.97,298.00L586.34,294.58L586.72,293.95L586.27,293.95L583.25,292.90L579.37,295.81L575.02,295.13L572.12,292.96L568.48,292.07L566.23,288.66L566.24,288.54Z " data-iso="KEN" data-name="Kenya" data-pop="39002772.0"/><path d="M683.12,156.63L679.79,155.00L664.08,154.15L664.08,155.22L657.88,155.11L657.28,156.67L657.47,156.83L657.54,156.76L657.37,157.98L659.49,160.72L664.98,161.88L659.42,163.92L659.35,163.98L659.37,164.04L654.89,164.94L655.24,166.52L661.48,166.32L663.89,167.66L667.50,166.76L667.67,166.79L667.90,166.75L670.22,163.07L674.48,163.57L676.57,161.21L683.75,157.25L683.63,157.04L683.12,156.63Z M660.36,165.21L659.82,164.91L659.49,164.51L660.36,165.21Z M658.98,165.45L658.46,165.44L658.34,165.32L658.98,165.45Z " data-iso="KGZ" data-name="Kyrgyzstan" data-pop="5431747.0"/><path d="M786.04,255.60L785.89,255.75L783.96,256.93L781.94,258.41L779.08,256.98L779.06,256.89L779.02,256.92L774.02,256.63L770.64,259.77L773.20,266.33L773.19,266.21L774.14,269.17L775.63,268.65L775.83,270.62L777.67,270.50L778.21,270.97L782.48,266.42L786.67,264.35L786.11,255.80L786.04,255.60Z " data-iso="KHM" data-name="Cambodia" data-pop="14494293.0"/><path d="M821.46,172.85L821.85,175.70L824.59,179.97L824.32,181.95L826.42,184.48L832.65,182.07L831.56,177.75L826.57,171.34L825.18,169.74L821.85,171.11L821.46,172.75L821.46,172.85Z " data-iso="KOR" data-name="S. Korea" data-pop="48508972.0"/><path d="M518.24,156.71L516.65,153.84L515.40,153.46L515.06,154.67L514.72,154.77L514.36,154.88L513.92,155.01L513.86,155.11L514.02,155.73L514.01,155.77L514.12,155.85L514.87,156.61L515.40,157.10L515.64,158.00L515.60,158.16L515.64,158.19L516.15,157.46L518.31,156.83L518.31,156.83L518.24,156.71Z " data-iso="KOS" data-name="Kosovo" data-pop="1804838.0"/><path d="M599.30,200.75L597.88,200.34L596.84,200.69L595.80,203.35L595.39,203.94L595.97,204.02L598.70,205.63L599.00,205.97L601.28,205.93L601.09,205.61L599.43,202.07L599.96,202.23L599.30,200.89L599.30,200.75Z " data-iso="KWT" data-name="Kuwait" data-pop="2691158.0"/><path d="M765.56,228.43L768.27,230.59L768.38,232.31L773.06,233.68L775.31,236.56L772.70,239.25L776.67,241.36L781.83,247.55L785.50,252.88L785.97,255.20L786.04,255.60L785.89,255.75L783.96,256.93L781.94,258.41L779.08,256.98L779.06,256.89L779.23,256.81L779.82,254.40L778.98,251.01L773.33,242.65L770.82,243.30L770.83,243.29L770.82,243.31L770.82,243.30L767.60,243.19L765.13,245.66L764.88,240.29L763.55,238.02L761.87,237.90L760.59,235.70L760.58,235.49L760.57,235.29L761.53,233.45L761.42,233.32L762.77,231.35L762.88,231.00L763.08,231.16L765.10,232.27L764.15,227.69L765.20,227.97L765.33,228.09L765.56,228.43Z " data-iso="LAO" data-name="Laos" data-pop="6834942.0"/><path d="M562.45,188.23L563.62,186.83L563.11,183.88L562.20,184.05L562.23,184.35L561.39,185.42L561.36,186.20L560.34,189.33L560.24,189.61L561.12,189.63L561.35,189.48L562.26,188.41L562.33,188.35L562.45,188.23Z " data-iso="LBN" data-name="Lebanon" data-pop="4017095.0"/><path d="M431.32,281.06L428.71,280.64L428.27,278.35L426.07,277.84L425.92,277.85L425.91,277.96L425.82,278.47L422.11,283.49L422.77,284.27L424.32,285.62L429.40,290.11L433.93,292.56L434.28,292.62L433.25,285.89L432.02,285.59L431.49,281.20L431.43,281.16L431.32,281.06Z " data-iso="LBR" data-name="Liberia" data-pop="3441790.0"/><path d="M531.34,194.53L522.48,190.20L516.57,192.71L515.70,198.93L514.00,199.73L508.63,196.80L504.99,196.14L502.61,192.93L498.06,190.65L491.64,189.48L491.19,189.25L491.28,192.01L487.29,195.43L487.66,197.87L486.00,199.68L485.65,199.87L485.37,200.05L485.77,214.83L489.59,220.28L493.22,223.36L493.52,224.00L495.10,224.41L498.46,225.43L499.28,226.21L502.63,225.87L502.63,225.87L503.72,225.28L505.60,224.26L512.50,228.24L528.76,237.58L530.24,238.43L530.22,237.98L530.92,236.64L533.20,236.62L532.97,231.25L532.89,229.46L532.86,228.66L531.53,203.63L530.52,200.22L531.46,194.74L531.34,194.53Z " data-iso="LBY" data-name="Libya" data-pop="6310434.0"/><path d="M483.93,139.81L483.86,139.52L483.81,139.43L483.75,139.18L483.72,139.13L483.61,139.47L483.61,139.73L483.64,139.86L483.68,139.85L483.89,139.87L483.93,139.81Z " data-iso="LIE" data-name="Liechtenstein" data-pop="34761.0"/><path d="M703.29,273.11L702.93,279.41L704.86,286.69L709.23,284.90L709.61,282.13L706.66,276.25L703.29,273.11Z " data-iso="LKA" data-name="Sri Lanka" data-pop="21324791.0"/><path d="M512.19,111.62L512.35,111.64L512.51,111.40L512.65,110.94L512.45,111.23L512.19,111.62Z M512.32,109.15L512.42,109.85L512.96,111.42L513.08,111.67L513.08,111.69L517.42,113.12L517.19,113.82L517.32,114.58L517.45,114.75L517.58,114.62L519.34,115.47L519.48,116.09L519.51,116.16L519.71,116.23L524.81,114.90L525.16,113.14L527.26,111.89L526.91,110.49L526.90,110.34L526.76,110.32L524.27,108.87L514.85,107.86L512.28,108.99L512.32,109.15Z " data-iso="LTU" data-name="Lithuania" data-pop="3555179.0"/><path d="M474.06,129.21L473.41,129.35L473.05,130.30L473.32,131.18L473.25,131.24L473.34,131.35L474.03,131.53L474.15,131.42L474.58,131.45L474.76,131.53L474.77,131.33L474.07,129.52L474.06,129.31L474.08,129.22L474.06,129.21Z " data-iso="LUX" data-name="Luxembourg" data-pop="491775.0"/><path d="M527.89,104.15L523.78,103.01L521.93,102.37L520.00,103.00L519.98,103.29L518.66,105.99L513.46,103.99L512.13,108.36L512.28,108.99L514.85,107.86L524.27,108.87L526.76,110.32L526.90,110.34L526.96,110.30L528.02,109.79L528.70,109.88L530.63,108.74L530.71,108.75L530.75,108.59L529.15,105.96L529.33,105.33L528.25,104.15L527.95,104.14L527.89,104.15Z " data-iso="LVA" data-name="Latvia" data-pop="2231503.0"/><path d="M799.69,228.74L799.73,228.72L799.86,228.65L799.86,228.65L799.78,228.56L799.69,228.58L799.67,228.67L799.67,228.74L799.69,228.74Z " data-iso="MAC" data-name="Macau" data-pop="559846.0"/><path d="M266.06,243.42L266.02,243.39L265.90,243.38L265.74,243.47L265.71,243.55L266.05,243.55L266.06,243.42Z " data-iso="MAF" data-name="St. Martin" data-pop="29820.0"/><path d="M406.20,231.53L413.36,230.60L415.97,223.16L420.08,219.50L422.55,214.70L425.00,211.44L428.28,212.02L431.47,210.94L431.32,209.12L431.72,209.12L431.74,208.24L431.81,205.40L438.33,201.38L441.91,200.48L445.81,197.41L447.44,194.56L453.81,193.18L451.10,182.35L450.51,182.28L444.98,182.14L441.56,179.63L440.39,179.90L437.86,185.84L433.29,188.56L429.12,194.54L429.00,200.30L425.91,204.51L421.94,207.42L419.06,208.19L417.32,211.94L414.33,214.49L412.00,220.54L409.79,222.82L406.47,229.81L406.20,231.53Z " data-iso="MAR" data-name="Morocco" data-pop="34859364.0"/><path d="M478.36,151.51L478.35,151.47L478.29,151.43L478.19,151.57L478.36,151.51Z " data-iso="MCO" data-name="Monaco" data-pop="32965.0"/><path d="M535.93,145.39L539.94,140.84L537.24,136.71L533.47,135.13L530.30,135.56L530.26,135.68L530.52,135.66L534.78,140.15L535.07,140.80L535.63,145.29L535.80,145.51L535.93,145.39Z " data-iso="MDA" data-name="Moldova" data-pop="4320748.0"/><path d="M609.34,352.57L608.38,351.31L606.35,356.12L604.35,356.80L603.81,360.49L592.91,366.81L591.36,370.33L591.34,373.54L592.31,377.63L591.82,380.20L588.19,390.04L588.97,392.35L588.61,395.33L589.45,397.62L593.67,399.66L600.61,392.72L607.50,373.71L609.36,363.37L611.21,361.53L610.98,358.32L609.34,352.57Z " data-iso="MDG" data-name="Madagascar" data-pop="20653556.0"/><path d="M114.30,192.26L115.52,197.80L115.30,199.20L117.88,203.95L117.94,208.21L115.54,208.45L118.78,212.48L122.32,215.39L121.72,219.24L125.87,223.68L126.65,226.27L128.60,224.13L125.55,221.04L125.89,219.15L125.02,214.62L121.91,205.01L119.42,198.87L120.05,193.86L124.81,196.45L124.21,197.84L128.76,208.62L129.08,210.90L131.54,213.80L130.64,214.96L136.03,222.21L139.55,232.61L137.77,235.24L143.31,242.63L147.51,243.90L150.61,246.66L157.26,249.87L164.02,252.06L168.47,249.46L171.18,250.77L175.61,256.09L175.69,256.17L177.84,250.71L181.54,250.71L180.14,247.47L180.80,245.16L185.81,244.46L186.45,244.46L186.49,244.15L188.69,242.20L189.39,242.10L189.47,241.95L190.55,242.82L195.36,232.50L193.40,231.34L184.46,233.00L182.41,238.95L179.34,242.20L178.59,241.51L170.26,243.17L165.58,238.98L163.35,232.66L162.80,227.20L164.56,220.86L167.06,215.96L167.27,215.21L162.02,213.64L157.81,201.62L154.17,201.58L151.58,204.28L148.15,198.59L144.81,194.33L139.54,194.70L139.18,195.91L130.86,195.93L122.24,192.20L121.23,190.97L114.32,191.58L114.30,192.26Z " data-iso="MEX" data-name="Mexico" data-pop="111211789.0"/><path d="M520.42,156.57L518.80,156.76L518.47,156.85L518.31,156.83L518.31,156.83L516.15,157.46L515.64,158.19L515.60,158.16L515.57,158.20L515.37,159.41L516.98,161.72L517.01,161.80L517.39,161.78L519.29,161.44L522.24,160.07L522.40,160.07L522.43,160.00L522.42,159.11L522.54,158.72L520.97,157.12L520.49,156.60L520.42,156.57Z " data-iso="MKD" data-name="Macedonia" data-pop="2066718.0"/><path d="M469.41,239.91L467.25,237.38L444.01,219.37L443.10,218.69L442.05,218.69L437.87,219.51L440.73,252.77L429.54,252.77L428.79,252.32L423.94,253.75L421.92,252.71L420.57,255.46L420.03,255.23L420.31,255.81L422.67,261.91L422.67,263.57L422.65,263.84L422.56,263.93L423.03,265.27L430.51,265.56L433.06,271.61L433.01,271.85L433.10,271.85L438.33,269.85L438.39,271.50L440.49,270.86L440.59,270.91L440.64,270.71L441.33,265.90L444.00,263.52L444.84,260.61L447.44,260.70L447.61,259.35L455.23,254.38L457.57,254.60L458.21,254.86L458.25,254.68L461.52,253.57L468.29,252.82L470.11,249.68L470.38,240.33L470.37,239.70L469.41,239.91Z " data-iso="MLI" data-name="Mali" data-pop="12666987.0"/><path d="M746.58,207.10L745.79,209.16L741.33,212.93L740.62,217.89L741.20,218.49L739.89,222.61L738.16,222.31L738.29,228.71L736.93,229.41L736.78,229.53L736.83,229.66L737.27,232.07L736.71,233.78L736.92,234.05L739.19,235.27L745.27,245.34L744.79,250.51L746.11,249.13L746.25,251.31L753.39,247.16L755.96,253.00L756.32,255.05L760.51,268.00L760.56,271.80L760.70,271.75L763.00,266.07L760.36,258.32L757.33,253.82L758.38,253.10L758.35,249.87L753.29,242.03L754.12,239.26L760.18,235.26L760.58,235.49L760.57,235.29L761.53,233.45L761.42,233.32L762.77,231.35L762.88,231.00L762.90,230.95L759.14,230.31L754.35,223.21L750.77,222.67L750.05,220.50L752.09,212.98L751.06,209.42L748.80,207.22L748.67,207.12L748.15,206.60L747.79,206.60L746.65,206.97L746.58,207.10Z " data-iso="MMR" data-name="Myanmar" data-pop="48137741.0"/><path d="M511.22,152.27L509.83,154.06L509.34,154.27L509.47,155.71L509.42,155.72L509.44,155.85L509.56,156.00L509.68,156.17L509.79,156.19L510.02,156.37L510.79,156.82L511.69,157.89L512.15,158.18L512.83,155.48L513.08,155.56L513.96,155.76L514.01,155.77L514.02,155.73L513.86,155.11L513.92,155.01L514.36,154.88L514.72,154.77L514.72,154.68L513.06,153.77L512.74,153.58L511.30,152.32L511.30,152.27L511.22,152.27Z " data-iso="MNE" data-name="Montenegro" data-pop="672180.0"/><path d="M773.17,130.07L765.64,128.93L761.66,131.63L757.25,132.35L752.43,131.98L745.18,128.50L738.98,129.05L733.18,127.62L731.61,125.11L721.73,122.41L720.44,126.02L722.71,129.37L721.71,129.87L713.36,129.56L708.08,127.38L701.05,129.28L698.99,131.46L696.19,132.54L696.18,132.54L696.27,132.70L697.47,134.65L707.08,140.06L709.06,143.21L708.90,145.25L713.74,146.97L719.90,148.35L722.78,149.71L730.76,154.91L737.42,155.69L754.98,158.52L758.36,156.68L765.65,156.09L767.87,154.96L770.13,150.86L770.70,147.39L773.73,147.99L775.31,145.81L778.38,145.48L781.31,141.52L784.88,140.91L787.86,141.22L779.73,136.62L775.15,137.67L773.41,130.73L773.41,130.25L773.17,130.07Z " data-iso="MNG" data-name="Mongolia" data-pop="3041142.0"/><path d="M555.60,404.22L554.92,401.25L558.88,397.88L562.97,395.99L564.33,391.11L562.79,379.43L568.51,374.36L571.65,370.97L575.93,369.07L578.97,366.90L581.86,361.51L581.37,354.54L581.94,345.90L581.79,345.53L575.62,348.92L571.68,349.90L565.45,349.50L564.77,349.51L564.36,349.50L562.86,351.78L565.35,357.81L566.70,365.19L565.00,368.23L562.46,366.22L562.01,364.73L562.48,359.64L559.95,359.73L559.20,358.33L559.08,358.23L558.41,358.48L553.92,360.24L551.99,360.88L550.26,363.57L550.29,364.06L550.27,364.63L556.98,367.45L557.89,369.82L557.05,380.46L552.28,387.93L551.84,388.30L551.84,388.49L553.43,396.34L552.97,400.82L553.01,401.08L553.07,401.13L553.28,402.00L553.21,402.24L553.34,403.10L553.28,404.25L553.54,404.23L553.99,404.33L555.26,404.29L555.59,404.28L555.60,404.22Z M563.97,351.42L563.86,351.05L563.97,351.03L563.97,351.42Z M563.74,351.07L563.44,351.09L563.48,350.96L563.74,351.07Z " data-iso="MOZ" data-name="Mozambique" data-pop="21669278.0"/><path d="M443.10,218.69L442.43,218.18L439.46,216.02L438.90,215.62L432.25,210.85L431.69,210.45L431.68,211.05L431.61,215.09L423.76,215.09L421.62,216.01L421.40,224.18L406.31,231.86L406.00,233.73L406.18,232.89L407.86,234.28L408.81,244.20L407.15,249.94L407.11,251.54L408.07,249.06L413.27,248.62L416.66,250.75L419.97,255.20L420.03,255.23L420.57,255.46L421.92,252.71L423.94,253.75L428.79,252.32L429.54,252.77L440.73,252.77L437.87,219.51L442.05,218.69L443.10,218.69Z " data-iso="MRT" data-name="Mauritania" data-pop="3129486.0"/><path d="M563.97,351.42L563.97,351.03L563.86,351.05L563.97,351.42Z M563.74,351.07L563.48,350.96L563.44,351.09L563.74,351.07Z M558.73,341.75L558.74,341.85L560.27,346.67L559.74,346.92L559.39,353.01L557.79,356.57L558.93,357.97L559.08,358.23L559.20,358.33L559.95,359.73L562.48,359.64L562.01,364.73L562.46,366.22L565.00,368.23L566.70,365.19L565.35,357.81L562.86,351.78L564.36,349.50L564.77,349.51L564.75,349.39L563.02,343.00L562.03,342.07L558.78,341.72L558.73,341.75Z " data-iso="MWI" data-name="Malawi" data-pop="14268711.0"/><path d="M820.68,292.97L820.51,292.93L820.37,292.98L820.39,293.14L820.34,293.27L820.64,293.28L821.07,293.21L820.68,292.97Z M766.08,285.57L768.15,293.99L772.72,300.13L776.49,302.63L779.26,303.20L776.97,298.25L776.59,292.47L775.63,289.36L772.62,286.00L772.08,285.86L768.72,287.55L768.94,286.14L765.94,285.15L766.08,285.57Z M813.15,292.51L812.47,292.48L812.15,290.66L811.63,292.61L810.87,293.70L809.23,291.75L809.20,291.75L806.54,296.22L802.23,297.96L800.77,303.17L796.03,301.41L795.82,300.91L797.13,303.74L798.91,305.02L804.63,302.59L808.37,303.65L811.78,301.39L814.27,293.18L820.11,293.26L820.20,293.16L823.22,292.23L825.10,288.99L817.31,283.33L813.22,290.54L813.15,292.51Z " data-iso="MYS" data-name="Malaysia" data-pop="25715819.0"/><path d="M527.70,371.43L522.50,372.51L514.79,371.67L513.52,370.35L500.20,370.39L497.44,368.81L493.29,369.82L493.21,370.60L493.34,372.51L499.72,386.02L500.73,387.54L501.41,396.01L503.22,406.22L506.02,410.35L506.34,410.64L508.23,408.53L509.30,410.93L514.34,411.80L516.85,410.04L517.37,398.34L517.43,396.83L517.43,396.74L517.74,388.76L520.80,386.86L521.11,378.76L522.05,373.61L528.13,372.51L530.88,372.78L534.22,371.75L534.35,371.77L533.86,371.20L532.79,370.78L529.32,371.07L528.66,371.22L527.70,371.43Z " data-iso="NAM" data-name="Namibia" data-pop="2108665.0"/><path d="M954.59,380.56L954.78,382.66L956.45,385.15L960.81,388.02L954.59,380.56Z " data-iso="NCL" data-name="New Caledonia" data-pop="227436.0"/><path d="M502.63,225.87L499.28,226.21L498.46,225.43L495.10,224.41L493.52,224.00L491.99,225.09L480.17,233.49L478.70,234.94L471.03,239.55L470.37,239.70L470.38,240.33L470.11,249.68L468.29,252.82L461.52,253.57L458.25,254.68L458.21,254.86L458.17,255.03L460.91,261.70L462.34,263.01L464.73,265.48L464.87,265.65L464.94,265.29L465.12,264.34L468.38,266.04L468.57,266.37L468.75,266.24L470.24,260.07L474.35,258.58L477.83,260.40L481.39,260.50L484.35,262.03L487.00,262.38L489.61,260.52L495.85,261.01L498.63,259.19L499.17,259.18L498.84,257.65L501.38,251.86L504.67,247.71L505.21,236.97L503.02,227.94L502.63,225.87L502.63,225.87Z " data-iso="NER" data-name="Niger" data-pop="15306252.0"/><path d="M468.57,266.37L468.45,266.60L469.17,270.88L467.11,275.34L466.08,275.84L465.89,285.41L466.09,285.39L470.26,285.26L474.78,291.56L476.90,292.54L483.89,291.17L483.93,291.17L485.27,287.02L489.25,283.60L491.68,284.92L494.53,281.05L495.70,277.46L498.18,273.70L499.60,269.31L502.20,266.25L500.93,263.09L500.61,261.42L500.20,260.78L499.67,259.95L499.17,259.18L498.63,259.19L495.85,261.01L489.61,260.52L487.00,262.38L484.35,262.03L481.39,260.50L477.83,260.40L474.35,258.58L470.24,260.07L468.75,266.24L468.57,266.37Z " data-iso="NGA" data-name="Nigeria" data-pop="149229090.0"/><path d="M190.10,261.88L191.38,264.40L192.39,266.22L194.43,268.54L194.43,268.64L197.83,268.70L199.94,269.81L200.84,269.16L200.62,269.10L201.81,261.91L202.47,258.14L203.49,254.70L203.59,254.57L202.43,254.63L192.23,258.97L192.15,260.58L190.12,261.78L190.10,261.88Z " data-iso="NIC" data-name="Nicaragua" data-pop="5891199.0"/><path d="M468.58,124.95L468.30,124.83L467.96,124.97L466.73,124.84L466.53,124.89L468.39,125.34L468.58,124.95Z M472.87,126.97L473.02,127.02L473.15,127.04L473.68,127.05L473.82,126.52L474.15,124.51L473.46,123.58L476.62,118.39L476.25,118.33L470.99,119.48L467.80,124.79L468.65,124.81L469.97,124.74L472.87,126.97L472.87,126.97Z " data-iso="NLD" data-name="Netherlands" data-pop="16715999.0"/><path d="M486.54,99.17L489.08,95.67L489.77,91.63L487.86,90.45L487.10,85.42L491.37,81.56L492.53,76.50L496.72,73.33L497.30,71.05L505.58,67.59L505.89,67.58L506.00,67.48L508.12,66.87L511.81,68.68L516.25,68.92L522.31,64.48L525.46,65.66L525.26,67.50L525.45,67.62L525.80,67.54L526.27,66.78L529.40,66.09L529.41,65.32L529.05,65.28L524.33,64.23L529.26,63.85L522.91,61.76L519.08,63.44L519.17,62.12L513.86,62.00L511.82,64.72L510.07,63.55L508.68,65.17L504.79,64.83L503.43,66.40L502.26,65.43L496.73,68.82L497.86,69.61L494.16,70.42L492.76,73.21L488.90,75.57L485.84,80.61L481.03,84.11L482.21,85.11L478.68,85.35L473.87,88.24L469.96,89.87L470.89,91.20L476.45,92.20L475.06,92.79L470.32,92.54L471.91,95.62L470.99,97.18L472.54,99.09L471.81,100.53L475.51,102.50L479.36,101.58L484.06,98.37L486.53,99.07L486.54,99.17Z M503.45,40.23L500.85,40.45L503.11,42.83L506.35,43.15L507.01,41.83L503.45,40.23Z M492.63,36.86L491.14,36.60L492.11,39.24L488.60,37.21L482.03,37.07L480.66,38.39L483.33,40.21L493.17,40.06L493.29,40.88L487.66,43.13L493.33,45.58L496.99,41.74L502.91,39.86L497.58,38.72L492.63,36.86Z M501.02,36.00L505.83,38.58L509.63,38.24L514.17,36.47L505.68,36.15L505.05,35.45L501.02,36.00Z " data-iso="NOR" data-name="Norway" data-pop="4676305.0"/><path d="M719.21,208.30L717.08,208.52L711.16,206.89L707.20,204.60L706.59,203.50L697.83,199.48L696.94,200.33L696.76,200.10L694.84,204.75L696.11,205.68L705.49,210.15L708.25,209.94L711.40,212.03L717.46,213.52L720.16,211.74L719.48,208.35L719.21,208.30Z " data-iso="NPL" data-name="Nepal" data-pop="28563377.0"/><path d="M947.57,456.03L947.20,453.69L932.56,464.24L927.79,465.97L918.08,472.60L921.50,473.96L925.44,474.66L936.25,466.16L941.27,465.28L949.83,457.67L951.52,455.11L947.57,456.03Z M961.00,433.35L960.63,440.55L961.66,441.06L958.12,445.86L953.63,449.25L955.89,451.31L955.21,453.28L952.29,456.58L954.55,456.50L962.48,450.31L964.62,448.20L968.22,446.30L970.30,442.78L966.24,444.28L961.55,440.18L962.28,439.36L962.67,433.79L961.00,433.35Z " data-iso="NZL" data-name="New Zealand" data-pop="4213418.0"/><path d="M623.74,226.92L624.01,227.33L625.37,229.44L624.66,233.38L622.73,237.18L615.67,240.06L615.26,240.23L615.42,240.58L618.01,246.31L618.24,246.42L619.27,248.64L619.89,248.37L624.32,247.51L626.62,244.21L628.93,243.84L637.79,227.62L636.54,227.07L626.87,219.69L626.46,218.74L624.73,219.14L624.12,222.47L623.71,226.39L623.74,226.92Z M625.08,214.85L625.43,216.19L625.57,216.35L625.91,216.33L625.91,216.12L626.06,214.68L625.27,214.33L625.08,214.85Z " data-iso="OMN" data-name="Oman" data-pop="3418085.0"/><path d="M679.87,180.29L678.38,179.81L676.65,176.98L672.57,175.42L672.41,175.47L672.13,175.61L664.06,179.36L665.15,181.07L662.88,186.49L662.92,188.58L661.41,189.57L660.96,193.73L654.76,196.02L653.07,197.80L653.15,201.28L647.26,202.88L638.56,201.59L637.37,201.20L638.05,201.90L641.18,205.92L643.99,207.88L645.65,210.57L644.83,212.76L642.14,214.48L641.93,217.94L641.88,218.00L655.91,216.51L659.57,221.64L662.27,222.99L662.29,222.78L663.98,221.15L669.16,220.76L670.53,219.79L669.51,217.93L664.67,212.18L667.47,208.11L670.23,208.35L675.82,199.89L676.98,196.62L677.34,191.84L673.85,189.04L673.57,183.57L677.88,184.51L681.26,182.50L681.28,182.33L681.08,182.02L680.52,181.16L680.21,180.67L680.00,180.35L679.87,180.29Z " data-iso="PAK" data-name="Pakistan" data-pop="176242949.0"/><path d="M203.82,273.95L202.59,275.12L203.14,276.18L202.54,279.33L202.62,279.23L204.58,278.76L209.20,282.35L211.26,281.37L210.01,278.82L214.39,276.02L217.26,278.23L217.63,282.24L217.71,282.34L219.94,279.82L219.59,277.23L218.64,276.41L213.68,273.98L205.18,276.24L204.01,274.14L203.82,273.95Z " data-iso="PAN" data-name="Panama" data-pop="3360474.0"/><path d="M241.64,323.01L240.03,321.96L241.39,317.80L236.75,316.09L234.18,316.82L225.39,308.30L225.21,308.53L225.03,308.66L225.32,311.55L224.35,313.62L220.97,317.30L217.12,319.03L214.94,324.44L209.46,323.17L209.78,320.25L209.24,320.63L207.24,325.57L208.30,328.27L207.55,329.78L210.82,331.90L214.46,337.47L218.95,346.86L219.37,348.47L224.43,356.44L224.29,358.65L228.32,363.23L235.78,367.54L243.39,373.50L243.64,373.75L245.30,372.84L245.38,372.47L245.88,370.98L246.09,370.74L246.09,370.73L245.99,360.32L246.98,358.79L246.23,357.04L247.11,352.82L244.44,348.05L244.01,347.27L243.72,347.28L240.76,347.48L240.52,343.24L235.82,343.88L233.75,341.76L229.77,335.14L233.45,326.25L238.70,323.69L241.79,323.51L241.80,323.28L241.64,323.01Z " data-iso="PER" data-name="Peru" data-pop="29546963.0"/><path d="M844.86,274.86L842.92,273.62L843.40,275.96L836.33,277.74L832.93,282.44L833.53,283.46L834.91,280.43L839.43,281.09L839.48,282.75L843.83,288.16L844.74,286.80L843.70,284.26L844.75,282.01L846.33,284.11L847.17,282.53L844.86,274.86Z M836.11,275.78L836.69,270.35L835.01,269.27L834.92,272.12L833.69,273.53L836.11,275.78Z M833.23,266.66L831.87,266.27L832.02,268.93L834.38,269.49L835.18,268.16L833.23,266.66Z M825.25,241.59L824.10,241.84L823.61,245.10L824.54,250.17L822.78,249.80L824.34,255.08L825.86,254.97L830.96,258.88L832.86,261.01L832.50,258.46L835.02,261.35L837.65,261.58L833.40,257.45L831.20,257.73L828.29,252.72L830.50,246.94L828.72,242.00L825.25,241.59Z " data-iso="PHL" data-name="Philippines" data-pop="97976603.0"/><path d="M925.99,323.49L922.78,327.52L915.00,327.69L914.84,328.74L918.56,330.61L921.84,330.11L925.56,328.02L925.99,323.49Z M892.48,317.47L892.48,317.48L892.48,317.72L891.44,331.76L891.51,332.58L890.95,340.72L891.40,341.09L898.28,339.08L899.16,336.72L903.71,336.01L906.87,336.99L910.85,343.56L919.53,346.15L917.94,343.92L918.50,342.76L912.15,336.28L912.91,330.91L906.74,327.44L906.93,325.37L900.20,320.40L892.57,317.47L892.48,317.47Z M929.14,325.14L929.42,322.81L926.52,319.76L922.62,317.93L928.34,322.90L929.14,325.14Z " data-iso="PNG" data-name="Papua New Guinea" data-pop="6057263.0"/><path d="M508.98,114.48L504.98,113.13L501.06,114.08L495.14,116.18L495.04,116.12L495.01,116.23L495.07,116.39L495.43,116.43L495.99,116.55L495.84,117.07L495.22,116.87L496.94,122.48L496.60,123.34L497.40,126.63L497.39,126.68L497.62,126.67L498.64,126.60L502.75,129.24L503.35,128.20L507.65,129.98L508.60,131.23L508.62,131.33L508.91,131.38L512.81,131.77L516.27,131.68L518.65,132.82L518.83,132.85L518.94,132.84L519.68,132.89L521.52,128.34L520.97,124.65L520.80,124.41L520.58,124.07L519.42,121.88L520.98,120.49L519.95,117.31L519.51,116.16L519.48,116.09L519.34,115.47L517.58,114.62L517.45,114.75L517.36,114.77L515.87,114.74L509.09,114.40L508.98,114.48Z " data-iso="POL" data-name="Poland" data-pop="38482919.0"/><path d="M811.64,164.84L815.17,166.52L815.59,168.86L817.01,169.52L815.37,171.51L821.42,172.72L821.46,172.75L821.85,171.11L825.18,169.74L824.96,169.54L821.47,167.65L821.07,165.61L825.38,161.51L824.11,159.15L825.63,156.73L825.72,156.64L825.59,156.55L825.05,156.03L824.86,155.81L824.72,155.69L822.34,154.95L821.66,156.93L818.93,158.07L820.11,159.89L816.97,159.29L811.59,164.81L811.64,164.84Z " data-iso="PRK" data-name="N. Korea" data-pop="22665345.0"/><path d="M432.48,158.31L430.95,167.00L432.30,171.31L431.61,175.44L435.96,174.95L436.21,174.91L436.30,165.97L437.87,165.05L437.71,157.89L432.78,157.92L432.48,158.31Z " data-iso="PRT" data-name="Portugal" data-pop="10707924.0"/><path d="M281.47,379.68L278.35,377.12L275.58,377.16L270.39,378.41L268.73,387.52L268.68,387.70L268.77,387.80L271.64,391.10L274.81,393.53L284.41,398.13L285.20,399.79L282.89,405.53L289.38,406.58L291.71,406.32L294.32,401.25L294.19,399.71L294.15,399.19L294.70,394.21L290.63,392.54L290.25,390.79L282.79,387.25L281.56,380.53L281.47,380.27L281.47,379.68Z " data-iso="PRY" data-name="Paraguay" data-pop="6995655.0"/><path d="M611.63,219.94L610.65,214.52L609.43,217.23L609.88,219.21L609.80,219.43L610.00,219.82L611.26,220.08L611.63,219.94Z " data-iso="QAT" data-name="Qatar" data-pop="833285.0"/><path d="M535.63,145.29L535.07,140.80L534.78,140.15L530.52,135.66L530.26,135.68L530.14,135.72L525.75,137.57L523.72,136.91L520.24,136.71L520.15,136.77L520.09,136.85L517.90,138.31L515.66,142.73L513.60,143.11L513.50,143.20L513.68,143.40L516.25,146.07L518.08,148.22L520.86,149.75L520.91,149.78L521.12,149.93L531.53,150.33L532.51,150.11L537.52,151.54L537.51,151.34L538.04,147.77L537.90,147.38L540.00,146.42L540.02,146.18L538.11,145.97L536.52,146.07L536.13,145.87L535.80,145.51L535.63,145.29Z " data-iso="ROU" data-name="Romania" data-pop="22215421.0"/><path d="M833.06,114.62L834.34,117.97L833.14,118.02L837.42,124.03L839.27,125.43L849.88,143.27L850.67,141.09L854.15,143.48L853.86,142.31L847.74,136.98L846.35,132.41L849.10,132.38L833.06,114.62Z M512.35,111.64L512.19,111.62L512.07,111.80L511.00,112.74L509.70,113.81L509.47,114.11L509.09,114.40L515.87,114.74L517.36,114.77L517.45,114.75L517.32,114.58L517.19,113.82L517.42,113.12L513.08,111.69L513.10,112.22L511.51,112.64L512.12,111.96L512.35,111.64Z M35.73,67.87L35.42,67.74L20.71,79.82L26.84,76.80L26.34,78.51L30.83,78.31L36.12,81.89L36.89,80.54L39.54,79.88L41.29,78.10L43.85,78.43L48.16,75.79L47.23,74.02L43.80,73.48L40.71,75.55L38.75,75.00L41.49,71.72L37.57,69.75L35.73,67.87Z M48.09,59.97L45.36,60.09L43.21,61.70L49.85,61.03L48.09,59.97Z M582.05,54.91L578.79,54.93L575.65,59.99L579.81,60.50L580.57,62.06L585.09,62.68L590.53,62.49L584.17,59.11L584.68,55.22L582.05,54.91Z M780.97,49.02L780.13,49.51L786.25,50.63L790.59,49.62L780.97,49.02Z M764.59,47.74L760.90,46.72L759.83,49.40L763.64,50.64L766.79,50.17L773.27,50.57L770.44,48.78L773.83,49.74L776.84,48.42L766.70,46.88L764.59,47.74Z M605.46,46.60L605.88,44.69L599.66,45.83L591.84,46.44L584.51,49.10L580.83,49.71L581.49,50.64L579.18,53.10L585.67,54.74L589.00,50.94L594.21,48.86L605.46,46.60Z M529.41,65.32L529.40,66.09L526.27,66.78L525.80,67.54L525.45,67.62L525.31,67.66L524.91,69.66L527.08,74.27L529.61,76.83L529.46,79.90L531.33,84.16L534.39,85.69L534.33,88.51L527.51,94.27L528.46,94.16L530.91,95.39L528.71,97.47L528.62,97.70L527.53,100.16L528.30,103.24L527.94,104.06L527.95,104.14L528.25,104.15L529.33,105.33L529.15,105.96L530.75,108.59L530.71,108.75L531.11,109.04L534.42,110.28L538.20,110.66L538.31,111.83L541.58,116.66L542.59,119.04L542.32,122.33L542.35,122.42L542.40,122.42L547.47,121.58L549.43,125.35L553.82,128.45L554.97,128.23L560.48,129.92L560.97,129.46L566.49,132.23L565.49,133.08L566.69,135.65L563.85,137.15L562.61,139.75L563.31,139.46L561.82,141.71L563.95,143.26L559.25,146.44L569.25,152.49L569.57,152.68L571.38,152.27L574.18,153.39L586.27,156.02L588.54,158.05L588.60,158.10L588.92,158.17L593.07,160.51L594.68,158.26L594.37,158.05L590.79,154.04L587.91,149.14L593.53,142.56L593.46,142.40L589.53,137.60L586.82,137.31L584.64,134.58L585.70,128.25L589.07,130.07L588.72,127.74L594.52,123.97L597.30,123.76L607.61,127.63L610.73,125.97L614.35,125.97L616.94,127.40L622.70,126.67L621.06,124.50L619.62,119.44L622.05,118.98L619.55,118.20L619.01,115.89L625.66,115.15L635.03,113.01L636.03,112.04L639.86,111.55L643.58,112.75L644.77,115.24L651.12,116.08L651.98,117.75L654.29,117.69L659.59,114.46L659.34,115.98L663.64,118.27L673.03,126.86L680.84,126.55L688.43,130.80L691.28,131.37L692.24,130.41L694.79,132.59L694.95,132.81L695.22,132.84L695.36,132.79L695.42,132.68L696.04,132.53L696.18,132.54L696.19,132.54L698.99,131.46L701.05,129.28L708.08,127.38L713.36,129.56L721.71,129.87L722.71,129.37L720.44,126.02L721.73,122.41L731.61,125.11L733.18,127.62L738.98,129.05L745.18,128.50L752.43,131.98L757.25,132.35L761.66,131.63L765.64,128.93L773.17,130.07L773.41,130.25L774.12,130.55L777.21,131.32L779.92,129.41L779.00,128.24L779.09,124.13L779.99,122.85L777.60,118.76L781.27,117.70L790.99,119.20L796.35,123.51L803.95,130.95L810.18,132.41L816.53,137.66L822.46,136.24L826.78,141.83L826.72,146.88L823.00,147.15L825.69,154.32L824.97,155.70L824.86,155.81L825.05,156.03L825.59,156.55L825.72,156.64L825.80,156.55L831.98,155.24L836.00,152.30L838.98,142.70L839.27,133.12L836.18,127.76L834.92,124.06L835.38,123.03L831.40,119.21L832.11,118.35L825.31,115.02L823.86,117.41L817.04,114.06L812.52,113.48L815.05,109.31L815.88,106.00L818.30,103.19L818.10,101.20L821.16,98.07L827.04,97.93L828.59,98.64L833.90,97.93L835.94,98.36L836.40,96.77L839.61,97.46L843.24,99.70L848.26,98.55L847.99,96.56L849.44,90.59L854.21,89.83L857.00,90.07L857.64,91.73L860.39,93.94L863.85,90.22L862.21,87.78L864.02,87.32L867.66,92.69L864.19,98.87L864.52,99.93L860.47,103.41L861.41,106.90L864.09,111.41L878.95,126.30L880.05,121.72L879.23,120.62L879.27,115.93L880.80,113.93L882.92,113.41L879.78,110.91L879.65,108.35L871.23,96.98L871.34,95.88L877.09,95.44L878.03,96.51L881.38,94.09L884.80,94.59L888.19,96.13L887.87,94.32L890.56,90.46L895.12,88.44L895.60,87.44L901.63,88.41L895.88,84.43L894.38,79.82L879.68,67.74L866.25,64.96L853.26,64.35L854.26,65.79L858.34,67.55L858.06,68.22L851.21,66.87L848.53,65.49L837.73,65.53L835.01,66.54L829.11,65.06L826.75,62.86L821.17,61.57L816.05,61.40L806.92,61.73L804.21,60.57L794.84,57.81L792.55,57.72L790.03,58.90L784.47,56.84L774.07,57.36L776.61,60.36L767.75,59.87L765.10,60.56L760.18,58.94L759.85,62.44L755.88,61.33L749.92,58.47L747.07,55.04L737.27,53.74L735.32,55.90L724.25,55.09L723.37,54.09L718.76,53.85L712.51,54.34L711.57,53.75L703.14,53.49L703.93,54.49L700.37,55.30L697.58,54.84L700.11,53.79L708.07,49.24L699.48,45.37L690.25,44.71L686.07,43.45L680.07,42.80L676.77,43.97L677.29,45.79L675.81,47.18L672.88,46.59L667.65,47.47L667.20,46.95L655.78,48.40L651.20,49.70L649.13,52.01L651.28,53.22L638.43,54.16L643.42,57.77L647.86,59.23L651.11,63.03L649.28,63.81L648.80,61.99L646.84,61.69L647.91,59.70L635.78,57.57L631.76,58.71L632.20,59.92L639.57,61.68L631.43,60.89L629.22,58.85L628.80,64.14L631.69,67.25L635.38,66.98L639.79,67.98L641.66,69.94L640.50,71.41L636.87,67.75L632.82,68.44L634.82,71.45L633.70,73.82L628.31,75.76L629.94,72.00L625.24,62.21L622.25,60.33L622.42,56.70L614.72,55.85L613.16,60.06L611.34,62.22L618.91,67.94L618.86,69.77L614.84,68.07L605.20,65.65L599.51,65.12L598.04,65.71L600.44,67.73L596.82,69.38L595.70,67.68L592.68,68.78L587.06,69.59L585.09,67.79L581.38,68.50L575.62,70.53L570.99,74.02L569.17,74.34L564.37,72.34L568.03,70.82L565.66,69.27L559.68,68.88L561.90,69.96L563.73,76.88L562.12,75.91L556.43,76.84L555.36,80.03L546.31,80.22L550.55,83.34L549.78,83.51L542.27,80.66L540.82,78.79L541.11,77.05L538.14,75.91L536.39,74.09L542.76,75.67L550.56,76.69L556.15,74.07L554.72,71.61L540.09,66.85L531.89,64.81L529.84,65.36L529.41,65.32Z M674.35,38.52L671.80,38.22L670.68,40.91L673.36,41.43L681.52,40.49L680.31,39.65L674.35,38.52Z M661.00,36.22L655.56,36.38L653.43,37.55L659.82,39.15L666.91,39.65L667.00,37.18L661.00,36.22Z M656.13,33.97L649.24,34.18L648.14,35.95L653.46,36.60L659.74,36.02L656.13,33.97Z " data-iso="RUS" data-name="Russia" data-pop="140041247.0"/><path d="M551.58,311.96L551.12,312.13L548.92,313.10L548.82,313.11L548.70,313.19L547.43,315.99L546.58,316.89L546.78,317.73L547.06,317.86L547.11,317.67L549.17,318.13L550.39,316.76L551.74,316.71L551.82,316.72L551.94,316.71L552.75,316.24L552.63,313.73L551.60,312.02L551.70,311.96L551.58,311.96Z " data-iso="RWA" data-name="Rwanda" data-pop="10473282.0"/><path d="M431.71,209.72L431.72,209.12L431.32,209.12L431.47,210.94L428.28,212.02L425.00,211.44L422.55,214.70L420.08,219.50L415.97,223.16L413.36,230.60L406.20,231.53L406.18,231.68L405.85,233.55L406.00,233.73L406.31,231.86L421.40,224.18L421.62,216.01L423.76,215.09L431.61,215.09L431.68,211.05L431.69,210.45L431.71,209.72Z " data-iso="SAH" data-name="W. Sahara" data-pop="-99.0"/><path d="M572.41,193.05L572.02,193.47L566.70,195.82L569.58,198.89L564.95,203.01L561.01,203.02L560.75,205.29L560.69,207.41L562.08,207.76L568.74,217.62L570.20,221.22L578.27,235.57L581.57,238.45L584.47,244.21L587.94,249.35L587.99,249.63L588.97,246.09L598.49,246.55L602.17,246.25L606.46,241.71L614.55,240.34L615.26,240.23L615.67,240.06L622.73,237.18L624.66,233.38L625.37,229.44L624.01,227.33L623.74,226.92L623.57,227.21L615.74,226.10L612.43,221.98L612.28,221.23L612.18,221.23L611.49,221.04L611.62,220.55L611.49,220.24L611.26,220.08L610.00,219.82L609.80,219.43L609.54,219.14L606.57,212.09L603.03,209.22L601.49,206.27L601.28,205.93L599.00,205.97L598.70,205.63L595.97,204.02L595.39,203.94L594.88,204.06L583.97,198.91L580.57,196.30L573.08,193.17L572.41,193.05Z " data-iso="SAU" data-name="Saudi Arabia" data-pop="28686633.0"/><path d="M532.89,229.46L532.97,231.25L533.20,236.62L530.92,236.64L530.22,237.98L530.24,238.43L530.30,240.03L530.68,251.96L527.57,253.97L525.94,256.16L525.58,260.53L524.44,262.19L527.81,268.76L527.71,269.15L527.94,269.59L530.20,273.07L530.16,274.79L531.51,277.11L531.81,277.20L531.81,277.20L531.85,277.10L533.71,274.13L536.77,270.93L539.48,274.28L543.76,274.84L551.17,272.51L553.49,273.15L556.81,267.98L558.98,266.74L562.28,274.36L562.28,274.36L562.28,274.36L562.28,274.17L563.66,269.29L564.73,269.00L569.00,258.17L569.20,257.21L569.06,256.18L570.18,247.31L571.56,246.99L574.90,243.78L574.78,243.54L570.89,239.88L570.17,234.63L568.85,230.28L568.76,229.46L552.36,229.46L549.03,229.46L534.05,229.46L532.89,229.46Z " data-iso="SDN" data-name="Sudan" data-pop="30894000.0"/><path d="M531.81,277.20L531.81,277.20L531.96,277.25L535.06,281.17L538.74,284.46L541.80,289.63L542.02,289.91L542.13,290.16L546.78,292.13L549.65,292.70L552.60,295.54L552.67,295.69L552.76,295.50L556.07,295.27L559.31,294.30L561.61,293.92L562.32,293.08L562.93,292.37L563.55,291.65L565.68,289.19L566.24,288.54L566.19,288.48L559.35,280.21L559.13,279.76L562.28,274.51L562.28,274.36L562.28,274.36L562.28,274.36L558.98,266.74L556.81,267.98L553.49,273.15L551.17,272.51L543.76,274.84L539.48,274.28L536.77,270.93L533.71,274.13L531.85,277.10L531.81,277.20Z " data-iso="SSD" data-name="S. Sudan" data-pop="8260490.0"/><path d="M419.97,255.20L416.66,250.75L413.27,248.62L408.07,249.06L407.11,251.54L407.00,251.92L405.09,255.83L406.80,259.24L406.87,259.60L414.26,259.79L415.17,260.51L409.14,260.54L406.22,261.48L406.24,261.78L406.25,263.19L406.24,263.85L406.34,264.01L409.02,263.72L411.00,262.85L414.47,262.87L415.49,262.87L416.48,262.91L419.14,263.94L422.44,263.79L422.65,263.84L422.67,263.57L422.67,261.91L420.31,255.81L420.03,255.23L419.97,255.20Z " data-iso="SEN" data-name="Senegal" data-pop="13711597.0"/><path d="M416.74,276.05L419.54,281.94L421.99,283.35L422.11,283.49L425.82,278.47L425.91,277.96L425.92,277.85L425.68,277.81L424.48,274.63L420.96,272.46L419.37,272.80L416.68,275.83L416.74,276.05Z " data-iso="SLE" data-name="Sierra Leone" data-pop="6440053.0"/><path d="M184.36,256.60L182.14,258.47L181.94,259.07L182.30,259.26L185.54,260.69L187.60,261.12L188.72,260.33L188.80,260.28L189.00,258.52L187.97,258.17L184.50,256.65L184.42,256.64L184.36,256.60Z " data-iso="SLV" data-name="El Salvador" data-pop="7185218.0"/><path d="M607.59,267.95L595.55,270.87L593.84,270.90L590.82,267.62L590.20,267.07L589.95,267.55L589.63,268.17L589.27,268.86L589.23,269.00L590.34,273.26L591.20,274.65L604.13,279.59L605.18,279.59L605.61,278.79L607.96,274.40L607.89,272.53L607.69,267.94L607.59,267.95Z " data-iso="SOL" data-name="Somaliland" data-pop="3500000.0"/><path d="M586.02,313.79L591.70,305.93L594.36,303.19L599.63,299.32L602.15,296.42L607.48,288.53L613.23,275.62L613.87,271.53L613.26,265.34L608.07,267.89L607.69,267.94L607.89,272.53L607.96,274.40L605.61,278.79L605.18,279.59L604.45,280.44L596.00,290.66L590.51,291.57L586.81,293.76L586.72,293.95L586.34,294.58L583.97,298.00L584.01,311.26L585.71,314.21L586.02,313.79Z " data-iso="SOM" data-name="Somalia" data-pop="9832017.0"/><path d="M509.85,143.82L509.85,143.90L510.27,145.69L511.05,146.12L510.38,147.43L510.42,147.56L510.52,147.55L510.88,148.92L511.46,152.09L511.30,152.27L511.30,152.32L512.74,153.58L513.06,153.77L514.72,154.68L514.72,154.77L515.06,154.67L515.40,153.46L516.65,153.84L518.24,156.71L518.31,156.83L518.47,156.85L518.80,156.76L520.42,156.57L520.49,156.60L520.71,156.54L520.68,154.72L521.34,154.57L520.81,149.85L520.91,149.78L520.86,149.75L518.08,148.22L516.25,146.07L513.68,143.40L513.50,143.20L513.40,143.14L511.33,143.27L510.50,143.62L509.91,143.82L509.85,143.82Z " data-iso="SRB" data-name="Serbia" data-pop="7379339.0"/><path d="M290.88,288.51L288.60,286.77L282.02,286.75L281.32,288.41L281.29,288.34L279.00,290.94L279.87,296.12L280.79,296.10L283.14,301.10L283.26,301.22L283.35,301.25L285.10,299.26L286.67,299.44L288.89,299.84L289.03,299.85L289.07,299.81L289.69,290.25L290.64,289.02L290.88,288.51Z " data-iso="SUR" data-name="Suriname" data-pop="481267.0"/><path d="M518.65,132.82L516.27,131.68L512.81,131.77L508.91,131.38L508.62,131.33L508.55,131.34L506.72,132.88L506.07,133.35L503.83,134.23L503.77,134.50L503.76,134.53L503.56,135.04L503.58,135.23L504.28,136.44L504.45,136.56L504.53,136.54L508.83,137.32L513.84,134.67L517.90,135.21L517.95,135.17L517.93,134.60L518.38,133.99L518.49,133.54L518.80,132.99L518.83,132.85L518.65,132.82Z " data-iso="SVK" data-name="Slovakia" data-pop="5463046.0"/><path d="M503.07,141.75L502.55,141.05L502.37,140.57L501.85,140.55L501.70,140.62L498.46,141.54L497.70,142.18L495.45,141.77L495.33,141.75L495.29,141.96L494.54,142.46L495.17,143.65L495.57,145.03L495.36,145.21L495.19,145.28L500.80,144.16L500.74,142.87L502.85,141.74L503.10,141.83L503.07,141.75Z " data-iso="SVN" data-name="Slovenia" data-pop="2005692.0"/><path d="M505.89,67.58L505.58,67.59L497.30,71.05L496.72,73.33L492.53,76.50L491.37,81.56L487.10,85.42L487.86,90.45L489.77,91.63L489.08,95.67L486.54,99.17L486.29,99.00L489.66,106.20L491.04,107.50L491.34,110.96L494.98,110.81L494.68,109.60L498.92,108.66L500.07,103.20L498.52,97.82L505.40,96.89L500.91,93.74L500.70,87.92L508.94,82.62L509.07,80.41L511.47,77.39L515.18,77.58L515.81,77.51L514.36,75.72L514.90,74.39L512.66,70.33L506.55,67.75L505.89,67.58Z " data-iso="SWE" data-name="Sweden" data-pop="9059651.0"/><path d="M552.93,401.12L550.68,405.68L552.70,405.93L553.19,404.20L553.28,404.25L553.34,403.10L553.21,402.24L553.28,402.00L553.07,401.13L553.01,401.08L552.93,401.12Z " data-iso="SWZ" data-name="Swaziland" data-pop="1123913.0"/><path d="M265.70,243.57L265.80,243.65L265.99,243.73L266.04,243.64L266.05,243.55L265.71,243.55L265.70,243.57Z " data-iso="SXM" data-name="Sint Maarten" data-pop="37429.0"/><path d="M579.41,174.73L571.15,176.69L567.69,175.90L565.62,176.83L563.23,176.35L561.46,179.44L561.33,179.68L561.22,180.67L561.68,181.21L561.89,183.25L562.20,184.05L563.11,183.88L563.62,186.83L562.45,188.23L562.33,188.35L562.30,188.57L562.55,189.42L562.46,189.59L562.37,190.69L562.35,190.86L562.67,190.93L564.51,192.20L565.52,192.36L570.14,189.06L570.84,188.57L571.61,188.06L577.15,181.69L577.17,177.29L579.61,175.21L579.61,175.16L579.41,174.73Z " data-iso="SYR" data-name="Syria" data-pop="20178485.0"/><path d="M528.76,237.58L512.50,228.24L505.60,224.26L503.72,225.28L502.63,225.87L503.02,227.94L505.21,236.97L504.67,247.71L501.38,251.86L498.84,257.65L499.17,259.18L499.67,259.95L500.20,260.78L500.61,261.42L501.16,261.43L503.04,263.49L505.64,272.41L501.30,272.51L500.59,273.91L505.36,281.00L505.20,281.29L505.53,281.32L509.54,280.89L511.86,279.64L515.84,276.23L521.40,274.56L524.19,270.51L527.58,269.12L527.71,269.15L527.81,268.76L524.44,262.19L525.58,260.53L525.94,256.16L527.57,253.97L530.68,251.96L530.30,240.03L530.24,238.43L528.76,237.58Z " data-iso="TCD" data-name="Chad" data-pop="10329208.0"/><path d="M459.52,268.92L459.23,269.02L459.03,268.89L458.04,268.61L457.34,268.45L457.53,268.66L459.16,274.59L459.38,284.08L461.21,286.41L461.59,286.20L462.55,285.95L461.69,273.98L459.89,271.05L460.23,269.27L460.31,268.88L459.52,268.92Z " data-iso="TGO" data-name="Togo" data-pop="6019877.0"/><path d="M760.37,273.02L761.21,278.67L764.59,282.78L765.11,284.05L765.94,285.15L768.94,286.14L768.72,287.55L772.08,285.86L771.11,285.03L764.97,277.18L762.91,275.20L762.08,271.29L764.00,264.01L763.63,260.83L766.53,260.16L773.14,266.34L773.20,266.33L770.64,259.77L774.02,256.63L779.02,256.92L779.06,256.89L779.23,256.81L779.82,254.40L778.98,251.01L773.33,242.65L770.82,243.30L767.60,243.19L765.13,245.66L764.88,240.29L763.55,238.02L761.87,237.90L760.59,235.70L760.58,235.49L760.18,235.26L754.12,239.26L753.29,242.03L758.35,249.87L758.38,253.10L757.33,253.82L760.36,258.32L763.00,266.07L760.70,271.75L760.37,273.02Z " data-iso="THA" data-name="Thailand" data-pop="65905410.0"/><path d="M658.98,165.45L658.34,165.32L658.46,165.44L658.98,165.45Z M652.75,174.94L652.79,175.05L660.29,170.46L662.21,171.36L663.88,176.11L668.98,173.86L673.19,174.69L673.24,174.72L673.30,174.66L672.06,170.53L668.91,169.80L667.73,166.98L667.67,166.79L667.50,166.76L663.89,167.66L661.48,166.32L655.24,166.52L654.89,164.94L659.37,164.04L659.35,163.98L659.18,163.99L657.66,161.58L649.92,167.53L652.38,169.58L652.80,174.67L652.75,174.94Z " data-iso="TJK" data-name="Tajikistan" data-pop="7349145.0"/><path d="M615.97,160.12L615.85,160.11L614.62,160.30L610.28,156.63L605.80,158.49L606.30,159.38L609.40,157.39L612.41,160.83L610.47,162.52L608.01,161.66L608.37,165.20L611.71,168.88L612.67,174.07L612.76,174.32L619.14,171.29L622.10,171.65L628.32,173.96L631.75,176.85L633.99,176.83L635.00,180.36L635.10,180.50L635.33,180.46L638.31,182.04L640.42,181.12L640.35,179.69L644.00,177.91L644.26,175.34L648.91,174.32L649.05,174.30L648.93,173.91L648.91,172.22L645.75,171.12L635.28,164.70L631.34,160.37L627.55,159.84L626.75,157.87L622.30,156.59L618.96,160.33L616.73,160.16L615.97,160.12Z " data-iso="TKM" data-name="Turkmenistan" data-pop="4884887.0"/><path d="M839.33,341.21L838.80,341.52L839.53,341.82L839.97,341.42L840.11,340.98L839.33,341.21Z M841.66,340.09L842.30,340.73L842.12,340.97L841.92,342.13L842.39,341.74L848.51,338.81L848.14,337.85L843.18,338.78L842.00,339.79L841.66,340.09Z " data-iso="TLS" data-name="East Timor" data-pop="1131612.0"/><path d="M270.15,271.96L270.07,269.46L268.34,269.94L267.39,272.19L270.15,271.96Z " data-iso="TTO" data-name="Trinidad and Tobago" data-pop="1310000.0"/><path d="M482.28,175.78L481.43,179.85L481.69,182.42L479.43,186.92L485.45,199.02L485.65,199.87L486.00,199.68L487.66,197.87L487.29,195.43L491.28,192.01L491.19,189.25L490.88,189.10L488.06,187.53L487.25,185.07L489.82,181.86L489.64,176.00L487.36,176.03L485.99,174.64L482.99,175.56L482.28,175.78Z " data-iso="TUN" data-name="Tunisia" data-pop="10486339.0"/><path d="M561.46,179.44L563.23,176.35L565.62,176.83L567.69,175.90L571.15,176.69L579.41,174.73L579.61,175.16L579.88,175.09L580.58,174.26L583.81,174.75L586.41,174.96L586.52,175.04L586.52,174.99L583.27,166.99L585.23,166.07L585.33,166.08L585.22,165.95L585.16,165.89L585.04,165.73L583.61,164.68L582.63,164.75L580.67,161.04L580.61,160.88L580.60,160.82L575.85,159.73L574.92,159.42L574.70,159.76L570.38,161.33L567.66,161.20L559.89,159.75L556.72,157.61L549.44,158.40L544.84,160.96L539.89,160.90L542.24,162.20L539.99,163.44L533.53,163.40L532.06,166.73L534.07,166.39L533.09,169.96L536.87,174.97L542.40,178.21L548.00,176.26L552.44,179.01L554.99,178.48L556.58,176.97L559.10,176.86L561.61,179.14L561.46,179.44Z M531.90,158.72L532.16,158.79L532.09,160.42L532.24,161.28L531.44,162.24L531.54,162.39L533.61,162.59L537.72,161.01L536.56,158.23L536.59,157.82L535.08,157.90L531.89,158.62L531.90,158.72Z " data-iso="TUR" data-name="Turkey" data-pop="76805524.0"/><path d="M822.04,227.22L821.11,217.77L820.08,218.55L818.79,225.32L819.82,227.19L822.04,227.22Z " data-iso="TWN" data-name="Taiwan" data-pop="22974347.0"/><path d="M551.70,311.96L551.60,312.02L552.63,313.73L552.75,316.24L551.94,316.71L551.82,316.72L551.76,316.81L551.39,320.97L551.15,321.65L549.18,324.06L548.21,324.04L548.21,324.21L548.00,325.94L550.26,332.85L552.07,337.09L552.16,337.41L552.23,337.67L555.16,339.95L555.38,339.95L558.56,341.66L558.73,341.75L558.78,341.72L562.03,342.07L563.02,343.00L564.75,349.39L564.77,349.51L565.45,349.50L571.68,349.90L575.62,348.92L581.79,345.53L581.76,345.45L578.45,338.31L579.32,333.23L577.30,330.76L578.41,325.21L578.47,324.91L573.74,320.71L562.41,311.73L562.18,311.73L561.84,311.73L553.61,311.73L553.06,311.73L551.73,311.95L551.70,311.96Z " data-iso="TZA" data-name="Tanzania" data-pop="41048532.0"/><path d="M562.17,311.12L562.30,307.53L565.44,302.29L565.18,299.52L562.81,294.27L562.32,293.08L561.61,293.92L559.31,294.30L556.07,295.27L552.76,295.50L552.67,295.69L552.84,295.79L552.36,299.39L553.74,300.05L553.03,302.14L549.90,305.75L548.83,313.00L548.82,313.11L548.92,313.10L551.12,312.13L551.58,311.96L551.70,311.96L551.73,311.95L553.06,311.73L553.61,311.73L561.84,311.73L562.18,311.73L562.17,311.12Z " data-iso="UGA" data-name="Uganda" data-pop="32369558.0"/><path d="M542.35,122.42L541.84,122.39L538.38,124.55L530.17,123.61L520.82,124.39L520.80,124.41L520.97,124.65L521.52,128.34L519.68,132.89L518.94,132.84L518.83,132.85L518.80,132.99L518.49,133.54L518.38,133.99L517.93,134.60L517.95,135.17L518.21,135.14L518.60,135.69L519.08,135.87L520.09,136.72L520.15,136.77L520.24,136.71L523.72,136.91L525.75,137.57L530.14,135.72L530.26,135.68L530.30,135.56L533.47,135.13L537.24,136.71L539.94,140.84L535.93,145.39L535.80,145.51L536.13,145.87L536.52,146.07L538.11,145.97L540.02,146.18L540.04,145.89L542.47,141.64L549.28,142.96L547.73,145.67L555.19,147.79L558.69,146.87L558.20,145.49L554.56,144.63L554.75,142.03L562.52,139.79L562.61,139.75L563.85,137.15L566.69,135.65L565.49,133.08L566.49,132.23L560.97,129.46L560.48,129.92L554.97,128.23L553.82,128.45L549.43,125.35L547.47,121.58L542.40,122.42L542.35,122.42Z " data-iso="UKR" data-name="Ukraine" data-pop="45700395.0"/><path d="M287.45,416.29L287.37,416.43L286.89,417.74L286.86,420.71L286.97,424.50L287.13,424.84L287.23,429.68L289.24,431.71L298.02,433.34L301.68,429.20L301.81,429.07L300.79,424.61L299.76,423.01L290.07,416.29L287.66,416.55L287.45,416.29Z " data-iso="URY" data-name="Uruguay" data-pop="3494382.0"/><path d="M123.46,133.61L121.67,138.77L121.94,136.10L117.03,135.59L115.56,142.06L114.93,142.60L108.12,154.12L106.92,157.27L103.72,168.73L106.11,175.77L105.28,177.95L107.22,182.45L106.88,184.62L114.23,188.84L114.33,191.56L114.32,191.58L121.23,190.97L122.24,192.20L130.86,195.93L139.18,195.91L139.54,194.70L144.81,194.33L148.15,198.59L151.58,204.28L154.17,201.58L157.81,201.62L162.02,213.64L167.27,215.21L167.34,214.97L167.88,208.47L170.17,206.73L175.66,204.00L176.57,201.76L177.91,202.32L184.62,202.28L186.51,201.60L188.05,203.59L191.59,202.64L192.36,200.94L190.56,200.19L198.25,198.67L198.42,199.64L202.55,198.91L205.37,201.42L210.24,200.96L212.33,204.10L211.26,208.44L213.21,214.55L214.81,217.35L216.61,217.84L218.28,214.60L218.62,210.74L217.55,202.64L217.37,197.55L221.65,191.98L232.68,184.15L235.44,182.76L237.21,180.24L235.79,179.34L238.22,178.73L238.94,170.20L240.08,172.07L244.92,167.17L247.30,163.66L247.19,162.38L251.33,160.32L259.98,158.74L257.42,156.53L258.76,154.37L266.40,149.55L271.16,147.70L271.06,146.61L271.11,146.50L269.79,144.63L270.52,139.11L267.92,138.89L259.87,146.18L249.86,147.08L243.96,150.42L242.51,151.94L237.19,151.95L235.42,154.86L228.47,156.97L223.91,158.86L222.96,157.80L225.65,155.09L228.47,145.87L223.92,140.89L216.20,135.53L205.32,135.62L203.00,134.44L199.91,132.21L198.69,133.13L123.55,133.13L123.46,133.61Z M110.86,108.09L109.96,109.90L111.35,113.24L112.30,111.88L110.86,108.09Z M64.85,103.16L60.76,103.77L58.58,106.15L64.06,104.74L64.85,103.16Z M36.47,84.32L35.28,85.29L39.17,86.17L42.11,85.36L36.47,84.32Z M114.95,113.35L115.32,113.14L116.05,112.76L116.49,112.49L116.56,112.38L117.79,111.19L117.89,110.82L118.74,109.77L118.99,109.60L116.65,107.22L114.74,97.84L111.99,97.54L110.17,98.79L107.78,98.54L106.97,94.90L102.01,95.04L111.75,83.79L121.04,73.74L128.89,65.72L128.73,65.69L125.16,64.32L116.41,64.16L101.37,61.54L99.09,62.00L98.35,60.67L93.61,62.10L87.58,62.90L82.39,64.08L74.68,67.17L67.41,68.04L66.40,70.59L67.55,73.49L71.60,73.74L73.15,75.60L69.98,74.06L69.75,76.03L67.80,76.77L65.50,75.12L62.95,75.18L51.66,77.97L54.76,81.71L59.48,81.84L66.13,80.33L63.29,83.75L53.29,85.52L49.96,86.99L42.63,91.14L43.87,93.12L42.36,95.03L42.70,96.65L46.28,98.93L44.48,100.56L47.39,99.70L50.90,99.97L51.02,101.24L53.50,99.78L55.12,100.92L46.52,106.40L39.78,109.89L38.66,109.33L33.97,110.58L33.79,111.91L36.39,110.47L41.28,109.78L52.71,105.84L55.17,104.40L66.13,100.09L65.43,98.89L76.74,93.06L80.70,91.80L82.61,92.89L73.14,96.73L73.85,98.49L83.72,95.15L85.08,93.25L87.62,92.06L95.02,95.84L96.55,95.70L109.25,101.42L108.70,99.67L110.99,99.13L110.02,101.28L111.96,101.45L113.05,99.80L114.77,101.21L114.60,103.80L113.15,105.32L115.77,108.53L114.90,113.28L114.95,113.35Z " data-iso="USA" data-name="United States" data-pop="307212123.0"/><path d="M660.36,165.21L659.49,164.51L659.82,164.91L660.36,165.21Z M615.97,160.12L616.73,160.16L618.96,160.33L622.30,156.59L626.75,157.87L627.55,159.84L631.34,160.37L635.28,164.70L645.75,171.12L648.91,172.22L648.93,173.91L649.05,174.30L649.91,174.22L650.63,174.35L651.77,174.63L652.71,174.84L652.75,174.94L652.80,174.67L652.38,169.58L649.92,167.53L657.66,161.58L659.18,163.99L659.35,163.98L659.42,163.92L664.98,161.88L659.49,160.72L657.37,157.98L657.54,156.76L657.47,156.83L657.27,156.97L652.97,159.96L651.40,162.49L646.47,160.63L645.16,157.73L643.77,157.69L643.23,154.61L639.16,151.63L638.01,152.21L631.19,152.42L627.87,149.39L613.16,147.11L615.80,159.30L615.97,160.12Z " data-iso="UZB" data-name="Uzbekistan" data-pop="27606007.0"/><path d="M238.88,265.78L236.69,266.71L233.81,270.68L234.85,278.56L234.55,281.53L241.70,283.38L243.66,286.29L249.77,286.64L248.35,291.49L249.79,296.29L249.09,298.55L251.11,303.55L251.17,303.79L251.96,304.61L255.49,305.68L261.95,300.22L260.00,298.96L259.95,293.96L263.68,295.32L267.74,292.84L270.41,289.62L270.32,289.58L269.69,288.74L270.56,283.98L271.82,282.83L270.65,281.24L273.42,278.69L272.95,277.62L272.50,277.38L269.18,277.44L270.69,274.72L266.59,273.07L264.38,270.54L260.46,270.80L258.35,272.08L254.62,270.74L248.33,270.67L247.68,268.28L243.97,267.14L242.99,264.65L242.70,266.96L237.94,269.65L239.05,274.77L237.61,275.84L236.36,274.03L237.14,266.62L238.78,265.95L238.88,265.78Z " data-iso="VEN" data-name="Venezuela" data-pop="26814843.0"/><path d="M765.33,228.09L765.56,228.43L768.27,230.59L768.38,232.31L773.06,233.68L775.31,236.56L772.70,239.25L776.67,241.36L781.83,247.55L785.50,252.88L785.97,255.20L786.04,255.60L786.11,255.80L786.67,264.35L782.48,266.42L778.21,270.97L778.51,271.22L779.85,273.09L779.88,276.72L783.86,274.59L783.52,271.64L785.04,272.94L791.90,267.66L792.62,261.86L791.87,258.64L789.70,253.19L786.08,249.52L778.04,240.33L780.38,233.99L780.00,233.18L783.41,231.25L783.55,231.21L779.46,229.45L779.07,226.65L772.96,225.50L770.61,227.51L765.45,227.96L765.33,228.09Z " data-iso="VNM" data-name="Vietnam" data-pop="86967524.0"/><path d="M561.58,192.06L560.51,194.67L561.67,195.36L561.79,195.37L561.81,195.07L562.01,194.34L561.86,193.55L561.89,192.64L561.77,192.08L561.58,192.06Z " data-iso="PSE" data-name="Palestine" data-pop="2514845.0"/><path d="M615.26,240.23L614.55,240.34L606.46,241.71L602.17,246.25L598.49,246.55L588.97,246.09L587.99,249.63L588.18,250.85L587.78,253.71L588.68,254.77L592.36,263.11L598.08,260.29L601.29,259.75L606.37,257.95L607.45,256.49L616.86,252.20L617.77,249.28L619.27,248.64L618.24,246.42L618.01,246.31L615.42,240.58L615.26,240.23Z " data-iso="YEM" data-name="Yemen" data-pop="23822783.0"/><path d="M546.08,387.55L545.37,387.62L542.51,389.35L538.96,392.53L538.08,394.91L535.11,396.87L534.06,399.81L530.29,400.31L526.45,398.80L523.20,403.52L519.06,403.32L518.49,397.74L517.57,396.94L517.43,396.83L517.37,398.34L516.85,410.04L514.34,411.80L509.30,410.93L508.23,408.53L506.34,410.64L506.43,410.73L509.61,419.28L511.05,421.88L509.86,426.26L512.38,431.30L515.75,432.81L520.99,431.33L534.67,429.13L545.73,420.37L550.30,413.38L554.18,409.14L555.41,405.11L555.59,404.28L555.26,404.29L553.99,404.33L553.54,404.23L553.28,404.25L553.19,404.20L552.70,405.93L550.68,405.68L552.93,401.12L553.01,401.08L552.97,400.82L553.43,396.34L551.84,388.49L551.84,388.30L551.57,388.10L546.99,387.38L546.12,387.55L546.08,387.55Z M542.01,410.64L544.35,412.34L542.42,415.98L540.16,417.92L537.90,415.40L538.50,413.66L542.01,410.64Z " data-iso="ZAF" data-name="South Africa" data-pop="49052489.0"/><path d="M542.42,415.98L544.35,412.34L542.01,410.64L538.50,413.66L537.90,415.40L540.16,417.92L542.42,415.98Z " data-iso="LSO" data-name="Lesotho" data-pop="2130819.0"/><path d="M558.56,341.66L555.38,339.95L555.16,339.95L552.23,337.67L552.16,337.41L551.62,337.51L544.85,341.28L545.51,343.27L544.74,349.94L546.61,352.27L548.87,351.58L548.74,355.92L542.27,351.98L540.85,349.52L539.49,350.94L532.20,348.77L531.22,347.01L531.11,346.99L531.17,347.46L530.56,354.60L524.85,354.60L524.58,365.18L528.07,370.62L528.66,371.22L529.32,371.07L532.79,370.78L533.86,371.20L534.35,371.77L534.93,371.95L539.69,372.36L541.66,369.86L549.84,364.06L550.29,364.06L550.26,363.57L551.99,360.88L553.92,360.24L558.41,358.48L559.08,358.23L558.93,357.97L557.79,356.57L559.39,353.01L559.74,346.92L560.27,346.67L558.74,341.85L558.73,341.75L558.56,341.66Z " data-iso="ZMB" data-name="Zambia" data-pop="11862740.0"/><path d="M552.28,387.93L557.05,380.46L557.89,369.82L556.98,367.45L550.27,364.63L550.29,364.06L549.84,364.06L541.66,369.86L539.69,372.36L534.93,371.95L534.35,371.77L534.28,371.94L536.63,377.42L540.09,381.40L542.01,385.09L545.17,386.18L545.94,387.42L546.08,387.55L546.12,387.55L546.99,387.38L551.57,388.10L551.84,388.30L552.28,387.93Z " data-iso="ZWE" data-name="Zimbabwe" data-pop="11392629.0"/><path d="M793.38,236.65L788.34,237.46L787.64,241.88L788.74,242.48L792.70,241.29L793.38,236.65Z M773.41,130.25L773.41,130.73L775.15,137.67L779.73,136.62L787.86,141.22L784.88,140.91L781.31,141.52L778.38,145.48L775.31,145.81L773.73,147.99L770.70,147.39L770.13,150.86L767.87,154.96L765.65,156.09L758.36,156.68L754.98,158.52L737.42,155.69L730.76,154.91L722.78,149.71L719.90,148.35L713.74,146.97L708.90,145.25L709.06,143.21L707.08,140.06L697.47,134.65L696.27,132.70L696.18,132.54L696.04,132.53L695.42,132.68L695.36,132.79L695.22,132.84L694.95,132.81L694.67,132.74L691.51,135.87L692.84,139.18L685.83,140.19L685.68,144.73L686.69,146.66L684.24,145.87L680.10,147.07L683.92,153.19L683.68,156.97L683.63,157.04L683.75,157.25L676.57,161.21L674.48,163.57L670.22,163.07L667.90,166.75L667.67,166.79L667.73,166.98L668.91,169.80L672.06,170.53L673.30,174.66L673.24,174.72L673.10,174.75L672.28,174.70L671.81,174.99L672.36,175.44L672.41,175.47L672.57,175.42L676.65,176.98L678.38,179.81L679.87,180.29L680.00,180.35L680.36,180.52L681.66,180.90L682.13,181.02L682.93,181.00L683.13,180.94L683.14,180.96L683.17,180.98L683.96,181.82L685.41,184.14L687.52,185.63L687.28,185.83L687.46,185.74L690.08,183.81L690.33,181.16L694.21,181.82L696.47,180.26L700.12,181.44L706.68,179.76L706.94,178.72L713.29,177.63L716.76,178.88L717.18,181.47L718.63,183.28L719.27,186.64L721.00,188.11L724.66,188.77L730.41,191.10L733.38,191.78L734.58,191.08L739.71,194.52L741.01,194.39L743.88,191.54L746.58,193.56L750.07,200.49L748.70,207.13L748.68,207.13L748.80,207.22L751.06,209.42L752.09,212.98L750.05,220.50L750.77,222.67L754.35,223.21L759.14,230.31L762.90,230.95L762.88,231.00L763.08,231.16L765.10,232.27L764.15,227.69L765.20,227.97L765.33,228.09L765.45,227.96L770.61,227.51L772.96,225.50L779.07,226.65L779.46,229.45L783.55,231.21L783.82,231.15L788.33,230.62L790.88,235.68L790.66,233.54L795.30,229.99L797.29,230.25L799.66,228.75L799.67,228.74L799.67,228.67L799.69,228.58L799.78,228.56L799.86,228.64L798.69,226.17L799.00,226.07L800.79,227.54L801.06,227.61L801.27,227.47L801.34,227.42L801.79,227.50L801.97,227.32L805.02,226.87L809.96,223.29L813.30,220.03L813.63,218.21L815.44,217.35L813.91,215.17L814.12,212.25L816.13,210.92L816.69,208.11L818.64,206.83L818.36,201.16L816.05,199.88L816.58,197.39L811.93,193.56L815.48,194.16L811.53,191.12L811.16,189.85L806.74,184.71L803.91,183.27L806.89,176.99L810.82,175.74L810.60,174.11L803.51,173.32L802.58,175.00L800.01,174.37L798.98,171.82L796.13,171.32L794.13,167.92L797.84,166.94L797.81,165.71L801.14,161.62L804.86,163.55L803.73,167.02L804.98,167.61L811.54,164.79L811.59,164.81L816.97,159.29L820.11,159.89L818.93,158.07L821.66,156.93L822.34,154.95L824.72,155.69L824.86,155.81L824.97,155.70L825.69,154.32L823.00,147.15L826.72,146.88L826.78,141.83L822.46,136.24L816.53,137.66L810.18,132.41L803.95,130.95L796.35,123.51L790.99,119.20L781.27,117.70L777.60,118.76L779.99,122.85L779.09,124.13L779.00,128.24L779.92,129.41L777.21,131.32L774.12,130.55L773.41,130.25Z " data-iso="CHN" data-name="China" data-pop="1338612968.0"/></g></svg>
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'><svg enable_background="new 0 0 1000 525" height="525px" style="stroke-linejoin: round; stroke:#000; fill: none;" version="1.1" viewBox="0 0 1000 525" width="1000px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"><![CDATA[path { fill-rule: evenodd; }]]></style></defs><metadata><views><view h="525.010727376" padding="0.03" w="1000"><proj flip="auto" id="naturalearth" lon0="0"/><bbox h="463.56" w="884.64" x="95.31" y="-3.13"/></view></views></metadata><g class="" id="countries"><path d="M673.19,174.69L668.98,173.86L663.88,176.11L662.21,171.36L660.29,170.46L652.79,175.05L652.75,174.94L652.71,174.84L651.77,174.63L650.63,174.35L649.91,174.22L649.05,174.30L648.91,174.32L644.26,175.34L644.00,177.91L640.35,179.69L640.42,181.12L638.31,182.04L635.33,180.46L635.10,180.50L635.20,180.74L634.87,185.17L633.83,185.97L636.20,194.72L638.92,195.72L638.00,200.23L637.37,201.20L638.56,201.59L647.26,202.88L653.15,201.28L653.07,197.80L654.76,196.02L660.96,193.73L661.41,189.57L662.92,188.58L662.88,186.49L665.15,181.07L664.06,179.36L672.13,175.61L672.41,175.47L672.36,175.44L671.81,174.99L672.28,174.70L673.10,174.75L673.24,174.72L673.19,174.69Z " data-iso="AFG" data-name="Afghanistan" data-pop="28400000.0"/><path d="M497.63,329.25L496.11,331.69L497.04,332.99L498.63,339.18L497.68,340.32L500.01,347.19L499.22,352.05L495.96,356.17L493.42,368.46L493.29,369.82L497.44,368.81L500.20,370.39L513.52,370.35L514.79,371.67L522.50,372.51L527.70,371.43L528.66,371.22L528.07,370.62L524.58,365.18L524.85,354.60L530.56,354.60L531.17,347.46L531.11,346.99L530.99,347.06L526.02,348.16L526.03,345.29L524.59,341.97L524.60,334.27L520.99,334.14L520.98,332.92L518.09,333.28L516.45,336.73L511.64,337.08L508.18,329.22L497.82,329.09L497.63,329.25Z M497.85,324.70L497.78,324.65L495.73,324.64L495.49,325.17L494.60,326.02L494.66,326.13L495.08,327.17L495.17,327.68L495.14,328.62L495.18,328.72L496.02,328.57L497.10,325.06L497.81,324.76L497.85,324.70Z " data-iso="AGO" data-name="Angola" data-pop="12799293.0"/><path d="M513.96,155.76L513.08,155.56L512.83,155.48L512.15,158.18L512.51,158.22L512.54,162.01L512.78,163.15L514.52,165.54L514.56,165.86L515.39,165.00L516.33,164.41L517.00,162.07L517.01,161.80L516.98,161.72L515.37,159.41L515.57,158.20L515.60,158.16L515.64,158.00L515.40,157.10L514.87,156.61L514.12,155.85L514.01,155.77L513.96,155.76Z " data-iso="ALB" data-name="Albania" data-pop="3639453.0"/><path d="M462.37,155.84L462.36,155.56L461.96,155.46L461.65,155.50L461.57,155.60L461.53,155.76L462.01,156.09L462.27,155.95L462.35,155.92L462.37,155.84Z " data-iso="AND" data-name="Andorra" data-pop="83888.0"/><path d="M625.07,214.89L620.77,221.26L614.05,222.37L612.37,221.05L612.28,221.23L612.43,221.98L615.74,226.10L623.57,227.21L623.74,226.92L623.71,226.39L624.12,222.47L624.73,219.14L626.46,218.74L626.40,218.60L626.14,216.62L625.91,216.33L625.57,216.35L625.43,216.19L625.08,214.85L625.07,214.89Z " data-iso="ARE" data-name="United Arab Emirates" data-pop="4798491.0"/><path d="M274.97,495.77L276.60,500.53L276.92,501.45L277.52,503.23L277.59,503.17L284.17,503.64L286.19,502.51L280.14,500.52L275.17,495.92L274.97,495.77Z M255.24,389.81L255.88,390.45L255.32,394.16L252.16,396.31L253.36,405.13L251.10,409.45L250.29,412.92L250.30,418.86L251.52,423.92L253.48,427.42L254.06,430.80L252.33,439.05L252.72,442.16L254.46,446.97L253.55,448.64L253.46,454.29L255.17,458.76L257.26,467.03L259.01,467.24L258.49,469.14L259.72,476.54L259.17,479.63L260.04,480.52L258.61,486.36L260.61,489.21L262.73,489.02L265.42,493.51L270.67,493.57L275.12,494.76L275.20,494.59L271.15,490.21L274.10,486.18L273.87,484.39L277.18,478.22L270.65,472.91L271.13,471.24L275.36,467.37L274.89,464.93L276.69,462.35L274.83,460.96L278.54,461.45L277.66,459.00L274.30,458.96L272.96,454.35L276.92,455.57L280.82,454.38L280.03,447.62L286.37,447.33L292.58,443.42L293.53,438.41L289.69,433.20L287.37,431.63L286.65,428.78L286.96,424.83L286.97,424.50L286.86,420.71L286.89,417.74L287.37,416.43L287.45,416.29L287.56,416.12L291.72,409.70L297.17,405.26L296.51,400.33L294.42,399.71L294.19,399.71L294.32,401.25L291.71,406.32L289.38,406.58L282.89,405.53L285.20,399.79L284.41,398.13L274.81,393.53L271.64,391.10L268.77,387.80L268.68,387.70L268.63,387.64L265.50,386.87L263.71,389.59L261.37,387.23L256.43,387.64L255.32,389.64L255.24,389.81Z " data-iso="ARG" data-name="Argentina" data-pop="40913584.0"/><path d="M584.92,160.23L584.86,160.28L582.78,160.51L580.75,160.85L580.61,160.88L580.67,161.04L582.63,164.75L583.61,164.68L585.04,165.73L585.16,165.89L585.44,165.83L587.24,166.63L588.15,166.45L589.32,168.56L589.47,168.83L589.63,168.87L590.03,168.71L590.53,168.73L590.47,168.41L589.31,166.27L587.57,164.98L585.01,160.39L584.92,160.23Z " data-iso="ARM" data-name="Armenia" data-pop="2967004.0"/><path d="M645.61,483.58L643.96,485.63L646.97,485.59L649.11,484.12L645.61,483.58Z " data-iso="ATF" data-name="Fr. S. and Antarctic Lands" data-pop="140.0"/><path d="M869.03,454.28L867.11,457.98L866.20,461.88L868.01,463.94L873.54,460.93L877.95,454.85L877.34,454.26L869.03,454.28Z M896.50,350.86L895.13,346.40L891.73,352.28L892.09,353.81L888.73,365.59L886.03,370.41L881.28,370.10L871.45,361.76L873.34,357.95L873.60,355.69L877.20,352.27L874.52,352.53L870.58,350.97L865.97,349.97L862.45,348.09L864.33,351.46L858.58,352.34L855.95,355.12L852.99,359.58L853.53,361.22L849.19,360.87L845.35,357.42L841.60,359.10L838.71,362.33L837.37,365.75L836.05,366.54L833.49,370.41L832.12,366.89L829.29,370.05L829.11,372.39L825.49,377.24L822.39,379.11L818.26,379.66L817.00,380.62L808.17,383.38L803.66,386.22L801.99,388.39L801.31,386.64L797.88,394.95L798.54,402.27L796.87,399.79L796.41,403.24L797.74,412.53L796.93,417.63L797.53,421.71L794.30,428.70L793.38,428.25L796.04,433.54L800.74,433.53L807.01,429.90L811.72,429.37L816.77,429.95L822.70,425.98L827.51,423.73L829.33,423.92L836.45,421.74L844.61,421.71L848.36,423.47L851.81,429.66L851.62,432.08L857.77,428.93L857.19,432.74L854.83,434.44L857.32,434.10L858.99,431.63L860.20,432.73L858.98,435.89L861.37,434.83L860.80,443.96L863.44,445.72L866.25,445.95L868.27,447.27L873.72,443.97L876.10,446.93L883.53,443.73L887.13,443.51L889.68,441.04L892.49,436.57L897.79,430.58L907.35,420.77L912.90,411.49L913.58,405.52L914.57,402.32L914.43,396.93L911.04,392.09L911.05,388.87L908.65,388.44L908.40,383.72L907.45,380.20L901.93,376.38L896.50,350.86Z " data-iso="AUS" data-name="Australia" data-pop="21262641.0"/><path d="M503.69,134.42L498.28,133.16L497.63,134.24L495.25,133.94L495.18,133.91L495.15,133.98L493.25,138.40L490.97,137.60L488.55,138.59L483.74,138.21L483.67,138.24L483.76,138.29L483.96,138.44L483.92,138.70L483.72,139.13L483.75,139.18L483.81,139.43L483.86,139.52L483.93,139.81L483.89,139.87L484.00,139.87L486.02,140.13L486.32,140.43L486.32,140.55L486.40,140.58L491.01,139.79L490.99,140.30L494.75,141.63L495.33,141.75L495.45,141.77L497.70,142.18L498.46,141.54L501.70,140.62L501.85,140.55L502.26,140.17L502.66,138.79L503.29,138.20L504.31,136.71L504.45,136.56L504.28,136.44L503.58,135.23L503.56,135.04L503.76,134.53L503.77,134.50L503.69,134.42Z " data-iso="AUT" data-name="Austria" data-pop="8210281.0"/><path d="M585.16,165.89L585.22,165.95L585.33,166.08L585.40,166.15L587.58,168.38L588.90,168.73L589.47,168.83L589.32,168.56L588.15,166.45L587.24,166.63L585.44,165.83L585.16,165.89Z M588.60,158.10L588.56,158.22L589.66,160.24L589.38,160.95L585.46,159.76L584.92,160.23L585.01,160.39L587.57,164.98L589.31,166.27L590.47,168.41L590.53,168.73L590.71,168.74L594.38,165.96L595.48,166.97L597.61,170.41L597.33,169.06L598.49,164.14L600.76,163.83L594.98,158.47L594.68,158.26L593.07,160.51L588.92,158.17L588.60,158.10Z " data-iso="AZE" data-name="Azerbaijan" data-pop="8238672.0"/><path d="M551.74,316.71L550.39,316.76L549.17,318.13L547.11,317.67L547.06,317.86L547.06,318.00L547.70,319.05L547.66,321.31L548.14,323.50L548.21,324.04L549.18,324.06L551.15,321.65L551.39,320.97L551.76,316.81L551.82,316.72L551.74,316.71Z " data-iso="BDI" data-name="Burundi" data-pop="8988091.0"/><path d="M466.20,124.98L465.49,125.28L464.33,125.86L469.37,129.83L470.68,129.17L473.03,131.23L473.25,131.24L473.32,131.18L473.05,130.30L473.41,129.35L474.06,129.21L474.08,129.22L474.09,129.16L474.35,127.58L473.72,127.11L473.68,127.05L473.15,127.04L473.41,127.04L473.24,126.85L472.88,126.95L472.87,126.97L469.97,124.74L468.39,125.34L466.53,124.89L466.20,124.98Z " data-iso="BEL" data-name="Belgium" data-pop="10414336.0"/><path d="M468.38,266.04L465.12,264.34L464.94,265.29L464.87,265.65L464.79,265.86L463.62,267.36L460.39,268.89L460.31,268.88L460.23,269.27L459.89,271.05L461.69,273.98L462.55,285.95L463.15,285.80L464.59,285.56L465.89,285.41L466.08,275.84L467.11,275.34L469.17,270.88L468.45,266.60L468.57,266.37L468.38,266.04Z " data-iso="BEN" data-name="Benin" data-pop="8791832.0"/><path d="M457.57,254.60L455.23,254.38L447.61,259.35L447.44,260.70L444.84,260.61L444.00,263.52L441.33,265.90L440.64,270.71L440.59,270.91L440.78,271.15L444.24,273.70L445.90,272.73L449.20,274.38L449.26,274.29L449.23,274.10L448.71,270.62L449.10,268.87L456.63,268.26L457.34,268.45L458.04,268.61L459.03,268.89L459.23,269.02L459.52,268.92L460.31,268.88L460.39,268.89L463.62,267.36L464.79,265.86L464.87,265.65L464.73,265.48L462.34,263.01L460.91,261.70L458.17,255.03L458.21,254.86L457.57,254.60Z " data-iso="BFA" data-name="Burkina Faso" data-pop="15746232.0"/><path d="M726.22,229.39L730.13,226.20L732.77,226.58L736.66,233.79L736.71,233.78L737.27,232.07L736.83,229.66L736.78,229.53L736.70,229.27L734.73,223.40L731.95,224.51L731.90,221.90L734.55,219.21L732.30,218.09L726.27,217.32L723.21,214.05L720.80,215.48L722.38,217.99L721.46,219.70L723.88,222.25L723.68,223.43L726.09,229.11L726.22,229.39Z " data-iso="BGD" data-name="Bangladesh" data-pop="156050883.0"/><path d="M520.91,149.78L520.81,149.85L521.34,154.57L520.68,154.72L520.71,156.54L520.49,156.60L520.97,157.12L522.54,158.72L522.42,159.11L522.43,160.00L522.40,160.07L522.71,160.11L529.40,160.32L531.49,159.89L531.55,158.62L531.90,158.72L531.89,158.62L535.08,157.90L536.59,157.82L536.48,157.54L534.92,156.05L535.59,155.20L537.55,152.39L537.52,151.54L532.51,150.11L531.53,150.33L521.12,149.93L520.91,149.78Z " data-iso="BGR" data-name="Bulgaria" data-pop="7204687.0"/><path d="M509.42,155.72L509.47,155.71L509.34,154.27L509.83,154.06L511.22,152.27L511.30,152.27L511.46,152.09L510.88,148.92L510.52,147.55L510.42,147.56L510.24,147.57L502.45,146.84L501.35,147.92L509.17,155.63L509.42,155.72Z " data-iso="BIH" data-name="Bosnia and Herz." data-pop="4613414.0"/><path d="M530.63,108.74L528.70,109.88L528.02,109.79L526.96,110.30L526.90,110.34L526.91,110.49L527.26,111.89L525.16,113.14L524.81,114.90L519.71,116.23L519.51,116.16L519.95,117.31L520.98,120.49L519.42,121.88L520.58,124.07L520.80,124.41L520.82,124.39L530.17,123.61L538.38,124.55L541.84,122.39L542.35,122.42L542.32,122.33L542.59,119.04L541.58,116.66L538.31,111.83L538.20,110.66L534.42,110.28L531.11,109.04L530.71,108.75L530.63,108.74Z " data-iso="BLR" data-name="Belarus" data-pop="9648533.0"/><path d="M189.39,242.10L188.69,242.20L186.49,244.15L186.45,244.46L186.31,245.33L185.40,251.36L185.76,251.32L186.43,251.36L186.40,251.12L188.51,248.70L189.23,245.53L189.18,242.51L189.39,242.10Z " data-iso="BLZ" data-name="Belize" data-pop="307899.0"/><path d="M281.67,380.22L279.82,369.76L279.62,366.36L274.12,366.30L272.73,362.27L273.30,360.39L272.46,357.43L262.11,352.70L260.16,352.59L257.64,349.98L256.61,342.84L253.02,343.51L246.52,347.79L244.37,347.26L244.01,347.27L244.44,348.05L247.11,352.82L246.23,357.04L246.98,358.79L245.99,360.32L246.09,370.73L246.09,370.74L246.18,371.14L249.71,381.45L251.61,384.87L253.18,389.81L254.75,389.93L255.24,389.81L255.32,389.64L256.43,387.64L261.37,387.23L263.71,389.59L265.50,386.87L268.63,387.64L268.68,387.70L268.73,387.52L270.39,378.41L275.58,377.16L278.35,377.12L281.47,379.68L281.47,380.27L281.67,380.22Z " data-iso="BOL" data-name="Bolivia" data-pop="9775246.0"/><path d="M304.39,308.97L301.25,309.13L301.40,314.21L305.81,313.20L308.20,309.21L304.39,308.97Z M270.32,289.58L270.41,289.62L267.74,292.84L263.68,295.32L259.95,293.96L260.00,298.96L261.95,300.22L255.49,305.68L251.96,304.61L251.17,303.79L250.59,303.95L249.73,300.71L246.98,302.01L242.01,302.05L242.40,304.37L241.30,308.09L243.38,312.42L241.85,323.15L241.80,323.28L241.79,323.51L238.70,323.69L233.45,326.25L229.77,335.14L233.75,341.76L235.82,343.88L240.52,343.24L240.76,347.48L243.72,347.28L244.01,347.27L244.37,347.26L246.52,347.79L253.02,343.51L256.61,342.84L257.64,349.98L260.16,352.59L262.11,352.70L272.46,357.43L273.30,360.39L272.73,362.27L274.12,366.30L279.62,366.36L279.82,369.76L281.67,380.22L281.47,380.27L281.56,380.53L282.79,387.25L290.25,390.79L290.63,392.54L294.70,394.21L294.15,399.19L294.19,399.71L294.42,399.71L296.51,400.33L297.17,405.26L291.72,409.70L287.56,416.12L287.45,416.29L287.66,416.55L290.07,416.29L299.76,423.01L300.79,424.61L301.81,429.07L302.93,427.84L304.84,423.22L308.42,418.84L310.30,413.32L313.09,408.69L312.00,402.20L317.57,394.44L323.33,391.27L327.46,390.42L327.38,389.54L330.76,390.24L331.84,387.97L333.89,386.85L333.83,384.12L337.15,377.09L336.89,374.80L338.48,371.45L338.50,362.67L337.95,356.70L342.64,349.78L342.93,348.35L348.15,342.23L349.99,338.18L349.77,330.98L347.97,326.47L342.95,325.69L337.21,320.26L334.26,318.37L327.21,318.12L322.22,317.42L319.90,319.36L320.12,315.48L317.27,312.99L309.31,310.67L305.11,316.52L305.38,314.34L300.64,312.53L300.48,311.50L296.48,314.01L297.99,310.87L302.34,305.17L300.07,296.44L298.56,293.04L298.26,293.65L294.32,300.26L291.75,299.91L289.11,299.89L289.03,299.85L288.89,299.84L286.67,299.44L285.10,299.26L283.35,301.25L283.26,301.22L283.13,301.27L280.39,301.34L276.98,303.57L273.65,302.02L272.94,295.34L273.89,294.11L270.60,289.51L270.32,289.58Z " data-iso="BRA" data-name="Brazil" data-pop="198739269.0"/><path d="M812.15,290.66L812.47,292.48L813.15,292.51L812.15,290.66Z M812.20,290.43L812.03,290.22L811.57,290.49L809.58,291.76L809.23,291.75L810.87,293.70L811.63,292.61L812.15,290.66L812.20,290.43Z " data-iso="BRN" data-name="Brunei" data-pop="388190.0"/><path d="M730.00,208.60L728.59,207.63L725.08,206.80L722.27,209.81L722.21,210.34L722.19,210.41L724.78,212.49L731.94,211.93L730.03,208.83L730.03,208.75L730.00,208.60Z " data-iso="BTN" data-name="Bhutan" data-pop="691141.0"/><path d="M534.22,371.75L530.88,372.78L528.13,372.51L522.05,373.61L521.11,378.76L520.80,386.86L517.74,388.76L517.43,396.74L517.43,396.83L517.57,396.94L518.49,397.74L519.06,403.32L523.20,403.52L526.45,398.80L530.29,400.31L534.06,399.81L535.11,396.87L538.08,394.91L538.96,392.53L542.51,389.35L545.37,387.62L546.08,387.55L545.94,387.42L545.17,386.18L542.01,385.09L540.09,381.40L536.63,377.42L534.28,371.94L534.35,371.77L534.22,371.75Z " data-iso="BWA" data-name="Botswana" data-pop="1990876.0"/><path d="M527.58,269.12L524.19,270.51L521.40,274.56L515.84,276.23L511.86,279.64L509.54,280.89L505.53,281.32L505.20,281.29L504.89,281.88L503.32,284.74L502.60,288.53L502.90,291.49L507.33,299.71L507.48,300.05L507.69,299.56L508.66,295.79L510.90,295.24L514.78,295.62L514.95,295.73L514.91,295.02L516.33,290.69L525.10,292.96L536.22,289.19L541.13,289.59L542.02,289.91L541.80,289.63L538.74,284.46L535.06,281.17L531.96,277.25L531.81,277.20L531.51,277.11L530.16,274.79L530.20,273.07L527.94,269.59L527.71,269.15L527.58,269.12Z " data-iso="CAF" data-name="Central African Rep." data-pop="4511488.0"/><path d="M288.51,143.77L290.25,144.79L287.60,144.99L287.43,143.78L290.29,140.55L290.48,142.51L288.51,143.77Z M250.30,146.95L254.39,144.43L265.45,138.43L269.12,135.62L277.77,132.36L282.03,132.74L282.70,133.78L279.35,138.79L279.10,142.33L288.14,146.07L283.62,147.65L274.71,151.80L272.62,151.28L273.60,148.64L278.70,145.91L279.53,144.16L271.19,146.59L271.11,146.50L269.79,144.63L270.52,139.11L267.92,138.89L259.87,146.18L249.86,147.08L250.30,146.95Z M114.91,127.43L118.59,128.40L119.01,130.87L121.27,134.15L118.30,134.79L117.64,133.26L114.17,131.65L115.69,130.85L114.91,127.43Z M308.97,124.35L303.83,130.21L306.97,129.76L308.13,132.20L311.97,131.99L312.79,134.91L310.69,136.35L313.16,137.90L311.17,141.28L308.83,139.77L309.54,137.26L305.06,138.45L302.03,138.00L295.44,138.08L295.16,136.81L303.45,127.07L307.48,124.24L308.97,124.35Z M114.95,113.35L115.32,113.14L116.05,112.76L116.49,112.49L116.34,112.76L115.65,113.20L115.01,113.43L114.95,113.35Z M251.80,79.21L252.86,78.63L257.31,80.90L260.71,83.80L255.32,84.01L248.15,85.72L246.95,84.11L243.65,84.53L246.03,83.01L250.64,77.43L251.80,79.21Z M279.01,69.75L279.50,71.49L278.15,72.68L274.17,72.98L274.58,71.19L279.01,69.75Z M230.41,65.74L232.45,66.65L229.94,69.33L225.36,67.89L227.68,65.96L230.41,65.74Z M203.00,134.43L202.99,134.44L203.00,134.44L199.91,132.21L198.69,133.13L123.55,133.13L123.51,133.00L122.99,129.14L120.68,130.41L118.87,127.96L115.29,126.48L115.26,124.12L116.62,121.08L114.67,118.17L114.56,115.04L118.21,111.64L118.99,109.62L118.99,109.60L116.65,107.22L114.74,97.84L111.99,97.54L110.17,98.79L107.78,98.54L106.97,94.90L102.01,95.04L111.75,83.79L121.04,73.74L128.89,65.72L129.17,65.77L135.60,67.80L140.28,66.75L146.54,66.37L146.70,67.06L161.61,63.89L163.21,66.27L168.70,66.55L173.45,65.22L180.75,67.56L186.71,67.87L188.51,69.80L185.48,70.33L187.37,71.63L190.78,71.70L196.30,70.87L200.21,73.41L199.94,74.98L202.66,70.63L201.03,69.89L210.47,70.54L212.98,70.38L223.94,70.84L227.19,69.11L230.71,70.01L228.63,72.10L237.67,68.84L235.94,67.81L239.19,66.23L234.18,65.26L233.92,63.69L235.65,61.47L240.31,59.01L244.14,60.90L244.44,63.57L241.07,65.67L246.17,66.34L244.61,69.95L249.23,66.88L250.74,68.57L248.89,70.23L249.58,73.24L254.19,70.59L257.76,66.99L260.61,65.12L267.06,67.32L263.21,73.59L253.59,76.06L249.63,75.32L250.80,76.53L246.22,78.92L240.88,77.72L242.13,78.94L246.48,79.69L240.50,83.15L234.43,84.50L232.11,84.13L233.40,86.44L229.09,87.08L226.42,88.37L218.97,94.40L215.88,99.06L219.80,100.19L218.97,105.21L222.56,105.09L241.81,112.35L239.20,119.12L241.64,125.14L243.44,125.79L248.20,121.90L248.43,113.60L250.67,112.98L257.83,109.24L258.89,108.02L260.03,103.71L258.36,99.17L261.31,97.42L263.14,90.09L265.25,87.85L272.00,89.18L274.99,88.09L278.40,92.08L283.00,92.61L281.56,95.77L279.77,96.11L278.59,100.07L283.76,101.06L283.91,102.55L290.67,99.25L293.76,95.20L297.06,100.36L295.48,101.08L299.68,110.14L298.82,112.38L306.23,113.76L299.03,116.76L298.52,117.69L306.29,115.40L306.30,116.92L309.17,117.35L309.00,121.94L306.19,123.85L300.56,125.18L296.82,127.94L290.74,129.28L289.19,128.68L279.51,128.62L276.52,129.66L274.67,131.89L267.56,135.71L263.77,135.00L261.29,140.79L255.94,142.84L251.05,146.37L249.86,147.08L243.96,150.42L242.51,151.94L237.19,151.95L235.42,154.86L228.47,156.97L223.91,158.86L222.96,157.80L225.65,155.09L228.47,145.87L223.92,140.89L216.20,135.53L205.32,135.62L203.00,134.44L203.00,134.43Z M197.98,56.99L202.27,55.82L204.95,57.68L209.17,55.85L210.26,59.46L212.67,59.03L213.46,55.49L217.64,55.23L218.92,56.87L217.62,60.95L223.03,64.34L222.42,65.53L219.80,65.13L216.99,68.02L214.51,68.27L208.74,66.35L200.10,68.67L192.14,69.25L190.68,66.93L186.15,66.67L184.98,65.26L187.19,64.14L198.15,63.33L189.53,62.91L188.07,61.05L192.88,60.06L186.29,59.76L191.73,56.29L199.72,54.72L197.98,56.99Z M279.17,53.91L284.80,54.90L285.30,56.26L281.66,56.10L276.05,55.02L276.23,53.86L279.17,53.91Z M258.27,61.65L262.56,61.40L263.77,59.95L263.25,58.09L266.26,54.83L272.31,53.69L274.61,53.79L275.91,56.47L272.89,59.00L279.70,57.67L280.92,56.71L285.64,57.04L288.30,58.61L285.22,61.00L290.83,59.67L293.79,60.31L296.31,62.14L299.50,63.10L297.40,64.81L299.17,65.36L297.11,68.16L299.35,70.54L305.25,71.89L309.66,73.75L309.00,75.93L307.47,75.64L303.99,79.31L293.07,76.13L295.39,80.61L295.99,80.12L299.35,83.84L297.75,86.66L288.60,83.96L292.50,87.62L292.50,89.97L286.20,88.25L280.43,85.03L282.17,84.51L278.65,81.37L269.73,82.43L267.11,81.23L269.74,79.52L277.52,78.78L278.80,76.26L282.81,74.65L285.31,71.78L283.91,68.59L277.92,67.76L279.86,66.52L277.25,63.95L267.94,64.84L257.47,64.35L257.68,63.28L252.12,63.10L251.77,61.50L256.86,61.72L251.93,60.43L256.34,55.49L259.69,54.08L266.97,53.46L263.71,55.05L260.80,59.02L262.46,60.50L258.27,61.65Z M233.93,53.07L238.97,54.58L237.02,55.69L237.60,58.30L232.47,60.37L225.16,56.62L226.67,55.62L228.18,56.54L229.51,54.55L233.93,53.07Z M249.67,52.45L255.35,53.29L249.09,56.52L245.39,57.09L243.23,58.64L241.38,56.44L242.83,54.19L246.03,52.67L249.67,52.45Z M190.26,52.59L194.11,52.15L198.36,54.35L184.13,58.10L181.99,59.81L174.29,61.32L173.96,59.68L171.22,58.32L180.22,53.41L179.86,51.92L190.26,52.59Z M244.84,45.97L241.80,49.71L237.15,50.11L237.77,48.47L234.58,48.36L236.65,46.09L238.83,47.47L240.09,45.51L244.84,45.97Z M220.72,47.10L224.16,47.20L223.11,49.81L217.25,50.18L204.98,51.68L205.21,50.60L212.36,49.52L208.25,49.73L206.58,48.85L203.50,50.07L198.21,49.49L200.17,48.25L207.79,45.86L212.97,48.16L217.76,48.62L220.93,45.02L220.72,47.10Z M253.27,44.75L259.59,45.43L260.16,47.11L262.85,48.21L269.42,48.43L273.92,47.78L280.89,48.69L282.17,49.33L279.48,51.04L274.37,51.38L272.84,50.39L271.20,51.30L264.83,51.52L254.41,51.06L255.33,48.22L249.66,46.53L247.42,45.05L253.27,44.75Z M208.50,43.52L205.87,45.23L200.49,46.14L202.02,45.10L191.30,47.21L190.47,46.28L200.70,43.68L208.50,43.52Z M221.52,41.54L221.17,42.57L216.20,43.57L216.04,41.97L221.52,41.54Z M253.02,40.40L254.10,41.83L249.57,42.33L248.87,41.11L251.15,39.74L253.02,40.40Z M239.78,38.36L245.43,39.89L245.53,41.90L240.37,41.11L235.06,41.10L238.11,39.78L235.68,39.63L239.78,38.36Z M268.67,33.83L273.79,35.58L278.42,38.44L272.00,39.08L268.02,41.30L262.42,41.31L258.43,39.36L262.08,38.70L256.41,37.37L255.92,36.28L264.40,33.36L268.67,33.83Z M318.66,29.50L324.60,29.69L322.10,30.26L330.56,30.49L333.67,31.14L323.11,32.97L320.21,34.05L310.41,36.44L296.03,37.86L300.05,38.57L292.29,38.97L299.24,40.17L290.54,41.96L283.44,43.84L288.26,44.69L285.67,46.01L280.92,45.84L271.85,46.42L262.99,45.95L270.67,42.10L270.98,41.46L280.39,38.76L278.16,35.82L282.70,35.97L286.76,37.50L285.02,35.93L298.96,34.48L296.21,33.88L291.98,34.73L282.57,35.31L273.50,34.36L274.22,32.63L270.62,32.52L279.02,31.56L284.47,31.68L286.35,30.76L295.96,32.12L294.59,30.16L305.54,30.40L306.23,29.43L318.66,29.50Z " data-iso="CAN" data-name="Canada" data-pop="33487208.0"/><path d="M483.18,137.98L481.47,137.63L480.38,137.95L478.66,138.08L478.43,138.00L478.10,138.16L474.37,143.06L475.70,142.04L476.92,143.72L476.97,143.84L477.07,143.92L480.85,142.17L482.52,144.12L483.60,142.07L486.21,141.00L486.32,140.55L486.32,140.43L486.02,140.13L484.00,139.87L483.89,139.87L483.68,139.85L483.64,139.86L483.61,139.73L483.61,139.47L483.72,139.13L483.92,138.70L483.96,138.44L483.76,138.29L483.67,138.24L483.18,137.98Z " data-iso="CHE" data-name="Switzerland" data-pop="7604467.0"/><path d="M277.52,503.23L276.92,501.45L276.60,500.53L274.97,495.77L274.87,495.70L272.69,495.21L271.00,497.99L272.41,499.97L275.59,502.23L269.54,501.86L277.13,503.23L277.52,503.23Z M255.15,483.71L253.52,482.28L252.70,484.45L255.39,486.70L255.15,483.71Z M250.75,463.37L251.29,461.92L248.62,458.60L248.91,462.80L250.75,463.37Z M246.09,370.74L245.88,370.98L245.38,372.47L245.30,372.84L243.64,373.75L243.83,373.93L245.93,385.04L245.96,392.80L246.63,398.26L246.05,410.84L246.70,416.13L246.03,416.80L248.26,425.18L247.72,426.74L246.22,441.56L247.78,451.35L247.92,454.58L250.71,457.82L251.72,456.98L252.97,462.31L253.01,466.28L254.96,467.22L253.91,472.68L252.33,471.73L249.81,472.29L254.46,479.62L254.04,479.77L258.98,489.91L255.31,489.02L261.21,493.68L263.34,492.64L261.46,495.80L267.25,495.61L264.14,497.95L269.92,498.90L269.35,496.17L273.51,494.44L275.12,494.76L270.67,493.57L265.42,493.51L262.73,489.02L260.61,489.21L258.61,486.36L260.04,480.52L259.17,479.63L259.72,476.54L258.49,469.14L259.01,467.24L257.26,467.03L255.17,458.76L253.46,454.29L253.55,448.64L254.46,446.97L252.72,442.16L252.33,439.05L254.06,430.80L253.48,427.42L251.52,423.92L250.30,418.86L250.29,412.92L251.10,409.45L253.36,405.13L252.16,396.31L255.32,394.16L255.88,390.45L255.24,389.81L254.75,389.93L253.18,389.81L251.61,384.87L249.71,381.45L246.18,371.14L246.09,370.74Z " data-iso="CHL" data-name="Chile" data-pop="16601707.0"/><path d="M793.38,236.65L788.34,237.46L787.64,241.88L788.74,242.48L792.70,241.29L793.38,236.65Z M773.41,130.25L773.41,130.73L775.15,137.67L779.73,136.62L787.86,141.22L784.88,140.91L781.31,141.52L778.38,145.48L775.31,145.81L773.73,147.99L770.70,147.39L770.13,150.86L767.87,154.96L765.65,156.09L758.36,156.68L754.98,158.52L737.42,155.69L730.76,154.91L722.78,149.71L719.90,148.35L713.74,146.97L708.90,145.25L709.06,143.21L707.08,140.06L697.47,134.65L696.27,132.70L696.18,132.54L696.04,132.53L695.42,132.68L695.36,132.79L695.22,132.84L694.95,132.81L694.67,132.74L691.51,135.87L692.84,139.18L685.83,140.19L685.68,144.73L686.69,146.66L684.24,145.87L680.10,147.07L683.92,153.19L683.68,156.97L683.63,157.04L683.75,157.25L676.57,161.21L674.48,163.57L670.22,163.07L667.90,166.75L667.67,166.79L667.73,166.98L668.91,169.80L672.06,170.53L673.30,174.66L673.24,174.72L673.10,174.75L672.28,174.70L671.81,174.99L672.36,175.44L672.41,175.47L672.57,175.42L676.65,176.98L678.38,179.81L679.87,180.29L680.00,180.35L680.36,180.52L681.66,180.90L682.13,181.02L682.93,181.00L683.13,180.94L683.14,180.96L683.17,180.98L687.54,187.57L688.83,189.09L688.84,189.12L688.94,189.29L689.10,189.90L689.31,190.10L689.65,191.47L689.71,191.68L689.71,191.70L691.91,197.28L692.57,197.21L696.63,199.84L696.76,200.10L696.94,200.33L697.83,199.48L706.59,203.50L707.20,204.60L711.16,206.89L717.08,208.52L719.21,208.30L719.48,208.35L719.42,208.23L720.71,207.55L721.44,207.86L722.00,210.17L722.21,210.34L722.27,209.81L725.08,206.80L728.59,207.63L730.00,208.60L730.03,208.75L730.27,208.75L732.81,207.55L734.17,205.62L741.74,202.68L743.77,206.42L746.47,207.03L746.58,207.10L746.65,206.97L751.06,209.42L752.09,212.98L750.05,220.50L750.77,222.67L754.35,223.21L759.14,230.31L762.90,230.95L762.88,231.00L763.08,231.16L765.10,232.27L764.15,227.69L765.20,227.97L765.33,228.09L765.45,227.96L770.61,227.51L772.96,225.50L779.07,226.65L779.46,229.45L783.55,231.21L783.82,231.15L788.33,230.62L790.88,235.68L790.66,233.54L795.30,229.99L797.29,230.25L799.66,228.75L799.67,228.74L799.67,228.67L799.69,228.58L799.78,228.56L799.86,228.64L798.69,226.17L799.00,226.07L800.79,227.54L801.06,227.61L801.27,227.47L801.34,227.42L801.79,227.50L801.97,227.32L805.02,226.87L809.96,223.29L813.30,220.03L813.63,218.21L815.44,217.35L813.91,215.17L814.12,212.25L816.13,210.92L816.69,208.11L818.64,206.83L818.36,201.16L816.05,199.88L816.58,197.39L811.93,193.56L815.48,194.16L811.53,191.12L811.16,189.85L806.74,184.71L803.91,183.27L806.89,176.99L810.82,175.74L810.60,174.11L803.51,173.32L802.58,175.00L800.01,174.37L798.98,171.82L796.13,171.32L794.13,167.92L797.84,166.94L797.81,165.71L801.14,161.62L804.86,163.55L803.73,167.02L804.98,167.61L811.54,164.79L811.59,164.81L816.97,159.29L820.11,159.89L818.93,158.07L821.66,156.93L822.34,154.95L824.72,155.69L824.86,155.81L824.97,155.70L825.69,154.32L823.00,147.15L826.72,146.88L826.78,141.83L822.46,136.24L816.53,137.66L810.18,132.41L803.95,130.95L796.35,123.51L790.99,119.20L781.27,117.70L777.60,118.76L779.99,122.85L779.09,124.13L779.00,128.24L779.92,129.41L777.21,131.32L774.12,130.55L773.41,130.25Z " data-iso="CHN" data-name="China" data-pop="1338612968.0"/><path d="M447.64,289.77L447.54,289.89L447.95,289.98L448.03,289.84L447.64,289.77Z M433.01,271.85L432.93,271.99L433.64,275.72L433.10,276.77L431.60,281.01L431.43,281.16L431.49,281.20L432.02,285.59L433.25,285.89L434.28,292.62L434.65,292.53L440.40,289.98L445.62,289.51L448.22,289.76L448.24,289.83L448.95,289.13L447.57,284.82L449.55,279.29L449.29,274.47L449.26,274.29L449.20,274.38L445.90,272.73L444.24,273.70L440.78,271.15L440.59,270.91L440.49,270.86L438.39,271.50L438.33,269.85L433.10,271.85L433.01,271.85Z " data-iso="CIV" data-name="Ivory Coast" data-pop="20617068.0"/><path d="M505.36,281.00L500.59,273.91L501.30,272.51L505.64,272.41L503.04,263.49L501.16,261.43L500.61,261.42L500.93,263.09L502.20,266.25L499.60,269.31L498.18,273.70L495.70,277.46L494.53,281.05L491.68,284.92L489.25,283.60L485.27,287.02L483.93,291.17L483.97,291.19L486.26,294.08L488.24,297.16L487.85,299.09L487.79,299.93L488.00,300.25L488.34,300.41L491.79,300.41L492.50,300.41L492.54,300.18L493.21,299.93L498.06,300.09L498.49,300.21L498.57,300.44L499.31,300.44L502.53,300.30L507.34,302.00L507.48,300.08L507.48,300.05L507.33,299.71L502.90,291.49L502.60,288.53L503.32,284.74L504.89,281.88L505.20,281.29L505.36,281.00Z " data-iso="CMR" data-name="Cameroon" data-pop="18879301.0"/><path d="M541.13,289.59L536.22,289.19L525.10,292.96L516.33,290.69L514.91,295.02L514.95,295.73L514.99,296.36L512.25,309.14L507.58,315.93L503.52,324.95L502.23,325.48L497.90,324.58L497.85,324.70L497.81,324.76L497.10,325.06L496.02,328.57L495.18,328.72L495.27,328.89L495.49,329.20L497.62,328.99L497.82,329.09L508.18,329.22L511.64,337.08L516.45,336.73L518.09,333.28L520.98,332.92L520.99,334.14L524.60,334.27L524.59,341.97L526.03,345.29L526.02,348.16L530.99,347.06L531.11,346.99L531.22,347.01L532.20,348.77L539.49,350.94L540.85,349.52L542.27,351.98L548.74,355.92L548.87,351.58L546.61,352.27L544.74,349.94L545.51,343.27L544.85,341.28L551.62,337.51L552.16,337.41L552.07,337.09L550.26,332.85L548.00,325.94L548.21,324.21L548.21,324.04L548.14,323.50L547.66,321.31L547.70,319.05L547.06,318.00L547.06,317.86L546.78,317.73L546.58,316.89L547.43,315.99L548.70,313.19L548.82,313.11L548.83,313.00L549.90,305.75L553.03,302.14L553.74,300.05L552.36,299.39L552.84,295.79L552.67,295.69L552.60,295.54L549.65,292.70L546.78,292.13L542.13,290.16L542.02,289.91L541.13,289.59Z " data-iso="COD" data-name="Congo (Kinshasa)" data-pop="68692542.0"/><path d="M514.78,295.62L510.90,295.24L508.66,295.79L507.69,299.56L507.48,300.05L507.48,300.08L507.34,302.00L502.53,300.30L499.31,300.44L498.57,300.44L498.55,300.68L501.49,303.43L500.40,307.47L500.97,309.12L501.36,316.56L500.72,317.04L497.03,315.05L493.35,317.42L494.35,320.12L491.87,322.14L492.59,322.90L493.86,324.45L493.99,325.13L494.55,325.94L494.60,326.02L495.49,325.17L495.73,324.64L497.78,324.65L497.85,324.70L497.90,324.58L502.23,325.48L503.52,324.95L507.58,315.93L512.25,309.14L514.99,296.36L514.95,295.73L514.78,295.62Z " data-iso="COG" data-name="Congo (Brazzaville)" data-pop="4012809.0"/><path d="M219.59,277.23L219.94,279.82L217.71,282.34L218.00,282.67L219.25,286.75L219.18,291.75L219.84,294.18L215.98,299.19L214.11,302.71L214.20,302.96L220.44,307.27L224.65,308.29L225.21,308.53L225.39,308.30L234.18,316.82L236.75,316.09L241.39,317.80L240.03,321.96L241.64,323.01L241.80,323.28L241.85,323.15L243.38,312.42L241.30,308.09L242.40,304.37L242.01,302.05L246.98,302.01L249.73,300.71L250.59,303.95L251.17,303.79L251.11,303.55L249.09,298.55L249.79,296.29L248.35,291.49L249.77,286.64L243.66,286.29L241.70,283.38L234.55,281.53L234.85,278.56L233.81,270.68L236.69,266.71L238.88,265.78L239.00,265.58L239.17,264.08L236.34,265.07L232.63,267.80L229.90,267.91L229.33,269.53L226.97,269.32L225.01,273.40L220.84,279.06L219.67,277.31L219.59,277.23Z " data-iso="COL" data-name="Colombia" data-pop="45644023.0"/><path d="M194.42,268.71L193.99,271.01L196.39,272.02L202.35,278.93L202.54,279.33L203.14,276.18L202.59,275.12L203.82,273.95L203.69,273.81L202.21,272.29L201.32,270.77L200.91,269.30L200.84,269.16L199.94,269.81L197.83,268.70L194.43,268.64L194.42,268.71Z " data-iso="CRI" data-name="Costa Rica" data-pop="4253877.0"/><path d="M211.35,225.27L204.42,227.06L202.60,229.34L211.44,227.32L210.88,228.73L214.78,229.22L220.34,232.84L223.96,234.32L222.89,237.12L232.71,236.34L228.73,232.64L225.26,231.39L220.41,228.13L211.35,225.27Z " data-iso="CUB" data-name="Cuba" data-pop="11451652.0"/><path d="M556.06,182.22L554.62,181.52L553.10,181.32L552.69,182.15L552.52,182.11L554.59,182.22L555.37,182.66L556.30,182.49L556.06,182.22Z " data-iso="CYN" data-name="N. Cyprus" data-pop="265100.0"/><path d="M552.34,182.07L552.08,183.78L552.64,183.98L556.37,182.56L556.30,182.49L555.37,182.66L554.59,182.22L552.52,182.11L552.34,182.07Z " data-iso="CYP" data-name="Cyprus" data-pop="531640.0"/><path d="M497.36,126.74L491.40,128.28L490.71,129.01L492.33,131.96L495.04,133.74L495.18,133.91L495.25,133.94L497.63,134.24L498.28,133.16L503.69,134.42L503.77,134.50L503.83,134.23L506.07,133.35L506.72,132.88L508.55,131.34L508.62,131.33L508.60,131.23L507.65,129.98L503.35,128.20L502.75,129.24L498.64,126.60L497.62,126.67L497.39,126.68L497.36,126.74Z " data-iso="CZE" data-name="Czech Rep." data-pop="10211904.0"/><path d="M494.56,115.84L493.98,115.52L494.63,116.42L494.95,116.38L495.07,116.39L495.01,116.23L495.04,116.12L494.56,115.84Z M480.33,113.28L479.37,117.83L476.49,118.24L476.62,118.39L473.46,123.58L474.15,124.51L473.82,126.52L473.68,127.05L473.72,127.11L474.35,127.58L474.09,129.16L474.08,129.22L474.06,129.31L474.07,129.52L474.77,131.33L474.76,131.53L474.86,131.51L479.71,133.50L478.29,137.95L478.43,138.00L478.66,138.08L480.38,137.95L481.47,137.63L483.18,137.98L483.67,138.24L483.74,138.21L488.55,138.59L490.97,137.60L493.25,138.40L495.15,133.98L495.18,133.91L495.04,133.74L492.33,131.96L490.71,129.01L491.40,128.28L497.36,126.74L497.39,126.68L497.40,126.63L496.60,123.34L496.94,122.48L495.22,116.87L495.20,116.86L491.81,114.56L490.61,114.37L483.11,113.23L483.09,113.17L481.64,113.10L480.89,112.93L480.28,112.90L480.33,113.28Z " data-iso="DEU" data-name="Germany" data-pop="82329758.0"/><path d="M589.93,266.84L590.21,265.39L590.60,264.60L589.67,262.92L589.62,262.75L588.59,263.77L588.30,263.94L587.48,263.51L587.39,263.61L587.11,264.12L585.82,268.93L586.06,269.02L589.03,268.87L589.27,268.86L589.63,268.17L589.95,267.55L590.20,267.07L589.93,266.84Z " data-iso="DJI" data-name="Djibouti" data-pop="516055.0"/><path d="M490.30,109.94L489.31,108.83L487.06,110.05L488.67,113.34L490.30,109.94Z M480.28,112.90L480.89,112.93L481.64,113.10L483.09,113.17L482.99,112.82L485.66,107.48L484.15,105.89L480.24,112.63L480.28,112.90Z " data-iso="DNK" data-name="Denmark" data-pop="5500510.0"/><path d="M239.58,243.78L248.94,243.00L250.05,241.61L246.70,239.45L245.55,237.80L240.19,237.58L240.05,237.64L238.98,241.61L239.42,243.66L239.58,243.78Z " data-iso="DOM" data-name="Dominican Rep." data-pop="9650054.0"/><path d="M480.99,175.87L468.45,175.92L460.36,177.54L451.69,182.42L451.10,182.35L453.81,193.18L447.44,194.56L445.81,197.41L441.91,200.48L438.33,201.38L431.81,205.40L431.74,208.24L431.72,209.12L431.71,209.72L431.69,210.45L432.25,210.85L438.90,215.62L439.46,216.02L442.43,218.18L443.10,218.69L444.01,219.37L467.25,237.38L469.41,239.91L470.37,239.70L471.03,239.55L478.70,234.94L480.17,233.49L491.99,225.09L493.52,224.00L493.22,223.36L489.59,220.28L485.77,214.83L485.37,200.05L485.65,199.87L485.45,199.02L479.43,186.92L481.69,182.42L481.43,179.85L482.28,175.78L480.99,175.87Z " data-iso="DZA" data-name="Algeria" data-pop="34178188.0"/><path d="M214.29,303.53L210.39,305.35L210.58,306.69L208.07,311.63L208.13,316.54L209.86,317.82L211.51,317.02L209.85,320.20L209.78,320.25L209.46,323.17L214.94,324.44L217.12,319.03L220.97,317.30L224.35,313.62L225.32,311.55L225.03,308.66L225.21,308.53L224.65,308.29L220.44,307.27L214.20,302.96L214.29,303.53Z " data-iso="ECU" data-name="Ecuador" data-pop="14573101.0"/><path d="M558.10,196.00L553.33,196.73L548.91,194.93L544.24,197.36L537.70,195.74L531.71,195.18L531.46,194.74L530.52,200.22L531.53,203.63L532.86,228.66L532.89,229.46L534.05,229.46L549.03,229.46L552.36,229.46L568.76,229.46L568.75,229.39L565.00,226.05L565.01,222.49L563.10,220.56L558.84,212.74L557.27,208.25L554.75,205.05L553.51,200.96L556.19,205.84L557.86,207.71L560.68,202.73L560.83,202.57L559.88,200.00L559.42,199.09L558.65,197.11L558.34,196.35L558.21,196.04L558.16,195.94L558.10,196.00Z " data-iso="EGY" data-name="Egypt" data-pop="83082869.0"/><path d="M569.20,257.21L569.26,257.20L572.35,257.61L573.27,255.08L575.23,256.61L579.04,256.34L582.20,257.61L587.11,263.24L587.39,263.61L587.48,263.51L588.30,263.94L588.59,263.77L589.62,262.75L589.50,262.33L581.66,254.97L578.10,252.64L575.94,245.85L574.90,243.78L571.56,246.99L570.18,247.31L569.06,256.18L569.20,257.21Z " data-iso="ERI" data-name="Eritrea" data-pop="5647168.0"/><path d="M432.78,157.92L437.71,157.89L437.87,165.05L436.30,165.97L436.21,174.91L436.88,174.80L442.14,178.29L444.95,176.56L449.50,176.57L454.85,173.51L457.99,169.02L457.33,165.27L459.58,161.90L466.04,158.54L466.67,156.40L466.59,156.18L464.78,156.48L464.24,156.32L462.78,156.09L462.35,155.92L462.27,155.95L462.01,156.09L461.53,155.76L461.57,155.60L461.34,155.26L456.71,154.78L452.52,152.72L452.42,152.74L441.18,151.88L432.67,152.98L431.80,153.55L432.57,157.97L432.78,157.92Z " data-iso="ESP" data-name="Spain" data-pop="40525002.0"/><path d="M520.00,103.00L521.93,102.37L523.78,103.01L527.89,104.15L527.95,104.14L527.94,104.06L528.30,103.24L527.53,100.16L528.62,97.70L528.60,97.75L522.09,97.58L517.29,98.64L520.00,102.87L520.00,103.00Z " data-iso="EST" data-name="Estonia" data-pop="1299371.0"/><path d="M569.20,257.21L569.00,258.17L564.73,269.00L563.66,269.29L562.28,274.17L562.28,274.36L562.28,274.51L559.13,279.76L559.35,280.21L566.19,288.48L566.24,288.54L566.23,288.66L568.48,292.07L572.12,292.96L575.02,295.13L579.37,295.81L583.25,292.90L586.27,293.95L586.72,293.95L586.81,293.76L590.51,291.57L596.00,290.66L604.45,280.44L605.18,279.59L604.13,279.59L591.20,274.65L590.34,273.26L589.23,269.00L589.27,268.86L589.03,268.87L586.06,269.02L585.82,268.93L587.11,264.12L587.39,263.61L587.11,263.24L582.20,257.61L579.04,256.34L575.23,256.61L573.27,255.08L572.35,257.61L569.26,257.20L569.20,257.21Z " data-iso="ETH" data-name="Ethiopia" data-pop="85237338.0"/><path d="M505.89,67.58L506.55,67.75L512.66,70.33L514.90,74.39L514.36,75.72L515.81,77.51L516.00,77.49L518.56,78.32L518.80,79.58L512.51,85.36L510.65,85.70L511.14,92.58L515.81,96.62L516.85,96.06L527.43,94.28L527.51,94.27L534.33,88.51L534.39,85.69L531.33,84.16L529.46,79.90L529.61,76.83L527.08,74.27L524.91,69.66L525.31,67.66L525.45,67.62L525.26,67.50L525.46,65.66L522.31,64.48L516.25,68.92L511.81,68.68L508.12,66.87L506.00,67.48L505.89,67.58Z " data-iso="FIN" data-name="Finland" data-pop="5250275.0"/><path d="M299.63,491.04L298.34,493.29L299.19,494.60L301.58,493.08L299.63,491.04Z " data-iso="FLK" data-name="Falkland Is." data-pop="3140.0"/><path d="M290.64,289.02L289.69,290.25L289.07,299.81L289.03,299.85L289.11,299.89L291.75,299.91L294.32,300.26L298.26,293.65L298.25,293.52L294.92,289.32L290.86,288.83L290.64,289.02Z M484.19,154.85L481.69,156.93L483.72,159.63L484.19,154.85Z M464.12,125.96L462.69,126.22L461.74,128.63L458.05,130.67L457.10,132.07L452.52,130.73L453.63,134.35L444.67,134.70L446.40,137.11L452.12,138.99L453.71,142.35L454.08,148.27L452.98,152.61L452.52,152.72L456.71,154.78L461.34,155.26L461.57,155.60L461.65,155.50L461.96,155.46L462.36,155.56L462.37,155.84L462.35,155.92L462.78,156.09L464.24,156.32L464.78,156.48L466.59,156.18L466.55,156.07L466.10,154.74L469.21,152.38L473.46,153.53L475.98,153.46L477.87,151.70L478.19,151.57L478.29,151.43L478.35,151.47L478.36,151.51L478.51,151.45L478.13,150.17L476.99,149.64L476.76,144.04L476.97,143.84L476.92,143.72L475.70,142.04L474.37,143.06L478.10,138.16L478.43,138.00L478.29,137.95L479.71,133.50L474.86,131.51L474.76,131.53L474.58,131.45L474.15,131.42L474.03,131.53L473.34,131.35L473.25,131.24L473.03,131.23L470.68,129.17L469.37,129.83L464.33,125.86L464.12,125.96Z " data-iso="FRA" data-name="France" data-pop="64057792.0"/><path d="M498.49,300.21L498.06,300.09L493.21,299.93L492.54,300.18L492.50,300.41L492.51,301.24L492.53,304.58L487.15,304.47L487.10,304.61L487.78,307.99L485.16,310.61L487.40,316.78L491.57,321.81L491.87,322.14L494.35,320.12L493.35,317.42L497.03,315.05L500.72,317.04L501.36,316.56L500.97,309.12L500.40,307.47L501.49,303.43L498.55,300.68L498.57,300.44L498.49,300.21Z " data-iso="GAB" data-name="Gabon" data-pop="1514993.0"/><path d="M558.61,196.04L558.60,195.79L558.90,194.99L558.67,195.36L558.16,195.94L558.21,196.04L558.34,196.35L558.61,196.04Z " data-iso="PSE" data-name="Palestine" data-pop="1604238.0"/><path d="M438.65,112.27L436.41,114.22L436.86,115.23L441.16,115.65L441.42,115.75L441.52,111.85L438.75,112.39L438.65,112.27Z M449.60,100.88L443.67,102.35L444.26,102.89L443.03,111.27L444.96,108.95L444.30,112.62L448.55,112.70L449.44,117.61L446.66,119.64L446.30,121.81L443.48,123.17L448.72,124.85L442.50,128.96L447.61,128.81L453.74,126.55L459.39,126.59L461.22,125.66L460.96,123.29L461.95,120.19L456.77,117.00L457.14,115.68L450.35,107.61L452.75,103.86L446.91,103.97L449.60,100.88Z " data-iso="GBR" data-name="United Kingdom" data-pop="61113205.0"/><path d="M588.54,158.05L586.27,156.02L574.18,153.39L571.38,152.27L569.57,152.68L570.23,153.06L573.13,154.77L573.99,155.09L575.36,158.76L574.92,159.42L575.85,159.73L580.60,160.82L580.61,160.88L580.75,160.85L582.78,160.51L584.86,160.28L584.92,160.23L585.46,159.76L589.38,160.95L589.66,160.24L588.56,158.22L588.60,158.10L588.54,158.05Z " data-iso="GEO" data-name="Georgia" data-pop="4615807.0"/><path d="M456.63,268.26L449.10,268.87L448.71,270.62L449.23,274.10L449.26,274.29L449.29,274.47L449.55,279.29L447.57,284.82L448.95,289.13L448.24,289.83L448.03,289.84L447.95,289.98L448.05,290.01L451.38,291.15L460.48,287.41L460.96,286.55L461.21,286.41L459.38,284.08L459.16,274.59L457.53,268.66L457.34,268.45L456.63,268.26Z " data-iso="GHA" data-name="Ghana" data-pop="23832495.0"/><path d="M422.44,263.79L419.14,263.94L416.48,262.91L415.49,262.87L415.48,263.16L414.24,266.53L412.21,267.41L411.38,269.07L411.35,269.45L413.24,271.55L414.02,271.98L416.65,275.73L416.68,275.83L419.37,272.80L420.96,272.46L424.48,274.63L425.68,277.81L425.92,277.85L426.07,277.84L428.27,278.35L428.71,280.64L431.32,281.06L431.43,281.16L431.60,281.01L433.10,276.77L433.64,275.72L432.93,271.99L433.01,271.85L433.06,271.61L430.51,265.56L423.03,265.27L422.56,263.93L422.65,263.84L422.44,263.79Z " data-iso="GIN" data-name="Guinea" data-pop="10057975.0"/><path d="M406.96,260.07L407.50,260.48L406.21,261.17L406.22,261.48L409.14,260.54L415.17,260.51L414.26,259.79L406.87,259.60L406.96,260.07Z " data-iso="GMB" data-name="Gambia" data-pop="1782893.0"/><path d="M415.49,262.87L414.47,262.87L411.00,262.85L409.02,263.72L406.34,264.01L407.17,264.55L408.07,265.58L410.22,267.08L411.23,268.82L411.38,269.07L412.21,267.41L414.24,266.53L415.48,263.16L415.49,262.87Z " data-iso="GNB" data-name="Guinea Bissau" data-pop="1533964.0"/><path d="M492.50,300.41L491.79,300.41L488.34,300.41L488.00,300.25L487.79,299.93L487.72,300.77L487.12,302.65L486.85,303.03L487.17,304.39L487.15,304.47L492.53,304.58L492.51,301.24L492.50,300.41Z " data-iso="GNQ" data-name="Eq. Guinea" data-pop="633441.0"/><path d="M531.90,158.72L531.55,158.62L531.49,159.89L529.40,160.32L522.71,160.11L522.40,160.07L522.24,160.07L519.29,161.44L517.39,161.78L517.01,161.80L517.00,162.07L516.33,164.41L515.39,165.00L514.56,165.86L514.86,166.11L519.12,170.82L518.47,172.58L522.49,177.10L523.83,175.50L524.15,172.12L525.72,172.39L522.19,168.79L523.13,168.58L521.83,163.06L523.94,164.51L526.63,163.97L524.97,162.16L531.35,162.09L531.44,162.24L532.24,161.28L532.09,160.42L532.16,158.79L531.90,158.72Z " data-iso="GRC" data-name="Greece" data-pop="10737428.0"/><path d="M334.97,64.84L331.60,63.72L332.21,66.91L334.97,64.84Z M398.22,28.32L382.74,28.46L366.78,29.83L374.42,30.02L367.46,31.19L365.37,32.18L355.11,30.70L352.60,31.60L350.92,31.04L339.51,32.57L332.67,32.49L331.60,33.70L319.49,35.30L323.12,36.44L319.44,38.46L311.45,39.55L302.11,41.29L308.25,43.24L314.97,42.98L314.31,43.56L303.68,44.31L309.21,45.56L308.53,47.08L318.17,46.66L319.58,46.29L329.40,48.64L328.49,49.07L332.50,51.41L332.14,55.85L333.65,55.90L330.70,60.42L332.98,60.54L335.54,59.04L339.43,61.33L337.80,63.16L331.70,62.70L340.39,65.20L338.01,67.05L332.74,68.87L331.83,74.26L328.63,76.42L334.70,74.26L329.66,76.98L334.01,79.40L334.63,80.99L333.09,88.23L336.38,93.40L342.24,92.46L342.54,94.26L346.50,96.04L348.61,95.82L351.97,90.57L352.38,87.63L357.33,84.65L359.55,81.66L357.96,80.44L360.38,78.39L364.22,78.07L367.36,75.82L367.54,77.56L373.30,76.04L381.44,70.76L381.57,69.84L385.24,70.24L389.50,69.63L397.58,67.62L400.88,65.92L405.83,64.29L394.87,64.07L390.37,63.29L392.18,61.70L398.62,60.89L401.52,61.25L403.58,63.32L407.70,62.90L407.77,61.07L400.31,57.57L397.20,56.63L400.49,56.02L404.81,57.77L407.42,57.55L407.76,56.04L403.81,54.65L403.43,53.59L407.60,55.02L411.48,54.37L411.96,53.35L408.05,52.32L414.16,52.14L410.82,49.87L414.69,49.42L413.66,46.65L415.26,44.89L410.91,42.37L413.01,40.34L417.55,38.63L415.76,36.42L422.43,36.12L427.78,34.17L433.36,32.77L425.89,32.17L421.28,33.12L416.65,32.80L410.48,34.36L414.43,32.49L413.80,31.61L409.38,32.38L406.49,31.78L397.64,31.41L409.31,31.12L412.37,30.00L405.37,29.32L393.68,29.35L405.39,29.05L398.22,28.32Z " data-iso="GRL" data-name="Greenland" data-pop="57600.0"/><path d="M185.81,244.46L180.80,245.16L180.14,247.47L181.54,250.71L177.84,250.71L175.69,256.17L176.84,257.31L178.79,258.39L180.44,258.38L180.82,258.48L181.94,259.07L182.14,258.47L184.36,256.60L184.42,256.64L184.51,256.48L185.13,255.73L188.39,251.94L187.37,251.14L187.50,251.50L187.26,251.81L186.59,251.43L186.43,251.36L185.76,251.32L185.40,251.36L186.31,245.33L186.45,244.46L185.81,244.46Z " data-iso="GTM" data-name="Guatemala" data-pop="13276517.0"/><path d="M281.26,288.28L280.90,285.76L278.98,283.92L277.01,284.93L277.48,283.02L276.55,280.53L273.06,277.68L272.95,277.62L273.42,278.69L270.65,281.24L271.82,282.83L270.56,283.98L269.69,288.74L270.32,289.58L270.60,289.51L273.89,294.11L272.94,295.34L273.65,302.02L276.98,303.57L280.39,301.34L283.13,301.27L283.26,301.22L283.14,301.10L280.79,296.10L279.87,296.12L279.00,290.94L281.29,288.34L281.26,288.28Z " data-iso="GUY" data-name="Guyana" data-pop="772298.0"/><path d="M801.79,227.50L801.34,227.42L801.27,227.47L801.06,227.61L801.05,227.71L800.76,227.91L801.80,227.52L801.79,227.50Z " data-iso="HKG" data-name="Hong Kong" data-pop="7055071.0"/><path d="M188.39,251.94L185.13,255.73L184.51,256.48L184.42,256.64L184.50,256.65L187.97,258.17L189.00,258.52L188.80,260.28L188.93,260.36L189.44,260.33L189.78,260.44L190.17,261.40L190.12,261.78L192.15,260.58L192.23,258.97L202.43,254.63L203.59,254.57L203.40,254.40L195.96,250.96L192.44,251.82L188.68,252.04L188.39,251.94Z " data-iso="HND" data-name="Honduras" data-pop="7792854.0"/><path d="M509.68,156.17L509.56,156.00L509.44,155.85L509.42,155.72L509.17,155.63L507.35,154.69L505.89,154.07L509.14,155.84L509.68,156.17Z M503.10,141.83L502.85,141.74L500.74,142.87L500.80,144.16L495.19,145.28L495.03,145.40L503.46,152.24L504.92,152.77L506.80,154.30L501.35,147.92L502.45,146.84L510.24,147.57L510.42,147.56L510.38,147.43L511.05,146.12L510.27,145.69L509.85,143.90L509.85,143.82L509.84,143.82L507.29,144.39L506.85,144.32L503.26,141.88L503.10,141.83Z " data-iso="HRV" data-name="Croatia" data-pop="4489409.0"/><path d="M239.42,243.66L238.98,241.61L240.05,237.64L239.87,237.71L235.03,237.62L237.14,238.63L237.65,241.80L231.35,242.19L233.20,243.36L239.19,243.37L239.42,243.66Z " data-iso="HTI" data-name="Haiti" data-pop="9035536.0"/><path d="M517.90,135.21L513.84,134.67L508.83,137.32L504.53,136.54L504.45,136.56L504.31,136.71L503.29,138.20L502.66,138.79L502.26,140.17L501.85,140.55L502.37,140.57L502.55,141.05L503.07,141.75L503.10,141.83L503.26,141.88L506.85,144.32L507.29,144.39L509.84,143.82L509.85,143.82L509.91,143.82L510.50,143.62L511.33,143.27L513.40,143.14L513.50,143.20L513.60,143.11L515.66,142.73L517.90,138.31L520.09,136.85L520.15,136.77L520.09,136.72L519.08,135.87L518.60,135.69L518.21,135.14L517.95,135.17L517.90,135.21Z " data-iso="HUN" data-name="Hungary" data-pop="9905596.0"/><path d="M826.42,341.63L823.39,341.87L826.55,344.59L828.61,344.26L826.42,341.63Z M841.55,340.18L840.96,340.52L840.75,340.71L840.52,340.85L840.11,340.98L839.97,341.42L839.53,341.82L838.80,341.52L838.61,341.63L837.56,344.15L839.72,344.40L841.68,342.32L841.92,342.13L842.12,340.97L842.30,340.73L841.66,340.09L841.55,340.18Z M835.18,338.91L835.95,337.90L830.86,338.69L828.60,337.58L826.00,339.21L835.18,338.91Z M788.37,329.60L784.39,329.27L782.40,332.37L795.61,336.11L797.85,337.26L805.96,337.75L809.92,339.47L808.64,335.41L805.38,335.50L804.10,332.89L797.89,332.78L792.02,332.18L788.37,329.60Z M857.84,318.38L855.70,318.29L852.01,319.66L858.07,320.03L860.96,321.93L861.13,320.77L857.84,318.38Z M784.78,314.11L783.37,313.60L781.95,315.45L783.95,315.94L784.56,318.24L785.72,316.95L784.78,314.11Z M890.95,340.72L891.51,332.58L891.44,331.76L892.48,317.47L891.79,317.46L882.80,313.45L878.37,316.27L875.11,320.20L871.49,315.99L871.30,311.73L866.14,309.42L862.74,311.13L865.78,316.16L870.04,317.52L865.79,317.74L867.21,322.25L869.87,320.58L870.62,321.63L883.04,327.67L884.35,332.92L885.66,335.25L884.78,337.41L888.43,336.80L890.81,340.60L890.95,340.72Z M842.96,304.60L842.85,302.53L837.99,304.84L831.20,303.41L828.06,305.68L827.22,310.88L826.36,311.39L824.36,320.59L826.45,322.56L826.36,323.95L830.82,317.69L830.50,320.85L833.40,325.46L836.42,323.83L834.62,320.92L833.58,314.20L838.36,311.59L836.80,310.85L831.40,312.93L828.62,311.25L829.67,306.27L841.55,306.47L842.96,304.60Z M851.74,305.12L851.20,306.40L855.36,307.38L853.23,303.15L851.74,305.12Z M820.28,293.44L820.64,293.86L821.20,293.68L821.18,293.55L821.07,293.21L820.64,293.28L820.34,293.27L820.28,293.44Z M795.05,301.29L793.70,306.25L796.95,312.70L797.61,317.75L799.75,319.12L802.13,318.47L810.55,320.58L811.03,322.83L816.18,319.31L817.20,316.36L816.52,314.27L820.32,310.13L820.34,306.94L823.66,303.44L819.93,295.07L820.09,293.29L820.11,293.26L814.27,293.18L811.78,301.39L808.37,303.65L804.63,302.59L798.91,305.02L797.13,303.74L795.82,300.91L795.05,301.29Z M754.97,289.48L751.17,288.18L751.00,289.29L759.29,300.00L762.42,302.82L767.11,311.10L768.75,315.06L773.26,322.32L777.61,326.29L783.63,328.42L784.02,324.41L782.40,316.57L781.14,316.79L778.69,311.80L776.77,310.21L777.50,307.12L775.63,306.40L771.64,302.36L765.75,297.48L757.92,289.46L754.97,289.48Z " data-iso="IDN" data-name="Indonesia" data-pop="240271522.0"/><path d="M688.71,193.89L688.48,193.62L689.69,196.21L689.54,196.03L691.21,196.78L691.91,197.28L692.57,197.21L693.00,197.49L693.02,197.49L696.63,199.84L696.76,200.10L696.61,200.04L695.27,201.66L694.84,204.75L696.11,205.68L705.49,210.15L708.25,209.94L711.40,212.03L717.46,213.52L720.16,211.74L719.62,208.45L719.48,208.35L719.42,208.23L720.71,207.55L721.44,207.86L722.00,210.17L722.21,210.34L722.19,210.41L724.78,212.49L731.94,211.93L730.03,208.83L730.03,208.75L730.27,208.75L732.81,207.55L734.17,205.62L741.74,202.68L743.77,206.42L746.47,207.03L746.58,207.10L746.60,207.33L745.79,209.16L741.33,212.93L740.62,217.89L741.20,218.49L739.89,222.61L738.16,222.31L738.29,228.71L736.93,229.41L736.78,229.53L736.70,229.27L734.73,223.40L731.95,224.51L731.90,221.90L734.55,219.21L732.30,218.09L726.27,217.32L723.21,214.05L720.80,215.48L722.38,217.99L721.46,219.70L723.88,222.25L723.68,223.43L726.09,229.11L726.11,229.67L723.54,230.75L723.48,228.95L719.95,232.19L718.71,236.44L716.41,237.00L711.79,243.55L708.26,247.04L707.84,249.23L705.64,249.66L702.75,251.71L703.45,260.41L702.73,271.28L701.36,271.34L700.44,274.82L694.31,278.13L692.13,274.39L689.15,266.35L687.15,263.26L684.94,256.67L681.59,250.77L677.69,237.23L676.30,228.87L675.69,231.13L673.40,233.50L671.41,233.97L666.25,229.48L665.87,227.95L668.95,227.39L669.65,225.53L667.54,226.66L662.43,223.24L662.29,222.78L663.98,221.15L669.16,220.76L670.53,219.79L669.51,217.93L664.67,212.18L667.47,208.11L670.23,208.35L675.82,199.89L676.98,196.62L677.34,191.84L673.85,189.04L673.57,183.57L677.88,184.51L681.26,182.50L681.28,182.33L681.57,182.11L681.88,181.88L682.88,181.13L683.13,180.94L683.17,180.98L687.54,187.57L688.83,189.09L688.94,189.29L689.10,189.90L689.31,190.10L689.65,191.47L689.71,191.70L688.71,193.89Z " data-iso="IND" data-name="India" data-pop="1166079217.0"/><path d="M438.78,112.12L435.89,112.09L435.92,114.24L431.49,117.20L432.16,118.42L429.89,123.45L432.64,124.48L440.32,121.58L441.51,119.04L441.27,115.77L441.16,115.65L436.86,115.23L436.41,114.22L438.65,112.27L438.78,112.12Z " data-iso="IRL" data-name="Ireland" data-pop="4203200.0"/><path d="M585.33,166.08L585.23,166.07L583.27,166.99L586.52,174.99L586.52,175.04L586.53,175.07L588.96,179.13L591.25,179.78L591.50,182.27L590.16,186.58L598.05,194.24L597.97,197.09L600.99,200.83L601.12,200.78L605.38,199.98L610.68,208.21L617.70,212.47L621.33,213.07L623.39,211.56L628.38,214.50L641.77,217.97L641.93,217.94L642.14,214.48L644.83,212.76L645.65,210.57L643.99,207.88L641.18,205.92L638.05,201.90L637.37,201.20L637.43,201.11L638.00,200.23L638.92,195.72L636.20,194.72L633.83,185.97L634.87,185.17L635.20,180.74L635.10,180.50L635.00,180.36L633.99,176.83L631.75,176.85L628.32,173.96L622.10,171.65L619.14,171.29L612.76,174.32L612.97,174.90L608.22,176.91L602.57,175.02L597.64,170.57L597.61,170.41L595.48,166.97L594.38,165.96L590.71,168.74L590.53,168.73L590.03,168.71L589.63,168.87L589.47,168.83L588.90,168.73L587.58,168.38L585.40,166.15L585.33,166.08Z " data-iso="IRN" data-name="Iran" data-pop="66429284.0"/><path d="M586.41,174.96L583.81,174.75L580.58,174.26L579.88,175.09L579.61,175.16L579.61,175.21L577.17,177.29L577.15,181.69L571.61,188.06L570.84,188.57L571.14,189.36L572.02,191.73L572.80,192.62L572.41,193.05L573.08,193.17L580.57,196.30L583.97,198.91L594.88,204.06L595.39,203.94L595.80,203.35L596.84,200.69L597.88,200.34L599.30,200.75L599.30,200.65L600.42,200.85L600.72,200.91L600.99,200.83L597.97,197.09L598.05,194.24L590.16,186.58L591.50,182.27L591.25,179.78L588.96,179.13L586.53,175.07L586.52,175.04L586.41,174.96Z " data-iso="IRQ" data-name="Iraq" data-pop="28945657.0"/><path d="M420.20,76.19L418.00,75.41L413.91,77.43L408.55,76.80L407.68,77.98L405.28,77.76L403.75,75.57L399.55,78.10L404.71,78.63L404.41,79.88L400.77,80.58L404.03,81.55L401.92,83.59L405.73,83.35L407.91,84.58L411.65,85.06L421.85,81.86L424.54,79.92L422.07,76.75L420.20,76.19Z " data-iso="ISL" data-name="Iceland" data-pop="306694.0"/><path d="M562.37,190.69L562.46,189.59L562.55,189.42L562.30,188.57L562.33,188.35L562.26,188.41L561.35,189.48L561.12,189.63L560.24,189.61L560.18,190.02L559.65,192.79L559.38,193.87L558.91,194.97L558.90,194.99L558.60,195.79L558.61,196.04L558.34,196.35L558.65,197.11L559.42,199.09L559.88,200.00L560.83,202.57L561.01,202.29L561.28,199.99L561.29,198.81L561.76,195.93L561.79,195.37L561.67,195.36L560.51,194.67L561.58,192.06L561.77,192.08L561.75,191.27L561.85,191.05L562.19,190.88L562.35,190.86L562.37,190.69Z " data-iso="ISR" data-name="Israel" data-pop="7233701.0"/><path d="M502.23,171.18L493.41,172.19L493.56,173.15L500.85,176.65L502.23,171.18Z M484.86,161.69L483.83,160.55L480.93,161.60L481.60,167.66L485.00,167.13L484.86,161.69Z M486.32,140.55L486.21,141.00L483.60,142.07L482.52,144.12L480.85,142.17L477.07,143.92L476.97,143.84L476.76,144.04L476.99,149.64L478.13,150.17L478.51,151.45L479.18,151.32L481.99,149.13L486.20,151.15L487.08,154.28L494.60,160.40L502.23,164.86L503.91,168.61L502.71,172.19L503.66,172.18L506.40,167.04L504.98,164.34L505.92,163.00L509.81,165.47L508.52,162.49L502.51,159.44L503.26,158.37L497.47,155.91L491.86,149.11L491.59,145.53L495.74,144.89L495.57,145.03L495.17,143.65L494.54,142.46L495.29,141.96L495.33,141.75L494.75,141.63L490.99,140.30L491.01,139.79L486.40,140.58L486.32,140.55Z " data-iso="ITA" data-name="Italy" data-pop="58126212.0"/><path d="M222.90,242.16L220.36,242.20L220.60,243.63L225.87,244.11L222.90,242.16Z " data-iso="JAM" data-name="Jamaica" data-pop="2825928.0"/><path d="M572.80,192.62L572.02,191.73L571.14,189.36L570.84,188.57L570.14,189.06L565.52,192.36L564.51,192.20L562.67,190.93L562.35,190.86L562.19,190.88L561.85,191.05L561.75,191.27L561.77,192.08L561.89,192.64L561.86,193.55L562.01,194.34L561.81,195.07L561.79,195.37L561.76,195.93L561.29,198.81L561.28,199.99L561.01,202.29L561.06,202.54L561.01,203.02L564.95,203.01L569.58,198.89L566.70,195.82L572.02,193.47L572.41,193.05L572.80,192.62Z " data-iso="JOR" data-name="Jordan" data-pop="6342948.0"/><path d="M840.52,187.74L837.01,188.75L840.26,191.27L840.34,195.63L842.45,196.53L843.87,194.68L842.19,187.92L840.52,187.74Z M848.90,185.39L845.15,186.00L844.00,188.41L849.72,188.66L848.90,185.39Z M857.15,159.94L855.79,165.26L856.35,165.35L857.33,171.94L853.83,176.37L851.66,180.27L843.55,180.72L839.70,184.90L839.27,186.40L843.04,186.89L842.77,185.50L851.47,184.10L853.88,188.16L855.00,182.51L859.57,184.17L859.97,182.41L863.07,182.19L864.15,183.08L865.15,179.69L864.42,178.92L862.02,171.44L862.47,166.22L857.15,159.94Z M859.17,150.21L851.09,145.30L850.57,145.68L853.87,152.81L851.04,155.65L854.00,159.76L852.78,156.52L856.65,155.65L861.70,157.58L862.48,154.26L864.46,154.16L864.53,152.52L859.17,150.21Z " data-iso="JPN" data-name="Japan" data-pop="127078679.0"/><path d="M682.93,181.00L682.13,181.02L681.66,180.90L680.36,180.52L680.00,180.35L680.21,180.67L680.52,181.16L681.08,182.02L681.28,182.33L681.57,182.11L681.88,181.88L682.88,181.13L683.13,180.94L682.93,181.00Z " data-iso="KAS" data-name="" data-pop="6000.0"/><path d="M593.35,142.23L598.56,139.73L603.14,140.23L604.35,142.91L603.82,145.08L605.19,145.93L600.22,145.84L597.77,149.37L601.46,153.55L605.24,154.85L605.65,158.12L605.80,158.49L610.28,156.63L614.62,160.30L615.85,160.11L615.97,160.12L615.80,159.30L613.16,147.11L627.87,149.39L631.19,152.42L638.01,152.21L639.16,151.63L643.23,154.61L643.77,157.69L645.16,157.73L646.47,160.63L651.40,162.49L652.97,159.96L657.27,156.97L657.47,156.83L657.28,156.67L657.88,155.11L664.08,155.22L664.08,154.15L679.79,155.00L683.12,156.63L683.63,157.04L683.68,156.97L683.92,153.19L680.10,147.07L684.24,145.87L686.69,146.66L685.68,144.73L685.83,140.19L692.84,139.18L691.51,135.87L694.67,132.74L694.95,132.81L694.79,132.59L692.24,130.41L691.28,131.37L688.43,130.80L680.84,126.55L673.03,126.86L663.64,118.27L659.34,115.98L659.59,114.46L654.29,117.69L651.98,117.75L651.12,116.08L644.77,115.24L643.58,112.75L639.86,111.55L636.03,112.04L635.03,113.01L625.66,115.15L619.01,115.89L619.55,118.20L622.05,118.98L619.62,119.44L621.06,124.50L622.70,126.67L616.94,127.40L614.35,125.97L610.73,125.97L607.61,127.63L597.30,123.76L594.52,123.97L588.72,127.74L589.07,130.07L585.70,128.25L584.64,134.58L586.82,137.31L589.53,137.60L593.46,142.40L593.35,142.23Z " data-iso="KAZ" data-name="Kazakhstan" data-pop="15399437.0"/><path d="M566.24,288.54L565.68,289.19L563.55,291.65L562.93,292.37L562.32,293.08L562.81,294.27L565.18,299.52L565.44,302.29L562.30,307.53L562.17,311.12L562.18,311.73L562.41,311.73L573.74,320.71L578.47,324.91L578.49,324.81L581.55,318.93L582.95,317.22L585.26,314.82L585.71,314.21L584.01,311.26L583.97,298.00L586.34,294.58L586.72,293.95L586.27,293.95L583.25,292.90L579.37,295.81L575.02,295.13L572.12,292.96L568.48,292.07L566.23,288.66L566.24,288.54Z " data-iso="KEN" data-name="Kenya" data-pop="39002772.0"/><path d="M683.12,156.63L679.79,155.00L664.08,154.15L664.08,155.22L657.88,155.11L657.28,156.67L657.47,156.83L657.54,156.76L657.37,157.98L659.49,160.72L664.98,161.88L659.42,163.92L659.35,163.98L659.37,164.04L654.89,164.94L655.24,166.52L661.48,166.32L663.89,167.66L667.50,166.76L667.67,166.79L667.90,166.75L670.22,163.07L674.48,163.57L676.57,161.21L683.75,157.25L683.63,157.04L683.12,156.63Z M660.36,165.21L659.82,164.91L659.49,164.51L660.36,165.21Z M658.98,165.45L658.46,165.44L658.34,165.32L658.98,165.45Z " data-iso="KGZ" data-name="Kyrgyzstan" data-pop="5431747.0"/><path d="M786.04,255.60L785.89,255.75L783.96,256.93L781.94,258.41L779.08,256.98L779.06,256.89L779.02,256.92L774.02,256.63L770.64,259.77L773.20,266.33L773.19,266.21L774.14,269.17L775.63,268.65L775.83,270.62L777.67,270.50L778.21,270.97L782.48,266.42L786.67,264.35L786.11,255.80L786.04,255.60Z " data-iso="KHM" data-name="Cambodia" data-pop="14494293.0"/><path d="M821.46,172.85L821.85,175.70L824.59,179.97L824.32,181.95L826.42,184.48L832.65,182.07L831.56,177.75L826.57,171.34L825.18,169.74L821.85,171.11L821.46,172.75L821.46,172.85Z " data-iso="KOR" data-name="S. Korea" data-pop="48508972.0"/><path d="M518.24,156.71L516.65,153.84L515.40,153.46L515.06,154.67L514.72,154.77L514.36,154.88L513.92,155.01L513.86,155.11L514.02,155.73L514.01,155.77L514.12,155.85L514.87,156.61L515.40,157.10L515.64,158.00L515.60,158.16L515.64,158.19L516.15,157.46L518.31,156.83L518.31,156.83L518.24,156.71Z " data-iso="KOS" data-name="Kosovo" data-pop="1804838.0"/><path d="M599.30,200.75L597.88,200.34L596.84,200.69L595.80,203.35L595.39,203.94L595.97,204.02L598.70,205.63L599.00,205.97L601.28,205.93L601.09,205.61L599.43,202.07L599.96,202.23L599.30,200.89L599.30,200.75Z " data-iso="KWT" data-name="Kuwait" data-pop="2691158.0"/><path d="M765.56,228.43L768.27,230.59L768.38,232.31L773.06,233.68L775.31,236.56L772.70,239.25L776.67,241.36L781.83,247.55L785.50,252.88L785.97,255.20L786.04,255.60L785.89,255.75L783.96,256.93L781.94,258.41L779.08,256.98L779.06,256.89L779.23,256.81L779.82,254.40L778.98,251.01L773.33,242.65L770.82,243.30L770.83,243.29L770.82,243.31L770.82,243.30L767.60,243.19L765.13,245.66L764.88,240.29L763.55,238.02L761.87,237.90L760.59,235.70L760.58,235.49L760.57,235.29L761.53,233.45L761.42,233.32L762.77,231.35L762.88,231.00L763.08,231.16L765.10,232.27L764.15,227.69L765.20,227.97L765.33,228.09L765.56,228.43Z " data-iso="LAO" data-name="Laos" data-pop="6834942.0"/><path d="M562.45,188.23L563.62,186.83L563.11,183.88L562.20,184.05L562.23,184.35L561.39,185.42L561.36,186.20L560.34,189.33L560.24,189.61L561.12,189.63L561.35,189.48L562.26,188.41L562.33,188.35L562.45,188.23Z " data-iso="LBN" data-name="Lebanon" data-pop="4017095.0"/><path d="M431.32,281.06L428.71,280.64L428.27,278.35L426.07,277.84L425.92,277.85L425.91,277.96L425.82,278.47L422.11,283.49L422.77,284.27L424.32,285.62L429.40,290.11L433.93,292.56L434.28,292.62L433.25,285.89L432.02,285.59L431.49,281.20L431.43,281.16L431.32,281.06Z " data-iso="LBR" data-name="Liberia" data-pop="3441790.0"/><path d="M531.34,194.53L522.48,190.20L516.57,192.71L515.70,198.93L514.00,199.73L508.63,196.80L504.99,196.14L502.61,192.93L498.06,190.65L491.64,189.48L491.19,189.25L491.28,192.01L487.29,195.43L487.66,197.87L486.00,199.68L485.65,199.87L485.37,200.05L485.77,214.83L489.59,220.28L493.22,223.36L493.52,224.00L495.10,224.41L498.46,225.43L499.28,226.21L502.63,225.87L502.63,225.87L503.72,225.28L505.60,224.26L512.50,228.24L528.76,237.58L530.24,238.43L530.22,237.98L530.92,236.64L533.20,236.62L532.97,231.25L532.89,229.46L532.86,228.66L531.53,203.63L530.52,200.22L531.46,194.74L531.34,194.53Z " data-iso="LBY" data-name="Libya" data-pop="6310434.0"/><path d="M483.93,139.81L483.86,139.52L483.81,139.43L483.75,139.18L483.72,139.13L483.61,139.47L483.61,139.73L483.64,139.86L483.68,139.85L483.89,139.87L483.93,139.81Z " data-iso="LIE" data-name="Liechtenstein" data-pop="34761.0"/><path d="M703.29,273.11L702.93,279.41L704.86,286.69L709.23,284.90L709.61,282.13L706.66,276.25L703.29,273.11Z " data-iso="LKA" data-name="Sri Lanka" data-pop="21324791.0"/><path d="M512.19,111.62L512.35,111.64L512.51,111.40L512.65,110.94L512.45,111.23L512.19,111.62Z M512.32,109.15L512.42,109.85L512.96,111.42L513.08,111.67L513.08,111.69L517.42,113.12L517.19,113.82L517.32,114.58L517.45,114.75L517.58,114.62L519.34,115.47L519.48,116.09L519.51,116.16L519.71,116.23L524.81,114.90L525.16,113.14L527.26,111.89L526.91,110.49L526.90,110.34L526.76,110.32L524.27,108.87L514.85,107.86L512.28,108.99L512.32,109.15Z " data-iso="LTU" data-name="Lithuania" data-pop="3555179.0"/><path d="M474.06,129.21L473.41,129.35L473.05,130.30L473.32,131.18L473.25,131.24L473.34,131.35L474.03,131.53L474.15,131.42L474.58,131.45L474.76,131.53L474.77,131.33L474.07,129.52L474.06,129.31L474.08,129.22L474.06,129.21Z " data-iso="LUX" data-name="Luxembourg" data-pop="491775.0"/><path d="M527.89,104.15L523.78,103.01L521.93,102.37L520.00,103.00L519.98,103.29L518.66,105.99L513.46,103.99L512.13,108.36L512.28,108.99L514.85,107.86L524.27,108.87L526.76,110.32L526.90,110.34L526.96,110.30L528.02,109.79L528.70,109.88L530.63,108.74L530.71,108.75L530.75,108.59L529.15,105.96L529.33,105.33L528.25,104.15L527.95,104.14L527.89,104.15Z " data-iso="LVA" data-name="Latvia" data-pop="2231503.0"/><path d="M799.69,228.74L799.73,228.72L799.86,228.65L799.86,228.65L799.78,228.56L799.69,228.58L799.67,228.67L799.67,228.74L799.69,228.74Z " data-iso="MAC" data-name="Macau" data-pop="559846.0"/><path d="M266.06,243.42L266.02,243.39L265.90,243.38L265.74,243.47L265.71,243.55L266.05,243.55L266.06,243.42Z " data-iso="MAF" data-name="St. Martin" data-pop="29820.0"/><path d="M406.20,231.53L413.36,230.60L415.97,223.16L420.08,219.50L422.55,214.70L425.00,211.44L428.28,212.02L431.47,210.94L431.32,209.12L431.72,209.12L431.74,208.24L431.81,205.40L438.33,201.38L441.91,200.48L445.81,197.41L447.44,194.56L453.81,193.18L451.10,182.35L450.51,182.28L444.98,182.14L441.56,179.63L440.39,179.90L437.86,185.84L433.29,188.56L429.12,194.54L429.00,200.30L425.91,204.51L421.94,207.42L419.06,208.19L417.32,211.94L414.33,214.49L412.00,220.54L409.79,222.82L406.47,229.81L406.20,231.53Z " data-iso="MAR" data-name="Morocco" data-pop="34859364.0"/><path d="M478.36,151.51L478.35,151.47L478.29,151.43L478.19,151.57L478.36,151.51Z " data-iso="MCO" data-name="Monaco" data-pop="32965.0"/><path d="M535.93,145.39L539.94,140.84L537.24,136.71L533.47,135.13L530.30,135.56L530.26,135.68L530.52,135.66L534.78,140.15L535.07,140.80L535.63,145.29L535.80,145.51L535.93,145.39Z " data-iso="MDA" data-name="Moldova" data-pop="4320748.0"/><path d="M609.34,352.57L608.38,351.31L606.35,356.12L604.35,356.80L603.81,360.49L592.91,366.81L591.36,370.33L591.34,373.54L592.31,377.63L591.82,380.20L588.19,390.04L588.97,392.35L588.61,395.33L589.45,397.62L593.67,399.66L600.61,392.72L607.50,373.71L609.36,363.37L611.21,361.53L610.98,358.32L609.34,352.57Z " data-iso="MDG" data-name="Madagascar" data-pop="20653556.0"/><path d="M114.30,192.26L115.52,197.80L115.30,199.20L117.88,203.95L117.94,208.21L115.54,208.45L118.78,212.48L122.32,215.39L121.72,219.24L125.87,223.68L126.65,226.27L128.60,224.13L125.55,221.04L125.89,219.15L125.02,214.62L121.91,205.01L119.42,198.87L120.05,193.86L124.81,196.45L124.21,197.84L128.76,208.62L129.08,210.90L131.54,213.80L130.64,214.96L136.03,222.21L139.55,232.61L137.77,235.24L143.31,242.63L147.51,243.90L150.61,246.66L157.26,249.87L164.02,252.06L168.47,249.46L171.18,250.77L175.61,256.09L175.69,256.17L177.84,250.71L181.54,250.71L180.14,247.47L180.80,245.16L185.81,244.46L186.45,244.46L186.49,244.15L188.69,242.20L189.39,242.10L189.47,241.95L190.55,242.82L195.36,232.50L193.40,231.34L184.46,233.00L182.41,238.95L179.34,242.20L178.59,241.51L170.26,243.17L165.58,238.98L163.35,232.66L162.80,227.20L164.56,220.86L167.06,215.96L167.27,215.21L162.02,213.64L157.81,201.62L154.17,201.58L151.58,204.28L148.15,198.59L144.81,194.33L139.54,194.70L139.18,195.91L130.86,195.93L122.24,192.20L121.23,190.97L114.32,191.58L114.30,192.26Z " data-iso="MEX" data-name="Mexico" data-pop="111211789.0"/><path d="M520.42,156.57L518.80,156.76L518.47,156.85L518.31,156.83L518.31,156.83L516.15,157.46L515.64,158.19L515.60,158.16L515.57,158.20L515.37,159.41L516.98,161.72L517.01,161.80L517.39,161.78L519.29,161.44L522.24,160.07L522.40,160.07L522.43,160.00L522.42,159.11L522.54,158.72L520.97,157.12L520.49,156.60L520.42,156.57Z " data-iso="MKD" data-name="Macedonia" data-pop="2066718.0"/><path d="M469.41,239.91L467.25,237.38L444.01,219.37L443.10,218.69L442.05,218.69L437.87,219.51L440.73,252.77L429.54,252.77L428.79,252.32L423.94,253.75L421.92,252.71L420.57,255.46L420.03,255.23L420.31,255.81L422.67,261.91L422.67,263.57L422.65,263.84L422.56,263.93L423.03,265.27L430.51,265.56L433.06,271.61L433.01,271.85L433.10,271.85L438.33,269.85L438.39,271.50L440.49,270.86L440.59,270.91L440.64,270.71L441.33,265.90L444.00,263.52L444.84,260.61L447.44,260.70L447.61,259.35L455.23,254.38L457.57,254.60L458.21,254.86L458.25,254.68L461.52,253.57L468.29,252.82L470.11,249.68L470.38,240.33L470.37,239.70L469.41,239.91Z " data-iso="MLI" data-name="Mali" data-pop="12666987.0"/><path d="M746.58,207.10L746.60,207.33L745.79,209.16L741.33,212.93L740.62,217.89L741.20,218.49L739.89,222.61L738.16,222.31L738.29,228.71L736.93,229.41L736.78,229.53L736.83,229.66L737.27,232.07L736.71,233.78L736.92,234.05L739.19,235.27L745.27,245.34L744.79,250.51L746.11,249.13L746.25,251.31L753.39,247.16L755.96,253.00L756.32,255.05L760.51,268.00L760.56,271.80L760.70,271.75L763.00,266.07L760.36,258.32L757.33,253.82L758.38,253.10L758.35,249.87L753.29,242.03L754.12,239.26L760.18,235.26L760.58,235.49L760.57,235.29L761.53,233.45L761.42,233.32L762.77,231.35L762.88,231.00L762.90,230.95L759.14,230.31L754.35,223.21L750.77,222.67L750.05,220.50L752.09,212.98L751.06,209.42L746.65,206.97L746.58,207.10Z " data-iso="MMR" data-name="Myanmar" data-pop="48137741.0"/><path d="M511.22,152.27L509.83,154.06L509.34,154.27L509.47,155.71L509.42,155.72L509.44,155.85L509.56,156.00L509.68,156.17L509.79,156.19L510.02,156.37L510.79,156.82L511.69,157.89L512.15,158.18L512.83,155.48L513.08,155.56L513.96,155.76L514.01,155.77L514.02,155.73L513.86,155.11L513.92,155.01L514.36,154.88L514.72,154.77L514.72,154.68L513.06,153.77L512.74,153.58L511.30,152.32L511.30,152.27L511.22,152.27Z " data-iso="MNE" data-name="Montenegro" data-pop="672180.0"/><path d="M773.17,130.07L765.64,128.93L761.66,131.63L757.25,132.35L752.43,131.98L745.18,128.50L738.98,129.05L733.18,127.62L731.61,125.11L721.73,122.41L720.44,126.02L722.71,129.37L721.71,129.87L713.36,129.56L708.08,127.38L701.05,129.28L698.99,131.46L696.19,132.54L696.18,132.54L696.27,132.70L697.47,134.65L707.08,140.06L709.06,143.21L708.90,145.25L713.74,146.97L719.90,148.35L722.78,149.71L730.76,154.91L737.42,155.69L754.98,158.52L758.36,156.68L765.65,156.09L767.87,154.96L770.13,150.86L770.70,147.39L773.73,147.99L775.31,145.81L778.38,145.48L781.31,141.52L784.88,140.91L787.86,141.22L779.73,136.62L775.15,137.67L773.41,130.73L773.41,130.25L773.17,130.07Z " data-iso="MNG" data-name="Mongolia" data-pop="3041142.0"/><path d="M555.60,404.22L554.92,401.25L558.88,397.88L562.97,395.99L564.33,391.11L562.79,379.43L568.51,374.36L571.65,370.97L575.93,369.07L578.97,366.90L581.86,361.51L581.37,354.54L581.94,345.90L581.79,345.53L575.62,348.92L571.68,349.90L565.45,349.50L564.77,349.51L564.36,349.50L562.86,351.78L565.35,357.81L566.70,365.19L565.00,368.23L562.46,366.22L562.01,364.73L562.48,359.64L559.95,359.73L559.20,358.33L559.08,358.23L558.41,358.48L553.92,360.24L551.99,360.88L550.26,363.57L550.29,364.06L550.27,364.63L556.98,367.45L557.89,369.82L557.05,380.46L552.28,387.93L551.84,388.30L551.84,388.49L553.43,396.34L552.97,400.82L553.01,401.08L553.07,401.13L553.28,402.00L553.21,402.24L553.34,403.10L553.28,404.25L553.54,404.23L553.99,404.33L555.26,404.29L555.59,404.28L555.60,404.22Z M563.97,351.42L563.86,351.05L563.97,351.03L563.97,351.42Z M563.74,351.07L563.44,351.09L563.48,350.96L563.74,351.07Z " data-iso="MOZ" data-name="Mozambique" data-pop="21669278.0"/><path d="M443.10,218.69L442.43,218.18L439.46,216.02L438.90,215.62L432.25,210.85L431.69,210.45L431.68,211.05L431.61,215.09L423.76,215.09L421.62,216.01L421.40,224.18L406.31,231.86L406.00,233.73L406.18,232.89L407.86,234.28L408.81,244.20L407.15,249.94L407.11,251.54L408.07,249.06L413.27,248.62L416.66,250.75L419.97,255.20L420.03,255.23L420.57,255.46L421.92,252.71L423.94,253.75L428.79,252.32L429.54,252.77L440.73,252.77L437.87,219.51L442.05,218.69L443.10,218.69Z " data-iso="MRT" data-name="Mauritania" data-pop="3129486.0"/><path d="M563.97,351.42L563.97,351.03L563.86,351.05L563.97,351.42Z M563.74,351.07L563.48,350.96L563.44,351.09L563.74,351.07Z M558.73,341.75L558.74,341.85L560.27,346.67L559.74,346.92L559.39,353.01L557.79,356.57L558.93,357.97L559.08,358.23L559.20,358.33L559.95,359.73L562.48,359.64L562.01,364.73L562.46,366.22L565.00,368.23L566.70,365.19L565.35,357.81L562.86,351.78L564.36,349.50L564.77,349.51L564.75,349.39L563.02,343.00L562.03,342.07L558.78,341.72L558.73,341.75Z " data-iso="MWI" data-name="Malawi" data-pop="14268711.0"/><path d="M820.68,292.97L820.51,292.93L820.37,292.98L820.39,293.14L820.34,293.27L820.64,293.28L821.07,293.21L820.68,292.97Z M766.08,285.57L768.15,293.99L772.72,300.13L776.49,302.63L779.26,303.20L776.97,298.25L776.59,292.47L775.63,289.36L772.62,286.00L772.08,285.86L768.72,287.55L768.94,286.14L765.94,285.15L766.08,285.57Z M813.15,292.51L812.47,292.48L812.15,290.66L811.63,292.61L810.87,293.70L809.23,291.75L809.20,291.75L806.54,296.22L802.23,297.96L800.77,303.17L796.03,301.41L795.82,300.91L797.13,303.74L798.91,305.02L804.63,302.59L808.37,303.65L811.78,301.39L814.27,293.18L820.11,293.26L820.20,293.16L823.22,292.23L825.10,288.99L817.31,283.33L813.22,290.54L813.15,292.51Z " data-iso="MYS" data-name="Malaysia" data-pop="25715819.0"/><path d="M527.70,371.43L522.50,372.51L514.79,371.67L513.52,370.35L500.20,370.39L497.44,368.81L493.29,369.82L493.21,370.60L493.34,372.51L499.72,386.02L500.73,387.54L501.41,396.01L503.22,406.22L506.02,410.35L506.34,410.64L508.23,408.53L509.30,410.93L514.34,411.80L516.85,410.04L517.37,398.34L517.43,396.83L517.43,396.74L517.74,388.76L520.80,386.86L521.11,378.76L522.05,373.61L528.13,372.51L530.88,372.78L534.22,371.75L534.35,371.77L533.86,371.20L532.79,370.78L529.32,371.07L528.66,371.22L527.70,371.43Z " data-iso="NAM" data-name="Namibia" data-pop="2108665.0"/><path d="M954.59,380.56L954.78,382.66L956.45,385.15L960.81,388.02L954.59,380.56Z " data-iso="NCL" data-name="New Caledonia" data-pop="227436.0"/><path d="M502.63,225.87L499.28,226.21L498.46,225.43L495.10,224.41L493.52,224.00L491.99,225.09L480.17,233.49L478.70,234.94L471.03,239.55L470.37,239.70L470.38,240.33L470.11,249.68L468.29,252.82L461.52,253.57L458.25,254.68L458.21,254.86L458.17,255.03L460.91,261.70L462.34,263.01L464.73,265.48L464.87,265.65L464.94,265.29L465.12,264.34L468.38,266.04L468.57,266.37L468.75,266.24L470.24,260.07L474.35,258.58L477.83,260.40L481.39,260.50L484.35,262.03L487.00,262.38L489.61,260.52L495.85,261.01L498.63,259.19L499.17,259.18L498.84,257.65L501.38,251.86L504.67,247.71L505.21,236.97L503.02,227.94L502.63,225.87L502.63,225.87Z " data-iso="NER" data-name="Niger" data-pop="15306252.0"/><path d="M468.57,266.37L468.45,266.60L469.17,270.88L467.11,275.34L466.08,275.84L465.89,285.41L466.09,285.39L470.26,285.26L474.78,291.56L476.90,292.54L483.89,291.17L483.93,291.17L485.27,287.02L489.25,283.60L491.68,284.92L494.53,281.05L495.70,277.46L498.18,273.70L499.60,269.31L502.20,266.25L500.93,263.09L500.61,261.42L500.20,260.78L499.67,259.95L499.17,259.18L498.63,259.19L495.85,261.01L489.61,260.52L487.00,262.38L484.35,262.03L481.39,260.50L477.83,260.40L474.35,258.58L470.24,260.07L468.75,266.24L468.57,266.37Z " data-iso="NGA" data-name="Nigeria" data-pop="149229090.0"/><path d="M190.10,261.88L191.38,264.40L192.39,266.22L194.43,268.54L194.43,268.64L197.83,268.70L199.94,269.81L200.84,269.16L200.62,269.10L201.81,261.91L202.47,258.14L203.49,254.70L203.59,254.57L202.43,254.63L192.23,258.97L192.15,260.58L190.12,261.78L190.10,261.88Z " data-iso="NIC" data-name="Nicaragua" data-pop="5891199.0"/><path d="M468.58,124.95L468.30,124.83L467.96,124.97L466.73,124.84L466.53,124.89L468.39,125.34L468.58,124.95Z M472.87,126.97L473.02,127.02L473.15,127.04L473.68,127.05L473.82,126.52L474.15,124.51L473.46,123.58L476.62,118.39L476.25,118.33L470.99,119.48L467.80,124.79L468.65,124.81L469.97,124.74L472.87,126.97L472.87,126.97Z " data-iso="NLD" data-name="Netherlands" data-pop="16715999.0"/><path d="M486.54,99.17L489.08,95.67L489.77,91.63L487.86,90.45L487.10,85.42L491.37,81.56L492.53,76.50L496.72,73.33L497.30,71.05L505.58,67.59L505.89,67.58L506.00,67.48L508.12,66.87L511.81,68.68L516.25,68.92L522.31,64.48L525.46,65.66L525.26,67.50L525.45,67.62L525.80,67.54L526.27,66.78L529.40,66.09L529.41,65.32L529.05,65.28L524.33,64.23L529.26,63.85L522.91,61.76L519.08,63.44L519.17,62.12L513.86,62.00L511.82,64.72L510.07,63.55L508.68,65.17L504.79,64.83L503.43,66.40L502.26,65.43L496.73,68.82L497.86,69.61L494.16,70.42L492.76,73.21L488.90,75.57L485.84,80.61L481.03,84.11L482.21,85.11L478.68,85.35L473.87,88.24L469.96,89.87L470.89,91.20L476.45,92.20L475.06,92.79L470.32,92.54L471.91,95.62L470.99,97.18L472.54,99.09L471.81,100.53L475.51,102.50L479.36,101.58L484.06,98.37L486.53,99.07L486.54,99.17Z M503.45,40.23L500.85,40.45L503.11,42.83L506.35,43.15L507.01,41.83L503.45,40.23Z M492.63,36.86L491.14,36.60L492.11,39.24L488.60,37.21L482.03,37.07L480.66,38.39L483.33,40.21L493.17,40.06L493.29,40.88L487.66,43.13L493.33,45.58L496.99,41.74L502.91,39.86L497.58,38.72L492.63,36.86Z M501.02,36.00L505.83,38.58L509.63,38.24L514.17,36.47L505.68,36.15L505.05,35.45L501.02,36.00Z " data-iso="NOR" data-name="Norway" data-pop="4676305.0"/><path d="M719.21,208.30L717.08,208.52L711.16,206.89L707.20,204.60L706.59,203.50L697.83,199.48L696.94,200.33L696.76,200.10L696.61,200.04L695.27,201.66L694.84,204.75L696.11,205.68L705.49,210.15L708.25,209.94L711.40,212.03L717.46,213.52L720.16,211.74L719.62,208.45L719.48,208.35L719.21,208.30Z " data-iso="NPL" data-name="Nepal" data-pop="28563377.0"/><path d="M947.57,456.03L947.20,453.69L932.56,464.24L927.79,465.97L918.08,472.60L921.50,473.96L925.44,474.66L936.25,466.16L941.27,465.28L949.83,457.67L951.52,455.11L947.57,456.03Z M961.00,433.35L960.63,440.55L961.66,441.06L958.12,445.86L953.63,449.25L955.89,451.31L955.21,453.28L952.29,456.58L954.55,456.50L962.48,450.31L964.62,448.20L968.22,446.30L970.30,442.78L966.24,444.28L961.55,440.18L962.28,439.36L962.67,433.79L961.00,433.35Z " data-iso="NZL" data-name="New Zealand" data-pop="4213418.0"/><path d="M623.74,226.92L624.01,227.33L625.37,229.44L624.66,233.38L622.73,237.18L615.67,240.06L615.26,240.23L615.42,240.58L618.01,246.31L618.24,246.42L619.27,248.64L619.89,248.37L624.32,247.51L626.62,244.21L628.93,243.84L637.79,227.62L636.54,227.07L626.87,219.69L626.46,218.74L624.73,219.14L624.12,222.47L623.71,226.39L623.74,226.92Z M625.08,214.85L625.43,216.19L625.57,216.35L625.91,216.33L625.91,216.12L626.06,214.68L625.27,214.33L625.08,214.85Z " data-iso="OMN" data-name="Oman" data-pop="3418085.0"/><path d="M679.87,180.29L678.38,179.81L676.65,176.98L672.57,175.42L672.41,175.47L672.13,175.61L664.06,179.36L665.15,181.07L662.88,186.49L662.92,188.58L661.41,189.57L660.96,193.73L654.76,196.02L653.07,197.80L653.15,201.28L647.26,202.88L638.56,201.59L637.37,201.20L638.05,201.90L641.18,205.92L643.99,207.88L645.65,210.57L644.83,212.76L642.14,214.48L641.93,217.94L641.88,218.00L655.91,216.51L659.57,221.64L662.27,222.99L662.29,222.78L663.98,221.15L669.16,220.76L670.53,219.79L669.51,217.93L664.67,212.18L667.47,208.11L670.23,208.35L675.82,199.89L676.98,196.62L677.34,191.84L673.85,189.04L673.57,183.57L677.88,184.51L681.26,182.50L681.28,182.33L681.08,182.02L680.52,181.16L680.21,180.67L680.00,180.35L679.87,180.29Z " data-iso="PAK" data-name="Pakistan" data-pop="176242949.0"/><path d="M203.82,273.95L202.59,275.12L203.14,276.18L202.54,279.33L202.62,279.23L204.58,278.76L209.20,282.35L211.26,281.37L210.01,278.82L214.39,276.02L217.26,278.23L217.63,282.24L217.71,282.34L219.94,279.82L219.59,277.23L218.64,276.41L213.68,273.98L205.18,276.24L204.01,274.14L203.82,273.95Z " data-iso="PAN" data-name="Panama" data-pop="3360474.0"/><path d="M241.64,323.01L240.03,321.96L241.39,317.80L236.75,316.09L234.18,316.82L225.39,308.30L225.21,308.53L225.03,308.66L225.32,311.55L224.35,313.62L220.97,317.30L217.12,319.03L214.94,324.44L209.46,323.17L209.78,320.25L209.24,320.63L207.24,325.57L208.30,328.27L207.55,329.78L210.82,331.90L214.46,337.47L218.95,346.86L219.37,348.47L224.43,356.44L224.29,358.65L228.32,363.23L235.78,367.54L243.39,373.50L243.64,373.75L245.30,372.84L245.38,372.47L245.88,370.98L246.09,370.74L246.09,370.73L245.99,360.32L246.98,358.79L246.23,357.04L247.11,352.82L244.44,348.05L244.01,347.27L243.72,347.28L240.76,347.48L240.52,343.24L235.82,343.88L233.75,341.76L229.77,335.14L233.45,326.25L238.70,323.69L241.79,323.51L241.80,323.28L241.64,323.01Z " data-iso="PER" data-name="Peru" data-pop="29546963.0"/><path d="M844.86,274.86L842.92,273.62L843.40,275.96L836.33,277.74L832.93,282.44L833.53,283.46L834.91,280.43L839.43,281.09L839.48,282.75L843.83,288.16L844.74,286.80L843.70,284.26L844.75,282.01L846.33,284.11L847.17,282.53L844.86,274.86Z M836.11,275.78L836.69,270.35L835.01,269.27L834.92,272.12L833.69,273.53L836.11,275.78Z M833.23,266.66L831.87,266.27L832.02,268.93L834.38,269.49L835.18,268.16L833.23,266.66Z M825.25,241.59L824.10,241.84L823.61,245.10L824.54,250.17L822.78,249.80L824.34,255.08L825.86,254.97L830.96,258.88L832.86,261.01L832.50,258.46L835.02,261.35L837.65,261.58L833.40,257.45L831.20,257.73L828.29,252.72L830.50,246.94L828.72,242.00L825.25,241.59Z " data-iso="PHL" data-name="Philippines" data-pop="97976603.0"/><path d="M925.99,323.49L922.78,327.52L915.00,327.69L914.84,328.74L918.56,330.61L921.84,330.11L925.56,328.02L925.99,323.49Z M892.48,317.47L892.48,317.48L892.48,317.72L891.44,331.76L891.51,332.58L890.95,340.72L891.40,341.09L898.28,339.08L899.16,336.72L903.71,336.01L906.87,336.99L910.85,343.56L919.53,346.15L917.94,343.92L918.50,342.76L912.15,336.28L912.91,330.91L906.74,327.44L906.93,325.37L900.20,320.40L892.57,317.47L892.48,317.47Z M929.14,325.14L929.42,322.81L926.52,319.76L922.62,317.93L928.34,322.90L929.14,325.14Z " data-iso="PNG" data-name="Papua New Guinea" data-pop="6057263.0"/><path d="M508.98,114.48L504.98,113.13L501.06,114.08L495.14,116.18L495.04,116.12L495.01,116.23L495.07,116.39L495.43,116.43L495.99,116.55L495.84,117.07L495.22,116.87L496.94,122.48L496.60,123.34L497.40,126.63L497.39,126.68L497.62,126.67L498.64,126.60L502.75,129.24L503.35,128.20L507.65,129.98L508.60,131.23L508.62,131.33L508.91,131.38L512.81,131.77L516.27,131.68L518.65,132.82L518.83,132.85L518.94,132.84L519.68,132.89L521.52,128.34L520.97,124.65L520.80,124.41L520.58,124.07L519.42,121.88L520.98,120.49L519.95,117.31L519.51,116.16L519.48,116.09L519.34,115.47L517.58,114.62L517.45,114.75L517.36,114.77L515.87,114.74L509.09,114.40L508.98,114.48Z " data-iso="POL" data-name="Poland" data-pop="38482919.0"/><path d="M811.64,164.84L815.17,166.52L815.59,168.86L817.01,169.52L815.37,171.51L821.42,172.72L821.46,172.75L821.85,171.11L825.18,169.74L824.96,169.54L821.47,167.65L821.07,165.61L825.38,161.51L824.11,159.15L825.63,156.73L825.72,156.64L825.59,156.55L825.05,156.03L824.86,155.81L824.72,155.69L822.34,154.95L821.66,156.93L818.93,158.07L820.11,159.89L816.97,159.29L811.59,164.81L811.64,164.84Z " data-iso="PRK" data-name="N. Korea" data-pop="22665345.0"/><path d="M432.48,158.31L430.95,167.00L432.30,171.31L431.61,175.44L435.96,174.95L436.21,174.91L436.30,165.97L437.87,165.05L437.71,157.89L432.78,157.92L432.48,158.31Z " data-iso="PRT" data-name="Portugal" data-pop="10707924.0"/><path d="M281.47,379.68L278.35,377.12L275.58,377.16L270.39,378.41L268.73,387.52L268.68,387.70L268.77,387.80L271.64,391.10L274.81,393.53L284.41,398.13L285.20,399.79L282.89,405.53L289.38,406.58L291.71,406.32L294.32,401.25L294.19,399.71L294.15,399.19L294.70,394.21L290.63,392.54L290.25,390.79L282.79,387.25L281.56,380.53L281.47,380.27L281.47,379.68Z " data-iso="PRY" data-name="Paraguay" data-pop="6995655.0"/><path d="M611.63,219.94L610.65,214.52L609.43,217.23L609.88,219.21L609.80,219.43L610.00,219.82L611.26,220.08L611.63,219.94Z " data-iso="QAT" data-name="Qatar" data-pop="833285.0"/><path d="M535.63,145.29L535.07,140.80L534.78,140.15L530.52,135.66L530.26,135.68L530.14,135.72L525.75,137.57L523.72,136.91L520.24,136.71L520.15,136.77L520.09,136.85L517.90,138.31L515.66,142.73L513.60,143.11L513.50,143.20L513.68,143.40L516.25,146.07L518.08,148.22L520.86,149.75L520.91,149.78L521.12,149.93L531.53,150.33L532.51,150.11L537.52,151.54L537.51,151.34L538.04,147.77L537.90,147.38L540.00,146.42L540.02,146.18L538.11,145.97L536.52,146.07L536.13,145.87L535.80,145.51L535.63,145.29Z " data-iso="ROU" data-name="Romania" data-pop="22215421.0"/><path d="M833.06,114.62L834.34,117.97L833.14,118.02L837.42,124.03L839.27,125.43L849.88,143.27L850.67,141.09L854.15,143.48L853.86,142.31L847.74,136.98L846.35,132.41L849.10,132.38L833.06,114.62Z M512.35,111.64L512.19,111.62L512.07,111.80L511.00,112.74L509.70,113.81L509.47,114.11L509.09,114.40L515.87,114.74L517.36,114.77L517.45,114.75L517.32,114.58L517.19,113.82L517.42,113.12L513.08,111.69L513.10,112.22L511.51,112.64L512.12,111.96L512.35,111.64Z M35.73,67.87L35.42,67.74L20.71,79.82L26.84,76.80L26.34,78.51L30.83,78.31L36.12,81.89L36.89,80.54L39.54,79.88L41.29,78.10L43.85,78.43L48.16,75.79L47.23,74.02L43.80,73.48L40.71,75.55L38.75,75.00L41.49,71.72L37.57,69.75L35.73,67.87Z M48.09,59.97L45.36,60.09L43.21,61.70L49.85,61.03L48.09,59.97Z M582.05,54.91L578.79,54.93L575.65,59.99L579.81,60.50L580.57,62.06L585.09,62.68L590.53,62.49L584.17,59.11L584.68,55.22L582.05,54.91Z M780.97,49.02L780.13,49.51L786.25,50.63L790.59,49.62L780.97,49.02Z M764.59,47.74L760.90,46.72L759.83,49.40L763.64,50.64L766.79,50.17L773.27,50.57L770.44,48.78L773.83,49.74L776.84,48.42L766.70,46.88L764.59,47.74Z M605.46,46.60L605.88,44.69L599.66,45.83L591.84,46.44L584.51,49.10L580.83,49.71L581.49,50.64L579.18,53.10L585.67,54.74L589.00,50.94L594.21,48.86L605.46,46.60Z M529.41,65.32L529.40,66.09L526.27,66.78L525.80,67.54L525.45,67.62L525.31,67.66L524.91,69.66L527.08,74.27L529.61,76.83L529.46,79.90L531.33,84.16L534.39,85.69L534.33,88.51L527.51,94.27L528.46,94.16L530.91,95.39L528.71,97.47L528.62,97.70L527.53,100.16L528.30,103.24L527.94,104.06L527.95,104.14L528.25,104.15L529.33,105.33L529.15,105.96L530.75,108.59L530.71,108.75L531.11,109.04L534.42,110.28L538.20,110.66L538.31,111.83L541.58,116.66L542.59,119.04L542.32,122.33L542.35,122.42L542.40,122.42L547.47,121.58L549.43,125.35L553.82,128.45L554.97,128.23L560.48,129.92L560.97,129.46L566.49,132.23L565.49,133.08L566.69,135.65L563.85,137.15L562.61,139.75L563.31,139.46L561.82,141.71L563.95,143.26L559.25,146.44L569.25,152.49L569.57,152.68L571.38,152.27L574.18,153.39L586.27,156.02L588.54,158.05L588.60,158.10L588.92,158.17L593.07,160.51L594.68,158.26L594.37,158.05L590.79,154.04L587.91,149.14L593.53,142.56L593.46,142.40L589.53,137.60L586.82,137.31L584.64,134.58L585.70,128.25L589.07,130.07L588.72,127.74L594.52,123.97L597.30,123.76L607.61,127.63L610.73,125.97L614.35,125.97L616.94,127.40L622.70,126.67L621.06,124.50L619.62,119.44L622.05,118.98L619.55,118.20L619.01,115.89L625.66,115.15L635.03,113.01L636.03,112.04L639.86,111.55L643.58,112.75L644.77,115.24L651.12,116.08L651.98,117.75L654.29,117.69L659.59,114.46L659.34,115.98L663.64,118.27L673.03,126.86L680.84,126.55L688.43,130.80L691.28,131.37L692.24,130.41L694.79,132.59L694.95,132.81L695.22,132.84L695.36,132.79L695.42,132.68L696.04,132.53L696.18,132.54L696.19,132.54L698.99,131.46L701.05,129.28L708.08,127.38L713.36,129.56L721.71,129.87L722.71,129.37L720.44,126.02L721.73,122.41L731.61,125.11L733.18,127.62L738.98,129.05L745.18,128.50L752.43,131.98L757.25,132.35L761.66,131.63L765.64,128.93L773.17,130.07L773.41,130.25L774.12,130.55L777.21,131.32L779.92,129.41L779.00,128.24L779.09,124.13L779.99,122.85L777.60,118.76L781.27,117.70L790.99,119.20L796.35,123.51L803.95,130.95L810.18,132.41L816.53,137.66L822.46,136.24L826.78,141.83L826.72,146.88L823.00,147.15L825.69,154.32L824.97,155.70L824.86,155.81L825.05,156.03L825.59,156.55L825.72,156.64L825.80,156.55L831.98,155.24L836.00,152.30L838.98,142.70L839.27,133.12L836.18,127.76L834.92,124.06L835.38,123.03L831.40,119.21L832.11,118.35L825.31,115.02L823.86,117.41L817.04,114.06L812.52,113.48L815.05,109.31L815.88,106.00L818.30,103.19L818.10,101.20L821.16,98.07L827.04,97.93L828.59,98.64L833.90,97.93L835.94,98.36L836.40,96.77L839.61,97.46L843.24,99.70L848.26,98.55L847.99,96.56L849.44,90.59L854.21,89.83L857.00,90.07L857.64,91.73L860.39,93.94L863.85,90.22L862.21,87.78L864.02,87.32L867.66,92.69L864.19,98.87L864.52,99.93L860.47,103.41L861.41,106.90L864.09,111.41L878.95,126.30L880.05,121.72L879.23,120.62L879.27,115.93L880.80,113.93L882.92,113.41L879.78,110.91L879.65,108.35L871.23,96.98L871.34,95.88L877.09,95.44L878.03,96.51L881.38,94.09L884.80,94.59L888.19,96.13L887.87,94.32L890.56,90.46L895.12,88.44L895.60,87.44L901.63,88.41L895.88,84.43L894.38,79.82L879.68,67.74L866.25,64.96L853.26,64.35L854.26,65.79L858.34,67.55L858.06,68.22L851.21,66.87L848.53,65.49L837.73,65.53L835.01,66.54L829.11,65.06L826.75,62.86L821.17,61.57L816.05,61.40L806.92,61.73L804.21,60.57L794.84,57.81L792.55,57.72L790.03,58.90L784.47,56.84L774.07,57.36L776.61,60.36L767.75,59.87L765.10,60.56L760.18,58.94L759.85,62.44L755.88,61.33L749.92,58.47L747.07,55.04L737.27,53.74L735.32,55.90L724.25,55.09L723.37,54.09L718.76,53.85L712.51,54.34L711.57,53.75L703.14,53.49L703.93,54.49L700.37,55.30L697.58,54.84L700.11,53.79L708.07,49.24L699.48,45.37L690.25,44.71L686.07,43.45L680.07,42.80L676.77,43.97L677.29,45.79L675.81,47.18L672.88,46.59L667.65,47.47L667.20,46.95L655.78,48.40L651.20,49.70L649.13,52.01L651.28,53.22L638.43,54.16L643.42,57.77L647.86,59.23L651.11,63.03L649.28,63.81L648.80,61.99L646.84,61.69L647.91,59.70L635.78,57.57L631.76,58.71L632.20,59.92L639.57,61.68L631.43,60.89L629.22,58.85L628.80,64.14L631.69,67.25L635.38,66.98L639.79,67.98L641.66,69.94L640.50,71.41L636.87,67.75L632.82,68.44L634.82,71.45L633.70,73.82L628.31,75.76L629.94,72.00L625.24,62.21L622.25,60.33L622.42,56.70L614.72,55.85L613.16,60.06L611.34,62.22L618.91,67.94L618.86,69.77L614.84,68.07L605.20,65.65L599.51,65.12L598.04,65.71L600.44,67.73L596.82,69.38L595.70,67.68L592.68,68.78L587.06,69.59L585.09,67.79L581.38,68.50L575.62,70.53L570.99,74.02L569.17,74.34L564.37,72.34L568.03,70.82L565.66,69.27L559.68,68.88L561.90,69.96L563.73,76.88L562.12,75.91L556.43,76.84L555.36,80.03L546.31,80.22L550.55,83.34L549.78,83.51L542.27,80.66L540.82,78.79L541.11,77.05L538.14,75.91L536.39,74.09L542.76,75.67L550.56,76.69L556.15,74.07L554.72,71.61L540.09,66.85L531.89,64.81L529.84,65.36L529.41,65.32Z M674.35,38.52L671.80,38.22L670.68,40.91L673.36,41.43L681.52,40.49L680.31,39.65L674.35,38.52Z M661.00,36.22L655.56,36.38L653.43,37.55L659.82,39.15L666.91,39.65L667.00,37.18L661.00,36.22Z M656.13,33.97L649.24,34.18L648.14,35.95L653.46,36.60L659.74,36.02L656.13,33.97Z " data-iso="RUS" data-name="Russia" data-pop="140041247.0"/><path d="M551.58,311.96L551.12,312.13L548.92,313.10L548.82,313.11L548.70,313.19L547.43,315.99L546.58,316.89L546.78,317.73L547.06,317.86L547.11,317.67L549.17,318.13L550.39,316.76L551.74,316.71L551.82,316.72L551.94,316.71L552.75,316.24L552.63,313.73L551.60,312.02L551.70,311.96L551.58,311.96Z " data-iso="RWA" data-name="Rwanda" data-pop="10473282.0"/><path d="M431.71,209.72L431.72,209.12L431.32,209.12L431.47,210.94L428.28,212.02L425.00,211.44L422.55,214.70L420.08,219.50L415.97,223.16L413.36,230.60L406.20,231.53L406.18,231.68L405.85,233.55L406.00,233.73L406.31,231.86L421.40,224.18L421.62,216.01L423.76,215.09L431.61,215.09L431.68,211.05L431.69,210.45L431.71,209.72Z " data-iso="SAH" data-name="W. Sahara" data-pop="-99.0"/><path d="M572.41,193.05L572.02,193.47L566.70,195.82L569.58,198.89L564.95,203.01L561.01,203.02L560.75,205.29L560.69,207.41L562.08,207.76L568.74,217.62L570.20,221.22L578.27,235.57L581.57,238.45L584.47,244.21L587.94,249.35L587.99,249.63L588.97,246.09L598.49,246.55L602.17,246.25L606.46,241.71L614.55,240.34L615.26,240.23L615.67,240.06L622.73,237.18L624.66,233.38L625.37,229.44L624.01,227.33L623.74,226.92L623.57,227.21L615.74,226.10L612.43,221.98L612.28,221.23L612.18,221.23L611.49,221.04L611.62,220.55L611.49,220.24L611.26,220.08L610.00,219.82L609.80,219.43L609.54,219.14L606.57,212.09L603.03,209.22L601.49,206.27L601.28,205.93L599.00,205.97L598.70,205.63L595.97,204.02L595.39,203.94L594.88,204.06L583.97,198.91L580.57,196.30L573.08,193.17L572.41,193.05Z " data-iso="SAU" data-name="Saudi Arabia" data-pop="28686633.0"/><path d="M532.89,229.46L532.97,231.25L533.20,236.62L530.92,236.64L530.22,237.98L530.24,238.43L530.30,240.03L530.68,251.96L527.57,253.97L525.94,256.16L525.58,260.53L524.44,262.19L527.81,268.76L527.71,269.15L527.94,269.59L530.20,273.07L530.16,274.79L531.51,277.11L531.81,277.20L531.81,277.20L531.85,277.10L533.71,274.13L536.77,270.93L539.48,274.28L543.76,274.84L551.17,272.51L553.49,273.15L556.81,267.98L558.98,266.74L562.28,274.36L562.28,274.36L562.28,274.36L562.28,274.17L563.66,269.29L564.73,269.00L569.00,258.17L569.20,257.21L569.06,256.18L570.18,247.31L571.56,246.99L574.90,243.78L574.78,243.54L570.89,239.88L570.17,234.63L568.85,230.28L568.76,229.46L552.36,229.46L549.03,229.46L534.05,229.46L532.89,229.46Z " data-iso="SDN" data-name="Sudan" data-pop="30894000.0"/><path d="M531.81,277.20L531.81,277.20L531.96,277.25L535.06,281.17L538.74,284.46L541.80,289.63L542.02,289.91L542.13,290.16L546.78,292.13L549.65,292.70L552.60,295.54L552.67,295.69L552.76,295.50L556.07,295.27L559.31,294.30L561.61,293.92L562.32,293.08L562.93,292.37L563.55,291.65L565.68,289.19L566.24,288.54L566.19,288.48L559.35,280.21L559.13,279.76L562.28,274.51L562.28,274.36L562.28,274.36L562.28,274.36L558.98,266.74L556.81,267.98L553.49,273.15L551.17,272.51L543.76,274.84L539.48,274.28L536.77,270.93L533.71,274.13L531.85,277.10L531.81,277.20Z " data-iso="SSD" data-name="S. Sudan" data-pop="8260490.0"/><path d="M419.97,255.20L416.66,250.75L413.27,248.62L408.07,249.06L407.11,251.54L407.00,251.92L405.09,255.83L406.80,259.24L406.87,259.60L414.26,259.79L415.17,260.51L409.14,260.54L406.22,261.48L406.24,261.78L406.25,263.19L406.24,263.85L406.34,264.01L409.02,263.72L411.00,262.85L414.47,262.87L415.49,262.87L416.48,262.91L419.14,263.94L422.44,263.79L422.65,263.84L422.67,263.57L422.67,261.91L420.31,255.81L420.03,255.23L419.97,255.20Z " data-iso="SEN" data-name="Senegal" data-pop="13711597.0"/><path d="M416.74,276.05L419.54,281.94L421.99,283.35L422.11,283.49L425.82,278.47L425.91,277.96L425.92,277.85L425.68,277.81L424.48,274.63L420.96,272.46L419.37,272.80L416.68,275.83L416.74,276.05Z " data-iso="SLE" data-name="Sierra Leone" data-pop="6440053.0"/><path d="M184.36,256.60L182.14,258.47L181.94,259.07L182.30,259.26L185.54,260.69L187.60,261.12L188.72,260.33L188.80,260.28L189.00,258.52L187.97,258.17L184.50,256.65L184.42,256.64L184.36,256.60Z " data-iso="SLV" data-name="El Salvador" data-pop="7185218.0"/><path d="M607.59,267.95L595.55,270.87L593.84,270.90L590.82,267.62L590.20,267.07L589.95,267.55L589.63,268.17L589.27,268.86L589.23,269.00L590.34,273.26L591.20,274.65L604.13,279.59L605.18,279.59L605.61,278.79L607.96,274.40L607.89,272.53L607.69,267.94L607.59,267.95Z " data-iso="SOL" data-name="Somaliland" data-pop="3500000.0"/><path d="M586.02,313.79L591.70,305.93L594.36,303.19L599.63,299.32L602.15,296.42L607.48,288.53L613.23,275.62L613.87,271.53L613.26,265.34L608.07,267.89L607.69,267.94L607.89,272.53L607.96,274.40L605.61,278.79L605.18,279.59L604.45,280.44L596.00,290.66L590.51,291.57L586.81,293.76L586.72,293.95L586.34,294.58L583.97,298.00L584.01,311.26L585.71,314.21L586.02,313.79Z " data-iso="SOM" data-name="Somalia" data-pop="9832017.0"/><path d="M509.85,143.82L509.85,143.90L510.27,145.69L511.05,146.12L510.38,147.43L510.42,147.56L510.52,147.55L510.88,148.92L511.46,152.09L511.30,152.27L511.30,152.32L512.74,153.58L513.06,153.77L514.72,154.68L514.72,154.77L515.06,154.67L515.40,153.46L516.65,153.84L518.24,156.71L518.31,156.83L518.47,156.85L518.80,156.76L520.42,156.57L520.49,156.60L520.71,156.54L520.68,154.72L521.34,154.57L520.81,149.85L520.91,149.78L520.86,149.75L518.08,148.22L516.25,146.07L513.68,143.40L513.50,143.20L513.40,143.14L511.33,143.27L510.50,143.62L509.91,143.82L509.85,143.82Z " data-iso="SRB" data-name="Serbia" data-pop="7379339.0"/><path d="M290.88,288.51L288.60,286.77L282.02,286.75L281.32,288.41L281.29,288.34L279.00,290.94L279.87,296.12L280.79,296.10L283.14,301.10L283.26,301.22L283.35,301.25L285.10,299.26L286.67,299.44L288.89,299.84L289.03,299.85L289.07,299.81L289.69,290.25L290.64,289.02L290.88,288.51Z " data-iso="SUR" data-name="Suriname" data-pop="481267.0"/><path d="M518.65,132.82L516.27,131.68L512.81,131.77L508.91,131.38L508.62,131.33L508.55,131.34L506.72,132.88L506.07,133.35L503.83,134.23L503.77,134.50L503.76,134.53L503.56,135.04L503.58,135.23L504.28,136.44L504.45,136.56L504.53,136.54L508.83,137.32L513.84,134.67L517.90,135.21L517.95,135.17L517.93,134.60L518.38,133.99L518.49,133.54L518.80,132.99L518.83,132.85L518.65,132.82Z " data-iso="SVK" data-name="Slovakia" data-pop="5463046.0"/><path d="M503.07,141.75L502.55,141.05L502.37,140.57L501.85,140.55L501.70,140.62L498.46,141.54L497.70,142.18L495.45,141.77L495.33,141.75L495.29,141.96L494.54,142.46L495.17,143.65L495.57,145.03L495.36,145.21L495.19,145.28L500.80,144.16L500.74,142.87L502.85,141.74L503.10,141.83L503.07,141.75Z " data-iso="SVN" data-name="Slovenia" data-pop="2005692.0"/><path d="M505.89,67.58L505.58,67.59L497.30,71.05L496.72,73.33L492.53,76.50L491.37,81.56L487.10,85.42L487.86,90.45L489.77,91.63L489.08,95.67L486.54,99.17L486.29,99.00L489.66,106.20L491.04,107.50L491.34,110.96L494.98,110.81L494.68,109.60L498.92,108.66L500.07,103.20L498.52,97.82L505.40,96.89L500.91,93.74L500.70,87.92L508.94,82.62L509.07,80.41L511.47,77.39L515.18,77.58L515.81,77.51L514.36,75.72L514.90,74.39L512.66,70.33L506.55,67.75L505.89,67.58Z " data-iso="SWE" data-name="Sweden" data-pop="9059651.0"/><path d="M552.93,401.12L550.68,405.68L552.70,405.93L553.19,404.20L553.28,404.25L553.34,403.10L553.21,402.24L553.28,402.00L553.07,401.13L553.01,401.08L552.93,401.12Z " data-iso="SWZ" data-name="Swaziland" data-pop="1123913.0"/><path d="M265.70,243.57L265.80,243.65L265.99,243.73L266.04,243.64L266.05,243.55L265.71,243.55L265.70,243.57Z " data-iso="SXM" data-name="Sint Maarten" data-pop="37429.0"/><path d="M579.41,174.73L571.15,176.69L567.69,175.90L565.62,176.83L563.23,176.35L561.46,179.44L561.33,179.68L561.22,180.67L561.68,181.21L561.89,183.25L562.20,184.05L563.11,183.88L563.62,186.83L562.45,188.23L562.33,188.35L562.30,188.57L562.55,189.42L562.46,189.59L562.37,190.69L562.35,190.86L562.67,190.93L564.51,192.20L565.52,192.36L570.14,189.06L570.84,188.57L571.61,188.06L577.15,181.69L577.17,177.29L579.61,175.21L579.61,175.16L579.41,174.73Z " data-iso="SYR" data-name="Syria" data-pop="20178485.0"/><path d="M528.76,237.58L512.50,228.24L505.60,224.26L503.72,225.28L502.63,225.87L503.02,227.94L505.21,236.97L504.67,247.71L501.38,251.86L498.84,257.65L499.17,259.18L499.67,259.95L500.20,260.78L500.61,261.42L501.16,261.43L503.04,263.49L505.64,272.41L501.30,272.51L500.59,273.91L505.36,281.00L505.20,281.29L505.53,281.32L509.54,280.89L511.86,279.64L515.84,276.23L521.40,274.56L524.19,270.51L527.58,269.12L527.71,269.15L527.81,268.76L524.44,262.19L525.58,260.53L525.94,256.16L527.57,253.97L530.68,251.96L530.30,240.03L530.24,238.43L528.76,237.58Z " data-iso="TCD" data-name="Chad" data-pop="10329208.0"/><path d="M459.52,268.92L459.23,269.02L459.03,268.89L458.04,268.61L457.34,268.45L457.53,268.66L459.16,274.59L459.38,284.08L461.21,286.41L461.59,286.20L462.55,285.95L461.69,273.98L459.89,271.05L460.23,269.27L460.31,268.88L459.52,268.92Z " data-iso="TGO" data-name="Togo" data-pop="6019877.0"/><path d="M760.37,273.02L761.21,278.67L764.59,282.78L765.11,284.05L765.94,285.15L768.94,286.14L768.72,287.55L772.08,285.86L771.11,285.03L764.97,277.18L762.91,275.20L762.08,271.29L764.00,264.01L763.63,260.83L766.53,260.16L773.14,266.34L773.20,266.33L770.64,259.77L774.02,256.63L779.02,256.92L779.06,256.89L779.23,256.81L779.82,254.40L778.98,251.01L773.33,242.65L770.82,243.30L767.60,243.19L765.13,245.66L764.88,240.29L763.55,238.02L761.87,237.90L760.59,235.70L760.58,235.49L760.18,235.26L754.12,239.26L753.29,242.03L758.35,249.87L758.38,253.10L757.33,253.82L760.36,258.32L763.00,266.07L760.70,271.75L760.37,273.02Z " data-iso="THA" data-name="Thailand" data-pop="65905410.0"/><path d="M658.98,165.45L658.34,165.32L658.46,165.44L658.98,165.45Z M652.75,174.94L652.79,175.05L660.29,170.46L662.21,171.36L663.88,176.11L668.98,173.86L673.19,174.69L673.24,174.72L673.30,174.66L672.06,170.53L668.91,169.80L667.73,166.98L667.67,166.79L667.50,166.76L663.89,167.66L661.48,166.32L655.24,166.52L654.89,164.94L659.37,164.04L659.35,163.98L659.18,163.99L657.66,161.58L649.92,167.53L652.38,169.58L652.80,174.67L652.75,174.94Z " data-iso="TJK" data-name="Tajikistan" data-pop="7349145.0"/><path d="M615.97,160.12L615.85,160.11L614.62,160.30L610.28,156.63L605.80,158.49L606.30,159.38L609.40,157.39L612.41,160.83L610.47,162.52L608.01,161.66L608.37,165.20L611.71,168.88L612.67,174.07L612.76,174.32L619.14,171.29L622.10,171.65L628.32,173.96L631.75,176.85L633.99,176.83L635.00,180.36L635.10,180.50L635.33,180.46L638.31,182.04L640.42,181.12L640.35,179.69L644.00,177.91L644.26,175.34L648.91,174.32L649.05,174.30L648.93,173.91L648.91,172.22L645.75,171.12L635.28,164.70L631.34,160.37L627.55,159.84L626.75,157.87L622.30,156.59L618.96,160.33L616.73,160.16L615.97,160.12Z " data-iso="TKM" data-name="Turkmenistan" data-pop="4884887.0"/><path d="M839.33,341.21L838.80,341.52L839.53,341.82L839.97,341.42L840.11,340.98L839.33,341.21Z M841.66,340.09L842.30,340.73L842.12,340.97L841.92,342.13L842.39,341.74L848.51,338.81L848.14,337.85L843.18,338.78L842.00,339.79L841.66,340.09Z " data-iso="TLS" data-name="East Timor" data-pop="1131612.0"/><path d="M270.15,271.96L270.07,269.46L268.34,269.94L267.39,272.19L270.15,271.96Z " data-iso="TTO" data-name="Trinidad and Tobago" data-pop="1310000.0"/><path d="M482.28,175.78L481.43,179.85L481.69,182.42L479.43,186.92L485.45,199.02L485.65,199.87L486.00,199.68L487.66,197.87L487.29,195.43L491.28,192.01L491.19,189.25L490.88,189.10L488.06,187.53L487.25,185.07L489.82,181.86L489.64,176.00L487.36,176.03L485.99,174.64L482.99,175.56L482.28,175.78Z " data-iso="TUN" data-name="Tunisia" data-pop="10486339.0"/><path d="M561.46,179.44L563.23,176.35L565.62,176.83L567.69,175.90L571.15,176.69L579.41,174.73L579.61,175.16L579.88,175.09L580.58,174.26L583.81,174.75L586.41,174.96L586.52,175.04L586.52,174.99L583.27,166.99L585.23,166.07L585.33,166.08L585.22,165.95L585.16,165.89L585.04,165.73L583.61,164.68L582.63,164.75L580.67,161.04L580.61,160.88L580.60,160.82L575.85,159.73L574.92,159.42L574.70,159.76L570.38,161.33L567.66,161.20L559.89,159.75L556.72,157.61L549.44,158.40L544.84,160.96L539.89,160.90L542.24,162.20L539.99,163.44L533.53,163.40L532.06,166.73L534.07,166.39L533.09,169.96L536.87,174.97L542.40,178.21L548.00,176.26L552.44,179.01L554.99,178.48L556.58,176.97L559.10,176.86L561.61,179.14L561.46,179.44Z M531.90,158.72L532.16,158.79L532.09,160.42L532.24,161.28L531.44,162.24L531.54,162.39L533.61,162.59L537.72,161.01L536.56,158.23L536.59,157.82L535.08,157.90L531.89,158.62L531.90,158.72Z " data-iso="TUR" data-name="Turkey" data-pop="76805524.0"/><path d="M822.04,227.22L821.11,217.77L820.08,218.55L818.79,225.32L819.82,227.19L822.04,227.22Z " data-iso="TWN" data-name="Taiwan" data-pop="22974347.0"/><path d="M551.70,311.96L551.60,312.02L552.63,313.73L552.75,316.24L551.94,316.71L551.82,316.72L551.76,316.81L551.39,320.97L551.15,321.65L549.18,324.06L548.21,324.04L548.21,324.21L548.00,325.94L550.26,332.85L552.07,337.09L552.16,337.41L552.23,337.67L555.16,339.95L555.38,339.95L558.56,341.66L558.73,341.75L558.78,341.72L562.03,342.07L563.02,343.00L564.75,349.39L564.77,349.51L565.45,349.50L571.68,349.90L575.62,348.92L581.79,345.53L581.76,345.45L578.45,338.31L579.32,333.23L577.30,330.76L578.41,325.21L578.47,324.91L573.74,320.71L562.41,311.73L562.18,311.73L561.84,311.73L553.61,311.73L553.06,311.73L551.73,311.95L551.70,311.96Z " data-iso="TZA" data-name="Tanzania" data-pop="41048532.0"/><path d="M562.17,311.12L562.30,307.53L565.44,302.29L565.18,299.52L562.81,294.27L562.32,293.08L561.61,293.92L559.31,294.30L556.07,295.27L552.76,295.50L552.67,295.69L552.84,295.79L552.36,299.39L553.74,300.05L553.03,302.14L549.90,305.75L548.83,313.00L548.82,313.11L548.92,313.10L551.12,312.13L551.58,311.96L551.70,311.96L551.73,311.95L553.06,311.73L553.61,311.73L561.84,311.73L562.18,311.73L562.17,311.12Z " data-iso="UGA" data-name="Uganda" data-pop="32369558.0"/><path d="M542.35,122.42L541.84,122.39L538.38,124.55L530.17,123.61L520.82,124.39L520.80,124.41L520.97,124.65L521.52,128.34L519.68,132.89L518.94,132.84L518.83,132.85L518.80,132.99L518.49,133.54L518.38,133.99L517.93,134.60L517.95,135.17L518.21,135.14L518.60,135.69L519.08,135.87L520.09,136.72L520.15,136.77L520.24,136.71L523.72,136.91L525.75,137.57L530.14,135.72L530.26,135.68L530.30,135.56L533.47,135.13L537.24,136.71L539.94,140.84L535.93,145.39L535.80,145.51L536.13,145.87L536.52,146.07L538.11,145.97L540.02,146.18L540.04,145.89L542.47,141.64L549.28,142.96L547.73,145.67L555.19,147.79L558.69,146.87L558.20,145.49L554.56,144.63L554.75,142.03L562.52,139.79L562.61,139.75L563.85,137.15L566.69,135.65L565.49,133.08L566.49,132.23L560.97,129.46L560.48,129.92L554.97,128.23L553.82,128.45L549.43,125.35L547.47,121.58L542.40,122.42L542.35,122.42Z " data-iso="UKR" data-name="Ukraine" data-pop="45700395.0"/><path d="M287.45,416.29L287.37,416.43L286.89,417.74L286.86,420.71L286.97,424.50L287.13,424.84L287.23,429.68L289.24,431.71L298.02,433.34L301.68,429.20L301.81,429.07L300.79,424.61L299.76,423.01L290.07,416.29L287.66,416.55L287.45,416.29Z " data-iso="URY" data-name="Uruguay" data-pop="3494382.0"/><path d="M123.46,133.61L121.67,138.77L121.94,136.10L117.03,135.59L115.56,142.06L114.93,142.60L108.12,154.12L106.92,157.27L103.72,168.73L106.11,175.77L105.28,177.95L107.22,182.45L106.88,184.62L114.23,188.84L114.33,191.56L114.32,191.58L121.23,190.97L122.24,192.20L130.86,195.93L139.18,195.91L139.54,194.70L144.81,194.33L148.15,198.59L151.58,204.28L154.17,201.58L157.81,201.62L162.02,213.64L167.27,215.21L167.34,214.97L167.88,208.47L170.17,206.73L175.66,204.00L176.57,201.76L177.91,202.32L184.62,202.28L186.51,201.60L188.05,203.59L191.59,202.64L192.36,200.94L190.56,200.19L198.25,198.67L198.42,199.64L202.55,198.91L205.37,201.42L210.24,200.96L212.33,204.10L211.26,208.44L213.21,214.55L214.81,217.35L216.61,217.84L218.28,214.60L218.62,210.74L217.55,202.64L217.37,197.55L221.65,191.98L232.68,184.15L235.44,182.76L237.21,180.24L235.79,179.34L238.22,178.73L238.94,170.20L240.08,172.07L244.92,167.17L247.30,163.66L247.19,162.38L251.33,160.32L259.98,158.74L257.42,156.53L258.76,154.37L266.40,149.55L271.16,147.70L271.06,146.61L271.11,146.50L269.79,144.63L270.52,139.11L267.92,138.89L259.87,146.18L249.86,147.08L243.96,150.42L242.51,151.94L237.19,151.95L235.42,154.86L228.47,156.97L223.91,158.86L222.96,157.80L225.65,155.09L228.47,145.87L223.92,140.89L216.20,135.53L205.32,135.62L203.00,134.44L199.91,132.21L198.69,133.13L123.55,133.13L123.46,133.61Z M110.86,108.09L109.96,109.90L111.35,113.24L112.30,111.88L110.86,108.09Z M64.85,103.16L60.76,103.77L58.58,106.15L64.06,104.74L64.85,103.16Z M36.47,84.32L35.28,85.29L39.17,86.17L42.11,85.36L36.47,84.32Z M114.95,113.35L115.32,113.14L116.05,112.76L116.49,112.49L116.56,112.38L117.79,111.19L117.89,110.82L118.74,109.77L118.99,109.60L116.65,107.22L114.74,97.84L111.99,97.54L110.17,98.79L107.78,98.54L106.97,94.90L102.01,95.04L111.75,83.79L121.04,73.74L128.89,65.72L128.73,65.69L125.16,64.32L116.41,64.16L101.37,61.54L99.09,62.00L98.35,60.67L93.61,62.10L87.58,62.90L82.39,64.08L74.68,67.17L67.41,68.04L66.40,70.59L67.55,73.49L71.60,73.74L73.15,75.60L69.98,74.06L69.75,76.03L67.80,76.77L65.50,75.12L62.95,75.18L51.66,77.97L54.76,81.71L59.48,81.84L66.13,80.33L63.29,83.75L53.29,85.52L49.96,86.99L42.63,91.14L43.87,93.12L42.36,95.03L42.70,96.65L46.28,98.93L44.48,100.56L47.39,99.70L50.90,99.97L51.02,101.24L53.50,99.78L55.12,100.92L46.52,106.40L39.78,109.89L38.66,109.33L33.97,110.58L33.79,111.91L36.39,110.47L41.28,109.78L52.71,105.84L55.17,104.40L66.13,100.09L65.43,98.89L76.74,93.06L80.70,91.80L82.61,92.89L73.14,96.73L73.85,98.49L83.72,95.15L85.08,93.25L87.62,92.06L95.02,95.84L96.55,95.70L109.25,101.42L108.70,99.67L110.99,99.13L110.02,101.28L111.96,101.45L113.05,99.80L114.77,101.21L114.60,103.80L113.15,105.32L115.77,108.53L114.90,113.28L114.95,113.35Z " data-iso="USA" data-name="United States" data-pop="307212123.0"/><path d="M660.36,165.21L659.49,164.51L659.82,164.91L660.36,165.21Z M615.97,160.12L616.73,160.16L618.96,160.33L622.30,156.59L626.75,157.87L627.55,159.84L631.34,160.37L635.28,164.70L645.75,171.12L648.91,172.22L648.93,173.91L649.05,174.30L649.91,174.22L650.63,174.35L651.77,174.63L652.71,174.84L652.75,174.94L652.80,174.67L652.38,169.58L649.92,167.53L657.66,161.58L659.18,163.99L659.35,163.98L659.42,163.92L664.98,161.88L659.49,160.72L657.37,157.98L657.54,156.76L657.47,156.83L657.27,156.97L652.97,159.96L651.40,162.49L646.47,160.63L645.16,157.73L643.77,157.69L643.23,154.61L639.16,151.63L638.01,152.21L631.19,152.42L627.87,149.39L613.16,147.11L615.80,159.30L615.97,160.12Z " data-iso="UZB" data-name="Uzbekistan" data-pop="27606007.0"/><path d="M238.88,265.78L236.69,266.71L233.81,270.68L234.85,278.56L234.55,281.53L241.70,283.38L243.66,286.29L249.77,286.64L248.35,291.49L249.79,296.29L249.09,298.55L251.11,303.55L251.17,303.79L251.96,304.61L255.49,305.68L261.95,300.22L260.00,298.96L259.95,293.96L263.68,295.32L267.74,292.84L270.41,289.62L270.32,289.58L269.69,288.74L270.56,283.98L271.82,282.83L270.65,281.24L273.42,278.69L272.95,277.62L272.50,277.38L269.18,277.44L270.69,274.72L266.59,273.07L264.38,270.54L260.46,270.80L258.35,272.08L254.62,270.74L248.33,270.67L247.68,268.28L243.97,267.14L242.99,264.65L242.70,266.96L237.94,269.65L239.05,274.77L237.61,275.84L236.36,274.03L237.14,266.62L238.78,265.95L238.88,265.78Z " data-iso="VEN" data-name="Venezuela" data-pop="26814843.0"/><path d="M765.33,228.09L765.56,228.43L768.27,230.59L768.38,232.31L773.06,233.68L775.31,236.56L772.70,239.25L776.67,241.36L781.83,247.55L785.50,252.88L785.97,255.20L786.04,255.60L786.11,255.80L786.67,264.35L782.48,266.42L778.21,270.97L778.51,271.22L779.85,273.09L779.88,276.72L783.86,274.59L783.52,271.64L785.04,272.94L791.90,267.66L792.62,261.86L791.87,258.64L789.70,253.19L786.08,249.52L778.04,240.33L780.38,233.99L780.00,233.18L783.41,231.25L783.55,231.21L779.46,229.45L779.07,226.65L772.96,225.50L770.61,227.51L765.45,227.96L765.33,228.09Z " data-iso="VNM" data-name="Vietnam" data-pop="86967524.0"/><path d="M561.58,192.06L560.51,194.67L561.67,195.36L561.79,195.37L561.81,195.07L562.01,194.34L561.86,193.55L561.89,192.64L561.77,192.08L561.58,192.06Z " data-iso="PSE" data-name="Palestine" data-pop="2514845.0"/><path d="M615.26,240.23L614.55,240.34L606.46,241.71L602.17,246.25L598.49,246.55L588.97,246.09L587.99,249.63L588.18,250.85L587.78,253.71L588.68,254.77L592.36,263.11L598.08,260.29L601.29,259.75L606.37,257.95L607.45,256.49L616.86,252.20L617.77,249.28L619.27,248.64L618.24,246.42L618.01,246.31L615.42,240.58L615.26,240.23Z " data-iso="YEM" data-name="Yemen" data-pop="23822783.0"/><path d="M546.08,387.55L545.37,387.62L542.51,389.35L538.96,392.53L538.08,394.91L535.11,396.87L534.06,399.81L530.29,400.31L526.45,398.80L523.20,403.52L519.06,403.32L518.49,397.74L517.57,396.94L517.43,396.83L517.37,398.34L516.85,410.04L514.34,411.80L509.30,410.93L508.23,408.53L506.34,410.64L506.43,410.73L509.61,419.28L511.05,421.88L509.86,426.26L512.38,431.30L515.75,432.81L520.99,431.33L534.67,429.13L545.73,420.37L550.30,413.38L554.18,409.14L555.41,405.11L555.59,404.28L555.26,404.29L553.99,404.33L553.54,404.23L553.28,404.25L553.19,404.20L552.70,405.93L550.68,405.68L552.93,401.12L553.01,401.08L552.97,400.82L553.43,396.34L551.84,388.49L551.84,388.30L551.57,388.10L546.99,387.38L546.12,387.55L546.08,387.55Z M542.01,410.64L544.35,412.34L542.42,415.98L540.16,417.92L537.90,415.40L538.50,413.66L542.01,410.64Z " data-iso="ZAF" data-name="South Africa" data-pop="49052489.0"/><path d="M542.42,415.98L544.35,412.34L542.01,410.64L538.50,413.66L537.90,415.40L540.16,417.92L542.42,415.98Z " data-iso="LSO" data-name="Lesotho" data-pop="2130819.0"/><path d="M558.56,341.66L555.38,339.95L555.16,339.95L552.23,337.67L552.16,337.41L551.62,337.51L544.85,341.28L545.51,343.27L544.74,349.94L546.61,352.27L548.87,351.58L548.74,355.92L542.27,351.98L540.85,349.52L539.49,350.94L532.20,348.77L531.22,347.01L531.11,346.99L531.17,347.46L530.56,354.60L524.85,354.60L524.58,365.18L528.07,370.62L528.66,371.22L529.32,371.07L532.79,370.78L533.86,371.20L534.35,371.77L534.93,371.95L539.69,372.36L541.66,369.86L549.84,364.06L550.29,364.06L550.26,363.57L551.99,360.88L553.92,360.24L558.41,358.48L559.08,358.23L558.93,357.97L557.79,356.57L559.39,353.01L559.74,346.92L560.27,346.67L558.74,341.85L558.73,341.75L558.56,341.66Z " data-iso="ZMB" data-name="Zambia" data-pop="11862740.0"/><path d="M552.28,387.93L557.05,380.46L557.89,369.82L556.98,367.45L550.27,364.63L550.29,364.06L549.84,364.06L541.66,369.86L539.69,372.36L534.93,371.95L534.35,371.77L534.28,371.94L536.63,377.42L540.09,381.40L542.01,385.09L545.17,386.18L545.94,387.42L546.08,387.55L546.12,387.55L546.99,387.38L551.57,388.10L551.84,388.30L552.28,387.93Z " data-iso="ZWE" data-name="Zimbabwe" data-pop="11392629.0"/></g></svg> \ No newline at end of file
diff --git a/plugins/UserId/lang/id.json b/plugins/UserId/lang/id.json
index 67985af03f..4ebbca7d04 100644
--- a/plugins/UserId/lang/id.json
+++ b/plugins/UserId/lang/id.json
@@ -1,5 +1,7 @@
{
"UserId": {
- "UserReportTitle": "Pengguna"
+ "UserId": "IdPengguna",
+ "UserReportTitle": "Pengguna",
+ "PluginDescription": "Tampilkan laporan pengguna"
}
} \ No newline at end of file
diff --git a/plugins/UserId/lang/pl.json b/plugins/UserId/lang/pl.json
index 3372d2057a..47a07aa12d 100644
--- a/plugins/UserId/lang/pl.json
+++ b/plugins/UserId/lang/pl.json
@@ -1,5 +1,7 @@
{
"UserId": {
- "UserReportTitle": "Użytkownicy"
+ "UserId": "ID użytkownika",
+ "UserReportTitle": "Użytkownicy",
+ "PluginDescription": "Pokazuje raporty użytkownika"
}
} \ No newline at end of file
diff --git a/plugins/UserLanguage/UserLanguage.php b/plugins/UserLanguage/UserLanguage.php
index 3238ac11de..ea29eeb6d7 100644
--- a/plugins/UserLanguage/UserLanguage.php
+++ b/plugins/UserLanguage/UserLanguage.php
@@ -16,24 +16,6 @@ use Piwik\FrontController;
*/
class UserLanguage extends \Piwik\Plugin
{
- /**
- * @see Piwik\Plugin::registerEvents
- */
- public function registerEvents()
- {
- return array(
- 'Live.getAllVisitorDetails' => 'extendVisitorDetails',
- );
- }
-
- public function extendVisitorDetails(&$visitor, $details)
- {
- $instance = new Visitor($details);
-
- $visitor['languageCode'] = $instance->getLanguageCode();
- $visitor['language'] = $instance->getLanguage();
- }
-
public function postLoad()
{
Piwik::addAction('Template.footerUserCountry', array('Piwik\Plugins\UserLanguage\UserLanguage', 'footerUserCountry'));
diff --git a/plugins/UserLanguage/Visitor.php b/plugins/UserLanguage/VisitorDetails.php
index 26e8a36ec8..ba9122030f 100644
--- a/plugins/UserLanguage/Visitor.php
+++ b/plugins/UserLanguage/VisitorDetails.php
@@ -2,29 +2,30 @@
/**
* Piwik - free/libre analytics platform
*
- * @link http://piwik.org
+ * @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*
*/
namespace Piwik\Plugins\UserLanguage;
+use Piwik\Plugins\Live\VisitorDetailsAbstract;
+
require_once PIWIK_INCLUDE_PATH . '/plugins/UserLanguage/functions.php';
-class Visitor
+class VisitorDetails extends VisitorDetailsAbstract
{
- private $details = array();
-
- public function __construct($details)
+ public function extendVisitorDetails(&$visitor)
{
- $this->details = $details;
+ $visitor['languageCode'] = $this->getLanguageCode();
+ $visitor['language'] = $this->getLanguage();
}
- public function getLanguageCode()
+ protected function getLanguageCode()
{
return $this->details['location_browser_lang'];
}
- public function getLanguage()
+ protected function getLanguage()
{
return languageTranslate($this->details['location_browser_lang']);
}
diff --git a/plugins/UserLanguage/tests/System/expected/test___UserLanguage.getLanguageCode_day.xml b/plugins/UserLanguage/tests/System/expected/test___UserLanguage.getLanguageCode_day.xml
index 61ae72efc3..ad365afbfd 100644
--- a/plugins/UserLanguage/tests/System/expected/test___UserLanguage.getLanguageCode_day.xml
+++ b/plugins/UserLanguage/tests/System/expected/test___UserLanguage.getLanguageCode_day.xml
@@ -73,7 +73,7 @@
<segment>languageCode==zh-sg</segment>
</row>
<row>
- <label>Czech - Czech Republic (cs-cz)</label>
+ <label>Czech - Czechia (cs-cz)</label>
<nb_uniq_visitors>1</nb_uniq_visitors>
<nb_visits>1</nb_visits>
<nb_actions>1</nb_actions>
diff --git a/plugins/UsersManager/angularjs/give-user-view-access/give-user-view-access.controller.js b/plugins/UsersManager/angularjs/give-user-view-access/give-user-view-access.controller.js
index dd465557fa..fa2a01dcea 100644
--- a/plugins/UsersManager/angularjs/give-user-view-access/give-user-view-access.controller.js
+++ b/plugins/UsersManager/angularjs/give-user-view-access/give-user-view-access.controller.js
@@ -133,7 +133,15 @@
if (idSites === 'all') {
setViewAccessForUserToAllWebsitesIfUserConfirms(userLogin);
} else {
- setViewAccessForUserIfNotAlreadyHasAccess(userLogin, idSites);
+ function onValidate() {
+ setViewAccessForUserIfNotAlreadyHasAccess(userLogin, idSites);
+ }
+
+ if (userLogin == 'anonymous') {
+ piwikHelper.modalConfirm('#confirmAnonymousAccess', {yes: onValidate, no: hideLoading})
+ } else {
+ onValidate();
+ }
}
}
diff --git a/plugins/UsersManager/angularjs/manage-user-access/manage-user-access.controller.js b/plugins/UsersManager/angularjs/manage-user-access/manage-user-access.controller.js
index 4a2a91b09f..96b34ae726 100644
--- a/plugins/UsersManager/angularjs/manage-user-access/manage-user-access.controller.js
+++ b/plugins/UsersManager/angularjs/manage-user-access/manage-user-access.controller.js
@@ -104,19 +104,22 @@
}
}
- if (this.site.id == 'all') {
+ function onValidate() {
+ launchAjaxRequest(login, access).then(successCallback);
+ }
+
+ if (login == 'anonymous' && access == 'view') {
+ piwikHelper.modalConfirm('#confirmAnonymousAccess', {yes: onValidate})
+ }
+ else if (this.site.id == 'all') {
//ask confirmation
$('#confirm').find('.login').text(login);
- function onValidate() {
- launchAjaxRequest(login, access).then(successCallback);
- }
-
piwikHelper.modalConfirm('#confirm', {yes: onValidate})
}
else {
- launchAjaxRequest(login, access).then(successCallback);
+ onValidate();
}
}
}
diff --git a/plugins/UsersManager/lang/cs.json b/plugins/UsersManager/lang/cs.json
index 057e7e526c..6eee2078d1 100644
--- a/plugins/UsersManager/lang/cs.json
+++ b/plugins/UsersManager/lang/cs.json
@@ -3,6 +3,7 @@
"AddUser": "Přidat nového uživatele",
"Alias": "Alias",
"AllWebsites": "Všechny weby",
+ "AnonymousAccessConfirmation": "Chystáte anonymnímu uživateli poskytnout přístup k tomuto webu. Znamená to, že vaše analytické přehledy a informace o vašich návštěvnících budou veřejně viditelné i bez přihlášení. Opravdu chcete pokračovat?",
"AnonymousUser": "Anonymní uživatel",
"AnonymousUserHasViewAccess": "Poznámka: %1$s uživatel má právo k přístupu k %2$s",
"AnonymousUserHasViewAccess2": "Vaše analytická hlášení a informace o návštěvnících jsou veřejně dostupná.",
diff --git a/plugins/UsersManager/lang/de.json b/plugins/UsersManager/lang/de.json
index dc737d7c8c..a7fdffae71 100644
--- a/plugins/UsersManager/lang/de.json
+++ b/plugins/UsersManager/lang/de.json
@@ -61,11 +61,11 @@
"ReportToLoadByDefault": "Bericht, der standardmäßig geladen wird",
"SuperUserAccessManagement": "Hauptadministrator-Berechtigung verwalten",
"SuperUserAccessManagementGrantMore": "Hier können Sie anderen Benutzern von Piwik Hauptadministrator-Berechtigung geben. Bitte nutzen Sie diese Funktion mit Bedacht.",
- "SuperUserAccessManagementMainDescription": "Hauptadministratoren haben die höchsten Berechtigungen. Sie können alle administrativen Aufgaben ausführen. Dazu zählen das Hinzufügen neuer Websiten zur Überwachung, Hinzufügen von Benutzern, Ändern von Benutzerberechtigungen, Aktivieren und Deaktivieren von Plugins sowie das Installieren neuer Plugins vom Marketplace.",
+ "SuperUserAccessManagementMainDescription": "Hauptadministratoren haben die höchsten Berechtigungen. Sie können alle administrativen Aufgaben ausführen. Dazu zählen das Hinzufügen neuer Webseiten zur Überwachung, Hinzufügen von Benutzern, Ändern von Benutzerberechtigungen, Aktivieren und Deaktivieren von Plugins sowie das Installieren neuer Plugins vom Marketplace.",
"TheLoginScreen": "den Loginbildschirm",
"ThereAreCurrentlyNRegisteredUsers": "Es sind derzeit %s Benutzer registriert.",
"TokenAuth": "API Authentifizierungs-Token",
- "TokenRegenerateConfirm": "Wenn Sie den API Authentifizierungs-Token ändern wird der jetzige Token dieses Benutzers ungültig. Wenn der Benutzer eingeloggt ist wird sich dieser eventuell neu anmelden müssen. Wollen Sie tatsächlich fortfahren?",
+ "TokenRegenerateConfirm": "Wenn Sie den API Authentifizierungs-Token ändern, wird der jetzige Token dieses Benutzers ungültig. Wenn der Benutzer eingeloggt ist, wird sich dieser eventuell neu anmelden müssen. Wollen Sie tatsächlich fortfahren?",
"TokenRegenerateConfirmSelf": "Den API Authentifizierungs-Token zu ändern wird Ihren eigenen Token ungültig machen. Wenn Sie fortfahren, werden Sie sich neu anmelden müssen. Sind Sie sicher, dass Sie Ihren Authentifizierungs-Token ändern wollen?",
"TokenRegenerateLogoutWarning": "Wenn Sie Ihr Token neu generieren, werden Sie automatisch ausgeloggt und müssen sich neu anmelden.",
"TokenRegenerateTitle": "Neu generieren",
diff --git a/plugins/UsersManager/lang/el.json b/plugins/UsersManager/lang/el.json
index 31a79a3112..9aba1f5121 100644
--- a/plugins/UsersManager/lang/el.json
+++ b/plugins/UsersManager/lang/el.json
@@ -3,6 +3,7 @@
"AddUser": "Προσθήκη νέου χρήστη",
"Alias": "Ψευδώνυμο",
"AllWebsites": "Όλες οι ιστοσελίδες",
+ "AnonymousAccessConfirmation": "Πρόκειται να δώσετε το δικαίωμα 'ανάγνωσης' στους ανώνυμους χρήστες στον ιστοτόπο. Αυτό σημαίνει ότι οι αναφορές των αναλυτικών σας και οι πληροφορίες των επισκεπτών θα είναι διαθέσιμα από οποιονδήποτε, ακόμη και αν δεν έχει κάνει είσοδο. Είστε σίγουροι ότι θέλετε να συνεχίσετε",
"AnonymousUser": "Ανώνυμος χρήστης",
"AnonymousUserHasViewAccess": "Σημείωση: ο %1$s χρήστης έχει %2$s πρόσβαση στον ιστοτόπο.",
"AnonymousUserHasViewAccess2": "Οι αναφορές στατιστικών σας και οι πληροφορίες για τους επισκέπτες είναι δημόσια προσπελάσιμες.",
diff --git a/plugins/UsersManager/lang/en.json b/plugins/UsersManager/lang/en.json
index 976cc83afd..8479238953 100644
--- a/plugins/UsersManager/lang/en.json
+++ b/plugins/UsersManager/lang/en.json
@@ -3,6 +3,7 @@
"AddUser": "Add a new user",
"Alias": "Alias",
"AllWebsites": "All websites",
+ "AnonymousAccessConfirmation": "You are about to grant the anonymous user the 'view' access to this website. This means your analytics reports and your visitors information will be publicly viewable by anyone even without a login. Are you sure you want to proceed?",
"AnonymousUser": "Anonymous user",
"AnonymousUserHasViewAccess": "Note: the %1$s user has %2$s access to this website.",
"AnonymousUserHasViewAccess2": "Your analytics reports and your visitors information are publicly viewable.",
diff --git a/plugins/UsersManager/lang/fr.json b/plugins/UsersManager/lang/fr.json
index 9856a21375..48682b8a70 100644
--- a/plugins/UsersManager/lang/fr.json
+++ b/plugins/UsersManager/lang/fr.json
@@ -3,6 +3,7 @@
"AddUser": "Ajouter un nouvel utilisateur",
"Alias": "Alias",
"AllWebsites": "Tous les sites Internet",
+ "AnonymousAccessConfirmation": "Vous êtes sur le point de donner aux usagers anonymes la permission de \"lecture\" sure ce site. Cela signifie que les rapports d'analyse et les informations de vos visiteurs seront visible de manière publique par n'importe qui même sans identifiant. Etes vous sûr(e) de vouloir continuer?",
"AnonymousUser": "Utilisateur anonyme",
"AnonymousUserHasViewAccess": "Note : l'utilisateur %1$s a un accès en %2$s à ce site web.",
"AnonymousUserHasViewAccess2": "Vos rapports d'analyse et les informations de vos visiteurs sont visibles publiquement.",
diff --git a/plugins/UsersManager/lang/id.json b/plugins/UsersManager/lang/id.json
index a7f4940c2f..0d7033f733 100644
--- a/plugins/UsersManager/lang/id.json
+++ b/plugins/UsersManager/lang/id.json
@@ -3,6 +3,7 @@
"AddUser": "Tambah pengguna baru",
"Alias": "Julukan",
"AllWebsites": "Seluruh situs",
+ "AnonymousUser": "Pengguna anonim",
"AnonymousUserHasViewAccess": "Catatan: pengguna %1$s memiliki akses %2$s di situs ini.",
"AnonymousUserHasViewAccess2": "Laporan analitis dan informasi pengunjung Anda dapat dilihat secara terbuka.",
"ApplyToAllWebsites": "Terapkan ke seluruh situs",
@@ -17,12 +18,14 @@
"ExceptionEditAnonymous": "Pengguna anonim tidak dapat dihapus atau disunting. Piwik menggunakan pengguna ini untuk menjelaskan pengguna yang belum masuk. Misalnya, Anda dapat membuat statistik publik Anda dengan memberi hak `Tampil` untuk pengguna 'anonim'.",
"ExceptionEmailExists": "Pengguna dengan surel '%s' telah tersedia.",
"ExceptionInvalidEmail": "Surel tidak memiliki bentuk sahih.",
+ "ExceptionLoginExists": "Nama pengguna '%s' sudah ada.",
"ExceptionPasswordMD5HashExpected": "UsersManager.getTokenAuth membutuhkan sandi acak MD5 (32 karakter larik panjang). Silakan panggil fungsi md5() dalam sandi sebelum memanggil metode ini.",
"ExceptionUserDoesNotExist": "Pengguan '%s' tida ada.",
"ExcludeVisitsViaCookie": "Kecualikan kunjungan Anda menggunakan kuki",
"ForAnonymousUsersReportDateToLoadByDefault": "Tanggal laporan yang dimuat secara asali untuk pengguna anonim",
"IfYouWouldLikeToChangeThePasswordTypeANewOne": "Bila Anda ingin mengganti sandi, ketik sandi baru. Bila tidak, biarkan ini kosong.",
"InjectedHostCannotChangePwd": "Sekarang Anda berkunjung dengan inang yang tidak dikenal (%1$s). Anda tidak dapat mengubah sandi Anda hingga masalah ini diperbaiki.",
+ "LastSeen": "Terakhir dilihat",
"ManageAccess": "Atur akses",
"MenuAnonymousUserSettings": "Pengaturan pengguna anonim",
"MenuUsers": "Pengguna",
diff --git a/plugins/UsersManager/lang/ja.json b/plugins/UsersManager/lang/ja.json
index 8fd98c3891..fa973347c8 100644
--- a/plugins/UsersManager/lang/ja.json
+++ b/plugins/UsersManager/lang/ja.json
@@ -3,6 +3,7 @@
"AddUser": "新しいユーザーの追加",
"Alias": "エイリアス",
"AllWebsites": "全ウェブサイト",
+ "AnonymousAccessConfirmation": "匿名ユーザーにこのウェブサイトへの「閲覧」アクセスを許可しようとしています。 つまり、アナリティクスレポートや訪問者情報は、ログインしなくても誰でも公開することができます。 続行してもよろしいですか?",
"AnonymousUser": "匿名のユーザー",
"AnonymousUserHasViewAccess": "注) %1$s ユーザーはウェブサイトへの %2$s アクセス権を持っています。",
"AnonymousUserHasViewAccess2": "あなたの解析レポートとビジター情報は、誰でも閲覧可能です。",
@@ -36,6 +37,7 @@
"ExceptionNoValueForUsernameOrEmail": "ユーザー名またはメールアドレスを入力してください。",
"ExcludeVisitsViaCookie": "自分自身のビジットを除外(Cookie 使用)",
"ForAnonymousUsersReportDateToLoadByDefault": "anonymous ユーザー用にデフォルトで読み込むリポートの日付",
+ "GiveUserAccess": "ユーザー '%1$s' にウェブサイト %3$s の %2$s 権限を与えます",
"GiveViewAccess": "%1$s の閲覧アクセスを許可します",
"GiveViewAccessTitle": "既存のユーザーに %s のレポートを表示する権限を付与します",
"GiveViewAccessInstructions": "既存のユーザーに %s のアクセス権限を与えるには、既存のユーザーのユーザー名または電子メールアドレスを入力します",
diff --git a/plugins/UsersManager/lang/pl.json b/plugins/UsersManager/lang/pl.json
index c505f98709..52fe3b0cf3 100644
--- a/plugins/UsersManager/lang/pl.json
+++ b/plugins/UsersManager/lang/pl.json
@@ -3,11 +3,21 @@
"AddUser": "Dodaj nowego użytkownika",
"Alias": "Alias",
"AllWebsites": "Wszystkie strony",
- "ApplyToAllWebsites": "Zastosuj dla wszystkich stron",
+ "AnonymousAccessConfirmation": "Zamierzasz przyznać anonimowemu użytkownikowi dostęp 'podgląd' do tego serwisu. To oznacza, że raporty analityczne i informacje o odwiedzających będą publicznie dostępne dla każdego nawet bez loginu. Czy na pewno chcesz kontynuować?",
+ "AnonymousUser": "Użytkownik anonimowy",
+ "AnonymousUserHasViewAccess": "NOTKA: użytkownik %1$s posiada dostęp %2$s do tej strony.",
+ "AnonymousUserHasViewAccess2": "Twój raport analityczny i informacja o Twoich odwiedzających są publicznie widoczne.",
+ "ApplyToAllWebsites": "Wszystkie serwisy",
+ "ChangeAllConfirm": "Czy na pewno chcesz przydzielić użytkownikowi '%s' dostęp do wszystkich serwisów?",
"ClickHereToDeleteTheCookie": "kliknij tutaj by skasować ciasteczko cookie i umożliwić dla Piwik śledzenie twoich wizyt na stronie",
"ClickHereToSetTheCookieOnDomain": "Kliknij tutaj by ustawić ciasteczko cookie, które będzie wykluczało zliczanie twoich wizyt na stronie, gdy Piwik będzie je śledził na %s",
- "DeleteConfirm": "Czy masz pewność, że chcesz skasować konto użytkownika %s?",
- "Email": "e-mail",
+ "ConfirmGrantSuperUserAccess": "Czy na pewno chcesz przyznać użytkownikowi '%s' dostęp Super Użytkownika? OSTRZEŻENIE: użytkownik ten uzyska dostęp do wszystkich serwisów i będzie mógł wykonywać zadania administratorskie.",
+ "ConfirmProhibitMySuperUserAccess": "%s, czy na pewno chcesz usunąć przypisane do Twojego konta uprawnienia Super Użytkownika? Stracisz wszystkie uprawnienia i dostęp do wszystkich serwisów i zostaniesz wylogowany\/a z Piwik'a.",
+ "ConfirmProhibitOtherUsersSuperUserAccess": "Czy na pewno chcesz usunąć uprawnienia Super Użytkownika '%s'? Użytkownik ten straci wszystkie uprawnienia i dostęp do wszystkich serwisów. Upewnij się, że przydzielisz mu później dostęp do wybranych serwisów jeśli to konieczne.",
+ "DeleteConfirm": "Czy na pewno chcesz skasować konto użytkownika %s?",
+ "Email": "E-mail",
+ "EmailYourAdministrator": "%1$sNapisz o tej sytuacji swojemu adminsitratorowi%2$s.",
+ "EnterUsernameOrEmail": "Wpisz nazwę użytkownika lub adres e-mail",
"ExceptionAccessValues": "Parametr dostępu musi zawierać jedną z następujących wartości: [ %s ]",
"ExceptionAdminAnonymous": "Nie możesz przyznać dostępu 'admina' dla użytkownika 'anonymous'.",
"ExceptionDeleteDoesNotExist": "Konto takiego użytkownik '%s' nie istnieje, a więc nie może być skasowane.",
@@ -15,30 +25,56 @@
"ExceptionEditAnonymous": "Konto użytkownika anonimowego nie może być zmienione czy skasowane. Jest stosowane przez Piwik by zdefiniować użytkownika, który się nie loguje. Dla przykładu, możesz uczynić swoje statystyki powszechnie publiczne, udzielając prawa 'podglądu' dla 'anonimowego' użytkownika.",
"ExceptionEmailExists": "Użytkownik z takim adresem e-mail '%s' już istnieje.",
"ExceptionInvalidEmail": "Adres e-mail nie posiada poprawnego formatu.",
+ "ExceptionInvalidLoginFormat": "Nazwa użytkownika musi zawierać od %1$s do %2$s znaków, zawierać tylko litery, cyfry lub znaki '_', '-', '.', '@' lub '+'",
+ "ExceptionInvalidPassword": "Minimalna długość hasła to %1$s znaków.",
+ "ExceptionLoginExists": "Użytkownik '%s' już istnieje.",
"ExceptionPasswordMD5HashExpected": "Metoda UsersManager.getTokenAuth oczekuje hasła z hashem MD5 (łańcuch o długości 32 znaków). Wywołaj funkcję md5() z parametrem hasła, by wygenerować hash przed wywołaniem tej metody.",
+ "ExceptionRemoveSuperUserAccessOnlySuperUser": "Usunięcie uprawnień Super Użytkownika użytkownikowi '%s' nie jest możliwe.",
+ "ExceptionSuperUserAccess": "Ten użytkownik posiada uprawnienia Super Użytkownika, a z nimi dostęp i możliwość modyfikacji wszystkich serwisów w Piwik'u. Możesz usunąć uprawnienia Super Użytkownika z tego konta i spróbować ponownie.",
"ExceptionUserDoesNotExist": "Użytkownik '%s' nie istnieje.",
+ "ExceptionYouMustGrantSuperUserAccessFirst": "W systemie musi istnieć przynajmniej jedno konto z uprawnieniami Super Użytkownika. Proszę najpierw przyznaj dostęp Super Użytkownika innemu użytkownikowi.",
+ "ExceptionUserHasViewAccessAlready": "Ten użytkownik ma już dostęp do tego serwisu.",
+ "ExceptionNoValueForUsernameOrEmail": "Wpisz nazwę użytkownika lub adres e-mail.",
"ExcludeVisitsViaCookie": "Wyklucz swoje wizyty stosując ciasteczka cookie",
"ForAnonymousUsersReportDateToLoadByDefault": "Dla użytkowników anonimowych, data raportu jako domyślna do wczytania",
+ "GiveUserAccess": "Przyznaj użytkownikowi '%1$s' dostęp %2$s do %3$s.",
+ "GiveViewAccess": "Przyznaj podgląd użytkownikowi %1$s",
+ "GiveViewAccessTitle": "Przyznaj istniejącemu użytkownikowi dostęp do raportów dla %s",
+ "GiveViewAccessInstructions": "Aby przyznać istniejącemu użytkownikowi uprawnienia do %s wprowadź jego nazwę użytkownika lub adres e-mail.",
"IfYouWouldLikeToChangeThePasswordTypeANewOne": "Jeśli chcesz zmienić hasło, wpisz nowe. W innym przypadku pozostaw puste pole.",
+ "InjectedHostCannotChangePwd": "Odwiedzasz tą stronę z nieznanego adresu (%1$s). Nie możesz zmienić swojego hasła do czasu rozwiązania tego problemu.",
"LastSeen": "Ostatnio widziany",
+ "MainDescription": "Zdecyduj, którzy użytkownicy mają dostęp do Twoich serwisów. Możesz również przydzielić dostęp do wszystkich serwisów na raz wybierając \"Wszystkie serwisy\" w selektorze serwisów.",
"ManageAccess": "Zarządzanie uprawnieniami dostępu",
"MenuAnonymousUserSettings": "Konfiguracja użytkownika anonimowego",
"MenuUsers": "Użytkownicy",
"MenuUserSettings": "Konfiguracja użytkownika",
+ "MenuPersonal": "Osobiste",
+ "PersonalSettings": "Ustawienia osobiste",
"NoteNoAnonymousUserAccessSettingsWontBeUsed2": "Uwaga: Nie możesz zmienić konfiguracji tej sekcji ponieważ nie posiadasz żadnych stron, do których osoba anonimowa miałąby dostęp.",
"NoUsersExist": "Nie ma jeszcze żadnych użytkowników.",
+ "PluginDescription": "Zarządzanie Użytkownikami pozwala Ci dodawać nowych użytkowników, edytować obecnych i udzielać dostępu do przeglądania lub administrowania serwisami.",
"PrivAdmin": "Admin",
"PrivNone": "Brak dostępu",
"PrivView": "Widok",
+ "RemoveUserAccess": "Usuń dostęp użytkownikowi '%1$s' do %2$s.",
"ReportDateToLoadByDefault": "Data raportu jako domyślna do wczytania, dotyczy",
"ReportToLoadByDefault": "Raport jako domyślny do wczytania",
"SuperUserAccessManagement": "Zarządzaj dostępem Super Użytkowników",
+ "SuperUserAccessManagementGrantMore": "Możesz tu przydzielać dostęp Super Użytkownika innym użytkownikom Piwik'a. Proszę używaj z rozwagą.",
"SuperUserAccessManagementMainDescription": "Super Użytkownicy mają najwyższe uprawnienia w systemie. Mogą zarządzać wszystkimi zadaniami jak: dodawanie strony do monitoringu, użytkowników, aktywowaći deaktywować wtyczki, zmieniać uprawnienia innym użytkownikom, a także instalować nowe wtyczki z Marketu.",
"TheLoginScreen": "Ekran logowania",
"ThereAreCurrentlyNRegisteredUsers": "Obecnie znajduje się %s zarejestrowanych użytkowników.",
+ "TokenAuth": "Token autentykacji API",
+ "TokenRegenerateConfirm": "Zmiana Tokenu autentykacji API unieważni istniejące tokeny użytkowników. Użytkownicy zalogowani mogą musieć zalogować się ponownie. Czy na pewno chcesz kontynuować?",
+ "TokenRegenerateConfirmSelf": "Zmiana Tokenu autentykacji API unieważni Twój token. Możesz zostać zmuszony do ponownego zalogowania. Czy na pewno chcesz zmienić swój token?",
+ "TokenRegenerateLogoutWarning": "Podczas regeneracji Twojego tokenu zostaniesz wylogowany\/a i konieczne będzie ponowne logowanie.",
+ "TokenRegenerateTitle": "Regeneruj",
"TypeYourPasswordAgain": "Wpisz nowe hasło ponownie.",
"User": "Użytkownik",
- "UsersManagement": "Administracja użytkownikami",
+ "UserHasPermission": "%1$s obecnie ma dostęp %2$s do %3$s.",
+ "UserHasNoPermission": "%1$s obecnie ma %2$s do %3$s",
+ "UsersManagement": "Zarządzanie Użytkownikami",
"UsersManagementMainDescription": "Utworzenie nowych użytkowników lub aktualizacja istniejących. Ponadto możesz ustawić im poziom uprawnień.",
"WhenUsersAreNotLoggedInAndVisitPiwikTheyShouldAccess": "Kiedy użytkownicy nie są zalogowani i odwiedzają Piwik, powinny wyświetlić się",
"YourUsernameCannotBeChanged": "Twoja nazwa użytkownika nie może być zmieniona.",
diff --git a/plugins/UsersManager/lang/ru.json b/plugins/UsersManager/lang/ru.json
index 173c2d5926..ce8e3a1e30 100644
--- a/plugins/UsersManager/lang/ru.json
+++ b/plugins/UsersManager/lang/ru.json
@@ -21,11 +21,13 @@
"ExceptionEditAnonymous": "Анонимный пользователь не может быть удален. Он необходим системе Веб-аналитики для идентификации пользователей, которые не вошли в систему. Допустим, вы можете сделать статистику публичной, предоставляя право 'Просмотр' анонимному пользователю.",
"ExceptionEmailExists": "Пользователь с Email '%s' уже существует.",
"ExceptionInvalidEmail": "Email неправильного формата",
+ "ExceptionLoginExists": "Имя пользователя '%s' уже существует.",
"ExceptionPasswordMD5HashExpected": "UsersManager.getTokenAuth ожидает MD5-хэшированный пароль (строка в 32 символа). Пожалуйста, вызовите функцию md5() к паролю перед вызовом этого метода.",
"ExceptionRemoveSuperUserAccessOnlySuperUser": "Удаление прав суперпользователя у пользователя «%s» не представляется возможным.",
"ExceptionSuperUserAccess": "Этот пользователь уже имеет статус суперпользователя и разрешение на изменение всех веб-сайты в Piwik. Вы можете удалить права суперпользователя у этого пользователя, и попробовать снова.",
"ExceptionUserDoesNotExist": "Пользователь '%s' не существует.",
"ExceptionYouMustGrantSuperUserAccessFirst": "Должен быть по крайней мере один суперпользователь. Пожалуйста, сделайте сначала другого суперпользователя.",
+ "ExceptionNoValueForUsernameOrEmail": "Пожалуйста, введите имя пользователя или E-mail адрес.",
"ExcludeVisitsViaCookie": "Cookie исключения из статистики",
"ForAnonymousUsersReportDateToLoadByDefault": "Отчет для анонимных пользователей отображается за",
"IfYouWouldLikeToChangeThePasswordTypeANewOne": "Если вы хотите сменить пароль, введите новый. Иначе оставьте поле пустым.",
diff --git a/plugins/UsersManager/lang/zh-cn.json b/plugins/UsersManager/lang/zh-cn.json
index fd4afc23f2..aaec388235 100644
--- a/plugins/UsersManager/lang/zh-cn.json
+++ b/plugins/UsersManager/lang/zh-cn.json
@@ -27,6 +27,7 @@
"MenuAnonymousUserSettings": "匿名用户参数",
"MenuUsers": "用户管理",
"MenuUserSettings": "用户参数",
+ "PersonalSettings": "个人设置",
"NoteNoAnonymousUserAccessSettingsWontBeUsed2": "说明: 不能在这里修改设置,因为没有任何公开的网站。",
"PrivAdmin": "管理员权限",
"PrivNone": "无查看权限",
@@ -35,6 +36,9 @@
"ReportToLoadByDefault": "默认加载的报表",
"TheLoginScreen": "登录界面",
"ThereAreCurrentlyNRegisteredUsers": "现在已经有 %s 位注册用户。",
+ "TokenAuth": "API 验证 Token",
+ "TokenRegenerateLogoutWarning": "当您重新生成您的Token时,您将被注销并需要重新登录。",
+ "TokenRegenerateTitle": "重新生成",
"TypeYourPasswordAgain": "再输入一次新的密码。",
"User": "用户",
"UsersManagement": "用户管理",
diff --git a/plugins/UsersManager/lang/zh-tw.json b/plugins/UsersManager/lang/zh-tw.json
index 1f0dcf80f6..e034513e78 100644
--- a/plugins/UsersManager/lang/zh-tw.json
+++ b/plugins/UsersManager/lang/zh-tw.json
@@ -3,6 +3,7 @@
"AddUser": "新增使用者",
"Alias": "別名",
"AllWebsites": "所有網站",
+ "AnonymousAccessConfirmation": "你將要授予匿名使用者這個網站的「檢視」權限。這代表你的分析報表和你的訪客資訊將會被公開,就算沒登入也可查看。你確定要繼續?",
"AnonymousUser": "匿名使用者",
"AnonymousUserHasViewAccess": "注意:使用者 %1$s 有權限 %2$s 存取這個網站。",
"AnonymousUserHasViewAccess2": "你的分析報表跟你的訪客資訊是可以公開查看的。",
diff --git a/plugins/UsersManager/templates/index.twig b/plugins/UsersManager/templates/index.twig
index cad99a0436..902b95e24d 100644
--- a/plugins/UsersManager/templates/index.twig
+++ b/plugins/UsersManager/templates/index.twig
@@ -162,6 +162,12 @@
<input role="no" type="button" value="{{ 'General_No'|translate }}"/>
</div>
+<div class="ui-confirm" id="confirmAnonymousAccess">
+ <h2>{{ 'UsersManager_AnonymousAccessConfirmation'|translate }}</h2>
+ <input role="yes" type="button" value="{{ 'General_Yes'|translate }}"/>
+ <input role="no" type="button" value="{{ 'General_No'|translate }}"/>
+</div>
+
{% if userIsSuperUser %}
<div piwik-content-block content-title="{{ 'UsersManager_UsersManagement'|translate|e('html_attr') }}">
<div class="ui-confirm" id="confirmUserRemove">
diff --git a/plugins/VisitFrequency/lang/pl.json b/plugins/VisitFrequency/lang/pl.json
index 81f9bfec0a..a9cb274afa 100644
--- a/plugins/VisitFrequency/lang/pl.json
+++ b/plugins/VisitFrequency/lang/pl.json
@@ -2,12 +2,23 @@
"VisitFrequency": {
"ColumnActionsByReturningVisits": "Aktywność w trakcie powtórnych odwiedzin",
"ColumnAverageVisitDurationForReturningVisitors": "Średni czas odwiedzin dla powtórnych wizyt (w sekundach)",
- "ColumnAvgActionsPerReturningVisit": "Średnia ilość działań przypadająca na powtórne odwiedziny",
+ "ColumnAvgActionsPerReturningVisit": "Średnia aktywność w takcie powtórnych odwiedzin",
"ColumnBounceCountForReturningVisits": "Ilość rezygnacji dla powtórnych odwiedzin",
"ColumnBounceRateForReturningVisits": "Współczynnik rezygnacji dla powtórnych odwiedzin",
+ "ColumnMaxActionsInReturningVisit": "Maksymalna aktywność na pojedynczą powtórną wizytę",
+ "ColumnNbReturningVisitsConverted": "Liczba konwersji dla powtórnych wizyt",
"ColumnReturningVisits": "Powtórne odwiedziny",
"ColumnSumVisitLengthReturning": "Całkowity czas spędzony przez powracających użytkowników (w sekundach)",
+ "ColumnUniqueReturningVisitors": "Unikalni powracający odwiedzający",
"ColumnReturningUsers": "Powracający Użytkownicy",
+ "PluginDescription": "Zestawienie wskaźników dotyczących Twoich nowych i powracających odwiedzających.",
+ "ReturnActions": "akcje powracających użytkowników",
+ "ReturnAverageVisitDuration": "średni czas powracających użytkowników na stronie",
+ "ReturnAvgActions": "akcji na ponowną wizytę",
+ "ReturnBounceRate": "porzucone ponowne odwiedziny (opuszczenie serwisu po pojedynczej stronie)",
+ "ReturningVisitDocumentation": "Ponowna wizyta (w odróżnieniu od nowej) to wizyta użytkownika, który odwiedził już Twój serwis przynajmniej jeden raz.",
+ "ReturningVisitsDocumentation": "To jest przegląd powracających odwiedzających.",
+ "ReturnVisits": "ponownych wizyt",
"SubmenuFrequency": "Częstotliwość",
"WidgetGraphReturning": "Wykres powtórnych odwiedzin",
"WidgetOverview": "Częstotliwość przeglądania"
diff --git a/plugins/VisitFrequency/lang/zh-cn.json b/plugins/VisitFrequency/lang/zh-cn.json
index afa2dcbfb9..488efc6da4 100644
--- a/plugins/VisitFrequency/lang/zh-cn.json
+++ b/plugins/VisitFrequency/lang/zh-cn.json
@@ -12,9 +12,9 @@
"ColumnUniqueReturningVisitors": "独立老访客数",
"ColumnReturningUsers": "老访客",
"ReturningVisitDocumentation": "老访客 (相对于新访客) 指至少访问过这个网站一次的访客。",
- "ReturningVisitsDocumentation": "这是老访客的总表。",
+ "ReturningVisitsDocumentation": "这是老访客的概览。",
"SubmenuFrequency": "频率",
"WidgetGraphReturning": "老访客趋势",
- "WidgetOverview": "频率总表"
+ "WidgetOverview": "频率概览"
}
} \ No newline at end of file
diff --git a/plugins/VisitTime/VisitTime.php b/plugins/VisitTime/VisitTime.php
index 5b1c256ce7..39ac47d536 100644
--- a/plugins/VisitTime/VisitTime.php
+++ b/plugins/VisitTime/VisitTime.php
@@ -11,20 +11,4 @@ namespace Piwik\Plugins\VisitTime;
// empty plugin definition, otherwise plugin won't be installed during test run
class VisitTime extends \Piwik\Plugin
{
- /**
- * @see Piwik\Plugin::registerEvents
- */
- public function registerEvents()
- {
- return array(
- 'Live.getAllVisitorDetails' => 'extendVisitorDetails',
- );
- }
-
- public function extendVisitorDetails(&$visitor, $details)
- {
- $visitor['visitLocalTime'] = $details['visitor_localtime'];
- $visitor['visitLocalHour'] = date('G', strtotime('2012-12-21 ' . $details['visitor_localtime']));
- }
-
}
diff --git a/plugins/VisitTime/VisitorDetails.php b/plugins/VisitTime/VisitorDetails.php
new file mode 100644
index 0000000000..eb40686832
--- /dev/null
+++ b/plugins/VisitTime/VisitorDetails.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * Piwik - free/libre analytics platform
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+namespace Piwik\Plugins\VisitTime;
+
+use Piwik\Plugins\Live\VisitorDetailsAbstract;
+
+class VisitorDetails extends VisitorDetailsAbstract
+{
+ public function extendVisitorDetails(&$visitor)
+ {
+ $visitor['visitLocalTime'] = $this->details['visitor_localtime'];
+ $visitor['visitLocalHour'] = date('G', strtotime('2012-12-21 ' . $this->details['visitor_localtime']));
+ }
+} \ No newline at end of file
diff --git a/plugins/VisitTime/functions.php b/plugins/VisitTime/functions.php
index 5a9162c6ed..14625ceebf 100644
--- a/plugins/VisitTime/functions.php
+++ b/plugins/VisitTime/functions.php
@@ -9,11 +9,20 @@
namespace Piwik\Plugins\VisitTime;
+use Piwik\Container\StaticContainer;
+use Piwik\Date;
use Piwik\Piwik;
function getTimeLabel($label)
{
- return sprintf(Piwik::translate('Intl_NHoursShort'), $label);
+ $date = Date::factory(mktime($label));
+ $dateTimeProvider = StaticContainer::get('Piwik\Intl\Data\Provider\DateTimeFormatProvider');
+
+ if ($dateTimeProvider->uses12HourClock()) {
+ return $date->getLocalized(Piwik::translate('Intl_Format_Hour_12'));
+ }
+
+ return $date->getLocalized(Piwik::translate('Intl_Format_Hour_24'));
}
/**
diff --git a/plugins/VisitTime/lang/pl.json b/plugins/VisitTime/lang/pl.json
index fe764cd36b..0a5fff371e 100644
--- a/plugins/VisitTime/lang/pl.json
+++ b/plugins/VisitTime/lang/pl.json
@@ -5,13 +5,14 @@
"DayOfWeek": "Dzień tygodnia",
"LocalTime": "Odwiedziny według lokalnego czasu",
"NHour": "%sh",
+ "PluginDescription": "Raport czasu lokalnego użytkownika i czasu serwera, kiedy użytkownik odwiedził Twój serwis lub aplikację.",
"ServerTime": "Odwiedziny według czasu serwera",
- "SubmenuTimes": "Czas",
+ "SubmenuTimes": "Czasy odwiedzin",
"VisitsByDayOfWeek": "Odwiedziny w poszczególnych dniach tygodnia",
- "WidgetByDayOfWeekDocumentation": "Ten wykres pokazuje liczbe odwiedzin twojej stony otrzymanych każdego dnia tygodnia",
+ "WidgetByDayOfWeekDocumentation": "Ten wykres pokazuje liczbę odwiedzin Twojej strony w ciągu każdego dnia tygodnia",
"WidgetLocalTime": "Odwiedziny według lokalnego czasu",
- "WidgetLocalTimeDocumentation": "Ten wykres pokazuje jaki czas był %1$s w strefie czasowej odwiedzających %2$s podczas ich wizyty.",
+ "WidgetLocalTimeDocumentation": "Ten wykres pokazuje godzinę w %1$s strefie czasowej odwiedzających %2$s podczas ich wizyty.",
"WidgetServerTime": "Odwiedziny według czasu serwera",
- "WidgetServerTimeDocumentation": "Ten wykres pokazuje jaki czas był w %1$s strefie czasowej serwera %2$s podczas odwiedzin."
+ "WidgetServerTimeDocumentation": "Ten wykres pokazuje godzinę w %1$s strefie czasowej serwera %2$s podczas odwiedzin."
}
} \ No newline at end of file
diff --git a/plugins/VisitorGenerator b/plugins/VisitorGenerator
-Subproject 7153a8e4e00a45b8ed190c7aa21ce368cfeb74e
+Subproject 66e4eb36143a75a1ef6e8c04bb397d2243fe7cd
diff --git a/plugins/VisitorInterest/VisitorDetails.php b/plugins/VisitorInterest/VisitorDetails.php
new file mode 100644
index 0000000000..62f0b99f3e
--- /dev/null
+++ b/plugins/VisitorInterest/VisitorDetails.php
@@ -0,0 +1,19 @@
+<?php
+/**
+ * Piwik - free/libre analytics platform
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+namespace Piwik\Plugins\VisitorInterest;
+
+use Piwik\Plugins\Live\VisitorDetailsAbstract;
+
+class VisitorDetails extends VisitorDetailsAbstract
+{
+ public function extendVisitorDetails(&$visitor)
+ {
+ $visitor['daysSinceLastVisit'] = $this->details['visitor_days_since_last'];
+ }
+} \ No newline at end of file
diff --git a/plugins/VisitorInterest/VisitorInterest.php b/plugins/VisitorInterest/VisitorInterest.php
index f135e12923..1a624d4cdb 100644
--- a/plugins/VisitorInterest/VisitorInterest.php
+++ b/plugins/VisitorInterest/VisitorInterest.php
@@ -17,17 +17,6 @@ use Piwik\Plugins\CoreVisualizations\Visualizations\Graph;
class VisitorInterest extends \Piwik\Plugin
{
-
- /**
- * @see Piwik\Plugin::registerEvents
- */
- public function registerEvents()
- {
- return array(
- 'Live.getAllVisitorDetails' => 'extendVisitorDetails',
- );
- }
-
function postLoad()
{
Piwik::addAction('Template.footerVisitsFrequency', array('Piwik\Plugins\VisitorInterest\VisitorInterest', 'footerVisitsFrequency'));
@@ -37,10 +26,4 @@ class VisitorInterest extends \Piwik\Plugin
{
$out .= FrontController::getInstance()->fetchDispatch('VisitorInterest', 'index');
}
-
- public function extendVisitorDetails(&$visitor, $details)
- {
- $visitor['daysSinceLastVisit'] = $details['visitor_days_since_last'];
- }
-
}
diff --git a/plugins/VisitorInterest/lang/pl.json b/plugins/VisitorInterest/lang/pl.json
index decc0676d5..996c2fe459 100644
--- a/plugins/VisitorInterest/lang/pl.json
+++ b/plugins/VisitorInterest/lang/pl.json
@@ -2,18 +2,23 @@
"VisitorInterest": {
"BetweenXYMinutes": "%1$s-%2$s min",
"BetweenXYSeconds": "%1$s-%2$ss",
- "ColumnPagesPerVisit": "Ilość stron w czasie wizyty",
+ "ColumnPagesPerVisit": "Liczba stron w czasie wizyty",
"ColumnVisitDuration": "Czas trwania odwiedzin",
"Engagement": "Zaangażowanie",
"NPages": "%s stron",
"OnePage": "1 strona",
+ "PluginDescription": "Raporty zaangażowania użytkowników: liczba odwiedzonych stron, czas trwania odwiedzin w serwisie, dni od ostatniej wizyty i więcej.",
"VisitNum": "Liczba wizyt",
"VisitsByDaysSinceLast": "Odwiedziny wg. dni od ostatnich odwiedzin",
- "visitsByVisitCount": "Odwiedziy wg. liczby odwiedzin",
- "VisitsPerDuration": "Odwiedzin w czasie trwania wizyty",
- "VisitsPerNbOfPages": "Liczba wizyt na stronach",
+ "visitsByVisitCount": "Odwiedziny wg. liczby odwiedzin",
+ "VisitsPerDuration": "Odwiedziny do czasu trwania wizyty",
+ "VisitsPerNbOfPages": "Odwiedziny do liczby odwiedzonych stron",
"WidgetLengths": "Czas wizyt",
+ "WidgetLengthsDocumentation": "Ten raport zawiera zestawienia liczby wizyt o określonym czasie trwania. Wstępnie raport ten prezentowany jest w postaci chmury tagów, a najpopularniejsze czasy odwiedzin wyróżnia większa czcionka.",
"WidgetPages": "Stron w czasie wizyty",
- "WidgetVisitsByDaysSinceLast": "Odwiedziny w poszczególnych dniach od ostatniej wizyty"
+ "WidgetPagesDocumentation": "Ten raport zawiera zestawienie liczby odwiedzin, podczas których odwiedzono określoną liczbę stron. Wstępnie raport ten ma postać chmury tagów, a najpopularniejsze wartości wyróżnia większa czcionka.",
+ "WidgetVisitsByDaysSinceLast": "Odwiedziny do liczby dni od ostatniej wizyty",
+ "WidgetVisitsByDaysSinceLastDocumentation": "Raport ten prezentuje liczbę ponownych wizyt wykonanych przez użytkowników po upływie liczby dni.",
+ "WidgetVisitsByNumDocumentation": "Raport prezentuje liczbę wizyt, które złożone były n-ty raz, tzn. odwiedzających, którzy odwiedzili Twój serwis po raz n-ty."
}
} \ No newline at end of file
diff --git a/plugins/VisitsSummary/lang/id.json b/plugins/VisitsSummary/lang/id.json
index 5946669d44..4441f4aa96 100644
--- a/plugins/VisitsSummary/lang/id.json
+++ b/plugins/VisitsSummary/lang/id.json
@@ -1,8 +1,17 @@
{
"VisitsSummary": {
+ "AverageGenerationTime": "Rata-rata waktu generasi",
+ "AverageVisitDuration": "rata-rata durasi kunjungan",
"GenerateQueries": "%s kueri dijalankan",
"GenerateTime": "%s detik untuk menghasilkan halaman",
+ "MaxNbActions": "aksi maksimal dalam satu kunjungan",
"NbActionsDescription": "%s tindakan (menampilkan halaman, mengunduh, dan tautan keluar)",
+ "NbDownloadsDescription": "unduhan",
+ "NbKeywordsDescription": "katakunci unik",
+ "NbUniqueDownloadsDescription": "unduhan unik",
+ "NbUniqueVisitors": "pengunjung unik",
+ "NbUsersDescription": "pengguna",
+ "NbVisitsDescription": "kunjungan",
"VisitsSummary": "Rangkuman Kunjungan",
"VisitsSummaryDocumentation": "Ini merupakan iktisar perkembangan kunjungan.",
"WidgetLastVisits": "Grafik kunjungan terakhir",
diff --git a/plugins/VisitsSummary/lang/nb.json b/plugins/VisitsSummary/lang/nb.json
index f63676cd67..b043145d3b 100644
--- a/plugins/VisitsSummary/lang/nb.json
+++ b/plugins/VisitsSummary/lang/nb.json
@@ -8,6 +8,7 @@
"NbPageviewsDescription": "sidevisninger",
"NbUniqueDownloadsDescription": "unike nedlastinger",
"NbUniquePageviewsDescription": "unike sidevisninger",
+ "NbUniqueVisitors": "unike besøkende",
"NbUsersDescription": "brukere",
"PluginDescription": "Rapporterer generelle analysetall: besøk, unike besøkere, antall handlinger, sprettfrekvens, etc.",
"VisitsSummary": "Besøksammendrag",
diff --git a/plugins/VisitsSummary/lang/pl.json b/plugins/VisitsSummary/lang/pl.json
index 394950bb34..3824b218b9 100644
--- a/plugins/VisitsSummary/lang/pl.json
+++ b/plugins/VisitsSummary/lang/pl.json
@@ -1,9 +1,27 @@
{
"VisitsSummary": {
+ "AverageGenerationTime": "średni czas generowania",
+ "AverageVisitDuration": "średni długość wizyty",
"GenerateQueries": "%s wykonanych zapytań",
"GenerateTime": "%s sekund do wygenerowania strony",
- "NbActionsDescription": "%s działań (przeglądania stron, pobrań i linków kolejnych)",
+ "MaxNbActions": "max akcji w czasie jednej wizyty",
+ "NbActionsDescription": "%s działań",
+ "NbActionsPerVisit": "akcji (wyświetlenia stron, pobrań, wyszukiwań zewnętrznych i wewnętrznych linków) podczas wizyty",
+ "NbDownloadsDescription": "pobrań",
+ "NbKeywordsDescription": "unikalnych słów kluczowych",
+ "NbOutlinksDescription": "linków zewnętrznych",
+ "NbPageviewsDescription": "wyświetleń stron",
+ "NbSearchesDescription": "suma wyszukiwań w Twoim portalu",
+ "NbUniqueDownloadsDescription": "unikalnych pobrań",
+ "NbUniqueOutlinksDescription": "unikalnych linków zewnętrznych",
+ "NbUniquePageviewsDescription": "unikalnych wyświetleń stron",
+ "NbUniqueVisitors": "unikalnych odwiedzających",
+ "NbUsersDescription": "użytkowników",
+ "NbVisitsDescription": "wizyt",
+ "NbVisitsBounced": "wizyt porzuconych (opuścili portal po jednej stronie)",
+ "PluginDescription": "Raport z podstawowymi wskaźnikami analitycznymi: odwiedziny, unikalni odwiedzający, liczba akcji, współczynnik porzuceń, itd.",
"VisitsSummary": "Podsumowanie odwiedzin",
+ "VisitsSummaryDocumentation": "To jest przegląd ewolucji wizyt.",
"WidgetLastVisits": "Wykres z ostatnich odwiedzin",
"WidgetOverviewGraph": "Podgląd z wykresem",
"WidgetVisits": "Podgląd odwiedzin"
diff --git a/plugins/VisitsSummary/lang/sv.json b/plugins/VisitsSummary/lang/sv.json
index e4d98e464c..4265f91e9c 100644
--- a/plugins/VisitsSummary/lang/sv.json
+++ b/plugins/VisitsSummary/lang/sv.json
@@ -1,8 +1,24 @@
{
"VisitsSummary": {
+ "AverageGenerationTime": "genomsnittlig tid för skapandet",
+ "AverageVisitDuration": "genomsnittlig besökslängd",
"GenerateQueries": "%s frågor exekverade",
"GenerateTime": "Det tog %s sekunder att generera denna sida.",
+ "MaxNbActions": "max antal aktiviteter i ett besök",
"NbActionsDescription": "%s händelser (sidvisningar, nedladdningar och outlinks)",
+ "NbActionsPerVisit": "aktiviteter (sidvisningar, nedladdningar, utlänkar och interna sökningar) ber besök",
+ "NbDownloadsDescription": "nedladdningar",
+ "NbKeywordsDescription": "unika nyckelord",
+ "NbOutlinksDescription": "utlänkar",
+ "NbPageviewsDescription": "sidvisningar",
+ "NbSearchesDescription": "totalt antal sökningar på din webbplats",
+ "NbUniqueDownloadsDescription": "unika nedladdningar",
+ "NbUniqueOutlinksDescription": "unika utlänkar",
+ "NbUniquePageviewsDescription": "unika sidvisningar",
+ "NbUniqueVisitors": "unika besökare",
+ "NbUsersDescription": "användare",
+ "NbVisitsDescription": "besök",
+ "NbVisitsBounced": "besök som studsat (lämnade efter en sidvisning)",
"PluginDescription": "Rapporter för allmän analytics-statistik: besök, unika besökare, antal slutförda mål, avvisningsfrekvens , etc.",
"VisitsSummary": "Besökssummering",
"VisitsSummaryDocumentation": "Detta är en översikt av besöksutvecklingen.",
diff --git a/plugins/VisitsSummary/lang/zh-cn.json b/plugins/VisitsSummary/lang/zh-cn.json
index c79b828cbf..9fec3fa4d0 100644
--- a/plugins/VisitsSummary/lang/zh-cn.json
+++ b/plugins/VisitsSummary/lang/zh-cn.json
@@ -5,9 +5,9 @@
"NbActionsDescription": "%s 次活动",
"PluginDescription": "报告一般分析指标:参观,独立访问者,动作次数,跳出率等。",
"VisitsSummary": "访客总表",
- "VisitsSummaryDocumentation": "这是访客趋势总表。",
+ "VisitsSummaryDocumentation": "这是访客趋势概览。",
"WidgetLastVisits": "访客趋势图",
- "WidgetOverviewGraph": "趋势图总表",
- "WidgetVisits": "访客总表"
+ "WidgetOverviewGraph": "访客概览(带图)",
+ "WidgetVisits": "访客概览"
}
} \ No newline at end of file
diff --git a/plugins/WebsiteMeasurable/lang/id.json b/plugins/WebsiteMeasurable/lang/id.json
new file mode 100644
index 0000000000..5a78e50d4a
--- /dev/null
+++ b/plugins/WebsiteMeasurable/lang/id.json
@@ -0,0 +1,6 @@
+{
+ "WebsiteMeasurable": {
+ "Website": "Website",
+ "Websites": "Websites"
+ }
+} \ No newline at end of file
diff --git a/plugins/WebsiteMeasurable/lang/pl.json b/plugins/WebsiteMeasurable/lang/pl.json
new file mode 100644
index 0000000000..6783095313
--- /dev/null
+++ b/plugins/WebsiteMeasurable/lang/pl.json
@@ -0,0 +1,7 @@
+{
+ "WebsiteMeasurable": {
+ "Website": "Portal",
+ "Websites": "Portale",
+ "WebsiteDescription": "Portal składa się ze stron internetowych przeważnie serwowanych w ramach pojedynczej domeny."
+ }
+} \ No newline at end of file
diff --git a/plugins/WebsiteMeasurable/lang/zh-cn.json b/plugins/WebsiteMeasurable/lang/zh-cn.json
new file mode 100644
index 0000000000..c88c1fce2f
--- /dev/null
+++ b/plugins/WebsiteMeasurable/lang/zh-cn.json
@@ -0,0 +1,7 @@
+{
+ "WebsiteMeasurable": {
+ "Website": "网站",
+ "Websites": "网站",
+ "WebsiteDescription": "网站是有独立域名的页面集合。"
+ }
+} \ No newline at end of file
diff --git a/plugins/Widgetize/lang/pl.json b/plugins/Widgetize/lang/pl.json
index 9dab74a92b..998c8b378e 100644
--- a/plugins/Widgetize/lang/pl.json
+++ b/plugins/Widgetize/lang/pl.json
@@ -1,5 +1,7 @@
{
"Widgetize": {
- "OpenInNewWindow": "Otwórz w nowym oknie"
+ "OpenInNewWindow": "Otwórz w nowym oknie",
+ "PluginDescription": "Wyświetl dowolny raport Piwik na swojej stronie lub w aplikacji przy pomocy prostego Zagnieżdżonego HTML'a.",
+ "TopLinkTooltip": "Eksportuj raporty Piwik jako widżety i zagnieżdżaj Pulpit w swoich aplikacjach jako iframe."
}
} \ No newline at end of file
diff --git a/tests/PHPUnit/Fixtures/ManyVisitsWithGeoIP.php b/tests/PHPUnit/Fixtures/ManyVisitsWithGeoIP.php
index 7faeaee97a..efba2d8c83 100644
--- a/tests/PHPUnit/Fixtures/ManyVisitsWithGeoIP.php
+++ b/tests/PHPUnit/Fixtures/ManyVisitsWithGeoIP.php
@@ -116,9 +116,13 @@ class ManyVisitsWithGeoIP extends Fixture
$t->setTokenAuth(self::getTokenAuth());
for ($i = 0; $i != $visitorCount; ++$i) {
$t->setVisitorId( substr(md5($i + $calledCounter * 1000), 0, $t::LENGTH_VISITOR_ID));
+
+ $userAgent = null;
if ($setIp) {
+ $userAgent = current($this->userAgents);
+
$t->setIp(current($this->ips));
- $t->setUserAgent(current($this->userAgents));
+ $t->setUserAgent($userAgent);
next($this->userAgents);
next($this->ips);
} else {
@@ -140,6 +144,10 @@ class ManyVisitsWithGeoIP extends Fixture
}
// second visit
+ if ($userAgent) {
+ $t->setUserAgent($userAgent); // unset in doTrack...
+ }
+
$date = $date->addHour(1);
$t->setForceVisitDateTime($date->getDatetime());
$t->setUrl("http://piwik.net/space/quest/iv");
@@ -157,6 +165,10 @@ class ManyVisitsWithGeoIP extends Fixture
self::checkResponse($r);
}
+ if ($userAgent) {
+ $t->setUserAgent($userAgent); // unset in doTrack...
+ }
+
// Track site search (for AutoSuggestAPI test)
// Only for half visitors so they don't all have a "site search" as last action and some of them have a standard page view as last action
$date = $date->addHour(0.1);
diff --git a/tests/PHPUnit/Fixtures/OneVisitorTwoVisits.php b/tests/PHPUnit/Fixtures/OneVisitorTwoVisits.php
index c190cb2f77..5061a84cce 100644
--- a/tests/PHPUnit/Fixtures/OneVisitorTwoVisits.php
+++ b/tests/PHPUnit/Fixtures/OneVisitorTwoVisits.php
@@ -208,4 +208,12 @@ class OneVisitorTwoVisits extends Fixture
// -
// End of second visit
}
+
+ /**
+ * @return string
+ */
+ public static function getValueForHideColumns()
+ {
+ return 'nb_users,sum_bandwidth,nb_hits_with_bandwidth,min_bandwidth,max_bandwidth';
+ }
} \ No newline at end of file
diff --git a/tests/PHPUnit/Fixtures/SomeVisitsCustomVariablesCampaignsNotHeuristics.php b/tests/PHPUnit/Fixtures/SomeVisitsCustomVariablesCampaignsNotHeuristics.php
index 03cb78f9da..e4e711cd73 100644
--- a/tests/PHPUnit/Fixtures/SomeVisitsCustomVariablesCampaignsNotHeuristics.php
+++ b/tests/PHPUnit/Fixtures/SomeVisitsCustomVariablesCampaignsNotHeuristics.php
@@ -194,7 +194,7 @@ class SomeVisitsCustomVariablesCampaignsNotHeuristics extends Fixture
$t5->setUrl('http://asteroidm.com');
// all params suppplied, one that differs from url referrer
$t5->setAttributionInfo(json_encode(array('Recruiting Drive', 'am i a mutant?',
- Date::factory($dateTime)->addHour(1)->getDatetime(), 'http://sentinelwatch.org')));
+ urlencode(Date::factory($dateTime)->addHour(1)->getDatetime()), 'http://sentinelwatch.org')));
self::checkResponse($t5->doTrackPageView('Fighting Back'));
$t5->setForceVisitDateTime(Date::factory($dateTime)->addHour(2)->getDatetime());
@@ -202,7 +202,7 @@ class SomeVisitsCustomVariablesCampaignsNotHeuristics extends Fixture
$t5->setUrl('http://mutantrights.org');
// params supplied, for existing campaign
$t5->setAttributionInfo(json_encode(array('GA Campaign', 'some keyword',
- Date::factory($dateTime)->addHour(2)->getDatetime())));
+ urlencode(Date::factory($dateTime)->addHour(2)->getDatetime()))));
self::checkResponse($t5->doTrackPageView('Mutant Registration'));
}
diff --git a/tests/PHPUnit/Fixtures/ThreeVisitsWithCustomEvents.php b/tests/PHPUnit/Fixtures/ThreeVisitsWithCustomEvents.php
index 3471c3b3e7..874a31d16f 100644
--- a/tests/PHPUnit/Fixtures/ThreeVisitsWithCustomEvents.php
+++ b/tests/PHPUnit/Fixtures/ThreeVisitsWithCustomEvents.php
@@ -61,6 +61,7 @@ class ThreeVisitsWithCustomEvents extends Fixture
$this->dateTime = Date::factory($this->dateTime)->addHour(0.5);
$vis2 = self::getTracker($this->idSite, $this->dateTime, $useDefault = true, $uselocal);
+ $vis2->setUrl('http://example.com/piwik/');
$vis2->setIp('111.1.1.1');
$vis2->setPlugins($flash = false, $java = false, $director = true);
@@ -70,6 +71,7 @@ class ThreeVisitsWithCustomEvents extends Fixture
$this->dateTime = Date::factory($this->dateTime)->addDay(1);
$vis3 = self::getTracker($this->idSite, $this->dateTime, $useDefault = true, $uselocal);
+ $vis3->setUrl('http://example.com/piwik/');
$vis3->setIp('111.1.1.2');
$vis3->setPlugins($flash = false, $java = false, $director = true);
diff --git a/tests/PHPUnit/Framework/TestRequest/Response.php b/tests/PHPUnit/Framework/TestRequest/Response.php
index 56d4c7080d..dd7b13baaf 100644
--- a/tests/PHPUnit/Framework/TestRequest/Response.php
+++ b/tests/PHPUnit/Framework/TestRequest/Response.php
@@ -90,6 +90,7 @@ class Response
private function normalizeApiResponse($apiResponse)
{
$apiResponse = $this->removeSubtableIdsFromXml($apiResponse);
+ $apiResponse = $this->removePageViewIds($apiResponse);
if ($this->shouldDeleteLiveIds()) {
$apiResponse = $this->removeAllIdsFromXml($apiResponse);
@@ -131,6 +132,15 @@ class Response
return str_replace('&amp;#039;', "'", $apiResponse);
}
+ private function removePageViewIds($apiResponse)
+ {
+ $toRemove = array(
+ 'idpageview',
+ );
+
+ return $this->removeXmlFields($apiResponse, $toRemove);
+ }
+
private function removeAllIdsFromXml($apiResponse)
{
$toRemove = array(
@@ -213,6 +223,7 @@ class Response
$oldInput = $input;
$input = preg_replace('/(<' . $xmlElement . '>.+?<\/' . $xmlElement . '>)/', '', $input);
+ $input = str_replace('<' . $xmlElement . ' />', '', $input);
// check we didn't delete the whole string
if ($testNotSmallAfter && $input != $oldInput) {
diff --git a/tests/PHPUnit/Integration/ArchiveTest.php b/tests/PHPUnit/Integration/ArchiveTest.php
index df8ef4021c..20c12cf1be 100644
--- a/tests/PHPUnit/Integration/ArchiveTest.php
+++ b/tests/PHPUnit/Integration/ArchiveTest.php
@@ -25,6 +25,7 @@ use Piwik\Plugins\UserLanguage;
use Piwik\Segment;
use Piwik\Site;
use Piwik\Tests\Fixtures\OneVisitorTwoVisits;
+use Piwik\Tests\Framework\Fixture;
use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
use Piwik\Period\Factory as PeriodFactory;
use Piwik\Archive\Chunk;
@@ -35,7 +36,14 @@ class Archive extends PiwikArchive
{
return parent::get($archiveNames, $archiveDataType, $idSubtable);
}
+}
+class CustomArchiveQueryFactory extends PiwikArchive\ArchiveQueryFactory
+{
+ public function newInstance(\Piwik\Archive\Parameters $params, $forceIndexedBySite, $forceIndexedByDate)
+ {
+ return new Archive($params, $forceIndexedBySite, $forceIndexedByDate);
+ }
}
/**
@@ -250,7 +258,7 @@ class ArchiveTest extends IntegrationTestCase
$this->assertEquals('UserLanguage_LanguageCode fr', $userLanguageReport->getFirstRow()->getColumn('label'));
$this->assertEquals('UserLanguage_LanguageCode fr', $userLanguageReport->getLastRow()->getColumn('label'));
- $parameters = new Parameters(new Site(1), $period, new Segment('', ''));
+ $parameters = new Parameters(new Site(1), $period, new Segment('', []));
$parameters->setRequestedPlugin('UserLanguage');
$result = ArchiveSelector::getArchiveIdAndVisits($parameters, $period->getDateStart()->getDateStartUTC());
@@ -261,12 +269,11 @@ class ArchiveTest extends IntegrationTestCase
}
// track a new visits now
- $fixture = self::$fixture;
- $t = $fixture::getTracker(1, $date, $defaultInit = true);
+ $t = Fixture::getTracker(1, $date, $defaultInit = true);
$t->setForceVisitDateTime(Date::factory($date)->addHour(1)->getDatetime());
- $t->setUrl('http://example.org/index.htm');
+ $t->setUrl('http://site.com/index.htm');
$t->setBrowserLanguage('pt-br');
- $fixture::checkResponse($t->doTrackPageView('my site'));
+ Fixture::checkResponse($t->doTrackPageView('my_site'));
$archiveWriter = new ArchiveWriter($parameters, !!$idArchive);
$archiveWriter->idArchive = $idArchive;
@@ -387,10 +394,21 @@ class ArchiveTest extends IntegrationTestCase
return $archive->getNumeric('nb_visits');
}
+ /**
+ * @return Archive
+ */
private function getArchive($period, $day = '2010-03-04,2010-03-07')
{
+ /** @noinspection PhpIncompatibleReturnTypeInspection */
return Archive::build(self::$fixture->idSite, $period, $day);
}
+
+ public function provideContainerConfig()
+ {
+ return [
+ PiwikArchive\ArchiveQueryFactory::class => \DI\object(CustomArchiveQueryFactory::class),
+ ];
+ }
}
ArchiveTest::$fixture = new OneVisitorTwoVisits(); \ No newline at end of file
diff --git a/tests/PHPUnit/Integration/CronArchiveTest.php b/tests/PHPUnit/Integration/CronArchiveTest.php
index 682425f1e3..e8cfbc45fe 100644
--- a/tests/PHPUnit/Integration/CronArchiveTest.php
+++ b/tests/PHPUnit/Integration/CronArchiveTest.php
@@ -93,7 +93,7 @@ NOTES
- If you execute this script at least once per hour (or more often) in a crontab, you may disable 'Browser trigger archiving' in Piwik UI > Settings > General Settings.
See the doc at: http://piwik.org/docs/setup-auto-archiving/
- Reports for today will be processed at most every %s seconds. You can change this value in Piwik UI > Settings > General Settings.
-- Reports for the current week/month/year will be refreshed at most every %s seconds.
+- Reports for the current week/month/year will be requested at most every %s seconds.
- Will process all 1 websites
- Limiting segment archiving to following segments:
* actions>=2;browserCode=FF
diff --git a/tests/PHPUnit/Integration/Http/AdditionalHeaders.php b/tests/PHPUnit/Integration/Http/AdditionalHeaders.php
new file mode 100644
index 0000000000..88dd746048
--- /dev/null
+++ b/tests/PHPUnit/Integration/Http/AdditionalHeaders.php
@@ -0,0 +1,7 @@
+<?php
+
+// used in integration tests to see if additional header works.
+
+echo $_SERVER['HTTP_CUSTOMHEADER'];
+
+exit;
diff --git a/tests/PHPUnit/Integration/HttpTest.php b/tests/PHPUnit/Integration/HttpTest.php
index 1fdec7b6ed..db4e370862 100644
--- a/tests/PHPUnit/Integration/HttpTest.php
+++ b/tests/PHPUnit/Integration/HttpTest.php
@@ -229,6 +229,33 @@ class HttpTest extends \PHPUnit_Framework_TestCase
/**
* @dataProvider getMethodsToTest
*/
+ public function testHttpCustomHeaders($method)
+ {
+ $result = Http::sendHttpRequestBy(
+ $method,
+ Fixture::getRootUrl() . 'tests/PHPUnit/Integration/Http/AdditionalHeaders.php',
+ 30,
+ $userAgent = null,
+ $destinationPath = null,
+ $file = null,
+ $followDepth = 0,
+ $acceptLanguage = false,
+ $acceptInvalidSslCertificate = false,
+ $byteRange = false,
+ $getExtendedInfo = false,
+ $httpMethod = 'POST',
+ $httpUsername = '',
+ $httpPassword = '',
+ array(),
+ array('CustomHeader: customdata')
+ );
+
+ $this->assertEquals('customdata', $result);
+ }
+
+ /**
+ * @dataProvider getMethodsToTest
+ */
public function testHttpsWorksWithValidCertificate($method)
{
$result = Http::sendHttpRequestBy($method, 'https://builds.piwik.org/LATEST', 10);
@@ -262,7 +289,7 @@ class HttpTest extends \PHPUnit_Framework_TestCase
public function testSocketHttpsWorksWithValidCertificate()
{
- $result = Http::sendHttpRequestBy('socket', 'https://divezone.net/', 10);
+ $result = Http::sendHttpRequestBy('socket', 'https://piwik.org/', 10);
$this->assertNotEmpty($result);
}
}
diff --git a/tests/PHPUnit/Integration/Period/FactoryTest.php b/tests/PHPUnit/Integration/Period/FactoryTest.php
new file mode 100644
index 0000000000..3c36416c9d
--- /dev/null
+++ b/tests/PHPUnit/Integration/Period/FactoryTest.php
@@ -0,0 +1,128 @@
+<?php
+/**
+ * Piwik - free/libre analytics platform
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+
+namespace Piwik\Tests\Integration\Period;
+
+use Piwik\Config;
+use Piwik\Period;
+use Piwik\Period\Day;
+use Piwik\Period\Month;
+use Piwik\Period\Range;
+use Piwik\Period\Week;
+use Piwik\Period\Year;
+use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
+
+class TestPeriod
+{
+ // empty
+}
+
+class TestPeriodFactory extends Period\Factory
+{
+ /**
+ * @var Config
+ */
+ private $config;
+
+ // use constructor to make sure period factories are injected
+ public function __construct(Config $config)
+ {
+ $this->config = $config;
+ }
+
+ public function shouldHandle($strPeriod, $strDate)
+ {
+ return $strPeriod == 'customperiod';
+ }
+
+ public function make($strPeriod, $date, $timezone)
+ {
+ return new TestPeriod();
+ }
+}
+
+class MockPluginManager extends \Piwik\Plugin\Manager
+{
+ public function findComponents($componentName, $expectedSubclass)
+ {
+ if ($componentName == 'PeriodFactory') {
+ return [
+ TestPeriodFactory::class,
+ ];
+ }
+
+ return parent::findComponents($componentName, $expectedSubclass);
+ }
+}
+
+class FactoryTest extends IntegrationTestCase
+{
+ /**
+ * @dataProvider getBuildTestData
+ */
+ public function test_build_CreatesCorrectPeriodInstances($strPeriod, $date, $timezone, $expectedPeriodClass,
+ $expectedRangeString)
+ {
+ $period = Period\Factory::build($strPeriod, $date, $timezone);
+ $this->assertInstanceOf($expectedPeriodClass, $period);
+ $this->assertEquals($expectedRangeString, $period->getRangeString());
+ }
+
+ public function getBuildTestData()
+ {
+ return [
+ ['day', '2015-01-01', 'UTC', Day::class, '2015-01-01,2015-01-01'],
+ ['week', '2015-01-01', 'UTC', Week::class, '2014-12-29,2015-01-04'],
+ ['month', '2015-01-01', 'UTC', Month::class, '2015-01-01,2015-01-31'],
+ ['year', '2015-01-01', 'UTC', Year::class, '2015-01-01,2015-12-31'],
+
+ ['range', '2015-01-01,2015-01-10', 'UTC', Range::class, '2015-01-01,2015-01-10'],
+ ['range', '2015-01-01,2015-01-10', 'Antarctica/Casey', Range::class, '2015-01-01,2015-01-10'],
+
+ // multiple periods
+ ['day', '2015-01-01,2015-01-10', 'UTC', Range::class, '2015-01-01,2015-01-10'],
+ ['week', '2015-01-01,2015-01-10', 'UTC', Range::class, '2014-12-29,2015-01-11'],
+ ['month', '2015-01-01,2015-02-10', 'UTC', Range::class, '2015-01-01,2015-02-28'],
+ ['year', '2015-01-01,2016-01-10', 'UTC', Range::class, '2015-01-01,2016-12-31'],
+ ];
+ }
+
+ public function test_build_CreatesCustomPeriodInstances()
+ {
+ Config::getInstance()->General['enabled_periods_API'] .= ',customperiod';
+
+ $period = Period\Factory::build('customperiod', '2015-01-01');
+ $this->assertInstanceOf(TestPeriod::class, $period);
+ }
+
+ /**
+ * @expectedException \Exception
+ * @expectedExceptionMessage General_ExceptionInvalidPeriod
+ */
+ public function test_build_ThrowsIfPeriodIsUnrecognized()
+ {
+ Period\Factory::build('garbageperiod', '2015-01-01');
+ }
+
+ /**
+ * @expectedException \Exception
+ * @expectedExceptionMessage General_ExceptionInvalidPeriod
+ */
+ public function test_build_ThrowsIfPeriodIsNotEnabledForApi()
+ {
+ Config::getInstance()->General['enabled_periods_API'] = 'day';
+ Period\Factory::build('week', '2015-01-01');
+ }
+
+ public function provideContainerConfig()
+ {
+ return [
+ \Piwik\Plugin\Manager::class => \DI\object(MockPluginManager::class),
+ ];
+ }
+}
diff --git a/tests/PHPUnit/Integration/ReleaseCheckListTest.php b/tests/PHPUnit/Integration/ReleaseCheckListTest.php
index 04fdfc0925..d3e764746a 100644
--- a/tests/PHPUnit/Integration/ReleaseCheckListTest.php
+++ b/tests/PHPUnit/Integration/ReleaseCheckListTest.php
@@ -417,7 +417,6 @@ class ReleaseCheckListTest extends \PHPUnit_Framework_TestCase
strpos($file, '/tests/') !== false ||
strpos($file, '/lang/') !== false ||
strpos($file, 'yuicompressor') !== false ||
- strpos($file, '/libs/') !== false ||
(strpos($file, '/vendor') !== false && strpos($file, '/vendor/piwik') === false) ||
strpos($file, '/tmp/') !== false ||
strpos($file, '/phantomjs/') !== false
diff --git a/tests/PHPUnit/System/AutoSuggestAPITest.php b/tests/PHPUnit/System/AutoSuggestAPITest.php
index 014625b689..8a3900cf8d 100644
--- a/tests/PHPUnit/System/AutoSuggestAPITest.php
+++ b/tests/PHPUnit/System/AutoSuggestAPITest.php
@@ -54,7 +54,7 @@ class AutoSuggestAPITest extends SystemTestCase
$apiForTesting[] = $this->getApiForTestingForSegment($idSite, $segment);
}
- if (self::isMysqli() || self::isTravisCI()) {
+ if (self::isMysqli()) {
// Skip the test on Mysqli as it fails due to rounding Float errors on latitude/longitude
// then the test started failing after bc19503 and I cannot understand why
echo "Skipped test \n";
@@ -121,10 +121,6 @@ class AutoSuggestAPITest extends SystemTestCase
$apiForTesting = array();
foreach ($segments as $segment) {
- if(self::isTravisCI() && $segment == 'deviceType') {
- // test started failing after bc19503 and I cannot understand why
- continue;
- }
$apiForTesting[] = array('VisitsSummary.get',
array('idSite' => self::$fixture->idSite,
'date' => date("Y-m-d", strtotime(self::$fixture->dateTime)) . ',today',
diff --git a/tests/PHPUnit/System/BackwardsCompatibility1XTest.php b/tests/PHPUnit/System/BackwardsCompatibility1XTest.php
index 73bdb32cdc..582e1707d1 100644
--- a/tests/PHPUnit/System/BackwardsCompatibility1XTest.php
+++ b/tests/PHPUnit/System/BackwardsCompatibility1XTest.php
@@ -142,6 +142,10 @@ class BackwardsCompatibility1XTest extends SystemTestCase
// we test VisitFrequency explicitly
'VisitFrequency.get',
+ // do not test as label formats have changed
+ 'VisitTime.getVisitInformationPerLocalTime',
+ 'VisitTime.getVisitInformationPerServerTime',
+
// the Action.getPageTitles test fails for unknown reason, so skipping it
// eg. https://travis-ci.org/piwik/piwik/jobs/24449365
'Action.getPageTitles',
diff --git a/tests/PHPUnit/System/CliMultiTest.php b/tests/PHPUnit/System/CliMultiTest.php
index 23ea2e68a3..f5d0fa85b0 100644
--- a/tests/PHPUnit/System/CliMultiTest.php
+++ b/tests/PHPUnit/System/CliMultiTest.php
@@ -144,7 +144,7 @@ class CliMultiTest extends SystemTestCase
{
$this->cliMulti->runAsSuperUser();
$response = $this->cliMulti->request(array($this->completeUrl('')));
- $this->assertStringStartsWith('Error in Piwik: Error: no website was found', $response[0]);
+ $this->assertContains('Error: no website was found', $response[0]);
}
public function test_request_shouldBeAbleToRenderARegularPageInPiwik()
diff --git a/tests/PHPUnit/System/CsvExportTest.php b/tests/PHPUnit/System/CsvExportTest.php
index 5c251186c6..5ec237df2f 100755
--- a/tests/PHPUnit/System/CsvExportTest.php
+++ b/tests/PHPUnit/System/CsvExportTest.php
@@ -59,7 +59,7 @@ class CsvExportTest extends SystemTestCase
'hideColumns' => 'serverDate,actionDetails,serverTimestamp,serverTimePretty,'
. 'serverDatePretty,serverDatePrettyFirstAction,serverTimePrettyFirstAction,'
. 'goalTimePretty,serverTimePretty,visitorId,visitServerHour,date,'
- . 'prettyDate,serverDateTimePrettyFirstAction'
+ . 'prettyDate,serverDateTimePrettyFirstAction,totalEcommerceRevenue,totalAbandonedCartsRevenue'
)))
);
}
diff --git a/tests/PHPUnit/System/DuplicateActionsTest.php b/tests/PHPUnit/System/DuplicateActionsTest.php
index 2ffd14be76..f8ab781455 100644
--- a/tests/PHPUnit/System/DuplicateActionsTest.php
+++ b/tests/PHPUnit/System/DuplicateActionsTest.php
@@ -64,7 +64,7 @@ class DuplicateActionsTest extends SystemTestCase
'date' => $dateTime,
'compareAgainst' => 'OneVisitorTwoVisits',
'otherRequestParameters' => array(
- 'hideColumns' => OneVisitorTwoVisitsTest::getValueForHideColumns(),
+ 'hideColumns' => OneVisitorTwoVisits::getValueForHideColumns(),
)
))
);
diff --git a/tests/PHPUnit/System/OneVisitorTwoVisitsTest.php b/tests/PHPUnit/System/OneVisitorTwoVisitsTest.php
index b6a0d0c201..2098ccce14 100755
--- a/tests/PHPUnit/System/OneVisitorTwoVisitsTest.php
+++ b/tests/PHPUnit/System/OneVisitorTwoVisitsTest.php
@@ -33,14 +33,6 @@ class OneVisitorTwoVisitsTest extends SystemTestCase
*/
public static $fixture = null; // initialized below class
- /**
- * @return string
- */
- public static function getValueForHideColumns()
- {
- return 'nb_users,sum_bandwidth,nb_hits_with_bandwidth,min_bandwidth,max_bandwidth';
- }
-
public function setUp()
{
Proxy::getInstance()->setHideIgnoredFunctions(false);
@@ -90,7 +82,7 @@ class OneVisitorTwoVisitsTest extends SystemTestCase
array('all', array('idSite' => $idSite,
'date' => $dateTime,
'otherRequestParameters' => array(
- 'hideColumns' => self::getValueForHideColumns(),
+ 'hideColumns' => OneVisitorTwoVisits::getValueForHideColumns(),
)
)),
diff --git a/tests/PHPUnit/System/RawLogDaoTest.php b/tests/PHPUnit/System/RawLogDaoTest.php
index e0210467e2..7b75cb72e2 100644
--- a/tests/PHPUnit/System/RawLogDaoTest.php
+++ b/tests/PHPUnit/System/RawLogDaoTest.php
@@ -12,6 +12,24 @@ use Piwik\DataAccess\RawLogDao;
use Piwik\Tests\Framework\Fixture;
use Piwik\Tests\Framework\TestCase\SystemTestCase;
+class CustomRawLogDao extends RawLogDao {
+
+ public function getTableIdColumns()
+ {
+ return parent::getTableIdColumns();
+ }
+
+ public function getIdFieldForLogTable($logTable)
+ {
+ return parent::getIdFieldForLogTable($logTable);
+ }
+
+ public function getMaxIdsInLogTables()
+ {
+ return parent::getMaxIdsInLogTables();
+ }
+}
+
/**
* @group Core
* @group RawLogDao
@@ -20,7 +38,7 @@ use Piwik\Tests\Framework\TestCase\SystemTestCase;
class RawLogDaoTest extends SystemTestCase
{
/**
- * @var RawLogDao
+ * @var CustomRawLogDao
*/
private $dao;
@@ -34,7 +52,7 @@ class RawLogDaoTest extends SystemTestCase
Fixture::createWebsite('2010-00-00 00:00:00');
}
- $this->dao = new RawLogDao();
+ $this->dao = new CustomRawLogDao();
}
/**
@@ -48,6 +66,46 @@ class RawLogDaoTest extends SystemTestCase
$this->assertSame($expectedHasVisits, $hasVisits);
}
+ public function test_getIdColumns()
+ {
+ $expected = array(
+ 'log_action' => 'idaction',
+ 'log_conversion_item' => 'idvisit',
+ 'log_conversion' => 'idvisit',
+ 'log_link_visit_action' => 'idlink_va',
+ 'log_visit' => 'idvisit',
+ );
+ $this->assertSame($expected, $this->dao->getTableIdColumns());
+ }
+
+ public function test_getIdFieldForLogTable()
+ {
+ $this->assertSame('idaction', $this->dao->getIdFieldForLogTable('log_action'));
+ $this->assertSame('idlink_va', $this->dao->getIdFieldForLogTable('log_link_visit_action'));
+ $this->assertSame('idvisit', $this->dao->getIdFieldForLogTable('log_visit'));
+ }
+
+ /**
+ * @expectedException \Exception
+ * @expectedExceptionMessage Unknown log table 'log_foobarbaz'
+ */
+ public function test_getIdFieldForLogTable_whenUnknownTable()
+ {
+ $this->dao->getIdFieldForLogTable('log_foobarbaz');
+ }
+
+ public function test_getMaxIdsInLogTables()
+ {
+ $expected = array(
+ 'log_action' => '2',
+ 'log_conversion_item' => null,
+ 'log_conversion' => null,
+ 'log_link_visit_action' => '11',
+ 'log_visit' => '1',
+ );
+ $this->assertEquals($expected, $this->dao->getMaxIdsInLogTables());
+ }
+
public function getVisitsInTimeFrameData()
{
return array(
diff --git a/tests/PHPUnit/System/TrackerResponseTest.php b/tests/PHPUnit/System/TrackerResponseTest.php
index 05f6b749c3..98cd27baa0 100755
--- a/tests/PHPUnit/System/TrackerResponseTest.php
+++ b/tests/PHPUnit/System/TrackerResponseTest.php
@@ -114,4 +114,14 @@ class TrackerResponseTest extends SystemTestCase
$this->assertHttpResponseText($expected, $url);
}
+
+ public function test_response_ShouldReturnPiwikMessageWithHttp503_InCaseOfMaintenanceMode()
+ {
+ $url = $this->tracker->getUrlTrackPageView('Test');
+ $this->assertResponseCode(200, $url);
+
+ $url = $url . "&forceEnableTrackerMaintenanceMode=1";
+ $this->assertResponseCode(503, $url);
+ }
+
}
diff --git a/tests/PHPUnit/System/expected/test_ArchiveCronTest_archive_php_cron_output.txt b/tests/PHPUnit/System/expected/test_ArchiveCronTest_archive_php_cron_output.txt
index 95b637e5ce..39ac07c52a 100644
--- a/tests/PHPUnit/System/expected/test_ArchiveCronTest_archive_php_cron_output.txt
+++ b/tests/PHPUnit/System/expected/test_ArchiveCronTest_archive_php_cron_output.txt
@@ -18,7 +18,7 @@ INFO [2017-01-22 00:03:37] NOTES
INFO [2017-01-22 00:03:37] - If you execute this script at least once per hour (or more often) in a crontab, you may disable 'Browser trigger archiving' in Piwik UI > Settings > General Settings.
INFO [2017-01-22 00:03:37] See the doc at: http://piwik.org/docs/setup-auto-archiving/
INFO [2017-01-22 00:03:37] - Reports for today will be processed at most every 150 seconds. You can change this value in Piwik UI > Settings > General Settings.
-INFO [2017-01-22 00:03:37] - Reports for the current week/month/year will be refreshed at most every 3600 seconds.
+INFO [2017-01-22 00:03:37] - Reports for the current week/month/year will be requested at most every 3600 seconds.
INFO [2017-01-22 00:03:37] - Will invalidate archived reports for 2012-08-09 for following websites ids: 1
INFO [2017-01-22 00:03:37] - Will invalidate archived reports for 2012-08-10 for following websites ids: 1
INFO [2017-01-22 00:03:37] - Will invalidate archived reports for 2012-08-11 for following websites ids: 1
diff --git a/tests/PHPUnit/System/expected/test_ArchiveCronTest_preArchivedSegment_noOptions__Live.getLastVisitsDetails_day.xml b/tests/PHPUnit/System/expected/test_ArchiveCronTest_preArchivedSegment_noOptions__Live.getLastVisitsDetails_day.xml
index 15e90fc5dc..a089d95913 100644
--- a/tests/PHPUnit/System/expected/test_ArchiveCronTest_preArchivedSegment_noOptions__Live.getLastVisitsDetails_day.xml
+++ b/tests/PHPUnit/System/expected/test_ArchiveCronTest_preArchivedSegment_noOptions__Live.getLastVisitsDetails_day.xml
@@ -23,16 +23,19 @@
<pageTitle />
<pageIdAction>9</pageIdAction>
+
<pageId>9</pageId>
+ <bandwidth>3574</bandwidth>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>3.5 K</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -42,13 +45,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -84,6 +92,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/CH.png</browserIcon>
<browserCode>CH</browserCode>
<browserVersion>19.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Unknown</continent>
<continentCode>unk</continentCode>
@@ -102,17 +116,6 @@
<resolution>unknown</resolution>
<plugins />
<pluginsIcons />
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -137,16 +140,19 @@
<pageTitle />
<pageIdAction>8</pageIdAction>
+
<pageId>8</pageId>
+ <bandwidth>3574</bandwidth>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>3.5 K</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -156,13 +162,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -198,6 +209,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>6.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Unknown</continent>
<continentCode>unk</continentCode>
@@ -216,17 +233,6 @@
<resolution>unknown</resolution>
<plugins />
<pluginsIcons />
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -251,16 +257,19 @@
<pageTitle />
<pageIdAction>7</pageIdAction>
+
<pageId>7</pageId>
+ <bandwidth>3574</bandwidth>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>3.5 K</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -270,13 +279,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -312,6 +326,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/CH.png</browserIcon>
<browserCode>CH</browserCode>
<browserVersion>19.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>North America</continent>
<continentCode>amn</continentCode>
@@ -330,17 +350,6 @@
<resolution>unknown</resolution>
<plugins />
<pluginsIcons />
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -365,16 +374,19 @@
<pageTitle />
<pageIdAction>6</pageIdAction>
+
<pageId>6</pageId>
+ <bandwidth>3574</bandwidth>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>3.5 K</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -384,13 +396,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -421,11 +438,17 @@
<operatingSystemVersion />
<browserFamily>WebKit</browserFamily>
<browserFamilyDescription>WebKit (Safari, Chrome)</browserFamilyDescription>
- <browser>Epiphany 2.30</browser>
- <browserName>Epiphany</browserName>
+ <browser>GNOME Web 2.30</browser>
+ <browserName>GNOME Web</browserName>
<browserIcon>plugins/Morpheus/icons/dist/browsers/EP.png</browserIcon>
<browserCode>EP</browserCode>
<browserVersion>2.30</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>North America</continent>
<continentCode>amn</continentCode>
@@ -444,17 +467,6 @@
<resolution>unknown</resolution>
<plugins />
<pluginsIcons />
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -479,16 +491,19 @@
<pageTitle />
<pageIdAction>5</pageIdAction>
+
<pageId>5</pageId>
+ <bandwidth>3574</bandwidth>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>3.5 K</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -498,13 +513,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -540,6 +560,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/IE.png</browserIcon>
<browserCode>IE</browserCode>
<browserVersion>9.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>North America</continent>
<continentCode>amn</continentCode>
@@ -558,17 +584,6 @@
<resolution>unknown</resolution>
<plugins />
<pluginsIcons />
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -593,16 +608,19 @@
<pageTitle />
<pageIdAction>4</pageIdAction>
+
<pageId>4</pageId>
+ <bandwidth>3574</bandwidth>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>3.5 K</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -612,13 +630,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -654,6 +677,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>6.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Asia</continent>
<continentCode>asi</continentCode>
@@ -672,17 +701,6 @@
<resolution>unknown</resolution>
<plugins />
<pluginsIcons />
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -707,16 +725,19 @@
<pageTitle />
<pageIdAction>3</pageIdAction>
+
<pageId>3</pageId>
+ <bandwidth>3574</bandwidth>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>3.5 K</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -726,13 +747,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -763,11 +789,17 @@
<operatingSystemVersion />
<browserFamily>WebKit</browserFamily>
<browserFamilyDescription>WebKit (Safari, Chrome)</browserFamilyDescription>
- <browser>Epiphany 2.30</browser>
- <browserName>Epiphany</browserName>
+ <browser>GNOME Web 2.30</browser>
+ <browserName>GNOME Web</browserName>
<browserIcon>plugins/Morpheus/icons/dist/browsers/EP.png</browserIcon>
<browserCode>EP</browserCode>
<browserVersion>2.30</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Asia</continent>
<continentCode>asi</continentCode>
@@ -786,17 +818,6 @@
<resolution>unknown</resolution>
<plugins />
<pluginsIcons />
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -821,16 +842,19 @@
<pageTitle />
<pageIdAction>2</pageIdAction>
+
<pageId>2</pageId>
+ <bandwidth>3574</bandwidth>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>3.5 K</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -840,13 +864,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -882,6 +911,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/AN.png</browserIcon>
<browserCode>AN</browserCode>
<browserVersion />
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Asia</continent>
<continentCode>asi</continentCode>
@@ -900,17 +935,6 @@
<resolution>unknown</resolution>
<plugins />
<pluginsIcons />
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -935,16 +959,19 @@
<pageTitle />
<pageIdAction>1</pageIdAction>
+
<pageId>1</pageId>
+ <bandwidth>3574</bandwidth>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>3.5 K</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -954,13 +981,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -996,6 +1028,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/RM.png</browserIcon>
<browserCode>RM</browserCode>
<browserVersion>0.9</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Asia</continent>
<continentCode>asi</continentCode>
@@ -1014,16 +1052,5 @@
<resolution>unknown</resolution>
<plugins />
<pluginsIcons />
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ArchiveCronTest_preArchivedSegment_noOptions__Live.getLastVisitsDetails_year.xml b/tests/PHPUnit/System/expected/test_ArchiveCronTest_preArchivedSegment_noOptions__Live.getLastVisitsDetails_year.xml
index c1ae816b8f..f25d013581 100644
--- a/tests/PHPUnit/System/expected/test_ArchiveCronTest_preArchivedSegment_noOptions__Live.getLastVisitsDetails_year.xml
+++ b/tests/PHPUnit/System/expected/test_ArchiveCronTest_preArchivedSegment_noOptions__Live.getLastVisitsDetails_year.xml
@@ -12,20 +12,23 @@
<pageTitle />
<pageIdAction>1</pageIdAction>
+
<pageId>70</pageId>
+ <bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
+ <generationTimeMilliseconds>123</generationTimeMilliseconds>
+ <generationTime>0.12s</generationTime>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <generationTimeMilliseconds>123</generationTimeMilliseconds>
- <generationTime>0.12s</generationTime>
- <interactionPosition>1</interactionPosition>
- <timeSpent>0</timeSpent>
- <timeSpentPretty>0s</timeSpentPretty>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>goal</type>
@@ -44,20 +47,23 @@
<pageTitle />
<pageIdAction>1</pageIdAction>
+
<pageId>74</pageId>
+ <bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
+ <generationTimeMilliseconds>120</generationTimeMilliseconds>
+ <generationTime>0.12s</generationTime>
+ <interactionPosition>5</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <generationTimeMilliseconds>120</generationTimeMilliseconds>
- <generationTime>0.12s</generationTime>
- <interactionPosition>5</interactionPosition>
- <timeSpent>0</timeSpent>
- <timeSpentPretty>0s</timeSpentPretty>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>action</type>
@@ -65,20 +71,23 @@
<pageTitle />
<pageIdAction>1</pageIdAction>
+
<pageId>78</pageId>
+ <bandwidth />
+ <timeSpent>52</timeSpent>
+ <timeSpentPretty>52s</timeSpentPretty>
+ <generationTimeMilliseconds>23</generationTimeMilliseconds>
+ <generationTime>0.02s</generationTime>
+ <interactionPosition>9</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <generationTimeMilliseconds>23</generationTimeMilliseconds>
- <generationTime>0.02s</generationTime>
- <interactionPosition>9</interactionPosition>
- <timeSpent>52</timeSpent>
- <timeSpentPretty>52s</timeSpentPretty>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>action</type>
@@ -86,20 +95,23 @@
<pageTitle />
<pageIdAction>2</pageIdAction>
+
<pageId>71</pageId>
+ <bandwidth />
+ <timeSpent>50</timeSpent>
+ <timeSpentPretty>50s</timeSpentPretty>
+ <generationTimeMilliseconds>234</generationTimeMilliseconds>
+ <generationTime>0.23s</generationTime>
+ <interactionPosition>2</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <generationTimeMilliseconds>234</generationTimeMilliseconds>
- <generationTime>0.23s</generationTime>
- <interactionPosition>2</interactionPosition>
- <timeSpent>50</timeSpent>
- <timeSpentPretty>50s</timeSpentPretty>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>action</type>
@@ -107,20 +119,23 @@
<pageTitle />
<pageIdAction>2</pageIdAction>
+
<pageId>75</pageId>
+ <bandwidth />
+ <timeSpent>49</timeSpent>
+ <timeSpentPretty>49s</timeSpentPretty>
+ <generationTimeMilliseconds>294</generationTimeMilliseconds>
+ <generationTime>0.29s</generationTime>
+ <interactionPosition>6</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <generationTimeMilliseconds>294</generationTimeMilliseconds>
- <generationTime>0.29s</generationTime>
- <interactionPosition>6</interactionPosition>
- <timeSpent>49</timeSpent>
- <timeSpentPretty>49s</timeSpentPretty>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>action</type>
@@ -128,20 +143,23 @@
<pageTitle />
<pageIdAction>2</pageIdAction>
+
<pageId>79</pageId>
+ <bandwidth />
+ <timeSpent>26</timeSpent>
+ <timeSpentPretty>26s</timeSpentPretty>
+ <generationTimeMilliseconds>237</generationTimeMilliseconds>
+ <generationTime>0.24s</generationTime>
+ <interactionPosition>10</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <generationTimeMilliseconds>237</generationTimeMilliseconds>
- <generationTime>0.24s</generationTime>
- <interactionPosition>10</interactionPosition>
- <timeSpent>26</timeSpent>
- <timeSpentPretty>26s</timeSpentPretty>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>action</type>
@@ -149,20 +167,23 @@
<pageTitle />
<pageIdAction>3</pageIdAction>
+
<pageId>72</pageId>
+ <bandwidth />
+ <timeSpent>26</timeSpent>
+ <timeSpentPretty>26s</timeSpentPretty>
+ <generationTimeMilliseconds>1324</generationTimeMilliseconds>
+ <generationTime>1.32s</generationTime>
+ <interactionPosition>3</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <generationTimeMilliseconds>1324</generationTimeMilliseconds>
- <generationTime>1.32s</generationTime>
- <interactionPosition>3</interactionPosition>
- <timeSpent>26</timeSpent>
- <timeSpentPretty>26s</timeSpentPretty>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>action</type>
@@ -170,20 +191,23 @@
<pageTitle />
<pageIdAction>3</pageIdAction>
+
<pageId>76</pageId>
+ <bandwidth />
+ <timeSpent>7</timeSpent>
+ <timeSpentPretty>7s</timeSpentPretty>
+ <generationTimeMilliseconds>624</generationTimeMilliseconds>
+ <generationTime>0.62s</generationTime>
+ <interactionPosition>7</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <generationTimeMilliseconds>624</generationTimeMilliseconds>
- <generationTime>0.62s</generationTime>
- <interactionPosition>7</interactionPosition>
- <timeSpent>7</timeSpent>
- <timeSpentPretty>7s</timeSpentPretty>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>action</type>
@@ -191,20 +215,23 @@
<pageTitle />
<pageIdAction>4</pageIdAction>
+
<pageId>73</pageId>
+ <bandwidth />
+ <timeSpent>8</timeSpent>
+ <timeSpentPretty>8s</timeSpentPretty>
+ <generationTimeMilliseconds>543</generationTimeMilliseconds>
+ <generationTime>0.54s</generationTime>
+ <interactionPosition>4</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <generationTimeMilliseconds>543</generationTimeMilliseconds>
- <generationTime>0.54s</generationTime>
- <interactionPosition>4</interactionPosition>
- <timeSpent>8</timeSpent>
- <timeSpentPretty>8s</timeSpentPretty>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>action</type>
@@ -212,18 +239,21 @@
<pageTitle />
<pageIdAction>4</pageIdAction>
+
<pageId>77</pageId>
+ <bandwidth />
+ <generationTimeMilliseconds>343</generationTimeMilliseconds>
+ <generationTime>0.34s</generationTime>
+ <interactionPosition>8</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <generationTimeMilliseconds>343</generationTimeMilliseconds>
- <generationTime>0.34s</generationTime>
- <interactionPosition>8</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -233,13 +263,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -275,6 +310,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/UNK.png</browserIcon>
<browserCode>UNK</browserCode>
<browserVersion />
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Asia</continent>
<continentCode>asi</continentCode>
@@ -293,17 +334,6 @@
<resolution>unknown</resolution>
<plugins />
<pluginsIcons />
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -328,7 +358,12 @@
<pageTitle>incredible title!</pageTitle>
<pageIdAction>29</pageIdAction>
+
<pageId>30</pageId>
+ <bandwidth>43</bandwidth>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName3>_pks</customVariablePageName3>
@@ -343,9 +378,7 @@
<customVariablePageValue5>Electronics &amp; Cameras</customVariablePageValue5>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>43 B</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -355,13 +388,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -397,6 +435,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/IE.png</browserIcon>
<browserCode>IE</browserCode>
<browserVersion>6.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Unknown</continent>
<continentCode>unk</continentCode>
@@ -417,9 +461,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -428,17 +476,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -463,16 +500,19 @@
<pageTitle />
<pageIdAction>1</pageIdAction>
+
<pageId>28</pageId>
+ <bandwidth>3574</bandwidth>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>3.5 K</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -482,13 +522,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -524,6 +569,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/RM.png</browserIcon>
<browserCode>RM</browserCode>
<browserVersion>0.9</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Asia</continent>
<continentCode>asi</continentCode>
@@ -546,17 +597,6 @@
<resolution>unknown</resolution>
<plugins />
<pluginsIcons />
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -581,16 +621,19 @@
<pageTitle />
<pageIdAction>1</pageIdAction>
+
<pageId>29</pageId>
+ <bandwidth>3574</bandwidth>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>3.5 K</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -600,13 +643,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -642,6 +690,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/RM.png</browserIcon>
<browserCode>RM</browserCode>
<browserVersion>0.9</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Asia</continent>
<continentCode>asi</continentCode>
@@ -664,17 +718,6 @@
<resolution>unknown</resolution>
<plugins />
<pluginsIcons />
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -688,18 +731,21 @@
<pageTitle>301/URL = http%3A%2F%2Fpiwik.net%2Fmoved-permanently</pageTitle>
<pageIdAction>25</pageIdAction>
+
<pageId>26</pageId>
+ <bandwidth>3574</bandwidth>
+ <timeSpent>180</timeSpent>
+ <timeSpentPretty>3 min 0s</timeSpentPretty>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>301</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
- <icon />
-
+ <bandwidth_pretty>3.5 K</bandwidth_pretty>
</row>
<row>
<type>goal</type>
@@ -718,16 +764,19 @@
<pageTitle>307/URL = http%3A%2F%2Fpiwik.net%2Ftemp-redirect</pageTitle>
<pageIdAction>27</pageIdAction>
+
<pageId>27</pageId>
+ <bandwidth>3574</bandwidth>
+ <interactionPosition>2</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>307</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition>2</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>3.5 K</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -737,13 +786,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -779,6 +833,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/RM.png</browserIcon>
<browserCode>RM</browserCode>
<browserVersion>0.9</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Asia</continent>
<continentCode>asi</continentCode>
@@ -801,17 +861,6 @@
<resolution>unknown</resolution>
<plugins />
<pluginsIcons />
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -825,18 +874,21 @@
<pageTitle />
<pageIdAction>21</pageIdAction>
+
<pageId>23</pageId>
+ <bandwidth>3574</bandwidth>
+ <timeSpent>61</timeSpent>
+ <timeSpentPretty>1 min 1s</timeSpentPretty>
+ <interactionPosition />
+ <icon>plugins/Morpheus/images/download.png</icon>
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition />
- <timeSpent>61</timeSpent>
- <timeSpentPretty>1 min 1s</timeSpentPretty>
- <icon>plugins/Morpheus/images/download.png</icon>
-
+ <bandwidth_pretty>3.5 K</bandwidth_pretty>
</row>
<row>
<type>download</type>
@@ -844,18 +896,21 @@
<pageTitle />
<pageIdAction>22</pageIdAction>
+
<pageId>24</pageId>
+ <bandwidth>3574</bandwidth>
+ <timeSpent>61</timeSpent>
+ <timeSpentPretty>1 min 1s</timeSpentPretty>
+ <interactionPosition />
+ <icon>plugins/Morpheus/images/download.png</icon>
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition />
- <timeSpent>61</timeSpent>
- <timeSpentPretty>1 min 1s</timeSpentPretty>
- <icon>plugins/Morpheus/images/download.png</icon>
-
+ <bandwidth_pretty>3.5 K</bandwidth_pretty>
</row>
<row>
<type>download</type>
@@ -863,16 +918,19 @@
<pageTitle />
<pageIdAction>23</pageIdAction>
+
<pageId>25</pageId>
+ <bandwidth>3574</bandwidth>
+ <interactionPosition />
+ <icon>plugins/Morpheus/images/download.png</icon>
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition />
- <icon>plugins/Morpheus/images/download.png</icon>
-
+ <bandwidth_pretty>3.5 K</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -882,13 +940,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -924,6 +987,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/RM.png</browserIcon>
<browserCode>RM</browserCode>
<browserVersion>0.9</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Asia</continent>
<continentCode>asi</continentCode>
@@ -946,17 +1015,6 @@
<resolution>unknown</resolution>
<plugins />
<pluginsIcons />
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -981,16 +1039,19 @@
<pageTitle />
<pageIdAction>5</pageIdAction>
+
<pageId>22</pageId>
+ <bandwidth>3574</bandwidth>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>3.5 K</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -1000,13 +1061,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -1042,6 +1108,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/UNK.png</browserIcon>
<browserCode>UNK</browserCode>
<browserVersion />
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>North America</continent>
<continentCode>amn</continentCode>
@@ -1064,17 +1136,6 @@
<resolution>unknown</resolution>
<plugins />
<pluginsIcons />
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -1099,16 +1160,19 @@
<pageTitle>500/URL = http%3A%2F%2Fpiwik.net%2Fto-an-error</pageTitle>
<pageIdAction>20</pageIdAction>
+
<pageId>21</pageId>
+ <bandwidth>3574</bandwidth>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>500</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>3.5 K</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -1118,13 +1182,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -1160,6 +1229,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/IE.png</browserIcon>
<browserCode>IE</browserCode>
<browserVersion>9.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>North America</continent>
<continentCode>amn</continentCode>
@@ -1182,17 +1257,6 @@
<resolution>unknown</resolution>
<plugins />
<pluginsIcons />
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -1206,16 +1270,19 @@
<pageTitle />
<pageIdAction>16</pageIdAction>
+
<pageId>18</pageId>
+ <bandwidth>4324023</bandwidth>
+ <interactionPosition />
+ <icon>plugins/Morpheus/images/download.png</icon>
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition />
- <icon>plugins/Morpheus/images/download.png</icon>
-
+ <bandwidth_pretty>4.1 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -1225,13 +1292,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -1267,6 +1339,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/UNK.png</browserIcon>
<browserCode>UNK</browserCode>
<browserVersion />
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Oceania</continent>
<continentCode>oce</continentCode>
@@ -1289,17 +1367,6 @@
<resolution>unknown</resolution>
<plugins />
<pluginsIcons />
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -1324,16 +1391,19 @@
<pageTitle>404/URL = http%3A%2F%2Fpiwik.net%2Fthis%2Fis%2Fnot%2Fthe%2Fpage%2Fi%2Fam%2Flooking%2Ffor%2F</pageTitle>
<pageIdAction>18</pageIdAction>
+
<pageId>20</pageId>
+ <bandwidth>3574</bandwidth>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>404</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>3.5 K</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -1343,13 +1413,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -1385,6 +1460,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/AN.png</browserIcon>
<browserCode>AN</browserCode>
<browserVersion />
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Asia</continent>
<continentCode>asi</continentCode>
@@ -1407,16 +1488,5 @@
<resolution>unknown</resolution>
<plugins />
<pluginsIcons />
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_AutoSuggestAPITest__Live.getLastVisitsDetails_range.xml b/tests/PHPUnit/System/expected/test_AutoSuggestAPITest__Live.getLastVisitsDetails_range.xml
index e9722c1864..6a8ce872e0 100644
--- a/tests/PHPUnit/System/expected/test_AutoSuggestAPITest__Live.getLastVisitsDetails_range.xml
+++ b/tests/PHPUnit/System/expected/test_AutoSuggestAPITest__Live.getLastVisitsDetails_range.xml
@@ -23,10 +23,13 @@
<pageTitle>It's pitch black...</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>95</pageId>
+ <bandwidth />
<interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -36,13 +39,18 @@
+
+
+
+
+
+
<userId>userid.email@example.org</userId>
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -78,6 +86,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/SF.png</browserIcon>
<browserCode>SF</browserCode>
<browserVersion />
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>North America</continent>
<continentCode>amn</continentCode>
@@ -96,9 +110,13 @@
<customVariables>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -107,11 +125,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
</row>
<row>
<idSite>1</idSite>
@@ -125,12 +138,15 @@
<pageTitle>Space Quest XII</pageTitle>
<pageIdAction>4</pageIdAction>
+
<pageId>46</pageId>
- <interactionPosition>1</interactionPosition>
+ <bandwidth />
<timeSpent>360</timeSpent>
<timeSpentPretty>6 min 0s</timeSpentPretty>
+ <interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>goal</type>
@@ -148,19 +164,22 @@
<url />
<pageIdAction />
+
<pageId>47</pageId>
+ <bandwidth />
+ <timeSpent>180</timeSpent>
+ <timeSpentPretty>3 min 0s</timeSpentPretty>
+ <siteSearchKeyword>Bring on the party</siteSearchKeyword>
+ <interactionPosition>2</interactionPosition>
+ <icon>plugins/Morpheus/images/search_ico.png</icon>
+
<customVariables>
<row>
<customVariablePageName4>Search Category</customVariablePageName4>
<customVariablePageValue4>CAT</customVariablePageValue4>
</row>
</customVariables>
- <siteSearchKeyword>Bring on the party</siteSearchKeyword>
- <interactionPosition>2</interactionPosition>
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/search_ico.png</icon>
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>goal</type>
@@ -179,12 +198,15 @@
<pageTitle />
<pageIdAction>47</pageIdAction>
+
<pageId>48</pageId>
- <interactionPosition />
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
+ <interactionPosition />
<icon>plugins/Morpheus/images/download.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>outlink</type>
@@ -192,26 +214,32 @@
<pageTitle />
<pageIdAction>48</pageIdAction>
+
<pageId>49</pageId>
- <interactionPosition />
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/link.gif</icon>
+ <interactionPosition />
+ <icon>plugins/Morpheus/images/link.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://piwik.net/space/quest/iv</url>
<pageIdAction>8</pageIdAction>
+
<pageId>50</pageId>
<eventCategory>Cat8</eventCategory>
<eventAction>Action8</eventAction>
- <eventName>Name8</eventName>
- <eventValue>353.678</eventValue>
+ <bandwidth />
<interactionPosition />
- <icon>plugins/Morpheus/images/event.png</icon>
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Name8</eventName>
+ <eventValue>353.678</eventValue>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>2</goalConversions>
@@ -221,13 +249,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returningCustomer</visitorType>
- <visitorTypeIcon>plugins/Live/images/returningVisitor.gif</visitorTypeIcon>
+ <visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>5</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>100</daysSinceFirstVisit>
@@ -263,6 +296,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>1</events>
<continent>Unknown</continent>
<continentCode>unk</continentCode>
@@ -289,9 +328,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -300,11 +343,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
</row>
<row>
<idSite>1</idSite>
@@ -329,7 +367,12 @@
<pageTitle>It's &lt;script&gt; pitch black...</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>45</pageId>
+ <bandwidth />
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName2>Cvar 2 PAGE name</customVariablePageName2>
@@ -340,9 +383,7 @@
<customVariablePageValue5>Cvar5 PAGE value is 8</customVariablePageValue5>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -352,13 +393,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returningCustomer</visitorType>
- <visitorTypeIcon>plugins/Live/images/returningVisitor.gif</visitorTypeIcon>
+ <visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>5</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>101</daysSinceFirstVisit>
@@ -394,6 +440,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Unknown</continent>
<continentCode>unk</continentCode>
@@ -420,9 +472,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -431,11 +487,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
</row>
<row>
<idSite>1</idSite>
@@ -449,12 +500,15 @@
<pageTitle>Space Quest XII</pageTitle>
<pageIdAction>4</pageIdAction>
+
<pageId>41</pageId>
- <interactionPosition>1</interactionPosition>
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
+ <interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>goal</type>
@@ -484,12 +538,15 @@
<pageTitle />
<pageIdAction>42</pageIdAction>
+
<pageId>42</pageId>
- <interactionPosition />
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
+ <interactionPosition />
<icon>plugins/Morpheus/images/download.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>outlink</type>
@@ -497,26 +554,32 @@
<pageTitle />
<pageIdAction>43</pageIdAction>
+
<pageId>43</pageId>
- <interactionPosition />
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/link.gif</icon>
+ <interactionPosition />
+ <icon>plugins/Morpheus/images/link.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://piwik.net/space/quest/iv</url>
<pageIdAction>8</pageIdAction>
+
<pageId>44</pageId>
<eventCategory>Cat7</eventCategory>
<eventAction>Action7</eventAction>
- <eventName>Name7</eventName>
- <eventValue>352.678</eventValue>
+ <bandwidth />
<interactionPosition />
- <icon>plugins/Morpheus/images/event.png</icon>
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Name7</eventName>
+ <eventValue>352.678</eventValue>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>2</goalConversions>
@@ -526,13 +589,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returningCustomer</visitorType>
- <visitorTypeIcon>plugins/Live/images/returningVisitor.gif</visitorTypeIcon>
+ <visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>5</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>100</daysSinceFirstVisit>
@@ -568,6 +636,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>1</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -594,9 +668,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -605,11 +683,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
</row>
<row>
<idSite>1</idSite>
@@ -634,7 +707,12 @@
<pageTitle>It's &lt;script&gt; pitch black...</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>40</pageId>
+ <bandwidth />
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName2>Cvar 2 PAGE name</customVariablePageName2>
@@ -645,9 +723,7 @@
<customVariablePageValue5>Cvar5 PAGE value is 7</customVariablePageValue5>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -657,13 +733,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returningCustomer</visitorType>
- <visitorTypeIcon>plugins/Live/images/returningVisitor.gif</visitorTypeIcon>
+ <visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>5</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>101</daysSinceFirstVisit>
@@ -699,6 +780,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -725,9 +812,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -736,11 +827,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
</row>
<row>
<idSite>1</idSite>
@@ -754,12 +840,15 @@
<pageTitle>Space Quest XII</pageTitle>
<pageIdAction>4</pageIdAction>
+
<pageId>35</pageId>
- <interactionPosition>1</interactionPosition>
+ <bandwidth />
<timeSpent>360</timeSpent>
<timeSpentPretty>6 min 0s</timeSpentPretty>
+ <interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>goal</type>
@@ -777,19 +866,22 @@
<url />
<pageIdAction />
+
<pageId>36</pageId>
+ <bandwidth />
+ <timeSpent>180</timeSpent>
+ <timeSpentPretty>3 min 0s</timeSpentPretty>
+ <siteSearchKeyword>Bring on the party</siteSearchKeyword>
+ <interactionPosition>2</interactionPosition>
+ <icon>plugins/Morpheus/images/search_ico.png</icon>
+
<customVariables>
<row>
<customVariablePageName4>Search Category</customVariablePageName4>
<customVariablePageValue4>CAT</customVariablePageValue4>
</row>
</customVariables>
- <siteSearchKeyword>Bring on the party</siteSearchKeyword>
- <interactionPosition>2</interactionPosition>
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/search_ico.png</icon>
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>goal</type>
@@ -808,12 +900,15 @@
<pageTitle />
<pageIdAction>37</pageIdAction>
+
<pageId>37</pageId>
- <interactionPosition />
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
+ <interactionPosition />
<icon>plugins/Morpheus/images/download.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>outlink</type>
@@ -821,26 +916,32 @@
<pageTitle />
<pageIdAction>38</pageIdAction>
+
<pageId>38</pageId>
- <interactionPosition />
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/link.gif</icon>
+ <interactionPosition />
+ <icon>plugins/Morpheus/images/link.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://piwik.net/space/quest/iv</url>
<pageIdAction>8</pageIdAction>
+
<pageId>39</pageId>
<eventCategory>Cat6</eventCategory>
<eventAction>Action6</eventAction>
- <eventName>Name6</eventName>
- <eventValue>351.678</eventValue>
+ <bandwidth />
<interactionPosition />
- <icon>plugins/Morpheus/images/event.png</icon>
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Name6</eventName>
+ <eventValue>351.678</eventValue>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>2</goalConversions>
@@ -850,13 +951,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returningCustomer</visitorType>
- <visitorTypeIcon>plugins/Live/images/returningVisitor.gif</visitorTypeIcon>
+ <visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>5</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>100</daysSinceFirstVisit>
@@ -892,6 +998,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>1</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -918,9 +1030,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -929,11 +1045,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
</row>
<row>
<idSite>1</idSite>
@@ -958,7 +1069,12 @@
<pageTitle>It's &lt;script&gt; pitch black...</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>34</pageId>
+ <bandwidth />
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName2>Cvar 2 PAGE name</customVariablePageName2>
@@ -969,9 +1085,7 @@
<customVariablePageValue5>Cvar5 PAGE value is 6</customVariablePageValue5>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -981,13 +1095,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returningCustomer</visitorType>
- <visitorTypeIcon>plugins/Live/images/returningVisitor.gif</visitorTypeIcon>
+ <visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>5</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>101</daysSinceFirstVisit>
@@ -1023,6 +1142,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -1049,9 +1174,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -1060,11 +1189,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
</row>
<row>
<idSite>1</idSite>
@@ -1078,12 +1202,15 @@
<pageTitle>Space Quest XII</pageTitle>
<pageIdAction>4</pageIdAction>
+
<pageId>30</pageId>
- <interactionPosition>1</interactionPosition>
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
+ <interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>goal</type>
@@ -1113,12 +1240,15 @@
<pageTitle />
<pageIdAction>32</pageIdAction>
+
<pageId>31</pageId>
- <interactionPosition />
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
+ <interactionPosition />
<icon>plugins/Morpheus/images/download.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>outlink</type>
@@ -1126,26 +1256,32 @@
<pageTitle />
<pageIdAction>33</pageIdAction>
+
<pageId>32</pageId>
- <interactionPosition />
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/link.gif</icon>
+ <interactionPosition />
+ <icon>plugins/Morpheus/images/link.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://piwik.net/space/quest/iv</url>
<pageIdAction>8</pageIdAction>
+
<pageId>33</pageId>
<eventCategory>Cat5</eventCategory>
<eventAction>Action5</eventAction>
- <eventName>Name5</eventName>
- <eventValue>350.678</eventValue>
+ <bandwidth />
<interactionPosition />
- <icon>plugins/Morpheus/images/event.png</icon>
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Name5</eventName>
+ <eventValue>350.678</eventValue>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>2</goalConversions>
@@ -1155,13 +1291,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returningCustomer</visitorType>
- <visitorTypeIcon>plugins/Live/images/returningVisitor.gif</visitorTypeIcon>
+ <visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>5</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>100</daysSinceFirstVisit>
@@ -1197,6 +1338,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>1</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -1223,9 +1370,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -1234,11 +1385,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
</row>
<row>
<idSite>1</idSite>
@@ -1263,7 +1409,12 @@
<pageTitle>It's &lt;script&gt; pitch black...</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>29</pageId>
+ <bandwidth />
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName2>Cvar 2 PAGE name</customVariablePageName2>
@@ -1274,9 +1425,7 @@
<customVariablePageValue5>Cvar5 PAGE value is 5</customVariablePageValue5>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -1286,13 +1435,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returningCustomer</visitorType>
- <visitorTypeIcon>plugins/Live/images/returningVisitor.gif</visitorTypeIcon>
+ <visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>5</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>101</daysSinceFirstVisit>
@@ -1328,6 +1482,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -1354,9 +1514,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -1365,11 +1529,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
</row>
<row>
<idSite>1</idSite>
@@ -1383,12 +1542,15 @@
<pageTitle>Space Quest XII</pageTitle>
<pageIdAction>4</pageIdAction>
+
<pageId>24</pageId>
- <interactionPosition>1</interactionPosition>
+ <bandwidth />
<timeSpent>360</timeSpent>
<timeSpentPretty>6 min 0s</timeSpentPretty>
+ <interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>goal</type>
@@ -1406,19 +1568,22 @@
<url />
<pageIdAction />
+
<pageId>25</pageId>
+ <bandwidth />
+ <timeSpent>180</timeSpent>
+ <timeSpentPretty>3 min 0s</timeSpentPretty>
+ <siteSearchKeyword>Bring on the party</siteSearchKeyword>
+ <interactionPosition>2</interactionPosition>
+ <icon>plugins/Morpheus/images/search_ico.png</icon>
+
<customVariables>
<row>
<customVariablePageName4>Search Category</customVariablePageName4>
<customVariablePageValue4>CAT</customVariablePageValue4>
</row>
</customVariables>
- <siteSearchKeyword>Bring on the party</siteSearchKeyword>
- <interactionPosition>2</interactionPosition>
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/search_ico.png</icon>
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>goal</type>
@@ -1437,12 +1602,15 @@
<pageTitle />
<pageIdAction>27</pageIdAction>
+
<pageId>26</pageId>
- <interactionPosition />
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
+ <interactionPosition />
<icon>plugins/Morpheus/images/download.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>outlink</type>
@@ -1450,26 +1618,32 @@
<pageTitle />
<pageIdAction>28</pageIdAction>
+
<pageId>27</pageId>
- <interactionPosition />
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/link.gif</icon>
+ <interactionPosition />
+ <icon>plugins/Morpheus/images/link.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://piwik.net/space/quest/iv</url>
<pageIdAction>8</pageIdAction>
+
<pageId>28</pageId>
<eventCategory>Cat4</eventCategory>
<eventAction>Action4</eventAction>
- <eventName>Name4</eventName>
- <eventValue>349.678</eventValue>
+ <bandwidth />
<interactionPosition />
- <icon>plugins/Morpheus/images/event.png</icon>
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Name4</eventName>
+ <eventValue>349.678</eventValue>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>2</goalConversions>
@@ -1479,13 +1653,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returningCustomer</visitorType>
- <visitorTypeIcon>plugins/Live/images/returningVisitor.gif</visitorTypeIcon>
+ <visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>5</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>100</daysSinceFirstVisit>
@@ -1521,6 +1700,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>1</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -1547,9 +1732,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -1558,11 +1747,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
</row>
<row>
<idSite>1</idSite>
@@ -1587,7 +1771,12 @@
<pageTitle>It's &lt;script&gt; pitch black...</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>23</pageId>
+ <bandwidth />
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName2>Cvar 2 PAGE name</customVariablePageName2>
@@ -1598,9 +1787,7 @@
<customVariablePageValue5>Cvar5 PAGE value is 4</customVariablePageValue5>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -1610,13 +1797,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returningCustomer</visitorType>
- <visitorTypeIcon>plugins/Live/images/returningVisitor.gif</visitorTypeIcon>
+ <visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>5</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>101</daysSinceFirstVisit>
@@ -1652,6 +1844,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -1678,9 +1876,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -1689,11 +1891,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
</row>
<row>
<idSite>1</idSite>
@@ -1707,12 +1904,15 @@
<pageTitle>Space Quest XII</pageTitle>
<pageIdAction>4</pageIdAction>
+
<pageId>19</pageId>
- <interactionPosition>1</interactionPosition>
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
+ <interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>goal</type>
@@ -1742,12 +1942,15 @@
<pageTitle />
<pageIdAction>22</pageIdAction>
+
<pageId>20</pageId>
- <interactionPosition />
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
+ <interactionPosition />
<icon>plugins/Morpheus/images/download.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>outlink</type>
@@ -1755,26 +1958,32 @@
<pageTitle />
<pageIdAction>23</pageIdAction>
+
<pageId>21</pageId>
- <interactionPosition />
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/link.gif</icon>
+ <interactionPosition />
+ <icon>plugins/Morpheus/images/link.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://piwik.net/space/quest/iv</url>
<pageIdAction>8</pageIdAction>
+
<pageId>22</pageId>
<eventCategory>Cat3</eventCategory>
<eventAction>Action3</eventAction>
- <eventName>Name3</eventName>
- <eventValue>348.678</eventValue>
+ <bandwidth />
<interactionPosition />
- <icon>plugins/Morpheus/images/event.png</icon>
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Name3</eventName>
+ <eventValue>348.678</eventValue>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>2</goalConversions>
@@ -1784,13 +1993,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returningCustomer</visitorType>
- <visitorTypeIcon>plugins/Live/images/returningVisitor.gif</visitorTypeIcon>
+ <visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>5</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>100</daysSinceFirstVisit>
@@ -1826,6 +2040,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>1</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -1852,9 +2072,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -1863,11 +2087,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
</row>
<row>
<idSite>1</idSite>
@@ -1881,12 +2100,15 @@
<pageTitle>Space Quest XII</pageTitle>
<pageIdAction>4</pageIdAction>
+
<pageId>80</pageId>
- <interactionPosition>1</interactionPosition>
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
+ <interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>goal</type>
@@ -1916,12 +2138,15 @@
<pageTitle />
<pageIdAction>22</pageIdAction>
+
<pageId>81</pageId>
- <interactionPosition />
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
+ <interactionPosition />
<icon>plugins/Morpheus/images/download.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>outlink</type>
@@ -1929,26 +2154,32 @@
<pageTitle />
<pageIdAction>23</pageIdAction>
+
<pageId>82</pageId>
- <interactionPosition />
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/link.gif</icon>
+ <interactionPosition />
+ <icon>plugins/Morpheus/images/link.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://piwik.net/space/quest/iv</url>
<pageIdAction>8</pageIdAction>
+
<pageId>83</pageId>
<eventCategory>Cat3</eventCategory>
<eventAction>Action3</eventAction>
- <eventName>Name3</eventName>
- <eventValue>348.678</eventValue>
+ <bandwidth />
<interactionPosition />
- <icon>plugins/Morpheus/images/event.png</icon>
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Name3</eventName>
+ <eventValue>348.678</eventValue>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>2</goalConversions>
@@ -1958,13 +2189,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returningCustomer</visitorType>
- <visitorTypeIcon>plugins/Live/images/returningVisitor.gif</visitorTypeIcon>
+ <visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>5</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>100</daysSinceFirstVisit>
@@ -1984,32 +2220,38 @@
<referrerSearchEngineIcon />
<languageCode />
<language>Unknown</language>
- <deviceType>Unknown</deviceType>
- <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/unknown.png</deviceTypeIcon>
- <deviceBrand>Unknown</deviceBrand>
- <deviceModel />
- <operatingSystem>Unknown</operatingSystem>
- <operatingSystemName>Unknown</operatingSystemName>
- <operatingSystemIcon>plugins/Morpheus/icons/dist/os/UNK.png</operatingSystemIcon>
- <operatingSystemCode>UNK</operatingSystemCode>
- <operatingSystemVersion>UNK</operatingSystemVersion>
- <browserFamily />
- <browserFamilyDescription>Unknown</browserFamilyDescription>
- <browser>Unknown</browser>
- <browserName>Unknown</browserName>
- <browserIcon>plugins/Morpheus/icons/dist/browsers/UNK.png</browserIcon>
- <browserCode>UNK</browserCode>
- <browserVersion />
+ <deviceType>Tablet</deviceType>
+ <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/tablet.png</deviceTypeIcon>
+ <deviceBrand>Sony</deviceBrand>
+ <deviceModel>Xperia Tablet S</deviceModel>
+ <operatingSystem>Android 4.1</operatingSystem>
+ <operatingSystemName>Android</operatingSystemName>
+ <operatingSystemIcon>plugins/Morpheus/icons/dist/os/AND.png</operatingSystemIcon>
+ <operatingSystemCode>AND</operatingSystemCode>
+ <operatingSystemVersion>4.1</operatingSystemVersion>
+ <browserFamily>Blink</browserFamily>
+ <browserFamilyDescription>Blink (Chrome, Opera)</browserFamilyDescription>
+ <browser>Chrome 34.0</browser>
+ <browserName>Chrome</browserName>
+ <browserIcon>plugins/Morpheus/icons/dist/browsers/CH.png</browserIcon>
+ <browserCode>CH</browserCode>
+ <browserVersion>34.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>1</events>
<continent>Asia</continent>
<continentCode>asi</continentCode>
- <country>Tibet</country>
- <countryCode>ti</countryCode>
- <countryFlag>plugins/Morpheus/icons/dist/flags/ti.png</countryFlag>
- <region>Unknown</region>
- <regionCode>1</regionCode>
+ <country>China</country>
+ <countryCode>cn</countryCode>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/cn.png</countryFlag>
+ <region>Xizang</region>
+ <regionCode>14</regionCode>
<city>Lhasa</city>
- <location>Lhasa, Unknown, Tibet</location>
+ <location>Lhasa, Xizang, China</location>
<latitude>29.650000</latitude>
<longitude>91.100000</longitude>
<visitLocalTime>12:34:06</visitLocalTime>
@@ -2018,9 +2260,13 @@
<customVariables>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -2029,11 +2275,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
</row>
<row>
<idSite>1</idSite>
@@ -2058,7 +2299,12 @@
<pageTitle>It's &lt;script&gt; pitch black...</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>18</pageId>
+ <bandwidth />
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName2>Cvar 2 PAGE name</customVariablePageName2>
@@ -2069,9 +2315,7 @@
<customVariablePageValue5>Cvar5 PAGE value is 3</customVariablePageValue5>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -2081,13 +2325,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returningCustomer</visitorType>
- <visitorTypeIcon>plugins/Live/images/returningVisitor.gif</visitorTypeIcon>
+ <visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>5</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>101</daysSinceFirstVisit>
@@ -2123,6 +2372,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -2149,9 +2404,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -2160,11 +2419,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
</row>
<row>
<idSite>1</idSite>
@@ -2189,7 +2443,12 @@
<pageTitle>It's &lt;script&gt; pitch black...</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>79</pageId>
+ <bandwidth />
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName2>Cvar 2 PAGE name</customVariablePageName2>
@@ -2200,9 +2459,7 @@
<customVariablePageValue5>Cvar5 PAGE value is 3</customVariablePageValue5>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -2212,13 +2469,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returningCustomer</visitorType>
- <visitorTypeIcon>plugins/Live/images/returningVisitor.gif</visitorTypeIcon>
+ <visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>5</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>101</daysSinceFirstVisit>
@@ -2254,16 +2516,22 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/CH.png</browserIcon>
<browserCode>CH</browserCode>
<browserVersion>34.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Asia</continent>
<continentCode>asi</continentCode>
- <country>Tibet</country>
- <countryCode>ti</countryCode>
- <countryFlag>plugins/Morpheus/icons/dist/flags/ti.png</countryFlag>
- <region>Unknown</region>
- <regionCode>1</regionCode>
+ <country>China</country>
+ <countryCode>cn</countryCode>
+ <countryFlag>plugins/Morpheus/icons/dist/flags/cn.png</countryFlag>
+ <region>Xizang</region>
+ <regionCode>14</regionCode>
<city>Lhasa</city>
- <location>Lhasa, Unknown, Tibet</location>
+ <location>Lhasa, Xizang, China</location>
<latitude>29.650000</latitude>
<longitude>91.100000</longitude>
<visitLocalTime>12:34:06</visitLocalTime>
@@ -2280,9 +2548,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -2291,11 +2563,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
</row>
<row>
<idSite>1</idSite>
@@ -2309,12 +2576,15 @@
<pageTitle>Space Quest XII</pageTitle>
<pageIdAction>4</pageIdAction>
+
<pageId>13</pageId>
- <interactionPosition>1</interactionPosition>
+ <bandwidth />
<timeSpent>360</timeSpent>
<timeSpentPretty>6 min 0s</timeSpentPretty>
+ <interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>goal</type>
@@ -2332,19 +2602,22 @@
<url />
<pageIdAction />
+
<pageId>14</pageId>
+ <bandwidth />
+ <timeSpent>180</timeSpent>
+ <timeSpentPretty>3 min 0s</timeSpentPretty>
+ <siteSearchKeyword>Bring on the party</siteSearchKeyword>
+ <interactionPosition>2</interactionPosition>
+ <icon>plugins/Morpheus/images/search_ico.png</icon>
+
<customVariables>
<row>
<customVariablePageName4>Search Category</customVariablePageName4>
<customVariablePageValue4>CAT</customVariablePageValue4>
</row>
</customVariables>
- <siteSearchKeyword>Bring on the party</siteSearchKeyword>
- <interactionPosition>2</interactionPosition>
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/search_ico.png</icon>
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>goal</type>
@@ -2363,12 +2636,15 @@
<pageTitle />
<pageIdAction>17</pageIdAction>
+
<pageId>15</pageId>
- <interactionPosition />
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
+ <interactionPosition />
<icon>plugins/Morpheus/images/download.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>outlink</type>
@@ -2376,26 +2652,32 @@
<pageTitle />
<pageIdAction>18</pageIdAction>
+
<pageId>16</pageId>
- <interactionPosition />
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/link.gif</icon>
+ <interactionPosition />
+ <icon>plugins/Morpheus/images/link.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://piwik.net/space/quest/iv</url>
<pageIdAction>8</pageIdAction>
+
<pageId>17</pageId>
<eventCategory>Cat2</eventCategory>
<eventAction>Action2</eventAction>
- <eventName>Name2</eventName>
- <eventValue>347.678</eventValue>
+ <bandwidth />
<interactionPosition />
- <icon>plugins/Morpheus/images/event.png</icon>
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Name2</eventName>
+ <eventValue>347.678</eventValue>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>2</goalConversions>
@@ -2405,13 +2687,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returningCustomer</visitorType>
- <visitorTypeIcon>plugins/Live/images/returningVisitor.gif</visitorTypeIcon>
+ <visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>5</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>100</daysSinceFirstVisit>
@@ -2447,6 +2734,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>1</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -2473,9 +2766,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -2484,11 +2781,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
</row>
<row>
<idSite>1</idSite>
@@ -2502,12 +2794,15 @@
<pageTitle>Space Quest XII</pageTitle>
<pageIdAction>4</pageIdAction>
+
<pageId>74</pageId>
- <interactionPosition>1</interactionPosition>
+ <bandwidth />
<timeSpent>360</timeSpent>
<timeSpentPretty>6 min 0s</timeSpentPretty>
+ <interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>goal</type>
@@ -2525,19 +2820,22 @@
<url />
<pageIdAction />
+
<pageId>75</pageId>
+ <bandwidth />
+ <timeSpent>180</timeSpent>
+ <timeSpentPretty>3 min 0s</timeSpentPretty>
+ <siteSearchKeyword>Bring on the party</siteSearchKeyword>
+ <interactionPosition>2</interactionPosition>
+ <icon>plugins/Morpheus/images/search_ico.png</icon>
+
<customVariables>
<row>
<customVariablePageName4>Search Category</customVariablePageName4>
<customVariablePageValue4>CAT</customVariablePageValue4>
</row>
</customVariables>
- <siteSearchKeyword>Bring on the party</siteSearchKeyword>
- <interactionPosition>2</interactionPosition>
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/search_ico.png</icon>
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>goal</type>
@@ -2556,12 +2854,15 @@
<pageTitle />
<pageIdAction>17</pageIdAction>
+
<pageId>76</pageId>
- <interactionPosition />
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
+ <interactionPosition />
<icon>plugins/Morpheus/images/download.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>outlink</type>
@@ -2569,26 +2870,32 @@
<pageTitle />
<pageIdAction>18</pageIdAction>
+
<pageId>77</pageId>
- <interactionPosition />
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/link.gif</icon>
+ <interactionPosition />
+ <icon>plugins/Morpheus/images/link.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://piwik.net/space/quest/iv</url>
<pageIdAction>8</pageIdAction>
+
<pageId>78</pageId>
<eventCategory>Cat2</eventCategory>
<eventAction>Action2</eventAction>
- <eventName>Name2</eventName>
- <eventValue>347.678</eventValue>
+ <bandwidth />
<interactionPosition />
- <icon>plugins/Morpheus/images/event.png</icon>
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Name2</eventName>
+ <eventValue>347.678</eventValue>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>2</goalConversions>
@@ -2598,13 +2905,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returningCustomer</visitorType>
- <visitorTypeIcon>plugins/Live/images/returningVisitor.gif</visitorTypeIcon>
+ <visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>5</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>100</daysSinceFirstVisit>
@@ -2624,22 +2936,28 @@
<referrerSearchEngineIcon />
<languageCode />
<language>Unknown</language>
- <deviceType>Unknown</deviceType>
- <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/unknown.png</deviceTypeIcon>
- <deviceBrand>Unknown</deviceBrand>
+ <deviceType>Desktop</deviceType>
+ <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon>
+ <deviceBrand>Dell</deviceBrand>
<deviceModel />
- <operatingSystem>Unknown</operatingSystem>
- <operatingSystemName>Unknown</operatingSystemName>
- <operatingSystemIcon>plugins/Morpheus/icons/dist/os/UNK.png</operatingSystemIcon>
- <operatingSystemCode>UNK</operatingSystemCode>
- <operatingSystemVersion>UNK</operatingSystemVersion>
- <browserFamily />
- <browserFamilyDescription>Unknown</browserFamilyDescription>
- <browser>Unknown</browser>
- <browserName>Unknown</browserName>
- <browserIcon>plugins/Morpheus/icons/dist/browsers/UNK.png</browserIcon>
- <browserCode>UNK</browserCode>
- <browserVersion />
+ <operatingSystem>Windows 7</operatingSystem>
+ <operatingSystemName>Windows</operatingSystemName>
+ <operatingSystemIcon>plugins/Morpheus/icons/dist/os/WIN.png</operatingSystemIcon>
+ <operatingSystemCode>WIN</operatingSystemCode>
+ <operatingSystemVersion>7</operatingSystemVersion>
+ <browserFamily>Trident</browserFamily>
+ <browserFamilyDescription>Trident (IE)</browserFamilyDescription>
+ <browser>Internet Explorer 11.0</browser>
+ <browserName>Internet Explorer</browserName>
+ <browserIcon>plugins/Morpheus/icons/dist/browsers/IE.png</browserIcon>
+ <browserCode>IE</browserCode>
+ <browserVersion>11.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>1</events>
<continent>North America</continent>
<continentCode>amn</continentCode>
@@ -2658,9 +2976,13 @@
<customVariables>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -2669,11 +2991,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
</row>
<row>
<idSite>1</idSite>
@@ -2698,7 +3015,12 @@
<pageTitle>It's &lt;script&gt; pitch black...</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>12</pageId>
+ <bandwidth />
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName2>Cvar 2 PAGE name</customVariablePageName2>
@@ -2709,9 +3031,7 @@
<customVariablePageValue5>Cvar5 PAGE value is 2</customVariablePageValue5>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -2721,13 +3041,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returningCustomer</visitorType>
- <visitorTypeIcon>plugins/Live/images/returningVisitor.gif</visitorTypeIcon>
+ <visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>5</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>101</daysSinceFirstVisit>
@@ -2763,6 +3088,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -2789,9 +3120,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -2800,11 +3135,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
</row>
<row>
<idSite>1</idSite>
@@ -2829,7 +3159,12 @@
<pageTitle>It's &lt;script&gt; pitch black...</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>73</pageId>
+ <bandwidth />
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName2>Cvar 2 PAGE name</customVariablePageName2>
@@ -2840,9 +3175,7 @@
<customVariablePageValue5>Cvar5 PAGE value is 2</customVariablePageValue5>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -2852,13 +3185,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returningCustomer</visitorType>
- <visitorTypeIcon>plugins/Live/images/returningVisitor.gif</visitorTypeIcon>
+ <visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>5</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>101</daysSinceFirstVisit>
@@ -2894,6 +3232,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/IE.png</browserIcon>
<browserCode>IE</browserCode>
<browserVersion>11.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>North America</continent>
<continentCode>amn</continentCode>
@@ -2920,9 +3264,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -2931,11 +3279,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
</row>
<row>
<idSite>1</idSite>
@@ -2949,12 +3292,15 @@
<pageTitle>Space Quest XII</pageTitle>
<pageIdAction>4</pageIdAction>
+
<pageId>8</pageId>
- <interactionPosition>1</interactionPosition>
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
+ <interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>goal</type>
@@ -2984,12 +3330,15 @@
<pageTitle />
<pageIdAction>12</pageIdAction>
+
<pageId>9</pageId>
- <interactionPosition />
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
+ <interactionPosition />
<icon>plugins/Morpheus/images/download.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>outlink</type>
@@ -2997,26 +3346,32 @@
<pageTitle />
<pageIdAction>13</pageIdAction>
+
<pageId>10</pageId>
- <interactionPosition />
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/link.gif</icon>
+ <interactionPosition />
+ <icon>plugins/Morpheus/images/link.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://piwik.net/space/quest/iv</url>
<pageIdAction>8</pageIdAction>
+
<pageId>11</pageId>
<eventCategory>Cat1</eventCategory>
<eventAction>Action1</eventAction>
- <eventName>Name1</eventName>
- <eventValue>346.678</eventValue>
+ <bandwidth />
<interactionPosition />
- <icon>plugins/Morpheus/images/event.png</icon>
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Name1</eventName>
+ <eventValue>346.678</eventValue>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>2</goalConversions>
@@ -3026,13 +3381,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returningCustomer</visitorType>
- <visitorTypeIcon>plugins/Live/images/returningVisitor.gif</visitorTypeIcon>
+ <visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>5</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>100</daysSinceFirstVisit>
@@ -3068,6 +3428,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>1</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -3094,9 +3460,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -3105,11 +3475,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
</row>
<row>
<idSite>1</idSite>
@@ -3123,12 +3488,15 @@
<pageTitle>Space Quest XII</pageTitle>
<pageIdAction>4</pageIdAction>
+
<pageId>58</pageId>
- <interactionPosition>1</interactionPosition>
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
+ <interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>goal</type>
@@ -3158,12 +3526,15 @@
<pageTitle />
<pageIdAction>12</pageIdAction>
+
<pageId>59</pageId>
- <interactionPosition />
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
+ <interactionPosition />
<icon>plugins/Morpheus/images/download.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>outlink</type>
@@ -3171,26 +3542,32 @@
<pageTitle />
<pageIdAction>13</pageIdAction>
+
<pageId>60</pageId>
- <interactionPosition />
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/link.gif</icon>
+ <interactionPosition />
+ <icon>plugins/Morpheus/images/link.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://piwik.net/space/quest/iv</url>
<pageIdAction>8</pageIdAction>
+
<pageId>61</pageId>
<eventCategory>Cat1</eventCategory>
<eventAction>Action1</eventAction>
- <eventName>Name1</eventName>
- <eventValue>346.678</eventValue>
+ <bandwidth />
<interactionPosition />
- <icon>plugins/Morpheus/images/event.png</icon>
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Name1</eventName>
+ <eventValue>346.678</eventValue>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>2</goalConversions>
@@ -3200,13 +3577,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returningCustomer</visitorType>
- <visitorTypeIcon>plugins/Live/images/returningVisitor.gif</visitorTypeIcon>
+ <visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>5</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>100</daysSinceFirstVisit>
@@ -3242,6 +3624,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/AN.png</browserIcon>
<browserCode>AN</browserCode>
<browserVersion />
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>1</events>
<continent>North America</continent>
<continentCode>amn</continentCode>
@@ -3268,9 +3656,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -3279,11 +3671,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
</row>
<row>
<idSite>1</idSite>
@@ -3297,12 +3684,15 @@
<pageTitle>Space Quest XII</pageTitle>
<pageIdAction>4</pageIdAction>
+
<pageId>69</pageId>
- <interactionPosition>1</interactionPosition>
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
+ <interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>goal</type>
@@ -3332,12 +3722,15 @@
<pageTitle />
<pageIdAction>12</pageIdAction>
+
<pageId>70</pageId>
- <interactionPosition />
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
+ <interactionPosition />
<icon>plugins/Morpheus/images/download.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>outlink</type>
@@ -3345,26 +3738,32 @@
<pageTitle />
<pageIdAction>13</pageIdAction>
+
<pageId>71</pageId>
- <interactionPosition />
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/link.gif</icon>
+ <interactionPosition />
+ <icon>plugins/Morpheus/images/link.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://piwik.net/space/quest/iv</url>
<pageIdAction>8</pageIdAction>
+
<pageId>72</pageId>
<eventCategory>Cat1</eventCategory>
<eventAction>Action1</eventAction>
- <eventName>Name1</eventName>
- <eventValue>346.678</eventValue>
+ <bandwidth />
<interactionPosition />
- <icon>plugins/Morpheus/images/event.png</icon>
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Name1</eventName>
+ <eventValue>346.678</eventValue>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>2</goalConversions>
@@ -3374,13 +3773,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returningCustomer</visitorType>
- <visitorTypeIcon>plugins/Live/images/returningVisitor.gif</visitorTypeIcon>
+ <visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>5</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>100</daysSinceFirstVisit>
@@ -3400,22 +3804,28 @@
<referrerSearchEngineIcon />
<languageCode />
<language>Unknown</language>
- <deviceType>Unknown</deviceType>
- <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/unknown.png</deviceTypeIcon>
+ <deviceType>Desktop</deviceType>
+ <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon>
<deviceBrand>Unknown</deviceBrand>
<deviceModel />
- <operatingSystem>Unknown</operatingSystem>
- <operatingSystemName>Unknown</operatingSystemName>
- <operatingSystemIcon>plugins/Morpheus/icons/dist/os/UNK.png</operatingSystemIcon>
- <operatingSystemCode>UNK</operatingSystemCode>
- <operatingSystemVersion>UNK</operatingSystemVersion>
- <browserFamily />
- <browserFamilyDescription>Unknown</browserFamilyDescription>
- <browser>Unknown</browser>
- <browserName>Unknown</browserName>
- <browserIcon>plugins/Morpheus/icons/dist/browsers/UNK.png</browserIcon>
- <browserCode>UNK</browserCode>
- <browserVersion />
+ <operatingSystem>Windows Vista</operatingSystem>
+ <operatingSystemName>Windows</operatingSystemName>
+ <operatingSystemIcon>plugins/Morpheus/icons/dist/os/WIN.png</operatingSystemIcon>
+ <operatingSystemCode>WIN</operatingSystemCode>
+ <operatingSystemVersion>Vista</operatingSystemVersion>
+ <browserFamily>Trident</browserFamily>
+ <browserFamilyDescription>Trident (IE)</browserFamilyDescription>
+ <browser>Internet Explorer 8.0</browser>
+ <browserName>Internet Explorer</browserName>
+ <browserIcon>plugins/Morpheus/icons/dist/browsers/IE.png</browserIcon>
+ <browserCode>IE</browserCode>
+ <browserVersion>8.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>1</events>
<continent>North America</continent>
<continentCode>amn</continentCode>
@@ -3434,9 +3844,13 @@
<customVariables>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -3445,11 +3859,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
</row>
<row>
<idSite>1</idSite>
@@ -3463,12 +3872,15 @@
<pageTitle>Space Quest XII</pageTitle>
<pageIdAction>4</pageIdAction>
+
<pageId>91</pageId>
- <interactionPosition>1</interactionPosition>
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
+ <interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>goal</type>
@@ -3498,12 +3910,15 @@
<pageTitle />
<pageIdAction>12</pageIdAction>
+
<pageId>92</pageId>
- <interactionPosition />
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
+ <interactionPosition />
<icon>plugins/Morpheus/images/download.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>outlink</type>
@@ -3511,26 +3926,32 @@
<pageTitle />
<pageIdAction>13</pageIdAction>
+
<pageId>93</pageId>
- <interactionPosition />
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/link.gif</icon>
+ <interactionPosition />
+ <icon>plugins/Morpheus/images/link.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://piwik.net/space/quest/iv</url>
<pageIdAction>8</pageIdAction>
+
<pageId>94</pageId>
<eventCategory>Cat1</eventCategory>
<eventAction>Action1</eventAction>
- <eventName>Name1</eventName>
- <eventValue>346.678</eventValue>
+ <bandwidth />
<interactionPosition />
- <icon>plugins/Morpheus/images/event.png</icon>
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Name1</eventName>
+ <eventValue>346.678</eventValue>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>2</goalConversions>
@@ -3540,13 +3961,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returningCustomer</visitorType>
- <visitorTypeIcon>plugins/Live/images/returningVisitor.gif</visitorTypeIcon>
+ <visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>5</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>100</daysSinceFirstVisit>
@@ -3582,6 +4008,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>1</events>
<continent>Asia</continent>
<continentCode>asi</continentCode>
@@ -3608,9 +4040,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -3619,11 +4055,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
</row>
<row>
<idSite>1</idSite>
@@ -3648,7 +4079,12 @@
<pageTitle>It's &lt;script&gt; pitch black...</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>7</pageId>
+ <bandwidth />
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName2>Cvar 2 PAGE name</customVariablePageName2>
@@ -3659,9 +4095,7 @@
<customVariablePageValue5>Cvar5 PAGE value is 1</customVariablePageValue5>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -3671,13 +4105,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returningCustomer</visitorType>
- <visitorTypeIcon>plugins/Live/images/returningVisitor.gif</visitorTypeIcon>
+ <visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>5</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>101</daysSinceFirstVisit>
@@ -3713,6 +4152,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -3739,9 +4184,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -3750,11 +4199,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
</row>
<row>
<idSite>1</idSite>
@@ -3779,7 +4223,12 @@
<pageTitle>It's &lt;script&gt; pitch black...</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>57</pageId>
+ <bandwidth />
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName2>Cvar 2 PAGE name</customVariablePageName2>
@@ -3790,9 +4239,7 @@
<customVariablePageValue5>Cvar5 PAGE value is 1</customVariablePageValue5>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -3802,13 +4249,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returningCustomer</visitorType>
- <visitorTypeIcon>plugins/Live/images/returningVisitor.gif</visitorTypeIcon>
+ <visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>5</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>101</daysSinceFirstVisit>
@@ -3844,6 +4296,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/AN.png</browserIcon>
<browserCode>AN</browserCode>
<browserVersion />
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>North America</continent>
<continentCode>amn</continentCode>
@@ -3870,9 +4328,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -3881,11 +4343,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
</row>
<row>
<idSite>1</idSite>
@@ -3910,7 +4367,12 @@
<pageTitle>It's &lt;script&gt; pitch black...</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>68</pageId>
+ <bandwidth />
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName2>Cvar 2 PAGE name</customVariablePageName2>
@@ -3921,9 +4383,7 @@
<customVariablePageValue5>Cvar5 PAGE value is 1</customVariablePageValue5>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -3933,13 +4393,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returningCustomer</visitorType>
- <visitorTypeIcon>plugins/Live/images/returningVisitor.gif</visitorTypeIcon>
+ <visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>5</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>101</daysSinceFirstVisit>
@@ -3975,6 +4440,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/IE.png</browserIcon>
<browserCode>IE</browserCode>
<browserVersion>8.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>North America</continent>
<continentCode>amn</continentCode>
@@ -4001,9 +4472,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -4012,11 +4487,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
</row>
<row>
<idSite>1</idSite>
@@ -4041,7 +4511,12 @@
<pageTitle>It's &lt;script&gt; pitch black...</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>90</pageId>
+ <bandwidth />
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName2>Cvar 2 PAGE name</customVariablePageName2>
@@ -4052,9 +4527,7 @@
<customVariablePageValue5>Cvar5 PAGE value is 1</customVariablePageValue5>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -4064,13 +4537,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returningCustomer</visitorType>
- <visitorTypeIcon>plugins/Live/images/returningVisitor.gif</visitorTypeIcon>
+ <visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>5</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>101</daysSinceFirstVisit>
@@ -4106,6 +4584,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Asia</continent>
<continentCode>asi</continentCode>
@@ -4132,9 +4616,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -4143,11 +4631,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
</row>
<row>
<idSite>1</idSite>
@@ -4161,12 +4644,15 @@
<pageTitle>Space Quest XII</pageTitle>
<pageIdAction>4</pageIdAction>
+
<pageId>2</pageId>
- <interactionPosition>1</interactionPosition>
+ <bandwidth />
<timeSpent>360</timeSpent>
<timeSpentPretty>6 min 0s</timeSpentPretty>
+ <interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>goal</type>
@@ -4184,19 +4670,22 @@
<url />
<pageIdAction />
+
<pageId>3</pageId>
+ <bandwidth />
+ <timeSpent>180</timeSpent>
+ <timeSpentPretty>3 min 0s</timeSpentPretty>
+ <siteSearchKeyword>Bring on the party</siteSearchKeyword>
+ <interactionPosition>2</interactionPosition>
+ <icon>plugins/Morpheus/images/search_ico.png</icon>
+
<customVariables>
<row>
<customVariablePageName4>Search Category</customVariablePageName4>
<customVariablePageValue4>CAT</customVariablePageValue4>
</row>
</customVariables>
- <siteSearchKeyword>Bring on the party</siteSearchKeyword>
- <interactionPosition>2</interactionPosition>
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/search_ico.png</icon>
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>goal</type>
@@ -4215,12 +4704,15 @@
<pageTitle />
<pageIdAction>6</pageIdAction>
+
<pageId>4</pageId>
- <interactionPosition />
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
+ <interactionPosition />
<icon>plugins/Morpheus/images/download.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>outlink</type>
@@ -4228,26 +4720,32 @@
<pageTitle />
<pageIdAction>7</pageIdAction>
+
<pageId>5</pageId>
- <interactionPosition />
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/link.gif</icon>
+ <interactionPosition />
+ <icon>plugins/Morpheus/images/link.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://piwik.net/space/quest/iv</url>
<pageIdAction>8</pageIdAction>
+
<pageId>6</pageId>
<eventCategory>Cat0</eventCategory>
<eventAction>Action0</eventAction>
- <eventName>Name0</eventName>
- <eventValue>345.678</eventValue>
+ <bandwidth />
<interactionPosition />
- <icon>plugins/Morpheus/images/event.png</icon>
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Name0</eventName>
+ <eventValue>345.678</eventValue>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>2</goalConversions>
@@ -4257,13 +4755,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returningCustomer</visitorType>
- <visitorTypeIcon>plugins/Live/images/returningVisitor.gif</visitorTypeIcon>
+ <visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>5</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>100</daysSinceFirstVisit>
@@ -4299,6 +4802,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>1</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -4325,9 +4834,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -4336,11 +4849,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
</row>
<row>
<idSite>1</idSite>
@@ -4354,12 +4862,15 @@
<pageTitle>Space Quest XII</pageTitle>
<pageIdAction>4</pageIdAction>
+
<pageId>52</pageId>
- <interactionPosition>1</interactionPosition>
+ <bandwidth />
<timeSpent>360</timeSpent>
<timeSpentPretty>6 min 0s</timeSpentPretty>
+ <interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>goal</type>
@@ -4377,19 +4888,22 @@
<url />
<pageIdAction />
+
<pageId>53</pageId>
+ <bandwidth />
+ <timeSpent>180</timeSpent>
+ <timeSpentPretty>3 min 0s</timeSpentPretty>
+ <siteSearchKeyword>Bring on the party</siteSearchKeyword>
+ <interactionPosition>2</interactionPosition>
+ <icon>plugins/Morpheus/images/search_ico.png</icon>
+
<customVariables>
<row>
<customVariablePageName4>Search Category</customVariablePageName4>
<customVariablePageValue4>CAT</customVariablePageValue4>
</row>
</customVariables>
- <siteSearchKeyword>Bring on the party</siteSearchKeyword>
- <interactionPosition>2</interactionPosition>
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/search_ico.png</icon>
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>goal</type>
@@ -4408,12 +4922,15 @@
<pageTitle />
<pageIdAction>6</pageIdAction>
+
<pageId>54</pageId>
- <interactionPosition />
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
+ <interactionPosition />
<icon>plugins/Morpheus/images/download.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>outlink</type>
@@ -4421,26 +4938,32 @@
<pageTitle />
<pageIdAction>7</pageIdAction>
+
<pageId>55</pageId>
- <interactionPosition />
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/link.gif</icon>
+ <interactionPosition />
+ <icon>plugins/Morpheus/images/link.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://piwik.net/space/quest/iv</url>
<pageIdAction>8</pageIdAction>
+
<pageId>56</pageId>
<eventCategory>Cat0</eventCategory>
<eventAction>Action0</eventAction>
- <eventName>Name0</eventName>
- <eventValue>345.678</eventValue>
+ <bandwidth />
<interactionPosition />
- <icon>plugins/Morpheus/images/event.png</icon>
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Name0</eventName>
+ <eventValue>345.678</eventValue>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>2</goalConversions>
@@ -4450,13 +4973,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returningCustomer</visitorType>
- <visitorTypeIcon>plugins/Live/images/returningVisitor.gif</visitorTypeIcon>
+ <visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>5</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>100</daysSinceFirstVisit>
@@ -4492,6 +5020,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/CM.png</browserIcon>
<browserCode>CM</browserCode>
<browserVersion>33.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>1</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -4518,9 +5052,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -4529,11 +5067,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
</row>
<row>
<idSite>1</idSite>
@@ -4547,12 +5080,15 @@
<pageTitle>Space Quest XII</pageTitle>
<pageIdAction>4</pageIdAction>
+
<pageId>63</pageId>
- <interactionPosition>1</interactionPosition>
+ <bandwidth />
<timeSpent>360</timeSpent>
<timeSpentPretty>6 min 0s</timeSpentPretty>
+ <interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>goal</type>
@@ -4570,19 +5106,22 @@
<url />
<pageIdAction />
+
<pageId>64</pageId>
+ <bandwidth />
+ <timeSpent>180</timeSpent>
+ <timeSpentPretty>3 min 0s</timeSpentPretty>
+ <siteSearchKeyword>Bring on the party</siteSearchKeyword>
+ <interactionPosition>2</interactionPosition>
+ <icon>plugins/Morpheus/images/search_ico.png</icon>
+
<customVariables>
<row>
<customVariablePageName4>Search Category</customVariablePageName4>
<customVariablePageValue4>CAT</customVariablePageValue4>
</row>
</customVariables>
- <siteSearchKeyword>Bring on the party</siteSearchKeyword>
- <interactionPosition>2</interactionPosition>
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/search_ico.png</icon>
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>goal</type>
@@ -4601,12 +5140,15 @@
<pageTitle />
<pageIdAction>6</pageIdAction>
+
<pageId>65</pageId>
- <interactionPosition />
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
+ <interactionPosition />
<icon>plugins/Morpheus/images/download.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>outlink</type>
@@ -4614,26 +5156,32 @@
<pageTitle />
<pageIdAction>7</pageIdAction>
+
<pageId>66</pageId>
- <interactionPosition />
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/link.gif</icon>
+ <interactionPosition />
+ <icon>plugins/Morpheus/images/link.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://piwik.net/space/quest/iv</url>
<pageIdAction>8</pageIdAction>
+
<pageId>67</pageId>
<eventCategory>Cat0</eventCategory>
<eventAction>Action0</eventAction>
- <eventName>Name0</eventName>
- <eventValue>345.678</eventValue>
+ <bandwidth />
<interactionPosition />
- <icon>plugins/Morpheus/images/event.png</icon>
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Name0</eventName>
+ <eventValue>345.678</eventValue>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>2</goalConversions>
@@ -4643,13 +5191,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returningCustomer</visitorType>
- <visitorTypeIcon>plugins/Live/images/returningVisitor.gif</visitorTypeIcon>
+ <visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>5</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>100</daysSinceFirstVisit>
@@ -4669,22 +5222,28 @@
<referrerSearchEngineIcon />
<languageCode />
<language>Unknown</language>
- <deviceType>Unknown</deviceType>
- <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/unknown.png</deviceTypeIcon>
+ <deviceType>Desktop</deviceType>
+ <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/desktop.png</deviceTypeIcon>
<deviceBrand>Unknown</deviceBrand>
<deviceModel />
- <operatingSystem>Unknown</operatingSystem>
- <operatingSystemName>Unknown</operatingSystemName>
- <operatingSystemIcon>plugins/Morpheus/icons/dist/os/UNK.png</operatingSystemIcon>
- <operatingSystemCode>UNK</operatingSystemCode>
- <operatingSystemVersion>UNK</operatingSystemVersion>
- <browserFamily />
- <browserFamilyDescription>Unknown</browserFamilyDescription>
- <browser>Unknown</browser>
- <browserName>Unknown</browserName>
- <browserIcon>plugins/Morpheus/icons/dist/browsers/UNK.png</browserIcon>
- <browserCode>UNK</browserCode>
- <browserVersion />
+ <operatingSystem>Windows 8.1</operatingSystem>
+ <operatingSystemName>Windows</operatingSystemName>
+ <operatingSystemIcon>plugins/Morpheus/icons/dist/os/WIN.png</operatingSystemIcon>
+ <operatingSystemCode>WIN</operatingSystemCode>
+ <operatingSystemVersion>8.1</operatingSystemVersion>
+ <browserFamily>Blink</browserFamily>
+ <browserFamilyDescription>Blink (Chrome, Opera)</browserFamilyDescription>
+ <browser>Chrome 32.0</browser>
+ <browserName>Chrome</browserName>
+ <browserIcon>plugins/Morpheus/icons/dist/browsers/CH.png</browserIcon>
+ <browserCode>CH</browserCode>
+ <browserVersion>32.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>1</events>
<continent>North America</continent>
<continentCode>amn</continentCode>
@@ -4703,9 +5262,13 @@
<customVariables>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -4714,11 +5277,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
</row>
<row>
<idSite>1</idSite>
@@ -4732,12 +5290,15 @@
<pageTitle>Space Quest XII</pageTitle>
<pageIdAction>4</pageIdAction>
+
<pageId>85</pageId>
- <interactionPosition>1</interactionPosition>
+ <bandwidth />
<timeSpent>360</timeSpent>
<timeSpentPretty>6 min 0s</timeSpentPretty>
+ <interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>goal</type>
@@ -4755,19 +5316,22 @@
<url />
<pageIdAction />
+
<pageId>86</pageId>
+ <bandwidth />
+ <timeSpent>180</timeSpent>
+ <timeSpentPretty>3 min 0s</timeSpentPretty>
+ <siteSearchKeyword>Bring on the party</siteSearchKeyword>
+ <interactionPosition>2</interactionPosition>
+ <icon>plugins/Morpheus/images/search_ico.png</icon>
+
<customVariables>
<row>
<customVariablePageName4>Search Category</customVariablePageName4>
<customVariablePageValue4>CAT</customVariablePageValue4>
</row>
</customVariables>
- <siteSearchKeyword>Bring on the party</siteSearchKeyword>
- <interactionPosition>2</interactionPosition>
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/search_ico.png</icon>
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>goal</type>
@@ -4786,12 +5350,15 @@
<pageTitle />
<pageIdAction>6</pageIdAction>
+
<pageId>87</pageId>
- <interactionPosition />
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
+ <interactionPosition />
<icon>plugins/Morpheus/images/download.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>outlink</type>
@@ -4799,26 +5366,32 @@
<pageTitle />
<pageIdAction>7</pageIdAction>
+
<pageId>88</pageId>
- <interactionPosition />
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/link.gif</icon>
+ <interactionPosition />
+ <icon>plugins/Morpheus/images/link.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://piwik.net/space/quest/iv</url>
<pageIdAction>8</pageIdAction>
+
<pageId>89</pageId>
<eventCategory>Cat0</eventCategory>
<eventAction>Action0</eventAction>
- <eventName>Name0</eventName>
- <eventValue>345.678</eventValue>
+ <bandwidth />
<interactionPosition />
- <icon>plugins/Morpheus/images/event.png</icon>
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Name0</eventName>
+ <eventValue>345.678</eventValue>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>2</goalConversions>
@@ -4828,13 +5401,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returningCustomer</visitorType>
- <visitorTypeIcon>plugins/Live/images/returningVisitor.gif</visitorTypeIcon>
+ <visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>5</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>100</daysSinceFirstVisit>
@@ -4855,7 +5433,7 @@
<languageCode>fr</languageCode>
<language>French</language>
<deviceType>Phablet</deviceType>
- <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/unknown.png</deviceTypeIcon>
+ <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/phablet.png</deviceTypeIcon>
<deviceBrand>Samsung</deviceBrand>
<deviceModel>GALAXY Note 3</deviceModel>
<operatingSystem>Android 4.3</operatingSystem>
@@ -4870,6 +5448,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/QQ.png</browserIcon>
<browserCode>QQ</browserCode>
<browserVersion>5.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>1</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -4896,9 +5480,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -4907,11 +5495,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
</row>
<row>
<idSite>1</idSite>
@@ -4936,7 +5519,12 @@
<pageTitle>It's &lt;script&gt; pitch black...</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>1</pageId>
+ <bandwidth />
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName2>Cvar 2 PAGE name</customVariablePageName2>
@@ -4947,9 +5535,7 @@
<customVariablePageValue5>Cvar5 PAGE value is 0</customVariablePageValue5>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -4959,13 +5545,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -5001,6 +5592,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -5027,9 +5624,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -5038,11 +5639,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
</row>
<row>
<idSite>1</idSite>
@@ -5067,7 +5663,12 @@
<pageTitle>It's &lt;script&gt; pitch black...</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>51</pageId>
+ <bandwidth />
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName2>Cvar 2 PAGE name</customVariablePageName2>
@@ -5078,9 +5679,7 @@
<customVariablePageValue5>Cvar5 PAGE value is 0</customVariablePageValue5>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -5090,13 +5689,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -5132,6 +5736,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/CM.png</browserIcon>
<browserCode>CM</browserCode>
<browserVersion>33.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -5158,9 +5768,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -5169,11 +5783,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
</row>
<row>
<idSite>1</idSite>
@@ -5198,7 +5807,12 @@
<pageTitle>It's &lt;script&gt; pitch black...</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>62</pageId>
+ <bandwidth />
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName2>Cvar 2 PAGE name</customVariablePageName2>
@@ -5209,9 +5823,7 @@
<customVariablePageValue5>Cvar5 PAGE value is 0</customVariablePageValue5>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -5221,13 +5833,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -5263,6 +5880,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/CH.png</browserIcon>
<browserCode>CH</browserCode>
<browserVersion>32.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>North America</continent>
<continentCode>amn</continentCode>
@@ -5289,9 +5912,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -5300,11 +5927,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
</row>
<row>
<idSite>1</idSite>
@@ -5329,7 +5951,12 @@
<pageTitle>It's &lt;script&gt; pitch black...</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>84</pageId>
+ <bandwidth />
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName2>Cvar 2 PAGE name</customVariablePageName2>
@@ -5340,9 +5967,7 @@
<customVariablePageValue5>Cvar5 PAGE value is 0</customVariablePageValue5>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -5352,13 +5977,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -5379,7 +6009,7 @@
<languageCode>fr</languageCode>
<language>French</language>
<deviceType>Phablet</deviceType>
- <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/unknown.png</deviceTypeIcon>
+ <deviceTypeIcon>plugins/Morpheus/icons/dist/devices/phablet.png</deviceTypeIcon>
<deviceBrand>Samsung</deviceBrand>
<deviceModel>GALAXY Note 3</deviceModel>
<operatingSystem>Android 4.3</operatingSystem>
@@ -5394,6 +6024,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/QQ.png</browserIcon>
<browserCode>QQ</browserCode>
<browserVersion>5.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -5420,9 +6056,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -5431,10 +6071,5 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
</row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_AutoSuggestAPITest_browserCode__API.getSuggestedValuesForSegment.xml b/tests/PHPUnit/System/expected/test_AutoSuggestAPITest_browserCode__API.getSuggestedValuesForSegment.xml
index 2479501ff3..43031de55b 100644
--- a/tests/PHPUnit/System/expected/test_AutoSuggestAPITest_browserCode__API.getSuggestedValuesForSegment.xml
+++ b/tests/PHPUnit/System/expected/test_AutoSuggestAPITest_browserCode__API.getSuggestedValuesForSegment.xml
@@ -1,11 +1,10 @@
<?xml version="1.0" encoding="utf-8" ?>
<result>
<row>FF</row>
- <row>UNK</row>
- <row>CM</row>
- <row>QQ</row>
- <row>AN</row>
<row>CH</row>
<row>IE</row>
+ <row>QQ</row>
+ <row>CM</row>
+ <row>AN</row>
<row>SF</row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_AutoSuggestAPITest_browserVersion__API.getSuggestedValuesForSegment.xml b/tests/PHPUnit/System/expected/test_AutoSuggestAPITest_browserVersion__API.getSuggestedValuesForSegment.xml
index c3c7ec0152..91740cd18d 100644
--- a/tests/PHPUnit/System/expected/test_AutoSuggestAPITest_browserVersion__API.getSuggestedValuesForSegment.xml
+++ b/tests/PHPUnit/System/expected/test_AutoSuggestAPITest_browserVersion__API.getSuggestedValuesForSegment.xml
@@ -1,11 +1,11 @@
<?xml version="1.0" encoding="utf-8" ?>
<result>
<row>3.6</row>
- <row>33</row>
- <row>5</row>
- <row>3</row>
<row>32</row>
+ <row>5</row>
+ <row>33</row>
+ <row>8</row>
<row>34</row>
<row>11</row>
- <row>8</row>
+ <row>3</row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_AutoSuggestAPITest_countryCode__API.getSuggestedValuesForSegment.xml b/tests/PHPUnit/System/expected/test_AutoSuggestAPITest_countryCode__API.getSuggestedValuesForSegment.xml
index 84baa921c6..57ad401634 100644
--- a/tests/PHPUnit/System/expected/test_AutoSuggestAPITest_countryCode__API.getSuggestedValuesForSegment.xml
+++ b/tests/PHPUnit/System/expected/test_AutoSuggestAPITest_countryCode__API.getSuggestedValuesForSegment.xml
@@ -7,7 +7,7 @@
<row>it</row>
<row>fr</row>
<row>id</row>
- <row>ti</row>
+ <row>cn</row>
<row>mk</row>
<row>xx</row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_AutoSuggestAPITest_deviceBrand__API.getSuggestedValuesForSegment.xml b/tests/PHPUnit/System/expected/test_AutoSuggestAPITest_deviceBrand__API.getSuggestedValuesForSegment.xml
index e421ad0903..6929bcb5c1 100644
--- a/tests/PHPUnit/System/expected/test_AutoSuggestAPITest_deviceBrand__API.getSuggestedValuesForSegment.xml
+++ b/tests/PHPUnit/System/expected/test_AutoSuggestAPITest_deviceBrand__API.getSuggestedValuesForSegment.xml
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8" ?>
<result>
<row>Unknown</row>
- <row>HTC</row>
<row>Samsung</row>
<row>Google</row>
<row>Dell</row>
<row>Sony</row>
+ <row>HTC</row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_AutoSuggestAPITest_deviceBrand__VisitsSummary.get_range.xml b/tests/PHPUnit/System/expected/test_AutoSuggestAPITest_deviceBrand__VisitsSummary.get_range.xml
index 828ec1e21b..e5851e11e6 100644
--- a/tests/PHPUnit/System/expected/test_AutoSuggestAPITest_deviceBrand__VisitsSummary.get_range.xml
+++ b/tests/PHPUnit/System/expected/test_AutoSuggestAPITest_deviceBrand__VisitsSummary.get_range.xml
@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="utf-8" ?>
<result>
- <nb_visits>27</nb_visits>
- <nb_actions>76</nb_actions>
- <nb_visits_converted>27</nb_visits_converted>
+ <nb_visits>25</nb_visits>
+ <nb_actions>67</nb_actions>
+ <nb_visits_converted>25</nb_visits_converted>
<bounce_count>13</bounce_count>
- <sum_visit_length>22694</sum_visit_length>
+ <sum_visit_length>19452</sum_visit_length>
<max_actions>5</max_actions>
- <bounce_rate>48%</bounce_rate>
- <nb_actions_per_visit>2.8</nb_actions_per_visit>
- <avg_time_on_site>841</avg_time_on_site>
+ <bounce_rate>52%</bounce_rate>
+ <nb_actions_per_visit>2.7</nb_actions_per_visit>
+ <avg_time_on_site>778</avg_time_on_site>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_AutoSuggestAPITest_deviceType__VisitsSummary.get_range.xml b/tests/PHPUnit/System/expected/test_AutoSuggestAPITest_deviceType__VisitsSummary.get_range.xml
index 3ce6d98183..602805c283 100644
--- a/tests/PHPUnit/System/expected/test_AutoSuggestAPITest_deviceType__VisitsSummary.get_range.xml
+++ b/tests/PHPUnit/System/expected/test_AutoSuggestAPITest_deviceType__VisitsSummary.get_range.xml
@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="utf-8" ?>
<result>
- <nb_visits>28</nb_visits>
- <nb_actions>74</nb_actions>
- <nb_visits_converted>28</nb_visits_converted>
- <bounce_count>15</bounce_count>
+ <nb_visits>27</nb_visits>
+ <nb_actions>73</nb_actions>
+ <nb_visits_converted>27</nb_visits_converted>
+ <bounce_count>14</bounce_count>
<sum_visit_length>21073</sum_visit_length>
<max_actions>5</max_actions>
- <bounce_rate>54%</bounce_rate>
- <nb_actions_per_visit>2.6</nb_actions_per_visit>
- <avg_time_on_site>753</avg_time_on_site>
+ <bounce_rate>52%</bounce_rate>
+ <nb_actions_per_visit>2.7</nb_actions_per_visit>
+ <avg_time_on_site>780</avg_time_on_site>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_AutoSuggestAPITest_operatingSystemCode__API.getSuggestedValuesForSegment.xml b/tests/PHPUnit/System/expected/test_AutoSuggestAPITest_operatingSystemCode__API.getSuggestedValuesForSegment.xml
index 90e7df368b..c79c69b966 100644
--- a/tests/PHPUnit/System/expected/test_AutoSuggestAPITest_operatingSystemCode__API.getSuggestedValuesForSegment.xml
+++ b/tests/PHPUnit/System/expected/test_AutoSuggestAPITest_operatingSystemCode__API.getSuggestedValuesForSegment.xml
@@ -2,7 +2,6 @@
<result>
<row>WIN</row>
<row>AND</row>
- <row>UNK</row>
<row>UBT</row>
<row>MLD</row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_AutoSuggestAPITest_operatingSystemCode__VisitsSummary.get_range.xml b/tests/PHPUnit/System/expected/test_AutoSuggestAPITest_operatingSystemCode__VisitsSummary.get_range.xml
index fc9d2e2c5a..a2651f3ccd 100644
--- a/tests/PHPUnit/System/expected/test_AutoSuggestAPITest_operatingSystemCode__VisitsSummary.get_range.xml
+++ b/tests/PHPUnit/System/expected/test_AutoSuggestAPITest_operatingSystemCode__VisitsSummary.get_range.xml
@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="utf-8" ?>
<result>
- <nb_visits>22</nb_visits>
- <nb_actions>54</nb_actions>
- <nb_visits_converted>22</nb_visits_converted>
+ <nb_visits>25</nb_visits>
+ <nb_actions>68</nb_actions>
+ <nb_visits_converted>25</nb_visits_converted>
<bounce_count>13</bounce_count>
- <sum_visit_length>14589</sum_visit_length>
+ <sum_visit_length>19452</sum_visit_length>
<max_actions>5</max_actions>
- <bounce_rate>59%</bounce_rate>
- <nb_actions_per_visit>2.5</nb_actions_per_visit>
- <avg_time_on_site>663</avg_time_on_site>
+ <bounce_rate>52%</bounce_rate>
+ <nb_actions_per_visit>2.7</nb_actions_per_visit>
+ <avg_time_on_site>778</avg_time_on_site>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_AutoSuggestAPITest_operatingSystemVersion__API.getSuggestedValuesForSegment.xml b/tests/PHPUnit/System/expected/test_AutoSuggestAPITest_operatingSystemVersion__API.getSuggestedValuesForSegment.xml
index efcc22ca70..4d86f11bfd 100644
--- a/tests/PHPUnit/System/expected/test_AutoSuggestAPITest_operatingSystemVersion__API.getSuggestedValuesForSegment.xml
+++ b/tests/PHPUnit/System/expected/test_AutoSuggestAPITest_operatingSystemVersion__API.getSuggestedValuesForSegment.xml
@@ -1,13 +1,12 @@
<?xml version="1.0" encoding="utf-8" ?>
<result>
<row>XP</row>
- <row>UNK</row>
<row>4.4</row>
+ <row>8.1</row>
<row>4.3</row>
<row>9.04</row>
- <row>8</row>
- <row>8.1</row>
+ <row>Vista</row>
<row>4.1</row>
<row>7</row>
- <row>Vista</row>
+ <row>8</row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_AutoSuggestAPITest_regionCode__API.getSuggestedValuesForSegment.xml b/tests/PHPUnit/System/expected/test_AutoSuggestAPITest_regionCode__API.getSuggestedValuesForSegment.xml
index 68a8855109..9e28c098ed 100644
--- a/tests/PHPUnit/System/expected/test_AutoSuggestAPITest_regionCode__API.getSuggestedValuesForSegment.xml
+++ b/tests/PHPUnit/System/expected/test_AutoSuggestAPITest_regionCode__API.getSuggestedValuesForSegment.xml
@@ -5,7 +5,7 @@
<row>P3</row>
<row>A6</row>
<row>H9</row>
- <row>1</row>
+ <row>14</row>
<row>G5</row>
<row>CA</row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_CustomEvents__Live.getLastVisitsDetails_day.xml b/tests/PHPUnit/System/expected/test_CustomEvents__Live.getLastVisitsDetails_day.xml
index 5f77ec4ff9..10aac9415c 100644
--- a/tests/PHPUnit/System/expected/test_CustomEvents__Live.getLastVisitsDetails_day.xml
+++ b/tests/PHPUnit/System/expected/test_CustomEvents__Live.getLastVisitsDetails_day.xml
@@ -11,12 +11,15 @@
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
+
<pageId>22</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>Purchase</eventAction>
+ <bandwidth />
<interactionPosition />
- <icon>plugins/Morpheus/images/event.png</icon>
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -26,13 +29,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -68,6 +76,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>1</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -90,9 +104,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -101,17 +119,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -124,12 +131,15 @@
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
+
<pageId>21</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>Search</eventAction>
+ <bandwidth />
<interactionPosition />
- <icon>plugins/Morpheus/images/event.png</icon>
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -139,13 +149,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -181,6 +196,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>1</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -203,9 +224,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -214,17 +239,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -237,90 +251,108 @@
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
+
<pageId>17</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>play50%</eventAction>
- <eventName>Spirited Away (千と千尋の神隠し)</eventName>
- <interactionPosition />
+ <bandwidth />
<timeSpent>1320</timeSpent>
<timeSpentPretty>22 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/event.png</icon>
+ <interactionPosition />
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Spirited Away (千と千尋の神隠し)</eventName>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
+
<pageId>18</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>play75%</eventAction>
- <eventName>Spirited Away (千と千尋の神隠し)</eventName>
- <interactionPosition />
+ <bandwidth />
<timeSpent>420</timeSpent>
<timeSpentPretty>7 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/event.png</icon>
+ <interactionPosition />
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Spirited Away (千と千尋の神隠し)</eventName>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
+
<pageId>20</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>Search</eventAction>
- <eventName>Search query here</eventName>
- <interactionPosition />
+ <bandwidth />
<timeSpent>900</timeSpent>
<timeSpentPretty>15 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/event.png</icon>
+ <interactionPosition />
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Search query here</eventName>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
+
<pageId>23</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>playEnd</eventAction>
- <eventName>Spirited Away (千と千尋の神隠し)</eventName>
- <interactionPosition />
+ <bandwidth />
<timeSpent>120</timeSpent>
<timeSpentPretty>2 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/event.png</icon>
+ <interactionPosition />
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Spirited Away (千と千尋の神隠し)</eventName>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url />
<pageIdAction />
+
<pageId>24</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>rating</eventAction>
- <eventName>Spirited Away (千と千尋の神隠し)</eventName>
- <eventValue>9.66</eventValue>
- <interactionPosition />
+ <bandwidth />
<timeSpent>720</timeSpent>
<timeSpentPretty>12 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/event.png</icon>
+ <interactionPosition />
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Spirited Away (千と千尋の神隠し)</eventName>
+ <eventValue>9.66</eventValue>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://example.org/finishedMovie</url>
<pageIdAction>27</pageIdAction>
+
<pageId>25</pageId>
<eventCategory>event category Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long ---&gt; SHOULD APPEAR IN TEST OUTPUT NOT TRUNCATED &lt;---</eventCategory>
<eventAction>event action Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long ---&gt; SHOULD APPEAR IN TEST OUTPUT NOT TRUNCATED &lt;---</eventAction>
- <eventName>event name Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long ---&gt; SHOULD APPEAR IN TEST OUTPUT NOT TRUNCATED &lt;---</eventName>
- <eventValue>9.66</eventValue>
+ <bandwidth />
<interactionPosition />
- <icon>plugins/Morpheus/images/event.png</icon>
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>event name Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long ---&gt; SHOULD APPEAR IN TEST OUTPUT NOT TRUNCATED &lt;---</eventName>
+ <eventValue>9.66</eventValue>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -330,13 +362,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -372,6 +409,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>6</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -394,9 +437,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -405,17 +452,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -428,12 +464,15 @@
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
+
<pageId>19</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>Search</eventAction>
+ <bandwidth />
<interactionPosition />
- <icon>plugins/Morpheus/images/event.png</icon>
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -443,13 +482,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -485,6 +529,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>1</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -507,9 +557,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -518,17 +572,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -553,163 +596,187 @@
<pageTitle>Welcome!</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>1</pageId>
+ <bandwidth />
+ <timeSpent>60</timeSpent>
+ <timeSpentPretty>1 min 0s</timeSpentPretty>
<generationTimeMilliseconds>333</generationTimeMilliseconds>
<generationTime>0.33s</generationTime>
<interactionPosition>1</interactionPosition>
- <timeSpent>60</timeSpent>
- <timeSpentPretty>1 min 0s</timeSpentPretty>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://example.org/webradio</url>
<pageIdAction>3</pageIdAction>
+
<pageId>2</pageId>
<eventCategory>Music</eventCategory>
<eventAction>play</eventAction>
+ <bandwidth />
+ <timeSpent>60</timeSpent>
+ <timeSpentPretty>1 min 0s</timeSpentPretty>
+ <interactionPosition />
+
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>La fiancée de l'eau</eventName>
<customVariables>
<row>
<customVariablePageName1>Page Scope Custom var</customVariablePageName1>
<customVariablePageValue1>should not appear in events report</customVariablePageValue1>
</row>
</customVariables>
- <eventName>La fiancée de l'eau</eventName>
- <interactionPosition />
- <timeSpent>60</timeSpent>
- <timeSpentPretty>1 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/event.png</icon>
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://example.org/webradio</url>
<pageIdAction>3</pageIdAction>
+
<pageId>3</pageId>
<eventCategory>Music</eventCategory>
<eventAction>play25%</eventAction>
+ <bandwidth />
+ <timeSpent>60</timeSpent>
+ <timeSpentPretty>1 min 0s</timeSpentPretty>
+ <interactionPosition />
+
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>La fiancée de l'eau</eventName>
<customVariables>
<row>
<customVariablePageName1>Page Scope Custom var</customVariablePageName1>
<customVariablePageValue1>should not appear in events report</customVariablePageValue1>
</row>
</customVariables>
- <eventName>La fiancée de l'eau</eventName>
- <interactionPosition />
- <timeSpent>60</timeSpent>
- <timeSpentPretty>1 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/event.png</icon>
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://example.org/webradio</url>
<pageIdAction>3</pageIdAction>
+
<pageId>4</pageId>
<eventCategory>Music</eventCategory>
<eventAction>play50%</eventAction>
+ <bandwidth />
+ <timeSpent>60</timeSpent>
+ <timeSpentPretty>1 min 0s</timeSpentPretty>
+ <interactionPosition />
+
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>La fiancée de l'eau</eventName>
<customVariables>
<row>
<customVariablePageName1>Page Scope Custom var</customVariablePageName1>
<customVariablePageValue1>should not appear in events report</customVariablePageValue1>
</row>
</customVariables>
- <eventName>La fiancée de l'eau</eventName>
- <interactionPosition />
- <timeSpent>60</timeSpent>
- <timeSpentPretty>1 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/event.png</icon>
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://example.org/webradio</url>
<pageIdAction>3</pageIdAction>
+
<pageId>5</pageId>
<eventCategory>Music</eventCategory>
<eventAction>play75%</eventAction>
+ <bandwidth />
+ <timeSpent>30</timeSpent>
+ <timeSpentPretty>30s</timeSpentPretty>
+ <interactionPosition />
+
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>La fiancée de l'eau</eventName>
<customVariables>
<row>
<customVariablePageName1>Page Scope Custom var</customVariablePageName1>
<customVariablePageValue1>should not appear in events report</customVariablePageValue1>
</row>
</customVariables>
- <eventName>La fiancée de l'eau</eventName>
- <interactionPosition />
- <timeSpent>30</timeSpent>
- <timeSpentPretty>30s</timeSpentPretty>
- <icon>plugins/Morpheus/images/event.png</icon>
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://example.org/webradio</url>
<pageIdAction>3</pageIdAction>
+
<pageId>6</pageId>
<eventCategory>Music</eventCategory>
<eventAction>playEnd</eventAction>
+ <bandwidth />
+ <timeSpent>30</timeSpent>
+ <timeSpentPretty>30s</timeSpentPretty>
+ <interactionPosition />
+
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>La fiancée de l'eau</eventName>
<customVariables>
<row>
<customVariablePageName1>Page Scope Custom var</customVariablePageName1>
<customVariablePageValue1>should not appear in events report</customVariablePageValue1>
</row>
</customVariables>
- <eventName>La fiancée de l'eau</eventName>
- <interactionPosition />
- <timeSpent>30</timeSpent>
- <timeSpentPretty>30s</timeSpentPretty>
- <icon>plugins/Morpheus/images/event.png</icon>
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://example.org/webradio</url>
<pageIdAction>3</pageIdAction>
+
<pageId>7</pageId>
<eventCategory>Music</eventCategory>
<eventAction>rating</eventAction>
+ <bandwidth />
+ <timeSpent>1</timeSpent>
+ <timeSpentPretty>1s</timeSpentPretty>
+ <interactionPosition />
+
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>La fiancée de l'eau</eventName>
+ <eventValue>9</eventValue>
<customVariables>
<row>
<customVariablePageName1>Page Scope Custom var</customVariablePageName1>
<customVariablePageValue1>should not appear in events report</customVariablePageValue1>
</row>
</customVariables>
- <eventName>La fiancée de l'eau</eventName>
- <eventValue>9</eventValue>
- <interactionPosition />
- <timeSpent>1</timeSpent>
- <timeSpentPretty>1s</timeSpentPretty>
- <icon>plugins/Morpheus/images/event.png</icon>
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://example.org/webradio</url>
<pageIdAction>3</pageIdAction>
+
<pageId>8</pageId>
<eventCategory>Music</eventCategory>
<eventAction>rating</eventAction>
+ <bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
+ <interactionPosition />
+
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>La fiancée de l'eau</eventName>
+ <eventValue>10</eventValue>
<customVariables>
<row>
<customVariablePageName1>Page Scope Custom var</customVariablePageName1>
<customVariablePageValue1>should not appear in events report</customVariablePageValue1>
</row>
</customVariables>
- <eventName>La fiancée de l'eau</eventName>
- <eventValue>10</eventValue>
- <interactionPosition />
- <timeSpent>0</timeSpent>
- <timeSpentPretty>0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/event.png</icon>
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>goal</type>
@@ -727,14 +794,17 @@
<url />
<pageIdAction />
+
<pageId>9</pageId>
<eventCategory>CategoryTriggersGoal here</eventCategory>
<eventAction>This is an event without a URL</eventAction>
- <interactionPosition />
+ <bandwidth />
<timeSpent>1499</timeSpent>
<timeSpentPretty>24 min 59s</timeSpentPretty>
+ <interactionPosition />
<icon>plugins/Morpheus/images/event.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>action</type>
@@ -742,102 +812,123 @@
<pageTitle>Movie Theater</pageTitle>
<pageIdAction>15</pageIdAction>
+
<pageId>10</pageId>
+ <bandwidth />
+ <timeSpent>60</timeSpent>
+ <timeSpentPretty>1 min 0s</timeSpentPretty>
<generationTimeMilliseconds>666</generationTimeMilliseconds>
<generationTime>0.67s</generationTime>
<interactionPosition>2</interactionPosition>
- <timeSpent>60</timeSpent>
- <timeSpentPretty>1 min 0s</timeSpentPretty>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
+
<pageId>11</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>playTrailer</eventAction>
- <eventName>Princess Mononoke (もののけ姫)</eventName>
- <interactionPosition />
+ <bandwidth />
<timeSpent>120</timeSpent>
<timeSpentPretty>2 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/event.png</icon>
+ <interactionPosition />
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Princess Mononoke (もののけ姫)</eventName>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
+
<pageId>12</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>playTrailer</eventAction>
- <eventName>Ponyo (崖の上のポニョ)</eventName>
- <interactionPosition />
+ <bandwidth />
<timeSpent>120</timeSpent>
<timeSpentPretty>2 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/event.png</icon>
+ <interactionPosition />
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Ponyo (崖の上のポニョ)</eventName>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
+
<pageId>13</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>playTrailer</eventAction>
- <eventName>Spirited Away (千と千尋の神隠し)</eventName>
- <interactionPosition />
+ <bandwidth />
<timeSpent>60</timeSpent>
<timeSpentPretty>1 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/event.png</icon>
+ <interactionPosition />
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Spirited Away (千と千尋の神隠し)</eventName>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
+
<pageId>14</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>clickBuyNow</eventAction>
- <eventName>Spirited Away (千と千尋の神隠し)</eventName>
- <interactionPosition />
+ <bandwidth />
<timeSpent>120</timeSpent>
<timeSpentPretty>2 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/event.png</icon>
+ <interactionPosition />
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Spirited Away (千と千尋の神隠し)</eventName>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
+
<pageId>15</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>playStart</eventAction>
- <eventName>Spirited Away (千と千尋の神隠し)</eventName>
- <interactionPosition />
+ <bandwidth />
<timeSpent>1320</timeSpent>
<timeSpentPretty>22 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/event.png</icon>
+ <interactionPosition />
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Spirited Away (千と千尋の神隠し)</eventName>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
+
<pageId>16</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>play25%</eventAction>
- <eventName>Spirited Away (千と千尋の神隠し)</eventName>
+ <bandwidth />
<interactionPosition />
- <icon>plugins/Morpheus/images/event.png</icon>
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Spirited Away (千と千尋の神隠し)</eventName>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>2</goalConversions>
@@ -847,13 +938,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -889,6 +985,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>14</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -911,9 +1013,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -922,17 +1028,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -945,12 +1040,15 @@
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
+
<pageId>45</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>Purchase</eventAction>
+ <bandwidth />
<interactionPosition />
- <icon>plugins/Morpheus/images/event.png</icon>
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -960,13 +1058,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -1002,6 +1105,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>1</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -1024,24 +1133,17 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>director</plugins>
+ <plugins>cookie, director</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/director.png</pluginIcon>
<pluginName>director</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -1054,12 +1156,15 @@
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
+
<pageId>44</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>Search</eventAction>
+ <bandwidth />
<interactionPosition />
- <icon>plugins/Morpheus/images/event.png</icon>
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -1069,13 +1174,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -1111,6 +1221,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>1</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -1133,24 +1249,17 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>director</plugins>
+ <plugins>cookie, director</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/director.png</pluginIcon>
<pluginName>director</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -1163,90 +1272,108 @@
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
+
<pageId>40</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>play50%</eventAction>
- <eventName>Spirited Away (千と千尋の神隠し)</eventName>
- <interactionPosition />
+ <bandwidth />
<timeSpent>1320</timeSpent>
<timeSpentPretty>22 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/event.png</icon>
+ <interactionPosition />
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Spirited Away (千と千尋の神隠し)</eventName>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
+
<pageId>41</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>play75%</eventAction>
- <eventName>Spirited Away (千と千尋の神隠し)</eventName>
- <interactionPosition />
+ <bandwidth />
<timeSpent>420</timeSpent>
<timeSpentPretty>7 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/event.png</icon>
+ <interactionPosition />
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Spirited Away (千と千尋の神隠し)</eventName>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
+
<pageId>43</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>Search</eventAction>
- <eventName>Search query here</eventName>
- <interactionPosition />
+ <bandwidth />
<timeSpent>900</timeSpent>
<timeSpentPretty>15 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/event.png</icon>
+ <interactionPosition />
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Search query here</eventName>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
+
<pageId>46</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>playEnd</eventAction>
- <eventName>Spirited Away (千と千尋の神隠し)</eventName>
- <interactionPosition />
+ <bandwidth />
<timeSpent>120</timeSpent>
<timeSpentPretty>2 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/event.png</icon>
+ <interactionPosition />
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Spirited Away (千と千尋の神隠し)</eventName>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url />
<pageIdAction />
+
<pageId>47</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>rating</eventAction>
- <eventName>Spirited Away (千と千尋の神隠し)</eventName>
- <eventValue>9.66</eventValue>
- <interactionPosition />
+ <bandwidth />
<timeSpent>720</timeSpent>
<timeSpentPretty>12 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/event.png</icon>
+ <interactionPosition />
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Spirited Away (千と千尋の神隠し)</eventName>
+ <eventValue>9.66</eventValue>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://example.org/finishedMovie</url>
<pageIdAction>27</pageIdAction>
+
<pageId>48</pageId>
<eventCategory>event category Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long ---&gt; SHOULD APPEAR IN TEST OUTPUT NOT TRUNCATED &lt;---</eventCategory>
<eventAction>event action Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long ---&gt; SHOULD APPEAR IN TEST OUTPUT NOT TRUNCATED &lt;---</eventAction>
- <eventName>event name Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long ---&gt; SHOULD APPEAR IN TEST OUTPUT NOT TRUNCATED &lt;---</eventName>
- <eventValue>9.66</eventValue>
+ <bandwidth />
<interactionPosition />
- <icon>plugins/Morpheus/images/event.png</icon>
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>event name Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long ---&gt; SHOULD APPEAR IN TEST OUTPUT NOT TRUNCATED &lt;---</eventName>
+ <eventValue>9.66</eventValue>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -1256,13 +1383,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -1298,6 +1430,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>6</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -1320,24 +1458,17 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>director</plugins>
+ <plugins>cookie, director</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/director.png</pluginIcon>
<pluginName>director</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -1350,12 +1481,15 @@
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
+
<pageId>42</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>Search</eventAction>
+ <bandwidth />
<interactionPosition />
- <icon>plugins/Morpheus/images/event.png</icon>
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -1365,13 +1499,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -1407,6 +1546,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>1</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -1429,24 +1574,17 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>director</plugins>
+ <plugins>cookie, director</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/director.png</pluginIcon>
<pluginName>director</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -1459,149 +1597,170 @@
<url>http://example.com/piwik/</url>
<pageIdAction>31</pageIdAction>
+
<pageId>26</pageId>
<eventCategory>Music</eventCategory>
<eventAction>play</eventAction>
+ <bandwidth />
+ <timeSpent>60</timeSpent>
+ <timeSpentPretty>1 min 0s</timeSpentPretty>
+ <interactionPosition />
+
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>La fiancée de l'eau</eventName>
<customVariables>
<row>
<customVariablePageName1>Page Scope Custom var</customVariablePageName1>
<customVariablePageValue1>should not appear in events report</customVariablePageValue1>
</row>
</customVariables>
- <eventName>La fiancée de l'eau</eventName>
- <interactionPosition />
- <timeSpent>60</timeSpent>
- <timeSpentPretty>1 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/event.png</icon>
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://example.com/piwik/</url>
<pageIdAction>31</pageIdAction>
+
<pageId>27</pageId>
<eventCategory>Music</eventCategory>
<eventAction>play25%</eventAction>
+ <bandwidth />
+ <timeSpent>60</timeSpent>
+ <timeSpentPretty>1 min 0s</timeSpentPretty>
+ <interactionPosition />
+
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>La fiancée de l'eau</eventName>
<customVariables>
<row>
<customVariablePageName1>Page Scope Custom var</customVariablePageName1>
<customVariablePageValue1>should not appear in events report</customVariablePageValue1>
</row>
</customVariables>
- <eventName>La fiancée de l'eau</eventName>
- <interactionPosition />
- <timeSpent>60</timeSpent>
- <timeSpentPretty>1 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/event.png</icon>
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://example.com/piwik/</url>
<pageIdAction>31</pageIdAction>
+
<pageId>28</pageId>
<eventCategory>Music</eventCategory>
<eventAction>play50%</eventAction>
+ <bandwidth />
+ <timeSpent>60</timeSpent>
+ <timeSpentPretty>1 min 0s</timeSpentPretty>
+ <interactionPosition />
+
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>La fiancée de l'eau</eventName>
<customVariables>
<row>
<customVariablePageName1>Page Scope Custom var</customVariablePageName1>
<customVariablePageValue1>should not appear in events report</customVariablePageValue1>
</row>
</customVariables>
- <eventName>La fiancée de l'eau</eventName>
- <interactionPosition />
- <timeSpent>60</timeSpent>
- <timeSpentPretty>1 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/event.png</icon>
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://example.com/piwik/</url>
<pageIdAction>31</pageIdAction>
+
<pageId>29</pageId>
<eventCategory>Music</eventCategory>
<eventAction>play75%</eventAction>
+ <bandwidth />
+ <timeSpent>30</timeSpent>
+ <timeSpentPretty>30s</timeSpentPretty>
+ <interactionPosition />
+
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>La fiancée de l'eau</eventName>
<customVariables>
<row>
<customVariablePageName1>Page Scope Custom var</customVariablePageName1>
<customVariablePageValue1>should not appear in events report</customVariablePageValue1>
</row>
</customVariables>
- <eventName>La fiancée de l'eau</eventName>
- <interactionPosition />
- <timeSpent>30</timeSpent>
- <timeSpentPretty>30s</timeSpentPretty>
- <icon>plugins/Morpheus/images/event.png</icon>
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://example.com/piwik/</url>
<pageIdAction>31</pageIdAction>
+
<pageId>30</pageId>
<eventCategory>Music</eventCategory>
<eventAction>playEnd</eventAction>
+ <bandwidth />
+ <timeSpent>30</timeSpent>
+ <timeSpentPretty>30s</timeSpentPretty>
+ <interactionPosition />
+
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>La fiancée de l'eau</eventName>
<customVariables>
<row>
<customVariablePageName1>Page Scope Custom var</customVariablePageName1>
<customVariablePageValue1>should not appear in events report</customVariablePageValue1>
</row>
</customVariables>
- <eventName>La fiancée de l'eau</eventName>
- <interactionPosition />
- <timeSpent>30</timeSpent>
- <timeSpentPretty>30s</timeSpentPretty>
- <icon>plugins/Morpheus/images/event.png</icon>
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://example.com/piwik/</url>
<pageIdAction>31</pageIdAction>
+
<pageId>31</pageId>
<eventCategory>Music</eventCategory>
<eventAction>rating</eventAction>
+ <bandwidth />
+ <timeSpent>1</timeSpent>
+ <timeSpentPretty>1s</timeSpentPretty>
+ <interactionPosition />
+
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>La fiancée de l'eau</eventName>
+ <eventValue>9</eventValue>
<customVariables>
<row>
<customVariablePageName1>Page Scope Custom var</customVariablePageName1>
<customVariablePageValue1>should not appear in events report</customVariablePageValue1>
</row>
</customVariables>
- <eventName>La fiancée de l'eau</eventName>
- <eventValue>9</eventValue>
- <interactionPosition />
- <timeSpent>1</timeSpent>
- <timeSpentPretty>1s</timeSpentPretty>
- <icon>plugins/Morpheus/images/event.png</icon>
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://example.com/piwik/</url>
<pageIdAction>31</pageIdAction>
+
<pageId>32</pageId>
<eventCategory>Music</eventCategory>
<eventAction>rating</eventAction>
+ <bandwidth />
+ <timeSpent>1499</timeSpent>
+ <timeSpentPretty>24 min 59s</timeSpentPretty>
+ <interactionPosition />
+
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>La fiancée de l'eau</eventName>
+ <eventValue>10</eventValue>
<customVariables>
<row>
<customVariablePageName1>Page Scope Custom var</customVariablePageName1>
<customVariablePageValue1>should not appear in events report</customVariablePageValue1>
</row>
</customVariables>
- <eventName>La fiancée de l'eau</eventName>
- <eventValue>10</eventValue>
- <interactionPosition />
- <timeSpent>1499</timeSpent>
- <timeSpentPretty>24 min 59s</timeSpentPretty>
- <icon>plugins/Morpheus/images/event.png</icon>
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>action</type>
@@ -1609,102 +1768,123 @@
<pageTitle>Movie Theater</pageTitle>
<pageIdAction>15</pageIdAction>
+
<pageId>33</pageId>
+ <bandwidth />
+ <timeSpent>60</timeSpent>
+ <timeSpentPretty>1 min 0s</timeSpentPretty>
<generationTimeMilliseconds>666</generationTimeMilliseconds>
<generationTime>0.67s</generationTime>
<interactionPosition>1</interactionPosition>
- <timeSpent>60</timeSpent>
- <timeSpentPretty>1 min 0s</timeSpentPretty>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
+
<pageId>34</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>playTrailer</eventAction>
- <eventName>Princess Mononoke (もののけ姫)</eventName>
- <interactionPosition />
+ <bandwidth />
<timeSpent>120</timeSpent>
<timeSpentPretty>2 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/event.png</icon>
+ <interactionPosition />
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Princess Mononoke (もののけ姫)</eventName>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
+
<pageId>35</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>playTrailer</eventAction>
- <eventName>Ponyo (崖の上のポニョ)</eventName>
- <interactionPosition />
+ <bandwidth />
<timeSpent>120</timeSpent>
<timeSpentPretty>2 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/event.png</icon>
+ <interactionPosition />
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Ponyo (崖の上のポニョ)</eventName>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
+
<pageId>36</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>playTrailer</eventAction>
- <eventName>Spirited Away (千と千尋の神隠し)</eventName>
- <interactionPosition />
+ <bandwidth />
<timeSpent>60</timeSpent>
<timeSpentPretty>1 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/event.png</icon>
+ <interactionPosition />
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Spirited Away (千と千尋の神隠し)</eventName>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
+
<pageId>37</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>clickBuyNow</eventAction>
- <eventName>Spirited Away (千と千尋の神隠し)</eventName>
- <interactionPosition />
+ <bandwidth />
<timeSpent>120</timeSpent>
<timeSpentPretty>2 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/event.png</icon>
+ <interactionPosition />
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Spirited Away (千と千尋の神隠し)</eventName>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
+
<pageId>38</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>playStart</eventAction>
- <eventName>Spirited Away (千と千尋の神隠し)</eventName>
- <interactionPosition />
+ <bandwidth />
<timeSpent>1320</timeSpent>
<timeSpentPretty>22 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/event.png</icon>
+ <interactionPosition />
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Spirited Away (千と千尋の神隠し)</eventName>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
+
<pageId>39</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>play25%</eventAction>
- <eventName>Spirited Away (千と千尋の神隠し)</eventName>
+ <bandwidth />
<interactionPosition />
- <icon>plugins/Morpheus/images/event.png</icon>
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Spirited Away (千と千尋の神隠し)</eventName>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -1714,13 +1894,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -1756,6 +1941,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>13</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -1778,23 +1969,16 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>director</plugins>
+ <plugins>cookie, director</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/director.png</pluginIcon>
<pluginName>director</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_CustomEvents__Live.getLastVisitsDetails_month.xml b/tests/PHPUnit/System/expected/test_CustomEvents__Live.getLastVisitsDetails_month.xml
index 5dacd5cf62..eda32c0417 100644
--- a/tests/PHPUnit/System/expected/test_CustomEvents__Live.getLastVisitsDetails_month.xml
+++ b/tests/PHPUnit/System/expected/test_CustomEvents__Live.getLastVisitsDetails_month.xml
@@ -11,12 +11,15 @@
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
+
<pageId>68</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>Purchase</eventAction>
+ <bandwidth />
<interactionPosition />
- <icon>plugins/Morpheus/images/event.png</icon>
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -26,13 +29,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -68,6 +76,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>1</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -90,24 +104,17 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>director</plugins>
+ <plugins>cookie, director</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/director.png</pluginIcon>
<pluginName>director</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -120,12 +127,15 @@
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
+
<pageId>67</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>Search</eventAction>
+ <bandwidth />
<interactionPosition />
- <icon>plugins/Morpheus/images/event.png</icon>
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -135,13 +145,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -177,6 +192,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>1</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -199,24 +220,17 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>director</plugins>
+ <plugins>cookie, director</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/director.png</pluginIcon>
<pluginName>director</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -229,90 +243,108 @@
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
+
<pageId>63</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>play50%</eventAction>
- <eventName>Spirited Away (千と千尋の神隠し)</eventName>
- <interactionPosition />
+ <bandwidth />
<timeSpent>1320</timeSpent>
<timeSpentPretty>22 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/event.png</icon>
+ <interactionPosition />
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Spirited Away (千と千尋の神隠し)</eventName>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
+
<pageId>64</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>play75%</eventAction>
- <eventName>Spirited Away (千と千尋の神隠し)</eventName>
- <interactionPosition />
+ <bandwidth />
<timeSpent>420</timeSpent>
<timeSpentPretty>7 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/event.png</icon>
+ <interactionPosition />
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Spirited Away (千と千尋の神隠し)</eventName>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
+
<pageId>66</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>Search</eventAction>
- <eventName>Search query here</eventName>
- <interactionPosition />
+ <bandwidth />
<timeSpent>900</timeSpent>
<timeSpentPretty>15 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/event.png</icon>
+ <interactionPosition />
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Search query here</eventName>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
+
<pageId>69</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>playEnd</eventAction>
- <eventName>Spirited Away (千と千尋の神隠し)</eventName>
- <interactionPosition />
+ <bandwidth />
<timeSpent>120</timeSpent>
<timeSpentPretty>2 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/event.png</icon>
+ <interactionPosition />
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Spirited Away (千と千尋の神隠し)</eventName>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url />
<pageIdAction />
+
<pageId>70</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>rating</eventAction>
- <eventName>Spirited Away (千と千尋の神隠し)</eventName>
- <eventValue>9.66</eventValue>
- <interactionPosition />
+ <bandwidth />
<timeSpent>720</timeSpent>
<timeSpentPretty>12 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/event.png</icon>
+ <interactionPosition />
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Spirited Away (千と千尋の神隠し)</eventName>
+ <eventValue>9.66</eventValue>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://example.org/finishedMovie</url>
<pageIdAction>27</pageIdAction>
+
<pageId>71</pageId>
<eventCategory>event category Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long ---&gt; SHOULD APPEAR IN TEST OUTPUT NOT TRUNCATED &lt;---</eventCategory>
<eventAction>event action Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long ---&gt; SHOULD APPEAR IN TEST OUTPUT NOT TRUNCATED &lt;---</eventAction>
- <eventName>event name Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long ---&gt; SHOULD APPEAR IN TEST OUTPUT NOT TRUNCATED &lt;---</eventName>
- <eventValue>9.66</eventValue>
+ <bandwidth />
<interactionPosition />
- <icon>plugins/Morpheus/images/event.png</icon>
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>event name Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long ---&gt; SHOULD APPEAR IN TEST OUTPUT NOT TRUNCATED &lt;---</eventName>
+ <eventValue>9.66</eventValue>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -322,13 +354,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -364,6 +401,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>6</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -386,24 +429,17 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>director</plugins>
+ <plugins>cookie, director</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/director.png</pluginIcon>
<pluginName>director</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -416,12 +452,15 @@
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
+
<pageId>65</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>Search</eventAction>
+ <bandwidth />
<interactionPosition />
- <icon>plugins/Morpheus/images/event.png</icon>
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -431,13 +470,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -473,6 +517,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>1</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -495,24 +545,17 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>director</plugins>
+ <plugins>cookie, director</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/director.png</pluginIcon>
<pluginName>director</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -525,149 +568,170 @@
<url>http://example.com/piwik/</url>
<pageIdAction>31</pageIdAction>
+
<pageId>49</pageId>
<eventCategory>Music</eventCategory>
<eventAction>play</eventAction>
+ <bandwidth />
+ <timeSpent>60</timeSpent>
+ <timeSpentPretty>1 min 0s</timeSpentPretty>
+ <interactionPosition />
+
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>La fiancée de l'eau</eventName>
<customVariables>
<row>
<customVariablePageName1>Page Scope Custom var</customVariablePageName1>
<customVariablePageValue1>should not appear in events report</customVariablePageValue1>
</row>
</customVariables>
- <eventName>La fiancée de l'eau</eventName>
- <interactionPosition />
- <timeSpent>60</timeSpent>
- <timeSpentPretty>1 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/event.png</icon>
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://example.com/piwik/</url>
<pageIdAction>31</pageIdAction>
+
<pageId>50</pageId>
<eventCategory>Music</eventCategory>
<eventAction>play25%</eventAction>
+ <bandwidth />
+ <timeSpent>60</timeSpent>
+ <timeSpentPretty>1 min 0s</timeSpentPretty>
+ <interactionPosition />
+
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>La fiancée de l'eau</eventName>
<customVariables>
<row>
<customVariablePageName1>Page Scope Custom var</customVariablePageName1>
<customVariablePageValue1>should not appear in events report</customVariablePageValue1>
</row>
</customVariables>
- <eventName>La fiancée de l'eau</eventName>
- <interactionPosition />
- <timeSpent>60</timeSpent>
- <timeSpentPretty>1 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/event.png</icon>
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://example.com/piwik/</url>
<pageIdAction>31</pageIdAction>
+
<pageId>51</pageId>
<eventCategory>Music</eventCategory>
<eventAction>play50%</eventAction>
+ <bandwidth />
+ <timeSpent>60</timeSpent>
+ <timeSpentPretty>1 min 0s</timeSpentPretty>
+ <interactionPosition />
+
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>La fiancée de l'eau</eventName>
<customVariables>
<row>
<customVariablePageName1>Page Scope Custom var</customVariablePageName1>
<customVariablePageValue1>should not appear in events report</customVariablePageValue1>
</row>
</customVariables>
- <eventName>La fiancée de l'eau</eventName>
- <interactionPosition />
- <timeSpent>60</timeSpent>
- <timeSpentPretty>1 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/event.png</icon>
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://example.com/piwik/</url>
<pageIdAction>31</pageIdAction>
+
<pageId>52</pageId>
<eventCategory>Music</eventCategory>
<eventAction>play75%</eventAction>
+ <bandwidth />
+ <timeSpent>30</timeSpent>
+ <timeSpentPretty>30s</timeSpentPretty>
+ <interactionPosition />
+
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>La fiancée de l'eau</eventName>
<customVariables>
<row>
<customVariablePageName1>Page Scope Custom var</customVariablePageName1>
<customVariablePageValue1>should not appear in events report</customVariablePageValue1>
</row>
</customVariables>
- <eventName>La fiancée de l'eau</eventName>
- <interactionPosition />
- <timeSpent>30</timeSpent>
- <timeSpentPretty>30s</timeSpentPretty>
- <icon>plugins/Morpheus/images/event.png</icon>
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://example.com/piwik/</url>
<pageIdAction>31</pageIdAction>
+
<pageId>53</pageId>
<eventCategory>Music</eventCategory>
<eventAction>playEnd</eventAction>
+ <bandwidth />
+ <timeSpent>30</timeSpent>
+ <timeSpentPretty>30s</timeSpentPretty>
+ <interactionPosition />
+
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>La fiancée de l'eau</eventName>
<customVariables>
<row>
<customVariablePageName1>Page Scope Custom var</customVariablePageName1>
<customVariablePageValue1>should not appear in events report</customVariablePageValue1>
</row>
</customVariables>
- <eventName>La fiancée de l'eau</eventName>
- <interactionPosition />
- <timeSpent>30</timeSpent>
- <timeSpentPretty>30s</timeSpentPretty>
- <icon>plugins/Morpheus/images/event.png</icon>
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://example.com/piwik/</url>
<pageIdAction>31</pageIdAction>
+
<pageId>54</pageId>
<eventCategory>Music</eventCategory>
<eventAction>rating</eventAction>
+ <bandwidth />
+ <timeSpent>1</timeSpent>
+ <timeSpentPretty>1s</timeSpentPretty>
+ <interactionPosition />
+
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>La fiancée de l'eau</eventName>
+ <eventValue>9</eventValue>
<customVariables>
<row>
<customVariablePageName1>Page Scope Custom var</customVariablePageName1>
<customVariablePageValue1>should not appear in events report</customVariablePageValue1>
</row>
</customVariables>
- <eventName>La fiancée de l'eau</eventName>
- <eventValue>9</eventValue>
- <interactionPosition />
- <timeSpent>1</timeSpent>
- <timeSpentPretty>1s</timeSpentPretty>
- <icon>plugins/Morpheus/images/event.png</icon>
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://example.com/piwik/</url>
<pageIdAction>31</pageIdAction>
+
<pageId>55</pageId>
<eventCategory>Music</eventCategory>
<eventAction>rating</eventAction>
+ <bandwidth />
+ <timeSpent>1499</timeSpent>
+ <timeSpentPretty>24 min 59s</timeSpentPretty>
+ <interactionPosition />
+
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>La fiancée de l'eau</eventName>
+ <eventValue>10</eventValue>
<customVariables>
<row>
<customVariablePageName1>Page Scope Custom var</customVariablePageName1>
<customVariablePageValue1>should not appear in events report</customVariablePageValue1>
</row>
</customVariables>
- <eventName>La fiancée de l'eau</eventName>
- <eventValue>10</eventValue>
- <interactionPosition />
- <timeSpent>1499</timeSpent>
- <timeSpentPretty>24 min 59s</timeSpentPretty>
- <icon>plugins/Morpheus/images/event.png</icon>
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>action</type>
@@ -675,102 +739,123 @@
<pageTitle>Movie Theater</pageTitle>
<pageIdAction>15</pageIdAction>
+
<pageId>56</pageId>
+ <bandwidth />
+ <timeSpent>60</timeSpent>
+ <timeSpentPretty>1 min 0s</timeSpentPretty>
<generationTimeMilliseconds>666</generationTimeMilliseconds>
<generationTime>0.67s</generationTime>
<interactionPosition>1</interactionPosition>
- <timeSpent>60</timeSpent>
- <timeSpentPretty>1 min 0s</timeSpentPretty>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
+
<pageId>57</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>playTrailer</eventAction>
- <eventName>Princess Mononoke (もののけ姫)</eventName>
- <interactionPosition />
+ <bandwidth />
<timeSpent>120</timeSpent>
<timeSpentPretty>2 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/event.png</icon>
+ <interactionPosition />
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Princess Mononoke (もののけ姫)</eventName>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
+
<pageId>58</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>playTrailer</eventAction>
- <eventName>Ponyo (崖の上のポニョ)</eventName>
- <interactionPosition />
+ <bandwidth />
<timeSpent>120</timeSpent>
<timeSpentPretty>2 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/event.png</icon>
+ <interactionPosition />
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Ponyo (崖の上のポニョ)</eventName>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
+
<pageId>59</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>playTrailer</eventAction>
- <eventName>Spirited Away (千と千尋の神隠し)</eventName>
- <interactionPosition />
+ <bandwidth />
<timeSpent>60</timeSpent>
<timeSpentPretty>1 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/event.png</icon>
+ <interactionPosition />
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Spirited Away (千と千尋の神隠し)</eventName>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
+
<pageId>60</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>clickBuyNow</eventAction>
- <eventName>Spirited Away (千と千尋の神隠し)</eventName>
- <interactionPosition />
+ <bandwidth />
<timeSpent>120</timeSpent>
<timeSpentPretty>2 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/event.png</icon>
+ <interactionPosition />
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Spirited Away (千と千尋の神隠し)</eventName>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
+
<pageId>61</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>playStart</eventAction>
- <eventName>Spirited Away (千と千尋の神隠し)</eventName>
- <interactionPosition />
+ <bandwidth />
<timeSpent>1320</timeSpent>
<timeSpentPretty>22 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/event.png</icon>
+ <interactionPosition />
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Spirited Away (千と千尋の神隠し)</eventName>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
+
<pageId>62</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>play25%</eventAction>
- <eventName>Spirited Away (千と千尋の神隠し)</eventName>
+ <bandwidth />
<interactionPosition />
- <icon>plugins/Morpheus/images/event.png</icon>
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Spirited Away (千と千尋の神隠し)</eventName>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -780,13 +865,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -822,6 +912,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>13</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -844,24 +940,17 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>director</plugins>
+ <plugins>cookie, director</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/director.png</pluginIcon>
<pluginName>director</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -874,12 +963,15 @@
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
+
<pageId>22</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>Purchase</eventAction>
+ <bandwidth />
<interactionPosition />
- <icon>plugins/Morpheus/images/event.png</icon>
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -889,13 +981,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -931,6 +1028,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>1</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -953,9 +1056,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -964,17 +1071,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -987,12 +1083,15 @@
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
+
<pageId>21</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>Search</eventAction>
+ <bandwidth />
<interactionPosition />
- <icon>plugins/Morpheus/images/event.png</icon>
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -1002,13 +1101,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -1044,6 +1148,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>1</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -1066,9 +1176,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -1077,17 +1191,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -1100,90 +1203,108 @@
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
+
<pageId>17</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>play50%</eventAction>
- <eventName>Spirited Away (千と千尋の神隠し)</eventName>
- <interactionPosition />
+ <bandwidth />
<timeSpent>1320</timeSpent>
<timeSpentPretty>22 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/event.png</icon>
+ <interactionPosition />
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Spirited Away (千と千尋の神隠し)</eventName>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
+
<pageId>18</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>play75%</eventAction>
- <eventName>Spirited Away (千と千尋の神隠し)</eventName>
- <interactionPosition />
+ <bandwidth />
<timeSpent>420</timeSpent>
<timeSpentPretty>7 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/event.png</icon>
+ <interactionPosition />
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Spirited Away (千と千尋の神隠し)</eventName>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
+
<pageId>20</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>Search</eventAction>
- <eventName>Search query here</eventName>
- <interactionPosition />
+ <bandwidth />
<timeSpent>900</timeSpent>
<timeSpentPretty>15 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/event.png</icon>
+ <interactionPosition />
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Search query here</eventName>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
+
<pageId>23</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>playEnd</eventAction>
- <eventName>Spirited Away (千と千尋の神隠し)</eventName>
- <interactionPosition />
+ <bandwidth />
<timeSpent>120</timeSpent>
<timeSpentPretty>2 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/event.png</icon>
+ <interactionPosition />
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Spirited Away (千と千尋の神隠し)</eventName>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url />
<pageIdAction />
+
<pageId>24</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>rating</eventAction>
- <eventName>Spirited Away (千と千尋の神隠し)</eventName>
- <eventValue>9.66</eventValue>
- <interactionPosition />
+ <bandwidth />
<timeSpent>720</timeSpent>
<timeSpentPretty>12 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/event.png</icon>
+ <interactionPosition />
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Spirited Away (千と千尋の神隠し)</eventName>
+ <eventValue>9.66</eventValue>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://example.org/finishedMovie</url>
<pageIdAction>27</pageIdAction>
+
<pageId>25</pageId>
<eventCategory>event category Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long ---&gt; SHOULD APPEAR IN TEST OUTPUT NOT TRUNCATED &lt;---</eventCategory>
<eventAction>event action Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long ---&gt; SHOULD APPEAR IN TEST OUTPUT NOT TRUNCATED &lt;---</eventAction>
- <eventName>event name Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long ---&gt; SHOULD APPEAR IN TEST OUTPUT NOT TRUNCATED &lt;---</eventName>
- <eventValue>9.66</eventValue>
+ <bandwidth />
<interactionPosition />
- <icon>plugins/Morpheus/images/event.png</icon>
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>event name Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long Extremely long ---&gt; SHOULD APPEAR IN TEST OUTPUT NOT TRUNCATED &lt;---</eventName>
+ <eventValue>9.66</eventValue>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -1193,13 +1314,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -1235,6 +1361,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>6</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -1257,9 +1389,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -1268,17 +1404,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -1291,12 +1416,15 @@
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
+
<pageId>19</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>Search</eventAction>
+ <bandwidth />
<interactionPosition />
- <icon>plugins/Morpheus/images/event.png</icon>
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -1306,13 +1434,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -1348,6 +1481,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>1</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -1370,9 +1509,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -1381,17 +1524,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -1416,163 +1548,187 @@
<pageTitle>Welcome!</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>1</pageId>
+ <bandwidth />
+ <timeSpent>60</timeSpent>
+ <timeSpentPretty>1 min 0s</timeSpentPretty>
<generationTimeMilliseconds>333</generationTimeMilliseconds>
<generationTime>0.33s</generationTime>
<interactionPosition>1</interactionPosition>
- <timeSpent>60</timeSpent>
- <timeSpentPretty>1 min 0s</timeSpentPretty>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://example.org/webradio</url>
<pageIdAction>3</pageIdAction>
+
<pageId>2</pageId>
<eventCategory>Music</eventCategory>
<eventAction>play</eventAction>
+ <bandwidth />
+ <timeSpent>60</timeSpent>
+ <timeSpentPretty>1 min 0s</timeSpentPretty>
+ <interactionPosition />
+
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>La fiancée de l'eau</eventName>
<customVariables>
<row>
<customVariablePageName1>Page Scope Custom var</customVariablePageName1>
<customVariablePageValue1>should not appear in events report</customVariablePageValue1>
</row>
</customVariables>
- <eventName>La fiancée de l'eau</eventName>
- <interactionPosition />
- <timeSpent>60</timeSpent>
- <timeSpentPretty>1 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/event.png</icon>
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://example.org/webradio</url>
<pageIdAction>3</pageIdAction>
+
<pageId>3</pageId>
<eventCategory>Music</eventCategory>
<eventAction>play25%</eventAction>
+ <bandwidth />
+ <timeSpent>60</timeSpent>
+ <timeSpentPretty>1 min 0s</timeSpentPretty>
+ <interactionPosition />
+
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>La fiancée de l'eau</eventName>
<customVariables>
<row>
<customVariablePageName1>Page Scope Custom var</customVariablePageName1>
<customVariablePageValue1>should not appear in events report</customVariablePageValue1>
</row>
</customVariables>
- <eventName>La fiancée de l'eau</eventName>
- <interactionPosition />
- <timeSpent>60</timeSpent>
- <timeSpentPretty>1 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/event.png</icon>
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://example.org/webradio</url>
<pageIdAction>3</pageIdAction>
+
<pageId>4</pageId>
<eventCategory>Music</eventCategory>
<eventAction>play50%</eventAction>
+ <bandwidth />
+ <timeSpent>60</timeSpent>
+ <timeSpentPretty>1 min 0s</timeSpentPretty>
+ <interactionPosition />
+
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>La fiancée de l'eau</eventName>
<customVariables>
<row>
<customVariablePageName1>Page Scope Custom var</customVariablePageName1>
<customVariablePageValue1>should not appear in events report</customVariablePageValue1>
</row>
</customVariables>
- <eventName>La fiancée de l'eau</eventName>
- <interactionPosition />
- <timeSpent>60</timeSpent>
- <timeSpentPretty>1 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/event.png</icon>
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://example.org/webradio</url>
<pageIdAction>3</pageIdAction>
+
<pageId>5</pageId>
<eventCategory>Music</eventCategory>
<eventAction>play75%</eventAction>
+ <bandwidth />
+ <timeSpent>30</timeSpent>
+ <timeSpentPretty>30s</timeSpentPretty>
+ <interactionPosition />
+
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>La fiancée de l'eau</eventName>
<customVariables>
<row>
<customVariablePageName1>Page Scope Custom var</customVariablePageName1>
<customVariablePageValue1>should not appear in events report</customVariablePageValue1>
</row>
</customVariables>
- <eventName>La fiancée de l'eau</eventName>
- <interactionPosition />
- <timeSpent>30</timeSpent>
- <timeSpentPretty>30s</timeSpentPretty>
- <icon>plugins/Morpheus/images/event.png</icon>
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://example.org/webradio</url>
<pageIdAction>3</pageIdAction>
+
<pageId>6</pageId>
<eventCategory>Music</eventCategory>
<eventAction>playEnd</eventAction>
+ <bandwidth />
+ <timeSpent>30</timeSpent>
+ <timeSpentPretty>30s</timeSpentPretty>
+ <interactionPosition />
+
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>La fiancée de l'eau</eventName>
<customVariables>
<row>
<customVariablePageName1>Page Scope Custom var</customVariablePageName1>
<customVariablePageValue1>should not appear in events report</customVariablePageValue1>
</row>
</customVariables>
- <eventName>La fiancée de l'eau</eventName>
- <interactionPosition />
- <timeSpent>30</timeSpent>
- <timeSpentPretty>30s</timeSpentPretty>
- <icon>plugins/Morpheus/images/event.png</icon>
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://example.org/webradio</url>
<pageIdAction>3</pageIdAction>
+
<pageId>7</pageId>
<eventCategory>Music</eventCategory>
<eventAction>rating</eventAction>
+ <bandwidth />
+ <timeSpent>1</timeSpent>
+ <timeSpentPretty>1s</timeSpentPretty>
+ <interactionPosition />
+
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>La fiancée de l'eau</eventName>
+ <eventValue>9</eventValue>
<customVariables>
<row>
<customVariablePageName1>Page Scope Custom var</customVariablePageName1>
<customVariablePageValue1>should not appear in events report</customVariablePageValue1>
</row>
</customVariables>
- <eventName>La fiancée de l'eau</eventName>
- <eventValue>9</eventValue>
- <interactionPosition />
- <timeSpent>1</timeSpent>
- <timeSpentPretty>1s</timeSpentPretty>
- <icon>plugins/Morpheus/images/event.png</icon>
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://example.org/webradio</url>
<pageIdAction>3</pageIdAction>
+
<pageId>8</pageId>
<eventCategory>Music</eventCategory>
<eventAction>rating</eventAction>
+ <bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
+ <interactionPosition />
+
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>La fiancée de l'eau</eventName>
+ <eventValue>10</eventValue>
<customVariables>
<row>
<customVariablePageName1>Page Scope Custom var</customVariablePageName1>
<customVariablePageValue1>should not appear in events report</customVariablePageValue1>
</row>
</customVariables>
- <eventName>La fiancée de l'eau</eventName>
- <eventValue>10</eventValue>
- <interactionPosition />
- <timeSpent>0</timeSpent>
- <timeSpentPretty>0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/event.png</icon>
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>goal</type>
@@ -1590,14 +1746,17 @@
<url />
<pageIdAction />
+
<pageId>9</pageId>
<eventCategory>CategoryTriggersGoal here</eventCategory>
<eventAction>This is an event without a URL</eventAction>
- <interactionPosition />
+ <bandwidth />
<timeSpent>1499</timeSpent>
<timeSpentPretty>24 min 59s</timeSpentPretty>
+ <interactionPosition />
<icon>plugins/Morpheus/images/event.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>action</type>
@@ -1605,102 +1764,123 @@
<pageTitle>Movie Theater</pageTitle>
<pageIdAction>15</pageIdAction>
+
<pageId>10</pageId>
+ <bandwidth />
+ <timeSpent>60</timeSpent>
+ <timeSpentPretty>1 min 0s</timeSpentPretty>
<generationTimeMilliseconds>666</generationTimeMilliseconds>
<generationTime>0.67s</generationTime>
<interactionPosition>2</interactionPosition>
- <timeSpent>60</timeSpent>
- <timeSpentPretty>1 min 0s</timeSpentPretty>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
+
<pageId>11</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>playTrailer</eventAction>
- <eventName>Princess Mononoke (もののけ姫)</eventName>
- <interactionPosition />
+ <bandwidth />
<timeSpent>120</timeSpent>
<timeSpentPretty>2 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/event.png</icon>
+ <interactionPosition />
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Princess Mononoke (もののけ姫)</eventName>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
+
<pageId>12</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>playTrailer</eventAction>
- <eventName>Ponyo (崖の上のポニョ)</eventName>
- <interactionPosition />
+ <bandwidth />
<timeSpent>120</timeSpent>
<timeSpentPretty>2 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/event.png</icon>
+ <interactionPosition />
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Ponyo (崖の上のポニョ)</eventName>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
+
<pageId>13</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>playTrailer</eventAction>
- <eventName>Spirited Away (千と千尋の神隠し)</eventName>
- <interactionPosition />
+ <bandwidth />
<timeSpent>60</timeSpent>
<timeSpentPretty>1 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/event.png</icon>
+ <interactionPosition />
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Spirited Away (千と千尋の神隠し)</eventName>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
+
<pageId>14</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>clickBuyNow</eventAction>
- <eventName>Spirited Away (千と千尋の神隠し)</eventName>
- <interactionPosition />
+ <bandwidth />
<timeSpent>120</timeSpent>
<timeSpentPretty>2 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/event.png</icon>
+ <interactionPosition />
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Spirited Away (千と千尋の神隠し)</eventName>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
+
<pageId>15</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>playStart</eventAction>
- <eventName>Spirited Away (千と千尋の神隠し)</eventName>
- <interactionPosition />
+ <bandwidth />
<timeSpent>1320</timeSpent>
<timeSpentPretty>22 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/event.png</icon>
+ <interactionPosition />
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Spirited Away (千と千尋の神隠し)</eventName>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://example.org/movies</url>
<pageIdAction>16</pageIdAction>
+
<pageId>16</pageId>
<eventCategory>Movie</eventCategory>
<eventAction>play25%</eventAction>
- <eventName>Spirited Away (千と千尋の神隠し)</eventName>
+ <bandwidth />
<interactionPosition />
- <icon>plugins/Morpheus/images/event.png</icon>
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Spirited Away (千と千尋の神隠し)</eventName>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>2</goalConversions>
@@ -1710,13 +1890,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -1752,6 +1937,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>14</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -1774,9 +1965,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -1785,16 +1980,5 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ImportLogs__CorePluginsAdmin.getSystemSettings.xml b/tests/PHPUnit/System/expected/test_ImportLogs__CorePluginsAdmin.getSystemSettings.xml
index 6008a52144..8c48d07315 100644
--- a/tests/PHPUnit/System/expected/test_ImportLogs__CorePluginsAdmin.getSystemSettings.xml
+++ b/tests/PHPUnit/System/expected/test_ImportLogs__CorePluginsAdmin.getSystemSettings.xml
@@ -35,8 +35,8 @@
<uiControlAttributes>
</uiControlAttributes>
<availableValues>
- <row key="1">Yes</row>
- <row key="0">No (Default)</row>
+ <row key="1">Yes (Default)</row>
+ <row key="0">No</row>
</availableValues>
<description />
<inlineHelp>An email will be sent to Super Users when there is a new version available for a plugin.</inlineHelp>
diff --git a/tests/PHPUnit/System/expected/test_ImportLogs__DevicesDetection.getBrand_month.xml b/tests/PHPUnit/System/expected/test_ImportLogs__DevicesDetection.getBrand_month.xml
index 89aca6e48f..51bf3cd8fb 100644
--- a/tests/PHPUnit/System/expected/test_ImportLogs__DevicesDetection.getBrand_month.xml
+++ b/tests/PHPUnit/System/expected/test_ImportLogs__DevicesDetection.getBrand_month.xml
@@ -85,4 +85,4 @@
<logo>plugins/Morpheus/icons/dist/brand/Samsung.png</logo>
<segment>deviceBrand==Samsung</segment>
</row>
-</result>
+</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ImportLogs__DevicesDetection.getBrowserFamilies_month.xml b/tests/PHPUnit/System/expected/test_ImportLogs__DevicesDetection.getBrowserFamilies_month.xml
index e053d47f03..c5f696ff21 100644
--- a/tests/PHPUnit/System/expected/test_ImportLogs__DevicesDetection.getBrowserFamilies_month.xml
+++ b/tests/PHPUnit/System/expected/test_ImportLogs__DevicesDetection.getBrowserFamilies_month.xml
@@ -37,7 +37,7 @@
<logo>plugins/Morpheus/icons/dist/browsers/RM.png</logo>
</row>
<row>
- <label>Epiphany</label>
+ <label>GNOME Web</label>
<nb_visits>5</nb_visits>
<nb_actions>5</nb_actions>
<max_actions>1</max_actions>
diff --git a/tests/PHPUnit/System/expected/test_ImportLogs__DevicesDetection.getBrowserVersions_month.xml b/tests/PHPUnit/System/expected/test_ImportLogs__DevicesDetection.getBrowserVersions_month.xml
index 08c57eeae0..56a9dcaaea 100644
--- a/tests/PHPUnit/System/expected/test_ImportLogs__DevicesDetection.getBrowserVersions_month.xml
+++ b/tests/PHPUnit/System/expected/test_ImportLogs__DevicesDetection.getBrowserVersions_month.xml
@@ -14,7 +14,7 @@
<logo>plugins/Morpheus/icons/dist/browsers/RM.png</logo>
</row>
<row>
- <label>Epiphany 2.30</label>
+ <label>GNOME Web 2.30</label>
<nb_visits>5</nb_visits>
<nb_actions>5</nb_actions>
<max_actions>1</max_actions>
diff --git a/tests/PHPUnit/System/expected/test_ImportLogs__DevicesDetection.getBrowsers_month.xml b/tests/PHPUnit/System/expected/test_ImportLogs__DevicesDetection.getBrowsers_month.xml
index 912ac1bc8b..47a767d7ab 100644
--- a/tests/PHPUnit/System/expected/test_ImportLogs__DevicesDetection.getBrowsers_month.xml
+++ b/tests/PHPUnit/System/expected/test_ImportLogs__DevicesDetection.getBrowsers_month.xml
@@ -40,7 +40,7 @@
<segment>browserCode==RM</segment>
</row>
<row>
- <label>Epiphany</label>
+ <label>GNOME Web</label>
<nb_visits>5</nb_visits>
<nb_actions>5</nb_actions>
<max_actions>1</max_actions>
diff --git a/tests/PHPUnit/System/expected/test_ImportLogs__Live.getLastVisitsDetails_range.xml b/tests/PHPUnit/System/expected/test_ImportLogs__Live.getLastVisitsDetails_range.xml
index 412dafe2df..669e84156b 100644
--- a/tests/PHPUnit/System/expected/test_ImportLogs__Live.getLastVisitsDetails_range.xml
+++ b/tests/PHPUnit/System/expected/test_ImportLogs__Live.getLastVisitsDetails_range.xml
@@ -23,18 +23,21 @@
<pageTitle>Liberate Web Analytics - Analytics - Piwik</pageTitle>
<pageIdAction>35</pageIdAction>
+
<pageId>49</pageId>
+ <bandwidth>43</bandwidth>
+ <generationTimeMilliseconds>292</generationTimeMilliseconds>
+ <generationTime>0.29s</generationTime>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <generationTimeMilliseconds>292</generationTimeMilliseconds>
- <generationTime>0.29s</generationTime>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>43 B</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -44,13 +47,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returning</visitorType>
<visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>77</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -86,6 +94,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/CH.png</browserIcon>
<browserCode>CH</browserCode>
<browserVersion>33.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>North America</continent>
<continentCode>amn</continentCode>
@@ -108,11 +122,11 @@
</row>
</customVariables>
<resolution>1366x768</resolution>
- <plugins>pdf, flash, java</plugins>
+ <plugins>cookie, flash, java, pdf</plugins>
<pluginsIcons>
<row>
- <pluginIcon>plugins/Morpheus/icons/dist/plugins/pdf.png</pluginIcon>
- <pluginName>pdf</pluginName>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
</row>
<row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
@@ -122,18 +136,11 @@
<pluginIcon>plugins/Morpheus/icons/dist/plugins/java.png</pluginIcon>
<pluginName>java</pluginName>
</row>
+ <row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/pdf.png</pluginIcon>
+ <pluginName>pdf</pluginName>
+ </row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -147,18 +154,21 @@
<pageTitle>Changelog Archive - Analytics - Piwik</pageTitle>
<pageIdAction>44</pageIdAction>
+
<pageId>40</pageId>
+ <bandwidth>43</bandwidth>
+ <timeSpent>79</timeSpent>
+ <timeSpentPretty>1 min 19s</timeSpentPretty>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <timeSpent>79</timeSpent>
- <timeSpentPretty>1 min 19s</timeSpentPretty>
- <icon />
-
+ <bandwidth_pretty>43 B</bandwidth_pretty>
</row>
<row>
<type>goal</type>
@@ -177,16 +187,19 @@
<pageTitle>Contact the Piwik team - Analytics - Piwik</pageTitle>
<pageIdAction>55</pageIdAction>
+
<pageId>48</pageId>
+ <bandwidth>43</bandwidth>
+ <interactionPosition>2</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition>2</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>43 B</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -196,13 +209,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returning</visitorType>
<visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>2</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>181</daysSinceFirstVisit>
@@ -238,6 +256,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/IE.png</browserIcon>
<browserCode>IE</browserCode>
<browserVersion>8.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>North America</continent>
<continentCode>amn</continentCode>
@@ -262,17 +286,6 @@
<resolution>1536x864</resolution>
<plugins />
<pluginsIcons />
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -297,18 +310,21 @@
<pageTitle>demo.piwik.org/Piwik Forums - Piwik › Web Analytics Reports</pageTitle>
<pageIdAction>53</pageIdAction>
+
<pageId>47</pageId>
+ <bandwidth>43</bandwidth>
+ <generationTimeMilliseconds>413</generationTimeMilliseconds>
+ <generationTime>0.41s</generationTime>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <generationTimeMilliseconds>413</generationTimeMilliseconds>
- <generationTime>0.41s</generationTime>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>43 B</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -318,13 +334,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returning</visitorType>
<visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -360,6 +381,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/CH.png</browserIcon>
<browserCode>CH</browserCode>
<browserVersion>34.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -386,11 +413,11 @@
</row>
</customVariables>
<resolution>1920x1200</resolution>
- <plugins>pdf, flash, java, quicktime, silverlight</plugins>
+ <plugins>cookie, flash, java, pdf, quicktime, silverlight</plugins>
<pluginsIcons>
<row>
- <pluginIcon>plugins/Morpheus/icons/dist/plugins/pdf.png</pluginIcon>
- <pluginName>pdf</pluginName>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
</row>
<row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
@@ -401,6 +428,10 @@
<pluginName>java</pluginName>
</row>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/pdf.png</pluginIcon>
+ <pluginName>pdf</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/quicktime.png</pluginIcon>
<pluginName>quicktime</pluginName>
</row>
@@ -409,17 +440,6 @@
<pluginName>silverlight</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -433,18 +453,21 @@
<pageTitle>Liberate Web Analytics - Analytics - Piwik</pageTitle>
<pageIdAction>35</pageIdAction>
+
<pageId>44</pageId>
+ <bandwidth>43</bandwidth>
+ <timeSpent>32</timeSpent>
+ <timeSpentPretty>32s</timeSpentPretty>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <timeSpent>32</timeSpent>
- <timeSpentPretty>32s</timeSpentPretty>
- <icon />
-
+ <bandwidth_pretty>43 B</bandwidth_pretty>
</row>
<row>
<type>goal</type>
@@ -463,16 +486,19 @@
<pageTitle>What is Piwik? - Analytics - Piwik</pageTitle>
<pageIdAction>51</pageIdAction>
+
<pageId>46</pageId>
+ <bandwidth>43</bandwidth>
+ <interactionPosition>2</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>501</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition>2</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>43 B</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -482,13 +508,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returning</visitorType>
<visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>7</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>17</daysSinceFirstVisit>
@@ -503,7 +534,7 @@
<referrerName>Google</referrerName>
<referrerKeyword>Keyword not defined</referrerKeyword>
<referrerKeywordPosition>1</referrerKeywordPosition>
- <referrerUrl>http://piwik.org/faq/general/#faq_144</referrerUrl>
+ <referrerUrl>http://www.google.com/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=1&amp;ved=0CCcQFjAA&amp;url=http%3A%2F%2Fpiwik.org%2F&amp;ei=8vwgU8TYDZTI2wWTi4CQCA&amp;usg=AFQjCNF_MGJRqKPvaKuUokHtZ3VvNG9ALw&amp;bvm=bv.62922401,d.b2I</referrerUrl>
<referrerSearchEngineUrl>http://google.com</referrerSearchEngineUrl>
<referrerSearchEngineIcon>plugins/Morpheus/icons/dist/searchEngines/google.com.png</referrerSearchEngineIcon>
<languageCode />
@@ -524,6 +555,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/SF.png</browserIcon>
<browserCode>SF</browserCode>
<browserVersion>7.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>North America</continent>
<continentCode>amn</continentCode>
@@ -546,11 +583,11 @@
</row>
</customVariables>
<resolution>2880x1800</resolution>
- <plugins>pdf, flash, java, quicktime</plugins>
+ <plugins>cookie, flash, java, pdf, quicktime</plugins>
<pluginsIcons>
<row>
- <pluginIcon>plugins/Morpheus/icons/dist/plugins/pdf.png</pluginIcon>
- <pluginName>pdf</pluginName>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
</row>
<row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
@@ -561,21 +598,14 @@
<pluginName>java</pluginName>
</row>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/pdf.png</pluginIcon>
+ <pluginName>pdf</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/quicktime.png</pluginIcon>
<pluginName>quicktime</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -589,16 +619,19 @@
<pageTitle />
<pageIdAction>49</pageIdAction>
+
<pageId>45</pageId>
+ <bandwidth>43</bandwidth>
+ <interactionPosition />
+ <icon>plugins/Morpheus/images/link.png</icon>
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition />
- <icon>plugins/Morpheus/images/link.png</icon>
-
+ <bandwidth_pretty>43 B</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -608,13 +641,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returning</visitorType>
<visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -650,6 +688,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/CH.png</browserIcon>
<browserCode>CH</browserCode>
<browserVersion>33.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -672,11 +716,11 @@
</row>
</customVariables>
<resolution>1920x1080</resolution>
- <plugins>pdf, flash, java, silverlight</plugins>
+ <plugins>cookie, flash, java, pdf, silverlight</plugins>
<pluginsIcons>
<row>
- <pluginIcon>plugins/Morpheus/icons/dist/plugins/pdf.png</pluginIcon>
- <pluginName>pdf</pluginName>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
</row>
<row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
@@ -687,21 +731,14 @@
<pluginName>java</pluginName>
</row>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/pdf.png</pluginIcon>
+ <pluginName>pdf</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/silverlight.png</pluginIcon>
<pluginName>silverlight</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -726,18 +763,21 @@
<pageTitle>Integrate Piwik into your Rails Application - Analytics - Piwik</pageTitle>
<pageIdAction>48</pageIdAction>
+
<pageId>43</pageId>
+ <bandwidth>43</bandwidth>
+ <generationTimeMilliseconds>391</generationTimeMilliseconds>
+ <generationTime>0.39s</generationTime>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <generationTimeMilliseconds>391</generationTimeMilliseconds>
- <generationTime>0.39s</generationTime>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>43 B</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -747,13 +787,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -768,7 +813,7 @@
<referrerName>Google</referrerName>
<referrerKeyword>Keyword not defined</referrerKeyword>
<referrerKeywordPosition />
- <referrerUrl>http://piwik.org/faq/general/#faq_144</referrerUrl>
+ <referrerUrl>https://www.google.com/</referrerUrl>
<referrerSearchEngineUrl>http://google.com</referrerSearchEngineUrl>
<referrerSearchEngineIcon>plugins/Morpheus/icons/dist/searchEngines/google.com.png</referrerSearchEngineIcon>
<languageCode />
@@ -789,6 +834,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/CH.png</browserIcon>
<browserCode>CH</browserCode>
<browserVersion>33.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>North America</continent>
<continentCode>amn</continentCode>
@@ -811,11 +862,11 @@
</row>
</customVariables>
<resolution>1360x768</resolution>
- <plugins>pdf, flash, java, quicktime, windowsmedia, silverlight</plugins>
+ <plugins>cookie, flash, java, pdf, quicktime, silverlight, windowsmedia</plugins>
<pluginsIcons>
<row>
- <pluginIcon>plugins/Morpheus/icons/dist/plugins/pdf.png</pluginIcon>
- <pluginName>pdf</pluginName>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
</row>
<row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
@@ -826,29 +877,22 @@
<pluginName>java</pluginName>
</row>
<row>
- <pluginIcon>plugins/Morpheus/icons/dist/plugins/quicktime.png</pluginIcon>
- <pluginName>quicktime</pluginName>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/pdf.png</pluginIcon>
+ <pluginName>pdf</pluginName>
</row>
<row>
- <pluginIcon>plugins/Morpheus/icons/dist/plugins/windowsmedia.png</pluginIcon>
- <pluginName>windowsmedia</pluginName>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/quicktime.png</pluginIcon>
+ <pluginName>quicktime</pluginName>
</row>
<row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/silverlight.png</pluginIcon>
<pluginName>silverlight</pluginName>
</row>
+ <row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/windowsmedia.png</pluginIcon>
+ <pluginName>windowsmedia</pluginName>
+ </row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -873,16 +917,19 @@
<pageTitle>Log Analytics - Analytics - Piwik</pageTitle>
<pageIdAction>42</pageIdAction>
+
<pageId>42</pageId>
+ <bandwidth>43</bandwidth>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>404</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>43 B</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -892,13 +939,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returning</visitorType>
<visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>4</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>3</daysSinceFirstVisit>
@@ -913,7 +965,7 @@
<referrerName>Google</referrerName>
<referrerKeyword>Keyword not defined</referrerKeyword>
<referrerKeywordPosition>2</referrerKeywordPosition>
- <referrerUrl>http://piwik.org/faq/general/#faq_144</referrerUrl>
+ <referrerUrl>https://www.google.co.jp/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=2&amp;ved=0CDAQFjAB&amp;url=https%3A%2F%2Fpiwik.org%2Flog-analytics%2F&amp;ei=rogdU5OuK43pkgXZmYGICA&amp;usg=AFQjCNH4nR8bKYaliCj2egiJ0H_CX4sFJg&amp;bvm=bv.62578216,d.dGI</referrerUrl>
<referrerSearchEngineUrl>http://google.com</referrerSearchEngineUrl>
<referrerSearchEngineIcon>plugins/Morpheus/icons/dist/searchEngines/google.com.png</referrerSearchEngineIcon>
<languageCode />
@@ -934,6 +986,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/SF.png</browserIcon>
<browserCode>SF</browserCode>
<browserVersion>7.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Asia</continent>
<continentCode>asi</continentCode>
@@ -956,32 +1014,25 @@
</row>
</customVariables>
<resolution>2560x1440</resolution>
- <plugins>pdf, java, quicktime</plugins>
+ <plugins>cookie, java, pdf, quicktime</plugins>
<pluginsIcons>
<row>
- <pluginIcon>plugins/Morpheus/icons/dist/plugins/pdf.png</pluginIcon>
- <pluginName>pdf</pluginName>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
</row>
<row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/java.png</pluginIcon>
<pluginName>java</pluginName>
</row>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/pdf.png</pluginIcon>
+ <pluginName>pdf</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/quicktime.png</pluginIcon>
<pluginName>quicktime</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -1006,18 +1057,21 @@
<pageTitle>Piwik 2.1 — Massive Performance and Reliability Improvements - Analytics - Piwik</pageTitle>
<pageIdAction>46</pageIdAction>
+
<pageId>41</pageId>
+ <bandwidth>43</bandwidth>
+ <generationTimeMilliseconds>119</generationTimeMilliseconds>
+ <generationTime>0.12s</generationTime>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <generationTimeMilliseconds>119</generationTimeMilliseconds>
- <generationTime>0.12s</generationTime>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>43 B</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -1027,13 +1081,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returning</visitorType>
<visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>2</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -1064,11 +1123,17 @@
<operatingSystemVersion />
<browserFamily>Gecko</browserFamily>
<browserFamilyDescription>Gecko (Firefox)</browserFamilyDescription>
- <browser>Firefox 27.0</browser>
- <browserName>Firefox</browserName>
- <browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
- <browserCode>FF</browserCode>
+ <browser>Firefox Mobile 27.0</browser>
+ <browserName>Firefox Mobile</browserName>
+ <browserIcon>plugins/Morpheus/icons/dist/browsers/FM.png</browserIcon>
+ <browserCode>FM</browserCode>
<browserVersion>27.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -1091,24 +1156,17 @@
</row>
</customVariables>
<resolution>360x640</resolution>
- <plugins>flash</plugins>
+ <plugins>cookie, flash</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -1133,18 +1191,21 @@
<pageTitle>Log Analytics - Analytics - Piwik</pageTitle>
<pageIdAction>42</pageIdAction>
+
<pageId>39</pageId>
+ <bandwidth>43</bandwidth>
+ <generationTimeMilliseconds>145</generationTimeMilliseconds>
+ <generationTime>0.15s</generationTime>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <generationTimeMilliseconds>145</generationTimeMilliseconds>
- <generationTime>0.15s</generationTime>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>43 B</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -1154,13 +1215,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returning</visitorType>
<visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>5</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>1</daysSinceFirstVisit>
@@ -1196,6 +1262,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>27.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -1218,11 +1290,11 @@
</row>
</customVariables>
<resolution>2560x1440</resolution>
- <plugins>pdf, flash, java, quicktime, windowsmedia, silverlight</plugins>
+ <plugins>cookie, flash, java, pdf, quicktime, silverlight, windowsmedia</plugins>
<pluginsIcons>
<row>
- <pluginIcon>plugins/Morpheus/icons/dist/plugins/pdf.png</pluginIcon>
- <pluginName>pdf</pluginName>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
</row>
<row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
@@ -1233,29 +1305,22 @@
<pluginName>java</pluginName>
</row>
<row>
- <pluginIcon>plugins/Morpheus/icons/dist/plugins/quicktime.png</pluginIcon>
- <pluginName>quicktime</pluginName>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/pdf.png</pluginIcon>
+ <pluginName>pdf</pluginName>
</row>
<row>
- <pluginIcon>plugins/Morpheus/icons/dist/plugins/windowsmedia.png</pluginIcon>
- <pluginName>windowsmedia</pluginName>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/quicktime.png</pluginIcon>
+ <pluginName>quicktime</pluginName>
</row>
<row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/silverlight.png</pluginIcon>
<pluginName>silverlight</pluginName>
</row>
+ <row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/windowsmedia.png</pluginIcon>
+ <pluginName>windowsmedia</pluginName>
+ </row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -1269,20 +1334,23 @@
<pageTitle>Liberate Web Analytics - Analytics - Piwik</pageTitle>
<pageIdAction>35</pageIdAction>
+
<pageId>35</pageId>
+ <bandwidth>43</bandwidth>
+ <timeSpent>2</timeSpent>
+ <timeSpentPretty>2s</timeSpentPretty>
+ <generationTimeMilliseconds>182</generationTimeMilliseconds>
+ <generationTime>0.18s</generationTime>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>403</customVariablePageValue1>
</row>
</customVariables>
- <generationTimeMilliseconds>182</generationTimeMilliseconds>
- <generationTime>0.18s</generationTime>
- <interactionPosition>1</interactionPosition>
- <timeSpent>2</timeSpent>
- <timeSpentPretty>2s</timeSpentPretty>
- <icon />
-
+ <bandwidth_pretty>43 B</bandwidth_pretty>
</row>
<row>
<type>goal</type>
@@ -1301,20 +1369,23 @@
<pageTitle>Download - Analytics - Piwik</pageTitle>
<pageIdAction>39</pageIdAction>
+
<pageId>37</pageId>
+ <bandwidth>43</bandwidth>
+ <timeSpent>7</timeSpent>
+ <timeSpentPretty>7s</timeSpentPretty>
+ <generationTimeMilliseconds>113</generationTimeMilliseconds>
+ <generationTime>0.11s</generationTime>
+ <interactionPosition>2</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>500</customVariablePageValue1>
</row>
</customVariables>
- <generationTimeMilliseconds>113</generationTimeMilliseconds>
- <generationTime>0.11s</generationTime>
- <interactionPosition>2</interactionPosition>
- <timeSpent>7</timeSpent>
- <timeSpentPretty>7s</timeSpentPretty>
- <icon />
-
+ <bandwidth_pretty>43 B</bandwidth_pretty>
</row>
<row>
<type>download</type>
@@ -1322,16 +1393,19 @@
<pageTitle />
<pageIdAction>40</pageIdAction>
+
<pageId>38</pageId>
+ <bandwidth>43</bandwidth>
+ <interactionPosition />
+ <icon>plugins/Morpheus/images/download.png</icon>
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition />
- <icon>plugins/Morpheus/images/download.png</icon>
-
+ <bandwidth_pretty>43 B</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -1341,13 +1415,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -1362,7 +1441,7 @@
<referrerName>Google</referrerName>
<referrerKeyword>Keyword not defined</referrerKeyword>
<referrerKeywordPosition>1</referrerKeywordPosition>
- <referrerUrl>http://piwik.org/faq/general/#faq_144</referrerUrl>
+ <referrerUrl>http://www.google.ru/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=1&amp;ved=0CCoQFjAA&amp;url=http%3A%2F%2Fpiwik.org%2F&amp;ei=ffwgU57VGuf44QT3-oCQCw&amp;usg=AFQjCNF_MGJRqKPvaKuUokHtZ3VvNG9ALw&amp;bvm=bv.62922401,d.bGE&amp;cad=rjt</referrerUrl>
<referrerSearchEngineUrl>http://google.com</referrerSearchEngineUrl>
<referrerSearchEngineIcon>plugins/Morpheus/icons/dist/searchEngines/google.com.png</referrerSearchEngineIcon>
<languageCode />
@@ -1383,6 +1462,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>27.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -1405,9 +1490,13 @@
</row>
</customVariables>
<resolution>1920x1080</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -1416,17 +1505,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -1451,18 +1529,21 @@
<pageTitle>Hello Installing Piwik - Analytics - Piwik</pageTitle>
<pageIdAction>37</pageIdAction>
+
<pageId>36</pageId>
+ <bandwidth>43</bandwidth>
+ <generationTimeMilliseconds>134</generationTimeMilliseconds>
+ <generationTime>0.13s</generationTime>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <generationTimeMilliseconds>134</generationTimeMilliseconds>
- <generationTime>0.13s</generationTime>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>43 B</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -1472,13 +1553,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returning</visitorType>
<visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>5</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>30</daysSinceFirstVisit>
@@ -1514,6 +1600,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/CH.png</browserIcon>
<browserCode>CH</browserCode>
<browserVersion>33.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -1536,11 +1628,11 @@
</row>
</customVariables>
<resolution>1366x768</resolution>
- <plugins>pdf, flash, java, silverlight</plugins>
+ <plugins>cookie, flash, java, pdf, silverlight</plugins>
<pluginsIcons>
<row>
- <pluginIcon>plugins/Morpheus/icons/dist/plugins/pdf.png</pluginIcon>
- <pluginName>pdf</pluginName>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
</row>
<row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
@@ -1551,21 +1643,14 @@
<pluginName>java</pluginName>
</row>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/pdf.png</pluginIcon>
+ <pluginName>pdf</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/silverlight.png</pluginIcon>
<pluginName>silverlight</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -1590,18 +1675,21 @@
<pageTitle>Liberate Web Analytics - Analytics - Piwik</pageTitle>
<pageIdAction>35</pageIdAction>
+
<pageId>34</pageId>
+ <bandwidth>43</bandwidth>
+ <generationTimeMilliseconds>58</generationTimeMilliseconds>
+ <generationTime>0.06s</generationTime>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <generationTimeMilliseconds>58</generationTimeMilliseconds>
- <generationTime>0.06s</generationTime>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>43 B</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -1611,13 +1699,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -1653,6 +1746,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/CH.png</browserIcon>
<browserCode>CH</browserCode>
<browserVersion>33.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -1675,11 +1774,11 @@
</row>
</customVariables>
<resolution>1920x1080</resolution>
- <plugins>pdf, flash, java, silverlight</plugins>
+ <plugins>cookie, flash, java, pdf, silverlight</plugins>
<pluginsIcons>
<row>
- <pluginIcon>plugins/Morpheus/icons/dist/plugins/pdf.png</pluginIcon>
- <pluginName>pdf</pluginName>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
</row>
<row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
@@ -1690,21 +1789,14 @@
<pluginName>java</pluginName>
</row>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/pdf.png</pluginIcon>
+ <pluginName>pdf</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/silverlight.png</pluginIcon>
<pluginName>silverlight</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -1718,20 +1810,23 @@
<pageTitle />
<pageIdAction>1</pageIdAction>
+
<pageId>70</pageId>
+ <bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
+ <generationTimeMilliseconds>123</generationTimeMilliseconds>
+ <generationTime>0.12s</generationTime>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <generationTimeMilliseconds>123</generationTimeMilliseconds>
- <generationTime>0.12s</generationTime>
- <interactionPosition>1</interactionPosition>
- <timeSpent>0</timeSpent>
- <timeSpentPretty>0s</timeSpentPretty>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>goal</type>
@@ -1750,20 +1845,23 @@
<pageTitle />
<pageIdAction>1</pageIdAction>
+
<pageId>74</pageId>
+ <bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
+ <generationTimeMilliseconds>120</generationTimeMilliseconds>
+ <generationTime>0.12s</generationTime>
+ <interactionPosition>5</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <generationTimeMilliseconds>120</generationTimeMilliseconds>
- <generationTime>0.12s</generationTime>
- <interactionPosition>5</interactionPosition>
- <timeSpent>0</timeSpent>
- <timeSpentPretty>0s</timeSpentPretty>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>action</type>
@@ -1771,20 +1869,23 @@
<pageTitle />
<pageIdAction>1</pageIdAction>
+
<pageId>78</pageId>
+ <bandwidth />
+ <timeSpent>52</timeSpent>
+ <timeSpentPretty>52s</timeSpentPretty>
+ <generationTimeMilliseconds>23</generationTimeMilliseconds>
+ <generationTime>0.02s</generationTime>
+ <interactionPosition>9</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <generationTimeMilliseconds>23</generationTimeMilliseconds>
- <generationTime>0.02s</generationTime>
- <interactionPosition>9</interactionPosition>
- <timeSpent>52</timeSpent>
- <timeSpentPretty>52s</timeSpentPretty>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>action</type>
@@ -1792,20 +1893,23 @@
<pageTitle />
<pageIdAction>2</pageIdAction>
+
<pageId>71</pageId>
+ <bandwidth />
+ <timeSpent>50</timeSpent>
+ <timeSpentPretty>50s</timeSpentPretty>
+ <generationTimeMilliseconds>234</generationTimeMilliseconds>
+ <generationTime>0.23s</generationTime>
+ <interactionPosition>2</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <generationTimeMilliseconds>234</generationTimeMilliseconds>
- <generationTime>0.23s</generationTime>
- <interactionPosition>2</interactionPosition>
- <timeSpent>50</timeSpent>
- <timeSpentPretty>50s</timeSpentPretty>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>action</type>
@@ -1813,20 +1917,23 @@
<pageTitle />
<pageIdAction>2</pageIdAction>
+
<pageId>75</pageId>
+ <bandwidth />
+ <timeSpent>49</timeSpent>
+ <timeSpentPretty>49s</timeSpentPretty>
+ <generationTimeMilliseconds>294</generationTimeMilliseconds>
+ <generationTime>0.29s</generationTime>
+ <interactionPosition>6</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <generationTimeMilliseconds>294</generationTimeMilliseconds>
- <generationTime>0.29s</generationTime>
- <interactionPosition>6</interactionPosition>
- <timeSpent>49</timeSpent>
- <timeSpentPretty>49s</timeSpentPretty>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>action</type>
@@ -1834,20 +1941,23 @@
<pageTitle />
<pageIdAction>2</pageIdAction>
+
<pageId>79</pageId>
+ <bandwidth />
+ <timeSpent>26</timeSpent>
+ <timeSpentPretty>26s</timeSpentPretty>
+ <generationTimeMilliseconds>237</generationTimeMilliseconds>
+ <generationTime>0.24s</generationTime>
+ <interactionPosition>10</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <generationTimeMilliseconds>237</generationTimeMilliseconds>
- <generationTime>0.24s</generationTime>
- <interactionPosition>10</interactionPosition>
- <timeSpent>26</timeSpent>
- <timeSpentPretty>26s</timeSpentPretty>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>action</type>
@@ -1855,20 +1965,23 @@
<pageTitle />
<pageIdAction>3</pageIdAction>
+
<pageId>72</pageId>
+ <bandwidth />
+ <timeSpent>26</timeSpent>
+ <timeSpentPretty>26s</timeSpentPretty>
+ <generationTimeMilliseconds>1324</generationTimeMilliseconds>
+ <generationTime>1.32s</generationTime>
+ <interactionPosition>3</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <generationTimeMilliseconds>1324</generationTimeMilliseconds>
- <generationTime>1.32s</generationTime>
- <interactionPosition>3</interactionPosition>
- <timeSpent>26</timeSpent>
- <timeSpentPretty>26s</timeSpentPretty>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>action</type>
@@ -1876,20 +1989,23 @@
<pageTitle />
<pageIdAction>3</pageIdAction>
+
<pageId>76</pageId>
+ <bandwidth />
+ <timeSpent>7</timeSpent>
+ <timeSpentPretty>7s</timeSpentPretty>
+ <generationTimeMilliseconds>624</generationTimeMilliseconds>
+ <generationTime>0.62s</generationTime>
+ <interactionPosition>7</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <generationTimeMilliseconds>624</generationTimeMilliseconds>
- <generationTime>0.62s</generationTime>
- <interactionPosition>7</interactionPosition>
- <timeSpent>7</timeSpent>
- <timeSpentPretty>7s</timeSpentPretty>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>action</type>
@@ -1897,20 +2013,23 @@
<pageTitle />
<pageIdAction>4</pageIdAction>
+
<pageId>73</pageId>
+ <bandwidth />
+ <timeSpent>8</timeSpent>
+ <timeSpentPretty>8s</timeSpentPretty>
+ <generationTimeMilliseconds>543</generationTimeMilliseconds>
+ <generationTime>0.54s</generationTime>
+ <interactionPosition>4</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <generationTimeMilliseconds>543</generationTimeMilliseconds>
- <generationTime>0.54s</generationTime>
- <interactionPosition>4</interactionPosition>
- <timeSpent>8</timeSpent>
- <timeSpentPretty>8s</timeSpentPretty>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>action</type>
@@ -1918,18 +2037,21 @@
<pageTitle />
<pageIdAction>4</pageIdAction>
+
<pageId>77</pageId>
+ <bandwidth />
+ <generationTimeMilliseconds>343</generationTimeMilliseconds>
+ <generationTime>0.34s</generationTime>
+ <interactionPosition>8</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <generationTimeMilliseconds>343</generationTimeMilliseconds>
- <generationTime>0.34s</generationTime>
- <interactionPosition>8</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -1939,13 +2061,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -1981,6 +2108,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/UNK.png</browserIcon>
<browserCode>UNK</browserCode>
<browserVersion />
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Asia</continent>
<continentCode>asi</continentCode>
@@ -2001,17 +2134,6 @@
<resolution>unknown</resolution>
<plugins />
<pluginsIcons />
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -2036,18 +2158,21 @@
<pageTitle />
<pageIdAction>65</pageIdAction>
+
<pageId>86</pageId>
+ <bandwidth>182</bandwidth>
+ <generationTimeMilliseconds>1</generationTimeMilliseconds>
+ <generationTime>0.001s</generationTime>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <generationTimeMilliseconds>1</generationTimeMilliseconds>
- <generationTime>0.001s</generationTime>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>182 B</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -2057,13 +2182,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -2099,6 +2229,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/IE.png</browserIcon>
<browserCode>IE</browserCode>
<browserVersion>5.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Unknown</continent>
<continentCode>unk</continentCode>
@@ -2119,17 +2255,6 @@
<resolution>unknown</resolution>
<plugins />
<pluginsIcons />
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -2143,18 +2268,21 @@
<pageTitle>302/URL = http%3A%2F%2Fpiwik.net%2FCitrix%2FXenApp%2FWan%2Fauth%2Flogin.jsp</pageTitle>
<pageIdAction>63</pageIdAction>
+
<pageId>84</pageId>
+ <bandwidth>355</bandwidth>
+ <timeSpent>240</timeSpent>
+ <timeSpentPretty>4 min 0s</timeSpentPretty>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>302</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <timeSpent>240</timeSpent>
- <timeSpentPretty>4 min 0s</timeSpentPretty>
- <icon />
-
+ <bandwidth_pretty>355 B</bandwidth_pretty>
</row>
<row>
<type>goal</type>
@@ -2173,16 +2301,19 @@
<pageTitle />
<pageIdAction>64</pageIdAction>
+
<pageId>85</pageId>
+ <bandwidth>5609</bandwidth>
+ <interactionPosition>2</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition>2</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>5.5 K</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -2192,13 +2323,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -2234,6 +2370,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/IE.png</browserIcon>
<browserCode>IE</browserCode>
<browserVersion>8.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Unknown</continent>
<continentCode>unk</continentCode>
@@ -2254,17 +2396,6 @@
<resolution>unknown</resolution>
<plugins />
<pluginsIcons />
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -2289,7 +2420,14 @@
<pageTitle />
<pageIdAction>61</pageIdAction>
+
<pageId>94</pageId>
+ <bandwidth />
+ <generationTimeMilliseconds>359</generationTimeMilliseconds>
+ <generationTime>0.36s</generationTime>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>Generation Time</customVariablePageName1>
@@ -2304,11 +2442,7 @@
<customVariablePageValue3>200</customVariablePageValue3>
</row>
</customVariables>
- <generationTimeMilliseconds>359</generationTimeMilliseconds>
- <generationTime>0.36s</generationTime>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -2318,13 +2452,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returning</visitorType>
<visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -2360,6 +2499,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/CH.png</browserIcon>
<browserCode>CH</browserCode>
<browserVersion>37.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>North America</continent>
<continentCode>amn</continentCode>
@@ -2384,17 +2529,6 @@
<resolution>unknown</resolution>
<plugins />
<pluginsIcons />
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -2408,20 +2542,23 @@
<pageTitle />
<pageIdAction>56</pageIdAction>
+
<pageId>80</pageId>
+ <bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
+ <generationTimeMilliseconds>109</generationTimeMilliseconds>
+ <generationTime>0.11s</generationTime>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <generationTimeMilliseconds>109</generationTimeMilliseconds>
- <generationTime>0.11s</generationTime>
- <interactionPosition>1</interactionPosition>
- <timeSpent>0</timeSpent>
- <timeSpentPretty>0s</timeSpentPretty>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>goal</type>
@@ -2440,18 +2577,21 @@
<pageTitle>301/URL = http%3A%2F%2Fexample.hello.com%2FTopic%2Fhw43061</pageTitle>
<pageIdAction>58</pageIdAction>
+
<pageId>81</pageId>
+ <bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
+ <interactionPosition>2</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>301</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition>2</interactionPosition>
- <timeSpent>0</timeSpent>
- <timeSpentPretty>0s</timeSpentPretty>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>action</type>
@@ -2459,7 +2599,14 @@
<pageTitle />
<pageIdAction>56</pageIdAction>
+
<pageId>91</pageId>
+ <bandwidth />
+ <generationTimeMilliseconds>109</generationTimeMilliseconds>
+ <generationTime>0.11s</generationTime>
+ <interactionPosition>3</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>Generation Time</customVariablePageName1>
@@ -2474,11 +2621,7 @@
<customVariablePageValue3>200</customVariablePageValue3>
</row>
</customVariables>
- <generationTimeMilliseconds>109</generationTimeMilliseconds>
- <generationTime>0.11s</generationTime>
- <interactionPosition>3</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -2488,13 +2631,18 @@
+
+
+
+
+
+
<userId>user1</userId>
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -2530,6 +2678,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/CM.png</browserIcon>
<browserCode>CM</browserCode>
<browserVersion>39.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>North America</continent>
<continentCode>amn</continentCode>
@@ -2554,17 +2708,6 @@
<resolution>unknown</resolution>
<plugins />
<pluginsIcons />
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -2589,18 +2732,21 @@
<pageTitle>404/URL = http%3A%2F%2Fhello.example.com%2Fhello%2Fworld%2F6%2C681965</pageTitle>
<pageIdAction>60</pageIdAction>
+
<pageId>82</pageId>
+ <bandwidth />
+ <generationTimeMilliseconds>359</generationTimeMilliseconds>
+ <generationTime>0.36s</generationTime>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>404</customVariablePageValue1>
</row>
</customVariables>
- <generationTimeMilliseconds>359</generationTimeMilliseconds>
- <generationTime>0.36s</generationTime>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -2610,13 +2756,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -2652,6 +2803,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/CH.png</browserIcon>
<browserCode>CH</browserCode>
<browserVersion>37.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>North America</continent>
<continentCode>amn</continentCode>
@@ -2672,17 +2829,6 @@
<resolution>unknown</resolution>
<plugins />
<pluginsIcons />
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -2696,7 +2842,16 @@
<pageTitle>404/URL = http%3A%2F%2Fhello.example.com%2Fhello%2Fworld%2F6%2C681965</pageTitle>
<pageIdAction>60</pageIdAction>
+
<pageId>93</pageId>
+ <bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
+ <generationTimeMilliseconds>359</generationTimeMilliseconds>
+ <generationTime>0.36s</generationTime>
+ <interactionPosition>2</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>Generation Time</customVariablePageName1>
@@ -2711,13 +2866,7 @@
<customVariablePageValue3>404</customVariablePageValue3>
</row>
</customVariables>
- <generationTimeMilliseconds>359</generationTimeMilliseconds>
- <generationTime>0.36s</generationTime>
- <interactionPosition>2</interactionPosition>
- <timeSpent>0</timeSpent>
- <timeSpentPretty>0s</timeSpentPretty>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>goal</type>
@@ -2736,18 +2885,21 @@
<pageTitle />
<pageIdAction>61</pageIdAction>
+
<pageId>83</pageId>
+ <bandwidth />
+ <generationTimeMilliseconds>359</generationTimeMilliseconds>
+ <generationTime>0.36s</generationTime>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <generationTimeMilliseconds>359</generationTimeMilliseconds>
- <generationTime>0.36s</generationTime>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -2757,13 +2909,18 @@
+
+
+
+
+
+
<userId>user2</userId>
<visitorType>returning</visitorType>
<visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -2799,6 +2956,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/CH.png</browserIcon>
<browserCode>CH</browserCode>
<browserVersion>37.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>North America</continent>
<continentCode>amn</continentCode>
@@ -2819,17 +2982,6 @@
<resolution>unknown</resolution>
<plugins />
<pluginsIcons />
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -2854,7 +3006,12 @@
<pageTitle>301/URL = http%3A%2F%2Fexample.hello.com%2FTopic%2Fhw43061</pageTitle>
<pageIdAction>58</pageIdAction>
+
<pageId>92</pageId>
+ <bandwidth />
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>Generation Time</customVariablePageName1>
@@ -2869,9 +3026,7 @@
<customVariablePageValue3>301</customVariablePageValue3>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -2881,13 +3036,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -2923,6 +3083,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/CH.png</browserIcon>
<browserCode>CH</browserCode>
<browserVersion>41.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>North America</continent>
<continentCode>amn</continentCode>
@@ -2947,17 +3113,6 @@
<resolution>unknown</resolution>
<plugins />
<pluginsIcons />
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -2982,7 +3137,12 @@
<pageTitle>incredible title!</pageTitle>
<pageIdAction>29</pageIdAction>
+
<pageId>30</pageId>
+ <bandwidth>43</bandwidth>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName3>_pks</customVariablePageName3>
@@ -2997,9 +3157,7 @@
<customVariablePageValue5>Electronics &amp; Cameras</customVariablePageValue5>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>43 B</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -3009,13 +3167,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -3051,6 +3214,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/IE.png</browserIcon>
<browserCode>IE</browserCode>
<browserVersion>6.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Unknown</continent>
<continentCode>unk</continentCode>
@@ -3073,9 +3242,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -3084,17 +3257,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -3119,16 +3281,19 @@
<pageTitle>Piwik Forums</pageTitle>
<pageIdAction>31</pageIdAction>
+
<pageId>31</pageId>
+ <bandwidth>43</bandwidth>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>43 B</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -3138,13 +3303,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returning</visitorType>
<visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>444</daysSinceFirstVisit>
@@ -3180,6 +3350,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/CH.png</browserIcon>
<browserCode>CH</browserCode>
<browserVersion>11.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Unknown</continent>
<continentCode>unk</continentCode>
@@ -3202,44 +3378,37 @@
</row>
</customVariables>
<resolution>1280x800</resolution>
- <plugins>pdf, flash, java, director, windowsmedia, gears</plugins>
+ <plugins>cookie, director, flash, gears, java, pdf, windowsmedia</plugins>
<pluginsIcons>
<row>
- <pluginIcon>plugins/Morpheus/icons/dist/plugins/pdf.png</pluginIcon>
- <pluginName>pdf</pluginName>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/director.png</pluginIcon>
+ <pluginName>director</pluginName>
</row>
<row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/gears.png</pluginIcon>
+ <pluginName>gears</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/java.png</pluginIcon>
<pluginName>java</pluginName>
</row>
<row>
- <pluginIcon>plugins/Morpheus/icons/dist/plugins/director.png</pluginIcon>
- <pluginName>director</pluginName>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/pdf.png</pluginIcon>
+ <pluginName>pdf</pluginName>
</row>
<row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/windowsmedia.png</pluginIcon>
<pluginName>windowsmedia</pluginName>
</row>
- <row>
- <pluginIcon>plugins/Morpheus/icons/dist/plugins/gears.png</pluginIcon>
- <pluginName>gears</pluginName>
- </row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -3264,18 +3433,21 @@
<pageTitle />
<pageIdAction>5</pageIdAction>
+
<pageId>89</pageId>
+ <bandwidth>915</bandwidth>
+ <generationTimeMilliseconds>1</generationTimeMilliseconds>
+ <generationTime>0.001s</generationTime>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <generationTimeMilliseconds>1</generationTimeMilliseconds>
- <generationTime>0.001s</generationTime>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>915 B</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -3285,13 +3457,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -3327,6 +3504,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/CH.png</browserIcon>
<browserCode>CH</browserCode>
<browserVersion>39.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>North America</continent>
<continentCode>amn</continentCode>
@@ -3347,17 +3530,6 @@
<resolution>unknown</resolution>
<plugins />
<pluginsIcons />
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -3382,18 +3554,21 @@
<pageTitle />
<pageIdAction>71</pageIdAction>
+
<pageId>90</pageId>
+ <bandwidth>267</bandwidth>
+ <generationTimeMilliseconds>9</generationTimeMilliseconds>
+ <generationTime>0.009s</generationTime>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <generationTimeMilliseconds>9</generationTimeMilliseconds>
- <generationTime>0.009s</generationTime>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>267 B</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -3403,13 +3578,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -3445,6 +3625,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/UNK.png</browserIcon>
<browserCode>UNK</browserCode>
<browserVersion>1.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>North America</continent>
<continentCode>amn</continentCode>
@@ -3465,17 +3651,6 @@
<resolution>unknown</resolution>
<plugins />
<pluginsIcons />
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -3488,19 +3663,22 @@
<url>http://piwik.net/shqshne4jdp4b6.cloudfront.net/cfx/st​?key=value</url>
<pageIdAction>66</pageIdAction>
+
<pageId>88</pageId>
<eventCategory>cloudfront_rtmp</eventCategory>
<eventAction>play</eventAction>
+ <bandwidth>3914</bandwidth>
+ <interactionPosition />
+
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>myvideo</eventName>
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <eventName>myvideo</eventName>
- <interactionPosition />
- <icon>plugins/Morpheus/images/event.png</icon>
-
+ <bandwidth_pretty>3.8 K</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -3510,13 +3688,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -3552,6 +3735,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/UNK.png</browserIcon>
<browserCode>UNK</browserCode>
<browserVersion />
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>1</events>
<continent>Unknown</continent>
<continentCode>unk</continentCode>
@@ -3572,17 +3761,6 @@
<resolution>unknown</resolution>
<plugins />
<pluginsIcons />
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -3595,18 +3773,21 @@
<url>http://piwik.net/shqshne4jdp4b6.cloudfront.net/cfx/st​?key=value</url>
<pageIdAction>66</pageIdAction>
+
<pageId>87</pageId>
<eventCategory>cloudfront_rtmp</eventCategory>
<eventAction>connect</eventAction>
+ <bandwidth>2014</bandwidth>
+ <interactionPosition />
+
+ <icon>plugins/Morpheus/images/event.png</icon>
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition />
- <icon>plugins/Morpheus/images/event.png</icon>
-
+ <bandwidth_pretty>2 K</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -3616,13 +3797,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -3658,6 +3844,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/UNK.png</browserIcon>
<browserCode>UNK</browserCode>
<browserVersion />
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>1</events>
<continent>Unknown</continent>
<continentCode>unk</continentCode>
@@ -3678,17 +3870,6 @@
<resolution>unknown</resolution>
<plugins />
<pluginsIcons />
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -3713,16 +3894,19 @@
<pageTitle />
<pageIdAction>1</pageIdAction>
+
<pageId>28</pageId>
+ <bandwidth>3574</bandwidth>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>3.5 K</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -3732,13 +3916,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -3774,6 +3963,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/RM.png</browserIcon>
<browserCode>RM</browserCode>
<browserVersion>0.9</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Asia</continent>
<continentCode>asi</continentCode>
@@ -3798,17 +3993,6 @@
<resolution>unknown</resolution>
<plugins />
<pluginsIcons />
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -3833,16 +4017,19 @@
<pageTitle />
<pageIdAction>1</pageIdAction>
+
<pageId>29</pageId>
+ <bandwidth>3574</bandwidth>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>3.5 K</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -3852,13 +4039,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -3894,6 +4086,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/RM.png</browserIcon>
<browserCode>RM</browserCode>
<browserVersion>0.9</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Asia</continent>
<continentCode>asi</continentCode>
@@ -3918,17 +4116,6 @@
<resolution>unknown</resolution>
<plugins />
<pluginsIcons />
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -3942,18 +4129,21 @@
<pageTitle>301/URL = http%3A%2F%2Fpiwik.net%2Fmoved-permanently</pageTitle>
<pageIdAction>25</pageIdAction>
+
<pageId>26</pageId>
+ <bandwidth>3574</bandwidth>
+ <timeSpent>180</timeSpent>
+ <timeSpentPretty>3 min 0s</timeSpentPretty>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>301</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
- <icon />
-
+ <bandwidth_pretty>3.5 K</bandwidth_pretty>
</row>
<row>
<type>goal</type>
@@ -3972,16 +4162,19 @@
<pageTitle>307/URL = http%3A%2F%2Fpiwik.net%2Ftemp-redirect</pageTitle>
<pageIdAction>27</pageIdAction>
+
<pageId>27</pageId>
+ <bandwidth>3574</bandwidth>
+ <interactionPosition>2</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>307</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition>2</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>3.5 K</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -3991,13 +4184,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -4033,6 +4231,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/RM.png</browserIcon>
<browserCode>RM</browserCode>
<browserVersion>0.9</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Asia</continent>
<continentCode>asi</continentCode>
@@ -4057,17 +4261,6 @@
<resolution>unknown</resolution>
<plugins />
<pluginsIcons />
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -4081,18 +4274,21 @@
<pageTitle />
<pageIdAction>21</pageIdAction>
+
<pageId>23</pageId>
+ <bandwidth>3574</bandwidth>
+ <timeSpent>61</timeSpent>
+ <timeSpentPretty>1 min 1s</timeSpentPretty>
+ <interactionPosition />
+ <icon>plugins/Morpheus/images/download.png</icon>
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition />
- <timeSpent>61</timeSpent>
- <timeSpentPretty>1 min 1s</timeSpentPretty>
- <icon>plugins/Morpheus/images/download.png</icon>
-
+ <bandwidth_pretty>3.5 K</bandwidth_pretty>
</row>
<row>
<type>download</type>
@@ -4100,18 +4296,21 @@
<pageTitle />
<pageIdAction>22</pageIdAction>
+
<pageId>24</pageId>
+ <bandwidth>3574</bandwidth>
+ <timeSpent>61</timeSpent>
+ <timeSpentPretty>1 min 1s</timeSpentPretty>
+ <interactionPosition />
+ <icon>plugins/Morpheus/images/download.png</icon>
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition />
- <timeSpent>61</timeSpent>
- <timeSpentPretty>1 min 1s</timeSpentPretty>
- <icon>plugins/Morpheus/images/download.png</icon>
-
+ <bandwidth_pretty>3.5 K</bandwidth_pretty>
</row>
<row>
<type>download</type>
@@ -4119,16 +4318,19 @@
<pageTitle />
<pageIdAction>23</pageIdAction>
+
<pageId>25</pageId>
+ <bandwidth>3574</bandwidth>
+ <interactionPosition />
+ <icon>plugins/Morpheus/images/download.png</icon>
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition />
- <icon>plugins/Morpheus/images/download.png</icon>
-
+ <bandwidth_pretty>3.5 K</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -4138,13 +4340,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -4180,6 +4387,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/RM.png</browserIcon>
<browserCode>RM</browserCode>
<browserVersion>0.9</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Asia</continent>
<continentCode>asi</continentCode>
@@ -4204,17 +4417,6 @@
<resolution>unknown</resolution>
<plugins />
<pluginsIcons />
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -4239,16 +4441,19 @@
<pageTitle />
<pageIdAction>5</pageIdAction>
+
<pageId>22</pageId>
+ <bandwidth>3574</bandwidth>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>3.5 K</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -4258,13 +4463,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -4300,6 +4510,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/UNK.png</browserIcon>
<browserCode>UNK</browserCode>
<browserVersion />
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>North America</continent>
<continentCode>amn</continentCode>
@@ -4324,17 +4540,6 @@
<resolution>unknown</resolution>
<plugins />
<pluginsIcons />
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -4359,16 +4564,19 @@
<pageTitle>500/URL = http%3A%2F%2Fpiwik.net%2Fto-an-error</pageTitle>
<pageIdAction>20</pageIdAction>
+
<pageId>21</pageId>
+ <bandwidth>3574</bandwidth>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>500</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>3.5 K</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -4378,13 +4586,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -4420,6 +4633,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/IE.png</browserIcon>
<browserCode>IE</browserCode>
<browserVersion>9.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>North America</continent>
<continentCode>amn</continentCode>
@@ -4444,17 +4663,6 @@
<resolution>unknown</resolution>
<plugins />
<pluginsIcons />
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -4468,16 +4676,19 @@
<pageTitle />
<pageIdAction>16</pageIdAction>
+
<pageId>18</pageId>
+ <bandwidth>4324023</bandwidth>
+ <interactionPosition />
+ <icon>plugins/Morpheus/images/download.png</icon>
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition />
- <icon>plugins/Morpheus/images/download.png</icon>
-
+ <bandwidth_pretty>4.1 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -4487,13 +4698,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -4529,6 +4745,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/UNK.png</browserIcon>
<browserCode>UNK</browserCode>
<browserVersion />
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Oceania</continent>
<continentCode>oce</continentCode>
@@ -4553,17 +4775,6 @@
<resolution>unknown</resolution>
<plugins />
<pluginsIcons />
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -4588,16 +4799,19 @@
<pageTitle>404/URL = http%3A%2F%2Fpiwik.net%2Fthis%2Fis%2Fnot%2Fthe%2Fpage%2Fi%2Fam%2Flooking%2Ffor%2F</pageTitle>
<pageIdAction>18</pageIdAction>
+
<pageId>20</pageId>
+ <bandwidth>3574</bandwidth>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>404</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>3.5 K</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -4607,13 +4821,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -4649,6 +4868,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/AN.png</browserIcon>
<browserCode>AN</browserCode>
<browserVersion />
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Asia</continent>
<continentCode>asi</continentCode>
@@ -4673,17 +4898,6 @@
<resolution>unknown</resolution>
<plugins />
<pluginsIcons />
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -4708,16 +4922,19 @@
<pageTitle />
<pageIdAction>1</pageIdAction>
+
<pageId>19</pageId>
+ <bandwidth>3574</bandwidth>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>3.5 K</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -4727,13 +4944,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -4769,6 +4991,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/RM.png</browserIcon>
<browserCode>RM</browserCode>
<browserVersion>0.9</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Asia</continent>
<continentCode>asi</continentCode>
@@ -4793,17 +5021,6 @@
<resolution>unknown</resolution>
<plugins />
<pluginsIcons />
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -4828,16 +5045,19 @@
<pageTitle />
<pageIdAction>15</pageIdAction>
+
<pageId>17</pageId>
+ <bandwidth>3574</bandwidth>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>3.5 K</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -4847,13 +5067,18 @@
+
+
+
+
+
+
<userId>commonuser</userId>
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -4889,6 +5114,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/CH.png</browserIcon>
<browserCode>CH</browserCode>
<browserVersion>20.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Unknown</continent>
<continentCode>unk</continentCode>
@@ -4909,17 +5140,6 @@
<resolution>unknown</resolution>
<plugins />
<pluginsIcons />
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -4944,16 +5164,19 @@
<pageTitle />
<pageIdAction>14</pageIdAction>
+
<pageId>16</pageId>
+ <bandwidth>3574</bandwidth>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>3.5 K</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -4963,13 +5186,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -5000,11 +5228,17 @@
<operatingSystemVersion />
<browserFamily>WebKit</browserFamily>
<browserFamilyDescription>WebKit (Safari, Chrome)</browserFamilyDescription>
- <browser>Epiphany 2.30</browser>
- <browserName>Epiphany</browserName>
+ <browser>GNOME Web 2.30</browser>
+ <browserName>GNOME Web</browserName>
<browserIcon>plugins/Morpheus/icons/dist/browsers/EP.png</browserIcon>
<browserCode>EP</browserCode>
<browserVersion>2.30</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Unknown</continent>
<continentCode>unk</continentCode>
@@ -5025,17 +5259,6 @@
<resolution>unknown</resolution>
<plugins />
<pluginsIcons />
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -5060,16 +5283,19 @@
<pageTitle />
<pageIdAction>13</pageIdAction>
+
<pageId>15</pageId>
+ <bandwidth>3574</bandwidth>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>3.5 K</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -5079,13 +5305,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -5121,6 +5352,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/CH.png</browserIcon>
<browserCode>CH</browserCode>
<browserVersion>20.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>South America</continent>
<continentCode>ams</continentCode>
@@ -5141,17 +5378,6 @@
<resolution>unknown</resolution>
<plugins />
<pluginsIcons />
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -5176,16 +5402,19 @@
<pageTitle />
<pageIdAction>12</pageIdAction>
+
<pageId>14</pageId>
+ <bandwidth>3574</bandwidth>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>3.5 K</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -5195,13 +5424,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -5232,11 +5466,17 @@
<operatingSystemVersion />
<browserFamily>WebKit</browserFamily>
<browserFamilyDescription>WebKit (Safari, Chrome)</browserFamilyDescription>
- <browser>Epiphany 2.30</browser>
- <browserName>Epiphany</browserName>
+ <browser>GNOME Web 2.30</browser>
+ <browserName>GNOME Web</browserName>
<browserIcon>plugins/Morpheus/icons/dist/browsers/EP.png</browserIcon>
<browserCode>EP</browserCode>
<browserVersion>2.30</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>South America</continent>
<continentCode>ams</continentCode>
@@ -5257,17 +5497,6 @@
<resolution>unknown</resolution>
<plugins />
<pluginsIcons />
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -5292,16 +5521,19 @@
<pageTitle />
<pageIdAction>4</pageIdAction>
+
<pageId>13</pageId>
+ <bandwidth>3574</bandwidth>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>3.5 K</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -5311,13 +5543,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -5353,6 +5590,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/IE.png</browserIcon>
<browserCode>IE</browserCode>
<browserVersion>9.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>South America</continent>
<continentCode>ams</continentCode>
@@ -5373,17 +5616,6 @@
<resolution>unknown</resolution>
<plugins />
<pluginsIcons />
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -5408,16 +5640,19 @@
<pageTitle />
<pageIdAction>2</pageIdAction>
+
<pageId>12</pageId>
+ <bandwidth>3574</bandwidth>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>3.5 K</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -5427,13 +5662,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -5464,11 +5704,17 @@
<operatingSystemVersion />
<browserFamily>WebKit</browserFamily>
<browserFamilyDescription>WebKit (Safari, Chrome)</browserFamilyDescription>
- <browser>Epiphany 2.30</browser>
- <browserName>Epiphany</browserName>
+ <browser>GNOME Web 2.30</browser>
+ <browserName>GNOME Web</browserName>
<browserIcon>plugins/Morpheus/icons/dist/browsers/EP.png</browserIcon>
<browserCode>EP</browserCode>
<browserVersion>2.30</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Asia</continent>
<continentCode>asi</continentCode>
@@ -5489,17 +5735,6 @@
<resolution>unknown</resolution>
<plugins />
<pluginsIcons />
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -5524,16 +5759,19 @@
<pageTitle />
<pageIdAction>11</pageIdAction>
+
<pageId>11</pageId>
+ <bandwidth>3574</bandwidth>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>3.5 K</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -5543,13 +5781,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -5585,6 +5828,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/IE.png</browserIcon>
<browserCode>IE</browserCode>
<browserVersion>9.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Asia</continent>
<continentCode>asi</continentCode>
@@ -5605,17 +5854,6 @@
<resolution>unknown</resolution>
<plugins />
<pluginsIcons />
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -5640,16 +5878,19 @@
<pageTitle />
<pageIdAction>10</pageIdAction>
+
<pageId>10</pageId>
+ <bandwidth>3574</bandwidth>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>3.5 K</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -5659,13 +5900,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -5701,6 +5947,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/IE.png</browserIcon>
<browserCode>IE</browserCode>
<browserVersion>9.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Unknown</continent>
<continentCode>unk</continentCode>
@@ -5721,17 +5973,6 @@
<resolution>unknown</resolution>
<plugins />
<pluginsIcons />
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -5756,16 +5997,19 @@
<pageTitle />
<pageIdAction>9</pageIdAction>
+
<pageId>9</pageId>
+ <bandwidth>3574</bandwidth>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>3.5 K</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -5775,13 +6019,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -5817,6 +6066,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/CH.png</browserIcon>
<browserCode>CH</browserCode>
<browserVersion>19.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Unknown</continent>
<continentCode>unk</continentCode>
@@ -5837,17 +6092,6 @@
<resolution>unknown</resolution>
<plugins />
<pluginsIcons />
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -5872,16 +6116,19 @@
<pageTitle />
<pageIdAction>8</pageIdAction>
+
<pageId>8</pageId>
+ <bandwidth>3574</bandwidth>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>3.5 K</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -5891,13 +6138,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -5933,6 +6185,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>6.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Unknown</continent>
<continentCode>unk</continentCode>
@@ -5953,17 +6211,6 @@
<resolution>unknown</resolution>
<plugins />
<pluginsIcons />
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -5988,16 +6235,19 @@
<pageTitle />
<pageIdAction>7</pageIdAction>
+
<pageId>7</pageId>
+ <bandwidth>3574</bandwidth>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>3.5 K</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -6007,13 +6257,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -6049,6 +6304,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/CH.png</browserIcon>
<browserCode>CH</browserCode>
<browserVersion>19.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>North America</continent>
<continentCode>amn</continentCode>
@@ -6069,17 +6330,6 @@
<resolution>unknown</resolution>
<plugins />
<pluginsIcons />
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -6104,16 +6354,19 @@
<pageTitle />
<pageIdAction>6</pageIdAction>
+
<pageId>6</pageId>
+ <bandwidth>3574</bandwidth>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>3.5 K</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -6123,13 +6376,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -6160,11 +6418,17 @@
<operatingSystemVersion />
<browserFamily>WebKit</browserFamily>
<browserFamilyDescription>WebKit (Safari, Chrome)</browserFamilyDescription>
- <browser>Epiphany 2.30</browser>
- <browserName>Epiphany</browserName>
+ <browser>GNOME Web 2.30</browser>
+ <browserName>GNOME Web</browserName>
<browserIcon>plugins/Morpheus/icons/dist/browsers/EP.png</browserIcon>
<browserCode>EP</browserCode>
<browserVersion>2.30</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>North America</continent>
<continentCode>amn</continentCode>
@@ -6185,17 +6449,6 @@
<resolution>unknown</resolution>
<plugins />
<pluginsIcons />
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -6220,16 +6473,19 @@
<pageTitle />
<pageIdAction>5</pageIdAction>
+
<pageId>5</pageId>
+ <bandwidth>3574</bandwidth>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>3.5 K</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -6239,13 +6495,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -6281,6 +6542,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/IE.png</browserIcon>
<browserCode>IE</browserCode>
<browserVersion>9.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>North America</continent>
<continentCode>amn</continentCode>
@@ -6301,17 +6568,6 @@
<resolution>unknown</resolution>
<plugins />
<pluginsIcons />
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -6336,16 +6592,19 @@
<pageTitle />
<pageIdAction>4</pageIdAction>
+
<pageId>4</pageId>
+ <bandwidth>3574</bandwidth>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>3.5 K</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -6355,13 +6614,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -6397,6 +6661,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>6.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Asia</continent>
<continentCode>asi</continentCode>
@@ -6417,17 +6687,6 @@
<resolution>unknown</resolution>
<plugins />
<pluginsIcons />
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -6452,16 +6711,19 @@
<pageTitle />
<pageIdAction>3</pageIdAction>
+
<pageId>3</pageId>
+ <bandwidth>3574</bandwidth>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>3.5 K</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -6471,13 +6733,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -6508,11 +6775,17 @@
<operatingSystemVersion />
<browserFamily>WebKit</browserFamily>
<browserFamilyDescription>WebKit (Safari, Chrome)</browserFamilyDescription>
- <browser>Epiphany 2.30</browser>
- <browserName>Epiphany</browserName>
+ <browser>GNOME Web 2.30</browser>
+ <browserName>GNOME Web</browserName>
<browserIcon>plugins/Morpheus/icons/dist/browsers/EP.png</browserIcon>
<browserCode>EP</browserCode>
<browserVersion>2.30</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Asia</continent>
<continentCode>asi</continentCode>
@@ -6533,17 +6806,6 @@
<resolution>unknown</resolution>
<plugins />
<pluginsIcons />
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -6568,16 +6830,19 @@
<pageTitle />
<pageIdAction>2</pageIdAction>
+
<pageId>2</pageId>
+ <bandwidth>3574</bandwidth>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>3.5 K</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -6587,13 +6852,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -6629,6 +6899,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/AN.png</browserIcon>
<browserCode>AN</browserCode>
<browserVersion />
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Asia</continent>
<continentCode>asi</continentCode>
@@ -6649,17 +6925,6 @@
<resolution>unknown</resolution>
<plugins />
<pluginsIcons />
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -6684,16 +6949,19 @@
<pageTitle />
<pageIdAction>1</pageIdAction>
+
<pageId>1</pageId>
+ <bandwidth>3574</bandwidth>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>3.5 K</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -6703,13 +6971,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -6745,6 +7018,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/RM.png</browserIcon>
<browserCode>RM</browserCode>
<browserVersion>0.9</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Asia</continent>
<continentCode>asi</continentCode>
@@ -6765,16 +7044,5 @@
<resolution>unknown</resolution>
<plugins />
<pluginsIcons />
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ImportLogs__Resolution.getConfiguration_month.xml b/tests/PHPUnit/System/expected/test_ImportLogs__Resolution.getConfiguration_month.xml
index 06ad7df1f9..b31bc62a1c 100644
--- a/tests/PHPUnit/System/expected/test_ImportLogs__Resolution.getConfiguration_month.xml
+++ b/tests/PHPUnit/System/expected/test_ImportLogs__Resolution.getConfiguration_month.xml
@@ -23,7 +23,7 @@
<sum_daily_nb_users>0</sum_daily_nb_users>
</row>
<row>
- <label>GNU/Linux / Epiphany / unknown</label>
+ <label>GNU/Linux / GNOME Web / unknown</label>
<nb_visits>5</nb_visits>
<nb_actions>5</nb_actions>
<max_actions>1</max_actions>
diff --git a/tests/PHPUnit/System/expected/test_ImportLogs__VisitTime.getVisitInformationPerLocalTime_month.xml b/tests/PHPUnit/System/expected/test_ImportLogs__VisitTime.getVisitInformationPerLocalTime_month.xml
index 46f45bc7b3..79a0caae72 100644
--- a/tests/PHPUnit/System/expected/test_ImportLogs__VisitTime.getVisitInformationPerLocalTime_month.xml
+++ b/tests/PHPUnit/System/expected/test_ImportLogs__VisitTime.getVisitInformationPerLocalTime_month.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" ?>
<result>
<row>
- <label>0h</label>
+ <label>00</label>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
<max_actions>0</max_actions>
@@ -13,7 +13,7 @@
<segment>visitLocalHour==0</segment>
</row>
<row>
- <label>1h</label>
+ <label>01</label>
<nb_visits>1</nb_visits>
<nb_actions>1</nb_actions>
<max_actions>1</max_actions>
@@ -25,7 +25,7 @@
<segment>visitLocalHour==1</segment>
</row>
<row>
- <label>2h</label>
+ <label>02</label>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
<max_actions>0</max_actions>
@@ -37,7 +37,7 @@
<segment>visitLocalHour==2</segment>
</row>
<row>
- <label>3h</label>
+ <label>03</label>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
<max_actions>0</max_actions>
@@ -49,7 +49,7 @@
<segment>visitLocalHour==3</segment>
</row>
<row>
- <label>4h</label>
+ <label>04</label>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
<max_actions>0</max_actions>
@@ -61,7 +61,7 @@
<segment>visitLocalHour==4</segment>
</row>
<row>
- <label>5h</label>
+ <label>05</label>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
<max_actions>0</max_actions>
@@ -73,7 +73,7 @@
<segment>visitLocalHour==5</segment>
</row>
<row>
- <label>6h</label>
+ <label>06</label>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
<max_actions>0</max_actions>
@@ -85,7 +85,7 @@
<segment>visitLocalHour==6</segment>
</row>
<row>
- <label>7h</label>
+ <label>07</label>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
<max_actions>0</max_actions>
@@ -97,7 +97,7 @@
<segment>visitLocalHour==7</segment>
</row>
<row>
- <label>8h</label>
+ <label>08</label>
<nb_visits>5</nb_visits>
<nb_actions>5</nb_actions>
<max_actions>1</max_actions>
@@ -109,7 +109,7 @@
<segment>visitLocalHour==8</segment>
</row>
<row>
- <label>9h</label>
+ <label>09</label>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
<max_actions>0</max_actions>
@@ -121,7 +121,7 @@
<segment>visitLocalHour==9</segment>
</row>
<row>
- <label>10h</label>
+ <label>10</label>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
<max_actions>0</max_actions>
@@ -133,7 +133,7 @@
<segment>visitLocalHour==10</segment>
</row>
<row>
- <label>11h</label>
+ <label>11</label>
<nb_visits>1</nb_visits>
<nb_actions>2</nb_actions>
<max_actions>2</max_actions>
@@ -145,7 +145,7 @@
<segment>visitLocalHour==11</segment>
</row>
<row>
- <label>12h</label>
+ <label>12</label>
<nb_visits>3</nb_visits>
<nb_actions>3</nb_actions>
<max_actions>1</max_actions>
@@ -157,7 +157,7 @@
<segment>visitLocalHour==12</segment>
</row>
<row>
- <label>13h</label>
+ <label>13</label>
<nb_visits>4</nb_visits>
<nb_actions>4</nb_actions>
<max_actions>1</max_actions>
@@ -169,7 +169,7 @@
<segment>visitLocalHour==13</segment>
</row>
<row>
- <label>14h</label>
+ <label>14</label>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
<max_actions>0</max_actions>
@@ -181,7 +181,7 @@
<segment>visitLocalHour==14</segment>
</row>
<row>
- <label>15h</label>
+ <label>15</label>
<nb_visits>1</nb_visits>
<nb_actions>1</nb_actions>
<max_actions>1</max_actions>
@@ -193,7 +193,7 @@
<segment>visitLocalHour==15</segment>
</row>
<row>
- <label>16h</label>
+ <label>16</label>
<nb_visits>2</nb_visits>
<nb_actions>2</nb_actions>
<max_actions>1</max_actions>
@@ -205,7 +205,7 @@
<segment>visitLocalHour==16</segment>
</row>
<row>
- <label>17h</label>
+ <label>17</label>
<nb_visits>8</nb_visits>
<nb_actions>11</nb_actions>
<max_actions>3</max_actions>
@@ -217,7 +217,7 @@
<segment>visitLocalHour==17</segment>
</row>
<row>
- <label>18h</label>
+ <label>18</label>
<nb_visits>2</nb_visits>
<nb_actions>4</nb_actions>
<max_actions>3</max_actions>
@@ -229,7 +229,7 @@
<segment>visitLocalHour==18</segment>
</row>
<row>
- <label>19h</label>
+ <label>19</label>
<nb_visits>2</nb_visits>
<nb_actions>3</nb_actions>
<max_actions>2</max_actions>
@@ -241,7 +241,7 @@
<segment>visitLocalHour==19</segment>
</row>
<row>
- <label>20h</label>
+ <label>20</label>
<nb_visits>7</nb_visits>
<nb_actions>7</nb_actions>
<max_actions>1</max_actions>
@@ -253,7 +253,7 @@
<segment>visitLocalHour==20</segment>
</row>
<row>
- <label>21h</label>
+ <label>21</label>
<nb_visits>1</nb_visits>
<nb_actions>1</nb_actions>
<max_actions>1</max_actions>
@@ -265,7 +265,7 @@
<segment>visitLocalHour==21</segment>
</row>
<row>
- <label>22h</label>
+ <label>22</label>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
<max_actions>0</max_actions>
@@ -277,7 +277,7 @@
<segment>visitLocalHour==22</segment>
</row>
<row>
- <label>23h</label>
+ <label>23</label>
<nb_visits>2</nb_visits>
<nb_actions>2</nb_actions>
<max_actions>1</max_actions>
diff --git a/tests/PHPUnit/System/expected/test_ImportLogs__VisitTime.getVisitInformationPerServerTime_month.xml b/tests/PHPUnit/System/expected/test_ImportLogs__VisitTime.getVisitInformationPerServerTime_month.xml
index 09be75ee74..d4bcc2ab0c 100644
--- a/tests/PHPUnit/System/expected/test_ImportLogs__VisitTime.getVisitInformationPerServerTime_month.xml
+++ b/tests/PHPUnit/System/expected/test_ImportLogs__VisitTime.getVisitInformationPerServerTime_month.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" ?>
<result>
<row>
- <label>0h</label>
+ <label>00</label>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
<max_actions>0</max_actions>
@@ -13,7 +13,7 @@
<segment>visitServerHour==0</segment>
</row>
<row>
- <label>1h</label>
+ <label>01</label>
<nb_visits>1</nb_visits>
<nb_actions>1</nb_actions>
<max_actions>1</max_actions>
@@ -34,7 +34,7 @@
<segment>visitServerHour==1</segment>
</row>
<row>
- <label>2h</label>
+ <label>02</label>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
<max_actions>0</max_actions>
@@ -46,7 +46,7 @@
<segment>visitServerHour==2</segment>
</row>
<row>
- <label>3h</label>
+ <label>03</label>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
<max_actions>0</max_actions>
@@ -58,7 +58,7 @@
<segment>visitServerHour==3</segment>
</row>
<row>
- <label>4h</label>
+ <label>04</label>
<nb_visits>1</nb_visits>
<nb_actions>1</nb_actions>
<max_actions>1</max_actions>
@@ -79,7 +79,7 @@
<segment>visitServerHour==4</segment>
</row>
<row>
- <label>5h</label>
+ <label>05</label>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
<max_actions>0</max_actions>
@@ -91,7 +91,7 @@
<segment>visitServerHour==5</segment>
</row>
<row>
- <label>6h</label>
+ <label>06</label>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
<max_actions>0</max_actions>
@@ -103,7 +103,7 @@
<segment>visitServerHour==6</segment>
</row>
<row>
- <label>7h</label>
+ <label>07</label>
<nb_visits>1</nb_visits>
<nb_actions>1</nb_actions>
<max_actions>1</max_actions>
@@ -124,7 +124,7 @@
<segment>visitServerHour==7</segment>
</row>
<row>
- <label>8h</label>
+ <label>08</label>
<nb_visits>4</nb_visits>
<nb_actions>4</nb_actions>
<max_actions>1</max_actions>
@@ -145,7 +145,7 @@
<segment>visitServerHour==8</segment>
</row>
<row>
- <label>9h</label>
+ <label>09</label>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
<max_actions>0</max_actions>
@@ -157,7 +157,7 @@
<segment>visitServerHour==9</segment>
</row>
<row>
- <label>10h</label>
+ <label>10</label>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
<max_actions>0</max_actions>
@@ -169,7 +169,7 @@
<segment>visitServerHour==10</segment>
</row>
<row>
- <label>11h</label>
+ <label>11</label>
<nb_visits>1</nb_visits>
<nb_actions>2</nb_actions>
<max_actions>2</max_actions>
@@ -190,7 +190,7 @@
<segment>visitServerHour==11</segment>
</row>
<row>
- <label>12h</label>
+ <label>12</label>
<nb_visits>2</nb_visits>
<nb_actions>2</nb_actions>
<max_actions>1</max_actions>
@@ -211,7 +211,7 @@
<segment>visitServerHour==12</segment>
</row>
<row>
- <label>13h</label>
+ <label>13</label>
<nb_visits>4</nb_visits>
<nb_actions>4</nb_actions>
<max_actions>1</max_actions>
@@ -232,7 +232,7 @@
<segment>visitServerHour==13</segment>
</row>
<row>
- <label>14h</label>
+ <label>14</label>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
<max_actions>0</max_actions>
@@ -244,7 +244,7 @@
<segment>visitServerHour==14</segment>
</row>
<row>
- <label>15h</label>
+ <label>15</label>
<nb_visits>1</nb_visits>
<nb_actions>1</nb_actions>
<max_actions>1</max_actions>
@@ -265,7 +265,7 @@
<segment>visitServerHour==15</segment>
</row>
<row>
- <label>16h</label>
+ <label>16</label>
<nb_visits>2</nb_visits>
<nb_actions>2</nb_actions>
<max_actions>1</max_actions>
@@ -286,7 +286,7 @@
<segment>visitServerHour==16</segment>
</row>
<row>
- <label>17h</label>
+ <label>17</label>
<nb_visits>8</nb_visits>
<nb_actions>11</nb_actions>
<max_actions>3</max_actions>
@@ -307,7 +307,7 @@
<segment>visitServerHour==17</segment>
</row>
<row>
- <label>18h</label>
+ <label>18</label>
<nb_visits>2</nb_visits>
<nb_actions>4</nb_actions>
<max_actions>3</max_actions>
@@ -328,7 +328,7 @@
<segment>visitServerHour==18</segment>
</row>
<row>
- <label>19h</label>
+ <label>19</label>
<nb_visits>2</nb_visits>
<nb_actions>3</nb_actions>
<max_actions>2</max_actions>
@@ -349,7 +349,7 @@
<segment>visitServerHour==19</segment>
</row>
<row>
- <label>20h</label>
+ <label>20</label>
<nb_visits>7</nb_visits>
<nb_actions>7</nb_actions>
<max_actions>1</max_actions>
@@ -370,7 +370,7 @@
<segment>visitServerHour==20</segment>
</row>
<row>
- <label>21h</label>
+ <label>21</label>
<nb_visits>1</nb_visits>
<nb_actions>1</nb_actions>
<max_actions>1</max_actions>
@@ -391,7 +391,7 @@
<segment>visitServerHour==21</segment>
</row>
<row>
- <label>22h</label>
+ <label>22</label>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
<max_actions>0</max_actions>
@@ -403,7 +403,7 @@
<segment>visitServerHour==22</segment>
</row>
<row>
- <label>23h</label>
+ <label>23</label>
<nb_visits>2</nb_visits>
<nb_actions>2</nb_actions>
<max_actions>1</max_actions>
diff --git a/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Live.getLastVisitsDetails_range.xml b/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Live.getLastVisitsDetails_range.xml
index 5d892a0c33..b2aeea41a4 100644
--- a/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Live.getLastVisitsDetails_range.xml
+++ b/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Live.getLastVisitsDetails_range.xml
@@ -12,18 +12,21 @@
<pageTitle>Liberate Web Analytics - Analytics - Piwik</pageTitle>
<pageIdAction>35</pageIdAction>
+
<pageId>69</pageId>
+ <bandwidth>43</bandwidth>
+ <generationTimeMilliseconds>292</generationTimeMilliseconds>
+ <generationTime>0.29s</generationTime>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <generationTimeMilliseconds>292</generationTimeMilliseconds>
- <generationTime>0.29s</generationTime>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>43 B</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -33,13 +36,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returning</visitorType>
<visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>77</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -75,6 +83,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/CH.png</browserIcon>
<browserCode>CH</browserCode>
<browserVersion>33.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>North America</continent>
<continentCode>amn</continentCode>
@@ -97,11 +111,11 @@
</row>
</customVariables>
<resolution>1366x768</resolution>
- <plugins>pdf, flash, java</plugins>
+ <plugins>cookie, flash, java, pdf</plugins>
<pluginsIcons>
<row>
- <pluginIcon>plugins/Morpheus/icons/dist/plugins/pdf.png</pluginIcon>
- <pluginName>pdf</pluginName>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
</row>
<row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
@@ -111,18 +125,11 @@
<pluginIcon>plugins/Morpheus/icons/dist/plugins/java.png</pluginIcon>
<pluginName>java</pluginName>
</row>
+ <row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/pdf.png</pluginIcon>
+ <pluginName>pdf</pluginName>
+ </row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>3</idSite>
@@ -136,18 +143,21 @@
<pageTitle>Changelog Archive - Analytics - Piwik</pageTitle>
<pageIdAction>44</pageIdAction>
+
<pageId>60</pageId>
+ <bandwidth>43</bandwidth>
+ <timeSpent>79</timeSpent>
+ <timeSpentPretty>1 min 19s</timeSpentPretty>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <timeSpent>79</timeSpent>
- <timeSpentPretty>1 min 19s</timeSpentPretty>
- <icon />
-
+ <bandwidth_pretty>43 B</bandwidth_pretty>
</row>
<row>
<type>action</type>
@@ -155,16 +165,19 @@
<pageTitle>Contact the Piwik team - Analytics - Piwik</pageTitle>
<pageIdAction>55</pageIdAction>
+
<pageId>68</pageId>
+ <bandwidth>43</bandwidth>
+ <interactionPosition>2</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition>2</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>43 B</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -174,13 +187,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returning</visitorType>
<visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>2</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>181</daysSinceFirstVisit>
@@ -216,6 +234,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/IE.png</browserIcon>
<browserCode>IE</browserCode>
<browserVersion>8.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>North America</continent>
<continentCode>amn</continentCode>
@@ -240,17 +264,6 @@
<resolution>1536x864</resolution>
<plugins />
<pluginsIcons />
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>3</idSite>
@@ -264,18 +277,21 @@
<pageTitle>demo.piwik.org/Piwik Forums - Piwik › Web Analytics Reports</pageTitle>
<pageIdAction>53</pageIdAction>
+
<pageId>67</pageId>
+ <bandwidth>43</bandwidth>
+ <generationTimeMilliseconds>413</generationTimeMilliseconds>
+ <generationTime>0.41s</generationTime>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <generationTimeMilliseconds>413</generationTimeMilliseconds>
- <generationTime>0.41s</generationTime>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>43 B</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -285,13 +301,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returning</visitorType>
<visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -327,6 +348,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/CH.png</browserIcon>
<browserCode>CH</browserCode>
<browserVersion>34.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -353,11 +380,11 @@
</row>
</customVariables>
<resolution>1920x1200</resolution>
- <plugins>pdf, flash, java, quicktime, silverlight</plugins>
+ <plugins>cookie, flash, java, pdf, quicktime, silverlight</plugins>
<pluginsIcons>
<row>
- <pluginIcon>plugins/Morpheus/icons/dist/plugins/pdf.png</pluginIcon>
- <pluginName>pdf</pluginName>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
</row>
<row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
@@ -368,6 +395,10 @@
<pluginName>java</pluginName>
</row>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/pdf.png</pluginIcon>
+ <pluginName>pdf</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/quicktime.png</pluginIcon>
<pluginName>quicktime</pluginName>
</row>
@@ -376,17 +407,6 @@
<pluginName>silverlight</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>3</idSite>
@@ -400,18 +420,21 @@
<pageTitle>Liberate Web Analytics - Analytics - Piwik</pageTitle>
<pageIdAction>35</pageIdAction>
+
<pageId>64</pageId>
+ <bandwidth>43</bandwidth>
+ <timeSpent>32</timeSpent>
+ <timeSpentPretty>32s</timeSpentPretty>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <timeSpent>32</timeSpent>
- <timeSpentPretty>32s</timeSpentPretty>
- <icon />
-
+ <bandwidth_pretty>43 B</bandwidth_pretty>
</row>
<row>
<type>action</type>
@@ -419,16 +442,19 @@
<pageTitle>What is Piwik? - Analytics - Piwik</pageTitle>
<pageIdAction>51</pageIdAction>
+
<pageId>66</pageId>
+ <bandwidth>43</bandwidth>
+ <interactionPosition>2</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>501</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition>2</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>43 B</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -438,13 +464,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returning</visitorType>
<visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>7</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>17</daysSinceFirstVisit>
@@ -459,7 +490,7 @@
<referrerName>Google</referrerName>
<referrerKeyword>Keyword not defined</referrerKeyword>
<referrerKeywordPosition>1</referrerKeywordPosition>
- <referrerUrl>http://piwik.org/faq/general/#faq_144</referrerUrl>
+ <referrerUrl>http://www.google.com/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=1&amp;ved=0CCcQFjAA&amp;url=http%3A%2F%2Fpiwik.org%2F&amp;ei=8vwgU8TYDZTI2wWTi4CQCA&amp;usg=AFQjCNF_MGJRqKPvaKuUokHtZ3VvNG9ALw&amp;bvm=bv.62922401,d.b2I</referrerUrl>
<referrerSearchEngineUrl>http://google.com</referrerSearchEngineUrl>
<referrerSearchEngineIcon>plugins/Morpheus/icons/dist/searchEngines/google.com.png</referrerSearchEngineIcon>
<languageCode />
@@ -480,6 +511,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/SF.png</browserIcon>
<browserCode>SF</browserCode>
<browserVersion>7.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>North America</continent>
<continentCode>amn</continentCode>
@@ -502,11 +539,11 @@
</row>
</customVariables>
<resolution>2880x1800</resolution>
- <plugins>pdf, flash, java, quicktime</plugins>
+ <plugins>cookie, flash, java, pdf, quicktime</plugins>
<pluginsIcons>
<row>
- <pluginIcon>plugins/Morpheus/icons/dist/plugins/pdf.png</pluginIcon>
- <pluginName>pdf</pluginName>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
</row>
<row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
@@ -517,21 +554,14 @@
<pluginName>java</pluginName>
</row>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/pdf.png</pluginIcon>
+ <pluginName>pdf</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/quicktime.png</pluginIcon>
<pluginName>quicktime</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>3</idSite>
@@ -545,16 +575,19 @@
<pageTitle />
<pageIdAction>49</pageIdAction>
+
<pageId>65</pageId>
+ <bandwidth>43</bandwidth>
+ <interactionPosition />
+ <icon>plugins/Morpheus/images/link.png</icon>
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition />
- <icon>plugins/Morpheus/images/link.png</icon>
-
+ <bandwidth_pretty>43 B</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -564,13 +597,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returning</visitorType>
<visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -606,6 +644,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/CH.png</browserIcon>
<browserCode>CH</browserCode>
<browserVersion>33.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -628,11 +672,11 @@
</row>
</customVariables>
<resolution>1920x1080</resolution>
- <plugins>pdf, flash, java, silverlight</plugins>
+ <plugins>cookie, flash, java, pdf, silverlight</plugins>
<pluginsIcons>
<row>
- <pluginIcon>plugins/Morpheus/icons/dist/plugins/pdf.png</pluginIcon>
- <pluginName>pdf</pluginName>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
</row>
<row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
@@ -643,21 +687,14 @@
<pluginName>java</pluginName>
</row>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/pdf.png</pluginIcon>
+ <pluginName>pdf</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/silverlight.png</pluginIcon>
<pluginName>silverlight</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>3</idSite>
@@ -671,18 +708,21 @@
<pageTitle>Integrate Piwik into your Rails Application - Analytics - Piwik</pageTitle>
<pageIdAction>48</pageIdAction>
+
<pageId>63</pageId>
+ <bandwidth>43</bandwidth>
+ <generationTimeMilliseconds>391</generationTimeMilliseconds>
+ <generationTime>0.39s</generationTime>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <generationTimeMilliseconds>391</generationTimeMilliseconds>
- <generationTime>0.39s</generationTime>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>43 B</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -692,13 +732,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -713,7 +758,7 @@
<referrerName>Google</referrerName>
<referrerKeyword>Keyword not defined</referrerKeyword>
<referrerKeywordPosition />
- <referrerUrl>http://piwik.org/faq/general/#faq_144</referrerUrl>
+ <referrerUrl>https://www.google.com/</referrerUrl>
<referrerSearchEngineUrl>http://google.com</referrerSearchEngineUrl>
<referrerSearchEngineIcon>plugins/Morpheus/icons/dist/searchEngines/google.com.png</referrerSearchEngineIcon>
<languageCode />
@@ -734,6 +779,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/CH.png</browserIcon>
<browserCode>CH</browserCode>
<browserVersion>33.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>North America</continent>
<continentCode>amn</continentCode>
@@ -756,11 +807,11 @@
</row>
</customVariables>
<resolution>1360x768</resolution>
- <plugins>pdf, flash, java, quicktime, windowsmedia, silverlight</plugins>
+ <plugins>cookie, flash, java, pdf, quicktime, silverlight, windowsmedia</plugins>
<pluginsIcons>
<row>
- <pluginIcon>plugins/Morpheus/icons/dist/plugins/pdf.png</pluginIcon>
- <pluginName>pdf</pluginName>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
</row>
<row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
@@ -771,29 +822,22 @@
<pluginName>java</pluginName>
</row>
<row>
- <pluginIcon>plugins/Morpheus/icons/dist/plugins/quicktime.png</pluginIcon>
- <pluginName>quicktime</pluginName>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/pdf.png</pluginIcon>
+ <pluginName>pdf</pluginName>
</row>
<row>
- <pluginIcon>plugins/Morpheus/icons/dist/plugins/windowsmedia.png</pluginIcon>
- <pluginName>windowsmedia</pluginName>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/quicktime.png</pluginIcon>
+ <pluginName>quicktime</pluginName>
</row>
<row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/silverlight.png</pluginIcon>
<pluginName>silverlight</pluginName>
</row>
+ <row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/windowsmedia.png</pluginIcon>
+ <pluginName>windowsmedia</pluginName>
+ </row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>3</idSite>
@@ -807,16 +851,19 @@
<pageTitle>Log Analytics - Analytics - Piwik</pageTitle>
<pageIdAction>42</pageIdAction>
+
<pageId>62</pageId>
+ <bandwidth>43</bandwidth>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>404</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>43 B</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -826,13 +873,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returning</visitorType>
<visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>4</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>3</daysSinceFirstVisit>
@@ -847,7 +899,7 @@
<referrerName>Google</referrerName>
<referrerKeyword>Keyword not defined</referrerKeyword>
<referrerKeywordPosition>2</referrerKeywordPosition>
- <referrerUrl>http://piwik.org/faq/general/#faq_144</referrerUrl>
+ <referrerUrl>https://www.google.co.jp/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=2&amp;ved=0CDAQFjAB&amp;url=https%3A%2F%2Fpiwik.org%2Flog-analytics%2F&amp;ei=rogdU5OuK43pkgXZmYGICA&amp;usg=AFQjCNH4nR8bKYaliCj2egiJ0H_CX4sFJg&amp;bvm=bv.62578216,d.dGI</referrerUrl>
<referrerSearchEngineUrl>http://google.com</referrerSearchEngineUrl>
<referrerSearchEngineIcon>plugins/Morpheus/icons/dist/searchEngines/google.com.png</referrerSearchEngineIcon>
<languageCode />
@@ -868,6 +920,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/SF.png</browserIcon>
<browserCode>SF</browserCode>
<browserVersion>7.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Asia</continent>
<continentCode>asi</continentCode>
@@ -890,32 +948,25 @@
</row>
</customVariables>
<resolution>2560x1440</resolution>
- <plugins>pdf, java, quicktime</plugins>
+ <plugins>cookie, java, pdf, quicktime</plugins>
<pluginsIcons>
<row>
- <pluginIcon>plugins/Morpheus/icons/dist/plugins/pdf.png</pluginIcon>
- <pluginName>pdf</pluginName>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
</row>
<row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/java.png</pluginIcon>
<pluginName>java</pluginName>
</row>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/pdf.png</pluginIcon>
+ <pluginName>pdf</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/quicktime.png</pluginIcon>
<pluginName>quicktime</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>3</idSite>
@@ -929,18 +980,21 @@
<pageTitle>Piwik 2.1 — Massive Performance and Reliability Improvements - Analytics - Piwik</pageTitle>
<pageIdAction>46</pageIdAction>
+
<pageId>61</pageId>
+ <bandwidth>43</bandwidth>
+ <generationTimeMilliseconds>119</generationTimeMilliseconds>
+ <generationTime>0.12s</generationTime>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <generationTimeMilliseconds>119</generationTimeMilliseconds>
- <generationTime>0.12s</generationTime>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>43 B</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -950,13 +1004,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returning</visitorType>
<visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>2</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -987,11 +1046,17 @@
<operatingSystemVersion />
<browserFamily>Gecko</browserFamily>
<browserFamilyDescription>Gecko (Firefox)</browserFamilyDescription>
- <browser>Firefox 27.0</browser>
- <browserName>Firefox</browserName>
- <browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
- <browserCode>FF</browserCode>
+ <browser>Firefox Mobile 27.0</browser>
+ <browserName>Firefox Mobile</browserName>
+ <browserIcon>plugins/Morpheus/icons/dist/browsers/FM.png</browserIcon>
+ <browserCode>FM</browserCode>
<browserVersion>27.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -1014,24 +1079,17 @@
</row>
</customVariables>
<resolution>360x640</resolution>
- <plugins>flash</plugins>
+ <plugins>cookie, flash</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>3</idSite>
@@ -1045,18 +1103,21 @@
<pageTitle>Log Analytics - Analytics - Piwik</pageTitle>
<pageIdAction>42</pageIdAction>
+
<pageId>59</pageId>
+ <bandwidth>43</bandwidth>
+ <generationTimeMilliseconds>145</generationTimeMilliseconds>
+ <generationTime>0.15s</generationTime>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <generationTimeMilliseconds>145</generationTimeMilliseconds>
- <generationTime>0.15s</generationTime>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>43 B</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -1066,13 +1127,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returning</visitorType>
<visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>5</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>1</daysSinceFirstVisit>
@@ -1108,6 +1174,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>27.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -1130,11 +1202,11 @@
</row>
</customVariables>
<resolution>2560x1440</resolution>
- <plugins>pdf, flash, java, quicktime, windowsmedia, silverlight</plugins>
+ <plugins>cookie, flash, java, pdf, quicktime, silverlight, windowsmedia</plugins>
<pluginsIcons>
<row>
- <pluginIcon>plugins/Morpheus/icons/dist/plugins/pdf.png</pluginIcon>
- <pluginName>pdf</pluginName>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
</row>
<row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
@@ -1145,29 +1217,22 @@
<pluginName>java</pluginName>
</row>
<row>
- <pluginIcon>plugins/Morpheus/icons/dist/plugins/quicktime.png</pluginIcon>
- <pluginName>quicktime</pluginName>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/pdf.png</pluginIcon>
+ <pluginName>pdf</pluginName>
</row>
<row>
- <pluginIcon>plugins/Morpheus/icons/dist/plugins/windowsmedia.png</pluginIcon>
- <pluginName>windowsmedia</pluginName>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/quicktime.png</pluginIcon>
+ <pluginName>quicktime</pluginName>
</row>
<row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/silverlight.png</pluginIcon>
<pluginName>silverlight</pluginName>
</row>
+ <row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/windowsmedia.png</pluginIcon>
+ <pluginName>windowsmedia</pluginName>
+ </row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>3</idSite>
@@ -1181,20 +1246,23 @@
<pageTitle>Liberate Web Analytics - Analytics - Piwik</pageTitle>
<pageIdAction>35</pageIdAction>
+
<pageId>55</pageId>
+ <bandwidth>43</bandwidth>
+ <timeSpent>2</timeSpent>
+ <timeSpentPretty>2s</timeSpentPretty>
+ <generationTimeMilliseconds>182</generationTimeMilliseconds>
+ <generationTime>0.18s</generationTime>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>403</customVariablePageValue1>
</row>
</customVariables>
- <generationTimeMilliseconds>182</generationTimeMilliseconds>
- <generationTime>0.18s</generationTime>
- <interactionPosition>1</interactionPosition>
- <timeSpent>2</timeSpent>
- <timeSpentPretty>2s</timeSpentPretty>
- <icon />
-
+ <bandwidth_pretty>43 B</bandwidth_pretty>
</row>
<row>
<type>action</type>
@@ -1202,20 +1270,23 @@
<pageTitle>Download - Analytics - Piwik</pageTitle>
<pageIdAction>39</pageIdAction>
+
<pageId>57</pageId>
+ <bandwidth>43</bandwidth>
+ <timeSpent>7</timeSpent>
+ <timeSpentPretty>7s</timeSpentPretty>
+ <generationTimeMilliseconds>113</generationTimeMilliseconds>
+ <generationTime>0.11s</generationTime>
+ <interactionPosition>2</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>500</customVariablePageValue1>
</row>
</customVariables>
- <generationTimeMilliseconds>113</generationTimeMilliseconds>
- <generationTime>0.11s</generationTime>
- <interactionPosition>2</interactionPosition>
- <timeSpent>7</timeSpent>
- <timeSpentPretty>7s</timeSpentPretty>
- <icon />
-
+ <bandwidth_pretty>43 B</bandwidth_pretty>
</row>
<row>
<type>download</type>
@@ -1223,16 +1294,19 @@
<pageTitle />
<pageIdAction>40</pageIdAction>
+
<pageId>58</pageId>
+ <bandwidth>43</bandwidth>
+ <interactionPosition />
+ <icon>plugins/Morpheus/images/download.png</icon>
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition />
- <icon>plugins/Morpheus/images/download.png</icon>
-
+ <bandwidth_pretty>43 B</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -1242,13 +1316,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -1263,7 +1342,7 @@
<referrerName>Google</referrerName>
<referrerKeyword>Keyword not defined</referrerKeyword>
<referrerKeywordPosition>1</referrerKeywordPosition>
- <referrerUrl>http://piwik.org/faq/general/#faq_144</referrerUrl>
+ <referrerUrl>http://www.google.ru/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=1&amp;ved=0CCoQFjAA&amp;url=http%3A%2F%2Fpiwik.org%2F&amp;ei=ffwgU57VGuf44QT3-oCQCw&amp;usg=AFQjCNF_MGJRqKPvaKuUokHtZ3VvNG9ALw&amp;bvm=bv.62922401,d.bGE&amp;cad=rjt</referrerUrl>
<referrerSearchEngineUrl>http://google.com</referrerSearchEngineUrl>
<referrerSearchEngineIcon>plugins/Morpheus/icons/dist/searchEngines/google.com.png</referrerSearchEngineIcon>
<languageCode />
@@ -1284,6 +1363,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>27.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -1306,9 +1391,13 @@
</row>
</customVariables>
<resolution>1920x1080</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -1317,17 +1406,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>3</idSite>
@@ -1341,18 +1419,21 @@
<pageTitle>Hello Installing Piwik - Analytics - Piwik</pageTitle>
<pageIdAction>37</pageIdAction>
+
<pageId>56</pageId>
+ <bandwidth>43</bandwidth>
+ <generationTimeMilliseconds>134</generationTimeMilliseconds>
+ <generationTime>0.13s</generationTime>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <generationTimeMilliseconds>134</generationTimeMilliseconds>
- <generationTime>0.13s</generationTime>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>43 B</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -1362,13 +1443,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returning</visitorType>
<visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>5</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>30</daysSinceFirstVisit>
@@ -1404,6 +1490,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/CH.png</browserIcon>
<browserCode>CH</browserCode>
<browserVersion>33.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -1426,11 +1518,11 @@
</row>
</customVariables>
<resolution>1366x768</resolution>
- <plugins>pdf, flash, java, silverlight</plugins>
+ <plugins>cookie, flash, java, pdf, silverlight</plugins>
<pluginsIcons>
<row>
- <pluginIcon>plugins/Morpheus/icons/dist/plugins/pdf.png</pluginIcon>
- <pluginName>pdf</pluginName>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
</row>
<row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
@@ -1441,21 +1533,14 @@
<pluginName>java</pluginName>
</row>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/pdf.png</pluginIcon>
+ <pluginName>pdf</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/silverlight.png</pluginIcon>
<pluginName>silverlight</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>3</idSite>
@@ -1469,18 +1554,21 @@
<pageTitle>Liberate Web Analytics - Analytics - Piwik</pageTitle>
<pageIdAction>35</pageIdAction>
+
<pageId>54</pageId>
+ <bandwidth>43</bandwidth>
+ <generationTimeMilliseconds>58</generationTimeMilliseconds>
+ <generationTime>0.06s</generationTime>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <generationTimeMilliseconds>58</generationTimeMilliseconds>
- <generationTime>0.06s</generationTime>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>43 B</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -1490,13 +1578,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -1532,6 +1625,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/CH.png</browserIcon>
<browserCode>CH</browserCode>
<browserVersion>33.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -1554,11 +1653,11 @@
</row>
</customVariables>
<resolution>1920x1080</resolution>
- <plugins>pdf, flash, java, silverlight</plugins>
+ <plugins>cookie, flash, java, pdf, silverlight</plugins>
<pluginsIcons>
<row>
- <pluginIcon>plugins/Morpheus/icons/dist/plugins/pdf.png</pluginIcon>
- <pluginName>pdf</pluginName>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
</row>
<row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
@@ -1569,21 +1668,14 @@
<pluginName>java</pluginName>
</row>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/pdf.png</pluginIcon>
+ <pluginName>pdf</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/silverlight.png</pluginIcon>
<pluginName>silverlight</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>3</idSite>
@@ -1597,7 +1689,12 @@
<pageTitle>incredible title!</pageTitle>
<pageIdAction>29</pageIdAction>
+
<pageId>50</pageId>
+ <bandwidth>43</bandwidth>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName3>_pks</customVariablePageName3>
@@ -1612,9 +1709,7 @@
<customVariablePageValue5>Electronics &amp; Cameras</customVariablePageValue5>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>43 B</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -1624,13 +1719,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -1666,6 +1766,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/IE.png</browserIcon>
<browserCode>IE</browserCode>
<browserVersion>6.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Unknown</continent>
<continentCode>unk</continentCode>
@@ -1688,9 +1794,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -1699,17 +1809,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>3</idSite>
@@ -1723,16 +1822,19 @@
<pageTitle>Piwik Forums</pageTitle>
<pageIdAction>31</pageIdAction>
+
<pageId>51</pageId>
+ <bandwidth>43</bandwidth>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>43 B</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -1742,13 +1844,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returning</visitorType>
<visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>444</daysSinceFirstVisit>
@@ -1784,6 +1891,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/CH.png</browserIcon>
<browserCode>CH</browserCode>
<browserVersion>11.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Unknown</continent>
<continentCode>unk</continentCode>
@@ -1806,44 +1919,37 @@
</row>
</customVariables>
<resolution>1280x800</resolution>
- <plugins>pdf, flash, java, director, windowsmedia, gears</plugins>
+ <plugins>cookie, director, flash, gears, java, pdf, windowsmedia</plugins>
<pluginsIcons>
<row>
- <pluginIcon>plugins/Morpheus/icons/dist/plugins/pdf.png</pluginIcon>
- <pluginName>pdf</pluginName>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/director.png</pluginIcon>
+ <pluginName>director</pluginName>
</row>
<row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/gears.png</pluginIcon>
+ <pluginName>gears</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/java.png</pluginIcon>
<pluginName>java</pluginName>
</row>
<row>
- <pluginIcon>plugins/Morpheus/icons/dist/plugins/director.png</pluginIcon>
- <pluginName>director</pluginName>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/pdf.png</pluginIcon>
+ <pluginName>pdf</pluginName>
</row>
<row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/windowsmedia.png</pluginIcon>
<pluginName>windowsmedia</pluginName>
</row>
- <row>
- <pluginIcon>plugins/Morpheus/icons/dist/plugins/gears.png</pluginIcon>
- <pluginName>gears</pluginName>
- </row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>3</idSite>
@@ -1857,18 +1963,21 @@
<pageTitle>Looking at Electronics &amp; Cameras page with a page level custom variable</pageTitle>
<pageIdAction>29</pageIdAction>
+
<pageId>33</pageId>
+ <bandwidth>43</bandwidth>
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName5>_pkc</customVariablePageName5>
<customVariablePageValue5>Electronics &amp; Cameras</customVariablePageValue5>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <timeSpent>0</timeSpent>
- <timeSpentPretty>0s</timeSpentPretty>
- <icon />
-
+ <bandwidth_pretty>43 B</bandwidth_pretty>
</row>
<row>
<type>action</type>
@@ -1876,7 +1985,14 @@
<pageTitle>Another Product page with no category</pageTitle>
<pageIdAction>29</pageIdAction>
+
<pageId>52</pageId>
+ <bandwidth>43</bandwidth>
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
+ <interactionPosition>2</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName3>_pks</customVariablePageName3>
@@ -1887,11 +2003,7 @@
<customVariablePageValue4>PRODUCT name</customVariablePageValue4>
</row>
</customVariables>
- <interactionPosition>2</interactionPosition>
- <timeSpent>0</timeSpent>
- <timeSpentPretty>0s</timeSpentPretty>
- <icon />
-
+ <bandwidth_pretty>43 B</bandwidth_pretty>
</row>
<row>
<type>action</type>
@@ -1899,16 +2011,19 @@
<pageTitle>Looking at Electronics &amp; Cameras page with a page level custom variable</pageTitle>
<pageIdAction>29</pageIdAction>
+
<pageId>53</pageId>
+ <bandwidth>43</bandwidth>
+ <interactionPosition>3</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName5>_pkc</customVariablePageName5>
<customVariablePageValue5>Electronics &amp; Cameras</customVariablePageValue5>
</row>
</customVariables>
- <interactionPosition>3</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>43 B</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -1918,13 +2033,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -1960,6 +2080,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/SF.png</browserIcon>
<browserCode>SF</browserCode>
<browserVersion>5.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Unknown</continent>
<continentCode>unk</continentCode>
@@ -1982,9 +2108,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -1993,16 +2123,5 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_offsetAndLimit_1__Live.getLastVisitsDetails_month.xml b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_offsetAndLimit_1__Live.getLastVisitsDetails_month.xml
index 1478e307b3..1b4a9e1d57 100644
--- a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_offsetAndLimit_1__Live.getLastVisitsDetails_month.xml
+++ b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_offsetAndLimit_1__Live.getLastVisitsDetails_month.xml
@@ -12,12 +12,15 @@
<pageTitle>Space Quest XII</pageTitle>
<pageIdAction>4</pageIdAction>
+
<pageId>46</pageId>
- <interactionPosition>1</interactionPosition>
+ <bandwidth />
<timeSpent>360</timeSpent>
<timeSpentPretty>6 min 0s</timeSpentPretty>
+ <interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>goal</type>
@@ -35,19 +38,22 @@
<url />
<pageIdAction />
+
<pageId>47</pageId>
+ <bandwidth />
+ <timeSpent>180</timeSpent>
+ <timeSpentPretty>3 min 0s</timeSpentPretty>
+ <siteSearchKeyword>Bring on the party</siteSearchKeyword>
+ <interactionPosition>2</interactionPosition>
+ <icon>plugins/Morpheus/images/search_ico.png</icon>
+
<customVariables>
<row>
<customVariablePageName4>Search Category</customVariablePageName4>
<customVariablePageValue4>CAT</customVariablePageValue4>
</row>
</customVariables>
- <siteSearchKeyword>Bring on the party</siteSearchKeyword>
- <interactionPosition>2</interactionPosition>
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/search_ico.png</icon>
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>goal</type>
@@ -66,12 +72,15 @@
<pageTitle />
<pageIdAction>47</pageIdAction>
+
<pageId>48</pageId>
- <interactionPosition />
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
+ <interactionPosition />
<icon>plugins/Morpheus/images/download.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>outlink</type>
@@ -79,26 +88,32 @@
<pageTitle />
<pageIdAction>48</pageIdAction>
+
<pageId>49</pageId>
- <interactionPosition />
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
+ <interactionPosition />
<icon>plugins/Morpheus/images/link.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://piwik.net/space/quest/iv</url>
<pageIdAction>8</pageIdAction>
+
<pageId>50</pageId>
<eventCategory>Cat8</eventCategory>
<eventAction>Action8</eventAction>
- <eventName>Name8</eventName>
- <eventValue>353.678</eventValue>
+ <bandwidth />
<interactionPosition />
- <icon>plugins/Morpheus/images/event.png</icon>
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Name8</eventName>
+ <eventValue>353.678</eventValue>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>2</goalConversions>
@@ -108,13 +123,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returningCustomer</visitorType>
<visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>5</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>100</daysSinceFirstVisit>
@@ -150,6 +170,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>1</events>
<continent>Unknown</continent>
<continentCode>unk</continentCode>
@@ -176,9 +202,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -187,17 +217,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -222,7 +241,12 @@
<pageTitle>It's &lt;script&gt; pitch black...</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>45</pageId>
+ <bandwidth />
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName2>Cvar 2 PAGE name</customVariablePageName2>
@@ -233,9 +257,7 @@
<customVariablePageValue5>Cvar5 PAGE value is 8</customVariablePageValue5>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -245,13 +267,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returningCustomer</visitorType>
<visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>5</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>101</daysSinceFirstVisit>
@@ -287,6 +314,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Unknown</continent>
<continentCode>unk</continentCode>
@@ -313,9 +346,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -324,17 +361,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -348,12 +374,15 @@
<pageTitle>Space Quest XII</pageTitle>
<pageIdAction>4</pageIdAction>
+
<pageId>41</pageId>
- <interactionPosition>1</interactionPosition>
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
+ <interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>goal</type>
@@ -383,12 +412,15 @@
<pageTitle />
<pageIdAction>42</pageIdAction>
+
<pageId>42</pageId>
- <interactionPosition />
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
+ <interactionPosition />
<icon>plugins/Morpheus/images/download.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>outlink</type>
@@ -396,26 +428,32 @@
<pageTitle />
<pageIdAction>43</pageIdAction>
+
<pageId>43</pageId>
- <interactionPosition />
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
+ <interactionPosition />
<icon>plugins/Morpheus/images/link.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://piwik.net/space/quest/iv</url>
<pageIdAction>8</pageIdAction>
+
<pageId>44</pageId>
<eventCategory>Cat7</eventCategory>
<eventAction>Action7</eventAction>
- <eventName>Name7</eventName>
- <eventValue>352.678</eventValue>
+ <bandwidth />
<interactionPosition />
- <icon>plugins/Morpheus/images/event.png</icon>
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Name7</eventName>
+ <eventValue>352.678</eventValue>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>2</goalConversions>
@@ -425,13 +463,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returningCustomer</visitorType>
<visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>5</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>100</daysSinceFirstVisit>
@@ -467,6 +510,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>1</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -493,9 +542,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -504,16 +557,5 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_offsetAndLimit_2__Live.getLastVisitsDetails_month.xml b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_offsetAndLimit_2__Live.getLastVisitsDetails_month.xml
index 4ec6fe3ed8..392b2a5b61 100644
--- a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_offsetAndLimit_2__Live.getLastVisitsDetails_month.xml
+++ b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_offsetAndLimit_2__Live.getLastVisitsDetails_month.xml
@@ -23,7 +23,12 @@
<pageTitle>It's &lt;script&gt; pitch black...</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>40</pageId>
+ <bandwidth />
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName2>Cvar 2 PAGE name</customVariablePageName2>
@@ -34,9 +39,7 @@
<customVariablePageValue5>Cvar5 PAGE value is 7</customVariablePageValue5>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -46,13 +49,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returningCustomer</visitorType>
<visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>5</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>101</daysSinceFirstVisit>
@@ -88,6 +96,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -114,9 +128,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -125,17 +143,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -149,12 +156,15 @@
<pageTitle>Space Quest XII</pageTitle>
<pageIdAction>4</pageIdAction>
+
<pageId>35</pageId>
- <interactionPosition>1</interactionPosition>
+ <bandwidth />
<timeSpent>360</timeSpent>
<timeSpentPretty>6 min 0s</timeSpentPretty>
+ <interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>goal</type>
@@ -172,19 +182,22 @@
<url />
<pageIdAction />
+
<pageId>36</pageId>
+ <bandwidth />
+ <timeSpent>180</timeSpent>
+ <timeSpentPretty>3 min 0s</timeSpentPretty>
+ <siteSearchKeyword>Bring on the party</siteSearchKeyword>
+ <interactionPosition>2</interactionPosition>
+ <icon>plugins/Morpheus/images/search_ico.png</icon>
+
<customVariables>
<row>
<customVariablePageName4>Search Category</customVariablePageName4>
<customVariablePageValue4>CAT</customVariablePageValue4>
</row>
</customVariables>
- <siteSearchKeyword>Bring on the party</siteSearchKeyword>
- <interactionPosition>2</interactionPosition>
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/search_ico.png</icon>
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>goal</type>
@@ -203,12 +216,15 @@
<pageTitle />
<pageIdAction>37</pageIdAction>
+
<pageId>37</pageId>
- <interactionPosition />
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
+ <interactionPosition />
<icon>plugins/Morpheus/images/download.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>outlink</type>
@@ -216,26 +232,32 @@
<pageTitle />
<pageIdAction>38</pageIdAction>
+
<pageId>38</pageId>
- <interactionPosition />
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
+ <interactionPosition />
<icon>plugins/Morpheus/images/link.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://piwik.net/space/quest/iv</url>
<pageIdAction>8</pageIdAction>
+
<pageId>39</pageId>
<eventCategory>Cat6</eventCategory>
<eventAction>Action6</eventAction>
- <eventName>Name6</eventName>
- <eventValue>351.678</eventValue>
+ <bandwidth />
<interactionPosition />
- <icon>plugins/Morpheus/images/event.png</icon>
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Name6</eventName>
+ <eventValue>351.678</eventValue>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>2</goalConversions>
@@ -245,13 +267,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returningCustomer</visitorType>
<visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>5</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>100</daysSinceFirstVisit>
@@ -287,6 +314,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>1</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -313,9 +346,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -324,17 +361,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -359,7 +385,12 @@
<pageTitle>It's &lt;script&gt; pitch black...</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>34</pageId>
+ <bandwidth />
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName2>Cvar 2 PAGE name</customVariablePageName2>
@@ -370,9 +401,7 @@
<customVariablePageValue5>Cvar5 PAGE value is 6</customVariablePageValue5>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -382,13 +411,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returningCustomer</visitorType>
<visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>5</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>101</daysSinceFirstVisit>
@@ -424,6 +458,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -450,9 +490,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -461,16 +505,5 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_sortByIdVisit__Live.getLastVisitsDetails_month.xml b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_sortByIdVisit__Live.getLastVisitsDetails_month.xml
index e153c8625b..d5a74b37a4 100644
--- a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_sortByIdVisit__Live.getLastVisitsDetails_month.xml
+++ b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_sortByIdVisit__Live.getLastVisitsDetails_month.xml
@@ -23,10 +23,13 @@
<pageTitle>It's pitch black...</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>95</pageId>
+ <bandwidth />
<interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -36,13 +39,18 @@
+
+
+
+
+
+
<userId>userid.email@example.org</userId>
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -78,6 +86,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/SF.png</browserIcon>
<browserCode>SF</browserCode>
<browserVersion />
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>North America</continent>
<continentCode>amn</continentCode>
@@ -96,9 +110,13 @@
<customVariables>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -107,17 +125,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -131,12 +138,15 @@
<pageTitle>Space Quest XII</pageTitle>
<pageIdAction>4</pageIdAction>
+
<pageId>46</pageId>
- <interactionPosition>1</interactionPosition>
+ <bandwidth />
<timeSpent>360</timeSpent>
<timeSpentPretty>6 min 0s</timeSpentPretty>
+ <interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>goal</type>
@@ -154,19 +164,22 @@
<url />
<pageIdAction />
+
<pageId>47</pageId>
+ <bandwidth />
+ <timeSpent>180</timeSpent>
+ <timeSpentPretty>3 min 0s</timeSpentPretty>
+ <siteSearchKeyword>Bring on the party</siteSearchKeyword>
+ <interactionPosition>2</interactionPosition>
+ <icon>plugins/Morpheus/images/search_ico.png</icon>
+
<customVariables>
<row>
<customVariablePageName4>Search Category</customVariablePageName4>
<customVariablePageValue4>CAT</customVariablePageValue4>
</row>
</customVariables>
- <siteSearchKeyword>Bring on the party</siteSearchKeyword>
- <interactionPosition>2</interactionPosition>
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/search_ico.png</icon>
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>goal</type>
@@ -185,12 +198,15 @@
<pageTitle />
<pageIdAction>47</pageIdAction>
+
<pageId>48</pageId>
- <interactionPosition />
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
+ <interactionPosition />
<icon>plugins/Morpheus/images/download.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>outlink</type>
@@ -198,26 +214,32 @@
<pageTitle />
<pageIdAction>48</pageIdAction>
+
<pageId>49</pageId>
- <interactionPosition />
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
+ <interactionPosition />
<icon>plugins/Morpheus/images/link.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://piwik.net/space/quest/iv</url>
<pageIdAction>8</pageIdAction>
+
<pageId>50</pageId>
<eventCategory>Cat8</eventCategory>
<eventAction>Action8</eventAction>
- <eventName>Name8</eventName>
- <eventValue>353.678</eventValue>
+ <bandwidth />
<interactionPosition />
- <icon>plugins/Morpheus/images/event.png</icon>
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Name8</eventName>
+ <eventValue>353.678</eventValue>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>2</goalConversions>
@@ -227,13 +249,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returningCustomer</visitorType>
<visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>5</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>100</daysSinceFirstVisit>
@@ -269,6 +296,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>1</events>
<continent>Unknown</continent>
<continentCode>unk</continentCode>
@@ -295,9 +328,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -306,17 +343,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -341,7 +367,12 @@
<pageTitle>It's &lt;script&gt; pitch black...</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>45</pageId>
+ <bandwidth />
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName2>Cvar 2 PAGE name</customVariablePageName2>
@@ -352,9 +383,7 @@
<customVariablePageValue5>Cvar5 PAGE value is 8</customVariablePageValue5>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -364,13 +393,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returningCustomer</visitorType>
<visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>5</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>101</daysSinceFirstVisit>
@@ -406,6 +440,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Unknown</continent>
<continentCode>unk</continentCode>
@@ -432,9 +472,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -443,17 +487,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -467,12 +500,15 @@
<pageTitle>Space Quest XII</pageTitle>
<pageIdAction>4</pageIdAction>
+
<pageId>41</pageId>
- <interactionPosition>1</interactionPosition>
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
+ <interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>goal</type>
@@ -502,12 +538,15 @@
<pageTitle />
<pageIdAction>42</pageIdAction>
+
<pageId>42</pageId>
- <interactionPosition />
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
+ <interactionPosition />
<icon>plugins/Morpheus/images/download.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>outlink</type>
@@ -515,26 +554,32 @@
<pageTitle />
<pageIdAction>43</pageIdAction>
+
<pageId>43</pageId>
- <interactionPosition />
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
+ <interactionPosition />
<icon>plugins/Morpheus/images/link.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://piwik.net/space/quest/iv</url>
<pageIdAction>8</pageIdAction>
+
<pageId>44</pageId>
<eventCategory>Cat7</eventCategory>
<eventAction>Action7</eventAction>
- <eventName>Name7</eventName>
- <eventValue>352.678</eventValue>
+ <bandwidth />
<interactionPosition />
- <icon>plugins/Morpheus/images/event.png</icon>
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Name7</eventName>
+ <eventValue>352.678</eventValue>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>2</goalConversions>
@@ -544,13 +589,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returningCustomer</visitorType>
<visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>5</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>100</daysSinceFirstVisit>
@@ -586,6 +636,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>1</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -612,9 +668,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -623,17 +683,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -658,7 +707,12 @@
<pageTitle>It's &lt;script&gt; pitch black...</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>40</pageId>
+ <bandwidth />
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName2>Cvar 2 PAGE name</customVariablePageName2>
@@ -669,9 +723,7 @@
<customVariablePageValue5>Cvar5 PAGE value is 7</customVariablePageValue5>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -681,13 +733,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returningCustomer</visitorType>
<visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>5</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>101</daysSinceFirstVisit>
@@ -723,6 +780,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -749,9 +812,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -760,17 +827,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -784,12 +840,15 @@
<pageTitle>Space Quest XII</pageTitle>
<pageIdAction>4</pageIdAction>
+
<pageId>35</pageId>
- <interactionPosition>1</interactionPosition>
+ <bandwidth />
<timeSpent>360</timeSpent>
<timeSpentPretty>6 min 0s</timeSpentPretty>
+ <interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>goal</type>
@@ -807,19 +866,22 @@
<url />
<pageIdAction />
+
<pageId>36</pageId>
+ <bandwidth />
+ <timeSpent>180</timeSpent>
+ <timeSpentPretty>3 min 0s</timeSpentPretty>
+ <siteSearchKeyword>Bring on the party</siteSearchKeyword>
+ <interactionPosition>2</interactionPosition>
+ <icon>plugins/Morpheus/images/search_ico.png</icon>
+
<customVariables>
<row>
<customVariablePageName4>Search Category</customVariablePageName4>
<customVariablePageValue4>CAT</customVariablePageValue4>
</row>
</customVariables>
- <siteSearchKeyword>Bring on the party</siteSearchKeyword>
- <interactionPosition>2</interactionPosition>
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/search_ico.png</icon>
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>goal</type>
@@ -838,12 +900,15 @@
<pageTitle />
<pageIdAction>37</pageIdAction>
+
<pageId>37</pageId>
- <interactionPosition />
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
+ <interactionPosition />
<icon>plugins/Morpheus/images/download.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>outlink</type>
@@ -851,26 +916,32 @@
<pageTitle />
<pageIdAction>38</pageIdAction>
+
<pageId>38</pageId>
- <interactionPosition />
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
+ <interactionPosition />
<icon>plugins/Morpheus/images/link.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://piwik.net/space/quest/iv</url>
<pageIdAction>8</pageIdAction>
+
<pageId>39</pageId>
<eventCategory>Cat6</eventCategory>
<eventAction>Action6</eventAction>
- <eventName>Name6</eventName>
- <eventValue>351.678</eventValue>
+ <bandwidth />
<interactionPosition />
- <icon>plugins/Morpheus/images/event.png</icon>
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Name6</eventName>
+ <eventValue>351.678</eventValue>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>2</goalConversions>
@@ -880,13 +951,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returningCustomer</visitorType>
<visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>5</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>100</daysSinceFirstVisit>
@@ -922,6 +998,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>1</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -948,9 +1030,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -959,17 +1045,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -994,7 +1069,12 @@
<pageTitle>It's &lt;script&gt; pitch black...</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>34</pageId>
+ <bandwidth />
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName2>Cvar 2 PAGE name</customVariablePageName2>
@@ -1005,9 +1085,7 @@
<customVariablePageValue5>Cvar5 PAGE value is 6</customVariablePageValue5>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -1017,13 +1095,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returningCustomer</visitorType>
<visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>5</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>101</daysSinceFirstVisit>
@@ -1059,6 +1142,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -1085,9 +1174,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -1096,16 +1189,5 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_sortDesc__Live.getLastVisitsDetails_month.xml b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_sortDesc__Live.getLastVisitsDetails_month.xml
index e153c8625b..d5a74b37a4 100644
--- a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_sortDesc__Live.getLastVisitsDetails_month.xml
+++ b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_Live.getLastVisitsDetails_sortDesc__Live.getLastVisitsDetails_month.xml
@@ -23,10 +23,13 @@
<pageTitle>It's pitch black...</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>95</pageId>
+ <bandwidth />
<interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -36,13 +39,18 @@
+
+
+
+
+
+
<userId>userid.email@example.org</userId>
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -78,6 +86,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/SF.png</browserIcon>
<browserCode>SF</browserCode>
<browserVersion />
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>North America</continent>
<continentCode>amn</continentCode>
@@ -96,9 +110,13 @@
<customVariables>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -107,17 +125,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -131,12 +138,15 @@
<pageTitle>Space Quest XII</pageTitle>
<pageIdAction>4</pageIdAction>
+
<pageId>46</pageId>
- <interactionPosition>1</interactionPosition>
+ <bandwidth />
<timeSpent>360</timeSpent>
<timeSpentPretty>6 min 0s</timeSpentPretty>
+ <interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>goal</type>
@@ -154,19 +164,22 @@
<url />
<pageIdAction />
+
<pageId>47</pageId>
+ <bandwidth />
+ <timeSpent>180</timeSpent>
+ <timeSpentPretty>3 min 0s</timeSpentPretty>
+ <siteSearchKeyword>Bring on the party</siteSearchKeyword>
+ <interactionPosition>2</interactionPosition>
+ <icon>plugins/Morpheus/images/search_ico.png</icon>
+
<customVariables>
<row>
<customVariablePageName4>Search Category</customVariablePageName4>
<customVariablePageValue4>CAT</customVariablePageValue4>
</row>
</customVariables>
- <siteSearchKeyword>Bring on the party</siteSearchKeyword>
- <interactionPosition>2</interactionPosition>
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/search_ico.png</icon>
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>goal</type>
@@ -185,12 +198,15 @@
<pageTitle />
<pageIdAction>47</pageIdAction>
+
<pageId>48</pageId>
- <interactionPosition />
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
+ <interactionPosition />
<icon>plugins/Morpheus/images/download.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>outlink</type>
@@ -198,26 +214,32 @@
<pageTitle />
<pageIdAction>48</pageIdAction>
+
<pageId>49</pageId>
- <interactionPosition />
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
+ <interactionPosition />
<icon>plugins/Morpheus/images/link.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://piwik.net/space/quest/iv</url>
<pageIdAction>8</pageIdAction>
+
<pageId>50</pageId>
<eventCategory>Cat8</eventCategory>
<eventAction>Action8</eventAction>
- <eventName>Name8</eventName>
- <eventValue>353.678</eventValue>
+ <bandwidth />
<interactionPosition />
- <icon>plugins/Morpheus/images/event.png</icon>
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Name8</eventName>
+ <eventValue>353.678</eventValue>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>2</goalConversions>
@@ -227,13 +249,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returningCustomer</visitorType>
<visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>5</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>100</daysSinceFirstVisit>
@@ -269,6 +296,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>1</events>
<continent>Unknown</continent>
<continentCode>unk</continentCode>
@@ -295,9 +328,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -306,17 +343,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -341,7 +367,12 @@
<pageTitle>It's &lt;script&gt; pitch black...</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>45</pageId>
+ <bandwidth />
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName2>Cvar 2 PAGE name</customVariablePageName2>
@@ -352,9 +383,7 @@
<customVariablePageValue5>Cvar5 PAGE value is 8</customVariablePageValue5>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -364,13 +393,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returningCustomer</visitorType>
<visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>5</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>101</daysSinceFirstVisit>
@@ -406,6 +440,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Unknown</continent>
<continentCode>unk</continentCode>
@@ -432,9 +472,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -443,17 +487,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -467,12 +500,15 @@
<pageTitle>Space Quest XII</pageTitle>
<pageIdAction>4</pageIdAction>
+
<pageId>41</pageId>
- <interactionPosition>1</interactionPosition>
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
+ <interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>goal</type>
@@ -502,12 +538,15 @@
<pageTitle />
<pageIdAction>42</pageIdAction>
+
<pageId>42</pageId>
- <interactionPosition />
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
+ <interactionPosition />
<icon>plugins/Morpheus/images/download.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>outlink</type>
@@ -515,26 +554,32 @@
<pageTitle />
<pageIdAction>43</pageIdAction>
+
<pageId>43</pageId>
- <interactionPosition />
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
+ <interactionPosition />
<icon>plugins/Morpheus/images/link.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://piwik.net/space/quest/iv</url>
<pageIdAction>8</pageIdAction>
+
<pageId>44</pageId>
<eventCategory>Cat7</eventCategory>
<eventAction>Action7</eventAction>
- <eventName>Name7</eventName>
- <eventValue>352.678</eventValue>
+ <bandwidth />
<interactionPosition />
- <icon>plugins/Morpheus/images/event.png</icon>
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Name7</eventName>
+ <eventValue>352.678</eventValue>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>2</goalConversions>
@@ -544,13 +589,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returningCustomer</visitorType>
<visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>5</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>100</daysSinceFirstVisit>
@@ -586,6 +636,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>1</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -612,9 +668,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -623,17 +683,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -658,7 +707,12 @@
<pageTitle>It's &lt;script&gt; pitch black...</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>40</pageId>
+ <bandwidth />
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName2>Cvar 2 PAGE name</customVariablePageName2>
@@ -669,9 +723,7 @@
<customVariablePageValue5>Cvar5 PAGE value is 7</customVariablePageValue5>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -681,13 +733,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returningCustomer</visitorType>
<visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>5</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>101</daysSinceFirstVisit>
@@ -723,6 +780,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -749,9 +812,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -760,17 +827,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -784,12 +840,15 @@
<pageTitle>Space Quest XII</pageTitle>
<pageIdAction>4</pageIdAction>
+
<pageId>35</pageId>
- <interactionPosition>1</interactionPosition>
+ <bandwidth />
<timeSpent>360</timeSpent>
<timeSpentPretty>6 min 0s</timeSpentPretty>
+ <interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>goal</type>
@@ -807,19 +866,22 @@
<url />
<pageIdAction />
+
<pageId>36</pageId>
+ <bandwidth />
+ <timeSpent>180</timeSpent>
+ <timeSpentPretty>3 min 0s</timeSpentPretty>
+ <siteSearchKeyword>Bring on the party</siteSearchKeyword>
+ <interactionPosition>2</interactionPosition>
+ <icon>plugins/Morpheus/images/search_ico.png</icon>
+
<customVariables>
<row>
<customVariablePageName4>Search Category</customVariablePageName4>
<customVariablePageValue4>CAT</customVariablePageValue4>
</row>
</customVariables>
- <siteSearchKeyword>Bring on the party</siteSearchKeyword>
- <interactionPosition>2</interactionPosition>
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/search_ico.png</icon>
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>goal</type>
@@ -838,12 +900,15 @@
<pageTitle />
<pageIdAction>37</pageIdAction>
+
<pageId>37</pageId>
- <interactionPosition />
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
+ <interactionPosition />
<icon>plugins/Morpheus/images/download.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>outlink</type>
@@ -851,26 +916,32 @@
<pageTitle />
<pageIdAction>38</pageIdAction>
+
<pageId>38</pageId>
- <interactionPosition />
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
+ <interactionPosition />
<icon>plugins/Morpheus/images/link.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://piwik.net/space/quest/iv</url>
<pageIdAction>8</pageIdAction>
+
<pageId>39</pageId>
<eventCategory>Cat6</eventCategory>
<eventAction>Action6</eventAction>
- <eventName>Name6</eventName>
- <eventValue>351.678</eventValue>
+ <bandwidth />
<interactionPosition />
- <icon>plugins/Morpheus/images/event.png</icon>
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Name6</eventName>
+ <eventValue>351.678</eventValue>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>2</goalConversions>
@@ -880,13 +951,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returningCustomer</visitorType>
<visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>5</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>100</daysSinceFirstVisit>
@@ -922,6 +998,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>1</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -948,9 +1030,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -959,17 +1045,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -994,7 +1069,12 @@
<pageTitle>It's &lt;script&gt; pitch black...</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>34</pageId>
+ <bandwidth />
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName2>Cvar 2 PAGE name</customVariablePageName2>
@@ -1005,9 +1085,7 @@
<customVariablePageValue5>Cvar5 PAGE value is 6</customVariablePageValue5>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -1017,13 +1095,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returningCustomer</visitorType>
<visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>5</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>101</daysSinceFirstVisit>
@@ -1059,6 +1142,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -1085,9 +1174,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -1096,16 +1189,5 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest__Live.getLastVisitsDetails_month.xml b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest__Live.getLastVisitsDetails_month.xml
index 17c182de49..bf8fcc7b87 100644
--- a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest__Live.getLastVisitsDetails_month.xml
+++ b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest__Live.getLastVisitsDetails_month.xml
@@ -23,10 +23,13 @@
<pageTitle>It's pitch black...</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>95</pageId>
+ <bandwidth />
<interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -36,13 +39,18 @@
+
+
+
+
+
+
<userId>userid.email@example.org</userId>
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -78,6 +86,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/SF.png</browserIcon>
<browserCode>SF</browserCode>
<browserVersion />
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>North America</continent>
<continentCode>amn</continentCode>
@@ -96,9 +110,13 @@
<customVariables>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -107,17 +125,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -131,12 +138,15 @@
<pageTitle>Space Quest XII</pageTitle>
<pageIdAction>4</pageIdAction>
+
<pageId>46</pageId>
- <interactionPosition>1</interactionPosition>
+ <bandwidth />
<timeSpent>360</timeSpent>
<timeSpentPretty>6 min 0s</timeSpentPretty>
+ <interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>goal</type>
@@ -154,19 +164,22 @@
<url />
<pageIdAction />
+
<pageId>47</pageId>
+ <bandwidth />
+ <timeSpent>180</timeSpent>
+ <timeSpentPretty>3 min 0s</timeSpentPretty>
+ <siteSearchKeyword>Bring on the party</siteSearchKeyword>
+ <interactionPosition>2</interactionPosition>
+ <icon>plugins/Morpheus/images/search_ico.png</icon>
+
<customVariables>
<row>
<customVariablePageName4>Search Category</customVariablePageName4>
<customVariablePageValue4>CAT</customVariablePageValue4>
</row>
</customVariables>
- <siteSearchKeyword>Bring on the party</siteSearchKeyword>
- <interactionPosition>2</interactionPosition>
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/search_ico.png</icon>
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>goal</type>
@@ -185,12 +198,15 @@
<pageTitle />
<pageIdAction>47</pageIdAction>
+
<pageId>48</pageId>
- <interactionPosition />
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
+ <interactionPosition />
<icon>plugins/Morpheus/images/download.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>outlink</type>
@@ -198,26 +214,32 @@
<pageTitle />
<pageIdAction>48</pageIdAction>
+
<pageId>49</pageId>
- <interactionPosition />
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
+ <interactionPosition />
<icon>plugins/Morpheus/images/link.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://piwik.net/space/quest/iv</url>
<pageIdAction>8</pageIdAction>
+
<pageId>50</pageId>
<eventCategory>Cat8</eventCategory>
<eventAction>Action8</eventAction>
- <eventName>Name8</eventName>
- <eventValue>353.678</eventValue>
+ <bandwidth />
<interactionPosition />
- <icon>plugins/Morpheus/images/event.png</icon>
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Name8</eventName>
+ <eventValue>353.678</eventValue>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>2</goalConversions>
@@ -227,13 +249,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returningCustomer</visitorType>
<visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>5</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>100</daysSinceFirstVisit>
@@ -269,6 +296,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>1</events>
<continent>Unknown</continent>
<continentCode>unk</continentCode>
@@ -295,9 +328,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -306,17 +343,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -341,7 +367,12 @@
<pageTitle>It's &lt;script&gt; pitch black...</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>45</pageId>
+ <bandwidth />
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName2>Cvar 2 PAGE name</customVariablePageName2>
@@ -352,9 +383,7 @@
<customVariablePageValue5>Cvar5 PAGE value is 8</customVariablePageValue5>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -364,13 +393,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returningCustomer</visitorType>
<visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>5</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>101</daysSinceFirstVisit>
@@ -406,6 +440,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Unknown</continent>
<continentCode>unk</continentCode>
@@ -432,9 +472,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -443,17 +487,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -467,12 +500,15 @@
<pageTitle>Space Quest XII</pageTitle>
<pageIdAction>4</pageIdAction>
+
<pageId>41</pageId>
- <interactionPosition>1</interactionPosition>
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
+ <interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>goal</type>
@@ -502,12 +538,15 @@
<pageTitle />
<pageIdAction>42</pageIdAction>
+
<pageId>42</pageId>
- <interactionPosition />
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
+ <interactionPosition />
<icon>plugins/Morpheus/images/download.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>outlink</type>
@@ -515,26 +554,32 @@
<pageTitle />
<pageIdAction>43</pageIdAction>
+
<pageId>43</pageId>
- <interactionPosition />
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
+ <interactionPosition />
<icon>plugins/Morpheus/images/link.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://piwik.net/space/quest/iv</url>
<pageIdAction>8</pageIdAction>
+
<pageId>44</pageId>
<eventCategory>Cat7</eventCategory>
<eventAction>Action7</eventAction>
- <eventName>Name7</eventName>
- <eventValue>352.678</eventValue>
+ <bandwidth />
<interactionPosition />
- <icon>plugins/Morpheus/images/event.png</icon>
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Name7</eventName>
+ <eventValue>352.678</eventValue>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>2</goalConversions>
@@ -544,13 +589,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returningCustomer</visitorType>
<visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>5</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>100</daysSinceFirstVisit>
@@ -586,6 +636,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>1</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -612,9 +668,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -623,17 +683,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -658,7 +707,12 @@
<pageTitle>It's &lt;script&gt; pitch black...</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>40</pageId>
+ <bandwidth />
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName2>Cvar 2 PAGE name</customVariablePageName2>
@@ -669,9 +723,7 @@
<customVariablePageValue5>Cvar5 PAGE value is 7</customVariablePageValue5>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -681,13 +733,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returningCustomer</visitorType>
<visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>5</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>101</daysSinceFirstVisit>
@@ -723,6 +780,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -749,9 +812,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -760,17 +827,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -784,12 +840,15 @@
<pageTitle>Space Quest XII</pageTitle>
<pageIdAction>4</pageIdAction>
+
<pageId>35</pageId>
- <interactionPosition>1</interactionPosition>
+ <bandwidth />
<timeSpent>360</timeSpent>
<timeSpentPretty>6 min 0s</timeSpentPretty>
+ <interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>goal</type>
@@ -807,19 +866,22 @@
<url />
<pageIdAction />
+
<pageId>36</pageId>
+ <bandwidth />
+ <timeSpent>180</timeSpent>
+ <timeSpentPretty>3 min 0s</timeSpentPretty>
+ <siteSearchKeyword>Bring on the party</siteSearchKeyword>
+ <interactionPosition>2</interactionPosition>
+ <icon>plugins/Morpheus/images/search_ico.png</icon>
+
<customVariables>
<row>
<customVariablePageName4>Search Category</customVariablePageName4>
<customVariablePageValue4>CAT</customVariablePageValue4>
</row>
</customVariables>
- <siteSearchKeyword>Bring on the party</siteSearchKeyword>
- <interactionPosition>2</interactionPosition>
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/search_ico.png</icon>
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>goal</type>
@@ -838,12 +900,15 @@
<pageTitle />
<pageIdAction>37</pageIdAction>
+
<pageId>37</pageId>
- <interactionPosition />
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
+ <interactionPosition />
<icon>plugins/Morpheus/images/download.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>outlink</type>
@@ -851,26 +916,32 @@
<pageTitle />
<pageIdAction>38</pageIdAction>
+
<pageId>38</pageId>
- <interactionPosition />
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
+ <interactionPosition />
<icon>plugins/Morpheus/images/link.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://piwik.net/space/quest/iv</url>
<pageIdAction>8</pageIdAction>
+
<pageId>39</pageId>
<eventCategory>Cat6</eventCategory>
<eventAction>Action6</eventAction>
- <eventName>Name6</eventName>
- <eventValue>351.678</eventValue>
+ <bandwidth />
<interactionPosition />
- <icon>plugins/Morpheus/images/event.png</icon>
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Name6</eventName>
+ <eventValue>351.678</eventValue>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>2</goalConversions>
@@ -880,13 +951,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returningCustomer</visitorType>
<visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>5</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>100</daysSinceFirstVisit>
@@ -922,6 +998,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>1</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -948,9 +1030,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -959,17 +1045,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -994,7 +1069,12 @@
<pageTitle>It's &lt;script&gt; pitch black...</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>34</pageId>
+ <bandwidth />
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName2>Cvar 2 PAGE name</customVariablePageName2>
@@ -1005,9 +1085,7 @@
<customVariablePageValue5>Cvar5 PAGE value is 6</customVariablePageValue5>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -1017,13 +1095,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returningCustomer</visitorType>
<visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>5</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>101</daysSinceFirstVisit>
@@ -1059,6 +1142,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -1085,9 +1174,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -1096,17 +1189,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -1120,12 +1202,15 @@
<pageTitle>Space Quest XII</pageTitle>
<pageIdAction>4</pageIdAction>
+
<pageId>30</pageId>
- <interactionPosition>1</interactionPosition>
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
+ <interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>goal</type>
@@ -1155,12 +1240,15 @@
<pageTitle />
<pageIdAction>32</pageIdAction>
+
<pageId>31</pageId>
- <interactionPosition />
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
+ <interactionPosition />
<icon>plugins/Morpheus/images/download.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>outlink</type>
@@ -1168,26 +1256,32 @@
<pageTitle />
<pageIdAction>33</pageIdAction>
+
<pageId>32</pageId>
- <interactionPosition />
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
+ <interactionPosition />
<icon>plugins/Morpheus/images/link.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://piwik.net/space/quest/iv</url>
<pageIdAction>8</pageIdAction>
+
<pageId>33</pageId>
<eventCategory>Cat5</eventCategory>
<eventAction>Action5</eventAction>
- <eventName>Name5</eventName>
- <eventValue>350.678</eventValue>
+ <bandwidth />
<interactionPosition />
- <icon>plugins/Morpheus/images/event.png</icon>
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Name5</eventName>
+ <eventValue>350.678</eventValue>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>2</goalConversions>
@@ -1197,13 +1291,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returningCustomer</visitorType>
<visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>5</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>100</daysSinceFirstVisit>
@@ -1239,6 +1338,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>1</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -1265,9 +1370,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -1276,17 +1385,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -1311,7 +1409,12 @@
<pageTitle>It's &lt;script&gt; pitch black...</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>29</pageId>
+ <bandwidth />
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName2>Cvar 2 PAGE name</customVariablePageName2>
@@ -1322,9 +1425,7 @@
<customVariablePageValue5>Cvar5 PAGE value is 5</customVariablePageValue5>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -1334,13 +1435,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returningCustomer</visitorType>
<visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>5</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>101</daysSinceFirstVisit>
@@ -1376,6 +1482,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -1402,9 +1514,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -1413,17 +1529,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -1437,12 +1542,15 @@
<pageTitle>Space Quest XII</pageTitle>
<pageIdAction>4</pageIdAction>
+
<pageId>24</pageId>
- <interactionPosition>1</interactionPosition>
+ <bandwidth />
<timeSpent>360</timeSpent>
<timeSpentPretty>6 min 0s</timeSpentPretty>
+ <interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>goal</type>
@@ -1460,19 +1568,22 @@
<url />
<pageIdAction />
+
<pageId>25</pageId>
+ <bandwidth />
+ <timeSpent>180</timeSpent>
+ <timeSpentPretty>3 min 0s</timeSpentPretty>
+ <siteSearchKeyword>Bring on the party</siteSearchKeyword>
+ <interactionPosition>2</interactionPosition>
+ <icon>plugins/Morpheus/images/search_ico.png</icon>
+
<customVariables>
<row>
<customVariablePageName4>Search Category</customVariablePageName4>
<customVariablePageValue4>CAT</customVariablePageValue4>
</row>
</customVariables>
- <siteSearchKeyword>Bring on the party</siteSearchKeyword>
- <interactionPosition>2</interactionPosition>
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
- <icon>plugins/Morpheus/images/search_ico.png</icon>
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>goal</type>
@@ -1491,12 +1602,15 @@
<pageTitle />
<pageIdAction>27</pageIdAction>
+
<pageId>26</pageId>
- <interactionPosition />
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
+ <interactionPosition />
<icon>plugins/Morpheus/images/download.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>outlink</type>
@@ -1504,26 +1618,32 @@
<pageTitle />
<pageIdAction>28</pageIdAction>
+
<pageId>27</pageId>
- <interactionPosition />
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
+ <interactionPosition />
<icon>plugins/Morpheus/images/link.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>event</type>
<url>http://piwik.net/space/quest/iv</url>
<pageIdAction>8</pageIdAction>
+
<pageId>28</pageId>
<eventCategory>Cat4</eventCategory>
<eventAction>Action4</eventAction>
- <eventName>Name4</eventName>
- <eventValue>349.678</eventValue>
+ <bandwidth />
<interactionPosition />
- <icon>plugins/Morpheus/images/event.png</icon>
+ <icon>plugins/Morpheus/images/event.png</icon>
+ <eventName>Name4</eventName>
+ <eventValue>349.678</eventValue>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>2</goalConversions>
@@ -1533,13 +1653,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returningCustomer</visitorType>
<visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>5</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>100</daysSinceFirstVisit>
@@ -1575,6 +1700,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>1</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -1601,9 +1732,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -1612,16 +1747,5 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest__UserCountry.getCity_month.xml b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest__UserCountry.getCity_month.xml
index 7df3efc479..8cc2b0f386 100644
--- a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest__UserCountry.getCity_month.xml
+++ b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest__UserCountry.getCity_month.xml
@@ -162,7 +162,7 @@
<logo>plugins/Morpheus/icons/dist/flags/ru.png</logo>
</row>
<row>
- <label>Lhasa, Unknown, Tibet</label>
+ <label>Lhasa, Xizang, China</label>
<nb_visits>2</nb_visits>
<nb_actions>5</nb_actions>
<max_actions>4</max_actions>
@@ -186,13 +186,13 @@
<sum_daily_nb_users>0</sum_daily_nb_users>
<lat>29.65</lat>
<long>91.1</long>
- <segment>city==Lhasa;regionCode==1;countryCode==ti</segment>
+ <segment>city==Lhasa;regionCode==14;countryCode==cn</segment>
<city_name>Lhasa</city_name>
- <region>1</region>
- <country>ti</country>
- <country_name>Tibet</country_name>
- <region_name>Unknown</region_name>
- <logo>plugins/Morpheus/icons/dist/flags/ti.png</logo>
+ <region>14</region>
+ <country>cn</country>
+ <country_name>China</country_name>
+ <region_name>Xizang</region_name>
+ <logo>plugins/Morpheus/icons/dist/flags/cn.png</logo>
</row>
<row>
<label>London, London, City of, United Kingdom</label>
diff --git a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest__UserCountry.getCountry_month.xml b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest__UserCountry.getCountry_month.xml
index 3e1bd4e2cc..c4558671c1 100644
--- a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest__UserCountry.getCountry_month.xml
+++ b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest__UserCountry.getCountry_month.xml
@@ -113,10 +113,10 @@
<logoHeight>16</logoHeight>
</row>
<row>
- <label>France</label>
+ <label>China</label>
<nb_visits>2</nb_visits>
- <nb_actions>6</nb_actions>
- <max_actions>5</max_actions>
+ <nb_actions>5</nb_actions>
+ <max_actions>4</max_actions>
<sum_visit_length>1621</sum_visit_length>
<bounce_count>1</bounce_count>
<goals>
@@ -135,16 +135,16 @@
<revenue>15</revenue>
<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
<sum_daily_nb_users>0</sum_daily_nb_users>
- <code>fr</code>
- <logo>plugins/Morpheus/icons/dist/flags/fr.png</logo>
- <segment>countryCode==fr</segment>
+ <code>cn</code>
+ <logo>plugins/Morpheus/icons/dist/flags/cn.png</logo>
+ <segment>countryCode==cn</segment>
<logoHeight>16</logoHeight>
</row>
<row>
- <label>Indonesia</label>
+ <label>France</label>
<nb_visits>2</nb_visits>
- <nb_actions>5</nb_actions>
- <max_actions>4</max_actions>
+ <nb_actions>6</nb_actions>
+ <max_actions>5</max_actions>
<sum_visit_length>1621</sum_visit_length>
<bounce_count>1</bounce_count>
<goals>
@@ -163,16 +163,16 @@
<revenue>15</revenue>
<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
<sum_daily_nb_users>0</sum_daily_nb_users>
- <code>id</code>
- <logo>plugins/Morpheus/icons/dist/flags/id.png</logo>
- <segment>countryCode==id</segment>
+ <code>fr</code>
+ <logo>plugins/Morpheus/icons/dist/flags/fr.png</logo>
+ <segment>countryCode==fr</segment>
<logoHeight>16</logoHeight>
</row>
<row>
- <label>Italy</label>
+ <label>Indonesia</label>
<nb_visits>2</nb_visits>
- <nb_actions>6</nb_actions>
- <max_actions>5</max_actions>
+ <nb_actions>5</nb_actions>
+ <max_actions>4</max_actions>
<sum_visit_length>1621</sum_visit_length>
<bounce_count>1</bounce_count>
<goals>
@@ -191,16 +191,16 @@
<revenue>15</revenue>
<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
<sum_daily_nb_users>0</sum_daily_nb_users>
- <code>it</code>
- <logo>plugins/Morpheus/icons/dist/flags/it.png</logo>
- <segment>countryCode==it</segment>
+ <code>id</code>
+ <logo>plugins/Morpheus/icons/dist/flags/id.png</logo>
+ <segment>countryCode==id</segment>
<logoHeight>16</logoHeight>
</row>
<row>
- <label>Macedonia</label>
+ <label>Italy</label>
<nb_visits>2</nb_visits>
- <nb_actions>5</nb_actions>
- <max_actions>4</max_actions>
+ <nb_actions>6</nb_actions>
+ <max_actions>5</max_actions>
<sum_visit_length>1621</sum_visit_length>
<bounce_count>1</bounce_count>
<goals>
@@ -219,13 +219,13 @@
<revenue>15</revenue>
<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
<sum_daily_nb_users>0</sum_daily_nb_users>
- <code>mk</code>
- <logo>plugins/Morpheus/icons/dist/flags/mk.png</logo>
- <segment>countryCode==mk</segment>
+ <code>it</code>
+ <logo>plugins/Morpheus/icons/dist/flags/it.png</logo>
+ <segment>countryCode==it</segment>
<logoHeight>16</logoHeight>
</row>
<row>
- <label>Tibet</label>
+ <label>Macedonia</label>
<nb_visits>2</nb_visits>
<nb_actions>5</nb_actions>
<max_actions>4</max_actions>
@@ -247,9 +247,9 @@
<revenue>15</revenue>
<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
<sum_daily_nb_users>0</sum_daily_nb_users>
- <code>ti</code>
- <logo>plugins/Morpheus/icons/dist/flags/ti.png</logo>
- <segment>countryCode==ti</segment>
+ <code>mk</code>
+ <logo>plugins/Morpheus/icons/dist/flags/mk.png</logo>
+ <segment>countryCode==mk</segment>
<logoHeight>16</logoHeight>
</row>
<row>
diff --git a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest__UserCountry.getRegion_month.xml b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest__UserCountry.getRegion_month.xml
index 8e963544ee..9e358630a1 100644
--- a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest__UserCountry.getRegion_month.xml
+++ b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest__UserCountry.getRegion_month.xml
@@ -240,7 +240,7 @@
<logo>plugins/Morpheus/icons/dist/flags/mk.png</logo>
</row>
<row>
- <label>Unknown, Tibet</label>
+ <label>Xizang, China</label>
<nb_visits>2</nb_visits>
<nb_actions>5</nb_actions>
<max_actions>4</max_actions>
@@ -262,12 +262,12 @@
<revenue>15</revenue>
<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
<sum_daily_nb_users>0</sum_daily_nb_users>
- <segment>regionCode==1;countryCode==ti</segment>
- <region>1</region>
- <country>ti</country>
- <country_name>Tibet</country_name>
- <region_name>Unknown</region_name>
- <logo>plugins/Morpheus/icons/dist/flags/ti.png</logo>
+ <segment>regionCode==14;countryCode==cn</segment>
+ <region>14</region>
+ <country>cn</country>
+ <country_name>China</country_name>
+ <region_name>Xizang</region_name>
+ <logo>plugins/Morpheus/icons/dist/flags/cn.png</logo>
</row>
<row>
<label>California, United States</label>
diff --git a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_sortByProcessedMetric_constantRowsCountShouldKeepEmptyRows__API.getProcessedReport_day.xml b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_sortByProcessedMetric_constantRowsCountShouldKeepEmptyRows__API.getProcessedReport_day.xml
index cee8ad2d77..b6cff4f6c8 100644
--- a/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_sortByProcessedMetric_constantRowsCountShouldKeepEmptyRows__API.getProcessedReport_day.xml
+++ b/tests/PHPUnit/System/expected/test_ManyVisitorsOneWebsiteTest_sortByProcessedMetric_constantRowsCountShouldKeepEmptyRows__API.getProcessedReport_day.xml
@@ -55,7 +55,7 @@
</columns>
<reportData>
<row>
- <label>12h</label>
+ <label>12</label>
<nb_uniq_visitors>4</nb_uniq_visitors>
<nb_visits>4</nb_visits>
<nb_actions>20</nb_actions>
@@ -66,7 +66,7 @@
<bounce_rate>0%</bounce_rate>
</row>
<row>
- <label>11h</label>
+ <label>11</label>
<nb_uniq_visitors>4</nb_uniq_visitors>
<nb_visits>4</nb_visits>
<nb_actions>4</nb_actions>
@@ -77,7 +77,7 @@
<bounce_rate>100%</bounce_rate>
</row>
<row>
- <label>0h</label>
+ <label>00</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -88,7 +88,7 @@
<revenue>$ 0</revenue>
</row>
<row>
- <label>1h</label>
+ <label>01</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -99,7 +99,7 @@
<revenue>$ 0</revenue>
</row>
<row>
- <label>2h</label>
+ <label>02</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -110,7 +110,7 @@
<revenue>$ 0</revenue>
</row>
<row>
- <label>3h</label>
+ <label>03</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -121,7 +121,7 @@
<revenue>$ 0</revenue>
</row>
<row>
- <label>4h</label>
+ <label>04</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -132,7 +132,7 @@
<revenue>$ 0</revenue>
</row>
<row>
- <label>5h</label>
+ <label>05</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -143,7 +143,7 @@
<revenue>$ 0</revenue>
</row>
<row>
- <label>6h</label>
+ <label>06</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -154,7 +154,7 @@
<revenue>$ 0</revenue>
</row>
<row>
- <label>7h</label>
+ <label>07</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -165,7 +165,7 @@
<revenue>$ 0</revenue>
</row>
<row>
- <label>8h</label>
+ <label>08</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -176,7 +176,7 @@
<revenue>$ 0</revenue>
</row>
<row>
- <label>9h</label>
+ <label>09</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -187,7 +187,7 @@
<revenue>$ 0</revenue>
</row>
<row>
- <label>10h</label>
+ <label>10</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -198,7 +198,7 @@
<revenue>$ 0</revenue>
</row>
<row>
- <label>13h</label>
+ <label>13</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -209,7 +209,7 @@
<revenue>$ 0</revenue>
</row>
<row>
- <label>14h</label>
+ <label>14</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -220,7 +220,7 @@
<revenue>$ 0</revenue>
</row>
<row>
- <label>15h</label>
+ <label>15</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -231,7 +231,7 @@
<revenue>$ 0</revenue>
</row>
<row>
- <label>16h</label>
+ <label>16</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -242,7 +242,7 @@
<revenue>$ 0</revenue>
</row>
<row>
- <label>17h</label>
+ <label>17</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -253,7 +253,7 @@
<revenue>$ 0</revenue>
</row>
<row>
- <label>18h</label>
+ <label>18</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -264,7 +264,7 @@
<revenue>$ 0</revenue>
</row>
<row>
- <label>19h</label>
+ <label>19</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -275,7 +275,7 @@
<revenue>$ 0</revenue>
</row>
<row>
- <label>20h</label>
+ <label>20</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -286,7 +286,7 @@
<revenue>$ 0</revenue>
</row>
<row>
- <label>21h</label>
+ <label>21</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -297,7 +297,7 @@
<revenue>$ 0</revenue>
</row>
<row>
- <label>22h</label>
+ <label>22</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -308,7 +308,7 @@
<revenue>$ 0</revenue>
</row>
<row>
- <label>23h</label>
+ <label>23</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
diff --git a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__CorePluginsAdmin.getSystemSettings.xml b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__CorePluginsAdmin.getSystemSettings.xml
index 0a3d2da7c7..8c48d07315 100644
--- a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__CorePluginsAdmin.getSystemSettings.xml
+++ b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__CorePluginsAdmin.getSystemSettings.xml
@@ -35,8 +35,8 @@
<uiControlAttributes>
</uiControlAttributes>
<availableValues>
- <row key="1">Yes</row>
- <row key="0">No (Default)</row>
+ <row key="1">Yes (Default)</row>
+ <row key="0">No</row>
</availableValues>
<description />
<inlineHelp>An email will be sent to Super Users when there is a new version available for a plugin.</inlineHelp>
@@ -294,7 +294,7 @@ Another line</defaultValue>
</row>
<row>
<name>redisHost</name>
- <title>Redis host</title>
+ <title>Redis host or unix socket</title>
<value>127.0.0.1</value>
<defaultValue>127.0.0.1</defaultValue>
<type>string</type>
@@ -304,7 +304,7 @@ Another line</defaultValue>
</uiControlAttributes>
<availableValues />
<description />
- <inlineHelp>Remote host of the Redis server. Max 500 characters are allowed.</inlineHelp>
+ <inlineHelp>Remote host or unix socket of the Redis server. Max 500 characters are allowed.</inlineHelp>
<templateFile />
<introduction />
<condition />
@@ -321,7 +321,7 @@ Another line</defaultValue>
</uiControlAttributes>
<availableValues />
<description />
- <inlineHelp>Port the Redis server is running on. Value should be between 1 and 65535.</inlineHelp>
+ <inlineHelp>Port the Redis server is running on. Value should be between 1 and 65535. Use 0 if you are using unix socket to connect to Redis server.</inlineHelp>
<templateFile />
<introduction />
<condition />
diff --git a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__DevicesDetection.getBrand_day.xml b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__DevicesDetection.getBrand_day.xml
index da99abbc01..68eb0c2cb1 100644
--- a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__DevicesDetection.getBrand_day.xml
+++ b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__DevicesDetection.getBrand_day.xml
@@ -22,7 +22,7 @@
</goals>
<nb_conversions>2</nb_conversions>
<revenue>43</revenue>
- <logo>plugins/Morpheus/icons/dist/brand/Unknown.ico</logo>
+ <logo>plugins/Morpheus/icons/dist/brand/unk.png</logo>
<segment>deviceBrand==Unknown</segment>
</row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__DevicesDetection.getModel_day.xml b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__DevicesDetection.getModel_day.xml
index aa4fc41878..faf5f2c061 100644
--- a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__DevicesDetection.getModel_day.xml
+++ b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__DevicesDetection.getModel_day.xml
@@ -9,15 +9,15 @@
<sum_visit_length>1621</sum_visit_length>
<bounce_count>1</bounce_count>
<goals>
- <row idgoal='2'>
+ <row idgoal='1'>
<nb_conversions>1</nb_conversions>
<nb_visits_converted>1</nb_visits_converted>
- <revenue>1</revenue>
+ <revenue>42</revenue>
</row>
- <row idgoal='1'>
+ <row idgoal='2'>
<nb_conversions>1</nb_conversions>
<nb_visits_converted>1</nb_visits_converted>
- <revenue>42</revenue>
+ <revenue>1</revenue>
</row>
</goals>
<nb_conversions>2</nb_conversions>
diff --git a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__DevicesDetection.getType_day.xml b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__DevicesDetection.getType_day.xml
index 6d304e257f..80be0570eb 100644
--- a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__DevicesDetection.getType_day.xml
+++ b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__DevicesDetection.getType_day.xml
@@ -9,14 +9,19 @@
<sum_visit_length>1621</sum_visit_length>
<bounce_count>1</bounce_count>
<goals>
+ <row idgoal='1'>
+ <nb_conversions>1</nb_conversions>
+ <nb_visits_converted>1</nb_visits_converted>
+ <revenue>42</revenue>
+ </row>
<row idgoal='2'>
<nb_conversions>1</nb_conversions>
<nb_visits_converted>1</nb_visits_converted>
<revenue>1</revenue>
</row>
</goals>
- <nb_conversions>1</nb_conversions>
- <revenue>1</revenue>
+ <nb_conversions>2</nb_conversions>
+ <revenue>43</revenue>
<segment>deviceType==desktop</segment>
<logo>plugins/Morpheus/icons/dist/devices/desktop.png</logo>
</row>
@@ -30,37 +35,37 @@
<label>Car browser</label>
<nb_visits>0</nb_visits>
<segment>deviceType==car+browser</segment>
- <logo>plugins/Morpheus/icons/dist/devices/carbrowser.png</logo>
+ <logo>plugins/Morpheus/icons/dist/devices/car_browser.png</logo>
</row>
<row>
<label>Console</label>
<nb_visits>0</nb_visits>
<segment>deviceType==console</segment>
- <logo>plugins/Morpheus/icons/dist/devices/console.gif</logo>
+ <logo>plugins/Morpheus/icons/dist/devices/console.png</logo>
</row>
<row>
<label>Feature phone</label>
<nb_visits>0</nb_visits>
<segment>deviceType==feature+phone</segment>
- <logo>plugins/Morpheus/icons/dist/devices/mobile.png</logo>
+ <logo>plugins/Morpheus/icons/dist/devices/feature_phone.png</logo>
</row>
<row>
<label>Phablet</label>
<nb_visits>0</nb_visits>
<segment>deviceType==phablet</segment>
- <logo>plugins/Morpheus/icons/dist/devices/unknown.png</logo>
+ <logo>plugins/Morpheus/icons/dist/devices/phablet.png</logo>
</row>
<row>
<label>Portable media player</label>
<nb_visits>0</nb_visits>
<segment>deviceType==portable+media+player</segment>
- <logo>plugins/Morpheus/icons/dist/devices/unknown.png</logo>
+ <logo>plugins/Morpheus/icons/dist/devices/portable_media_player.png</logo>
</row>
<row>
<label>Smart display</label>
<nb_visits>0</nb_visits>
<segment>deviceType==smart+display</segment>
- <logo>plugins/Morpheus/icons/dist/devices/unknown.png</logo>
+ <logo>plugins/Morpheus/icons/dist/devices/smart_display.png</logo>
</row>
<row>
<label>Smartphone</label>
@@ -80,18 +85,4 @@
<segment>deviceType==tv</segment>
<logo>plugins/Morpheus/icons/dist/devices/tv.png</logo>
</row>
- <row>
- <label>Unknown</label>
- <goals>
- <row idgoal='1'>
- <nb_conversions>1</nb_conversions>
- <nb_visits_converted>1</nb_visits_converted>
- <revenue>42</revenue>
- </row>
- </goals>
- <nb_conversions>1</nb_conversions>
- <revenue>42</revenue>
- <nb_visits>0</nb_visits>
- <logo>plugins/Morpheus/icons/dist/devices/unknown.png</logo>
- </row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__UserCountry.getCountry_day.xml b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__UserCountry.getCountry_day.xml
index 01c30c1a1b..9a80fd221e 100644
--- a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__UserCountry.getCountry_day.xml
+++ b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__UserCountry.getCountry_day.xml
@@ -25,7 +25,6 @@
<code>fr</code>
<logo>plugins/Morpheus/icons/dist/flags/fr.png</logo>
<segment>countryCode==fr</segment>
- <logoWidth>16</logoWidth>
- <logoHeight>11</logoHeight>
+ <logoHeight>16</logoHeight>
</row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__VisitTime.getVisitInformationPerLocalTime_day.xml b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__VisitTime.getVisitInformationPerLocalTime_day.xml
index 0b6712aa1b..a35c24e46c 100644
--- a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__VisitTime.getVisitInformationPerLocalTime_day.xml
+++ b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__VisitTime.getVisitInformationPerLocalTime_day.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" ?>
<result>
<row>
- <label>0h</label>
+ <label>00</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -12,7 +12,7 @@
<segment>visitLocalHour==0</segment>
</row>
<row>
- <label>1h</label>
+ <label>01</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -23,7 +23,7 @@
<segment>visitLocalHour==1</segment>
</row>
<row>
- <label>2h</label>
+ <label>02</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -34,7 +34,7 @@
<segment>visitLocalHour==2</segment>
</row>
<row>
- <label>3h</label>
+ <label>03</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -45,7 +45,7 @@
<segment>visitLocalHour==3</segment>
</row>
<row>
- <label>4h</label>
+ <label>04</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -56,7 +56,7 @@
<segment>visitLocalHour==4</segment>
</row>
<row>
- <label>5h</label>
+ <label>05</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -67,7 +67,7 @@
<segment>visitLocalHour==5</segment>
</row>
<row>
- <label>6h</label>
+ <label>06</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -78,7 +78,7 @@
<segment>visitLocalHour==6</segment>
</row>
<row>
- <label>7h</label>
+ <label>07</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -89,7 +89,7 @@
<segment>visitLocalHour==7</segment>
</row>
<row>
- <label>8h</label>
+ <label>08</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -100,7 +100,7 @@
<segment>visitLocalHour==8</segment>
</row>
<row>
- <label>9h</label>
+ <label>09</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -111,7 +111,7 @@
<segment>visitLocalHour==9</segment>
</row>
<row>
- <label>10h</label>
+ <label>10</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -122,7 +122,7 @@
<segment>visitLocalHour==10</segment>
</row>
<row>
- <label>11h</label>
+ <label>11</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -133,7 +133,7 @@
<segment>visitLocalHour==11</segment>
</row>
<row>
- <label>12h</label>
+ <label>12</label>
<nb_uniq_visitors>1</nb_uniq_visitors>
<nb_visits>2</nb_visits>
<nb_actions>8</nb_actions>
@@ -144,7 +144,7 @@
<segment>visitLocalHour==12</segment>
</row>
<row>
- <label>13h</label>
+ <label>13</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -155,7 +155,7 @@
<segment>visitLocalHour==13</segment>
</row>
<row>
- <label>14h</label>
+ <label>14</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -166,7 +166,7 @@
<segment>visitLocalHour==14</segment>
</row>
<row>
- <label>15h</label>
+ <label>15</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -177,7 +177,7 @@
<segment>visitLocalHour==15</segment>
</row>
<row>
- <label>16h</label>
+ <label>16</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -188,7 +188,7 @@
<segment>visitLocalHour==16</segment>
</row>
<row>
- <label>17h</label>
+ <label>17</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -199,7 +199,7 @@
<segment>visitLocalHour==17</segment>
</row>
<row>
- <label>18h</label>
+ <label>18</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -210,7 +210,7 @@
<segment>visitLocalHour==18</segment>
</row>
<row>
- <label>19h</label>
+ <label>19</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -221,7 +221,7 @@
<segment>visitLocalHour==19</segment>
</row>
<row>
- <label>20h</label>
+ <label>20</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -232,7 +232,7 @@
<segment>visitLocalHour==20</segment>
</row>
<row>
- <label>21h</label>
+ <label>21</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -243,7 +243,7 @@
<segment>visitLocalHour==21</segment>
</row>
<row>
- <label>22h</label>
+ <label>22</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -254,7 +254,7 @@
<segment>visitLocalHour==22</segment>
</row>
<row>
- <label>23h</label>
+ <label>23</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
diff --git a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__VisitTime.getVisitInformationPerServerTime_day.xml b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__VisitTime.getVisitInformationPerServerTime_day.xml
index 6626c3ffaf..91608ad1d5 100644
--- a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__VisitTime.getVisitInformationPerServerTime_day.xml
+++ b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__VisitTime.getVisitInformationPerServerTime_day.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" ?>
<result>
<row>
- <label>0h</label>
+ <label>00</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -12,7 +12,7 @@
<segment>visitServerHour==0</segment>
</row>
<row>
- <label>1h</label>
+ <label>01</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -23,7 +23,7 @@
<segment>visitServerHour==1</segment>
</row>
<row>
- <label>2h</label>
+ <label>02</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -34,7 +34,7 @@
<segment>visitServerHour==2</segment>
</row>
<row>
- <label>3h</label>
+ <label>03</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -45,7 +45,7 @@
<segment>visitServerHour==3</segment>
</row>
<row>
- <label>4h</label>
+ <label>04</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -56,7 +56,7 @@
<segment>visitServerHour==4</segment>
</row>
<row>
- <label>5h</label>
+ <label>05</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -67,7 +67,7 @@
<segment>visitServerHour==5</segment>
</row>
<row>
- <label>6h</label>
+ <label>06</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -78,7 +78,7 @@
<segment>visitServerHour==6</segment>
</row>
<row>
- <label>7h</label>
+ <label>07</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -89,7 +89,7 @@
<segment>visitServerHour==7</segment>
</row>
<row>
- <label>8h</label>
+ <label>08</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -100,7 +100,7 @@
<segment>visitServerHour==8</segment>
</row>
<row>
- <label>9h</label>
+ <label>09</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -111,7 +111,7 @@
<segment>visitServerHour==9</segment>
</row>
<row>
- <label>10h</label>
+ <label>10</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -122,7 +122,7 @@
<segment>visitServerHour==10</segment>
</row>
<row>
- <label>11h</label>
+ <label>11</label>
<nb_uniq_visitors>1</nb_uniq_visitors>
<nb_visits>1</nb_visits>
<nb_actions>7</nb_actions>
@@ -141,7 +141,7 @@
<segment>visitServerHour==11</segment>
</row>
<row>
- <label>12h</label>
+ <label>12</label>
<nb_uniq_visitors>1</nb_uniq_visitors>
<nb_visits>1</nb_visits>
<nb_actions>1</nb_actions>
@@ -160,7 +160,7 @@
<segment>visitServerHour==12</segment>
</row>
<row>
- <label>13h</label>
+ <label>13</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -171,7 +171,7 @@
<segment>visitServerHour==13</segment>
</row>
<row>
- <label>14h</label>
+ <label>14</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -182,7 +182,7 @@
<segment>visitServerHour==14</segment>
</row>
<row>
- <label>15h</label>
+ <label>15</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -193,7 +193,7 @@
<segment>visitServerHour==15</segment>
</row>
<row>
- <label>16h</label>
+ <label>16</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -204,7 +204,7 @@
<segment>visitServerHour==16</segment>
</row>
<row>
- <label>17h</label>
+ <label>17</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -215,7 +215,7 @@
<segment>visitServerHour==17</segment>
</row>
<row>
- <label>18h</label>
+ <label>18</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -226,7 +226,7 @@
<segment>visitServerHour==18</segment>
</row>
<row>
- <label>19h</label>
+ <label>19</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -237,7 +237,7 @@
<segment>visitServerHour==19</segment>
</row>
<row>
- <label>20h</label>
+ <label>20</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -248,7 +248,7 @@
<segment>visitServerHour==20</segment>
</row>
<row>
- <label>21h</label>
+ <label>21</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -259,7 +259,7 @@
<segment>visitServerHour==21</segment>
</row>
<row>
- <label>22h</label>
+ <label>22</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -270,7 +270,7 @@
<segment>visitServerHour==22</segment>
</row>
<row>
- <label>23h</label>
+ <label>23</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
diff --git a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__subtable__API.getProcessedReport_week.xml b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__subtable__API.getProcessedReport_week.xml
index d13ec92745..451f2f890b 100644
--- a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__subtable__API.getProcessedReport_week.xml
+++ b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__subtable__API.getProcessedReport_week.xml
@@ -60,11 +60,11 @@
</row>
</reportMetadata>
<reportTotal>
- <nb_visits>1</nb_visits>
- <nb_hits>1</nb_hits>
+ <nb_visits>4</nb_visits>
+ <nb_hits>4</nb_hits>
+ <exit_nb_visits>2</exit_nb_visits>
<entry_bounce_count>1</entry_bounce_count>
- <entry_nb_visits>1</entry_nb_visits>
- <entry_nb_actions>1</entry_nb_actions>
- <exit_nb_visits>1</exit_nb_visits>
+ <entry_nb_visits>2</entry_nb_visits>
+ <entry_nb_actions>8</entry_nb_actions>
</reportTotal>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_csv__API.get_month.csv b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_csv__API.get_month.csv
index 1b6a6591aa..2ff47c1417 100644
--- a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_csv__API.get_month.csv
+++ b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_csv__API.get_month.csv
Binary files differ
diff --git a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_showColumnsWithProcessedMetrics___API.getProcessedReport_day.xml b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_showColumnsWithProcessedMetrics___API.getProcessedReport_day.xml
index 90c254ce80..92feaea19a 100644
--- a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_showColumnsWithProcessedMetrics___API.getProcessedReport_day.xml
+++ b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_showColumnsWithProcessedMetrics___API.getProcessedReport_day.xml
@@ -14,7 +14,7 @@
<nb_visits>Visits</nb_visits>
</metrics>
<metricsDocumentation>
- <nb_visits>If a visitor comes to your website for the first time or if he visits a page more than 30 minutes after his last page view, this will be recorded as a new visit.</nb_visits>
+ <nb_visits>If a visitor comes to your website for the first time or if they visit a page more than 30 minutes after their last page view, this will be recorded as a new visit.</nb_visits>
</metricsDocumentation>
<constantRowsCount>1</constantRowsCount>
<metricsGoal>
@@ -34,122 +34,122 @@
</columns>
<reportData>
<row>
- <label>0h</label>
+ <label>00</label>
<nb_visits>0</nb_visits>
<revenue>$ 0</revenue>
</row>
<row>
- <label>1h</label>
+ <label>01</label>
<nb_visits>0</nb_visits>
<revenue>$ 0</revenue>
</row>
<row>
- <label>2h</label>
+ <label>02</label>
<nb_visits>0</nb_visits>
<revenue>$ 0</revenue>
</row>
<row>
- <label>3h</label>
+ <label>03</label>
<nb_visits>0</nb_visits>
<revenue>$ 0</revenue>
</row>
<row>
- <label>4h</label>
+ <label>04</label>
<nb_visits>0</nb_visits>
<revenue>$ 0</revenue>
</row>
<row>
- <label>5h</label>
+ <label>05</label>
<nb_visits>0</nb_visits>
<revenue>$ 0</revenue>
</row>
<row>
- <label>6h</label>
+ <label>06</label>
<nb_visits>0</nb_visits>
<revenue>$ 0</revenue>
</row>
<row>
- <label>7h</label>
+ <label>07</label>
<nb_visits>0</nb_visits>
<revenue>$ 0</revenue>
</row>
<row>
- <label>8h</label>
+ <label>08</label>
<nb_visits>0</nb_visits>
<revenue>$ 0</revenue>
</row>
<row>
- <label>9h</label>
+ <label>09</label>
<nb_visits>0</nb_visits>
<revenue>$ 0</revenue>
</row>
<row>
- <label>10h</label>
+ <label>10</label>
<nb_visits>0</nb_visits>
<revenue>$ 0</revenue>
</row>
<row>
- <label>11h</label>
+ <label>11</label>
<nb_visits>1</nb_visits>
<revenue>$ 42</revenue>
</row>
<row>
- <label>12h</label>
+ <label>12</label>
<nb_visits>1</nb_visits>
<revenue>$ 1</revenue>
</row>
<row>
- <label>13h</label>
+ <label>13</label>
<nb_visits>0</nb_visits>
<revenue>$ 0</revenue>
</row>
<row>
- <label>14h</label>
+ <label>14</label>
<nb_visits>0</nb_visits>
<revenue>$ 0</revenue>
</row>
<row>
- <label>15h</label>
+ <label>15</label>
<nb_visits>0</nb_visits>
<revenue>$ 0</revenue>
</row>
<row>
- <label>16h</label>
+ <label>16</label>
<nb_visits>0</nb_visits>
<revenue>$ 0</revenue>
</row>
<row>
- <label>17h</label>
+ <label>17</label>
<nb_visits>0</nb_visits>
<revenue>$ 0</revenue>
</row>
<row>
- <label>18h</label>
+ <label>18</label>
<nb_visits>0</nb_visits>
<revenue>$ 0</revenue>
</row>
<row>
- <label>19h</label>
+ <label>19</label>
<nb_visits>0</nb_visits>
<revenue>$ 0</revenue>
</row>
<row>
- <label>20h</label>
+ <label>20</label>
<nb_visits>0</nb_visits>
<revenue>$ 0</revenue>
</row>
<row>
- <label>21h</label>
+ <label>21</label>
<nb_visits>0</nb_visits>
<revenue>$ 0</revenue>
</row>
<row>
- <label>22h</label>
+ <label>22</label>
<nb_visits>0</nb_visits>
<revenue>$ 0</revenue>
</row>
<row>
- <label>23h</label>
+ <label>23</label>
<nb_visits>0</nb_visits>
<revenue>$ 0</revenue>
</row>
diff --git a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_showColumns_onlyOne__API.getProcessedReport_day.xml b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_showColumns_onlyOne__API.getProcessedReport_day.xml
index 9bdbd47c3e..dba7ff2e2a 100644
--- a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_showColumns_onlyOne__API.getProcessedReport_day.xml
+++ b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_showColumns_onlyOne__API.getProcessedReport_day.xml
@@ -12,7 +12,7 @@
<nb_visits>Visits</nb_visits>
</metrics>
<metricsDocumentation>
- <nb_visits>If a visitor comes to your website for the first time or if he visits a page more than 30 minutes after his last page view, this will be recorded as a new visit.</nb_visits>
+ <nb_visits>If a visitor comes to your website for the first time or if they visit a page more than 30 minutes after their last page view, this will be recorded as a new visit.</nb_visits>
</metricsDocumentation>
<imageGraphUrl>index.php?module=API&amp;method=ImageGraph.get&amp;idSite=1&amp;apiModule=VisitsSummary&amp;apiAction=get&amp;period=day&amp;date=2010-02-05,2010-03-06</imageGraphUrl>
<imageGraphEvolutionUrl>index.php?module=API&amp;method=ImageGraph.get&amp;idSite=1&amp;apiModule=VisitsSummary&amp;apiAction=get&amp;period=day&amp;date=2010-02-05,2010-03-06</imageGraphEvolutionUrl>
diff --git a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__DevicesDetection.getBrand_day.xml b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__DevicesDetection.getBrand_day.xml
index bef5da30d5..8c9d60e701 100644
--- a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__DevicesDetection.getBrand_day.xml
+++ b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__DevicesDetection.getBrand_day.xml
@@ -26,4 +26,4 @@
<logo>plugins/Morpheus/icons/dist/brand/unk.png</logo>
<segment>deviceBrand==Unknown</segment>
</row>
-</result>
+</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__Live.getLastVisitsDetails_day.xml b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__Live.getLastVisitsDetails_day.xml
index ee6a4a91de..6526eaedea 100644
--- a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__Live.getLastVisitsDetails_day.xml
+++ b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__Live.getLastVisitsDetails_day.xml
@@ -23,12 +23,15 @@
<pageTitle>Checkout/Purchasing...</pageTitle>
<pageIdAction>13</pageIdAction>
+
<pageId>9</pageId>
+ <bandwidth />
<generationTimeMilliseconds>134</generationTimeMilliseconds>
<generationTime>0.13s</generationTime>
<interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -38,13 +41,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returning</visitorType>
<visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>2</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -80,6 +88,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -98,9 +112,13 @@
<customVariables>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -109,17 +127,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -133,14 +140,17 @@
<pageTitle>incredible title!</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>1</pageId>
+ <bandwidth />
+ <timeSpent>180</timeSpent>
+ <timeSpentPretty>3 min 0s</timeSpentPretty>
<generationTimeMilliseconds>234</generationTimeMilliseconds>
<generationTime>0.23s</generationTime>
<interactionPosition>1</interactionPosition>
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>action</type>
@@ -148,14 +158,17 @@
<pageTitle>Second page view - should be registered as URL</pageTitle>
<pageIdAction>4</pageIdAction>
+
<pageId>2</pageId>
+ <bandwidth />
+ <timeSpent>180</timeSpent>
+ <timeSpentPretty>3 min 0s</timeSpentPretty>
<generationTimeMilliseconds>224</generationTimeMilliseconds>
<generationTime>0.22s</generationTime>
<interactionPosition>2</interactionPosition>
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>outlink</type>
@@ -163,12 +176,15 @@
<pageTitle />
<pageIdAction>5</pageIdAction>
+
<pageId>3</pageId>
- <interactionPosition />
+ <bandwidth />
<timeSpent>360</timeSpent>
<timeSpentPretty>6 min 0s</timeSpentPretty>
+ <interactionPosition />
<icon>plugins/Morpheus/images/link.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>download</type>
@@ -176,12 +192,15 @@
<pageTitle />
<pageIdAction>6</pageIdAction>
+
<pageId>4</pageId>
- <interactionPosition />
+ <bandwidth />
<timeSpent>72</timeSpent>
<timeSpentPretty>1 min 12s</timeSpentPretty>
+ <interactionPosition />
<icon>plugins/Morpheus/images/download.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>outlink</type>
@@ -189,12 +208,15 @@
<pageTitle />
<pageIdAction>7</pageIdAction>
+
<pageId>5</pageId>
- <interactionPosition />
+ <bandwidth />
<timeSpent>108</timeSpent>
<timeSpentPretty>1 min 48s</timeSpentPretty>
+ <interactionPosition />
<icon>plugins/Morpheus/images/link.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>outlink</type>
@@ -202,12 +224,15 @@
<pageTitle />
<pageIdAction>8</pageIdAction>
+
<pageId>6</pageId>
- <interactionPosition />
+ <bandwidth />
<timeSpent>72</timeSpent>
<timeSpentPretty>1 min 12s</timeSpentPretty>
+ <interactionPosition />
<icon>plugins/Morpheus/images/link.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>goal</type>
@@ -225,15 +250,18 @@
<url />
<pageIdAction />
+
<pageId>7</pageId>
+ <bandwidth />
+ <timeSpent>108</timeSpent>
+ <timeSpentPretty>1 min 48s</timeSpentPretty>
<siteSearchKeyword>Banks Own The World</siteSearchKeyword>
<generationTimeMilliseconds>812</generationTimeMilliseconds>
<generationTime>0.81s</generationTime>
<interactionPosition>3</interactionPosition>
- <timeSpent>108</timeSpent>
- <timeSpentPretty>1 min 48s</timeSpentPretty>
<icon>plugins/Morpheus/images/search_ico.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>action</type>
@@ -241,12 +269,15 @@
<pageTitle>Looking at homepage after site search...</pageTitle>
<pageIdAction>11</pageIdAction>
+
<pageId>8</pageId>
+ <bandwidth />
<generationTimeMilliseconds>24</generationTimeMilliseconds>
<generationTime>0.02s</generationTime>
<interactionPosition>4</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -256,13 +287,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -298,6 +334,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -316,9 +358,13 @@
<customVariables>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -327,16 +373,5 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__VisitTime.getVisitInformationPerLocalTime_day.xml b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__VisitTime.getVisitInformationPerLocalTime_day.xml
index c89a8a6d25..dfc1858282 100644
--- a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__VisitTime.getVisitInformationPerLocalTime_day.xml
+++ b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__VisitTime.getVisitInformationPerLocalTime_day.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" ?>
<result>
<row>
- <label>0h</label>
+ <label>00</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -13,7 +13,7 @@
<segment>visitLocalHour==0</segment>
</row>
<row>
- <label>1h</label>
+ <label>01</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -25,7 +25,7 @@
<segment>visitLocalHour==1</segment>
</row>
<row>
- <label>2h</label>
+ <label>02</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -37,7 +37,7 @@
<segment>visitLocalHour==2</segment>
</row>
<row>
- <label>3h</label>
+ <label>03</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -49,7 +49,7 @@
<segment>visitLocalHour==3</segment>
</row>
<row>
- <label>4h</label>
+ <label>04</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -61,7 +61,7 @@
<segment>visitLocalHour==4</segment>
</row>
<row>
- <label>5h</label>
+ <label>05</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -73,7 +73,7 @@
<segment>visitLocalHour==5</segment>
</row>
<row>
- <label>6h</label>
+ <label>06</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -85,7 +85,7 @@
<segment>visitLocalHour==6</segment>
</row>
<row>
- <label>7h</label>
+ <label>07</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -97,7 +97,7 @@
<segment>visitLocalHour==7</segment>
</row>
<row>
- <label>8h</label>
+ <label>08</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -109,7 +109,7 @@
<segment>visitLocalHour==8</segment>
</row>
<row>
- <label>9h</label>
+ <label>09</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -121,7 +121,7 @@
<segment>visitLocalHour==9</segment>
</row>
<row>
- <label>10h</label>
+ <label>10</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -133,7 +133,7 @@
<segment>visitLocalHour==10</segment>
</row>
<row>
- <label>11h</label>
+ <label>11</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -145,7 +145,7 @@
<segment>visitLocalHour==11</segment>
</row>
<row>
- <label>12h</label>
+ <label>12</label>
<nb_uniq_visitors>1</nb_uniq_visitors>
<nb_visits>2</nb_visits>
<nb_actions>9</nb_actions>
@@ -157,7 +157,7 @@
<segment>visitLocalHour==12</segment>
</row>
<row>
- <label>13h</label>
+ <label>13</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -169,7 +169,7 @@
<segment>visitLocalHour==13</segment>
</row>
<row>
- <label>14h</label>
+ <label>14</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -181,7 +181,7 @@
<segment>visitLocalHour==14</segment>
</row>
<row>
- <label>15h</label>
+ <label>15</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -193,7 +193,7 @@
<segment>visitLocalHour==15</segment>
</row>
<row>
- <label>16h</label>
+ <label>16</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -205,7 +205,7 @@
<segment>visitLocalHour==16</segment>
</row>
<row>
- <label>17h</label>
+ <label>17</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -217,7 +217,7 @@
<segment>visitLocalHour==17</segment>
</row>
<row>
- <label>18h</label>
+ <label>18</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -229,7 +229,7 @@
<segment>visitLocalHour==18</segment>
</row>
<row>
- <label>19h</label>
+ <label>19</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -241,7 +241,7 @@
<segment>visitLocalHour==19</segment>
</row>
<row>
- <label>20h</label>
+ <label>20</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -253,7 +253,7 @@
<segment>visitLocalHour==20</segment>
</row>
<row>
- <label>21h</label>
+ <label>21</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -265,7 +265,7 @@
<segment>visitLocalHour==21</segment>
</row>
<row>
- <label>22h</label>
+ <label>22</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -277,7 +277,7 @@
<segment>visitLocalHour==22</segment>
</row>
<row>
- <label>23h</label>
+ <label>23</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
diff --git a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__VisitTime.getVisitInformationPerServerTime_day.xml b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__VisitTime.getVisitInformationPerServerTime_day.xml
index 944821160b..f6e2db96de 100644
--- a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__VisitTime.getVisitInformationPerServerTime_day.xml
+++ b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__VisitTime.getVisitInformationPerServerTime_day.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" ?>
<result>
<row>
- <label>0h</label>
+ <label>00</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -13,7 +13,7 @@
<segment>visitServerHour==0</segment>
</row>
<row>
- <label>1h</label>
+ <label>01</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -25,7 +25,7 @@
<segment>visitServerHour==1</segment>
</row>
<row>
- <label>2h</label>
+ <label>02</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -37,7 +37,7 @@
<segment>visitServerHour==2</segment>
</row>
<row>
- <label>3h</label>
+ <label>03</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -49,7 +49,7 @@
<segment>visitServerHour==3</segment>
</row>
<row>
- <label>4h</label>
+ <label>04</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -61,7 +61,7 @@
<segment>visitServerHour==4</segment>
</row>
<row>
- <label>5h</label>
+ <label>05</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -73,7 +73,7 @@
<segment>visitServerHour==5</segment>
</row>
<row>
- <label>6h</label>
+ <label>06</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -85,7 +85,7 @@
<segment>visitServerHour==6</segment>
</row>
<row>
- <label>7h</label>
+ <label>07</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -97,7 +97,7 @@
<segment>visitServerHour==7</segment>
</row>
<row>
- <label>8h</label>
+ <label>08</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -109,7 +109,7 @@
<segment>visitServerHour==8</segment>
</row>
<row>
- <label>9h</label>
+ <label>09</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -121,7 +121,7 @@
<segment>visitServerHour==9</segment>
</row>
<row>
- <label>10h</label>
+ <label>10</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -133,7 +133,7 @@
<segment>visitServerHour==10</segment>
</row>
<row>
- <label>11h</label>
+ <label>11</label>
<nb_uniq_visitors>1</nb_uniq_visitors>
<nb_visits>1</nb_visits>
<nb_actions>8</nb_actions>
@@ -153,7 +153,7 @@
<segment>visitServerHour==11</segment>
</row>
<row>
- <label>12h</label>
+ <label>12</label>
<nb_uniq_visitors>1</nb_uniq_visitors>
<nb_visits>1</nb_visits>
<nb_actions>1</nb_actions>
@@ -173,7 +173,7 @@
<segment>visitServerHour==12</segment>
</row>
<row>
- <label>13h</label>
+ <label>13</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -185,7 +185,7 @@
<segment>visitServerHour==13</segment>
</row>
<row>
- <label>14h</label>
+ <label>14</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -197,7 +197,7 @@
<segment>visitServerHour==14</segment>
</row>
<row>
- <label>15h</label>
+ <label>15</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -209,7 +209,7 @@
<segment>visitServerHour==15</segment>
</row>
<row>
- <label>16h</label>
+ <label>16</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -221,7 +221,7 @@
<segment>visitServerHour==16</segment>
</row>
<row>
- <label>17h</label>
+ <label>17</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -233,7 +233,7 @@
<segment>visitServerHour==17</segment>
</row>
<row>
- <label>18h</label>
+ <label>18</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -245,7 +245,7 @@
<segment>visitServerHour==18</segment>
</row>
<row>
- <label>19h</label>
+ <label>19</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -257,7 +257,7 @@
<segment>visitServerHour==19</segment>
</row>
<row>
- <label>20h</label>
+ <label>20</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -269,7 +269,7 @@
<segment>visitServerHour==20</segment>
</row>
<row>
- <label>21h</label>
+ <label>21</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -281,7 +281,7 @@
<segment>visitServerHour==21</segment>
</row>
<row>
- <label>22h</label>
+ <label>22</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -293,7 +293,7 @@
<segment>visitServerHour==22</segment>
</row>
<row>
- <label>23h</label>
+ <label>23</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
diff --git a/tests/PHPUnit/System/expected/test_OneVisitor_NoKeywordSpecified__Live.getLastVisitsDetails_day.xml b/tests/PHPUnit/System/expected/test_OneVisitor_NoKeywordSpecified__Live.getLastVisitsDetails_day.xml
index f4868122ea..034e8433d4 100644
--- a/tests/PHPUnit/System/expected/test_OneVisitor_NoKeywordSpecified__Live.getLastVisitsDetails_day.xml
+++ b/tests/PHPUnit/System/expected/test_OneVisitor_NoKeywordSpecified__Live.getLastVisitsDetails_day.xml
@@ -12,10 +12,13 @@
<pageTitle />
<pageIdAction>2</pageIdAction>
+
<pageId>2</pageId>
+ <bandwidth />
<interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -25,13 +28,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -46,7 +54,7 @@
<referrerName>Google</referrerName>
<referrerKeyword>&lt;&gt;&amp;\&quot;the pdo extension is required for this adapter but the extension is not loaded</referrerKeyword>
<referrerKeywordPosition>4</referrerKeywordPosition>
- <referrerUrl>http://www.google.com.vn/search?q=%3C%3E%26%5C%22the+pdo+extension+is+required+for+this+adapter+but+the+extension+is+not+loaded</referrerUrl>
+ <referrerUrl>http://www.google.com.vn/url?sa=t&amp;rct=j&amp;q=%3C%3E%26%5C%22the%20pdo%20extension%20is%20required%20for%20this%20adapter%20but%20the%20extension%20is%20not%20loaded&amp;source=web&amp;cd=4&amp;ved=0FjAD&amp;url=http%3A%2F%2Fforum.piwik.org%2Fread.php%3F2%2C1011&amp;ei=y-HHAQ&amp;usg=AFQjCN2-nt5_GgDeg&amp;cad=rja</referrerUrl>
<referrerSearchEngineUrl>http://google.com</referrerSearchEngineUrl>
<referrerSearchEngineIcon>plugins/Morpheus/icons/dist/searchEngines/google.com.png</referrerSearchEngineIcon>
<languageCode>fr</languageCode>
@@ -67,6 +75,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/UNK.png</browserIcon>
<browserCode>UNK</browserCode>
<browserVersion />
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -85,9 +99,13 @@
<customVariables>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -96,17 +114,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -120,12 +127,15 @@
<pageTitle>incredible title! (Page URL contains a HTML entity)</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>1</pageId>
- <interactionPosition>1</interactionPosition>
+ <bandwidth />
<timeSpent>1084</timeSpent>
<timeSpentPretty>18 min 4s</timeSpentPretty>
+ <interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>goal</type>
@@ -146,13 +156,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -167,7 +182,7 @@
<referrerName>Google</referrerName>
<referrerKeyword>Mot-clé indéfini</referrerKeyword>
<referrerKeywordPosition>1</referrerKeywordPosition>
- <referrerUrl>http://piwik.org/faq/general/#faq_144</referrerUrl>
+ <referrerUrl>http://www.google.com/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=1&amp;ved=0CC&amp;url=http%3A%2F%2Fpiwik.org%2F&amp;ei=&amp;usg=</referrerUrl>
<referrerSearchEngineUrl>http://google.com</referrerSearchEngineUrl>
<referrerSearchEngineIcon>plugins/Morpheus/icons/dist/searchEngines/google.com.png</referrerSearchEngineIcon>
<languageCode>fr</languageCode>
@@ -188,6 +203,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/UNK.png</browserIcon>
<browserCode>UNK</browserCode>
<browserVersion />
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -206,9 +227,13 @@
<customVariables>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -217,16 +242,5 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_OneVisitor_SeveralDays_ImportedInRandomOrderTest_shouldShowOneVisit_InEachOfThreeDays__Live.getLastVisitsDetails_month.xml b/tests/PHPUnit/System/expected/test_OneVisitor_SeveralDays_ImportedInRandomOrderTest_shouldShowOneVisit_InEachOfThreeDays__Live.getLastVisitsDetails_month.xml
index 342351f2fa..e3726996c0 100644
--- a/tests/PHPUnit/System/expected/test_OneVisitor_SeveralDays_ImportedInRandomOrderTest_shouldShowOneVisit_InEachOfThreeDays__Live.getLastVisitsDetails_month.xml
+++ b/tests/PHPUnit/System/expected/test_OneVisitor_SeveralDays_ImportedInRandomOrderTest_shouldShowOneVisit_InEachOfThreeDays__Live.getLastVisitsDetails_month.xml
@@ -10,17 +10,20 @@
<url>http://piwik.net/</url>
<pageTitle />
<pageIdAction>1</pageIdAction>
+
<serverTimePretty>Apr 7, 2013 10:00:00</serverTimePretty>
<pageId>1</pageId>
+ <bandwidth>9625</bandwidth>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+ <timestamp>1365328800</timestamp>
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
- <timestamp>1365328800</timestamp>
+ <bandwidth_pretty>9.4 K</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -30,13 +33,18 @@
<visitServerHour>10</visitServerHour>
<lastActionTimestamp>1365328800</lastActionTimestamp>
<lastActionDateTime>2013-04-07 10:00:00</lastActionDateTime>
+ <serverTimestamp>1365328800</serverTimestamp>
+ <firstActionTimestamp>1365328800</firstActionTimestamp>
+ <serverTimePretty>10:00:00</serverTimePretty>
+ <serverDatePretty>Sunday, April 7, 2013</serverDatePretty>
+ <serverDatePrettyFirstAction>Sunday, April 7, 2013</serverDatePrettyFirstAction>
+ <serverTimePrettyFirstAction>10:00:00</serverTimePrettyFirstAction>
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
- <firstActionTimestamp>1365328800</firstActionTimestamp>
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -72,6 +80,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/IE.png</browserIcon>
<browserCode>IE</browserCode>
<browserVersion>7.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Unknown</continent>
<continentCode>unk</continentCode>
@@ -92,17 +106,6 @@
<resolution>unknown</resolution>
<plugins />
<pluginsIcons />
- <serverTimestamp>1365328800</serverTimestamp>
- <serverTimePretty>10:00:00</serverTimePretty>
- <serverDatePretty>Sunday, April 7, 2013</serverDatePretty>
- <serverDatePrettyFirstAction>Sunday, April 7, 2013</serverDatePrettyFirstAction>
- <serverTimePrettyFirstAction>10:00:00</serverTimePrettyFirstAction>
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -114,17 +117,20 @@
<url>http://piwik.net/</url>
<pageTitle />
<pageIdAction>1</pageIdAction>
+
<serverTimePretty>Apr 6, 2013 11:00:00</serverTimePretty>
<pageId>2</pageId>
+ <bandwidth>9625</bandwidth>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+ <timestamp>1365246000</timestamp>
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
- <timestamp>1365246000</timestamp>
+ <bandwidth_pretty>9.4 K</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -134,13 +140,18 @@
<visitServerHour>11</visitServerHour>
<lastActionTimestamp>1365246000</lastActionTimestamp>
<lastActionDateTime>2013-04-06 11:00:00</lastActionDateTime>
+ <serverTimestamp>1365246000</serverTimestamp>
+ <firstActionTimestamp>1365246000</firstActionTimestamp>
+ <serverTimePretty>11:00:00</serverTimePretty>
+ <serverDatePretty>Saturday, April 6, 2013</serverDatePretty>
+ <serverDatePrettyFirstAction>Saturday, April 6, 2013</serverDatePrettyFirstAction>
+ <serverTimePrettyFirstAction>11:00:00</serverTimePrettyFirstAction>
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
- <firstActionTimestamp>1365246000</firstActionTimestamp>
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -176,6 +187,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/IE.png</browserIcon>
<browserCode>IE</browserCode>
<browserVersion>7.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Unknown</continent>
<continentCode>unk</continentCode>
@@ -196,17 +213,6 @@
<resolution>unknown</resolution>
<plugins />
<pluginsIcons />
- <serverTimestamp>1365246000</serverTimestamp>
- <serverTimePretty>11:00:00</serverTimePretty>
- <serverDatePretty>Saturday, April 6, 2013</serverDatePretty>
- <serverDatePrettyFirstAction>Saturday, April 6, 2013</serverDatePrettyFirstAction>
- <serverTimePrettyFirstAction>11:00:00</serverTimePrettyFirstAction>
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -218,17 +224,20 @@
<url>http://piwik.net/</url>
<pageTitle />
<pageIdAction>1</pageIdAction>
+
<serverTimePretty>Apr 5, 2013 12:00:00</serverTimePretty>
<pageId>3</pageId>
+ <bandwidth>9625</bandwidth>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+ <timestamp>1365163200</timestamp>
<customVariables>
<row>
<customVariablePageName1>HTTP-code</customVariablePageName1>
<customVariablePageValue1>200</customVariablePageValue1>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <icon />
- <timestamp>1365163200</timestamp>
+ <bandwidth_pretty>9.4 K</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -238,13 +247,18 @@
<visitServerHour>12</visitServerHour>
<lastActionTimestamp>1365163200</lastActionTimestamp>
<lastActionDateTime>2013-04-05 12:00:00</lastActionDateTime>
+ <serverTimestamp>1365163200</serverTimestamp>
+ <firstActionTimestamp>1365163200</firstActionTimestamp>
+ <serverTimePretty>12:00:00</serverTimePretty>
+ <serverDatePretty>Friday, April 5, 2013</serverDatePretty>
+ <serverDatePrettyFirstAction>Friday, April 5, 2013</serverDatePrettyFirstAction>
+ <serverTimePrettyFirstAction>12:00:00</serverTimePrettyFirstAction>
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
- <firstActionTimestamp>1365163200</firstActionTimestamp>
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -280,6 +294,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/IE.png</browserIcon>
<browserCode>IE</browserCode>
<browserVersion>7.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Unknown</continent>
<continentCode>unk</continentCode>
@@ -300,16 +320,5 @@
<resolution>unknown</resolution>
<plugins />
<pluginsIcons />
- <serverTimestamp>1365163200</serverTimestamp>
- <serverTimePretty>12:00:00</serverTimePretty>
- <serverDatePretty>Friday, April 5, 2013</serverDatePretty>
- <serverDatePrettyFirstAction>Friday, April 5, 2013</serverDatePrettyFirstAction>
- <serverTimePrettyFirstAction>12:00:00</serverTimePrettyFirstAction>
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_TimezonesTest__Live.getLastVisitsDetails_day.xml b/tests/PHPUnit/System/expected/test_TimezonesTest__Live.getLastVisitsDetails_day.xml
index c0ab94c8ba..229a294738 100644
--- a/tests/PHPUnit/System/expected/test_TimezonesTest__Live.getLastVisitsDetails_day.xml
+++ b/tests/PHPUnit/System/expected/test_TimezonesTest__Live.getLastVisitsDetails_day.xml
@@ -12,10 +12,13 @@
<pageTitle>incredible title!</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>1</pageId>
+ <bandwidth />
<interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -25,13 +28,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -67,6 +75,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -85,9 +99,13 @@
<customVariables>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -96,16 +114,5 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_csv__ScheduledReports.generateReport_month.original.csv b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_csv__ScheduledReports.generateReport_month.original.csv
index 41f56d803a..893a066066 100644
--- a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_csv__ScheduledReports.generateReport_month.original.csv
+++ b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_csv__ScheduledReports.generateReport_month.original.csv
@@ -173,57 +173,57 @@ nb_uniq_visitors_returning,nb_users_returning,nb_visits_returning,nb_actions_ret
Visits per local time
label,nb_visits,nb_actions,conversion_rate,nb_actions_per_visit,avg_time_on_site,bounce_rate
-0h,0,0,0%,0,00:00:00,0%
-1h,0,0,0%,0,00:00:00,0%
-2h,0,0,0%,0,00:00:00,0%
-3h,0,0,0%,0,00:00:00,0%
-4h,0,0,0%,0,00:00:00,0%
-5h,0,0,0%,0,00:00:00,0%
-6h,0,0,0%,0,00:00:00,0%
-7h,0,0,0%,0,00:00:00,0%
-8h,0,0,0%,0,00:00:00,0%
-9h,0,0,0%,0,00:00:00,0%
-10h,0,0,0%,0,00:00:00,0%
-11h,0,0,0%,0,00:00:00,0%
-12h,11,43,0%,3.9,00:10:55,27%
-13h,0,0,0%,0,00:00:00,0%
-14h,0,0,0%,0,00:00:00,0%
-15h,0,0,0%,0,00:00:00,0%
-16h,0,0,0%,0,00:00:00,0%
-17h,0,0,0%,0,00:00:00,0%
-18h,0,0,0%,0,00:00:00,0%
-19h,0,0,0%,0,00:00:00,0%
-20h,0,0,0%,0,00:00:00,0%
-21h,0,0,0%,0,00:00:00,0%
-22h,0,0,0%,0,00:00:00,0%
-23h,0,0,0%,0,00:00:00,0%
+00,0,0,0%,0,00:00:00,0%
+01,0,0,0%,0,00:00:00,0%
+02,0,0,0%,0,00:00:00,0%
+03,0,0,0%,0,00:00:00,0%
+04,0,0,0%,0,00:00:00,0%
+05,0,0,0%,0,00:00:00,0%
+06,0,0,0%,0,00:00:00,0%
+07,0,0,0%,0,00:00:00,0%
+08,0,0,0%,0,00:00:00,0%
+09,0,0,0%,0,00:00:00,0%
+10,0,0,0%,0,00:00:00,0%
+11,0,0,0%,0,00:00:00,0%
+12,11,43,0%,3.9,00:10:55,27%
+13,0,0,0%,0,00:00:00,0%
+14,0,0,0%,0,00:00:00,0%
+15,0,0,0%,0,00:00:00,0%
+16,0,0,0%,0,00:00:00,0%
+17,0,0,0%,0,00:00:00,0%
+18,0,0,0%,0,00:00:00,0%
+19,0,0,0%,0,00:00:00,0%
+20,0,0,0%,0,00:00:00,0%
+21,0,0,0%,0,00:00:00,0%
+22,0,0,0%,0,00:00:00,0%
+23,0,0,0%,0,00:00:00,0%
Visits per server time
label,nb_visits,nb_actions,nb_actions_per_visit,avg_time_on_site,bounce_rate,revenue
-0h,1,1,1,00:00:00,100%,$ 0
-1h,0,0,0,00:00:00,0%,$ 0
-2h,0,0,0,00:00:00,0%,$ 0
-3h,0,0,0,00:00:00,0%,$ 0
-4h,0,0,0,00:00:00,0%,$ 0
-5h,0,0,0,00:00:00,0%,$ 0
-6h,0,0,0,00:00:00,0%,$ 0
-7h,0,0,0,00:00:00,0%,$ 0
-8h,0,0,0,00:00:00,0%,$ 0
-9h,0,0,0,00:00:00,0%,$ 0
-10h,0,0,0,00:00:00,0%,$ 0
-11h,8,40,5,00:15:01,0%,$ 0
-12h,1,1,1,00:00:00,100%,$ 0
-13h,0,0,0,00:00:00,0%,$ 0
-14h,0,0,0,00:00:00,0%,$ 0
-15h,0,0,0,00:00:00,0%,$ 0
-16h,0,0,0,00:00:00,0%,$ 0
-17h,0,0,0,00:00:00,0%,$ 0
-18h,0,0,0,00:00:00,0%,$ 0
-19h,0,0,0,00:00:00,0%,$ 0
-20h,0,0,0,00:00:00,0%,$ 0
-21h,0,0,0,00:00:00,0%,$ 0
-22h,0,0,0,00:00:00,0%,$ 0
-23h,1,1,1,00:00:00,100%,$ 0
+00,1,1,1,00:00:00,100%,$ 0
+01,0,0,0,00:00:00,0%,$ 0
+02,0,0,0,00:00:00,0%,$ 0
+03,0,0,0,00:00:00,0%,$ 0
+04,0,0,0,00:00:00,0%,$ 0
+05,0,0,0,00:00:00,0%,$ 0
+06,0,0,0,00:00:00,0%,$ 0
+07,0,0,0,00:00:00,0%,$ 0
+08,0,0,0,00:00:00,0%,$ 0
+09,0,0,0,00:00:00,0%,$ 0
+10,0,0,0,00:00:00,0%,$ 0
+11,8,40,5,00:15:01,0%,$ 0
+12,1,1,1,00:00:00,100%,$ 0
+13,0,0,0,00:00:00,0%,$ 0
+14,0,0,0,00:00:00,0%,$ 0
+15,0,0,0,00:00:00,0%,$ 0
+16,0,0,0,00:00:00,0%,$ 0
+17,0,0,0,00:00:00,0%,$ 0
+18,0,0,0,00:00:00,0%,$ 0
+19,0,0,0,00:00:00,0%,$ 0
+20,0,0,0,00:00:00,0%,$ 0
+21,0,0,0,00:00:00,0%,$ 0
+22,0,0,0,00:00:00,0%,$ 0
+23,1,1,1,00:00:00,100%,$ 0
Visits by Day of Week
label,nb_visits,nb_actions,conversion_rate,nb_actions_per_visit,avg_time_on_site,bounce_rate
diff --git a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_html_tables_and_graph__ScheduledReports.generateReport_month.original.html b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_html_tables_and_graph__ScheduledReports.generateReport_month.original.html
index c08c9b38e3..d344df1d0e 100644
--- a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_html_tables_and_graph__ScheduledReports.generateReport_month.original.html
+++ b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_html_tables_and_graph__ScheduledReports.generateReport_month.original.html
@@ -982,7 +982,7 @@
</h2>
<img alt=""
- src="data:image/png;base64,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"
+ src="data:image/png;base64,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"
height="200"
width="700"
margin="0 auto"/>
@@ -1102,7 +1102,7 @@
</h2>
<img alt=""
- src="data:image/png;base64,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"
+ src="data:image/png;base64,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"
height="200"
width="700"
margin="0 auto"/>
@@ -2867,7 +2867,7 @@
</h2>
<img alt=""
- src="data:image/png;base64,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Mh88tvt333n4B/85/vQzyY7U7xwpP/bxt0699OoXvvGDVJm9G0rf/JP3Zln2sc89vZDsbST7+uPv7llomdfsnIbnnnuu9mnPP//8PffcE5nlCy+8cODAgb6+vrYWuLHx8fHh4eHBwcGEmS+99NL8/PyuXbsSZr766quXLl3av39/wszXX3+9Wq0eOXIkYWaWZadPn963b9/GjRsTZp4/f35wcHDr1q0JMy9evDg3N7d79+6EmbOzs9PT03fddVfCzPn5+VOnTh09ejRhZpZlL7744u7duzdv3pwwc3JyctOmTdu2bUuY+fLLL9+4cWPPnj0JM69fvz41NXXw4MGEmVmWnTx58siRI6VSyl2wZ86c2bVrV7lcTpg5NTXV19e3Y8eOhJlXr16dmZnZu3dvwsybN2+Oj48fOnQoYWaWZadOnapUKr29yf7pzbLs3Llz27dvHxgYSJg5PT1dKpV27tyZMHNmZubKlSv79u1LmDk3N3f27NnDhw9HntzmL/2hhx5qcbPV/Hp777777rTvRkNDQzt27BgZGUmYOTExMT8/n3bFXL169cKFC2nf4Ofm5vr7+x944IGEmVmW9ff3Hzp0KO270fDw8PDw8Pbt2xNmTk1Nvfbaa2l72MzMzPnz59O+wd+6datUKp04cSJhZpZlmzZtOnDgwJYtWxJmbtu2rVwup63L09PTs7OzaXvYtWvXRkZGjh07ljBz0fHjxzds2JAwsFwu7927N+1/NefOnevv709bly9dunTlypXay+Xyu379+uDg4H333ZcwM8uyUql07733pv3nc2BgYHR0NO1/NePj46VSaWxsLGHm5cuXL168GHyDD7p58+bmzZvvvz+079A5DQBAyAp7GqrVqs9pAACyyOEJRQEAyByeAACCVrh6AgBgUaf3NKQ9Nbe4zIJiZa6J2LWSWWi49bVuMwuKXSuZBcW+aTJTXufaevYJz41YjE17skURi1roOaSpvgdk+SaS/OUX8ftMmNzlq3751p4/vOEIyj+sOrOoBb38pYeSZCbZVluspvYCG8YWtKjdvOrrEnLGNps8z4Dq2HK2k7lQmIMHDy6/WXdn27G1OakyW8yiSzJr05ai0i5nksyGCalee11gF66mhJkrbu1thDecJP+w6syiFvTylx5qb1gFf3upVlPbmc1i7+gJkUm6edW3TrjT2GYrKM+A6thytpdZ7J6GZvKU5WaTFJGZJ7aIzKXJ6y6FzZ/ZbEbtZbb4dy3Vci7/rNIksXWzWPXMO5p1MLzho/nX1/In5B8CnclcmrztYdWZ1ZRkWLV+QnvDqmNbaSczg7HNHsqzpu5ohHY+cxVKQ+12mXAfe/LMgmJzZjacJH/m0s8Nc7oks8W8um01dSyz0PD1s74Mq4bz6rbV1LHMgmLfHJmrUBrS/q1Mnln7O8ofu7yv5clstk3kyaybdmkWOV973f8rSTKXBy6f152qNvn4si7fSjsTbli1nWlYdfmwWvH9tY3YjmXmHE0r7k9qnbk6hye6U57zVpopogPW/lzo+9B6sHz85P+VVpft5V7PDKt1qJuHVREbZMcyc86o4eR3OpqUhl9ZE38pko/DtWhNvPCGRX4dWosrq/sXuAhr4oXnH1ZFvMyOZeacUarl9ImQWVbYWk8bWJC1spxr1Jr4W1wQw4qCtLdpaQzL72wjqsA9Dc0Oa+W0lJl2j1Ddry/5zrSufecoYjmLe+3Jh2jRW2nOwOVbe/4FbjiC8g+r1rHtLW3HXn5OnVnOJNtqs9WU8w0p+aK23pxy7p+vXbCEi1qbkHMza53Z3qKmeu0+RhoACHF4AgAIURoAgJBfAtdu82d7VDsiAAAAAElFTkSuQmCC"
+ src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAArwAAADICAIAAACF9KXqAAALtUlEQVR4nO3dfWzcd30H8K8vtpO4dmrnQXlwQtKcQ5qmVdulnbROIB7Eg0B0Q2hCbBL7A3X7A6ZtUqdJZeNBaEhFAm2TBggJihDiDwR/VKoA8fRHK8SgaAiYaLPmmmSO7Xh1Hlw7Thw39v6w5F7s8/nTu+/Puatfr798v7t73+/8u59/b9/v+73rWFhYSAAAaynd6hUAANqD0gAAhCgNAECI0gAAhCgNAECI0gAAhNzi0lAul1dbWPOqOvcCAArVuu80VCqVNa/SHgBg3dzi0lCpVJYd+Mvlcp26AADcKp3r8Bif/eqvli157CMPrHmvpfZQ3SqWliy1jaVrl/UPzQMA8lqP0vDC8Mtzc3NLF7u6ukZGRgYHByP3XfbGQ/XFxZZQfapitVsCAM1bp9MTM1VSSqOjo0tXVb9DsOaRPt4DNAYAyKt1B0IuWqwUkQGP8VsCAA1Yj9MTTaoe2RB5HyJySwDgtVqn0tDT01Pn2qUzFGtOs4yMVIjfEgCIW4/S8P63lUdHRhq7b/zYryUAQKHWozQ8/OaDKR1s7L71J1JWX2vKJQAUqmNhYeFWrwMA0AZaffYEANAilAYAIERpAABClAYAIERpAABCbppyWXPKonmMAECqLg01vyXSV0cCAItePT2hDQAAdRjTAACE1P4Y6TVPQ4zc/F0S4+Pje/bsybleAECLWV4afK80AFDT8tkTwbowODhY5yIA8Prz6pgGMyMAgDpe/ZbL6s9jWLTYIXxOAwCQfDU2ABBkyiUAEKI0AAAhSgMAEKI0AAAhSgMAEKI0AAAhSgMAEKI0AAAhSgMAEKI0AAAhSgMAEKI0AAAhSgMAEKI0AAAhSgMAEKI0AAAhSgMAEKI0AAAhSgMAEKI0AAAhSgMAEKI0AAAhSgMAEKI0AAAhSgMAEKI0AAAhSgMAEKI0AAAhSgMAEKI0AAAhSgMAEKI0AAAhSgMAEKI0AAAhSgMAEKI0AAAhSgMAEKI0AAAhSgMAEKI0AAAhSgMAEKI0AAAhSgMAEKI0AAAhSgMAEKI0AAAhSgMAEKI0AAAhSgMAEKI0AAAhSgMAEKI0AAAhSgMAEKI0AAAhSgMAEKI0AAAhSgMAEKI0AAAhSgMAEKI0AAAhSgMAEKI0AAAhSgMAENJ5q1cAaGN/9ekfZEz7yiffnTENyE5pABp08szFictXMwa+PD27rXdzxkAgL6cnAICQ5e80lMvllFKlUlm2ZFH1cgBgQ7mpNJTL5UqlUt0SFpesdhEA2DhuOj2hEAAAqzGmAQAIaXD2xOTkZPXF6enpbdu25VgfoG3MzMzkDZyenu5YuJ43E8iowdIwOjpaffH06dPVIyGAjWBiInNpOH/+/NRW88ChdTW4fx47dqzORWBD2HwxpTMZ84aGhnxOA7QyYxoAgJDlUy6rf6hUKstmYJpeAQAb1k2loWYnUBQAgOT0BAAQpDQAACFKAwAQojQAACFKAwAQojQAACFKAwAQojQAACFKAwAQojQAACFKAwAQojQAACFKAwAQojQAACFKAwAQojQAACFKAwAQojQAACFKAwAQojQAACFKAwAQojQAACFKAwAQojQAACFKAwAQojQAACFKAwAQojQAACFKAwAQojQAACFKAwAQojQAACFKAwAQojQAACFKAwAQojQAACFKAwAQojQAACFKAwAQojQAACFKAwAQojQAACFKAwAQojQAACFKAwAQojQAACFKAwAQojQAACFKAwAQojQAACFKAwAQojQAACFKAwAQojQAACFKAwAQojQAACFKAwAQojQAACFKAwAQojQAACFKAwAQojQAACFKAwAQojQAACFKAwAQojQAACGda96iXC4v/VypVIpcGQCgda1RGsrlcnVRWHYRANg4nJ4AAEKUBgAgZO0xDUGf/vLPpq7M5kr78/cc/4Nju7/1vd///sWJXJn3HNn1wXcd++V/j33nh8/nyuzv2/LYI3906eVrf/f4T3JllkodT3zmPSmlRz71/RvzC7liH//7t+wa6PncE7+4cPlqrsw/eeuRh+4b/O6PT/76ufFcmW88tP3D77v7t//zf088+btcmb093Z/56Jtmrs195BPfy5XZ0dHxrccfTil97LM/mntlPlfsP//1Q/t39/3bN391/sKVXJnvfOiOtz74hqeePvXz34zmyjy07/ZHPnBvrrRqN27M/9mjT+ZK6+hI3/3C+1NKj37+p7PXb+SK/du/eGDoDQNf+vavh8+/nCvzzScOvPuPD//4P8/85Jdnc2Xu29X7Nx86cWZ08nNf+0WuzO6uTf/6j29PKX3wH7JtppTSN/7lvZu7Oz/+709fuTaXK/ORD9x7vLzz60/+7tT/XsqV+cDxvX/6tiPP/NfwU09nO1O/a6Dn0b/8w7GXpj/xxWdyZXZuKn3pn96VUvrwx59ayHYYSf/x2Ds6FurmrTam4dlnn62+2fPPP3/XXXdFHvKFF144dOhQV1dXQytc2/DwcH9/f19fX8bMl156aX5+fvfu3Rkzp6enL1y4cPDgwYyZr7zySqVSOXr0aMbMlNKpU6cOHDiwefPmjJnnzp3r6+u7/fbbM2ZOTEzMzc3t3bs3Y+bMzMz4+Pgdd9yRMXN+fv7kyZPHjh3LmJlSevHFF/fu3bt169aMmaOjo1u2bNm+fXvGzIsXL167dm3fvn0ZM69evTo2Nnb48OGMmSml55577ujRo6VSzrdgT58+vXv37p6enoyZY2NjXV1dO3fuzJg5OTk5NTW1f//+jJmzs7PDw8NDQ0MZM1NKJ0+eLJfLnZ3Z/ulNKZ09e3bHjh29vb0ZM8fHx0ul0q5duzJmTk1NXb58+cCBAxkz5+bmzpw5c+TIkciNG/ylP/jgg3Uu1nu8zs4777wz79Fo27ZtO3fuHBgYyJg5MjIyPz+fd8NMTk6eP38+7wF+bm6uu7v7/vvvz5iZUuru7h4aGsp7NOrv7+/v79+xY0fGzLGxsevXr+ftYVNTU+fOnct7gL9x40apVDpx4kTGzJTSli1bDh06dNttt2XM3L59e09PT966PD4+PjMzk7eHXblyZWBg4Pjx4xkzF913332bNm3KGNjT07N///68/9WcPXu2u7s7b12+cOHC5cuXq6fLNe/q1at9fX333HNPxsyUUqlUuvvuu/P+89nb27tnz568/9UMDw+XSqXBwcGMmZcuXZqYmAge4INmZ2e3bt16772h9w6NaQAAQtZ4p6FSqficBgAgRU5PKAoAQHJ6AgAIWmP2BADAopxTVlaqOR6iyUESq919cXnDJ1PWbVULevpL12bJXDmC+rXG1t9MDQSuFlvQqrbgpk+1XuRFZK62sNXWM8twqzrPtOFPzV+W2fxLdGXmsuRWXs+CNlML7qEb5di0UJjDhw+vvFhzYZOZq4U3GVvEqhb09JcuNvAbiKxnlsziYtdc+FozW3DT18wpInO1ha22ns1n1oytvipXZpMv+5qZzceuuZVbeTO14B66cY5Nr5MxDUWM1myXzEWt/11i67CGrf9LaMa6vSCbfKCVd29+zYvIrBPSzAtpfTZT8y/1+ndvLL+gvS977Hr+bS9iM93azGJPT7A+ijhYFjHV1vRdWp+9CepQGkLy/h1p8kzkyrSim3iuhyj0a9YzBvp4kuK08q6U7E2501p/VyqoIxbxTGvGNvlYK78pYvGHOplKwxqaHMNSU/XAk1y9ofrnFtwz28tqX7nSjGV/PTegttiVkr0pqyJ2pZRpbyriBVlE5mqx2Ucrp9gOpTTU0xZ/Mgr9971dtMUTX23s90bQFhso2Zva51k3uTd5g6Hhu79OBkIWoehTm62sXdazTbXL3+VcNvKulNpqVdtRA68ujaFmZvDuxX640y2ZYJorto0+AKD62laespxrsv7K2CZ3oZqZKxfmymz+uadar9Im17NmZgOxK++ed1dKmZ77arHV1xbxK23xzFy7Uip4MzWzN632gmxmVSOZuWKb3KGafPo+ERIACHF6AgAIURoAgJD/B/J2C+MFWR0XAAAAAElFTkSuQmCC"
height="200"
width="700"
margin="0 auto"/>
@@ -2903,7 +2903,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 0h </td>
+ 00 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -2926,7 +2926,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 1h </td>
+ 01 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -2949,7 +2949,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 2h </td>
+ 02 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -2972,7 +2972,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 3h </td>
+ 03 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -2995,7 +2995,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 4h </td>
+ 04 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3018,7 +3018,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 5h </td>
+ 05 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3041,7 +3041,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 6h </td>
+ 06 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3064,7 +3064,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 7h </td>
+ 07 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3087,7 +3087,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 8h </td>
+ 08 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3110,7 +3110,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 9h </td>
+ 09 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3133,7 +3133,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 10h </td>
+ 10 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3156,7 +3156,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 11h </td>
+ 11 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3179,7 +3179,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 12h </td>
+ 12 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
11
</td>
@@ -3202,7 +3202,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 13h </td>
+ 13 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3225,7 +3225,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 14h </td>
+ 14 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3248,7 +3248,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 15h </td>
+ 15 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3271,7 +3271,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 16h </td>
+ 16 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3294,7 +3294,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 17h </td>
+ 17 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3317,7 +3317,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 18h </td>
+ 18 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3340,7 +3340,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 19h </td>
+ 19 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3363,7 +3363,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 20h </td>
+ 20 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3386,7 +3386,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 21h </td>
+ 21 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3409,7 +3409,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 22h </td>
+ 22 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3432,7 +3432,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 23h </td>
+ 23 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3464,7 +3464,7 @@
</h2>
<img alt=""
- src="data:image/png;base64,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"
+ src="data:image/png;base64,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"
height="200"
width="700"
margin="0 auto"/>
@@ -3500,7 +3500,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 0h </td>
+ 00 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
1
</td>
@@ -3523,7 +3523,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 1h </td>
+ 01 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3546,7 +3546,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 2h </td>
+ 02 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3569,7 +3569,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 3h </td>
+ 03 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3592,7 +3592,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 4h </td>
+ 04 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3615,7 +3615,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 5h </td>
+ 05 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3638,7 +3638,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 6h </td>
+ 06 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3661,7 +3661,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 7h </td>
+ 07 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3684,7 +3684,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 8h </td>
+ 08 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3707,7 +3707,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 9h </td>
+ 09 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3730,7 +3730,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 10h </td>
+ 10 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3753,7 +3753,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 11h </td>
+ 11 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
8
</td>
@@ -3776,7 +3776,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 12h </td>
+ 12 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
1
</td>
@@ -3799,7 +3799,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 13h </td>
+ 13 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3822,7 +3822,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 14h </td>
+ 14 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3845,7 +3845,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 15h </td>
+ 15 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3868,7 +3868,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 16h </td>
+ 16 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3891,7 +3891,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 17h </td>
+ 17 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3914,7 +3914,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 18h </td>
+ 18 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3937,7 +3937,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 19h </td>
+ 19 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3960,7 +3960,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 20h </td>
+ 20 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3983,7 +3983,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 21h </td>
+ 21 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -4006,7 +4006,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 22h </td>
+ 22 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -4029,7 +4029,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 23h </td>
+ 23 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
1
</td>
diff --git a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_html_tables_only__ScheduledReports.generateReport_month.original.html b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_html_tables_only__ScheduledReports.generateReport_month.original.html
index 4129e19606..4ccc27edec 100644
--- a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_html_tables_only__ScheduledReports.generateReport_month.original.html
+++ b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_html_tables_only__ScheduledReports.generateReport_month.original.html
@@ -2728,7 +2728,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 0h </td>
+ 00 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -2751,7 +2751,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 1h </td>
+ 01 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -2774,7 +2774,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 2h </td>
+ 02 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -2797,7 +2797,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 3h </td>
+ 03 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -2820,7 +2820,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 4h </td>
+ 04 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -2843,7 +2843,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 5h </td>
+ 05 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -2866,7 +2866,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 6h </td>
+ 06 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -2889,7 +2889,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 7h </td>
+ 07 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -2912,7 +2912,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 8h </td>
+ 08 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -2935,7 +2935,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 9h </td>
+ 09 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -2958,7 +2958,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 10h </td>
+ 10 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -2981,7 +2981,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 11h </td>
+ 11 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3004,7 +3004,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 12h </td>
+ 12 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
11
</td>
@@ -3027,7 +3027,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 13h </td>
+ 13 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3050,7 +3050,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 14h </td>
+ 14 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3073,7 +3073,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 15h </td>
+ 15 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3096,7 +3096,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 16h </td>
+ 16 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3119,7 +3119,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 17h </td>
+ 17 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3142,7 +3142,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 18h </td>
+ 18 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3165,7 +3165,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 19h </td>
+ 19 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3188,7 +3188,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 20h </td>
+ 20 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3211,7 +3211,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 21h </td>
+ 21 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3234,7 +3234,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 22h </td>
+ 22 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3257,7 +3257,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 23h </td>
+ 23 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3318,7 +3318,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 0h </td>
+ 00 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
1
</td>
@@ -3341,7 +3341,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 1h </td>
+ 01 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3364,7 +3364,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 2h </td>
+ 02 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3387,7 +3387,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 3h </td>
+ 03 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3410,7 +3410,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 4h </td>
+ 04 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3433,7 +3433,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 5h </td>
+ 05 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3456,7 +3456,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 6h </td>
+ 06 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3479,7 +3479,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 7h </td>
+ 07 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3502,7 +3502,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 8h </td>
+ 08 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3525,7 +3525,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 9h </td>
+ 09 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3548,7 +3548,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 10h </td>
+ 10 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3571,7 +3571,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 11h </td>
+ 11 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
8
</td>
@@ -3594,7 +3594,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 12h </td>
+ 12 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
1
</td>
@@ -3617,7 +3617,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 13h </td>
+ 13 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3640,7 +3640,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 14h </td>
+ 14 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3663,7 +3663,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 15h </td>
+ 15 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3686,7 +3686,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 16h </td>
+ 16 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3709,7 +3709,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 17h </td>
+ 17 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3732,7 +3732,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 18h </td>
+ 18 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3755,7 +3755,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 19h </td>
+ 19 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3778,7 +3778,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 20h </td>
+ 20 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3801,7 +3801,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 21h </td>
+ 21 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3824,7 +3824,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 22h </td>
+ 22 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3847,7 +3847,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 23h </td>
+ 23 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
1
</td>
diff --git a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_pdf_tables_only__ScheduledReports.generateReport_month.original.pdf b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_pdf_tables_only__ScheduledReports.generateReport_month.original.pdf
index f1a9297d72..af138fed8e 100644
--- a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_pdf_tables_only__ScheduledReports.generateReport_month.original.pdf
+++ b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_pdf_tables_only__ScheduledReports.generateReport_month.original.pdf
Binary files differ
diff --git a/tests/PHPUnit/System/expected/test_UserId_VisitorId__Live.getLastVisitsDetails_month.xml b/tests/PHPUnit/System/expected/test_UserId_VisitorId__Live.getLastVisitsDetails_month.xml
index 9fa6be9dba..7b18efc17e 100644
--- a/tests/PHPUnit/System/expected/test_UserId_VisitorId__Live.getLastVisitsDetails_month.xml
+++ b/tests/PHPUnit/System/expected/test_UserId_VisitorId__Live.getLastVisitsDetails_month.xml
@@ -9,11 +9,14 @@
<url>http://example.org/index.htm</url>
<pageTitle>incredible title!</pageTitle>
<pageIdAction>2</pageIdAction>
+
<serverTimePretty>Mar 6, 2010 11:22:33</serverTimePretty>
<pageId>1</pageId>
+ <bandwidth />
<interactionPosition>1</interactionPosition>
<icon />
<timestamp>1267874553</timestamp>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<lastActionDateTime>2010-03-06 11:22:33</lastActionDateTime>
@@ -29,24 +32,30 @@
<url>http://example.org/index2.htm</url>
<pageTitle>incredible title!</pageTitle>
<pageIdAction>3</pageIdAction>
+
<serverTimePretty>Mar 6, 2010 11:25:33</serverTimePretty>
<pageId>2</pageId>
- <interactionPosition>1</interactionPosition>
+ <bandwidth />
<timeSpent>180</timeSpent>
<timeSpentPretty>3 min 0s</timeSpentPretty>
+ <interactionPosition>1</interactionPosition>
<icon />
<timestamp>1267874733</timestamp>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>action</type>
<url>http://example.org/index3.htm</url>
<pageTitle>incredible title!</pageTitle>
<pageIdAction>4</pageIdAction>
+
<serverTimePretty>Mar 6, 2010 11:28:33</serverTimePretty>
<pageId>3</pageId>
+ <bandwidth />
<interactionPosition>2</interactionPosition>
<icon />
<timestamp>1267874913</timestamp>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<lastActionDateTime>2010-03-06 11:28:33</lastActionDateTime>
@@ -62,37 +71,46 @@
<url>http://example.org/no-user-id-set-but-should-appear-in-user-id-visit</url>
<pageTitle>no User Id set but it should appear in email@example.com!</pageTitle>
<pageIdAction>6</pageIdAction>
+
<serverTimePretty>Mar 6, 2010 13:16:33</serverTimePretty>
<pageId>4</pageId>
- <interactionPosition>1</interactionPosition>
+ <bandwidth />
<timeSpent>360</timeSpent>
<timeSpentPretty>6 min 0s</timeSpentPretty>
+ <interactionPosition>1</interactionPosition>
<icon />
<timestamp>1267881393</timestamp>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>action</type>
<url>http://example.org/index.htm</url>
<pageTitle>incredible title!</pageTitle>
<pageIdAction>2</pageIdAction>
+
<serverTimePretty>Mar 6, 2010 13:22:33</serverTimePretty>
<pageId>5</pageId>
- <interactionPosition>2</interactionPosition>
+ <bandwidth />
<timeSpent>360</timeSpent>
<timeSpentPretty>6 min 0s</timeSpentPretty>
+ <interactionPosition>2</interactionPosition>
<icon />
<timestamp>1267881753</timestamp>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>action</type>
<url>http://example.org/index.htm</url>
<pageTitle>second page</pageTitle>
<pageIdAction>2</pageIdAction>
+
<serverTimePretty>Mar 6, 2010 13:28:33</serverTimePretty>
<pageId>6</pageId>
+ <bandwidth />
<interactionPosition>3</interactionPosition>
<icon />
<timestamp>1267882113</timestamp>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<lastActionDateTime>2010-03-06 13:28:33</lastActionDateTime>
@@ -108,11 +126,14 @@
<url>http://example.org/index.htm</url>
<pageTitle>a new user id was set -&gt; new visit</pageTitle>
<pageIdAction>2</pageIdAction>
+
<serverTimePretty>Mar 6, 2010 13:34:33</serverTimePretty>
<pageId>7</pageId>
+ <bandwidth />
<interactionPosition>1</interactionPosition>
<icon />
<timestamp>1267882473</timestamp>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<lastActionDateTime>2010-03-06 13:34:33</lastActionDateTime>
@@ -128,11 +149,14 @@
<url>http://example.org/home</url>
<pageTitle>pageview - should not be tracked by our user id but in a new visit</pageTitle>
<pageIdAction>10</pageIdAction>
+
<serverTimePretty>Mar 6, 2010 16:28:33</serverTimePretty>
<pageId>10</pageId>
+ <bandwidth />
<interactionPosition>1</interactionPosition>
<icon />
<timestamp>1267892913</timestamp>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<lastActionDateTime>2010-03-06 16:28:33</lastActionDateTime>
@@ -148,26 +172,32 @@
<url>http://example.org/home</url>
<pageTitle>same user id was set -&gt; this is the same unique user</pageTitle>
<pageIdAction>10</pageIdAction>
+
<serverTimePretty>Mar 6, 2010 16:22:33</serverTimePretty>
<pageId>8</pageId>
- <interactionPosition>1</interactionPosition>
+ <bandwidth />
<timeSpent>360</timeSpent>
<timeSpentPretty>6 min 0s</timeSpentPretty>
+ <interactionPosition>1</interactionPosition>
<icon />
<timestamp>1267892553</timestamp>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>action</type>
<url>http://example.org/home</url>
<pageTitle>second pageview - by this user id</pageTitle>
<pageIdAction>10</pageIdAction>
+
<serverTimePretty>Mar 6, 2010 16:28:33</serverTimePretty>
<pageId>9</pageId>
- <interactionPosition>2</interactionPosition>
+ <bandwidth />
<timeSpent>721</timeSpent>
<timeSpentPretty>12 min 1s</timeSpentPretty>
+ <interactionPosition>2</interactionPosition>
<icon />
<timestamp>1267892913</timestamp>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>goal</type>
@@ -211,11 +241,14 @@
<url>http://example.org/index.htm</url>
<pageTitle>Page view by email@example.com</pageTitle>
<pageIdAction>2</pageIdAction>
+
<serverTimePretty>Mar 14, 2010 11:22:33</serverTimePretty>
<pageId>11</pageId>
+ <bandwidth />
<interactionPosition>1</interactionPosition>
<icon />
<timestamp>1268565753</timestamp>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<lastActionDateTime>2010-03-14 11:22:33</lastActionDateTime>
@@ -231,11 +264,14 @@
<url>http://example.org/index.htm</url>
<pageTitle>A page view by new-user-id@one-weeklater</pageTitle>
<pageIdAction>2</pageIdAction>
+
<serverTimePretty>Mar 14, 2010 11:46:33</serverTimePretty>
<pageId>12</pageId>
+ <bandwidth />
<interactionPosition>1</interactionPosition>
<icon />
<timestamp>1268567193</timestamp>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<lastActionDateTime>2010-03-14 11:46:33</lastActionDateTime>
diff --git a/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getSegmentsMetadata.xml b/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getSegmentsMetadata.xml
index 1a24058c6f..d21056ddbf 100644
--- a/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getSegmentsMetadata.xml
+++ b/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getSegmentsMetadata.xml
@@ -148,7 +148,7 @@
<category>Visit</category>
<name>Device brand</name>
<segment>deviceBrand</segment>
- <acceptedValues>3Q, Acer, Ainol, Airness, Alcatel, Allview, Altech UEC, Arnova, Amazon, Amoi, Apple, Archos, ARRIS, Airties, Asus, Avvio, Audiovox, Axxion, BBK, Becker, Bird, Beetel, Bmobile, Barnes &amp; Noble, BangOlufsen, BenQ, BenQ-Siemens, Blu, Boway, bq, Bravis, Brondi, Bush, CUBOT, Carrefour, Captiva, Casio, Cat, Celkon, ConCorde, Changhong, Cherry Mobile, Cricket, Crosscall, Compal, CnM, Crius Mea, CreNova, Capitel, Compaq, Coolpad, Cowon, Cube, Coby Kyros, Danew, Datang, Denver, Desay, Dbtel, DoCoMo, Dicam, Dell, DNS, DMM, Doogee, Doov, Dopod, Dune HD, E-Boda, EBEST, Ericsson, ECS, Ezio, Elephone, Easypix, Energy Sistem, Ericy, Eton, eTouch, Evertek, Explay, Ezze, Fairphone, Fly, Foxconn, Fujitsu, Garmin-Asus, Gateway, Gemini, Gionee, Gigabyte, Gigaset, GOCLEVER, Goly, Google, Gradiente, Grundig, Haier, Hasee, Hisense, Hi-Level, Hosin, HP, HTC, Huawei, Humax, Hyrican, Hyundai, Ikea, iBall, i-Joy, iBerry, iKoMo, i-mate, iOcean, iNew, Infinix, Innostream, Inkti, Intex, i-mobile, INQ, Intek, Inverto, iTel, Jiayu, Jolla, Karbonn, KDDI, Kiano, Kingsun, Konka, Komu, Koobee, K-Touch, KT-Tech, KOPO, Koridy, Kumai, Kyocera, Kazam, Lava, Lanix, LCT, Lenovo, Lenco, Le Pan, LG, Lingwin, Loewe, Logicom, Lexibook, Majestic, Manta Multimedia, Mobistel, Mecer, Medion, MEEG, Meizu, Metz, MEU, MicroMax, Mediacom, MediaTek, Mio, Mpman, Modecom, Mofut, Motorola, Microsoft, MSI, Memup, Mitsubishi, MLLED, M.T.T., MyPhone, NEC, Netgear, NGM, Nintendo, Noain, Nokia, Nomi, Nikon, Newgen, Nexian, NextBook, Onda, OnePlus, OPPO, Orange, O2, Ouki, OUYA, Opsson, Panasonic, PEAQ, Pentagram, Philips, Pioneer, Polaroid, Palm, phoneOne, Pantech, Ployer, Point of View, PolyPad, Pomp, Positivo, Prestigio, ProScan, PULID, Qilive, Qtek, QMobile, Quechua, Overmax, Oysters, Ramos, RCA Tablets, Readboy, Rikomagic, RIM, Roku, Rover, Samsung, Sega, Sony Ericsson, Sencor, Softbank, SFR, Sagem, Sharp, Siemens, Sendo, Skyworth, Smartfren, Sony, Spice, SuperSonic, Selevision, Sanyo, Symphony, Smart, Star, Storex, Stonex, SunVan, Sumvision, Tesla, TB Touch, TCL, Telit, ThL, TiPhone, Tecno Mobile, Tesco, TIANYU, Telefunken, Telenor, T-Mobile, Thomson, Tolino, Toplux, Toshiba, TechnoTrend, Trevi, Tunisie Telecom, Turbo-X, TVC, TechniSat, teXet, Unowhy, Uniscope, UTStarcom, Vastking, Videocon, Vertu, Vitelcom, VK Mobile, ViewSonic, Vestel, Vivo, Voto, Voxtel, Vodafone, Vizio, Videoweb, Walton, WellcoM, Wexler, Wiko, Wolder, Wonu, Woxter, Xiaomi, Xolo, Yarvik, Yuandao, Yusun, Ytone, Zeemi, Zonda, Zopo, ZTE, Web TV, Unknown</acceptedValues>
+ <acceptedValues>3Q, 4Good, Acer, Ainol, Airness, Airties, Alcatel, Allview, Altech UEC, Amazon, Amoi, Apple, Archos, Arnova, ARRIS, Asus, Audiovox, Avvio, Axxion, BangOlufsen, Barnes &amp; Noble, BBK, Becker, Beetel, BenQ, BenQ-Siemens, Bird, Blackview, Blu, Bmobile, Boway, bq, Bravis, Brondi, Bush, Capitel, Captiva, Carrefour, Casio, Cat, Celkon, Changhong, Cherry Mobile, China Mobile, CnM, Coby Kyros, Compal, Compaq, ConCorde, Coolpad, Cowon, CreNova, Cricket, Crius Mea, Crosscall, Cube, CUBOT, Danew, Datang, Dbtel, Dell, Denver, Desay, DEXP, Dicam, Digma, DMM, DNS, DoCoMo, Doogee, Doov, Dopod, Dune HD, E-Boda, Easypix, EBEST, ECS, Elephone, Energy Sistem, Ericsson, Ericy, Eton, eTouch, Evertek, Explay, Ezio, Ezze, Fairphone, Fly, Foxconn, Freetel, Fujitsu, Garmin-Asus, Gateway, Gemini, Gigabyte, Gigaset, Gionee, GOCLEVER, Goly, Google, Gradiente, Grundig, Haier, Hasee, Hi-Level, Hisense, Homtom, Hosin, HP, HTC, Huawei, Humax, Hyrican, Hyundai, i-Joy, i-mate, i-mobile, iBall, iBerry, IconBIT, Ikea, iKoMo, iNew, Infinix, Inkti, Innostream, INQ, Intek, Intex, Inverto, iOcean, iTel, Jiayu, Jolla, K-Touch, Karbonn, Kazam, KDDI, Kiano, Kingsun, Komu, Konka, Koobee, KOPO, Koridy, KT-Tech, Kumai, Kyocera, Lanix, Lava, LCT, LeEco, Lenco, Lenovo, Le Pan, Lexibook, LG, Lingwin, Loewe, Logicom, LYF, M.T.T., Majestic, Manta Multimedia, Mecer, Mediacom, MediaTek, Medion, MEEG, Meizu, Memup, Metz, MEU, MicroMax, Microsoft, Mio, Mitsubishi, MIXC, MLLED, Mobistel, Modecom, Mofut, Motorola, Mpman, MSI, MyPhone, NEC, Netgear, Newgen, Nexian, NextBook, NGM, Nikon, Nintendo, Noain, Nokia, Nomi, Nous, Nvidia, O2, Onda, OnePlus, OPPO, Opsson, Orange, Ouki, OUYA, Overmax, Oysters, Palm, Panasonic, Pantech, PEAQ, Pentagram, Philips, phoneOne, Pioneer, Ployer, Point of View, Polaroid, PolyPad, Pomp, Positivo, PPTV, Prestigio, ProScan, PULID, Qilive, QMobile, Qtek, Quechua, Ramos, RCA Tablets, Readboy, Rikomagic, RIM, Roku, Rover, Sagem, Samsung, Sanyo, Sega, Selevision, Sencor, Sendo, Senseit, SFR, Sharp, Siemens, Skyworth, Smart, Smartfren, Smartisan, Softbank, Sony, Sony Ericsson, Spice, Star, Stonex, Storex, Sumvision, SunVan, SuperSonic, Supra, Symphony, T-Mobile, TB Touch, TCL, TechniSat, TechnoTrend, Tecno Mobile, Telefunken, Telenor, Telit, Tesco, Tesla, teXet, ThL, Thomson, TIANYU, TiPhone, Tolino, Toplux, Toshiba, Trevi, Tunisie Telecom, Turbo-X, TVC, Uniscope, Unknown, Unowhy, UTStarcom, Vastking, Vertu, Vestel, Videocon, Videoweb, ViewSonic, Vitelcom, Vivo, Vizio, VK Mobile, Vodafone, Voto, Voxtel, Walton, Web TV, WellcoM, Wexler, Wiko, Wileyfox, Wolder, Wonu, Woxter, Xiaomi, Xolo, Yarvik, Ytone, Yuandao, Yusun, Zeemi, Zen, Zonda, Zopo, ZTE</acceptedValues>
</row>
<row>
<type>dimension</type>
diff --git a/tests/PHPUnit/System/expected/test_csvExport__Live.getLastVisitsDetails_day.csv b/tests/PHPUnit/System/expected/test_csvExport__Live.getLastVisitsDetails_day.csv
index 920a4200ef..0c074f1d71 100644
--- a/tests/PHPUnit/System/expected/test_csvExport__Live.getLastVisitsDetails_day.csv
+++ b/tests/PHPUnit/System/expected/test_csvExport__Live.getLastVisitsDetails_day.csv
Binary files differ
diff --git a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_LiveEcommerceStatusOrdered__Live.getLastVisitsDetails_day.xml b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_LiveEcommerceStatusOrdered__Live.getLastVisitsDetails_day.xml
index 658e543378..0e0a47e94c 100755
--- a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_LiveEcommerceStatusOrdered__Live.getLastVisitsDetails_day.xml
+++ b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_LiveEcommerceStatusOrdered__Live.getLastVisitsDetails_day.xml
@@ -51,13 +51,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returningCustomer</visitorType>
<visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>ordered</visitEcommerceStatus>
<visitEcommerceStatusIcon>plugins/Morpheus/images/ecommerceOrder.png</visitEcommerceStatusIcon>
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -93,6 +98,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>13351.11</totalEcommerceRevenue>
+ <totalEcommerceConversions>4</totalEcommerceConversions>
+ <totalEcommerceItems>12</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>7530.33</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>3</totalAbandonedCarts>
+ <totalAbandonedCartsItems>12</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -123,9 +134,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -134,17 +149,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>13351.11</totalEcommerceRevenue>
- <totalEcommerceConversions>4</totalEcommerceConversions>
- <totalEcommerceItems>12</totalEcommerceItems>
- <totalAbandonedCartsRevenue>7530.33</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>3</totalAbandonedCarts>
- <totalAbandonedCartsItems>12</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -158,7 +162,14 @@
<pageTitle>View product left in cart</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>14</pageId>
+ <bandwidth />
+ <timeSpent>180</timeSpent>
+ <timeSpentPretty>3 min 0s</timeSpentPretty>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName2>_pkp</customVariablePageName2>
@@ -177,11 +188,7 @@
<customVariablePageValue5 />
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>action</type>
@@ -189,7 +196,14 @@
<pageTitle>View product left in cart</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>15</pageId>
+ <bandwidth />
+ <timeSpent>180</timeSpent>
+ <timeSpentPretty>3 min 0s</timeSpentPretty>
+ <interactionPosition>2</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName2>_pkp</customVariablePageName2>
@@ -208,11 +222,7 @@
<customVariablePageValue5 />
</row>
</customVariables>
- <interactionPosition>2</interactionPosition>
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>action</type>
@@ -220,7 +230,14 @@
<pageTitle>View product left in cart</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>16</pageId>
+ <bandwidth />
+ <timeSpent>361</timeSpent>
+ <timeSpentPretty>6 min 1s</timeSpentPretty>
+ <interactionPosition>3</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName3>_pks</customVariablePageName3>
@@ -235,11 +252,7 @@
<customVariablePageValue5>Category TWO LEFT in cart</customVariablePageValue5>
</row>
</customVariables>
- <interactionPosition>3</interactionPosition>
- <timeSpent>361</timeSpent>
- <timeSpentPretty>6 min 1s</timeSpentPretty>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>ecommerceAbandonedCart</type>
@@ -280,13 +293,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returningCustomer</visitorType>
<visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>orderedThenAbandonedCart</visitEcommerceStatus>
<visitEcommerceStatusIcon>plugins/Morpheus/images/ecommerceOrder.png</visitEcommerceStatusIcon>
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -322,6 +340,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>13351.11</totalEcommerceRevenue>
+ <totalEcommerceConversions>4</totalEcommerceConversions>
+ <totalEcommerceItems>12</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>7530.33</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>3</totalAbandonedCarts>
+ <totalAbandonedCartsItems>12</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -352,9 +376,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -363,16 +391,5 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>13351.11</totalEcommerceRevenue>
- <totalEcommerceConversions>4</totalEcommerceConversions>
- <totalEcommerceItems>12</totalEcommerceItems>
- <totalAbandonedCartsRevenue>7530.33</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>3</totalAbandonedCarts>
- <totalAbandonedCartsItems>12</totalAbandonedCartsItems>
</row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_Metadata_VisitTime.getVisitInformationPerServerTime__API.getProcessedReport_day.xml b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_Metadata_VisitTime.getVisitInformationPerServerTime__API.getProcessedReport_day.xml
index 6806c5300d..6c39c185b3 100755
--- a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_Metadata_VisitTime.getVisitInformationPerServerTime__API.getProcessedReport_day.xml
+++ b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_Metadata_VisitTime.getVisitInformationPerServerTime__API.getProcessedReport_day.xml
@@ -55,7 +55,7 @@
</columns>
<reportData>
<row>
- <label>0h</label>
+ <label>00</label>
<nb_uniq_visitors>1</nb_uniq_visitors>
<nb_visits>1</nb_visits>
<nb_actions>4</nb_actions>
@@ -66,7 +66,7 @@
<bounce_rate>0%</bounce_rate>
</row>
<row>
- <label>1h</label>
+ <label>01</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -77,7 +77,7 @@
<revenue>$ 0</revenue>
</row>
<row>
- <label>2h</label>
+ <label>02</label>
<nb_uniq_visitors>1</nb_uniq_visitors>
<nb_visits>1</nb_visits>
<nb_actions>6</nb_actions>
@@ -88,7 +88,7 @@
<bounce_rate>0%</bounce_rate>
</row>
<row>
- <label>3h</label>
+ <label>03</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -99,7 +99,7 @@
<revenue>$ 0</revenue>
</row>
<row>
- <label>4h</label>
+ <label>04</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -110,7 +110,7 @@
<revenue>$ 0</revenue>
</row>
<row>
- <label>5h</label>
+ <label>05</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -121,7 +121,7 @@
<revenue>$ 0</revenue>
</row>
<row>
- <label>6h</label>
+ <label>06</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -132,7 +132,7 @@
<revenue>$ 0</revenue>
</row>
<row>
- <label>7h</label>
+ <label>07</label>
<nb_uniq_visitors>1</nb_uniq_visitors>
<nb_visits>1</nb_visits>
<nb_actions>3</nb_actions>
@@ -143,7 +143,7 @@
<bounce_rate>0%</bounce_rate>
</row>
<row>
- <label>8h</label>
+ <label>08</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -154,7 +154,7 @@
<revenue>$ 0</revenue>
</row>
<row>
- <label>9h</label>
+ <label>09</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -165,7 +165,7 @@
<revenue>$ 0</revenue>
</row>
<row>
- <label>10h</label>
+ <label>10</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -176,7 +176,7 @@
<revenue>$ 0</revenue>
</row>
<row>
- <label>11h</label>
+ <label>11</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -187,7 +187,7 @@
<revenue>$ 0</revenue>
</row>
<row>
- <label>12h</label>
+ <label>12</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -198,7 +198,7 @@
<revenue>$ 0</revenue>
</row>
<row>
- <label>13h</label>
+ <label>13</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -209,7 +209,7 @@
<revenue>$ 0</revenue>
</row>
<row>
- <label>14h</label>
+ <label>14</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -220,7 +220,7 @@
<revenue>$ 0</revenue>
</row>
<row>
- <label>15h</label>
+ <label>15</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -231,7 +231,7 @@
<revenue>$ 0</revenue>
</row>
<row>
- <label>16h</label>
+ <label>16</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -242,7 +242,7 @@
<revenue>$ 0</revenue>
</row>
<row>
- <label>17h</label>
+ <label>17</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -253,7 +253,7 @@
<revenue>$ 0</revenue>
</row>
<row>
- <label>18h</label>
+ <label>18</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -264,7 +264,7 @@
<revenue>$ 0</revenue>
</row>
<row>
- <label>19h</label>
+ <label>19</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -275,7 +275,7 @@
<revenue>$ 0</revenue>
</row>
<row>
- <label>20h</label>
+ <label>20</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -286,7 +286,7 @@
<revenue>$ 0</revenue>
</row>
<row>
- <label>21h</label>
+ <label>21</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -297,7 +297,7 @@
<revenue>$ 0</revenue>
</row>
<row>
- <label>22h</label>
+ <label>22</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -308,7 +308,7 @@
<revenue>$ 0</revenue>
</row>
<row>
- <label>23h</label>
+ <label>23</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
diff --git a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems__Live.getLastVisitsDetails_day.xml b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems__Live.getLastVisitsDetails_day.xml
index 6e884568c7..2fe9e01574 100755
--- a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems__Live.getLastVisitsDetails_day.xml
+++ b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems__Live.getLastVisitsDetails_day.xml
@@ -12,7 +12,14 @@
<pageTitle>View product left in cart</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>11</pageId>
+ <bandwidth />
+ <timeSpent>180</timeSpent>
+ <timeSpentPretty>3 min 0s</timeSpentPretty>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName2>_pkp</customVariablePageName2>
@@ -31,11 +38,7 @@
<customVariablePageValue5 />
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>action</type>
@@ -43,7 +46,14 @@
<pageTitle>View product left in cart</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>12</pageId>
+ <bandwidth />
+ <timeSpent>180</timeSpent>
+ <timeSpentPretty>3 min 0s</timeSpentPretty>
+ <interactionPosition>2</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName2>_pkp</customVariablePageName2>
@@ -62,11 +72,7 @@
<customVariablePageValue5 />
</row>
</customVariables>
- <interactionPosition>2</interactionPosition>
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>action</type>
@@ -74,7 +80,14 @@
<pageTitle>View product left in cart</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>13</pageId>
+ <bandwidth />
+ <timeSpent>361</timeSpent>
+ <timeSpentPretty>6 min 1s</timeSpentPretty>
+ <interactionPosition>3</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName3>_pks</customVariablePageName3>
@@ -89,11 +102,7 @@
<customVariablePageValue5>Category TWO LEFT in cart</customVariablePageValue5>
</row>
</customVariables>
- <interactionPosition>3</interactionPosition>
- <timeSpent>361</timeSpent>
- <timeSpentPretty>6 min 1s</timeSpentPretty>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>ecommerceAbandonedCart</type>
@@ -134,13 +143,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returningCustomer</visitorType>
<visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>2</visitCount>
-
<visitEcommerceStatus>abandonedCart</visitEcommerceStatus>
<visitEcommerceStatusIcon>plugins/Morpheus/images/ecommerceAbandonedCart.png</visitEcommerceStatusIcon>
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -176,6 +190,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>13351.11</totalEcommerceRevenue>
+ <totalEcommerceConversions>4</totalEcommerceConversions>
+ <totalEcommerceItems>12</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>7530.33</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>3</totalAbandonedCarts>
+ <totalAbandonedCartsItems>12</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -206,9 +226,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -217,17 +241,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>13351.11</totalEcommerceRevenue>
- <totalEcommerceConversions>4</totalEcommerceConversions>
- <totalEcommerceItems>12</totalEcommerceItems>
- <totalAbandonedCartsRevenue>7530.33</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>3</totalAbandonedCarts>
- <totalAbandonedCartsItems>12</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -241,18 +254,21 @@
<pageTitle>Looking at Electronics &amp; Cameras page with a page level custom variable</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>5</pageId>
+ <bandwidth />
+ <timeSpent>360</timeSpent>
+ <timeSpentPretty>6 min 0s</timeSpentPretty>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName5>_pkc</customVariablePageName5>
<customVariablePageValue5>Electronics &amp; Cameras</customVariablePageValue5>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <timeSpent>360</timeSpent>
- <timeSpentPretty>6 min 0s</timeSpentPretty>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>action</type>
@@ -260,18 +276,21 @@
<pageTitle>Looking at Electronics &amp; Cameras page again</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>6</pageId>
+ <bandwidth />
+ <timeSpent>360</timeSpent>
+ <timeSpentPretty>6 min 0s</timeSpentPretty>
+ <interactionPosition>2</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName5>_pkc</customVariablePageName5>
<customVariablePageValue5>Electronics &amp; Cameras</customVariablePageValue5>
</row>
</customVariables>
- <interactionPosition>2</interactionPosition>
- <timeSpent>360</timeSpent>
- <timeSpentPretty>6 min 0s</timeSpentPretty>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>action</type>
@@ -279,7 +298,14 @@
<pageTitle>Looking at product page</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>7</pageId>
+ <bandwidth />
+ <timeSpent>720</timeSpent>
+ <timeSpentPretty>12 min 0s</timeSpentPretty>
+ <interactionPosition>3</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName2>_pkp</customVariablePageName2>
@@ -298,11 +324,7 @@
<customVariablePageValue5>Electronics &amp; Cameras</customVariablePageValue5>
</row>
</customVariables>
- <interactionPosition>3</interactionPosition>
- <timeSpent>720</timeSpent>
- <timeSpentPretty>12 min 0s</timeSpentPretty>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>ecommerceOrder</type>
@@ -368,7 +390,14 @@
<pageTitle>View product left in cart</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>8</pageId>
+ <bandwidth />
+ <timeSpent>180</timeSpent>
+ <timeSpentPretty>3 min 0s</timeSpentPretty>
+ <interactionPosition>4</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName2>_pkp</customVariablePageName2>
@@ -387,11 +416,7 @@
<customVariablePageValue5 />
</row>
</customVariables>
- <interactionPosition>4</interactionPosition>
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>action</type>
@@ -399,7 +424,14 @@
<pageTitle>View product left in cart</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>9</pageId>
+ <bandwidth />
+ <timeSpent>180</timeSpent>
+ <timeSpentPretty>3 min 0s</timeSpentPretty>
+ <interactionPosition>5</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName2>_pkp</customVariablePageName2>
@@ -418,11 +450,7 @@
<customVariablePageValue5 />
</row>
</customVariables>
- <interactionPosition>5</interactionPosition>
- <timeSpent>180</timeSpent>
- <timeSpentPretty>3 min 0s</timeSpentPretty>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>action</type>
@@ -430,7 +458,14 @@
<pageTitle>View product left in cart</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>10</pageId>
+ <bandwidth />
+ <timeSpent>361</timeSpent>
+ <timeSpentPretty>6 min 1s</timeSpentPretty>
+ <interactionPosition>6</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName3>_pks</customVariablePageName3>
@@ -445,11 +480,7 @@
<customVariablePageValue5>Category TWO LEFT in cart</customVariablePageValue5>
</row>
</customVariables>
- <interactionPosition>6</interactionPosition>
- <timeSpent>361</timeSpent>
- <timeSpentPretty>6 min 1s</timeSpentPretty>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>ecommerceAbandonedCart</type>
@@ -490,13 +521,18 @@
+
+
+
+
+
+
<userId />
<visitorType>returning</visitorType>
<visitorTypeIcon>plugins/Live/images/returningVisitor.png</visitorTypeIcon>
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>2</visitCount>
-
<visitEcommerceStatus>orderedThenAbandonedCart</visitEcommerceStatus>
<visitEcommerceStatusIcon>plugins/Morpheus/images/ecommerceOrder.png</visitEcommerceStatusIcon>
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -532,6 +568,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>13351.11</totalEcommerceRevenue>
+ <totalEcommerceConversions>4</totalEcommerceConversions>
+ <totalEcommerceItems>12</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>7530.33</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>3</totalAbandonedCarts>
+ <totalAbandonedCartsItems>12</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -562,9 +604,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -573,17 +619,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>13351.11</totalEcommerceRevenue>
- <totalEcommerceConversions>4</totalEcommerceConversions>
- <totalEcommerceItems>12</totalEcommerceItems>
- <totalAbandonedCartsRevenue>7530.33</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>3</totalAbandonedCarts>
- <totalAbandonedCartsItems>12</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -608,7 +643,14 @@
<pageTitle>incredible title!</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>1</pageId>
+ <bandwidth />
+ <timeSpent>360</timeSpent>
+ <timeSpentPretty>6 min 0s</timeSpentPretty>
+ <interactionPosition>1</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName2>_pkp</customVariablePageName2>
@@ -627,11 +669,7 @@
<customVariablePageValue5>Electronics &amp; Cameras</customVariablePageValue5>
</row>
</customVariables>
- <interactionPosition>1</interactionPosition>
- <timeSpent>360</timeSpent>
- <timeSpentPretty>6 min 0s</timeSpentPretty>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>action</type>
@@ -639,7 +677,14 @@
<pageTitle>Another Product page</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>2</pageId>
+ <bandwidth />
+ <timeSpent>360</timeSpent>
+ <timeSpentPretty>6 min 0s</timeSpentPretty>
+ <interactionPosition>2</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName2>_pkp</customVariablePageName2>
@@ -658,11 +703,7 @@
<customVariablePageValue5>Electronics &amp; Cameras</customVariablePageValue5>
</row>
</customVariables>
- <interactionPosition>2</interactionPosition>
- <timeSpent>360</timeSpent>
- <timeSpentPretty>6 min 0s</timeSpentPretty>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>action</type>
@@ -670,7 +711,14 @@
<pageTitle>Another Product page with no category</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>3</pageId>
+ <bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
+ <interactionPosition>3</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName2>_pkp</customVariablePageName2>
@@ -689,11 +737,7 @@
<customVariablePageValue5 />
</row>
</customVariables>
- <interactionPosition>3</interactionPosition>
- <timeSpent>0</timeSpent>
- <timeSpentPretty>0s</timeSpentPretty>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>action</type>
@@ -701,7 +745,12 @@
<pageTitle>Another Product page with multiple categories</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>4</pageId>
+ <bandwidth />
+ <interactionPosition>4</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName3>_pks</customVariablePageName3>
@@ -716,9 +765,7 @@
<customVariablePageValue5>[&quot;Multiple Category 1&quot;,&quot;&quot;,0,&quot;Multiple Category 2&quot;,&quot;Electronics &amp; Cameras&quot;,&quot;Multiple Category 4&quot;,&quot;Multiple Category 5&quot;,&quot;SHOULD NOT BE REPORTEDSSSSSSSSSSSSSSssssssssssssssssssssssssssstttttttttttttttttt</customVariablePageValue5>
</row>
</customVariables>
- <interactionPosition>4</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -728,13 +775,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -770,6 +822,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>13351.11</totalEcommerceRevenue>
+ <totalEcommerceConversions>4</totalEcommerceConversions>
+ <totalEcommerceItems>12</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>7530.33</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>3</totalAbandonedCarts>
+ <totalAbandonedCartsItems>12</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -796,9 +854,13 @@
</row>
</customVariables>
<resolution>1024x768</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -807,16 +869,5 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>13351.11</totalEcommerceRevenue>
- <totalEcommerceConversions>4</totalEcommerceConversions>
- <totalEcommerceItems>12</totalEcommerceItems>
- <totalAbandonedCartsRevenue>7530.33</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>3</totalAbandonedCarts>
- <totalAbandonedCartsItems>12</totalAbandonedCartsItems>
</row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems__VisitTime.getVisitInformationPerLocalTime_day.xml b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems__VisitTime.getVisitInformationPerLocalTime_day.xml
index 845699c6d2..fafbc7d0ea 100644
--- a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems__VisitTime.getVisitInformationPerLocalTime_day.xml
+++ b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems__VisitTime.getVisitInformationPerLocalTime_day.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" ?>
<result>
<row>
- <label>0h</label>
+ <label>00</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -13,7 +13,7 @@
<segment>visitLocalHour==0</segment>
</row>
<row>
- <label>1h</label>
+ <label>01</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -25,7 +25,7 @@
<segment>visitLocalHour==1</segment>
</row>
<row>
- <label>2h</label>
+ <label>02</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -37,7 +37,7 @@
<segment>visitLocalHour==2</segment>
</row>
<row>
- <label>3h</label>
+ <label>03</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -49,7 +49,7 @@
<segment>visitLocalHour==3</segment>
</row>
<row>
- <label>4h</label>
+ <label>04</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -61,7 +61,7 @@
<segment>visitLocalHour==4</segment>
</row>
<row>
- <label>5h</label>
+ <label>05</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -73,7 +73,7 @@
<segment>visitLocalHour==5</segment>
</row>
<row>
- <label>6h</label>
+ <label>06</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -85,7 +85,7 @@
<segment>visitLocalHour==6</segment>
</row>
<row>
- <label>7h</label>
+ <label>07</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -97,7 +97,7 @@
<segment>visitLocalHour==7</segment>
</row>
<row>
- <label>8h</label>
+ <label>08</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -109,7 +109,7 @@
<segment>visitLocalHour==8</segment>
</row>
<row>
- <label>9h</label>
+ <label>09</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -121,7 +121,7 @@
<segment>visitLocalHour==9</segment>
</row>
<row>
- <label>10h</label>
+ <label>10</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -133,7 +133,7 @@
<segment>visitLocalHour==10</segment>
</row>
<row>
- <label>11h</label>
+ <label>11</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -145,7 +145,7 @@
<segment>visitLocalHour==11</segment>
</row>
<row>
- <label>12h</label>
+ <label>12</label>
<nb_uniq_visitors>1</nb_uniq_visitors>
<nb_visits>3</nb_visits>
<nb_actions>13</nb_actions>
@@ -157,7 +157,7 @@
<segment>visitLocalHour==12</segment>
</row>
<row>
- <label>13h</label>
+ <label>13</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -169,7 +169,7 @@
<segment>visitLocalHour==13</segment>
</row>
<row>
- <label>14h</label>
+ <label>14</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -181,7 +181,7 @@
<segment>visitLocalHour==14</segment>
</row>
<row>
- <label>15h</label>
+ <label>15</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -193,7 +193,7 @@
<segment>visitLocalHour==15</segment>
</row>
<row>
- <label>16h</label>
+ <label>16</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -205,7 +205,7 @@
<segment>visitLocalHour==16</segment>
</row>
<row>
- <label>17h</label>
+ <label>17</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -217,7 +217,7 @@
<segment>visitLocalHour==17</segment>
</row>
<row>
- <label>18h</label>
+ <label>18</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -229,7 +229,7 @@
<segment>visitLocalHour==18</segment>
</row>
<row>
- <label>19h</label>
+ <label>19</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -241,7 +241,7 @@
<segment>visitLocalHour==19</segment>
</row>
<row>
- <label>20h</label>
+ <label>20</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -253,7 +253,7 @@
<segment>visitLocalHour==20</segment>
</row>
<row>
- <label>21h</label>
+ <label>21</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -265,7 +265,7 @@
<segment>visitLocalHour==21</segment>
</row>
<row>
- <label>22h</label>
+ <label>22</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -277,7 +277,7 @@
<segment>visitLocalHour==22</segment>
</row>
<row>
- <label>23h</label>
+ <label>23</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
diff --git a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems__VisitTime.getVisitInformationPerServerTime_day.xml b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems__VisitTime.getVisitInformationPerServerTime_day.xml
index 84a48688b8..242bd1e8b2 100755
--- a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems__VisitTime.getVisitInformationPerServerTime_day.xml
+++ b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems__VisitTime.getVisitInformationPerServerTime_day.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" ?>
<result>
<row>
- <label>0h</label>
+ <label>00</label>
<nb_uniq_visitors>1</nb_uniq_visitors>
<nb_visits>1</nb_visits>
<nb_actions>4</nb_actions>
@@ -21,7 +21,7 @@
<segment>visitServerHour==0</segment>
</row>
<row>
- <label>1h</label>
+ <label>01</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -33,7 +33,7 @@
<segment>visitServerHour==1</segment>
</row>
<row>
- <label>2h</label>
+ <label>02</label>
<nb_uniq_visitors>1</nb_uniq_visitors>
<nb_visits>1</nb_visits>
<nb_actions>6</nb_actions>
@@ -64,7 +64,7 @@
<segment>visitServerHour==2</segment>
</row>
<row>
- <label>3h</label>
+ <label>03</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -76,7 +76,7 @@
<segment>visitServerHour==3</segment>
</row>
<row>
- <label>4h</label>
+ <label>04</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -88,7 +88,7 @@
<segment>visitServerHour==4</segment>
</row>
<row>
- <label>5h</label>
+ <label>05</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -100,7 +100,7 @@
<segment>visitServerHour==5</segment>
</row>
<row>
- <label>6h</label>
+ <label>06</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -112,7 +112,7 @@
<segment>visitServerHour==6</segment>
</row>
<row>
- <label>7h</label>
+ <label>07</label>
<nb_uniq_visitors>1</nb_uniq_visitors>
<nb_visits>1</nb_visits>
<nb_actions>3</nb_actions>
@@ -133,7 +133,7 @@
<segment>visitServerHour==7</segment>
</row>
<row>
- <label>8h</label>
+ <label>08</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -145,7 +145,7 @@
<segment>visitServerHour==8</segment>
</row>
<row>
- <label>9h</label>
+ <label>09</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -157,7 +157,7 @@
<segment>visitServerHour==9</segment>
</row>
<row>
- <label>10h</label>
+ <label>10</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -169,7 +169,7 @@
<segment>visitServerHour==10</segment>
</row>
<row>
- <label>11h</label>
+ <label>11</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -181,7 +181,7 @@
<segment>visitServerHour==11</segment>
</row>
<row>
- <label>12h</label>
+ <label>12</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -193,7 +193,7 @@
<segment>visitServerHour==12</segment>
</row>
<row>
- <label>13h</label>
+ <label>13</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -205,7 +205,7 @@
<segment>visitServerHour==13</segment>
</row>
<row>
- <label>14h</label>
+ <label>14</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -217,7 +217,7 @@
<segment>visitServerHour==14</segment>
</row>
<row>
- <label>15h</label>
+ <label>15</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -229,7 +229,7 @@
<segment>visitServerHour==15</segment>
</row>
<row>
- <label>16h</label>
+ <label>16</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -241,7 +241,7 @@
<segment>visitServerHour==16</segment>
</row>
<row>
- <label>17h</label>
+ <label>17</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -253,7 +253,7 @@
<segment>visitServerHour==17</segment>
</row>
<row>
- <label>18h</label>
+ <label>18</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -265,7 +265,7 @@
<segment>visitServerHour==18</segment>
</row>
<row>
- <label>19h</label>
+ <label>19</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -277,7 +277,7 @@
<segment>visitServerHour==19</segment>
</row>
<row>
- <label>20h</label>
+ <label>20</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -289,7 +289,7 @@
<segment>visitServerHour==20</segment>
</row>
<row>
- <label>21h</label>
+ <label>21</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -301,7 +301,7 @@
<segment>visitServerHour==21</segment>
</row>
<row>
- <label>22h</label>
+ <label>22</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -313,7 +313,7 @@
<segment>visitServerHour==22</segment>
</row>
<row>
- <label>23h</label>
+ <label>23</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
diff --git a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_csv__ScheduledReports.generateReport_week.original.csv b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_csv__ScheduledReports.generateReport_week.original.csv
index 78902751cb..2bdb10b6cb 100644
--- a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_csv__ScheduledReports.generateReport_week.original.csv
+++ b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_csv__ScheduledReports.generateReport_week.original.csv
@@ -163,57 +163,57 @@ nb_uniq_visitors_returning,nb_users_returning,nb_visits_returning,nb_actions_ret
Visits per local time
label,nb_visits,nb_actions,conversion_rate,nb_actions_per_visit,avg_time_on_site,bounce_rate
-0h,0,0,0%,0,00:00:00,0%
-1h,0,0,0%,0,00:00:00,0%
-2h,0,0,0%,0,00:00:00,0%
-3h,0,0,0%,0,00:00:00,0%
-4h,0,0,0%,0,00:00:00,0%
-5h,0,0,0%,0,00:00:00,0%
-6h,0,0,0%,0,00:00:00,0%
-7h,0,0,0%,0,00:00:00,0%
-8h,0,0,0%,0,00:00:00,0%
-9h,0,0,0%,0,00:00:00,0%
-10h,0,0,0%,0,00:00:00,0%
-11h,0,0,0%,0,00:00:00,0%
-12h,5,16,80%,3.2,00:22:49,20%
-13h,0,0,0%,0,00:00:00,0%
-14h,0,0,0%,0,00:00:00,0%
-15h,0,0,0%,0,00:00:00,0%
-16h,0,0,0%,0,00:00:00,0%
-17h,0,0,0%,0,00:00:00,0%
-18h,0,0,0%,0,00:00:00,0%
-19h,0,0,0%,0,00:00:00,0%
-20h,0,0,0%,0,00:00:00,0%
-21h,0,0,0%,0,00:00:00,0%
-22h,0,0,0%,0,00:00:00,0%
-23h,0,0,0%,0,00:00:00,0%
+00,0,0,0%,0,00:00:00,0%
+01,0,0,0%,0,00:00:00,0%
+02,0,0,0%,0,00:00:00,0%
+03,0,0,0%,0,00:00:00,0%
+04,0,0,0%,0,00:00:00,0%
+05,0,0,0%,0,00:00:00,0%
+06,0,0,0%,0,00:00:00,0%
+07,0,0,0%,0,00:00:00,0%
+08,0,0,0%,0,00:00:00,0%
+09,0,0,0%,0,00:00:00,0%
+10,0,0,0%,0,00:00:00,0%
+11,0,0,0%,0,00:00:00,0%
+12,5,16,80%,3.2,00:22:49,20%
+13,0,0,0%,0,00:00:00,0%
+14,0,0,0%,0,00:00:00,0%
+15,0,0,0%,0,00:00:00,0%
+16,0,0,0%,0,00:00:00,0%
+17,0,0,0%,0,00:00:00,0%
+18,0,0,0%,0,00:00:00,0%
+19,0,0,0%,0,00:00:00,0%
+20,0,0,0%,0,00:00:00,0%
+21,0,0,0%,0,00:00:00,0%
+22,0,0,0%,0,00:00:00,0%
+23,0,0,0%,0,00:00:00,0%
Visits per server time
label,nb_visits,nb_actions,revenue,nb_actions_per_visit,avg_time_on_site,bounce_rate
-0h,1,4,$ 10,4,00:12:01,0%
-1h,0,0,$ 0,0,00:00:00,0%
-2h,2,9,$ 3111.11,4.5,00:42:01,0%
-3h,0,0,$ 0,0,00:00:00,0%
-4h,0,0,$ 0,0,00:00:00,0%
-5h,0,0,$ 0,0,00:00:00,0%
-6h,1,0,$ 10240,0,00:06:03,100%
-7h,1,3,$ 0,3,00:12:01,0%
-8h,0,0,$ 0,0,00:00:00,0%
-9h,0,0,$ 0,0,00:00:00,0%
-10h,0,0,$ 0,0,00:00:00,0%
-11h,0,0,$ 0,0,00:00:00,0%
-12h,0,0,$ 0,0,00:00:00,0%
-13h,0,0,$ 0,0,00:00:00,0%
-14h,0,0,$ 0,0,00:00:00,0%
-15h,0,0,$ 0,0,00:00:00,0%
-16h,0,0,$ 0,0,00:00:00,0%
-17h,0,0,$ 0,0,00:00:00,0%
-18h,0,0,$ 0,0,00:00:00,0%
-19h,0,0,$ 0,0,00:00:00,0%
-20h,0,0,$ 0,0,00:00:00,0%
-21h,0,0,$ 0,0,00:00:00,0%
-22h,0,0,$ 0,0,00:00:00,0%
-23h,0,0,$ 0,0,00:00:00,0%
+00,1,4,$ 10,4,00:12:01,0%
+01,0,0,$ 0,0,00:00:00,0%
+02,2,9,$ 3111.11,4.5,00:42:01,0%
+03,0,0,$ 0,0,00:00:00,0%
+04,0,0,$ 0,0,00:00:00,0%
+05,0,0,$ 0,0,00:00:00,0%
+06,1,0,$ 10240,0,00:06:03,100%
+07,1,3,$ 0,3,00:12:01,0%
+08,0,0,$ 0,0,00:00:00,0%
+09,0,0,$ 0,0,00:00:00,0%
+10,0,0,$ 0,0,00:00:00,0%
+11,0,0,$ 0,0,00:00:00,0%
+12,0,0,$ 0,0,00:00:00,0%
+13,0,0,$ 0,0,00:00:00,0%
+14,0,0,$ 0,0,00:00:00,0%
+15,0,0,$ 0,0,00:00:00,0%
+16,0,0,$ 0,0,00:00:00,0%
+17,0,0,$ 0,0,00:00:00,0%
+18,0,0,$ 0,0,00:00:00,0%
+19,0,0,$ 0,0,00:00:00,0%
+20,0,0,$ 0,0,00:00:00,0%
+21,0,0,$ 0,0,00:00:00,0%
+22,0,0,$ 0,0,00:00:00,0%
+23,0,0,$ 0,0,00:00:00,0%
Visits by Day of Week
label,nb_visits,conversion_rate,nb_actions_per_visit,avg_time_on_site,bounce_rate,nb_actions
diff --git a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_tables_and_graph__ScheduledReports.generateReport_week.original.html b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_tables_and_graph__ScheduledReports.generateReport_week.original.html
index 7af97958ce..47c2b21ecd 100644
--- a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_tables_and_graph__ScheduledReports.generateReport_week.original.html
+++ b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_tables_and_graph__ScheduledReports.generateReport_week.original.html
@@ -731,7 +731,7 @@
</h2>
<img alt=""
- src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAArwAAADICAIAAACF9KXqAAAG2klEQVR4nO3dv2sbZwDHYflHIGQMZPLgQSGQrcSdMnjopCUlgf4HhpI/IFP3djJkNYVuJVMJGT1kCnTrmW4BN6LExV4EHUoxgfxQB8P1LEvWN7ask07PM4To7iS/sVDuw/ve2Uv9fr8FADDOct0DAADmg2gAACKiAQCIiAYAICIaAICIaAAAIqJhpHa7PWrj0F3nPAsAGkA0XES32x27Sz0A0DCiYaRutztw4m+32+fkAgA022rdA6jZDz/9NrDlu60vxz6rrIdqVZRbytoo9w70h/IAYB4tejT88dc/79+/Lx9eu3bt8PBwbW0tee7AxEP14UklVJcqRh0JAPPC8kTruKLVah0dHZW7qjMEY8/0eQcoBgDmkWi4uJOkSC54zI8EgJm16MsTl1S9siGZh0iOBIDZJBpaN27cOGdvuUIx9jbL5EqF/EgAmDWLHg2PvmofHR5e7Ln5uV8lANAAix4NX2+ut1rrF3vu+TdSVve65RKABljq9/t1jwEAmAPungAAIqIBAIiIBgAgIhoAgEiT755wwwLMIB9MmE3VO/5GHdPYaPA7omAG+WDCbAo/jJYngOmRCDCD8nxv7EwDABAK1w1FAzBtydIpME3huqFoAKat/P/INQ0wX1zTAABERAMwPdV1U2DuNPkXVrkdHGaQDybMoPCD2eRoAAAmyPIEABARDQBARDQAABHRAABERAMAEBENAECk+dFQFEXdQwAG+WDCDBr7wWx+NAAAEyEaAICIaAAAIqIBAIiIBgAgIhoAgIhoAAAiogEAiIgGACAiGgCAiGgAACKiAQCIiAYAICIaAICIaAAAIqIBAIis1j2Aafjxl9/rHgJwSq/3d/GnDyZX69tvvqh7CE2zENGw++ufdQ8BOGP/37pHQMOJhomzPAEAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAARFbrHsB4vV7v1atXnz59Gnvk8vLy5ubmrVu3pjAqAFg0k4mGdrvd7XYn8lJndTqdvb298OB79+4VRXFFIwGARfZ/NLTb7eqOy0fApEpib2/vyZMnjx8/Hnvkzs7O9vb25b8iAHDWqZmG6jn+SicPPtfNmzcHmmbUYVMYDADz4uy5Y3ZObfNo5PJEt9stu6H6TS+/3eXGgTfg5Fkne0/+HPUi1SPPvg4AXJ6TywSNv6ZhYMqhPNMPfRvK7QPHDH2Rge0zNbcBAAyY5N0TFzjrqwQArtTQyXIuJoqGoWtC1aWHlnkCAGbP0AX0ugbTAFE0DP0WD6wvnLNmAQA0wMifCHnOVQujnlK9qhEAaJhTMw1DF34GUmDgVoiBsKjON1SXMIa+yKiveNbx8XGv1xv7jzk+Ph57DACLwxT4ZC31+/26vnb4Xt69e3d/fz98zTt37rx+/bq6pSiK738+uMj4AJhnz58+arkQ8nMURbGxsXHOAXPwuydevny5u7v74cOHcsvu7u6LFy9ardbDhw87nU65fXV1tfoQAITCBNUZDeEbuba2trW1VT58+/btmzdvTv5++/btTqezvr5+JeMDACrmYKah6uPHj/fv3z86Ojp5uL29/ezZs4ODg5WVlXoHBgCNN2fRsLKysrOz8+7du3LL9evXFQMATMGcRUOr1Xrw4EHdQwCARTTy5zQAAFSJBgAgIhoAgIhoAAAiogEAiIgGACAiGgCAiGgAACKiAQCIiAYAICIaAICIaAAAIqIBAIiIBgAgIhoAgIhoAAAiogEAiIgGACAiGgCAiGgAACKiAQCIiAYAICIaAICIaAAAIqIBAIiIBgAgIhoAgIhoAAAiogEAiIgGACAiGgCAiGgAACKiAQCIiAYAICIaAICIaAAAIqIBAIiIBgAgIhoAgIhoAAAiogEAiIgGACAiGgCAiGgAACKiAQCIiAYAICIaAICIaAAAIqIBAIis1j2AaXj+9FHdQwBOKYpiY2Oj7lEAn8dMAwAQEQ0AQEQ0AAAR0QAAREQDABARDQBARDQAABHRAABERAMAEBENAEBENAAAEdEAAEREAwAQEQ0AQEQ0AAAR0QAAREQDABBZ6vf7dY8BAJgDZhoAgIhoAAAiogEAiIgGACAiGgCAiGgAACKiAQCIiAYAIPIfXhPyLH3NW9sAAAAASUVORK5CYII="
+ src="data:image/png;base64,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"
height="200"
width="700"
margin="0 auto"/>
@@ -1007,7 +1007,7 @@
</h2>
<img alt=""
- src="data:image/png;base64,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"
+ src="data:image/png;base64,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"
height="200"
width="700"
margin="0 auto"/>
@@ -1077,7 +1077,7 @@
</h2>
<img alt=""
- src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAArwAAADICAIAAACF9KXqAAAJY0lEQVR4nO3db2zcdR3A8e/9a7te6dgYjK6DjR2QBTL+OCQBgn94oGiMChqNfxNDwEfyQBMfGJ8hRIPRGB+YaNQnxoARURNFIiQyBBdDycAgbqRMGD22MTZW1r/Xu58PmpRatvazttv1eq/Xg6XX+9366SW33/t+399vl8uyLAEALCTf7AEAgNYgGgCAENEAAISIBgAgRDQAACGiAQAIafdoqFQqp/rmSe+a51EAsLq1ezTMY3BwcMG71AMA7aPdo2FwcHDOjr9SqcyTCwDQtorNHuBsuO/nz8z5zrfuuG7BR83Uw+yqmPnOTG3M3DunP5QHAKtMW0TDSweGa7XazM1SqTQ0NNTf3x957JwDD7NvTlfC7KWKU20JAKtAuyxPjM6SUqpWqzN3zT5CsOCePt4BigGAVaZdomHRppMicsJjfEsAaEVtsTyxRLPPbIgch4hsCQAtp12iobu7e557Z1YoFrzMMnKmQnxLAGghbRENt91SqQ4NLe6x8X2/SgBgdWuLaPj4+7aktGVxj53/QsrZ97rkEoDVLZdlWbNnAABagKsnAIAQ0QAAhIgGACBENAAAIS1/9YQLFmCF8yKFljD7YsBTbdPa0eAzomCF8yKFlhB8bVqeAM4giQArX7zmW/tIAwCwdMFlRNEAnHGRtVKgiYLLiKIBOONm/gFyTgO0NOc0AAAhogE4g2YvlAKtruU/sMol4LDCeZHCyhd8nbZ8NAAAZ4flCQAgRDQAACGiAQAIEQ0AQIhoAABCRAMAELJKomFgYKDZIwDzqVar1Wq12VMA81lwZ7pKogEAONNEAwAQIhoAgBDRAACEiAYAIEQ0AAAhogEACBENAECIaAAAQkQDABAiGgCAENEAAISIBgAgRDQAACGiAQAIEQ0AQEix2QMsm5/+dk+zRwBOaWRkJKVULh9u9iC0i7s+fU2zR1iFVk80/OWp/c0eAYCV4srKhpuu3dzsKVYbyxMAQIhoAABCRAMAECIaAIAQ0QAAhIgGACBENAAAIaIBAAgRDQBAiGgAAEJEAwAQIhoAgBDRAACEiAYAIEQ0AAAhogEACBENAECIaAAAQkQDABAiGgCAENEAAISIBgAgRDQAACGiAQAIEQ0AQIhoAABCRAMAECIaAIAQ0QAAhIgGACBENAAAIaIBAAgRDQBAiGgAAEJEAwAQIhoAgBDRAACEiAYAIEQ0AAAhogEACBENAECIaAAAQkQDABAiGgCAENEAAISIBgAgRDQAACGiAQAIEQ0AQEix2QOcxIla2vXqyJ5Dk4dHGo2UejtyV5xXunlr90U9hWaPBgDtawVFQ1YbS/Xxpw51/Ozx1/4zVViztty3JlfM56pvT+3+77G9e6c+e8sl26YOd52/udmTAkA7WrZoqFQqKaXBwcFF/w3Hnn74maefv/f4zSfyhTt3PHSoePnfRj9XyGXHJ2vp+MjfXx89L71yY1/p8sODvVe+f7nGBgCC3omG6b3+jMHBwUqlEoyA+JbzOPDEnv6XHn7wwgdzF2S1rLR9/z3n9oyWcxONyVrn8Ejt0LHctouvuuKZ/f96sze7JuXWLvHHAbC6zdmvpaW9syXNOdIw59k8m09u1phaX9g7Wi4MN4qF8VzjwOQfnv3w0Q3nf3vjfd1T44UTo8V6/ScPPX/Hrf2VK19sTDya7/rMWZsNgBalEpbXfFdPTDfa7D+nv5gxZ7PZX7x7g3d/PdvYvt0j+/Zm9ZTVUzaRiufk1157wx/7v37OkaPF6hu1A0NjB6v1t9/a9Y9HcoW+xondS/y1AYDTFTqnYWb1Yc4yxPTN2QsZ828wzyrG6Et7psZTPp/ytZSNp/GjxR8d3PDckTdyKdVHj9fHx+sjR2/YednWzZdm9c5//nrXjXcv6dcGoB3MfqfqqMPS/V80nOrJPQtP9MTxsdpk6iimRjE78GT9+/kP7St1lwqHphr5Qm04GzuWTYwee3lv5YLXch3X7znSe+OZHgiAFjdn57Usp9+1ufnOaTipU60vzG/B0yrz526cmEiFQkqNtHFL/v4NT/zg5R2l7vSR64Yef7XvT4931k4c33H92NSb5fza39z+ng8uYgYAYClO+5LLxWXagssTa6++aWw8X8g3uvIpX0r1Y1P3bH62Ntr4/QM9e4s9uVoae3v0zk/uGx+tj714bvmCjy1iBgBgKZb030gv7qjDSa3pv6RzyxUjI7nJsdSopWI++8VzvR999OJ7D/a98Eq9MH7kSzccK492vfVk+cU/d43lLlqunwvAarWMOymmnd6RhumjBbNvRjaYOcAwz8GGXD5/2V137/7aV1PK9WRZZyN9/vLhWyujuw52r+mo31KZ2LilfuTpXGM8t/f1TR+4eudpjQ1AG1pwn8XpymVZ1uwZ3vHv73335Qd+2dWTK5dTV2cqdqRcKeWLKd+Vsnqqj6euzo2bvvnj7u1XzXngwMDAvb96tSkzA7ACfePL773pWh87cHoGBgZ27pzvbfkK+uyJWq3W+4Uvdhw6MvnXR2oT9a7u1NmZisVUKKRcLh0aKU0W1l36nftzWy5r9qQA0I5WUDSUSqV169b13/GVF7ZdknvssYkD+7uHJ/OlfL6jmJ23vnb1jv5P3HbhtkpHR0ezJwWAdrSCoiGlVC6Xt2/fvnXr1uFP3X706NHR4eFco1Hq6Vm/fn1vb293d3epVGr2jADQplZWNKSUCoVCuVwul8t9fX3NngUAeMeSLrkEANqHaAAAQkQDABAiGgCAENEAAISIBgAgRDQAACGiAQAIEQ0AQIhoAABCRAMAECIaAIAQ0QAAhIgGACBENAAAIaIBAAgRDQBAiGgAAEJEAwAQIhoAgBDRAACEiAYAIEQ0AAAhogEACBENAECIaAAAQkQDABAiGgCAENEAAISIBgAgRDQAACGiAQAIEQ0AQIhoAABCRAMAECIaAIAQ0QAAhIgGACBENAAAIaIBAAgRDQBAiGgAAEJEAwAQIhoAgBDRAACEiAYAIEQ0AAAhogEACBENAEBIsdkDLJvf/fC2Zo8AnFK1Wk0pbdq0qdmDAIvnSAMAECIaAIAQ0QAAhIgGACBENAAAIaIBAAgRDQBAiGgAAEJEAwAQIhoAgBDRAACEiAYAIEQ0AAAhogEACBENAECIaAAAQkQDABCSy7Ks2TMAAC3AkQYAIEQ0AAAhogEACBENAECIaAAAQkQDABAiGgCAENEAAIT8DwgEvECVe3CZAAAAAElFTkSuQmCC"
+ src="data:image/png;base64,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"
height="200"
width="700"
margin="0 auto"/>
@@ -1147,7 +1147,7 @@
</h2>
<img alt=""
- src="data:image/png;base64,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"
+ src="data:image/png;base64,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"
height="200"
width="700"
margin="0 auto"/>
@@ -1285,7 +1285,7 @@
</h2>
<img alt=""
- src="data:image/png;base64,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"
+ src="data:image/png;base64,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"
height="200"
width="700"
margin="0 auto"/>
@@ -2722,7 +2722,7 @@
</h2>
<img alt=""
- src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAArwAAADICAIAAACF9KXqAAAItElEQVR4nO3dP4sb6R0HcDmsY7zYu3DB4NstDlsEYl/KLKRKcc11gTR5A8k7SJXUR6o0aQ9S5q1c45AqYMNFLOSyC8ZF8GEfBBebwkQ7O9oZfXfmeeTR6fOpdiTNb34azSN9NX+0ty4uLmYAAOv84EM3AABsB6EBAIgIDQBARGgAACJCAwAQERoAgMjmQsN8Pu+68dq7euYCADZvEnsaFovF2rukBwD4sDYXGhaLReuDfz6f98QFAGBS9sqW++Nf/ta65Q+/+dnauZbpoZkqlrcs08by3lb+kDwAYAMKh4avv/n23bt3y8nbt2+fnZ0dHx8n87Z2PDQn36eE5qGKrkcCAJWUPzzxXcNsNjs/P1/e1dxDsPaTPs8BEgMAbMAkToR8732kSE54zB8JAJRS+PDESM0zG5L9EMkjAYAiyoeG/f39nnuXRyjWXmaZnKmQPxIAGKlwaPjVZ/Pzs7Nh8+af/VICAGxe4dDwy198Mpt9Mmze/gspm/e65BIANu/WxcXFh+4BANgCE7p6AgCYMqEBAIgIDQBARGgAACJCAwAQaV9y2byscePNAADTdSU0+NEkAKDL5eEJiQEA6NHe07D8W4AAAJquhIZmUFjueDi7+r8kXr58+fDhw800BwBMh6snAIDI+n9YdXx83DMJAOwIexoAgMiV/3LpREgAoIt/jQ0ARByeAAAiQgMAEBEaAICI0AAARIQGACAiNAAAEaEBAIgIDQBARGgAACJCAwAQERoAgIjQAABEhAYAICI0AAARoQEAiAgNAEBEaAAAIkIDABARGgCAyN6HbgDYPv/4+lXBaj/98YOC1YB6hAbgZr748qu/P39ZsODvf/vzk08/LlgQqMThCQAgIjQAABGhAQCICA0AQERoAAAiQgMAEBEaAICI0AAARIQGACAiNAAAEaEBAIgIDQBARGgAACJCAwAQERoAgIjQAABEhAYAICI0AAARoQEAiAgNAEBEaAAAIkIDABARGgCAiNAAAESEBgAgIjQAABGhAQCICA0AQERoAAAiQgMAEBEaAICI0AAARIQGACAiNAAAEaEBAIgIDQBARGgAACJCAwAQERoAgIjQAABEhAYAICI0AAARoQEAiAgNAEBkrzkxn8+Xfy8Wi403AwBM12VomM/nzaDQmgQAdtzl4QkRAQDo4ZwGACCy15pentZgxwMA0NQODcussDyn4fnz580HnJ6eNs+XBHbN27dvyxY8+/fZwd63ZWsCNbRDw6qjo6Pm5MHBwcHBQbV+gKm7c+flbPamYMGPfvTR0dGDggWBSjqvnlg6PDzsmQR2zd7e+i8bN3L37t379++XrQnUcDn4F4uF32kAALpc+cYgKAAAXVxyCQBEhAYAICI0AAARoQEAiAgNAEBEaAAAIkIDABARGgCAiNAAAESEBgAgIjQAABGhAQCICA0AQERoAAAiQgMAEBEaAICI0AAARIQGACAiNAAAEaEBAIgIDQBARGgAACJCAwAQERoAgIjQAABEhAYAICI0AAARoQEAiAgNAEBEaAAAIkIDABARGgCAiNAAAESEBgAgIjQAABGhAQCICA0AQERoAAAiQgMAEBEaAICI0AAARIQGACAiNAAAEaEBAIgIDQBARGgAACJCAwAQERoAgIjQAABEhAYAICI0AAARoQEAiAgNAEBEaAAAIkIDABARGgCAiNAAAESEBgAgIjQAABGhAQCICA0AQERoAAAiQgMAEBEaAICI0AAARIQGACCy15yYz+fLvxeLxcabAQCm6zI0zOfzZlBoTQIAO87hCQAgIjQAAJG99Q9Z8cWXX71+899SHfz685+cfPrxP//1nz//9Vmpmnd+uPen330206pWtVqh1RqsVa1qdStavXVxcfF+uuuchmfPrizyxYsXT58+TRZwenr64MGDe/fulep4Npu9efPm1atXjx49KlhzplWtalWrWtWqVgPr9zScnJz0TPbY398/Ojo6PDwMH594/fr1+fn5kydPCtacaVWrWtWqVrWq1YBzGgCAyOWehsVi4XcaAIAuVw5PCAoAQBeHJwCAyOXVEwAAPSruaWieITHlmttVVqs73mrt4ju+erW6461WKvt9anXIjzutXVLBcyPely17skXVVouXXRYvVXN1myheeeKtTn8DWN3sixS/djSNHGIba3V82Z5nOmZ8tcoW2Wh7XqlhBa8tW6nViW8ArQojy3bNXmRYtcrWaHVIzYsSHj9+vDrZunFw2WadUjV7FjGpsstqy1LFW61XttTTbxUcWXb6G8DazX5Y8WvnGjnENtbq+LI9s4wZX+EKHN/q+PG1dqUVWasT3wD6K9y0bNdrVGRYbaDVYTWL7WnoMiYdd81So+Y0y87+/x2o9Z2g+Hf6kWV7vqiVanX1F0uLlG0tonjNAWVvtPS8+LUPGPmqrd5bZCDUKNvzTMeMrxov1uq9RcZX/wOGja9Nbqsjyw54T1s7Y9ddxYdV/yyDWx1Ws25oaG6IpXaw16g52bLXzjK+1a79VCNbLV6zZ1k7vl1VLb47q9f46lrWjmwAmyz7vWm1bmgo+xZZvGZzdZRa161qY8p2bQEjW23NvlxKwbKlaq4WXF3WTS06fsSsxrZar2zV4jVeNePL+Bpcs39xA+Za++E6LCkWr9lVduTIWrtXqb9m9cMT0zTyLJUuNRJf8++qn0A7YnXAFFmri5Vd3LvM+NpZEx9fNbbMSlv7tWWLnF/Zmv2mw2oXQ8O2vDvUGHvbaFue+7XhfQdt6eu1FT3XsC3Pffz4qvFMK629tTsYStUcYOd+EbLea1y8ZiVb1OqW2pZ34RqMry1qdUsNPtFEYli9cUCpMnsauo5jjbSsWXb/T2tN1dh7NuXPjBqt1nv6xYdl1VaL1Fzd7Iv0fO1oGjnE+msO7rbGGqj9ZlK11aobwMiPok22Oqbm7Lots+CL1awwfmPrL9u8cUzNYU/fz0gDAJGdOzwBAAwjNAAAkf8BMK3qmIzXVQ8AAAAASUVORK5CYII="
+ src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAArwAAADICAIAAACF9KXqAAAIPklEQVR4nO3dP28caR0H8AlyAJmQ0ERKYqRTvMXhXEskKopr6JBoeAPwDqigPlHR0J5EyQuhuSaIlkiwssTJK0XRHZhYhCiRlsJoPd6/X3ueZzwjfz7VzszOb3+7ntn9euaZ3Tvz+bwBANjlGzfdAAAwDkIDABARGgCAiNAAAESEBgAgIjQAAJH+QsNkMtk0c+2iLWsBAP0bxJGG6XS6c5H0AAA3q7/QMJ1Olz74J5PJlrgAAAzKXtlyv/3Dn5fm/OYXP9y51iI9tFPFYs4ibSyWLuUPyQMAelA4NPzty3+/f/9+MXn37t2Tk5ODg4Nk3aUDD+3J85TQPlWx6Z4AQCXlT0/8p6VpmtlstljUPkKw85M+zwESAwD0YBADIc+dR4pkwGN+TwCglMKnJzpqj2xIjkMk9wQAiigfGvb397csXZyh2HmZZTJSIb8nANBR4dDws08ns5OT662bf/ZLCQDQv8Kh4ac//qhpPrreutsvpGwvdcklAPTvznw+v+keAIARGNDVEwDAkAkNAEBEaAAAIkIDABARGgCAyPIll+3LGntvBgAYrkuhwZcmAQCbXJyekBgAgC2WjzQsbgsQAEDbpdDQDgqLAw8nl39L4tWrV48ePeqnOQBgOFw9AQBEdv9g1cHBwZZJAOCWcKQBAIhc+pVLAyEBgE38NDYAEHF6AgCICA0AQERoAAAiQgMAEBEaAICI0AAARIQGACAiNAAAEaEBAIgIDQBARGgAACJCAwAQERoAgIjQAABEhAYAICI0AAARoQEAiAgNAEBEaAAAIns33QAwPv9689+C1b733W8XrAbUIzQAV/PZ51/85a+vChb89S9/9PyTxwULApU4PQEARIQGACAiNAAAEaEBAIgIDQBARGgAACJCAwAQERoAgIjQAABEhAYAICI0AAARoQEAiAgNAEBEaAAAIkIDABARGgCAiNAAAESEBgAgIjQAABGhAQCICA0AQERoAAAiQgMAEBEaAICI0AAARIQGACAiNAAAEaEBAIgIDQBARGgAACJCAwAQERoAgIjQAABEhAYAICI0AAARoQEAiAgNAEBEaAAAIkIDABARGgCAiNAAAESEBgAgIjQAABGhAQCICA0AQGSvPTGZTBa3p9Np780AAMN1ERomk0k7KCxNAgC33MXpCREBANjCmAYAILK3NL0Y1rA48HB6etq+w9nZ2f3793voDBimDx8+lC349u3bN2/elK0J1LAcGhZZYTGmYTabte9wfHzcHi8J3Dbv3r0rW/Drr76ezd6XrQnUsBwaVh0dHW2ZBG6b7/zpq6Y5K1jw4PsHH3/8uGBBoJKLMQ2OHwAAW1wcaZhOp76nAQDY5NLpCUEBANjEJZcAQERoAAAiQgMAEBEaAICI0AAARIQGACAiNAAAEaEBAIgIDQBARGgAACJCAwAQERoAgIjQAABEhAYAICI0AAARoQEAiAgNAEBEaAAAIkIDABARGgCAiNAAAESEBgAgIjQAABGhAQCICA0AQERoAAAiQgMAEBEaAICI0AAARIQGACAiNAAAEaEBAIgIDQBARGgAACJCAwAQERoAgIjQAABEhAYAICI0AAARoQEAiAgNAEBEaAAAIkIDABARGgCAiNAAAESEBgAgIjQAABGhAQCICA0AQERoAAAiQgMAEBEaAICI0AAARIQGACAiNAAAEaEBAIgIDQBARGgAACJCAwAQERoAgIjQAABEhAYAICI0AAARoQEAiAgNAEBEaAAAInvticlksrg9nU57bwYAGK6L0DCZTNpBYWkSALjlnJ4AACJCAwAQ2dt9lxWfff7F6dm7Uh38/Cc/eP7J47//45+//+OLUjW/9c293/3q00arWtVqhVZr8KpqVaujaPXOfD4/n940puHFi0sP+fLly2fPniUPcHx8/PDhw3v37pXquGmas7Oz169fP336tGDNRqta1apWtapVrQZ2H2l4/vz5lskt9vf3nzx58uDBg/D+idPT09lsdnR0VLBmo1WtalWrWtWqVgPGNAAAkYsjDdPp1Pc0AACbXDo9ISgAAJs4PQEARC6ungAA2OI639Ow1trxEN0HSWyqcD6/YM1KrXYsu331a3/V92rZ9pxND3fVmkvzB97qMDeAZt2mXqPmppkdyw7z6a8t215UpNXuG+raskvFB97qMDcAn1adys5LODw8XJ1cO7N72U31u9Ss1GrHsttXPzw8rPcKFKlZr+zOmVetOcwNYG2dGjU3zexYdphPf23Z9qJSNTtu/JvKdq+8829d6RUYyAbg06pj2VGOaSg+YLPSCNB6A0tH8XNiPTQ5itehixrPbm3N7g+0WmGYNbcU6bI59fYe0n2b3776tev3tq0OsOaWsl0errdd9Upli52eoDeVPilrXHDrIl7GosZuVWn7t1txg4SGZcXfOzqefVyt1kP6LvUoVX9svWBBX1JSW9m/ftl9qqmzW1Xap5qau1XZasPfrer9A1YjgNY47LT68xHnN7aUFRoudB8ItlZ7mEmp3NC+PcBdcXQ2/fBKR0tvmrdTjd2q+D7V2K0qqLFbldqnKr3b1yjb27DlJtuzhIb/G8vbRNX/3UdkLM9906jvW2Kkf6ZR9FzcWJ54933KAYYuFUY5ELK4HkYJDNyIWh2psbwjF1R7lMDAjajVkbreBiYxbCobrl7sy51u6nLSa1Sucen/2rKbZnas2V46nGt/e94Auh+XW625OrNg2e41m3Wba8e/1Nqapcp2361qPP1NZdtLa7yqw98Aun8UrS27NKdgzSIv6WrZ61VOyl618tqaxXer5oqvgG+EBAAiTk8AABGhAQCI/A/drgNhpxvGcgAAAABJRU5ErkJggg=="
height="200"
width="700"
margin="0 auto"/>
@@ -2758,7 +2758,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 0h </td>
+ 00 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -2781,7 +2781,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 1h </td>
+ 01 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -2804,7 +2804,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 2h </td>
+ 02 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -2827,7 +2827,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 3h </td>
+ 03 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -2850,7 +2850,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 4h </td>
+ 04 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -2873,7 +2873,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 5h </td>
+ 05 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -2896,7 +2896,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 6h </td>
+ 06 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -2919,7 +2919,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 7h </td>
+ 07 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -2942,7 +2942,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 8h </td>
+ 08 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -2965,7 +2965,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 9h </td>
+ 09 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -2988,7 +2988,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 10h </td>
+ 10 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3011,7 +3011,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 11h </td>
+ 11 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3034,7 +3034,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 12h </td>
+ 12 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
5
</td>
@@ -3057,7 +3057,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 13h </td>
+ 13 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3080,7 +3080,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 14h </td>
+ 14 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3103,7 +3103,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 15h </td>
+ 15 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3126,7 +3126,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 16h </td>
+ 16 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3149,7 +3149,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 17h </td>
+ 17 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3172,7 +3172,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 18h </td>
+ 18 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3195,7 +3195,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 19h </td>
+ 19 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3218,7 +3218,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 20h </td>
+ 20 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3241,7 +3241,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 21h </td>
+ 21 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3264,7 +3264,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 22h </td>
+ 22 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3287,7 +3287,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 23h </td>
+ 23 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3319,7 +3319,7 @@
</h2>
<img alt=""
- src="data:image/png;base64,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"
+ src="data:image/png;base64,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"
height="200"
width="700"
margin="0 auto"/>
@@ -3355,7 +3355,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 0h </td>
+ 00 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
1
</td>
@@ -3378,7 +3378,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 1h </td>
+ 01 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3401,7 +3401,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 2h </td>
+ 02 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
2
</td>
@@ -3424,7 +3424,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 3h </td>
+ 03 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3447,7 +3447,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 4h </td>
+ 04 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3470,7 +3470,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 5h </td>
+ 05 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3493,7 +3493,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 6h </td>
+ 06 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
1
</td>
@@ -3516,7 +3516,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 7h </td>
+ 07 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
1
</td>
@@ -3539,7 +3539,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 8h </td>
+ 08 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3562,7 +3562,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 9h </td>
+ 09 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3585,7 +3585,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 10h </td>
+ 10 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3608,7 +3608,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 11h </td>
+ 11 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3631,7 +3631,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 12h </td>
+ 12 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3654,7 +3654,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 13h </td>
+ 13 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3677,7 +3677,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 14h </td>
+ 14 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3700,7 +3700,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 15h </td>
+ 15 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3723,7 +3723,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 16h </td>
+ 16 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3746,7 +3746,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 17h </td>
+ 17 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3769,7 +3769,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 18h </td>
+ 18 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3792,7 +3792,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 19h </td>
+ 19 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3815,7 +3815,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 20h </td>
+ 20 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3838,7 +3838,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 21h </td>
+ 21 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3861,7 +3861,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 22h </td>
+ 22 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3884,7 +3884,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 23h </td>
+ 23 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
diff --git a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_tables_only__ScheduledReports.generateReport_week.original.html b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_tables_only__ScheduledReports.generateReport_week.original.html
index ab685ce1f2..6177dda553 100644
--- a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_tables_only__ScheduledReports.generateReport_week.original.html
+++ b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_tables_only__ScheduledReports.generateReport_week.original.html
@@ -2576,7 +2576,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 0h </td>
+ 00 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -2599,7 +2599,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 1h </td>
+ 01 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -2622,7 +2622,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 2h </td>
+ 02 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -2645,7 +2645,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 3h </td>
+ 03 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -2668,7 +2668,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 4h </td>
+ 04 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -2691,7 +2691,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 5h </td>
+ 05 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -2714,7 +2714,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 6h </td>
+ 06 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -2737,7 +2737,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 7h </td>
+ 07 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -2760,7 +2760,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 8h </td>
+ 08 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -2783,7 +2783,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 9h </td>
+ 09 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -2806,7 +2806,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 10h </td>
+ 10 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -2829,7 +2829,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 11h </td>
+ 11 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -2852,7 +2852,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 12h </td>
+ 12 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
5
</td>
@@ -2875,7 +2875,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 13h </td>
+ 13 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -2898,7 +2898,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 14h </td>
+ 14 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -2921,7 +2921,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 15h </td>
+ 15 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -2944,7 +2944,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 16h </td>
+ 16 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -2967,7 +2967,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 17h </td>
+ 17 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -2990,7 +2990,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 18h </td>
+ 18 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3013,7 +3013,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 19h </td>
+ 19 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3036,7 +3036,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 20h </td>
+ 20 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3059,7 +3059,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 21h </td>
+ 21 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3082,7 +3082,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 22h </td>
+ 22 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3105,7 +3105,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 23h </td>
+ 23 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3166,7 +3166,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 0h </td>
+ 00 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
1
</td>
@@ -3189,7 +3189,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 1h </td>
+ 01 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3212,7 +3212,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 2h </td>
+ 02 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
2
</td>
@@ -3235,7 +3235,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 3h </td>
+ 03 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3258,7 +3258,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 4h </td>
+ 04 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3281,7 +3281,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 5h </td>
+ 05 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3304,7 +3304,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 6h </td>
+ 06 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
1
</td>
@@ -3327,7 +3327,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 7h </td>
+ 07 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
1
</td>
@@ -3350,7 +3350,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 8h </td>
+ 08 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3373,7 +3373,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 9h </td>
+ 09 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3396,7 +3396,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 10h </td>
+ 10 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3419,7 +3419,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 11h </td>
+ 11 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3442,7 +3442,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 12h </td>
+ 12 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3465,7 +3465,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 13h </td>
+ 13 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3488,7 +3488,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 14h </td>
+ 14 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3511,7 +3511,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 15h </td>
+ 15 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3534,7 +3534,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 16h </td>
+ 16 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3557,7 +3557,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 17h </td>
+ 17 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3580,7 +3580,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 18h </td>
+ 18 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3603,7 +3603,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 19h </td>
+ 19 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3626,7 +3626,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 20h </td>
+ 20 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3649,7 +3649,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 21h </td>
+ 21 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3672,7 +3672,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 22h </td>
+ 22 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
@@ -3695,7 +3695,7 @@
<tr style="background-color: rgb(242,242,242);">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- 23h </td>
+ 23 </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
0
</td>
diff --git a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_pdf_tables_only__ScheduledReports.generateReport_week.original.pdf b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_pdf_tables_only__ScheduledReports.generateReport_week.original.pdf
index 909cc51c36..92b703b31c 100644
--- a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_pdf_tables_only__ScheduledReports.generateReport_week.original.pdf
+++ b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_pdf_tables_only__ScheduledReports.generateReport_week.original.pdf
Binary files differ
diff --git a/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__CorePluginsAdmin.getSystemSettings.xml b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__CorePluginsAdmin.getSystemSettings.xml
index 6008a52144..8c48d07315 100644
--- a/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__CorePluginsAdmin.getSystemSettings.xml
+++ b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__CorePluginsAdmin.getSystemSettings.xml
@@ -35,8 +35,8 @@
<uiControlAttributes>
</uiControlAttributes>
<availableValues>
- <row key="1">Yes</row>
- <row key="0">No (Default)</row>
+ <row key="1">Yes (Default)</row>
+ <row key="0">No</row>
</availableValues>
<description />
<inlineHelp>An email will be sent to Super Users when there is a new version available for a plugin.</inlineHelp>
diff --git a/tests/PHPUnit/System/expected/test_noVisit__CorePluginsAdmin.getSystemSettings.xml b/tests/PHPUnit/System/expected/test_noVisit__CorePluginsAdmin.getSystemSettings.xml
index 6008a52144..8c48d07315 100644
--- a/tests/PHPUnit/System/expected/test_noVisit__CorePluginsAdmin.getSystemSettings.xml
+++ b/tests/PHPUnit/System/expected/test_noVisit__CorePluginsAdmin.getSystemSettings.xml
@@ -35,8 +35,8 @@
<uiControlAttributes>
</uiControlAttributes>
<availableValues>
- <row key="1">Yes</row>
- <row key="0">No (Default)</row>
+ <row key="1">Yes (Default)</row>
+ <row key="0">No</row>
</availableValues>
<description />
<inlineHelp>An email will be sent to Super Users when there is a new version available for a plugin.</inlineHelp>
diff --git a/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange__VisitTime.getVisitInformationPerServerTime_range.xml b/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange__VisitTime.getVisitInformationPerServerTime_range.xml
index 4f4de53b6e..ce6918c305 100644
--- a/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange__VisitTime.getVisitInformationPerServerTime_range.xml
+++ b/tests/PHPUnit/System/expected/test_oneVisitor_oneWebsite_severalDays_DateRange__VisitTime.getVisitInformationPerServerTime_range.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" ?>
<result>
<row>
- <label>0h</label>
+ <label>00</label>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
<max_actions>0</max_actions>
@@ -13,7 +13,7 @@
<segment>visitServerHour==0</segment>
</row>
<row>
- <label>1h</label>
+ <label>01</label>
<nb_visits>3</nb_visits>
<nb_actions>6</nb_actions>
<max_actions>2</max_actions>
@@ -25,7 +25,7 @@
<segment>visitServerHour==1</segment>
</row>
<row>
- <label>2h</label>
+ <label>02</label>
<nb_visits>3</nb_visits>
<nb_actions>3</nb_actions>
<max_actions>1</max_actions>
@@ -37,7 +37,7 @@
<segment>visitServerHour==2</segment>
</row>
<row>
- <label>3h</label>
+ <label>03</label>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
<max_actions>0</max_actions>
@@ -49,7 +49,7 @@
<segment>visitServerHour==3</segment>
</row>
<row>
- <label>4h</label>
+ <label>04</label>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
<max_actions>0</max_actions>
@@ -61,7 +61,7 @@
<segment>visitServerHour==4</segment>
</row>
<row>
- <label>5h</label>
+ <label>05</label>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
<max_actions>0</max_actions>
@@ -73,7 +73,7 @@
<segment>visitServerHour==5</segment>
</row>
<row>
- <label>6h</label>
+ <label>06</label>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
<max_actions>0</max_actions>
@@ -85,7 +85,7 @@
<segment>visitServerHour==6</segment>
</row>
<row>
- <label>7h</label>
+ <label>07</label>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
<max_actions>0</max_actions>
@@ -97,7 +97,7 @@
<segment>visitServerHour==7</segment>
</row>
<row>
- <label>8h</label>
+ <label>08</label>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
<max_actions>0</max_actions>
@@ -109,7 +109,7 @@
<segment>visitServerHour==8</segment>
</row>
<row>
- <label>9h</label>
+ <label>09</label>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
<max_actions>0</max_actions>
@@ -121,7 +121,7 @@
<segment>visitServerHour==9</segment>
</row>
<row>
- <label>10h</label>
+ <label>10</label>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
<max_actions>0</max_actions>
@@ -133,7 +133,7 @@
<segment>visitServerHour==10</segment>
</row>
<row>
- <label>11h</label>
+ <label>11</label>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
<max_actions>0</max_actions>
@@ -145,7 +145,7 @@
<segment>visitServerHour==11</segment>
</row>
<row>
- <label>12h</label>
+ <label>12</label>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
<max_actions>0</max_actions>
@@ -157,7 +157,7 @@
<segment>visitServerHour==12</segment>
</row>
<row>
- <label>13h</label>
+ <label>13</label>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
<max_actions>0</max_actions>
@@ -169,7 +169,7 @@
<segment>visitServerHour==13</segment>
</row>
<row>
- <label>14h</label>
+ <label>14</label>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
<max_actions>0</max_actions>
@@ -181,7 +181,7 @@
<segment>visitServerHour==14</segment>
</row>
<row>
- <label>15h</label>
+ <label>15</label>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
<max_actions>0</max_actions>
@@ -193,7 +193,7 @@
<segment>visitServerHour==15</segment>
</row>
<row>
- <label>16h</label>
+ <label>16</label>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
<max_actions>0</max_actions>
@@ -205,7 +205,7 @@
<segment>visitServerHour==16</segment>
</row>
<row>
- <label>17h</label>
+ <label>17</label>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
<max_actions>0</max_actions>
@@ -217,7 +217,7 @@
<segment>visitServerHour==17</segment>
</row>
<row>
- <label>18h</label>
+ <label>18</label>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
<max_actions>0</max_actions>
@@ -229,7 +229,7 @@
<segment>visitServerHour==18</segment>
</row>
<row>
- <label>19h</label>
+ <label>19</label>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
<max_actions>0</max_actions>
@@ -241,7 +241,7 @@
<segment>visitServerHour==19</segment>
</row>
<row>
- <label>20h</label>
+ <label>20</label>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
<max_actions>0</max_actions>
@@ -253,7 +253,7 @@
<segment>visitServerHour==20</segment>
</row>
<row>
- <label>21h</label>
+ <label>21</label>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
<max_actions>0</max_actions>
@@ -265,7 +265,7 @@
<segment>visitServerHour==21</segment>
</row>
<row>
- <label>22h</label>
+ <label>22</label>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
<max_actions>0</max_actions>
@@ -277,7 +277,7 @@
<segment>visitServerHour==22</segment>
</row>
<row>
- <label>23h</label>
+ <label>23</label>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
<max_actions>0</max_actions>
diff --git a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getLastVisits.xml b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getLastVisits.xml
index 26e7671d01..68fa0feeb8 100644
--- a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getLastVisits.xml
+++ b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getLastVisits.xml
@@ -12,10 +12,13 @@
<pageTitle />
<pageIdAction>6</pageIdAction>
+
<pageId>5</pageId>
+ <bandwidth />
<interactionPosition />
<icon>plugins/Morpheus/images/link.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -25,13 +28,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -67,6 +75,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -93,9 +107,13 @@
</row>
</customVariables>
<resolution>1111x222</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -104,17 +122,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -139,10 +146,13 @@
<pageTitle>Homepage</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>4</pageId>
+ <bandwidth />
<interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -152,13 +162,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -194,6 +209,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -220,9 +241,13 @@
</row>
</customVariables>
<resolution>1111x222</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -231,17 +256,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -266,12 +280,15 @@
<pageTitle>Homepage</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>1</pageId>
- <interactionPosition>1</interactionPosition>
+ <bandwidth />
<timeSpent>360</timeSpent>
<timeSpentPretty>6 min 0s</timeSpentPretty>
+ <interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>goal</type>
@@ -290,7 +307,14 @@
<pageTitle>Profile page</pageTitle>
<pageIdAction>4</pageIdAction>
+
<pageId>2</pageId>
+ <bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
+ <interactionPosition>2</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName4>Status user</customVariablePageName4>
@@ -301,11 +325,7 @@
<customVariablePageValue5>looking at &quot;profile page&quot;</customVariablePageValue5>
</row>
</customVariables>
- <interactionPosition>2</interactionPosition>
- <timeSpent>0</timeSpent>
- <timeSpentPretty>0s</timeSpentPretty>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>action</type>
@@ -313,7 +333,12 @@
<pageTitle>Profile page for user *_)%</pageTitle>
<pageIdAction>4</pageIdAction>
+
<pageId>3</pageId>
+ <bandwidth />
+ <interactionPosition>3</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>Language</customVariablePageName1>
@@ -328,9 +353,7 @@
<customVariablePageValue4>looking at &quot;profile page&quot;</customVariablePageValue4>
</row>
</customVariables>
- <interactionPosition>3</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>2</goalConversions>
@@ -340,13 +363,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -361,7 +389,7 @@
<referrerName>Google</referrerName>
<referrerKeyword>this keyword should be ranked</referrerKeyword>
<referrerKeywordPosition>1</referrerKeywordPosition>
- <referrerUrl>http://www.google.com/search?q=this+keyword+should+be+ranked</referrerUrl>
+ <referrerUrl>http://www.google.com/url?sa=t&amp;source=web&amp;cd=1&amp;ved=0CB4QFjAA&amp;url=http://piwik.org/&amp;rct=j&amp;q=this keyword should be ranked&amp;ei=V8WfTePkKKLfiALrpZWGAw&amp;usg=AFQjCNF_MGJRqKPvaKuUokHtZ3VvNG9ALw&amp;sig2=BvKAdCtNixsmfNWXjsNyMw</referrerUrl>
<referrerSearchEngineUrl>http://google.com</referrerSearchEngineUrl>
<referrerSearchEngineIcon>plugins/Morpheus/icons/dist/searchEngines/google.com.png</referrerSearchEngineIcon>
<languageCode>fr</languageCode>
@@ -382,6 +410,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -412,9 +446,13 @@
</row>
</customVariables>
<resolution>1111x222</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -423,16 +461,5 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getLastVisitsDetails_range.xml b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getLastVisitsDetails_range.xml
index 26e7671d01..68fa0feeb8 100644
--- a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getLastVisitsDetails_range.xml
+++ b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getLastVisitsDetails_range.xml
@@ -12,10 +12,13 @@
<pageTitle />
<pageIdAction>6</pageIdAction>
+
<pageId>5</pageId>
+ <bandwidth />
<interactionPosition />
<icon>plugins/Morpheus/images/link.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -25,13 +28,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -67,6 +75,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -93,9 +107,13 @@
</row>
</customVariables>
<resolution>1111x222</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -104,17 +122,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -139,10 +146,13 @@
<pageTitle>Homepage</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>4</pageId>
+ <bandwidth />
<interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -152,13 +162,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -194,6 +209,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -220,9 +241,13 @@
</row>
</customVariables>
<resolution>1111x222</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -231,17 +256,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -266,12 +280,15 @@
<pageTitle>Homepage</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>1</pageId>
- <interactionPosition>1</interactionPosition>
+ <bandwidth />
<timeSpent>360</timeSpent>
<timeSpentPretty>6 min 0s</timeSpentPretty>
+ <interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>goal</type>
@@ -290,7 +307,14 @@
<pageTitle>Profile page</pageTitle>
<pageIdAction>4</pageIdAction>
+
<pageId>2</pageId>
+ <bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
+ <interactionPosition>2</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName4>Status user</customVariablePageName4>
@@ -301,11 +325,7 @@
<customVariablePageValue5>looking at &quot;profile page&quot;</customVariablePageValue5>
</row>
</customVariables>
- <interactionPosition>2</interactionPosition>
- <timeSpent>0</timeSpent>
- <timeSpentPretty>0s</timeSpentPretty>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>action</type>
@@ -313,7 +333,12 @@
<pageTitle>Profile page for user *_)%</pageTitle>
<pageIdAction>4</pageIdAction>
+
<pageId>3</pageId>
+ <bandwidth />
+ <interactionPosition>3</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>Language</customVariablePageName1>
@@ -328,9 +353,7 @@
<customVariablePageValue4>looking at &quot;profile page&quot;</customVariablePageValue4>
</row>
</customVariables>
- <interactionPosition>3</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>2</goalConversions>
@@ -340,13 +363,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -361,7 +389,7 @@
<referrerName>Google</referrerName>
<referrerKeyword>this keyword should be ranked</referrerKeyword>
<referrerKeywordPosition>1</referrerKeywordPosition>
- <referrerUrl>http://www.google.com/search?q=this+keyword+should+be+ranked</referrerUrl>
+ <referrerUrl>http://www.google.com/url?sa=t&amp;source=web&amp;cd=1&amp;ved=0CB4QFjAA&amp;url=http://piwik.org/&amp;rct=j&amp;q=this keyword should be ranked&amp;ei=V8WfTePkKKLfiALrpZWGAw&amp;usg=AFQjCNF_MGJRqKPvaKuUokHtZ3VvNG9ALw&amp;sig2=BvKAdCtNixsmfNWXjsNyMw</referrerUrl>
<referrerSearchEngineUrl>http://google.com</referrerSearchEngineUrl>
<referrerSearchEngineIcon>plugins/Morpheus/icons/dist/searchEngines/google.com.png</referrerSearchEngineIcon>
<languageCode>fr</languageCode>
@@ -382,6 +410,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -412,9 +446,13 @@
</row>
</customVariables>
<resolution>1111x222</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -423,16 +461,5 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getVisitorProfile.xml b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getVisitorProfile.xml
index d94519d0d6..6f59d16f8f 100644
--- a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getVisitorProfile.xml
+++ b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI__Live.getVisitorProfile.xml
@@ -1,55 +1,27 @@
<?xml version="1.0" encoding="utf-8" ?>
<result>
+
<totalVisits>2</totalVisits>
<totalVisitDuration>361</totalVisitDuration>
<totalActions>2</totalActions>
- <totalEvents>0</totalEvents>
<totalOutlinks>1</totalOutlinks>
<totalDownloads>0</totalDownloads>
<totalSearches>0</totalSearches>
<totalPageViews>1</totalPageViews>
+ <totalUniquePageViews>1</totalUniquePageViews>
+ <totalRevisitedPages>0</totalRevisitedPages>
<totalPageViewsWithTiming>0</totalPageViewsWithTiming>
+ <searches>
+ </searches>
<totalGoalConversions>1</totalGoalConversions>
<totalConversionsByGoal>
<row idgoal="1">1</row>
</totalConversionsByGoal>
+ <totalEvents>0</totalEvents>
<hasLatLong>0</hasLatLong>
<totalRevenueByGoal>
<row idgoal="1">1000</row>
</totalRevenueByGoal>
- <searches>
- </searches>
- <continents>
- <row>
- <continent>eur</continent>
- <nb_visits>2</nb_visits>
- <prettyName>Europe</prettyName>
- </row>
- </continents>
- <countries>
- <row>
- <country>fr</country>
- <nb_visits>2</nb_visits>
- <flag>plugins/Morpheus/icons/dist/flags/fr.png</flag>
- <prettyName>France</prettyName>
- </row>
- </countries>
- <totalVisitDurationPretty>6 min 1s</totalVisitDurationPretty>
- <firstVisit>
-
-
-
- <referrerType>campaign</referrerType>
- <referralSummary>Campaign: campaign name - yeah! - campaign keyword - right...</referralSummary>
- </firstVisit>
- <lastVisit>
-
-
-
- <referrerType>campaign</referrerType>
- <referralSummary>Campaign: campaign name - yeah! - campaign keyword - right...</referralSummary>
- </lastVisit>
- <visitsAggregated>2</visitsAggregated>
<lastVisits>
<row>
<idSite>1</idSite>
@@ -63,10 +35,13 @@
<pageTitle />
<pageIdAction>6</pageIdAction>
+
<pageId>5</pageId>
+ <bandwidth />
<interactionPosition />
<icon>plugins/Morpheus/images/link.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -76,13 +51,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -118,6 +98,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -144,9 +130,13 @@
</row>
</customVariables>
<resolution>1111x222</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -155,17 +145,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -190,10 +169,13 @@
<pageTitle>Homepage</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>4</pageId>
+ <bandwidth />
<interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -203,13 +185,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -245,6 +232,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -271,9 +264,13 @@
</row>
</customVariables>
<resolution>1111x222</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -282,21 +279,79 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
</lastVisits>
- <userId>0</userId>
-
+ <totalVisitDurationPretty>6 min 1s</totalVisitDurationPretty>
+ <userId>0</userId>
+ <firstVisit>
+
+
+
+ <referrerType>campaign</referrerType>
+ <referrerUrl />
+ <referralSummary>Campaign: campaign name - yeah! - campaign keyword - right...</referralSummary>
+ </firstVisit>
+ <lastVisit>
+
+
+
+ <referrerType>campaign</referrerType>
+ <referrerUrl />
+ <referralSummary>Campaign: campaign name - yeah! - campaign keyword - right...</referralSummary>
+ </lastVisit>
+ <visitsAggregated>2</visitsAggregated>
+ <visitedPages>
+ <row key="http://example.org/homepage">1</row>
+ </visitedPages>
+ <devices>
+ <Desktop>
+ <count>2</count>
+ <icon>plugins/Morpheus/icons/dist/devices/desktop.png</icon>
+ <devices>
+ <row>
+ <name>Unknown</name>
+ <count>2</count>
+ </row>
+ </devices>
+ </Desktop>
+ </devices>
+ <continents>
+ <row>
+ <continent>eur</continent>
+ <nb_visits>2</nb_visits>
+ <prettyName>Europe</prettyName>
+ </row>
+ </continents>
+ <countries>
+ <row>
+ <country>fr</country>
+ <nb_visits>2</nb_visits>
+ <flag>plugins/Morpheus/icons/dist/flags/fr.png</flag>
+ <prettyName>France</prettyName>
+ </row>
+ </countries>
+ <customVariables>
+ <visit>
+ <row>
+ <name>VisitorType</name>
+ <values>
+ <row>
+ <value>LoggedOut</value>
+ <count>2</count>
+ </row>
+ </values>
+ </row>
+ <row>
+ <name>Othercustom value which should be truncated abcdefghijklmnopqrstuvwxyz</name>
+ <values>
+ <row>
+ <value>abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz</value>
+ <count>2</count>
+ </row>
+ </values>
+ </row>
+ </visit>
+ </customVariables>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getLastVisits.xml b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getLastVisits.xml
index 26e7671d01..68fa0feeb8 100644
--- a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getLastVisits.xml
+++ b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getLastVisits.xml
@@ -12,10 +12,13 @@
<pageTitle />
<pageIdAction>6</pageIdAction>
+
<pageId>5</pageId>
+ <bandwidth />
<interactionPosition />
<icon>plugins/Morpheus/images/link.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -25,13 +28,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -67,6 +75,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -93,9 +107,13 @@
</row>
</customVariables>
<resolution>1111x222</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -104,17 +122,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -139,10 +146,13 @@
<pageTitle>Homepage</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>4</pageId>
+ <bandwidth />
<interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -152,13 +162,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -194,6 +209,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -220,9 +241,13 @@
</row>
</customVariables>
<resolution>1111x222</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -231,17 +256,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -266,12 +280,15 @@
<pageTitle>Homepage</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>1</pageId>
- <interactionPosition>1</interactionPosition>
+ <bandwidth />
<timeSpent>360</timeSpent>
<timeSpentPretty>6 min 0s</timeSpentPretty>
+ <interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>goal</type>
@@ -290,7 +307,14 @@
<pageTitle>Profile page</pageTitle>
<pageIdAction>4</pageIdAction>
+
<pageId>2</pageId>
+ <bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
+ <interactionPosition>2</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName4>Status user</customVariablePageName4>
@@ -301,11 +325,7 @@
<customVariablePageValue5>looking at &quot;profile page&quot;</customVariablePageValue5>
</row>
</customVariables>
- <interactionPosition>2</interactionPosition>
- <timeSpent>0</timeSpent>
- <timeSpentPretty>0s</timeSpentPretty>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>action</type>
@@ -313,7 +333,12 @@
<pageTitle>Profile page for user *_)%</pageTitle>
<pageIdAction>4</pageIdAction>
+
<pageId>3</pageId>
+ <bandwidth />
+ <interactionPosition>3</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>Language</customVariablePageName1>
@@ -328,9 +353,7 @@
<customVariablePageValue4>looking at &quot;profile page&quot;</customVariablePageValue4>
</row>
</customVariables>
- <interactionPosition>3</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>2</goalConversions>
@@ -340,13 +363,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -361,7 +389,7 @@
<referrerName>Google</referrerName>
<referrerKeyword>this keyword should be ranked</referrerKeyword>
<referrerKeywordPosition>1</referrerKeywordPosition>
- <referrerUrl>http://www.google.com/search?q=this+keyword+should+be+ranked</referrerUrl>
+ <referrerUrl>http://www.google.com/url?sa=t&amp;source=web&amp;cd=1&amp;ved=0CB4QFjAA&amp;url=http://piwik.org/&amp;rct=j&amp;q=this keyword should be ranked&amp;ei=V8WfTePkKKLfiALrpZWGAw&amp;usg=AFQjCNF_MGJRqKPvaKuUokHtZ3VvNG9ALw&amp;sig2=BvKAdCtNixsmfNWXjsNyMw</referrerUrl>
<referrerSearchEngineUrl>http://google.com</referrerSearchEngineUrl>
<referrerSearchEngineIcon>plugins/Morpheus/icons/dist/searchEngines/google.com.png</referrerSearchEngineIcon>
<languageCode>fr</languageCode>
@@ -382,6 +410,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -412,9 +446,13 @@
</row>
</customVariables>
<resolution>1111x222</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -423,16 +461,5 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getLastVisitsDetails_range.xml b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getLastVisitsDetails_range.xml
index 26e7671d01..68fa0feeb8 100644
--- a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getLastVisitsDetails_range.xml
+++ b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getLastVisitsDetails_range.xml
@@ -12,10 +12,13 @@
<pageTitle />
<pageIdAction>6</pageIdAction>
+
<pageId>5</pageId>
+ <bandwidth />
<interactionPosition />
<icon>plugins/Morpheus/images/link.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -25,13 +28,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -67,6 +75,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -93,9 +107,13 @@
</row>
</customVariables>
<resolution>1111x222</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -104,17 +122,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -139,10 +146,13 @@
<pageTitle>Homepage</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>4</pageId>
+ <bandwidth />
<interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -152,13 +162,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -194,6 +209,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -220,9 +241,13 @@
</row>
</customVariables>
<resolution>1111x222</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -231,17 +256,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -266,12 +280,15 @@
<pageTitle>Homepage</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>1</pageId>
- <interactionPosition>1</interactionPosition>
+ <bandwidth />
<timeSpent>360</timeSpent>
<timeSpentPretty>6 min 0s</timeSpentPretty>
+ <interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>goal</type>
@@ -290,7 +307,14 @@
<pageTitle>Profile page</pageTitle>
<pageIdAction>4</pageIdAction>
+
<pageId>2</pageId>
+ <bandwidth />
+ <timeSpent>0</timeSpent>
+ <timeSpentPretty>0s</timeSpentPretty>
+ <interactionPosition>2</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName4>Status user</customVariablePageName4>
@@ -301,11 +325,7 @@
<customVariablePageValue5>looking at &quot;profile page&quot;</customVariablePageValue5>
</row>
</customVariables>
- <interactionPosition>2</interactionPosition>
- <timeSpent>0</timeSpent>
- <timeSpentPretty>0s</timeSpentPretty>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
<row>
<type>action</type>
@@ -313,7 +333,12 @@
<pageTitle>Profile page for user *_)%</pageTitle>
<pageIdAction>4</pageIdAction>
+
<pageId>3</pageId>
+ <bandwidth />
+ <interactionPosition>3</interactionPosition>
+ <icon />
+
<customVariables>
<row>
<customVariablePageName1>Language</customVariablePageName1>
@@ -328,9 +353,7 @@
<customVariablePageValue4>looking at &quot;profile page&quot;</customVariablePageValue4>
</row>
</customVariables>
- <interactionPosition>3</interactionPosition>
- <icon />
-
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>2</goalConversions>
@@ -340,13 +363,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -361,7 +389,7 @@
<referrerName>Google</referrerName>
<referrerKeyword>this keyword should be ranked</referrerKeyword>
<referrerKeywordPosition>1</referrerKeywordPosition>
- <referrerUrl>http://www.google.com/search?q=this+keyword+should+be+ranked</referrerUrl>
+ <referrerUrl>http://www.google.com/url?sa=t&amp;source=web&amp;cd=1&amp;ved=0CB4QFjAA&amp;url=http://piwik.org/&amp;rct=j&amp;q=this keyword should be ranked&amp;ei=V8WfTePkKKLfiALrpZWGAw&amp;usg=AFQjCNF_MGJRqKPvaKuUokHtZ3VvNG9ALw&amp;sig2=BvKAdCtNixsmfNWXjsNyMw</referrerUrl>
<referrerSearchEngineUrl>http://google.com</referrerSearchEngineUrl>
<referrerSearchEngineIcon>plugins/Morpheus/icons/dist/searchEngines/google.com.png</referrerSearchEngineIcon>
<languageCode>fr</languageCode>
@@ -382,6 +410,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.6</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -412,9 +446,13 @@
</row>
</customVariables>
<resolution>1111x222</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -423,16 +461,5 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getVisitorProfile.xml b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getVisitorProfile.xml
index d94519d0d6..6f59d16f8f 100644
--- a/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getVisitorProfile.xml
+++ b/tests/PHPUnit/System/expected/test_periodIsRange_dateIsLastN_MetadataAndNormalAPI_pagesegment__Live.getVisitorProfile.xml
@@ -1,55 +1,27 @@
<?xml version="1.0" encoding="utf-8" ?>
<result>
+
<totalVisits>2</totalVisits>
<totalVisitDuration>361</totalVisitDuration>
<totalActions>2</totalActions>
- <totalEvents>0</totalEvents>
<totalOutlinks>1</totalOutlinks>
<totalDownloads>0</totalDownloads>
<totalSearches>0</totalSearches>
<totalPageViews>1</totalPageViews>
+ <totalUniquePageViews>1</totalUniquePageViews>
+ <totalRevisitedPages>0</totalRevisitedPages>
<totalPageViewsWithTiming>0</totalPageViewsWithTiming>
+ <searches>
+ </searches>
<totalGoalConversions>1</totalGoalConversions>
<totalConversionsByGoal>
<row idgoal="1">1</row>
</totalConversionsByGoal>
+ <totalEvents>0</totalEvents>
<hasLatLong>0</hasLatLong>
<totalRevenueByGoal>
<row idgoal="1">1000</row>
</totalRevenueByGoal>
- <searches>
- </searches>
- <continents>
- <row>
- <continent>eur</continent>
- <nb_visits>2</nb_visits>
- <prettyName>Europe</prettyName>
- </row>
- </continents>
- <countries>
- <row>
- <country>fr</country>
- <nb_visits>2</nb_visits>
- <flag>plugins/Morpheus/icons/dist/flags/fr.png</flag>
- <prettyName>France</prettyName>
- </row>
- </countries>
- <totalVisitDurationPretty>6 min 1s</totalVisitDurationPretty>
- <firstVisit>
-
-
-
- <referrerType>campaign</referrerType>
- <referralSummary>Campaign: campaign name - yeah! - campaign keyword - right...</referralSummary>
- </firstVisit>
- <lastVisit>
-
-
-
- <referrerType>campaign</referrerType>
- <referralSummary>Campaign: campaign name - yeah! - campaign keyword - right...</referralSummary>
- </lastVisit>
- <visitsAggregated>2</visitsAggregated>
<lastVisits>
<row>
<idSite>1</idSite>
@@ -63,10 +35,13 @@
<pageTitle />
<pageIdAction>6</pageIdAction>
+
<pageId>5</pageId>
+ <bandwidth />
<interactionPosition />
<icon>plugins/Morpheus/images/link.png</icon>
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>0</goalConversions>
@@ -76,13 +51,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>0</visitConverted>
<visitConvertedIcon />
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -118,6 +98,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -144,9 +130,13 @@
</row>
</customVariables>
<resolution>1111x222</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -155,17 +145,6 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
<row>
<idSite>1</idSite>
@@ -190,10 +169,13 @@
<pageTitle>Homepage</pageTitle>
<pageIdAction>2</pageIdAction>
+
<pageId>4</pageId>
+ <bandwidth />
<interactionPosition>1</interactionPosition>
<icon />
+ <bandwidth_pretty>0 M</bandwidth_pretty>
</row>
</actionDetails>
<goalConversions>1</goalConversions>
@@ -203,13 +185,18 @@
+
+
+
+
+
+
<userId />
<visitorType>new</visitorType>
<visitorTypeIcon />
<visitConverted>1</visitConverted>
<visitConvertedIcon>plugins/Morpheus/images/goal.png</visitConvertedIcon>
<visitCount>1</visitCount>
-
<visitEcommerceStatus>none</visitEcommerceStatus>
<visitEcommerceStatusIcon />
<daysSinceFirstVisit>0</daysSinceFirstVisit>
@@ -245,6 +232,12 @@
<browserIcon>plugins/Morpheus/icons/dist/browsers/FF.png</browserIcon>
<browserCode>FF</browserCode>
<browserVersion>3.0</browserVersion>
+ <totalEcommerceRevenue>0</totalEcommerceRevenue>
+ <totalEcommerceConversions>0</totalEcommerceConversions>
+ <totalEcommerceItems>0</totalEcommerceItems>
+ <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
+ <totalAbandonedCarts>0</totalAbandonedCarts>
+ <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
<events>0</events>
<continent>Europe</continent>
<continentCode>eur</continentCode>
@@ -271,9 +264,13 @@
</row>
</customVariables>
<resolution>1111x222</resolution>
- <plugins>flash, java</plugins>
+ <plugins>cookie, flash, java</plugins>
<pluginsIcons>
<row>
+ <pluginIcon>plugins/Morpheus/icons/dist/plugins/cookie.png</pluginIcon>
+ <pluginName>cookie</pluginName>
+ </row>
+ <row>
<pluginIcon>plugins/Morpheus/icons/dist/plugins/flash.png</pluginIcon>
<pluginName>flash</pluginName>
</row>
@@ -282,21 +279,79 @@
<pluginName>java</pluginName>
</row>
</pluginsIcons>
-
-
-
-
-
- <totalEcommerceRevenue>0</totalEcommerceRevenue>
- <totalEcommerceConversions>0</totalEcommerceConversions>
- <totalEcommerceItems>0</totalEcommerceItems>
- <totalAbandonedCartsRevenue>0</totalAbandonedCartsRevenue>
- <totalAbandonedCarts>0</totalAbandonedCarts>
- <totalAbandonedCartsItems>0</totalAbandonedCartsItems>
</row>
</lastVisits>
- <userId>0</userId>
-
+ <totalVisitDurationPretty>6 min 1s</totalVisitDurationPretty>
+ <userId>0</userId>
+ <firstVisit>
+
+
+
+ <referrerType>campaign</referrerType>
+ <referrerUrl />
+ <referralSummary>Campaign: campaign name - yeah! - campaign keyword - right...</referralSummary>
+ </firstVisit>
+ <lastVisit>
+
+
+
+ <referrerType>campaign</referrerType>
+ <referrerUrl />
+ <referralSummary>Campaign: campaign name - yeah! - campaign keyword - right...</referralSummary>
+ </lastVisit>
+ <visitsAggregated>2</visitsAggregated>
+ <visitedPages>
+ <row key="http://example.org/homepage">1</row>
+ </visitedPages>
+ <devices>
+ <Desktop>
+ <count>2</count>
+ <icon>plugins/Morpheus/icons/dist/devices/desktop.png</icon>
+ <devices>
+ <row>
+ <name>Unknown</name>
+ <count>2</count>
+ </row>
+ </devices>
+ </Desktop>
+ </devices>
+ <continents>
+ <row>
+ <continent>eur</continent>
+ <nb_visits>2</nb_visits>
+ <prettyName>Europe</prettyName>
+ </row>
+ </continents>
+ <countries>
+ <row>
+ <country>fr</country>
+ <nb_visits>2</nb_visits>
+ <flag>plugins/Morpheus/icons/dist/flags/fr.png</flag>
+ <prettyName>France</prettyName>
+ </row>
+ </countries>
+ <customVariables>
+ <visit>
+ <row>
+ <name>VisitorType</name>
+ <values>
+ <row>
+ <value>LoggedOut</value>
+ <count>2</count>
+ </row>
+ </values>
+ </row>
+ <row>
+ <name>Othercustom value which should be truncated abcdefghijklmnopqrstuvwxyz</name>
+ <values>
+ <row>
+ <value>abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz</value>
+ <count>2</count>
+ </row>
+ </values>
+ </row>
+ </visit>
+ </customVariables>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_trackGoals_allowMultipleConversionsPerVisit__VisitTime.getVisitInformationPerServerTime_day.xml b/tests/PHPUnit/System/expected/test_trackGoals_allowMultipleConversionsPerVisit__VisitTime.getVisitInformationPerServerTime_day.xml
index aff3a51e64..02554e3e24 100644
--- a/tests/PHPUnit/System/expected/test_trackGoals_allowMultipleConversionsPerVisit__VisitTime.getVisitInformationPerServerTime_day.xml
+++ b/tests/PHPUnit/System/expected/test_trackGoals_allowMultipleConversionsPerVisit__VisitTime.getVisitInformationPerServerTime_day.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" ?>
<result>
<row>
- <label>0h</label>
+ <label>00</label>
<nb_uniq_visitors>1</nb_uniq_visitors>
<nb_visits>2</nb_visits>
<nb_actions>5</nb_actions>
@@ -41,7 +41,7 @@
<segment>visitServerHour==0</segment>
</row>
<row>
- <label>1h</label>
+ <label>01</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -53,7 +53,7 @@
<segment>visitServerHour==1</segment>
</row>
<row>
- <label>2h</label>
+ <label>02</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -65,7 +65,7 @@
<segment>visitServerHour==2</segment>
</row>
<row>
- <label>3h</label>
+ <label>03</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -77,7 +77,7 @@
<segment>visitServerHour==3</segment>
</row>
<row>
- <label>4h</label>
+ <label>04</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -89,7 +89,7 @@
<segment>visitServerHour==4</segment>
</row>
<row>
- <label>5h</label>
+ <label>05</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -101,7 +101,7 @@
<segment>visitServerHour==5</segment>
</row>
<row>
- <label>6h</label>
+ <label>06</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -113,7 +113,7 @@
<segment>visitServerHour==6</segment>
</row>
<row>
- <label>7h</label>
+ <label>07</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -125,7 +125,7 @@
<segment>visitServerHour==7</segment>
</row>
<row>
- <label>8h</label>
+ <label>08</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -137,7 +137,7 @@
<segment>visitServerHour==8</segment>
</row>
<row>
- <label>9h</label>
+ <label>09</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -149,7 +149,7 @@
<segment>visitServerHour==9</segment>
</row>
<row>
- <label>10h</label>
+ <label>10</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -161,7 +161,7 @@
<segment>visitServerHour==10</segment>
</row>
<row>
- <label>11h</label>
+ <label>11</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -173,7 +173,7 @@
<segment>visitServerHour==11</segment>
</row>
<row>
- <label>12h</label>
+ <label>12</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -185,7 +185,7 @@
<segment>visitServerHour==12</segment>
</row>
<row>
- <label>13h</label>
+ <label>13</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -197,7 +197,7 @@
<segment>visitServerHour==13</segment>
</row>
<row>
- <label>14h</label>
+ <label>14</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -209,7 +209,7 @@
<segment>visitServerHour==14</segment>
</row>
<row>
- <label>15h</label>
+ <label>15</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -221,7 +221,7 @@
<segment>visitServerHour==15</segment>
</row>
<row>
- <label>16h</label>
+ <label>16</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -233,7 +233,7 @@
<segment>visitServerHour==16</segment>
</row>
<row>
- <label>17h</label>
+ <label>17</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -245,7 +245,7 @@
<segment>visitServerHour==17</segment>
</row>
<row>
- <label>18h</label>
+ <label>18</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -257,7 +257,7 @@
<segment>visitServerHour==18</segment>
</row>
<row>
- <label>19h</label>
+ <label>19</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -269,7 +269,7 @@
<segment>visitServerHour==19</segment>
</row>
<row>
- <label>20h</label>
+ <label>20</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -281,7 +281,7 @@
<segment>visitServerHour==20</segment>
</row>
<row>
- <label>21h</label>
+ <label>21</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -293,7 +293,7 @@
<segment>visitServerHour==21</segment>
</row>
<row>
- <label>22h</label>
+ <label>22</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
@@ -305,7 +305,7 @@
<segment>visitServerHour==22</segment>
</row>
<row>
- <label>23h</label>
+ <label>23</label>
<nb_uniq_visitors>0</nb_uniq_visitors>
<nb_visits>0</nb_visits>
<nb_actions>0</nb_actions>
diff --git a/tests/PHPUnit/Unit/PeriodTest.php b/tests/PHPUnit/Unit/PeriodTest.php
index f4c7d4ee1d..b3f6b06adf 100644
--- a/tests/PHPUnit/Unit/PeriodTest.php
+++ b/tests/PHPUnit/Unit/PeriodTest.php
@@ -14,6 +14,7 @@ use Piwik\Period;
use Piwik\Period\Month;
use Piwik\Period\Week;
use Piwik\Period\Year;
+use Piwik\Translation\Translator;
/**
* @group Core
@@ -52,40 +53,6 @@ class PeriodTest extends \PHPUnit_Framework_TestCase
$this->assertNotEmpty($label);
}
- public function testFactoryDay()
- {
- $period = Period\Factory::build('day', Date::today());
- $this->assertInstanceOf('\Piwik\Period\Day', $period);
- }
-
- public function testFactoryMonth()
- {
- $period = Period\Factory::build('month', Date::today());
- $this->assertInstanceOf('\Piwik\Period\Month', $period);
- }
-
- public function testFactoryWeek()
- {
- $period = Period\Factory::build('week', Date::today());
- $this->assertInstanceOf('\Piwik\Period\Week', $period);
- }
-
- public function testFactoryYear()
- {
- $period = Period\Factory::build('year', Date::today());
- $this->assertInstanceOf('\Piwik\Period\Year', $period);
- }
-
- public function testFactoryInvalid()
- {
- try {
- Period\Factory::build('inValid', Date::today());
- } catch (\Exception $e) {
- return;
- }
- $this->fail('Expected Exception not raised');
- }
-
public function testValidate_ValidDates()
{
Period::checkDateFormat('today');
@@ -102,7 +69,7 @@ class PeriodTest extends \PHPUnit_Framework_TestCase
/**
* @expectedException \Exception
- * @expectedExceptionMessage General_ExceptionInvalidDateFormat
+ * @expectedExceptionMessage Date format must be: YYYY-MM-DD, or 'today' or 'yesterday' or any keyword supported by the strtotime function (see http://php.net/strtotime for more information):
* @dataProvider getInvalidDateFormats
*/
public function testValidate_InvalidDates($invalidDateFormat)
diff --git a/tests/UI/expected-screenshots/ActionsDataTable_segmented_visitor_log.png b/tests/UI/expected-screenshots/ActionsDataTable_segmented_visitor_log.png
index fc3b19e165..773ccd9532 100644
--- a/tests/UI/expected-screenshots/ActionsDataTable_segmented_visitor_log.png
+++ b/tests/UI/expected-screenshots/ActionsDataTable_segmented_visitor_log.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:b3c4e5fd742348492ca86f4409f9cbf9371221cd2d7198919e22ac72501fb49f
-size 467356
+oid sha256:d56c62a6f297a7866d9ea336e95c53d5ef51f301a35f5f8c5142498190b0a287
+size 481935
diff --git a/tests/UI/expected-screenshots/DashboardManager_create_new.png b/tests/UI/expected-screenshots/DashboardManager_create_new.png
index ae1c1a9ab4..dc4b931886 100644
--- a/tests/UI/expected-screenshots/DashboardManager_create_new.png
+++ b/tests/UI/expected-screenshots/DashboardManager_create_new.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:763a130436a69516580ba5f0c903715d3e4a433fbc8983da1b555bdb0368453f
-size 246428
+oid sha256:04dfdef354eb3b75d7342dea0ffe8bf4ce102afbfb330bb4bcfbec547b247df7
+size 246227
diff --git a/tests/UI/expected-screenshots/DashboardManager_removed.png b/tests/UI/expected-screenshots/DashboardManager_removed.png
index df2c731a99..5ac6209265 100644
--- a/tests/UI/expected-screenshots/DashboardManager_removed.png
+++ b/tests/UI/expected-screenshots/DashboardManager_removed.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:6c6d41eed07679db507039b41e64fce5642e088ad84515c86b4c33cbe72d8792
-size 367005
+oid sha256:0fdeb09d9b6425fbca2575f59bfc2a833075e8efdbf2979a4aa490ba6a1b89c1
+size 367116
diff --git a/tests/UI/expected-screenshots/Dashboard_loaded_token_auth.png b/tests/UI/expected-screenshots/Dashboard_loaded_token_auth.png
index ff309ef54d..574141e42a 100644
--- a/tests/UI/expected-screenshots/Dashboard_loaded_token_auth.png
+++ b/tests/UI/expected-screenshots/Dashboard_loaded_token_auth.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:62ffe7dcbec7a3ead69c8e0207626fce141e4b11c08a893a4b776a420f7bc871
-size 538373
+oid sha256:449f425cc77004078f3f3c09728711b8a30feeb392a9579d6bd1c107eb758cff
+size 538472
diff --git a/tests/UI/expected-screenshots/Dashboard_removed.png b/tests/UI/expected-screenshots/Dashboard_removed.png
index 361fb00ce1..5993bf020a 100644
--- a/tests/UI/expected-screenshots/Dashboard_removed.png
+++ b/tests/UI/expected-screenshots/Dashboard_removed.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:6895c2be1eda5182ad1af3399e3568ed1c18232fd128782da34e77a375b4f562
-size 537986
+oid sha256:bbeb35ce3e9a2838c7c94a0b472cb85d28085b34a6617f08706fd6317e34ca87
+size 538089
diff --git a/tests/UI/expected-screenshots/Dashboard_reset.png b/tests/UI/expected-screenshots/Dashboard_reset.png
index 378d541743..aa6004a698 100644
--- a/tests/UI/expected-screenshots/Dashboard_reset.png
+++ b/tests/UI/expected-screenshots/Dashboard_reset.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:3708f066bc45dca4fe1f58454cea6c48abfd32a078ee94dd5b8a674c1bb7bdc9
-size 250604
+oid sha256:dcdeb3f79ef07678939ab5e86c8d18014a185e5d4d5a8c826d80926b996b6f22
+size 250219
diff --git a/tests/UI/expected-screenshots/Dashboard_rowevolution.png b/tests/UI/expected-screenshots/Dashboard_rowevolution.png
new file mode 100644
index 0000000000..34cff2492f
--- /dev/null
+++ b/tests/UI/expected-screenshots/Dashboard_rowevolution.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:056cb8e56446622dfca8b937268655e9a268f03b084c7faa60362110ae67a3aa
+size 71105
diff --git a/tests/UI/expected-screenshots/EmptySite_emptySiteDashboard_ignored.png b/tests/UI/expected-screenshots/EmptySite_emptySiteDashboard_ignored.png
index 4977052015..dabf8d83a0 100644
--- a/tests/UI/expected-screenshots/EmptySite_emptySiteDashboard_ignored.png
+++ b/tests/UI/expected-screenshots/EmptySite_emptySiteDashboard_ignored.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:c8b3052ed220a9ae9e545542b63266be0dd46d5a8b1038c41a64f9a5b2006dff
-size 285366
+oid sha256:af4ed3243c4aeb8f8bf6810fe315d347d02d814be510c564620e512d66d61904
+size 285441
diff --git a/tests/UI/expected-screenshots/EvolutionGraph_bounce_rate.png b/tests/UI/expected-screenshots/EvolutionGraph_bounce_rate.png
index 7b11d696fe..897fa2e3ff 100644
--- a/tests/UI/expected-screenshots/EvolutionGraph_bounce_rate.png
+++ b/tests/UI/expected-screenshots/EvolutionGraph_bounce_rate.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:2a7578d136d0239fd10e9d31dd62a25df82d3e2fba621fcb9c1a91cf79e16de8
-size 105448
+oid sha256:35ffcdb418dfd3d030440202f3489c923fae5373c2e5f36bb0b481c4aad67cc3
+size 105185
diff --git a/tests/UI/expected-screenshots/EvolutionGraph_initial.png b/tests/UI/expected-screenshots/EvolutionGraph_initial.png
index 5ac541c5a4..b24b625694 100644
--- a/tests/UI/expected-screenshots/EvolutionGraph_initial.png
+++ b/tests/UI/expected-screenshots/EvolutionGraph_initial.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:2a146aef71baf8d4ec8d40a8e987b3ec63a0cf94ba352dc28ecfdc056ea7320d
-size 47068
+oid sha256:c05b765bdfc7ddc231326154c086ccca055a45c84479b629c2510fe293e79452
+size 47271
diff --git a/tests/UI/expected-screenshots/Morpheus_load.png b/tests/UI/expected-screenshots/Morpheus_load.png
index aa8dde7314..b482c0dd35 100644
--- a/tests/UI/expected-screenshots/Morpheus_load.png
+++ b/tests/UI/expected-screenshots/Morpheus_load.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:b22962c13f73dafd96f26d588529445ec295c3b37010b24fe81e4b7c860969c9
-size 1196468
+oid sha256:cbd2ad65a2e01659e930b8fbde4c9ed44cbd132cdf4be1b774c6d5c6bb85d7e0
+size 1196543
diff --git a/tests/UI/expected-screenshots/MultiSitesTest_all_websites.png b/tests/UI/expected-screenshots/MultiSitesTest_all_websites.png
index 907213700d..8d97aff9c9 100644
--- a/tests/UI/expected-screenshots/MultiSitesTest_all_websites.png
+++ b/tests/UI/expected-screenshots/MultiSitesTest_all_websites.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:8d2a78b8dabcd512fab35add93e123ab7db1c366551898b0467742059591082b
-size 76648
+oid sha256:afb5f0d882f8b0790e4fe28af4544c83a38b037e39f7dc77a0ba20de371af0e0
+size 76637
diff --git a/tests/UI/expected-screenshots/MultiSitesTest_all_websites_page_1.png b/tests/UI/expected-screenshots/MultiSitesTest_all_websites_page_1.png
index 907213700d..8d97aff9c9 100644
--- a/tests/UI/expected-screenshots/MultiSitesTest_all_websites_page_1.png
+++ b/tests/UI/expected-screenshots/MultiSitesTest_all_websites_page_1.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:8d2a78b8dabcd512fab35add93e123ab7db1c366551898b0467742059591082b
-size 76648
+oid sha256:afb5f0d882f8b0790e4fe28af4544c83a38b037e39f7dc77a0ba20de371af0e0
+size 76637
diff --git a/tests/UI/expected-screenshots/Overlay_page_new_links.png b/tests/UI/expected-screenshots/Overlay_page_new_links.png
index 40c45e79c9..7e2023f25a 100644
--- a/tests/UI/expected-screenshots/Overlay_page_new_links.png
+++ b/tests/UI/expected-screenshots/Overlay_page_new_links.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:37d5585ce3c48cb49c152a1f7b67dff826e5bad59ce2b0c07298672c99d95b70
-size 105869
+oid sha256:dc9dd34c74e1f3572fa646f289a92c60d5c5dd49a778ff1a5c9af1300cfc72f4
+size 118366
diff --git a/tests/UI/expected-screenshots/RowEvolution_multirow_evolution.png b/tests/UI/expected-screenshots/RowEvolution_multirow_evolution.png
index 42477bc16e..1d441fd44c 100644
--- a/tests/UI/expected-screenshots/RowEvolution_multirow_evolution.png
+++ b/tests/UI/expected-screenshots/RowEvolution_multirow_evolution.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:a2159baa75c3612a2b4d9d64944c3065e5e93d80838a4f6227eaabad89e20a15
-size 47383
+oid sha256:c4cd0c3f213b93cfbfe9cff7c687dc21d9b147c5fee49e5912d5a01734c4cbcf
+size 48596
diff --git a/tests/UI/expected-screenshots/RowEvolution_multirow_evolution_other_metric.png b/tests/UI/expected-screenshots/RowEvolution_multirow_evolution_other_metric.png
index 4e1c7d62fb..f8eac3aba7 100644
--- a/tests/UI/expected-screenshots/RowEvolution_multirow_evolution_other_metric.png
+++ b/tests/UI/expected-screenshots/RowEvolution_multirow_evolution_other_metric.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:2e54922b958a2c461779a7a1b78fd519216cb568c26894bebf731c7d1ed99054
-size 49068
+oid sha256:cd7a06004b82a8fe2a523e578d026739cba77dadd19e8e93e4a2a6198ebbca59
+size 51430
diff --git a/tests/UI/expected-screenshots/Theme_home.png b/tests/UI/expected-screenshots/Theme_home.png
index a21b21832b..a259f28be4 100644
--- a/tests/UI/expected-screenshots/Theme_home.png
+++ b/tests/UI/expected-screenshots/Theme_home.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:24cdccb593c6ba67d2cc860c4158b5aedc330a0f7ac2c217b504d5102f12152a
-size 536808
+oid sha256:2e6fdd9eb56716700d3b1bae0fd0678385447ffd3fe117bf06ed9861c7136ff6
+size 537059
diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_admin_diagnostics_configfile.png b/tests/UI/expected-screenshots/UIIntegrationTest_admin_diagnostics_configfile.png
index 5313bdbaff..92d654820c 100644
--- a/tests/UI/expected-screenshots/UIIntegrationTest_admin_diagnostics_configfile.png
+++ b/tests/UI/expected-screenshots/UIIntegrationTest_admin_diagnostics_configfile.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:f23888721909bb9fdf8f5fc8d9fd1c30a4b38acf7871f2bce8f871e8d7011ea6
-size 3560277
+oid sha256:b1bb94534f9c3934ec11ab71101bfcf9f920a8642fa9f93b031af2d954a3e5cd
+size 3656858
diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_admin_settings_general.png b/tests/UI/expected-screenshots/UIIntegrationTest_admin_settings_general.png
index 08e94bbc9e..ecf4ec3d70 100644
--- a/tests/UI/expected-screenshots/UIIntegrationTest_admin_settings_general.png
+++ b/tests/UI/expected-screenshots/UIIntegrationTest_admin_settings_general.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:127712b381c85f7b7059c74fcb44010591f131ee0ec8eaf0ca9b8e7e2064c770
-size 654055
+oid sha256:c9291466e1d0a7c6779da21f6b5bbf14cb2f8c83c4dc7dc62b3a669c9fe98c14
+size 653985
diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_admin_settings_mobilemessaging_provider.png b/tests/UI/expected-screenshots/UIIntegrationTest_admin_settings_mobilemessaging_provider.png
index 098d3cac1f..8dee64314a 100644
--- a/tests/UI/expected-screenshots/UIIntegrationTest_admin_settings_mobilemessaging_provider.png
+++ b/tests/UI/expected-screenshots/UIIntegrationTest_admin_settings_mobilemessaging_provider.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:d1b6d1d9fba747461f0a176b37369f37bbadf3f45bdfeeda71c9878a3e33a4bb
-size 121517
+oid sha256:4114501817bdf9d848295200329e8bdad1faf8813e15c4dd1584b4704ad86257
+size 152841
diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_dashboard1.png b/tests/UI/expected-screenshots/UIIntegrationTest_dashboard1.png
index fcc21e542a..4ded8a1ed4 100644
--- a/tests/UI/expected-screenshots/UIIntegrationTest_dashboard1.png
+++ b/tests/UI/expected-screenshots/UIIntegrationTest_dashboard1.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:e031150dc2301b35ef6152bad026b8e46de58268560c8c73127c7f0ef87c2884
-size 488287
+oid sha256:40a21bd01fc8adbb2843749b6d501fb6703aa3848adc2551b1db45f796496933
+size 488237
diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_dashboard2.png b/tests/UI/expected-screenshots/UIIntegrationTest_dashboard2.png
index b0e4bc66d1..f6fe7f0843 100644
--- a/tests/UI/expected-screenshots/UIIntegrationTest_dashboard2.png
+++ b/tests/UI/expected-screenshots/UIIntegrationTest_dashboard2.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:c40d0c035178428f43c16012a48aba6b9c212228a523c83d862192508d100df3
-size 1441332
+oid sha256:b299c3b8f869d00c4c5c706b6bc07131cf10ba38139e4d87196cbfc0a1c5bd42
+size 1497267
diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_dashboard3.png b/tests/UI/expected-screenshots/UIIntegrationTest_dashboard3.png
index 93b6f70d28..89fd23a5b5 100644
--- a/tests/UI/expected-screenshots/UIIntegrationTest_dashboard3.png
+++ b/tests/UI/expected-screenshots/UIIntegrationTest_dashboard3.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:7e8bac31646c54e6bf3addbe0286b6f16245a83e3a09558a07d1289cabb27e06
-size 428512
+oid sha256:404dc2c43f0d24df2c9c15adc282b0a0c9b6941b8f88816cf57e1b7b784042e2
+size 428441
diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_dashboard4.png b/tests/UI/expected-screenshots/UIIntegrationTest_dashboard4.png
index 6f6fa331dd..c2864caadd 100644
--- a/tests/UI/expected-screenshots/UIIntegrationTest_dashboard4.png
+++ b/tests/UI/expected-screenshots/UIIntegrationTest_dashboard4.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:a292a770521928f5a79a02fda5385519323ec696f2aac450e92d986a39cbf304
-size 223526
+oid sha256:df77cdbd55ba73e5cb8c9e82647fe27438354a132f6847cd9d813b983cab35b4
+size 223778
diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_dashboard5_mobile.png b/tests/UI/expected-screenshots/UIIntegrationTest_dashboard5_mobile.png
index 6c67cc1d59..84e75c3a85 100644
--- a/tests/UI/expected-screenshots/UIIntegrationTest_dashboard5_mobile.png
+++ b/tests/UI/expected-screenshots/UIIntegrationTest_dashboard5_mobile.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:585a76ee6bd8193036892dd73c6b5ea8fcea0bbb2487b8c153dc33ee9f16422d
-size 27175
+oid sha256:954c9c56b34e8740799dcc00ec042fad7b07e4376a4f4f4d08f0f36bb71b1172
+size 29264
diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_ecommerce_log.png b/tests/UI/expected-screenshots/UIIntegrationTest_ecommerce_log.png
index ee8f18da7b..ca52688032 100644
--- a/tests/UI/expected-screenshots/UIIntegrationTest_ecommerce_log.png
+++ b/tests/UI/expected-screenshots/UIIntegrationTest_ecommerce_log.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:54d5a5bf44ada674991c3ae24e94641cefbb5e44612b27faa454e7ed556eaf13
-size 448409
+oid sha256:e30af083d154a5a3125f4037610d36c8ada3ab4ce67e75d12c4f0ca8535d5707
+size 472701
diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_ecommerce_log_segmented.png b/tests/UI/expected-screenshots/UIIntegrationTest_ecommerce_log_segmented.png
new file mode 100644
index 0000000000..78946b9d5a
--- /dev/null
+++ b/tests/UI/expected-screenshots/UIIntegrationTest_ecommerce_log_segmented.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c3ff7a55a5685ed4056623e165c5ae301edd5fcd0dedfb18197c137d3f427fba
+size 60885
diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_fatal_error_safemode.png b/tests/UI/expected-screenshots/UIIntegrationTest_fatal_error_safemode.png
index 0fc34b7348..fd02ceec3d 100644
--- a/tests/UI/expected-screenshots/UIIntegrationTest_fatal_error_safemode.png
+++ b/tests/UI/expected-screenshots/UIIntegrationTest_fatal_error_safemode.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:0928197e1ce7e33e4080043a11add57af4ef0d597d394e0b2370ef6d68cf5896
-size 202320
+oid sha256:474891899e2f81e9079aba72bb3e48f8cd1a27b24a67aa68e4d10f432685fda1
+size 203076
diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_invalid_idsite.png b/tests/UI/expected-screenshots/UIIntegrationTest_invalid_idsite.png
new file mode 100644
index 0000000000..cd08ac10df
--- /dev/null
+++ b/tests/UI/expected-screenshots/UIIntegrationTest_invalid_idsite.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d12a66e33198fb92cd8282c34db52edb1e8b185c0013612799aba41861824491
+size 34054
diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_invalid_idsite_superuser.png b/tests/UI/expected-screenshots/UIIntegrationTest_invalid_idsite_superuser.png
new file mode 100644
index 0000000000..85b10e80f5
--- /dev/null
+++ b/tests/UI/expected-screenshots/UIIntegrationTest_invalid_idsite_superuser.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d9ecb48b4ca979eb679f2850c45c44ae6ab14b793f63a01f67adbd7cd81204a6
+size 37918
diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_period_select_date_range_click.png b/tests/UI/expected-screenshots/UIIntegrationTest_period_select_date_range_click.png
index d754da9cff..be31bc0727 100644
--- a/tests/UI/expected-screenshots/UIIntegrationTest_period_select_date_range_click.png
+++ b/tests/UI/expected-screenshots/UIIntegrationTest_period_select_date_range_click.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:98b91bf9112dc7eeec77dcf25b8ba1328980693206143a2d6e653a90448de33d
-size 65251
+oid sha256:664c4bcb979875f8c38d9867cbb5a37fff576fa652c0ae3b386939150728ca0a
+size 64873
diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_referrers_campaigns.png b/tests/UI/expected-screenshots/UIIntegrationTest_referrers_campaigns.png
index ca47e8302f..298502dcc7 100644
--- a/tests/UI/expected-screenshots/UIIntegrationTest_referrers_campaigns.png
+++ b/tests/UI/expected-screenshots/UIIntegrationTest_referrers_campaigns.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:42cb386c1179cce6c78303edc5775dbc10afefbe3a82e95f9de51fbfd3f6dee0
-size 37974
+oid sha256:14950e045cb8344354c56f36e717a0503e4eef22429335465b2cadd61182d5c2
+size 70605
diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_referrers_search_engines_keywords.png b/tests/UI/expected-screenshots/UIIntegrationTest_referrers_search_engines_keywords.png
index 80b7468a87..b6383bf1af 100644
--- a/tests/UI/expected-screenshots/UIIntegrationTest_referrers_search_engines_keywords.png
+++ b/tests/UI/expected-screenshots/UIIntegrationTest_referrers_search_engines_keywords.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:46ae4e1a6f608ebdd704c81597571d7641b21bb3e7262f5b266e07a990763e56
-size 97011
+oid sha256:0cf9245e77cc1e4f6e46a84ad258ab0fad70a6742a92cdae3204ab45ff4229e2
+size 97107
diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_segmented_visitorlog.png b/tests/UI/expected-screenshots/UIIntegrationTest_segmented_visitorlog.png
index 8d1a585afa..913f994695 100644
--- a/tests/UI/expected-screenshots/UIIntegrationTest_segmented_visitorlog.png
+++ b/tests/UI/expected-screenshots/UIIntegrationTest_segmented_visitorlog.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:da0c046486ba3267e744047e9e8ca98d9a452f8ac6dc1214f1478e0ee6052315
-size 794021
+oid sha256:f676078148169fadf97bf894b4959bab5ad6c44a97d3f506c259a6bcea3bee6a
+size 732743
diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_visitor_profile_popup.png b/tests/UI/expected-screenshots/UIIntegrationTest_visitor_profile_popup.png
index 188bcf0d0d..9d42ac5a85 100644
--- a/tests/UI/expected-screenshots/UIIntegrationTest_visitor_profile_popup.png
+++ b/tests/UI/expected-screenshots/UIIntegrationTest_visitor_profile_popup.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:b167ae0aa509eed89f1b9fa1104573d808ec0775338bd8e778c9382a5764f36d
-size 243601
+oid sha256:16c49417d58bbf49a923bb79392a8dd26cdf8044b23b827c9f14db50cc540c00
+size 187866
diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_visitors_devices.png b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_devices.png
index 8db5369088..54691afddb 100644
--- a/tests/UI/expected-screenshots/UIIntegrationTest_visitors_devices.png
+++ b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_devices.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:d3ea993fb905140ec9e37c9c8668469415ef0a8c876ffd3f2d01ee52e1f579c8
-size 93832
+oid sha256:1be626ec7d6c0fd1ef7d42e8ed870053a9b08e2c8e4e34da4f2174b613e84d1e
+size 93807
diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_visitors_locations_provider.png b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_locations_provider.png
index e14182cff4..f0c28f6856 100644
--- a/tests/UI/expected-screenshots/UIIntegrationTest_visitors_locations_provider.png
+++ b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_locations_provider.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:154e7aa39b4891cf54a1b8639fc856d8c9b966b5bb3f933d7ff499542bee2db4
-size 172904
+oid sha256:25b260968c60860f6046cac461ec97ca2d2e8498f5227d496fb60c8c89295a58
+size 172614
diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_visitors_realtime_map.png b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_realtime_map.png
index 2beb08cbc3..14fe8762b8 100644
--- a/tests/UI/expected-screenshots/UIIntegrationTest_visitors_realtime_map.png
+++ b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_realtime_map.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:cac417b09917b065ff27f3ace234ccc537e2c99aca6d375c3456f84cfd9d0eeb
-size 113169
+oid sha256:708457e09968c0d581da438ec496bbae755e2c8f648b94e250d051828c1dac4a
+size 112579
diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_visitors_software.png b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_software.png
index c68ac73bc7..6639f86941 100644
--- a/tests/UI/expected-screenshots/UIIntegrationTest_visitors_software.png
+++ b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_software.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:544f3d346718775490b8203f26102e8c49ae9ff2189ac73cdd3ab68e136dcef1
-size 160643
+oid sha256:cb7aafe4c5e9f3425b4a2103e7ac102e276e66c15a7accc946bdafa3198a2107
+size 161150
diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_visitors_times.png b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_times.png
index 20c5c66975..c31420a10e 100644
--- a/tests/UI/expected-screenshots/UIIntegrationTest_visitors_times.png
+++ b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_times.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:1b63981ee583cfcd158b1a3ff3278a530d18934e5e1953373b6445fd5790b31d
-size 24761
+oid sha256:917a030db9152c5693b9694effcb54b93db56be0a6b151da1fa667df167e2049
+size 24374
diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_visitors_with_site_search_visitorlog.png b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_with_site_search_visitorlog.png
index 4440cc5798..dfb544f60f 100644
--- a/tests/UI/expected-screenshots/UIIntegrationTest_visitors_with_site_search_visitorlog.png
+++ b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_with_site_search_visitorlog.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:cf2276f3d97d6a06769672b8daea66634a55d4e3791669b9421560c61cc42b01
-size 107714
+oid sha256:8dc82f3e55494e00ce628b64f12ad7d058b52c6138794ae7d144a7e4f7f84c4c
+size 105563
diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_widgetize_allwebsites.png b/tests/UI/expected-screenshots/UIIntegrationTest_widgetize_allwebsites.png
index 34b4f59632..40f074269e 100644
--- a/tests/UI/expected-screenshots/UIIntegrationTest_widgetize_allwebsites.png
+++ b/tests/UI/expected-screenshots/UIIntegrationTest_widgetize_allwebsites.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:d5cf021f4bd6ba7c9b6a231251d3de9cfb8e15af8b564b42d0c82c8d104c8a2d
-size 72733
+oid sha256:e8acf5a9de7a9b8ab23e474912b28ff40aec6b6bd9fe2eabc5d79cf94275f680
+size 72725
diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_widgetize_ecommercelog.png b/tests/UI/expected-screenshots/UIIntegrationTest_widgetize_ecommercelog.png
index f4a15eebb3..8de89faa1f 100644
--- a/tests/UI/expected-screenshots/UIIntegrationTest_widgetize_ecommercelog.png
+++ b/tests/UI/expected-screenshots/UIIntegrationTest_widgetize_ecommercelog.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:028f3354d882d0ac8291f81e67e64d8e841ca1b9dbd6a68ae473ae7ce06b7b3b
-size 442772
+oid sha256:b13666a16d8bd8593fd4292bd786781ffbe3ddba5f1baaa56e202bf0b2bf953c
+size 451458
diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_widgetize_visitor_log.png b/tests/UI/expected-screenshots/UIIntegrationTest_widgetize_visitor_log.png
index aff97fe1f0..d89211bd12 100644
--- a/tests/UI/expected-screenshots/UIIntegrationTest_widgetize_visitor_log.png
+++ b/tests/UI/expected-screenshots/UIIntegrationTest_widgetize_visitor_log.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:216cb48f4299ef58d9c9c2995ce1cbdbda9d2089811b0d96e9aa90eb09a04236
-size 627627
+oid sha256:15b25e9c9e55e0ac897dbd23ef2fe0529fadf9cacd98012f8b03c024fa49fbb1
+size 688840
diff --git a/tests/UI/expected-screenshots/UsersManager_adminuser_give_view_access_form_opened.png b/tests/UI/expected-screenshots/UsersManager_adminuser_give_view_access_form_opened.png
index 0d0864d5ce..41ca3809d2 100644
--- a/tests/UI/expected-screenshots/UsersManager_adminuser_give_view_access_form_opened.png
+++ b/tests/UI/expected-screenshots/UsersManager_adminuser_give_view_access_form_opened.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:ecc11a6add7dc46e4b7181876d596309b9970ef53a9c70db1a337bbde5a6edaf
-size 39950
+oid sha256:8a72f0e1a92562692654bb8c2e16b612bf9fcaa00a4010b0cf177fb5165a2d91
+size 39955
diff --git a/tests/UI/expected-screenshots/UsersManager_adminuser_give_view_access_no_user_entered.png b/tests/UI/expected-screenshots/UsersManager_adminuser_give_view_access_no_user_entered.png
index a097bd2c07..d9842e000a 100644
--- a/tests/UI/expected-screenshots/UsersManager_adminuser_give_view_access_no_user_entered.png
+++ b/tests/UI/expected-screenshots/UsersManager_adminuser_give_view_access_no_user_entered.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:6c8b80de3887e0da6c618a96c53249a16b31de3540f798226338c07fec0c156b
-size 46249
+oid sha256:8fd5f8b99c2f9e9bbc2c839e800515b54f5777ea6c833b0434de23f150bafb00
+size 46254
diff --git a/tests/UI/expected-screenshots/UsersManager_adminuser_give_view_access_user_already_has_access.png b/tests/UI/expected-screenshots/UsersManager_adminuser_give_view_access_user_already_has_access.png
index 1bacf8afa0..b4769fedcf 100644
--- a/tests/UI/expected-screenshots/UsersManager_adminuser_give_view_access_user_already_has_access.png
+++ b/tests/UI/expected-screenshots/UsersManager_adminuser_give_view_access_user_already_has_access.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:e5b75a4dc04973f1b06b67ef1d221e6acba33e92e8ad9c24e0c548a1ac288fa9
-size 46928
+oid sha256:6bab06ec6ed696401270ccf58550a1ddcc0ed7323e75609efcfbc36c4fe6f20f
+size 46934
diff --git a/tests/UI/expected-screenshots/UsersManager_adminuser_give_view_access_user_not_found.png b/tests/UI/expected-screenshots/UsersManager_adminuser_give_view_access_user_not_found.png
index 6dcbc0f337..7f8a6cc127 100644
--- a/tests/UI/expected-screenshots/UsersManager_adminuser_give_view_access_user_not_found.png
+++ b/tests/UI/expected-screenshots/UsersManager_adminuser_give_view_access_user_not_found.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:24663af8fd0d2adeb4e5c4885a6dbb8f2e03b9b1aea3fde0b51a82ccca0b67ae
-size 48736
+oid sha256:88e726226b2011e06ff3be132bbacca995bb6a31c84726bf6100c33fdd5e05b6
+size 48741
diff --git a/tests/UI/expected-screenshots/UsersManager_adminuser_give_view_access_via_email.png b/tests/UI/expected-screenshots/UsersManager_adminuser_give_view_access_via_email.png
index 77033dd00c..cd382805fc 100644
--- a/tests/UI/expected-screenshots/UsersManager_adminuser_give_view_access_via_email.png
+++ b/tests/UI/expected-screenshots/UsersManager_adminuser_give_view_access_via_email.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:1e83f339e1716e4afff389f9d8bc37656612717e3819f12862ce348722fa9bb2
-size 42095
+oid sha256:ccc51a7de2ac12d7fa4146d5d63d48a33ec4df69811321b615a0ba9623a68fcb
+size 42101
diff --git a/tests/UI/expected-screenshots/UsersManager_adminuser_give_view_access_via_login.png b/tests/UI/expected-screenshots/UsersManager_adminuser_give_view_access_via_login.png
index dd306653f7..daf4dca7d2 100644
--- a/tests/UI/expected-screenshots/UsersManager_adminuser_give_view_access_via_login.png
+++ b/tests/UI/expected-screenshots/UsersManager_adminuser_give_view_access_via_login.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:0d66390c54587a611973b199d7cbeabe08f258bb7c6a987d87a11ee2b2350c48
-size 39384
+oid sha256:ce32c8d6d8f319d2073f8bd71e5553f7dd8bf833e2f5fac98843f8f667e97876
+size 39390
diff --git a/tests/UI/expected-screenshots/UsersManager_loaded_as_admin.png b/tests/UI/expected-screenshots/UsersManager_loaded_as_admin.png
index 8cd9d587fa..07de2887a8 100644
--- a/tests/UI/expected-screenshots/UsersManager_loaded_as_admin.png
+++ b/tests/UI/expected-screenshots/UsersManager_loaded_as_admin.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:acecf579eafd1ab1f48a5a8347b039822af66069104494c852cef0b984c0a48f
-size 36697
+oid sha256:d92de89d497f5218d176557ecf0946ba1a650c1e361116fb0758cbb4979fa706
+size 36703
diff --git a/tests/UI/expected-screenshots/ViewDataTableTest_11_flattened.png b/tests/UI/expected-screenshots/ViewDataTableTest_11_flattened.png
index 8711e209ad..84d8036766 100644
--- a/tests/UI/expected-screenshots/ViewDataTableTest_11_flattened.png
+++ b/tests/UI/expected-screenshots/ViewDataTableTest_11_flattened.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:e205ef29771a9bd531351d66ee207f7e301893e4d9b214d1be49ced93669b622
-size 65037
+oid sha256:9bea7aa77b14b5f33a6180abb6e1791e3dd2bc7e668c8157eb1a64a24ceafb61
+size 66050
diff --git a/tests/UI/expected-screenshots/ViewDataTableTest_12_aggregate_shown.png b/tests/UI/expected-screenshots/ViewDataTableTest_12_aggregate_shown.png
index bae3187e57..88313f60e3 100644
--- a/tests/UI/expected-screenshots/ViewDataTableTest_12_aggregate_shown.png
+++ b/tests/UI/expected-screenshots/ViewDataTableTest_12_aggregate_shown.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:5a1e26b90b295ae91ca7a830822862758fa1e3197aa0b958635895cfeac1b2ef
-size 71028
+oid sha256:b7579b4d9bcf75eb18d9aadb91541a716087088ca4dc2f2485a0bda294356e08
+size 71508
diff --git a/tests/UI/expected-screenshots/ViewDataTableTest_related_report_click.png b/tests/UI/expected-screenshots/ViewDataTableTest_related_report_click.png
index 8eeb243a0e..0aa5456715 100644
--- a/tests/UI/expected-screenshots/ViewDataTableTest_related_report_click.png
+++ b/tests/UI/expected-screenshots/ViewDataTableTest_related_report_click.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:03e6dced21f3097b4da767b4c148f25bd2f95a6f4a0470845b655700d8c0e437
-size 38735
+oid sha256:967b6adf1b7f51b671200860c4626eb913e11ab5314f6044a614e12262fb6cb5
+size 38787
diff --git a/tests/UI/expected-screenshots/ViewDataTableTest_subtables_loaded.png b/tests/UI/expected-screenshots/ViewDataTableTest_subtables_loaded.png
index 81a7ba915f..9b4e00c8be 100644
--- a/tests/UI/expected-screenshots/ViewDataTableTest_subtables_loaded.png
+++ b/tests/UI/expected-screenshots/ViewDataTableTest_subtables_loaded.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:1fddef92dd6c82ab2b30d9dfe5b390021d26f96fd6820838a6ab79a860dbd6ca
-size 70794
+oid sha256:63023d24fadff099ede1fc04ac0cf80e62e096e66cfa62788fb3c96e91a4131c
+size 71043
diff --git a/tests/UI/specs/ActionsDataTable_spec.js b/tests/UI/specs/ActionsDataTable_spec.js
index 16e8553b3f..17e2743e5e 100644
--- a/tests/UI/specs/ActionsDataTable_spec.js
+++ b/tests/UI/specs/ActionsDataTable_spec.js
@@ -78,6 +78,7 @@ describe("ActionsDataTable", function () {
it("should open the visitor log segmented by the current row", function (done) {
expect.screenshot('segmented_visitor_log').to.be.capture(function (page) {
page.click('tr:contains("thankyou") td.label .actionSegmentVisitorLog');
+ page.wait(1000);
}, done);
});
diff --git a/tests/UI/specs/Dashboard_spec.js b/tests/UI/specs/Dashboard_spec.js
index 9378eecc57..1e2008c3a2 100644
--- a/tests/UI/specs/Dashboard_spec.js
+++ b/tests/UI/specs/Dashboard_spec.js
@@ -133,8 +133,8 @@ describe("Dashboard", function () {
});
it("should open row evolution", function (done) {
- expect.screenshot("rowevolution").to.be.capture(function (page) {
- page.mouseMove('#widgetActionsgetPageUrls table.dataTable tbody tr:contains(thankyou)');
+ expect.screenshot("rowevolution").to.be.captureSelector('.ui-dialog:visible', function (page) {
+ page.mouseMove('#widgetActionsgetPageUrls table.dataTable tbody tr:contains(thankyou) td:first-child', 100);
page.mouseMove('a.actionRowEvolution:visible'); // necessary to get popover to display
page.click('a.actionRowEvolution:visible', 2000);
}, done);
@@ -197,6 +197,11 @@ describe("Dashboard", function () {
page.click('.dashboard-manager .title');
page.click('li[data-action=resetDashboard]');
page.click('.modal.open .modal-footer a:contains(Yes)', 4000);
+ page.evaluate(function(){
+ $('#widgetReferrersgetReferrerType').hide();
+ $('#widgetReferrersgetReferrerType').offsetHeight;
+ $('#widgetReferrersgetReferrerType').show();
+ }, 100);
page.mouseMove('.dashboard-manager');
}, done);
});
diff --git a/tests/UI/specs/Installation_spec.js b/tests/UI/specs/Installation_spec.js
index bc24ec0248..7b80b42a36 100644
--- a/tests/UI/specs/Installation_spec.js
+++ b/tests/UI/specs/Installation_spec.js
@@ -36,6 +36,15 @@ describe("Installation", function () {
it("should display an error message when trying to access a resource w/o a config.ini.php file", function (done) {
expect.screenshot("access_no_config").to.be.capture(function (page) {
page.load("?module=CoreHome&action=index&ignoreClearAllViewDataTableParameters=1");
+
+ page.evaluate(function () {
+ // ensure screenshots are reporting travis config file for comparison
+ // no jQuery existing on these error pages...
+ document.body.innerHTML = document.body.innerHTML.replace(
+ /{\/.*\/test\.config\.ini\.php}/,
+ '{/home/travis/build/piwik/piwik/tests/lib/screenshot-testing/../../../tmp/test.config.ini.php}'
+ );
+ });
}, done);
});
diff --git a/tests/UI/specs/Overlay_spec.js b/tests/UI/specs/Overlay_spec.js
index 578ddf3bba..5ca3eeaacd 100644
--- a/tests/UI/specs/Overlay_spec.js
+++ b/tests/UI/specs/Overlay_spec.js
@@ -70,17 +70,10 @@ describe("Overlay", function () {
it("should show stats for new links when dropdown opened", function (done) {
expect.screenshot("page_new_links").to.be.capture(function (page) {
- var pos = page.webpage.evaluate(function () {
- var iframe = $('iframe'),
- innerOffset = $('.dropdown-toggle', iframe.contents()).offset();
- return {
- x: iframe.offset().left + innerOffset.left + 32, // position is incorrect for some reason w/o adding pixels
- y: iframe.offset().top + innerOffset.top
- };
- });
- page.sendMouseEvent('click', pos);
- page.wait(2000);
-
+ page.reload(2500);
+ page.evaluate(function(){
+ $('.dropdown-toggle', $('iframe').contents())[0].click();
+ }, 500);
removeOptOutIframe(page);
}, done);
});
diff --git a/tests/UI/specs/UIIntegration_spec.js b/tests/UI/specs/UIIntegration_spec.js
index a7d781ae69..814a8526b5 100644
--- a/tests/UI/specs/UIIntegration_spec.js
+++ b/tests/UI/specs/UIIntegration_spec.js
@@ -420,6 +420,13 @@ describe("UIIntegrationTest", function () { // TODO: Rename to Piwik?
}, done);
});
+ it('should load the ecommerce log page with segment', function (done) {
+ this.retries(3);
+ expect.screenshot('ecommerce_log_segmented').to.be.captureSelector('.pageWrap', function (page) {
+ page.load("?" + urlBase + "&segment=countryCode%3D%3DUS#?" + generalParams + "&category=Goals_Ecommerce&subcategory=Goals_EcommerceLog&segment=countryCode%3D%3DUS");
+ }, done);
+ });
+
it('should load the ecommerce products page', function (done) {
expect.screenshot('ecommerce_products').to.be.captureSelector('.pageWrap,.dataTable', function (page) {
page.load("?" + urlBase + "#?" + generalParams + "&category=Goals_Ecommerce&subcategory=Goals_Products");
@@ -562,6 +569,30 @@ describe("UIIntegrationTest", function () { // TODO: Rename to Piwik?
expect.screenshot('fatal_error_safemode').to.be.capture(function (page) {
page.load("?" + generalParams + "&module=CorePluginsAdmin&action=safemode&idSite=1&period=day&date=yesterday&activated"
+ "&error_message=" + message + "&error_file=" + file + "&error_line=" + line + "&tests_hide_piwik_version=1");
+ page.evaluate(function () {
+ var elements = document.querySelectorAll('table tr td:nth-child(2)');
+ for (var i in elements) {
+ if (elements.hasOwnProperty(i) && elements[i].innerText.match(/^[0-9]\.[0-9]\.[0-9]$/)) {
+ elements[i].innerText = '3.0.0'
+ }
+ }
+ });
+ }, done);
+ });
+
+ // invalid site parameter
+ it('should show login form for non super user if invalid idsite given', function (done) {
+ testEnvironment.testUseMockAuth = 0;
+ testEnvironment.save();
+
+ expect.screenshot('invalid_idsite').to.be.capture(function (page) {
+ page.load("?module=CoreHome&action=index&idSite=10006&period=week&date=2017-06-04");
+ }, done);
+ });
+
+ it('should show error for super user if invalid idsite given', function (done) {
+ expect.screenshot('invalid_idsite_superuser').to.be.capture(function (page) {
+ page.load("?module=CoreHome&action=index&idSite=10006&period=week&date=2017-06-04");
}, done);
});
@@ -641,7 +672,7 @@ describe("UIIntegrationTest", function () { // TODO: Rename to Piwik?
page.load("?" + generalParams + "&module=Feedback&action=index");
page.evaluate(function () {
- $('.enrichedHeadline span').each(function () {
+ $('.enrichedHeadline .title').each(function () {
if ($(this).text().indexOf("Piwik") !== -1) {
var replace = $(this).text().replace(/Piwik\s*\d+\.\d+(\.\d+)?([\-a-z]*\d+)?/g, 'Piwik');
$(this).text(replace);
diff --git a/tests/angularjs/bootstrap.js b/tests/angularjs/bootstrap.js
index ef813f5d2c..7809c39e53 100644
--- a/tests/angularjs/bootstrap.js
+++ b/tests/angularjs/bootstrap.js
@@ -19,7 +19,7 @@ piwik.maxDateDay = 29;
piwik.language = "en";
piwik.hasSuperUserAccess = 1;
piwik.config = {};
-piwik.config = {"action_url_category_delimiter":"\/","autocomplete_min_sites":"5","datatable_export_range_as_day":"rss"};
+piwik.config = {"action_url_category_delimiter":"\/","action_title_category_delimiter":"\/","autocomplete_min_sites":"5","datatable_export_range_as_day":"rss"};
var translations = {"CorePluginsAdmin_NoZipFileSelected":"Please select a ZIP file.","General_InvalidDateRange":"Invalid Date Range, Please Try Again","General_Loading":"Loading...","General_Show":"show","General_Hide":"hide","Intl_Year_Short":"yr","General_MultiSitesSummary":"All Websites","CoreHome_YouAreUsingTheLatestVersion":"You are using the latest version of Piwik!","CoreHome_IncludeRowsWithLowPopulation":"Rows with low population are hidden %s Show all rows","CoreHome_ExcludeRowsWithLowPopulation":"All rows are shown %s Exclude low population","CoreHome_DataTableIncludeAggregateRows":"Aggregate rows are hidden %s Show them","CoreHome_DataTableExcludeAggregateRows":"Aggregate rows are shown %s Hide them","CoreHome_Default":"default","CoreHome_PageOf":"%1$s of %2$s","CoreHome_FlattenDataTable":"The report is hierarchical %s Make it flat","CoreHome_UnFlattenDataTable":"The report is flat %s Make it hierarchical","CoreHome_ExternalHelp":"Help (opens in new tab)","SitesManager_NotFound":"No websites found for","Annotations_ViewAndAddAnnotations":"View and add annotations for %s...","General_RowEvolutionRowActionTooltipTitle":"Open Row Evolution","General_RowEvolutionRowActionTooltip":"See how the metrics for this row changed over time","Annotations_IconDesc":"View notes for this date range.","Annotations_IconDescHideNotes":"Hide notes for this date range.","Annotations_HideAnnotationsFor":"Hide annotations for %s...","General_LoadingPopover":"Loading %s...","General_LoadingPopoverFor":"Loading %s for","Intl_Month_Short_StandAlone_1":"Jan","Intl_Month_Short_StandAlone_2":"Feb","Intl_Month_Short_StandAlone_3":"Mar","Intl_Month_Short_StandAlone_4":"Apr","Intl_Month_Short_StandAlone_5":"May","Intl_Month_Short_StandAlone_6":"Jun","Intl_Month_Short_StandAlone_7":"Jul","Intl_Month_Short_StandAlone_8":"Aug","Intl_Month_Short_StandAlone_9":"Sep","Intl_Month_Short_StandAlone_10":"Oct","Intl_Month_Short_StandAlone_11":"Nov","Intl_Month_Short_StandAlone_12":"Dec","Intl_Month_Long_StandAlone_1":"January","Intl_Month_Long_StandAlone_2":"February","Intl_Month_Long_StandAlone_3":"March","Intl_Month_Long_StandAlone_4":"April","Intl_Month_Long_StandAlone_5":"May","Intl_Month_Long_StandAlone_6":"June","Intl_Month_Long_StandAlone_7":"July","Intl_Month_Long_StandAlone_8":"August","Intl_Month_Long_StandAlone_9":"September","Intl_Month_Long_StandAlone_10":"October","Intl_Month_Long_StandAlone_11":"November","Intl_Month_Long_StandAlone_12":"December","Intl_Day_Short_StandAlone_1":"Mon","Intl_Day_Short_StandAlone_2":"Tue","Intl_Day_Short_StandAlone_3":"Wed","Intl_Day_Short_StandAlone_4":"Thu","Intl_Day_Short_StandAlone_5":"Fri","Intl_Day_Short_StandAlone_6":"Sat","Intl_Day_Short_StandAlone_7":"Sun","Intl_Day_Long_StandAlone_1":"Monday","Intl_Day_Long_StandAlone_2":"Tuesday","Intl_Day_Long_StandAlone_3":"Wednesday","Intl_Day_Long_StandAlone_4":"Thursday","Intl_Day_Long_StandAlone_5":"Friday","Intl_Day_Long_StandAlone_6":"Saturday","Intl_Day_Long_StandAlone_7":"Sunday","Intl_Day_Min_StandAlone_1":"Mo","Intl_Day_Min_StandAlone_2":"Tu","Intl_Day_Min_StandAlone_3":"We","Intl_Day_Min_StandAlone_4":"Th","Intl_Day_Min_StandAlone_5":"Fr","Intl_Day_Min_StandAlone_6":"Sa","Intl_Day_Min_StandAlone_7":"Su","General_Search":"Search","General_MoreDetails":"More Details","General_Help":"Help","General_MetricsToPlot":"Metrics to plot","General_MetricToPlot":"Metric to plot","General_RecordsToPlot":"Records to plot","General_SaveImageOnYourComputer":"To save the image on your computer, right click on the image and select \"Save Image As...\"","General_ExportAsImage":"Export as Image","General_NoDataForGraph":"No data for this graph.","Widgetize_OpenInNewWindow":"Open in a new window","Dashboard_LoadingWidget":"Loading widget, please wait...","General_TransitionsRowActionTooltipTitle":"Open Transitions","General_TransitionsRowActionTooltip":"See what visitors did before and after viewing this page","Dashboard_AddPreviewedWidget":"Click to add widget to the dashboard","Dashboard_WidgetPreview":"Widget preview","Dashboard_Maximise":"Maximise","Dashboard_Minimise":"Minimise","Dashboard_WidgetNotFound":"Widget not found","Dashboard_DashboardCopied":"Current dashboard successfully copied to selected user.","General_Close":"Close","General_Refresh":"Refresh","General_Website":"Website","General_ColumnNbVisits":"Visits","General_ColumnPageviews":"Pageviews","General_ColumnRevenue":"Revenue","General_TotalVisitsPageviewsRevenue":"(Total: %s visits, %s pageviews, %s revenue)","General_EvolutionSummaryGeneric":"%1$s in %2$s compared to %3$s in %4$s. Evolution: %5$s","General_AllWebsitesDashboard":"All Websites dashboard","General_NVisits":"%s visits","MultiSites_Evolution":"Evolution","SitesManager_AddSite":"Add a new website","General_Next":"Next","General_Previous":"Previous","General_GoTo":"Go to %s","Dashboard_DashboardOf":"Dashboard of %s","Actions_SubmenuSitesearch":"Site Search","MultiSites_LoadingWebsites":"Loading websites","General_ErrorRequest":"Oops\u2026 problem during the request, please try again.","Goals_AddGoal":"Add Goal","Goals_UpdateGoal":"Update Goal","Goals_DeleteGoalConfirm":"Are you sure you want to delete the Goal %s?","UserCountry_FatalErrorDuringDownload":"A fatal error occurred while downloading this file. There might be something wrong with your internet connection, with the GeoIP database you downloaded or Piwik. Try downloading and installing it manually.","UserCountry_SetupAutomaticUpdatesOfGeoIP":"Setup automatic updates of GeoIP databases","General_Done":"Done","Feedback_ThankYou":"Thank you for helping us to make Piwik better!","Feedback_RateFeatureTitle":"Do you like the '%s' feature? Please rate and leave a comment","Feedback_RateFeatureThankYouTitle":"Thank you for rating '%s'!","Feedback_RateFeatureLeaveMessageLike":"We are glad you like it! Please let us know what you like the most or if you have a feature request.","Feedback_RateFeatureLeaveMessageDislike":"We are sorry to hear you don't like it! Please let us know how we can improve.","Feedback_SendFeedback":"Send Feedback","Feedback_RateFeatureSendFeedbackInformation":"Your Piwik platform will send us (the Piwik team) an email (including your email address) so we can get in contact with you if you have any question.","General_Ok":"Ok","General_OrCancel":"or %s Cancel %s","General_Save":"Save","UsersManager_DeleteConfirm":"Are you sure you want to delete the user %s?","UsersManager_ConfirmGrantSuperUserAccess":"Do you really want to grant '%s' Super User access? Warning: the user will have access to all websites and will be able to perform administrative tasks.","UsersManager_ConfirmProhibitOtherUsersSuperUserAccess":"Do you really want to remove Super User access from '%s'? The user will lose all permissions and access to all websites. Make sure to set permissions to needed websites afterwards if necessary.","UsersManager_ConfirmProhibitMySuperUserAccess":"%s, do you really want to remove your own Super User access? You will lose all permissions and access to all websites and will be logged out from Piwik.","SitesManager_OnlyOneSiteAtTime":"You can only edit one website at a time. Please Save or Cancel your current modifications to the website %s.","SitesManager_DeleteConfirm":"Are you sure you want to delete the website %s?","ScheduledReports_ReportSent":"Report sent","ScheduledReports_ReportUpdated":"Report updated","General_OverlayRowActionTooltipTitle":"Open Page Overlay","General_OverlayRowActionTooltip":"See analytics data directly on your website (opens new tab)","CustomAlerts_InvalidMetricValue":"Value must be numeric","Live_VisitorProfile":"Visitor profile","Live_NoMoreVisits":"There are no more visits for this visitor.","Live_ShowMap":"show map","Live_HideMap":"hide map","Live_PageRefreshed":"Number of times this page was viewed \/ refreshed in a row."};
if(typeof(piwik_translations) == 'undefined') { var piwik_translations = new Object; }for(var i in translations) { piwik_translations[i] = translations[i];}
diff --git a/tests/javascript/index.php b/tests/javascript/index.php
index 163baa40f7..389f8ff4df 100644
--- a/tests/javascript/index.php
+++ b/tests/javascript/index.php
@@ -2104,7 +2104,7 @@ function PiwikTest() {
});
test("API methods", function() {
- expect(87);
+ expect(88);
equal( typeof Piwik.addPlugin, 'function', 'addPlugin' );
equal( typeof Piwik.addPlugin, 'function', 'addTracker' );
@@ -2152,6 +2152,7 @@ function PiwikTest() {
equal( typeof tracker.enableCrossDomainLinking, 'function', 'enableCrossDomainLinking' );
equal( typeof tracker.disableCrossDomainLinking, 'function', 'disableCrossDomainLinking' );
equal( typeof tracker.isCrossDomainLinkingEnabled, 'function', 'isCrossDomainLinkingEnabled' );
+ equal( typeof tracker.setCrossDomainLinkingTimeout, 'function', 'isCrossDomainLinkingEnabled' );
equal( typeof tracker.setIgnoreClasses, 'function', 'setIgnoreClasses' );
equal( typeof tracker.setRequestMethod, 'function', 'setRequestMethod' );
equal( typeof tracker.setRequestContentType, 'function', 'setRequestContentType' );
@@ -2808,8 +2809,8 @@ function PiwikTest() {
var browserId = generateBrowserSpecificId();
strictEqual(true, isSameCrossDomainDevice(String(currentTimestamp) + browserId), "isSameCrossDomainDevice, should return true if browserId is the same and timestamp within 45 seconds" );
- strictEqual(true, isSameCrossDomainDevice(String(currentTimestamp - 42) + browserId), "isSameCrossDomainDevice, should return true if browserId is the same and timestamp within 45 seconds" );
- strictEqual(false, isSameCrossDomainDevice(String(currentTimestamp - 48) + browserId), "isSameCrossDomainDevice, should return false if browserId is the same but timestamp is 46+ seconds old" );
+ strictEqual(true, isSameCrossDomainDevice(String(currentTimestamp - 100) + browserId), "isSameCrossDomainDevice, should return true if browserId is the same and timestamp within 45 seconds" );
+ strictEqual(false, isSameCrossDomainDevice(String(currentTimestamp - 183) + browserId), "isSameCrossDomainDevice, should return false if browserId is the same but timestamp is 181+ seconds old" );
strictEqual(false, isSameCrossDomainDevice(String(currentTimestamp + 2) + browserId), "isSameCrossDomainDevice, should return false if browserId is the same but timestamp was only generated later" );
strictEqual(false, isSameCrossDomainDevice(String(currentTimestamp)), "isSameCrossDomainDevice, should return false if no device ID given" );
strictEqual(false, isSameCrossDomainDevice(browserId), "isSameCrossDomainDevice, should return false if no timestamp given" );
@@ -2853,8 +2854,8 @@ function PiwikTest() {
strictEqual('', makeVisitorIdFromUrl(true, currentTimestamp, 'foobar'), "getVisitorIdFromUrl, should return empty string if visitorId is given but browser ID is not valid" );
strictEqual('', makeVisitorIdFromUrl(true, currentTimestamp, 'fooba'), "getVisitorIdFromUrl, should return empty string if pk_vid has not 32 character but 31" );
strictEqual('', makeVisitorIdFromUrl(true, currentTimestamp, '!test,'), "getVisitorIdFromUrl, should return empty string if pk_vid has invalid characters" );
- strictEqual('', makeVisitorIdFromUrl(true, currentTimestamp + 58, browserId), "getVisitorIdFromUrl, should return empty string if visitorId and browser ID is valid but timestamp is in future" );
- strictEqual('', makeVisitorIdFromUrl(true, currentTimestamp - 58, browserId), "getVisitorIdFromUrl, should return empty string if visitorId and browser ID is valid but timestamp was too long ago" );
+ strictEqual('', makeVisitorIdFromUrl(true, currentTimestamp + 158, browserId), "getVisitorIdFromUrl, should return empty string if visitorId and browser ID is valid but timestamp is in future" );
+ strictEqual('', makeVisitorIdFromUrl(true, currentTimestamp - 188, browserId), "getVisitorIdFromUrl, should return empty string if visitorId and browser ID is valid but timestamp was too long ago" );
strictEqual('900d0d1eb6714aa4', makeVisitorIdFromUrl(true, currentTimestamp - 20, browserId), "getVisitorIdFromUrl, should return the visitorId if browser ID is valid and timestamp is only 20 seconds old" );
function makeReplaceHrefForCrossDomainLink(url) {
@@ -2873,11 +2874,11 @@ function PiwikTest() {
tracker.setUserId('test');
var replacedUrl = makeReplaceHrefForCrossDomainLink('http://www.example.com');
- ok(replacedUrl.indexOf('http://www.example.com?pk_vid=a94a8fe5ccb19ba614') === 0, 'replaceHrefForCrossDomainLink, should set parameters if a URL is given');
+ ok(replacedUrl.indexOf('http://www.example.com?pk_vid=a94a8fe5ccb19ba61') === 0, 'replaceHrefForCrossDomainLink, should set parameters if a URL is given');
ok(replacedUrl.indexOf(browserId) > 20, 'replaceHrefForCrossDomainLink, should set browserId if a url is given');
replacedUrl = makeReplaceHrefForCrossDomainLink(makeUrlWithVisitorId(true, currentTimestamp, 'foobar'));
- ok(replacedUrl.indexOf('http://www.example.com/?pk_vid=a94a8fe5ccb19ba614') === 0, 'replaceHrefForCrossDomainLink, should replace parameters if a URL is given');
+ ok(replacedUrl.indexOf('http://www.example.com/?pk_vid=a94a8fe5ccb19ba61') === 0, 'replaceHrefForCrossDomainLink, should replace parameters if a URL is given');
ok(replacedUrl.indexOf(browserId) > 20, 'replaceHrefForCrossDomainLink, should replace browserId if a URL is given');
@@ -2978,6 +2979,15 @@ function PiwikTest() {
equal( tracker.hook.test._getCookie( cookieName ), expectedValue, 'getCookie(), setCookie()' );
});
+ test("Tracker setSecureCookie(), isSecureCookie()", function() {
+ expect(1);
+
+ var tracker = Piwik.getTracker();
+
+ tracker.hook.test._setSecureCookie(1);
+ equal( tracker.hook.test._isSecureCookie(), 1);
+ });
+
test("Tracker getCookieName() contains website ID", function() {
expect(4);
diff --git a/tests/javascript/piwiktest.js b/tests/javascript/piwiktest.js
index 514d1c5c8c..0909f31dba 100644
--- a/tests/javascript/piwiktest.js
+++ b/tests/javascript/piwiktest.js
@@ -26,7 +26,9 @@ Piwik.addPlugin('testPlugin', {
'_getCookie : getCookie,' +
'_getCookieName : getCookieName,' +
'_setCookie : setCookie,' +
- '_getLinkIfShouldBeProcessed : getLinkIfShouldBeProcessed,' +
+ '_setSecureCookie : setSecureCookie,' +
+ '_isSecureCookie : isSecureCookie,' +
+ '_getLinkIfShouldBeProcessed : getLinkIfShouldBeProcessed,' +
'_encode : encodeWrapper,' +
'_decode : decodeWrapper,' +
'_urldecode : urldecode,' +
diff --git a/tests/lib/screenshot-testing/support/app.js b/tests/lib/screenshot-testing/support/app.js
index 42115a8d79..40e77752ff 100644
--- a/tests/lib/screenshot-testing/support/app.js
+++ b/tests/lib/screenshot-testing/support/app.js
@@ -142,7 +142,7 @@ Application.prototype.loadTestModules = function () {
// we apply this option only if not a specific plugin or test suite was requested. Only there for travis to
// split tests into multiple jobs.
var numTestsFirstHalf = Math.round(mocha.suite.suites.length / 2);
- numTestsFirstHalf += 8;
+ numTestsFirstHalf += 10;
mocha.suite.suites = mocha.suite.suites.filter(function (suite, index) {
if (options['run-first-half-only'] && index < numTestsFirstHalf) {
return true;
diff --git a/tests/lib/screenshot-testing/support/page-renderer.js b/tests/lib/screenshot-testing/support/page-renderer.js
index 1eb7b81214..4800106c96 100644
--- a/tests/lib/screenshot-testing/support/page-renderer.js
+++ b/tests/lib/screenshot-testing/support/page-renderer.js
@@ -248,10 +248,10 @@ PageRenderer.prototype._selectFrame = function (frameNameOrPosition, callback) {
// todo eventually we should also try to find frame by position
var frame = window.jQuery('iframe[name=' + frameName + ']');
- if (!frame.size()) {
+ if (!frame.length) {
frame = window.jQuery('iframe[id=' + frameName + ']');
}
- if (frame.size()) {
+ if (frame.length) {
return frame.offset();
}
diff --git a/tests/resources/screenshot-override/override.css b/tests/resources/screenshot-override/override.css
index bda7f2a260..4a148e4fd9 100644
--- a/tests/resources/screenshot-override/override.css
+++ b/tests/resources/screenshot-override/override.css
@@ -2,10 +2,6 @@
visibility: hidden;
}
-.visitor-profile-widget-link>strong {
- display:none;
-}
-
.visitor-profile-important-visits>div>div>p:first-child {
display:none;
}
diff --git a/tests/travis b/tests/travis
-Subproject 2b964578ba1b74e28699ae75d9fee3402258b5d
+Subproject 14de20c971216ac469e79de374d5bde2d28da2c