enhance(frontend): 通常のノートでも、お気に入りに登録したチャンネルにリノートできるように (#13855)
* enhance(frontend): チャンネルにリノートできるように * Update Changelog
This commit is contained in:
parent
126383dca2
commit
6a637db36b
4 changed files with 54 additions and 0 deletions
|
@ -41,6 +41,7 @@
|
||||||
- Enhance: 通報のコメント内のリンクをクリックした際、ウィンドウで開くように
|
- Enhance: 通報のコメント内のリンクをクリックした際、ウィンドウで開くように
|
||||||
- Enhance: `Ui:C:postForm` および `Ui:C:postFormButton` に `localOnly` と `visibility` を設定できるように
|
- Enhance: `Ui:C:postForm` および `Ui:C:postFormButton` に `localOnly` と `visibility` を設定できるように
|
||||||
- Enhance: AiScriptを0.18.0にバージョンアップ
|
- Enhance: AiScriptを0.18.0にバージョンアップ
|
||||||
|
- Enhance: 通常のノートでも、お気に入りに登録したチャンネルにリノートできるように
|
||||||
- Fix: 一部のページ内リンクが正しく動作しない問題を修正
|
- Fix: 一部のページ内リンクが正しく動作しない問題を修正
|
||||||
- Fix: 周年の実績が閏年を考慮しない問題を修正
|
- Fix: 周年の実績が閏年を考慮しない問題を修正
|
||||||
- Fix: ローカルURLのプレビューポップアップが左上に表示される
|
- Fix: ローカルURLのプレビューポップアップが左上に表示される
|
||||||
|
|
12
locales/index.d.ts
vendored
12
locales/index.d.ts
vendored
|
@ -448,6 +448,10 @@ export interface Locale extends ILocale {
|
||||||
* リノートしました。
|
* リノートしました。
|
||||||
*/
|
*/
|
||||||
"renoted": string;
|
"renoted": string;
|
||||||
|
/**
|
||||||
|
* {name} にリノートしました。
|
||||||
|
*/
|
||||||
|
"renotedToX": ParameterizedString<"name">;
|
||||||
/**
|
/**
|
||||||
* この投稿はリノートできません。
|
* この投稿はリノートできません。
|
||||||
*/
|
*/
|
||||||
|
@ -468,6 +472,14 @@ export interface Locale extends ILocale {
|
||||||
* チャンネル内引用
|
* チャンネル内引用
|
||||||
*/
|
*/
|
||||||
"inChannelQuote": string;
|
"inChannelQuote": string;
|
||||||
|
/**
|
||||||
|
* チャンネルにリノート
|
||||||
|
*/
|
||||||
|
"renoteToChannel": string;
|
||||||
|
/**
|
||||||
|
* 他のチャンネルにリノート
|
||||||
|
*/
|
||||||
|
"renoteToOtherChannel": string;
|
||||||
/**
|
/**
|
||||||
* ピン留めされたノート
|
* ピン留めされたノート
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -108,11 +108,14 @@ enterEmoji: "絵文字を入力"
|
||||||
renote: "リノート"
|
renote: "リノート"
|
||||||
unrenote: "リノート解除"
|
unrenote: "リノート解除"
|
||||||
renoted: "リノートしました。"
|
renoted: "リノートしました。"
|
||||||
|
renotedToX: "{name} にリノートしました。"
|
||||||
cantRenote: "この投稿はリノートできません。"
|
cantRenote: "この投稿はリノートできません。"
|
||||||
cantReRenote: "リノートをリノートすることはできません。"
|
cantReRenote: "リノートをリノートすることはできません。"
|
||||||
quote: "引用"
|
quote: "引用"
|
||||||
inChannelRenote: "チャンネル内リノート"
|
inChannelRenote: "チャンネル内リノート"
|
||||||
inChannelQuote: "チャンネル内引用"
|
inChannelQuote: "チャンネル内引用"
|
||||||
|
renoteToChannel: "チャンネルにリノート"
|
||||||
|
renoteToOtherChannel: "他のチャンネルにリノート"
|
||||||
pinnedNote: "ピン留めされたノート"
|
pinnedNote: "ピン留めされたノート"
|
||||||
pinned: "ピン留め"
|
pinned: "ピン留め"
|
||||||
you: "あなた"
|
you: "あなた"
|
||||||
|
|
|
@ -518,6 +518,7 @@ export function getRenoteMenu(props: {
|
||||||
|
|
||||||
const channelRenoteItems: MenuItem[] = [];
|
const channelRenoteItems: MenuItem[] = [];
|
||||||
const normalRenoteItems: MenuItem[] = [];
|
const normalRenoteItems: MenuItem[] = [];
|
||||||
|
const normalExternalChannelRenoteItems: MenuItem[] = [];
|
||||||
|
|
||||||
if (appearNote.channel) {
|
if (appearNote.channel) {
|
||||||
channelRenoteItems.push(...[{
|
channelRenoteItems.push(...[{
|
||||||
|
@ -596,12 +597,49 @@ export function getRenoteMenu(props: {
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
}]);
|
}]);
|
||||||
|
|
||||||
|
normalExternalChannelRenoteItems.push({
|
||||||
|
type: 'parent',
|
||||||
|
icon: 'ti ti-repeat',
|
||||||
|
text: appearNote.channel ? i18n.ts.renoteToOtherChannel : i18n.ts.renoteToChannel,
|
||||||
|
children: async () => {
|
||||||
|
const channels = await misskeyApi('channels/my-favorites', {
|
||||||
|
limit: 30,
|
||||||
|
});
|
||||||
|
return channels.filter((channel) => {
|
||||||
|
if (!appearNote.channelId) return true;
|
||||||
|
return channel.id !== appearNote.channelId;
|
||||||
|
}).map((channel) => ({
|
||||||
|
text: channel.name,
|
||||||
|
action: () => {
|
||||||
|
const el = props.renoteButton.value;
|
||||||
|
if (el) {
|
||||||
|
const rect = el.getBoundingClientRect();
|
||||||
|
const x = rect.left + (el.offsetWidth / 2);
|
||||||
|
const y = rect.top + (el.offsetHeight / 2);
|
||||||
|
os.popup(MkRippleEffect, { x, y }, {}, 'end');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!props.mock) {
|
||||||
|
misskeyApi('notes/create', {
|
||||||
|
renoteId: appearNote.id,
|
||||||
|
channelId: channel.id,
|
||||||
|
}).then(() => {
|
||||||
|
os.toast(i18n.tsx.renotedToX({ name: channel.name }));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}));
|
||||||
|
},
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
const renoteItems = [
|
const renoteItems = [
|
||||||
...normalRenoteItems,
|
...normalRenoteItems,
|
||||||
...(channelRenoteItems.length > 0 && normalRenoteItems.length > 0) ? [{ type: 'divider' }] as MenuItem[] : [],
|
...(channelRenoteItems.length > 0 && normalRenoteItems.length > 0) ? [{ type: 'divider' }] as MenuItem[] : [],
|
||||||
...channelRenoteItems,
|
...channelRenoteItems,
|
||||||
|
...(normalExternalChannelRenoteItems.length > 0 && (normalRenoteItems.length > 0 || channelRenoteItems.length > 0)) ? [{ type: 'divider' }] as MenuItem[] : [],
|
||||||
|
...normalExternalChannelRenoteItems,
|
||||||
];
|
];
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|
Loading…
Reference in a new issue