From aaa196e3b7d0aa52191bae9bfe88154a7b1ec8b4 Mon Sep 17 00:00:00 2001 From: Lalle <29478339+LalleSX@users.noreply.github.com> Date: Wed, 10 May 2023 02:20:31 +0200 Subject: [PATCH] types --- src/Images/ImageCommon.ts | 2 +- src/Posting/Captcha.ts | 1 + src/Quotelinks/Quotify.ts | 26 ++++++++++++++++++++------ src/classes/CatalogThread.ts | 11 +++++++++-- src/globals/globals.ts | 1 + src/site/SW.tinyboard.ts | 6 ++++-- src/site/SW.yotsuba.tsx | 24 ++++++++++++++++-------- 7 files changed, 52 insertions(+), 19 deletions(-) diff --git a/src/Images/ImageCommon.ts b/src/Images/ImageCommon.ts index a707860..a188e83 100644 --- a/src/Images/ImageCommon.ts +++ b/src/Images/ImageCommon.ts @@ -79,7 +79,7 @@ const ImageCommon = { } } - const threadJSON = g.SITE.urls.threadJSON?.(post) + const threadJSON = g.SITE.urls.threadJSON?.(post, fileObj) if (!threadJSON) { return } const parseJSON = function (isArchiveURL) { let needle, postObj diff --git a/src/Posting/Captcha.ts b/src/Posting/Captcha.ts index 307b8c0..1f82730 100644 --- a/src/Posting/Captcha.ts +++ b/src/Posting/Captcha.ts @@ -10,6 +10,7 @@ import CaptchaT from "./Captcha.t" import QR from "./QR" const Captcha = { + replace: CaptchaReplace, cache: { init() { $.on(d, 'SaveCaptcha', e => { diff --git a/src/Quotelinks/Quotify.ts b/src/Quotelinks/Quotify.ts index 6dff1f0..d1c68b6 100644 --- a/src/Quotelinks/Quotify.ts +++ b/src/Quotelinks/Quotify.ts @@ -80,7 +80,12 @@ const Quotify = { // Don't (Dead) when quotifying in an archived post, // and we know the post still exists. a = $.el('a', { - href: g.SITE.Build.postURL(boardID, post.thread.ID, postID), + href: g.SITE.Build.postURL({ + siteID: boardID, + boardID, + threadID: post.thread.ID, + postID + }), className: 'quotelink', textContent: quote } @@ -88,12 +93,17 @@ const Quotify = { } else { // Replace the .deadlink span if we can redirect. a = $.el('a', { - href: g.SITE.Build.postURL(boardID, post.thread.ID, postID), + href: g.SITE.Build.postURL({ + siteID: boardID, + boardID, + threadID: 0, + postID + }), className: 'quotelink deadlink', textContent: quote } ) - $.add(a, Post.deadMark.cloneNode(true)) + $.add(a, Post.deadMark.cloneNode(true) as Element) $.extend(a.dataset, { boardID, threadID: post.thread.ID, postID }) } @@ -108,7 +118,7 @@ const Quotify = { textContent: quote } ) - $.add(a, Post.deadMark.cloneNode(true)) + $.add(a, Post.deadMark.cloneNode(true) as Element) if (fetchable) { // Make it function as a normal quote if we can fetch the post. $.addClass(a, 'quotelink') @@ -120,7 +130,7 @@ const Quotify = { if (!this.quotes.includes(quoteID)) { this.quotes.push(quoteID) } if (!a) { - $.add(deadlink, Post.deadMark.cloneNode(true)) + $.add(deadlink, Post.deadMark.cloneNode(true) as Element) return } @@ -138,7 +148,11 @@ const Quotify = { $.before(deadlink, green) $.add(green, deadlink) } - return $.replace(deadlink, [...Array.from(deadlink.childNodes)]) + return $.replace(deadlink, $.el('span', { + className: 'deadlink', + textContent: deadlink.textContent + } + )) } } export default Quotify diff --git a/src/classes/CatalogThread.ts b/src/classes/CatalogThread.ts index ab9eb25..e52f2a1 100644 --- a/src/classes/CatalogThread.ts +++ b/src/classes/CatalogThread.ts @@ -7,9 +7,16 @@ export default class CatalogThread { ID: string | number thread: Thread board: Board - nodes: { root: Post; thumb: HTMLElement; icons: any; postCount: number; fileCount: number; pageCount: number; replies: any } + nodes: { + root: Post, + thumb: Element, + icons: Element, + postCount: Element, + fileCount: Element, + pageCount: Element, + replies: Element + } toString() { return this.ID } - constructor(root: Post, thread: Thread) { this.thread = thread this.ID = this.thread.ID + '' diff --git a/src/globals/globals.ts b/src/globals/globals.ts index c7347d3..49a2f7a 100644 --- a/src/globals/globals.ts +++ b/src/globals/globals.ts @@ -10,6 +10,7 @@ declare global { wrappedJSObject: any Tegaki: any FCX: any + Parser: any } } // interfaces might be incomplete diff --git a/src/site/SW.tinyboard.ts b/src/site/SW.tinyboard.ts index 8aeff78..d48d401 100644 --- a/src/site/SW.tinyboard.ts +++ b/src/site/SW.tinyboard.ts @@ -74,7 +74,6 @@ const SWTinyboard = { } return false }, - ID: 'sw-tinyboard', parseThreadMetadata(el: HTMLElement) { const thread = dict() const op = el.querySelector('.op') @@ -219,6 +218,9 @@ $\ }, Build: { + postURL({ siteID, boardID, threadID, postID }) { + return `${Conf['siteProperties'][siteID]?.root || `http://${siteID}/`}${boardID}/res/${threadID}.html#${postID}` + }, parseJSON(data, board) { const o = this.parseJSON(data, board) if (data.ext === 'deleted') { @@ -315,7 +317,7 @@ $\ if (!(info = infoNode.textContent.match(/\((.*,\s*)?([\d.]+ ?[KMG]?B).*\)/))) { return false } const nameNode = $('.postfilename', text) $.extend(file, { - name: nameNode ? (nameNode.title || nameNode.textContent) : link.pathname.match(/[^/]*$/)[0], + name: nameNode ? (nameNode.textContent || '').trim() : '', size: info[2], dimensions: info[0].match(/\d+x\d+/)?.[0] }) diff --git a/src/site/SW.yotsuba.tsx b/src/site/SW.yotsuba.tsx index fc9387f..1f251b5 100644 --- a/src/site/SW.yotsuba.tsx +++ b/src/site/SW.yotsuba.tsx @@ -306,11 +306,19 @@ $\ insertTags(bq) { let node - for (node of $$('s, .removed-spoiler', bq)) { - $.replace(node, [$.tn('[spoiler]'), ...Array.from(node.childNodes), $.tn('[/spoiler]')]) + const nodes = [] + const {children} = bq + for (let i = 0; i < children.length; i++) { + if ((node = children[i]) && (node.nodeName === 'A') && (node.textContent === '>>')) { + nodes.push(node) + } } - for (node of $$('.prettyprint', bq)) { - $.replace(node, [$.tn('[code]'), ...Array.from(node.childNodes), $.tn('[/code]')]) + for (const node of nodes) { + const {href} = node + const {textContent} = node.nextSibling + const tag = $.el('a', {href, textContent}) + $.after(node, tag) + $.rm(node) } }, @@ -342,7 +350,7 @@ $\ }, transformBoardList() { - let node + let node = null const nodes = [] const spacer = () => $.el('span', {className: 'spacer'}) const items = $.X('.//a|.//text()[not(ancestor::a)]', $(SWYotsuba.selectors.boardList)) @@ -622,7 +630,7 @@ $\ thread(thread, data, withReplies) { let root if (root = thread.nodes.root) { - $.rmAll(root) + $.rmAll(root, thread.OP.nodes.root) } else { thread.nodes.root = (root = $.el('div', { className: 'thread', @@ -678,7 +686,7 @@ $\ 'div', generateCatalogThreadHtml(thread, src, imgClass, data, postCount, fileCount, pageCount, staticPath, gifIcon) ) - $.before(thread.OP.nodes.info, [...Array.from(container.childNodes)]) + $.before(thread.OP.nodes.info, container) for (const br of $$('br', thread.OP.nodes.comment)) { if (br.previousSibling && (br.previousSibling.nodeName === 'BR')) { @@ -691,7 +699,7 @@ $\ id: `t${thread}` } ) - if (thread.OP.highlights) { $.addClass(root, ...Array.from(thread.OP.highlights)) } + if (thread.OP.highlights) { $.addClass(root, 'highlight') } if (!thread.OP.file) { $.addClass(root, 'noFile') } root.style.cssText = cssText || ''