2023-07-27 07:31:52 +02:00
<!--
2024-02-13 16:59:27 +01:00
SPDX - FileCopyrightText : syuilo and misskey - project
2023-07-27 07:31:52 +02:00
SPDX - License - Identifier : AGPL - 3.0 - only
-- >
2022-07-16 16:11:05 +02:00
< template >
< MkStickyContainer >
< template # header > < MkPageHeader :actions = "headerActions" :tabs = "headerTabs" / > < / template >
2023-05-19 09:20:53 +02:00
< MkSpacer :contentMax = "600" :marginMin = "16" >
2023-01-06 05:40:17 +01:00
< div class = "_gaps_m" >
2023-01-05 13:04:56 +01:00
< FormSplit >
< MkKeyValue >
< template # key > { { i18n . ts . _registry . domain } } < / template >
2023-11-03 05:23:03 +01:00
< template # value > { { props . domain === '@' ? i18n . ts . system : props . domain . toUpperCase ( ) } } < / template >
2023-01-05 13:04:56 +01:00
< / MkKeyValue >
< MkKeyValue >
< template # key > { { i18n . ts . _registry . scope } } < / template >
< template # value > { { scope . join ( '/' ) } } < / template >
< / MkKeyValue >
< / FormSplit >
2023-07-08 00:08:16 +02:00
2023-01-05 13:04:56 +01:00
< MkButton primary @click ="createKey" > {{ i18n.ts._registry.createKey }} < / MkButton >
2022-07-16 16:11:05 +02:00
2023-01-05 13:04:56 +01:00
< FormSection v-if = "keys" >
< template # label > { { i18n . ts . keys } } < / template >
2023-11-03 05:23:03 +01:00
< div class = "_gaps_s" >
< FormLink v-for = "key in keys" :to="`/registry/value/${props.domain}/${scope.join('/')}/${key[0]}`" class="_monospace" > {{ key [ 0 ] }} < template # suffix > { { key [ 1 ] . toUpperCase ( ) } } < / template > < / FormLink >
2023-01-05 13:04:56 +01:00
< / div >
< / FormSection >
< / div >
2022-07-16 16:11:05 +02:00
< / MkSpacer >
< / MkStickyContainer >
< / template >
< script lang = "ts" setup >
2023-12-07 06:42:09 +01:00
import { watch , computed , ref } from 'vue' ;
2022-07-16 16:11:05 +02:00
import JSON5 from 'json5' ;
2023-09-19 09:37:43 +02:00
import * as os from '@/os.js' ;
2024-01-04 10:32:46 +01:00
import { misskeyApi } from '@/scripts/misskey-api.js' ;
2023-09-19 09:37:43 +02:00
import { i18n } from '@/i18n.js' ;
import { definePageMetadata } from '@/scripts/page-metadata.js' ;
2022-07-16 16:11:05 +02:00
import FormLink from '@/components/form/link.vue' ;
import FormSection from '@/components/form/section.vue' ;
2022-09-06 11:21:49 +02:00
import MkButton from '@/components/MkButton.vue' ;
2022-08-30 17:24:33 +02:00
import MkKeyValue from '@/components/MkKeyValue.vue' ;
2022-07-16 16:11:05 +02:00
import FormSplit from '@/components/form/split.vue' ;
const props = defineProps < {
path : string ;
2023-11-03 05:23:03 +01:00
domain : string ;
2022-07-16 16:11:05 +02:00
} > ( ) ;
2023-12-07 06:42:09 +01:00
const scope = computed ( ( ) => props . path ? props . path . split ( '/' ) : [ ] ) ;
2022-07-16 16:11:05 +02:00
2023-12-26 06:19:35 +01:00
const keys = ref < any > ( null ) ;
2022-07-16 16:11:05 +02:00
function fetchKeys ( ) {
2024-01-04 10:32:46 +01:00
misskeyApi ( 'i/registry/keys-with-type' , {
2023-12-07 06:42:09 +01:00
scope : scope . value ,
2023-11-03 05:23:03 +01:00
domain : props . domain === '@' ? null : props . domain ,
2022-07-16 16:11:05 +02:00
} ) . then ( res => {
2023-12-07 06:42:09 +01:00
keys . value = Object . entries ( res ) . sort ( ( a , b ) => a [ 0 ] . localeCompare ( b [ 0 ] ) ) ;
2022-07-16 16:11:05 +02:00
} ) ;
}
async function createKey ( ) {
const { canceled , result } = await os . form ( i18n . ts . _registry . createKey , {
key : {
type : 'string' ,
label : i18n . ts . _registry . key ,
} ,
value : {
type : 'string' ,
multiline : true ,
label : i18n . ts . value ,
} ,
scope : {
type : 'string' ,
label : i18n . ts . _registry . scope ,
2023-12-07 06:42:09 +01:00
default : scope . value . join ( '/' ) ,
2022-07-16 16:11:05 +02:00
} ,
} ) ;
if ( canceled ) return ;
os . apiWithDialog ( 'i/registry/set' , {
scope : result . scope . split ( '/' ) ,
key : result . key ,
value : JSON5 . parse ( result . value ) ,
} ) . then ( ( ) => {
fetchKeys ( ) ;
} ) ;
}
watch ( ( ) => props . path , fetchKeys , { immediate : true } ) ;
2023-12-07 06:42:09 +01:00
const headerActions = computed ( ( ) => [ ] ) ;
2022-07-16 16:11:05 +02:00
2023-12-07 06:42:09 +01:00
const headerTabs = computed ( ( ) => [ ] ) ;
2022-07-16 16:11:05 +02:00
2024-02-16 08:17:09 +01:00
definePageMetadata ( ( ) => ( {
2022-07-16 16:11:05 +02:00
title : i18n . ts . registry ,
2023-09-30 21:53:52 +02:00
icon : 'ph-faders ph-bold ph-lg' ,
2024-02-16 08:17:09 +01:00
} ) ) ;
2022-07-16 16:11:05 +02:00
< / script >