From b507907a6e306c8e890c2926028e6bf01a3fd7b3 Mon Sep 17 00:00:00 2001 From: dizzy Date: Sun, 3 Apr 2022 19:43:41 -0700 Subject: [Vue] migrate transitions plugin to Vue (#19005) * migrate transition exporter to Vue * migrate transition switcher to Vue * get ui tests to pass locally + test manually * compile vue entry components for dashboard widgets * fix export in dashboard * fix warning caused by empty translation key --- plugins/CoreHome/vue/dist/CoreHome.umd.js | 20 +- plugins/CoreHome/vue/dist/CoreHome.umd.min.js | 2 +- .../CoreHome/vue/src/WidgetLoader/WidgetLoader.vue | 2 +- plugins/CoreVue/types/index.d.ts | 10 + plugins/Dashboard/javascripts/dashboardWidget.js | 2 + plugins/Dashboard/javascripts/widgetMenu.js | 1 + plugins/Transitions/Transitions.php | 11 +- .../transitionexporter.directive.js | 83 --- .../transitionexporter.popover.html | 21 - .../transitionexporter.popover.less | 52 -- .../transitionswitcher.controller.js | 155 ----- plugins/Transitions/javascripts/transitions.js | 4 +- plugins/Transitions/templates/transitions.twig | 64 +- plugins/Transitions/vue/dist/Transitions.umd.js | 672 +++++++++++++++++++++ .../Transitions/vue/dist/Transitions.umd.min.js | 27 + plugins/Transitions/vue/dist/umd.metadata.json | 6 + .../TransitionExporter.adapter.ts | 20 + .../src/TransitionExporter/TransitionExporter.ts | 50 ++ .../TransitionExporterPopover.less | 52 ++ .../TransitionExporterPopover.vue | 91 +++ .../vue/src/TransitionExporter/transitionParams.ts | 29 + .../src/TransitionSwitcher/TransitionSwitcher.vue | 308 ++++++++++ plugins/Transitions/vue/src/index.ts | 11 + 23 files changed, 1305 insertions(+), 388 deletions(-) delete mode 100644 plugins/Transitions/angularjs/transitionexporter/transitionexporter.directive.js delete mode 100644 plugins/Transitions/angularjs/transitionexporter/transitionexporter.popover.html delete mode 100644 plugins/Transitions/angularjs/transitionexporter/transitionexporter.popover.less delete mode 100644 plugins/Transitions/angularjs/transitionswitcher/transitionswitcher.controller.js create mode 100644 plugins/Transitions/vue/dist/Transitions.umd.js create mode 100644 plugins/Transitions/vue/dist/Transitions.umd.min.js create mode 100644 plugins/Transitions/vue/dist/umd.metadata.json create mode 100644 plugins/Transitions/vue/src/TransitionExporter/TransitionExporter.adapter.ts create mode 100644 plugins/Transitions/vue/src/TransitionExporter/TransitionExporter.ts create mode 100644 plugins/Transitions/vue/src/TransitionExporter/TransitionExporterPopover.less create mode 100644 plugins/Transitions/vue/src/TransitionExporter/TransitionExporterPopover.vue create mode 100644 plugins/Transitions/vue/src/TransitionExporter/transitionParams.ts create mode 100644 plugins/Transitions/vue/src/TransitionSwitcher/TransitionSwitcher.vue create mode 100644 plugins/Transitions/vue/src/index.ts (limited to 'plugins') diff --git a/plugins/CoreHome/vue/dist/CoreHome.umd.js b/plugins/CoreHome/vue/dist/CoreHome.umd.js index c9d3dc26e6..159fd85716 100644 --- a/plugins/CoreHome/vue/dist/CoreHome.umd.js +++ b/plugins/CoreHome/vue/dist/CoreHome.umd.js @@ -9633,33 +9633,33 @@ window.angular.module('piwikApp.service').factory('reportMetadataModel', functio } }; }); -// 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/CoreHome/vue/src/WidgetLoader/WidgetLoader.vue?vue&type=template&id=999e513a +// 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/CoreHome/vue/src/WidgetLoader/WidgetLoader.vue?vue&type=template&id=5df0ba73 -var WidgetLoadervue_type_template_id_999e513a_hoisted_1 = { +var WidgetLoadervue_type_template_id_5df0ba73_hoisted_1 = { key: 0 }; -var WidgetLoadervue_type_template_id_999e513a_hoisted_2 = { +var WidgetLoadervue_type_template_id_5df0ba73_hoisted_2 = { class: "notification system notification-error" }; -var WidgetLoadervue_type_template_id_999e513a_hoisted_3 = { +var WidgetLoadervue_type_template_id_5df0ba73_hoisted_3 = { key: 0, rel: "noreferrer noopener", target: "_blank", href: "https://matomo.org/faq/troubleshooting/faq_19489/" }; -var WidgetLoadervue_type_template_id_999e513a_hoisted_4 = { +var WidgetLoadervue_type_template_id_5df0ba73_hoisted_4 = { class: "theWidgetContent", ref: "widgetContent" }; -function WidgetLoadervue_type_template_id_999e513a_render(_ctx, _cache, $props, $setup, $data, $options) { +function WidgetLoadervue_type_template_id_5df0ba73_render(_ctx, _cache, $props, $setup, $data, $options) { var _component_ActivityIndicator = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveComponent"])("ActivityIndicator"); return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_ActivityIndicator, { "loading-message": _ctx.loadingMessage, loading: _ctx.loading - }, null, 8, ["loading-message", "loading"]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [_ctx.widgetName ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("h2", WidgetLoadervue_type_template_id_999e513a_hoisted_1, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.widgetName), 1)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", WidgetLoadervue_type_template_id_999e513a_hoisted_2, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_ErrorRequest', '', '')) + " ", 1), _ctx.hasErrorFaqLink ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("a", WidgetLoadervue_type_template_id_999e513a_hoisted_3, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_ErrorRequestFaqLink')), 1)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)])], 512), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], _ctx.loadingFailed]]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", WidgetLoadervue_type_template_id_999e513a_hoisted_4, null, 512)]); + }, null, 8, ["loading-message", "loading"]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [_ctx.widgetName ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("h2", WidgetLoadervue_type_template_id_5df0ba73_hoisted_1, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.widgetName), 1)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", WidgetLoadervue_type_template_id_5df0ba73_hoisted_2, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_ErrorRequest', '', '')) + " ", 1), _ctx.hasErrorFaqLink ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("a", WidgetLoadervue_type_template_id_5df0ba73_hoisted_3, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_ErrorRequestFaqLink')), 1)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)])], 512), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], _ctx.loadingFailed]]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", WidgetLoadervue_type_template_id_5df0ba73_hoisted_4, null, 512)]); } -// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/WidgetLoader/WidgetLoader.vue?vue&type=template&id=999e513a +// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/WidgetLoader/WidgetLoader.vue?vue&type=template&id=5df0ba73 // 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/CoreHome/vue/src/WidgetLoader/WidgetLoader.vue?vue&type=script&lang=ts @@ -9833,10 +9833,10 @@ function WidgetLoadervue_type_template_id_999e513a_render(_ctx, _cache, $props, var $rootScope = Matomo_Matomo.helper.getAngularDependency('$rootScope'); var scope = $rootScope.$new(); _this.currentScope = scope; - Matomo_Matomo.helper.compileVueEntryComponents($content); Matomo_Matomo.helper.compileAngularComponents($content, { scope: scope }); + Matomo_Matomo.helper.compileVueEntryComponents($content); Notifications_store.parseNotificationDivs(); setTimeout(function () { Matomo_Matomo.postEvent('widget:loaded', { @@ -9871,7 +9871,7 @@ function WidgetLoadervue_type_template_id_999e513a_render(_ctx, _cache, $props, -WidgetLoadervue_type_script_lang_ts.render = WidgetLoadervue_type_template_id_999e513a_render +WidgetLoadervue_type_script_lang_ts.render = WidgetLoadervue_type_template_id_5df0ba73_render /* harmony default export */ var WidgetLoader = (WidgetLoadervue_type_script_lang_ts); // CONCATENATED MODULE: ./plugins/CoreHome/vue/src/WidgetLoader/WidgetLoader.adapter.ts diff --git a/plugins/CoreHome/vue/dist/CoreHome.umd.min.js b/plugins/CoreHome/vue/dist/CoreHome.umd.min.js index d40ac67e69..c708da4c4a 100644 --- a/plugins/CoreHome/vue/dist/CoreHome.umd.min.js +++ b/plugins/CoreHome/vue/dist/CoreHome.umd.min.js @@ -461,7 +461,7 @@ function tc(){return{get pages(){return Cl.pages.value},findPageInCategory:funct * @link https://matomo.org * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later */ -window.angular.module("piwikApp.service").factory("reportMetadataModel",(function(){return{get reports(){return lc.reports.value},findReport:lc.findReport.bind(lc),fetchReportMetadata:function(){return lc.fetchReportMetadata().then((function(e){return Et(e)}))}}}));var cc={key:0},sc={class:"notification system notification-error"},uc={key:0,rel:"noreferrer noopener",target:"_blank",href:"https://matomo.org/faq/troubleshooting/faq_19489/"},dc={class:"theWidgetContent",ref:"widgetContent"};function pc(e,t,n,r,i,o){var l=Object(a["resolveComponent"])("ActivityIndicator");return Object(a["openBlock"])(),Object(a["createElementBlock"])("div",null,[Object(a["createVNode"])(l,{"loading-message":e.loadingMessage,loading:e.loading},null,8,["loading-message","loading"]),Object(a["withDirectives"])(Object(a["createElementVNode"])("div",null,[e.widgetName?(Object(a["openBlock"])(),Object(a["createElementBlock"])("h2",cc,Object(a["toDisplayString"])(e.widgetName),1)):Object(a["createCommentVNode"])("",!0),Object(a["createElementVNode"])("div",sc,[Object(a["createTextVNode"])(Object(a["toDisplayString"])(e.translate("General_ErrorRequest","",""))+" ",1),e.hasErrorFaqLink?(Object(a["openBlock"])(),Object(a["createElementBlock"])("a",uc,Object(a["toDisplayString"])(e.translate("General_ErrorRequestFaqLink")),1)):Object(a["createCommentVNode"])("",!0)])],512),[[a["vShow"],e.loadingFailed]]),Object(a["createElementVNode"])("div",dc,null,512)])}var mc=Object(a["defineComponent"])({props:{widgetParams:Object,widgetName:String},components:{ActivityIndicator:ho},data:function(){return{loading:!1,loadingFailed:!1,changeCounter:0,currentScope:null,lastWidgetAbortController:null}},watch:{widgetParams:function(e){e&&this.loadWidgetUrl(e,this.changeCounter+=1)}},computed:{loadingMessage:function(){return this.widgetName?C("General_LoadingPopover",this.widgetName):C("General_LoadingData")},hasErrorFaqLink:function(){var e=S.config.enable_general_settings_admin,t=S.config.enable_plugins_admin;return S.hasSuperUserAccess&&(e||t)}},mounted:function(){this.widgetParams&&this.loadWidgetUrl(this.widgetParams,this.changeCounter+=1)},unmounted:function(){this.cleanupLastWidgetContent()},methods:{abortHttpRequestIfNeeded:function(){this.lastWidgetAbortController&&(this.lastWidgetAbortController.abort(),this.lastWidgetAbortController=null)},cleanupLastWidgetContent:function(){var e=this.$refs.widgetContent;e&&(e.innerHTML=""),this.currentScope&&this.currentScope.$destroy()},getWidgetUrl:function(e){var t=Ce.parsed.value,n=Object.assign({},e||{}),r=Object.keys(Object.assign(Object.assign({},Ce.hashParsed.value),{},{idSite:"",period:"",date:"",segment:"",widget:""}));return r.forEach((function(e){"category"!==e&&"subcategory"!==e&&(e in n||(n[e]=t[e]))})),Or.isComparisonEnabled()&&(n=Object.assign(Object.assign({},n),{},{comparePeriods:t.comparePeriods,compareDates:t.compareDates,compareSegments:t.compareSegments})),e&&"showtitle"in e||(n.showtitle="1"),S.shouldPropagateTokenAuth&&t.token_auth&&(S.broadcast.isWidgetizeRequestWithoutSession()||(n.force_api_session="1"),n.token_auth=t.token_auth),n.random=Math.floor(1e4*Math.random()),n},loadWidgetUrl:function(e,t){var n=this;this.loading=!0,this.abortHttpRequestIfNeeded(),this.cleanupLastWidgetContent(),this.lastWidgetAbortController=new AbortController,Xe.fetch(this.getWidgetUrl(e),{format:"html",headers:{"X-Requested-With":"XMLHttpRequest"},abortController:this.lastWidgetAbortController}).then((function(r){if(t===n.changeCounter&&r&&"string"===typeof r){n.lastWidgetAbortController=null,n.loading=!1,n.loadingFailed=!1;var i=n.$refs.widgetContent;window.$(i).html(r);var a=window.$(i).children();if(n.widgetName){var o=a.find("> .card-content .card-title");o.length||(o=a.find("> h2")),o.length&&o.html(S.helper.htmlEntities(n.widgetName))}var l=S.helper.getAngularDependency("$rootScope"),c=l.$new();n.currentScope=c,S.helper.compileVueEntryComponents(a),S.helper.compileAngularComponents(a,{scope:c}),fl.parseNotificationDivs(),setTimeout((function(){S.postEvent("widget:loaded",{parameters:e,element:a})}))}})).catch((function(e){t===n.changeCounter&&(n.lastWidgetAbortController=null,n.cleanupLastWidgetContent(),n.loading=!1,"abort"!==e.xhrStatus&&(n.loadingFailed=!0))}))}}});mc.render=pc;var fc=mc; +window.angular.module("piwikApp.service").factory("reportMetadataModel",(function(){return{get reports(){return lc.reports.value},findReport:lc.findReport.bind(lc),fetchReportMetadata:function(){return lc.fetchReportMetadata().then((function(e){return Et(e)}))}}}));var cc={key:0},sc={class:"notification system notification-error"},uc={key:0,rel:"noreferrer noopener",target:"_blank",href:"https://matomo.org/faq/troubleshooting/faq_19489/"},dc={class:"theWidgetContent",ref:"widgetContent"};function pc(e,t,n,r,i,o){var l=Object(a["resolveComponent"])("ActivityIndicator");return Object(a["openBlock"])(),Object(a["createElementBlock"])("div",null,[Object(a["createVNode"])(l,{"loading-message":e.loadingMessage,loading:e.loading},null,8,["loading-message","loading"]),Object(a["withDirectives"])(Object(a["createElementVNode"])("div",null,[e.widgetName?(Object(a["openBlock"])(),Object(a["createElementBlock"])("h2",cc,Object(a["toDisplayString"])(e.widgetName),1)):Object(a["createCommentVNode"])("",!0),Object(a["createElementVNode"])("div",sc,[Object(a["createTextVNode"])(Object(a["toDisplayString"])(e.translate("General_ErrorRequest","",""))+" ",1),e.hasErrorFaqLink?(Object(a["openBlock"])(),Object(a["createElementBlock"])("a",uc,Object(a["toDisplayString"])(e.translate("General_ErrorRequestFaqLink")),1)):Object(a["createCommentVNode"])("",!0)])],512),[[a["vShow"],e.loadingFailed]]),Object(a["createElementVNode"])("div",dc,null,512)])}var mc=Object(a["defineComponent"])({props:{widgetParams:Object,widgetName:String},components:{ActivityIndicator:ho},data:function(){return{loading:!1,loadingFailed:!1,changeCounter:0,currentScope:null,lastWidgetAbortController:null}},watch:{widgetParams:function(e){e&&this.loadWidgetUrl(e,this.changeCounter+=1)}},computed:{loadingMessage:function(){return this.widgetName?C("General_LoadingPopover",this.widgetName):C("General_LoadingData")},hasErrorFaqLink:function(){var e=S.config.enable_general_settings_admin,t=S.config.enable_plugins_admin;return S.hasSuperUserAccess&&(e||t)}},mounted:function(){this.widgetParams&&this.loadWidgetUrl(this.widgetParams,this.changeCounter+=1)},unmounted:function(){this.cleanupLastWidgetContent()},methods:{abortHttpRequestIfNeeded:function(){this.lastWidgetAbortController&&(this.lastWidgetAbortController.abort(),this.lastWidgetAbortController=null)},cleanupLastWidgetContent:function(){var e=this.$refs.widgetContent;e&&(e.innerHTML=""),this.currentScope&&this.currentScope.$destroy()},getWidgetUrl:function(e){var t=Ce.parsed.value,n=Object.assign({},e||{}),r=Object.keys(Object.assign(Object.assign({},Ce.hashParsed.value),{},{idSite:"",period:"",date:"",segment:"",widget:""}));return r.forEach((function(e){"category"!==e&&"subcategory"!==e&&(e in n||(n[e]=t[e]))})),Or.isComparisonEnabled()&&(n=Object.assign(Object.assign({},n),{},{comparePeriods:t.comparePeriods,compareDates:t.compareDates,compareSegments:t.compareSegments})),e&&"showtitle"in e||(n.showtitle="1"),S.shouldPropagateTokenAuth&&t.token_auth&&(S.broadcast.isWidgetizeRequestWithoutSession()||(n.force_api_session="1"),n.token_auth=t.token_auth),n.random=Math.floor(1e4*Math.random()),n},loadWidgetUrl:function(e,t){var n=this;this.loading=!0,this.abortHttpRequestIfNeeded(),this.cleanupLastWidgetContent(),this.lastWidgetAbortController=new AbortController,Xe.fetch(this.getWidgetUrl(e),{format:"html",headers:{"X-Requested-With":"XMLHttpRequest"},abortController:this.lastWidgetAbortController}).then((function(r){if(t===n.changeCounter&&r&&"string"===typeof r){n.lastWidgetAbortController=null,n.loading=!1,n.loadingFailed=!1;var i=n.$refs.widgetContent;window.$(i).html(r);var a=window.$(i).children();if(n.widgetName){var o=a.find("> .card-content .card-title");o.length||(o=a.find("> h2")),o.length&&o.html(S.helper.htmlEntities(n.widgetName))}var l=S.helper.getAngularDependency("$rootScope"),c=l.$new();n.currentScope=c,S.helper.compileAngularComponents(a,{scope:c}),S.helper.compileVueEntryComponents(a),fl.parseNotificationDivs(),setTimeout((function(){S.postEvent("widget:loaded",{parameters:e,element:a})}))}})).catch((function(e){t===n.changeCounter&&(n.lastWidgetAbortController=null,n.cleanupLastWidgetContent(),n.loading=!1,"abort"!==e.xhrStatus&&(n.loadingFailed=!0))}))}}});mc.render=pc;var fc=mc; /*! * Matomo - free/libre analytics platform * diff --git a/plugins/CoreHome/vue/src/WidgetLoader/WidgetLoader.vue b/plugins/CoreHome/vue/src/WidgetLoader/WidgetLoader.vue index 70e2743ab8..9e4ac6b239 100644 --- a/plugins/CoreHome/vue/src/WidgetLoader/WidgetLoader.vue +++ b/plugins/CoreHome/vue/src/WidgetLoader/WidgetLoader.vue @@ -219,8 +219,8 @@ export default defineComponent({ const scope = $rootScope.$new(); this.currentScope = scope; - Matomo.helper.compileVueEntryComponents($content); Matomo.helper.compileAngularComponents($content, { scope }); + Matomo.helper.compileVueEntryComponents($content); NotificationsStore.parseNotificationDivs(); diff --git a/plugins/CoreVue/types/index.d.ts b/plugins/CoreVue/types/index.d.ts index 4a0de71f22..fe19e74b40 100644 --- a/plugins/CoreVue/types/index.d.ts +++ b/plugins/CoreVue/types/index.d.ts @@ -187,6 +187,15 @@ declare global { formatCurrency(value?: number|string, currency: string): string; } + interface Transitions { + reset(actionType: string, actionName: string, overrideParams: string); + showPopover(showEmbeddedInReport: boolean): void; + } + + interface TransitionsGlobal { + new (actionType: string, actionName: string, rowAction: unknown|null, overrideParams: string): Transitions; + } + interface Window { angular: IAngularStatic; globalAjaxQueue: GlobalAjaxQueue; @@ -201,6 +210,7 @@ declare global { $: JQueryStatic; Piwik_Popover: PiwikPopoverGlobal; NumberFormatter: NumberFormatter; + Piwik_Transitions: TransitionsGlobal; _pk_translate(translationStringId: string, values: string[]): string; require(p: string): any; diff --git a/plugins/Dashboard/javascripts/dashboardWidget.js b/plugins/Dashboard/javascripts/dashboardWidget.js index 890eb7ef28..adf2247bc7 100644 --- a/plugins/Dashboard/javascripts/dashboardWidget.js +++ b/plugins/Dashboard/javascripts/dashboardWidget.js @@ -4,6 +4,7 @@ * @link https://matomo.org * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later */ + (function ($) { $.widget('piwik.dashboardWidget', { @@ -136,6 +137,7 @@ // there might be race conditions, eg widget might be just refreshed while whole dashboard is also // removed from DOM piwikHelper.compileAngularComponents($widgetContent, { forceNewScope: true }); + piwikHelper.compileVueEntryComponents($widgetContent); } $widgetContent.removeClass('loading'); $widgetContent.trigger('widget:create', [self]); diff --git a/plugins/Dashboard/javascripts/widgetMenu.js b/plugins/Dashboard/javascripts/widgetMenu.js index f79365c6a1..7e4084e865 100644 --- a/plugins/Dashboard/javascripts/widgetMenu.js +++ b/plugins/Dashboard/javascripts/widgetMenu.js @@ -431,6 +431,7 @@ widgetsHelper.loadWidgetAjax = function (widgetUniqueId, widgetParameters, onWid // document.getElementById needed for widgets with uniqueid like widgetOpens+Contact+Form $('.widgetContent', widgetElement).html($(response)); piwikHelper.compileAngularComponents($('.widgetContent', widgetElement), { forceNewScope: true }); + piwikHelper.compileVueEntryComponents($('.widgetContent', widgetElement)); $('.widgetContent', widgetElement).trigger('widget:create'); settings.onPreviewLoaded(widgetUniqueId, widgetElement); $('.' + settings.widgetpreviewClass + ' .widgetTop', widgetPreview).on('click', function () { diff --git a/plugins/Transitions/Transitions.php b/plugins/Transitions/Transitions.php index aae4211596..5f5367988f 100644 --- a/plugins/Transitions/Transitions.php +++ b/plugins/Transitions/Transitions.php @@ -38,14 +38,12 @@ class Transitions extends \Piwik\Plugin public function getStylesheetFiles(&$stylesheets) { $stylesheets[] = 'plugins/Transitions/stylesheets/transitions.less'; - $stylesheets[] = 'plugins/Transitions/angularjs/transitionexporter/transitionexporter.popover.less'; + $stylesheets[] = 'plugins/Transitions/vue/src/TransitionExporter/TransitionExporterPopover.less'; } public function getJsFiles(&$jsFiles) { $jsFiles[] = 'plugins/Transitions/javascripts/transitions.js'; - $jsFiles[] = 'plugins/Transitions/angularjs/transitionswitcher/transitionswitcher.controller.js'; - $jsFiles[] = 'plugins/Transitions/angularjs/transitionexporter/transitionexporter.directive.js'; } public function getClientSideTranslationKeys(&$translationKeys) @@ -58,6 +56,13 @@ class Transitions extends \Piwik\Plugin $translationKeys[] = 'Transitions_Transitions'; $translationKeys[] = 'CoreHome_ThereIsNoDataForThisReport'; $translationKeys[] = 'General_Others'; + $translationKeys[] = 'Actions_ActionType'; + $translationKeys[] = 'Transitions_TopX'; + $translationKeys[] = 'Transitions_AvailableInOtherReports'; + $translationKeys[] = 'Actions_SubmenuPageTitles'; + $translationKeys[] = 'Actions_SubmenuPagesEntry'; + $translationKeys[] = 'Actions_SubmenuPagesExit'; + $translationKeys[] = 'Transitions_AvailableInOtherReports2'; } public function addJsGlobalVariables(&$out) diff --git a/plugins/Transitions/angularjs/transitionexporter/transitionexporter.directive.js b/plugins/Transitions/angularjs/transitionexporter/transitionexporter.directive.js deleted file mode 100644 index f26a448d13..0000000000 --- a/plugins/Transitions/angularjs/transitionexporter/transitionexporter.directive.js +++ /dev/null @@ -1,83 +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 - */ - -(function () { - - angular.module("piwikApp").directive('transitionExporter', transitionExporter); - transitionExporter.$inject = ['$document', 'piwik', '$compile', '$timeout', '$location', '$httpParamSerializerJQLike', '$rootScope']; - - function transitionExporter($document, piwik, $compile, $timeout, $location, $httpParamSerializerJQLike, $rootScope) { - - return { - restrict: 'A', - link: function(scope, element) { - - scope.getExportLink = function() { - - var exportUrlParams = { - module: 'API' - }; - - exportUrlParams.method = 'Transitions.getTransitionsForAction'; - exportUrlParams.actionType = $rootScope.transitionExportParams['actionType']; - exportUrlParams.actionName = $rootScope.transitionExportParams['actionName']; - - exportUrlParams.idSite = piwik.idSite; - exportUrlParams.period = piwik.period; - exportUrlParams.date = piwik.currentDateString; - exportUrlParams.format = scope.exportFormat; - exportUrlParams.token_auth = piwik.token_auth; - exportUrlParams.force_api_session = 1; - - var currentUrl = $location.absUrl(); - var urlParts = currentUrl.split('/'); - urlParts.pop(); - var url = urlParts.join('/'); - - return url + '/index.php?' + $httpParamSerializerJQLike(exportUrlParams); - } - - $rootScope.$on('Transitions.dataChanged', function (event, params) { - $rootScope.transitionExportParams = params; - }); - - scope.onExportFormatChange = function (format) { - scope.exportFormat = format; - } - - element.on('click', function () { - - scope.exportFormat = 'JSON'; - scope.exportFormatOptions = [ - {key: 'JSON', value: 'JSON'}, - {key: 'XML', value: 'XML'} - ]; - - if (!$rootScope.transitionExportParams) { - return; - } - - scope.reportTitle = $rootScope.transitionExportParams['actionName'] + ' ' + _pk_translate('Transitions_Transitions'); - - this.popover = Piwik_Popover.showLoading(_pk_translate('General_Export'), self.actionName, 200); - - var elem = $document.find('#transitionExport').eq(0); - if (!elem.length) { - elem = angular.element(''); - elem.attr('ng-include', "'plugins/Transitions/angularjs/transitionexporter/transitionexporter.popover.html?cb=' + encodeURIComponent(piwik.cacheBuster) + '\'"); - } - - $compile(elem)(scope, function (compiled){ - Piwik_Popover.setTitle(_pk_translate('General_Export') + ' ' + piwikHelper.htmlEntities(scope.reportTitle)); - Piwik_Popover.setContent(compiled); - }); - - }); - } - }; - } -})(); diff --git a/plugins/Transitions/angularjs/transitionexporter/transitionexporter.popover.html b/plugins/Transitions/angularjs/transitionexporter/transitionexporter.popover.html deleted file mode 100644 index 76f1b74f6f..0000000000 --- a/plugins/Transitions/angularjs/transitionexporter/transitionexporter.popover.html +++ /dev/null @@ -1,21 +0,0 @@ -
- -
-
-
-
-
- -
- - - -
\ No newline at end of file diff --git a/plugins/Transitions/angularjs/transitionexporter/transitionexporter.popover.less b/plugins/Transitions/angularjs/transitionexporter/transitionexporter.popover.less deleted file mode 100644 index 54b15e412c..0000000000 --- a/plugins/Transitions/angularjs/transitionexporter/transitionexporter.popover.less +++ /dev/null @@ -1,52 +0,0 @@ -.transitions-export-popover { - - [name=format] { - .form-group label.fieldRadioTitle { - display: block; - } - - p.radio { - width: 50%; - float: left; - display: block; - } - } - - textarea { - word-break: break-all; - padding: 5px; - height: 80px; - } - - .toggle-export-url { - font-size: 14px; - margin-left: 20px; - } - - .filter_limit { - clear: both; - float: none; - - [piwik-field] { - width: 50%; - float: left; - } - } - - .showoptions > span { - color: @color-blue-piwik; - cursor: pointer; - text-decoration: underline; - } - - .tooltip { - color: @color-silver; - font-size: 13px; - padding: 5px; - } - - .tooltip > a { - color: @color-blue-piwik; - text-decoration: underline; - } -} \ No newline at end of file diff --git a/plugins/Transitions/angularjs/transitionswitcher/transitionswitcher.controller.js b/plugins/Transitions/angularjs/transitionswitcher/transitionswitcher.controller.js deleted file mode 100644 index 4195ba495a..0000000000 --- a/plugins/Transitions/angularjs/transitionswitcher/transitionswitcher.controller.js +++ /dev/null @@ -1,155 +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 - */ - -(function () { - angular.module('piwikApp').controller('TransitionSwitcherController', TransitionSwitcherController); - - TransitionSwitcherController.$inject = ['piwikApi', '$filter', '$rootScope']; - - function TransitionSwitcherController(piwikApi, $filter, $rootScope) { - var translate = $filter('translate'); - - var self = this; - this.actionType = 'Actions.getPageUrls'; - this.actionNameOptions = []; - this.actionTypeOptions = [ - {key: 'Actions.getPageUrls', value: translate('Actions_PageUrls')}, - {key: 'Actions.getPageTitles', value: translate('Actions_WidgetPageTitles')} - ]; - this.isLoading = false; - this.transitions = null; - this.actionName = null; - this.isEnabled = true; - var noDataKey = '_____ignore_____'; - - this.detectActionName = function (reports) - { - var othersLabel = translate('General_Others'); - - var label, report; - for (var i = 0; i < reports.length; i++) { - if (!reports[i]) { - continue; - } - - report = reports[i]; - - if (report.label === othersLabel) { - continue; - } - - var key = null; - if (self.isUrlReport()) { - key = report.url - } else { - key = report.label; - } - - if (key) { - label = report.label + ' (' + translate('Transitions_NumPageviews', report.nb_hits) + ')'; - self.actionNameOptions.push({key: key, value: label, url: report.url}); - if (!self.actionName) { - self.actionName = key - } - } - } - } - - this.isUrlReport = function() - { - return this.actionType === 'Actions.getPageUrls'; - } - - this.fetch = function (type) { - this.isLoading = true; - this.actionNameOptions = []; - this.actionName = null; - - piwikApi.fetch({ - method: type, - flat: 1, filter_limit: 100, - filter_sort_order: 'desc', - filter_sort_column: 'nb_hits', - showColumns: 'label,nb_hits,url' - }).then(function (report) { - self.isLoading = false; - self.actionNameOptions = []; - self.actionName = null; - - if (report && report.length) { - self.isEnabled = true; - self.detectActionName(report); - self.onActionNameChange(self.actionName); - } - - if (null === self.actionName || self.actionNameOptions.length === 0) { - self.isEnabled = false; - self.actionName = noDataKey; - self.actionNameOptions.push({key: noDataKey, value: translate('CoreHome_ThereIsNoDataForThisReport')}); - } - }, function () { - self.isLoading = false; - self.isEnabled = false; - }); - } - - this.onActionTypeChange = function (actionName) { - this.fetch(actionName); - }; - - this.onActionNameChange = function (actionName) { - if (actionName === null || actionName === noDataKey) { - return; - } - - var type = 'url'; - if (!this.isUrlReport()) { - type = 'title'; - } - if (!this.transitions) { - this.transitions = new Piwik_Transitions(type, actionName, null, ''); - } else { - this.transitions.reset(type, actionName, ''); - } - this.transitions.showPopover(true); - }; - - $rootScope.$on('Transitions.switchTransitionsUrl', function (event, params) { - if (params && params.url) { - if (self.isUrlReport()) { - params.url = params.url.replace('https://', '').replace('http://', ''); - } - - var found = false, option, optionUrl; - for (var i = 0; i < self.actionNameOptions.length; i++) { - option = self.actionNameOptions[i]; - optionUrl = option.url; - if (optionUrl && self.isUrlReport()) { - optionUrl = String(optionUrl).replace('https://', '').replace('http://', ''); - } else { - optionUrl = null; - } - - if (!found && (option.key === params.url || (params.url === optionUrl && optionUrl))) { - found = true; - self.actionName = option.key; - } - } - if (!found) { - // we only fetch top 100 in the report... so the entry the user clicked on, might not be in the top 100 - var options = angular.copy(self.actionNameOptions); // somehow needed to force angular to render it - options.push({key: params.url, value: params.url}); - self.actionNameOptions = options; - self.actionName = params.url; - } - self.onActionNameChange(self.actionName); - } - }); - - this.fetch(this.actionType); - } -})(); \ No newline at end of file diff --git a/plugins/Transitions/javascripts/transitions.js b/plugins/Transitions/javascripts/transitions.js index caabaa0b69..f8d0bf8749 100644 --- a/plugins/Transitions/javascripts/transitions.js +++ b/plugins/Transitions/javascripts/transitions.js @@ -249,7 +249,7 @@ Piwik_Transitions.prototype.showPopover = function (showEmbeddedInReport) { if (!showEmbeddedInReport) { Piwik_Popover.setContent(Piwik_Transitions.popoverHtml); } else { - $('#transitions_inline_loading').hide(); + $('#transitions_inline_loading').hide(); $('#transitions_report .popoverContainer').html(Piwik_Transitions.popoverHtml); $('#transitions_report .popoverContainer').show(); } @@ -1620,7 +1620,7 @@ Piwik_Transitions_Ajax.prototype.callApi = function (method, params, callback) { Piwik_Popover.showError(errorTitle, errorMessage, errorBack); } - $('#transitions_inline_loading').hide(); + $('#transitions_inline_loading').hide(); }; if (typeof Piwik_Transitions_Translations == 'undefined') { diff --git a/plugins/Transitions/templates/transitions.twig b/plugins/Transitions/templates/transitions.twig index 3cb0a6354e..beb54a04d0 100644 --- a/plugins/Transitions/templates/transitions.twig +++ b/plugins/Transitions/templates/transitions.twig @@ -3,66 +3,10 @@ help-url="https://matomo.org/docs/transitions/" content-title="{{ 'Transitions_Transitions'|translate|e('html_attr') }}">{% endif %} -
-
-
-
-
-
-
-
-
-
-
- -
- - - -
- -
- -
- -
- -
-
-
-
-
- - - -
-
-
-
-
- -
- {{ 'Transitions_AvailableInOtherReports'|translate }} - {{ 'Actions_PageUrls'|translate }}, {{ 'Actions_SubmenuPageTitles'|translate }}, - {{ 'Actions_SubmenuPagesEntry'|translate }} - {{ 'General_And'|translate }} - {{ 'Actions_SubmenuPagesExit'|translate }}. - {{ 'Transitions_AvailableInOtherReports2'|translate('')|raw }} -
-
+
{% if not isWidget %}{% endif %} diff --git a/plugins/Transitions/vue/dist/Transitions.umd.js b/plugins/Transitions/vue/dist/Transitions.umd.js new file mode 100644 index 0000000000..1cfd8c03ef --- /dev/null +++ b/plugins/Transitions/vue/dist/Transitions.umd.js @@ -0,0 +1,672 @@ +(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["Transitions"] = factory(require("CoreHome"), require("vue"), require("CorePluginsAdmin")); + else + root["Transitions"] = 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/Transitions/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__, "TransitionExporter", function() { return /* reexport */ TransitionExporter; }); +__webpack_require__.d(__webpack_exports__, "TransitionSwitcher", function() { return /* reexport */ TransitionSwitcher; }); + +// 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"); + +// 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/Transitions/vue/src/TransitionExporter/TransitionExporterPopover.vue?vue&type=template&id=35161b10 + +var _hoisted_1 = { + class: "transition-export-popover row" +}; +var _hoisted_2 = { + class: "col l6" +}; +var _hoisted_3 = { + class: "input-field" +}; +var _hoisted_4 = { + class: "matomo-field" +}; +var _hoisted_5 = { + class: "col l12" +}; +var _hoisted_6 = ["href"]; +function render(_ctx, _cache, $props, $setup, $data, $options) { + var _component_Field = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveComponent"])("Field"); + + 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_["createElementVNode"])("div", _hoisted_2, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_3, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_4, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, { + uicontrol: "radio", + name: "exportFormat", + title: _ctx.translate('CoreHome_ExportFormat'), + "model-value": _ctx.exportFormat, + "onUpdate:modelValue": _cache[0] || (_cache[0] = function ($event) { + return _ctx.exportFormat = $event; + }), + "full-width": true, + options: _ctx.exportFormatOptions + }, null, 8, ["title", "model-value", "options"])])])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_5, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", { + class: "btn", + href: _ctx.exportLink, + target: "_new", + title: "translate('CoreHome_ExportTooltip')" + }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_Export')), 9, _hoisted_6)])]); +} +// CONCATENATED MODULE: ./plugins/Transitions/vue/src/TransitionExporter/TransitionExporterPopover.vue?vue&type=template&id=35161b10 + +// EXTERNAL MODULE: external "CorePluginsAdmin" +var external_CorePluginsAdmin_ = __webpack_require__("a5a2"); + +// CONCATENATED MODULE: ./plugins/Transitions/vue/src/TransitionExporter/transitionParams.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 actionType = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["ref"])(''); +var actionName = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["ref"])(''); + +var onDataChanged = function onDataChanged(params) { + actionType.value = params.actionType; + actionName.value = params.actionName; +}; + +external_CoreHome_["Matomo"].on('Transitions.dataChanged', onDataChanged); + +// 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/Transitions/vue/src/TransitionExporter/TransitionExporterPopover.vue?vue&type=script&lang=ts + + + + +/* harmony default export */ var TransitionExporterPopovervue_type_script_lang_ts = (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["defineComponent"])({ + props: { + exportFormatOptions: { + type: Object, + required: true + } + }, + components: { + Field: external_CorePluginsAdmin_["Field"] + }, + data: function data() { + return { + exportFormat: 'JSON' + }; + }, + computed: { + exportLink: function exportLink() { + var exportUrlParams = { + module: 'API' + }; + exportUrlParams.method = 'Transitions.getTransitionsForAction'; + exportUrlParams.actionType = actionType.value; + exportUrlParams.actionName = actionName.value; + exportUrlParams.idSite = external_CoreHome_["Matomo"].idSite; + exportUrlParams.period = external_CoreHome_["Matomo"].period; + exportUrlParams.date = external_CoreHome_["Matomo"].currentDateString; + exportUrlParams.format = this.exportFormat; + exportUrlParams.token_auth = external_CoreHome_["Matomo"].token_auth; + exportUrlParams.force_api_session = 1; + var currentUrl = window.location.href; + var urlParts = currentUrl.split('/'); + urlParts.pop(); + var url = urlParts.join('/'); + return "".concat(url, "/index.php?").concat(external_CoreHome_["MatomoUrl"].stringify(exportUrlParams)); + } + } +})); +// CONCATENATED MODULE: ./plugins/Transitions/vue/src/TransitionExporter/TransitionExporterPopover.vue?vue&type=script&lang=ts + +// CONCATENATED MODULE: ./plugins/Transitions/vue/src/TransitionExporter/TransitionExporterPopover.vue + + + +TransitionExporterPopovervue_type_script_lang_ts.render = render + +/* harmony default export */ var TransitionExporterPopover = (TransitionExporterPopovervue_type_script_lang_ts); +// CONCATENATED MODULE: ./plugins/Transitions/vue/src/TransitionExporter/TransitionExporter.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, + Piwik_Popover = _window.Piwik_Popover; +/* harmony default export */ var TransitionExporter = ({ + mounted: function mounted(element) { + element.addEventListener('click', function (e) { + e.preventDefault(); + var props = { + exportFormat: 'JSON', + exportFormatOptions: [{ + key: 'JSON', + value: 'JSON' + }, { + key: 'XML', + value: 'XML' + }] + }; + var app = Object(external_CoreHome_["createVueApp"])({ + template: "\n ", + data: function data() { + return { + bind: props + }; + } + }); + app.component('popover', TransitionExporterPopover); + var mountPoint = document.createElement('div'); + app.mount(mountPoint); + Piwik_Popover.showLoading(''); + Piwik_Popover.setTitle("".concat(actionName.value, " ").concat(Object(external_CoreHome_["translate"])('Transitions_Transitions'))); + Piwik_Popover.setContent(mountPoint); + Piwik_Popover.onClose(function () { + app.unmount(); + }); + }); + } +}); +// CONCATENATED MODULE: ./plugins/Transitions/vue/src/TransitionExporter/TransitionExporter.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 transitionExporter() { + return { + restrict: 'A', + link: function link(scope, element) { + TransitionExporter.mounted(element[0]); + } + }; +} + +window.angular.module('piwikApp').directive('transitionExporter', transitionExporter); +// 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/Transitions/vue/src/TransitionSwitcher/TransitionSwitcher.vue?vue&type=template&id=322cd92a + +var TransitionSwitchervue_type_template_id_322cd92a_hoisted_1 = { + class: "row" +}; +var TransitionSwitchervue_type_template_id_322cd92a_hoisted_2 = { + class: "col s12 m3" +}; +var TransitionSwitchervue_type_template_id_322cd92a_hoisted_3 = { + name: "actionType" +}; +var TransitionSwitchervue_type_template_id_322cd92a_hoisted_4 = { + class: "col s12 m9" +}; +var TransitionSwitchervue_type_template_id_322cd92a_hoisted_5 = { + name: "actionName" +}; +var TransitionSwitchervue_type_template_id_322cd92a_hoisted_6 = { + class: "loadingPiwik", + style: { + "display": "none" + }, + id: "transitions_inline_loading" +}; + +var _hoisted_7 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("img", { + src: "plugins/Morpheus/images/loading-blue.gif", + alt: "" +}, null, -1); + +var _hoisted_8 = { + class: "popoverContainer" +}; +var _hoisted_9 = { + id: "Transitions_Error_Container" +}; +var _hoisted_10 = { + class: "dataTableWrapper" +}; +var _hoisted_11 = { + class: "dataTableFeatures" +}; +var _hoisted_12 = { + class: "dataTableFooterNavigation" +}; +var _hoisted_13 = { + class: "dataTableControls" +}; +var _hoisted_14 = { + class: "row" +}; +var _hoisted_15 = { + class: "dataTableAction" +}; + +var _hoisted_16 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", { + class: "icon-export" +}, null, -1); + +var _hoisted_17 = [_hoisted_16]; +var _hoisted_18 = { + class: "alert alert-info" +}; +var _hoisted_19 = ["innerHTML"]; +function TransitionSwitchervue_type_template_id_322cd92a_render(_ctx, _cache, $props, $setup, $data, $options) { + var _component_Field = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveComponent"])("Field"); + + var _component_ActivityIndicator = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveComponent"])("ActivityIndicator"); + + var _directive_transition_exporter = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveDirective"])("transition-exporter"); + + return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", { + class: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["normalizeClass"])({ + widgetBody: _ctx.isWidget + }), + id: "transitions_report" + }, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", TransitionSwitchervue_type_template_id_322cd92a_hoisted_1, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", TransitionSwitchervue_type_template_id_322cd92a_hoisted_2, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", TransitionSwitchervue_type_template_id_322cd92a_hoisted_3, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, { + uicontrol: "select", + name: "actionType", + modelValue: _ctx.actionType, + "onUpdate:modelValue": _cache[0] || (_cache[0] = function ($event) { + return _ctx.actionType = $event; + }), + title: _ctx.translate('Actions_ActionType'), + "full-width": true, + options: _ctx.actionTypeOptions + }, null, 8, ["modelValue", "title", "options"])])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", TransitionSwitchervue_type_template_id_322cd92a_hoisted_4, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", TransitionSwitchervue_type_template_id_322cd92a_hoisted_5, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, { + uicontrol: "select", + name: "actionName", + modelValue: _ctx.actionName, + "onUpdate:modelValue": _cache[1] || (_cache[1] = function ($event) { + return _ctx.actionName = $event; + }), + title: _ctx.translate('Transitions_TopX', 100), + "full-width": true, + disabled: !_ctx.isEnabled, + options: _ctx.actionNameOptions + }, null, 8, ["modelValue", "title", "disabled", "options"])])])]), 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", TransitionSwitchervue_type_template_id_322cd92a_hoisted_6, [_hoisted_7, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_LoadingData')), 1)]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_8, null, 512), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], !_ctx.isLoading && _ctx.isEnabled]]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_9, null, 512), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], !_ctx.isLoading]]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_10, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_11, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_12, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_13, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_14, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", _hoisted_15, _hoisted_17, 512), [[_directive_transition_exporter]])])])])])], 512), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], _ctx.isEnabled]]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_18, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('Transitions_AvailableInOtherReports')) + " " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('Actions_PageUrls')) + ", " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('Actions_SubmenuPageTitles')) + ", " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('Actions_SubmenuPagesEntry')) + " " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_And')) + " " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('Actions_SubmenuPagesExit')) + ". ", 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", { + innerHTML: _ctx.availableInOtherReports2 + }, null, 8, _hoisted_19)])], 2); +} +// CONCATENATED MODULE: ./plugins/Transitions/vue/src/TransitionSwitcher/TransitionSwitcher.vue?vue&type=template&id=322cd92a + +// 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/Transitions/vue/src/TransitionSwitcher/TransitionSwitcher.vue?vue&type=script&lang=ts +function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } + +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } + +function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + + + + + +/* harmony default export */ var TransitionSwitchervue_type_script_lang_ts = (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["defineComponent"])({ + props: { + isWidget: Boolean + }, + components: { + Field: external_CorePluginsAdmin_["Field"], + ActivityIndicator: external_CoreHome_["ActivityIndicator"] + }, + directives: { + TransitionExporter: TransitionExporter + }, + data: function data() { + return { + actionType: 'Actions.getPageUrls', + actionNameOptions: [], + actionTypeOptions: [{ + key: 'Actions.getPageUrls', + value: Object(external_CoreHome_["translate"])('Actions_PageUrls') + }, { + key: 'Actions.getPageTitles', + value: Object(external_CoreHome_["translate"])('Actions_WidgetPageTitles') + }], + isLoading: false, + actionName: null, + isEnabled: true, + noDataKey: '_____ignore_____' + }; + }, + setup: function setup() { + var transitionsInstance = null; + var transitionsUrl = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["ref"])(); + + var onSwitchTransitionsUrl = function onSwitchTransitionsUrl(params) { + if (params !== null && params !== void 0 && params.url) { + transitionsUrl.value = params.url; + } + }; + + external_CoreHome_["Matomo"].on('Transitions.switchTransitionsUrl', onSwitchTransitionsUrl); + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["onBeforeUnmount"])(function () { + external_CoreHome_["Matomo"].off('Transitions.switchTransitionsUrl', onSwitchTransitionsUrl); + }); + + var createTransitionsInstance = function createTransitionsInstance(type, actionName) { + if (!transitionsInstance) { + transitionsInstance = new window.Piwik_Transitions(type, actionName, null, ''); + } else { + transitionsInstance.reset(type, actionName, ''); + } + }; + + var getTransitionsInstance = function getTransitionsInstance() { + return transitionsInstance; + }; + + return { + transitionsUrl: transitionsUrl, + createTransitionsInstance: createTransitionsInstance, + getTransitionsInstance: getTransitionsInstance + }; + }, + watch: { + transitionsUrl: function transitionsUrl(newValue) { + var _this = this; + + var url = newValue; + + if (this.isUrlReport) { + url = url.replace('https://', '').replace('http://', ''); + } + + var found = this.actionNameOptions.find(function (option) { + var optionUrl = option.url; + + if (optionUrl && _this.isUrlReport) { + optionUrl = String(optionUrl).replace('https://', '').replace('http://', ''); + } else { + optionUrl = undefined; + } + + return option.key === url || url === optionUrl && optionUrl; + }); + + if (found) { + this.actionName = found.key; + } else { + // we only fetch top 100 in the report... so the entry the user clicked on, might not + // be in the top 100 + this.actionNameOptions = [].concat(_toConsumableArray(this.actionNameOptions), [{ + key: url, + value: url + }]); + this.actionName = url; + } + }, + actionName: function actionName(newValue) { + if (newValue === null || newValue === this.noDataKey) { + return; + } + + var type = this.isUrlReport ? 'url' : 'title'; + this.createTransitionsInstance(type, newValue); + this.getTransitionsInstance().showPopover(true); + }, + actionType: function actionType(newValue) { + this.fetch(newValue); + } + }, + created: function created() { + this.fetch(this.actionType); + }, + methods: { + detectActionName: function detectActionName(reports) { + var _this2 = this; + + var othersLabel = Object(external_CoreHome_["translate"])('General_Others'); + reports.forEach(function (report) { + if (!report) { + return; + } + + if (report.label === othersLabel) { + return; + } + + var key = _this2.isUrlReport ? report.url : report.label; + + if (key) { + var pageviews = Object(external_CoreHome_["translate"])('Transitions_NumPageviews', report.nb_hits); + var label = "".concat(report.label, " (").concat(pageviews, ")"); + + _this2.actionNameOptions.push({ + key: key, + value: label, + url: report.url + }); + + if (!_this2.actionName) { + _this2.actionName = key; + } + } + }); + }, + fetch: function fetch(type) { + var _this3 = this; + + this.isLoading = true; + this.actionNameOptions = []; + this.actionName = null; + external_CoreHome_["AjaxHelper"].fetch({ + method: type, + flat: 1, + filter_limit: 100, + filter_sort_order: 'desc', + filter_sort_column: 'nb_hits', + showColumns: 'label,nb_hits,url' + }).then(function (report) { + _this3.isLoading = false; + _this3.actionNameOptions = []; + _this3.actionName = null; + + if (report !== null && report !== void 0 && report.length) { + _this3.isEnabled = true; + + _this3.detectActionName(report); + } + + if (_this3.actionName === null || _this3.actionNameOptions.length === 0) { + _this3.isEnabled = false; + _this3.actionName = _this3.noDataKey; + + _this3.actionNameOptions.push({ + key: _this3.noDataKey, + value: Object(external_CoreHome_["translate"])('CoreHome_ThereIsNoDataForThisReport') + }); + } + }).catch(function () { + _this3.isLoading = false; + _this3.isEnabled = false; + }); + } + }, + computed: { + isUrlReport: function isUrlReport() { + return this.actionType === 'Actions.getPageUrls'; + }, + availableInOtherReports2: function availableInOtherReports2() { + return Object(external_CoreHome_["translate"])('Transitions_AvailableInOtherReports2', ''); + } + } +})); +// CONCATENATED MODULE: ./plugins/Transitions/vue/src/TransitionSwitcher/TransitionSwitcher.vue?vue&type=script&lang=ts + +// CONCATENATED MODULE: ./plugins/Transitions/vue/src/TransitionSwitcher/TransitionSwitcher.vue + + + +TransitionSwitchervue_type_script_lang_ts.render = TransitionSwitchervue_type_template_id_322cd92a_render + +/* harmony default export */ var TransitionSwitcher = (TransitionSwitchervue_type_script_lang_ts); +// CONCATENATED MODULE: ./plugins/Transitions/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=Transitions.umd.js.map \ No newline at end of file diff --git a/plugins/Transitions/vue/dist/Transitions.umd.min.js b/plugins/Transitions/vue/dist/Transitions.umd.min.js new file mode 100644 index 0000000000..dc3a89e266 --- /dev/null +++ b/plugins/Transitions/vue/dist/Transitions.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["Transitions"]=t(require("CoreHome"),require("vue"),require("CorePluginsAdmin")):e["Transitions"]=t(e["CoreHome"],e["Vue"],e["CorePluginsAdmin"])})("undefined"!==typeof self?self:this,(function(e,t,n){return function(e){var t={};function n(o){if(t[o])return t[o].exports;var i=t[o]={i:o,l:!1,exports:{}};return e[o].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,o){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},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 o=Object.create(null);if(n.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)n.d(o,i,function(t){return e[t]}.bind(null,i));return o},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/Transitions/vue/dist/",n(n.s="fae3")}({"19dc":function(t,n){t.exports=e},"8bbf":function(e,n){e.exports=t},a5a2:function(e,t){e.exports=n},fae3:function(e,t,n){"use strict";if(n.r(t),n.d(t,"TransitionExporter",(function(){return N})),n.d(t,"TransitionSwitcher",(function(){return Q})),"undefined"!==typeof window){var o=window.document.currentScript,i=o&&o.src.match(/(.+\/)[^/]+\.js(\?.*)?$/);i&&(n.p=i[1])}var a=n("19dc"),r=n("8bbf"),c={class:"transition-export-popover row"},l={class:"col l6"},s={class:"input-field"},u={class:"matomo-field"},d={class:"col l12"},p=["href"];function m(e,t,n,o,i,a){var m=Object(r["resolveComponent"])("Field");return Object(r["openBlock"])(),Object(r["createElementBlock"])("div",c,[Object(r["createElementVNode"])("div",l,[Object(r["createElementVNode"])("div",s,[Object(r["createElementVNode"])("div",u,[Object(r["createVNode"])(m,{uicontrol:"radio",name:"exportFormat",title:e.translate("CoreHome_ExportFormat"),"model-value":e.exportFormat,"onUpdate:modelValue":t[0]||(t[0]=function(t){return e.exportFormat=t}),"full-width":!0,options:e.exportFormatOptions},null,8,["title","model-value","options"])])])]),Object(r["createElementVNode"])("div",d,[Object(r["createElementVNode"])("a",{class:"btn",href:e.exportLink,target:"_new",title:"translate('CoreHome_ExportTooltip')"},Object(r["toDisplayString"])(e.translate("General_Export")),9,p)])])}var f=n("a5a2"),b=Object(r["ref"])(""),v=Object(r["ref"])(""),O=function(e){b.value=e.actionType,v.value=e.actionName}; +/*! + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */a["Matomo"].on("Transitions.dataChanged",O);var h=Object(r["defineComponent"])({props:{exportFormatOptions:{type:Object,required:!0}},components:{Field:f["Field"]},data:function(){return{exportFormat:"JSON"}},computed:{exportLink:function(){var e={module:"API",method:"Transitions.getTransitionsForAction"};e.actionType=b.value,e.actionName=v.value,e.idSite=a["Matomo"].idSite,e.period=a["Matomo"].period,e.date=a["Matomo"].currentDateString,e.format=this.exportFormat,e.token_auth=a["Matomo"].token_auth,e.force_api_session=1;var t=window.location.href,n=t.split("/");n.pop();var o=n.join("/");return"".concat(o,"/index.php?").concat(a["MatomoUrl"].stringify(e))}}});h.render=m;var j=h,y=window,g=y.Piwik_Popover,N={mounted:function(e){e.addEventListener("click",(function(e){e.preventDefault();var t={exportFormat:"JSON",exportFormatOptions:[{key:"JSON",value:"JSON"},{key:"XML",value:"XML"}]},n=Object(a["createVueApp"])({template:'\n ',data:function(){return{bind:t}}});n.component("popover",j);var o=document.createElement("div");n.mount(o),g.showLoading(""),g.setTitle("".concat(v.value," ").concat(Object(a["translate"])("Transitions_Transitions"))),g.setContent(o),g.onClose((function(){n.unmount()}))}))}}; +/*! + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ +/*! + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ +function T(){return{restrict:"A",link:function(e,t){N.mounted(t[0])}}}window.angular.module("piwikApp").directive("transitionExporter",T);var _={class:"row"},E={class:"col s12 m3"},w={name:"actionType"},A={class:"col s12 m9"},V={name:"actionName"},x={class:"loadingPiwik",style:{display:"none"},id:"transitions_inline_loading"},S=Object(r["createElementVNode"])("img",{src:"plugins/Morpheus/images/loading-blue.gif",alt:""},null,-1),P={class:"popoverContainer"},C={id:"Transitions_Error_Container"},k={class:"dataTableWrapper"},D={class:"dataTableFeatures"},F={class:"dataTableFooterNavigation"},U={class:"dataTableControls"},M={class:"row"},I={class:"dataTableAction"},L=Object(r["createElementVNode"])("span",{class:"icon-export"},null,-1),H=[L],R={class:"alert alert-info"},q=["innerHTML"];function B(e,t,n,o,i,a){var c=Object(r["resolveComponent"])("Field"),l=Object(r["resolveComponent"])("ActivityIndicator"),s=Object(r["resolveDirective"])("transition-exporter");return Object(r["openBlock"])(),Object(r["createElementBlock"])("div",{class:Object(r["normalizeClass"])({widgetBody:e.isWidget}),id:"transitions_report"},[Object(r["createElementVNode"])("div",_,[Object(r["createElementVNode"])("div",E,[Object(r["createElementVNode"])("div",w,[Object(r["createVNode"])(c,{uicontrol:"select",name:"actionType",modelValue:e.actionType,"onUpdate:modelValue":t[0]||(t[0]=function(t){return e.actionType=t}),title:e.translate("Actions_ActionType"),"full-width":!0,options:e.actionTypeOptions},null,8,["modelValue","title","options"])])]),Object(r["createElementVNode"])("div",A,[Object(r["createElementVNode"])("div",V,[Object(r["createVNode"])(c,{uicontrol:"select",name:"actionName",modelValue:e.actionName,"onUpdate:modelValue":t[1]||(t[1]=function(t){return e.actionName=t}),title:e.translate("Transitions_TopX",100),"full-width":!0,disabled:!e.isEnabled,options:e.actionNameOptions},null,8,["modelValue","title","disabled","options"])])])]),Object(r["createVNode"])(l,{loading:e.isLoading},null,8,["loading"]),Object(r["createElementVNode"])("div",x,[S,Object(r["createElementVNode"])("span",null,Object(r["toDisplayString"])(e.translate("General_LoadingData")),1)]),Object(r["withDirectives"])(Object(r["createElementVNode"])("div",P,null,512),[[r["vShow"],!e.isLoading&&e.isEnabled]]),Object(r["withDirectives"])(Object(r["createElementVNode"])("div",C,null,512),[[r["vShow"],!e.isLoading]]),Object(r["withDirectives"])(Object(r["createElementVNode"])("div",k,[Object(r["createElementVNode"])("div",D,[Object(r["createElementVNode"])("div",F,[Object(r["createElementVNode"])("div",U,[Object(r["createElementVNode"])("div",M,[Object(r["withDirectives"])(Object(r["createElementVNode"])("a",I,H,512),[[s]])])])])])],512),[[r["vShow"],e.isEnabled]]),Object(r["createElementVNode"])("div",R,[Object(r["createTextVNode"])(Object(r["toDisplayString"])(e.translate("Transitions_AvailableInOtherReports"))+" "+Object(r["toDisplayString"])(e.translate("Actions_PageUrls"))+", "+Object(r["toDisplayString"])(e.translate("Actions_SubmenuPageTitles"))+", "+Object(r["toDisplayString"])(e.translate("Actions_SubmenuPagesEntry"))+" "+Object(r["toDisplayString"])(e.translate("General_And"))+" "+Object(r["toDisplayString"])(e.translate("Actions_SubmenuPagesExit"))+". ",1),Object(r["createElementVNode"])("span",{innerHTML:e.availableInOtherReports2},null,8,q)])],2)}function G(e){return X(e)||W(e)||K(e)||J()}function J(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function K(e,t){if(e){if("string"===typeof e)return $(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?$(e,t):void 0}}function W(e){if("undefined"!==typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}function X(e){if(Array.isArray(e))return $(e)}function $(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n')}}});z.render=B;var Q=z; +/*! + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */}})})); +//# sourceMappingURL=Transitions.umd.min.js.map \ No newline at end of file diff --git a/plugins/Transitions/vue/dist/umd.metadata.json b/plugins/Transitions/vue/dist/umd.metadata.json new file mode 100644 index 0000000000..dce4477a3c --- /dev/null +++ b/plugins/Transitions/vue/dist/umd.metadata.json @@ -0,0 +1,6 @@ +{ + "dependsOn": [ + "CoreHome", + "CorePluginsAdmin" + ] +} \ No newline at end of file diff --git a/plugins/Transitions/vue/src/TransitionExporter/TransitionExporter.adapter.ts b/plugins/Transitions/vue/src/TransitionExporter/TransitionExporter.adapter.ts new file mode 100644 index 0000000000..82f1a78ca5 --- /dev/null +++ b/plugins/Transitions/vue/src/TransitionExporter/TransitionExporter.adapter.ts @@ -0,0 +1,20 @@ +/*! + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +import { IDirective } from 'angular'; +import TransitionExporter from './TransitionExporter'; + +function transitionExporter(): IDirective { + return { + restrict: 'A', + link(scope, element) { + TransitionExporter.mounted(element[0]); + }, + }; +} + +window.angular.module('piwikApp').directive('transitionExporter', transitionExporter); diff --git a/plugins/Transitions/vue/src/TransitionExporter/TransitionExporter.ts b/plugins/Transitions/vue/src/TransitionExporter/TransitionExporter.ts new file mode 100644 index 0000000000..b9b6a0b7bd --- /dev/null +++ b/plugins/Transitions/vue/src/TransitionExporter/TransitionExporter.ts @@ -0,0 +1,50 @@ +/*! + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +import { createVueApp, translate } from 'CoreHome'; +import TransitionExporterPopover from './TransitionExporterPopover'; +import { actionName } from './transitionParams'; + +const { Piwik_Popover } = window; + +export default { + mounted(element: HTMLElement): void { + element.addEventListener('click', (e) => { + e.preventDefault(); + + const props = { + exportFormat: 'JSON', + exportFormatOptions: [ + { key: 'JSON', value: 'JSON' }, + { key: 'XML', value: 'XML' }, + ], + }; + + const app = createVueApp({ + template: ` + `, + data() { + return { + bind: props, + }; + }, + }); + app.component('popover', TransitionExporterPopover); + + const mountPoint = document.createElement('div'); + app.mount(mountPoint); + + Piwik_Popover.showLoading(''); + Piwik_Popover.setTitle(`${actionName.value} ${translate('Transitions_Transitions')}`); + Piwik_Popover.setContent(mountPoint); + + Piwik_Popover.onClose(() => { + app.unmount(); + }); + }); + }, +}; diff --git a/plugins/Transitions/vue/src/TransitionExporter/TransitionExporterPopover.less b/plugins/Transitions/vue/src/TransitionExporter/TransitionExporterPopover.less new file mode 100644 index 0000000000..c793232928 --- /dev/null +++ b/plugins/Transitions/vue/src/TransitionExporter/TransitionExporterPopover.less @@ -0,0 +1,52 @@ +.transitions-export-popover { + + [name=format] { + .form-group label.fieldRadioTitle { + display: block; + } + + p.radio { + width: 50%; + float: left; + display: block; + } + } + + textarea { + word-break: break-all; + padding: 5px; + height: 80px; + } + + .toggle-export-url { + font-size: 14px; + margin-left: 20px; + } + + .filter_limit { + clear: both; + float: none; + + .matomo-field { + width: 50%; + float: left; + } + } + + .showoptions > span { + color: @color-blue-piwik; + cursor: pointer; + text-decoration: underline; + } + + .tooltip { + color: @color-silver; + font-size: 13px; + padding: 5px; + } + + .tooltip > a { + color: @color-blue-piwik; + text-decoration: underline; + } +} \ No newline at end of file diff --git a/plugins/Transitions/vue/src/TransitionExporter/TransitionExporterPopover.vue b/plugins/Transitions/vue/src/TransitionExporter/TransitionExporterPopover.vue new file mode 100644 index 0000000000..b900645d31 --- /dev/null +++ b/plugins/Transitions/vue/src/TransitionExporter/TransitionExporterPopover.vue @@ -0,0 +1,91 @@ + + + + + diff --git a/plugins/Transitions/vue/src/TransitionExporter/transitionParams.ts b/plugins/Transitions/vue/src/TransitionExporter/transitionParams.ts new file mode 100644 index 0000000000..f49b698cf9 --- /dev/null +++ b/plugins/Transitions/vue/src/TransitionExporter/transitionParams.ts @@ -0,0 +1,29 @@ +/*! + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +import { ref } from 'vue'; +import { Matomo } from 'CoreHome'; + +interface DataChangedParams { + actionType: string; + actionName: string; +} + +const actionType = ref(''); +const actionName = ref(''); + +const onDataChanged = (params: DataChangedParams) => { + actionType.value = params.actionType; + actionName.value = params.actionName; +}; + +Matomo.on('Transitions.dataChanged', onDataChanged); + +export { + actionType, + actionName, +}; diff --git a/plugins/Transitions/vue/src/TransitionSwitcher/TransitionSwitcher.vue b/plugins/Transitions/vue/src/TransitionSwitcher/TransitionSwitcher.vue new file mode 100644 index 0000000000..fc4b236221 --- /dev/null +++ b/plugins/Transitions/vue/src/TransitionSwitcher/TransitionSwitcher.vue @@ -0,0 +1,308 @@ + + + + + diff --git a/plugins/Transitions/vue/src/index.ts b/plugins/Transitions/vue/src/index.ts new file mode 100644 index 0000000000..dff1aa7557 --- /dev/null +++ b/plugins/Transitions/vue/src/index.ts @@ -0,0 +1,11 @@ +/*! + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +import './TransitionExporter/TransitionExporter.adapter.ts'; + +export { default as TransitionExporter } from './TransitionExporter/TransitionExporter'; +export { default as TransitionSwitcher } from './TransitionSwitcher/TransitionSwitcher.vue'; -- cgit v1.2.3