From a596691f77c4ed66d9835e73736e8cd99ba747a3 Mon Sep 17 00:00:00 2001 From: ccd0 Date: Sun, 27 Mar 2016 22:21:30 -0700 Subject: [PATCH] Upvotes. --- src/General/Config.coffee | 4 +++ src/General/Main.coffee | 1 + src/Quotelinks/Upvotes.coffee | 49 +++++++++++++++++++++++++++++++++++ src/css/style.css | 5 ++++ 4 files changed, 59 insertions(+) create mode 100644 src/Quotelinks/Upvotes.coffee diff --git a/src/General/Config.coffee b/src/General/Config.coffee index fa8f09aa6..c20d3f558 100644 --- a/src/General/Config.coffee +++ b/src/General/Config.coffee @@ -576,6 +576,10 @@ Config = false 'Thread conversations' ] + 'Upvotes': [ + true + 'Upvote posts.' + ] imageExpansion: 'Fit width': [ diff --git a/src/General/Main.coffee b/src/General/Main.coffee index 7c891c09a..fe171ac48 100644 --- a/src/General/Main.coffee +++ b/src/General/Main.coffee @@ -410,6 +410,7 @@ Main = ['Edit Link', QR.oekaki.menu] ['Download Link', DownloadLink] ['Archive Link', ArchiveLink] + ['Upvotes', Upvotes] ['Quote Inlining', QuoteInline] ['Quote Previewing', QuotePreview] ['Quote Backlinks', QuoteBacklink] diff --git a/src/Quotelinks/Upvotes.coffee b/src/Quotelinks/Upvotes.coffee new file mode 100644 index 000000000..fa5120698 --- /dev/null +++ b/src/Quotelinks/Upvotes.coffee @@ -0,0 +1,49 @@ +Upvotes = + text: '\u305D\u3046\u3060\u306D' + count: {} + + init: -> + return unless g.VIEW is 'thread' and Conf['Upvotes'] + 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 + + Upvotes.count[@fullID] = 0 + + if @quotes.length is 1 and @info.comment.indexOf(Upvotes.text) >= 0 + Upvotes.increment @quotes[0] + + 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.text}\n" + pos = com.selectionStart + com.value = com.value[..pos] + text + com.value[pos...] + pos += text.length + com.setSelectionRange pos, pos + $.event 'input', null, com diff --git a/src/css/style.css b/src/css/style.css index 915086aa3..d89fdd9df 100644 --- a/src/css/style.css +++ b/src/css/style.css @@ -2084,3 +2084,8 @@ grunt.file.expand('src/Linkification/icons/*.png').map(function(file) { :root.gallery-open.fixed #header-bar:not(.autohide) #shortcuts .fa::before { visibility: hidden; } + +/* Upvotes */ +.upvote { + margin: 0 4px; +}