PageSourceSearch

https://factchecker.cloud/src/utils/boardSeen.ts

js factchecker.cloud collected 2026-10-02 01:21:46 UTC 2,889 bytes, 20 lines download raw bytes

1import { safeGetItem, safeSetItem } from "/src/utils/storageUtils.ts";
2/** 게시판을 마지막으로 본 시각(사용자별, 이 브라우저) — '새 글' 표시 기준. */
3export const BOARD_SEEN_EVENT = "board-seen";
4const key = (userId) => `board_last_seen:${userId}`;
5export function getBoardLastSeen(userId) {
6	if (!userId) return null;
7	const raw = safeGetItem(key(userId));
8	const t = raw ? Date.parse(raw) : NaN;
9	return Number.isFinite(t) ? t : null;
10}
11export function markBoardSeen(userId, latestIso) {
12	if (!userId || !latestIso) return;
13	const prev = getBoardLastSeen(userId);
14	if (prev !== null && prev >= Date.parse(latestIso)) return;
15	safeSetItem(key(userId), latestIso);
16	// 같은 탭의 헤더 표시를 즉시 갱신(다른 탭은 storage 이벤트로).
17	window.dispatchEvent(new Event(BOARD_SEEN_EVENT));
18}
19
20//# sourceMappingURL=data:application/json;base64,eyJtYXBwaW5ncyI6IkFBQUEsU0FBUyxhQUFhLG1CQUFtQjs7QUFHekMsT0FBTyxNQUFNLG1CQUFtQjtBQUVoQyxNQUFNLE9BQU8sV0FBbUIsbUJBQW1CO0FBRW5ELE9BQU8sU0FBUyxpQkFBaUIsUUFBMkM7Q0FDMUUsSUFBSSxDQUFDLFFBQVEsT0FBTztDQUNwQixNQUFNLE1BQU0sWUFBWSxJQUFJLE1BQU0sQ0FBQztDQUNuQyxNQUFNLElBQUksTUFBTSxLQUFLLE1BQU0sR0FBRyxJQUFJO0NBQ2xDLE9BQU8sT0FBTyxTQUFTLENBQUMsSUFBSSxJQUFJO0FBQ2xDO0FBRUEsT0FBTyxTQUFTLGNBQWMsUUFBNEIsV0FBNEM7Q0FDcEcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXO0NBQzNCLE1BQU0sT0FBTyxpQkFBaUIsTUFBTTtDQUNwQyxJQUFJLFNBQVMsUUFBUSxRQUFRLEtBQUssTUFBTSxTQUFTLEdBQUc7Q0FDcEQsWUFBWSxJQUFJLE1BQU0sR0FBRyxTQUFTOztDQUVsQyxPQUFPLGNBQWMsSUFBSSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xEIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbImJvYXJkU2Vlbi50cyJdLCJ2ZXJzaW9uIjozLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzYWZlR2V0SXRlbSwgc2FmZVNldEl0ZW0gfSBmcm9tICcuL3N0b3JhZ2VVdGlscyc7XG5cbi8qKiDqsozsi5ztjJDsnYQg66eI7KeA66eJ7Jy866GcIOuzuCDsi5zqsIEo7IKs7Jqp7J6Q67OELCDsnbQg67iM65287Jqw7KCAKSDigJQgJ+yDiCDquIAnIO2RnOyLnCDquLDspIAuICovXG5leHBvcnQgY29uc3QgQk9BUkRfU0VFTl9FVkVOVCA9ICdib2FyZC1zZWVuJztcblxuY29uc3Qga2V5ID0gKHVzZXJJZDogc3RyaW5nKSA9PiBgYm9hcmRfbGFzdF9zZWVuOiR7dXNlcklkfWA7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRCb2FyZExhc3RTZWVuKHVzZXJJZDogc3RyaW5nIHwgdW5kZWZpbmVkKTogbnVtYmVyIHwgbnVsbCB7XG4gIGlmICghdXNlcklkKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgcmF3ID0gc2FmZUdldEl0ZW0oa2V5KHVzZXJJZCkpO1xuICBjb25zdCB0ID0gcmF3ID8gRGF0ZS5wYXJzZShyYXcpIDogTmFOO1xuICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKHQpID8gdCA6IG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXJrQm9hcmRTZWVuKHVzZXJJZDogc3RyaW5nIHwgdW5kZWZpbmVkLCBsYXRlc3RJc286IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgaWYgKCF1c2VySWQgfHwgIWxhdGVzdElzbykgcmV0dXJuO1xuICBjb25zdCBwcmV2ID0gZ2V0Qm9hcmRMYXN0U2Vlbih1c2VySWQpO1xuICBpZiAocHJldiAhPT0gbnVsbCAmJiBwcmV2ID49IERhdGUucGFyc2UobGF0ZXN0SXNvKSkgcmV0dXJuO1xuICBzYWZlU2V0SXRlbShrZXkodXNlcklkKSwgbGF0ZXN0SXNvKTtcbiAgLy8g6rCZ7J2AIO2DreydmCDtl6TrjZQg7ZGc7Iuc66W8IOymieyLnCDqsLHsi6Ao64uk66W4IO2DreydgCBzdG9yYWdlIOydtOuypO2KuOuhnCkuXG4gIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChCT0FSRF9TRUVOX0VWRU5UKSk7XG59XG4iXX0=

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.