2014-11-28 17:49:41 -08:00
|
|
|
ModalView = require 'views/core/ModalView'
|
2014-12-08 13:45:01 -08:00
|
|
|
AuthModal = require 'views/core/AuthModal'
|
2014-01-03 10:32:13 -08:00
|
|
|
template = require 'templates/play/level/modal/victory'
|
2014-11-28 17:49:41 -08:00
|
|
|
{me} = require 'core/auth'
|
2014-07-23 07:02:45 -07:00
|
|
|
LadderSubmissionView = require 'views/play/common/LadderSubmissionView'
|
2014-01-03 10:32:13 -08:00
|
|
|
LevelFeedback = require 'models/LevelFeedback'
|
2014-11-28 17:49:41 -08:00
|
|
|
utils = require 'core/utils'
|
2014-01-03 10:32:13 -08:00
|
|
|
|
2014-07-17 17:22:26 -07:00
|
|
|
module.exports = class VictoryModal extends ModalView
|
2014-01-03 10:32:13 -08:00
|
|
|
id: 'level-victory-modal'
|
|
|
|
template: template
|
|
|
|
|
2014-05-17 11:55:41 -07:00
|
|
|
subscriptions:
|
|
|
|
'ladder:game-submitted': 'onGameSubmitted'
|
|
|
|
|
2014-01-03 10:32:13 -08:00
|
|
|
events:
|
2014-12-08 13:45:01 -08:00
|
|
|
'click .sign-up-button': 'onClickSignupButton'
|
2014-01-03 10:32:13 -08:00
|
|
|
|
|
|
|
# review events
|
|
|
|
'mouseover .rating i': (e) -> @showStars(@starNum($(e.target)))
|
|
|
|
'mouseout .rating i': -> @showStars()
|
|
|
|
'click .rating i': (e) ->
|
|
|
|
@setStars(@starNum($(e.target)))
|
|
|
|
@$el.find('.review').show()
|
|
|
|
'keypress .review textarea': -> @saveReviewEventually()
|
|
|
|
|
|
|
|
constructor: (options) ->
|
2014-10-15 16:43:26 -04:00
|
|
|
application.router.initializeSocialMediaServices()
|
2014-10-18 18:57:33 -07:00
|
|
|
victory = options.level.get('victory', true)
|
2014-03-13 09:02:19 -07:00
|
|
|
body = utils.i18n(victory, 'body') or 'Sorry, this level has no victory message yet.'
|
2014-01-03 10:32:13 -08:00
|
|
|
@body = marked(body)
|
|
|
|
@level = options.level
|
|
|
|
@session = options.session
|
|
|
|
@saveReviewEventually = _.debounce(@saveReviewEventually, 2000)
|
|
|
|
@loadExistingFeedback()
|
|
|
|
super options
|
|
|
|
|
|
|
|
loadExistingFeedback: ->
|
|
|
|
url = "/db/level/#{@level.id}/feedback"
|
|
|
|
@feedback = new LevelFeedback()
|
2014-08-26 17:34:00 -07:00
|
|
|
@feedback.setURL url
|
2014-01-03 10:32:13 -08:00
|
|
|
@feedback.fetch()
|
2014-03-26 03:25:11 +05:30
|
|
|
@listenToOnce(@feedback, 'sync', -> @onFeedbackLoaded())
|
|
|
|
@listenToOnce(@feedback, 'error', -> @onFeedbackNotFound())
|
2014-01-03 10:32:13 -08:00
|
|
|
|
|
|
|
onFeedbackLoaded: ->
|
|
|
|
@feedback.url = -> '/db/level.feedback/' + @id
|
|
|
|
@$el.find('.review textarea').val(@feedback.get('review'))
|
|
|
|
@$el.find('.review').show()
|
|
|
|
@showStars()
|
|
|
|
|
|
|
|
onFeedbackNotFound: ->
|
|
|
|
@feedback = new LevelFeedback()
|
|
|
|
@feedback.set('levelID', @level.get('slug') or @level.id)
|
|
|
|
@feedback.set('levelName', @level.get('name') or '')
|
2014-07-01 10:16:26 +08:00
|
|
|
@feedback.set('level', {majorVersion: @level.get('version').major, original: @level.get('original')})
|
2014-01-03 10:32:13 -08:00
|
|
|
@showStars()
|
|
|
|
|
2014-12-08 13:45:01 -08:00
|
|
|
onClickSignupButton: (e) ->
|
|
|
|
e.preventDefault()
|
|
|
|
window.tracker?.trackEvent 'Started Signup', category: 'Play Level', label: 'Victory Modal', level: @level.get('slug')
|
|
|
|
@openModalView new AuthModal {mode: 'signup'}
|
|
|
|
|
2014-05-17 11:55:41 -07:00
|
|
|
onGameSubmitted: (e) ->
|
2014-03-10 10:36:28 -07:00
|
|
|
ladderURL = "/play/ladder/#{@level.get('slug')}#my-matches"
|
2014-05-17 11:55:41 -07:00
|
|
|
Backbone.Mediator.publish 'router:navigate', route: ladderURL
|
2014-03-10 10:36:28 -07:00
|
|
|
|
2014-01-03 10:32:13 -08:00
|
|
|
getRenderData: ->
|
|
|
|
c = super()
|
|
|
|
c.body = @body
|
|
|
|
c.me = me
|
2014-03-13 09:02:19 -07:00
|
|
|
c.levelName = utils.i18n @level.attributes, 'name'
|
2014-03-07 21:20:09 -08:00
|
|
|
c.level = @level
|
2014-12-28 13:25:20 -08:00
|
|
|
if c.level.get('type') is 'ladder'
|
2014-05-05 16:59:12 -07:00
|
|
|
c.readyToRank = @session.readyToRank()
|
2014-01-03 10:32:13 -08:00
|
|
|
c
|
|
|
|
|
|
|
|
afterRender: ->
|
|
|
|
super()
|
2014-05-17 11:55:41 -07:00
|
|
|
@ladderSubmissionView = new LadderSubmissionView session: @session, level: @level
|
|
|
|
@insertSubView @ladderSubmissionView, @$el.find('.ladder-submission-view')
|
2014-01-03 10:32:13 -08:00
|
|
|
|
|
|
|
afterInsert: ->
|
|
|
|
super()
|
2014-08-27 12:24:03 -07:00
|
|
|
Backbone.Mediator.publish 'audio-player:play-sound', trigger: 'victory'
|
2014-01-09 10:48:51 -08:00
|
|
|
gapi?.plusone?.go? @$el[0]
|
|
|
|
FB?.XFBML?.parse? @$el[0]
|
|
|
|
twttr?.widgets?.load?()
|
2014-01-03 10:32:13 -08:00
|
|
|
|
|
|
|
destroy: ->
|
|
|
|
@saveReview() if @$el.find('.review textarea').val()
|
2014-02-18 10:03:57 -08:00
|
|
|
@feedback.off()
|
2014-02-14 10:57:47 -08:00
|
|
|
super()
|
2014-01-03 10:32:13 -08:00
|
|
|
|
|
|
|
# rating, review
|
|
|
|
|
|
|
|
starNum: (starEl) -> starEl.prevAll('i').length + 1
|
|
|
|
|
|
|
|
showStars: (num) ->
|
|
|
|
@$el.find('.rating').show()
|
|
|
|
num ?= @feedback?.get('rating') or 0
|
|
|
|
stars = @$el.find('.rating i')
|
|
|
|
stars.removeClass('icon-star').addClass('icon-star-empty')
|
|
|
|
stars.slice(0, num).removeClass('icon-star-empty').addClass('icon-star')
|
|
|
|
|
|
|
|
setStars: (num) ->
|
|
|
|
@feedback.set('rating', num)
|
|
|
|
@feedback.save()
|
|
|
|
|
|
|
|
saveReviewEventually: ->
|
|
|
|
@saveReview()
|
|
|
|
|
|
|
|
saveReview: ->
|
|
|
|
@feedback.set('review', @$el.find('.review textarea').val())
|
|
|
|
@feedback.save()
|