-
+
:sparkles: Features
----------------------------------------------------------------
@@ -26,7 +24,7 @@ ultimately sophisticated professional microblogging software.
* and widgets!
* Private messages
* Mute
-* Streaming
+* Real-time timelines
* ActivityPub compatible
and more! You can see it with your own eyes at [misskey.xyz](https://misskey.xyz).
@@ -49,9 +47,9 @@ If you want to...
[![Backers][backers-image]][support-url]
[![Sponsors][sponsors-image]][support-url]
-| ![][ooo-icon] |
-|:-:|
-| [ooo][ooo-link] |
+| ![][nagarus-icon] | ![][dansup-icon] |
+|:-:|:-:|
+| [nagarus][nagarus-link] | [dansup][dansup-link] |
:four_leaf_clover: Copyright
----------------------------------------------------------------
@@ -67,9 +65,6 @@ Misskey is an open-source software licensed under [GNU AGPLv3](LICENSE).
[travis-badge]: http://img.shields.io/travis/syuilo/misskey/master.svg?style=flat-square
[dependencies-link]: https://david-dm.org/syuilo/misskey
[dependencies-badge]: https://img.shields.io/david/syuilo/misskey.svg?style=flat-square
-[himasaku]: https://himasaku.net
-[himawari-badge]: https://img.shields.io/badge/%E5%8F%A4%E8%B0%B7-%E5%90%91%E6%97%A5%E8%91%B5-1684c5.svg?style=flat-square
-[sakurako-badge]: https://img.shields.io/badge/%E5%A4%A7%E5%AE%A4-%E6%AB%BB%E5%AD%90-efb02a.svg?style=flat-square
[backer-url]: #backers
[backer-badge]: https://opencollective.com/misskey/backers/badge.svg
@@ -82,5 +77,8 @@ Misskey is an open-source software licensed under [GNU AGPLv3](LICENSE).
[syuilo-link]: https://syuilo.com
[syuilo-icon]: https://avatars2.githubusercontent.com/u/4439005?v=3&s=70
-[ooo-link]: https://www.patreon.com/user/creators?u=11601413
-[ooo-icon]: https://c10.patreonusercontent.com/3/eyJ2IjoiMSIsInciOjIwMH0%3D/patreon-media/user/11601413/20cb15f209924302b399b99d3c98b850?token-time=2145916800&token-hash=IO31nK6VZCMWBWU2VAk2c824BX2QZ4DNPKyHHZXS0iw%3D
+[nagarus-link]: https://www.patreon.com/user/creators?u=11601413
+[nagarus-icon]: https://c10.patreonusercontent.com/3/eyJ2IjoiMSIsInciOjIwMH0%3D/patreon-media/user/11601413/20cb15f209924302b399b99d3c98b850?token-time=2145916800&token-hash=IO31nK6VZCMWBWU2VAk2c824BX2QZ4DNPKyHHZXS0iw%3D
+[dansup-link]: https://www.patreon.com/dansup
+[dansup-icon]: https://c10.patreonusercontent.com/3/eyJ2IjoiMSIsInciOjIwMH0%3D/patreon-media/user/4503830/ccf2cc867ea64de0b524bb2e24b9a1cb?token-time=2145916800&token-hash=opXAM_pnhUTuN1jCA6p_Nn_YsaqohY465YFjWFqMEEE%3D
+
diff --git a/DONATORS.md b/docs/DONATORS.md
similarity index 74%
rename from DONATORS.md
rename to docs/DONATORS.md
index 6fe5df04b..9da5c1a94 100644
--- a/DONATORS.md
+++ b/docs/DONATORS.md
@@ -22,8 +22,4 @@ The list of people who have sent donation for Misskey.
---
-If your name is missing, please contact us!
-
-If you want to donate to Misskey, please get in touch with [@syuilo][syuilo-link].
-
-[syuilo-link]: https://syuilo.com
+If your name is missing, please contact us!
diff --git a/docs/donate.ja.md b/docs/donate.ja.md
deleted file mode 100644
index b19d7bc37..000000000
--- a/docs/donate.ja.md
+++ /dev/null
@@ -1,26 +0,0 @@
-# Misskeyにカンパする方法
-Misskeyのサポートにご興味をお持ちいただきありがとうございます!
-Misskeyにカンパをしていただくと、貴方のお名前と好きなURLなどをMisskeyのリポジトリに刻む権利がもらえます。
-
-Misskeyにカンパして開発・運営をサポートするには、次のいくつかの方法があります:
-
-## ConoHaカードを購入する
-(本家)Misskeyは、ConoHaというVPSサービスを利用しています。ConoHaカードを購入して、
-カードに記載されているクーポンコードを syuilotan@yahoo.co.jp までお送りいただければ、
-そのクーポンをチャージしてサーバーの運営費に充てることができます。
-
-ConoHaカードについてはこちらをご覧ください: https://www.conoha.jp/conohacard/
-
-Amazonでも買えます: https://www.amazon.co.jp/dp/B01N9E3416
-
-## Amazonギフトカード
-これは間接的な方法です。
-
-## 銀行振込
-syuilotan@yahoo.co.jp までお問い合わせください。
-
-## 手渡し
-オフ会を行ったときなどに行使できる方法です。
-
-## その他
-なにかいいアイデアがあればお教えください。
diff --git a/locales/en.yml b/locales/en.yml
index 3b80c9b58..cdb179fe9 100644
--- a/locales/en.yml
+++ b/locales/en.yml
@@ -553,7 +553,7 @@ desktop/views/components/timeline.vue:
global: "Global"
list: "Lists"
desktop/views/components/ui.header.vue:
- welcome-back: "おかえりなさい、"
+ welcome-back: "Welcome back, "
desktop/views/components/ui.header.account.vue:
profile: "Your profile"
drive: "Drive"
diff --git a/locales/index.ts b/locales/index.ts
index 2ae84f30a..45b5df095 100644
--- a/locales/index.ts
+++ b/locales/index.ts
@@ -5,7 +5,7 @@
import * as fs from 'fs';
import * as yaml from 'js-yaml';
-export type LangKey = 'de' | 'en' | 'fr' | 'ja' | 'pl';
+export type LangKey = 'de' | 'en' | 'fr' | 'ja' | 'pl' | 'es';
export type LocaleObject = { [key: string]: any };
const loadLang = (lang: LangKey) => yaml.safeLoad(
@@ -18,7 +18,8 @@ const langs: { [key: string]: LocaleObject } = {
'en': loadLang('en'),
'fr': loadLang('fr'),
'ja': native,
- 'pl': loadLang('pl')
+ 'pl': loadLang('pl'),
+ 'es': loadLang('es')
};
Object.entries(langs).map(([, locale]) => {
diff --git a/locales/ja.yml b/locales/ja.yml
index f2a85eb4e..fc790d8c5 100644
--- a/locales/ja.yml
+++ b/locales/ja.yml
@@ -47,12 +47,22 @@ common:
e: "ここに書いてください"
f: "あなたが書くのを待っています..."
+ search: "検索"
delete: "削除"
loading: "読み込み中"
ok: "わかった"
+ update-available-title: "更新があります"
update-available: "Misskeyの新しいバージョンがあります({newer}。現在{current}を利用中)。ページを再度読み込みすると更新が適用されます。"
my-token-regenerated: "あなたのトークンが更新されたのでサインアウトします。"
i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
+ show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
+
+ reversi:
+ drawn: "引き分け"
+ my-turn: "あなたのターンです"
+ opponent-turn: "相手のターンです"
+ turn-of: "{}のターンです"
+ past-turn-of: "{}のターン"
widgets:
analog-clock: "アナログ時計"
@@ -270,6 +280,13 @@ common/views/widgets/memo.vue:
memo: "ここに書いて!"
save: "保存"
+common/views/pages/follow.vue:
+ signed-in-as: "{}としてサインイン中"
+ following: "フォロー中"
+ follow: "フォロー"
+ request-pending: "フォロー許可待ち"
+ follow-request: "フォロー申請"
+
desktop/views/components/activity.chart.vue:
total: "Black ... Total"
notes: "Blue ... Notes"
@@ -444,7 +461,7 @@ desktop/views/components/post-form.vue:
attach-media-from-local: "PCからメディアを添付"
attach-media-from-drive: "ドライブからメディアを添付"
attach-cancel: "添付取り消し"
- insert-a-kao: "v(‘ω’)v"
+ insert-a-kao: "v('ω')v"
create-poll: "アンケートを作成"
text-remain: "残り{}文字"
@@ -622,6 +639,9 @@ desktop/views/components/timeline.vue:
global: "グローバル"
list: "リスト"
+desktop/views/components/ui.header.vue:
+ welcome-back: "おかえりなさい、"
+
desktop/views/components/ui.header.account.vue:
profile: "プロフィール"
drive: "ドライブ"
@@ -727,7 +747,7 @@ desktop/views/pages/user/user.friends.vue:
loading: "読み込み中"
no-users: "よく話すユーザーはいません"
-desktop/views/pages/user/user.header.vue:
+desktop/views/pages/user/user.vue:
is-suspended: "このユーザーは凍結されています。"
is-remote: "このユーザーはリモートユーザーです。"
view-remote: "正確な情報を見る"
@@ -749,6 +769,12 @@ desktop/views/pages/user/user.profile.vue:
muted: "ミュートしています"
unmute: "ミュート解除"
+desktop/views/pages/user/user.header.vue:
+ posts: "投稿"
+ following: "フォロー"
+ followers: "フォロワー"
+ is-bot: "このアカウントはBotです"
+
desktop/views/pages/user/user.timeline.vue:
default: "投稿"
with-replies: "投稿と返信"
diff --git a/package.json b/package.json
index 9961782c9..7c84161a9 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
{
"name": "misskey",
"author": "syuilo ",
- "version": "4.3.0",
- "clientVersion": "1.0.6630",
+ "version": "4.14.0",
+ "clientVersion": "1.0.6815",
"codename": "nighthike",
"main": "./built/index.js",
"private": true,
@@ -33,7 +33,8 @@
"@types/bcryptjs": "2.4.1",
"@types/debug": "0.0.30",
"@types/deep-equal": "1.0.1",
- "@types/elasticsearch": "5.0.23",
+ "@types/elasticsearch": "5.0.24",
+ "@types/file-type": "5.2.1",
"@types/gm": "1.18.0",
"@types/gulp": "3.8.36",
"@types/gulp-htmlmin": "1.3.32",
@@ -42,51 +43,52 @@
"@types/gulp-replace": "0.0.31",
"@types/gulp-uglify": "3.0.5",
"@types/gulp-util": "3.0.34",
- "@types/inquirer": "0.0.41",
+ "@types/inquirer": "0.0.42",
"@types/is-root": "1.0.0",
"@types/is-url": "1.2.28",
"@types/js-yaml": "3.11.1",
- "@types/koa": "2.0.45",
- "@types/koa-bodyparser": "4.2.0",
+ "@types/jsdom": "11.0.6",
+ "@types/koa": "2.0.46",
+ "@types/koa-bodyparser": "5.0.0",
"@types/koa-compress": "2.0.8",
"@types/koa-favicon": "2.0.19",
"@types/koa-logger": "3.1.0",
"@types/koa-mount": "3.0.1",
"@types/koa-multer": "1.0.0",
- "@types/koa-router": "7.0.28",
+ "@types/koa-router": "7.0.30",
"@types/koa-send": "4.1.1",
"@types/koa-views": "2.0.3",
"@types/koa__cors": "2.2.2",
- "@types/kue": "0.11.8",
+ "@types/kue": "0.11.9",
"@types/license-checker": "15.0.0",
"@types/mkdirp": "0.5.2",
- "@types/mocha": "5.2.0",
- "@types/mongodb": "3.0.18",
+ "@types/mocha": "5.2.3",
+ "@types/mongodb": "3.0.21",
"@types/ms": "0.7.30",
- "@types/node": "10.1.2",
+ "@types/node": "10.3.6",
"@types/nopt": "3.0.29",
- "@types/parse5": "3.0.0",
+ "@types/parse5": "5.0.0",
"@types/pug": "2.0.4",
- "@types/qrcode": "0.8.1",
+ "@types/qrcode": "1.2.0",
"@types/ratelimiter": "2.1.28",
"@types/redis": "2.8.6",
- "@types/request": "2.47.0",
- "@types/request-promise-native": "1.0.14",
+ "@types/request": "2.47.1",
+ "@types/request-promise-native": "1.0.15",
"@types/rimraf": "2.0.2",
"@types/seedrandom": "2.4.27",
"@types/single-line-log": "1.1.0",
"@types/speakeasy": "2.0.2",
"@types/tmp": "0.0.33",
"@types/uuid": "3.4.3",
- "@types/webpack": "4.4.0",
+ "@types/webpack": "4.4.3",
"@types/webpack-stream": "3.2.10",
"@types/websocket": "0.0.39",
- "@types/ws": "5.1.1",
+ "@types/ws": "5.1.2",
"animejs": "2.2.0",
"autosize": "4.0.2",
"autwh": "0.1.0",
"bcryptjs": "2.4.3",
- "bootstrap-vue": "2.0.0-rc.6",
+ "bootstrap-vue": "2.0.0-rc.11",
"cafy": "8.0.0",
"chalk": "2.4.1",
"crc-32": "1.2.0",
@@ -95,12 +97,12 @@
"deep-equal": "1.0.1",
"deepcopy": "0.6.3",
"diskusage": "0.2.4",
- "dompurify": "1.0.4",
+ "dompurify": "1.0.5",
"elasticsearch": "15.0.0",
- "element-ui": "2.3.9",
+ "element-ui": "2.4.1",
"emojilib": "2.2.12",
"escape-regexp": "0.0.1",
- "eslint": "4.19.1",
+ "eslint": "5.0.1",
"eslint-plugin-vue": "4.5.0",
"eventemitter3": "3.1.0",
"exif-js": "2.3.0",
@@ -114,7 +116,7 @@
"gulp-imagemin": "4.1.0",
"gulp-mocha": "6.0.0",
"gulp-pug": "4.0.1",
- "gulp-rename": "1.2.3",
+ "gulp-rename": "1.3.0",
"gulp-replace": "1.0.0",
"gulp-sourcemaps": "2.6.4",
"gulp-stylus": "2.7.0",
@@ -122,14 +124,14 @@
"gulp-typescript": "4.0.2",
"gulp-uglify": "3.0.0",
"gulp-util": "3.0.8",
- "hard-source-webpack-plugin": "0.6.10",
+ "hard-source-webpack-plugin": "0.9.0",
"highlight.js": "9.12.0",
- "html-minifier": "3.5.16",
+ "html-minifier": "3.5.17",
"http-signature": "1.2.0",
- "inquirer": "5.2.0",
+ "inquirer": "6.0.0",
"is-root": "2.0.0",
"is-url": "1.2.4",
- "js-yaml": "3.11.0",
+ "js-yaml": "3.12.0",
"jsdom": "11.11.0",
"koa": "2.5.1",
"koa-bodyparser": "4.2.1",
@@ -140,11 +142,11 @@
"koa-mount": "3.0.0",
"koa-multer": "1.0.2",
"koa-router": "7.4.0",
- "koa-send": "4.1.3",
+ "koa-send": "5.0.0",
"koa-slow": "2.1.0",
"koa-views": "6.1.4",
"kue": "0.11.6",
- "license-checker": "20.0.0",
+ "license-checker": "20.1.0",
"loader-utils": "1.1.0",
"mecab-async": "0.1.2",
"mkdirp": "0.5.1",
@@ -155,7 +157,7 @@
"ms": "2.1.1",
"nan": "2.10.0",
"node-sass": "4.9.0",
- "node-sass-json-importer": "3.2.0",
+ "node-sass-json-importer": "3.3.1",
"nopt": "4.0.1",
"nprogress": "0.2.0",
"object-assign-deep": "0.4.0",
@@ -168,7 +170,7 @@
"pug": "2.0.3",
"punycode": "2.1.1",
"qrcode": "1.2.0",
- "ratelimiter": "3.0.3",
+ "ratelimiter": "3.1.0",
"recaptcha-promise": "0.1.3",
"reconnecting-websocket": "3.2.2",
"redis": "2.8.0",
@@ -177,7 +179,7 @@
"rimraf": "2.6.2",
"rndstr": "1.0.0",
"s-age": "1.1.2",
- "sass-loader": "7.0.1",
+ "sass-loader": "7.0.3",
"seedrandom": "2.4.3",
"single-line-log": "1.1.2",
"speakeasy": "2.0.0",
@@ -190,33 +192,38 @@
"tcp-port-used": "0.1.2",
"textarea-caret": "3.1.0",
"tmp": "0.0.33",
- "ts-loader": "4.3.0",
- "ts-node": "6.0.4",
+ "ts-loader": "4.4.1",
+ "ts-node": "7.0.0",
"tslint": "5.10.0",
- "typescript": "2.8.3",
- "typescript-eslint-parser": "15.0.0",
+ "typescript": "2.9.2",
+ "typescript-eslint-parser": "16.0.0",
"uglify-es": "3.3.9",
"url-loader": "1.0.1",
- "uuid": "3.2.1",
+ "uuid": "3.3.0",
"v-animate-css": "0.0.2",
"vue": "2.5.16",
- "vue-cropperjs": "2.2.0",
- "vue-js-modal": "1.3.13",
+ "vue-cropperjs": "2.2.1",
+ "vue-js-modal": "1.3.15",
"vue-json-tree-view": "2.1.4",
- "vue-loader": "15.2.1",
+ "vue-loader": "15.2.4",
"vue-router": "3.0.1",
"vue-template-compiler": "2.5.16",
"vuedraggable": "2.16.0",
"vuex": "3.0.1",
"vuex-persistedstate": "^2.5.4",
- "web-push": "3.3.1",
+ "web-push": "3.3.2",
"webfinger.js": "2.6.6",
- "webpack": "4.9.1",
- "webpack-cli": "2.1.4",
+ "webpack": "4.12.1",
+ "webpack-cli": "3.0.8",
"websocket": "1.0.26",
- "ws": "5.2.0",
- "xev": "2.0.1",
- "@types/file-type": "5.2.1",
- "@types/jsdom": "11.0.5"
+ "ws": "5.2.1",
+ "xev": "2.0.1"
+ },
+ "greenkeeper": {
+ "ignore": [
+ "deepcopy",
+ "cafy",
+ "@types/gulp"
+ ]
}
}
diff --git a/src/client/app/common/scripts/can-hide-text.ts b/src/client/app/common/scripts/can-hide-text.ts
deleted file mode 100644
index 4a4be8d9d..000000000
--- a/src/client/app/common/scripts/can-hide-text.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-export default function(note) {
- if (note.text == null) return true;
-
- let txt = note.text;
-
- if (note.media) {
- note.media.forEach(file => {
- txt = txt.replace(file.url, '');
- if (file.src) txt = txt.replace(file.src, '');
- });
-
- if (txt == '') return true;
- }
-
- return false;
-}
diff --git a/src/client/app/common/scripts/check-for-update.ts b/src/client/app/common/scripts/check-for-update.ts
index b5ba6916d..4445eefc3 100644
--- a/src/client/app/common/scripts/check-for-update.ts
+++ b/src/client/app/common/scripts/check-for-update.ts
@@ -23,7 +23,10 @@ export default async function(mios: MiOS, force = false, silent = false) {
}
if (!silent) {
- alert('%i18n:common.update-available%'.replace('{newer}', newer).replace('{current}', current));
+ mios.apis.dialog({
+ title: '%i18n:common.update-available-title%',
+ text: '%i18n:common.update-available%'.replace('{newer}', newer).replace('{current}', current)
+ });
}
return newer;
diff --git a/src/client/app/common/scripts/compose-notification.ts b/src/client/app/common/scripts/compose-notification.ts
index cc28f7599..2e58649ac 100644
--- a/src/client/app/common/scripts/compose-notification.ts
+++ b/src/client/app/common/scripts/compose-notification.ts
@@ -20,34 +20,6 @@ export default function(type, data): Notification {
icon: data.url + '?thumbnail&size=64'
};
- case 'mention':
- return {
- title: `${getUserName(data.user)}さんから:`,
- body: getNoteSummary(data),
- icon: data.user.avatarUrl + '?thumbnail&size=64'
- };
-
- case 'reply':
- return {
- title: `${getUserName(data.user)}さんから返信:`,
- body: getNoteSummary(data),
- icon: data.user.avatarUrl + '?thumbnail&size=64'
- };
-
- case 'quote':
- return {
- title: `${getUserName(data.user)}さんが引用:`,
- body: getNoteSummary(data),
- icon: data.user.avatarUrl + '?thumbnail&size=64'
- };
-
- case 'reaction':
- return {
- title: `${getUserName(data.user)}: ${getReactionEmoji(data.reaction)}:`,
- body: getNoteSummary(data.note),
- icon: data.user.avatarUrl + '?thumbnail&size=64'
- };
-
case 'unread_messaging_message':
return {
title: `${getUserName(data.user)}さんからメッセージ:`,
@@ -62,6 +34,40 @@ export default function(type, data): Notification {
icon: data.parent.avatarUrl + '?thumbnail&size=64'
};
+ case 'notification':
+ switch (data.type) {
+ case 'mention':
+ return {
+ title: `${getUserName(data.user)}さんから:`,
+ body: getNoteSummary(data),
+ icon: data.user.avatarUrl + '?thumbnail&size=64'
+ };
+
+ case 'reply':
+ return {
+ title: `${getUserName(data.user)}さんから返信:`,
+ body: getNoteSummary(data),
+ icon: data.user.avatarUrl + '?thumbnail&size=64'
+ };
+
+ case 'quote':
+ return {
+ title: `${getUserName(data.user)}さんが引用:`,
+ body: getNoteSummary(data),
+ icon: data.user.avatarUrl + '?thumbnail&size=64'
+ };
+
+ case 'reaction':
+ return {
+ title: `${getUserName(data.user)}: ${getReactionEmoji(data.reaction)}:`,
+ body: getNoteSummary(data.note),
+ icon: data.user.avatarUrl + '?thumbnail&size=64'
+ };
+
+ default:
+ return null;
+ }
+
default:
return null;
}
diff --git a/src/client/app/common/scripts/get-kao.ts b/src/client/app/common/scripts/get-kao.ts
index 2168c5be8..d38018751 100644
--- a/src/client/app/common/scripts/get-kao.ts
+++ b/src/client/app/common/scripts/get-kao.ts
@@ -1,5 +1,5 @@
export default () => [
'(=^・・^=)',
- 'v(‘ω’)v',
+ 'v('ω')v',
'🐡( \'-\' 🐡 )フグパンチ!!!!'
][Math.floor(Math.random() * 3)];
diff --git a/src/client/app/common/views/components/google.vue b/src/client/app/common/views/components/google.vue
index 92817d3c1..8272961ef 100644
--- a/src/client/app/common/views/components/google.vue
+++ b/src/client/app/common/views/components/google.vue
@@ -1,7 +1,7 @@
%i18n:@last-used-at%:
%fa:birthday-cake%{{ user.profile.birthday.replace('-', '年').replace('-', '月') + '日' }} ({{ age }}歳)
-%fa:B twitter%@{{ user.twitter.screenName }}
-%fa:angle-right%{{ user.notesCount }}投稿
-%fa:angle-right%{{ user.followingCount }}人をフォロー
-%fa:angle-right%{{ user.followersCount }}人のフォロワー
-%i18n:@last-used-at%: