Add the Topic Info Ignore miscellaneous feature.
This commit is contained in:
parent
b8ff891c31
commit
73f3977b62
|
@ -2,10 +2,11 @@ export * from "./anonymize-usernames.js";
|
||||||
export * from "./autocomplete.js";
|
export * from "./autocomplete.js";
|
||||||
export * from "./back-to-top.js";
|
export * from "./back-to-top.js";
|
||||||
export * from "./comment-anchor-fix.js";
|
export * from "./comment-anchor-fix.js";
|
||||||
|
export * from "./hide-topics.js";
|
||||||
export * from "./hide-votes.js";
|
export * from "./hide-votes.js";
|
||||||
export * from "./jump-to-new-comment.js";
|
export * from "./jump-to-new-comment.js";
|
||||||
export * from "./markdown-toolbar.js";
|
export * from "./markdown-toolbar.js";
|
||||||
export * from "./themed-logo.js";
|
export * from "./themed-logo.js";
|
||||||
|
export * from "./topic-info-ignore.js";
|
||||||
export * from "./user-labels.js";
|
export * from "./user-labels.js";
|
||||||
export * from "./username-colors.js";
|
export * from "./username-colors.js";
|
||||||
export * from "./hide-topics.js";
|
|
||||||
|
|
|
@ -0,0 +1,35 @@
|
||||||
|
import {log, pluralize, querySelectorAll} from "../../utilities/exports.js";
|
||||||
|
|
||||||
|
export function runTopicInfoIgnore(): void {
|
||||||
|
const count = moveIgnoreButtons();
|
||||||
|
if (count > 0) {
|
||||||
|
const pluralized = `${count} ${pluralize(count, "ignore button")}`;
|
||||||
|
log(`Moved ${pluralized}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function moveIgnoreButtons(): number {
|
||||||
|
let count = 0;
|
||||||
|
|
||||||
|
for (const topic of querySelectorAll(
|
||||||
|
"article.topic:not(.trx-topic-info-ignore)",
|
||||||
|
)) {
|
||||||
|
const topicInfo = topic.querySelector(".topic-info") ?? undefined;
|
||||||
|
if (topicInfo === undefined) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
const button =
|
||||||
|
topic.querySelector<HTMLButtonElement>('[name="topic-actions-ignore"]') ??
|
||||||
|
undefined;
|
||||||
|
if (button === undefined) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
topic.classList.add("trx-topic-info-ignore");
|
||||||
|
topicInfo.append(button);
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return count;
|
||||||
|
}
|
|
@ -17,6 +17,7 @@ import {
|
||||||
runHideVotesFeature,
|
runHideVotesFeature,
|
||||||
runMarkdownToolbarFeature,
|
runMarkdownToolbarFeature,
|
||||||
runThemedLogoFeature,
|
runThemedLogoFeature,
|
||||||
|
runTopicInfoIgnore,
|
||||||
runUsernameColorsFeature,
|
runUsernameColorsFeature,
|
||||||
} from "./features/exports.js";
|
} from "./features/exports.js";
|
||||||
|
|
||||||
|
@ -112,11 +113,6 @@ async function initialize() {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
const miscEnabled = await fromStorage(Data.MiscellaneousEnabledFeatures);
|
|
||||||
if (miscEnabled.value.has(MiscellaneousFeature.CommentAnchorFix)) {
|
|
||||||
runCommentAnchorFixFeature();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Initialize all the observer-dependent features first.
|
// Initialize all the observer-dependent features first.
|
||||||
await Promise.all(observerFeatures.map(async (feature) => feature()));
|
await Promise.all(observerFeatures.map(async (feature) => feature()));
|
||||||
|
|
||||||
|
@ -150,6 +146,15 @@ async function initialize() {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const miscEnabled = await fromStorage(Data.MiscellaneousEnabledFeatures);
|
||||||
|
if (miscEnabled.value.has(MiscellaneousFeature.CommentAnchorFix)) {
|
||||||
|
runCommentAnchorFixFeature();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (miscEnabled.value.has(MiscellaneousFeature.TopicInfoIgnore)) {
|
||||||
|
runTopicInfoIgnore();
|
||||||
|
}
|
||||||
|
|
||||||
// Insert a placeholder at the end of the body first, then render the rest
|
// Insert a placeholder at the end of the body first, then render the rest
|
||||||
// and use that as the replacement element. Otherwise render() would put it
|
// and use that as the replacement element. Otherwise render() would put it
|
||||||
// at the beginning of the body which causes a bunch of different issues.
|
// at the beginning of the body which causes a bunch of different issues.
|
||||||
|
|
|
@ -25,6 +25,15 @@ function FeatureDescription({
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (feature === MiscellaneousFeature.TopicInfoIgnore) {
|
||||||
|
return (
|
||||||
|
<p class="description">
|
||||||
|
Moves the topic ignore button to be in the info section next to the
|
||||||
|
posted date.
|
||||||
|
</p>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
return <></>;
|
return <></>;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
@import "scripts/hide-topics";
|
@import "scripts/hide-topics";
|
||||||
@import "scripts/jump-to-new-comment";
|
@import "scripts/jump-to-new-comment";
|
||||||
@import "scripts/markdown-toolbar";
|
@import "scripts/markdown-toolbar";
|
||||||
|
@import "scripts/topic-info-ignore";
|
||||||
@import "scripts/user-labels";
|
@import "scripts/user-labels";
|
||||||
@import "scripts/username-colors";
|
@import "scripts/username-colors";
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
.trx-topic-info-ignore {
|
||||||
|
.topic-info {
|
||||||
|
// The first three values are copied from Tildes, the last one we set to add
|
||||||
|
// the Ignore button into.
|
||||||
|
grid-template-columns: 1fr 1.5fr 0.7fr 1fr;
|
||||||
|
|
||||||
|
// Override some of the styles of the button so it doesn't look out of
|
||||||
|
// place as much.
|
||||||
|
.btn-post-action {
|
||||||
|
align-self: center;
|
||||||
|
color: var(--link-color);
|
||||||
|
padding: 0;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
color: var(--link-hover-color);
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -21,6 +21,7 @@ export enum Feature {
|
||||||
*/
|
*/
|
||||||
export enum MiscellaneousFeature {
|
export enum MiscellaneousFeature {
|
||||||
CommentAnchorFix = "comment-anchor-fix",
|
CommentAnchorFix = "comment-anchor-fix",
|
||||||
|
TopicInfoIgnore = "topic-info-ignore",
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue