From a54e16488ce32219bcf811b5da85f06584b293fb Mon Sep 17 00:00:00 2001 From: undergroundwires Date: Sat, 10 Feb 2024 18:50:56 +0100 Subject: [PATCH] Change slogan and refactor project info naming The project's slagon has been updated back to "Privacy is sexy" from "Now you have the choice" for enhanced brand clarity and memorability. This change also reflects the community's preference and aligns with the project's established identity. This commit also refactors naming and structure of project information (metadata) struct to enhance clarity and maintainability in relation to changing the slogan. Key changes include: - Update UI components to display the revised slogan. - Remove period from project slogan in code area for consistency with a explanatory comment for future maintainability. - Refactor header container and class names for clarity. - Standardize project metadata usage in `TheCodeArea.vue` to ensure consistency. - Improve code clarity by renaming `IProjectInformation` to `ProjectDetails` and `ProjectInformation` to `GitHubProjectDetails`. - Organize `ProjectDetails` under a dedicated `Project` directory within the domain layer for better structure. These changes are expected to improve the project's appeal and streamline future maintenance and development efforts. --- README.md | 2 +- package.json | 2 +- src/application/Parser/ApplicationParser.ts | 16 +++-- .../Parser/CategoryCollectionParser.ts | 6 +- ...ationParser.ts => ProjectDetailsParser.ts} | 20 +++--- .../ScriptingDefinition/CodeSubstituter.ts | 8 +-- .../ScriptingDefinition/ICodeSubstituter.ts | 4 +- .../ScriptingDefinitionParser.ts | 8 +-- src/domain/Application.ts | 4 +- src/domain/IApplication.ts | 4 +- .../GitHubProjectDetails.ts} | 8 +-- .../ProjectDetails.ts} | 2 +- .../Save/RunInstructions/RunInstructions.vue | 6 +- .../components/Code/TheCodeArea.vue | 14 ++-- .../Scripts/View/TheScriptsView.vue | 4 +- .../components/Shared/Hooks/UseApplication.ts | 2 +- .../TheFooter/DownloadUrlListItem.vue | 4 +- .../components/TheFooter/PrivacyPolicy.vue | 6 +- .../components/TheFooter/TheFooter.vue | 12 ++-- src/presentation/components/TheHeader.vue | 22 ++++--- .../ManualUpdater/ManualUpdateCoordinator.ts | 8 +-- tests/checks/external-urls/main.spec.ts | 2 +- .../Parser/ApplicationParser.spec.ts | 66 ++++++++++--------- .../Parser/CategoryCollectionParser.spec.ts | 24 +++---- ...r.spec.ts => ProjectDetailsParser.spec.ts} | 60 +++++++++-------- .../CodeSubstituter.spec.ts | 16 ++--- .../ScriptingDefinitionParser.spec.ts | 12 ++-- tests/unit/domain/Application.spec.ts | 30 ++++----- .../GitHubProjectDetails.spec.ts} | 40 +++++------ .../NodeElectronSaveFileDialog.spec.ts | 2 +- .../Shared/Hooks/UseApplication.spec.ts | 18 ++--- tests/unit/shared/Stubs/ApplicationStub.ts | 10 +-- .../Stubs/CategoryCollectionParserStub.ts | 9 ++- .../unit/shared/Stubs/CodeSubstituterStub.ts | 14 ++-- .../shared/Stubs/ProjectDetailsParserStub.ts | 22 +++++++ ...formationStub.ts => ProjectDetailsStub.ts} | 18 ++--- .../Stubs/ProjectInformationParserStub.ts | 22 ------- tests/unit/shared/Stubs/UseApplicationStub.ts | 2 +- 38 files changed, 273 insertions(+), 256 deletions(-) rename src/application/Parser/{ProjectInformationParser.ts => ProjectDetailsParser.ts} (56%) rename src/domain/{ProjectInformation.ts => Project/GitHubProjectDetails.ts} (88%) rename src/domain/{IProjectInformation.ts => Project/ProjectDetails.ts} (91%) rename tests/unit/application/Parser/{ProjectInformationParser.spec.ts => ProjectDetailsParser.spec.ts} (54%) rename tests/unit/domain/{ProjectInformation.spec.ts => Project/GitHubProjectDetails.spec.ts} (86%) create mode 100644 tests/unit/shared/Stubs/ProjectDetailsParserStub.ts rename tests/unit/shared/Stubs/{ProjectInformationStub.ts => ProjectDetailsStub.ts} (59%) delete mode 100644 tests/unit/shared/Stubs/ProjectInformationParserStub.ts diff --git a/README.md b/README.md index 62ab6fcc..c76fff38 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# privacy.sexy — Now you have the choice +# privacy.sexy — Privacy is sexy > Enforce privacy & security best-practices on Windows, macOS and Linux, because privacy is sexy. diff --git a/package.json b/package.json index 582f6191..61ff6ce6 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "privacy.sexy", "version": "0.12.10", "private": true, - "slogan": "Now you have the choice", + "slogan": "Privacy is sexy", "description": "Enforce privacy & security best-practices on Windows, macOS and Linux, because privacy is sexy.", "author": "undergroundwires", "type": "module", diff --git a/src/application/Parser/ApplicationParser.ts b/src/application/Parser/ApplicationParser.ts index 1f6c24fa..ee21efee 100644 --- a/src/application/Parser/ApplicationParser.ts +++ b/src/application/Parser/ApplicationParser.ts @@ -1,11 +1,11 @@ import type { CollectionData } from '@/application/collections/'; import { IApplication } from '@/domain/IApplication'; -import { IProjectInformation } from '@/domain/IProjectInformation'; +import type { ProjectDetails } from '@/domain/Project/ProjectDetails'; import { ICategoryCollection } from '@/domain/ICategoryCollection'; import WindowsData from '@/application/collections/windows.yaml'; import MacOsData from '@/application/collections/macos.yaml'; import LinuxData from '@/application/collections/linux.yaml'; -import { parseProjectInformation } from '@/application/Parser/ProjectInformationParser'; +import { parseProjectDetails } from '@/application/Parser/ProjectDetailsParser'; import { Application } from '@/domain/Application'; import { IAppMetadata } from '@/infrastructure/EnvironmentVariables/IAppMetadata'; import { EnvironmentVariablesFactory } from '@/infrastructure/EnvironmentVariables/EnvironmentVariablesFactory'; @@ -13,19 +13,21 @@ import { parseCategoryCollection } from './CategoryCollectionParser'; export function parseApplication( categoryParser = parseCategoryCollection, - informationParser = parseProjectInformation, + projectDetailsParser = parseProjectDetails, metadata: IAppMetadata = EnvironmentVariablesFactory.Current.instance, collectionsData = PreParsedCollections, ): IApplication { validateCollectionsData(collectionsData); - const information = informationParser(metadata); - const collections = collectionsData.map((collection) => categoryParser(collection, information)); - const app = new Application(information, collections); + const projectDetails = projectDetailsParser(metadata); + const collections = collectionsData.map( + (collection) => categoryParser(collection, projectDetails), + ); + const app = new Application(projectDetails, collections); return app; } export type CategoryCollectionParserType - = (file: CollectionData, info: IProjectInformation) => ICategoryCollection; + = (file: CollectionData, projectDetails: ProjectDetails) => ICategoryCollection; const PreParsedCollections: readonly CollectionData [] = [ WindowsData, MacOsData, LinuxData, diff --git a/src/application/Parser/CategoryCollectionParser.ts b/src/application/Parser/CategoryCollectionParser.ts index 0752dd0a..a61bc290 100644 --- a/src/application/Parser/CategoryCollectionParser.ts +++ b/src/application/Parser/CategoryCollectionParser.ts @@ -2,7 +2,7 @@ import type { CollectionData } from '@/application/collections/'; import { OperatingSystem } from '@/domain/OperatingSystem'; import { ICategoryCollection } from '@/domain/ICategoryCollection'; import { CategoryCollection } from '@/domain/CategoryCollection'; -import { IProjectInformation } from '@/domain/IProjectInformation'; +import type { ProjectDetails } from '@/domain/Project/ProjectDetails'; import { createEnumParser } from '../Common/Enum'; import { parseCategory } from './CategoryParser'; import { CategoryCollectionParseContext } from './Script/CategoryCollectionParseContext'; @@ -10,12 +10,12 @@ import { ScriptingDefinitionParser } from './ScriptingDefinition/ScriptingDefini export function parseCategoryCollection( content: CollectionData, - info: IProjectInformation, + projectDetails: ProjectDetails, osParser = createEnumParser(OperatingSystem), ): ICategoryCollection { validate(content); const scripting = new ScriptingDefinitionParser() - .parse(content.scripting, info); + .parse(content.scripting, projectDetails); const context = new CategoryCollectionParseContext(content.functions, scripting); const categories = content.actions.map((action) => parseCategory(action, context)); const os = osParser.parseEnum(content.os, 'os'); diff --git a/src/application/Parser/ProjectInformationParser.ts b/src/application/Parser/ProjectDetailsParser.ts similarity index 56% rename from src/application/Parser/ProjectInformationParser.ts rename to src/application/Parser/ProjectDetailsParser.ts index 7f573040..5c67bbc1 100644 --- a/src/application/Parser/ProjectInformationParser.ts +++ b/src/application/Parser/ProjectDetailsParser.ts @@ -1,21 +1,21 @@ -import { IProjectInformation } from '@/domain/IProjectInformation'; -import { ProjectInformation } from '@/domain/ProjectInformation'; +import type { ProjectDetails } from '@/domain/Project/ProjectDetails'; +import { GitHubProjectDetails } from '@/domain/Project/GitHubProjectDetails'; import { IAppMetadata } from '@/infrastructure/EnvironmentVariables/IAppMetadata'; import { Version } from '@/domain/Version'; import { EnvironmentVariablesFactory } from '@/infrastructure/EnvironmentVariables/EnvironmentVariablesFactory'; import { ConstructorArguments } from '@/TypeHelpers'; export function -parseProjectInformation( +parseProjectDetails( metadata: IAppMetadata = EnvironmentVariablesFactory.Current.instance, - createProjectInformation: ProjectInformationFactory = ( + createProjectDetails: ProjectDetailsFactory = ( ...args - ) => new ProjectInformation(...args), -): IProjectInformation { + ) => new GitHubProjectDetails(...args), +): ProjectDetails { const version = new Version( metadata.version, ); - return createProjectInformation( + return createProjectDetails( metadata.name, version, metadata.slogan, @@ -24,6 +24,6 @@ parseProjectInformation( ); } -export type ProjectInformationFactory = ( - ...args: ConstructorArguments -) => IProjectInformation; +export type ProjectDetailsFactory = ( + ...args: ConstructorArguments +) => ProjectDetails; diff --git a/src/application/Parser/ScriptingDefinition/CodeSubstituter.ts b/src/application/Parser/ScriptingDefinition/CodeSubstituter.ts index fefadd22..518202c1 100644 --- a/src/application/Parser/ScriptingDefinition/CodeSubstituter.ts +++ b/src/application/Parser/ScriptingDefinition/CodeSubstituter.ts @@ -2,7 +2,7 @@ import { IExpressionsCompiler } from '@/application/Parser/Script/Compiler/Expre import { ParameterSubstitutionParser } from '@/application/Parser/Script/Compiler/Expressions/SyntaxParsers/ParameterSubstitutionParser'; import { CompositeExpressionParser } from '@/application/Parser/Script/Compiler/Expressions/Parser/CompositeExpressionParser'; import { ExpressionsCompiler } from '@/application/Parser/Script/Compiler/Expressions/ExpressionsCompiler'; -import { IProjectInformation } from '@/domain/IProjectInformation'; +import type { ProjectDetails } from '@/domain/Project/ProjectDetails'; import { FunctionCallArgumentCollection } from '@/application/Parser/Script/Compiler/Function/Call/Argument/FunctionCallArgumentCollection'; import { FunctionCallArgument } from '@/application/Parser/Script/Compiler/Function/Call/Argument/FunctionCallArgument'; import { ICodeSubstituter } from './ICodeSubstituter'; @@ -15,13 +15,13 @@ export class CodeSubstituter implements ICodeSubstituter { } - public substitute(code: string, info: IProjectInformation): string { + public substitute(code: string, projectDetails: ProjectDetails): string { if (!code) { throw new Error('missing code'); } const args = new FunctionCallArgumentCollection(); const substitute = (name: string, value: string) => args .addArgument(new FunctionCallArgument(name, value)); - substitute('homepage', info.homepage); - substitute('version', info.version.toString()); + substitute('homepage', projectDetails.homepage); + substitute('version', projectDetails.version.toString()); substitute('date', this.date.toUTCString()); const compiledCode = this.compiler.compileExpressions(code, args); return compiledCode; diff --git a/src/application/Parser/ScriptingDefinition/ICodeSubstituter.ts b/src/application/Parser/ScriptingDefinition/ICodeSubstituter.ts index 989018ea..b3d624e9 100644 --- a/src/application/Parser/ScriptingDefinition/ICodeSubstituter.ts +++ b/src/application/Parser/ScriptingDefinition/ICodeSubstituter.ts @@ -1,5 +1,5 @@ -import { IProjectInformation } from '@/domain/IProjectInformation'; +import type { ProjectDetails } from '@/domain/Project/ProjectDetails'; export interface ICodeSubstituter { - substitute(code: string, info: IProjectInformation): string; + substitute(code: string, projectDetails: ProjectDetails): string; } diff --git a/src/application/Parser/ScriptingDefinition/ScriptingDefinitionParser.ts b/src/application/Parser/ScriptingDefinition/ScriptingDefinitionParser.ts index 2c25d6db..6a9c2bb5 100644 --- a/src/application/Parser/ScriptingDefinition/ScriptingDefinitionParser.ts +++ b/src/application/Parser/ScriptingDefinition/ScriptingDefinitionParser.ts @@ -2,7 +2,7 @@ import type { ScriptingDefinitionData } from '@/application/collections/'; import { IScriptingDefinition } from '@/domain/IScriptingDefinition'; import { ScriptingDefinition } from '@/domain/ScriptingDefinition'; import { ScriptingLanguage } from '@/domain/ScriptingLanguage'; -import { IProjectInformation } from '@/domain/IProjectInformation'; +import type { ProjectDetails } from '@/domain/Project/ProjectDetails'; import { createEnumParser } from '../../Common/Enum'; import { ICodeSubstituter } from './ICodeSubstituter'; import { CodeSubstituter } from './CodeSubstituter'; @@ -16,11 +16,11 @@ export class ScriptingDefinitionParser { public parse( definition: ScriptingDefinitionData, - info: IProjectInformation, + projectDetails: ProjectDetails, ): IScriptingDefinition { const language = this.languageParser.parseEnum(definition.language, 'language'); - const startCode = this.codeSubstituter.substitute(definition.startCode, info); - const endCode = this.codeSubstituter.substitute(definition.endCode, info); + const startCode = this.codeSubstituter.substitute(definition.startCode, projectDetails); + const endCode = this.codeSubstituter.substitute(definition.endCode, projectDetails); return new ScriptingDefinition( language, startCode, diff --git a/src/domain/Application.ts b/src/domain/Application.ts index afbb710c..e6171523 100644 --- a/src/domain/Application.ts +++ b/src/domain/Application.ts @@ -1,11 +1,11 @@ import { IApplication } from './IApplication'; import { ICategoryCollection } from './ICategoryCollection'; -import { IProjectInformation } from './IProjectInformation'; +import { ProjectDetails } from './Project/ProjectDetails'; import { OperatingSystem } from './OperatingSystem'; export class Application implements IApplication { constructor( - public info: IProjectInformation, + public projectDetails: ProjectDetails, public collections: readonly ICategoryCollection[], ) { validateCollections(collections); diff --git a/src/domain/IApplication.ts b/src/domain/IApplication.ts index 4ff92fae..308f9278 100644 --- a/src/domain/IApplication.ts +++ b/src/domain/IApplication.ts @@ -1,9 +1,9 @@ import { ICategoryCollection } from './ICategoryCollection'; -import { IProjectInformation } from './IProjectInformation'; +import { ProjectDetails } from './Project/ProjectDetails'; import { OperatingSystem } from './OperatingSystem'; export interface IApplication { - readonly info: IProjectInformation; + readonly projectDetails: ProjectDetails; readonly collections: readonly ICategoryCollection[]; getSupportedOsList(): OperatingSystem[]; diff --git a/src/domain/ProjectInformation.ts b/src/domain/Project/GitHubProjectDetails.ts similarity index 88% rename from src/domain/ProjectInformation.ts rename to src/domain/Project/GitHubProjectDetails.ts index 380e8840..05dae56e 100644 --- a/src/domain/ProjectInformation.ts +++ b/src/domain/Project/GitHubProjectDetails.ts @@ -1,9 +1,9 @@ import { assertInRange } from '@/application/Common/Enum'; -import { IProjectInformation } from './IProjectInformation'; -import { OperatingSystem } from './OperatingSystem'; -import { Version } from './Version'; +import { OperatingSystem } from '../OperatingSystem'; +import { Version } from '../Version'; +import type { ProjectDetails } from './ProjectDetails'; -export class ProjectInformation implements IProjectInformation { +export class GitHubProjectDetails implements ProjectDetails { public readonly repositoryWebUrl: string; constructor( diff --git a/src/domain/IProjectInformation.ts b/src/domain/Project/ProjectDetails.ts similarity index 91% rename from src/domain/IProjectInformation.ts rename to src/domain/Project/ProjectDetails.ts index 6c0dac7f..cee82e23 100644 --- a/src/domain/IProjectInformation.ts +++ b/src/domain/Project/ProjectDetails.ts @@ -1,7 +1,7 @@ import { OperatingSystem } from '@/domain/OperatingSystem'; import { Version } from '@/domain/Version'; -export interface IProjectInformation { +export interface ProjectDetails { readonly name: string; readonly version: Version; diff --git a/src/presentation/components/Code/CodeButtons/Save/RunInstructions/RunInstructions.vue b/src/presentation/components/Code/CodeButtons/Save/RunInstructions/RunInstructions.vue index 670f2525..7f4c5db3 100644 --- a/src/presentation/components/Code/CodeButtons/Save/RunInstructions/RunInstructions.vue +++ b/src/presentation/components/Code/CodeButtons/Save/RunInstructions/RunInstructions.vue @@ -44,14 +44,14 @@ export default defineComponent({ setup() { const { currentState } = injectKey((keys) => keys.useCollectionState); - const { info } = injectKey((keys) => keys.useApplication); + const { projectDetails } = injectKey((keys) => keys.useApplication); const operatingSystem = computed(() => currentState.value.os); - const appName = computed(() => info.name); + const appName = computed(() => projectDetails.name); const downloadUrl = computed( - () => info.getDownloadUrl(operatingSystem.value), + () => projectDetails.getDownloadUrl(operatingSystem.value), ); const osName = computed( diff --git a/src/presentation/components/Code/TheCodeArea.vue b/src/presentation/components/Code/TheCodeArea.vue index 50d3a588..d7c29474 100644 --- a/src/presentation/components/Code/TheCodeArea.vue +++ b/src/presentation/components/Code/TheCodeArea.vue @@ -24,6 +24,7 @@ import { IReadOnlyCategoryCollectionState } from '@/application/Context/State/IC import { CodeBuilderFactory } from '@/application/Context/State/Code/Generation/CodeBuilderFactory'; import SizeObserver from '@/presentation/components/Shared/SizeObserver.vue'; import { NonCollapsing } from '@/presentation/components/Scripts/View/Cards/NonCollapsingDirective'; +import type { ProjectDetails } from '@/domain/Project/ProjectDetails'; import ace from './ace-importer'; export default defineComponent({ @@ -41,6 +42,7 @@ export default defineComponent({ }, setup(props) { const { onStateChange, currentState } = injectKey((keys) => keys.useCollectionState); + const { projectDetails } = injectKey((keys) => keys.useApplication); const { events } = injectKey((keys) => keys.useAutoUnsubscribedEvents); const editorId = 'codeEditor'; @@ -74,7 +76,7 @@ export default defineComponent({ } function updateCode(code: string, language: ScriptingLanguage) { - const innerCode = code || getDefaultCode(language); + const innerCode = code || getDefaultCode(language, projectDetails); editor?.setValue(innerCode, 1); } @@ -171,10 +173,14 @@ function getLanguage(language: ScriptingLanguage) { } } -function getDefaultCode(language: ScriptingLanguage): string { +function getDefaultCode(language: ScriptingLanguage, project: ProjectDetails): string { return new CodeBuilderFactory() .create(language) - .appendCommentLine('privacy.sexy — Now you have the choice.') + .appendCommentLine(`${project.name} — ${project.slogan}`) + /* + Keep the slogan without a period for impact and continuity. + Slogans should be punchy and memorable, not punctuated like full sentences. + */ .appendCommentLine(' 🔐 Enforce privacy & security best-practices on Windows, macOS and Linux.') .appendLine() .appendCommentLine('-- 🤔 How to use') @@ -183,7 +189,7 @@ function getDefaultCode(language: ScriptingLanguage): string { .appendCommentLine(' 📙 After you choose any tweak, you can download or copy to execute your script.') .appendCommentLine(' 📙 Come back regularly to apply latest version for stronger privacy and security.') .appendLine() - .appendCommentLine('-- 🧐 Why privacy.sexy') + .appendCommentLine(`-- 🧐 Why ${project.name}`) .appendCommentLine(' ✔️ Rich tweak pool to harden security & privacy of the OS and other software on it.') .appendCommentLine(' ✔️ No need to run any compiled software on your system, just run the generated scripts.') .appendCommentLine(' ✔️ Have full visibility into what the tweaks do as you enable them.') diff --git a/src/presentation/components/Scripts/View/TheScriptsView.vue b/src/presentation/components/Scripts/View/TheScriptsView.vue index cbd0ae44..642a202d 100644 --- a/src/presentation/components/Scripts/View/TheScriptsView.vue +++ b/src/presentation/components/Scripts/View/TheScriptsView.vue @@ -62,9 +62,9 @@ export default defineComponent({ setup() { const { modifyCurrentState, onStateChange } = injectKey((keys) => keys.useCollectionState); const { events } = injectKey((keys) => keys.useAutoUnsubscribedEvents); - const { info } = injectKey((keys) => keys.useApplication); + const { projectDetails } = injectKey((keys) => keys.useApplication); - const repositoryUrl = computed(() => info.repositoryWebUrl); + const repositoryUrl = computed(() => projectDetails.repositoryWebUrl); const searchQuery = ref(); const isSearching = computed(() => Boolean(searchQuery.value)); const searchHasMatches = ref(false); diff --git a/src/presentation/components/Shared/Hooks/UseApplication.ts b/src/presentation/components/Shared/Hooks/UseApplication.ts index 5c96c16e..55be7eb1 100644 --- a/src/presentation/components/Shared/Hooks/UseApplication.ts +++ b/src/presentation/components/Shared/Hooks/UseApplication.ts @@ -3,6 +3,6 @@ import { IApplication } from '@/domain/IApplication'; export function useApplication(application: IApplication) { return { application, - info: application.info, + projectDetails: application.projectDetails, }; } diff --git a/src/presentation/components/TheFooter/DownloadUrlListItem.vue b/src/presentation/components/TheFooter/DownloadUrlListItem.vue index 0bbaa4e0..5932c75e 100644 --- a/src/presentation/components/TheFooter/DownloadUrlListItem.vue +++ b/src/presentation/components/TheFooter/DownloadUrlListItem.vue @@ -26,7 +26,7 @@ export default defineComponent({ }, }, setup(props) { - const { info } = injectKey((keys) => keys.useApplication); + const { projectDetails } = injectKey((keys) => keys.useApplication); const { os: currentOs } = injectKey((keys) => keys.useRuntimeEnvironment); const isCurrentOs = computed(() => { @@ -42,7 +42,7 @@ export default defineComponent({ }); const downloadUrl = computed(() => { - return info.getDownloadUrl(props.operatingSystem); + return projectDetails.getDownloadUrl(props.operatingSystem); }); return { diff --git a/src/presentation/components/TheFooter/PrivacyPolicy.vue b/src/presentation/components/TheFooter/PrivacyPolicy.vue index 1d39fa8e..aaf1d3ee 100644 --- a/src/presentation/components/TheFooter/PrivacyPolicy.vue +++ b/src/presentation/components/TheFooter/PrivacyPolicy.vue @@ -59,11 +59,11 @@ import { injectKey } from '@/presentation/injectionSymbols'; export default defineComponent({ setup() { - const { info } = injectKey((keys) => keys.useApplication); + const { projectDetails } = injectKey((keys) => keys.useApplication); const { isRunningAsDesktopApplication } = injectKey((keys) => keys.useRuntimeEnvironment); - const repositoryUrl = computed(() => info.repositoryUrl); - const feedbackUrl = computed(() => info.feedbackUrl); + const repositoryUrl = computed(() => projectDetails.repositoryUrl); + const feedbackUrl = computed(() => projectDetails.feedbackUrl); return { repositoryUrl, diff --git a/src/presentation/components/TheFooter/TheFooter.vue b/src/presentation/components/TheFooter/TheFooter.vue index 899cba4c..802c217e 100644 --- a/src/presentation/components/TheFooter/TheFooter.vue +++ b/src/presentation/components/TheFooter/TheFooter.vue @@ -67,20 +67,20 @@ export default defineComponent({ FlatButton, }, setup() { - const { info } = injectKey((keys) => keys.useApplication); + const { projectDetails } = injectKey((keys) => keys.useApplication); const { isRunningAsDesktopApplication } = injectKey((keys) => keys.useRuntimeEnvironment); const isPrivacyDialogVisible = ref(false); - const version = computed(() => info.version.toString()); + const version = computed(() => projectDetails.version.toString()); - const homepageUrl = computed(() => info.homepage); + const homepageUrl = computed(() => projectDetails.homepage); - const repositoryUrl = computed(() => info.repositoryWebUrl); + const repositoryUrl = computed(() => projectDetails.repositoryWebUrl); - const releaseUrl = computed(() => info.releaseUrl); + const releaseUrl = computed(() => projectDetails.releaseUrl); - const feedbackUrl = computed(() => info.feedbackUrl); + const feedbackUrl = computed(() => projectDetails.feedbackUrl); function showPrivacyDialog() { isPrivacyDialogVisible.value = true; diff --git a/src/presentation/components/TheHeader.vue b/src/presentation/components/TheHeader.vue index 6a2ce26b..be6e4b35 100644 --- a/src/presentation/components/TheHeader.vue +++ b/src/presentation/components/TheHeader.vue @@ -1,9 +1,13 @@