Merge branch 'develop' into sw-notification-action
This commit is contained in:
commit
35fe912e5f
88 changed files with 757 additions and 435 deletions
|
|
@ -401,8 +401,7 @@ export default defineComponent({
|
|||
z-index: 65535;
|
||||
max-width: 100%;
|
||||
margin-top: calc(1em + 8px);
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
transition: top 0.1s ease, left 0.1s ease;
|
||||
|
||||
> ol {
|
||||
|
|
@ -419,8 +418,7 @@ export default defineComponent({
|
|||
align-items: center;
|
||||
padding: 4px 12px;
|
||||
white-space: nowrap;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
font-size: 0.9em;
|
||||
cursor: default;
|
||||
|
||||
|
|
@ -429,8 +427,7 @@ export default defineComponent({
|
|||
}
|
||||
|
||||
* {
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -66,8 +66,7 @@ export default defineComponent({
|
|||
<style lang="scss" scoped>
|
||||
.eftoefju {
|
||||
display: block;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
width: 100%;
|
||||
|
||||
&:hover {
|
||||
|
|
|
|||
|
|
@ -342,8 +342,7 @@ export default defineComponent({
|
|||
text-align: center;
|
||||
word-break: break-all;
|
||||
color: var(--fg);
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
|
||||
> .ext {
|
||||
opacity: 0.5;
|
||||
|
|
|
|||
|
|
@ -62,10 +62,6 @@
|
|||
<header class="_acrylic">{{ $ts.emoji }}</header>
|
||||
<XSection v-for="category in categories" :emojis="emojilist.filter(e => e.category === category).map(e => e.char)">{{ category }}</XSection>
|
||||
</div>
|
||||
<div>
|
||||
<header class="_acrylic">{{ $ts.tags }}</header>
|
||||
<XSection v-for="tag in emojiTags" :emojis="customEmojis.filter(e => e.aliases.includes(tag)).map(e => ':' + e.name + ':')">{{ tag }}</XSection>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tabs">
|
||||
<button class="_button tab" :class="{ active: tab === 'index' }" @click="tab = 'index'"><Fa :icon="faAsterisk" fixed-width/></button>
|
||||
|
|
@ -86,7 +82,7 @@ import Particle from '@/components/particle.vue';
|
|||
import * as os from '@/os';
|
||||
import { isDeviceTouch } from '@/scripts/is-device-touch';
|
||||
import { isMobile } from '@/scripts/is-mobile';
|
||||
import { emojiCategories, emojiTags } from '@/instance';
|
||||
import { emojiCategories } from '@/instance';
|
||||
import XSection from './emoji-picker.section.vue';
|
||||
|
||||
export default defineComponent({
|
||||
|
|
@ -115,7 +111,6 @@ export default defineComponent({
|
|||
height: this.asReactionPicker ? this.$store.state.reactionPickerHeight : 2,
|
||||
big: this.asReactionPicker ? isDeviceTouch : false,
|
||||
customEmojiCategories: emojiCategories,
|
||||
emojiTags,
|
||||
customEmojis: this.$instance.emojis,
|
||||
q: null,
|
||||
searchResultCustom: [],
|
||||
|
|
|
|||
|
|
@ -261,8 +261,7 @@ export default defineComponent({
|
|||
display: inline-block;
|
||||
min-width: 16px;
|
||||
max-width: 150px;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
<Fa :icon="faExternalLinkAlt" class="icon"/>
|
||||
</span>
|
||||
</a>
|
||||
<MkA class="main _button _formPanel _formClickable" :class="{ active }" :to="to" v-else>
|
||||
<MkA class="main _button _formPanel _formClickable" :class="{ active }" :to="to" :behavior="behavior" v-else>
|
||||
<span class="icon"><slot name="icon"></slot></span>
|
||||
<span class="text"><slot></slot></span>
|
||||
<span class="right">
|
||||
|
|
@ -38,6 +38,10 @@ export default defineComponent({
|
|||
type: Boolean,
|
||||
required: false
|
||||
},
|
||||
behavior: {
|
||||
type: String,
|
||||
required: false,
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
|
|
@ -83,8 +87,7 @@ export default defineComponent({
|
|||
> .text {
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
padding-right: 12px;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -98,6 +98,11 @@ export default defineComponent({
|
|||
},
|
||||
|
||||
nav() {
|
||||
if (this.behavior === 'browser') {
|
||||
location.href = this.to;
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.to.startsWith('/my/messaging')) {
|
||||
if (ColdDeviceStorage.get('chatOpenBehavior') === 'window') return this.window();
|
||||
if (ColdDeviceStorage.get('chatOpenBehavior') === 'popout') return this.popout();
|
||||
|
|
|
|||
|
|
@ -101,8 +101,7 @@ export default defineComponent({
|
|||
top: 0;
|
||||
border-radius: 100%;
|
||||
z-index: 1;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
object-fit: cover;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
|
|
|
|||
|
|
@ -126,8 +126,7 @@ export default defineComponent({
|
|||
&.nowrap {
|
||||
white-space: pre;
|
||||
word-wrap: normal; // https://codeday.me/jp/qa/20190424/690106.html
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -692,8 +692,7 @@ export default defineComponent({
|
|||
|
||||
> dd {
|
||||
text-overflow: ellipsis;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -44,8 +44,7 @@ export default defineComponent({
|
|||
|
||||
height: $height;
|
||||
border-radius: 4px 0 0 4px;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
color: #fff;
|
||||
|
||||
> .icon {
|
||||
|
|
|
|||
|
|
@ -62,8 +62,7 @@ export default defineComponent({
|
|||
width: 100%;
|
||||
border-radius: 4px;
|
||||
margin-top: 4px;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
|
||||
> .download,
|
||||
> .sensitive {
|
||||
|
|
@ -78,8 +77,7 @@ export default defineComponent({
|
|||
}
|
||||
|
||||
> b {
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -143,8 +143,7 @@ export default defineComponent({
|
|||
> a {
|
||||
display: block;
|
||||
cursor: zoom-in;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-position: center;
|
||||
|
|
|
|||
|
|
@ -105,8 +105,7 @@ export default defineComponent({
|
|||
grid-gap: 4px;
|
||||
|
||||
> * {
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
border-radius: 6px;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -78,8 +78,7 @@ export default defineComponent({
|
|||
align-items: center;
|
||||
|
||||
font-size: 3.5em;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
background-position: center;
|
||||
background-size: cover;
|
||||
width: 100%;
|
||||
|
|
|
|||
|
|
@ -886,8 +886,7 @@ export default defineComponent({
|
|||
.note {
|
||||
position: relative;
|
||||
transition: box-shadow 0.1s ease;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
contain: content;
|
||||
|
||||
&:focus-visible {
|
||||
|
|
@ -947,8 +946,7 @@ export default defineComponent({
|
|||
}
|
||||
|
||||
> span {
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
flex-shrink: 1;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
|
|
|
|||
|
|
@ -61,8 +61,7 @@ export default defineComponent({
|
|||
display: block;
|
||||
margin: 0 .5em 0 0;
|
||||
padding: 0;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
font-size: 1em;
|
||||
font-weight: bold;
|
||||
text-decoration: none;
|
||||
|
|
@ -91,8 +90,7 @@ export default defineComponent({
|
|||
|
||||
> .username {
|
||||
margin: 0 .5em 0 0;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -50,8 +50,7 @@ export default defineComponent({
|
|||
display: flex;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
font-size: 0.95em;
|
||||
|
||||
> .avatar {
|
||||
|
|
|
|||
|
|
@ -861,8 +861,7 @@ export default defineComponent({
|
|||
.tkcbzcuz {
|
||||
position: relative;
|
||||
transition: box-shadow 0.1s ease;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
contain: content;
|
||||
|
||||
// これらの指定はパフォーマンス向上には有効だが、ノートの高さは一定でないため、
|
||||
|
|
@ -949,8 +948,7 @@ export default defineComponent({
|
|||
}
|
||||
|
||||
> span {
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
flex-shrink: 1;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
|
|
@ -1022,8 +1020,7 @@ export default defineComponent({
|
|||
&.collapsed {
|
||||
position: relative;
|
||||
max-height: 9em;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
|
||||
> .fade {
|
||||
display: block;
|
||||
|
|
|
|||
|
|
@ -268,8 +268,7 @@ export default defineComponent({
|
|||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
min-width: 0;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
> .time {
|
||||
|
|
@ -280,8 +279,7 @@ export default defineComponent({
|
|||
|
||||
> .text {
|
||||
white-space: nowrap;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
|
||||
> [data-icon] {
|
||||
|
|
|
|||
|
|
@ -112,8 +112,7 @@ export default defineComponent({
|
|||
padding: 4px 8px;
|
||||
border: solid 1px var(--divider);
|
||||
border-radius: 4px;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
cursor: pointer;
|
||||
|
||||
&:hover {
|
||||
|
|
|
|||
|
|
@ -127,8 +127,7 @@ export default defineComponent({
|
|||
height: 64px;
|
||||
margin-right: 4px;
|
||||
border-radius: 4px;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
cursor: move;
|
||||
|
||||
&:hover > .remove {
|
||||
|
|
|
|||
|
|
@ -390,8 +390,7 @@ export default defineComponent({
|
|||
font-size: $ui-font-size;
|
||||
line-height: 3rem;
|
||||
text-overflow: ellipsis;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
width: 100%;
|
||||
text-align: left;
|
||||
|
|
|
|||
|
|
@ -67,8 +67,7 @@ export default defineComponent({
|
|||
height: 100%;
|
||||
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.3);
|
||||
border-radius: 8px;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
|
|
|||
|
|
@ -124,8 +124,7 @@ export default defineComponent({
|
|||
text-decoration: none;
|
||||
background: var(--buttonBg);
|
||||
border-radius: 999px;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
|
||||
&:not(:disabled):hover {
|
||||
background: var(--buttonHoverBg);
|
||||
|
|
@ -213,8 +212,7 @@ export default defineComponent({
|
|||
width: 100%;
|
||||
height: 100%;
|
||||
border-radius: 6px;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
|
||||
::v-deep(div) {
|
||||
position: absolute;
|
||||
|
|
|
|||
|
|
@ -116,8 +116,7 @@ export default defineComponent({
|
|||
|
||||
.ukygtjoj {
|
||||
position: relative;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
|
||||
&.naked {
|
||||
background: transparent !important;
|
||||
|
|
|
|||
|
|
@ -298,8 +298,7 @@ export default defineComponent({
|
|||
transform: scale(.75);
|
||||
white-space: nowrap;
|
||||
width: 133%;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
|
||||
> .warning {
|
||||
|
|
@ -355,8 +354,7 @@ export default defineComponent({
|
|||
display: inline-block;
|
||||
min-width: 16px;
|
||||
max-width: 150px;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -155,8 +155,7 @@ export default defineComponent({
|
|||
font-size: 0.9em;
|
||||
line-height: 20px;
|
||||
text-align: center;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
|
||||
&.danger {
|
||||
|
|
|
|||
|
|
@ -89,8 +89,7 @@ export default defineComponent({
|
|||
|
||||
<style lang="scss" scoped>
|
||||
.ebkgoccj {
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
contain: content;
|
||||
|
|
@ -124,8 +123,7 @@ export default defineComponent({
|
|||
padding-left: 32px;
|
||||
font-weight: bold;
|
||||
white-space: nowrap;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
pointer-events: none;
|
||||
|
||||
|
|
|
|||
|
|
@ -89,8 +89,7 @@ export default defineComponent({
|
|||
pointer-events: none;
|
||||
font-size: 16px;
|
||||
color: var(--inputLabel);
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
> input {
|
||||
|
|
|
|||
|
|
@ -402,8 +402,7 @@ export default defineComponent({
|
|||
}
|
||||
|
||||
> .body {
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
contain: content;
|
||||
|
|
@ -438,8 +437,7 @@ export default defineComponent({
|
|||
position: relative;
|
||||
line-height: var(--height);
|
||||
white-space: nowrap;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
text-align: center;
|
||||
cursor: move;
|
||||
|
|
|
|||
|
|
@ -244,8 +244,7 @@ export default defineComponent({
|
|||
font-size: 14px;
|
||||
box-shadow: 0 0 0 1px var(--divider);
|
||||
border-radius: 8px;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
|
||||
&:hover {
|
||||
text-decoration: none;
|
||||
|
|
@ -327,8 +326,7 @@ export default defineComponent({
|
|||
&.compact {
|
||||
> article {
|
||||
> header h1, p, footer {
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -110,8 +110,7 @@ export default defineComponent({
|
|||
display: -webkit-box;
|
||||
-webkit-line-clamp: 3;
|
||||
-webkit-box-orient: vertical;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -111,8 +111,7 @@ export default defineComponent({
|
|||
position: absolute;
|
||||
z-index: 11000;
|
||||
width: 300px;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
transform-origin: center top;
|
||||
|
||||
> .info {
|
||||
|
|
|
|||
|
|
@ -66,8 +66,7 @@ export default defineComponent({
|
|||
height: 350px;
|
||||
background: var(--panel);
|
||||
border-radius: var(--radius);
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
|
|
@ -128,8 +127,7 @@ export default defineComponent({
|
|||
|
||||
> .body {
|
||||
padding: 0 8px;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
|
||||
> .name {
|
||||
display: block;
|
||||
|
|
|
|||
|
|
@ -141,8 +141,7 @@ export default defineComponent({
|
|||
> *:nth-child(2) {
|
||||
flex: 1 1 auto;
|
||||
white-space: nowrap;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
|
||||
> span:first-child {
|
||||
|
|
|
|||
|
|
@ -76,6 +76,7 @@ console.info(`Misskey v${version}`);
|
|||
|
||||
// boot.jsのやつを解除
|
||||
window.onerror = null;
|
||||
window.onunhandledrejection = null;
|
||||
|
||||
if (_DEV_) {
|
||||
console.warn('Development mode!!!');
|
||||
|
|
|
|||
|
|
@ -305,7 +305,7 @@ export async function pickEmoji(src?: HTMLElement, opts) {
|
|||
|
||||
type AwaitType<T> =
|
||||
T extends Promise<infer U> ? U :
|
||||
T extends (...args: Array<any>) => Promise<infer V> ? V :
|
||||
T extends (...args: any[]) => Promise<infer V> ? V :
|
||||
T;
|
||||
let openingEmojiPicker: AwaitType<ReturnType<typeof popup>> | null = null;
|
||||
let activeTextarea: HTMLTextAreaElement | HTMLInputElement | null = null;
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<div style="overflow: hidden; overflow: clip;">
|
||||
<div style="overflow: hidden;">
|
||||
<FormBase class="znqjceqz">
|
||||
<div id="debug"></div>
|
||||
<section class="_formItem about">
|
||||
|
|
|
|||
|
|
@ -104,8 +104,7 @@ export default defineComponent({
|
|||
display: block;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
|
|
@ -125,8 +124,7 @@ export default defineComponent({
|
|||
width: 55%;
|
||||
line-height: 42px;
|
||||
white-space: nowrap;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
opacity: 0.7;
|
||||
font-size: 14px;
|
||||
|
|
|
|||
|
|
@ -178,20 +178,17 @@ export default defineComponent({
|
|||
> .body {
|
||||
padding: 0 0 0 8px;
|
||||
white-space: nowrap;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
|
||||
> .name {
|
||||
text-overflow: ellipsis;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
> .info {
|
||||
opacity: 0.5;
|
||||
text-overflow: ellipsis;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -222,20 +219,17 @@ export default defineComponent({
|
|||
> .body {
|
||||
padding: 0 0 0 8px;
|
||||
white-space: nowrap;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
|
||||
> .name {
|
||||
text-overflow: ellipsis;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
> .info {
|
||||
opacity: 0.5;
|
||||
text-overflow: ellipsis;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -226,14 +226,12 @@ export default defineComponent({
|
|||
align-items: center;
|
||||
margin-bottom: 2px;
|
||||
white-space: nowrap;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
|
||||
> .name {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
font-size: 1em;
|
||||
font-weight: bold;
|
||||
|
|
@ -264,8 +262,7 @@ export default defineComponent({
|
|||
display: block;
|
||||
margin: 0 0 0 0;
|
||||
padding: 0;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
overflow-wrap: break-word;
|
||||
font-size: 1.1em;
|
||||
color: var(--faceText);
|
||||
|
|
|
|||
|
|
@ -154,8 +154,7 @@ export default defineComponent({
|
|||
display: block;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
overflow-wrap: break-word;
|
||||
font-size: 1em;
|
||||
color: rgba(#000, 0.5);
|
||||
|
|
@ -165,8 +164,7 @@ export default defineComponent({
|
|||
display: block;
|
||||
margin: 0;
|
||||
padding: 12px 18px;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
overflow-wrap: break-word;
|
||||
word-break: break-word;
|
||||
font-size: 1em;
|
||||
|
|
@ -184,8 +182,7 @@ export default defineComponent({
|
|||
display: block;
|
||||
max-width: 100%;
|
||||
border-radius: 16px;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
text-decoration: none;
|
||||
|
||||
&:hover {
|
||||
|
|
|
|||
|
|
@ -74,8 +74,7 @@ export default defineComponent({
|
|||
<style lang="scss" scoped>
|
||||
.cpjygsrt {
|
||||
position: relative;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
background: var(--panel);
|
||||
border: solid 2px var(--X12);
|
||||
border-radius: 6px;
|
||||
|
|
|
|||
|
|
@ -434,8 +434,7 @@ export default defineComponent({
|
|||
> div {
|
||||
background: transparent;
|
||||
border-radius: 6px;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
|
||||
* {
|
||||
pointer-events: none;
|
||||
|
|
|
|||
|
|
@ -333,8 +333,7 @@ export default defineComponent({
|
|||
background: transparent;
|
||||
border: solid 2px var(--divider);
|
||||
border-radius: 6px;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
cursor: pointer;
|
||||
|
||||
* {
|
||||
|
|
|
|||
|
|
@ -230,8 +230,7 @@ export default defineComponent({
|
|||
$size: 12px;
|
||||
background: rgba(0, 0, 0, 0.1);
|
||||
border-radius: ($size / 2);
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
|
||||
> div {
|
||||
height: $size;
|
||||
|
|
|
|||
|
|
@ -23,13 +23,16 @@
|
|||
|
||||
<FormLink to="/settings/registry"><template #icon><Fa :icon="faCogs"/></template>{{ $ts.registry }}</FormLink>
|
||||
|
||||
<FormLink to="/bios" behavior="browser"><template #icon><Fa :icon="faDoorOpen"/></template>BIOS</FormLink>
|
||||
<FormLink to="/cli" behavior="browser"><template #icon><Fa :icon="faDoorOpen"/></template>CLI</FormLink>
|
||||
|
||||
<FormButton @click="closeAccount" danger>{{ $ts.closeAccount }}</FormButton>
|
||||
</FormBase>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import { defineAsyncComponent, defineComponent } from 'vue';
|
||||
import { faEllipsisH, faCogs } from '@fortawesome/free-solid-svg-icons';
|
||||
import { faEllipsisH, faCogs, faDoorOpen } 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';
|
||||
|
|
@ -61,7 +64,7 @@ export default defineComponent({
|
|||
icon: faEllipsisH
|
||||
},
|
||||
debug,
|
||||
faCogs
|
||||
faCogs, faDoorOpen,
|
||||
}
|
||||
},
|
||||
|
||||
|
|
|
|||
|
|
@ -144,8 +144,7 @@ export default defineComponent({
|
|||
flex: 1;
|
||||
min-width: 0;
|
||||
white-space: nowrap;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
margin-right: 12px;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -184,8 +184,7 @@ export default defineComponent({
|
|||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
padding: 0 100px;
|
||||
transform: translate3d(-50%, -50%, 0);
|
||||
|
||||
|
|
|
|||
|
|
@ -369,8 +369,7 @@ export default defineComponent({
|
|||
position: relative;
|
||||
height: 450px;
|
||||
border-radius: 16px;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
background-size: cover;
|
||||
background-position: center;
|
||||
|
||||
|
|
@ -473,8 +472,7 @@ export default defineComponent({
|
|||
|
||||
> .name {
|
||||
width: 30%;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
font-weight: bold;
|
||||
|
|
@ -482,8 +480,7 @@ export default defineComponent({
|
|||
|
||||
> .value {
|
||||
width: 70%;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
margin: 0;
|
||||
|
|
@ -545,8 +542,7 @@ export default defineComponent({
|
|||
.ftskorzw.narrow {
|
||||
max-width: 100vw;
|
||||
box-sizing: border-box;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
|
||||
> .punished {
|
||||
font-size: 0.8em;
|
||||
|
|
@ -557,14 +553,12 @@ export default defineComponent({
|
|||
|
||||
> .main {
|
||||
position: relative;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
|
||||
> .banner-container {
|
||||
position: relative;
|
||||
height: 250px;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
background-size: cover;
|
||||
background-position: center;
|
||||
|
||||
|
|
@ -709,8 +703,7 @@ export default defineComponent({
|
|||
|
||||
> .name {
|
||||
width: 30%;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
font-weight: bold;
|
||||
|
|
@ -719,8 +712,7 @@ export default defineComponent({
|
|||
|
||||
> .value {
|
||||
width: 70%;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
margin: 0;
|
||||
|
|
|
|||
|
|
@ -167,8 +167,7 @@ export default defineComponent({
|
|||
margin: auto;
|
||||
width: 500px;
|
||||
height: calc(100% - 128px);
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
-webkit-mask-image: linear-gradient(0deg, rgba(0,0,0,0) 0%, rgba(0,0,0,1) 128px, rgba(0,0,0,1) calc(100% - 128px), rgba(0,0,0,0) 100%);
|
||||
mask-image: linear-gradient(0deg, rgba(0,0,0,0) 0%, rgba(0,0,0,1) 128px, rgba(0,0,0,1) calc(100% - 128px), rgba(0,0,0,0) 100%);
|
||||
|
||||
|
|
|
|||
|
|
@ -151,8 +151,7 @@ export default defineComponent({
|
|||
margin: auto;
|
||||
width: 500px;
|
||||
height: calc(100% - 128px);
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
-webkit-mask-image: linear-gradient(0deg, rgba(0,0,0,0) 0%, rgba(0,0,0,1) 128px, rgba(0,0,0,1) calc(100% - 128px), rgba(0,0,0,0) 100%);
|
||||
mask-image: linear-gradient(0deg, rgba(0,0,0,0) 0%, rgba(0,0,0,1) 128px, rgba(0,0,0,1) calc(100% - 128px), rgba(0,0,0,0) 100%);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -71,8 +71,7 @@ export default defineComponent({
|
|||
.mk-setup {
|
||||
border-radius: var(--radius);
|
||||
box-shadow: 0 8px 16px rgba(0, 0, 0, 0.1);
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
|
||||
> h1 {
|
||||
margin: 0;
|
||||
|
|
|
|||
|
|
@ -241,8 +241,7 @@ hr {
|
|||
border-radius: var(--radius);
|
||||
//border: var(--panelBorder);
|
||||
box-shadow: var(--panelShadow);
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
._card {
|
||||
|
|
@ -458,14 +457,6 @@ hr {
|
|||
opacity: 0.7;
|
||||
}
|
||||
|
||||
// TODO: refactor: 全てのvueファイル中の text-overflow: ellipsis; している箇所をこのクラスを使って置き換える
|
||||
._oneline {
|
||||
white-space: nowrap;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
._monospace {
|
||||
font-family: Fira code, Fira Mono, Consolas, Menlo, Courier, monospace;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -132,8 +132,7 @@ export default defineComponent({
|
|||
display: inline-block;
|
||||
vertical-align: bottom;
|
||||
white-space: nowrap;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
padding: 0 16px;
|
||||
position: relative;
|
||||
|
|
|
|||
|
|
@ -89,8 +89,7 @@ export default defineComponent({
|
|||
font-size: 0.8em;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
flex-shrink: 1;
|
||||
}
|
||||
.mk-uploader > ol > li > .top > .name > [data-icon] {
|
||||
|
|
@ -120,8 +119,7 @@ export default defineComponent({
|
|||
background: transparent;
|
||||
border: none;
|
||||
border-radius: 4px;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
grid-column: 2/3;
|
||||
grid-row: 2/3;
|
||||
z-index: 2;
|
||||
|
|
|
|||
|
|
@ -427,8 +427,7 @@ export default defineComponent({
|
|||
|
||||
> .text {
|
||||
white-space: nowrap;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
font-size: 0.9em;
|
||||
}
|
||||
|
|
@ -483,8 +482,7 @@ export default defineComponent({
|
|||
padding: 6px 8px;
|
||||
border-radius: 4px;
|
||||
white-space: nowrap;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
|
||||
&:hover {
|
||||
|
|
@ -547,8 +545,7 @@ export default defineComponent({
|
|||
}
|
||||
|
||||
> .title {
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
min-width: 0;
|
||||
|
|
@ -559,8 +556,7 @@ export default defineComponent({
|
|||
font-size: 0.8em;
|
||||
font-weight: normal;
|
||||
white-space: nowrap;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -62,8 +62,7 @@ export default defineComponent({
|
|||
display: block;
|
||||
margin: 0 .5em 0 0;
|
||||
padding: 0;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
font-size: 1em;
|
||||
font-weight: bold;
|
||||
text-decoration: none;
|
||||
|
|
@ -92,8 +91,7 @@ export default defineComponent({
|
|||
|
||||
> .username {
|
||||
margin: 0 .5em 0 0;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -50,8 +50,7 @@ export default defineComponent({
|
|||
display: flex;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
font-size: 0.95em;
|
||||
|
||||
> .avatar {
|
||||
|
|
|
|||
|
|
@ -955,8 +955,7 @@ export default defineComponent({
|
|||
}
|
||||
|
||||
> span {
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
flex-shrink: 1;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
|
|
@ -1029,8 +1028,7 @@ export default defineComponent({
|
|||
&.collapsed {
|
||||
position: relative;
|
||||
max-height: 9em;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
|
||||
> .fade {
|
||||
display: block;
|
||||
|
|
|
|||
|
|
@ -268,8 +268,7 @@ export default defineComponent({
|
|||
--section-padding: 10px;
|
||||
|
||||
height: 100%;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
contain: content;
|
||||
|
||||
&.draghover {
|
||||
|
|
@ -359,8 +358,7 @@ export default defineComponent({
|
|||
> .header {
|
||||
display: inline-block;
|
||||
align-items: center;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -125,8 +125,7 @@ export default defineComponent({
|
|||
display: inline-block;
|
||||
vertical-align: bottom;
|
||||
white-space: nowrap;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
position: relative;
|
||||
|
||||
|
|
@ -207,8 +206,7 @@ export default defineComponent({
|
|||
> .title {
|
||||
flex: 1;
|
||||
white-space: nowrap;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
position: relative;
|
||||
text-align: center;
|
||||
|
|
|
|||
|
|
@ -171,8 +171,7 @@ export default defineComponent({
|
|||
|
||||
> .meter {
|
||||
width: 100%;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
background: var(--X11);
|
||||
border-radius: 8px;
|
||||
|
||||
|
|
|
|||
|
|
@ -89,8 +89,7 @@ export default defineComponent({
|
|||
$bodyInfoHieght: 16px;
|
||||
|
||||
height: (62px + 1px) + (62px + 1px) + (62px + 1px) + (62px + 1px) + 62px;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
|
||||
> .instances {
|
||||
.chart-move {
|
||||
|
|
@ -114,8 +113,7 @@ export default defineComponent({
|
|||
|
||||
> .body {
|
||||
flex: 1;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
font-size: 0.9em;
|
||||
color: var(--fg);
|
||||
|
||||
|
|
@ -123,8 +121,7 @@ export default defineComponent({
|
|||
display: block;
|
||||
width: 100%;
|
||||
white-space: nowrap;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
line-height: $bodyTitleHieght;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -80,8 +80,7 @@ export default defineComponent({
|
|||
color: var(--fg);
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
|
||||
&:nth-child(even) {
|
||||
background: rgba(#000, 0.05);
|
||||
|
|
|
|||
|
|
@ -68,8 +68,7 @@ export default defineComponent({
|
|||
<style lang="scss" scoped>
|
||||
.wbrkwala {
|
||||
height: (62px + 1px) + (62px + 1px) + (62px + 1px) + (62px + 1px) + 62px;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
|
||||
> .tags {
|
||||
.chart-move {
|
||||
|
|
@ -84,8 +83,7 @@ export default defineComponent({
|
|||
|
||||
> .tag {
|
||||
flex: 1;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
font-size: 0.9em;
|
||||
color: var(--fg);
|
||||
|
||||
|
|
@ -93,8 +91,7 @@ export default defineComponent({
|
|||
display: block;
|
||||
width: 100%;
|
||||
white-space: nowrap;
|
||||
overflow: hidden; // overflow: clip; をSafariが対応したら消す
|
||||
overflow: clip;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
line-height: 18px;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
# AiScript
|
||||
|
||||
## Fonction
|
||||
デフォルトで値渡しです。
|
||||
Réglé sur « passage par copie » par défaut
|
||||
|
|
|
|||
|
|
@ -1,18 +1,18 @@
|
|||
# Deck
|
||||
|
||||
デッキは利用可能なUIのひとつです。「カラム」と呼ばれるビューを複数並べて表示させることで、カスタマイズ性が高く、情報量の多いUIが構築できることが特徴です。
|
||||
Le deck est une des interfaces utilisateurs disponibles.Sa particularité est de former une interface riche en contenus et hautement personnalisable grâce à l'affichage de plusieurs colonnes.
|
||||
|
||||
## カラムの追加
|
||||
デッキの背景を右クリックし、「カラムを追加」して任意のカラムを追加できます。
|
||||
## Ajouter une colonne
|
||||
Vous pouvez ajouter une colonne en cliquant avec le clic-droit sur « ajouter une colonne » dans l'arrière-plan du deck.
|
||||
|
||||
## カラムの移動
|
||||
カラムは、ドラッグアンドドロップで他のカラムと位置を入れ替えることが出来るほか、カラムメニュー(カラムのヘッダー右クリック)から位置を移動させることもできます。
|
||||
## Déplacer une colonne
|
||||
Vous pouvez déplacer une colonne à la place d'une autre en la faisant glisser. Il est en outre possible de réorganiser les colonnes depuis le menu des colonnes — en faisant un clic-droit dans l'en-tête de colonne.
|
||||
|
||||
## カラムの水平分割
|
||||
カラムは左右だけでなく、上下に並べることもできます。 カラムメニューを開き、「左に重ねる」を選択すると、左のカラムの下に現在のカラムが移動します。 上下分割を解除するには、カラムメニューの「右に出す」を選択します。
|
||||
## Division horizontale des colonnes
|
||||
Il est possible d'agencer les colonnes horizontalement. Depuis le menu de colonne, cliquez sur « empiler à gauche » pour la déplacer sous la colonne de gauche. Cliquez sur « déplacer à droite » pour annuler.
|
||||
|
||||
## カラムの設定
|
||||
カラムメニューの「編集」を選択するとカラムの設定を編集できます。カラムの名前を変えたり、幅を変えたりできます。
|
||||
## Configuration de la colonne
|
||||
Vous pouvez éditer la configuration de la colonne en cliquant sur « édition » dans le menu de colonne. Vous pourrez y changer le nom ou la largeur de la colonne.
|
||||
|
||||
## デッキの設定
|
||||
デッキに関する設定は、[settings/deck](/settings/deck)で行えます。
|
||||
## Configuration du deck
|
||||
Vous trouverez les options de configuration du deck à [settings/deck](/settings/deck)
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
# Abonnements
|
||||
ユーザーをフォローすると、タイムラインにそのユーザーの投稿が表示されるようになります。ただし、他のユーザーに対する返信は含まれません。 ユーザーをフォローするには、ユーザーページの「フォロー」ボタンをクリックします。フォローを解除するには、もう一度クリックします。
|
||||
Lorsque vous suivez un utilisateur, les publication de celui-ci apparaissent dans votre fil. Cela n'inclut toutefois pas ses réponses aux autres utilisateurs. Cliquez une nouvelle fois pour vous désabonner.
|
||||
|
|
|
|||
|
|
@ -1,68 +1,68 @@
|
|||
# キーボードショートカット
|
||||
# Raccourcis clavier
|
||||
|
||||
## Global
|
||||
これらのショートカットは基本的にどこでも使えます。
|
||||
## Général
|
||||
Ces raccourcis sont utilisables dans n'importe quel contexte.
|
||||
<table>
|
||||
<thead>
|
||||
<tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
|
||||
<tr><th>Raccourci</th><th>Effet</th><th>Accès universel</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">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="key">P</kbd>, <kbd class="key">N</kbd></td><td>Rédiger une nouvelle publication</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>Afficher la dernière publication</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>Afficher/cacher les notifications</td><td><b>N</b>otifications</td></tr>
|
||||
<tr><td><kbd class="key">S</kbd></td><td>Rechercher</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>Afficher l'aide</td><td><b>H</b>elp</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
## 投稿にフォーカスされた状態
|
||||
## Actions concernant les publications
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
|
||||
<tr><th>Raccourci</th><th>Effet</th><th>Accès universel</th></tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr><td><kbd class="key">↑</kbd>, <kbd class="key">K</kbd>, <kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">Tab</kbd></kbd></td><td>上の投稿にフォーカスを移動</td><td>-</td></tr>
|
||||
<tr><td><kbd class="key">↓</kbd>, <kbd class="key">J</kbd>, <kbd class="key">Tab</kbd></td><td>下の投稿にフォーカスを移動</td><td>-</td></tr>
|
||||
<tr><td><kbd class="key">R</kbd></td><td>返信フォームを開く</td><td><b>R</b>eply</td></tr>
|
||||
<tr><td><kbd class="key">Q</kbd></td><td>Renoteフォームを開く</td><td><b>Q</b>uote</td></tr>
|
||||
<tr><td><kbd class="group"><kbd class="key">Ctrl</kbd> + <kbd class="key">Q</kbd></kbd></td><td>即刻Renoteする(フォームを開かずに)</td><td>-</td></tr>
|
||||
<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">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>
|
||||
<tr><td><kbd class="key">↑</kbd>, <kbd class="key">K</kbd>, <kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">Tab</kbd></kbd></td><td>Déplacer le focus sur la publication du dessus</td><td>-</td></tr>
|
||||
<tr><td><kbd class="key">↓</kbd>, <kbd class="key">J</kbd>, <kbd class="key">Tab</kbd></td><td>Déplacer le focus sur la publication du dessous</td><td>-</td></tr>
|
||||
<tr><td><kbd class="key">R</kbd></td><td>Ouvrir la fenêtre de réponse</td><td><b>R</b>eply</td></tr>
|
||||
<tr><td><kbd class="key">Q</kbd></td><td>Ouvrir la fenêtre de Renote</td><td><b>Q</b>uote</td></tr>
|
||||
<tr><td><kbd class="group"><kbd class="key">Ctrl</kbd> + <kbd class="key">Q</kbd></kbd></td><td>Renote rapide (sans ouvrir de fenêtre)</td><td>-</td></tr>
|
||||
<tr><td><kbd class="key">E</kbd>, <kbd class="key">A</kbd>, <kbd class="key">+</kbd></td><td>Ouvrir la fenêtre de réactions</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>Utiliser la réaction attribuée au chiffre</td><td>-</td></tr>
|
||||
<tr><td><kbd class="key">F</kbd>, <kbd class="key">B</kbd></td><td>Ajouter à mes favoris</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>Supprimer la publication</td><td><b>D</b>elete</tr>
|
||||
<tr><td><kbd class="key">M</kbd>, <kbd class="key">O</kbd></td><td>Ouvrir le menu des publications</td><td><b>M</b>ore, <b>O</b>ther</td></tr>
|
||||
<tr><td><kbd class="key">S</kbd></td><td>Afficher ou cacher le contenu marqué CW</td><td><b>S</b>how, <b>S</b>ee</td></tr>
|
||||
<tr><td><kbd class="key">Esc</kbd></td><td>Quitter le focus</td><td>-</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
## Renoteフォーム
|
||||
## Formulaire de Renote
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
|
||||
<tr><th>Raccourci</th><th>Effet</th><th>Accès universel</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>Renoter</td><td>-</td></tr>
|
||||
<tr><td><kbd class="key">Q</kbd></td><td>Ouvrir la fenêtre</td><td><b>Q</b>uote</td></tr>
|
||||
<tr><td><kbd class="key">Esc</kbd></td><td>Fermer la fenêtre</td><td>-</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
## リアクションフォーム
|
||||
デフォルトで「👍」にフォーカスが当たっている状態です。
|
||||
## Fenêtre de réactions
|
||||
La réaction sélectionnée par défaut est « 👍 ».
|
||||
<table>
|
||||
<thead>
|
||||
<tr><th>ショートカット</th><th>効果</th><th>由来</th></tr>
|
||||
<tr><th>Raccourci</th><th>Effet</th><th>Accès universel</th></tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr><td><kbd class="key">↑</kbd>, <kbd class="key">K</kbd></td><td>上のリアクションにフォーカスを移動</td><td>-</td></tr>
|
||||
<tr><td><kbd class="key">↓</kbd>, <kbd class="key">J</kbd></td><td>下のリアクションにフォーカスを移動</td><td>-</td></tr>
|
||||
<tr><td><kbd class="key">←</kbd>, <kbd class="key">H</kbd>, <kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">Tab</kbd></kbd></td><td>左のリアクションにフォーカスを移動</td><td>-</td></tr>
|
||||
<tr><td><kbd class="key">→</kbd>, <kbd class="key">L</kbd>, <kbd class="key">Tab</kbd></td><td>右のリアクションにフォーカスを移動</td><td>-</td></tr>
|
||||
<tr><td><kbd class="key">Enter</kbd>, <kbd class="key">Space</kbd>, <kbd class="key">+</kbd></td><td>リアクション確定</td><td>-</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">Esc</kbd></td><td>リアクションするのをやめる</td><td>-</td></tr>
|
||||
<tr><td><kbd class="key">↑</kbd>, <kbd class="key">K</kbd></td><td>Déplacer le focus vers la réaction du dessus</td><td>-</td></tr>
|
||||
<tr><td><kbd class="key">↓</kbd>, <kbd class="key">J</kbd></td><td>Déplacer le focus vers la réaction du dessous</td><td>-</td></tr>
|
||||
<tr><td><kbd class="key">←</kbd>, <kbd class="key">H</kbd>, <kbd class="group"><kbd class="key">Shift</kbd> + <kbd class="key">Tab</kbd></kbd></td><td>Déplacer le focus vers la réaction de gauche</td><td>-</td></tr>
|
||||
<tr><td><kbd class="key">→</kbd>, <kbd class="key">L</kbd>, <kbd class="key">Tab</kbd></td><td>Déplacer le focus vers la réaction de droite</td><td>-</td></tr>
|
||||
<tr><td><kbd class="key">Enter</kbd>, <kbd class="key">Space</kbd>, <kbd class="key">+</kbd></td><td>Sélectionner la réaction</td><td>-</td></tr>
|
||||
<tr><td><kbd class="key">0</kbd>~<kbd class="key">9</kbd></td><td>Utiliser la réaction correspondant au chiffre</td><td>-</td></tr>
|
||||
<tr><td><kbd class="key">Esc</kbd></td><td>Annuler la réaction</td><td>-</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
# MFM
|
||||
MFMは、Misskey Flavored Markdownの略で、Misskeyの様々な場所で使用できる専用のマークアップ言語です。 MFMで使用可能な構文は[MFMチートシート](/mfm-cheat-sheet)で確認できます。
|
||||
MFM – abréviation de Misskey Flavored Markdown – est un langage Markdown spécifique utilisable ici et là dans Misskey. Vous pouvez vérifier les structures utilisables dans [l'antisèche MFM](/mfm-cheat-sheet).
|
||||
|
|
|
|||
|
|
@ -1,13 +1,13 @@
|
|||
# Mettre en sourdine
|
||||
# Ignorer
|
||||
|
||||
ユーザーをミュートすると、そのユーザーに関する次のコンテンツがMisskeyに表示されなくなります:
|
||||
Le contenu afférent à un utilisateur ne vous sera plus présenté dès lors que vous l'ignorez :
|
||||
|
||||
* タイムラインや投稿の検索結果内の、そのユーザーの投稿(およびそれらの投稿に対する返信やRenote)
|
||||
* そのユーザーからの通知
|
||||
* メッセージ履歴一覧内の、そのユーザーとのメッセージ履歴
|
||||
* les publications de cet utilisateur dans le fil ou les résultats de recherche, de même que ses réponses et Renotes ;
|
||||
* les notifications touchant à cet utilisateur ;
|
||||
* l'historique des messages avec cet utilisateur.
|
||||
|
||||
ユーザーをミュートするには、対象のユーザーのユーザーページに表示されている「ミュート」ボタンを押します。
|
||||
Pour ignorer un utilisateur, utilisez le bouton « ignorer » de sa page de profil.
|
||||
|
||||
ミュートを行ったことは相手に通知されず、ミュートされていることを知ることもできません。
|
||||
L'utilisateur que vous ignorez ne sera pas prévenu. De même, vous ne serez pas prévenu lorsque vous serez ignoré par un autre utilisateur.
|
||||
|
||||
設定>ミュート から、自分がミュートしているユーザー一覧を確認することができます。
|
||||
Vous pouvez vérifier la liste des utilisateurs ignorés depuis l'onglet « ignorés » de vos paramètres.
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
# Réactions
|
||||
他の人のノートに、絵文字を付けて簡単にあなたの反応を伝えられる機能です。 リアクションするには、ノートの + アイコンをクリックしてピッカーを表示し、絵文字を選択します。 リアクションには[カスタム絵文字](./custom-emoji)も使用できます。
|
||||
Les réactions vous permettent d'interagir facilement avec les notes des autres utilisateurs en y attribuant des émoticônes. Pour réagir, cliquez sur le « + » de la note afin d'afficher le panneau de sélection puis choisissez une émoticône. Il est également possible d'utiliser des [émoticônes personnalisées](./custom-emoji).
|
||||
|
||||
## リアクションピッカーのカスタマイズ
|
||||
ピッカーに表示される絵文字を自分好みにカスタマイズすることができます。 設定の「リアクション」で設定します。
|
||||
## Personnalisation du panneau de réactions
|
||||
Il est possible de choisir les émoticônes affichés dans le panneau de réactions dans l'onglet « réactions » des paramètres.
|
||||
|
||||
## リモート投稿へのリアクションについて
|
||||
リアクションはMisskeyオリジナルの機能であるため、リモートインスタンスがMisskeyでない限りは、ほとんどの場合「Like」としてアクティビティが送信されます。一般的にはLikeは「お気に入り」として実装されているようです。 また、相手がMisskeyであったとしても、カスタム絵文字リアクションは伝わらず、自動的に「👍」等にフォールバックされます。
|
||||
|
|
|
|||
|
|
@ -1,11 +1,11 @@
|
|||
# Thème
|
||||
|
||||
テーマを設定して、Misskeyクライアントの見た目を変更できます。
|
||||
Vous pouvez modifier l'apparence de votre client Misskey à l'aide de thèmes.
|
||||
|
||||
## テーマの設定
|
||||
設定 > テーマ
|
||||
## Paramètres de thème
|
||||
Paramètres > Thèmes
|
||||
|
||||
## テーマを作成する
|
||||
## Créer un thème
|
||||
テーマコードはJSON5で記述されたテーマオブジェクトです。 テーマは以下のようなオブジェクトです。
|
||||
``` js
|
||||
{
|
||||
|
|
@ -33,13 +33,13 @@
|
|||
|
||||
```
|
||||
|
||||
* `id` ... テーマの一意なID。UUIDをおすすめします。
|
||||
* `name` ... テーマ名
|
||||
* `author` ... テーマの作者
|
||||
* `desc` ... テーマの説明(オプション)
|
||||
* `base` ... 明るいテーマか、暗いテーマか
|
||||
* `light`にすると明るいテーマになり、`dark`にすると暗いテーマになります。
|
||||
* テーマはここで設定されたベーステーマを継承します。
|
||||
* `id` ... L'identifiant unique du thème. L'utilisation d'un UUID est recommandée ;
|
||||
* `name` ... Nom du thème ;
|
||||
* `author` ... Auteur du thème ;
|
||||
* `desc` ... Description du thème (facultatif) ;
|
||||
* `base` ... Thème clair ou sombre :
|
||||
* Sélectionnez `light` pour définir le thème comme thème clair et `dark` pour le définir comme sombre,
|
||||
* Le thème héritera des valeurs par défaut du thème spécifié ici ;
|
||||
* `props` ... テーマのスタイル定義。これから説明します。
|
||||
|
||||
### テーマのスタイル定義
|
||||
|
|
|
|||
|
|
@ -1,15 +1,15 @@
|
|||
# タイムラインの比較
|
||||
# Comparaison des fils
|
||||
|
||||
https://docs.google.com/spreadsheets/d/1lxQ2ugKrhz58Bg96HTDK_2F98BUritkMyIiBkOByjHA/edit?usp=sharing
|
||||
|
||||
## Principal
|
||||
自分のフォローしているユーザーの投稿
|
||||
Les publications des utilisateurs que vous suivez
|
||||
|
||||
## Local
|
||||
全てのローカルユーザーの「ホーム」指定されていない投稿
|
||||
Les publications des utilisateurs de votre instance. Les notes publiées avec le statut « principal » n'y sont pas affichées.
|
||||
|
||||
## Social
|
||||
自分のフォローしているユーザーの投稿と、全てのローカルユーザーの「ホーム」指定されていない投稿
|
||||
Regroupe le fil principal et le fil local
|
||||
|
||||
## Global
|
||||
全てのローカルユーザーの「ホーム」指定されていない投稿と、サーバーに届いた全てのリモートユーザーの「ホーム」指定されていない投稿
|
||||
Toutes les publications reçues par l'instance, qu'elles soient locales ou non. Les notes publiées avec le statut « principal » n'y sont pas affichées.
|
||||
|
|
|
|||
40
src/server/web/bios.css
Normal file
40
src/server/web/bios.css
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
* {
|
||||
font-family: Fira code, Fira Mono, Consolas, Menlo, Courier, monospace;
|
||||
}
|
||||
|
||||
html {
|
||||
background: #ffb4e1;
|
||||
}
|
||||
|
||||
main {
|
||||
background: #dedede;
|
||||
}
|
||||
main > .tabs {
|
||||
padding: 16px;
|
||||
border-bottom: solid 4px #c3c3c3;
|
||||
}
|
||||
|
||||
#lsEditor > .adder {
|
||||
margin: 16px;
|
||||
padding: 16px;
|
||||
border: solid 2px #c3c3c3;
|
||||
}
|
||||
#lsEditor > .adder > textarea {
|
||||
display: block;
|
||||
width: 100%;
|
||||
min-height: 5em;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
#lsEditor > .record {
|
||||
padding: 16px;
|
||||
border-bottom: solid 1px #c3c3c3;
|
||||
}
|
||||
#lsEditor > .record > header {
|
||||
font-weight: bold;
|
||||
}
|
||||
#lsEditor > .record > textarea {
|
||||
display: block;
|
||||
width: 100%;
|
||||
min-height: 5em;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
87
src/server/web/bios.js
Normal file
87
src/server/web/bios.js
Normal file
|
|
@ -0,0 +1,87 @@
|
|||
'use strict';
|
||||
|
||||
window.onload = async () => {
|
||||
const account = JSON.parse(localStorage.getItem('account'));
|
||||
const i = account.token;
|
||||
|
||||
const api = (endpoint, data = {}) => {
|
||||
const promise = new Promise((resolve, reject) => {
|
||||
// Append a credential
|
||||
if (i) data.i = i;
|
||||
|
||||
// Send request
|
||||
fetch(endpoint.indexOf('://') > -1 ? endpoint : `/api/${endpoint}`, {
|
||||
method: 'POST',
|
||||
body: JSON.stringify(data),
|
||||
credentials: 'omit',
|
||||
cache: 'no-cache'
|
||||
}).then(async (res) => {
|
||||
const body = res.status === 204 ? null : await res.json();
|
||||
|
||||
if (res.status === 200) {
|
||||
resolve(body);
|
||||
} else if (res.status === 204) {
|
||||
resolve();
|
||||
} else {
|
||||
reject(body.error);
|
||||
}
|
||||
}).catch(reject);
|
||||
});
|
||||
|
||||
return promise;
|
||||
};
|
||||
|
||||
const content = document.getElementById('content');
|
||||
|
||||
document.getElementById('ls').addEventListener('click', () => {
|
||||
content.innerHTML = '';
|
||||
|
||||
const lsEditor = document.createElement('div');
|
||||
lsEditor.id = 'lsEditor';
|
||||
|
||||
const adder = document.createElement('div');
|
||||
adder.classList.add('adder');
|
||||
const addKeyInput = document.createElement('input');
|
||||
const addValueTextarea = document.createElement('textarea');
|
||||
const addButton = document.createElement('button');
|
||||
addButton.textContent = 'add';
|
||||
addButton.addEventListener('click', () => {
|
||||
localStorage.setItem(addKeyInput.value, addValueTextarea.value);
|
||||
location.reload();
|
||||
});
|
||||
|
||||
adder.appendChild(addKeyInput);
|
||||
adder.appendChild(addValueTextarea);
|
||||
adder.appendChild(addButton);
|
||||
lsEditor.appendChild(adder);
|
||||
|
||||
for (let i = 0; i < localStorage.length; i++) {
|
||||
const k = localStorage.key(i);
|
||||
const record = document.createElement('div');
|
||||
record.classList.add('record');
|
||||
const header = document.createElement('header');
|
||||
header.textContent = k;
|
||||
const textarea = document.createElement('textarea');
|
||||
textarea.textContent = localStorage.getItem(k);
|
||||
const saveButton = document.createElement('button');
|
||||
saveButton.textContent = 'save';
|
||||
saveButton.addEventListener('click', () => {
|
||||
localStorage.setItem(k, textarea.value);
|
||||
location.reload();
|
||||
});
|
||||
const removeButton = document.createElement('button');
|
||||
removeButton.textContent = 'remove';
|
||||
removeButton.addEventListener('click', () => {
|
||||
localStorage.removeItem(k);
|
||||
location.reload();
|
||||
});
|
||||
record.appendChild(header);
|
||||
record.appendChild(textarea);
|
||||
record.appendChild(saveButton);
|
||||
record.appendChild(removeButton);
|
||||
lsEditor.appendChild(record);
|
||||
}
|
||||
|
||||
content.appendChild(lsEditor);
|
||||
});
|
||||
};
|
||||
|
|
@ -11,12 +11,15 @@
|
|||
|
||||
'use strict';
|
||||
|
||||
window.onerror = (e) => {
|
||||
document.documentElement.innerHTML = '問題が発生しました。';
|
||||
};
|
||||
|
||||
// ブロックの中に入れないと、定義した変数がブラウザのグローバルスコープに登録されてしまい邪魔なので
|
||||
(async () => {
|
||||
window.onerror = (e) => {
|
||||
renderError('SOMETHING_HAPPENED', e.toString());
|
||||
};
|
||||
window.onunhandledrejection = (e) => {
|
||||
renderError('SOMETHING_HAPPENED_IN_PROMISE', e.toString());
|
||||
};
|
||||
|
||||
const v = localStorage.getItem('v') || VERSION;
|
||||
|
||||
//#region Detect language & fetch translations
|
||||
|
|
@ -38,9 +41,17 @@ window.onerror = (e) => {
|
|||
}
|
||||
|
||||
const res = await fetch(`/assets/locales/${lang}.${v}.json`);
|
||||
localStorage.setItem('lang', lang);
|
||||
localStorage.setItem('locale', await res.text());
|
||||
localStorage.setItem('localeVersion', v);
|
||||
if (res.status === 200) {
|
||||
localStorage.setItem('lang', lang);
|
||||
localStorage.setItem('locale', await res.text());
|
||||
localStorage.setItem('localeVersion', v);
|
||||
} else if (localeOutdated) {
|
||||
// nop
|
||||
} else {
|
||||
renderError('LOCALE_FETCH_FAILED');
|
||||
checkUpdate();
|
||||
return;
|
||||
}
|
||||
}
|
||||
//#endregion
|
||||
|
||||
|
|
@ -56,24 +67,8 @@ window.onerror = (e) => {
|
|||
script.setAttribute('async', 'true');
|
||||
script.setAttribute('defer', 'true');
|
||||
script.addEventListener('error', async () => {
|
||||
document.documentElement.innerHTML = '読み込みに失敗しました。';
|
||||
|
||||
// TODO: サーバーが落ちている場合などのエラーハンドリング
|
||||
const res = await fetch('/api/meta', {
|
||||
method: 'POST',
|
||||
cache: 'no-cache'
|
||||
});
|
||||
|
||||
const meta = await res.json();
|
||||
|
||||
if (meta.version != v) {
|
||||
localStorage.setItem('v', meta.version);
|
||||
alert(
|
||||
'Misskeyの新しいバージョンがあります。ページを再度読み込みします。' +
|
||||
'\n\n' +
|
||||
'New version of Misskey available. The page will be reloaded.');
|
||||
refresh();
|
||||
}
|
||||
renderError('APP_FETCH_FAILED');
|
||||
checkUpdate();
|
||||
});
|
||||
head.appendChild(script);
|
||||
//#endregion
|
||||
|
|
@ -112,6 +107,44 @@ window.onerror = (e) => {
|
|||
document.documentElement.style.backgroundImage = `url(${wallpaper})`;
|
||||
}
|
||||
|
||||
// eslint-disable-next-line no-inner-declarations
|
||||
function renderError(code, details) {
|
||||
document.documentElement.innerHTML = `
|
||||
<h1>⚠エラーが発生しました</h1>
|
||||
<p>問題が解決しない場合は管理者までお問い合わせください。以下のオプションを試すこともできます:</p>
|
||||
<ul>
|
||||
<li><a href="/cli">簡易クライアント</a>を起動</li>
|
||||
<li><a href="/bios">BIOS</a>で修復を試みる</li>
|
||||
<li><a href="/flush">キャッシュをクリア</a>する</li>
|
||||
</ul>
|
||||
<hr>
|
||||
<code>ERROR CODE: ${code}</code>
|
||||
<details>
|
||||
${details}
|
||||
</details>
|
||||
`;
|
||||
}
|
||||
|
||||
// eslint-disable-next-line no-inner-declarations
|
||||
async function checkUpdate() {
|
||||
// TODO: サーバーが落ちている場合などのエラーハンドリング
|
||||
const res = await fetch('/api/meta', {
|
||||
method: 'POST',
|
||||
cache: 'no-cache'
|
||||
});
|
||||
|
||||
const meta = await res.json();
|
||||
|
||||
if (meta.version != v) {
|
||||
localStorage.setItem('v', meta.version);
|
||||
alert(
|
||||
'Misskeyの新しいバージョンがあります。ページを再度読み込みします。' +
|
||||
'\n\n' +
|
||||
'New version of Misskey available. The page will be reloaded.');
|
||||
refresh();
|
||||
}
|
||||
}
|
||||
|
||||
// eslint-disable-next-line no-inner-declarations
|
||||
function refresh() {
|
||||
// Random
|
||||
|
|
|
|||
19
src/server/web/cli.css
Normal file
19
src/server/web/cli.css
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
* {
|
||||
font-family: Fira code, Fira Mono, Consolas, Menlo, Courier, monospace;
|
||||
}
|
||||
|
||||
html {
|
||||
background: #ffb4e1;
|
||||
}
|
||||
|
||||
main {
|
||||
background: #dedede;
|
||||
}
|
||||
|
||||
#tl > div {
|
||||
padding: 16px;
|
||||
border-bottom: solid 1px #c3c3c3;
|
||||
}
|
||||
#tl > div > header {
|
||||
font-weight: bold;
|
||||
}
|
||||
55
src/server/web/cli.js
Normal file
55
src/server/web/cli.js
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
'use strict';
|
||||
|
||||
window.onload = async () => {
|
||||
const account = JSON.parse(localStorage.getItem('account'));
|
||||
const i = account.token;
|
||||
|
||||
const api = (endpoint, data = {}) => {
|
||||
const promise = new Promise((resolve, reject) => {
|
||||
// Append a credential
|
||||
if (i) data.i = i;
|
||||
|
||||
// Send request
|
||||
fetch(endpoint.indexOf('://') > -1 ? endpoint : `/api/${endpoint}`, {
|
||||
method: 'POST',
|
||||
body: JSON.stringify(data),
|
||||
credentials: 'omit',
|
||||
cache: 'no-cache'
|
||||
}).then(async (res) => {
|
||||
const body = res.status === 204 ? null : await res.json();
|
||||
|
||||
if (res.status === 200) {
|
||||
resolve(body);
|
||||
} else if (res.status === 204) {
|
||||
resolve();
|
||||
} else {
|
||||
reject(body.error);
|
||||
}
|
||||
}).catch(reject);
|
||||
});
|
||||
|
||||
return promise;
|
||||
};
|
||||
|
||||
document.getElementById('submit').addEventListener('click', () => {
|
||||
api('notes/create', {
|
||||
text: document.getElementById('text').value
|
||||
}).then(() => {
|
||||
location.reload();
|
||||
});
|
||||
});
|
||||
|
||||
api('notes/timeline').then(notes => {
|
||||
const tl = document.getElementById('tl');
|
||||
for (const note of notes) {
|
||||
const el = document.createElement('div');
|
||||
const name = document.createElement('header');
|
||||
name.textContent = `${note.user.name} @${note.user.username}`;
|
||||
const text = document.createElement('div');
|
||||
text.textContent = `${note.text}`;
|
||||
el.appendChild(name);
|
||||
el.appendChild(text);
|
||||
tl.appendChild(el);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
|
@ -376,6 +376,18 @@ router.get('/info', async ctx => {
|
|||
});
|
||||
});
|
||||
|
||||
router.get('/bios', async ctx => {
|
||||
await ctx.render('bios', {
|
||||
version: config.version,
|
||||
});
|
||||
});
|
||||
|
||||
router.get('/cli', async ctx => {
|
||||
await ctx.render('cli', {
|
||||
version: config.version,
|
||||
});
|
||||
});
|
||||
|
||||
const override = (source: string, target: string, depth: number = 0) =>
|
||||
[, ...target.split('/').filter(x => x), ...source.split('/').filter(x => x).splice(depth)].join('/');
|
||||
|
||||
|
|
|
|||
20
src/server/web/views/bios.pug
Normal file
20
src/server/web/views/bios.pug
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
doctype html
|
||||
|
||||
html
|
||||
|
||||
head
|
||||
meta(charset='utf-8')
|
||||
meta(name='application-name' content='Misskey')
|
||||
title Misskey BIOS
|
||||
style
|
||||
include ../bios.css
|
||||
script
|
||||
include ../bios.js
|
||||
|
||||
body
|
||||
header
|
||||
h1 Misskey BIOS #{version}
|
||||
main
|
||||
div.tabs
|
||||
button#ls edit local storage
|
||||
div#content
|
||||
21
src/server/web/views/cli.pug
Normal file
21
src/server/web/views/cli.pug
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
doctype html
|
||||
|
||||
html
|
||||
|
||||
head
|
||||
meta(charset='utf-8')
|
||||
meta(name='application-name' content='Misskey')
|
||||
title Misskey Cli
|
||||
style
|
||||
include ../cli.css
|
||||
script
|
||||
include ../cli.js
|
||||
|
||||
body
|
||||
header
|
||||
h1 Misskey Cli #{version}
|
||||
main
|
||||
div#form
|
||||
textarea#text
|
||||
button#submit submit
|
||||
div#tl
|
||||
Loading…
Add table
Add a link
Reference in a new issue