Compare commits
9 Commits
11.0.0-bet
...
10.100.0
Author | SHA1 | Date | |
---|---|---|---|
![]() |
83b7010d6a | ||
![]() |
71654cbe47 | ||
![]() |
e8f96e848a | ||
![]() |
251abf21d4 | ||
![]() |
d103427932 | ||
![]() |
592cdfa910 | ||
![]() |
f2ad1a0406 | ||
![]() |
82af9320c0 | ||
![]() |
fceebf7388 |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -19,3 +19,4 @@ api-docs.json
|
|||||||
*.code-workspace
|
*.code-workspace
|
||||||
yarn.lock
|
yarn.lock
|
||||||
.DS_Store
|
.DS_Store
|
||||||
|
/files
|
||||||
|
@@ -5,6 +5,15 @@ If you encounter any problems with updating, please try the following:
|
|||||||
1. `npm run clean` or `npm run cleanall`
|
1. `npm run clean` or `npm run cleanall`
|
||||||
2. Retry update (Don't forget `npm i`)
|
2. Retry update (Don't forget `npm i`)
|
||||||
|
|
||||||
|
10.100.0
|
||||||
|
----------
|
||||||
|
* ユーザーリストでフォローボタンを表示するように
|
||||||
|
* ドライブのファイルのサムネイルを修正
|
||||||
|
* 投稿ウィジットでローカルのみの公開範囲で投稿できない問題を修正
|
||||||
|
* TLを遡った時に抜けがある時がある問題を修正
|
||||||
|
* ユーザータイムラインが投稿日時順ではなくなっているのを修正
|
||||||
|
* 10.99.0 でチャートのレンダリングがおかしい問題を修正
|
||||||
|
|
||||||
10.99.0
|
10.99.0
|
||||||
----------
|
----------
|
||||||
* manifest.json にインスタンス名を反映させるように
|
* manifest.json にインスタンス名を反映させるように
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "misskey",
|
"name": "misskey",
|
||||||
"author": "syuilo <i@syuilo.com>",
|
"author": "syuilo <i@syuilo.com>",
|
||||||
"version": "10.99.0",
|
"version": "10.100.0",
|
||||||
"codename": "nighthike",
|
"codename": "nighthike",
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
@@ -96,7 +96,7 @@
|
|||||||
"@types/websocket": "0.0.40",
|
"@types/websocket": "0.0.40",
|
||||||
"@types/ws": "6.0.1",
|
"@types/ws": "6.0.1",
|
||||||
"animejs": "3.0.1",
|
"animejs": "3.0.1",
|
||||||
"apexcharts": "3.6.5",
|
"apexcharts": "3.6.2",
|
||||||
"autobind-decorator": "2.4.0",
|
"autobind-decorator": "2.4.0",
|
||||||
"autosize": "4.0.2",
|
"autosize": "4.0.2",
|
||||||
"autwh": "0.1.0",
|
"autwh": "0.1.0",
|
||||||
|
@@ -8,7 +8,7 @@
|
|||||||
<div class="no-users" v-if="inited && us.length == 0">
|
<div class="no-users" v-if="inited && us.length == 0">
|
||||||
<p>{{ $t('no-users') }}</p>
|
<p>{{ $t('no-users') }}</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="user" v-for="user in us">
|
<div class="user" v-for="user in us" :key="user.id">
|
||||||
<mk-avatar class="avatar" :user="user"/>
|
<mk-avatar class="avatar" :user="user"/>
|
||||||
<div class="body" v-if="!iconOnly">
|
<div class="body" v-if="!iconOnly">
|
||||||
<div class="name">
|
<div class="name">
|
||||||
@@ -18,6 +18,7 @@
|
|||||||
<div class="description" v-if="user.description" :title="user.description">
|
<div class="description" v-if="user.description" :title="user.description">
|
||||||
<mfm :text="user.description" :is-note="false" :author="user" :i="$store.state.i" :custom-emojis="user.emojis" :should-break="false" :plain-text="true"/>
|
<mfm :text="user.description" :is-note="false" :author="user" :i="$store.state.i" :custom-emojis="user.emojis" :should-break="false" :plain-text="true"/>
|
||||||
</div>
|
</div>
|
||||||
|
<mk-follow-button class="follow-button" v-if="$store.getters.isSignedIn && user.id != $store.state.i.id" :user="user" mini/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<button class="more" :class="{ fetching: fetchingMoreUsers }" v-if="cursor != null" @click="fetchMoreUsers()" :disabled="fetchingMoreUsers">
|
<button class="more" :class="{ fetching: fetchingMoreUsers }" v-if="cursor != null" @click="fetchMoreUsers()" :disabled="fetchingMoreUsers">
|
||||||
@@ -160,6 +161,12 @@ export default Vue.extend({
|
|||||||
text-overflow ellipsis
|
text-overflow ellipsis
|
||||||
opacity 0.7
|
opacity 0.7
|
||||||
font-size 14px
|
font-size 14px
|
||||||
|
padding-right 40px
|
||||||
|
|
||||||
|
> .follow-button
|
||||||
|
position absolute
|
||||||
|
top 8px
|
||||||
|
right 0px
|
||||||
|
|
||||||
> .more
|
> .more
|
||||||
display block
|
display block
|
||||||
|
@@ -157,6 +157,7 @@ export default Vue.extend({
|
|||||||
// オーバーフローしたら古い投稿は捨てる
|
// オーバーフローしたら古い投稿は捨てる
|
||||||
if (this.notes.length >= displayLimit) {
|
if (this.notes.length >= displayLimit) {
|
||||||
this.notes = this.notes.slice(0, displayLimit);
|
this.notes = this.notes.slice(0, displayLimit);
|
||||||
|
this.cursor = this.notes[this.notes.length - 1].id
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
this.queue.push(note);
|
this.queue.push(note);
|
||||||
@@ -165,6 +166,7 @@ export default Vue.extend({
|
|||||||
|
|
||||||
append(note) {
|
append(note) {
|
||||||
this.notes.push(note);
|
this.notes.push(note);
|
||||||
|
this.cursor = this.notes[this.notes.length - 1].id
|
||||||
},
|
},
|
||||||
|
|
||||||
releaseQueue() {
|
releaseQueue() {
|
||||||
|
@@ -85,7 +85,7 @@ export default Vue.extend({
|
|||||||
this.makePromise = cursor => this.$root.api('users/notes', {
|
this.makePromise = cursor => this.$root.api('users/notes', {
|
||||||
userId: this.user.id,
|
userId: this.user.id,
|
||||||
limit: fetchLimit + 1,
|
limit: fetchLimit + 1,
|
||||||
untilId: cursor ? cursor : undefined,
|
untilDate: cursor ? cursor : new Date().getTime() + 1000 * 86400 * 365,
|
||||||
withFiles: this.withFiles,
|
withFiles: this.withFiles,
|
||||||
includeMyRenotes: this.$store.state.settings.showMyRenotes,
|
includeMyRenotes: this.$store.state.settings.showMyRenotes,
|
||||||
includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes,
|
includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes,
|
||||||
@@ -95,7 +95,7 @@ export default Vue.extend({
|
|||||||
notes.pop();
|
notes.pop();
|
||||||
return {
|
return {
|
||||||
notes: notes,
|
notes: notes,
|
||||||
cursor: notes[notes.length - 1].id
|
cursor: new Date(notes[notes.length - 1].createdAt).getTime()
|
||||||
};
|
};
|
||||||
} else {
|
} else {
|
||||||
return {
|
return {
|
||||||
|
@@ -176,10 +176,22 @@ export default define({
|
|||||||
post() {
|
post() {
|
||||||
this.posting = true;
|
this.posting = true;
|
||||||
|
|
||||||
|
let visibility = 'public';
|
||||||
|
let localOnly = false;
|
||||||
|
|
||||||
|
const m = this.$store.state.settings.defaultNoteVisibility.match(/^local-(.+)/);
|
||||||
|
if (m) {
|
||||||
|
visibility = m[1];
|
||||||
|
localOnly = true;
|
||||||
|
} else {
|
||||||
|
visibility = this.$store.state.settings.defaultNoteVisibility;
|
||||||
|
}
|
||||||
|
|
||||||
this.$root.api('notes/create', {
|
this.$root.api('notes/create', {
|
||||||
text: this.text == '' ? undefined : this.text,
|
text: this.text == '' ? undefined : this.text,
|
||||||
fileIds: this.files.length > 0 ? this.files.map(f => f.id) : undefined,
|
fileIds: this.files.length > 0 ? this.files.map(f => f.id) : undefined,
|
||||||
visibility: this.$store.state.settings.defaultNoteVisibility
|
visibility,
|
||||||
|
localOnly,
|
||||||
}).then(data => {
|
}).then(data => {
|
||||||
this.clear();
|
this.clear();
|
||||||
}).catch(err => {
|
}).catch(err => {
|
||||||
|
@@ -157,6 +157,7 @@ export default Vue.extend({
|
|||||||
// オーバーフローしたら古い投稿は捨てる
|
// オーバーフローしたら古い投稿は捨てる
|
||||||
if (this.notes.length >= displayLimit) {
|
if (this.notes.length >= displayLimit) {
|
||||||
this.notes = this.notes.slice(0, displayLimit);
|
this.notes = this.notes.slice(0, displayLimit);
|
||||||
|
this.cursor = this.notes[this.notes.length - 1].id
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
this.queue.push(note);
|
this.queue.push(note);
|
||||||
@@ -165,6 +166,7 @@ export default Vue.extend({
|
|||||||
|
|
||||||
append(note) {
|
append(note) {
|
||||||
this.notes.push(note);
|
this.notes.push(note);
|
||||||
|
this.cursor = this.notes[this.notes.length - 1].id
|
||||||
},
|
},
|
||||||
|
|
||||||
releaseQueue() {
|
releaseQueue() {
|
||||||
|
@@ -36,13 +36,13 @@ export default Vue.extend({
|
|||||||
includeReplies: this.mode == 'with-replies',
|
includeReplies: this.mode == 'with-replies',
|
||||||
includeMyRenotes: this.mode != 'my-posts',
|
includeMyRenotes: this.mode != 'my-posts',
|
||||||
withFiles: this.mode == 'with-media',
|
withFiles: this.mode == 'with-media',
|
||||||
untilId: cursor ? cursor : undefined
|
untilDate: cursor ? cursor : new Date().getTime() + 1000 * 86400 * 365
|
||||||
}).then(notes => {
|
}).then(notes => {
|
||||||
if (notes.length == fetchLimit + 1) {
|
if (notes.length == fetchLimit + 1) {
|
||||||
notes.pop();
|
notes.pop();
|
||||||
return {
|
return {
|
||||||
notes: notes,
|
notes: notes,
|
||||||
cursor: notes[notes.length - 1].id
|
cursor: new Date(notes[notes.length - 1].createdAt).getTime()
|
||||||
};
|
};
|
||||||
} else {
|
} else {
|
||||||
return {
|
return {
|
||||||
|
@@ -151,6 +151,7 @@ export default Vue.extend({
|
|||||||
// オーバーフローしたら古い投稿は捨てる
|
// オーバーフローしたら古い投稿は捨てる
|
||||||
if (this.notes.length >= displayLimit) {
|
if (this.notes.length >= displayLimit) {
|
||||||
this.notes = this.notes.slice(0, displayLimit);
|
this.notes = this.notes.slice(0, displayLimit);
|
||||||
|
this.cursor = this.notes[this.notes.length - 1].id
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
this.queue.push(note);
|
this.queue.push(note);
|
||||||
@@ -159,6 +160,7 @@ export default Vue.extend({
|
|||||||
|
|
||||||
append(note) {
|
append(note) {
|
||||||
this.notes.push(note);
|
this.notes.push(note);
|
||||||
|
this.cursor = this.notes[this.notes.length - 1].id
|
||||||
},
|
},
|
||||||
|
|
||||||
releaseQueue() {
|
releaseQueue() {
|
||||||
|
@@ -21,13 +21,13 @@ export default Vue.extend({
|
|||||||
userId: this.user.id,
|
userId: this.user.id,
|
||||||
limit: fetchLimit + 1,
|
limit: fetchLimit + 1,
|
||||||
withFiles: this.withMedia,
|
withFiles: this.withMedia,
|
||||||
untilId: cursor ? cursor : undefined
|
untilDate: cursor ? cursor : new Date().getTime() + 1000 * 86400 * 365
|
||||||
}).then(notes => {
|
}).then(notes => {
|
||||||
if (notes.length == fetchLimit + 1) {
|
if (notes.length == fetchLimit + 1) {
|
||||||
notes.pop();
|
notes.pop();
|
||||||
return {
|
return {
|
||||||
notes: notes,
|
notes: notes,
|
||||||
cursor: notes[notes.length - 1].id
|
cursor: new Date(notes[notes.length - 1].createdAt).getTime()
|
||||||
};
|
};
|
||||||
} else {
|
} else {
|
||||||
return {
|
return {
|
||||||
|
BIN
src/client/assets/thumbnail-not-available.png
Normal file
BIN
src/client/assets/thumbnail-not-available.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 5.6 KiB |
@@ -8,7 +8,7 @@ export default function(file: IDriveFile, thumbnail = false): string {
|
|||||||
|
|
||||||
if (file.metadata.withoutChunks) {
|
if (file.metadata.withoutChunks) {
|
||||||
if (thumbnail) {
|
if (thumbnail) {
|
||||||
return file.metadata.thumbnailUrl || file.metadata.webpublicUrl || (isImage ? file.metadata.url : null);
|
return file.metadata.thumbnailUrl || file.metadata.webpublicUrl || (isImage ? file.metadata.url : '/assets/thumbnail-not-available.png');
|
||||||
} else {
|
} else {
|
||||||
return file.metadata.webpublicUrl || file.metadata.url;
|
return file.metadata.webpublicUrl || file.metadata.url;
|
||||||
}
|
}
|
||||||
|
@@ -73,7 +73,7 @@ export default async function(ctx: Koa.BaseContext) {
|
|||||||
await sendRaw();
|
await sendRaw();
|
||||||
} else {
|
} else {
|
||||||
ctx.status = 404;
|
ctx.status = 404;
|
||||||
await send(ctx as any, '/dummy.png', { root: assets });
|
await send(ctx as any, '/thumbnail-not-available.png', { root: assets });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if ('web' in ctx.query) {
|
} else if ('web' in ctx.query) {
|
||||||
|
Reference in New Issue
Block a user