diff --git a/Annotations/GlobalApiComponents.php b/Annotations/GlobalApiComponents.php
index 22b0f17..98bf173 100644
--- a/Annotations/GlobalApiComponents.php
+++ b/Annotations/GlobalApiComponents.php
@@ -36,7 +36,7 @@
* securityScheme="MatomoToken",
* type="http",
* scheme="bearer",
- * description="Matomo API token passed in the Authorization header as a bearer token."
+ * description="Paste your token generated from Personal > Security. Swagger will send it as a Bearer token."
* )
*
* @OA\Server(
diff --git a/ApiReference.php b/ApiReference.php
index 5c2ad21..2c489cb 100644
--- a/ApiReference.php
+++ b/ApiReference.php
@@ -36,11 +36,15 @@ public function getClientSideTranslationKeys(&$translationKeys): void
$translationKeys[] = 'ApiReference_ReportingApiReference';
$translationKeys[] = 'ApiReference_ReportingApiSummary';
$translationKeys[] = 'ApiReference_SwaggerPagePluginEmpty';
+ $translationKeys[] = 'ApiReference_SwaggerPageConnectToken';
$translationKeys[] = 'ApiReference_SwaggerPageRequestFailed';
+ $translationKeys[] = 'ApiReference_SwaggerPageRemoveToken';
$translationKeys[] = 'ApiReference_SwaggerPageSpecLoadFailed';
$translationKeys[] = 'ApiReference_SwaggerPageSpecNotAvailable';
$translationKeys[] = 'ApiReference_SwaggerPageSearchNoResults';
$translationKeys[] = 'ApiReference_SwaggerPageSearchPlaceholder';
+ $translationKeys[] = 'ApiReference_SwaggerPageTokenConnected';
+ $translationKeys[] = 'ApiReference_SwaggerPageTokenConnectedHeading';
$translationKeys[] = 'ApiReference_UserAuthentication';
$translationKeys[] = 'ApiReference_UserAuthenticationManageTokens';
$translationKeys[] = 'ApiReference_UserAuthenticationUsingTokenAuth';
diff --git a/lang/en.json b/lang/en.json
index 115b685..92f631c 100644
--- a/lang/en.json
+++ b/lang/en.json
@@ -4,13 +4,17 @@
"ReportingApiMoreInformation": "More info about the Matomo APIs available in %1$sIntroduction to Matomo API%2$s and the %3$sMatomo API Reference%4$s.",
"ReportingApiReference": "Reporting API Reference",
"ReportingApiSummary": "All the data in Matomo is available through simple APIs.",
+ "SwaggerPageConnectToken": "Authenticate with a Matomo API token",
"SwaggerPagePluginEmpty": "No plugins are configured in the ApiReference whitelist.",
"SwaggerPageRequestFailed": "The plugin whitelist could not be loaded.",
+ "SwaggerPageRemoveToken": "Remove token",
"SwaggerPageSearchNoResults": "No plugins match your search.",
"SwaggerPageSearchPlaceholder": "Search by plugin name",
"UseTryItOutForLiveResponse": "Example responses require Super User access. Use Try it out to see a live response.",
"SwaggerPageSpecLoadFailed": "The OpenAPI spec could not be loaded for this plugin.",
"SwaggerPageSpecNotAvailable": "The OpenAPI spec is not available for this plugin yet. %1$sLearn more%2$s",
+ "SwaggerPageTokenConnected": "Token connected",
+ "SwaggerPageTokenConnectedHeading": "Matomo API token connected",
"UserAuthentication": "User authentication",
"UserAuthenticationManageTokens": "You can manage your authentication tokens on your security page.",
"UserAuthenticationUsingTokenAuth": "If you want to request data within a script, a crontab, etc. you need to add the '%3$s' URL parameter to the API calls for URLs that require authentication."
diff --git a/tests/Resources/SwaggerPage/Bandwidth_openapi_spec_v1.0.0.json b/tests/Resources/SwaggerPage/Bandwidth_openapi_spec_v1.0.0.json
index 1e440b1..b8b63f1 100644
--- a/tests/Resources/SwaggerPage/Bandwidth_openapi_spec_v1.0.0.json
+++ b/tests/Resources/SwaggerPage/Bandwidth_openapi_spec_v1.0.0.json
@@ -968,7 +968,7 @@
"securitySchemes": {
"MatomoToken": {
"type": "http",
- "description": "Matomo API token passed in the Authorization header as a bearer token.",
+ "description": "Paste your token generated from Personal > Security. Swagger will send it as a Bearer token.",
"scheme": "bearer"
}
}
@@ -988,4 +988,4 @@
"description": "Matomo Reporting API developer page",
"url": "https://developer.matomo.org/api-reference/reporting-api/"
}
-}
\ No newline at end of file
+}
diff --git a/tests/UI/expected-ui-screenshots/ApiReference_expanded_plugin.png b/tests/UI/expected-ui-screenshots/ApiReference_expanded_plugin.png
index 2060952..33f64c8 100644
Binary files a/tests/UI/expected-ui-screenshots/ApiReference_expanded_plugin.png and b/tests/UI/expected-ui-screenshots/ApiReference_expanded_plugin.png differ
diff --git a/vue/dist/ApiReference.css b/vue/dist/ApiReference.css
index 1561b16..398f1b9 100644
--- a/vue/dist/ApiReference.css
+++ b/vue/dist/ApiReference.css
@@ -1 +1 @@
-.swaggerLoader[data-v-590bd90f]{max-height:100px;display:flex;align-items:center;justify-content:center}.swaggerMount[data-v-590bd90f]{min-height:180px;visibility:hidden}.swaggerMount--ready[data-v-590bd90f]{visibility:visible}.swaggerMount[data-v-590bd90f] .swagger-ui{border:0;border-radius:0;color:var(--theme-color-text,#3b4151);font-size:14px;line-height:1.5;padding-top:0}.page[data-v-86969ddc]{color:var(--theme-color-text,#3b4151)}.searchBar[data-v-86969ddc]{position:relative;margin-bottom:1.5rem;width:300px}.searchIcon[data-v-86969ddc]{position:absolute;top:13px;left:12px;color:var(--theme-color-text-lighter,#98a2b3);font-size:14px;pointer-events:none}.searchInput[data-v-86969ddc]{width:100%;height:38px;padding:10px 12px 10px 38px;background:var(--theme-color-background-contrast,#fff);border:1px solid var(--theme-color-border,#d0d5dd);border-radius:8px;color:var(--theme-color-text,#3b4151);font-size:14px;box-shadow:none}.searchInput[data-v-86969ddc]:focus-visible{border:1px solid var(--theme-color-focus-ring,#5b8def);outline:1px solid var(--theme-color-focus-ring,#5b8def)}.searchInput[data-v-86969ddc]::-moz-placeholder{color:var(--theme-color-text-lighter,#98a2b3)}.searchInput[data-v-86969ddc]::-ms-input-placeholder{color:var(--theme-color-text-lighter,#98a2b3)}.searchInput[data-v-86969ddc]::placeholder{color:var(--theme-color-text-lighter,#98a2b3)}.emptyText[data-v-86969ddc]{margin-bottom:0;color:var(--theme-color-text-light,#646464)}.old-api-docs-paragraph[data-v-86969ddc]{font-size:12px!important;font-style:italic}.pluginCard[data-v-86969ddc]{background:var(--theme-color-background-contrast,#fff);border:1px solid var(--theme-color-border,#d9e2ec);border-radius:4px;box-shadow:none;overflow:hidden;transition:border-color .18s ease}.pluginCard--expanded[data-v-86969ddc]{border-color:var(--theme-color-border,#cfd8e3);transform-origin:top center}.pluginToggle[data-v-86969ddc]{width:100%;padding:16px 20px;border:0;outline:none;background:var(--theme-color-background-contrast,#fff);display:flex;align-items:center;color:inherit;cursor:pointer;font:inherit;text-align:left}.pluginToggle[data-v-86969ddc]:focus-visible{box-shadow:inset 0 0 0 2px var(--theme-color-focus-ring,#cfd8e3)}.pluginHeader[data-v-86969ddc]{display:flex;align-items:center;gap:12px}.pluginChevron[data-v-86969ddc]{flex:0 0 12px;color:var(--theme-color-text-light,#5b6b7c);font-size:12px;display:inline-flex;align-items:center;justify-content:center}.pluginName[data-v-86969ddc]{font-size:15px;font-weight:500}.pluginBody[data-v-86969ddc]{position:relative;padding:0}.pluginBody[data-v-86969ddc]:before{content:"";position:absolute;top:0;left:20px;right:20px;border-top:1px solid var(--theme-color-border,#e6edf5)}
\ No newline at end of file
+.swaggerLoader[data-v-67de9b78]{max-height:100px;display:flex;align-items:center;justify-content:center}.swaggerMount[data-v-67de9b78]{min-height:180px;visibility:hidden}.swaggerMount--ready[data-v-67de9b78]{visibility:visible}.swaggerMount[data-v-67de9b78] .swagger-ui{border:0;border-radius:0;color:var(--theme-color-text,#3b4151);font-size:14px;line-height:1.5;padding-top:0}.swaggerMount[data-v-67de9b78] .swagger-ui input[disabled],.swaggerMount[data-v-67de9b78] .swagger-ui select[disabled],.swaggerMount[data-v-67de9b78] .swagger-ui textarea[disabled]{background:var(--theme-color-background-tint,#f2f4f7);border-color:var(--theme-color-border-subtle,#c5ced8);border-style:dashed;color:var(--theme-color-text-lighter,#98a2b3);cursor:not-allowed;opacity:1}.page[data-v-86969ddc]{color:var(--theme-color-text,#3b4151)}.searchBar[data-v-86969ddc]{position:relative;margin-bottom:1.5rem;width:300px}.searchIcon[data-v-86969ddc]{position:absolute;top:13px;left:12px;color:var(--theme-color-text-lighter,#98a2b3);font-size:14px;pointer-events:none}.searchInput[data-v-86969ddc]{width:100%;height:38px;padding:10px 12px 10px 38px;background:var(--theme-color-background-contrast,#fff);border:1px solid var(--theme-color-border,#d0d5dd);border-radius:8px;color:var(--theme-color-text,#3b4151);font-size:14px;box-shadow:none}.searchInput[data-v-86969ddc]:focus-visible{border:1px solid var(--theme-color-focus-ring,#5b8def);outline:1px solid var(--theme-color-focus-ring,#5b8def)}.searchInput[data-v-86969ddc]::-moz-placeholder{color:var(--theme-color-text-lighter,#98a2b3)}.searchInput[data-v-86969ddc]::-ms-input-placeholder{color:var(--theme-color-text-lighter,#98a2b3)}.searchInput[data-v-86969ddc]::placeholder{color:var(--theme-color-text-lighter,#98a2b3)}.emptyText[data-v-86969ddc]{margin-bottom:0;color:var(--theme-color-text-light,#646464)}.old-api-docs-paragraph[data-v-86969ddc]{font-size:12px!important;font-style:italic}.pluginCard[data-v-86969ddc]{background:var(--theme-color-background-contrast,#fff);border:1px solid var(--theme-color-border,#d9e2ec);border-radius:4px;box-shadow:none;overflow:hidden;transition:border-color .18s ease}.pluginCard--expanded[data-v-86969ddc]{border-color:var(--theme-color-border,#cfd8e3);transform-origin:top center}.pluginToggle[data-v-86969ddc]{width:100%;padding:16px 20px;border:0;outline:none;background:var(--theme-color-background-contrast,#fff);display:flex;align-items:center;color:inherit;cursor:pointer;font:inherit;text-align:left}.pluginToggle[data-v-86969ddc]:focus-visible{box-shadow:inset 0 0 0 2px var(--theme-color-focus-ring,#cfd8e3)}.pluginHeader[data-v-86969ddc]{display:flex;align-items:center;gap:12px}.pluginChevron[data-v-86969ddc]{flex:0 0 12px;color:var(--theme-color-text-light,#5b6b7c);font-size:12px;display:inline-flex;align-items:center;justify-content:center}.pluginName[data-v-86969ddc]{font-size:15px;font-weight:500}.pluginBody[data-v-86969ddc]{position:relative;padding:0}.pluginBody[data-v-86969ddc]:before{content:"";position:absolute;top:0;left:20px;right:20px;border-top:1px solid var(--theme-color-border,#e6edf5)}
\ No newline at end of file
diff --git a/vue/dist/ApiReference.umd.js b/vue/dist/ApiReference.umd.js
index d336e6b..e8c7f03 100644
--- a/vue/dist/ApiReference.umd.js
+++ b/vue/dist/ApiReference.umd.js
@@ -96,13 +96,6 @@ return /******/ (function(modules) { // webpackBootstrap
/************************************************************************/
/******/ ({
-/***/ "1988":
-/***/ (function(module, exports, __webpack_require__) {
-
-// extracted by mini-css-extract-plugin
-
-/***/ }),
-
/***/ "19dc":
/***/ (function(module, exports) {
@@ -135,12 +128,19 @@ module.exports = __WEBPACK_EXTERNAL_MODULE__8bbf__;
/***/ }),
-/***/ "dc2f":
+/***/ "99a2":
+/***/ (function(module, exports, __webpack_require__) {
+
+// extracted by mini-css-extract-plugin
+
+/***/ }),
+
+/***/ "ace7":
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
-/* harmony import */ var _node_modules_vue_cli_service_node_modules_mini_css_extract_plugin_dist_loader_js_ref_7_oneOf_1_0_node_modules_vue_cli_service_node_modules_css_loader_dist_cjs_js_ref_7_oneOf_1_1_node_modules_vue_cli_service_node_modules_vue_loader_v16_dist_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_oneOf_1_2_node_modules_vue_cli_service_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_cli_service_node_modules_vue_loader_v16_dist_index_js_ref_1_1_SwaggerUiPanel_vue_vue_type_style_index_0_id_590bd90f_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("1988");
-/* harmony import */ var _node_modules_vue_cli_service_node_modules_mini_css_extract_plugin_dist_loader_js_ref_7_oneOf_1_0_node_modules_vue_cli_service_node_modules_css_loader_dist_cjs_js_ref_7_oneOf_1_1_node_modules_vue_cli_service_node_modules_vue_loader_v16_dist_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_oneOf_1_2_node_modules_vue_cli_service_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_cli_service_node_modules_vue_loader_v16_dist_index_js_ref_1_1_SwaggerUiPanel_vue_vue_type_style_index_0_id_590bd90f_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_vue_cli_service_node_modules_mini_css_extract_plugin_dist_loader_js_ref_7_oneOf_1_0_node_modules_vue_cli_service_node_modules_css_loader_dist_cjs_js_ref_7_oneOf_1_1_node_modules_vue_cli_service_node_modules_vue_loader_v16_dist_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_oneOf_1_2_node_modules_vue_cli_service_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_cli_service_node_modules_vue_loader_v16_dist_index_js_ref_1_1_SwaggerUiPanel_vue_vue_type_style_index_0_id_590bd90f_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var _node_modules_vue_cli_service_node_modules_mini_css_extract_plugin_dist_loader_js_ref_7_oneOf_1_0_node_modules_vue_cli_service_node_modules_css_loader_dist_cjs_js_ref_7_oneOf_1_1_node_modules_vue_cli_service_node_modules_vue_loader_v16_dist_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_oneOf_1_2_node_modules_vue_cli_service_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_cli_service_node_modules_vue_loader_v16_dist_index_js_ref_1_1_SwaggerUiPanel_vue_vue_type_style_index_0_id_67de9b78_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("99a2");
+/* harmony import */ var _node_modules_vue_cli_service_node_modules_mini_css_extract_plugin_dist_loader_js_ref_7_oneOf_1_0_node_modules_vue_cli_service_node_modules_css_loader_dist_cjs_js_ref_7_oneOf_1_1_node_modules_vue_cli_service_node_modules_vue_loader_v16_dist_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_oneOf_1_2_node_modules_vue_cli_service_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_cli_service_node_modules_vue_loader_v16_dist_index_js_ref_1_1_SwaggerUiPanel_vue_vue_type_style_index_0_id_67de9b78_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_vue_cli_service_node_modules_mini_css_extract_plugin_dist_loader_js_ref_7_oneOf_1_0_node_modules_vue_cli_service_node_modules_css_loader_dist_cjs_js_ref_7_oneOf_1_1_node_modules_vue_cli_service_node_modules_vue_loader_v16_dist_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_7_oneOf_1_2_node_modules_vue_cli_service_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_cli_service_node_modules_vue_loader_v16_dist_index_js_ref_1_1_SwaggerUiPanel_vue_vue_type_style_index_0_id_67de9b78_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0__);
/* unused harmony reexport * */
@@ -298,19 +298,19 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
// EXTERNAL MODULE: external "CoreHome"
var external_CoreHome_ = __webpack_require__("19dc");
-// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--13-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--1-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--1-1!./plugins/ApiReference/vue/src/SwaggerPage/SwaggerUiPanel.vue?vue&type=template&id=590bd90f&scoped=true
+// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--13-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--1-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--1-1!./plugins/ApiReference/vue/src/SwaggerPage/SwaggerUiPanel.vue?vue&type=template&id=67de9b78&scoped=true
-const SwaggerUiPanelvue_type_template_id_590bd90f_scoped_true_withScopeId = n => (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["pushScopeId"])("data-v-590bd90f"), n = n(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["popScopeId"])(), n);
-const SwaggerUiPanelvue_type_template_id_590bd90f_scoped_true_hoisted_1 = {
+const SwaggerUiPanelvue_type_template_id_67de9b78_scoped_true_withScopeId = n => (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["pushScopeId"])("data-v-67de9b78"), n = n(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["popScopeId"])(), n);
+const SwaggerUiPanelvue_type_template_id_67de9b78_scoped_true_hoisted_1 = {
key: 0,
class: "swaggerLoader"
};
-const SwaggerUiPanelvue_type_template_id_590bd90f_scoped_true_hoisted_2 = ["innerHTML"];
-const SwaggerUiPanelvue_type_template_id_590bd90f_scoped_true_hoisted_3 = ["id"];
-function SwaggerUiPanelvue_type_template_id_590bd90f_scoped_true_render(_ctx, _cache, $props, $setup, $data, $options) {
+const SwaggerUiPanelvue_type_template_id_67de9b78_scoped_true_hoisted_2 = ["innerHTML"];
+const SwaggerUiPanelvue_type_template_id_67de9b78_scoped_true_hoisted_3 = ["id"];
+function SwaggerUiPanelvue_type_template_id_67de9b78_scoped_true_render(_ctx, _cache, $props, $setup, $data, $options) {
const _component_ActivityIndicator = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveComponent"])("ActivityIndicator");
const _component_Alert = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveComponent"])("Alert");
- return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])(external_commonjs_vue_commonjs2_vue_root_Vue_["Fragment"], null, [_ctx.isLoading && !_ctx.spec && !_ctx.displayError ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", SwaggerUiPanelvue_type_template_id_590bd90f_scoped_true_hoisted_1, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_ActivityIndicator, {
+ return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])(external_commonjs_vue_commonjs2_vue_root_Vue_["Fragment"], null, [_ctx.isLoading && !_ctx.spec && !_ctx.displayError ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", SwaggerUiPanelvue_type_template_id_67de9b78_scoped_true_hoisted_1, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_ActivityIndicator, {
loading: true
})])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), _ctx.displayError ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createBlock"])(_component_Alert, {
key: 1,
@@ -324,16 +324,16 @@ function SwaggerUiPanelvue_type_template_id_590bd90f_scoped_true_render(_ctx, _c
}, {
default: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withCtx"])(() => [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", {
innerHTML: _ctx.$sanitize(_ctx.missingSpecLearnMore)
- }, null, 8, SwaggerUiPanelvue_type_template_id_590bd90f_scoped_true_hoisted_2)]),
+ }, null, 8, SwaggerUiPanelvue_type_template_id_67de9b78_scoped_true_hoisted_2)]),
_: 1
})) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", {
id: _ctx.swaggerContainerId,
class: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["normalizeClass"])(['swaggerMount', {
'swaggerMount--ready': _ctx.isReady
}])
- }, null, 10, SwaggerUiPanelvue_type_template_id_590bd90f_scoped_true_hoisted_3)], 64);
+ }, null, 10, SwaggerUiPanelvue_type_template_id_67de9b78_scoped_true_hoisted_3)], 64);
}
-// CONCATENATED MODULE: ./plugins/ApiReference/vue/src/SwaggerPage/SwaggerUiPanel.vue?vue&type=template&id=590bd90f&scoped=true
+// CONCATENATED MODULE: ./plugins/ApiReference/vue/src/SwaggerPage/SwaggerUiPanel.vue?vue&type=template&id=67de9b78&scoped=true
// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-typescript/node_modules/cache-loader/dist/cjs.js??ref--15-0!./node_modules/babel-loader/lib!./node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader??ref--15-2!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--1-1!./plugins/ApiReference/vue/src/SwaggerPage/SwaggerUiPanel.vue?vue&type=script&lang=ts
@@ -343,8 +343,13 @@ const authAutocompleteObserverKey = '__matomoSwaggerAuthAutocompleteObserver';
const summaryPathClickHandlerAttachedKey = '__matomoSummaryPathClickHandlerAttached';
const summaryPrefix = '/index.php?module=API&method=';
const interactiveSwaggerSelector = '.opblock-tag, .opblock-summary, .expand-operation, .opblock-summary-control';
+const authInteractionSelector = '.scheme-container .authorize, .dialog-ux .modal-ux button';
const copyIconMarkup = '';
const copySuccessIconMarkup = '';
+const connectTokenTranslationKey = 'ApiReference_SwaggerPageConnectToken';
+const removeTokenTranslationKey = 'ApiReference_SwaggerPageRemoveToken';
+const tokenConnectedTranslationKey = 'ApiReference_SwaggerPageTokenConnected';
+const tokenConnectedHeadingTranslationKey = 'ApiReference_SwaggerPageTokenConnectedHeading';
/* harmony default export */ var SwaggerUiPanelvue_type_script_lang_ts = (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["defineComponent"])({
components: {
ActivityIndicator: external_CoreHome_["ActivityIndicator"],
@@ -471,11 +476,73 @@ const copySuccessIconMarkup = ' text === from);
+ if (replacement) {
+ currentNode.textContent = replacement.to;
+ }
+ }
+ currentNode = walker.nextNode();
+ }
+ },
+ updateSwaggerAuthCopy(swaggerRoot) {
+ this.replaceSwaggerText(swaggerRoot);
+ const modal = document.querySelector('.dialog-ux .modal-ux');
+ const authButton = swaggerRoot.querySelector('.scheme-container .authorize');
+ const authStatus = authButton === null || authButton === void 0 ? void 0 : authButton.querySelector('span');
+ const isTokenConnected = !!(authButton !== null && authButton !== void 0 && authButton.classList.contains('locked'));
+ if (authButton) {
+ authButton.classList.toggle('matomo-token-connected', isTokenConnected);
+ }
+ if (authStatus) {
+ authStatus.textContent = isTokenConnected ? Object(external_CoreHome_["translate"])(tokenConnectedTranslationKey) : Object(external_CoreHome_["translate"])(connectTokenTranslationKey);
+ }
+ if (!modal) {
+ return;
+ }
+ const modalHeading = modal.querySelector('h3');
+ if (modalHeading) {
+ modalHeading.textContent = isTokenConnected ? Object(external_CoreHome_["translate"])(tokenConnectedHeadingTranslationKey) : Object(external_CoreHome_["translate"])(connectTokenTranslationKey);
+ }
+ const authContainers = modal.querySelectorAll('.auth-container');
+ authContainers.forEach(authContainer => {
+ const authButtons = authContainer.querySelectorAll('button');
+ authButtons.forEach(button => {
+ var _button$textContent;
+ const buttonText = (_button$textContent = button.textContent) === null || _button$textContent === void 0 ? void 0 : _button$textContent.trim();
+ if (buttonText === 'Logout') {
+ button.textContent = Object(external_CoreHome_["translate"])(removeTokenTranslationKey);
+ }
+ });
+ });
+ },
attachSwaggerAuthAutocompleteObserver(swaggerRoot) {
if (!swaggerRoot) {
return;
}
- this.suppressSwaggerAuthAutocomplete(swaggerRoot);
+ this.suppressSwaggerAuthAutocomplete(document);
+ this.updateSwaggerAuthCopy(swaggerRoot);
if (swaggerRoot[authAutocompleteObserverKey] || typeof MutationObserver === 'undefined') {
return;
}
@@ -492,6 +559,7 @@ const copySuccessIconMarkup = '(Object(i["pushScopeId"])("data-v-86969ddc"),e=e(),Object(i["popScopeId"])(),e),s={class:"page"},l=["innerHTML"],c=["innerHTML"],u=["innerHTML"],p=["href"],d={key:1},g={key:2},h={class:"searchBar"},m=a(()=>Object(i["createElementVNode"])("span",{class:"searchIcon icon-search"},null,-1)),f=["placeholder"],b={key:0,class:"emptyText"},y={key:1,class:"pluginList"},S=["onMouseenter"],O=["aria-expanded","onFocus","onClick"],j={class:"pluginHeader"},w={class:"pluginName"},v={class:"card-content pluginBody"};function A(e,t,n,r,o,a){const A=Object(i["resolveComponent"])("ContentBlock"),P=Object(i["resolveComponent"])("ActivityIndicator"),k=Object(i["resolveComponent"])("Alert"),E=Object(i["resolveComponent"])("SwaggerUiPanel"),B=Object(i["resolveDirective"])("content-intro");return Object(i["openBlock"])(),Object(i["createElementBlock"])("div",s,[Object(i["withDirectives"])((Object(i["openBlock"])(),Object(i["createElementBlock"])("div",null,[Object(i["createElementVNode"])("h2",null,Object(i["toDisplayString"])(e.translate("General_API")),1)])),[[B]]),Object(i["createVNode"])(A,{"content-title":e.translate("ApiReference_ReportingApiReference")},{default:Object(i["withCtx"])(()=>[Object(i["createElementVNode"])("p",null,Object(i["toDisplayString"])(e.translate("ApiReference_ReportingApiSummary")),1),Object(i["createElementVNode"])("p",{innerHTML:e.$sanitize(e.reportingApiMoreInformation)},null,8,l),Object(i["createElementVNode"])("p",{class:"old-api-docs-paragraph",innerHTML:e.$sanitize(e.lookingForOldApiReference)},null,8,c)]),_:1},8,["content-title"]),Object(i["createVNode"])(A,{"content-title":e.translate("ApiReference_UserAuthentication")},{default:Object(i["withCtx"])(()=>[Object(i["createElementVNode"])("p",{innerHTML:e.$sanitize(e.userAuthenticationHelp)},null,8,u),Object(i["createElementVNode"])("p",null,[Object(i["createElementVNode"])("a",{href:e.userSecurityUrl},Object(i["toDisplayString"])(e.translate("ApiReference_UserAuthenticationManageTokens")),9,p)])]),_:1},8,["content-title"]),Object(i["createVNode"])(A,null,{default:Object(i["withCtx"])(()=>[Object(i["createVNode"])(P,{loading:e.isLoading},null,8,["loading"]),e.loadError?(Object(i["openBlock"])(),Object(i["createBlock"])(k,{key:0,severity:"danger"},{default:Object(i["withCtx"])(()=>[Object(i["createTextVNode"])(Object(i["toDisplayString"])(e.loadError),1)]),_:1})):e.isLoading||0!==e.plugins.length?e.isLoading?Object(i["createCommentVNode"])("",!0):(Object(i["openBlock"])(),Object(i["createElementBlock"])("div",g,[Object(i["createElementVNode"])("div",h,[m,Object(i["withDirectives"])(Object(i["createElementVNode"])("input",{"onUpdate:modelValue":t[0]||(t[0]=t=>e.searchTerm=t),type:"text",class:"searchInput browser-default",placeholder:e.translate("ApiReference_SwaggerPageSearchPlaceholder")},null,8,f),[[i["vModelText"],e.searchTerm]])]),0===e.filteredPlugins.length?(Object(i["openBlock"])(),Object(i["createElementBlock"])("p",b,Object(i["toDisplayString"])(e.translate("ApiReference_SwaggerPageSearchNoResults")),1)):(Object(i["openBlock"])(),Object(i["createElementBlock"])("div",y,[(Object(i["openBlock"])(!0),Object(i["createElementBlock"])(i["Fragment"],null,Object(i["renderList"])(e.plugins,t=>Object(i["withDirectives"])((Object(i["openBlock"])(),Object(i["createElementBlock"])("div",{key:t,class:Object(i["normalizeClass"])(["card","pluginCard",{"pluginCard--expanded":e.expandedPluginName===t}]),onMouseenter:n=>e.prefetchPluginSpec(t)},[Object(i["createElementVNode"])("button",{type:"button",class:"pluginToggle","aria-expanded":e.expandedPluginName===t?"true":"false",onFocus:n=>e.prefetchPluginSpec(t),onClick:n=>e.togglePlugin(t)},[Object(i["createElementVNode"])("span",j,[Object(i["createElementVNode"])("span",{class:Object(i["normalizeClass"])(["pluginChevron",e.expandedPluginName===t?"icon-chevron-down":"icon-chevron-right"])},null,2),Object(i["createElementVNode"])("span",w,Object(i["toDisplayString"])(t),1)])],40,O),Object(i["createVNode"])(i["Transition"],{name:"pluginBodyTransition",onBeforeEnter:e.onPluginBodyBeforeEnter,onEnter:e.onPluginBodyEnter,onBeforeLeave:e.onPluginBodyBeforeLeave,onLeave:e.onPluginBodyLeave,onAfterEnter:e.resetPluginBodyTransitionStyles,onAfterLeave:e.resetPluginBodyTransitionStyles},{default:Object(i["withCtx"])(()=>[Object(i["withDirectives"])(Object(i["createElementVNode"])("div",v,[Object(i["createVNode"])(E,{plugin:t,"piwik-url":e.piwikUrl,spec:e.getPluginSpecState(t).spec,"is-loading":"loading"===e.getPluginSpecState(t).status,"spec-load-error":e.getPluginSpecState(t).loadError},null,8,["plugin","piwik-url","spec","is-loading","spec-load-error"])],512),[[i["vShow"],e.expandedPluginName===t]])]),_:2},1032,["onBeforeEnter","onEnter","onBeforeLeave","onLeave","onAfterEnter","onAfterLeave"])],42,S)),[[i["vShow"],e.filteredPluginSet.has(t)]])),128))]))])):(Object(i["openBlock"])(),Object(i["createElementBlock"])("p",d,Object(i["toDisplayString"])(e.translate("ApiReference_SwaggerPagePluginEmpty")),1))]),_:1})])}var P=n("19dc");const k={key:0,class:"swaggerLoader"},E=["innerHTML"],B=["id"];function C(e,t,n,r,o,a){const s=Object(i["resolveComponent"])("ActivityIndicator"),l=Object(i["resolveComponent"])("Alert");return Object(i["openBlock"])(),Object(i["createElementBlock"])(i["Fragment"],null,[!e.isLoading||e.spec||e.displayError?Object(i["createCommentVNode"])("",!0):(Object(i["openBlock"])(),Object(i["createElementBlock"])("div",k,[Object(i["createVNode"])(s,{loading:!0})])),e.displayError?(Object(i["openBlock"])(),Object(i["createBlock"])(l,{key:1,severity:"danger"},{default:Object(i["withCtx"])(()=>[Object(i["createTextVNode"])(Object(i["toDisplayString"])(e.displayError),1)]),_:1})):e.isLoading||e.spec?Object(i["createCommentVNode"])("",!0):(Object(i["openBlock"])(),Object(i["createBlock"])(l,{key:2,severity:"warning"},{default:Object(i["withCtx"])(()=>[Object(i["createElementVNode"])("span",{innerHTML:e.$sanitize(e.missingSpecLearnMore)},null,8,E)]),_:1})),Object(i["createElementVNode"])("div",{id:e.swaggerContainerId,class:Object(i["normalizeClass"])(["swaggerMount",{"swaggerMount--ready":e.isReady}])},null,10,B)],64)}const L="__matomoActiveCopySuccessState",x="__matomoSwaggerAuthAutocompleteObserver",T="__matomoSummaryPathClickHandlerAttached",N="/index.php?module=API&method=",M=".opblock-tag, .opblock-summary, .expand-operation, .opblock-summary-control",R='',_='';var I=Object(i["defineComponent"])({components:{ActivityIndicator:P["ActivityIndicator"],Alert:P["Alert"]},props:{plugin:{type:String,required:!0},piwikUrl:{type:String,default:null},spec:{type:Object,default:null},isLoading:{type:Boolean,default:!1},specLoadError:{type:String,default:null}},data(){return{isReady:!1,loadError:null}},computed:{displayError(){return this.specLoadError||this.loadError},missingSpecLearnMore(){return Object(P["translate"])("ApiReference_SwaggerPageSpecNotAvailable",Object(P["externalLink"])("https://matomo.org/faq/how-to/how-to-use-the-api-reference-in-matomo#why-is-the-openapi-specification-file-not-generated"),"")},swaggerContainerId(){return"swagger-ui-"+this.plugin}},watch:{spec:{immediate:!0,handler(e){e?this.renderSwaggerUi():this.resetSwaggerUi()}}},beforeUnmount(){const e=this.getSwaggerRoot();e&&(this.clearSwaggerAuthAutocompleteObserver(e),this.clearCopySuccessState(e))},methods:{ensureObjectHasOwnSupport(){const e=Object;"function"!==typeof e.hasOwn&&(e.hasOwn=(e,t)=>Object.prototype.hasOwnProperty.call(e,t))},getSwaggerRoot(){return document.getElementById(this.swaggerContainerId)},getSpecWithCurrentInstanceUrl(e){return this.piwikUrl?Object.assign(Object.assign({},e),{},{servers:[{url:this.piwikUrl}]}):e},shortenSummaryPaths(e){const t=e.querySelectorAll(".opblock-summary-path");t.forEach(e=>{const t=e.getAttribute("data-path");t&&t.startsWith(N)&&(e.textContent=t.substring(N.length),e.setAttribute("title",t))})},updateFlatSingleTag(e){const t=e.querySelectorAll(".opblock-tag-section");if(t.forEach(e=>{e.classList.remove("matomo-flat-tag")}),1!==t.length)return;const n=t[0];n.querySelector(":scope > .opblock-tag")&&n.classList.add("matomo-flat-tag")},applyMatomoCopyIcons(e){const t=e.querySelectorAll(".opblock-summary .view-line-link.copy-to-clipboard");t.forEach(e=>{e.classList.contains("matomo-copy-success")||(e.innerHTML=R)})},suppressSwaggerAuthAutocomplete(e){const t=e.querySelectorAll(".modal-ux .auth-container input");t.forEach(e=>{e.setAttribute("autocomplete","new-password"),e.setAttribute("autocapitalize","off"),e.setAttribute("spellcheck","false")})},attachSwaggerAuthAutocompleteObserver(e){if(!e)return;if(this.suppressSwaggerAuthAutocomplete(e),e[x]||"undefined"===typeof MutationObserver)return;const t=new MutationObserver(()=>{this.suppressSwaggerAuthAutocomplete(e)});t.observe(e,{childList:!0,subtree:!0}),e[x]=t},normalizeSwaggerUi(e){this.shortenSummaryPaths(e),this.updateFlatSingleTag(e),this.applyMatomoCopyIcons(e)},getSummaryPathCopyControl(e){return null===e||void 0===e?void 0:e.closest(".opblock-summary .view-line-link.copy-to-clipboard")},getFlatTagHeader(e){return null===e||void 0===e?void 0:e.closest(".opblock-tag-section.matomo-flat-tag > .opblock-tag")},clearSwaggerAuthAutocompleteObserver(e){const t=e[x];t&&(t.disconnect(),e[x]=null)},clearCopySuccessState(e){const t=e[L];if(!t)return;const{element:n}=t;window.clearTimeout(t.resetTimeoutId),n.innerHTML=R,n.classList.remove("matomo-copy-success"),n.classList.remove("matomo-copy-reset"),window.requestAnimationFrame(()=>{n.classList.add("matomo-copy-reset"),window.setTimeout(()=>{n.classList.remove("matomo-copy-reset")},300)}),e[L]=null},showCopySuccessState(e,t){this.clearCopySuccessState(e),t.innerHTML=_,t.classList.remove("matomo-copy-reset"),t.classList.add("matomo-copy-success"),e[L]={element:t,resetTimeoutId:window.setTimeout(()=>{var n;(null===(n=e[L])||void 0===n?void 0:n.element)===t&&this.clearCopySuccessState(e)},3e3)}},attachSwaggerInteractionHandlers(e){e&&!e[T]&&(e[T]=!0,e.addEventListener("click",t=>{const n=t.target,r=this.getFlatTagHeader(n);if(r)return null!==n&&void 0!==n&&n.closest("a")||t.preventDefault(),void t.stopPropagation();const o=this.getSummaryPathCopyControl(n);o&&window.setTimeout(()=>{o.isConnected&&this.showCopySuccessState(e,o)},0),null!==n&&void 0!==n&&n.closest(M)&&window.setTimeout(()=>{this.normalizeSwaggerUi(e)},0)},!0))},resetSwaggerUi(){const e=this.getSwaggerRoot();this.isReady=!1,this.loadError=null,e&&(this.clearSwaggerAuthAutocompleteObserver(e),this.clearCopySuccessState(e),e.innerHTML="")},renderSwaggerUi(){var e;this.ensureObjectHasOwnSupport();const t=window.SwaggerUIBundle,n=this.getSwaggerRoot();if(this.isReady=!1,this.loadError=null,!t||!n||!this.spec){if(!this.spec)return;return this.isReady=!0,void(this.loadError=Object(P["translate"])("ApiReference_SwaggerPageSpecLoadFailed"))}n.innerHTML="",t({dom_id:"#"+this.swaggerContainerId,spec:this.getSpecWithCurrentInstanceUrl(this.spec),deepLinking:!1,docExpansion:"list",defaultModelsExpandDepth:-1,layout:"BaseLayout",tagsSorter:"alpha",presets:null!==(e=t.presets)&&void 0!==e&&e.apis?[t.presets.apis]:[],onComplete:()=>{window.setTimeout(()=>{this.normalizeSwaggerUi(n),this.attachSwaggerAuthAutocompleteObserver(n),this.isReady=!0},0),this.attachSwaggerInteractionHandlers(n)}})}}});n("dc2f");I.render=C,I.__scopeId="data-v-590bd90f";var H=I,V=Object(i["defineComponent"])({props:{defaultWebsiteId:{type:Number,default:null},piwikUrl:{type:String,default:null}},components:{ActivityIndicator:P["ActivityIndicator"],Alert:P["Alert"],ContentBlock:P["ContentBlock"],SwaggerUiPanel:H},directives:{ContentIntro:P["ContentIntro"]},computed:{reportingApiMoreInformation(){return Object(P["translate"])("ApiReference_ReportingApiMoreInformation",Object(P["externalLink"])("https://matomo.org/docs/analytics-api"),"",Object(P["externalLink"])("https://developer.matomo.org/api-reference/reporting-api"),"")},lookingForOldApiReference(){const e=Object.assign(Object.assign({},P["MatomoUrl"].urlParsed.value),{},{module:"API",action:"listAllAPI"});!e.idSite&&this.defaultWebsiteId&&(e.idSite=this.defaultWebsiteId);const t="?"+P["MatomoUrl"].stringify(e);return Object(P["translate"])("ApiReference_LookingForLegacyApiReference",``,"",Object(P["externalLink"])("https://matomo.org/support/"),"")},userAuthenticationHelp(){const e=Object(P["translate"])("ApiReference_UserAuthenticationUsingTokenAuth","","","token_auth"),t=Object(P["translate"])("CoreHome_LearnMoreFullStop",Object(P["externalLink"])("https://developer.matomo.org/api-reference/reporting-api#authenticate-to-the-api-via-token_auth-parameter"),"");return`${e} ${t}`},userSecurityUrl(){return`?${P["MatomoUrl"].stringify(Object.assign(Object.assign({},P["MatomoUrl"].urlParsed.value),{},{module:"UsersManager",action:"userSecurity"}))}#/#authtokens`},filteredPlugins(){const e=this.searchTerm.trim().toLowerCase();return e?this.plugins.filter(t=>t.toLowerCase().includes(e)):this.plugins},filteredPluginSet(){return new Set(this.filteredPlugins)}},data(){return{expandedPluginName:null,isLoading:!1,loadError:null,plugins:[],pluginSpecs:{},searchTerm:""}},created(){this.fetchPlugins()},watch:{searchTerm(e){this.expandedPluginName&&!this.matchesSearch(this.expandedPluginName,e)&&(this.expandedPluginName=null)}},methods:{matchesSearch(e,t){const n=(null!==t&&void 0!==t?t:this.searchTerm).trim().toLowerCase();return e.toLowerCase().includes(n)},forceReflow(e){e.getBoundingClientRect()},getExpandedPluginBody(){return document.querySelector(".pluginCard--expanded .pluginBody")},async compensateScrollAfterCollapse(e,t){await this.$nextTick(),this.expandedPluginName===e&&window.scrollBy(0,-t)},getPluginBodyTransitionDuration(e){return Math.min(400,Math.max(180,Math.round(e/4)))},resetPluginBodyTransitionStyles(e){const t=e;t.style.height="",t.style.transitionDuration="",t.style.overflow=""},setPluginBodyTransitionState(e,t){e.style.height=t,e.style.overflow="hidden"},transitionPluginBody(e,t,n){this.setPluginBodyTransitionState(e,t),e.style.transitionDuration=this.getPluginBodyTransitionDuration(e.scrollHeight)+"ms",this.forceReflow(e),e.style.height=n},onPluginBodyBeforeEnter(e){this.setPluginBodyTransitionState(e,"0")},onPluginBodyEnter(e){const t=e;this.transitionPluginBody(t,"0",t.scrollHeight+"px")},onPluginBodyBeforeLeave(e){const t=e;this.setPluginBodyTransitionState(t,t.scrollHeight+"px")},onPluginBodyLeave(e){const t=e;this.transitionPluginBody(t,t.scrollHeight+"px","0")},async fetchPlugins(){this.expandedPluginName=null,this.isLoading=!0,this.loadError=null,this.plugins=[],this.pluginSpecs={},this.searchTerm="";try{const e=await P["AjaxHelper"].fetch({method:"ApiReference.getAllowedPlugins"},{createErrorNotification:!1});this.plugins=[...e].sort((e,t)=>e.localeCompare(t))}catch(e){this.loadError=Object(P["translate"])("ApiReference_SwaggerPageRequestFailed")}finally{this.isLoading=!1}},createPluginSpecState(){return{loadError:null,request:null,spec:null,status:"idle"}},isMissingSpecError(e){let t="";return e instanceof Error?t=e.message:"string"===typeof e?t=e:"object"===typeof e&&e&&"message"in e&&(t=String(e.message)),t.includes("OpenAPI spec file was not found.")},getPluginSpecState(e){return this.pluginSpecs[e]||(this.pluginSpecs[e]=this.createPluginSpecState()),this.pluginSpecs[e]},async prefetchPluginSpec(e,t=!1){const n=this.getPluginSpecState(e);if(!t){if("loaded"===n.status)return n.spec;if("missing"===n.status)return null;if(n.request)return n.request}return n.status="loading",n.loadError=null,n.request=(async()=>{try{const t=await P["AjaxHelper"].fetch({method:"ApiReference.getOpenApiSpec",pluginName:e,format:"json"},{createErrorNotification:!1});return n.spec=t,n.status="loaded",t}catch(t){return n.spec=null,this.isMissingSpecError(t)?(n.status="missing",n.loadError=null):(n.status="error",n.loadError=Object(P["translate"])("ApiReference_SwaggerPageSpecLoadFailed")),null}finally{n.request=null}})(),n.request},togglePlugin(e){if(this.expandedPluginName===e)return void(this.expandedPluginName=null);const t=this.getExpandedPluginBody(),n=t?Math.round(t.getBoundingClientRect().height):0;this.expandedPluginName=e;const r=this.getPluginSpecState(e);"loaded"!==r.status&&"missing"!==r.status&&this.prefetchPluginSpec(e,"error"===r.status),n>=450&&this.compensateScrollAfterCollapse(e,n)}}});n("4a34");V.render=A,V.__scopeId="data-v-86969ddc";var U=V;
+(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["ApiReference"]=t(require("CoreHome"),require("vue")):e["ApiReference"]=t(e["CoreHome"],e["Vue"])})("undefined"!==typeof self?self:this,(function(e,t){return function(e){var t={};function n(o){if(t[o])return t[o].exports;var r=t[o]={i:o,l:!1,exports:{}};return e[o].call(r.exports,r,r.exports,n),r.l=!0,r.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 r in e)n.d(o,r,function(t){return e[t]}.bind(null,r));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/ApiReference/vue/dist/",n(n.s="fae3")}({"19dc":function(t,n){t.exports=e},"4a34":function(e,t,n){"use strict";n("6afe")},"6afe":function(e,t,n){},"8bbf":function(e,n){e.exports=t},"99a2":function(e,t,n){},ace7:function(e,t,n){"use strict";n("99a2")},fae3:function(e,t,n){"use strict";if(n.r(t),n.d(t,"SwaggerPage",(function(){return $})),"undefined"!==typeof window){var o=window.document.currentScript,r=o&&o.src.match(/(.+\/)[^/]+\.js(\?.*)?$/);r&&(n.p=r[1])}var a=n("8bbf");const i=e=>(Object(a["pushScopeId"])("data-v-86969ddc"),e=e(),Object(a["popScopeId"])(),e),s={class:"page"},c=["innerHTML"],l=["innerHTML"],u=["innerHTML"],d=["href"],p={key:1},g={key:2},h={class:"searchBar"},m=i(()=>Object(a["createElementVNode"])("span",{class:"searchIcon icon-search"},null,-1)),f=["placeholder"],b={key:0,class:"emptyText"},y={key:1,class:"pluginList"},S=["onMouseenter"],O=["aria-expanded","onFocus","onClick"],j={class:"pluginHeader"},w={class:"pluginName"},v={class:"card-content pluginBody"};function A(e,t,n,o,r,i){const A=Object(a["resolveComponent"])("ContentBlock"),P=Object(a["resolveComponent"])("ActivityIndicator"),k=Object(a["resolveComponent"])("Alert"),C=Object(a["resolveComponent"])("SwaggerUiPanel"),E=Object(a["resolveDirective"])("content-intro");return Object(a["openBlock"])(),Object(a["createElementBlock"])("div",s,[Object(a["withDirectives"])((Object(a["openBlock"])(),Object(a["createElementBlock"])("div",null,[Object(a["createElementVNode"])("h2",null,Object(a["toDisplayString"])(e.translate("General_API")),1)])),[[E]]),Object(a["createVNode"])(A,{"content-title":e.translate("ApiReference_ReportingApiReference")},{default:Object(a["withCtx"])(()=>[Object(a["createElementVNode"])("p",null,Object(a["toDisplayString"])(e.translate("ApiReference_ReportingApiSummary")),1),Object(a["createElementVNode"])("p",{innerHTML:e.$sanitize(e.reportingApiMoreInformation)},null,8,c),Object(a["createElementVNode"])("p",{class:"old-api-docs-paragraph",innerHTML:e.$sanitize(e.lookingForOldApiReference)},null,8,l)]),_:1},8,["content-title"]),Object(a["createVNode"])(A,{"content-title":e.translate("ApiReference_UserAuthentication")},{default:Object(a["withCtx"])(()=>[Object(a["createElementVNode"])("p",{innerHTML:e.$sanitize(e.userAuthenticationHelp)},null,8,u),Object(a["createElementVNode"])("p",null,[Object(a["createElementVNode"])("a",{href:e.userSecurityUrl},Object(a["toDisplayString"])(e.translate("ApiReference_UserAuthenticationManageTokens")),9,d)])]),_:1},8,["content-title"]),Object(a["createVNode"])(A,null,{default:Object(a["withCtx"])(()=>[Object(a["createVNode"])(P,{loading:e.isLoading},null,8,["loading"]),e.loadError?(Object(a["openBlock"])(),Object(a["createBlock"])(k,{key:0,severity:"danger"},{default:Object(a["withCtx"])(()=>[Object(a["createTextVNode"])(Object(a["toDisplayString"])(e.loadError),1)]),_:1})):e.isLoading||0!==e.plugins.length?e.isLoading?Object(a["createCommentVNode"])("",!0):(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",g,[Object(a["createElementVNode"])("div",h,[m,Object(a["withDirectives"])(Object(a["createElementVNode"])("input",{"onUpdate:modelValue":t[0]||(t[0]=t=>e.searchTerm=t),type:"text",class:"searchInput browser-default",placeholder:e.translate("ApiReference_SwaggerPageSearchPlaceholder")},null,8,f),[[a["vModelText"],e.searchTerm]])]),0===e.filteredPlugins.length?(Object(a["openBlock"])(),Object(a["createElementBlock"])("p",b,Object(a["toDisplayString"])(e.translate("ApiReference_SwaggerPageSearchNoResults")),1)):(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",y,[(Object(a["openBlock"])(!0),Object(a["createElementBlock"])(a["Fragment"],null,Object(a["renderList"])(e.plugins,t=>Object(a["withDirectives"])((Object(a["openBlock"])(),Object(a["createElementBlock"])("div",{key:t,class:Object(a["normalizeClass"])(["card","pluginCard",{"pluginCard--expanded":e.expandedPluginName===t}]),onMouseenter:n=>e.prefetchPluginSpec(t)},[Object(a["createElementVNode"])("button",{type:"button",class:"pluginToggle","aria-expanded":e.expandedPluginName===t?"true":"false",onFocus:n=>e.prefetchPluginSpec(t),onClick:n=>e.togglePlugin(t)},[Object(a["createElementVNode"])("span",j,[Object(a["createElementVNode"])("span",{class:Object(a["normalizeClass"])(["pluginChevron",e.expandedPluginName===t?"icon-chevron-down":"icon-chevron-right"])},null,2),Object(a["createElementVNode"])("span",w,Object(a["toDisplayString"])(t),1)])],40,O),Object(a["createVNode"])(a["Transition"],{name:"pluginBodyTransition",onBeforeEnter:e.onPluginBodyBeforeEnter,onEnter:e.onPluginBodyEnter,onBeforeLeave:e.onPluginBodyBeforeLeave,onLeave:e.onPluginBodyLeave,onAfterEnter:e.resetPluginBodyTransitionStyles,onAfterLeave:e.resetPluginBodyTransitionStyles},{default:Object(a["withCtx"])(()=>[Object(a["withDirectives"])(Object(a["createElementVNode"])("div",v,[Object(a["createVNode"])(C,{plugin:t,"piwik-url":e.piwikUrl,spec:e.getPluginSpecState(t).spec,"is-loading":"loading"===e.getPluginSpecState(t).status,"spec-load-error":e.getPluginSpecState(t).loadError},null,8,["plugin","piwik-url","spec","is-loading","spec-load-error"])],512),[[a["vShow"],e.expandedPluginName===t]])]),_:2},1032,["onBeforeEnter","onEnter","onBeforeLeave","onLeave","onAfterEnter","onAfterLeave"])],42,S)),[[a["vShow"],e.filteredPluginSet.has(t)]])),128))]))])):(Object(a["openBlock"])(),Object(a["createElementBlock"])("p",p,Object(a["toDisplayString"])(e.translate("ApiReference_SwaggerPagePluginEmpty")),1))]),_:1})])}var P=n("19dc");const k={key:0,class:"swaggerLoader"},C=["innerHTML"],E=["id"];function x(e,t,n,o,r,i){const s=Object(a["resolveComponent"])("ActivityIndicator"),c=Object(a["resolveComponent"])("Alert");return Object(a["openBlock"])(),Object(a["createElementBlock"])(a["Fragment"],null,[!e.isLoading||e.spec||e.displayError?Object(a["createCommentVNode"])("",!0):(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",k,[Object(a["createVNode"])(s,{loading:!0})])),e.displayError?(Object(a["openBlock"])(),Object(a["createBlock"])(c,{key:1,severity:"danger"},{default:Object(a["withCtx"])(()=>[Object(a["createTextVNode"])(Object(a["toDisplayString"])(e.displayError),1)]),_:1})):e.isLoading||e.spec?Object(a["createCommentVNode"])("",!0):(Object(a["openBlock"])(),Object(a["createBlock"])(c,{key:2,severity:"warning"},{default:Object(a["withCtx"])(()=>[Object(a["createElementVNode"])("span",{innerHTML:e.$sanitize(e.missingSpecLearnMore)},null,8,C)]),_:1})),Object(a["createElementVNode"])("div",{id:e.swaggerContainerId,class:Object(a["normalizeClass"])(["swaggerMount",{"swaggerMount--ready":e.isReady}])},null,10,E)],64)}const B="__matomoActiveCopySuccessState",L="__matomoSwaggerAuthAutocompleteObserver",T="__matomoSummaryPathClickHandlerAttached",N="/index.php?module=API&method=",R=".opblock-tag, .opblock-summary, .expand-operation, .opblock-summary-control",_=".scheme-container .authorize, .dialog-ux .modal-ux button",M='',I='',H="ApiReference_SwaggerPageConnectToken",V="ApiReference_SwaggerPageRemoveToken",U="ApiReference_SwaggerPageTokenConnected",q="ApiReference_SwaggerPageTokenConnectedHeading";var D=Object(a["defineComponent"])({components:{ActivityIndicator:P["ActivityIndicator"],Alert:P["Alert"]},props:{plugin:{type:String,required:!0},piwikUrl:{type:String,default:null},spec:{type:Object,default:null},isLoading:{type:Boolean,default:!1},specLoadError:{type:String,default:null}},data(){return{isReady:!1,loadError:null}},computed:{displayError(){return this.specLoadError||this.loadError},missingSpecLearnMore(){return Object(P["translate"])("ApiReference_SwaggerPageSpecNotAvailable",Object(P["externalLink"])("https://matomo.org/faq/how-to/how-to-use-the-api-reference-in-matomo#why-is-the-openapi-specification-file-not-generated"),"")},swaggerContainerId(){return"swagger-ui-"+this.plugin}},watch:{spec:{immediate:!0,handler(e){e?this.renderSwaggerUi():this.resetSwaggerUi()}}},beforeUnmount(){const e=this.getSwaggerRoot();e&&(this.clearSwaggerAuthAutocompleteObserver(e),this.clearCopySuccessState(e))},methods:{ensureObjectHasOwnSupport(){const e=Object;"function"!==typeof e.hasOwn&&(e.hasOwn=(e,t)=>Object.prototype.hasOwnProperty.call(e,t))},getSwaggerRoot(){return document.getElementById(this.swaggerContainerId)},getSpecWithCurrentInstanceUrl(e){return this.piwikUrl?Object.assign(Object.assign({},e),{},{servers:[{url:this.piwikUrl}]}):e},shortenSummaryPaths(e){const t=e.querySelectorAll(".opblock-summary-path");t.forEach(e=>{const t=e.getAttribute("data-path");t&&t.startsWith(N)&&(e.textContent=t.substring(N.length),e.setAttribute("title",t))})},updateFlatSingleTag(e){const t=e.querySelectorAll(".opblock-tag-section");if(t.forEach(e=>{e.classList.remove("matomo-flat-tag")}),1!==t.length)return;const n=t[0];n.querySelector(":scope > .opblock-tag")&&n.classList.add("matomo-flat-tag")},applyMatomoCopyIcons(e){const t=e.querySelectorAll(".opblock-summary .view-line-link.copy-to-clipboard");t.forEach(e=>{e.classList.contains("matomo-copy-success")||(e.innerHTML=M)})},suppressSwaggerAuthAutocomplete(e){const t=e.querySelectorAll(".modal-ux .auth-container input");t.forEach(e=>{e.setAttribute("autocomplete","new-password"),e.setAttribute("autocapitalize","off"),e.setAttribute("spellcheck","false")})},getSwaggerAuthTextReplacements(){return[{from:"Authorized",to:Object(P["translate"])(U)},{from:"Authorised",to:Object(P["translate"])(U)},{from:"Logout",to:Object(P["translate"])(V)}]},replaceSwaggerText(e){const t=this.getSwaggerAuthTextReplacements(),n=document.createTreeWalker(e,NodeFilter.SHOW_TEXT);let o=n.nextNode();while(o){var r;const e=null===(r=o.textContent)||void 0===r?void 0:r.trim();if(e){const n=t.find(({from:t})=>e===t);n&&(o.textContent=n.to)}o=n.nextNode()}},updateSwaggerAuthCopy(e){this.replaceSwaggerText(e);const t=document.querySelector(".dialog-ux .modal-ux"),n=e.querySelector(".scheme-container .authorize"),o=null===n||void 0===n?void 0:n.querySelector("span"),r=!(null===n||void 0===n||!n.classList.contains("locked"));if(n&&n.classList.toggle("matomo-token-connected",r),o&&(o.textContent=r?Object(P["translate"])(U):Object(P["translate"])(H)),!t)return;const a=t.querySelector("h3");a&&(a.textContent=r?Object(P["translate"])(q):Object(P["translate"])(H));const i=t.querySelectorAll(".auth-container");i.forEach(e=>{const t=e.querySelectorAll("button");t.forEach(e=>{var t;const n=null===(t=e.textContent)||void 0===t?void 0:t.trim();"Logout"===n&&(e.textContent=Object(P["translate"])(V))})})},attachSwaggerAuthAutocompleteObserver(e){if(!e)return;if(this.suppressSwaggerAuthAutocomplete(document),this.updateSwaggerAuthCopy(e),e[L]||"undefined"===typeof MutationObserver)return;const t=new MutationObserver(()=>{this.suppressSwaggerAuthAutocomplete(e)});t.observe(e,{childList:!0,subtree:!0}),e[L]=t},normalizeSwaggerUi(e){this.shortenSummaryPaths(e),this.updateFlatSingleTag(e),this.applyMatomoCopyIcons(e),this.updateSwaggerAuthCopy(e)},getSummaryPathCopyControl(e){return null===e||void 0===e?void 0:e.closest(".opblock-summary .view-line-link.copy-to-clipboard")},getFlatTagHeader(e){return null===e||void 0===e?void 0:e.closest(".opblock-tag-section.matomo-flat-tag > .opblock-tag")},clearSwaggerAuthAutocompleteObserver(e){const t=e[L];t&&(t.disconnect(),e[L]=null)},clearCopySuccessState(e){const t=e[B];if(!t)return;const{element:n}=t;window.clearTimeout(t.resetTimeoutId),n.innerHTML=M,n.classList.remove("matomo-copy-success"),n.classList.remove("matomo-copy-reset"),window.requestAnimationFrame(()=>{n.classList.add("matomo-copy-reset"),window.setTimeout(()=>{n.classList.remove("matomo-copy-reset")},300)}),e[B]=null},showCopySuccessState(e,t){this.clearCopySuccessState(e),t.innerHTML=I,t.classList.remove("matomo-copy-reset"),t.classList.add("matomo-copy-success"),e[B]={element:t,resetTimeoutId:window.setTimeout(()=>{var n;(null===(n=e[B])||void 0===n?void 0:n.element)===t&&this.clearCopySuccessState(e)},3e3)}},attachSwaggerInteractionHandlers(e){e&&!e[T]&&(e[T]=!0,e.addEventListener("click",t=>{const n=t.target,o=this.getFlatTagHeader(n);if(o)return null!==n&&void 0!==n&&n.closest("a")||t.preventDefault(),void t.stopPropagation();const r=this.getSummaryPathCopyControl(n);r&&window.setTimeout(()=>{r.isConnected&&this.showCopySuccessState(e,r)},0),null!==n&&void 0!==n&&n.closest(_)&&window.setTimeout(()=>{this.updateSwaggerAuthCopy(e),this.suppressSwaggerAuthAutocomplete(document)},0),null!==n&&void 0!==n&&n.closest(R)&&window.setTimeout(()=>{this.normalizeSwaggerUi(e)},0)},!0))},resetSwaggerUi(){const e=this.getSwaggerRoot();this.isReady=!1,this.loadError=null,e&&(this.clearSwaggerAuthAutocompleteObserver(e),this.clearCopySuccessState(e),e.innerHTML="")},renderSwaggerUi(){var e;this.ensureObjectHasOwnSupport();const t=window.SwaggerUIBundle,n=this.getSwaggerRoot();if(this.isReady=!1,this.loadError=null,!t||!n||!this.spec){if(!this.spec)return;return this.isReady=!0,void(this.loadError=Object(P["translate"])("ApiReference_SwaggerPageSpecLoadFailed"))}n.innerHTML="",t({dom_id:"#"+this.swaggerContainerId,spec:this.getSpecWithCurrentInstanceUrl(this.spec),deepLinking:!1,docExpansion:"list",defaultModelsExpandDepth:-1,layout:"BaseLayout",tagsSorter:"alpha",presets:null!==(e=t.presets)&&void 0!==e&&e.apis?[t.presets.apis]:[],onComplete:()=>{window.setTimeout(()=>{this.normalizeSwaggerUi(n),this.attachSwaggerAuthAutocompleteObserver(n),this.isReady=!0},0),this.attachSwaggerInteractionHandlers(n)}})}}});n("ace7");D.render=x,D.__scopeId="data-v-67de9b78";var F=D,z=Object(a["defineComponent"])({props:{defaultWebsiteId:{type:Number,default:null},piwikUrl:{type:String,default:null}},components:{ActivityIndicator:P["ActivityIndicator"],Alert:P["Alert"],ContentBlock:P["ContentBlock"],SwaggerUiPanel:F},directives:{ContentIntro:P["ContentIntro"]},computed:{reportingApiMoreInformation(){return Object(P["translate"])("ApiReference_ReportingApiMoreInformation",Object(P["externalLink"])("https://matomo.org/docs/analytics-api"),"",Object(P["externalLink"])("https://developer.matomo.org/api-reference/reporting-api"),"")},lookingForOldApiReference(){const e=Object.assign(Object.assign({},P["MatomoUrl"].urlParsed.value),{},{module:"API",action:"listAllAPI"});!e.idSite&&this.defaultWebsiteId&&(e.idSite=this.defaultWebsiteId);const t="?"+P["MatomoUrl"].stringify(e);return Object(P["translate"])("ApiReference_LookingForLegacyApiReference",``,"",Object(P["externalLink"])("https://matomo.org/support/"),"")},userAuthenticationHelp(){const e=Object(P["translate"])("ApiReference_UserAuthenticationUsingTokenAuth","","","token_auth"),t=Object(P["translate"])("CoreHome_LearnMoreFullStop",Object(P["externalLink"])("https://developer.matomo.org/api-reference/reporting-api#authenticate-to-the-api-via-token_auth-parameter"),"");return`${e} ${t}`},userSecurityUrl(){return`?${P["MatomoUrl"].stringify(Object.assign(Object.assign({},P["MatomoUrl"].urlParsed.value),{},{module:"UsersManager",action:"userSecurity"}))}#/#authtokens`},filteredPlugins(){const e=this.searchTerm.trim().toLowerCase();return e?this.plugins.filter(t=>t.toLowerCase().includes(e)):this.plugins},filteredPluginSet(){return new Set(this.filteredPlugins)}},data(){return{expandedPluginName:null,isLoading:!1,loadError:null,plugins:[],pluginSpecs:{},searchTerm:""}},created(){this.fetchPlugins()},watch:{searchTerm(e){this.expandedPluginName&&!this.matchesSearch(this.expandedPluginName,e)&&(this.expandedPluginName=null)}},methods:{matchesSearch(e,t){const n=(null!==t&&void 0!==t?t:this.searchTerm).trim().toLowerCase();return e.toLowerCase().includes(n)},forceReflow(e){e.getBoundingClientRect()},getExpandedPluginBody(){return document.querySelector(".pluginCard--expanded .pluginBody")},async compensateScrollAfterCollapse(e,t){await this.$nextTick(),this.expandedPluginName===e&&window.scrollBy(0,-t)},getPluginBodyTransitionDuration(e){return Math.min(400,Math.max(180,Math.round(e/4)))},resetPluginBodyTransitionStyles(e){const t=e;t.style.height="",t.style.transitionDuration="",t.style.overflow=""},setPluginBodyTransitionState(e,t){e.style.height=t,e.style.overflow="hidden"},transitionPluginBody(e,t,n){this.setPluginBodyTransitionState(e,t),e.style.transitionDuration=this.getPluginBodyTransitionDuration(e.scrollHeight)+"ms",this.forceReflow(e),e.style.height=n},onPluginBodyBeforeEnter(e){this.setPluginBodyTransitionState(e,"0")},onPluginBodyEnter(e){const t=e;this.transitionPluginBody(t,"0",t.scrollHeight+"px")},onPluginBodyBeforeLeave(e){const t=e;this.setPluginBodyTransitionState(t,t.scrollHeight+"px")},onPluginBodyLeave(e){const t=e;this.transitionPluginBody(t,t.scrollHeight+"px","0")},async fetchPlugins(){this.expandedPluginName=null,this.isLoading=!0,this.loadError=null,this.plugins=[],this.pluginSpecs={},this.searchTerm="";try{const e=await P["AjaxHelper"].fetch({method:"ApiReference.getAllowedPlugins"},{createErrorNotification:!1});this.plugins=[...e].sort((e,t)=>e.localeCompare(t))}catch(e){this.loadError=Object(P["translate"])("ApiReference_SwaggerPageRequestFailed")}finally{this.isLoading=!1}},createPluginSpecState(){return{loadError:null,request:null,spec:null,status:"idle"}},isMissingSpecError(e){let t="";return e instanceof Error?t=e.message:"string"===typeof e?t=e:"object"===typeof e&&e&&"message"in e&&(t=String(e.message)),t.includes("OpenAPI spec file was not found.")},getPluginSpecState(e){return this.pluginSpecs[e]||(this.pluginSpecs[e]=this.createPluginSpecState()),this.pluginSpecs[e]},async prefetchPluginSpec(e,t=!1){const n=this.getPluginSpecState(e);if(!t){if("loaded"===n.status)return n.spec;if("missing"===n.status)return null;if(n.request)return n.request}return n.status="loading",n.loadError=null,n.request=(async()=>{try{const t=await P["AjaxHelper"].fetch({method:"ApiReference.getOpenApiSpec",pluginName:e,format:"json"},{createErrorNotification:!1});return n.spec=t,n.status="loaded",t}catch(t){return n.spec=null,this.isMissingSpecError(t)?(n.status="missing",n.loadError=null):(n.status="error",n.loadError=Object(P["translate"])("ApiReference_SwaggerPageSpecLoadFailed")),null}finally{n.request=null}})(),n.request},togglePlugin(e){if(this.expandedPluginName===e)return void(this.expandedPluginName=null);const t=this.getExpandedPluginBody(),n=t?Math.round(t.getBoundingClientRect().height):0;this.expandedPluginName=e;const o=this.getPluginSpecState(e);"loaded"!==o.status&&"missing"!==o.status&&this.prefetchPluginSpec(e,"error"===o.status),n>=450&&this.compensateScrollAfterCollapse(e,n)}}});n("4a34");z.render=A,z.__scopeId="data-v-86969ddc";var $=z;
/*!
* Matomo - free/libre analytics platform
*
diff --git a/vue/src/SwaggerPage/SwaggerUiPanel.vue b/vue/src/SwaggerPage/SwaggerUiPanel.vue
index 41b33a1..0d99aaa 100644
--- a/vue/src/SwaggerPage/SwaggerUiPanel.vue
+++ b/vue/src/SwaggerPage/SwaggerUiPanel.vue
@@ -47,8 +47,13 @@ const authAutocompleteObserverKey = '__matomoSwaggerAuthAutocompleteObserver';
const summaryPathClickHandlerAttachedKey = '__matomoSummaryPathClickHandlerAttached';
const summaryPrefix = '/index.php?module=API&method=';
const interactiveSwaggerSelector = '.opblock-tag, .opblock-summary, .expand-operation, .opblock-summary-control';
+const authInteractionSelector = '.scheme-container .authorize, .dialog-ux .modal-ux button';
const copyIconMarkup = '';
const copySuccessIconMarkup = '';
+const connectTokenTranslationKey = 'ApiReference_SwaggerPageConnectToken';
+const removeTokenTranslationKey = 'ApiReference_SwaggerPageRemoveToken';
+const tokenConnectedTranslationKey = 'ApiReference_SwaggerPageTokenConnected';
+const tokenConnectedHeadingTranslationKey = 'ApiReference_SwaggerPageTokenConnectedHeading';
interface OpenApiSpec {
[key: string]: unknown;
@@ -245,12 +250,86 @@ export default defineComponent({
input.setAttribute('spellcheck', 'false');
});
},
+ getSwaggerAuthTextReplacements() {
+ return [
+ { from: 'Authorized', to: translate(tokenConnectedTranslationKey) },
+ { from: 'Authorised', to: translate(tokenConnectedTranslationKey) },
+ { from: 'Logout', to: translate(removeTokenTranslationKey) },
+ ];
+ },
+ replaceSwaggerText(swaggerRoot: ParentNode) {
+ const swaggerTextReplacements = this.getSwaggerAuthTextReplacements();
+ const walker = document.createTreeWalker(
+ swaggerRoot as unknown as Node,
+ NodeFilter.SHOW_TEXT,
+ );
+ let currentNode = walker.nextNode();
+
+ while (currentNode) {
+ const text = currentNode.textContent?.trim();
+
+ if (text) {
+ const replacement = swaggerTextReplacements.find(({ from }) => text === from);
+
+ if (replacement) {
+ currentNode.textContent = replacement.to;
+ }
+ }
+
+ currentNode = walker.nextNode();
+ }
+ },
+ updateSwaggerAuthCopy(swaggerRoot: ParentNode) {
+ this.replaceSwaggerText(swaggerRoot);
+
+ const modal = document.querySelector('.dialog-ux .modal-ux');
+ const authButton = swaggerRoot.querySelector('.scheme-container .authorize');
+ const authStatus = authButton?.querySelector('span');
+ const isTokenConnected = !!authButton?.classList.contains('locked');
+
+ if (authButton) {
+ authButton.classList.toggle('matomo-token-connected', isTokenConnected);
+ }
+
+ if (authStatus) {
+ authStatus.textContent = isTokenConnected
+ ? translate(tokenConnectedTranslationKey)
+ : translate(connectTokenTranslationKey);
+ }
+
+ if (!modal) {
+ return;
+ }
+
+ const modalHeading = modal.querySelector('h3');
+
+ if (modalHeading) {
+ modalHeading.textContent = isTokenConnected
+ ? translate(tokenConnectedHeadingTranslationKey)
+ : translate(connectTokenTranslationKey);
+ }
+
+ const authContainers = modal.querySelectorAll('.auth-container');
+
+ authContainers.forEach((authContainer) => {
+ const authButtons = authContainer.querySelectorAll('button');
+
+ authButtons.forEach((button) => {
+ const buttonText = button.textContent?.trim();
+
+ if (buttonText === 'Logout') {
+ button.textContent = translate(removeTokenTranslationKey);
+ }
+ });
+ });
+ },
attachSwaggerAuthAutocompleteObserver(swaggerRoot: SwaggerRootElement | null) {
if (!swaggerRoot) {
return;
}
- this.suppressSwaggerAuthAutocomplete(swaggerRoot);
+ this.suppressSwaggerAuthAutocomplete(document);
+ this.updateSwaggerAuthCopy(swaggerRoot);
if (swaggerRoot[authAutocompleteObserverKey] || typeof MutationObserver === 'undefined') {
return;
@@ -271,6 +350,7 @@ export default defineComponent({
this.shortenSummaryPaths(swaggerRoot);
this.updateFlatSingleTag(swaggerRoot);
this.applyMatomoCopyIcons(swaggerRoot);
+ this.updateSwaggerAuthCopy(swaggerRoot);
},
getSummaryPathCopyControl(target: Element | null) {
return target?.closest('.opblock-summary .view-line-link.copy-to-clipboard') as HTMLElement | null;
@@ -357,6 +437,12 @@ export default defineComponent({
}
}, 0);
}
+ if (target?.closest(authInteractionSelector)) {
+ window.setTimeout(() => {
+ this.updateSwaggerAuthCopy(swaggerRoot);
+ this.suppressSwaggerAuthAutocomplete(document);
+ }, 0);
+ }
if (!target?.closest(interactiveSwaggerSelector)) {
return;
@@ -451,4 +537,15 @@ export default defineComponent({
line-height: 1.5;
padding-top: 0;
}
+
+.swaggerMount :deep(.swagger-ui input[disabled]),
+.swaggerMount :deep(.swagger-ui select[disabled]),
+.swaggerMount :deep(.swagger-ui textarea[disabled]) {
+ background: var(--theme-color-background-tint, #f2f4f7);
+ border-color: var(--theme-color-border-subtle, #c5ced8);
+ border-style: dashed;
+ color: var(--theme-color-text-lighter, #98a2b3);
+ cursor: not-allowed;
+ opacity: 1;
+}
diff --git a/vue/src/SwaggerPage/swagger-ui-overrides.css b/vue/src/SwaggerPage/swagger-ui-overrides.css
index ce846d5..c89b9bd 100644
--- a/vue/src/SwaggerPage/swagger-ui-overrides.css
+++ b/vue/src/SwaggerPage/swagger-ui-overrides.css
@@ -209,6 +209,10 @@
padding: 0;
}
+#content.admin .swaggerMount .swagger-ui pre {
+ max-width: none;
+}
+
.swaggerMount .swagger-ui a {
color: var(--matomo-swagger-link);
}
@@ -228,8 +232,11 @@
background: transparent;
}
+.swaggerMount .swagger-ui .parameters-col_description input {
+ background: #fff;
+}
+
.swaggerMount .swagger-ui :is(
- .parameters-col_description input,
.response-control-media-type__accept-message,
.responses-inner .highlight-code,
.model-example .highlight-code
@@ -304,6 +311,16 @@
fill: var(--theme-color-link);
}
+.swaggerMount .swagger-ui .authorize.matomo-token-connected {
+ background: var(--theme-color-success-background, #edf8ef);
+ border-color: var(--theme-color-success-border, #97c88f);
+ color: var(--theme-color-success, #1e8e3e) !important;
+}
+
+.swaggerMount .swagger-ui .authorize.matomo-token-connected svg {
+ fill: var(--theme-color-success, #1e8e3e);
+}
+
.swaggerMount .swagger-ui :is(.btn, .authorize, .clear-btn, .download-contents) {
background: var(--matomo-swagger-panel-background-muted);
border-color: var(--matomo-swagger-border);