diff --git a/locales/en-US.yml b/locales/en-US.yml
index 6b637621b0..133df1abbd 100644
--- a/locales/en-US.yml
+++ b/locales/en-US.yml
@@ -760,6 +760,10 @@ noCrawleDescription: "Ask search engines to not index your profile page, notes,
lockedAccountInfo: "Unless you set your note visiblity to \"Followers only\", your notes will be visible to anyone, even if you require followers to be manually approved."
alwaysMarkSensitive: "Mark as sensitive by default"
loadRawImages: "Load original images instead of showing thumbnails"
+searchEngine: "Search Engine For Search MFM"
+searchEngineOther: "Other"
+searchEngineCustomURIDescription: "The custom URI must be input in the format like \"https://www.google.com/search?q=\\{query}\" or \"https://www.google.com/search?q=%s\"."
+searchEngineCusomURI: "Custom URI"
disableShowingAnimatedImages: "Don't play animated images"
highlightSensitiveMedia: "Highlight sensitive media"
verificationEmailSent: "A verification email has been sent. Please follow the included link to complete verification."
@@ -1880,6 +1884,7 @@ _aboutMisskey:
morePatrons: "We also appreciate the support of many other helpers not listed here. Thank you! 🥰"
patrons: "Patrons"
projectMembers: "Project members"
+ testers: "Testers"
_displayOfSensitiveMedia:
respect: "Hide media marked as sensitive"
ignore: "Display media marked as sensitive"
diff --git a/locales/generateDTS.js b/locales/generateDTS.js
index 49807144ec..a175247445 100644
--- a/locales/generateDTS.js
+++ b/locales/generateDTS.js
@@ -6,7 +6,10 @@ import ts from 'typescript';
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
-const parameterRegExp = /\{(\w+)\}/g;
+// braces preceded by backslashes are literal, they don't represent
+// parameters; they get cleaned up by `locales/index.js` before
+// getting shipped to the browser
+const parameterRegExp = /(? text.replace(new RegExp(String.fromCodePoint(0x08), 'g'), '');
+//
+// also, we remove the backslashes in front of open braces (the
+// backslashes are only needed to tell `generateDTS.js` that the
+// braces do not represent parameters)
+const clean = (text) => text.replace(new RegExp(String.fromCodePoint(0x08), 'g'), '').replaceAll(new RegExp(/\\+\{/,'g'), '{');
export function build() {
const locales = languages.reduce((a, c) => (a[c] = yaml.load(clean(fs.readFileSync(new URL(`${c}.yml`, import.meta.url), 'utf-8'))) || {}, a), {});
diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index 4d214b652a..1d4b9f4db4 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -759,6 +759,10 @@ noCrawleDescription: "外部の検索エンジンにあなたのユーザーペ
lockedAccountInfo: "フォローを承認制にしても、ノートの公開範囲を「フォロワー」にしない限り、誰でもあなたのノートを見ることができます。"
alwaysMarkSensitive: "デフォルトでメディアをセンシティブ設定にする"
loadRawImages: "添付画像のサムネイルをオリジナル画質にする"
+searchEngine: "検索MFMの検索エンジン"
+searchEngineOther: "他"
+searchEngineCustomURIDescription: "カスタム URI は、\"https://www.google.com/search?q=\\{query}\" や \"https://www.google.com/search?q=%s\" のような形式で入力する必要があります。"
+searchEngineCusomURI: "カスタム URI"
disableShowingAnimatedImages: "アニメーション画像を再生しない"
highlightSensitiveMedia: "メディアがセンシティブであることを分かりやすく表示"
verificationEmailSent: "確認のメールを送信しました。メールに記載されたリンクにアクセスして、設定を完了してください。"
@@ -1903,6 +1907,7 @@ _aboutMisskey:
morePatrons: "他にも多くの方が支援してくれています。ありがとうございます🥰"
patrons: "支援者"
projectMembers: "プロジェクトメンバー"
+ testers: "テスター"
_displayOfSensitiveMedia:
respect: "センシティブ設定されたメディアを隠す"
diff --git a/packages/backend/src/core/MfmService.ts b/packages/backend/src/core/MfmService.ts
index 5de6e07d33..625df1feaa 100644
--- a/packages/backend/src/core/MfmService.ts
+++ b/packages/backend/src/core/MfmService.ts
@@ -132,9 +132,18 @@ export class MfmService {
case 'h1':
{
- text += '【';
+ text += '**【';
appendChildren(node.childNodes);
- text += '】\n';
+ text += '】**\n';
+ break;
+ }
+
+ case 'h2':
+ case 'h3':
+ {
+ text += '**';
+ appendChildren(node.childNodes);
+ text += '**\n';
break;
}
@@ -203,8 +212,6 @@ export class MfmService {
}
case 'p':
- case 'h2':
- case 'h3':
case 'h4':
case 'h5':
case 'h6':
diff --git a/packages/backend/src/server/api/endpoints/notes/create.ts b/packages/backend/src/server/api/endpoints/notes/create.ts
index 5d2895cd46..626f03b758 100644
--- a/packages/backend/src/server/api/endpoints/notes/create.ts
+++ b/packages/backend/src/server/api/endpoints/notes/create.ts
@@ -30,8 +30,9 @@ export const meta = {
prohibitMoved: true,
limit: {
- duration: ms('1minute'),
- max: 5,
+ duration: ms('1hour'),
+ max: 300,
+ minInterval: ms('1sec'),
},
kind: 'write:notes',
diff --git a/packages/frontend/src/boot/main-boot.ts b/packages/frontend/src/boot/main-boot.ts
index 18dfdcdc51..013fa7c37c 100644
--- a/packages/frontend/src/boot/main-boot.ts
+++ b/packages/frontend/src/boot/main-boot.ts
@@ -94,7 +94,7 @@ export async function mainBoot() {
}).render();
}
}
- }
+ }
} catch (error) {
// console.error(error);
console.error('Failed to initialise the seasonal screen effect canvas context:', error);
@@ -236,7 +236,7 @@ export async function mainBoot() {
if (Date.now() - lastUsedDate > 1000 * 60 * 60 * 2) {
toast(i18n.tsx.welcomeBackWithName({
name: $i.name || $i.username,
- }));
+ }), true);
}
}
miLocalStorage.setItem('lastUsed', Date.now().toString());
diff --git a/packages/frontend/src/components/MkAbuseReport.vue b/packages/frontend/src/components/MkAbuseReport.vue
index 48219d0903..2f44616908 100644
--- a/packages/frontend/src/components/MkAbuseReport.vue
+++ b/packages/frontend/src/components/MkAbuseReport.vue
@@ -20,7 +20,7 @@ SPDX-License-Identifier: AGPL-3.0-only
-
+
{{ i18n.ts.reporter }}: @{{ report.reporter.username }}
diff --git a/packages/frontend/src/components/MkAnnouncementDialog.vue b/packages/frontend/src/components/MkAnnouncementDialog.vue
index 74d0e7214f..032a815ee6 100644
--- a/packages/frontend/src/components/MkAnnouncementDialog.vue
+++ b/packages/frontend/src/components/MkAnnouncementDialog.vue
@@ -15,7 +15,7 @@ SPDX-License-Identifier: AGPL-3.0-only
{{ announcement.title }}
-
+
{{ i18n.ts.ok }}
diff --git a/packages/frontend/src/components/MkDialog.vue b/packages/frontend/src/components/MkDialog.vue
index 0c9c14ee59..b534ae4c56 100644
--- a/packages/frontend/src/components/MkDialog.vue
+++ b/packages/frontend/src/components/MkDialog.vue
@@ -26,7 +26,7 @@ SPDX-License-Identifier: AGPL-3.0-only
-
+
diff --git a/packages/frontend/src/components/MkGoogle.vue b/packages/frontend/src/components/MkGoogle.vue
index c92a49d32a..d1809d1073 100644
--- a/packages/frontend/src/components/MkGoogle.vue
+++ b/packages/frontend/src/components/MkGoogle.vue
@@ -13,6 +13,7 @@ SPDX-License-Identifier: AGPL-3.0-only
diff --git a/packages/frontend/src/components/MkNote.vue b/packages/frontend/src/components/MkNote.vue
index 86a44f3188..ba97050154 100644
--- a/packages/frontend/src/components/MkNote.vue
+++ b/packages/frontend/src/components/MkNote.vue
@@ -44,7 +44,7 @@ SPDX-License-Identifier: AGPL-3.0-only
-
+
@@ -53,8 +53,9 @@ SPDX-License-Identifier: AGPL-3.0-only
+
-
+
@@ -71,12 +72,13 @@ SPDX-License-Identifier: AGPL-3.0-only
:enableEmojiMenu="true"
:enableEmojiMenuReaction="true"
:isAnim="allowAnim"
+ :isBlock="true"
/>
{{ i18n.tsx.translatedFrom({ x: translation.sourceLang }) }}:
-
+
{{ i18n.ts._animatedMFM.play }}
@@ -98,6 +100,7 @@ SPDX-License-Identifier: AGPL-3.0-only
{{ appearNote.channel.name }}
+
@@ -339,7 +342,7 @@ let renoting = false;
const keymap = {
'r': () => reply(true),
'e|a|plus': () => react(true),
- '(q)': () => { if (canRenote.value && !renoted.value && !renoting) { renoting = true; renote(appearNote.value.visibility); } },
+ '(q)': () => { if (canRenote.value && !renoted.value && !renoting) renote(defaultStore.state.visibilityOnBoost); },
'up|k|shift+tab': focusBefore,
'down|j|tab': focusAfter,
'esc': blur,
@@ -439,6 +442,8 @@ if (!props.mock) {
}
function boostVisibility() {
+ if (renoting) return;
+
if (!defaultStore.state.showVisibilitySelectorOnBoost) {
renote(defaultStore.state.visibilityOnBoost);
} else {
@@ -450,6 +455,8 @@ function renote(visibility: Visibility, localOnly: boolean = false) {
pleaseLogin();
showMovedDialog();
+ renoting = true;
+
if (appearNote.value.channel) {
const el = renoteButton.value as HTMLElement | null | undefined;
if (el) {
diff --git a/packages/frontend/src/components/MkNoteDetailed.vue b/packages/frontend/src/components/MkNoteDetailed.vue
index 991437a510..f0b1ca82a4 100644
--- a/packages/frontend/src/components/MkNoteDetailed.vue
+++ b/packages/frontend/src/components/MkNoteDetailed.vue
@@ -68,7 +68,7 @@ SPDX-License-Identifier: AGPL-3.0-only
-
+
@@ -84,13 +84,14 @@ SPDX-License-Identifier: AGPL-3.0-only
:enableEmojiMenu="true"
:enableEmojiMenuReaction="true"
:isAnim="allowAnim"
+ :isBlock="true"
/>
RN:
{{ i18n.tsx.translatedFrom({ x: translation.sourceLang }) }}:
-
+
{{ i18n.ts._animatedMFM.play }}
@@ -351,7 +352,7 @@ let renoting = false;
const keymap = {
'r': () => reply(true),
'e|a|plus': () => react(true),
- '(q)': () => { if (canRenote.value && !renoted.value && !renoting) { renoting = true; renote(appearNote.value.visibility); } },
+ '(q)': () => { if (canRenote.value && !renoted.value && !renoting) renote(defaultStore.state.visibilityOnBoost); },
'esc': blur,
'm|o': () => showMenu(true),
's': () => showContent.value !== showContent.value,
@@ -443,6 +444,8 @@ useTooltip(quoteButton, async (showing) => {
});
function boostVisibility() {
+ if (renoting) return;
+
if (!defaultStore.state.showVisibilitySelectorOnBoost) {
renote(defaultStore.state.visibilityOnBoost);
} else {
@@ -476,6 +479,8 @@ function renote(visibility: Visibility, localOnly: boolean = false) {
pleaseLogin();
showMovedDialog();
+ renoting = true;
+
if (appearNote.value.channel) {
const el = renoteButton.value as HTMLElement | null | undefined;
if (el) {
diff --git a/packages/frontend/src/components/MkNotePreview.vue b/packages/frontend/src/components/MkNotePreview.vue
index 3fcd7593ba..a8853a8a5f 100644
--- a/packages/frontend/src/components/MkNotePreview.vue
+++ b/packages/frontend/src/components/MkNotePreview.vue
@@ -12,11 +12,11 @@ SPDX-License-Identifier: AGPL-3.0-only
diff --git a/packages/frontend/src/components/MkNoteSimple.vue b/packages/frontend/src/components/MkNoteSimple.vue
index 477cf4521a..542e3e79ea 100644
--- a/packages/frontend/src/components/MkNoteSimple.vue
+++ b/packages/frontend/src/components/MkNoteSimple.vue
@@ -10,7 +10,7 @@ SPDX-License-Identifier: AGPL-3.0-only
-
+
diff --git a/packages/frontend/src/components/MkNoteSub.vue b/packages/frontend/src/components/MkNoteSub.vue
index 37811dd52e..66d1e51a6c 100644
--- a/packages/frontend/src/components/MkNoteSub.vue
+++ b/packages/frontend/src/components/MkNoteSub.vue
@@ -12,7 +12,7 @@ SPDX-License-Identifier: AGPL-3.0-only
-
+
diff --git a/packages/frontend/src/components/MkNotification.vue b/packages/frontend/src/components/MkNotification.vue
index e5a58296cc..f849e94e93 100644
--- a/packages/frontend/src/components/MkNotification.vue
+++ b/packages/frontend/src/components/MkNotification.vue
@@ -71,29 +71,29 @@ SPDX-License-Identifier: AGPL-3.0-only
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -139,7 +139,7 @@ SPDX-License-Identifier: AGPL-3.0-only
-
+
diff --git a/packages/frontend/src/components/MkSubNoteContent.vue b/packages/frontend/src/components/MkSubNoteContent.vue
index 7e63bbe82d..8386a783fc 100644
--- a/packages/frontend/src/components/MkSubNoteContent.vue
+++ b/packages/frontend/src/components/MkSubNoteContent.vue
@@ -9,14 +9,14 @@ SPDX-License-Identifier: AGPL-3.0-only
({{ i18n.ts.private }})
({{ i18n.ts.deletedNote }})
-
+
{{ i18n.ts._animatedMFM.play }}
{{ i18n.ts._animatedMFM.stop }}
{{ i18n.tsx.translatedFrom({ x: translation.sourceLang }) }}:
-
+
RN: ...
diff --git a/packages/frontend/src/components/MkTextarea.vue b/packages/frontend/src/components/MkTextarea.vue
index 3082842699..7b9fb3d8ad 100644
--- a/packages/frontend/src/components/MkTextarea.vue
+++ b/packages/frontend/src/components/MkTextarea.vue
@@ -28,7 +28,7 @@ SPDX-License-Identifier: AGPL-3.0-only
-
+
{{ i18n.ts.save }}
diff --git a/packages/frontend/src/components/MkToast.vue b/packages/frontend/src/components/MkToast.vue
index a117e49350..f731b3264f 100644
--- a/packages/frontend/src/components/MkToast.vue
+++ b/packages/frontend/src/components/MkToast.vue
@@ -14,7 +14,8 @@ SPDX-License-Identifier: AGPL-3.0-only
>
- {{ message }}
+
+ {{ message }}
@@ -26,9 +27,12 @@ import { onMounted, ref } from 'vue';
import * as os from '@/os.js';
import { defaultStore } from '@/store.js';
-defineProps<{
+withDefaults(defineProps<{
message: string;
-}>();
+ renderMfm: boolean;
+}>(), {
+ renderMfm: false,
+});
const emit = defineEmits<{
(ev: 'closed'): void;
diff --git a/packages/frontend/src/components/MkUserInfo.vue b/packages/frontend/src/components/MkUserInfo.vue
index 63c4af41a0..5658188c41 100644
--- a/packages/frontend/src/components/MkUserInfo.vue
+++ b/packages/frontend/src/components/MkUserInfo.vue
@@ -14,7 +14,7 @@ SPDX-License-Identifier: AGPL-3.0-only
{{ i18n.ts.followsYou }}
-
+
{{ i18n.ts.noAccountDescription }}
diff --git a/packages/frontend/src/components/MkUserPopup.vue b/packages/frontend/src/components/MkUserPopup.vue
index 18e4bde59d..2aee918114 100644
--- a/packages/frontend/src/components/MkUserPopup.vue
+++ b/packages/frontend/src/components/MkUserPopup.vue
@@ -28,7 +28,7 @@ SPDX-License-Identifier: AGPL-3.0-only
-
+
{{ i18n.ts.noAccountDescription }}
diff --git a/packages/frontend/src/components/MkUserSetupDialog.User.vue b/packages/frontend/src/components/MkUserSetupDialog.User.vue
index a4b9746f4b..efb1ed5593 100644
--- a/packages/frontend/src/components/MkUserSetupDialog.User.vue
+++ b/packages/frontend/src/components/MkUserSetupDialog.User.vue
@@ -13,7 +13,7 @@ SPDX-License-Identifier: AGPL-3.0-only
-
+
{{ i18n.ts.noAccountDescription }}
diff --git a/packages/frontend/src/components/SkNote.vue b/packages/frontend/src/components/SkNote.vue
index d09f4c79ea..7cfa3542c3 100644
--- a/packages/frontend/src/components/SkNote.vue
+++ b/packages/frontend/src/components/SkNote.vue
@@ -44,7 +44,7 @@ SPDX-License-Identifier: AGPL-3.0-only
-
+
@@ -57,7 +57,7 @@ SPDX-License-Identifier: AGPL-3.0-only
-
+
@@ -73,12 +73,13 @@ SPDX-License-Identifier: AGPL-3.0-only
:enableEmojiMenu="true"
:enableEmojiMenuReaction="true"
:isAnim="allowAnim"
+ :isBlock="true"
/>
{{ i18n.tsx.translatedFrom({ x: translation.sourceLang }) }}:
-
+
{{ i18n.ts._animatedMFM.play }}
@@ -340,7 +341,7 @@ let renoting = false;
const keymap = {
'r': () => reply(true),
'e|a|plus': () => react(true),
- '(q)': () => { if (canRenote.value && !renoted.value && !renoting) { renoting = true; renote(appearNote.value.visibility); } },
+ '(q)': () => { if (canRenote.value && !renoted.value && !renoting) renote(defaultStore.state.visibilityOnBoost); },
'up|k|shift+tab': focusBefore,
'down|j|tab': focusAfter,
'esc': blur,
@@ -440,6 +441,8 @@ if (!props.mock) {
}
function boostVisibility() {
+ if (renoting) return;
+
if (!defaultStore.state.showVisibilitySelectorOnBoost) {
renote(defaultStore.state.visibilityOnBoost);
} else {
@@ -451,6 +454,8 @@ function renote(visibility: Visibility, localOnly: boolean = false) {
pleaseLogin();
showMovedDialog();
+ renoting = true;
+
if (appearNote.value.channel) {
const el = renoteButton.value as HTMLElement | null | undefined;
if (el) {
diff --git a/packages/frontend/src/components/SkNoteDetailed.vue b/packages/frontend/src/components/SkNoteDetailed.vue
index 56929396f3..8307d4c29d 100644
--- a/packages/frontend/src/components/SkNoteDetailed.vue
+++ b/packages/frontend/src/components/SkNoteDetailed.vue
@@ -77,7 +77,7 @@ SPDX-License-Identifier: AGPL-3.0-only
-
+
@@ -92,13 +92,14 @@ SPDX-License-Identifier: AGPL-3.0-only
:enableEmojiMenu="true"
:enableEmojiMenuReaction="true"
:isAnim="allowAnim"
+ :isBlock="true"
/>
RN:
{{ i18n.tsx.translatedFrom({ x: translation.sourceLang }) }}:
-
+
{{ i18n.ts._animatedMFM.play }}
@@ -360,7 +361,7 @@ let renoting = false;
const keymap = {
'r': () => reply(true),
'e|a|plus': () => react(true),
- '(q)': () => { if (canRenote.value && !renoted.value && !renoting) { renoting = true; renote(appearNote.value.visibility); } },
+ '(q)': () => { if (canRenote.value && !renoted.value && !renoting) renote(defaultStore.state.visibilityOnBoost); },
'esc': blur,
'm|o': () => showMenu(true),
's': () => showContent.value !== showContent.value,
@@ -452,6 +453,8 @@ useTooltip(quoteButton, async (showing) => {
});
function boostVisibility() {
+ if (renoting) return;
+
if (!defaultStore.state.showVisibilitySelectorOnBoost) {
renote(defaultStore.state.visibilityOnBoost);
} else {
@@ -485,6 +488,8 @@ function renote(visibility: Visibility, localOnly: boolean = false) {
pleaseLogin();
showMovedDialog();
+ renoting = true;
+
if (appearNote.value.channel) {
const el = renoteButton.value as HTMLElement | null | undefined;
if (el) {
diff --git a/packages/frontend/src/components/SkNoteSimple.vue b/packages/frontend/src/components/SkNoteSimple.vue
index 533aa60961..b31e337a99 100644
--- a/packages/frontend/src/components/SkNoteSimple.vue
+++ b/packages/frontend/src/components/SkNoteSimple.vue
@@ -10,7 +10,7 @@ SPDX-License-Identifier: AGPL-3.0-only
-
+
diff --git a/packages/frontend/src/components/SkNoteSub.vue b/packages/frontend/src/components/SkNoteSub.vue
index 1cffd8dd66..bd17665c2e 100644
--- a/packages/frontend/src/components/SkNoteSub.vue
+++ b/packages/frontend/src/components/SkNoteSub.vue
@@ -20,7 +20,7 @@ SPDX-License-Identifier: AGPL-3.0-only
-
+
diff --git a/packages/frontend/src/components/SkOldNoteWindow.vue b/packages/frontend/src/components/SkOldNoteWindow.vue
index bed44bbb08..d2daf3f944 100644
--- a/packages/frontend/src/components/SkOldNoteWindow.vue
+++ b/packages/frontend/src/components/SkOldNoteWindow.vue
@@ -29,19 +29,19 @@
-
+
({{ i18n.ts.private }})
-
+
RN:
{{ i18n.t('translatedFrom', { x: translation.sourceLang }) }}:
-
+
diff --git a/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.ts b/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.ts
index 5fdcaa339b..ac54b60571 100644
--- a/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.ts
+++ b/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.ts
@@ -46,6 +46,7 @@ type MfmProps = {
enableEmojiMenuReaction?: boolean;
isAnim?: boolean;
linkNavigationBehavior?: MkABehavior;
+ isBlock?: boolean;
};
type MfmEvents = {
@@ -77,6 +78,8 @@ export default function (props: MfmProps, { emit }: { emit: SetupContext
import('@/components/MkFormula.vue'));
/**
@@ -393,9 +396,9 @@ export default function (props: MfmProps, { emit }: { emit: SetupContext
-
+
diff --git a/packages/frontend/src/os.ts b/packages/frontend/src/os.ts
index c728b014a2..6adf2e590b 100644
--- a/packages/frontend/src/os.ts
+++ b/packages/frontend/src/os.ts
@@ -211,9 +211,10 @@ export function pageWindow(path: string) {
}, {}, 'closed');
}
-export function toast(message: string) {
+export function toast(message: string, renderMfm = false) {
popup(MkToast, {
message,
+ renderMfm,
}, {}, 'closed');
}
diff --git a/packages/frontend/src/pages/about-sharkey.vue b/packages/frontend/src/pages/about-sharkey.vue
index f020e043c6..f5a8fcac42 100644
--- a/packages/frontend/src/pages/about-sharkey.vue
+++ b/packages/frontend/src/pages/about-sharkey.vue
@@ -105,8 +105,29 @@ SPDX-License-Identifier: AGPL-3.0-only
@fEmber
+
+
+ @tess
+
+
+ {{ i18n.ts._aboutMisskey.allContributors }}
+
+
+ {{ i18n.ts._aboutMisskey.testers }}
+
- {{ i18n.ts._aboutMisskey.allContributors }}
Misskey Contributors
diff --git a/packages/frontend/src/pages/announcements.vue b/packages/frontend/src/pages/announcements.vue
index 07bbc46ffc..44dd2e90d8 100644
--- a/packages/frontend/src/pages/announcements.vue
+++ b/packages/frontend/src/pages/announcements.vue
@@ -24,7 +24,7 @@ SPDX-License-Identifier: AGPL-3.0-only
{{ announcement.title }}
-
+
diff --git a/packages/frontend/src/pages/channel.vue b/packages/frontend/src/pages/channel.vue
index e49a16fecd..7f49c984a8 100644
--- a/packages/frontend/src/pages/channel.vue
+++ b/packages/frontend/src/pages/channel.vue
@@ -22,7 +22,7 @@ SPDX-License-Identifier: AGPL-3.0-only
-
+
diff --git a/packages/frontend/src/pages/clip.vue b/packages/frontend/src/pages/clip.vue
index f89ef036cf..9c42d2d3b8 100644
--- a/packages/frontend/src/pages/clip.vue
+++ b/packages/frontend/src/pages/clip.vue
@@ -11,7 +11,7 @@ SPDX-License-Identifier: AGPL-3.0-only
-
+
({{ i18n.ts.noDescription }})
diff --git a/packages/frontend/src/pages/flash/flash.vue b/packages/frontend/src/pages/flash/flash.vue
index 6e61b66a75..febfdbaaf7 100644
--- a/packages/frontend/src/pages/flash/flash.vue
+++ b/packages/frontend/src/pages/flash/flash.vue
@@ -29,7 +29,7 @@ SPDX-License-Identifier: AGPL-3.0-only
{{ flash.title }}
-
+
Play
{{ flash.likedCount }}
diff --git a/packages/frontend/src/pages/gallery/post.vue b/packages/frontend/src/pages/gallery/post.vue
index 1511928d55..99bd29f802 100644
--- a/packages/frontend/src/pages/gallery/post.vue
+++ b/packages/frontend/src/pages/gallery/post.vue
@@ -17,7 +17,7 @@ SPDX-License-Identifier: AGPL-3.0-only
{{ post.title }}
-
+
diff --git a/packages/frontend/src/pages/settings/general.vue b/packages/frontend/src/pages/settings/general.vue
index 0269985658..ab4f518d9f 100644
--- a/packages/frontend/src/pages/settings/general.vue
+++ b/packages/frontend/src/pages/settings/general.vue
@@ -67,6 +67,28 @@ SPDX-License-Identifier: AGPL-3.0-only
{{ i18n.ts.showGapBetweenNotesInTimeline }}
{{ i18n.ts.loadRawImages }}
Show instance ticker on replies
+
+ {{ i18n.ts.searchEngine }}
+
+
+
+
+
+
+
+
+
+ {{ i18n.ts.searchEngineCusomURI }}
+ {{ i18n.ts.searchEngineCustomURIDescription }}
+
+
+
{{ i18n.ts.reactionsDisplaySize }}
@@ -279,11 +301,12 @@ SPDX-License-Identifier: AGPL-3.0-only
diff --git a/packages/frontend/src/pages/user/home.vue b/packages/frontend/src/pages/user/home.vue
index 98c0ab4ce9..095645636d 100644
--- a/packages/frontend/src/pages/user/home.vue
+++ b/packages/frontend/src/pages/user/home.vue
@@ -74,7 +74,7 @@ SPDX-License-Identifier: AGPL-3.0-only
/>
-
+
{{ i18n.ts.noAccountDescription }}
diff --git a/packages/frontend/src/pages/welcome.timeline.vue b/packages/frontend/src/pages/welcome.timeline.vue
index be4cb2d2de..4768e31d1d 100644
--- a/packages/frontend/src/pages/welcome.timeline.vue
+++ b/packages/frontend/src/pages/welcome.timeline.vue
@@ -10,7 +10,7 @@ SPDX-License-Identifier: AGPL-3.0-only
-
+
RN: ...
diff --git a/packages/frontend/src/scripts/search-engine-map.ts b/packages/frontend/src/scripts/search-engine-map.ts
new file mode 100644
index 0000000000..3fb06d135d
--- /dev/null
+++ b/packages/frontend/src/scripts/search-engine-map.ts
@@ -0,0 +1,12 @@
+//store the URL and if its none of these its a custom one
+export const searchEngineMap = {
+ //The first one is the default search engine
+ 'https://www.google.com/search?q={query}': 'Google',
+ 'https://duckduckgo.com/?q={query}': 'Duckduckgo',
+ 'https://www.bing.com/search?q={query}': 'Bing',
+ 'https://search.yahoo.com/search?p={query}': 'Yahoo',
+ 'https://www.ecosia.org/search?q={query}': 'Ecosia',
+ 'https://www.qwant.com/?q={query}': 'Qwant',
+ 'https://search.aol.com/aol/search?q={query}': 'AOL',
+ 'https://yandex.com/search?text={query}': 'Yandex',
+};
diff --git a/packages/frontend/src/store.ts b/packages/frontend/src/store.ts
index f3f6746b62..e975439456 100644
--- a/packages/frontend/src/store.ts
+++ b/packages/frontend/src/store.ts
@@ -6,6 +6,7 @@
import { markRaw, ref } from 'vue';
import * as Misskey from 'misskey-js';
import { miLocalStorage } from './local-storage.js';
+import { searchEngineMap } from './scripts/search-engine-map.js';
import type { SoundType } from '@/scripts/sound.js';
import { Storage } from '@/pizzax.js';
import { hemisphere } from '@/scripts/intl-const.js';
@@ -311,6 +312,10 @@ export const defaultStore = markRaw(new Storage('base', {
where: 'device',
default: false,
},
+ searchEngine: {
+ where: 'account',
+ default: Object.keys(searchEngineMap)[0],
+ },
noteDesign: {
where: 'device',
default: 'sharkey' as 'sharkey' | 'misskey',
diff --git a/packages/frontend/src/style.scss b/packages/frontend/src/style.scss
index f77739fdbc..37d1a3c557 100644
--- a/packages/frontend/src/style.scss
+++ b/packages/frontend/src/style.scss
@@ -565,7 +565,7 @@ html[data-color-mode=dark] ._woodenFrame {
// MFM -----------------------------
-div > bdi, p > bdi { display: block }
+bdi.block { display: block }
._mfm_blur_ {
filter: blur(6px);
@@ -716,4 +716,4 @@ div > bdi, p > bdi { display: block }
100% {
opacity: 1;
}
-}
\ No newline at end of file
+}