This commit is contained in:
Lalle 2023-05-10 02:20:31 +02:00
parent 7cb3ec8b6e
commit aaa196e3b7
No known key found for this signature in database
GPG Key ID: A6583D207A8F6B0D
7 changed files with 52 additions and 19 deletions

View File

@ -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

View File

@ -10,6 +10,7 @@ import CaptchaT from "./Captcha.t"
import QR from "./QR"
const Captcha = {
replace: CaptchaReplace,
cache: {
init() {
$.on(d, 'SaveCaptcha', e => {

View File

@ -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

View File

@ -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 + ''

View File

@ -10,6 +10,7 @@ declare global {
wrappedJSObject: any
Tegaki: any
FCX: any
Parser: any
}
}
// interfaces might be incomplete

View File

@ -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]
})

View File

@ -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 || ''