feat: インスタンスのテーマカラーを設定できるように

This commit is contained in:
syuilo
2022-02-09 21:25:48 +09:00
parent 624aef6979
commit 4ae1a65958
10 changed files with 57 additions and 2 deletions

View File

@ -0,0 +1,13 @@
const { MigrationInterface, QueryRunner } = require("typeorm");
module.exports = class instanceThemeColor1644395759931 {
name = 'instanceThemeColor1644395759931'
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "meta" ADD "themeColor" character varying(512)`);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "themeColor"`);
}
}

View File

@ -88,6 +88,12 @@ export class Meta {
})
public pinnedClipId: Clip['id'] | null;
@Column('varchar', {
length: 512,
nullable: true,
})
public themeColor: string | null;
@Column('varchar', {
length: 512,
nullable: true,

View File

@ -41,6 +41,10 @@ export const meta = {
validator: $.optional.nullable.arr($.str),
},
themeColor: {
validator: $.optional.nullable.str,
},
mascotImageUrl: {
validator: $.optional.nullable.str,
},
@ -331,6 +335,10 @@ export default define(meta, async (ps, me) => {
set.blockedHosts = ps.blockedHosts.filter(Boolean);
}
if (ps.themeColor !== undefined) {
set.themeColor = ps.themeColor;
}
if (ps.mascotImageUrl !== undefined) {
set.mascotImageUrl = ps.mascotImageUrl;
}

View File

@ -499,6 +499,7 @@ export default define(meta, async (ps, me) => {
enableRecaptcha: instance.enableRecaptcha,
recaptchaSiteKey: instance.recaptchaSiteKey,
swPublickey: instance.swPublicKey,
themeColor: instance.themeColor,
mascotImageUrl: instance.mascotImageUrl,
bannerUrl: instance.bannerUrl,
errorImageUrl: instance.errorImageUrl,

View File

@ -200,6 +200,7 @@ router.get(['/@:user', '/@:user/:sub'], async (ctx, next) => {
sub: ctx.params.sub,
instanceName: meta.name || 'Misskey',
icon: meta.iconUrl,
themeColor: meta.themeColor,
});
ctx.set('Cache-Control', 'public, max-age=30');
} else {
@ -239,6 +240,7 @@ router.get('/notes/:note', async (ctx, next) => {
summary: getNoteSummary(_note),
instanceName: meta.name || 'Misskey',
icon: meta.iconUrl,
themeColor: meta.themeColor,
});
if (['public', 'home'].includes(note.visibility)) {
@ -277,6 +279,7 @@ router.get('/@:user/pages/:page', async (ctx, next) => {
profile,
instanceName: meta.name || 'Misskey',
icon: meta.iconUrl,
themeColor: meta.themeColor,
});
if (['public'].includes(page.visibility)) {
@ -307,6 +310,7 @@ router.get('/clips/:clip', async (ctx, next) => {
profile,
instanceName: meta.name || 'Misskey',
icon: meta.iconUrl,
themeColor: meta.themeColor,
});
ctx.set('Cache-Control', 'public, max-age=180');
@ -330,6 +334,7 @@ router.get('/gallery/:post', async (ctx, next) => {
profile,
instanceName: meta.name || 'Misskey',
icon: meta.iconUrl,
themeColor: meta.themeColor,
});
ctx.set('Cache-Control', 'public, max-age=180');
@ -353,6 +358,7 @@ router.get('/channels/:channel', async (ctx, next) => {
channel: _channel,
instanceName: meta.name || 'Misskey',
icon: meta.iconUrl,
themeColor: meta.themeColor,
});
ctx.set('Cache-Control', 'public, max-age=180');
@ -412,6 +418,7 @@ router.get('(.*)', async ctx => {
instanceName: meta.name || 'Misskey',
desc: meta.description,
icon: meta.iconUrl,
themeColor: meta.themeColor,
});
ctx.set('Cache-Control', 'public, max-age=300');
});

View File

@ -9,6 +9,7 @@ module.exports = async (ctx: Koa.Context) => {
json.short_name = instance.name || 'Misskey';
json.name = instance.name || 'Misskey';
if (instance.themeColor) json.theme_color = instance.themeColor;
ctx.set('Cache-Control', 'max-age=300');
ctx.body = json;

View File

@ -19,8 +19,8 @@ html
meta(charset='utf-8')
meta(name='application-name' content='Misskey')
meta(name='referrer' content='origin')
meta(name='theme-color' content='#86b300')
meta(name='theme-color-orig' content='#86b300')
meta(name='theme-color' content= themeColor || '#86b300')
meta(name='theme-color-orig' content= themeColor || '#86b300')
meta(property='twitter:card' content='summary')
meta(property='og:site_name' content= instanceName || 'Misskey')
meta(name='viewport' content='width=device-width, initial-scale=1')