add contributors to the about page

This commit is contained in:
MaysWind
2025-12-30 00:28:20 +08:00
parent 2ada077b38
commit 3313ccf051
7 changed files with 241 additions and 9 deletions
+59
View File
@@ -0,0 +1,59 @@
{
"code": [
"jiangshengwu",
"vigdail",
"f97",
"Miguelonlonlon",
"seb26",
"nktlitvinenko",
"lvdou-bing"
],
"translators": {
"de": [
"chrgm"
],
"en": [],
"es": [
"Miguelonlonlon",
"abrugues"
],
"fr": [
"brieucdlf"
],
"it": [
"waron97"
],
"ja": [
"tkymmm"
],
"kn": [
"Darshanbm05"
],
"ko": [
"overworks"
],
"nl": [
"automagics"
],
"pt-BR": [
"thecodergus"
],
"ru": [
"artegoser"
],
"th": [
"natthavat28"
],
"tr": [
"aydnykn"
],
"uk": [
"nktlitvinenko"
],
"vi": [
"f97"
],
"zh-Hans": [],
"zh-Hant": []
}
}
+6
View File
@@ -3,8 +3,14 @@ declare const __EZBOOKKEEPING_VERSION__: string;
declare const __EZBOOKKEEPING_BUILD_UNIX_TIME__: string;
declare const __EZBOOKKEEPING_BUILD_COMMIT_HASH__: string;
declare const __EZBOOKKEEPING_LICENSE__: string;
declare const __EZBOOKKEEPING_CONTRIBUTORS__: ContributorInfo;
declare const __EZBOOKKEEPING_THIRD_PARTY_LICENSES__: LicenseInfo[];
declare interface ContributorInfo {
code: string[];
translators: Record<string, string[]>;
}
declare interface LicenseInfo {
name: string;
copyright?: string;
+3
View File
@@ -0,0 +1,3 @@
export function getContributors(): ContributorInfo {
return __EZBOOKKEEPING_CONTRIBUTORS__ || {};
}
+3
View File
@@ -12,6 +12,7 @@ import type { LatestExchangeRateResponse } from '@/models/exchange_rate.ts';
import { parseDateTimeFromUnixTime } from '@/lib/datetime.ts';
import { getMapProvider } from '@/lib/server_settings.ts';
import { getMapWebsite } from '@/lib/map/index.ts';
import { getContributors } from '@/lib/contributors.ts';
import { getLicense, getThirdPartyLicenses } from '@/lib/licenses.ts';
import { formatDisplayVersion, getClientDisplayVersion, getClientBuildTime } from '@/lib/version.ts';
import { clearBrowserCaches } from '@/lib/ui/common.ts';
@@ -55,6 +56,7 @@ export function useAboutPageBase() {
});
const mapProviderWebsite = computed<string>(() => getMapWebsite());
const contributors = computed<ContributorInfo>(() => getContributors());
const licenseLines = computed<string[]>(() => getLicense().replace(/\r/g, '').split('\n'));
const thirdPartyLicenses = computed<LicenseInfo[]>(() => getThirdPartyLicenses());
@@ -83,6 +85,7 @@ export function useAboutPageBase() {
isUserCustomExchangeRates,
mapProviderName,
mapProviderWebsite,
contributors,
licenseLines,
thirdPartyLicenses,
// functions
+86 -5
View File
@@ -110,12 +110,69 @@
{{ line }}
</span>
</p>
<v-divider/><br/>
<v-divider/>
<br/>
<p>
<span>ezBookkeeping also contains additional third party software and illustration.</span><br/>
<span>All the third party software/illustration included or linked is redistributed under the terms and conditions of their original licenses.</span>
<span>ezBookkeeping's codebase and localization translation rely on contributions from the community. The following people have contributed to ezBookkeeping:</span>
</p>
<div>
<strong>Project Maintainer</strong>
<div class="mt-2">
<a target="_blank" href="https://github.com/mayswind">@mayswind</a>
</div>
</div>
<p class="mt-4">
<strong>Code Contributors</strong>
</p>
<table class="contributors-table">
<thead>
<tr>
<th>Contributor</th>
</tr>
</thead>
<tbody>
<tr :key="index" v-for="(contributor, index) in contributors.code">
<td>
<a target="_blank" :href="`https://github.com/${contributor}`">
@{{ contributor }}
</a>
</td>
</tr>
</tbody>
</table>
<p class="mt-4">
<strong>Translation Contributors</strong>
</p>
<table class="contributors-table">
<thead>
<tr>
<th>Tag</th>
<th>Language</th>
<th>Contributors</th>
</tr>
</thead>
<tbody>
<tr :key="languageTag"
v-for="(languageContributors, languageTag) in contributors.translators"
v-show="!!getLanguageInfo(languageTag)?.displayName">
<td>{{ languageTag }}</td>
<td>{{ getLanguageInfo(languageTag)?.displayName }}</td>
<td>
<template :key="contributor" v-for="(contributor, index) in languageContributors">
<a target="_blank" :href="`https://github.com/${contributor}`">
@{{ contributor }}
</a>
<span v-if="index < languageContributors.length - 1">, </span>
</template>
<span v-if="!languageContributors || languageContributors.length < 1">/</span>
</td>
</tr>
</tbody>
</table>
<p class="mt-4 mb-4">
<span>ezBookkeeping also contains additional third party software and illustration.</span><br/>
<span>All the third party software / illustration included or linked is redistributed under the terms and conditions of their original licenses.</span>
</p>
<p></p>
<p :key="license.name" v-for="license in thirdPartyLicenses">
<strong>{{ license.name }}</strong>
<br v-if="license.copyright"/><span v-if="license.copyright">{{ license.copyright }}</span>
@@ -139,7 +196,7 @@ import {
mdiWebRefresh
} from '@mdi/js';
const { tt } = useI18n();
const { tt, getLanguageInfo } = useI18n();
const {
clientVersion,
clientVersionMatchServerVersion,
@@ -148,6 +205,7 @@ const {
isUserCustomExchangeRates,
mapProviderName,
mapProviderWebsite,
contributors,
licenseLines,
thirdPartyLicenses,
refreshBrowserCache,
@@ -156,3 +214,26 @@ const {
init();
</script>
<style>
.contributors-table {
border-collapse: collapse;
> thead > tr {
> th:not(:first-child) {
padding-inline-start: 10px;
}
> th:not(:last-child) {
padding-inline-end: 10px;
}
}
> thead > tr > th,
> tbody > tr > td {
padding: 4px 8px;
border: 1px solid rgba(var(--v-border-color), var(--v-border-opacity));
text-align: start;
}
}
</style>
+82 -4
View File
@@ -49,10 +49,66 @@
</p>
<hr/>
<p>
<span>ezBookkeeping also contains additional third party software and illustration.</span><br/>
<span>All the third party software/illustration included or linked is redistributed under the terms and conditions of their original licenses.</span>
<span>ezBookkeeping's codebase and localization translation rely on contributions from the community. The following people have contributed to ezBookkeeping:</span>
</p>
<div>
<strong>Project Maintainer</strong>
<div class="margin-top-half">
<f7-link target="_blank" @click="openExternalUrl('https://github.com/mayswind')">@mayswind</f7-link>
</div>
</div>
<p class="margin-top">
<strong>Code Contributors</strong>
</p>
<table class="contributors-table">
<thead>
<tr>
<th>Contributor</th>
</tr>
</thead>
<tbody>
<tr :key="index" v-for="(contributor, index) in contributors.code">
<td>
<f7-link target="_blank" @click="openExternalUrl(`https://github.com/${contributor}`)">
@{{ contributor }}
</f7-link>
</td>
</tr>
</tbody>
</table>
<p class="margin-top">
<strong>Translation Contributors</strong>
</p>
<table class="contributors-table">
<thead>
<tr>
<th>Tag</th>
<th>Language</th>
<th>Contributors</th>
</tr>
</thead>
<tbody>
<tr :key="languageTag"
v-for="(languageContributors, languageTag) in contributors.translators"
v-show="!!getLanguageInfo(languageTag)?.displayName">
<td>{{ languageTag }}</td>
<td>{{ getLanguageInfo(languageTag)?.displayName }}</td>
<td>
<template :key="contributor" v-for="(contributor, index) in languageContributors">
<f7-link target="_blank" @click="openExternalUrl(`https://github.com/${contributor}`)">
@{{ contributor }}
</f7-link>
<span v-if="index < languageContributors.length - 1">, </span>
</template>
<span v-if="!languageContributors || languageContributors.length < 1">/</span>
</td>
</tr>
</tbody>
</table>
<p class="margin-top margin-bottom">
<span>ezBookkeeping also contains additional third party software and illustration.</span><br/>
<span>All the third party software / illustration included or linked is redistributed under the terms and conditions of their original licenses.</span>
</p>
<p></p>
<p :key="license.name" v-for="license in thirdPartyLicenses">
<strong>{{ license.name }}</strong>
<br v-if="license.copyright"/><span v-if="license.copyright">{{ license.copyright }}</span>
@@ -81,7 +137,7 @@ import { useI18n } from '@/locales/helpers.ts';
import { useI18nUIComponents } from '@/lib/ui/mobile.ts';
import { useAboutPageBase } from '@/views/base/AboutPageBase.ts';
const { tt } = useI18n();
const { tt, getLanguageInfo } = useI18n();
const { showAlert, openExternalUrl } = useI18nUIComponents();
const {
clientVersion,
@@ -92,6 +148,7 @@ const {
isUserCustomExchangeRates,
mapProviderName,
mapProviderWebsite,
contributors,
licenseLines,
thirdPartyLicenses,
refreshBrowserCache,
@@ -128,4 +185,25 @@ init();
.license-content {
font-size: var(--ebk-license-content-font-size);
}
.contributors-table {
border-collapse: collapse;
> thead > tr {
> th:not(:first-child) {
padding-inline-start: 10px;
}
> th:not(:last-child) {
padding-inline-end: 10px;
}
}
> thead > tr > th,
> tbody > tr > td {
padding: 4px 8px;
border: 1px solid var(--f7-list-item-border-color);
text-align: start;
}
}
</style>
+2
View File
@@ -9,6 +9,7 @@ import Checker from 'vite-plugin-checker';
import git from 'git-rev-sync';
import packageFile from './package.json';
import contributorsFile from './contributors.json';
import thirdPartyLicenseFile from './third-party-dependencies.json';
const SRC_DIR = resolve(__dirname, './src');
@@ -75,6 +76,7 @@ export default defineConfig(() => {
__EZBOOKKEEPING_VERSION__: JSON.stringify(packageFile.version),
__EZBOOKKEEPING_BUILD_UNIX_TIME__: JSON.stringify(buildUnixTime),
__EZBOOKKEEPING_BUILD_COMMIT_HASH__: JSON.stringify(git.short()),
__EZBOOKKEEPING_CONTRIBUTORS__: JSON.stringify(contributorsFile),
__EZBOOKKEEPING_LICENSE__: JSON.stringify(licenseContent),
__EZBOOKKEEPING_THIRD_PARTY_LICENSES__: JSON.stringify(thirdPartyLicenseFile)
},