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:
authorBen <ben.burgess@innocraft.com>2022-05-25 04:25:04 +0300
committerBen <ben.burgess@innocraft.com>2022-05-25 04:25:04 +0300
commit7a3865b02d6c4511db639d61f6de7e9c216fa675 (patch)
treef73b884c3ce969fba97b391d5652ea0a308d6b7d /plugins/Goals/vue
parent276ed587372cd76f44e51f9a98462c45f1eb8f5c (diff)
parent53c00a78caf96d24dd8f7f74dc8fd74268b312b1 (diff)
Merge branch '4.x-dev' into lockaltlockalt
Diffstat (limited to 'plugins/Goals/vue')
-rw-r--r--plugins/Goals/vue/dist/Goals.umd.js1216
-rw-r--r--plugins/Goals/vue/dist/Goals.umd.min.js27
-rw-r--r--plugins/Goals/vue/dist/umd.metadata.json6
-rw-r--r--plugins/Goals/vue/src/Goal.ts24
-rw-r--r--plugins/Goals/vue/src/GoalPageLink/GoalPageLink.adapter.ts30
-rw-r--r--plugins/Goals/vue/src/GoalPageLink/GoalPageLink.ts69
-rw-r--r--plugins/Goals/vue/src/ManageGoals/ManageGoals.adapter.ts64
-rw-r--r--plugins/Goals/vue/src/ManageGoals/ManageGoals.store.ts24
-rw-r--r--plugins/Goals/vue/src/ManageGoals/ManageGoals.vue840
-rw-r--r--plugins/Goals/vue/src/ManageGoals/PiwikApiMock.ts38
-rw-r--r--plugins/Goals/vue/src/index.ts14
11 files changed, 2352 insertions, 0 deletions
diff --git a/plugins/Goals/vue/dist/Goals.umd.js b/plugins/Goals/vue/dist/Goals.umd.js
new file mode 100644
index 0000000000..c76055a528
--- /dev/null
+++ b/plugins/Goals/vue/dist/Goals.umd.js
@@ -0,0 +1,1216 @@
+(function webpackUniversalModuleDefinition(root, factory) {
+ if(typeof exports === 'object' && typeof module === 'object')
+ module.exports = factory(require("CoreHome"), require("vue"), require("CorePluginsAdmin"));
+ else if(typeof define === 'function' && define.amd)
+ define(["CoreHome", , "CorePluginsAdmin"], factory);
+ else if(typeof exports === 'object')
+ exports["Goals"] = factory(require("CoreHome"), require("vue"), require("CorePluginsAdmin"));
+ else
+ root["Goals"] = factory(root["CoreHome"], root["Vue"], root["CorePluginsAdmin"]);
+})((typeof self !== 'undefined' ? self : this), function(__WEBPACK_EXTERNAL_MODULE__19dc__, __WEBPACK_EXTERNAL_MODULE__8bbf__, __WEBPACK_EXTERNAL_MODULE_a5a2__) {
+return /******/ (function(modules) { // webpackBootstrap
+/******/ // The module cache
+/******/ var installedModules = {};
+/******/
+/******/ // The require function
+/******/ function __webpack_require__(moduleId) {
+/******/
+/******/ // Check if module is in cache
+/******/ if(installedModules[moduleId]) {
+/******/ return installedModules[moduleId].exports;
+/******/ }
+/******/ // Create a new module (and put it into the cache)
+/******/ var module = installedModules[moduleId] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = true;
+/******/
+/******/ // Return the exports of the module
+/******/ return module.exports;
+/******/ }
+/******/
+/******/
+/******/ // expose the modules object (__webpack_modules__)
+/******/ __webpack_require__.m = modules;
+/******/
+/******/ // expose the module cache
+/******/ __webpack_require__.c = installedModules;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "plugins/Goals/vue/dist/";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "fae3");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "19dc":
+/***/ (function(module, exports) {
+
+module.exports = __WEBPACK_EXTERNAL_MODULE__19dc__;
+
+/***/ }),
+
+/***/ "8bbf":
+/***/ (function(module, exports) {
+
+module.exports = __WEBPACK_EXTERNAL_MODULE__8bbf__;
+
+/***/ }),
+
+/***/ "a5a2":
+/***/ (function(module, exports) {
+
+module.exports = __WEBPACK_EXTERNAL_MODULE_a5a2__;
+
+/***/ }),
+
+/***/ "fae3":
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+// ESM COMPAT FLAG
+__webpack_require__.r(__webpack_exports__);
+
+// EXPORTS
+__webpack_require__.d(__webpack_exports__, "GoalPageLink", function() { return /* reexport */ GoalPageLink_GoalPageLink; });
+__webpack_require__.d(__webpack_exports__, "ManageGoals", function() { return /* reexport */ ManageGoals; });
+__webpack_require__.d(__webpack_exports__, "ManageGoalsStore", function() { return /* reexport */ ManageGoals_store; });
+__webpack_require__.d(__webpack_exports__, "PiwikApiMock", function() { return /* reexport */ PiwikApiMock; });
+
+// CONCATENATED MODULE: ./node_modules/@vue/cli-service/lib/commands/build/setPublicPath.js
+// This file is imported into lib/wc client bundles.
+
+if (typeof window !== 'undefined') {
+ var currentScript = window.document.currentScript
+ if (false) { var getCurrentScript; }
+
+ var src = currentScript && currentScript.src.match(/(.+\/)[^/]+\.js(\?.*)?$/)
+ if (src) {
+ __webpack_require__.p = src[1] // eslint-disable-line
+ }
+}
+
+// Indicate to webpack that this file can be concatenated
+/* harmony default export */ var setPublicPath = (null);
+
+// EXTERNAL MODULE: external "CoreHome"
+var external_CoreHome_ = __webpack_require__("19dc");
+
+// CONCATENATED MODULE: ./plugins/Goals/vue/src/GoalPageLink/GoalPageLink.ts
+/*!
+ * Matomo - free/libre analytics platform
+ *
+ * @link https://matomo.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+
+var _window = window,
+ GoalPageLink_$ = _window.$; // usage v-goal-page-link="{ idGoal: 5 }"
+
+var GoalPageLink = {
+ mounted: function mounted(el, binding) {
+ if (!external_CoreHome_["Matomo"].helper.isAngularRenderingThePage()) {
+ return;
+ }
+
+ var title = GoalPageLink_$(el).text();
+ var link = GoalPageLink_$('<a></a>');
+ link.text(title);
+ link.attr('title', Object(external_CoreHome_["translate"])('Goals_ClickToViewThisGoal'));
+ link.click(function (e) {
+ e.preventDefault();
+ external_CoreHome_["MatomoUrl"].updateHash(Object.assign(Object.assign({}, external_CoreHome_["MatomoUrl"].hashParsed.value), {}, {
+ category: 'Goals_Goals',
+ subcategory: binding.value.idGoal
+ }));
+ });
+ GoalPageLink_$(el).html(link[0]);
+ }
+};
+/* harmony default export */ var GoalPageLink_GoalPageLink = (GoalPageLink); // manually handle occurrence of goal-page-link on datatable html attributes since dataTable.js is
+// not managed by vue.
+// eslint-disable-next-line @typescript-eslint/no-explicit-any
+
+external_CoreHome_["Matomo"].on('Matomo.processDynamicHtml', function ($element) {
+ $element.find('[goal-page-link]').each(function (i, e) {
+ if (GoalPageLink_$(e).attr('goal-page-link-handled')) {
+ return;
+ }
+
+ var idGoal = GoalPageLink_$(e).attr('goal-page-link');
+
+ if (idGoal) {
+ GoalPageLink.mounted(e, {
+ instance: null,
+ value: {
+ idGoal: idGoal
+ },
+ oldValue: null,
+ modifiers: {},
+ dir: {}
+ });
+ }
+
+ GoalPageLink_$(e).attr('goal-page-link-handled', '1');
+ });
+});
+// CONCATENATED MODULE: ./plugins/Goals/vue/src/GoalPageLink/GoalPageLink.adapter.ts
+/*!
+ * Matomo - free/libre analytics platform
+ *
+ * @link https://matomo.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+
+function piwikGoalPageLink() {
+ return {
+ restrict: 'A',
+ link: function piwikGoalPageLinkLink(scope, element, attrs) {
+ var binding = {
+ instance: null,
+ value: {
+ idGoal: attrs.piwikGoalPageLink
+ },
+ oldValue: null,
+ modifiers: {},
+ dir: {}
+ };
+ GoalPageLink_GoalPageLink.mounted(element[0], binding);
+ }
+ };
+}
+window.angular.module('piwikApp').directive('piwikGoalPageLink', piwikGoalPageLink);
+// EXTERNAL MODULE: external {"commonjs":"vue","commonjs2":"vue","root":"Vue"}
+var external_commonjs_vue_commonjs2_vue_root_Vue_ = __webpack_require__("8bbf");
+
+// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/templateLoader.js??ref--6!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/Goals/vue/src/ManageGoals/ManageGoals.vue?vue&type=template&id=6e40977d
+
+var _hoisted_1 = {
+ class: "manageGoals"
+};
+var _hoisted_2 = {
+ id: "entityEditContainer",
+ feature: "true",
+ class: "managegoals"
+};
+var _hoisted_3 = {
+ class: "contentHelp"
+};
+var _hoisted_4 = ["innerHTML"];
+var _hoisted_5 = {
+ key: 0
+};
+
+var _hoisted_6 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1);
+
+var _hoisted_7 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1);
+
+var _hoisted_8 = ["innerHTML"];
+var _hoisted_9 = {
+ class: "first"
+};
+var _hoisted_10 = {
+ key: 1
+};
+var _hoisted_11 = {
+ key: 2
+};
+var _hoisted_12 = {
+ key: 0
+};
+var _hoisted_13 = {
+ colspan: "8"
+};
+
+var _hoisted_14 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1);
+
+var _hoisted_15 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1);
+
+var _hoisted_16 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1);
+
+var _hoisted_17 = ["id"];
+var _hoisted_18 = {
+ class: "first"
+};
+var _hoisted_19 = {
+ class: "matchAttribute"
+};
+var _hoisted_20 = {
+ key: 0
+};
+var _hoisted_21 = {
+ key: 1
+};
+
+var _hoisted_22 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1);
+
+var _hoisted_23 = ["innerHTML"];
+var _hoisted_24 = {
+ key: 1,
+ style: {
+ "padding-top": "2px"
+ }
+};
+var _hoisted_25 = ["onClick", "title"];
+
+var _hoisted_26 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", {
+ class: "icon-edit"
+}, null, -1);
+
+var _hoisted_27 = [_hoisted_26];
+var _hoisted_28 = {
+ key: 2,
+ style: {
+ "padding-top": "2px"
+ }
+};
+var _hoisted_29 = ["onClick", "title"];
+
+var _hoisted_30 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", {
+ class: "icon-delete"
+}, null, -1);
+
+var _hoisted_31 = [_hoisted_30];
+var _hoisted_32 = {
+ key: 0,
+ class: "tableActionBar"
+};
+
+var _hoisted_33 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", {
+ class: "icon-add"
+}, null, -1);
+
+var _hoisted_34 = {
+ class: "ui-confirm",
+ ref: "confirm"
+};
+var _hoisted_35 = ["value"];
+var _hoisted_36 = ["value"];
+var _hoisted_37 = {
+ class: "addEditGoal"
+};
+var _hoisted_38 = ["innerHTML"];
+var _hoisted_39 = {
+ class: "row goalIsTriggeredWhen"
+};
+var _hoisted_40 = {
+ class: "col s12"
+};
+var _hoisted_41 = {
+ class: "row"
+};
+var _hoisted_42 = {
+ class: "col s12 m6 goalTriggerType"
+};
+var _hoisted_43 = {
+ class: "col s12 m6"
+};
+var _hoisted_44 = ["innerHTML"];
+var _hoisted_45 = {
+ class: "row whereTheMatchAttrbiute"
+};
+var _hoisted_46 = {
+ class: "col s12"
+};
+var _hoisted_47 = {
+ class: "row"
+};
+var _hoisted_48 = {
+ class: "col s12 m6 l4"
+};
+var _hoisted_49 = {
+ key: 0,
+ class: "col s12 m6 l4"
+};
+var _hoisted_50 = {
+ key: 1,
+ class: "col s12 m6 l4"
+};
+var _hoisted_51 = {
+ class: "col s12 m6 l4"
+};
+var _hoisted_52 = {
+ id: "examples_pattern",
+ class: "col s12"
+};
+
+var _hoisted_53 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1);
+
+var _hoisted_54 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1);
+
+var _hoisted_55 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1);
+
+var _hoisted_56 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1);
+
+var _hoisted_57 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1);
+
+var _hoisted_58 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1);
+
+var _hoisted_59 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1);
+
+var _hoisted_60 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1);
+
+var _hoisted_61 = {
+ ref: "endedittable"
+};
+
+var _hoisted_62 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("input", {
+ type: "hidden",
+ name: "goalIdUpdate",
+ value: ""
+}, null, -1);
+
+var _hoisted_63 = {
+ key: 0
+};
+var _hoisted_64 = ["innerHTML"];
+
+var _hoisted_65 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", {
+ id: "bottom"
+}, null, -1);
+
+function render(_ctx, _cache, $props, $setup, $data, $options) {
+ var _ctx$goalToDelete;
+
+ var _component_ActivityIndicator = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveComponent"])("ActivityIndicator");
+
+ var _component_ContentBlock = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveComponent"])("ContentBlock");
+
+ var _component_Field = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveComponent"])("Field");
+
+ var _component_Alert = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveComponent"])("Alert");
+
+ var _component_SaveButton = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveComponent"])("SaveButton");
+
+ var _directive_content_table = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveDirective"])("content-table");
+
+ var _directive_form = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveDirective"])("form");
+
+ return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", _hoisted_1, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_2, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_ContentBlock, {
+ "content-title": _ctx.translate('Goals_ManageGoals')
+ }, {
+ default: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withCtx"])(function () {
+ return [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_ActivityIndicator, {
+ loading: _ctx.isLoading
+ }, null, 8, ["loading"]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_3, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", {
+ innerHTML: _ctx.$sanitize(_ctx.learnMoreAboutGoalTracking)
+ }, null, 8, _hoisted_4), !_ctx.ecommerceEnabled ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("span", _hoisted_5, [_hoisted_6, _hoisted_7, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(" " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('Goals_Optional')) + " " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('Goals_Ecommerce')) + ": ", 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", {
+ innerHTML: _ctx.$sanitize(_ctx.youCanEnableEcommerceReports)
+ }, null, 8, _hoisted_8)])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("table", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("thead", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("tr", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("th", _hoisted_9, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_Id')), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("th", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('Goals_GoalName')), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("th", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_Description')), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("th", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('Goals_GoalIsTriggeredWhen')), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("th", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_ColumnRevenue')), 1), _ctx.beforeGoalListActionsHeadComponent ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createBlock"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveDynamicComponent"])(_ctx.beforeGoalListActionsHeadComponent), {
+ key: 0
+ })) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), _ctx.userCanEditGoals ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("th", _hoisted_10, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_Edit')), 1)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), _ctx.userCanEditGoals ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("th", _hoisted_11, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_Delete')), 1)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("tbody", null, [!Object.keys(_ctx.goals || {}).length ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("tr", _hoisted_12, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("td", _hoisted_13, [_hoisted_14, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(" " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('Goals_ThereIsNoGoalToManage', _ctx.siteName)) + " ", 1), _hoisted_15, _hoisted_16])])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])(external_commonjs_vue_commonjs2_vue_root_Vue_["Fragment"], null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["renderList"])(_ctx.goals || [], function (goal) {
+ return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("tr", {
+ id: goal.idgoal,
+ key: goal.idgoal
+ }, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("td", _hoisted_18, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(goal.idgoal), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("td", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(goal.name), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("td", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(goal.description), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("td", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", _hoisted_19, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.goalMatchAttributeTranslations[goal.match_attribute] || goal.match_attribute), 1), goal.match_attribute === 'visit_duration' ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("span", _hoisted_20, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.lcfirst(_ctx.translate('General_OperationGreaterThan'))) + " " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('Intl_NMinutes', goal.pattern)), 1)) : !!goal.pattern_type ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("span", _hoisted_21, [_hoisted_22, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(" " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('Goals_Pattern')) + " " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(goal.pattern_type) + ": " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(goal.pattern), 1)])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("td", {
+ class: "center",
+ innerHTML: _ctx.$sanitize(goal.revenue === 0 || goal.revenue === '0' ? '-' : goal.revenue_pretty)
+ }, null, 8, _hoisted_23), _ctx.beforeGoalListActionsBodyComponent[goal.idgoal] ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createBlock"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveDynamicComponent"])(_ctx.beforeGoalListActionsBodyComponent[goal.idgoal]), {
+ key: 0
+ })) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), _ctx.userCanEditGoals ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("td", _hoisted_24, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("button", {
+ onClick: function onClick($event) {
+ return _ctx.editGoal(goal.idgoal);
+ },
+ class: "table-action",
+ title: _ctx.translate('General_Edit')
+ }, _hoisted_27, 8, _hoisted_25)])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), _ctx.userCanEditGoals ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("td", _hoisted_28, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("button", {
+ onClick: function onClick($event) {
+ return _ctx.deleteGoal(goal.idgoal);
+ },
+ class: "table-action",
+ title: _ctx.translate('General_Delete')
+ }, _hoisted_31, 8, _hoisted_29)])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)], 8, _hoisted_17);
+ }), 128))])], 512), [[_directive_content_table]]), _ctx.userCanEditGoals && !_ctx.onlyShowAddNewGoal ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", _hoisted_32, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("button", {
+ id: "add-goal",
+ onClick: _cache[0] || (_cache[0] = function ($event) {
+ return _ctx.createGoal();
+ })
+ }, [_hoisted_33, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(" " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('Goals_AddNewGoal')), 1)])])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)];
+ }),
+ _: 1
+ }, 8, ["content-title"])], 512), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], _ctx.showGoalList]]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_34, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("h2", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('Goals_DeleteGoalConfirm', "\"".concat((_ctx$goalToDelete = _ctx.goalToDelete) === null || _ctx$goalToDelete === void 0 ? void 0 : _ctx$goalToDelete.name, "\""))), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("input", {
+ role: "yes",
+ type: "button",
+ value: _ctx.translate('General_Yes')
+ }, null, 8, _hoisted_35), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("input", {
+ role: "no",
+ type: "button",
+ value: _ctx.translate('General_No')
+ }, null, 8, _hoisted_36)], 512)], 512), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], !_ctx.onlyShowAddNewGoal]]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_37, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_ContentBlock, {
+ "content-title": _ctx.goal.idgoal ? _ctx.translate('Goals_UpdateGoal') : _ctx.translate('Goals_AddNewGoal')
+ }, {
+ default: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withCtx"])(function () {
+ return [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", {
+ innerHTML: _ctx.$sanitize(_ctx.addNewGoalIntro)
+ }, null, 8, _hoisted_38), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, {
+ uicontrol: "text",
+ name: "goal_name",
+ modelValue: _ctx.goal.name,
+ "onUpdate:modelValue": _cache[1] || (_cache[1] = function ($event) {
+ return _ctx.goal.name = $event;
+ }),
+ maxlength: 50,
+ title: _ctx.translate('Goals_GoalName')
+ }, null, 8, ["modelValue", "title"])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, {
+ uicontrol: "text",
+ name: "goal_description",
+ modelValue: _ctx.goal.description,
+ "onUpdate:modelValue": _cache[2] || (_cache[2] = function ($event) {
+ return _ctx.goal.description = $event;
+ }),
+ maxlength: 255,
+ title: _ctx.translate('General_Description')
+ }, null, 8, ["modelValue", "title"])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_39, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_40, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("h3", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('Goals_GoalIsTriggered')), 1)])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_41, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_42, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, {
+ uicontrol: "select",
+ name: "trigger_type",
+ "model-value": _ctx.triggerType,
+ "onUpdate:modelValue": _cache[3] || (_cache[3] = function ($event) {
+ _ctx.triggerType = $event;
+
+ _ctx.changedTriggerType();
+ }),
+ "full-width": true,
+ options: _ctx.goalTriggerTypeOptions
+ }, null, 8, ["model-value", "options"])])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_43, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Alert, {
+ severity: "info"
+ }, {
+ default: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withCtx"])(function () {
+ return [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", {
+ innerHTML: _ctx.$sanitize(_ctx.whereVisitedPageManuallyCallsJsTrackerText)
+ }, null, 8, _hoisted_44)];
+ }),
+ _: 1
+ }, 512), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], _ctx.triggerType === 'manually']]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, {
+ uicontrol: "radio",
+ name: "match_attribute",
+ "full-width": true,
+ "model-value": _ctx.goal.match_attribute,
+ "onUpdate:modelValue": _cache[4] || (_cache[4] = function ($event) {
+ _ctx.goal.match_attribute = $event;
+
+ _ctx.initPatternType();
+ }),
+ options: _ctx.goalMatchAttributeOptions
+ }, null, 8, ["model-value", "options"]), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], _ctx.triggerType !== 'manually']])])])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_45, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("h3", _hoisted_46, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('Goals_WhereThe')) + " ", 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('Goals_URL')), 513), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], _ctx.goal.match_attribute === 'url']]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('Goals_PageTitle')), 513), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], _ctx.goal.match_attribute === 'title']]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('Goals_Filename')), 513), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], _ctx.goal.match_attribute === 'file']]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('Goals_ExternalWebsiteUrl')), 513), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], _ctx.goal.match_attribute === 'external_website']]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('Goals_VisitDuration')), 513), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], _ctx.goal.match_attribute === 'visit_duration']])])], 512), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], _ctx.triggerType !== 'manually']]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_47, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_48, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, {
+ uicontrol: "select",
+ name: "event_type",
+ modelValue: _ctx.eventType,
+ "onUpdate:modelValue": _cache[5] || (_cache[5] = function ($event) {
+ return _ctx.eventType = $event;
+ }),
+ "full-width": true,
+ options: _ctx.eventTypeOptions
+ }, null, 8, ["modelValue", "options"])])], 512), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], _ctx.goal.match_attribute === 'event']]), !_ctx.isMatchAttributeNumeric ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", _hoisted_49, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, {
+ uicontrol: "select",
+ name: "pattern_type",
+ modelValue: _ctx.goal.pattern_type,
+ "onUpdate:modelValue": _cache[6] || (_cache[6] = function ($event) {
+ return _ctx.goal.pattern_type = $event;
+ }),
+ "full-width": true,
+ options: _ctx.patternTypeOptions
+ }, null, 8, ["modelValue", "options"])])])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), _ctx.isMatchAttributeNumeric ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", _hoisted_50, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, {
+ uicontrol: "select",
+ name: "pattern_type",
+ modelValue: _ctx.goal.pattern_type,
+ "onUpdate:modelValue": _cache[7] || (_cache[7] = function ($event) {
+ return _ctx.goal.pattern_type = $event;
+ }),
+ "full-width": true,
+ options: _ctx.numericComparisonTypeOptions
+ }, null, 8, ["modelValue", "options"])])])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_51, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, {
+ uicontrol: "text",
+ name: "pattern",
+ modelValue: _ctx.goal.pattern,
+ "onUpdate:modelValue": _cache[8] || (_cache[8] = function ($event) {
+ return _ctx.goal.pattern = $event;
+ }),
+ maxlength: 255,
+ title: _ctx.patternFieldLabel,
+ "full-width": true
+ }, null, 8, ["modelValue", "title"])])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_52, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Alert, {
+ severity: "info"
+ }, {
+ default: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withCtx"])(function () {
+ return [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_ForExampleShort')) + " " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('Goals_Contains', "'checkout/confirmation'")) + " ", 1), _hoisted_53, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_ForExampleShort')) + " " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('Goals_IsExactly', "'http://example.com/thank-you.html'")) + " ", 1), _hoisted_54, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_ForExampleShort')) + " " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('Goals_MatchesExpression', "'(.*)\\\/demo\\\/(.*)'")), 1)], 512), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], _ctx.goal.match_attribute === 'url']]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_ForExampleShort')) + " " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('Goals_Contains', "'Order confirmation'")), 513), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], _ctx.goal.match_attribute === 'title']]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_ForExampleShort')) + " " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('Goals_Contains', "'files/brochure.pdf'")) + " ", 1), _hoisted_55, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_ForExampleShort')) + " " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('Goals_IsExactly', "'http://example.com/files/brochure.pdf'")) + " ", 1), _hoisted_56, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_ForExampleShort')) + " " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('Goals_MatchesExpression', "'(.*)\\\.zip'")), 1)], 512), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], _ctx.goal.match_attribute === 'file']]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_ForExampleShort')) + " " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('Goals_Contains', "'amazon.com'")) + " ", 1), _hoisted_57, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_ForExampleShort')) + " " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('Goals_IsExactly', "'http://mypartner.com/landing.html'")) + " ", 1), _hoisted_58, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_ForExampleShort')) + " " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.matchesExpressionExternal), 1)], 512), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], _ctx.goal.match_attribute === 'external_website']]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_ForExampleShort')) + " " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('Goals_Contains', "'video'")) + " ", 1), _hoisted_59, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(" " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_ForExampleShort')) + " " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('Goals_IsExactly', "'click'")) + " ", 1), _hoisted_60, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_ForExampleShort')) + " " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('Goals_MatchesExpression', "'(.*)_banner'")) + "\" ", 1)], 512), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], _ctx.goal.match_attribute === 'event']]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_ForExampleShort')) + " " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('Goals_AtLeastMinutes', '5', '0.5')), 513), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], _ctx.goal.match_attribute === 'visit_duration']])];
+ }),
+ _: 1
+ })])], 512), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], _ctx.triggerType !== 'manually']]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, {
+ uicontrol: "checkbox",
+ name: "case_sensitive",
+ modelValue: _ctx.goal.case_sensitive,
+ "onUpdate:modelValue": _cache[9] || (_cache[9] = function ($event) {
+ return _ctx.goal.case_sensitive = $event;
+ }),
+ title: _ctx.caseSensitiveTitle
+ }, null, 8, ["modelValue", "title"]), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], _ctx.triggerType !== 'manually' && !_ctx.isMatchAttributeNumeric]])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [_ctx.goal.match_attribute !== 'visit_duration' ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createBlock"])(_component_Field, {
+ key: 0,
+ uicontrol: "radio",
+ name: "allow_multiple",
+ "model-value": _ctx.goal.allow_multiple ? 1 : 0,
+ "onUpdate:modelValue": _cache[10] || (_cache[10] = function ($event) {
+ return _ctx.goal.allow_multiple = $event;
+ }),
+ options: _ctx.allowMultipleOptions,
+ introduction: _ctx.translate('Goals_AllowMultipleConversionsPerVisit'),
+ "inline-help": _ctx.translate('Goals_HelpOneConversionPerVisit')
+ }, null, 8, ["model-value", "options", "introduction", "inline-help"])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("h3", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('Goals_GoalRevenue')) + " " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('Goals_Optional')), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, {
+ uicontrol: "number",
+ name: "revenue",
+ modelValue: _ctx.goal.revenue,
+ "onUpdate:modelValue": _cache[11] || (_cache[11] = function ($event) {
+ return _ctx.goal.revenue = $event;
+ }),
+ placeholder: _ctx.translate('Goals_DefaultRevenueLabel'),
+ "inline-help": _ctx.translate('Goals_DefaultRevenueHelp')
+ }, null, 8, ["modelValue", "placeholder", "inline-help"])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, {
+ uicontrol: "checkbox",
+ name: "use_event_value",
+ modelValue: _ctx.goal.event_value_as_revenue,
+ "onUpdate:modelValue": _cache[12] || (_cache[12] = function ($event) {
+ return _ctx.goal.event_value_as_revenue = $event;
+ }),
+ title: _ctx.translate('Goals_UseEventValueAsRevenue'),
+ "inline-help": _ctx.useEventValueAsRevenueHelp
+ }, null, 8, ["modelValue", "title", "inline-help"]), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], _ctx.goal.match_attribute === 'event']])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_61, [_ctx.endEditTableComponent ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createBlock"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveDynamicComponent"])(_ctx.endEditTableComponent), {
+ key: 0
+ })) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)], 512), _hoisted_62, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_SaveButton, {
+ saving: _ctx.isLoading,
+ onConfirm: _cache[13] || (_cache[13] = function ($event) {
+ return _ctx.save();
+ }),
+ value: _ctx.submitText
+ }, null, 8, ["saving", "value"]), !_ctx.onlyShowAddNewGoal ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", _hoisted_63, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", {
+ class: "entityCancel",
+ onClick: _cache[14] || (_cache[14] = function ($event) {
+ return _ctx.showListOfReports();
+ }),
+ innerHTML: _ctx.$sanitize(_ctx.cancelText)
+ }, null, 8, _hoisted_64), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], _ctx.showEditGoal]])])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)], 512), [[_directive_form]])];
+ }),
+ _: 1
+ }, 8, ["content-title"])], 512), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], _ctx.showEditGoal]])], 512), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], _ctx.userCanEditGoals]]), _hoisted_65]);
+}
+// CONCATENATED MODULE: ./plugins/Goals/vue/src/ManageGoals/ManageGoals.vue?vue&type=template&id=6e40977d
+
+// EXTERNAL MODULE: external "CorePluginsAdmin"
+var external_CorePluginsAdmin_ = __webpack_require__("a5a2");
+
+// CONCATENATED MODULE: ./plugins/Goals/vue/src/ManageGoals/PiwikApiMock.ts
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
+
+function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+
+/*!
+* Matomo - free/libre analytics platform
+*
+* @link https://matomo.org
+* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+*/
+// the piwikApi angularjs service is passed in some frontend events to allow plugins to modify
+// a request before it is sent. for the time being in Vue we use this mock, which has the same
+// API as the piwikApi service, to modify the input used with AjaxHelper. this provides BC
+// with for plugins that haven't been converted.
+//
+// should be removed in Matomo 5.
+var PiwikApiMock = /*#__PURE__*/function () {
+ function PiwikApiMock(parameters, options) {
+ _classCallCheck(this, PiwikApiMock);
+
+ _defineProperty(this, "parameters", void 0);
+
+ _defineProperty(this, "options", void 0);
+
+ this.parameters = parameters;
+ this.options = options;
+ }
+
+ _createClass(PiwikApiMock, [{
+ key: "addParams",
+ value: function addParams(params) {
+ Object.assign(this.parameters, params);
+ }
+ }, {
+ key: "withTokenInUrl",
+ value: function withTokenInUrl() {
+ this.options.withTokenInUrl = true;
+ }
+ }, {
+ key: "reset",
+ value: function reset() {
+ var _this = this;
+
+ Object.keys(this.parameters).forEach(function (name) {
+ delete _this.parameters[name];
+ });
+ delete this.options.postParams;
+ }
+ }, {
+ key: "addPostParams",
+ value: function addPostParams(params) {
+ this.options.postParams = Object.assign(Object.assign({}, this.options.postParams), params);
+ }
+ }]);
+
+ return PiwikApiMock;
+}();
+
+
+// CONCATENATED MODULE: ./plugins/Goals/vue/src/ManageGoals/ManageGoals.store.ts
+function ManageGoals_store_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function ManageGoals_store_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function ManageGoals_store_createClass(Constructor, protoProps, staticProps) { if (protoProps) ManageGoals_store_defineProperties(Constructor.prototype, protoProps); if (staticProps) ManageGoals_store_defineProperties(Constructor, staticProps); return Constructor; }
+
+function ManageGoals_store_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+
+/*!
+ * Matomo - free/libre analytics platform
+ *
+ * @link https://matomo.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+
+
+var ManageGoals_store_ManageGoalsStore = /*#__PURE__*/function () {
+ function ManageGoalsStore() {
+ var _this = this;
+
+ ManageGoals_store_classCallCheck(this, ManageGoalsStore);
+
+ ManageGoals_store_defineProperty(this, "privateState", Object(external_commonjs_vue_commonjs2_vue_root_Vue_["reactive"])({}));
+
+ ManageGoals_store_defineProperty(this, "idGoal", Object(external_commonjs_vue_commonjs2_vue_root_Vue_["computed"])(function () {
+ return _this.privateState.idGoal;
+ }));
+ }
+
+ ManageGoals_store_createClass(ManageGoalsStore, [{
+ key: "setIdGoalShown",
+ value: function setIdGoalShown(idGoal) {
+ this.privateState.idGoal = idGoal;
+ }
+ }]);
+
+ return ManageGoalsStore;
+}();
+
+/* harmony default export */ var ManageGoals_store = (new ManageGoals_store_ManageGoalsStore());
+// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-typescript/node_modules/cache-loader/dist/cjs.js??ref--14-0!./node_modules/babel-loader/lib!./node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader??ref--14-2!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/Goals/vue/src/ManageGoals/ManageGoals.vue?vue&type=script&lang=ts
+
+
+
+
+
+/* harmony default export */ var ManageGoalsvue_type_script_lang_ts = (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["defineComponent"])({
+ inheritAttrs: false,
+ props: {
+ onlyShowAddNewGoal: Boolean,
+ userCanEditGoals: Boolean,
+ ecommerceEnabled: Boolean,
+ goals: {
+ type: Object,
+ required: true
+ },
+ addNewGoalIntro: String,
+ goalTriggerTypeOptions: Object,
+ goalMatchAttributeOptions: Array,
+ eventTypeOptions: Array,
+ patternTypeOptions: Array,
+ numericComparisonTypeOptions: Array,
+ allowMultipleOptions: Array,
+ showAddGoal: Boolean,
+ showGoal: Number,
+ beforeGoalListActionsBody: Object,
+ endEditTable: String,
+ beforeGoalListActionsHead: String
+ },
+ data: function data() {
+ return {
+ showEditGoal: false,
+ showGoalList: true,
+ goal: {},
+ isLoading: false,
+ eventType: 'event_category',
+ triggerType: 'visitors',
+ apiMethod: '',
+ submitText: '',
+ goalToDelete: null,
+ addEditTableComponent: false
+ };
+ },
+ components: {
+ SaveButton: external_CorePluginsAdmin_["SaveButton"],
+ ContentBlock: external_CoreHome_["ContentBlock"],
+ ActivityIndicator: external_CoreHome_["ActivityIndicator"],
+ Field: external_CorePluginsAdmin_["Field"],
+ Alert: external_CoreHome_["Alert"]
+ },
+ directives: {
+ ContentTable: external_CoreHome_["ContentTable"],
+ Form: external_CorePluginsAdmin_["Form"]
+ },
+ created: function created() {
+ ManageGoals_store.setIdGoalShown(this.showGoal);
+ },
+ unmounted: function unmounted() {
+ ManageGoals_store.setIdGoalShown(undefined);
+ },
+ mounted: function mounted() {
+ var _this = this;
+
+ if (this.showAddGoal) {
+ this.createGoal();
+ } else if (this.showGoal) {
+ this.editGoal(this.showGoal);
+ } else {
+ this.showListOfReports();
+ } // this component can be used in multiple places, one where
+ // Matomo.helper.compileAngularComponents() is already called, one where it's not.
+ // to make sure this function is only applied once to the slot data, we explicitly do not
+ // add it to vue, then on the next update, add it and call compileAngularComponents()
+
+
+ Object(external_commonjs_vue_commonjs2_vue_root_Vue_["nextTick"])(function () {
+ _this.addEditTableComponent = true;
+ Object(external_commonjs_vue_commonjs2_vue_root_Vue_["nextTick"])(function () {
+ var el = _this.$refs.endedittable;
+ var scope = external_CoreHome_["Matomo"].helper.getAngularDependency('$rootScope').$new(true);
+ $(el).data('scope', scope);
+ external_CoreHome_["Matomo"].helper.compileAngularComponents(el, {
+ scope: scope
+ });
+ });
+ });
+ },
+ beforeUnmount: function beforeUnmount() {
+ var el = this.$refs.endedittable;
+ $(el).data('scope').$destroy();
+ },
+ methods: {
+ scrollToTop: function scrollToTop() {
+ setTimeout(function () {
+ external_CoreHome_["Matomo"].helper.lazyScrollTo('.pageWrap', 200);
+ });
+ },
+ initGoalForm: function initGoalForm(goalMethodAPI, submitText, goalName, description, matchAttribute, pattern, patternType, caseSensitive, revenue, allowMultiple, useEventValueAsRevenue, goalId) {
+ external_CoreHome_["Matomo"].postEvent('Goals.beforeInitGoalForm', goalMethodAPI, goalId);
+ this.apiMethod = goalMethodAPI;
+ this.goal = {};
+ this.goal.name = goalName;
+ this.goal.description = description;
+ var actualMatchAttribute = matchAttribute;
+
+ if (actualMatchAttribute === 'manually') {
+ this.triggerType = 'manually';
+ actualMatchAttribute = 'url';
+ } else {
+ this.triggerType = 'visitors';
+ }
+
+ if (actualMatchAttribute.indexOf('event') === 0) {
+ this.eventType = actualMatchAttribute;
+ actualMatchAttribute = 'event';
+ } else {
+ this.eventType = 'event_category';
+ }
+
+ this.goal.match_attribute = actualMatchAttribute;
+ this.goal.allow_multiple = allowMultiple;
+ this.goal.pattern_type = patternType;
+ this.goal.pattern = pattern;
+ this.goal.case_sensitive = caseSensitive;
+ this.goal.revenue = revenue;
+ this.goal.event_value_as_revenue = useEventValueAsRevenue;
+ this.submitText = submitText;
+ this.goal.idgoal = goalId;
+ },
+ showListOfReports: function showListOfReports() {
+ external_CoreHome_["Matomo"].postEvent('Goals.cancelForm');
+ this.showGoalList = true;
+ this.showEditGoal = false;
+ this.scrollToTop();
+ },
+ showAddEditForm: function showAddEditForm() {
+ this.showGoalList = false;
+ this.showEditGoal = true;
+ },
+ createGoal: function createGoal() {
+ var parameters = {
+ isAllowed: true
+ };
+ external_CoreHome_["Matomo"].postEvent('Goals.initAddGoal', parameters);
+
+ if (parameters && !parameters.isAllowed) {
+ return;
+ }
+
+ this.showAddEditForm();
+ this.initGoalForm('Goals.addGoal', Object(external_CoreHome_["translate"])('Goals_AddGoal'), '', '', 'url', '', 'contains', false, 0, false, false, 0);
+ this.scrollToTop();
+ },
+ editGoal: function editGoal(goalId) {
+ this.showAddEditForm();
+ var goal = this.goals["".concat(goalId)];
+ this.initGoalForm('Goals.updateGoal', Object(external_CoreHome_["translate"])('Goals_UpdateGoal'), goal.name, goal.description, goal.match_attribute, goal.pattern, goal.pattern_type, !!goal.case_sensitive && goal.case_sensitive !== '0', parseInt("".concat(goal.revenue), 10), !!goal.allow_multiple && goal.allow_multiple !== '0', !!goal.event_value_as_revenue && goal.event_value_as_revenue !== '0', goalId);
+ this.scrollToTop();
+ },
+ deleteGoal: function deleteGoal(goalId) {
+ var _this2 = this;
+
+ this.goalToDelete = this.goals["".concat(goalId)];
+ external_CoreHome_["Matomo"].helper.modalConfirm(this.$refs.confirm, {
+ yes: function yes() {
+ _this2.isLoading = true;
+ external_CoreHome_["AjaxHelper"].fetch({
+ idGoal: goalId,
+ method: 'Goals.deleteGoal'
+ }).then(function () {
+ window.location.reload();
+ }).finally(function () {
+ _this2.isLoading = false;
+ });
+ }
+ });
+ },
+ save: function save() {
+ var _this3 = this;
+
+ var parameters = {}; // TODO: test removal of encoding, should be handled by ajax request
+
+ parameters.name = this.goal.name;
+ parameters.description = this.goal.description;
+
+ if (this.isManuallyTriggered) {
+ parameters.matchAttribute = 'manually';
+ parameters.patternType = 'regex';
+ parameters.pattern = '.*';
+ parameters.caseSensitive = 0;
+ } else {
+ parameters.matchAttribute = this.goal.match_attribute;
+
+ if (parameters.matchAttribute === 'event') {
+ parameters.matchAttribute = this.eventType;
+ }
+
+ parameters.patternType = this.goal.pattern_type;
+ parameters.pattern = this.goal.pattern;
+ parameters.caseSensitive = this.goal.case_sensitive ? 1 : 0;
+ }
+
+ parameters.revenue = this.goal.revenue || 0;
+ parameters.allowMultipleConversionsPerVisit = this.goal.allow_multiple ? 1 : 0;
+ parameters.useEventValueAsRevenue = this.goal.event_value_as_revenue ? 1 : 0;
+ parameters.idGoal = this.goal.idgoal;
+ parameters.method = this.apiMethod;
+ var isCreate = parameters.method === 'Goals.addGoal';
+ var isUpdate = parameters.method === 'Goals.updateGoal';
+ var options = {};
+ var piwikApiMock = new PiwikApiMock(parameters, options);
+
+ if (isUpdate) {
+ external_CoreHome_["Matomo"].postEvent('Goals.beforeUpdateGoal', parameters, piwikApiMock);
+ } else if (isCreate) {
+ external_CoreHome_["Matomo"].postEvent('Goals.beforeAddGoal', parameters, piwikApiMock);
+ }
+
+ if (parameters !== null && parameters !== void 0 && parameters.cancelRequest) {
+ return;
+ }
+
+ this.isLoading = true;
+ external_CoreHome_["AjaxHelper"].fetch(parameters, options).then(function () {
+ var subcategory = external_CoreHome_["MatomoUrl"].parsed.value.subcategory;
+
+ if (subcategory === 'Goals_AddNewGoal' && external_CoreHome_["Matomo"].helper.isAngularRenderingThePage()) {
+ // when adding a goal for the first time we need to load manage goals page afterwards
+ external_CoreHome_["ReportingMenuStore"].reloadMenuItems().then(function () {
+ external_CoreHome_["MatomoUrl"].updateHash(Object.assign(Object.assign({}, external_CoreHome_["MatomoUrl"].hashParsed.value), {}, {
+ subcategory: 'Goals_ManageGoals'
+ }));
+ _this3.isLoading = false;
+ });
+ } else {
+ window.location.reload();
+ }
+ }).catch(function () {
+ _this3.scrollToTop();
+
+ _this3.isLoading = false;
+ });
+ },
+ changedTriggerType: function changedTriggerType() {
+ if (!this.isManuallyTriggered && !this.goal.pattern_type) {
+ this.goal.pattern_type = 'contains';
+ }
+ },
+ initPatternType: function initPatternType() {
+ if (this.isMatchAttributeNumeric) {
+ this.goal.pattern_type = 'greater_than';
+ } else {
+ this.goal.pattern_type = 'contains';
+ }
+ },
+ lcfirst: function lcfirst(s) {
+ return "".concat(s.slice(0, 1).toLowerCase()).concat(s.slice(1));
+ },
+ ucfirst: function ucfirst(s) {
+ return "".concat(s.slice(0, 1).toUpperCase()).concat(s.slice(1));
+ }
+ },
+ computed: {
+ learnMoreAboutGoalTracking: function learnMoreAboutGoalTracking() {
+ return Object(external_CoreHome_["translate"])('Goals_LearnMoreAboutGoalTrackingDocumentation', '<a target="_blank" rel="noreferrer noopener" ' + 'href="https://matomo.org/docs/tracking-goals-web-analytics/">', '</a>');
+ },
+ youCanEnableEcommerceReports: function youCanEnableEcommerceReports() {
+ var link = external_CoreHome_["MatomoUrl"].stringify(Object.assign(Object.assign({}, external_CoreHome_["MatomoUrl"].urlParsed.value), {}, {
+ module: 'SitesManager',
+ action: 'index'
+ }));
+ var ecommerceReportsText = '<a href="https://matomo.org/docs/ecommerce-analytics/" ' + "rel=\"noreferrer noopener\" target=\"_blank\">".concat(Object(external_CoreHome_["translate"])('Goals_EcommerceReports'), "</a>");
+ var websiteManageText = "<a href='".concat(link, "'>").concat(Object(external_CoreHome_["translate"])('SitesManager_WebsitesManagement'), "</a>");
+ return Object(external_CoreHome_["translate"])('Goals_YouCanEnableEcommerceReports', ecommerceReportsText, websiteManageText);
+ },
+ siteName: function siteName() {
+ return external_CoreHome_["Matomo"].helper.htmlDecode(external_CoreHome_["Matomo"].siteName);
+ },
+ whereVisitedPageManuallyCallsJsTrackerText: function whereVisitedPageManuallyCallsJsTrackerText() {
+ var link = 'https://developer.matomo.org/guides/tracking-javascript-guide#manually-trigger-goal-conversions';
+ return Object(external_CoreHome_["translate"])('Goals_WhereVisitedPageManuallyCallsJavascriptTrackerLearnMore', "<a target=\"_blank\" rel=\"noreferrer noopener\" href=\"".concat(link, "\">"), '</a>');
+ },
+ caseSensitiveTitle: function caseSensitiveTitle() {
+ return "".concat(Object(external_CoreHome_["translate"])('Goals_CaseSensitive'), " ").concat(Object(external_CoreHome_["translate"])('Goals_Optional'));
+ },
+ useEventValueAsRevenueHelp: function useEventValueAsRevenueHelp() {
+ return "".concat(Object(external_CoreHome_["translate"])('Goals_EventValueAsRevenueHelp'), " <br/><br/> ").concat(Object(external_CoreHome_["translate"])('Goals_EventValueAsRevenueHelp2'));
+ },
+ cancelText: function cancelText() {
+ return Object(external_CoreHome_["translate"])('General_OrCancel', '<a class=\'entityCancelLink\'>', '</a>');
+ },
+ isMatchAttributeNumeric: function isMatchAttributeNumeric() {
+ return ['visit_duration'].indexOf(this.goal.match_attribute) > -1;
+ },
+ patternFieldLabel: function patternFieldLabel() {
+ return this.goal.match_attribute === 'visit_duration' ? Object(external_CoreHome_["translate"])('Goals_TimeInMinutes') : Object(external_CoreHome_["translate"])('Goals_Pattern');
+ },
+ goalMatchAttributeTranslations: function goalMatchAttributeTranslations() {
+ return {
+ manually: Object(external_CoreHome_["translate"])('Goals_ManuallyTriggeredUsingJavascriptFunction'),
+ file: Object(external_CoreHome_["translate"])('Goals_Download'),
+ url: Object(external_CoreHome_["translate"])('Goals_VisitUrl'),
+ title: Object(external_CoreHome_["translate"])('Goals_VisitPageTitle'),
+ external_website: Object(external_CoreHome_["translate"])('Goals_ClickOutlink'),
+ event_action: "".concat(Object(external_CoreHome_["translate"])('Goals_SendEvent'), " (").concat(Object(external_CoreHome_["translate"])('Events_EventAction'), ")"),
+ event_category: "".concat(Object(external_CoreHome_["translate"])('Goals_SendEvent'), " (").concat(Object(external_CoreHome_["translate"])('Events_EventCategory'), ")"),
+ event_name: "".concat(Object(external_CoreHome_["translate"])('Goals_SendEvent'), " (").concat(Object(external_CoreHome_["translate"])('Events_EventName'), ")"),
+ visit_duration: "".concat(this.ucfirst(Object(external_CoreHome_["translate"])('Goals_VisitDuration')))
+ };
+ },
+ beforeGoalListActionsBodyComponent: function beforeGoalListActionsBodyComponent() {
+ var _this4 = this;
+
+ if (!this.beforeGoalListActionsBody) {
+ return {};
+ }
+
+ var componentsByIdGoal = {};
+ Object.values(this.goals).forEach(function (g) {
+ var template = _this4.beforeGoalListActionsBody[g.idgoal];
+
+ if (!template) {
+ return;
+ }
+
+ componentsByIdGoal[g.idgoal] = {
+ template: template
+ };
+ });
+ return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["markRaw"])(componentsByIdGoal);
+ },
+ endEditTableComponent: function endEditTableComponent() {
+ if (!this.endEditTable || !this.addEditTableComponent) {
+ return null;
+ }
+
+ var endedittable = this.$refs.endedittable;
+ return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["markRaw"])({
+ template: this.endEditTable,
+ mounted: function mounted() {
+ external_CoreHome_["Matomo"].helper.compileVueEntryComponents(endedittable);
+ },
+ beforeUnmount: function beforeUnmount() {
+ external_CoreHome_["Matomo"].helper.destroyVueComponent(endedittable);
+ }
+ });
+ },
+ beforeGoalListActionsHeadComponent: function beforeGoalListActionsHeadComponent() {
+ if (!this.beforeGoalListActionsHead) {
+ return null;
+ }
+
+ return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["markRaw"])({
+ template: this.beforeGoalListActionsHead
+ });
+ },
+ isManuallyTriggered: function isManuallyTriggered() {
+ return this.triggerType === 'manually';
+ },
+ matchesExpressionExternal: function matchesExpressionExternal() {
+ var url = "'http://www.amazon.com\\/(.*)\\/yourAffiliateId'";
+ return Object(external_CoreHome_["translate"])('Goals_MatchesExpression', url);
+ }
+ }
+}));
+// CONCATENATED MODULE: ./plugins/Goals/vue/src/ManageGoals/ManageGoals.vue?vue&type=script&lang=ts
+
+// CONCATENATED MODULE: ./plugins/Goals/vue/src/ManageGoals/ManageGoals.vue
+
+
+
+ManageGoalsvue_type_script_lang_ts.render = render
+
+/* harmony default export */ var ManageGoals = (ManageGoalsvue_type_script_lang_ts);
+// CONCATENATED MODULE: ./plugins/Goals/vue/src/ManageGoals/ManageGoals.adapter.ts
+/*!
+ * Matomo - free/libre analytics platform
+ *
+ * @link https://matomo.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+
+
+/* harmony default export */ var ManageGoals_adapter = (Object(external_CoreHome_["createAngularJsAdapter"])({
+ component: ManageGoals,
+ directiveName: 'piwikManageGoals',
+ scope: {
+ userCanEditGoals: {
+ angularJsBind: '<'
+ },
+ onlyShowAddNewGoal: {
+ angularJsBind: '<'
+ },
+ ecommerceEnabled: {
+ angularJsBind: '<'
+ },
+ goals: {
+ angularJsBind: '<'
+ },
+ showGoal: {
+ angularJsBind: '<'
+ },
+ showAddGoal: {
+ angularJsBind: '<'
+ },
+ addNewGoalIntro: {
+ angularJsBind: '<'
+ },
+ goalTriggerTypeOptions: {
+ angularJsBind: '<'
+ },
+ goalMatchAttributeOptions: {
+ angularJsBind: '<'
+ },
+ eventTypeOptions: {
+ angularJsBind: '<'
+ },
+ patternTypeOptions: {
+ angularJsBind: '<'
+ },
+ numericComparisonTypeOptions: {
+ angularJsBind: '<'
+ },
+ allowMultipleOptions: {
+ angularJsBind: '<'
+ },
+ beforeGoalListActionsBody: {
+ angularJsBind: '<'
+ },
+ endEditTable: {
+ angularJsBind: '<'
+ },
+ beforeGoalListActionsHead: {
+ angularJsBind: '<'
+ }
+ }
+}));
+// CONCATENATED MODULE: ./plugins/Goals/vue/src/index.ts
+/*!
+ * Matomo - free/libre analytics platform
+ *
+ * @link https://matomo.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+*/
+
+
+
+
+
+
+// CONCATENATED MODULE: ./node_modules/@vue/cli-service/lib/commands/build/entry-lib-no-default.js
+
+
+
+
+/***/ })
+
+/******/ });
+});
+//# sourceMappingURL=Goals.umd.js.map \ No newline at end of file
diff --git a/plugins/Goals/vue/dist/Goals.umd.min.js b/plugins/Goals/vue/dist/Goals.umd.min.js
new file mode 100644
index 0000000000..f325b1d324
--- /dev/null
+++ b/plugins/Goals/vue/dist/Goals.umd.min.js
@@ -0,0 +1,27 @@
+(function(e,t){"object"===typeof exports&&"object"===typeof module?module.exports=t(require("CoreHome"),require("vue"),require("CorePluginsAdmin")):"function"===typeof define&&define.amd?define(["CoreHome",,"CorePluginsAdmin"],t):"object"===typeof exports?exports["Goals"]=t(require("CoreHome"),require("vue"),require("CorePluginsAdmin")):e["Goals"]=t(e["CoreHome"],e["Vue"],e["CorePluginsAdmin"])})("undefined"!==typeof self?self:this,(function(e,t,a){return function(e){var t={};function a(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,a),o.l=!0,o.exports}return a.m=e,a.c=t,a.d=function(e,t,n){a.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},a.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.t=function(e,t){if(1&t&&(e=a(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(a.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)a.d(n,o,function(t){return e[t]}.bind(null,o));return n},a.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return a.d(t,"a",t),t},a.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},a.p="plugins/Goals/vue/dist/",a(a.s="fae3")}({"19dc":function(t,a){t.exports=e},"8bbf":function(e,a){e.exports=t},a5a2:function(e,t){e.exports=a},fae3:function(e,t,a){"use strict";if(a.r(t),a.d(t,"GoalPageLink",(function(){return s})),a.d(t,"ManageGoals",(function(){return Pe})),a.d(t,"ManageGoalsStore",(function(){return Be})),a.d(t,"PiwikApiMock",(function(){return ke})),"undefined"!==typeof window){var n=window.document.currentScript,o=n&&n.src.match(/(.+\/)[^/]+\.js(\?.*)?$/);o&&(a.p=o[1])}var l=a("19dc"),r=window,i=r.$,c={mounted:function(e,t){if(l["Matomo"].helper.isAngularRenderingThePage()){var a=i(e).text(),n=i("<a></a>");n.text(a),n.attr("title",Object(l["translate"])("Goals_ClickToViewThisGoal")),n.click((function(e){e.preventDefault(),l["MatomoUrl"].updateHash(Object.assign(Object.assign({},l["MatomoUrl"].hashParsed.value),{},{category:"Goals_Goals",subcategory:t.value.idGoal}))})),i(e).html(n[0])}}},s=c;
+/*!
+ * Matomo - free/libre analytics platform
+ *
+ * @link https://matomo.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+function u(){return{restrict:"A",link:function(e,t,a){var n={instance:null,value:{idGoal:a.piwikGoalPageLink},oldValue:null,modifiers:{},dir:{}};s.mounted(t[0],n)}}}l["Matomo"].on("Matomo.processDynamicHtml",(function(e){e.find("[goal-page-link]").each((function(e,t){if(!i(t).attr("goal-page-link-handled")){var a=i(t).attr("goal-page-link");a&&c.mounted(t,{instance:null,value:{idGoal:a},oldValue:null,modifiers:{},dir:{}}),i(t).attr("goal-page-link-handled","1")}}))})),window.angular.module("piwikApp").directive("piwikGoalPageLink",u);var d=a("8bbf"),b={class:"manageGoals"},p={id:"entityEditContainer",feature:"true",class:"managegoals"},m={class:"contentHelp"},O=["innerHTML"],h={key:0},j=Object(d["createElementVNode"])("br",null,null,-1),g=Object(d["createElementVNode"])("br",null,null,-1),v=["innerHTML"],f={class:"first"},y={key:1},G={key:2},_={key:0},E={colspan:"8"},V=Object(d["createElementVNode"])("br",null,null,-1),N=Object(d["createElementVNode"])("br",null,null,-1),w=Object(d["createElementVNode"])("br",null,null,-1),T=["id"],S={class:"first"},k={class:"matchAttribute"},D={key:0},C={key:1},x=Object(d["createElementVNode"])("br",null,null,-1),A=["innerHTML"],M={key:1,style:{"padding-top":"2px"}},B=["onClick","title"],L=Object(d["createElementVNode"])("span",{class:"icon-edit"},null,-1),P=[L],H={key:2,style:{"padding-top":"2px"}},U=["onClick","title"],F=Object(d["createElementVNode"])("span",{class:"icon-delete"},null,-1),I=[F],R={key:0,class:"tableActionBar"},J=Object(d["createElementVNode"])("span",{class:"icon-add"},null,-1),z={class:"ui-confirm",ref:"confirm"},q=["value"],W=["value"],Y={class:"addEditGoal"},K=["innerHTML"],Q={class:"row goalIsTriggeredWhen"},X={class:"col s12"},Z={class:"row"},ee={class:"col s12 m6 goalTriggerType"},te={class:"col s12 m6"},ae=["innerHTML"],ne={class:"row whereTheMatchAttrbiute"},oe={class:"col s12"},le={class:"row"},re={class:"col s12 m6 l4"},ie={key:0,class:"col s12 m6 l4"},ce={key:1,class:"col s12 m6 l4"},se={class:"col s12 m6 l4"},ue={id:"examples_pattern",class:"col s12"},de=Object(d["createElementVNode"])("br",null,null,-1),be=Object(d["createElementVNode"])("br",null,null,-1),pe=Object(d["createElementVNode"])("br",null,null,-1),me=Object(d["createElementVNode"])("br",null,null,-1),Oe=Object(d["createElementVNode"])("br",null,null,-1),he=Object(d["createElementVNode"])("br",null,null,-1),je=Object(d["createElementVNode"])("br",null,null,-1),ge=Object(d["createElementVNode"])("br",null,null,-1),ve={ref:"endedittable"},fe=Object(d["createElementVNode"])("input",{type:"hidden",name:"goalIdUpdate",value:""},null,-1),ye={key:0},Ge=["innerHTML"],_e=Object(d["createElementVNode"])("a",{id:"bottom"},null,-1);function Ee(e,t,a,n,o,l){var r,i=Object(d["resolveComponent"])("ActivityIndicator"),c=Object(d["resolveComponent"])("ContentBlock"),s=Object(d["resolveComponent"])("Field"),u=Object(d["resolveComponent"])("Alert"),L=Object(d["resolveComponent"])("SaveButton"),F=Object(d["resolveDirective"])("content-table"),$=Object(d["resolveDirective"])("form");return Object(d["openBlock"])(),Object(d["createElementBlock"])("div",b,[Object(d["withDirectives"])(Object(d["createElementVNode"])("div",null,[Object(d["withDirectives"])(Object(d["createElementVNode"])("div",p,[Object(d["createVNode"])(c,{"content-title":e.translate("Goals_ManageGoals")},{default:Object(d["withCtx"])((function(){return[Object(d["createVNode"])(i,{loading:e.isLoading},null,8,["loading"]),Object(d["createElementVNode"])("div",m,[Object(d["createElementVNode"])("span",{innerHTML:e.$sanitize(e.learnMoreAboutGoalTracking)},null,8,O),e.ecommerceEnabled?Object(d["createCommentVNode"])("",!0):(Object(d["openBlock"])(),Object(d["createElementBlock"])("span",h,[j,g,Object(d["createTextVNode"])(" "+Object(d["toDisplayString"])(e.translate("Goals_Optional"))+" "+Object(d["toDisplayString"])(e.translate("Goals_Ecommerce"))+": ",1),Object(d["createElementVNode"])("span",{innerHTML:e.$sanitize(e.youCanEnableEcommerceReports)},null,8,v)]))]),Object(d["withDirectives"])(Object(d["createElementVNode"])("table",null,[Object(d["createElementVNode"])("thead",null,[Object(d["createElementVNode"])("tr",null,[Object(d["createElementVNode"])("th",f,Object(d["toDisplayString"])(e.translate("General_Id")),1),Object(d["createElementVNode"])("th",null,Object(d["toDisplayString"])(e.translate("Goals_GoalName")),1),Object(d["createElementVNode"])("th",null,Object(d["toDisplayString"])(e.translate("General_Description")),1),Object(d["createElementVNode"])("th",null,Object(d["toDisplayString"])(e.translate("Goals_GoalIsTriggeredWhen")),1),Object(d["createElementVNode"])("th",null,Object(d["toDisplayString"])(e.translate("General_ColumnRevenue")),1),e.beforeGoalListActionsHeadComponent?(Object(d["openBlock"])(),Object(d["createBlock"])(Object(d["resolveDynamicComponent"])(e.beforeGoalListActionsHeadComponent),{key:0})):Object(d["createCommentVNode"])("",!0),e.userCanEditGoals?(Object(d["openBlock"])(),Object(d["createElementBlock"])("th",y,Object(d["toDisplayString"])(e.translate("General_Edit")),1)):Object(d["createCommentVNode"])("",!0),e.userCanEditGoals?(Object(d["openBlock"])(),Object(d["createElementBlock"])("th",G,Object(d["toDisplayString"])(e.translate("General_Delete")),1)):Object(d["createCommentVNode"])("",!0)])]),Object(d["createElementVNode"])("tbody",null,[Object.keys(e.goals||{}).length?Object(d["createCommentVNode"])("",!0):(Object(d["openBlock"])(),Object(d["createElementBlock"])("tr",_,[Object(d["createElementVNode"])("td",E,[V,Object(d["createTextVNode"])(" "+Object(d["toDisplayString"])(e.translate("Goals_ThereIsNoGoalToManage",e.siteName))+" ",1),N,w])])),(Object(d["openBlock"])(!0),Object(d["createElementBlock"])(d["Fragment"],null,Object(d["renderList"])(e.goals||[],(function(t){return Object(d["openBlock"])(),Object(d["createElementBlock"])("tr",{id:t.idgoal,key:t.idgoal},[Object(d["createElementVNode"])("td",S,Object(d["toDisplayString"])(t.idgoal),1),Object(d["createElementVNode"])("td",null,Object(d["toDisplayString"])(t.name),1),Object(d["createElementVNode"])("td",null,Object(d["toDisplayString"])(t.description),1),Object(d["createElementVNode"])("td",null,[Object(d["createElementVNode"])("span",k,Object(d["toDisplayString"])(e.goalMatchAttributeTranslations[t.match_attribute]||t.match_attribute),1),"visit_duration"===t.match_attribute?(Object(d["openBlock"])(),Object(d["createElementBlock"])("span",D,Object(d["toDisplayString"])(e.lcfirst(e.translate("General_OperationGreaterThan")))+" "+Object(d["toDisplayString"])(e.translate("Intl_NMinutes",t.pattern)),1)):t.pattern_type?(Object(d["openBlock"])(),Object(d["createElementBlock"])("span",C,[x,Object(d["createTextVNode"])(" "+Object(d["toDisplayString"])(e.translate("Goals_Pattern"))+" "+Object(d["toDisplayString"])(t.pattern_type)+": "+Object(d["toDisplayString"])(t.pattern),1)])):Object(d["createCommentVNode"])("",!0)]),Object(d["createElementVNode"])("td",{class:"center",innerHTML:e.$sanitize(0===t.revenue||"0"===t.revenue?"-":t.revenue_pretty)},null,8,A),e.beforeGoalListActionsBodyComponent[t.idgoal]?(Object(d["openBlock"])(),Object(d["createBlock"])(Object(d["resolveDynamicComponent"])(e.beforeGoalListActionsBodyComponent[t.idgoal]),{key:0})):Object(d["createCommentVNode"])("",!0),e.userCanEditGoals?(Object(d["openBlock"])(),Object(d["createElementBlock"])("td",M,[Object(d["createElementVNode"])("button",{onClick:function(a){return e.editGoal(t.idgoal)},class:"table-action",title:e.translate("General_Edit")},P,8,B)])):Object(d["createCommentVNode"])("",!0),e.userCanEditGoals?(Object(d["openBlock"])(),Object(d["createElementBlock"])("td",H,[Object(d["createElementVNode"])("button",{onClick:function(a){return e.deleteGoal(t.idgoal)},class:"table-action",title:e.translate("General_Delete")},I,8,U)])):Object(d["createCommentVNode"])("",!0)],8,T)})),128))])],512),[[F]]),e.userCanEditGoals&&!e.onlyShowAddNewGoal?(Object(d["openBlock"])(),Object(d["createElementBlock"])("div",R,[Object(d["createElementVNode"])("button",{id:"add-goal",onClick:t[0]||(t[0]=function(t){return e.createGoal()})},[J,Object(d["createTextVNode"])(" "+Object(d["toDisplayString"])(e.translate("Goals_AddNewGoal")),1)])])):Object(d["createCommentVNode"])("",!0)]})),_:1},8,["content-title"])],512),[[d["vShow"],e.showGoalList]]),Object(d["createElementVNode"])("div",z,[Object(d["createElementVNode"])("h2",null,Object(d["toDisplayString"])(e.translate("Goals_DeleteGoalConfirm",'"'.concat(null===(r=e.goalToDelete)||void 0===r?void 0:r.name,'"'))),1),Object(d["createElementVNode"])("input",{role:"yes",type:"button",value:e.translate("General_Yes")},null,8,q),Object(d["createElementVNode"])("input",{role:"no",type:"button",value:e.translate("General_No")},null,8,W)],512)],512),[[d["vShow"],!e.onlyShowAddNewGoal]]),Object(d["withDirectives"])(Object(d["createElementVNode"])("div",null,[Object(d["withDirectives"])(Object(d["createElementVNode"])("div",Y,[Object(d["createVNode"])(c,{"content-title":e.goal.idgoal?e.translate("Goals_UpdateGoal"):e.translate("Goals_AddNewGoal")},{default:Object(d["withCtx"])((function(){return[Object(d["createElementVNode"])("div",{innerHTML:e.$sanitize(e.addNewGoalIntro)},null,8,K),Object(d["withDirectives"])(Object(d["createElementVNode"])("div",null,[Object(d["createElementVNode"])("div",null,[Object(d["createVNode"])(s,{uicontrol:"text",name:"goal_name",modelValue:e.goal.name,"onUpdate:modelValue":t[1]||(t[1]=function(t){return e.goal.name=t}),maxlength:50,title:e.translate("Goals_GoalName")},null,8,["modelValue","title"])]),Object(d["createElementVNode"])("div",null,[Object(d["createVNode"])(s,{uicontrol:"text",name:"goal_description",modelValue:e.goal.description,"onUpdate:modelValue":t[2]||(t[2]=function(t){return e.goal.description=t}),maxlength:255,title:e.translate("General_Description")},null,8,["modelValue","title"])]),Object(d["createElementVNode"])("div",Q,[Object(d["createElementVNode"])("div",X,[Object(d["createElementVNode"])("h3",null,Object(d["toDisplayString"])(e.translate("Goals_GoalIsTriggered")),1)])]),Object(d["createElementVNode"])("div",Z,[Object(d["createElementVNode"])("div",ee,[Object(d["createElementVNode"])("div",null,[Object(d["createVNode"])(s,{uicontrol:"select",name:"trigger_type","model-value":e.triggerType,"onUpdate:modelValue":t[3]||(t[3]=function(t){e.triggerType=t,e.changedTriggerType()}),"full-width":!0,options:e.goalTriggerTypeOptions},null,8,["model-value","options"])])]),Object(d["createElementVNode"])("div",te,[Object(d["withDirectives"])(Object(d["createVNode"])(u,{severity:"info"},{default:Object(d["withCtx"])((function(){return[Object(d["createElementVNode"])("span",{innerHTML:e.$sanitize(e.whereVisitedPageManuallyCallsJsTrackerText)},null,8,ae)]})),_:1},512),[[d["vShow"],"manually"===e.triggerType]]),Object(d["createElementVNode"])("div",null,[Object(d["withDirectives"])(Object(d["createVNode"])(s,{uicontrol:"radio",name:"match_attribute","full-width":!0,"model-value":e.goal.match_attribute,"onUpdate:modelValue":t[4]||(t[4]=function(t){e.goal.match_attribute=t,e.initPatternType()}),options:e.goalMatchAttributeOptions},null,8,["model-value","options"]),[[d["vShow"],"manually"!==e.triggerType]])])])]),Object(d["withDirectives"])(Object(d["createElementVNode"])("div",ne,[Object(d["createElementVNode"])("h3",oe,[Object(d["createTextVNode"])(Object(d["toDisplayString"])(e.translate("Goals_WhereThe"))+" ",1),Object(d["withDirectives"])(Object(d["createElementVNode"])("span",null,Object(d["toDisplayString"])(e.translate("Goals_URL")),513),[[d["vShow"],"url"===e.goal.match_attribute]]),Object(d["withDirectives"])(Object(d["createElementVNode"])("span",null,Object(d["toDisplayString"])(e.translate("Goals_PageTitle")),513),[[d["vShow"],"title"===e.goal.match_attribute]]),Object(d["withDirectives"])(Object(d["createElementVNode"])("span",null,Object(d["toDisplayString"])(e.translate("Goals_Filename")),513),[[d["vShow"],"file"===e.goal.match_attribute]]),Object(d["withDirectives"])(Object(d["createElementVNode"])("span",null,Object(d["toDisplayString"])(e.translate("Goals_ExternalWebsiteUrl")),513),[[d["vShow"],"external_website"===e.goal.match_attribute]]),Object(d["withDirectives"])(Object(d["createElementVNode"])("span",null,Object(d["toDisplayString"])(e.translate("Goals_VisitDuration")),513),[[d["vShow"],"visit_duration"===e.goal.match_attribute]])])],512),[[d["vShow"],"manually"!==e.triggerType]]),Object(d["withDirectives"])(Object(d["createElementVNode"])("div",le,[Object(d["withDirectives"])(Object(d["createElementVNode"])("div",re,[Object(d["createElementVNode"])("div",null,[Object(d["createVNode"])(s,{uicontrol:"select",name:"event_type",modelValue:e.eventType,"onUpdate:modelValue":t[5]||(t[5]=function(t){return e.eventType=t}),"full-width":!0,options:e.eventTypeOptions},null,8,["modelValue","options"])])],512),[[d["vShow"],"event"===e.goal.match_attribute]]),e.isMatchAttributeNumeric?Object(d["createCommentVNode"])("",!0):(Object(d["openBlock"])(),Object(d["createElementBlock"])("div",ie,[Object(d["createElementVNode"])("div",null,[Object(d["createVNode"])(s,{uicontrol:"select",name:"pattern_type",modelValue:e.goal.pattern_type,"onUpdate:modelValue":t[6]||(t[6]=function(t){return e.goal.pattern_type=t}),"full-width":!0,options:e.patternTypeOptions},null,8,["modelValue","options"])])])),e.isMatchAttributeNumeric?(Object(d["openBlock"])(),Object(d["createElementBlock"])("div",ce,[Object(d["createElementVNode"])("div",null,[Object(d["createVNode"])(s,{uicontrol:"select",name:"pattern_type",modelValue:e.goal.pattern_type,"onUpdate:modelValue":t[7]||(t[7]=function(t){return e.goal.pattern_type=t}),"full-width":!0,options:e.numericComparisonTypeOptions},null,8,["modelValue","options"])])])):Object(d["createCommentVNode"])("",!0),Object(d["createElementVNode"])("div",se,[Object(d["createElementVNode"])("div",null,[Object(d["createVNode"])(s,{uicontrol:"text",name:"pattern",modelValue:e.goal.pattern,"onUpdate:modelValue":t[8]||(t[8]=function(t){return e.goal.pattern=t}),maxlength:255,title:e.patternFieldLabel,"full-width":!0},null,8,["modelValue","title"])])]),Object(d["createElementVNode"])("div",ue,[Object(d["createVNode"])(u,{severity:"info"},{default:Object(d["withCtx"])((function(){return[Object(d["withDirectives"])(Object(d["createElementVNode"])("span",null,[Object(d["createTextVNode"])(Object(d["toDisplayString"])(e.translate("General_ForExampleShort"))+" "+Object(d["toDisplayString"])(e.translate("Goals_Contains","'checkout/confirmation'"))+" ",1),de,Object(d["createTextVNode"])(Object(d["toDisplayString"])(e.translate("General_ForExampleShort"))+" "+Object(d["toDisplayString"])(e.translate("Goals_IsExactly","'http://example.com/thank-you.html'"))+" ",1),be,Object(d["createTextVNode"])(Object(d["toDisplayString"])(e.translate("General_ForExampleShort"))+" "+Object(d["toDisplayString"])(e.translate("Goals_MatchesExpression","'(.*)\\/demo\\/(.*)'")),1)],512),[[d["vShow"],"url"===e.goal.match_attribute]]),Object(d["withDirectives"])(Object(d["createElementVNode"])("span",null,Object(d["toDisplayString"])(e.translate("General_ForExampleShort"))+" "+Object(d["toDisplayString"])(e.translate("Goals_Contains","'Order confirmation'")),513),[[d["vShow"],"title"===e.goal.match_attribute]]),Object(d["withDirectives"])(Object(d["createElementVNode"])("span",null,[Object(d["createTextVNode"])(Object(d["toDisplayString"])(e.translate("General_ForExampleShort"))+" "+Object(d["toDisplayString"])(e.translate("Goals_Contains","'files/brochure.pdf'"))+" ",1),pe,Object(d["createTextVNode"])(Object(d["toDisplayString"])(e.translate("General_ForExampleShort"))+" "+Object(d["toDisplayString"])(e.translate("Goals_IsExactly","'http://example.com/files/brochure.pdf'"))+" ",1),me,Object(d["createTextVNode"])(Object(d["toDisplayString"])(e.translate("General_ForExampleShort"))+" "+Object(d["toDisplayString"])(e.translate("Goals_MatchesExpression","'(.*)\\.zip'")),1)],512),[[d["vShow"],"file"===e.goal.match_attribute]]),Object(d["withDirectives"])(Object(d["createElementVNode"])("span",null,[Object(d["createTextVNode"])(Object(d["toDisplayString"])(e.translate("General_ForExampleShort"))+" "+Object(d["toDisplayString"])(e.translate("Goals_Contains","'amazon.com'"))+" ",1),Oe,Object(d["createTextVNode"])(Object(d["toDisplayString"])(e.translate("General_ForExampleShort"))+" "+Object(d["toDisplayString"])(e.translate("Goals_IsExactly","'http://mypartner.com/landing.html'"))+" ",1),he,Object(d["createTextVNode"])(Object(d["toDisplayString"])(e.translate("General_ForExampleShort"))+" "+Object(d["toDisplayString"])(e.matchesExpressionExternal),1)],512),[[d["vShow"],"external_website"===e.goal.match_attribute]]),Object(d["withDirectives"])(Object(d["createElementVNode"])("span",null,[Object(d["createTextVNode"])(Object(d["toDisplayString"])(e.translate("General_ForExampleShort"))+" "+Object(d["toDisplayString"])(e.translate("Goals_Contains","'video'"))+" ",1),je,Object(d["createTextVNode"])(" "+Object(d["toDisplayString"])(e.translate("General_ForExampleShort"))+" "+Object(d["toDisplayString"])(e.translate("Goals_IsExactly","'click'"))+" ",1),ge,Object(d["createTextVNode"])(Object(d["toDisplayString"])(e.translate("General_ForExampleShort"))+" "+Object(d["toDisplayString"])(e.translate("Goals_MatchesExpression","'(.*)_banner'"))+'" ',1)],512),[[d["vShow"],"event"===e.goal.match_attribute]]),Object(d["withDirectives"])(Object(d["createElementVNode"])("span",null,Object(d["toDisplayString"])(e.translate("General_ForExampleShort"))+" "+Object(d["toDisplayString"])(e.translate("Goals_AtLeastMinutes","5","0.5")),513),[[d["vShow"],"visit_duration"===e.goal.match_attribute]])]})),_:1})])],512),[[d["vShow"],"manually"!==e.triggerType]]),Object(d["createElementVNode"])("div",null,[Object(d["withDirectives"])(Object(d["createVNode"])(s,{uicontrol:"checkbox",name:"case_sensitive",modelValue:e.goal.case_sensitive,"onUpdate:modelValue":t[9]||(t[9]=function(t){return e.goal.case_sensitive=t}),title:e.caseSensitiveTitle},null,8,["modelValue","title"]),[[d["vShow"],"manually"!==e.triggerType&&!e.isMatchAttributeNumeric]])]),Object(d["createElementVNode"])("div",null,["visit_duration"!==e.goal.match_attribute?(Object(d["openBlock"])(),Object(d["createBlock"])(s,{key:0,uicontrol:"radio",name:"allow_multiple","model-value":e.goal.allow_multiple?1:0,"onUpdate:modelValue":t[10]||(t[10]=function(t){return e.goal.allow_multiple=t}),options:e.allowMultipleOptions,introduction:e.translate("Goals_AllowMultipleConversionsPerVisit"),"inline-help":e.translate("Goals_HelpOneConversionPerVisit")},null,8,["model-value","options","introduction","inline-help"])):Object(d["createCommentVNode"])("",!0)]),Object(d["createElementVNode"])("h3",null,Object(d["toDisplayString"])(e.translate("Goals_GoalRevenue"))+" "+Object(d["toDisplayString"])(e.translate("Goals_Optional")),1),Object(d["createElementVNode"])("div",null,[Object(d["createVNode"])(s,{uicontrol:"number",name:"revenue",modelValue:e.goal.revenue,"onUpdate:modelValue":t[11]||(t[11]=function(t){return e.goal.revenue=t}),placeholder:e.translate("Goals_DefaultRevenueLabel"),"inline-help":e.translate("Goals_DefaultRevenueHelp")},null,8,["modelValue","placeholder","inline-help"])]),Object(d["createElementVNode"])("div",null,[Object(d["withDirectives"])(Object(d["createVNode"])(s,{uicontrol:"checkbox",name:"use_event_value",modelValue:e.goal.event_value_as_revenue,"onUpdate:modelValue":t[12]||(t[12]=function(t){return e.goal.event_value_as_revenue=t}),title:e.translate("Goals_UseEventValueAsRevenue"),"inline-help":e.useEventValueAsRevenueHelp},null,8,["modelValue","title","inline-help"]),[[d["vShow"],"event"===e.goal.match_attribute]])]),Object(d["createElementVNode"])("div",ve,[e.endEditTableComponent?(Object(d["openBlock"])(),Object(d["createBlock"])(Object(d["resolveDynamicComponent"])(e.endEditTableComponent),{key:0})):Object(d["createCommentVNode"])("",!0)],512),fe,Object(d["createVNode"])(L,{saving:e.isLoading,onConfirm:t[13]||(t[13]=function(t){return e.save()}),value:e.submitText},null,8,["saving","value"]),e.onlyShowAddNewGoal?Object(d["createCommentVNode"])("",!0):(Object(d["openBlock"])(),Object(d["createElementBlock"])("div",ye,[Object(d["withDirectives"])(Object(d["createElementVNode"])("div",{class:"entityCancel",onClick:t[14]||(t[14]=function(t){return e.showListOfReports()}),innerHTML:e.$sanitize(e.cancelText)},null,8,Ge),[[d["vShow"],e.showEditGoal]])]))],512),[[$]])]})),_:1},8,["content-title"])],512),[[d["vShow"],e.showEditGoal]])],512),[[d["vShow"],e.userCanEditGoals]]),_e])}var Ve=a("a5a2");function Ne(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function we(e,t){for(var a=0;a<t.length;a++){var n=t[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function Te(e,t,a){return t&&we(e.prototype,t),a&&we(e,a),e}function Se(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}
+/*!
+* Matomo - free/libre analytics platform
+*
+* @link https://matomo.org
+* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+*/var ke=function(){function e(t,a){Ne(this,e),Se(this,"parameters",void 0),Se(this,"options",void 0),this.parameters=t,this.options=a}return Te(e,[{key:"addParams",value:function(e){Object.assign(this.parameters,e)}},{key:"withTokenInUrl",value:function(){this.options.withTokenInUrl=!0}},{key:"reset",value:function(){var e=this;Object.keys(this.parameters).forEach((function(t){delete e.parameters[t]})),delete this.options.postParams}},{key:"addPostParams",value:function(e){this.options.postParams=Object.assign(Object.assign({},this.options.postParams),e)}}]),e}();function De(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Ce(e,t){for(var a=0;a<t.length;a++){var n=t[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function xe(e,t,a){return t&&Ce(e.prototype,t),a&&Ce(e,a),e}function Ae(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}
+/*!
+ * Matomo - free/libre analytics platform
+ *
+ * @link https://matomo.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */var Me=function(){function e(){var t=this;De(this,e),Ae(this,"privateState",Object(d["reactive"])({})),Ae(this,"idGoal",Object(d["computed"])((function(){return t.privateState.idGoal})))}return xe(e,[{key:"setIdGoalShown",value:function(e){this.privateState.idGoal=e}}]),e}(),Be=new Me,Le=Object(d["defineComponent"])({inheritAttrs:!1,props:{onlyShowAddNewGoal:Boolean,userCanEditGoals:Boolean,ecommerceEnabled:Boolean,goals:{type:Object,required:!0},addNewGoalIntro:String,goalTriggerTypeOptions:Object,goalMatchAttributeOptions:Array,eventTypeOptions:Array,patternTypeOptions:Array,numericComparisonTypeOptions:Array,allowMultipleOptions:Array,showAddGoal:Boolean,showGoal:Number,beforeGoalListActionsBody:Object,endEditTable:String,beforeGoalListActionsHead:String},data:function(){return{showEditGoal:!1,showGoalList:!0,goal:{},isLoading:!1,eventType:"event_category",triggerType:"visitors",apiMethod:"",submitText:"",goalToDelete:null,addEditTableComponent:!1}},components:{SaveButton:Ve["SaveButton"],ContentBlock:l["ContentBlock"],ActivityIndicator:l["ActivityIndicator"],Field:Ve["Field"],Alert:l["Alert"]},directives:{ContentTable:l["ContentTable"],Form:Ve["Form"]},created:function(){Be.setIdGoalShown(this.showGoal)},unmounted:function(){Be.setIdGoalShown(void 0)},mounted:function(){var e=this;this.showAddGoal?this.createGoal():this.showGoal?this.editGoal(this.showGoal):this.showListOfReports(),Object(d["nextTick"])((function(){e.addEditTableComponent=!0,Object(d["nextTick"])((function(){var t=e.$refs.endedittable,a=l["Matomo"].helper.getAngularDependency("$rootScope").$new(!0);$(t).data("scope",a),l["Matomo"].helper.compileAngularComponents(t,{scope:a})}))}))},beforeUnmount:function(){var e=this.$refs.endedittable;$(e).data("scope").$destroy()},methods:{scrollToTop:function(){setTimeout((function(){l["Matomo"].helper.lazyScrollTo(".pageWrap",200)}))},initGoalForm:function(e,t,a,n,o,r,i,c,s,u,d,b){l["Matomo"].postEvent("Goals.beforeInitGoalForm",e,b),this.apiMethod=e,this.goal={},this.goal.name=a,this.goal.description=n;var p=o;"manually"===p?(this.triggerType="manually",p="url"):this.triggerType="visitors",0===p.indexOf("event")?(this.eventType=p,p="event"):this.eventType="event_category",this.goal.match_attribute=p,this.goal.allow_multiple=u,this.goal.pattern_type=i,this.goal.pattern=r,this.goal.case_sensitive=c,this.goal.revenue=s,this.goal.event_value_as_revenue=d,this.submitText=t,this.goal.idgoal=b},showListOfReports:function(){l["Matomo"].postEvent("Goals.cancelForm"),this.showGoalList=!0,this.showEditGoal=!1,this.scrollToTop()},showAddEditForm:function(){this.showGoalList=!1,this.showEditGoal=!0},createGoal:function(){var e={isAllowed:!0};l["Matomo"].postEvent("Goals.initAddGoal",e),e&&!e.isAllowed||(this.showAddEditForm(),this.initGoalForm("Goals.addGoal",Object(l["translate"])("Goals_AddGoal"),"","","url","","contains",!1,0,!1,!1,0),this.scrollToTop())},editGoal:function(e){this.showAddEditForm();var t=this.goals["".concat(e)];this.initGoalForm("Goals.updateGoal",Object(l["translate"])("Goals_UpdateGoal"),t.name,t.description,t.match_attribute,t.pattern,t.pattern_type,!!t.case_sensitive&&"0"!==t.case_sensitive,parseInt("".concat(t.revenue),10),!!t.allow_multiple&&"0"!==t.allow_multiple,!!t.event_value_as_revenue&&"0"!==t.event_value_as_revenue,e),this.scrollToTop()},deleteGoal:function(e){var t=this;this.goalToDelete=this.goals["".concat(e)],l["Matomo"].helper.modalConfirm(this.$refs.confirm,{yes:function(){t.isLoading=!0,l["AjaxHelper"].fetch({idGoal:e,method:"Goals.deleteGoal"}).then((function(){window.location.reload()})).finally((function(){t.isLoading=!1}))}})},save:function(){var e=this,t={};t.name=this.goal.name,t.description=this.goal.description,this.isManuallyTriggered?(t.matchAttribute="manually",t.patternType="regex",t.pattern=".*",t.caseSensitive=0):(t.matchAttribute=this.goal.match_attribute,"event"===t.matchAttribute&&(t.matchAttribute=this.eventType),t.patternType=this.goal.pattern_type,t.pattern=this.goal.pattern,t.caseSensitive=this.goal.case_sensitive?1:0),t.revenue=this.goal.revenue||0,t.allowMultipleConversionsPerVisit=this.goal.allow_multiple?1:0,t.useEventValueAsRevenue=this.goal.event_value_as_revenue?1:0,t.idGoal=this.goal.idgoal,t.method=this.apiMethod;var a="Goals.addGoal"===t.method,n="Goals.updateGoal"===t.method,o={},r=new ke(t,o);n?l["Matomo"].postEvent("Goals.beforeUpdateGoal",t,r):a&&l["Matomo"].postEvent("Goals.beforeAddGoal",t,r),null!==t&&void 0!==t&&t.cancelRequest||(this.isLoading=!0,l["AjaxHelper"].fetch(t,o).then((function(){var t=l["MatomoUrl"].parsed.value.subcategory;"Goals_AddNewGoal"===t&&l["Matomo"].helper.isAngularRenderingThePage()?l["ReportingMenuStore"].reloadMenuItems().then((function(){l["MatomoUrl"].updateHash(Object.assign(Object.assign({},l["MatomoUrl"].hashParsed.value),{},{subcategory:"Goals_ManageGoals"})),e.isLoading=!1})):window.location.reload()})).catch((function(){e.scrollToTop(),e.isLoading=!1})))},changedTriggerType:function(){this.isManuallyTriggered||this.goal.pattern_type||(this.goal.pattern_type="contains")},initPatternType:function(){this.isMatchAttributeNumeric?this.goal.pattern_type="greater_than":this.goal.pattern_type="contains"},lcfirst:function(e){return"".concat(e.slice(0,1).toLowerCase()).concat(e.slice(1))},ucfirst:function(e){return"".concat(e.slice(0,1).toUpperCase()).concat(e.slice(1))}},computed:{learnMoreAboutGoalTracking:function(){return Object(l["translate"])("Goals_LearnMoreAboutGoalTrackingDocumentation",'<a target="_blank" rel="noreferrer noopener" href="https://matomo.org/docs/tracking-goals-web-analytics/">',"</a>")},youCanEnableEcommerceReports:function(){var e=l["MatomoUrl"].stringify(Object.assign(Object.assign({},l["MatomoUrl"].urlParsed.value),{},{module:"SitesManager",action:"index"})),t='<a href="https://matomo.org/docs/ecommerce-analytics/" '+'rel="noreferrer noopener" target="_blank">'.concat(Object(l["translate"])("Goals_EcommerceReports"),"</a>"),a="<a href='".concat(e,"'>").concat(Object(l["translate"])("SitesManager_WebsitesManagement"),"</a>");return Object(l["translate"])("Goals_YouCanEnableEcommerceReports",t,a)},siteName:function(){return l["Matomo"].helper.htmlDecode(l["Matomo"].siteName)},whereVisitedPageManuallyCallsJsTrackerText:function(){var e="https://developer.matomo.org/guides/tracking-javascript-guide#manually-trigger-goal-conversions";return Object(l["translate"])("Goals_WhereVisitedPageManuallyCallsJavascriptTrackerLearnMore",'<a target="_blank" rel="noreferrer noopener" href="'.concat(e,'">'),"</a>")},caseSensitiveTitle:function(){return"".concat(Object(l["translate"])("Goals_CaseSensitive")," ").concat(Object(l["translate"])("Goals_Optional"))},useEventValueAsRevenueHelp:function(){return"".concat(Object(l["translate"])("Goals_EventValueAsRevenueHelp")," <br/><br/> ").concat(Object(l["translate"])("Goals_EventValueAsRevenueHelp2"))},cancelText:function(){return Object(l["translate"])("General_OrCancel","<a class='entityCancelLink'>","</a>")},isMatchAttributeNumeric:function(){return["visit_duration"].indexOf(this.goal.match_attribute)>-1},patternFieldLabel:function(){return"visit_duration"===this.goal.match_attribute?Object(l["translate"])("Goals_TimeInMinutes"):Object(l["translate"])("Goals_Pattern")},goalMatchAttributeTranslations:function(){return{manually:Object(l["translate"])("Goals_ManuallyTriggeredUsingJavascriptFunction"),file:Object(l["translate"])("Goals_Download"),url:Object(l["translate"])("Goals_VisitUrl"),title:Object(l["translate"])("Goals_VisitPageTitle"),external_website:Object(l["translate"])("Goals_ClickOutlink"),event_action:"".concat(Object(l["translate"])("Goals_SendEvent")," (").concat(Object(l["translate"])("Events_EventAction"),")"),event_category:"".concat(Object(l["translate"])("Goals_SendEvent")," (").concat(Object(l["translate"])("Events_EventCategory"),")"),event_name:"".concat(Object(l["translate"])("Goals_SendEvent")," (").concat(Object(l["translate"])("Events_EventName"),")"),visit_duration:"".concat(this.ucfirst(Object(l["translate"])("Goals_VisitDuration")))}},beforeGoalListActionsBodyComponent:function(){var e=this;if(!this.beforeGoalListActionsBody)return{};var t={};return Object.values(this.goals).forEach((function(a){var n=e.beforeGoalListActionsBody[a.idgoal];n&&(t[a.idgoal]={template:n})})),Object(d["markRaw"])(t)},endEditTableComponent:function(){if(!this.endEditTable||!this.addEditTableComponent)return null;var e=this.$refs.endedittable;return Object(d["markRaw"])({template:this.endEditTable,mounted:function(){l["Matomo"].helper.compileVueEntryComponents(e)},beforeUnmount:function(){l["Matomo"].helper.destroyVueComponent(e)}})},beforeGoalListActionsHeadComponent:function(){return this.beforeGoalListActionsHead?Object(d["markRaw"])({template:this.beforeGoalListActionsHead}):null},isManuallyTriggered:function(){return"manually"===this.triggerType},matchesExpressionExternal:function(){var e="'http://www.amazon.com\\/(.*)\\/yourAffiliateId'";return Object(l["translate"])("Goals_MatchesExpression",e)}}});Le.render=Ee;var Pe=Le;
+/*!
+ * Matomo - free/libre analytics platform
+ *
+ * @link https://matomo.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */Object(l["createAngularJsAdapter"])({component:Pe,directiveName:"piwikManageGoals",scope:{userCanEditGoals:{angularJsBind:"<"},onlyShowAddNewGoal:{angularJsBind:"<"},ecommerceEnabled:{angularJsBind:"<"},goals:{angularJsBind:"<"},showGoal:{angularJsBind:"<"},showAddGoal:{angularJsBind:"<"},addNewGoalIntro:{angularJsBind:"<"},goalTriggerTypeOptions:{angularJsBind:"<"},goalMatchAttributeOptions:{angularJsBind:"<"},eventTypeOptions:{angularJsBind:"<"},patternTypeOptions:{angularJsBind:"<"},numericComparisonTypeOptions:{angularJsBind:"<"},allowMultipleOptions:{angularJsBind:"<"},beforeGoalListActionsBody:{angularJsBind:"<"},endEditTable:{angularJsBind:"<"},beforeGoalListActionsHead:{angularJsBind:"<"}}})}})}));
+//# sourceMappingURL=Goals.umd.min.js.map \ No newline at end of file
diff --git a/plugins/Goals/vue/dist/umd.metadata.json b/plugins/Goals/vue/dist/umd.metadata.json
new file mode 100644
index 0000000000..dce4477a3c
--- /dev/null
+++ b/plugins/Goals/vue/dist/umd.metadata.json
@@ -0,0 +1,6 @@
+{
+ "dependsOn": [
+ "CoreHome",
+ "CorePluginsAdmin"
+ ]
+} \ No newline at end of file
diff --git a/plugins/Goals/vue/src/Goal.ts b/plugins/Goals/vue/src/Goal.ts
new file mode 100644
index 0000000000..7609ea75ee
--- /dev/null
+++ b/plugins/Goals/vue/src/Goal.ts
@@ -0,0 +1,24 @@
+/*!
+ * Matomo - free/libre analytics platform
+ *
+ * @link https://matomo.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+
+interface Goal {
+ idgoal: string|number;
+ name: string;
+ allow_multiple: string|number|boolean;
+ case_sensitive: string|number|boolean;
+ deleted: string|number|boolean;
+ description: string;
+ event_value_as_revenue: string|number|boolean;
+ idsite: string|number;
+ match_attribute: string;
+ pattern: string;
+ pattern_type: string;
+ revenue: string|number;
+ revenue_pretty?: string;
+}
+
+export default Goal;
diff --git a/plugins/Goals/vue/src/GoalPageLink/GoalPageLink.adapter.ts b/plugins/Goals/vue/src/GoalPageLink/GoalPageLink.adapter.ts
new file mode 100644
index 0000000000..5966c7f3c1
--- /dev/null
+++ b/plugins/Goals/vue/src/GoalPageLink/GoalPageLink.adapter.ts
@@ -0,0 +1,30 @@
+/*!
+ * Matomo - free/libre analytics platform
+ *
+ * @link https://matomo.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+
+import { IAttributes, IDirective, IScope } from 'angular';
+import GoalPageLink from './GoalPageLink';
+
+export default function piwikGoalPageLink(): IDirective {
+ return {
+ restrict: 'A',
+ link: function piwikGoalPageLinkLink(scope: IScope, element: JQuery, attrs: IAttributes) {
+ const binding = {
+ instance: null,
+ value: {
+ idGoal: attrs.piwikGoalPageLink,
+ },
+ oldValue: null,
+ modifiers: {},
+ dir: {},
+ };
+
+ GoalPageLink.mounted(element[0], binding);
+ },
+ };
+}
+
+window.angular.module('piwikApp').directive('piwikGoalPageLink', piwikGoalPageLink);
diff --git a/plugins/Goals/vue/src/GoalPageLink/GoalPageLink.ts b/plugins/Goals/vue/src/GoalPageLink/GoalPageLink.ts
new file mode 100644
index 0000000000..c4a62da735
--- /dev/null
+++ b/plugins/Goals/vue/src/GoalPageLink/GoalPageLink.ts
@@ -0,0 +1,69 @@
+/*!
+ * Matomo - free/libre analytics platform
+ *
+ * @link https://matomo.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+
+import { DirectiveBinding } from 'vue';
+import { Matomo, translate, MatomoUrl } from 'CoreHome';
+
+interface GoalPageLinkArgs {
+ idGoal: string|number;
+}
+
+const { $ } = window;
+
+// usage v-goal-page-link="{ idGoal: 5 }"
+const GoalPageLink = {
+ mounted(el: HTMLElement, binding: DirectiveBinding<GoalPageLinkArgs>): void {
+ if (!Matomo.helper.isAngularRenderingThePage()) {
+ return;
+ }
+
+ const title = $(el).text();
+
+ const link = $('<a></a>');
+ link.text(title);
+ link.attr('title', translate('Goals_ClickToViewThisGoal'));
+ link.click((e) => {
+ e.preventDefault();
+
+ MatomoUrl.updateHash({
+ ...MatomoUrl.hashParsed.value,
+ category: 'Goals_Goals',
+ subcategory: binding.value.idGoal,
+ });
+ });
+
+ $(el).html(link[0]);
+ },
+};
+
+export default GoalPageLink;
+
+// manually handle occurrence of goal-page-link on datatable html attributes since dataTable.js is
+// not managed by vue.
+// eslint-disable-next-line @typescript-eslint/no-explicit-any
+Matomo.on('Matomo.processDynamicHtml', ($element: JQuery) => {
+ $element.find('[goal-page-link]').each((i, e) => {
+ if ($(e).attr('goal-page-link-handled')) {
+ return;
+ }
+
+ const idGoal = $(e).attr('goal-page-link');
+ if (idGoal) {
+ GoalPageLink.mounted(e, {
+ instance: null,
+ value: {
+ idGoal,
+ },
+ oldValue: null,
+ modifiers: {},
+ dir: {},
+ });
+ }
+
+ $(e).attr('goal-page-link-handled', '1');
+ });
+});
diff --git a/plugins/Goals/vue/src/ManageGoals/ManageGoals.adapter.ts b/plugins/Goals/vue/src/ManageGoals/ManageGoals.adapter.ts
new file mode 100644
index 0000000000..72237788a8
--- /dev/null
+++ b/plugins/Goals/vue/src/ManageGoals/ManageGoals.adapter.ts
@@ -0,0 +1,64 @@
+/*!
+ * Matomo - free/libre analytics platform
+ *
+ * @link https://matomo.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+
+import { createAngularJsAdapter } from 'CoreHome';
+import ManageGoals from './ManageGoals.vue';
+
+export default createAngularJsAdapter({
+ component: ManageGoals,
+ directiveName: 'piwikManageGoals',
+ scope: {
+ userCanEditGoals: {
+ angularJsBind: '<',
+ },
+ onlyShowAddNewGoal: {
+ angularJsBind: '<',
+ },
+ ecommerceEnabled: {
+ angularJsBind: '<',
+ },
+ goals: {
+ angularJsBind: '<',
+ },
+ showGoal: {
+ angularJsBind: '<',
+ },
+ showAddGoal: {
+ angularJsBind: '<',
+ },
+ addNewGoalIntro: {
+ angularJsBind: '<',
+ },
+ goalTriggerTypeOptions: {
+ angularJsBind: '<',
+ },
+ goalMatchAttributeOptions: {
+ angularJsBind: '<',
+ },
+ eventTypeOptions: {
+ angularJsBind: '<',
+ },
+ patternTypeOptions: {
+ angularJsBind: '<',
+ },
+ numericComparisonTypeOptions: {
+ angularJsBind: '<',
+ },
+ allowMultipleOptions: {
+ angularJsBind: '<',
+ },
+ beforeGoalListActionsBody: {
+ angularJsBind: '<',
+ },
+ endEditTable: {
+ angularJsBind: '<',
+ },
+ beforeGoalListActionsHead: {
+ angularJsBind: '<',
+ },
+ },
+});
diff --git a/plugins/Goals/vue/src/ManageGoals/ManageGoals.store.ts b/plugins/Goals/vue/src/ManageGoals/ManageGoals.store.ts
new file mode 100644
index 0000000000..d6c09809b4
--- /dev/null
+++ b/plugins/Goals/vue/src/ManageGoals/ManageGoals.store.ts
@@ -0,0 +1,24 @@
+/*!
+ * Matomo - free/libre analytics platform
+ *
+ * @link https://matomo.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+
+import { computed, reactive } from 'vue';
+
+interface ManageGoalsStoreState {
+ idGoal?: number;
+}
+
+class ManageGoalsStore {
+ private privateState = reactive<ManageGoalsStoreState>({});
+
+ readonly idGoal = computed(() => this.privateState.idGoal);
+
+ setIdGoalShown(idGoal?: number) {
+ this.privateState.idGoal = idGoal;
+ }
+}
+
+export default new ManageGoalsStore();
diff --git a/plugins/Goals/vue/src/ManageGoals/ManageGoals.vue b/plugins/Goals/vue/src/ManageGoals/ManageGoals.vue
new file mode 100644
index 0000000000..0e155fd934
--- /dev/null
+++ b/plugins/Goals/vue/src/ManageGoals/ManageGoals.vue
@@ -0,0 +1,840 @@
+<!--
+ Matomo - free/libre analytics platform
+ @link https://matomo.org
+ @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+-->
+
+<template>
+ <div class="manageGoals">
+ <!-- v-show required until funnels/multiattribution are using vue and not angularjs -->
+ <div v-show="!onlyShowAddNewGoal">
+ <div
+ id='entityEditContainer'
+ feature="true"
+ v-show="showGoalList"
+ class="managegoals"
+ >
+ <ContentBlock :content-title="translate('Goals_ManageGoals')">
+ <ActivityIndicator :loading="isLoading"/>
+
+ <div class="contentHelp">
+ <span v-html="$sanitize(learnMoreAboutGoalTracking)"/>
+ <span v-if="!ecommerceEnabled">
+ <br /><br/>
+
+ {{ translate('Goals_Optional') }} {{ translate('Goals_Ecommerce') }}:
+ <span v-html="$sanitize(youCanEnableEcommerceReports)"/>
+ </span>
+ </div>
+
+ <table v-content-table>
+ <thead>
+ <tr>
+ <th class="first">{{ translate('General_Id') }}</th>
+ <th>{{ translate('Goals_GoalName') }}</th>
+ <th>{{ translate('General_Description') }}</th>
+ <th>{{ translate('Goals_GoalIsTriggeredWhen') }}</th>
+ <th>{{ translate('General_ColumnRevenue') }}</th>
+
+ <component
+ v-if="beforeGoalListActionsHeadComponent"
+ :is="beforeGoalListActionsHeadComponent"
+ ></component>
+
+ <th v-if="userCanEditGoals">{{ translate('General_Edit') }}</th>
+ <th v-if="userCanEditGoals">{{ translate('General_Delete') }}</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr v-if="!Object.keys(goals || {}).length">
+ <td colspan='8'>
+ <br/>
+ {{ translate('Goals_ThereIsNoGoalToManage', siteName) }}
+ <br/><br/>
+ </td>
+ </tr>
+ <tr v-for="goal in goals || []" :id="goal.idgoal" :key="goal.idgoal">
+ <td class="first">{{ goal.idgoal }}</td>
+ <td>{{ goal.name }}</td>
+ <td>{{ goal.description }}</td>
+ <td>
+ <span class='matchAttribute'>
+ {{ goalMatchAttributeTranslations[goal.match_attribute]
+ || goal.match_attribute }}
+ </span>
+ <span v-if="goal.match_attribute === 'visit_duration'">
+ {{ lcfirst(translate('General_OperationGreaterThan')) }}
+ {{ translate('Intl_NMinutes', goal.pattern) }}
+ </span>
+ <span v-else-if="!!goal.pattern_type">
+ <br/>
+ {{ translate('Goals_Pattern') }} {{ goal.pattern_type }}: {{ goal.pattern }}
+ </span>
+ </td>
+ <td
+ class="center"
+ v-html="$sanitize(
+ goal.revenue === 0 || goal.revenue === '0' ? '-' : goal.revenue_pretty,
+ )"
+ >
+ </td>
+
+ <component
+ v-if="beforeGoalListActionsBodyComponent[goal.idgoal]"
+ :is="beforeGoalListActionsBodyComponent[goal.idgoal]"
+ ></component>
+
+ <td v-if="userCanEditGoals" style="padding-top:2px">
+ <button
+ @click="editGoal(goal.idgoal)"
+ class="table-action"
+ :title="translate('General_Edit')"
+ >
+ <span class="icon-edit"></span>
+ </button>
+ </td>
+ <td v-if="userCanEditGoals" style="padding-top:2px">
+ <button
+ @click="deleteGoal(goal.idgoal)"
+ class="table-action"
+ :title="translate('General_Delete')"
+ >
+ <span class="icon-delete"></span>
+ </button>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+ <div class="tableActionBar" v-if="userCanEditGoals && !onlyShowAddNewGoal">
+ <button id="add-goal" @click="createGoal()">
+ <span class="icon-add"></span>
+ {{ translate('Goals_AddNewGoal') }}
+ </button>
+ </div>
+ </ContentBlock>
+ </div>
+
+ <div class="ui-confirm" ref="confirm">
+ <h2>{{ translate('Goals_DeleteGoalConfirm', `"${goalToDelete?.name}"`) }}</h2>
+ <input role="yes" type="button" :value="translate('General_Yes')"/>
+ <input role="no" type="button" :value="translate('General_No')"/>
+ </div>
+ </div>
+
+ <!-- v-show required until funnels/multiattribution are using vue and not angularjs -->
+ <div v-show="userCanEditGoals">
+ <div class="addEditGoal" v-show="showEditGoal">
+ <ContentBlock
+ :content-title="goal.idgoal
+ ? translate('Goals_UpdateGoal')
+ : translate('Goals_AddNewGoal')"
+ >
+ <div v-html="$sanitize(addNewGoalIntro)"></div>
+
+ <div v-form>
+ <div>
+ <Field
+ uicontrol="text"
+ name="goal_name"
+ v-model="goal.name"
+ :maxlength="50"
+ :title="translate('Goals_GoalName')">
+ </Field>
+ </div>
+
+ <div>
+ <Field
+ uicontrol="text"
+ name="goal_description"
+ v-model="goal.description"
+ :maxlength="255"
+ :title="translate('General_Description')"
+ />
+ </div>
+
+ <div class="row goalIsTriggeredWhen">
+ <div class="col s12">
+ <h3>{{ translate('Goals_GoalIsTriggered') }}</h3>
+ </div>
+ </div>
+
+ <div class="row">
+ <div class="col s12 m6 goalTriggerType">
+ <div>
+ <Field
+ uicontrol="select" name="trigger_type"
+ :model-value="triggerType"
+ @update:model-value="triggerType = $event; changedTriggerType()"
+ :full-width="true"
+ :options="goalTriggerTypeOptions"
+ />
+ </div>
+ </div>
+ <div class="col s12 m6">
+ <Alert severity="info" v-show="triggerType === 'manually'">
+ <span v-html="$sanitize(whereVisitedPageManuallyCallsJsTrackerText)"></span>
+ </Alert>
+
+ <div>
+ <Field
+ uicontrol="radio"
+ name="match_attribute"
+ v-show="triggerType !== 'manually'"
+ :full-width="true"
+ :model-value="goal.match_attribute"
+ @update:model-value="goal.match_attribute = $event; initPatternType()"
+ :options="goalMatchAttributeOptions"
+ />
+ </div>
+ </div>
+ </div>
+
+ <div class="row whereTheMatchAttrbiute" v-show="triggerType !== 'manually'">
+ <h3 class="col s12">{{ translate('Goals_WhereThe') }}
+ <span v-show="goal.match_attribute === 'url'">
+ {{ translate('Goals_URL') }}
+ </span>
+ <span v-show="goal.match_attribute === 'title'">
+ {{ translate('Goals_PageTitle') }}
+ </span>
+ <span v-show="goal.match_attribute === 'file'">
+ {{ translate('Goals_Filename') }}
+ </span>
+ <span v-show="goal.match_attribute === 'external_website'">
+ {{ translate('Goals_ExternalWebsiteUrl') }}
+ </span>
+ <span v-show="goal.match_attribute === 'visit_duration'">
+ {{ translate('Goals_VisitDuration') }}
+ </span>
+ </h3>
+ </div>
+
+ <div class="row" v-show="triggerType !== 'manually'">
+ <div class="col s12 m6 l4"
+ v-show="goal.match_attribute === 'event'">
+ <div>
+ <Field
+ uicontrol="select" name="event_type"
+ v-model="eventType"
+ :full-width="true"
+ :options="eventTypeOptions"
+ />
+ </div>
+ </div>
+
+ <div class="col s12 m6 l4" v-if="!isMatchAttributeNumeric">
+ <div>
+ <Field
+ uicontrol="select"
+ name="pattern_type"
+ v-model="goal.pattern_type"
+ :full-width="true"
+ :options="patternTypeOptions"
+ />
+ </div>
+ </div>
+
+ <div class="col s12 m6 l4" v-if="isMatchAttributeNumeric">
+ <div>
+ <Field
+ uicontrol="select" name="pattern_type"
+ v-model="goal.pattern_type"
+ :full-width="true"
+ :options="numericComparisonTypeOptions"
+ />
+ </div>
+ </div>
+
+ <div class="col s12 m6 l4">
+ <div>
+ <Field
+ uicontrol="text" name="pattern"
+ v-model="goal.pattern"
+ :maxlength="255"
+ :title="patternFieldLabel"
+ :full-width="true"
+ />
+ </div>
+ </div>
+
+ <div id="examples_pattern" class="col s12">
+ <Alert severity="info">
+ <span v-show="goal.match_attribute === 'url'">
+ {{ translate('General_ForExampleShort') }}
+ {{ translate('Goals_Contains', "'checkout/confirmation'") }}
+ <br />{{ translate('General_ForExampleShort') }}
+ {{ translate('Goals_IsExactly', "'http://example.com/thank-you.html'") }}
+ <br />{{ translate('General_ForExampleShort') }}
+ {{ translate('Goals_MatchesExpression', "'(.*)\\\/demo\\\/(.*)'") }}
+ </span>
+ <span v-show="goal.match_attribute === 'title'">
+ {{ translate('General_ForExampleShort') }}
+ {{ translate('Goals_Contains', "'Order confirmation'") }}
+ </span>
+ <span v-show="goal.match_attribute === 'file'">
+ {{ translate('General_ForExampleShort') }}
+ {{ translate('Goals_Contains', "'files/brochure.pdf'") }}
+ <br />{{ translate('General_ForExampleShort') }}
+ {{ translate('Goals_IsExactly', "'http://example.com/files/brochure.pdf'") }}
+ <br />{{ translate('General_ForExampleShort') }}
+ {{ translate('Goals_MatchesExpression', "'(.*)\\\.zip'") }}
+ </span>
+ <span v-show="goal.match_attribute === 'external_website'">
+ {{ translate('General_ForExampleShort') }}
+ {{ translate('Goals_Contains', "'amazon.com'") }}
+ <br />{{ translate('General_ForExampleShort') }}
+ {{ translate('Goals_IsExactly', "'http://mypartner.com/landing.html'") }}
+ <br />{{ translate('General_ForExampleShort') }}
+ {{ matchesExpressionExternal }}
+ </span>
+ <span v-show="goal.match_attribute === 'event'">
+ {{ translate('General_ForExampleShort') }}
+ {{ translate('Goals_Contains', "'video'") }}
+ <br />
+ {{ translate('General_ForExampleShort') }}
+ {{ translate('Goals_IsExactly', "'click'") }}
+ <br />{{ translate('General_ForExampleShort') }}
+ {{ translate('Goals_MatchesExpression', "'(.*)_banner'") }}"
+ </span>
+ <span v-show="goal.match_attribute === 'visit_duration'">
+ {{ translate('General_ForExampleShort') }}
+ {{ translate('Goals_AtLeastMinutes', '5', '0.5') }}
+ </span>
+ </Alert>
+ </div>
+ </div>
+
+ <div>
+ <Field
+ uicontrol="checkbox"
+ name="case_sensitive"
+ v-model="goal.case_sensitive"
+ v-show="triggerType !== 'manually' && !isMatchAttributeNumeric"
+ :title="caseSensitiveTitle"
+ />
+ </div>
+
+ <div>
+ <Field
+ uicontrol="radio"
+ name="allow_multiple"
+ :model-value="goal.allow_multiple ? 1 : 0"
+ @update:model-value="goal.allow_multiple = $event"
+ v-if="goal.match_attribute !== 'visit_duration'"
+ :options="allowMultipleOptions"
+ :introduction="translate('Goals_AllowMultipleConversionsPerVisit')"
+ :inline-help="translate('Goals_HelpOneConversionPerVisit')"
+ />
+ </div>
+
+ <h3>{{ translate('Goals_GoalRevenue') }} {{ translate('Goals_Optional') }}</h3>
+
+ <div>
+ <Field
+ uicontrol="number"
+ name="revenue"
+ v-model="goal.revenue"
+ :placeholder="translate('Goals_DefaultRevenueLabel')"
+ :inline-help="translate('Goals_DefaultRevenueHelp')"
+ />
+ </div>
+
+ <div>
+ <Field
+ uicontrol="checkbox"
+ name="use_event_value"
+ v-model="goal.event_value_as_revenue"
+ :title="translate('Goals_UseEventValueAsRevenue')"
+ v-show="goal.match_attribute === 'event'"
+ :inline-help="useEventValueAsRevenueHelp"
+ />
+ </div>
+
+ <div ref="endedittable">
+ <component :is="endEditTableComponent" v-if="endEditTableComponent"/>
+ </div>
+
+ <input type="hidden" name="goalIdUpdate" value=""/>
+
+ <SaveButton
+ :saving="isLoading"
+ @confirm="save()"
+ :value="submitText"
+ />
+
+ <div v-if="!onlyShowAddNewGoal">
+ <div
+ class='entityCancel'
+ v-show="showEditGoal"
+ @click="showListOfReports()"
+ v-html="$sanitize(cancelText)"
+ >
+ </div>
+ </div>
+ </div>
+ </ContentBlock>
+ </div>
+ </div>
+
+ <a id='bottom'></a>
+ </div>
+</template>
+
+<script lang="ts">
+import { IScope } from 'angular';
+import { defineComponent, markRaw, nextTick } from 'vue';
+import {
+ Matomo,
+ AjaxHelper,
+ AjaxOptions,
+ translate,
+ ContentBlock,
+ ActivityIndicator,
+ MatomoUrl,
+ ContentTable,
+ Alert,
+ ReportingMenuStore,
+} from 'CoreHome';
+import {
+ Form,
+ Field,
+ SaveButton,
+} from 'CorePluginsAdmin';
+import Goal from '../Goal';
+import PiwikApiMock from './PiwikApiMock';
+import ManageGoalsStore from './ManageGoals.store';
+
+interface ManageGoalsState {
+ showEditGoal: boolean;
+ showGoalList: boolean;
+ goal: Goal;
+ isLoading: boolean;
+ eventType: string;
+ triggerType: string;
+ apiMethod: string;
+ submitText: string;
+ goalToDelete: Goal|null;
+ addEditTableComponent: boolean;
+}
+
+export default defineComponent({
+ inheritAttrs: false,
+ props: {
+ onlyShowAddNewGoal: Boolean,
+ userCanEditGoals: Boolean,
+ ecommerceEnabled: Boolean,
+ goals: {
+ type: Object,
+ required: true,
+ },
+ addNewGoalIntro: String,
+ goalTriggerTypeOptions: Object,
+ goalMatchAttributeOptions: Array,
+ eventTypeOptions: Array,
+ patternTypeOptions: Array,
+ numericComparisonTypeOptions: Array,
+ allowMultipleOptions: Array,
+ showAddGoal: Boolean,
+ showGoal: Number,
+ beforeGoalListActionsBody: Object,
+ endEditTable: String,
+ beforeGoalListActionsHead: String,
+ },
+ data(): ManageGoalsState {
+ return {
+ showEditGoal: false,
+ showGoalList: true,
+ goal: {} as unknown as Goal,
+ isLoading: false,
+ eventType: 'event_category',
+ triggerType: 'visitors',
+ apiMethod: '',
+ submitText: '',
+ goalToDelete: null,
+ addEditTableComponent: false,
+ };
+ },
+ components: {
+ SaveButton,
+ ContentBlock,
+ ActivityIndicator,
+ Field,
+ Alert,
+ },
+ directives: {
+ ContentTable,
+ Form,
+ },
+ created() {
+ ManageGoalsStore.setIdGoalShown(this.showGoal);
+ },
+ unmounted() {
+ ManageGoalsStore.setIdGoalShown(undefined);
+ },
+ mounted() {
+ if (this.showAddGoal) {
+ this.createGoal();
+ } else if (this.showGoal) {
+ this.editGoal(this.showGoal);
+ } else {
+ this.showListOfReports();
+ }
+
+ // this component can be used in multiple places, one where
+ // Matomo.helper.compileAngularComponents() is already called, one where it's not.
+ // to make sure this function is only applied once to the slot data, we explicitly do not
+ // add it to vue, then on the next update, add it and call compileAngularComponents()
+ nextTick(() => {
+ this.addEditTableComponent = true;
+
+ nextTick(() => {
+ const el = this.$refs.endedittable as HTMLElement;
+ const scope = Matomo.helper.getAngularDependency('$rootScope').$new(true);
+ $(el).data('scope', scope);
+ Matomo.helper.compileAngularComponents(el, { scope });
+ });
+ });
+ },
+ beforeUnmount() {
+ const el = this.$refs.endedittable as HTMLElement;
+ ($(el).data('scope') as IScope).$destroy();
+ },
+ methods: {
+ scrollToTop() {
+ setTimeout(() => {
+ Matomo.helper.lazyScrollTo('.pageWrap', 200);
+ });
+ },
+ initGoalForm(
+ goalMethodAPI: string,
+ submitText: string,
+ goalName: string,
+ description: string,
+ matchAttribute: string,
+ pattern: string,
+ patternType: string,
+ caseSensitive: boolean,
+ revenue: number,
+ allowMultiple: boolean,
+ useEventValueAsRevenue: boolean,
+ goalId: string|number,
+ ) {
+ Matomo.postEvent('Goals.beforeInitGoalForm', goalMethodAPI, goalId);
+
+ this.apiMethod = goalMethodAPI;
+
+ this.goal = {} as unknown as Goal;
+ this.goal.name = goalName;
+ this.goal.description = description;
+
+ let actualMatchAttribute = matchAttribute;
+ if (actualMatchAttribute === 'manually') {
+ this.triggerType = 'manually';
+ actualMatchAttribute = 'url';
+ } else {
+ this.triggerType = 'visitors';
+ }
+
+ if (actualMatchAttribute.indexOf('event') === 0) {
+ this.eventType = actualMatchAttribute;
+ actualMatchAttribute = 'event';
+ } else {
+ this.eventType = 'event_category';
+ }
+
+ this.goal.match_attribute = actualMatchAttribute;
+ this.goal.allow_multiple = allowMultiple;
+ this.goal.pattern_type = patternType;
+ this.goal.pattern = pattern;
+ this.goal.case_sensitive = caseSensitive;
+ this.goal.revenue = revenue;
+ this.goal.event_value_as_revenue = useEventValueAsRevenue;
+ this.submitText = submitText;
+ this.goal.idgoal = goalId;
+ },
+ showListOfReports() {
+ Matomo.postEvent('Goals.cancelForm');
+ this.showGoalList = true;
+ this.showEditGoal = false;
+ this.scrollToTop();
+ },
+ showAddEditForm() {
+ this.showGoalList = false;
+ this.showEditGoal = true;
+ },
+ createGoal() {
+ const parameters = {
+ isAllowed: true,
+ };
+ Matomo.postEvent('Goals.initAddGoal', parameters);
+
+ if (parameters && !parameters.isAllowed) {
+ return;
+ }
+
+ this.showAddEditForm();
+ this.initGoalForm(
+ 'Goals.addGoal',
+ translate('Goals_AddGoal'),
+ '',
+ '',
+ 'url',
+ '',
+ 'contains',
+ false,
+ 0,
+ false,
+ false,
+ 0,
+ );
+ this.scrollToTop();
+ },
+ editGoal(goalId: string|number) {
+ this.showAddEditForm();
+ const goal = this.goals[`${goalId}`] as Goal;
+ this.initGoalForm(
+ 'Goals.updateGoal',
+ translate('Goals_UpdateGoal'),
+ goal.name,
+ goal.description,
+ goal.match_attribute,
+ goal.pattern,
+ goal.pattern_type,
+ !!goal.case_sensitive && goal.case_sensitive !== '0',
+ parseInt(`${goal.revenue}`, 10),
+ !!goal.allow_multiple && goal.allow_multiple !== '0',
+ !!goal.event_value_as_revenue && goal.event_value_as_revenue !== '0',
+ goalId,
+ );
+ this.scrollToTop();
+ },
+ deleteGoal(goalId: string|number) {
+ this.goalToDelete = this.goals[`${goalId}`];
+ Matomo.helper.modalConfirm((this.$refs.confirm as HTMLElement), {
+ yes: () => {
+ this.isLoading = true;
+
+ AjaxHelper.fetch({
+ idGoal: goalId,
+ method: 'Goals.deleteGoal',
+ }).then(() => {
+ window.location.reload();
+ }).finally(() => {
+ this.isLoading = false;
+ });
+ },
+ });
+ },
+ save() {
+ const parameters: QueryParameters = {};
+ // TODO: test removal of encoding, should be handled by ajax request
+ parameters.name = this.goal.name;
+ parameters.description = this.goal.description;
+
+ if (this.isManuallyTriggered) {
+ parameters.matchAttribute = 'manually';
+ parameters.patternType = 'regex';
+ parameters.pattern = '.*';
+ parameters.caseSensitive = 0;
+ } else {
+ parameters.matchAttribute = this.goal.match_attribute;
+
+ if (parameters.matchAttribute === 'event') {
+ parameters.matchAttribute = this.eventType;
+ }
+
+ parameters.patternType = this.goal.pattern_type;
+ parameters.pattern = this.goal.pattern;
+ parameters.caseSensitive = this.goal.case_sensitive ? 1 : 0;
+ }
+ parameters.revenue = this.goal.revenue || 0;
+ parameters.allowMultipleConversionsPerVisit = this.goal.allow_multiple ? 1 : 0;
+ parameters.useEventValueAsRevenue = this.goal.event_value_as_revenue ? 1 : 0;
+
+ parameters.idGoal = this.goal.idgoal;
+ parameters.method = this.apiMethod;
+
+ const isCreate = parameters.method === 'Goals.addGoal';
+ const isUpdate = parameters.method === 'Goals.updateGoal';
+
+ const options: AjaxOptions = {};
+
+ const piwikApiMock = new PiwikApiMock(parameters, options);
+ if (isUpdate) {
+ Matomo.postEvent('Goals.beforeUpdateGoal', parameters, piwikApiMock);
+ } else if (isCreate) {
+ Matomo.postEvent('Goals.beforeAddGoal', parameters, piwikApiMock);
+ }
+
+ if (parameters?.cancelRequest) {
+ return;
+ }
+
+ this.isLoading = true;
+
+ AjaxHelper.fetch(parameters, options).then(() => {
+ const subcategory = MatomoUrl.parsed.value.subcategory as string;
+ if (subcategory === 'Goals_AddNewGoal'
+ && Matomo.helper.isAngularRenderingThePage()
+ ) {
+ // when adding a goal for the first time we need to load manage goals page afterwards
+ ReportingMenuStore.reloadMenuItems().then(() => {
+ MatomoUrl.updateHash({
+ ...MatomoUrl.hashParsed.value,
+ subcategory: 'Goals_ManageGoals',
+ });
+
+ this.isLoading = false;
+ });
+ } else {
+ window.location.reload();
+ }
+ }).catch(() => {
+ this.scrollToTop();
+ this.isLoading = false;
+ });
+ },
+ changedTriggerType() {
+ if (!this.isManuallyTriggered && !this.goal.pattern_type) {
+ this.goal.pattern_type = 'contains';
+ }
+ },
+ initPatternType() {
+ if (this.isMatchAttributeNumeric) {
+ this.goal.pattern_type = 'greater_than';
+ } else {
+ this.goal.pattern_type = 'contains';
+ }
+ },
+ lcfirst(s: string) {
+ return `${s.slice(0, 1).toLowerCase()}${s.slice(1)}`;
+ },
+ ucfirst(s: string) {
+ return `${s.slice(0, 1).toUpperCase()}${s.slice(1)}`;
+ },
+ },
+ computed: {
+ learnMoreAboutGoalTracking() {
+ return translate(
+ 'Goals_LearnMoreAboutGoalTrackingDocumentation',
+ '<a target="_blank" rel="noreferrer noopener" '
+ + 'href="https://matomo.org/docs/tracking-goals-web-analytics/">',
+ '</a>',
+ );
+ },
+ youCanEnableEcommerceReports() {
+ const link = MatomoUrl.stringify({
+ ...MatomoUrl.urlParsed.value,
+ module: 'SitesManager',
+ action: 'index',
+ });
+
+ const ecommerceReportsText = '<a href="https://matomo.org/docs/ecommerce-analytics/" '
+ + `rel="noreferrer noopener" target="_blank">${translate('Goals_EcommerceReports')}</a>`;
+ const websiteManageText = `<a href='${link}'>${translate('SitesManager_WebsitesManagement')}</a>`;
+
+ return translate(
+ 'Goals_YouCanEnableEcommerceReports',
+ ecommerceReportsText,
+ websiteManageText,
+ );
+ },
+ siteName() {
+ return Matomo.helper.htmlDecode(Matomo.siteName);
+ },
+ whereVisitedPageManuallyCallsJsTrackerText() {
+ const link = 'https://developer.matomo.org/guides/tracking-javascript-guide#manually-trigger-goal-conversions';
+ return translate(
+ 'Goals_WhereVisitedPageManuallyCallsJavascriptTrackerLearnMore',
+ `<a target="_blank" rel="noreferrer noopener" href="${link}">`,
+ '</a>',
+ );
+ },
+ caseSensitiveTitle() {
+ return `${translate('Goals_CaseSensitive')} ${translate('Goals_Optional')}`;
+ },
+ useEventValueAsRevenueHelp() {
+ return `${translate('Goals_EventValueAsRevenueHelp')} <br/><br/> ${translate('Goals_EventValueAsRevenueHelp2')}`;
+ },
+ cancelText() {
+ return translate(
+ 'General_OrCancel',
+ '<a class=\'entityCancelLink\'>',
+ '</a>',
+ );
+ },
+ isMatchAttributeNumeric() {
+ return ['visit_duration'].indexOf(this.goal.match_attribute) > -1;
+ },
+ patternFieldLabel() {
+ return this.goal.match_attribute === 'visit_duration'
+ ? translate('Goals_TimeInMinutes')
+ : translate('Goals_Pattern');
+ },
+ goalMatchAttributeTranslations() {
+ return {
+ manually: translate('Goals_ManuallyTriggeredUsingJavascriptFunction'),
+ file: translate('Goals_Download'),
+ url: translate('Goals_VisitUrl'),
+ title: translate('Goals_VisitPageTitle'),
+ external_website: translate('Goals_ClickOutlink'),
+ event_action: `${translate('Goals_SendEvent')} (${translate('Events_EventAction')})`,
+ event_category: `${translate('Goals_SendEvent')} (${translate('Events_EventCategory')})`,
+ event_name: `${translate('Goals_SendEvent')} (${translate('Events_EventName')})`,
+ visit_duration: `${this.ucfirst(translate('Goals_VisitDuration'))}`,
+ };
+ },
+ beforeGoalListActionsBodyComponent() {
+ if (!this.beforeGoalListActionsBody) {
+ return {};
+ }
+
+ const componentsByIdGoal: Record<string, unknown> = {};
+ Object.values(this.goals as Record<string, Goal>).forEach((g) => {
+ const template = this.beforeGoalListActionsBody![g.idgoal];
+ if (!template) {
+ return;
+ }
+
+ componentsByIdGoal[g.idgoal] = {
+ template,
+ };
+ });
+ return markRaw(componentsByIdGoal);
+ },
+ endEditTableComponent() {
+ if (!this.endEditTable || !this.addEditTableComponent) {
+ return null;
+ }
+
+ const endedittable = this.$refs.endedittable as HTMLElement;
+ return markRaw({
+ template: this.endEditTable,
+ mounted() {
+ Matomo.helper.compileVueEntryComponents(endedittable);
+ },
+ beforeUnmount() {
+ Matomo.helper.destroyVueComponent(endedittable);
+ },
+ });
+ },
+ beforeGoalListActionsHeadComponent() {
+ if (!this.beforeGoalListActionsHead) {
+ return null;
+ }
+
+ return markRaw({
+ template: this.beforeGoalListActionsHead,
+ });
+ },
+ isManuallyTriggered() {
+ return this.triggerType === 'manually';
+ },
+ matchesExpressionExternal() {
+ const url = "'http://www.amazon.com\\/(.*)\\/yourAffiliateId'";
+ return translate('Goals_MatchesExpression', url);
+ },
+ },
+});
+</script>
diff --git a/plugins/Goals/vue/src/ManageGoals/PiwikApiMock.ts b/plugins/Goals/vue/src/ManageGoals/PiwikApiMock.ts
new file mode 100644
index 0000000000..9745fe3543
--- /dev/null
+++ b/plugins/Goals/vue/src/ManageGoals/PiwikApiMock.ts
@@ -0,0 +1,38 @@
+/*!
+* Matomo - free/libre analytics platform
+*
+* @link https://matomo.org
+* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+*/
+
+import { AjaxOptions } from 'CoreHome';
+
+// the piwikApi angularjs service is passed in some frontend events to allow plugins to modify
+// a request before it is sent. for the time being in Vue we use this mock, which has the same
+// API as the piwikApi service, to modify the input used with AjaxHelper. this provides BC
+// with for plugins that haven't been converted.
+//
+// should be removed in Matomo 5.
+export default class PiwikApiMock {
+ constructor(private parameters: QueryParameters, private options: AjaxOptions) {}
+
+ addParams(params: QueryParameters): void {
+ Object.assign(this.parameters, params);
+ }
+
+ withTokenInUrl(): void {
+ this.options.withTokenInUrl = true;
+ }
+
+ reset(): void {
+ Object.keys(this.parameters).forEach((name) => {
+ delete this.parameters[name];
+ });
+
+ delete this.options.postParams;
+ }
+
+ addPostParams(params: QueryParameters): void {
+ this.options.postParams = { ...this.options.postParams, ...params };
+ }
+}
diff --git a/plugins/Goals/vue/src/index.ts b/plugins/Goals/vue/src/index.ts
new file mode 100644
index 0000000000..651bab3779
--- /dev/null
+++ b/plugins/Goals/vue/src/index.ts
@@ -0,0 +1,14 @@
+/*!
+ * Matomo - free/libre analytics platform
+ *
+ * @link https://matomo.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+*/
+
+import './GoalPageLink/GoalPageLink.adapter';
+import './ManageGoals/ManageGoals.adapter';
+
+export { default as GoalPageLink } from './GoalPageLink/GoalPageLink.ts';
+export { default as ManageGoals } from './ManageGoals/ManageGoals.vue';
+export { default as ManageGoalsStore } from './ManageGoals/ManageGoals.store';
+export { default as PiwikApiMock } from './ManageGoals/PiwikApiMock';