Merge branch 'develop' into sw-msg

This commit is contained in:
tamaina
2021-01-23 22:16:26 +09:00
26 changed files with 771 additions and 94 deletions

View File

@@ -52,10 +52,10 @@
<span class="localOnly" v-if="appearNote.localOnly"><Fa :icon="faBiohazard"/></span>
</div>
<div class="username"><MkAcct :user="appearNote.user"/></div>
<MkInstanceTicker class="ticker" :instance="appearNote.user.instance"/>
</div>
</header>
<div class="main">
<MkInstanceTicker v-if="showTicker" class="ticker" :instance="appearNote.user.instance"/>
<div class="body">
<p v-if="appearNote.cw != null" class="cw">
<Mfm v-if="appearNote.cw != ''" class="text" :text="appearNote.cw" :author="appearNote.user" :i="$i" :custom-emojis="appearNote.emojis"/>
@@ -1005,6 +1005,7 @@ export default defineComponent({
flex-direction: column;
justify-content: center;
padding-left: 16px;
font-size: 0.95em;
> .top {
> .name {

View File

@@ -1,33 +1,97 @@
<template>
<section class="uawsfosz _section">
<div class="_title"><Fa :icon="faCloud"/> {{ $ts.drive }}</div>
<div class="_content">
<span>{{ $ts.uploadFolder }}: {{ uploadFolder ? uploadFolder.name : '-' }}</span>
<MkButton primary @click="chooseUploadFolder()"><Fa :icon="faFolderOpen"/> {{ $ts.selectFolder }}</MkButton>
<FormBase class="">
<FormGroup v-if="!fetching">
<template #label>{{ $ts.usageAmount }}</template>
<div class="_formItem uawsfosz">
<div class="_formPanel">
<div class="meter"><div :style="meterStyle"></div></div>
</div>
</div>
<FormKeyValueView>
<template #key>{{ $ts.capacity }}</template>
<template #value>{{ bytes(capacity, 1) }}</template>
</FormKeyValueView>
<FormKeyValueView>
<template #key>{{ $ts.inUse }}</template>
<template #value>{{ bytes(usage, 1) }}</template>
</FormKeyValueView>
</FormGroup>
<div class="_formItem">
<div class="_formLabel">{{ $ts.statistics }}</div>
<div class="_formPanel">
<div ref="chart"></div>
</div>
</div>
</section>
<FormButton :center="false" @click="chooseUploadFolder()" primary>
{{ $ts.uploadFolder }}
<template #suffix>{{ uploadFolder ? uploadFolder.name : '-' }}</template>
<template #suffixIcon><Fa :icon="faFolderOpen"/></template>
</FormButton>
</FormBase>
</template>
<script lang="ts">
import { defineComponent } from 'vue';
import * as tinycolor from 'tinycolor2';
import ApexCharts from 'apexcharts';
import { faCloud, faFolderOpen } from '@fortawesome/free-solid-svg-icons';
import { faClock, faEyeSlash, faTrashAlt } from '@fortawesome/free-regular-svg-icons';
import MkButton from '@/components/ui/button.vue';
import FormButton from '@/components/form/button.vue';
import FormGroup from '@/components/form/group.vue';
import FormKeyValueView from '@/components/form/key-value-view.vue';
import FormBase from '@/components/form/base.vue';
import * as os from '@/os';
import bytes from '@/filters/bytes';
export default defineComponent({
components: {
MkButton,
FormBase,
FormButton,
FormGroup,
FormKeyValueView,
},
emits: ['info'],
data() {
return {
INFO: {
title: this.$ts.drive,
icon: faCloud
},
fetching: true,
usage: null,
capacity: null,
uploadFolder: null,
faCloud, faClock, faEyeSlash, faFolderOpen, faTrashAlt
}
},
computed: {
meterStyle(): any {
return {
width: `${this.usage / this.capacity * 100}%`,
background: tinycolor({
h: 180 - (this.usage / this.capacity * 180),
s: 0.7,
l: 0.5
})
};
}
},
async created() {
os.api('drive').then(info => {
this.capacity = info.capacity;
this.usage = info.usage;
this.fetching = false;
this.$nextTick(() => {
this.renderChart();
});
});
if (this.$store.state.uploadFolder) {
this.uploadFolder = await os.api('drive/folders/show', {
folderId: this.$store.state.uploadFolder
@@ -35,6 +99,10 @@ export default defineComponent({
}
},
mounted() {
this.$emit('info', this.INFO);
},
methods: {
chooseUploadFolder() {
os.selectDriveFolder(false).then(async folder => {
@@ -48,13 +116,127 @@ export default defineComponent({
this.uploadFolder = null;
}
});
}
},
renderChart() {
os.api('charts/user/drive', {
userId: this.$i.id,
span: 'day',
limit: 21
}).then(stats => {
const addition = [];
const deletion = [];
const now = new Date();
const y = now.getFullYear();
const m = now.getMonth();
const d = now.getDate();
for (let i = 0; i < 21; i++) {
const x = new Date(y, m, d - i);
addition.push([
x,
stats.incSize[i]
]);
deletion.push([
x,
-stats.decSize[i]
]);
}
const chart = new ApexCharts(this.$refs.chart, {
chart: {
type: 'bar',
stacked: true,
height: 150,
toolbar: {
show: false
},
zoom: {
enabled: false
}
},
plotOptions: {
bar: {
columnWidth: '80%'
}
},
grid: {
clipMarkers: false,
borderColor: 'rgba(0, 0, 0, 0.1)',
xaxis: {
lines: {
show: true,
}
},
},
tooltip: {
shared: true,
intersect: false,
theme: this.$store.state.darkMode ? 'dark' : 'light',
},
dataLabels: {
enabled: false
},
legend: {
show: false
},
series: [{
name: 'Additions',
data: addition
}, {
name: 'Deletions',
data: deletion
}],
xaxis: {
type: 'datetime',
labels: {
style: {
colors: tinycolor(getComputedStyle(document.documentElement).getPropertyValue('--fg')).toRgbString()
}
},
axisBorder: {
color: 'rgba(0, 0, 0, 0.1)'
},
axisTicks: {
color: 'rgba(0, 0, 0, 0.1)'
},
crosshairs: {
width: 1,
opacity: 1
}
},
yaxis: {
labels: {
formatter: v => bytes(v, 0),
style: {
colors: tinycolor(getComputedStyle(document.documentElement).getPropertyValue('--fg')).toRgbString()
}
}
}
});
chart.render();
});
},
bytes
}
});
</script>
<style lang="scss" scoped>
.uawsfosz {
> div {
padding: 24px;
> .meter {
$size: 12px;
background: rgba(0, 0, 0, 0.1);
border-radius: ($size / 2);
overflow: hidden;
> div {
height: $size;
border-radius: ($size / 2);
}
}
}
}
</style>

View File

@@ -6,6 +6,7 @@
<FormLink :active="page === 'profile'" replace to="/settings/profile"><template #icon><Fa :icon="faUser"/></template>{{ $ts.profile }}</FormLink>
<FormLink :active="page === 'privacy'" replace to="/settings/privacy"><template #icon><Fa :icon="faLockOpen"/></template>{{ $ts.privacy }}</FormLink>
<FormLink :active="page === 'reaction'" replace to="/settings/reaction"><template #icon><Fa :icon="faLaugh"/></template>{{ $ts.reaction }}</FormLink>
<FormLink :active="page === 'drive'" replace to="/settings/drive"><template #icon><Fa :icon="faCloud"/></template>{{ $ts.drive }}</FormLink>
<FormLink :active="page === 'notifications'" replace to="/settings/notifications"><template #icon><Fa :icon="faBell"/></template>{{ $ts.notifications }}</FormLink>
<FormLink :active="page === 'email'" replace to="/settings/email"><template #icon><Fa :icon="faEnvelope"/></template>{{ $ts.email }}</FormLink>
<FormLink :active="page === 'integration'" replace to="/settings/integration"><template #icon><Fa :icon="faShareAlt"/></template>{{ $ts.integration }}</FormLink>
@@ -42,7 +43,7 @@
<script lang="ts">
import { computed, defineAsyncComponent, defineComponent, nextTick, onMounted, reactive, ref, watch } from 'vue';
import { faCog, faPalette, faPlug, faUser, faListUl, faLock, faCommentSlash, faMusic, faCogs, faEllipsisH, faBan, faShareAlt, faLockOpen, faKey, faBoxes } from '@fortawesome/free-solid-svg-icons';
import { faCog, faPalette, faPlug, faUser, faListUl, faLock, faCommentSlash, faMusic, faCogs, faEllipsisH, faBan, faShareAlt, faLockOpen, faKey, faBoxes, faCloud } from '@fortawesome/free-solid-svg-icons';
import { faLaugh, faBell, faEnvelope } from '@fortawesome/free-regular-svg-icons';
import { i18n } from '@/i18n';
import FormLink from '@/components/form/link.vue';
@@ -85,6 +86,7 @@ export default defineComponent({
case 'profile': return defineAsyncComponent(() => import('./profile.vue'));
case 'privacy': return defineAsyncComponent(() => import('./privacy.vue'));
case 'reaction': return defineAsyncComponent(() => import('./reaction.vue'));
case 'drive': return defineAsyncComponent(() => import('./drive.vue'));
case 'notifications': return defineAsyncComponent(() => import('./notifications.vue'));
case 'mute-block': return defineAsyncComponent(() => import('./mute-block.vue'));
case 'word-mute': return defineAsyncComponent(() => import('./word-mute.vue'));
@@ -106,6 +108,7 @@ export default defineComponent({
case 'plugins': return defineAsyncComponent(() => import('./plugins.vue'));
case 'import-export': return defineAsyncComponent(() => import('./import-export.vue'));
case 'account-info': return defineAsyncComponent(() => import('./account-info.vue'));
case 'update': return defineAsyncComponent(() => import('./update.vue'));
case 'registry': return defineAsyncComponent(() => import('./registry.vue'));
case 'experimental-features': return defineAsyncComponent(() => import('./experimental-features.vue'));
}
@@ -156,7 +159,7 @@ export default defineComponent({
localStorage.removeItem('theme');
location.reload();
},
faPalette, faPlug, faUser, faListUl, faLock, faLaugh, faCommentSlash, faMusic, faBell, faCogs, faEllipsisH, faBan, faShareAlt, faLockOpen, faKey, faBoxes, faEnvelope,
faPalette, faPlug, faUser, faListUl, faLock, faLaugh, faCommentSlash, faMusic, faBell, faCogs, faEllipsisH, faBan, faShareAlt, faLockOpen, faKey, faBoxes, faEnvelope, faCloud,
};
},
});

View File

@@ -1,5 +1,7 @@
<template>
<FormBase>
<FormLink to="/settings/update">Misskey Update</FormLink>
<FormSwitch :value="$i.injectFeaturedNote" @update:value="onChangeInjectFeaturedNote">
{{ $ts.showFeaturedNotesInTimeline }}
</FormSwitch>

View File

@@ -0,0 +1,94 @@
<template>
<FormBase>
<template v-if="meta">
<MkInfo v-if="version === meta.version">{{ $ts.youAreRunningUpToDateClient }}</MkInfo>
<MkInfo v-else warn>{{ $ts.newVersionOfClientAvailable }}</MkInfo>
</template>
<FormGroup>
<template #label>{{ instanceName }}</template>
<FormKeyValueView>
<template #key>{{ $ts.currentVersion }}</template>
<template #value>{{ version }}</template>
</FormKeyValueView>
<FormKeyValueView>
<template #key>{{ $ts.latestVersion }}</template>
<template #value v-if="meta">{{ meta.version }}</template>
<template #value v-else><MkEllipsis/></template>
</FormKeyValueView>
</FormGroup>
<FormGroup>
<template #label>Misskey</template>
<FormKeyValueView>
<template #key>{{ $ts.latestVersion }}</template>
<template #value v-if="releases">{{ releases[0].tag_name }}</template>
<template #value v-else><MkEllipsis/></template>
</FormKeyValueView>
<template #caption v-if="releases"><MkTime :time="releases[0].published_at" mode="detail"/></template>
</FormGroup>
</FormBase>
</template>
<script lang="ts">
import { defineAsyncComponent, defineComponent } from 'vue';
import { faInfoCircle, faSyncAlt } from '@fortawesome/free-solid-svg-icons';
import FormSwitch from '@/components/form/switch.vue';
import FormSelect from '@/components/form/select.vue';
import FormLink from '@/components/form/link.vue';
import FormBase from '@/components/form/base.vue';
import FormGroup from '@/components/form/group.vue';
import FormButton from '@/components/form/button.vue';
import FormKeyValueView from '@/components/form/key-value-view.vue';
import MkInfo from '@/components/ui/info.vue';
import * as os from '@/os';
import { version, instanceName } from '@/config';
export default defineComponent({
components: {
FormBase,
FormSelect,
FormSwitch,
FormButton,
FormLink,
FormGroup,
FormKeyValueView,
MkInfo,
},
emits: ['info'],
data() {
return {
INFO: {
title: 'Misskey Update',
icon: faSyncAlt
},
version,
instanceName,
releases: null,
meta: null
}
},
mounted() {
this.$emit('info', this.INFO);
os.api('meta', {
detail: false
}).then(meta => {
this.meta = meta;
localStorage.setItem('v', meta.version);
});
fetch('https://api.github.com/repos/syuilo/misskey/releases', {
method: 'GET',
})
.then(res => res.json())
.then(res => {
this.releases = res;
});
},
methods: {
}
});
</script>

View File

@@ -97,7 +97,8 @@ export default defineComponent({
},
tooltip: {
shared: true,
intersect: false
intersect: false,
theme: this.$store.state.darkMode ? 'dark' : 'light',
},
series: [{
name: 'Normal',

View File

@@ -16,5 +16,6 @@
mention: '@accent',
hashtag: '@accent',
inputBorder: 'rgba(0, 0, 0, 0.1)',
infoBg: 'rgb(226, 235, 241)',
},
}

View File

@@ -1,4 +1,4 @@
# AiScript
## 함수
デフォルトで値渡しです。
기본값은 값에 의한 호출입니다.

View File

@@ -1,6 +1,6 @@
# キーボードショートカット
## グローバル
## Globalna
これらのショートカットは基本的にどこでも使えます。
<table>
<thead>

View File

@@ -186,7 +186,7 @@ Misskey提供一种被称为“帖子抓取”的机制。该功能以流的形
```
其中:
* 需要`id`的值设置为需要抓取的帖子`id`
* `id`的值设置为需要抓取的帖子`id`
发送此消息表示您已请求Misskey抓取该贴子并且您将收到与该帖子有关的事件。
@@ -207,17 +207,17 @@ Misskey提供一种被称为“帖子抓取”的机制。该功能以流的形
```
其中:
* `body`内の`id`に、イベントを発生させた投稿のIDが設定されます
* `body`内の`type`に、イベントの種類が設定されます
* `body`内の`body`に、イベントの詳細が設定されます
* `body`里的`id`用来表示触发事件的帖子的ID
* `body`里的`type`用来表示事件类型
* `body`里的`body`用来表示事件详细内容
#### イベントの種類
#### 事件类型
##### `reacted`
その投稿にリアクションがされた時に発生します
在帖子有回应时触发
* `reaction`に、リアクションの種類が設定されます
* `userId`に、リアクションを行ったユーザーのIDが設定されます
* `reaction`用来表示回应的类型
* `userId`用来表示做出回应的用户的ID
例:
```json
@@ -235,9 +235,9 @@ Misskey提供一种被称为“帖子抓取”的机制。该功能以流的形
```
##### `deleted`
その投稿が削除された時に発生します
帖子删除时触发
* `deletedAt`に、削除日時が設定されます
* `deletedAt`表示删除的日期和时间
例:
```json
@@ -254,10 +254,10 @@ Misskey提供一种被称为“帖子抓取”的机制。该功能以流的形
```
##### `pollVoted`
その投稿に添付されたアンケートに投票された時に発生します
帖子附带的问卷调查被投票时触发
* `choice`に、選択肢IDが設定されます
* `userId`に、投票を行ったユーザーのIDが設定されます
* `choice`表示选择项ID
* `userId`表示投票的用户ID
例:
```json
@@ -274,11 +274,11 @@ Misskey提供一种被称为“帖子抓取”的机制。该功能以流的形
}
```
### 投稿のキャプチャを解除する
### 取消帖子抓取
その投稿がもう画面に表示されなくなったりして、その投稿に関するイベントをもう受け取る必要がなくなったときは、キャプチャの解除を申請してください
如果希望该帖子不再出现在屏幕上,并且您不再需要接收与该帖子相关的事件,可以发送取消帖子抓取的请求
次のメッセージを送信します:
请发送以下消息:
```json
{
@@ -290,65 +290,65 @@ Misskey提供一种被称为“帖子抓取”的机制。该功能以流的形
```
其中:
* `id`にキャプチャを解除したい投稿の`id`を設定します
* 请将`id`的值设置为需要取消抓取的帖子`id`
このメッセージを送信すると、以後、その投稿に関するイベントは流れてこないようになります
发送此消息后,将不再接收与该帖子相关的其他事件
# チャンネル一覧
# 频道列表
## `main`
アカウントに関する基本的な情報が流れてきます。このチャンネルにパラメータはありません
将会发送帐户的基本信息。该频道没有参数
### 流れてくるイベント一覧
### 发送的事件列表
#### `转发`
自分の投稿がRenoteされた時に発生するイベントです。自分自身の投稿をRenoteしたときは発生しません
#### `renote`
当您的帖子被转发时会触发该事件。转发自己的帖子不会触发
#### `mention`
誰かからメンションされたときに発生するイベントです
有人提及您时会触发该事件
#### `readAllNotifications`
自分宛ての通知がすべて既読になったことを表すイベントです。このイベントを利用して、「通知があることを示すアイコン」のようなものをオフにしたりする等のケースが想定されます
这个事件表示您的所有通知都被设为已读。此事件可用于关闭“未读通知图标”等情况
#### `meUpdated`
自分の情報が更新されたことを表すイベントです
该事件表示您的个人信息已更新
#### `follow`
自分が誰かをフォローしたときに発生するイベントです
当您关注某人时会触发该事件
#### `unfollow`
自分が誰かのフォローを解除したときに発生するイベントです
当您取消关注某人时会触发该事件
#### `followed`
自分が誰かにフォローされたときに発生するイベントです
当您被某人关注时会触发该事件
## `homeTimeline`
ホームタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません
ホームタイムラインの投稿情報が流れてきます。该频道没有参数
### 流れてくるイベント一覧
### 发送的事件列表
#### `note`
タイムラインに新しい投稿が流れてきたときに発生するイベントです。
## `localTimeline`
ローカルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません
ローカルタイムラインの投稿情報が流れてきます。该频道没有参数
### 流れてくるイベント一覧
### 发送的事件列表
#### `note`
ローカルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
## `hybridTimeline`
ソーシャルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません
ソーシャルタイムラインの投稿情報が流れてきます。该频道没有参数
### 流れてくるイベント一覧
### 发送的事件列表
#### `note`
ソーシャルタイムラインに新しい投稿が流れてきたときに発生するイベントです。
## `globalTimeline`
グローバルタイムラインの投稿情報が流れてきます。このチャンネルにパラメータはありません
グローバルタイムラインの投稿情報が流れてきます。该频道没有参数
### 流れてくるイベント一覧
### 发送的事件列表
#### `note`
グローバルタイムラインに新しい投稿が流れてきたときに発生するイベントです。

View File

@@ -1,17 +1,17 @@
# キーボードショートカット
## 全域
## 公開
これらのショートカットは基本的にどこでも使えます。
<table>
<thead>
<tr><th>快速鍵</th><th>功能</th><th>由來</th></tr>
</thead>
<tbody>
<tr><td><kbd class="key">P</kbd>, <kbd class="key">N</kbd></td><td>新規投稿</td><td><b>P</b>ost, <b>N</b>ew, <b>N</b>ote</td></tr>
<tr><td><kbd class="key">P</kbd>, <kbd class="key">N</kbd></td><td>發佈箋文</td><td><b>P</b>ost, <b>N</b>ew, <b>N</b>ote</td></tr>
<tr><td><kbd class="key">T</kbd></td><td>タイムラインの最も新しい投稿にフォーカス</td><td><b>T</b>imeline, <b>T</b>op</td></tr>
<tr><td><kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">N</kbd></kbd></td><td>通知を表示/隠す</td><td><b>N</b>otifications</td></tr>
<tr><td><kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">N</kbd></kbd></td><td>顯示/隱藏通知</td><td><b>N</b>otifications</td></tr>
<tr><td><kbd class="key">S</kbd></td><td>搜尋</td><td><b>S</b>earch</td></tr>
<tr><td><kbd class="key">H</kbd>, <kbd class="key">?</kbd></td><td>ヘルプを表示</td><td><b>H</b>elp</td></tr>
<tr><td><kbd class="key">H</kbd>, <kbd class="key">?</kbd></td><td>取得說明</td><td><b>H</b>elp</td></tr>
</tbody>
</table>
@@ -30,23 +30,23 @@
<tr><td><kbd class="key">E</kbd>, <kbd class="key">A</kbd>, <kbd class="key">+</kbd></td><td>リアクションフォームを開く</td><td><b>E</b>mote, re<b>A</b>ction</td></tr>
<tr><td><kbd class="key">0</kbd>~<kbd class="key">9</kbd></td><td>数字に対応したリアクションをする(対応については後述)</td><td>-</td></tr>
<tr><td><kbd class="key">F</kbd>, <kbd class="key">B</kbd></td><td>お気に入りに登録</td><td><b>F</b>avorite, <b>B</b>ookmark</td></tr>
<tr><td><kbd class="key">Del</kbd>, <kbd class="group"><kbd class="key">Ctrl</kbd> + <kbd class="key">D</kbd></kbd></td><td>投稿を削除</td><td><b>D</b>elete</tr>
<tr><td><kbd class="key">Del</kbd>, <kbd class="group"><kbd class="key">Ctrl</kbd> + <kbd class="key">D</kbd></kbd></td><td>刪除箋文</td><td><b>D</b>elete</tr>
<tr><td><kbd class="key">M</kbd>, <kbd class="key">O</kbd></td><td>投稿に対するメニューを開く</td><td><b>M</b>ore, <b>O</b>ther</td></tr>
<tr><td><kbd class="key">S</kbd></td><td>CWで隠された部分を表示 or 隠す</td><td><b>S</b>how, <b>S</b>ee</td></tr>
<tr><td><kbd class="key">Esc</kbd></td><td>フォーカスを外す</td><td>-</td></tr>
</tbody>
</table>
## Renoteフォーム
## 轉發選單
<table>
<thead>
<tr><th>快速鍵</th><th>功能</th><th>由來</th></tr>
</thead>
<tbody>
<tr><td><kbd class="key">Enter</kbd></td><td>Renoteする</td><td>-</td></tr>
<tr><td><kbd class="key">Q</kbd></td><td>フォームを展開する</td><td><b>Q</b>uote</td></tr>
<tr><td><kbd class="key">Esc</kbd></td><td>フォームを閉じる</td><td>-</td></tr>
<tr><td><kbd class="key">Enter</kbd></td><td>轉發箋文</td><td>-</td></tr>
<tr><td><kbd class="key">Q</kbd></td><td>展開選單</td><td><b>Q</b>uote</td></tr>
<tr><td><kbd class="key">Esc</kbd></td><td>關閉選單</td><td>-</td></tr>
</tbody>
</table>

View File

@@ -1,2 +1,2 @@
# MFM
MFMは、Misskey Flavored Markdownの略で、Misskeyの様々な場所で使用できる専用のマークアップ言語です。 MFMで使用可能な構文は[MFMチートシート](/mfm-cheat-sheet)で確認できます
MFMMisskey Favored Markdown的縮寫通行於Misskey的專用標記語言。 其語法可於[MFM代碼小抄](/mfm-cheat-sheet)中找到

View File

@@ -1,4 +1,4 @@
# Pages
# 頁面
## 變數
変数を使うことで動的なページを作成できます。テキスト内で <b>{ 変数名 }</b> と書くとそこに変数の値を埋め込めます。例えば <b>Hello { thing } world!</b> というテキストで、変数(thing)の値が <b>ai</b> だった場合、テキストは <b>Hello ai world!</b> になります。

View File

@@ -2,10 +2,10 @@
テーマを設定して、Misskeyクライアントの見た目を変更できます。
## テーマの設定
設定 > テーマ
## 佈景主題設定
設定 > 佈景主題
## テーマを作成する
## 製造佈景主題
テーマコードはJSON5で記述されたテーマオブジェクトです。 テーマは以下のようなオブジェクトです。
``` js
{
@@ -31,13 +31,15 @@
},
}
```
* `id` ... テーマの一意なID。UUIDをおすすめします
* `name` ... テーマ名
* `author` ... テーマの作者
* `desc` ... テーマの説明(オプション)
* `base` ... 明るいテーマか、暗いテーマか
* `id` ... 佈景主題唯一識別碼。建議使用UUID
* `name` ... 佈景主題名稱
* `author` ... 佈景主題作者
* `desc` ... 佈景主題説明(可選)
* `base` ... 採用淺色底色/深色底色
* `light`にすると明るいテーマになり、`dark`にすると暗いテーマになります。
* テーマはここで設定されたベーステーマを継承します。
* `props` ... テーマのスタイル定義。これから説明します。
@@ -46,11 +48,11 @@
`props`下にはテーマのスタイルを定義します。 キーがCSSの変数名になり、バリューで中身を指定します。 なお、この`props`オブジェクトはベーステーマから継承されます。 ベーステーマは、このテーマの`base`が`light`なら[_light.json5](https://github.com/syuilo/misskey/blob/develop/src/client/themes/_light.json5)で、`dark`なら[_dark.json5](https://github.com/syuilo/misskey/blob/develop/src/client/themes/_dark.json5)です。 つまり、このテーマ内の`props`に`panel`というキーが無くても、そこにはベーステーマの`panel`があると見なされます。
#### バリューで使える構文
* 16進数で表された色
* 以十六進位色碼標示
* 例: `#00ff00`
* `rgb(r, g, b)`形式で表された
* `rgb(r, g, b)`形式標示RGB顏
* 例: `rgb(0, 255, 0)`
* `rgb(r, g, b, a)`形式で表された透明度を含む
* `rgb(r, g, b, a)`形式標示RGBA顏
* 例: `rgba(0, 255, 0, 0.5)`
* 他のキーの値の参照
* `@{キー名}`と書くと他のキーの値の参照になります。`{キー名}`は参照したいキーの名前に置き換えます。
@@ -58,8 +60,8 @@
* 定数(後述)の参照
* `${定数名}`と書くと定数の参照になります。`{定数名}`は参照したい定数の名前に置き換えます。
* 例: `$main`
* 関数(後述)
* `:{関数名}<{引数}<{色}`
* 函數(見下文)
* `:{函數名稱}<{參數}<{色}`
#### 常數
「CSS変数として出力はしたくないが、他のCSS変数の値として使いまわしたい」値があるときは、定数を使うと便利です。 キー名を`$`で始めると、そのキーはCSS変数として出力されません。

View File

@@ -11,5 +11,5 @@ https://docs.google.com/spreadsheets/d/1lxQ2ugKrhz58Bg96HTDK_2F98BUritkMyIiBkOBy
## 社群
自分のフォローしているユーザーの投稿と、全てのローカルユーザーの「ホーム」指定されていない投稿
## 全域
## 公開
全てのローカルユーザーの「ホーム」指定されていない投稿と、サーバーに届いた全てのリモートユーザーの「ホーム」指定されていない投稿