4chan-x/src/Quotelinks/Upvotes.coffee
2016-03-29 18:38:42 -07:00

91 lines
1.9 KiB
CoffeeScript

Upvotes =
count: {}
text: '\u305D\u3046\u3060\u306D'
regexp: ///
(?:^>.*\n)+
(?:
i
|top
|holy
|shit
|ay*
|oh?
|omg
|god
|jesus
|christ
|fuck
|fukken
|fucking?
|\s
|[.,-]
)*
(?:
\u305D\u3046\u3060\u306D
|this(?!\ )
|\+1
|upvote(?!\ )d?
|under[\ -]?rated
|\/thread
|10\/10
|(?:lol|kek|lel|lmao|(?:ha)+)(?:'?d|[.!]?$)
|saved
|nice(?!\ )
|my\ sides
)
(?=\b|\W|$)
///gmi
init: ->
return unless g.VIEW in ['thread', 'index'] and Conf['Upvotes']
@textPosted = if g.BOARD.ID is 'r9k' then 'This.' else @text
Post.callbacks.push
name: 'Upvotes'
cb: @node
node: ->
return if @isFetchedQuote or @origin?.isFetchedQuote
if @isClone
@nodes.vote = $ '.upvote', @nodes.info
$.on @nodes.vote, 'click', Upvotes.vote
return
a = $.el 'a',
className: 'upvote'
href: 'javascript:;'
textContent: '+'
$.add @nodes.info, a
@nodes.vote = a
$.on a, 'click', Upvotes.vote
return unless g.VIEW is 'thread'
Upvotes.count[@fullID] = 0
quotes = {}
for context in @info.comment.match(Upvotes.regexp) or []
for quote in context.match(/>>\d+/g) or []
quotes[quote[2..]] = true
for quote of quotes
Upvotes.increment "#{g.BOARD}.#{quote}"
increment: (fullID) ->
return unless fullID of Upvotes.count
count = ++Upvotes.count[fullID]
post = g.posts[fullID]
for post in [post, post.clones...]
post.nodes.vote.textContent = "#{Upvotes.text}x#{count}"
return
vote: ->
return unless QR.postingIsEnabled
QR.quote.call @
{com} = QR.nodes
text = "#{Upvotes.textPosted}\n"
pos = com.selectionStart
com.value = com.value[..pos] + text + com.value[pos...]
pos += text.length
com.setSelectionRange pos, pos
$.event 'input', null, com