mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2024-11-28 10:06:08 -05:00
91 lines
3.2 KiB
CoffeeScript
91 lines
3.2 KiB
CoffeeScript
RootView = require 'views/core/RootView'
|
|
template = require 'templates/account/subscription-sale-view'
|
|
app = require 'core/application'
|
|
AuthModal = require 'views/core/AuthModal'
|
|
CocoCollection = require 'collections/CocoCollection'
|
|
stripeHandler = require 'core/services/stripe'
|
|
ThangType = require 'models/ThangType'
|
|
utils = require 'core/utils'
|
|
|
|
module.exports = class SubscriptionSaleView extends RootView
|
|
id: "subscription-sale-view"
|
|
template: template
|
|
yearSaleAmount: 7900
|
|
saleEndDate: new Date('2015-09-05')
|
|
|
|
events:
|
|
'click #pay-button': 'onPayButton'
|
|
|
|
subscriptions:
|
|
'stripe:received-token': 'onStripeReceivedToken'
|
|
|
|
constructor: (options) ->
|
|
super(options)
|
|
@description = $.i18n.t('subscribe.stripe_description_year_sale')
|
|
displayAmount = (@yearSaleAmount / 100).toFixed(2)
|
|
@payButtonText = "#{$.i18n.t('subscribe.sale_view_button')} $#{displayAmount}"
|
|
@heroes = new CocoCollection([], {model: ThangType})
|
|
@heroes.url = '/db/thang.type?view=heroes'
|
|
@heroes.setProjection ['original','name','heroClass','description', 'gems','extendedName','i18n']
|
|
@heroes.comparator = 'gems'
|
|
@listenToOnce @heroes, 'sync', @onHeroesLoaded
|
|
@supermodel.loadCollection(@heroes, 'heroes')
|
|
|
|
getRenderData: ->
|
|
c = super()
|
|
c.hasSubscription = me.get('stripe')?.sponsorID
|
|
c.heroes = @heroes.models
|
|
c.payButtonText = @payButtonText
|
|
c.saleEndDate = @saleEndDate
|
|
c.state = @state
|
|
c.stateMessage = @stateMessage
|
|
c
|
|
|
|
onHeroesLoaded: ->
|
|
@formatHero hero for hero in @heroes.models
|
|
|
|
formatHero: (hero) ->
|
|
hero.name = utils.i18n hero.attributes, 'extendedName'
|
|
hero.name ?= utils.i18n hero.attributes, 'name'
|
|
hero.description = utils.i18n hero.attributes, 'description'
|
|
hero.class = hero.get('heroClass') or 'Warrior'
|
|
|
|
onPayButton: ->
|
|
return @openModalView new AuthModal() if me.isAnonymous()
|
|
@state = undefined
|
|
@stateMessage = undefined
|
|
@render()
|
|
|
|
# Show Stripe handler
|
|
application.tracker?.trackEvent 'Started sale landing page subscription purchase'
|
|
@timestampForPurchase = new Date().getTime()
|
|
stripeHandler.open
|
|
amount: @yearSaleAmount
|
|
description: @description
|
|
bitcoin: true
|
|
alipay: if me.get('country') is 'china' or (me.get('preferredLanguage') or 'en-US')[...2] is 'zh' then true else 'auto'
|
|
|
|
onStripeReceivedToken: (e) ->
|
|
@state = 'purchasing'
|
|
@render?()
|
|
|
|
# Call year sale API
|
|
data =
|
|
stripe:
|
|
token: e.token.id
|
|
timestamp: @timestampForPurchase
|
|
jqxhr = $.post('/db/subscription/-/year_sale', data)
|
|
jqxhr.done (data, textStatus, jqXHR) =>
|
|
application.tracker?.trackEvent 'Finished sale landing page subscription purchase', value: @yearSaleAmount
|
|
me.fetch(cache: false).always =>
|
|
app.router.navigate '/play', trigger: true
|
|
jqxhr.fail (xhr, textStatus, errorThrown) =>
|
|
console.error 'We got an error subscribing with Stripe from our server:', textStatus, errorThrown
|
|
application.tracker?.trackEvent 'Failed to finish 1 year subscription purchase', status: textStatus
|
|
if xhr.status is 402
|
|
@state = 'declined'
|
|
@stateMessage = arguments[2]
|
|
else
|
|
@state = 'unknown_error'
|
|
@stateMessage = "#{xhr.status}: #{xhr.responseText}"
|
|
@render?()
|