Compare commits

..

17 Commits

Author SHA1 Message Date
syuilo
3ffd6ff5a2 2.31.0 2018-06-08 08:39:04 +09:00
syuilo
b05feb5bf7 MisskeyDeck: ドラッグでカラムを入れ替えられるように 2018-06-08 08:38:32 +09:00
syuilo
fa171f237d 2.30.2 2018-06-08 08:06:19 +09:00
syuilo
f2ccb684eb 🎨 2018-06-08 08:05:25 +09:00
syuilo
ffea6522ac Merge pull request #1683 from syuilo/l10n_master
New Crowdin translations
2018-06-08 07:44:17 +09:00
syuilo
3d40a7df00 ✌️ 2018-06-08 07:43:12 +09:00
syuilo
638c41476b New translations ja.yml (German) 2018-06-08 07:40:48 +09:00
syuilo
c6d3088374 Merge pull request #1682 from syuilo/l10n_master
New Crowdin translations
2018-06-08 07:26:58 +09:00
syuilo
0f93be9dd4 New translations ja.yml (German) 2018-06-08 07:01:06 +09:00
syuilo
f59982c9c5 New translations ja.yml (German) 2018-06-08 06:51:25 +09:00
syuilo
dff67a5e54 New translations ja.yml (German) 2018-06-08 06:41:05 +09:00
syuilo
6adcc3b2ed New translations ja.yml (German) 2018-06-08 06:31:09 +09:00
syuilo
877ed3663c New translations ja.yml (German) 2018-06-08 06:21:24 +09:00
syuilo
6000a82917 New translations ja.yml (German) 2018-06-08 06:11:02 +09:00
syuilo
6805f9b3e0 New translations ja.yml (German) 2018-06-08 06:01:10 +09:00
syuilo
1366c785f9 Update README.md 2018-06-08 05:54:42 +09:00
syuilo
70540b4500 New translations ja.yml (German) 2018-06-08 05:51:01 +09:00
10 changed files with 151 additions and 117 deletions

View File

