mirror of
https://github.com/woodpecker-ci/woodpecker.git
synced 2025-07-12 22:59:52 +00:00
Merge branch 'origin/main' into 'next-release/main'
This commit is contained in:
commit
0790ac8411
@ -291,6 +291,7 @@
|
||||
},
|
||||
"admin": {
|
||||
"settings": {
|
||||
"settings": "Admin Settings",
|
||||
"not_allowed": "You are not allowed to access server settings",
|
||||
"secrets": {
|
||||
"desc": "Global secrets can be used in the pipelines of all repositories.",
|
||||
|
@ -192,7 +192,7 @@
|
||||
"branches": "Atzari",
|
||||
"deploy_pipeline": {
|
||||
"enter_target": "Mērķa uzstādīšanas vide",
|
||||
"title": "Iniciēt uzstādīšanas notikumu šim konvejerdarbam #{pipelineId}",
|
||||
"title": "Iniciēt uzstādīšanu šim konvejerdarbam #{pipelineId}",
|
||||
"trigger": "Uzstādīt",
|
||||
"variables": {
|
||||
"add": "Pievienot mainīgo",
|
||||
@ -364,10 +364,10 @@
|
||||
"cancel": "Atcelt iepriekšējos konvejerdarbus",
|
||||
"desc": "Iespējojot šo pazīmi, tiks atcelti visi iepriekšējie konvejerdarbi, kuriem sakrīt notikums un konteksts."
|
||||
},
|
||||
"general": "Pamata",
|
||||
"general": "Projekts",
|
||||
"netrc_only_trusted": {
|
||||
"desc": "Atļaut izmantot Git autorizāciju tikai uzticamiem konteineriem (ieteicams).",
|
||||
"netrc_only_trusted": "Atļaut izmantot Git autorizāciju tikai uzticamiem konteineriem"
|
||||
"netrc_only_trusted": "Papildus uzticamie klonēšanas spraudņiem"
|
||||
},
|
||||
"pipeline_path": {
|
||||
"default": "Pēc noklusējuma: .woodpecker/*.{'{yaml,yml}'} -> .woodpecker.yaml -> .woodpecker.yml",
|
||||
@ -381,7 +381,7 @@
|
||||
"protected": "Aizsargāts"
|
||||
},
|
||||
"save": "Saglabāt iestatījumus",
|
||||
"success": "Repozitorija iestatījumi tika saglabāti",
|
||||
"success": "Projekta iestatījumi tika saglabāti",
|
||||
"timeout": {
|
||||
"minutes": "minūtes",
|
||||
"timeout": "Noildze"
|
||||
@ -406,7 +406,7 @@
|
||||
"visibility": "Projekta redzamība"
|
||||
},
|
||||
"allow_deploy": {
|
||||
"desc": "Atļaut publicēšanu no veiksmīgiem konvejerdarbiem. Lietot tikai ja Jūs uzticaties visiem lietotājiem ar push permisijām.",
|
||||
"desc": "Atļaut publicēšanu no veiksmīgiem konvejerdarbiem. Lietojiet tikai, ja uzticaties visiem lietotājiem ar iesūtīšanas tiesībām.",
|
||||
"allow": "Atļaut publicēšanu"
|
||||
}
|
||||
},
|
||||
@ -456,10 +456,35 @@
|
||||
},
|
||||
"settings": "Iestatījumi"
|
||||
},
|
||||
"user_none": "Šai organizācijai/lietotājam pagaidām nav neviena projekta."
|
||||
"user_none": "Šai organizācijai/lietotājam pagaidām nav neviena projekta.",
|
||||
"visibility": {
|
||||
"visibility": "Projekta redzamība",
|
||||
"public": {
|
||||
"public": "Publisks",
|
||||
"desc": "Jebkurš var redzēt šo projektu bez autentifikācijas."
|
||||
},
|
||||
"private": {
|
||||
"private": "Privāts",
|
||||
"desc": "Tikai repozitorija dalībnieki var redzēt šo projektu."
|
||||
},
|
||||
"internal": {
|
||||
"internal": "Iekšējs",
|
||||
"desc": "Visi autentificētie lietotāji šajā serverī var redzēt šo projektu."
|
||||
}
|
||||
}
|
||||
},
|
||||
"repos": "Repozitorijas",
|
||||
"repositories": "Repozitoriji",
|
||||
"repositories": {
|
||||
"all": {
|
||||
"desc": "Repozitoriji sakārtoti pēc pēdējā konvejerdarba izveides laika",
|
||||
"title": "Visi repozitoriji"
|
||||
},
|
||||
"title": "Repozitoriji",
|
||||
"last": {
|
||||
"title": "Pēdējo reizi aplūkots",
|
||||
"desc": "Visbiežāk skatītie repozitoriji sakārtoti pēc pēdējā aplūkošanas laika"
|
||||
}
|
||||
},
|
||||
"running_version": "Tiek izmantota Woodpecker {0}",
|
||||
"search": "Meklēt…",
|
||||
"time": {
|
||||
@ -469,7 +494,8 @@
|
||||
"not_started": "nav uzsākts",
|
||||
"sec_short": "sek.",
|
||||
"template": "YYYY. [gada] D. MMMM, HH:mm z",
|
||||
"weeks_short": "ned."
|
||||
"weeks_short": "ned.",
|
||||
"just_now": "tikko"
|
||||
},
|
||||
"unknown_error": "Notika neparedzēta kļūda",
|
||||
"update_woodpecker": "Lūdzu atjauniniet Woodpecker instanci uz {0}",
|
||||
|
7
web/src/compositions/useWPTitle.ts
Normal file
7
web/src/compositions/useWPTitle.ts
Normal file
@ -0,0 +1,7 @@
|
||||
import { useTitle } from '@vueuse/core';
|
||||
import type { Ref } from 'vue';
|
||||
import { computed } from 'vue';
|
||||
|
||||
export function useWPTitle(elements: Ref<string[]>) {
|
||||
useTitle(computed(() => `${elements.value.join(' · ')} · Woodpecker`));
|
||||
}
|
@ -38,7 +38,7 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { onMounted, ref } from 'vue';
|
||||
import { computed, onMounted, ref } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { useRoute, useRouter } from 'vue-router';
|
||||
|
||||
@ -47,6 +47,7 @@ import Button from '~/components/atomic/Button.vue';
|
||||
import Error from '~/components/atomic/Error.vue';
|
||||
import useApiClient from '~/compositions/useApiClient';
|
||||
import useAuthentication from '~/compositions/useAuthentication';
|
||||
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||
import type { Forge } from '~/lib/api/types';
|
||||
|
||||
const route = useRoute();
|
||||
@ -97,4 +98,6 @@ onMounted(async () => {
|
||||
errorMessage.value = authErrorMessages[error] ?? error;
|
||||
}
|
||||
});
|
||||
|
||||
useWPTitle(computed(() => [i18n.t('login')]));
|
||||
</script>
|
||||
|
@ -32,7 +32,7 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { onMounted, ref } from 'vue';
|
||||
import { computed, onMounted, ref } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { useRouter } from 'vue-router';
|
||||
|
||||
@ -46,6 +46,7 @@ import { useAsyncAction } from '~/compositions/useAsyncAction';
|
||||
import useNotifications from '~/compositions/useNotifications';
|
||||
import { useRepoSearch } from '~/compositions/useRepoSearch';
|
||||
import { useRouteBack } from '~/compositions/useRouteBack';
|
||||
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||
import type { Repo } from '~/lib/api/types';
|
||||
|
||||
const router = useRouter();
|
||||
@ -74,4 +75,6 @@ const { doSubmit: activateRepo, isLoading: isActivatingRepo } = useAsyncAction(a
|
||||
});
|
||||
|
||||
const goBack = useRouteBack({ name: 'repos' });
|
||||
|
||||
useWPTitle(computed(() => [i18n.t('repo.add')]));
|
||||
</script>
|
||||
|
@ -42,12 +42,14 @@
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { computed, onMounted, ref } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
|
||||
import Button from '~/components/atomic/Button.vue';
|
||||
import Scaffold from '~/components/layout/scaffold/Scaffold.vue';
|
||||
import RepoItem from '~/components/repo/RepoItem.vue';
|
||||
import useRepos from '~/compositions/useRepos';
|
||||
import { useRepoSearch } from '~/compositions/useRepoSearch';
|
||||
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||
import { useRepoStore } from '~/store/repos';
|
||||
|
||||
const repoStore = useRepoStore();
|
||||
@ -64,6 +66,9 @@ const reposLastActivity = computed(() => sortReposByLastActivity(searchedRepos.v
|
||||
onMounted(async () => {
|
||||
await repoStore.loadRepos();
|
||||
});
|
||||
|
||||
const { t } = useI18n();
|
||||
useWPTitle(computed(() => [t('repositories.title')]));
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
@ -10,8 +10,12 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { computed } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
|
||||
import AgentManager from '~/components/agent/AgentManager.vue';
|
||||
import useApiClient from '~/compositions/useApiClient';
|
||||
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||
import type { Agent } from '~/lib/api/types';
|
||||
|
||||
const apiClient = useApiClient();
|
||||
@ -20,4 +24,7 @@ const loadAgents = (page: number) => apiClient.getAgents({ page });
|
||||
const createAgent = (agent: Partial<Agent>) => apiClient.createAgent(agent);
|
||||
const updateAgent = (agent: Agent) => apiClient.updateAgent(agent);
|
||||
const deleteAgent = (agent: Agent) => apiClient.deleteAgent(agent);
|
||||
|
||||
const { t } = useI18n();
|
||||
useWPTitle(computed(() => [t('admin.settings.agents.agents'), t('admin.settings.settings')]));
|
||||
</script>
|
||||
|
@ -28,10 +28,17 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { computed } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
|
||||
import WoodpeckerLogo from '~/assets/logo.svg?component';
|
||||
import Error from '~/components/atomic/Error.vue';
|
||||
import Settings from '~/components/layout/Settings.vue';
|
||||
import { useVersion } from '~/compositions/useVersion';
|
||||
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||
|
||||
const version = useVersion();
|
||||
|
||||
const { t } = useI18n();
|
||||
useWPTitle(computed(() => [t('info'), t('admin.settings.settings')]));
|
||||
</script>
|
||||
|
@ -34,6 +34,7 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { computed } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
|
||||
import IconButton from '~/components/atomic/IconButton.vue';
|
||||
@ -43,6 +44,7 @@ import useApiClient from '~/compositions/useApiClient';
|
||||
import { useAsyncAction } from '~/compositions/useAsyncAction';
|
||||
import useNotifications from '~/compositions/useNotifications';
|
||||
import { usePagination } from '~/compositions/usePaginate';
|
||||
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||
import type { Org } from '~/lib/api/types';
|
||||
|
||||
const apiClient = useApiClient();
|
||||
@ -65,4 +67,6 @@ const { doSubmit: deleteOrg, isLoading: isDeleting } = useAsyncAction(async (_or
|
||||
notifications.notify({ title: t('admin.settings.orgs.deleted'), type: 'success' });
|
||||
resetPage();
|
||||
});
|
||||
|
||||
useWPTitle(computed(() => [t('admin.settings.orgs.orgs'), t('admin.settings.settings')]));
|
||||
</script>
|
||||
|
@ -93,6 +93,7 @@ import ListItem from '~/components/atomic/ListItem.vue';
|
||||
import Settings from '~/components/layout/Settings.vue';
|
||||
import useApiClient from '~/compositions/useApiClient';
|
||||
import useNotifications from '~/compositions/useNotifications';
|
||||
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||
import type { QueueInfo } from '~/lib/api/types';
|
||||
|
||||
const apiClient = useApiClient();
|
||||
@ -159,4 +160,6 @@ onBeforeUnmount(() => {
|
||||
window.clearInterval(reloadInterval.value);
|
||||
}
|
||||
});
|
||||
|
||||
useWPTitle(computed(() => [t('admin.settings.queue.queue'), t('admin.settings.settings')]));
|
||||
</script>
|
||||
|
@ -50,6 +50,7 @@ import useApiClient from '~/compositions/useApiClient';
|
||||
import { useAsyncAction } from '~/compositions/useAsyncAction';
|
||||
import useNotifications from '~/compositions/useNotifications';
|
||||
import { usePagination } from '~/compositions/usePaginate';
|
||||
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||
import type { Registry } from '~/lib/api/types';
|
||||
|
||||
const emptyRegistry: Partial<Registry> = {
|
||||
@ -102,4 +103,6 @@ function editRegistry(registry: Registry) {
|
||||
function showAddRegistry() {
|
||||
selectedRegistry.value = cloneDeep(emptyRegistry);
|
||||
}
|
||||
|
||||
useWPTitle(computed(() => [i18n.t('registries.registries'), i18n.t('admin.settings.settings')]));
|
||||
</script>
|
||||
|
@ -43,6 +43,7 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { computed } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
|
||||
import Badge from '~/components/atomic/Badge.vue';
|
||||
@ -54,6 +55,7 @@ import useApiClient from '~/compositions/useApiClient';
|
||||
import { useAsyncAction } from '~/compositions/useAsyncAction';
|
||||
import useNotifications from '~/compositions/useNotifications';
|
||||
import { usePagination } from '~/compositions/usePaginate';
|
||||
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||
import type { Repo } from '~/lib/api/types';
|
||||
|
||||
const apiClient = useApiClient();
|
||||
@ -70,4 +72,6 @@ const { doSubmit: repairRepos, isLoading: isRepairingRepos } = useAsyncAction(as
|
||||
await apiClient.repairAllRepos();
|
||||
notifications.notify({ title: i18n.t('admin.settings.repos.repair.success'), type: 'success' });
|
||||
});
|
||||
|
||||
useWPTitle(computed(() => [i18n.t('admin.settings.repos.repos'), i18n.t('admin.settings.settings')]));
|
||||
</script>
|
||||
|
@ -45,6 +45,7 @@ import useApiClient from '~/compositions/useApiClient';
|
||||
import { useAsyncAction } from '~/compositions/useAsyncAction';
|
||||
import useNotifications from '~/compositions/useNotifications';
|
||||
import { usePagination } from '~/compositions/usePaginate';
|
||||
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||
import type { Secret } from '~/lib/api/types';
|
||||
import { WebhookEvents } from '~/lib/api/types';
|
||||
|
||||
@ -99,4 +100,6 @@ function editSecret(secret: Secret) {
|
||||
function showAddSecret() {
|
||||
selectedSecret.value = cloneDeep(emptySecret);
|
||||
}
|
||||
|
||||
useWPTitle(computed(() => [i18n.t('secrets.secrets'), i18n.t('admin.settings.settings')]));
|
||||
</script>
|
||||
|
@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<Scaffold enable-tabs>
|
||||
<template #title>
|
||||
{{ $t('settings') }}
|
||||
{{ $t('admin.settings.settings') }}
|
||||
</template>
|
||||
<Tab icon="info" :to="{ name: 'admin-settings' }" :title="$t('info')" />
|
||||
<Tab icon="secret" :to="{ name: 'admin-settings-secrets' }" :title="$t('secrets.secrets')" />
|
||||
|
@ -98,6 +98,7 @@ import useApiClient from '~/compositions/useApiClient';
|
||||
import { useAsyncAction } from '~/compositions/useAsyncAction';
|
||||
import useNotifications from '~/compositions/useNotifications';
|
||||
import { usePagination } from '~/compositions/usePaginate';
|
||||
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||
import type { User } from '~/lib/api/types';
|
||||
|
||||
const apiClient = useApiClient();
|
||||
@ -153,4 +154,6 @@ function editUser(user: User) {
|
||||
function showAddUser() {
|
||||
selectedUser.value = cloneDeep({ login: '' });
|
||||
}
|
||||
|
||||
useWPTitle(computed(() => [t('admin.settings.users.users'), t('admin.settings.settings')]));
|
||||
</script>
|
||||
|
@ -24,6 +24,7 @@
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { computed, onMounted, ref } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
|
||||
import IconButton from '~/components/atomic/IconButton.vue';
|
||||
import Scaffold from '~/components/layout/scaffold/Scaffold.vue';
|
||||
@ -31,6 +32,7 @@ import RepoItem from '~/components/repo/RepoItem.vue';
|
||||
import { requiredInject } from '~/compositions/useInjectProvide';
|
||||
import useRepos from '~/compositions/useRepos';
|
||||
import { useRepoSearch } from '~/compositions/useRepoSearch';
|
||||
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||
import { useRepoStore } from '~/store/repos';
|
||||
|
||||
const repoStore = useRepoStore();
|
||||
@ -51,4 +53,7 @@ const reposLastActivity = computed(() => sortReposByLastActivity(searchedRepos.v
|
||||
onMounted(async () => {
|
||||
await repoStore.loadRepos(); // TODO: load only org repos
|
||||
});
|
||||
|
||||
const { t } = useI18n();
|
||||
useWPTitle(computed(() => [t('repositories.title'), org.value.name]));
|
||||
</script>
|
||||
|
@ -9,9 +9,13 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { computed } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
|
||||
import AgentManager from '~/components/agent/AgentManager.vue';
|
||||
import useApiClient from '~/compositions/useApiClient';
|
||||
import { requiredInject } from '~/compositions/useInjectProvide';
|
||||
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||
import type { Agent } from '~/lib/api/types';
|
||||
|
||||
const apiClient = useApiClient();
|
||||
@ -21,4 +25,7 @@ const loadAgents = (page: number) => apiClient.getOrgAgents(org.value.id, { page
|
||||
const createAgent = (agent: Partial<Agent>) => apiClient.createOrgAgent(org.value.id, agent);
|
||||
const updateAgent = (agent: Agent) => apiClient.updateOrgAgent(org.value.id, agent.id, agent);
|
||||
const deleteAgent = (agent: Agent) => apiClient.deleteOrgAgent(org.value.id, agent.id);
|
||||
|
||||
const { t } = useI18n();
|
||||
useWPTitle(computed(() => [t('admin.settings.agents.agents'), org.value.name]));
|
||||
</script>
|
||||
|
@ -46,6 +46,7 @@ import { useAsyncAction } from '~/compositions/useAsyncAction';
|
||||
import { requiredInject } from '~/compositions/useInjectProvide';
|
||||
import useNotifications from '~/compositions/useNotifications';
|
||||
import { usePagination } from '~/compositions/usePaginate';
|
||||
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||
import type { Registry } from '~/lib/api/types';
|
||||
|
||||
const emptyRegistry: Partial<Registry> = {
|
||||
@ -99,4 +100,6 @@ function editRegistry(registry: Registry) {
|
||||
function showAddRegistry() {
|
||||
selectedRegistry.value = cloneDeep(emptyRegistry);
|
||||
}
|
||||
|
||||
useWPTitle(computed(() => [i18n.t('registries.registries'), org.value.name]));
|
||||
</script>
|
||||
|
@ -37,6 +37,7 @@ import { useAsyncAction } from '~/compositions/useAsyncAction';
|
||||
import { requiredInject } from '~/compositions/useInjectProvide';
|
||||
import useNotifications from '~/compositions/useNotifications';
|
||||
import { usePagination } from '~/compositions/usePaginate';
|
||||
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||
import { WebhookEvents } from '~/lib/api/types';
|
||||
import type { Secret } from '~/lib/api/types';
|
||||
|
||||
@ -92,4 +93,6 @@ function editSecret(secret: Secret) {
|
||||
function showAddSecret() {
|
||||
selectedSecret.value = cloneDeep(emptySecret);
|
||||
}
|
||||
|
||||
useWPTitle(computed(() => [i18n.t('secrets.secrets'), org.value.name]));
|
||||
</script>
|
||||
|
@ -7,9 +7,11 @@
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { computed, toRef } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
|
||||
import PipelineList from '~/components/repo/pipeline/PipelineList.vue';
|
||||
import { requiredInject } from '~/compositions/useInjectProvide';
|
||||
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||
|
||||
const props = defineProps<{
|
||||
branch: string;
|
||||
@ -24,4 +26,7 @@ const pipelines = computed(() =>
|
||||
(b) => b.branch === branch.value && b.event !== 'pull_request' && b.event !== 'pull_request_closed',
|
||||
),
|
||||
);
|
||||
|
||||
const { t } = useI18n();
|
||||
useWPTitle(computed(() => [t('repo.activity'), branch.value, repo.value.full_name]));
|
||||
</script>
|
||||
|
@ -22,6 +22,7 @@
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { computed, watch } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
|
||||
import Badge from '~/components/atomic/Badge.vue';
|
||||
import Icon from '~/components/atomic/Icon.vue';
|
||||
@ -30,6 +31,7 @@ import Panel from '~/components/layout/Panel.vue';
|
||||
import useApiClient from '~/compositions/useApiClient';
|
||||
import { requiredInject } from '~/compositions/useInjectProvide';
|
||||
import { usePagination } from '~/compositions/usePaginate';
|
||||
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||
|
||||
const apiClient = useApiClient();
|
||||
|
||||
@ -56,4 +58,7 @@ const branchesWithDefaultBranchFirst = computed(() =>
|
||||
);
|
||||
|
||||
watch(repo, resetPage);
|
||||
|
||||
const { t } = useI18n();
|
||||
useWPTitle(computed(() => [t('repo.branches'), repo.value.full_name]));
|
||||
</script>
|
||||
|
@ -39,6 +39,7 @@ import Panel from '~/components/layout/Panel.vue';
|
||||
import useApiClient from '~/compositions/useApiClient';
|
||||
import { requiredInject } from '~/compositions/useInjectProvide';
|
||||
import { usePaginate } from '~/compositions/usePaginate';
|
||||
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||
|
||||
defineProps<{
|
||||
open: boolean;
|
||||
@ -103,4 +104,6 @@ async function triggerManualPipeline() {
|
||||
|
||||
loading.value = false;
|
||||
}
|
||||
|
||||
useWPTitle(computed(() => [i18n.t('repo.manual_pipeline.trigger'), repo.value.full_name]));
|
||||
</script>
|
||||
|
@ -3,9 +3,16 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { computed } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
|
||||
import PipelineList from '~/components/repo/pipeline/PipelineList.vue';
|
||||
import { requiredInject } from '~/compositions/useInjectProvide';
|
||||
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||
|
||||
const repo = requiredInject('repo');
|
||||
const pipelines = requiredInject('pipelines');
|
||||
|
||||
const { t } = useI18n();
|
||||
useWPTitle(computed(() => [t('repo.activity'), repo.value.full_name]));
|
||||
</script>
|
||||
|
@ -7,9 +7,11 @@
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { computed, toRef } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
|
||||
import PipelineList from '~/components/repo/pipeline/PipelineList.vue';
|
||||
import { requiredInject } from '~/compositions/useInjectProvide';
|
||||
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||
|
||||
const props = defineProps<{
|
||||
pullRequest: string;
|
||||
@ -34,4 +36,7 @@ const pipelines = computed(() =>
|
||||
.replaceAll('/head', '') === pullRequest.value,
|
||||
),
|
||||
);
|
||||
|
||||
const { t } = useI18n();
|
||||
useWPTitle(computed(() => [t('repo.activity'), pullRequest.value, repo.value.full_name]));
|
||||
</script>
|
||||
|
@ -26,7 +26,8 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { watch } from 'vue';
|
||||
import { computed, watch } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
|
||||
import Icon from '~/components/atomic/Icon.vue';
|
||||
import ListItem from '~/components/atomic/ListItem.vue';
|
||||
@ -34,6 +35,7 @@ import Panel from '~/components/layout/Panel.vue';
|
||||
import useApiClient from '~/compositions/useApiClient';
|
||||
import { requiredInject } from '~/compositions/useInjectProvide';
|
||||
import { usePagination } from '~/compositions/usePaginate';
|
||||
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||
import type { PullRequest } from '~/lib/api/types';
|
||||
|
||||
const apiClient = useApiClient();
|
||||
@ -50,4 +52,7 @@ async function loadPullRequests(page: number): Promise<PullRequest[]> {
|
||||
const { resetPage, data: pullRequests, loading } = usePagination(loadPullRequests);
|
||||
|
||||
watch(repo, resetPage);
|
||||
|
||||
const { t } = useI18n();
|
||||
useWPTitle(computed(() => [t('repo.pull_requests'), repo.value.full_name]));
|
||||
</script>
|
||||
|
@ -76,6 +76,7 @@ import useApiClient from '~/compositions/useApiClient';
|
||||
import { useAsyncAction } from '~/compositions/useAsyncAction';
|
||||
import { requiredInject } from '~/compositions/useInjectProvide';
|
||||
import useNotifications from '~/compositions/useNotifications';
|
||||
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||
import type { PipelineStep } from '~/lib/api/types';
|
||||
|
||||
const props = defineProps<{
|
||||
@ -144,4 +145,12 @@ const { doSubmit: declinePipeline, isLoading: isDecliningPipeline } = useAsyncAc
|
||||
await apiClient.declinePipeline(repo.value.id, `${pipeline.value.number}`);
|
||||
notifications.notify({ title: i18n.t('repo.pipeline.protected.decline_success'), type: 'success' });
|
||||
});
|
||||
|
||||
useWPTitle(
|
||||
computed(() => [
|
||||
i18n.t('repo.pipeline.tasks'),
|
||||
i18n.t('repo.pipeline.pipeline', { pipelineId: pipeline.value.id }),
|
||||
repo.value.full_name,
|
||||
]),
|
||||
);
|
||||
</script>
|
||||
|
@ -7,8 +7,22 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { computed } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
|
||||
import Panel from '~/components/layout/Panel.vue';
|
||||
import { requiredInject } from '~/compositions/useInjectProvide';
|
||||
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||
|
||||
const repo = requiredInject('repo');
|
||||
const pipeline = requiredInject('pipeline');
|
||||
|
||||
const { t } = useI18n();
|
||||
useWPTitle(
|
||||
computed(() => [
|
||||
t('repo.pipeline.files'),
|
||||
t('repo.pipeline.pipeline', { pipelineId: pipeline.value.id }),
|
||||
repo.value.full_name,
|
||||
]),
|
||||
);
|
||||
</script>
|
||||
|
@ -15,11 +15,15 @@
|
||||
<script lang="ts" setup>
|
||||
import { decode } from 'js-base64';
|
||||
import { computed } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
|
||||
import SyntaxHighlight from '~/components/atomic/SyntaxHighlight';
|
||||
import Panel from '~/components/layout/Panel.vue';
|
||||
import { requiredInject } from '~/compositions/useInjectProvide';
|
||||
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||
|
||||
const repo = requiredInject('repo');
|
||||
const pipeline = requiredInject('pipeline');
|
||||
const pipelineConfigs = requiredInject('pipeline-configs');
|
||||
|
||||
const pipelineConfigsDecoded = computed(
|
||||
@ -29,4 +33,13 @@ const pipelineConfigsDecoded = computed(
|
||||
data: decode(i.data),
|
||||
})) ?? [],
|
||||
);
|
||||
|
||||
const { t } = useI18n();
|
||||
useWPTitle(
|
||||
computed(() => [
|
||||
t('repo.pipeline.config'),
|
||||
t('repo.pipeline.pipeline', { pipelineId: pipeline.value.id }),
|
||||
repo.value.full_name,
|
||||
]),
|
||||
);
|
||||
</script>
|
||||
|
@ -27,6 +27,7 @@ import Panel from '~/components/layout/Panel.vue';
|
||||
import useApiClient from '~/compositions/useApiClient';
|
||||
import { requiredInject } from '~/compositions/useInjectProvide';
|
||||
import useNotifications from '~/compositions/useNotifications';
|
||||
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||
|
||||
const { t } = useI18n();
|
||||
const apiClient = useApiClient();
|
||||
@ -74,4 +75,12 @@ async function downloadMetadata() {
|
||||
isLoading.value = false;
|
||||
}
|
||||
}
|
||||
|
||||
useWPTitle(
|
||||
computed(() => [
|
||||
t('repo.pipeline.debug.title'),
|
||||
t('repo.pipeline.pipeline', { pipelineId: pipeline.value.id }),
|
||||
repo.value.full_name,
|
||||
]),
|
||||
);
|
||||
</script>
|
||||
|
@ -48,13 +48,18 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { computed } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
|
||||
import DocsLink from '~/components/atomic/DocsLink.vue';
|
||||
import Icon from '~/components/atomic/Icon.vue';
|
||||
import RenderMarkdown from '~/components/atomic/RenderMarkdown.vue';
|
||||
import Panel from '~/components/layout/Panel.vue';
|
||||
import { requiredInject } from '~/compositions/useInjectProvide';
|
||||
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||
import type { PipelineError } from '~/lib/api/types';
|
||||
|
||||
const repo = requiredInject('repo');
|
||||
const pipeline = requiredInject('pipeline');
|
||||
|
||||
function isLinterError(error: PipelineError): error is PipelineError<{ file?: string; field: string }> {
|
||||
@ -70,4 +75,13 @@ function isDeprecationError(
|
||||
function isBadHabitError(error: PipelineError): error is PipelineError<{ file?: string; field: string; docs: string }> {
|
||||
return error.type === 'bad_habit';
|
||||
}
|
||||
|
||||
const { t } = useI18n();
|
||||
useWPTitle(
|
||||
computed(() => [
|
||||
pipeline.value.errors?.some((e) => !e.is_warning) ? t('repo.pipeline.errors') : t('repo.pipeline.warnings'),
|
||||
t('repo.pipeline.pipeline', { pipelineId: pipeline.value.id }),
|
||||
repo.value.full_name,
|
||||
]),
|
||||
);
|
||||
</script>
|
||||
|
@ -52,6 +52,7 @@ import useApiClient from '~/compositions/useApiClient';
|
||||
import { useAsyncAction } from '~/compositions/useAsyncAction';
|
||||
import { requiredInject } from '~/compositions/useInjectProvide';
|
||||
import useNotifications from '~/compositions/useNotifications';
|
||||
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||
|
||||
const apiClient = useApiClient();
|
||||
const router = useRouter();
|
||||
@ -89,4 +90,6 @@ const { doSubmit: deactivateRepo, isLoading: isDeactivatingRepo } = useAsyncActi
|
||||
});
|
||||
|
||||
const isActive = computed(() => repo?.value.active);
|
||||
|
||||
useWPTitle(computed(() => [i18n.t('repo.settings.actions.actions'), repo.value.full_name]));
|
||||
</script>
|
||||
|
@ -42,6 +42,7 @@
|
||||
<script lang="ts" setup>
|
||||
import { useStorage } from '@vueuse/core';
|
||||
import { computed, onMounted, ref, watch } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
|
||||
import type { SelectOption } from '~/components/form/form.types';
|
||||
import InputField from '~/components/form/InputField.vue';
|
||||
@ -51,6 +52,7 @@ import useApiClient from '~/compositions/useApiClient';
|
||||
import useConfig from '~/compositions/useConfig';
|
||||
import { requiredInject } from '~/compositions/useInjectProvide';
|
||||
import { usePaginate } from '~/compositions/usePaginate';
|
||||
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||
|
||||
const apiClient = useApiClient();
|
||||
const repo = requiredInject('repo');
|
||||
@ -109,4 +111,7 @@ onMounted(() => {
|
||||
watch(repo, () => {
|
||||
loadBranches();
|
||||
});
|
||||
|
||||
const { t } = useI18n();
|
||||
useWPTitle(computed(() => [t('repo.settings.badge.badge'), repo.value.full_name]));
|
||||
</script>
|
||||
|
@ -120,6 +120,7 @@ import { useDate } from '~/compositions/useDate';
|
||||
import { requiredInject } from '~/compositions/useInjectProvide';
|
||||
import useNotifications from '~/compositions/useNotifications';
|
||||
import { usePagination } from '~/compositions/usePaginate';
|
||||
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||
import type { Cron } from '~/lib/api/types';
|
||||
import router from '~/router';
|
||||
|
||||
@ -171,4 +172,6 @@ const { doSubmit: runCron } = useAsyncAction(async (_cron: Cron) => {
|
||||
},
|
||||
});
|
||||
});
|
||||
|
||||
useWPTitle(computed(() => [i18n.t('repo.settings.crons.crons'), repo.value.full_name]));
|
||||
</script>
|
||||
|
@ -171,7 +171,7 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { onMounted, ref } from 'vue';
|
||||
import { computed, onMounted, ref } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
|
||||
import Button from '~/components/atomic/Button.vue';
|
||||
@ -188,6 +188,7 @@ import { useAsyncAction } from '~/compositions/useAsyncAction';
|
||||
import useAuthentication from '~/compositions/useAuthentication';
|
||||
import { requiredInject } from '~/compositions/useInjectProvide';
|
||||
import useNotifications from '~/compositions/useNotifications';
|
||||
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||
import { RepoRequireApproval, RepoVisibility, WebhookEvents } from '~/lib/api/types';
|
||||
import type { RepoSettings } from '~/lib/api/types';
|
||||
import { useRepoStore } from '~/store/repos';
|
||||
@ -294,4 +295,6 @@ function removeUser(user: string) {
|
||||
|
||||
repoSettings.value.approval_allowed_users = repoSettings.value.approval_allowed_users.filter((i) => i !== user);
|
||||
}
|
||||
|
||||
useWPTitle(computed(() => [i18n.t('repo.settings.general.project'), repo.value.full_name]));
|
||||
</script>
|
||||
|
@ -42,6 +42,7 @@ import { useAsyncAction } from '~/compositions/useAsyncAction';
|
||||
import { requiredInject } from '~/compositions/useInjectProvide';
|
||||
import useNotifications from '~/compositions/useNotifications';
|
||||
import { usePagination } from '~/compositions/usePaginate';
|
||||
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||
import type { Registry } from '~/lib/api/types';
|
||||
|
||||
const emptyRegistry: Partial<Registry> = {
|
||||
@ -96,4 +97,6 @@ function editRegistry(registry: Registry) {
|
||||
function showAddRegistry() {
|
||||
selectedRegistry.value = cloneDeep(emptyRegistry);
|
||||
}
|
||||
|
||||
useWPTitle(computed(() => [i18n.t('registries.registries'), repo.value.full_name]));
|
||||
</script>
|
||||
|
@ -37,6 +37,7 @@ import { useAsyncAction } from '~/compositions/useAsyncAction';
|
||||
import { requiredInject } from '~/compositions/useInjectProvide';
|
||||
import useNotifications from '~/compositions/useNotifications';
|
||||
import { usePagination } from '~/compositions/usePaginate';
|
||||
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||
import { WebhookEvents } from '~/lib/api/types';
|
||||
import type { Secret } from '~/lib/api/types';
|
||||
|
||||
@ -129,4 +130,6 @@ function editSecret(secret: Secret) {
|
||||
function showAddSecret() {
|
||||
selectedSecret.value = cloneDeep(emptySecret);
|
||||
}
|
||||
|
||||
useWPTitle(computed(() => [i18n.t('secrets.secrets'), repo.value.full_name]));
|
||||
</script>
|
||||
|
@ -9,9 +9,13 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { computed } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
|
||||
import AgentManager from '~/components/agent/AgentManager.vue';
|
||||
import useApiClient from '~/compositions/useApiClient';
|
||||
import useAuthentication from '~/compositions/useAuthentication';
|
||||
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||
import type { Agent } from '~/lib/api/types';
|
||||
|
||||
const apiClient = useApiClient();
|
||||
@ -25,4 +29,7 @@ const loadAgents = (page: number) => apiClient.getOrgAgents(user.org_id, { page
|
||||
const createAgent = (agent: Partial<Agent>) => apiClient.createOrgAgent(user.org_id, agent);
|
||||
const updateAgent = (agent: Agent) => apiClient.updateOrgAgent(user.org_id, agent.id, agent);
|
||||
const deleteAgent = (agent: Agent) => apiClient.deleteOrgAgent(user.org_id, agent.id);
|
||||
|
||||
const { t } = useI18n();
|
||||
useWPTitle(computed(() => [t('admin.settings.agents.agents'), t('user.settings.settings')]));
|
||||
</script>
|
||||
|
@ -34,12 +34,14 @@
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { computed, onMounted, ref } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
|
||||
import Button from '~/components/atomic/Button.vue';
|
||||
import InputField from '~/components/form/InputField.vue';
|
||||
import Settings from '~/components/layout/Settings.vue';
|
||||
import useApiClient from '~/compositions/useApiClient';
|
||||
import useConfig from '~/compositions/useConfig';
|
||||
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||
|
||||
const { rootPath, enableSwagger } = useConfig();
|
||||
|
||||
@ -68,4 +70,7 @@ const resetToken = async () => {
|
||||
token.value = await apiClient.resetToken();
|
||||
window.location.href = `${address}/logout`;
|
||||
};
|
||||
|
||||
const { t } = useI18n();
|
||||
useWPTitle(computed(() => [t('user.settings.cli_and_api.cli_and_api'), t('user.settings.settings')]));
|
||||
</script>
|
||||
|
@ -28,8 +28,9 @@ import SelectField from '~/components/form/SelectField.vue';
|
||||
import Settings from '~/components/layout/Settings.vue';
|
||||
import { setI18nLanguage } from '~/compositions/useI18n';
|
||||
import { useTheme } from '~/compositions/useTheme';
|
||||
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||
|
||||
const { locale } = useI18n();
|
||||
const { locale, t } = useI18n();
|
||||
const { storeTheme } = useTheme();
|
||||
|
||||
const localeOptions = computed(() =>
|
||||
@ -49,4 +50,6 @@ const selectedLocale = computed<string>({
|
||||
return storedLocale.value;
|
||||
},
|
||||
});
|
||||
|
||||
useWPTitle(computed(() => [t('user.settings.general.general'), t('user.settings.settings')]));
|
||||
</script>
|
||||
|
@ -46,6 +46,7 @@ import { useAsyncAction } from '~/compositions/useAsyncAction';
|
||||
import useAuthentication from '~/compositions/useAuthentication';
|
||||
import useNotifications from '~/compositions/useNotifications';
|
||||
import { usePagination } from '~/compositions/usePaginate';
|
||||
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||
import type { Registry } from '~/lib/api/types';
|
||||
|
||||
const emptyRegistry: Partial<Registry> = {
|
||||
@ -106,4 +107,6 @@ function editRegistry(registry: Registry) {
|
||||
function showAddRegistry() {
|
||||
selectedRegistry.value = cloneDeep(emptyRegistry);
|
||||
}
|
||||
|
||||
useWPTitle(computed(() => [i18n.t('registries.registries'), i18n.t('user.settings.settings')]));
|
||||
</script>
|
||||
|
@ -41,6 +41,7 @@ import { useAsyncAction } from '~/compositions/useAsyncAction';
|
||||
import useAuthentication from '~/compositions/useAuthentication';
|
||||
import useNotifications from '~/compositions/useNotifications';
|
||||
import { usePagination } from '~/compositions/usePaginate';
|
||||
import { useWPTitle } from '~/compositions/useWPTitle';
|
||||
import { WebhookEvents } from '~/lib/api/types';
|
||||
import type { Secret } from '~/lib/api/types';
|
||||
|
||||
@ -103,4 +104,6 @@ function editSecret(secret: Secret) {
|
||||
function showAddSecret() {
|
||||
selectedSecret.value = cloneDeep(emptySecret);
|
||||
}
|
||||
|
||||
useWPTitle(computed(() => [i18n.t('secrets.secrets'), i18n.t('user.settings.settings')]));
|
||||
</script>
|
||||
|
Loading…
Reference in New Issue
Block a user