QuoteBacklink = # Backlinks appending need to work for: # - previous, same, and following posts. # - existing and yet-to-exist posts. # - newly fetched posts. # - clones. # XXX what about order for fetched posts? # # First callback creates a map of quoted -> [quoters], # and append backlinks to posts that already have containers. # Second callback creates, fill and append containers. init: -> return if !Conf['Quote Backlinks'] @frag = $.nodes [$.tn(' '), $.el 'a', className: 'backlink'] @map = {} Post.callbacks.push name: 'Quote Backlinking Part 1' cb: @firstNode Post.callbacks.push name: 'Quote Backlinking Part 2' cb: @secondNode firstNode: -> return if @isClone addNodes = (post, that) -> $.add post.nodes.backlinkContainer, QuoteBacklink.buildBacklink post, that for quoteID in @quotes (QuoteBacklink.map[quoteID] or= []).push @fullID continue unless (post = g.posts[quoteID])? and container = post.nodes.backlinkContainer addNodes post, @ for post in post.clones addNodes post, @ return secondNode: -> # Don't backlink the OP. return unless @isReply or Conf['OP Backlinks'] if @isClone @nodes.backlinkContainer = $ '.backlink-container', @nodes.info for backlink in @nodes.backlinks QuoteMarkers.parseQuotelink @, backlink, true, Conf['backlink'].replace(/%id/g, Get.postDataFromLink(backlink).postID) return @nodes.backlinkContainer = container = $.el 'span', className: 'backlink-container' if map = QuoteBacklink.map[@fullID] for quoteID in map when post = g.posts[quoteID] # Post hasn't been collected since. $.add container, QuoteBacklink.buildBacklink @, post $.add @nodes.info, container buildBacklink: (quoted, quoter) -> $.addClass quoted.nodes.post, 'quoted' frag = QuoteBacklink.frag.cloneNode true a = frag.querySelector "a:last-of-type" a.href = Build.path quoter.board.ID, quoter.thread.ID, quoter.ID a.textContent = text = Conf['backlink'].replace /%id/g, quoter.ID if quoter.isDead $.addClass a, 'deadlink' if quoter.isHidden $.addClass a, 'filtered' QuoteMarkers.parseQuotelink quoted, a, false, text if Conf['Quote Previewing'] $.on a, 'mouseover', QuotePreview.mouseover if Conf['Quote Inlining'] $.on a, 'click', QuoteInline.toggle if Conf['Quote Hash Navigation'] hash = QuoteInline.qiQuote a, quoter.isHidden if Conf['JSON Navigation'] if hash Navigate.singleQuoteLink hash else unless Conf['Quote Inlining'] Navigate.singleQuoteLink a frag