@@ -46,18 +46,9 @@ If you want to...
[![Backers][backers-image]][support-url]
[![Sponsors][sponsors-image]][support-url]
:mortar_board: Notable contributors
----------------------------------------------------------------
| ![syuilo][syuilo-icon] | ![Morisawa Aya][ayamorisawa-icon] | ![otofune][otofune-icon] | ![akihikodaki][akihikodaki-icon] | ![tamaina][tamaina-icon] | ![rinsuki][rinsuki-icon] |
|:-:|:-:|:-:|:-:|:-:|:-:|
| [syuilo][syuilo-link]<br>Owner | [Aya Morisawa][ayamorisawa-link]<br>Collaborator | [otofune][otofune-link]<br>Collaborator | [akihikodaki][akihikodaki-link] | [tamaina][tamaina-link] | [rinsuki][rinsuki-link] |
[List of all contributors](https://github.com/syuilo/misskey/graphs/contributors)
### :earth_americas: Translators
| ![][mirro-san-icon] | ![][Conan-kun-icon] | ![][m4sk1n-icon] |
|:-:|:-:|:-:|
| [Mirro][mirro-san-link]<br>English, French | [Asriel][Conan-kun-link]<br>English, French | [Marcin Mikołajczak][m4sk1n-link]<br>Polish |
| ![][ooo-icon] |
|:-:|
| [ooo][ooo-link] |
:four_leaf_clover: Copyright
----------------------------------------------------------------
@@ -85,23 +76,8 @@ Misskey is an open-source software licensed under [GNU AGPLv3](LICENSE).
[sponsors-image]: https://opencollective.com/misskey/sponsors.svg
[support-url]: https://opencollective.com/misskey#support
<!-- Contributors Info -->
[syuilo-link]: https://syuilo.com
[syuilo-icon]: https://avatars2.githubusercontent.com/u/4439005?v=3&s=70
[ayamorisawa-link]: https://github.com/ayamorisawa
[ayamorisawa-icon]: https://avatars0.githubusercontent.com/u/10798641?v=3&s=70
[otofune-link]: https://github.com/otofune
[otofune-icon]: https://avatars0.githubusercontent.com/u/15062473?v=3&s=70
[akihikodaki-link]: https://github.com/akihikodaki
[akihikodaki-icon]: https://avatars2.githubusercontent.com/u/17036990?s=70&v=4
[rinsuki-link]: https://github.com/rinsuki
[rinsuki-icon]: https://avatars0.githubusercontent.com/u/6533808?s=70&v=4
[tamaina-link]: https://github.com/tamaina
[tamaina-icon]: https://avatars1.githubusercontent.com/u/7973572?s=70&v=4
[mirro-san-link]: https://github.com/mirro-san
[mirro-san-icon]: https://avatars1.githubusercontent.com/u/17948612?s=70&v=4
[Conan-kun-link]: https://github.com/Conan-kun
[Conan-kun-icon]: https://avatars3.githubusercontent.com/u/30003708?s=70&v=4
[m4sk1n-link]: https://github.com/m4sk1n
[m4sk1n-icon]: https://avatars3.githubusercontent.com/u/21127288?s=70&v=4
[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

View File

@@ -72,17 +72,17 @@ common:
deck:
widgets: "Widget hinzufügen:"
home: "Startseite"
local: "ローカル"
global: "グローバル"
notifications: "通知"
list: "リスト"
swap-left: "左に移動"
swap-right: "右に移動"
swap-up: "上に移動"
swap-down: "下に移動"
remove: "カラムを削除"
add-column: "カラムを追加"
rename: "名前を変更"
local: "Lokal"
global: "Global"
notifications: "Mitteilungen"
list: "Listen"
swap-left: "Nach links"
swap-right: "Nach rechts"
swap-up: "Nach oben"
swap-down: "Nach unten"
remove: "Spalte löschen"
add-column: "Eine Spalte hinzufügen"
rename: "Umbenennen"
stack-left: "左に重ねる"
pop-right: "右に出す"
common/views/components/connect-failed.vue:
@@ -203,7 +203,7 @@ common/views/components/uploader.vue:
common/views/components/visibility-chooser.vue:
public: "Öffentlich"
home: "Home"
home-desc: "ホームタイムラインにのみ公開"
home-desc: "Nur auf die Startseite posten"
followers: "Folgende"
followers-desc: "Nur für diejenigen sichtbar, die dir folgen"
specified: "Direkt"
@@ -264,7 +264,7 @@ desktop/views/components/drive.file.vue:
rename: "Umbenennen"
copy-url: "URL kopieren"
download: "Download"
else-files: "その他..."
else-files: "Anderes…"
set-as-avatar: "Als Avatar festlegen"
set-as-banner: "Setze als Banner"
open-in-app: "In der App öffnen"
@@ -306,10 +306,10 @@ desktop/views/components/drive.vue:
upload: "Eine Datei hochladen"
url-upload: "Von einer URL hochladen"
desktop/views/components/follow-button.vue:
following: "フォロー中"
follow: "フォロー"
request-pending: "フォロー許可待ち"
follow-request: "フォロー申請"
following: "Folge ich"
follow: "Folgen"
request-pending: "Ausstehend"
follow-request: "Follower-Anfragen"
desktop/views/components/followers-window.vue:
followers: "{} のフォロワー"
desktop/views/components/followers.vue:
@@ -317,18 +317,18 @@ desktop/views/components/followers.vue:
desktop/views/components/following-window.vue:
following: "{} のフォロー"
desktop/views/components/following.vue:
empty: "フォロー中のユーザーはいないようです。"
empty: "Du folgst niemanden"
desktop/views/components/friends-maker.vue:
title: "気になるユーザーをフォロー:"
empty: "おすすめのユーザーは見つかりませんでした。"
fetching: "読み込んでいます"
refresh: "もっと見る"
close: "閉じる"
title: "Wem folgen?"
empty: "Der ausgewählte Benutzer konnte nicht gefunden werden."
fetching: "Lade…"
refresh: "Mehr"
close: "Schließen"
desktop/views/components/game-window.vue:
game: "オセロ"
desktop/views/components/home.vue:
done: "完了"
add-widget: "ウィジェットを追加:"
done: "Verbunden"
add-widget: "Widget hinzufügen:"
add: "Hinzufügen"
desktop/views/input-dialog.vue:
cancel: "Abbrechen"
@@ -339,9 +339,9 @@ desktop/views/components/messaging-window.vue:
title: "Nachrichten"
desktop/views/components/note-detail.vue:
more: "Lade weitere Konversationen"
private: "この投稿は非公開です"
deleted: "この投稿は削除されました"
reposted-by: "{}がRenote"
private: "Dieser Post ist privat"
deleted: "Dieser Beitrag wurde entfernt"
reposted-by: "Repostet von {}"
location: "Ort"
renote: "Anmerkung"
add-reaction: "Reaktion hinzufügen"
@@ -351,8 +351,8 @@ desktop/views/components/notes.note.vue:
renote: "Anmerken"
add-reaction: "Eine Reaktion hinzufügen"
detail: "Zeige Details"
private: "この投稿は非公開です"
deleted: "この投稿は削除されました"
private: "Dieser Beitrag ist eine privat"
deleted: "Dieser Beitrag wurde entfernt"
desktop/views/components/notes.vue:
error: "Laden fehlgeschlagen."
retry: "Erneut versuchen"
@@ -393,34 +393,34 @@ desktop/views/components/renote-form.vue:
success: "Weitergesagt!"
failure: "Weitersagen fehlgeschlagen"
desktop/views/components/renote-form-window.vue:
title: "この投稿をRenoteしますか"
title: "Bist du dir sicher, dass du das reposten willst?"
desktop/views/components/settings-window.vue:
settings: "設定"
settings: "Experimentelles"
desktop/views/components/settings.vue:
profile: "プロフィール"
notification: "通知"
apps: "アプリ"
mute: "ミュート"
drive: "ドライブ"
notification: "Mitteilungen"
apps: "In App öffnen"
mute: "Stummschalten"
drive: "Dateien vom Drive anfügen"
security: "セキュリティ"
signin: "サインイン履歴"
password: "パスワード"
2fa: "二段階認証"
other: "その他"
license: "ライセンス"
behaviour: "動作"
behaviour: "Verhalten"
fetch-on-scroll: "スクロールで自動読み込み"
fetch-on-scroll-desc: "ページを下までスクロールしたときに自動で追加のコンテンツを読み込みます。"
auto-popout: "ウィンドウの自動ポップアウト"
auto-popout-desc: "ウィンドウが開かれるとき、ポップアウト(ブラウザ外に切り離す)可能なら自動でポップアウトします。この設定はブラウザに記憶されます。"
advanced: "詳細設定"
api-via-stream: "ストリームを経由したAPIリクエスト"
advanced: "Erweiterte Einstellungen"
api-via-stream: "API-Anfrage via stream"
api-via-stream-desc: "この設定をオンにすると、websocket接続を経由してAPIリクエストが行われます(パフォーマンス向上が期待できます)。オフにすると、ネイティブの fetch APIが利用されます。この設定はこのデバイスのみ有効です。"
display: "デザインと表示"
customize: "ホームをカスタマイズ"
dark-mode: "ダークモード"
circle-icons: "円形のアイコンを使用"
gradient-window-header: "ウィンドウのタイトルバーにグラデーションを使用"
display: "Erscheinungsbild und Anzeige"
customize: "Startseite anpassen"
dark-mode: "Nacht Modus"
circle-icons: "Kreisförmige Icons"
gradient-window-header: "Übergang in Fensterköpfen"
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
show-reply-target: "リプライ先を表示する"
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
@@ -432,12 +432,12 @@ desktop/views/components/settings.vue:
enable-sounds-desc: "投稿やメッセージを送受信したときなどにサウンドを再生します。この設定はブラウザに記憶されます。"
volume: "ボリューム"
test: "テスト"
mobile: "モバイル"
disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
language: "言語"
pick-language: "言語を選択"
recommended: "推奨"
auto: "自動"
mobile: "Mobil"
disable-via-mobile: "Diesen Beitrag nicht mit 'vom Handy' absenden"
language: "Sprache"
pick-language: "Sprache auswählen"
recommended: "Empfohlen"
auto: "Automatisch"
specify-language: "言語を指定"
language-desc: "変更はページの再度読み込み後に反映されます。"
cache: "キャッシュ"
@@ -563,7 +563,7 @@ desktop/views/components/users-list.vue:
all: "すべて"
iknow: "知り合い"
load-more: "もっと"
fetching: "読み込んでいます"
fetching: "Lade…"
desktop/views/components/users-list-item.vue:
followed: "フォローされています"
desktop/views/components/window.vue:
@@ -685,7 +685,7 @@ mobile/views/components/follow-button.vue:
mobile/views/components/friends-maker.vue:
title: "気になるユーザーをフォロー"
empty: "おすすめのユーザーは見つかりませんでした。"
fetching: "読み込んでいます"
fetching: "Lade…"
refresh: "もっと見る"
close: "閉じる"
mobile/views/components/note.vue:

View File

@@ -1,8 +1,8 @@
{
"name": "misskey",
"author": "syuilo <i@syuilo.com>",
"version": "2.30.1",
"clientVersion": "1.0.6259",
"version": "2.31.0",
"clientVersion": "1.0.6276",
"codename": "nighthike",
"main": "./built/index.js",
"private": true,

View File

@@ -1,10 +1,10 @@
<template>
<x-widgets-column v-if="column.type == 'widgets'" :column="column" :is-stacked="isStacked" :is-active="isActive"/>
<x-notifications-column v-else-if="column.type == 'notifications'" :column="column" :is-stacked="isStacked" :is-active="isActive"/>
<x-tl-column v-else-if="column.type == 'home'" :column="column" :is-stacked="isStacked" :is-active="isActive"/>
<x-tl-column v-else-if="column.type == 'local'" :column="column" :is-stacked="isStacked" :is-active="isActive"/>
<x-tl-column v-else-if="column.type == 'global'" :column="column" :is-stacked="isStacked" :is-active="isActive"/>
<x-tl-column v-else-if="column.type == 'list'" :column="column" :is-stacked="isStacked" :is-active="isActive"/>
<x-widgets-column v-if="column.type == 'widgets'" :column="column" :is-stacked="isStacked"/>
<x-notifications-column v-else-if="column.type == 'notifications'" :column="column" :is-stacked="isStacked"/>
<x-tl-column v-else-if="column.type == 'home'" :column="column" :is-stacked="isStacked"/>
<x-tl-column v-else-if="column.type == 'local'" :column="column" :is-stacked="isStacked"/>
<x-tl-column v-else-if="column.type == 'global'" :column="column" :is-stacked="isStacked"/>
<x-tl-column v-else-if="column.type == 'list'" :column="column" :is-stacked="isStacked"/>
</template>
<script lang="ts">
@@ -29,11 +29,6 @@ export default Vue.extend({
type: Boolean,
required: false,
default: false
},
isActive: {
type: Boolean,
required: false,
default: true
}
}
});

View File

@@ -1,6 +1,15 @@
<template>
<div class="dnpfarvgbnfmyzbdquhhzyxcmstpdqzs" :class="{ naked, narrow, active, isStacked }">
<header :class="{ indicate: count > 0 }" @click="toggleActive">
<div class="dnpfarvgbnfmyzbdquhhzyxcmstpdqzs" :class="{ naked, narrow, active, isStacked, draghover, dragging }">
<header :class="{ indicate: count > 0 }"
draggable="true"
@click="toggleActive"
@dragstart="onDragstart"
@dragend="onDragend"
@dragover.prevent.stop="onDragover"
@dragenter.prevent="onDragenter"
@dragleave="onDragleave"
@drop.prevent.stop="onDrop"
>
<slot name="header"></slot>
<span class="count" v-if="count > 0">({{ count }})</span>
<button ref="menu" @click.stop="showMenu">%fa:caret-down%</button>
@@ -25,10 +34,6 @@ export default Vue.extend({
type: Boolean,
required: true
},
isActive: {
type: Boolean,
required: true
},
name: {
type: String,
required: false
@@ -57,7 +62,9 @@ export default Vue.extend({
data() {
return {
count: 0,
active: this.isActive
active: true,
dragging: false,
draghover: false
};
},
@@ -166,6 +173,49 @@ export default Vue.extend({
compact: false,
items
});
},
onDragstart(e) {
e.dataTransfer.effectAllowed = 'move';
e.dataTransfer.setData('mk-deck-column', this.column.id);
this.dragging = true;
},
onDragend(e) {
this.dragging = false;
},
onDragover(e) {
// 自分自身がドラッグされている場合
if (this.dragging) {
// 自分自身にはドロップさせない
e.dataTransfer.dropEffect = 'none';
return;
}
const isDeckColumn = e.dataTransfer.types[0] == 'mk-deck-column';
e.dataTransfer.dropEffect = isDeckColumn ? 'move' : 'none';
},
onDragenter() {
if (!this.dragging) this.draghover = true;
},
onDragleave() {
this.draghover = false;
},
onDrop(e) {
this.draghover = false;
const id = e.dataTransfer.getData('mk-deck-column');
if (id != null && id != '') {
this.$store.dispatch('settings/swapDeckColumn', {
a: this.column.id,
b: id
});
}
}
}
});
@@ -185,6 +235,10 @@ root(isDark)
box-shadow 0 2px 16px rgba(#000, 0.1)
overflow hidden
&.draghover
&.dragging
box-shadow 0 0 0 2px rgba($theme-color, 0.7)
&:not(.active)
flex-basis $header-height
min-height $header-height
@@ -212,10 +266,14 @@ root(isDark)
color isDark ? #e3e5e8 : #888
background isDark ? #313543 : #fff
box-shadow 0 1px rgba(#000, 0.15)
cursor pointer
&, *
user-select none
*:not(button)
pointer-events none
&.indicate
box-shadow 0 3px 0 0 $theme-color
@@ -233,6 +291,7 @@ root(isDark)
right 0
width $header-height
line-height $header-height
font-size 16px
color isDark ? #9baec8 : #ccc
&:hover

View File

@@ -1,5 +1,5 @@
<template>
<x-column :name="name" :column="column" :is-stacked="isStacked" :is-active="isActive">
<x-column :name="name" :column="column" :is-stacked="isStacked">
<span slot="header">%fa:bell R%{{ name }}</span>
<x-notifications/>
@@ -25,10 +25,6 @@ export default Vue.extend({
isStacked: {
type: Boolean,
required: true
},
isActive: {
type: Boolean,
required: true
}
},

View File

@@ -1,5 +1,5 @@
<template>
<x-column :menu="menu" :name="name" :column="column" :is-stacked="isStacked" :is-active="isActive">
<x-column :menu="menu" :name="name" :column="column" :is-stacked="isStacked">
<span slot="header">
<template v-if="column.type == 'home'">%fa:home%</template>
<template v-if="column.type == 'local'">%fa:R comments%</template>
@@ -38,10 +38,6 @@ export default Vue.extend({
isStacked: {
type: Boolean,
required: true
},
isActive: {
type: Boolean,
required: true
}
},

View File

@@ -4,7 +4,7 @@
<template v-for="ids in layout">
<div v-if="ids.length > 1" class="folder">
<template v-for="id, i in ids">
<x-column-core :ref="id" :key="id" :column="columns.find(c => c.id == id)" :is-stacked="true" :is-active="i == 0"/>
<x-column-core :ref="id" :key="id" :column="columns.find(c => c.id == id)" :is-stacked="true"/>
</template>
</div>
<x-column-core v-else :ref="ids[0]" :key="ids[0]" :column="columns.find(c => c.id == ids[0])"/>

View File

@@ -1,5 +1,5 @@
<template>
<x-column :menu="menu" :naked="true" :narrow="true" :name="name" :column="column" :is-stacked="isStacked" :is-active="isActive" class="wtdtxvecapixsepjtcupubtsmometobz">
<x-column :menu="menu" :naked="true" :narrow="true" :name="name" :column="column" :is-stacked="isStacked" class="wtdtxvecapixsepjtcupubtsmometobz">
<span slot="header">%fa:calculator%{{ name }}</span>
<div class="gqpwvtwtprsbmnssnbicggtwqhmylhnq">
@@ -72,10 +72,6 @@ export default Vue.extend({
isStacked: {
type: Boolean,
required: true
},
isActive: {
type: Boolean,
required: true
}
},

View File

@@ -182,6 +182,17 @@ export default (os: MiOS) => new Vuex.Store({
state.deck.layout = state.deck.layout.map(ids => ids.filter(x => x != id));
},
swapDeckColumn(state, x) {
const a = x.a;
const b = x.b;
const aX = state.deck.layout.findIndex(ids => ids.indexOf(a) != -1);
const aY = state.deck.layout[aX].findIndex(id => id == a);
const bX = state.deck.layout.findIndex(ids => ids.indexOf(b) != -1);
const bY = state.deck.layout[bX].findIndex(id => id == b);
state.deck.layout[aX][aY] = b;
state.deck.layout[bX][bY] = a;
},
swapLeftDeckColumn(state, id) {
state.deck.layout.some((ids, i) => {
if (ids.indexOf(id) != -1) {
@@ -306,6 +317,11 @@ export default (os: MiOS) => new Vuex.Store({
ctx.dispatch('saveDeck');
},
swapDeckColumn(ctx, id) {
ctx.commit('swapDeckColumn', id);
ctx.dispatch('saveDeck');
},
swapLeftDeckColumn(ctx, id) {
ctx.commit('swapLeftDeckColumn', id);
ctx.dispatch('saveDeck');