Merge branch 'develop' into bh-worker
This commit is contained in:
commit
3733b41afd
36
.github/workflows/storybook.yml
vendored
36
.github/workflows/storybook.yml
vendored
|
@ -2,8 +2,10 @@ name: Storybook
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches-ignore:
|
branches:
|
||||||
- l10n_develop
|
- master
|
||||||
|
- develop
|
||||||
|
pull_request_target:
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
|
@ -17,6 +19,9 @@ jobs:
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
submodules: true
|
submodules: true
|
||||||
|
- name: Checkout HEAD
|
||||||
|
if: github.event_name == 'pull_request'
|
||||||
|
run: git checkout ${{ github.head_ref }}
|
||||||
- name: Install pnpm
|
- name: Install pnpm
|
||||||
uses: pnpm/action-setup@v2
|
uses: pnpm/action-setup@v2
|
||||||
with:
|
with:
|
||||||
|
@ -36,13 +41,13 @@ jobs:
|
||||||
- name: Build storybook
|
- name: Build storybook
|
||||||
run: pnpm --filter frontend build-storybook
|
run: pnpm --filter frontend build-storybook
|
||||||
- name: Publish to Chromatic
|
- name: Publish to Chromatic
|
||||||
if: github.ref == 'refs/heads/master'
|
if: github.event_name != 'pull_request' && github.ref == 'refs/heads/master'
|
||||||
run: pnpm --filter frontend chromatic --exit-once-uploaded -d storybook-static
|
run: pnpm --filter frontend chromatic --exit-once-uploaded -d storybook-static
|
||||||
env:
|
env:
|
||||||
CHROMATIC_PROJECT_TOKEN: ${{ secrets.CHROMATIC_PROJECT_TOKEN }}
|
CHROMATIC_PROJECT_TOKEN: ${{ secrets.CHROMATIC_PROJECT_TOKEN }}
|
||||||
- name: Publish to Chromatic
|
- name: Publish to Chromatic
|
||||||
if: github.ref != 'refs/heads/master'
|
if: github.event_name != 'pull_request' && github.ref != 'refs/heads/master'
|
||||||
id: chromatic
|
id: chromatic_push
|
||||||
run: |
|
run: |
|
||||||
DIFF="${{ github.event.before }} HEAD"
|
DIFF="${{ github.event.before }} HEAD"
|
||||||
if [ "$DIFF" = "0000000000000000000000000000000000000000 HEAD" ]; then
|
if [ "$DIFF" = "0000000000000000000000000000000000000000 HEAD" ]; then
|
||||||
|
@ -55,16 +60,31 @@ jobs:
|
||||||
pnpm --filter frontend chromatic --exit-once-uploaded -d storybook-static $(echo "$CHROMATIC_PARAMETER")
|
pnpm --filter frontend chromatic --exit-once-uploaded -d storybook-static $(echo "$CHROMATIC_PARAMETER")
|
||||||
env:
|
env:
|
||||||
CHROMATIC_PROJECT_TOKEN: ${{ secrets.CHROMATIC_PROJECT_TOKEN }}
|
CHROMATIC_PROJECT_TOKEN: ${{ secrets.CHROMATIC_PROJECT_TOKEN }}
|
||||||
|
- name: Publish to Chromatic
|
||||||
|
if: github.event_name == 'pull_request'
|
||||||
|
id: chromatic_pull_request
|
||||||
|
run: |
|
||||||
|
DIFF="${{ github.base_ref }} HEAD"
|
||||||
|
if [ "$DIFF" = "0000000000000000000000000000000000000000 HEAD" ]; then
|
||||||
|
DIFF="HEAD"
|
||||||
|
fi
|
||||||
|
CHROMATIC_PARAMETER="$(node packages/frontend/.storybook/changes.js $(git diff-tree --no-commit-id --name-only -r $(echo "$DIFF") | xargs))"
|
||||||
|
if [ "$CHROMATIC_PARAMETER" = " --skip" ]; then
|
||||||
|
echo "skip=true" >> $GITHUB_OUTPUT
|
||||||
|
fi
|
||||||
|
pnpm --filter frontend chromatic --exit-once-uploaded -d storybook-static $(echo "$CHROMATIC_PARAMETER")
|
||||||
|
env:
|
||||||
|
CHROMATIC_PROJECT_TOKEN: ${{ secrets.CHROMATIC_PROJECT_TOKEN }}
|
||||||
- name: Notify that Chromatic will skip testing
|
- name: Notify that Chromatic will skip testing
|
||||||
uses: actions/github-script@v6.4.0
|
uses: actions/github-script@v6.4.0
|
||||||
if: github.ref != 'refs/heads/master' && github.ref != 'refs/heads/develop' && steps.chromatic.outputs.skip == 'true'
|
if: github.event_name == 'pull_request' && steps.chromatic_pull_request.outputs.skip == 'true'
|
||||||
with:
|
with:
|
||||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
script: |
|
script: |
|
||||||
github.rest.repos.createCommitComment({
|
github.rest.issues.createComment({
|
||||||
|
issue_number: context.issue.number,
|
||||||
owner: context.repo.owner,
|
owner: context.repo.owner,
|
||||||
repo: context.repo.repo,
|
repo: context.repo.repo,
|
||||||
commit_sha: context.sha,
|
|
||||||
body: 'Chromatic will skip testing but you may still have to [review the changes on Chromatic](https://www.chromatic.com/pullrequests?appId=6428f7d7b962f0b79f97d6e4).'
|
body: 'Chromatic will skip testing but you may still have to [review the changes on Chromatic](https://www.chromatic.com/pullrequests?appId=6428f7d7b962f0b79f97d6e4).'
|
||||||
})
|
})
|
||||||
- name: Upload Artifacts
|
- name: Upload Artifacts
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
-
|
-
|
||||||
|
|
||||||
-->
|
-->
|
||||||
## 13.x.x (unreleased)
|
## 13.12.0
|
||||||
|
|
||||||
### NOTE
|
### NOTE
|
||||||
- Node.js 18.6.0以上が必要になりました
|
- Node.js 18.6.0以上が必要になりました
|
||||||
|
|
|
@ -159,10 +159,55 @@ describe('After user signed in', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it('successfully loads', () => {
|
it('successfully loads', () => {
|
||||||
cy.get('[data-cy-open-post-form]').should('be.visible');
|
cy.get('[data-cy-user-setup-continue]').should('be.visible');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('account setup wizard', () => {
|
||||||
|
cy.get('[data-cy-user-setup-continue]').click();
|
||||||
|
|
||||||
|
cy.get('[data-cy-user-setup-user-name] input').type('ありす');
|
||||||
|
cy.get('[data-cy-user-setup-user-description] textarea').type('ほげ');
|
||||||
|
// TODO: アイコン設定テスト
|
||||||
|
|
||||||
|
cy.get('[data-cy-user-setup-continue]').click();
|
||||||
|
|
||||||
|
// フォローはスキップ
|
||||||
|
|
||||||
|
cy.get('[data-cy-user-setup-continue]').click();
|
||||||
|
|
||||||
|
// プッシュ通知設定はスキップ
|
||||||
|
|
||||||
|
cy.get('[data-cy-user-setup-continue]').click();
|
||||||
|
|
||||||
|
cy.get('[data-cy-user-setup-continue]').click();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('After user setup', () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
cy.resetState();
|
||||||
|
|
||||||
|
// インスタンス初期セットアップ
|
||||||
|
cy.registerUser('admin', 'pass', true);
|
||||||
|
|
||||||
|
// ユーザー作成
|
||||||
|
cy.registerUser('alice', 'alice1234');
|
||||||
|
|
||||||
|
cy.login('alice', 'alice1234');
|
||||||
|
|
||||||
|
// アカウント初期設定ウィザード
|
||||||
|
cy.get('[data-cy-user-setup] [data-cy-modal-window-close]').click();
|
||||||
|
cy.get('[data-cy-modal-dialog-ok]').click();
|
||||||
|
});
|
||||||
|
|
||||||
|
afterEach(() => {
|
||||||
|
// テスト終了直前にページ遷移するようなテストケース(例えばアカウント作成)だと、たぶんCypressのバグでブラウザの内容が次のテストケースに引き継がれてしまう(例えばアカウントが作成し終わった段階からテストが始まる)。
|
||||||
|
// waitを入れることでそれを防止できる
|
||||||
|
cy.wait(1000);
|
||||||
|
});
|
||||||
|
|
||||||
it('note', () => {
|
it('note', () => {
|
||||||
|
cy.get('[data-cy-open-post-form]').should('be.visible');
|
||||||
cy.get('[data-cy-open-post-form]').click();
|
cy.get('[data-cy-open-post-form]').click();
|
||||||
cy.get('[data-cy-post-form-text]').type('Hello, Misskey!');
|
cy.get('[data-cy-post-form-text]').type('Hello, Misskey!');
|
||||||
cy.get('[data-cy-open-post-form-submit]').click();
|
cy.get('[data-cy-open-post-form-submit]').click();
|
||||||
|
|
|
@ -10,6 +10,10 @@ describe('After user signed in', () => {
|
||||||
cy.registerUser('alice', 'alice1234');
|
cy.registerUser('alice', 'alice1234');
|
||||||
|
|
||||||
cy.login('alice', 'alice1234');
|
cy.login('alice', 'alice1234');
|
||||||
|
|
||||||
|
// アカウント初期設定ウィザード
|
||||||
|
cy.get('[data-cy-user-setup] [data-cy-modal-window-close]').click();
|
||||||
|
cy.get('[data-cy-modal-dialog-ok]').click();
|
||||||
});
|
});
|
||||||
|
|
||||||
afterEach(() => {
|
afterEach(() => {
|
||||||
|
@ -19,26 +23,26 @@ describe('After user signed in', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it('widget edit toggle is visible', () => {
|
it('widget edit toggle is visible', () => {
|
||||||
cy.get('.mk-widget-edit').should('be.visible');
|
cy.get('[data-cy-widget-edit]').should('be.visible');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('widget select should be visible in edit mode', () => {
|
it('widget select should be visible in edit mode', () => {
|
||||||
cy.get('.mk-widget-edit').click();
|
cy.get('[data-cy-widget-edit]').click();
|
||||||
cy.get('.mk-widget-select').should('be.visible');
|
cy.get('[data-cy-widget-select]').should('be.visible');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('first widget should be removed', () => {
|
it('first widget should be removed', () => {
|
||||||
cy.get('.mk-widget-edit').click();
|
cy.get('[data-cy-widget-edit]').click();
|
||||||
cy.get('[data-cy-customize-container]:first-child [data-cy-customize-container-remove]._button').click();
|
cy.get('[data-cy-customize-container]:first-child [data-cy-customize-container-remove]._button').click();
|
||||||
cy.get('[data-cy-customize-container]').should('have.length', 2);
|
cy.get('[data-cy-customize-container]').should('have.length', 2);
|
||||||
});
|
});
|
||||||
|
|
||||||
function buildWidgetTest(widgetName) {
|
function buildWidgetTest(widgetName) {
|
||||||
it(`${widgetName} widget should get added`, () => {
|
it(`${widgetName} widget should get added`, () => {
|
||||||
cy.get('.mk-widget-edit').click();
|
cy.get('[data-cy-widget-edit]').click();
|
||||||
cy.get('.mk-widget-select select').select(widgetName, { force: true });
|
cy.get('[data-cy-widget-select] select').select(widgetName, { force: true });
|
||||||
cy.get('[data-cy-bg]._modalBg[data-cy-transparent]').click({ multiple: true, force: true });
|
cy.get('[data-cy-bg]._modalBg[data-cy-transparent]').click({ multiple: true, force: true });
|
||||||
cy.get('.mk-widget-add').click({ force: true });
|
cy.get('[data-cy-widget-add]').click({ force: true });
|
||||||
cy.get(`[data-cy-mkw-${widgetName}]`).should('exist');
|
cy.get(`[data-cy-mkw-${widgetName}]`).should('exist');
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -1036,7 +1036,20 @@ channelArchiveConfirmTitle: "{name} wirklich archivieren?"
|
||||||
channelArchiveConfirmDescription: "Ein archivierter Kanal taucht nicht mehr in der Kanalliste oder in Suchergebnissen auf. Zudem können ihm keine Beiträge mehr hinzugefügt werden."
|
channelArchiveConfirmDescription: "Ein archivierter Kanal taucht nicht mehr in der Kanalliste oder in Suchergebnissen auf. Zudem können ihm keine Beiträge mehr hinzugefügt werden."
|
||||||
thisChannelArchived: "Dieser Kanal wurde archiviert."
|
thisChannelArchived: "Dieser Kanal wurde archiviert."
|
||||||
displayOfNote: "Anzeige von Notizen"
|
displayOfNote: "Anzeige von Notizen"
|
||||||
|
initialAccountSetting: "Kontoeinrichtung"
|
||||||
youFollowing: "Gefolgt"
|
youFollowing: "Gefolgt"
|
||||||
|
_initialAccountSetting:
|
||||||
|
accountCreated: "Dein Konto wurde erfolgreich erstellt!"
|
||||||
|
letsFillYourProfile: "Lass uns zuerst dein Profil einrichten."
|
||||||
|
profileSetting: "Profileinstellungen"
|
||||||
|
theseSettingsCanEditLater: "Diese Einstellungen kannst du jederzeit ändern."
|
||||||
|
youCanEditMoreSettingsInSettingsPageLater: "In den Einstellungen findest du noch viele weitere Optionen. Schau dort später mal vorbei."
|
||||||
|
followUsers: "Folge zuerst ein paar Nutzern, um deine Chronik zu füllen."
|
||||||
|
pushNotificationDescription: "Durch die Aktivierung von Push-Benachrichtigungen kannst du von {name} Benachrichtigungen direkt auf dein Gerät erhalten."
|
||||||
|
initialAccountSettingCompleted: "Kontoeinrichtung abgeschlossen!"
|
||||||
|
haveFun: "Viel Spaß mit {name}!"
|
||||||
|
ifYouNeedLearnMore: "Besuche {link}, falls du mehr über {name} (Misskey) lernen möchtest."
|
||||||
|
skipAreYouSure: "Die Kontoeinrichtung wirklich überspringen?"
|
||||||
_serverRules:
|
_serverRules:
|
||||||
description: "Eine Reihe von Regeln, die vor der Registrierung angezeigt werden. Eine Zusammenfassung der Nutzungsbedingungen anzuzeigen ist empfohlen."
|
description: "Eine Reihe von Regeln, die vor der Registrierung angezeigt werden. Eine Zusammenfassung der Nutzungsbedingungen anzuzeigen ist empfohlen."
|
||||||
_accountMigration:
|
_accountMigration:
|
||||||
|
@ -1586,6 +1599,16 @@ _time:
|
||||||
minute: "Minute(n)"
|
minute: "Minute(n)"
|
||||||
hour: "Stunde(n)"
|
hour: "Stunde(n)"
|
||||||
day: "Tag(en)"
|
day: "Tag(en)"
|
||||||
|
_timelineTutorial:
|
||||||
|
title: "Wie du Misskey verwendest"
|
||||||
|
step1_1: "Dieser Bildschirm ist die \"Chronik\". Hier werden alle \"Notizen\" von {name} angezeigt."
|
||||||
|
step1_2: "Es gibt einige verschiedene Chroniken. Beispielsweise werden in der \"Startseite\" alle Notizen von Nutzern, denen du folgst, angezeigt, und in der \"Lokalen Chronik\" werden Notizen aller Nutzer auf {name} angezeigt."
|
||||||
|
step2_1: "Lass uns als nächstes versuchen, eine Notiz zu schreiben. Dies kannst du tun, indem du auf den Knopf mit dem Stift-Icon drückst."
|
||||||
|
step2_2: "Stell dich den anderen vor oder schreibe einfach \"Hallo {name}!\", wenn du darauf keine Lust hast oder dir nichts einfällt."
|
||||||
|
step3_1: "Fertig mit dem Senden deiner ersten Notiz?"
|
||||||
|
step3_2: "Falls deine Notiz nun in deiner Chronik auftaucht, hast du alles richtig gemacht."
|
||||||
|
step4_1: "Notizen können zusätzlich mit \"Reaktionen\" ausgestattet werden."
|
||||||
|
step4_2: "Um eine Reaktion anzufügen, klicke auf das „+“-Symbol einer Notiz und wähle ein Emoji aus, mit dem du reagieren möchtest."
|
||||||
_2fa:
|
_2fa:
|
||||||
alreadyRegistered: "Du hast bereits ein Gerät für Zwei-Faktor-Authentifizierung registriert."
|
alreadyRegistered: "Du hast bereits ein Gerät für Zwei-Faktor-Authentifizierung registriert."
|
||||||
registerTOTP: "Authentifizierungs-App registrieren"
|
registerTOTP: "Authentifizierungs-App registrieren"
|
||||||
|
|
|
@ -1036,7 +1036,20 @@ channelArchiveConfirmTitle: "Really archive {name}?"
|
||||||
channelArchiveConfirmDescription: "An archived channel won't appear in the channel list or search results anymore. New posts can also not be added to it anymore."
|
channelArchiveConfirmDescription: "An archived channel won't appear in the channel list or search results anymore. New posts can also not be added to it anymore."
|
||||||
thisChannelArchived: "This channel has been archived."
|
thisChannelArchived: "This channel has been archived."
|
||||||
displayOfNote: "Note display"
|
displayOfNote: "Note display"
|
||||||
|
initialAccountSetting: "Profile configuration"
|
||||||
youFollowing: "Followed"
|
youFollowing: "Followed"
|
||||||
|
_initialAccountSetting:
|
||||||
|
accountCreated: "Your account was successfully created!"
|
||||||
|
letsFillYourProfile: "First, let's set up your profile."
|
||||||
|
profileSetting: "Profile settings"
|
||||||
|
theseSettingsCanEditLater: "You can always change these settings later."
|
||||||
|
youCanEditMoreSettingsInSettingsPageLater: "There are many more settings you can configure from the \"Settings\" page. Be sure to visit it later."
|
||||||
|
followUsers: "Try following some users that interest you to build up your timeline."
|
||||||
|
pushNotificationDescription: "Enabling push notifications will allow you to receive notifications from {name} directly on your device."
|
||||||
|
initialAccountSettingCompleted: "Profile configuration complete!"
|
||||||
|
haveFun: "Enjoy {name}!"
|
||||||
|
ifYouNeedLearnMore: "If you'd like to learn more about how to use {name} (Misskey), please visit {link}."
|
||||||
|
skipAreYouSure: "Really skip profile configuration?"
|
||||||
_serverRules:
|
_serverRules:
|
||||||
description: "A set of rules to be displayed before registration. Setting a summary of the Terms of Service is recommended."
|
description: "A set of rules to be displayed before registration. Setting a summary of the Terms of Service is recommended."
|
||||||
_accountMigration:
|
_accountMigration:
|
||||||
|
@ -1586,6 +1599,16 @@ _time:
|
||||||
minute: "Minute(s)"
|
minute: "Minute(s)"
|
||||||
hour: "Hour(s)"
|
hour: "Hour(s)"
|
||||||
day: "Day(s)"
|
day: "Day(s)"
|
||||||
|
_timelineTutorial:
|
||||||
|
title: "How to use Misskey"
|
||||||
|
step1_1: "This is the \"timeline\". All \"notes\" submitted on {name} will be chronologically displayed here."
|
||||||
|
step1_2: "There are a few different timelines. For example, the \"Home timeline\" will contain notes of users you follow, and the \"Local timeline\" will contain notes from all users of {name}."
|
||||||
|
step2_1: "Let's try posting a note next. You can do so by pressing the button with a pencil icon."
|
||||||
|
step2_2: "How about writing a self-introduction, or just \"Hello {name}!\" if you don't feel like it?"
|
||||||
|
step3_1: "Finished posting your first note?"
|
||||||
|
step3_2: "Your first note should now be displayed on your timeline."
|
||||||
|
step4_1: "You can also attach \"Reactions\" to notes."
|
||||||
|
step4_2: "To attach a reaction, press the \"+\" mark on a note and choose an emoji you'd like to react with."
|
||||||
_2fa:
|
_2fa:
|
||||||
alreadyRegistered: "You have already registered a 2-factor authentication device."
|
alreadyRegistered: "You have already registered a 2-factor authentication device."
|
||||||
registerTOTP: "Register authenticator app"
|
registerTOTP: "Register authenticator app"
|
||||||
|
|
|
@ -1041,6 +1041,7 @@ youFollowing: "フォロー中"
|
||||||
|
|
||||||
_initialAccountSetting:
|
_initialAccountSetting:
|
||||||
accountCreated: "アカウントの作成が完了しました!"
|
accountCreated: "アカウントの作成が完了しました!"
|
||||||
|
letsStartAccountSetup: "アカウントの初期設定を行いましょう。"
|
||||||
letsFillYourProfile: "まずはあなたのプロフィールを設定しましょう。"
|
letsFillYourProfile: "まずはあなたのプロフィールを設定しましょう。"
|
||||||
profileSetting: "プロフィール設定"
|
profileSetting: "プロフィール設定"
|
||||||
theseSettingsCanEditLater: "これらの設定は後から変更できます。"
|
theseSettingsCanEditLater: "これらの設定は後から変更できます。"
|
||||||
|
|
|
@ -26,7 +26,7 @@ otherSettings: "ほかの設定"
|
||||||
openInWindow: "ウィンドウで開くで"
|
openInWindow: "ウィンドウで開くで"
|
||||||
profile: "プロフィール"
|
profile: "プロフィール"
|
||||||
timeline: "タイムライン"
|
timeline: "タイムライン"
|
||||||
noAccountDescription: "自己紹介はあらへん"
|
noAccountDescription: "自己紹介食ってもた"
|
||||||
login: "ログイン"
|
login: "ログイン"
|
||||||
loggingIn: "ログインしよるで"
|
loggingIn: "ログインしよるで"
|
||||||
logout: "ログアウト"
|
logout: "ログアウト"
|
||||||
|
@ -38,9 +38,9 @@ addUser: "ユーザーを追加や"
|
||||||
favorite: "お気に入り"
|
favorite: "お気に入り"
|
||||||
favorites: "お気に入り"
|
favorites: "お気に入り"
|
||||||
unfavorite: "やっぱ気に入らん"
|
unfavorite: "やっぱ気に入らん"
|
||||||
favorited: "お気に入りに登録したで"
|
favorited: "お気に入りに入れたで"
|
||||||
alreadyFavorited: "もうお気に入りに入れとるがな。"
|
alreadyFavorited: "もうお気に入りに入れとるがな。"
|
||||||
cantFavorite: "アカン、お気に入り登録できへんかったで。"
|
cantFavorite: "アカン、お気に入りに入れれんかったわ。"
|
||||||
pin: "ピン留めしとく"
|
pin: "ピン留めしとく"
|
||||||
unpin: "やっぱピン留めせん"
|
unpin: "やっぱピン留めせん"
|
||||||
copyContent: "内容をコピー"
|
copyContent: "内容をコピー"
|
||||||
|
@ -462,7 +462,7 @@ uiLanguage: "UIの表示言語"
|
||||||
aboutX: "{x}について"
|
aboutX: "{x}について"
|
||||||
emojiStyle: "絵文字のスタイル"
|
emojiStyle: "絵文字のスタイル"
|
||||||
native: "ネイティブ"
|
native: "ネイティブ"
|
||||||
disableDrawer: "メニューをドロワーで表示せぇへん"
|
disableDrawer: "メニューをドロワーで表示せえへん"
|
||||||
showNoteActionsOnlyHover: "ノートの操作部をホバー時のみ表示するで"
|
showNoteActionsOnlyHover: "ノートの操作部をホバー時のみ表示するで"
|
||||||
noHistory: "履歴はないわ。"
|
noHistory: "履歴はないわ。"
|
||||||
signinHistory: "ログイン履歴"
|
signinHistory: "ログイン履歴"
|
||||||
|
@ -560,6 +560,7 @@ accountDeletedDescription: "このアカウントは削除されとるで。"
|
||||||
menu: "メニュー"
|
menu: "メニュー"
|
||||||
divider: "分割線"
|
divider: "分割線"
|
||||||
addItem: "項目を追加"
|
addItem: "項目を追加"
|
||||||
|
rearrange: "並び替え"
|
||||||
relays: "リレー"
|
relays: "リレー"
|
||||||
addRelay: "リレーの追加"
|
addRelay: "リレーの追加"
|
||||||
inboxUrl: "inboxのURL"
|
inboxUrl: "inboxのURL"
|
||||||
|
@ -1028,11 +1029,32 @@ pleaseConfirmBelowBeforeSignup: "このサーバーに登録する前に、下
|
||||||
pleaseAgreeAllToContinue: "続けるんやったら、全ての「せやな」にチェック入れてる必要があるで。"
|
pleaseAgreeAllToContinue: "続けるんやったら、全ての「せやな」にチェック入れてる必要があるで。"
|
||||||
continue: "続けるで"
|
continue: "続けるで"
|
||||||
preservedUsernames: "予約ユーザー名"
|
preservedUsernames: "予約ユーザー名"
|
||||||
|
preservedUsernamesDescription: "予約しとくユーザー名を行ごとに挙げるで。ここで指定されたユーザー名はアカウント作るときに使えへんくなるけど、管理者は例外や。あと、もうあるアカウントも例外やな。"
|
||||||
|
createNoteFromTheFile: "このファイル使うてノート作るで"
|
||||||
|
archive: "アーカイブ"
|
||||||
|
channelArchiveConfirmTitle: "{name}をアーカイブしてええか?"
|
||||||
|
channelArchiveConfirmDescription: "アーカイブしたら、チャンネル一覧とか検索結果からなくなるし、新しく書き込みもできへんなるで。"
|
||||||
|
thisChannelArchived: "このチャンネル、アーカイブされとるで。"
|
||||||
|
displayOfNote: "ノートの表示"
|
||||||
|
initialAccountSetting: "初期設定"
|
||||||
youFollowing: "フォロー中やで"
|
youFollowing: "フォロー中やで"
|
||||||
|
_initialAccountSetting:
|
||||||
|
accountCreated: "アカウント作り終わったで。"
|
||||||
|
letsFillYourProfile: "最初はあんたのプロフィールを設定しよか。"
|
||||||
|
profileSetting: "プロフィール設定"
|
||||||
|
theseSettingsCanEditLater: "この設定はあとから変えれるで。"
|
||||||
|
youCanEditMoreSettingsInSettingsPageLater: "これ以外にもいろんな設定を「設定」ページからできるで。後で確認してみてな。"
|
||||||
|
followUsers: "タイムラインを構築するために、気になるユーザーをフォローしてみ。"
|
||||||
|
pushNotificationDescription: "プッシュ通知を有効にすると{name}の通知をあんたのデバイスで受け取れるで。"
|
||||||
|
initialAccountSettingCompleted: "初期設定が終わったで。"
|
||||||
|
haveFun: "{name}、楽しんでな~"
|
||||||
|
ifYouNeedLearnMore: "{name}(Misskey)の使い方とかをよー知りたいんやったら{link}をみてな。"
|
||||||
|
skipAreYouSure: "初期設定飛ばすか?"
|
||||||
_serverRules:
|
_serverRules:
|
||||||
description: "新規登録前に見せる、サーバーの簡潔なルールを設定すんで。内容は使うための決め事の要約とすることを推奨するわ。"
|
description: "新規登録前に見せる、サーバーの簡潔なルールを設定すんで。内容は使うための決め事の要約とすることを推奨するわ。"
|
||||||
_accountMigration:
|
_accountMigration:
|
||||||
moveFrom: "別のアカウントからこのアカウントに引っ越す"
|
moveFrom: "別のアカウントからこのアカウントに引っ越す"
|
||||||
|
moveFromSub: "別のアカウントへエイリアスを作る"
|
||||||
moveFromLabel: "引っ越し元のアカウント:"
|
moveFromLabel: "引っ越し元のアカウント:"
|
||||||
moveFromDescription: "別のアカウントからこのアカウントにフォロワーを引き継いで引っ越したかったら、ここでエイリアスを作っとく必要があるで。必ずお引っ越しを実行する前に作っとかなあかんで!引っ越し元のアカウントをこんな風に入力してくれへんか?:@person@instance.com"
|
moveFromDescription: "別のアカウントからこのアカウントにフォロワーを引き継いで引っ越したかったら、ここでエイリアスを作っとく必要があるで。必ずお引っ越しを実行する前に作っとかなあかんで!引っ越し元のアカウントをこんな風に入力してくれへんか?:@person@instance.com"
|
||||||
moveTo: "このアカウントをさらのアカウントに引っ越すで"
|
moveTo: "このアカウントをさらのアカウントに引っ越すで"
|
||||||
|
@ -1324,6 +1346,7 @@ _role:
|
||||||
canInvite: "サーバー招待コードの発行"
|
canInvite: "サーバー招待コードの発行"
|
||||||
canManageCustomEmojis: "カスタム絵文字の管理"
|
canManageCustomEmojis: "カスタム絵文字の管理"
|
||||||
driveCapacity: "ドライブ容量"
|
driveCapacity: "ドライブ容量"
|
||||||
|
alwaysMarkNsfw: "勝手にファイルにNSFWをくっつける"
|
||||||
pinMax: "ノートのピン留めの最大数"
|
pinMax: "ノートのピン留めの最大数"
|
||||||
antennaMax: "アンテナの作成可能数"
|
antennaMax: "アンテナの作成可能数"
|
||||||
wordMuteMax: "ワードミュートの最大文字数"
|
wordMuteMax: "ワードミュートの最大文字数"
|
||||||
|
@ -1575,6 +1598,16 @@ _time:
|
||||||
minute: "分"
|
minute: "分"
|
||||||
hour: "時間"
|
hour: "時間"
|
||||||
day: "日"
|
day: "日"
|
||||||
|
_timelineTutorial:
|
||||||
|
title: "Misskeyってなんや?"
|
||||||
|
step1_1: "これは「タイムライン」や。{name}に投稿された「ノート」が順番に表示されるで。"
|
||||||
|
step1_2: "タイムラインには何個か種類があってな、例えば「ホームタイムライン」だったらあんたのフォローしてる人のノート、「ローカルタイムライン」には{name}全部のノートが流れてくるで。"
|
||||||
|
step2_1: "試しに、何かノートを投稿してみ。画面の鉛筆マークのボタンでフォームが開くで。"
|
||||||
|
step2_2: "最初のノートは、自己紹介とか「{name}始めてみたんや」とかがええと思うで。"
|
||||||
|
step3_1: "投稿できた?"
|
||||||
|
step3_2: "あんたのノートがタイムラインに出てきたら成功や。"
|
||||||
|
step4_1: "ノートには、「リアクション」を付けれるで。"
|
||||||
|
step4_2: "ツッコむんやったら、ノートの「+」マークを押して、好きな絵文字を選ぶで。"
|
||||||
_2fa:
|
_2fa:
|
||||||
alreadyRegistered: "もう設定終わっとるわ。"
|
alreadyRegistered: "もう設定終わっとるわ。"
|
||||||
registerTOTP: "認証アプリの設定はじめる"
|
registerTOTP: "認証アプリの設定はじめる"
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
_lang_: "한국어"
|
_lang_: "한국어"
|
||||||
headlineMisskey: "노트로 연결되는 네트워크"
|
headlineMisskey: "노트로 연결되는 네트워크"
|
||||||
introMisskey: "환영합니다! Misskey는 오픈 소스 분산형 마이크로 블로그 서비스입니다.\n'노트'를 작성해서 지금 일어나고 있는 일을 공유하거나, 당신만의 이야기를 모두에게 발신하세요📡\n'리액션' 기능으로 친구의 노트에 총알같이 반응을 추가할 수도 있습니다👍\n새로운 세계를 탐험해 보세요🚀"
|
introMisskey: "환영합니다! Misskey는 오픈 소스 분산형 마이크로 블로그 서비스입니다.\n'노트'를 작성해서 지금 일어나고 있는 일을 공유하거나, 당신만의 이야기를 모두에게 발신하세요📡\n'리액션' 기능으로 친구의 노트에 총알같이 반응을 추가할 수도 있습니다👍\n새로운 세계를 탐험해 보세요🚀"
|
||||||
poweredByMisskeyDescription: "{name}은(는) 오픈소스 플랫폼<b>Misskey</b>를 사용한 서버 중 하나입니다."
|
poweredByMisskeyDescription: "{name}은(는) 오픈소스 플랫폼 <b>Misskey</b>를 사용한 서버 가운데 하나입니다."
|
||||||
monthAndDay: "{month}월 {day}일"
|
monthAndDay: "{month}월 {day}일"
|
||||||
search: "검색"
|
search: "검색"
|
||||||
notifications: "알림"
|
notifications: "알림"
|
||||||
|
@ -1036,7 +1036,19 @@ channelArchiveConfirmTitle: "{name} 을(를) 아카이브하시겠습니까?"
|
||||||
channelArchiveConfirmDescription: "아카이브한 채널은 채널 목록과 검색 결과에 표시되지 않으며, 채널에 새로운 노트를 작성할 수 없게 됩니다."
|
channelArchiveConfirmDescription: "아카이브한 채널은 채널 목록과 검색 결과에 표시되지 않으며, 채널에 새로운 노트를 작성할 수 없게 됩니다."
|
||||||
thisChannelArchived: "이 채널은 아카이브되었습니다."
|
thisChannelArchived: "이 채널은 아카이브되었습니다."
|
||||||
displayOfNote: "노트 표시"
|
displayOfNote: "노트 표시"
|
||||||
|
initialAccountSetting: "초기 설정"
|
||||||
youFollowing: "팔로잉"
|
youFollowing: "팔로잉"
|
||||||
|
_initialAccountSetting:
|
||||||
|
accountCreated: "계정 생성이 완료되었습니다!"
|
||||||
|
letsFillYourProfile: "우선 나의 프로필을 설정해 보아요."
|
||||||
|
profileSetting: "프로필 설정"
|
||||||
|
theseSettingsCanEditLater: "이 설정들은 나중에도 변경할 수 있습니다."
|
||||||
|
youCanEditMoreSettingsInSettingsPageLater: "이 외에도 '설정' 페이지에서 다양한 설정을 나의 입맛에 맛게 조절할 수 있습니다. 꼭 확인해 보세요!"
|
||||||
|
followUsers: "관심사가 맞는 유저를 팔로우하여 타임라인을 가꾸어 봅시다."
|
||||||
|
pushNotificationDescription: "푸시 알림을 활성화하면 {name}의 알림을 나의 기기에서 받아볼 수 있게 됩니다."
|
||||||
|
initialAccountSettingCompleted: "초기 설정을 모두 마쳤습니다!"
|
||||||
|
haveFun: "{name}와 함께 즐거운 시간 보내세요!"
|
||||||
|
ifYouNeedLearnMore: "{name}(Misskey)의 사용 방법에 대해 자세히 알아보려면 {link}를 참고해 주세요."
|
||||||
_serverRules:
|
_serverRules:
|
||||||
description: "회원 가입 이전에 간단하게 표시할 서버 규칙입니다. 이용 약관의 요약으로 구성하는 것을 추천합니다."
|
description: "회원 가입 이전에 간단하게 표시할 서버 규칙입니다. 이용 약관의 요약으로 구성하는 것을 추천합니다."
|
||||||
_accountMigration:
|
_accountMigration:
|
||||||
|
|
|
@ -274,10 +274,16 @@ letsLookAtTimeline: "La oss se på tidslinje"
|
||||||
cannotBeChangedLater: "Du kan ikke endre senere."
|
cannotBeChangedLater: "Du kan ikke endre senere."
|
||||||
likeOnly: "Bare liker"
|
likeOnly: "Bare liker"
|
||||||
retryAllQueuesConfirmTitle: "Vil du prøve igjen akkurat nå?"
|
retryAllQueuesConfirmTitle: "Vil du prøve igjen akkurat nå?"
|
||||||
|
video: "Video"
|
||||||
|
videos: "Videoer"
|
||||||
continue: "Fortsett"
|
continue: "Fortsett"
|
||||||
youFollowing: "Følger"
|
youFollowing: "Følger"
|
||||||
|
_initialAccountSetting:
|
||||||
|
theseSettingsCanEditLater: "Du kan endre disse innstillingene senere."
|
||||||
_achievements:
|
_achievements:
|
||||||
_types:
|
_types:
|
||||||
|
_notes100000:
|
||||||
|
flavor: "Du har jammen mye å si."
|
||||||
_noteFavorited1:
|
_noteFavorited1:
|
||||||
title: "Stjernekikker"
|
title: "Stjernekikker"
|
||||||
_myNoteFavorited1:
|
_myNoteFavorited1:
|
||||||
|
@ -290,13 +296,28 @@ _achievements:
|
||||||
title: "For mange venner"
|
title: "For mange venner"
|
||||||
_followers10:
|
_followers10:
|
||||||
title: "Følg meg!"
|
title: "Følg meg!"
|
||||||
|
_followers100:
|
||||||
|
title: "Populær"
|
||||||
|
_postedAtLateNight:
|
||||||
|
flavor: "Det er på tide å gå til sengs."
|
||||||
|
_driveFolderCircularReference:
|
||||||
|
title: "Rundskrivreferanse"
|
||||||
_reactWithoutRead:
|
_reactWithoutRead:
|
||||||
title: "Leste du det virkelig?"
|
title: "Leste du det virkelig?"
|
||||||
_clickedClickHere:
|
_clickedClickHere:
|
||||||
title: "Klikk her"
|
title: "Klikk her"
|
||||||
description: "Du har klikket her"
|
description: "Du har klikket her"
|
||||||
|
_justPlainLucky:
|
||||||
|
title: "Rett og slett heldig"
|
||||||
|
_setNameToSyuilo:
|
||||||
|
description: "Du har satt navnet ditt til \"syuilo\""
|
||||||
_loggedInOnBirthday:
|
_loggedInOnBirthday:
|
||||||
title: "Gratulerer med dagen"
|
title: "Gratulerer med dagen"
|
||||||
|
_loggedInOnNewYearsDay:
|
||||||
|
title: "Godt nytt år"
|
||||||
|
_brainDiver:
|
||||||
|
title: "Brain Diver"
|
||||||
|
flavor: "Misskey-Misskey La-Tu-Ma"
|
||||||
_role:
|
_role:
|
||||||
options: "Alternativ"
|
options: "Alternativ"
|
||||||
_priority:
|
_priority:
|
||||||
|
@ -318,6 +339,7 @@ _registry:
|
||||||
key: "Nøkkel"
|
key: "Nøkkel"
|
||||||
keys: "Nøkler"
|
keys: "Nøkler"
|
||||||
_aboutMisskey:
|
_aboutMisskey:
|
||||||
|
about: "Misskey er programvare med åpen kildekode som har blitt utviklet av syuilo siden 2014."
|
||||||
translation: "Oversett Misskey"
|
translation: "Oversett Misskey"
|
||||||
_instanceTicker:
|
_instanceTicker:
|
||||||
none: "Ikke vis"
|
none: "Ikke vis"
|
||||||
|
@ -355,6 +377,8 @@ _time:
|
||||||
minute: "Minutter"
|
minute: "Minutter"
|
||||||
hour: "Timer"
|
hour: "Timer"
|
||||||
day: "Dager"
|
day: "Dager"
|
||||||
|
_timelineTutorial:
|
||||||
|
title: "Hvordan bruke Misskey"
|
||||||
_2fa:
|
_2fa:
|
||||||
renewTOTPCancel: "Avbryt"
|
renewTOTPCancel: "Avbryt"
|
||||||
_weekday:
|
_weekday:
|
||||||
|
@ -374,14 +398,18 @@ _widgets:
|
||||||
clock: "Klokke"
|
clock: "Klokke"
|
||||||
photos: "Bilder"
|
photos: "Bilder"
|
||||||
button: "Knapp"
|
button: "Knapp"
|
||||||
|
aiscriptApp: "AiScript App"
|
||||||
userList: "Brukerliste"
|
userList: "Brukerliste"
|
||||||
_userList:
|
_userList:
|
||||||
chooseList: "Velg liste"
|
chooseList: "Velg liste"
|
||||||
_cw:
|
_cw:
|
||||||
show: "Vis mer"
|
show: "Vis mer"
|
||||||
_poll:
|
_poll:
|
||||||
|
noOnlyOneChoice: "Trenger minst to valger."
|
||||||
|
choiceN: "Valg {n}"
|
||||||
noMore: "Du kan ikke legge til flere."
|
noMore: "Du kan ikke legge til flere."
|
||||||
deadlineTime: "Timer"
|
deadlineTime: "Timer"
|
||||||
|
votesCount: "{n} stemmer"
|
||||||
vote: "Stem"
|
vote: "Stem"
|
||||||
showResult: "Vis resultatet"
|
showResult: "Vis resultatet"
|
||||||
voted: "Stemt"
|
voted: "Stemt"
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "misskey",
|
"name": "misskey",
|
||||||
"version": "13.12.0-beta.6",
|
"version": "13.12.0",
|
||||||
"codename": "nasubi",
|
"codename": "nasubi",
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
|
|
|
@ -34,4 +34,6 @@ export async function jobQueue() {
|
||||||
|
|
||||||
jobQueue.get(QueueProcessorService).start();
|
jobQueue.get(QueueProcessorService).start();
|
||||||
jobQueue.get(ChartManagementService).start();
|
jobQueue.get(ChartManagementService).start();
|
||||||
|
|
||||||
|
return jobQueue;
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,6 +10,7 @@ import type { INestApplicationContext } from '@nestjs/common';
|
||||||
|
|
||||||
describe('Account Move', () => {
|
describe('Account Move', () => {
|
||||||
let app: INestApplicationContext;
|
let app: INestApplicationContext;
|
||||||
|
let jq: INestApplicationContext;
|
||||||
let url: URL;
|
let url: URL;
|
||||||
|
|
||||||
let root: any;
|
let root: any;
|
||||||
|
@ -24,7 +25,7 @@ describe('Account Move', () => {
|
||||||
|
|
||||||
beforeAll(async () => {
|
beforeAll(async () => {
|
||||||
app = await startServer();
|
app = await startServer();
|
||||||
await jobQueue();
|
jq = await jobQueue();
|
||||||
const config = loadConfig();
|
const config = loadConfig();
|
||||||
url = new URL(config.url);
|
url = new URL(config.url);
|
||||||
const connection = await initTestDb(false);
|
const connection = await initTestDb(false);
|
||||||
|
@ -39,7 +40,7 @@ describe('Account Move', () => {
|
||||||
}, 1000 * 60 * 2);
|
}, 1000 * 60 * 2);
|
||||||
|
|
||||||
afterAll(async () => {
|
afterAll(async () => {
|
||||||
await app.close();
|
await Promise.all([app.close(), jq.close()]);
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('Create Alias', () => {
|
describe('Create Alias', () => {
|
||||||
|
|
|
@ -46,7 +46,10 @@ function loadTheme(applyTheme: typeof import('../src/scripts/theme')['applyTheme
|
||||||
|
|
||||||
function initLocalStorage() {
|
function initLocalStorage() {
|
||||||
localStorage.clear();
|
localStorage.clear();
|
||||||
localStorage.setItem('account', JSON.stringify(userDetailed()));
|
localStorage.setItem('account', JSON.stringify({
|
||||||
|
...userDetailed(),
|
||||||
|
policies: {},
|
||||||
|
}));
|
||||||
localStorage.setItem('locale', JSON.stringify(locale));
|
localStorage.setItem('locale', JSON.stringify(locale));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -32,8 +32,8 @@
|
||||||
</template>
|
</template>
|
||||||
</MkSelect>
|
</MkSelect>
|
||||||
<div v-if="(showOkButton || showCancelButton) && !actions" :class="$style.buttons">
|
<div v-if="(showOkButton || showCancelButton) && !actions" :class="$style.buttons">
|
||||||
<MkButton v-if="showOkButton" inline primary rounded :autofocus="!input && !select" :disabled="okButtonDisabled" @click="ok">{{ okText ?? ((showCancelButton || input || select) ? i18n.ts.ok : i18n.ts.gotIt) }}</MkButton>
|
<MkButton v-if="showOkButton" data-cy-modal-dialog-ok inline primary rounded :autofocus="!input && !select" :disabled="okButtonDisabled" @click="ok">{{ okText ?? ((showCancelButton || input || select) ? i18n.ts.ok : i18n.ts.gotIt) }}</MkButton>
|
||||||
<MkButton v-if="showCancelButton || input || select" inline rounded @click="cancel">{{ cancelText ?? i18n.ts.cancel }}</MkButton>
|
<MkButton v-if="showCancelButton || input || select" data-cy-modal-dialog-cancel inline rounded @click="cancel">{{ cancelText ?? i18n.ts.cancel }}</MkButton>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="actions" :class="$style.buttons">
|
<div v-if="actions" :class="$style.buttons">
|
||||||
<MkButton v-for="action in actions" :key="action.text" inline rounded :primary="action.primary" :danger="action.danger" @click="() => { action.callback(); modal?.close(); }">{{ action.text }}</MkButton>
|
<MkButton v-for="action in actions" :key="action.text" inline rounded :primary="action.primary" :danger="action.danger" @click="() => { action.callback(); modal?.close(); }">{{ action.text }}</MkButton>
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
<span class="title">
|
<span class="title">
|
||||||
<slot name="header"></slot>
|
<slot name="header"></slot>
|
||||||
</span>
|
</span>
|
||||||
<button v-if="!withOkButton" class="_button" @click="$emit('close')"><i class="ti ti-x"></i></button>
|
<button v-if="!withOkButton" class="_button" data-cy-modal-window-close @click="$emit('close')"><i class="ti ti-x"></i></button>
|
||||||
<button v-if="withOkButton" class="_button" :disabled="okButtonDisabled" @click="$emit('ok')"><i class="ti ti-check"></i></button>
|
<button v-if="withOkButton" class="_button" :disabled="okButtonDisabled" @click="$emit('ok')"><i class="ti ti-check"></i></button>
|
||||||
</div>
|
</div>
|
||||||
<div class="body">
|
<div class="body">
|
||||||
|
|
|
@ -12,11 +12,11 @@
|
||||||
</div>
|
</div>
|
||||||
</FormSlot>
|
</FormSlot>
|
||||||
|
|
||||||
<MkInput v-model="name" :max="30" manual-save>
|
<MkInput v-model="name" :max="30" manual-save data-cy-user-setup-user-name>
|
||||||
<template #label>{{ i18n.ts._profile.name }}</template>
|
<template #label>{{ i18n.ts._profile.name }}</template>
|
||||||
</MkInput>
|
</MkInput>
|
||||||
|
|
||||||
<MkTextarea v-model="description" :max="500" tall manual-save>
|
<MkTextarea v-model="description" :max="500" tall manual-save data-cy-user-setup-user-description>
|
||||||
<template #label>{{ i18n.ts._profile.description }}</template>
|
<template #label>{{ i18n.ts._profile.description }}</template>
|
||||||
</MkTextarea>
|
</MkTextarea>
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
ref="dialog"
|
ref="dialog"
|
||||||
:width="500"
|
:width="500"
|
||||||
:height="550"
|
:height="550"
|
||||||
|
data-cy-user-setup
|
||||||
@close="close(true)"
|
@close="close(true)"
|
||||||
@closed="emit('closed')"
|
@closed="emit('closed')"
|
||||||
>
|
>
|
||||||
|
@ -22,8 +23,8 @@
|
||||||
<div class="_gaps" style="text-align: center;">
|
<div class="_gaps" style="text-align: center;">
|
||||||
<i class="ti ti-confetti" style="display: block; margin: auto; font-size: 3em; color: var(--accent);"></i>
|
<i class="ti ti-confetti" style="display: block; margin: auto; font-size: 3em; color: var(--accent);"></i>
|
||||||
<div style="font-size: 120%;">{{ i18n.ts._initialAccountSetting.accountCreated }}</div>
|
<div style="font-size: 120%;">{{ i18n.ts._initialAccountSetting.accountCreated }}</div>
|
||||||
<div>{{ i18n.ts._initialAccountSetting.letsFillYourProfile }}</div>
|
<div>{{ i18n.ts._initialAccountSetting.letsStartAccountSetup }}</div>
|
||||||
<MkButton primary rounded gradate style="margin: 16px auto 0 auto;" @click="page++">{{ i18n.ts._initialAccountSetting.profileSetting }} <i class="ti ti-arrow-right"></i></MkButton>
|
<MkButton primary rounded gradate style="margin: 16px auto 0 auto;" data-cy-user-setup-continue @click="page++">{{ i18n.ts._initialAccountSetting.profileSetting }} <i class="ti ti-arrow-right"></i></MkButton>
|
||||||
</div>
|
</div>
|
||||||
</MkSpacer>
|
</MkSpacer>
|
||||||
</div>
|
</div>
|
||||||
|
@ -32,7 +33,7 @@
|
||||||
<div style="height: 100cqh; overflow: auto;">
|
<div style="height: 100cqh; overflow: auto;">
|
||||||
<MkSpacer :margin-min="20" :margin-max="28">
|
<MkSpacer :margin-min="20" :margin-max="28">
|
||||||
<XProfile/>
|
<XProfile/>
|
||||||
<MkButton primary rounded gradate style="margin: 16px auto 0 auto;" @click="page++">{{ i18n.ts.continue }} <i class="ti ti-arrow-right"></i></MkButton>
|
<MkButton primary rounded gradate style="margin: 16px auto 0 auto;" data-cy-user-setup-continue @click="page++">{{ i18n.ts.continue }} <i class="ti ti-arrow-right"></i></MkButton>
|
||||||
</MkSpacer>
|
</MkSpacer>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
@ -40,7 +41,7 @@
|
||||||
<div style="height: 100cqh; overflow: auto;">
|
<div style="height: 100cqh; overflow: auto;">
|
||||||
<MkSpacer :margin-min="20" :margin-max="28">
|
<MkSpacer :margin-min="20" :margin-max="28">
|
||||||
<XFollow/>
|
<XFollow/>
|
||||||
<MkButton primary rounded gradate style="margin: 16px auto 0 auto;" @click="page++">{{ i18n.ts.continue }} <i class="ti ti-arrow-right"></i></MkButton>
|
<MkButton primary rounded gradate style="margin: 16px auto 0 auto;" data-cy-user-setup-continue @click="page++">{{ i18n.ts.continue }} <i class="ti ti-arrow-right"></i></MkButton>
|
||||||
</MkSpacer>
|
</MkSpacer>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
@ -52,7 +53,7 @@
|
||||||
<div style="font-size: 120%;">{{ i18n.ts.pushNotification }}</div>
|
<div style="font-size: 120%;">{{ i18n.ts.pushNotification }}</div>
|
||||||
<div style="padding: 0 16px;">{{ i18n.t('_initialAccountSetting.pushNotificationDescription', { name: instance.name ?? host }) }}</div>
|
<div style="padding: 0 16px;">{{ i18n.t('_initialAccountSetting.pushNotificationDescription', { name: instance.name ?? host }) }}</div>
|
||||||
<MkPushNotificationAllowButton primary show-only-to-register style="margin: 0 auto;"/>
|
<MkPushNotificationAllowButton primary show-only-to-register style="margin: 0 auto;"/>
|
||||||
<MkButton primary rounded gradate style="margin: 16px auto 0 auto;" @click="page++">{{ i18n.ts.continue }} <i class="ti ti-arrow-right"></i></MkButton>
|
<MkButton primary rounded gradate style="margin: 16px auto 0 auto;" data-cy-user-setup-continue @click="page++">{{ i18n.ts.continue }} <i class="ti ti-arrow-right"></i></MkButton>
|
||||||
</div>
|
</div>
|
||||||
</MkSpacer>
|
</MkSpacer>
|
||||||
</div>
|
</div>
|
||||||
|
@ -70,7 +71,7 @@
|
||||||
</template>
|
</template>
|
||||||
</I18n>
|
</I18n>
|
||||||
<div>{{ i18n.t('_initialAccountSetting.haveFun', { name: instance.name ?? host }) }}</div>
|
<div>{{ i18n.t('_initialAccountSetting.haveFun', { name: instance.name ?? host }) }}</div>
|
||||||
<MkButton primary rounded gradate style="margin: 16px auto 0 auto;" @click="close(false)">{{ i18n.ts.close }}</MkButton>
|
<MkButton primary rounded gradate style="margin: 16px auto 0 auto;" data-cy-user-setup-continue @click="close(false)">{{ i18n.ts.close }}</MkButton>
|
||||||
</div>
|
</div>
|
||||||
</MkSpacer>
|
</MkSpacer>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -2,11 +2,11 @@
|
||||||
<div :class="$style.root">
|
<div :class="$style.root">
|
||||||
<template v-if="edit">
|
<template v-if="edit">
|
||||||
<header :class="$style['edit-header']">
|
<header :class="$style['edit-header']">
|
||||||
<MkSelect v-model="widgetAdderSelected" style="margin-bottom: var(--margin)" class="mk-widget-select">
|
<MkSelect v-model="widgetAdderSelected" style="margin-bottom: var(--margin)" data-cy-widget-select>
|
||||||
<template #label>{{ i18n.ts.selectWidget }}</template>
|
<template #label>{{ i18n.ts.selectWidget }}</template>
|
||||||
<option v-for="widget in widgetDefs" :key="widget" :value="widget">{{ i18n.t(`_widgets.${widget}`) }}</option>
|
<option v-for="widget in widgetDefs" :key="widget" :value="widget">{{ i18n.t(`_widgets.${widget}`) }}</option>
|
||||||
</MkSelect>
|
</MkSelect>
|
||||||
<MkButton inline primary class="mk-widget-add" @click="addWidget"><i class="ti ti-plus"></i> {{ i18n.ts.add }}</MkButton>
|
<MkButton inline primary data-cy-widget-add @click="addWidget"><i class="ti ti-plus"></i> {{ i18n.ts.add }}</MkButton>
|
||||||
<MkButton inline @click="$emit('exit')">{{ i18n.ts.close }}</MkButton>
|
<MkButton inline @click="$emit('exit')">{{ i18n.ts.close }}</MkButton>
|
||||||
</header>
|
</header>
|
||||||
<Sortable
|
<Sortable
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
<XWidgets :class="$style.widgets" :edit="editMode" :widgets="widgets" @add-widget="addWidget" @remove-widget="removeWidget" @update-widget="updateWidget" @update-widgets="updateWidgets" @exit="editMode = false"/>
|
<XWidgets :class="$style.widgets" :edit="editMode" :widgets="widgets" @add-widget="addWidget" @remove-widget="removeWidget" @update-widget="updateWidget" @update-widgets="updateWidgets" @exit="editMode = false"/>
|
||||||
|
|
||||||
<button v-if="editMode" class="_textButton" style="font-size: 0.9em;" @click="editMode = false"><i class="ti ti-check"></i> {{ i18n.ts.editWidgetsExit }}</button>
|
<button v-if="editMode" class="_textButton" style="font-size: 0.9em;" @click="editMode = false"><i class="ti ti-check"></i> {{ i18n.ts.editWidgetsExit }}</button>
|
||||||
<button v-else class="_textButton mk-widget-edit" :class="$style.edit" style="font-size: 0.9em;" @click="editMode = true"><i class="ti ti-pencil"></i> {{ i18n.ts.editWidgets }}</button>
|
<button v-else class="_textButton" data-cy-widget-edit :class="$style.edit" style="font-size: 0.9em;" @click="editMode = true"><i class="ti ti-pencil"></i> {{ i18n.ts.editWidgets }}</button>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue