diff options
Diffstat (limited to 'plugins/Feedback/vue')
8 files changed, 474 insertions, 130 deletions
diff --git a/plugins/Feedback/vue/dist/Feedback.umd.js b/plugins/Feedback/vue/dist/Feedback.umd.js index d50ae72ce5..fca5e1f1d8 100644 --- a/plugins/Feedback/vue/dist/Feedback.umd.js +++ b/plugins/Feedback/vue/dist/Feedback.umd.js @@ -118,8 +118,8 @@ module.exports = __WEBPACK_EXTERNAL_MODULE__8bbf__; __webpack_require__.r(__webpack_exports__); // EXPORTS -__webpack_require__.d(__webpack_exports__, "ReviewLinks", function() { return /* reexport */ ReviewLinks; }); __webpack_require__.d(__webpack_exports__, "RateFeature", function() { return /* reexport */ RateFeature; }); +__webpack_require__.d(__webpack_exports__, "FeedbackQuestion", function() { return /* reexport */ FeedbackQuestion; }); // CONCATENATED MODULE: ./node_modules/@vue/cli-service/lib/commands/build/setPublicPath.js // This file is imported into lib/wc client bundles. @@ -143,7 +143,7 @@ var external_CoreHome_ = __webpack_require__("19dc"); // 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/Feedback/vue/src/RateFeature/RateFeature.vue?vue&type=template&id=65bd066a +// 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/Feedback/vue/src/RateFeature/RateFeature.vue?vue&type=template&id=10cf2a3c var _hoisted_1 = ["title"]; var _hoisted_2 = { @@ -173,8 +173,6 @@ var _hoisted_11 = ["value"]; function render(_ctx, _cache, $props, $setup, $data, $options) { var _component_MatomoDialog = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveComponent"])("MatomoDialog"); - var _component_ReviewLinks = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveComponent"])("ReviewLinks"); - return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", { title: _ctx.translate('Feedback_RateFeatureTitle', _ctx.$sanitize(_ctx.title)), class: "ratefeature" @@ -235,7 +233,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { }) }, { default: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withCtx"])(function () { - return [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_9, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("h2", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('Feedback_ThankYou', _ctx.title)), 1), _ctx.like ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", _hoisted_10, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_ReviewLinks)])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("input", { + return [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_9, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("h2", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('Feedback_ThankYou', _ctx.title)), 1), _ctx.like ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", _hoisted_10)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("input", { type: "button", value: _ctx.translate('General_Ok'), role: "yes" @@ -244,44 +242,17 @@ function render(_ctx, _cache, $props, $setup, $data, $options) { _: 1 }, 8, ["modelValue"])], 8, _hoisted_1); } -// CONCATENATED MODULE: ./plugins/Feedback/vue/src/RateFeature/RateFeature.vue?vue&type=template&id=65bd066a - -// 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/Feedback/vue/src/ReviewLinks/ReviewLinks.vue?vue&type=template&id=4471fc41 - -var ReviewLinksvue_type_template_id_4471fc41_hoisted_1 = { - class: "requestReview" -}; - -var ReviewLinksvue_type_template_id_4471fc41_hoisted_2 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createStaticVNode"])("<br><br><div class=\"review-links\"><div class=\"review-link\"><a href=\"https://www.capterra.com/p/182627/Matomo-Analytics/\" target=\"_blank\"><div class=\"image\"><img loading=\"lazy\" src=\"plugins/Feedback/images/capterra.svg\"></div><div class=\"link\">Capterra</div></a></div><div class=\"review-link\"><a href=\"https://www.g2crowd.com/products/matomo-formerly-piwik/details\" target=\"_blank\"><div class=\"image\"><img loading=\"lazy\" src=\"plugins/Feedback/images/g2crowd.svg\"></div><div class=\"link\">G2 Crowd</div></a></div><div class=\"review-link\"><a href=\"https://www.producthunt.com/posts/matomo-2\" target=\"_blank\"><div class=\"image\"><img loading=\"lazy\" src=\"plugins/Feedback/images/producthunt.svg\"></div><div class=\"link\">Product Hunt</div></a></div><div class=\"review-link\"><a href=\"https://www.saasworthy.com/product/matomo\" target=\"_blank\"><div class=\"image\"><img loading=\"lazy\" src=\"plugins/Feedback/images/saasworthy.png\"></div><div class=\"link\">SaaSworthy</div></a></div><div class=\"review-link\"><a href=\"https://www.trustradius.com/products/matomo/reviews\" target=\"_blank\"><div class=\"image\"><img loading=\"lazy\" src=\"plugins/Feedback/images/trustradius.svg\"></div><div class=\"link\">TrustRadius</div></a></div></div>", 3); - -function ReviewLinksvue_type_template_id_4471fc41_render(_ctx, _cache, $props, $setup, $data, $options) { - return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", ReviewLinksvue_type_template_id_4471fc41_hoisted_1, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("p", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('Feedback_PleaseLeaveExternalReviewForMatomo')), 1), ReviewLinksvue_type_template_id_4471fc41_hoisted_2]); -} -// CONCATENATED MODULE: ./plugins/Feedback/vue/src/ReviewLinks/ReviewLinks.vue?vue&type=template&id=4471fc41 - -// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-typescript/node_modules/cache-loader/dist/cjs.js??ref--14-0!./node_modules/@vue/cli-plugin-typescript/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader??ref--14-3!./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/Feedback/vue/src/ReviewLinks/ReviewLinks.vue?vue&type=script&lang=ts +// CONCATENATED MODULE: ./plugins/Feedback/vue/src/RateFeature/RateFeature.vue?vue&type=template&id=10cf2a3c -/* harmony default export */ var ReviewLinksvue_type_script_lang_ts = (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["defineComponent"])({})); -// CONCATENATED MODULE: ./plugins/Feedback/vue/src/ReviewLinks/ReviewLinks.vue?vue&type=script&lang=ts - -// CONCATENATED MODULE: ./plugins/Feedback/vue/src/ReviewLinks/ReviewLinks.vue - - - -ReviewLinksvue_type_script_lang_ts.render = ReviewLinksvue_type_template_id_4471fc41_render - -/* harmony default export */ var ReviewLinks = (ReviewLinksvue_type_script_lang_ts); // CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-typescript/node_modules/cache-loader/dist/cjs.js??ref--14-0!./node_modules/@vue/cli-plugin-typescript/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader??ref--14-3!./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/Feedback/vue/src/RateFeature/RateFeature.vue?vue&type=script&lang=ts - /* harmony default export */ var RateFeaturevue_type_script_lang_ts = (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["defineComponent"])({ props: { title: String }, components: { - MatomoDialog: external_CoreHome_["MatomoDialog"], - ReviewLinks: ReviewLinks + MatomoDialog: external_CoreHome_["MatomoDialog"] }, data: function data() { return { @@ -337,6 +308,242 @@ RateFeaturevue_type_script_lang_ts.render = render }, directiveName: 'piwikRateFeature' })); +// 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/Feedback/vue/src/FeedbackQuestion/FeedbackQuestion.vue?vue&type=template&id=2d5e9885 + +var FeedbackQuestionvue_type_template_id_2d5e9885_hoisted_1 = { + key: 0, + class: "bannerHeader" +}; + +var FeedbackQuestionvue_type_template_id_2d5e9885_hoisted_2 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("i", { + class: "icon-heart red-text" +}, null, -1); + +var FeedbackQuestionvue_type_template_id_2d5e9885_hoisted_3 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("i", { + class: "icon-close white-text" +}, null, -1); + +var FeedbackQuestionvue_type_template_id_2d5e9885_hoisted_4 = [FeedbackQuestionvue_type_template_id_2d5e9885_hoisted_3]; +var FeedbackQuestionvue_type_template_id_2d5e9885_hoisted_5 = { + class: "ratefeature" +}; +var FeedbackQuestionvue_type_template_id_2d5e9885_hoisted_6 = { + class: "ui-confirm ratefeatureDialog" +}; +var FeedbackQuestionvue_type_template_id_2d5e9885_hoisted_7 = ["innerHTML"]; + +var FeedbackQuestionvue_type_template_id_2d5e9885_hoisted_8 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1); + +var FeedbackQuestionvue_type_template_id_2d5e9885_hoisted_9 = { + class: "messageContainer" +}; +var FeedbackQuestionvue_type_template_id_2d5e9885_hoisted_10 = { + key: 0, + class: "error-text" +}; + +var FeedbackQuestionvue_type_template_id_2d5e9885_hoisted_11 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1); + +var _hoisted_12 = ["innerHTML"]; +var _hoisted_13 = ["value"]; +var _hoisted_14 = ["value"]; +var _hoisted_15 = { + class: "ui-confirm ratefeatureDialog" +}; +var _hoisted_16 = ["innerHTML"]; +var _hoisted_17 = ["value"]; +function FeedbackQuestionvue_type_template_id_2d5e9885_render(_ctx, _cache, $props, $setup, $data, $options) { + var _component_MatomoDialog = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveComponent"])("MatomoDialog"); + + return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", null, [!_ctx.isHidden ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", FeedbackQuestionvue_type_template_id_2d5e9885_hoisted_1, [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("Feedback_FeedbackTitle")) + " ", 1), FeedbackQuestionvue_type_template_id_2d5e9885_hoisted_2]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", { + onClick: _cache[0] || (_cache[0] = function () { + return _ctx.showQuestion && _ctx.showQuestion.apply(_ctx, arguments); + }), + class: "btn" + }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate("Feedback_Question".concat(_ctx.question))), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", { + class: "close-btn", + onClick: _cache[1] || (_cache[1] = function () { + return _ctx.disableReminder && _ctx.disableReminder.apply(_ctx, arguments); + }) + }, FeedbackQuestionvue_type_template_id_2d5e9885_hoisted_4)])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", FeedbackQuestionvue_type_template_id_2d5e9885_hoisted_5, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_MatomoDialog, { + modelValue: _ctx.showFeedbackForm, + "onUpdate:modelValue": _cache[3] || (_cache[3] = function ($event) { + return _ctx.showFeedbackForm = $event; + }), + onValidation: _cache[4] || (_cache[4] = function ($event) { + return _ctx.sendFeedback(); + }) + }, { + default: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withCtx"])(function () { + return [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", FeedbackQuestionvue_type_template_id_2d5e9885_hoisted_6, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("h2", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate("Feedback_Question".concat(_ctx.question))), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("p", { + innerHTML: _ctx.translate('Feedback_FeedbackSubtitle', "<i class='icon-heart red-text'></i>") + }, null, 8, FeedbackQuestionvue_type_template_id_2d5e9885_hoisted_7), FeedbackQuestionvue_type_template_id_2d5e9885_hoisted_8, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", FeedbackQuestionvue_type_template_id_2d5e9885_hoisted_9, [_ctx.errorMessage ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", FeedbackQuestionvue_type_template_id_2d5e9885_hoisted_10, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.errorMessage), 1)) : 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"])("textarea", { + id: "message", + class: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["normalizeClass"])({ + 'has-error': _ctx.errorMessage + }), + "onUpdate:modelValue": _cache[2] || (_cache[2] = function ($event) { + return _ctx.feedbackMessage = $event; + }) + }, null, 2), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vModelText"], _ctx.feedbackMessage]])]), FeedbackQuestionvue_type_template_id_2d5e9885_hoisted_11, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("p", { + innerHTML: _ctx.translate('Feedback_Policy', "<a rel='nofollow' href='https://matomo.org/privacy-policy/' target='_blank'>", '</a>') + }, null, 8, _hoisted_12), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("input", { + type: "button", + role: "validation", + value: _ctx.translate('Feedback_SendFeedback') + }, null, 8, _hoisted_13), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("input", { + type: "button", + role: "cancel", + value: _ctx.translate('General_Cancel') + }, null, 8, _hoisted_14)])]; + }), + _: 1 + }, 8, ["modelValue"]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_MatomoDialog, { + modelValue: _ctx.feedbackDone, + "onUpdate:modelValue": _cache[5] || (_cache[5] = function ($event) { + return _ctx.feedbackDone = $event; + }) + }, { + default: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withCtx"])(function () { + return [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_15, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("h2", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate("Feedback_ThankYou")), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("p", { + innerHTML: _ctx.translate('Feedback_ThankYourForFeedback', "<i class='icon-heart red-text'></i>") + }, null, 8, _hoisted_16), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("input", { + type: "button", + role: "cancel", + value: _ctx.translate('General_Close') + }, null, 8, _hoisted_17)])]; + }), + _: 1 + }, 8, ["modelValue"])])]); +} +// CONCATENATED MODULE: ./plugins/Feedback/vue/src/FeedbackQuestion/FeedbackQuestion.vue?vue&type=template&id=2d5e9885 + +// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-typescript/node_modules/cache-loader/dist/cjs.js??ref--14-0!./node_modules/@vue/cli-plugin-typescript/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader??ref--14-3!./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/Feedback/vue/src/FeedbackQuestion/FeedbackQuestion.vue?vue&type=script&lang=ts + + +var _window = window, + $ = _window.$; +var cookieName = 'feedback-question'; +/* harmony default export */ var FeedbackQuestionvue_type_script_lang_ts = (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["defineComponent"])({ + props: { + showQuestionBanner: String + }, + components: { + MatomoDialog: external_CoreHome_["MatomoDialog"] + }, + computed: { + isHidden: function isHidden() { + if (this.showQuestionBanner === '0') { + return true; + } + + return !!this.hide; + } + }, + data: function data() { + return { + questionText: '', + question: 0, + hide: null, + feedbackDone: false, + expanded: false, + showFeedbackForm: false, + feedbackMessage: null, + errorMessage: null + }; + }, + watch: { + showFeedbackForm: function showFeedbackForm(val) { + // eslint-disable-next-line no-underscore-dangle + this.questionText = Object(external_CoreHome_["translate"])("Feedback_Question".concat(this.question)); + + if (val) { + setInterval(function () { + $('#message').focus(); + }, 500); + } + } + }, + created: function created() { + if (this.showQuestionBanner !== '0') { + this.initQuestion(); + } + }, + methods: { + initQuestion: function initQuestion() { + if (!Object(external_CoreHome_["getCookie"])(cookieName)) { + this.question = this.getRandomIntBetween(0, 4); + } else { + // eslint-disable-next-line radix + this.question = parseInt(Object(external_CoreHome_["getCookie"])(cookieName)); + } + + var nextQuestion = (this.question + 1) % 4; + var sevenDays = 7 * 60 * 60 * 24 * 1000; + Object(external_CoreHome_["setCookie"])(cookieName, nextQuestion, sevenDays); + }, + getRandomIntBetween: function getRandomIntBetween(min, max) { + // eslint-disable-next-line no-param-reassign + min = Math.ceil(min); // eslint-disable-next-line no-param-reassign + + max = Math.floor(max); + return Math.floor(Math.random() * (max - min + 1) + min); + }, + showQuestion: function showQuestion() { + this.showFeedbackForm = true; + this.errorMessage = null; + }, + disableReminder: function disableReminder() { + external_CoreHome_["AjaxHelper"].fetch({ + method: 'Feedback.updateFeedbackReminderDate' + }); + this.hide = true; + }, + sendFeedback: async function sendFeedback() { + this.errorMessage = null; + var res = await external_CoreHome_["AjaxHelper"].fetch({ + method: 'Feedback.sendFeedbackForSurvey', + question: this.questionText, + message: this.feedbackMessage + }); + + if (res.value === 'success') { + $('.modal').modal('close'); + this.feedbackDone = true; + this.hide = true; + } else { + this.errorMessage = res.value; + } + } + } +})); +// CONCATENATED MODULE: ./plugins/Feedback/vue/src/FeedbackQuestion/FeedbackQuestion.vue?vue&type=script&lang=ts + +// CONCATENATED MODULE: ./plugins/Feedback/vue/src/FeedbackQuestion/FeedbackQuestion.vue + + + +FeedbackQuestionvue_type_script_lang_ts.render = FeedbackQuestionvue_type_template_id_2d5e9885_render + +/* harmony default export */ var FeedbackQuestion = (FeedbackQuestionvue_type_script_lang_ts); +// CONCATENATED MODULE: ./plugins/Feedback/vue/src/FeedbackQuestion/FeedbackQuestion.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 FeedbackQuestion_adapter = (Object(external_CoreHome_["createAngularJsAdapter"])({ + component: FeedbackQuestion, + scope: { + showQuestionBanner: { + angularJsBind: '@' + } + }, + directiveName: 'piwikFeedbackQuestion' +})); // CONCATENATED MODULE: ./plugins/Feedback/vue/src/index.ts /*! * Matomo - free/libre analytics platform @@ -347,6 +554,7 @@ RateFeaturevue_type_script_lang_ts.render = render + // CONCATENATED MODULE: ./node_modules/@vue/cli-service/lib/commands/build/entry-lib-no-default.js diff --git a/plugins/Feedback/vue/dist/Feedback.umd.min.js b/plugins/Feedback/vue/dist/Feedback.umd.min.js index 805ddb155a..690932aefa 100644 --- a/plugins/Feedback/vue/dist/Feedback.umd.min.js +++ b/plugins/Feedback/vue/dist/Feedback.umd.min.js @@ -1,8 +1,14 @@ -(function(e,t){"object"===typeof exports&&"object"===typeof module?module.exports=t(require("CoreHome"),require("vue")):"function"===typeof define&&define.amd?define(["CoreHome"],t):"object"===typeof exports?exports["Feedback"]=t(require("CoreHome"),require("vue")):e["Feedback"]=t(e["CoreHome"],e["Vue"])})("undefined"!==typeof self?self:this,(function(e,t){return function(e){var t={};function a(n){if(t[n])return t[n].exports;var r=t[n]={i:n,l:!1,exports:{}};return e[n].call(r.exports,r,r.exports,a),r.l=!0,r.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 r in e)a.d(n,r,function(t){return e[t]}.bind(null,r));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/Feedback/vue/dist/",a(a.s="fae3")}({"19dc":function(t,a){t.exports=e},"8bbf":function(e,a){e.exports=t},fae3:function(e,t,a){"use strict";if(a.r(t),a.d(t,"ReviewLinks",(function(){return h})),a.d(t,"RateFeature",(function(){return V})),"undefined"!==typeof window){var n=window.document.currentScript,r=n&&n.src.match(/(.+\/)[^/]+\.js(\?.*)?$/);r&&(a.p=r[1])}var i=a("19dc"),o=a("8bbf"),c=["title"],l={class:"ui-confirm ratefeatureDialog"},s={key:0},d={key:1},u=Object(o["createElementVNode"])("br",null,null,-1),b={class:"messageContainer"},m=["title","value"],p=["value"],v={class:"ui-confirm ratefeatureDialog"},f={key:0},k=["value"];function g(e,t,a,n,r,i){var g=Object(o["resolveComponent"])("MatomoDialog"),j=Object(o["resolveComponent"])("ReviewLinks");return Object(o["openBlock"])(),Object(o["createElementBlock"])("div",{title:e.translate("Feedback_RateFeatureTitle",e.$sanitize(e.title)),class:"ratefeature"},[Object(o["createElementVNode"])("div",{class:"iconContainer",onMouseenter:t[2]||(t[2]=function(t){return e.expanded=!0}),onMouseleave:t[3]||(t[3]=function(t){return e.expanded=!1})},[Object(o["createElementVNode"])("img",{onClick:t[0]||(t[0]=function(t){e.likeFeature(),e.showFeedbackForm=!0}),class:"like-icon",src:"plugins/Feedback/vue/src/RateFeature/thumbs-up.png"}),Object(o["withDirectives"])(Object(o["createElementVNode"])("img",{onClick:t[1]||(t[1]=function(t){e.dislikeFeature(),e.showFeedbackForm=!0}),class:"dislike-icon",src:"plugins/Feedback/vue/src/RateFeature/thumbs-down.png"},null,512),[[o["vShow"],e.expanded]])],32),Object(o["createVNode"])(g,{modelValue:e.showFeedbackForm,"onUpdate:modelValue":t[5]||(t[5]=function(t){return e.showFeedbackForm=t}),onYes:t[6]||(t[6]=function(t){return e.sendFeedback()})},{default:Object(o["withCtx"])((function(){return[Object(o["createElementVNode"])("div",l,[Object(o["createElementVNode"])("h2",null,Object(o["toDisplayString"])(e.translate("Feedback_RateFeatureThankYouTitle",e.title)),1),e.like?(Object(o["openBlock"])(),Object(o["createElementBlock"])("p",s,Object(o["toDisplayString"])(e.translate("Feedback_RateFeatureLeaveMessageLike")),1)):Object(o["createCommentVNode"])("",!0),e.like?Object(o["createCommentVNode"])("",!0):(Object(o["openBlock"])(),Object(o["createElementBlock"])("p",d,Object(o["toDisplayString"])(e.translate("Feedback_RateFeatureLeaveMessageDislike")),1)),u,Object(o["createElementVNode"])("div",b,[Object(o["withDirectives"])(Object(o["createElementVNode"])("textarea",{"onUpdate:modelValue":t[4]||(t[4]=function(t){return e.feedbackMessage=t})},null,512),[[o["vModelText"],e.feedbackMessage]])]),Object(o["createElementVNode"])("input",{type:"button",title:e.translate("Feedback_RateFeatureSendFeedbackInformation"),value:e.translate("Feedback_SendFeedback"),role:"yes"},null,8,m),Object(o["createElementVNode"])("input",{type:"button",role:"cancel",value:e.translate("General_Cancel")},null,8,p)])]})),_:1},8,["modelValue"]),Object(o["createVNode"])(g,{modelValue:e.ratingDone,"onUpdate:modelValue":t[7]||(t[7]=function(t){return e.ratingDone=t})},{default:Object(o["withCtx"])((function(){return[Object(o["createElementVNode"])("div",v,[Object(o["createElementVNode"])("h2",null,Object(o["toDisplayString"])(e.translate("Feedback_ThankYou",e.title)),1),e.like?(Object(o["openBlock"])(),Object(o["createElementBlock"])("div",f,[Object(o["createVNode"])(j)])):Object(o["createCommentVNode"])("",!0),Object(o["createElementVNode"])("input",{type:"button",value:e.translate("General_Ok"),role:"yes"},null,8,k)])]})),_:1},8,["modelValue"])],8,c)}var j={class:"requestReview"},O=Object(o["createStaticVNode"])('<br><br><div class="review-links"><div class="review-link"><a href="https://www.capterra.com/p/182627/Matomo-Analytics/" target="_blank"><div class="image"><img loading="lazy" src="plugins/Feedback/images/capterra.svg"></div><div class="link">Capterra</div></a></div><div class="review-link"><a href="https://www.g2crowd.com/products/matomo-formerly-piwik/details" target="_blank"><div class="image"><img loading="lazy" src="plugins/Feedback/images/g2crowd.svg"></div><div class="link">G2 Crowd</div></a></div><div class="review-link"><a href="https://www.producthunt.com/posts/matomo-2" target="_blank"><div class="image"><img loading="lazy" src="plugins/Feedback/images/producthunt.svg"></div><div class="link">Product Hunt</div></a></div><div class="review-link"><a href="https://www.saasworthy.com/product/matomo" target="_blank"><div class="image"><img loading="lazy" src="plugins/Feedback/images/saasworthy.png"></div><div class="link">SaaSworthy</div></a></div><div class="review-link"><a href="https://www.trustradius.com/products/matomo/reviews" target="_blank"><div class="image"><img loading="lazy" src="plugins/Feedback/images/trustradius.svg"></div><div class="link">TrustRadius</div></a></div></div>',3);function w(e,t,a,n,r,i){return Object(o["openBlock"])(),Object(o["createElementBlock"])("div",j,[Object(o["createElementVNode"])("p",null,Object(o["toDisplayString"])(e.translate("Feedback_PleaseLeaveExternalReviewForMatomo")),1),O])}var F=Object(o["defineComponent"])({});F.render=w;var h=F,y=Object(o["defineComponent"])({props:{title:String},components:{MatomoDialog:i["MatomoDialog"],ReviewLinks:h},data:function(){return{like:!1,ratingDone:!1,expanded:!1,showFeedbackForm:!1,feedbackMessage:""}},methods:{dislikeFeature:function(){this.like=!1},likeFeature:function(){this.like=!0},sendFeedback:function(){i["AjaxHelper"].fetch({method:"Feedback.sendFeedbackForFeature",featureName:this.title,like:this.like?"1":"0",message:this.feedbackMessage}),this.ratingDone=!0}}});y.render=g;var V=y; +(function(e,t){"object"===typeof exports&&"object"===typeof module?module.exports=t(require("CoreHome"),require("vue")):"function"===typeof define&&define.amd?define(["CoreHome"],t):"object"===typeof exports?exports["Feedback"]=t(require("CoreHome"),require("vue")):e["Feedback"]=t(e["CoreHome"],e["Vue"])})("undefined"!==typeof self?self:this,(function(e,t){return function(e){var t={};function n(a){if(t[a])return t[a].exports;var o=t[a]={i:a,l:!1,exports:{}};return e[a].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,a){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:a})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var a=Object.create(null);if(n.r(a),Object.defineProperty(a,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(a,o,function(t){return e[t]}.bind(null,o));return a},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="plugins/Feedback/vue/dist/",n(n.s="fae3")}({"19dc":function(t,n){t.exports=e},"8bbf":function(e,n){e.exports=t},fae3:function(e,t,n){"use strict";if(n.r(t),n.d(t,"RateFeature",(function(){return F})),n.d(t,"FeedbackQuestion",(function(){return U})),"undefined"!==typeof window){var a=window.document.currentScript,o=a&&a.src.match(/(.+\/)[^/]+\.js(\?.*)?$/);o&&(n.p=o[1])}var r=n("19dc"),c=n("8bbf"),l=["title"],i={class:"ui-confirm ratefeatureDialog"},s={key:0},u={key:1},d=Object(c["createElementVNode"])("br",null,null,-1),b={class:"messageContainer"},m=["title","value"],f=["value"],k={class:"ui-confirm ratefeatureDialog"},p={key:0},j=["value"];function O(e,t,n,a,o,r){var O=Object(c["resolveComponent"])("MatomoDialog");return Object(c["openBlock"])(),Object(c["createElementBlock"])("div",{title:e.translate("Feedback_RateFeatureTitle",e.$sanitize(e.title)),class:"ratefeature"},[Object(c["createElementVNode"])("div",{class:"iconContainer",onMouseenter:t[2]||(t[2]=function(t){return e.expanded=!0}),onMouseleave:t[3]||(t[3]=function(t){return e.expanded=!1})},[Object(c["createElementVNode"])("img",{onClick:t[0]||(t[0]=function(t){e.likeFeature(),e.showFeedbackForm=!0}),class:"like-icon",src:"plugins/Feedback/vue/src/RateFeature/thumbs-up.png"}),Object(c["withDirectives"])(Object(c["createElementVNode"])("img",{onClick:t[1]||(t[1]=function(t){e.dislikeFeature(),e.showFeedbackForm=!0}),class:"dislike-icon",src:"plugins/Feedback/vue/src/RateFeature/thumbs-down.png"},null,512),[[c["vShow"],e.expanded]])],32),Object(c["createVNode"])(O,{modelValue:e.showFeedbackForm,"onUpdate:modelValue":t[5]||(t[5]=function(t){return e.showFeedbackForm=t}),onYes:t[6]||(t[6]=function(t){return e.sendFeedback()})},{default:Object(c["withCtx"])((function(){return[Object(c["createElementVNode"])("div",i,[Object(c["createElementVNode"])("h2",null,Object(c["toDisplayString"])(e.translate("Feedback_RateFeatureThankYouTitle",e.title)),1),e.like?(Object(c["openBlock"])(),Object(c["createElementBlock"])("p",s,Object(c["toDisplayString"])(e.translate("Feedback_RateFeatureLeaveMessageLike")),1)):Object(c["createCommentVNode"])("",!0),e.like?Object(c["createCommentVNode"])("",!0):(Object(c["openBlock"])(),Object(c["createElementBlock"])("p",u,Object(c["toDisplayString"])(e.translate("Feedback_RateFeatureLeaveMessageDislike")),1)),d,Object(c["createElementVNode"])("div",b,[Object(c["withDirectives"])(Object(c["createElementVNode"])("textarea",{"onUpdate:modelValue":t[4]||(t[4]=function(t){return e.feedbackMessage=t})},null,512),[[c["vModelText"],e.feedbackMessage]])]),Object(c["createElementVNode"])("input",{type:"button",title:e.translate("Feedback_RateFeatureSendFeedbackInformation"),value:e.translate("Feedback_SendFeedback"),role:"yes"},null,8,m),Object(c["createElementVNode"])("input",{type:"button",role:"cancel",value:e.translate("General_Cancel")},null,8,f)])]})),_:1},8,["modelValue"]),Object(c["createVNode"])(O,{modelValue:e.ratingDone,"onUpdate:modelValue":t[7]||(t[7]=function(t){return e.ratingDone=t})},{default:Object(c["withCtx"])((function(){return[Object(c["createElementVNode"])("div",k,[Object(c["createElementVNode"])("h2",null,Object(c["toDisplayString"])(e.translate("Feedback_ThankYou",e.title)),1),e.like?(Object(c["openBlock"])(),Object(c["createElementBlock"])("div",p)):Object(c["createCommentVNode"])("",!0),Object(c["createElementVNode"])("input",{type:"button",value:e.translate("General_Ok"),role:"yes"},null,8,j)])]})),_:1},8,["modelValue"])],8,l)}var h=Object(c["defineComponent"])({props:{title:String},components:{MatomoDialog:r["MatomoDialog"]},data:function(){return{like:!1,ratingDone:!1,expanded:!1,showFeedbackForm:!1,feedbackMessage:""}},methods:{dislikeFeature:function(){this.like=!1},likeFeature:function(){this.like=!0},sendFeedback:function(){r["AjaxHelper"].fetch({method:"Feedback.sendFeedbackForFeature",featureName:this.title,like:this.like?"1":"0",message:this.feedbackMessage}),this.ratingDone=!0}}});h.render=O;var F=h,g=(Object(r["createAngularJsAdapter"])({component:F,scope:{title:{angularJsBind:"@"}},directiveName:"piwikRateFeature"}),{key:0,class:"bannerHeader"}),v=Object(c["createElementVNode"])("i",{class:"icon-heart red-text"},null,-1),V=Object(c["createElementVNode"])("i",{class:"icon-close white-text"},null,-1),y=[V],N={class:"ratefeature"},w={class:"ui-confirm ratefeatureDialog"},M=["innerHTML"],E=Object(c["createElementVNode"])("br",null,null,-1),x={class:"messageContainer"},D={key:0,class:"error-text"},C=Object(c["createElementVNode"])("br",null,null,-1),_=["innerHTML"],S=["value"],B=["value"],T={class:"ui-confirm ratefeatureDialog"},q=["innerHTML"],H=["value"]; /*! * Matomo - free/libre analytics platform * * @link https://matomo.org * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later - */Object(i["createAngularJsAdapter"])({component:V,scope:{title:{angularJsBind:"@"}},directiveName:"piwikRateFeature"})}})})); + */function R(e,t,n,a,o,r){var l=Object(c["resolveComponent"])("MatomoDialog");return Object(c["openBlock"])(),Object(c["createElementBlock"])("div",null,[e.isHidden?Object(c["createCommentVNode"])("",!0):(Object(c["openBlock"])(),Object(c["createElementBlock"])("div",g,[Object(c["createElementVNode"])("span",null,[Object(c["createTextVNode"])(Object(c["toDisplayString"])(e.translate("Feedback_FeedbackTitle"))+" ",1),v]),Object(c["createElementVNode"])("a",{onClick:t[0]||(t[0]=function(){return e.showQuestion&&e.showQuestion.apply(e,arguments)}),class:"btn"},Object(c["toDisplayString"])(e.translate("Feedback_Question".concat(e.question))),1),Object(c["createElementVNode"])("a",{class:"close-btn",onClick:t[1]||(t[1]=function(){return e.disableReminder&&e.disableReminder.apply(e,arguments)})},y)])),Object(c["createElementVNode"])("div",N,[Object(c["createVNode"])(l,{modelValue:e.showFeedbackForm,"onUpdate:modelValue":t[3]||(t[3]=function(t){return e.showFeedbackForm=t}),onValidation:t[4]||(t[4]=function(t){return e.sendFeedback()})},{default:Object(c["withCtx"])((function(){return[Object(c["createElementVNode"])("div",w,[Object(c["createElementVNode"])("h2",null,Object(c["toDisplayString"])(e.translate("Feedback_Question".concat(e.question))),1),Object(c["createElementVNode"])("p",{innerHTML:e.translate("Feedback_FeedbackSubtitle","<i class='icon-heart red-text'></i>")},null,8,M),E,Object(c["createElementVNode"])("div",x,[e.errorMessage?(Object(c["openBlock"])(),Object(c["createElementBlock"])("div",D,Object(c["toDisplayString"])(e.errorMessage),1)):Object(c["createCommentVNode"])("",!0),Object(c["withDirectives"])(Object(c["createElementVNode"])("textarea",{id:"message",class:Object(c["normalizeClass"])({"has-error":e.errorMessage}),"onUpdate:modelValue":t[2]||(t[2]=function(t){return e.feedbackMessage=t})},null,2),[[c["vModelText"],e.feedbackMessage]])]),C,Object(c["createElementVNode"])("p",{innerHTML:e.translate("Feedback_Policy","<a rel='nofollow' href='https://matomo.org/privacy-policy/' target='_blank'>","</a>")},null,8,_),Object(c["createElementVNode"])("input",{type:"button",role:"validation",value:e.translate("Feedback_SendFeedback")},null,8,S),Object(c["createElementVNode"])("input",{type:"button",role:"cancel",value:e.translate("General_Cancel")},null,8,B)])]})),_:1},8,["modelValue"]),Object(c["createVNode"])(l,{modelValue:e.feedbackDone,"onUpdate:modelValue":t[5]||(t[5]=function(t){return e.feedbackDone=t})},{default:Object(c["withCtx"])((function(){return[Object(c["createElementVNode"])("div",T,[Object(c["createElementVNode"])("h2",null,Object(c["toDisplayString"])(e.translate("Feedback_ThankYou")),1),Object(c["createElementVNode"])("p",{innerHTML:e.translate("Feedback_ThankYourForFeedback","<i class='icon-heart red-text'></i>")},null,8,q),Object(c["createElementVNode"])("input",{type:"button",role:"cancel",value:e.translate("General_Close")},null,8,H)])]})),_:1},8,["modelValue"])])])}var Q=window,L=Q.$,A="feedback-question",P=Object(c["defineComponent"])({props:{showQuestionBanner:String},components:{MatomoDialog:r["MatomoDialog"]},computed:{isHidden:function(){return"0"===this.showQuestionBanner||!!this.hide}},data:function(){return{questionText:"",question:0,hide:null,feedbackDone:!1,expanded:!1,showFeedbackForm:!1,feedbackMessage:null,errorMessage:null}},watch:{showFeedbackForm:function(e){this.questionText=Object(r["translate"])("Feedback_Question".concat(this.question)),e&&setInterval((function(){L("#message").focus()}),500)}},created:function(){"0"!==this.showQuestionBanner&&this.initQuestion()},methods:{initQuestion:function(){Object(r["getCookie"])(A)?this.question=parseInt(Object(r["getCookie"])(A)):this.question=this.getRandomIntBetween(0,4);var e=(this.question+1)%4,t=6048e5;Object(r["setCookie"])(A,e,t)},getRandomIntBetween:function(e,t){return e=Math.ceil(e),t=Math.floor(t),Math.floor(Math.random()*(t-e+1)+e)},showQuestion:function(){this.showFeedbackForm=!0,this.errorMessage=null},disableReminder:function(){r["AjaxHelper"].fetch({method:"Feedback.updateFeedbackReminderDate"}),this.hide=!0},sendFeedback:async function(){this.errorMessage=null;var e=await r["AjaxHelper"].fetch({method:"Feedback.sendFeedbackForSurvey",question:this.questionText,message:this.feedbackMessage});"success"===e.value?(L(".modal").modal("close"),this.feedbackDone=!0,this.hide=!0):this.errorMessage=e.value}}});P.render=R;var U=P; +/*! + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */Object(r["createAngularJsAdapter"])({component:U,scope:{showQuestionBanner:{angularJsBind:"@"}},directiveName:"piwikFeedbackQuestion"})}})})); //# sourceMappingURL=Feedback.umd.min.js.map
\ No newline at end of file diff --git a/plugins/Feedback/vue/src/FeedbackQuestion/FeedbackQuestion.adapter.ts b/plugins/Feedback/vue/src/FeedbackQuestion/FeedbackQuestion.adapter.ts new file mode 100644 index 0000000000..8206972ef7 --- /dev/null +++ b/plugins/Feedback/vue/src/FeedbackQuestion/FeedbackQuestion.adapter.ts @@ -0,0 +1,19 @@ +/*! + * 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 RateFeature from './FeedbackQuestion.vue'; + +export default createAngularJsAdapter({ + component: RateFeature, + scope: { + showQuestionBanner: { + angularJsBind: '@', + }, + }, + directiveName: 'piwikFeedbackQuestion', +}); diff --git a/plugins/Feedback/vue/src/FeedbackQuestion/FeedbackQuestion.less b/plugins/Feedback/vue/src/FeedbackQuestion/FeedbackQuestion.less new file mode 100644 index 0000000000..1d65d14b05 --- /dev/null +++ b/plugins/Feedback/vue/src/FeedbackQuestion/FeedbackQuestion.less @@ -0,0 +1,34 @@ +.bannerHeader { + min-height: 48px; + background-color: #263238; + text-align: center; + color: #fff; + + span { + vertical-align: sub; + font-size: 14px; + } + + a { + margin-left: 16px; + margin-top: 6px; + } + + .close-btn { + float: right; + margin-right: 20px; + font-size: 1.2em; + margin-top: 12px; + } +} + +.modal { + .has-error { + border: 1px red solid; + } + + .error-text { + float: left; + color: red; + } +}
\ No newline at end of file diff --git a/plugins/Feedback/vue/src/FeedbackQuestion/FeedbackQuestion.vue b/plugins/Feedback/vue/src/FeedbackQuestion/FeedbackQuestion.vue new file mode 100644 index 0000000000..52fa9cd9fa --- /dev/null +++ b/plugins/Feedback/vue/src/FeedbackQuestion/FeedbackQuestion.vue @@ -0,0 +1,169 @@ +<!-- + 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> + <div v-if="!isHidden" class="bannerHeader"> + <span>{{ translate(`Feedback_FeedbackTitle`) }} <i class="icon-heart red-text"></i></span> + <a @click="showQuestion" class="btn"> + {{ translate(`Feedback_Question${question}`) }} + </a> + <a class="close-btn" @click="disableReminder"> + <i class="icon-close white-text"></i></a> + </div> + <div class="ratefeature"> + <MatomoDialog + v-model="showFeedbackForm" + @validation="sendFeedback()" + > + <div + class="ui-confirm ratefeatureDialog" + > + <h2>{{ translate(`Feedback_Question${question}`) }}</h2> + <p + v-html="translate('Feedback_FeedbackSubtitle', + `<i class='icon-heart red-text'></i>`)"></p> + <br/> + <div class="messageContainer"> + <div class="error-text" v-if="errorMessage">{{ errorMessage }}</div> + <textarea id="message" :class="{'has-error':errorMessage}" v-model="feedbackMessage"/> + </div> + <br/> + <p + v-html="translate('Feedback_Policy',`<a rel='nofollow' href='https://matomo.org/privacy-policy/' target='_blank'>`,'</a>')"></p> + <input + type="button" + role="validation" + :value="translate('Feedback_SendFeedback')" + /> + <input + type="button" + role="cancel" + :value="translate('General_Cancel')" + /> + </div> + </MatomoDialog> + <MatomoDialog v-model="feedbackDone"> + <div + class="ui-confirm ratefeatureDialog" + > + <h2>{{ translate(`Feedback_ThankYou`) }}</h2> + <p v-html="translate('Feedback_ThankYourForFeedback', + `<i class='icon-heart red-text'></i>`)"> + </p> + <input + type="button" + role="cancel" + :value="translate('General_Close')" + /> + </div> + </MatomoDialog> + </div> + </div> +</template> + +<script lang="ts"> +import { defineComponent } from 'vue'; +import { + MatomoDialog, AjaxHelper, setCookie, getCookie, translate, +} from 'CoreHome'; + +const { $ } = window; + +const cookieName = 'feedback-question'; +export default defineComponent({ + + props: { + showQuestionBanner: String, + }, + components: { + MatomoDialog, + }, + computed: { + isHidden() { + if (this.showQuestionBanner === '0') { + return true; + } + return !!this.hide; + }, + }, + data() { + return { + questionText: '', + question: 0, + hide: null, + feedbackDone: false, + expanded: false, + showFeedbackForm: false, + feedbackMessage: null, + errorMessage: null, + }; + }, + watch: { + showFeedbackForm(val) { + // eslint-disable-next-line no-underscore-dangle + this.questionText = translate(`Feedback_Question${this.question}`); + if (val) { + setInterval(() => { + $('#message').focus(); + }, 500); + } + }, + }, + created() { + if (this.showQuestionBanner !== '0') { + this.initQuestion(); + } + }, + methods: { + initQuestion() { + if (!getCookie(cookieName)) { + this.question = this.getRandomIntBetween(0, 4); + } else { + // eslint-disable-next-line radix + this.question = parseInt(getCookie(cookieName)); + } + + const nextQuestion = (this.question + 1) % 4; + const sevenDays = 7 * 60 * 60 * 24 * 1000; + setCookie(cookieName, nextQuestion, sevenDays); + }, + getRandomIntBetween(min, max) { + // eslint-disable-next-line no-param-reassign + min = Math.ceil(min); + // eslint-disable-next-line no-param-reassign + max = Math.floor(max); + return Math.floor(Math.random() * (max - min + 1) + min); + }, + showQuestion() { + this.showFeedbackForm = true; + this.errorMessage = null; + }, + disableReminder() { + AjaxHelper.fetch({ + method: 'Feedback.updateFeedbackReminderDate', + }); + this.hide = true; + }, + async sendFeedback() { + this.errorMessage = null; + const res = await AjaxHelper.fetch({ + method: 'Feedback.sendFeedbackForSurvey', + question: this.questionText, + message: this.feedbackMessage, + }); + + if (res.value === 'success') { + $('.modal').modal('close'); + this.feedbackDone = true; + this.hide = true; + } else { + this.errorMessage = res.value; + } + }, + }, +}); +</script> diff --git a/plugins/Feedback/vue/src/RateFeature/RateFeature.vue b/plugins/Feedback/vue/src/RateFeature/RateFeature.vue index 324142273f..ba90382e55 100644 --- a/plugins/Feedback/vue/src/RateFeature/RateFeature.vue +++ b/plugins/Feedback/vue/src/RateFeature/RateFeature.vue @@ -63,7 +63,6 @@ <div v-if="like" > - <ReviewLinks /> </div> <input type="button" @@ -78,7 +77,6 @@ <script lang="ts"> import { defineComponent } from 'vue'; import { MatomoDialog, AjaxHelper } from 'CoreHome'; -import ReviewLinks from '../ReviewLinks/ReviewLinks.vue'; export default defineComponent({ props: { @@ -86,7 +84,6 @@ export default defineComponent({ }, components: { MatomoDialog, - ReviewLinks, }, data() { return { diff --git a/plugins/Feedback/vue/src/ReviewLinks/ReviewLinks.vue b/plugins/Feedback/vue/src/ReviewLinks/ReviewLinks.vue deleted file mode 100644 index fa65f8569f..0000000000 --- a/plugins/Feedback/vue/src/ReviewLinks/ReviewLinks.vue +++ /dev/null @@ -1,90 +0,0 @@ -<!-- - 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="requestReview"> - <p>{{ translate('Feedback_PleaseLeaveExternalReviewForMatomo') }}</p><br><br> - <div class="review-links"> - <div class="review-link"> - <a - href="https://www.capterra.com/p/182627/Matomo-Analytics/" - target="_blank" - > - <div class="image"> - <img - loading="lazy" - src="plugins/Feedback/images/capterra.svg" - /> - </div> - <div class="link">Capterra</div> - </a> - </div> - <div class="review-link"> - <a - href="https://www.g2crowd.com/products/matomo-formerly-piwik/details" - target="_blank" - > - <div class="image"> - <img - loading="lazy" - src="plugins/Feedback/images/g2crowd.svg" - /> - </div> - <div class="link">G2 Crowd</div> - </a> - </div> - <div class="review-link"> - <a - href="https://www.producthunt.com/posts/matomo-2" - target="_blank" - > - <div class="image"> - <img - loading="lazy" - src="plugins/Feedback/images/producthunt.svg" - /> - </div> - <div class="link">Product Hunt</div> - </a> - </div> - <div class="review-link"> - <a - href="https://www.saasworthy.com/product/matomo" - target="_blank" - > - <div class="image"> - <img - loading="lazy" - src="plugins/Feedback/images/saasworthy.png" - /> - </div> - <div class="link">SaaSworthy</div> - </a> - </div> - <div class="review-link"> - <a - href="https://www.trustradius.com/products/matomo/reviews" - target="_blank" - > - <div class="image"> - <img - loading="lazy" - src="plugins/Feedback/images/trustradius.svg" - /> - </div> - <div class="link">TrustRadius</div> - </a> - </div> - </div> - </div> -</template> - -<script lang="ts"> -import { defineComponent } from 'vue'; - -export default defineComponent({}); -</script> diff --git a/plugins/Feedback/vue/src/index.ts b/plugins/Feedback/vue/src/index.ts index 5f37c3b890..d4018200f8 100644 --- a/plugins/Feedback/vue/src/index.ts +++ b/plugins/Feedback/vue/src/index.ts @@ -6,6 +6,7 @@ */ import './RateFeature/RateFeature.adapter'; +import './FeedbackQuestion/FeedbackQuestion.adapter'; -export { default as ReviewLinks } from './ReviewLinks/ReviewLinks.vue'; export { default as RateFeature } from './RateFeature/RateFeature.vue'; +export { default as FeedbackQuestion } from './FeedbackQuestion/FeedbackQuestion.vue'; |