From d9729bc65421cbd9a6be8e12fb01e2a6eec84ecd Mon Sep 17 00:00:00 2001 From: Abhishek Kumar Date: Wed, 3 Mar 2021 13:12:56 +0530 Subject: [PATCH 1/4] ui: allow docHelp override using config.json config.json can have a property named 'docHelpMappings' which can be used to override docHelp suffixes. In config.json admin can add mappings as follows: "docHelpMappings": { "virtual_machine.html": "some.html", "some_string": "override_string" } UI will use these mappings and will make appropriate replacements in the documentation links for different sections and forms. Addresses #4731 Signed-off-by: Abhishek Kumar --- ui/public/config.json | 3 ++- ui/src/components/widgets/Breadcrumb.vue | 4 +++- ui/src/main.js | 4 +++- ui/src/utils/plugins.js | 19 +++++++++++++++++++ ui/src/views/AutogenView.vue | 4 ++-- ui/tests/common/index.js | 3 ++- 6 files changed, 31 insertions(+), 6 deletions(-) diff --git a/ui/public/config.json b/ui/public/config.json index f4fda4114262..850547fb2e94 100644 --- a/ui/public/config.json +++ b/ui/public/config.json @@ -46,5 +46,6 @@ "jp": "label.japanese.keyboard", "sc": "label.simplified.chinese.keyboard" }, - "plugins": [] + "plugins": [], + "docHelpMappings": {} } diff --git a/ui/src/components/widgets/Breadcrumb.vue b/ui/src/components/widgets/Breadcrumb.vue index fdcb304f7dfc..3bbb0021800c 100644 --- a/ui/src/components/widgets/Breadcrumb.vue +++ b/ui/src/components/widgets/Breadcrumb.vue @@ -45,7 +45,7 @@ @@ -72,6 +72,7 @@ export default { data () { return { name: '', + docHelp: '', breadList: [] } }, @@ -86,6 +87,7 @@ export default { methods: { getBreadcrumb () { this.name = this.$route.name + this.docHelp = this.$applyDocHelpMappings(this.$route.meta.docHelp) this.breadList = [] this.$route.matched.forEach((item) => { if (item && item.parent && item.parent.name !== 'index' && !item.path.endsWith(':id')) { diff --git a/ui/src/main.js b/ui/src/main.js index acc41d2de336..064314b98de8 100644 --- a/ui/src/main.js +++ b/ui/src/main.js @@ -26,7 +26,7 @@ import './core/lazy_use' import './core/ext' import './permission' // permission control import './utils/filter' // global filter -import { pollJobPlugin, notifierPlugin, toLocaleDatePlugin } from './utils/plugins' +import { pollJobPlugin, notifierPlugin, toLocaleDatePlugin, configUtilPlugin } from './utils/plugins' import { VueAxios } from './utils/request' Vue.config.productionTip = false @@ -49,3 +49,5 @@ fetch('config.json').then(response => response.json()).then(config => { }).$mount('#app') }) }) + +Vue.use(configUtilPlugin) diff --git a/ui/src/utils/plugins.js b/ui/src/utils/plugins.js index d32217f6ba1d..8122c42b5f21 100644 --- a/ui/src/utils/plugins.js +++ b/ui/src/utils/plugins.js @@ -167,3 +167,22 @@ export const toLocaleDatePlugin = { } } } + +export const configUtilPlugin = { + install (Vue) { + Vue.prototype.$applyDocHelpMappings = function (docHelp) { + var docHelpMappings = this.$config.docHelpMappings + if (docHelp !== null && docHelp !== undefined && docHelp !== '' && + docHelpMappings !== null && docHelpMappings !== undefined && + docHelpMappings.constructor === Object && Object.keys(docHelpMappings).length > 0) { + for (var key in docHelpMappings) { + if (docHelp.includes(key)) { + docHelp = docHelp.replace(key, docHelpMappings[key]) + break + } + } + } + return docHelp + } + } +} diff --git a/ui/src/views/AutogenView.vue b/ui/src/views/AutogenView.vue index 157d7d7eb3c5..c83c683a317b 100644 --- a/ui/src/views/AutogenView.vue +++ b/ui/src/views/AutogenView.vue @@ -103,7 +103,7 @@ @@ -137,7 +137,7 @@ diff --git a/ui/tests/common/index.js b/ui/tests/common/index.js index 544c66eeff68..e9c8deb0321d 100644 --- a/ui/tests/common/index.js +++ b/ui/tests/common/index.js @@ -21,10 +21,11 @@ import mockRouter from '../mock/mockRouter' import localVue from '../setup' import { mount } from '@vue/test-utils' -import { pollJobPlugin, notifierPlugin } from '@/utils/plugins' +import { pollJobPlugin, notifierPlugin, configUtilPlugin } from '@/utils/plugins' localVue.use(pollJobPlugin) localVue.use(notifierPlugin) +localVue.use(configUtilPlugin) function createMockRouter (newRoutes = []) { let routes = [] From 430e7a2e999c83a6b3c71349d4feefe52cd8434d Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Thu, 11 Mar 2021 13:10:45 +0530 Subject: [PATCH 2/4] Update config.json --- ui/public/config.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ui/public/config.json b/ui/public/config.json index 850547fb2e94..45cc974ffeba 100644 --- a/ui/public/config.json +++ b/ui/public/config.json @@ -46,6 +46,6 @@ "jp": "label.japanese.keyboard", "sc": "label.simplified.chinese.keyboard" }, - "plugins": [], - "docHelpMappings": {} + "docHelpMappings": {}, + "plugins": [] } From d17abe5766393d8c9072b713fa18e1726f2a1f2a Mon Sep 17 00:00:00 2001 From: Abhishek Kumar Date: Mon, 15 Mar 2021 12:13:31 +0530 Subject: [PATCH 3/4] refactor Signed-off-by: Abhishek Kumar --- ui/src/components/view/ActionButton.vue | 3 +++ ui/src/components/widgets/Breadcrumb.vue | 4 +--- ui/src/config/router.js | 8 ++++---- ui/src/utils/plugins.js | 3 +-- ui/src/views/AutogenView.vue | 4 ++-- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/ui/src/components/view/ActionButton.vue b/ui/src/components/view/ActionButton.vue index 570dae1b2050..6feef722af49 100644 --- a/ui/src/components/view/ActionButton.vue +++ b/ui/src/components/view/ActionButton.vue @@ -129,6 +129,9 @@ export default { methods: { execAction (action) { action.resource = this.resource + if (action.docHelp) { + action.docHelp = this.$applyDocHelpMappings(action.docHelp) + } this.$emit('exec-action', action) }, handleShowBadge () { diff --git a/ui/src/components/widgets/Breadcrumb.vue b/ui/src/components/widgets/Breadcrumb.vue index 3bbb0021800c..fdcb304f7dfc 100644 --- a/ui/src/components/widgets/Breadcrumb.vue +++ b/ui/src/components/widgets/Breadcrumb.vue @@ -45,7 +45,7 @@ @@ -72,7 +72,6 @@ export default { data () { return { name: '', - docHelp: '', breadList: [] } }, @@ -87,7 +86,6 @@ export default { methods: { getBreadcrumb () { this.name = this.$route.name - this.docHelp = this.$applyDocHelpMappings(this.$route.meta.docHelp) this.breadList = [] this.$route.matched.forEach((item) => { if (item && item.parent && item.parent.name !== 'index' && !item.path.endsWith(':id')) { diff --git a/ui/src/config/router.js b/ui/src/config/router.js index 43a2da5b6e84..794d8533dbc8 100644 --- a/ui/src/config/router.js +++ b/ui/src/config/router.js @@ -42,7 +42,7 @@ function generateRouterMap (section) { name: section.name, path: '/' + section.name, hidden: section.hidden, - meta: { title: section.title, icon: section.icon, docHelp: section.docHelp, searchFilters: section.searchFilters }, + meta: { title: section.title, icon: section.icon, docHelp: Vue.prototype.$applyDocHelpMappings(section.docHelp), searchFilters: section.searchFilters }, component: RouteView } @@ -63,7 +63,7 @@ function generateRouterMap (section) { title: child.title, name: child.name, icon: child.icon, - docHelp: child.docHelp, + docHelp: Vue.prototype.$applyDocHelpMappings(child.docHelp), permission: child.permission, resourceType: child.resourceType, filters: child.filters, @@ -85,7 +85,7 @@ function generateRouterMap (section) { title: child.title, name: child.name, icon: child.icon, - docHelp: child.docHelp, + docHelp: Vue.prototype.$applyDocHelpMappings(child.docHelp), permission: child.permission, resourceType: child.resourceType, params: child.params ? child.params : {}, @@ -140,7 +140,7 @@ function generateRouterMap (section) { title: section.title, name: section.name, icon: section.icon, - docHelp: section.docHelp, + docHelp: Vue.prototype.$applyDocHelpMappings(section.docHel), hidden: section.hidden, permission: section.permission, resourceType: section.resourceType, diff --git a/ui/src/utils/plugins.js b/ui/src/utils/plugins.js index 8122c42b5f21..905f0b1bbfde 100644 --- a/ui/src/utils/plugins.js +++ b/ui/src/utils/plugins.js @@ -172,8 +172,7 @@ export const configUtilPlugin = { install (Vue) { Vue.prototype.$applyDocHelpMappings = function (docHelp) { var docHelpMappings = this.$config.docHelpMappings - if (docHelp !== null && docHelp !== undefined && docHelp !== '' && - docHelpMappings !== null && docHelpMappings !== undefined && + if (docHelp && docHelpMappings && docHelpMappings.constructor === Object && Object.keys(docHelpMappings).length > 0) { for (var key in docHelpMappings) { if (docHelp.includes(key)) { diff --git a/ui/src/views/AutogenView.vue b/ui/src/views/AutogenView.vue index c83c683a317b..83614e603494 100644 --- a/ui/src/views/AutogenView.vue +++ b/ui/src/views/AutogenView.vue @@ -103,7 +103,7 @@ @@ -137,7 +137,7 @@ From 608f253b9a09fd591e5c802880b5212c73e2dd86 Mon Sep 17 00:00:00 2001 From: Abhishek Kumar Date: Mon, 15 Mar 2021 12:15:47 +0530 Subject: [PATCH 4/4] fix Signed-off-by: Abhishek Kumar --- ui/src/config/router.js | 2 +- ui/src/views/AutogenView.vue | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/ui/src/config/router.js b/ui/src/config/router.js index 794d8533dbc8..8a9525c32473 100644 --- a/ui/src/config/router.js +++ b/ui/src/config/router.js @@ -140,7 +140,7 @@ function generateRouterMap (section) { title: section.title, name: section.name, icon: section.icon, - docHelp: Vue.prototype.$applyDocHelpMappings(section.docHel), + docHelp: Vue.prototype.$applyDocHelpMappings(section.docHelp), hidden: section.hidden, permission: section.permission, resourceType: section.resourceType, diff --git a/ui/src/views/AutogenView.vue b/ui/src/views/AutogenView.vue index 83614e603494..157d7d7eb3c5 100644 --- a/ui/src/views/AutogenView.vue +++ b/ui/src/views/AutogenView.vue @@ -103,7 +103,7 @@ @@ -137,7 +137,7 @@