| |
| |
| |
| |
| |
| |
| |
| <template> |
| <ContentBlock |
| :content-title="translate('Diagnostics_ConfigFileTitle')" |
| feature="true" |
| > |
| <p> |
| <span v-html="$sanitize(configFileIntro)" style="margin-right:3.5px"></span> |
| <span |
| v-html="$sanitize(translate('Diagnostics_HideUnchanged', '<a>', '</a>'))" |
| @click="onHideUnchanged($event)" |
| ></span> |
| </p> |
| |
| <h3>{{ translate('Diagnostics_Sections') }}</h3> |
| <Passthrough v-for="(values, category) in allConfigValues" :key="category"> |
| <a :href="`#${category}`">{{ category }}</a><br /> |
| </Passthrough> |
| |
| <p/> |
| |
| <table class="diagnostics configfile" v-content-table> |
| <tbody> |
| <Passthrough v-for="(configValues, category) in allConfigValues" :key="category"> |
| |
| <tr> |
| <td colspan="3"> |
| <a :name="category"></a><h3>{{ category }}</h3> |
| </td> |
| </tr> |
| |
| <tr |
| v-for="(configEntry, key) in configValues" |
| :key="key" |
| :class="{'custom-value': configEntry.isCustomValue}" |
| v-show="configEntry.isCustomValue || !hideGlobalConfigValues" |
| > |
| <td class="name"> |
| {{ `${key}${configEntry.value !== null |
| && (configEntry.value instanceof Array |
| || typeof configEntry.value === 'object' |
| ) ? '[]' : ''}` }} |
| </td> |
| <td class="value" v-html="$sanitize(humanReadableValue(configEntry.value))"></td> |
| <td class="description"> |
| <span v-html="$sanitize(configEntry.description)"></span> |
| |
| <span |
| v-if="(configEntry.isCustomValue || configEntry.value === null) |
| && configEntry.defaultValue !== null" |
| > |
| <br v-if="configEntry.description" /> |
| {{ translate('General_Default') }}: |
| <span |
| class="defaultValue" |
| v-html="$sanitize(humanReadableValue(configEntry.defaultValue))" |
| ></span> |
| </span> |
| </td> |
| </tr> |
| </Passthrough> |
| </tbody> |
| </table> |
| </ContentBlock> |
| </template> |
| |
| <script lang="ts"> |
| import { defineComponent } from 'vue'; |
| import { |
| ContentBlock, |
| translate, |
| ContentTable, |
| Passthrough, |
| Matomo, |
| } from 'CoreHome'; |
| |
| interface ConfigFileState { |
| hideGlobalConfigValues: boolean; |
| } |
| |
| export default defineComponent({ |
| props: { |
| allConfigValues: { |
| type: Object, |
| required: true, |
| }, |
| configFilePath: { |
| type: String, |
| required: true, |
| }, |
| }, |
| components: { |
| ContentBlock, |
| Passthrough, |
| }, |
| directives: { |
| ContentTable, |
| }, |
| data(): ConfigFileState { |
| return { |
| hideGlobalConfigValues: false, |
| }; |
| }, |
| methods: { |
| humanReadableValue(value: unknown) { |
| if (value === false) { |
| return 'false'; |
| } |
| |
| if (value === true) { |
| return 'true'; |
| } |
| |
| if (value === null) { |
| return ''; |
| } |
| |
| if (value === '') { |
| return '\'\''; |
| } |
| |
| if (typeof value === 'object' |
| && Object.keys(value as Record<string, unknown>).length === 0 |
| ) { |
| return '[]'; |
| } |
| |
| if (typeof value === 'object' |
| && Object.keys(value as Record<string, unknown>).length > 0 |
| ) { |
| return `<div class="pre">${JSON.stringify(value, null, 4)}</div>`; |
| } |
| |
| return Matomo.helper.htmlEntities(`${value}`); |
| }, |
| onHideUnchanged(event: Event) { |
| if ((event.target as HTMLElement).tagName !== 'A') { |
| return; |
| } |
| |
| this.hideGlobalConfigValues = !this.hideGlobalConfigValues; |
| }, |
| }, |
| computed: { |
| configFileIntro() { |
| return translate( |
| 'Diagnostics_ConfigFileIntroduction', |
| `<code>"${Matomo.helper.htmlEntities(this.configFilePath)}"</code>`, |
| ); |
| }, |
| }, |
| }); |
| </script> |
| |