Reddit-ish テーマを使用している方のために、動作確認が取れた修正方法を共有します。
Reddit-ish テーマとの互換性
Reddit-ish テーマを使用している方への注意点です:モーダルのボタン自体は正常に動作しますが、デフォルトの行トリガーは機能しません。
問題の原因は、Reddit-ish が標準のトピック一覧の行の動作を置き換え、トピックカード全体でのクリックを処理している点にあります。そのため、モーダルの通常の行クリック処理が意図した通りに動作しません。
Topic Preview Modal の設定を以下に変更すると、
Trigger style: button
Plugin outlet: topic-list-after-title
正しく動作します。これは、Reddit-ish が既に topic-list-after-title アウトレットを含んでいるためです。
カード全体のクリック動作を維持するために、Topic Preview Modal をボタンモードのままにし、Reddit-ish の既存の openTopic() アクションを変更して、動作するモーダルボタンをトリガーするようにしました。
元の Reddit-ish のアクションは以下の通りです:
@action
openTopic(event) {
if (
(event.target.nodeName === "A" && !event.target.closest(".raw-link")) ||
event.target.closest(".badge-wrapper")
) {
return;
}
const { navigateToTopic, topic } = this.args.outletArgs;
if (wantsNewWindow(event)) {
window.open(topic.lastUnreadUrl, "_blank");
} else {
navigateToTopic(topic, topic.lastUnreadUrl);
}
}
これを以下のように変更しました:
@action
openTopic(event) {
if (
(event.target.nodeName === "A" && !event.target.closest(".raw-link")) ||
event.target.closest(".badge-wrapper") ||
event.target.closest(".topic-preview-modal__trigger-wrapper")
) {
return;
}
const { navigateToTopic, topic } = this.args.outletArgs;
if (wantsNewWindow(event)) {
window.open(topic.lastUnreadUrl, "_blank");
return;
}
const previewButton = event.currentTarget.querySelector(
".topic-preview-modal__trigger-wrapper--button"
);
if (previewButton) {
event.preventDefault();
event.stopPropagation();
previewButton.click();
return;
}
navigateToTopic(topic, topic.lastUnreadUrl);
}
モーダルのボタントリガーは以下のようにレンダリングされます:
<div class="topic-preview-modal__trigger-wrapper">
<span
role="button"
class="topic-preview-modal__trigger-wrapper--button"
>
したがって、これはモーダルのロジックを再作成するものではなく、単に Reddit-ish のカードクリックが既存の動作するプレビューボタンをトリガーするようになります。
その結果、以下のような動作になります:
- トピックカードのクリックでプレビューモーダルが開きます。
- トピックタイトルのクリックでプレビューモーダルが開きます。
- プレビューボタンも引き続き動作します。
- Cmd/Ctrl+クリックで、通常通り新しいタブでトピックが開きます。
- カテゴリーやその他の通常のリンクは通常通り動作します。
- プレビューボタンが存在しない場合、Reddit-ish は通常のトピックナビゲーションにフォールバックします。
つまり、基盤となるモーダルは Reddit-ish と正常に動作しますが、互換性の問題はデフォルトの行トリガーに特化しています。
また、以下の CSS を使用してボタンを非表示にしました:
.topic-preview-modal__trigger-wrapper {
position: absolute;
width: 1px;
height: 1px;
overflow: hidden;
opacity: 0;
pointer-events: none;
}