1
0
Fork 0
mirror of https://github.com/Eggbertx/gochan.git synced 2025-08-27 23:46:23 -07:00
gochan/frontend/ts/dom/posthiding.ts
2023-06-22 07:46:04 -07:00

87 lines
No EOL
2.8 KiB
TypeScript

import $ from "jquery";
import { getStorageVal, setStorageVal } from "../storage";
const noop = () => {
return;
};
/**
* isPostVisible returns true if the post exists and is visible, otherwise false
* @param id the id of the post
*/
export function isPostVisible(id: number) {
const $post = $(`div#op${id}.op-post,div#reply${id}.reply`);
if($post.length === 0)
return false;
return $post.find(".post-text").is(":visible");
}
/**
* setPostVisibility sets the visibility of the post with the given ID. It returns true if it finds
* a post or thread with the given ID, otherwise false
* @param id the id of the post to be toggled
* @param visibility the visibility to be set
* @param onComplete called after the visibility is set
*/
export function setPostVisibility(id: number|string, visibility: boolean, onComplete = noop) {
const $post = $(`div#op${id}.op-post, div#reply${id}.reply`);
if($post.length === 0)
return false;
const $toSet = $post.find(".file-info,.post-text,.upload,.file-deleted-box,br");
const $backlink = $post.find("a.backlink-click");
const hiddenStorage = getStorageVal("hiddenposts", "").split(",");
if(visibility) {
$toSet.show(0, onComplete);
$post.find<HTMLOptionElement>("select.post-actions option").each((e, elem) => {
elem.text = elem.text.replace("Show", "Hide");
});
$backlink.text(id);
const newHidden = [];
for(const sID of hiddenStorage) {
if(sID !== id && newHidden.indexOf(sID) === -1) newHidden.push(sID);
}
setStorageVal("hiddenposts", newHidden.join(","));
} else {
$toSet.hide(0, onComplete);
$post.find<HTMLOptionElement>("select.post-actions option").each((e, elem) => {
elem.text = elem.text.replace("Hide", "Show");
});
$backlink.text(`${id} (hidden)`);
if(hiddenStorage.indexOf(id as string) === -1) hiddenStorage.push(id as string);
setStorageVal("hiddenposts", hiddenStorage.join(","));
}
return true;
}
/**
* setThreadVisibility sets the visibility of the thread with the given ID, as well as its replies.
* It returns true if it finds a thread with the given ID, otherwise false
* @param id the id of the thread to be hidden
* @param visibility the visibility to be set
*/
export function setThreadVisibility(opID: number|string, visibility: boolean) {
const $thread = $(`div#op${opID}.op-post`).parent(".thread");
if($thread.length === 0) return false;
return setPostVisibility(opID, visibility, () => {
const $toSet = $thread.find(".reply-container,b,br");
if(visibility) {
$toSet.show();
} else {
$toSet.hide();
}
});
}
$(() => {
let hiddenPosts = getStorageVal("hiddenposts", "").split(",");
if(typeof hiddenPosts === "number") hiddenPosts = [hiddenPosts];
for(let i = 0; i < hiddenPosts.length; i++) {
const id = hiddenPosts[i];
setThreadVisibility(id, false);
setPostVisibility(id, false);
}
});