www.gusucode.com > Flarum PHP论坛 中文版 v0.1 beta7源码程序 > FlarumChina-master/vendor/reflar/gamification/js/forum/src/components/AddVoteButtons.js

    import {extend} from 'flarum/extend'
import app from 'flarum/app'
import Button from 'flarum/components/Button'
import LogInModal from 'flarum/components/LogInModal'
import CommentPost from 'flarum/components/CommentPost'

import VotesModal from 'Reflar/gamification/components/VotesModal'

export default function () {
  extend(CommentPost.prototype, 'actionItems', function (items) {
    const post = this.props.post

    let isUpvoted = app.session.user && post.upvotes().some(user => user === app.session.user)
    let isDownvoted = app.session.user && post.downvotes().some(user => user === app.session.user)

    let color = ''

    if (post.isHidden()) return

    if (app.forum.attribute('autoUpvote') !== null && app.forum.attribute('autoUpvote') !== '') {
      color = app.forum.attribute('VoteColor')
    } else {
      color = '#f44336'
    }

    if (!app.session.user) {
      isDownvoted = false
      isUpvoted = false
    }

    let icon = app.forum.attribute('IconName')

    if (icon === null || icon === '') {
      icon = 'thumbs'
    }

    items.add('upvote',
      Button.component({
        icon: icon + '-up',
        className: 'Post-vote Post-upvote',
        style: isUpvoted !== false ? 'color:' + color : 'color:',
        disabled: !post.discussion().canVote(),
        onclick: () => {
          if (!app.session.user) {
            app.modal.show(new LogInModal())
            return
          }
          if (!post.discussion().canVote()) return
          var upData = post.data.relationships.upvotes.data
          var downData = post.data.relationships.downvotes.data

          isUpvoted = !isUpvoted

          isDownvoted = false

          post.save({isUpvoted, isDownvoted})

          upData.some((upvote, i) => {
            if (upvote.id === app.session.user.id()) {
              upData.splice(i, 1)
              return true
            }
          })

          downData.some((downvote, i) => {
            if (downvote.id === app.session.user.id()) {
              downData.splice(i, 1)
              return true
            }
          })

          if (isUpvoted) {
            upData.unshift({type: 'users', id: app.session.user.id()})
          }
        }
      })
    )

    items.add('points',
      <button disabled={!post.discussion().canSeeVotes()} className='Post-points' onclick={() => {
        if (!post.discussion().canSeeVotes()) return
        app.modal.show(new VotesModal({post}))
      }}>
        {post.data.relationships.upvotes.data.length - post.data.relationships.downvotes.data.length}
      </button>
      )

    items.add('downvote',
      Button.component({
        icon: icon + '-down',
        className: 'Post-vote Post-downvote',
        style: isDownvoted !== false ? 'color:' + color : '',
        disabled: !post.discussion().canVote(),
        onclick: () => {
          if (!app.session.user) {
            app.modal.show(new LogInModal())
            return
          }
          if (!post.discussion().canVote()) return
          var upData = post.data.relationships.upvotes.data
          var downData = post.data.relationships.downvotes.data

          isDownvoted = !isDownvoted

          isUpvoted = false

          post.save({isUpvoted, isDownvoted})

          upData.some((upvote, i) => {
            if (upvote.id === app.session.user.id()) {
              upData.splice(i, 1)
              return true
            }
          })

          downData.some((downvote, i) => {
            if (downvote.id === app.session.user.id()) {
              downData.splice(i, 1)
              return true
            }
          })

          if (isDownvoted) {
            downData.unshift({type: 'users', id: app.session.user.id()})
          }
        }
      })
    )
  })
}