mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2024-12-04 04:41:42 -05:00
Merge branch 'master' into production
This commit is contained in:
commit
c1bc892939
4 changed files with 96 additions and 3 deletions
|
@ -448,6 +448,21 @@ $gameControlMargin: 30px
|
||||||
&.vol-down .glyphicon.glyphicon-volume-down
|
&.vol-down .glyphicon.glyphicon-volume-down
|
||||||
display: inline-block
|
display: inline-block
|
||||||
|
|
||||||
|
#back-button
|
||||||
|
position: absolute
|
||||||
|
left: 70px
|
||||||
|
left: -webkit-calc(1% + 55px)
|
||||||
|
left: calc(1% + 55px)
|
||||||
|
top: 1%
|
||||||
|
padding: 3px 8px
|
||||||
|
@include opacity(0.75)
|
||||||
|
|
||||||
|
&:hover
|
||||||
|
@include opacity(1.0)
|
||||||
|
|
||||||
|
.glyphicon
|
||||||
|
font-size: 32px
|
||||||
|
|
||||||
#campaign-status
|
#campaign-status
|
||||||
position: absolute
|
position: absolute
|
||||||
left: 0
|
left: 0
|
||||||
|
@ -539,10 +554,8 @@ $gameControlMargin: 30px
|
||||||
|
|
||||||
.campaign-name, .levels-completed, .campaign-locked
|
.campaign-name, .levels-completed, .campaign-locked
|
||||||
margin: 0
|
margin: 0
|
||||||
color: rgb(232, 217, 87)
|
color: white
|
||||||
text-shadow: black 2px 2px 0, black -2px -2px 0, black 2px -2px 0, black -2px 2px 0, black 2px 0px 0, black 0px -2px 0, black -2px 0px 0, black 0px 2px 0
|
text-shadow: black 2px 2px 0, black -2px -2px 0, black 2px -2px 0, black -2px 2px 0, black 2px 0px 0, black 0px -2px 0, black -2px 0px 0, black 0px 2px 0
|
||||||
z-index: 30
|
|
||||||
pointer-events: none
|
|
||||||
|
|
||||||
.levels-completed
|
.levels-completed
|
||||||
font-size: 22px
|
font-size: 22px
|
||||||
|
|
|
@ -108,6 +108,10 @@ button.btn.btn-lg.btn-inverse#volume-button(data-i18n="[title]play.adjust_volume
|
||||||
.glyphicon.glyphicon-volume-down
|
.glyphicon.glyphicon-volume-down
|
||||||
.glyphicon.glyphicon-volume-up
|
.glyphicon.glyphicon-volume-up
|
||||||
|
|
||||||
|
if campaign
|
||||||
|
.btn.btn-lg.btn-inverse#back-button(data-i18n="[title]resources.campaigns", title="Campaigns")
|
||||||
|
.glyphicon.glyphicon-globe
|
||||||
|
|
||||||
if campaign && campaign.loaded
|
if campaign && campaign.loaded
|
||||||
h1#campaign-status
|
h1#campaign-status
|
||||||
.campaign-status-background
|
.campaign-status-background
|
||||||
|
|
|
@ -46,6 +46,7 @@ module.exports = class CampaignView extends RootView
|
||||||
'click .level-info-container .start-level': 'onClickStartLevel'
|
'click .level-info-container .start-level': 'onClickStartLevel'
|
||||||
'click .level-info-container .view-solutions': 'onClickViewSolutions'
|
'click .level-info-container .view-solutions': 'onClickViewSolutions'
|
||||||
'click #volume-button': 'onToggleVolume'
|
'click #volume-button': 'onToggleVolume'
|
||||||
|
'click #back-button': 'onClickBack'
|
||||||
'click .portal .campaign': 'onClickPortalCampaign'
|
'click .portal .campaign': 'onClickPortalCampaign'
|
||||||
'mouseenter .portals': 'onMouseEnterPortals'
|
'mouseenter .portals': 'onMouseEnterPortals'
|
||||||
'mouseleave .portals': 'onMouseLeavePortals'
|
'mouseleave .portals': 'onMouseLeavePortals'
|
||||||
|
@ -516,6 +517,12 @@ module.exports = class CampaignView extends RootView
|
||||||
newI = 2
|
newI = 2
|
||||||
@updateVolume volumes[newI]
|
@updateVolume volumes[newI]
|
||||||
|
|
||||||
|
onClickBack: (e) ->
|
||||||
|
Backbone.Mediator.publish 'router:navigate',
|
||||||
|
route: "/play"
|
||||||
|
viewClass: CampaignView
|
||||||
|
viewArgs: [{supermodel: @supermodel}]
|
||||||
|
|
||||||
updateHero: ->
|
updateHero: ->
|
||||||
return unless hero = me.get('heroConfig')?.thangType
|
return unless hero = me.get('heroConfig')?.thangType
|
||||||
for slug, original of ThangType.heroes when original is hero
|
for slug, original of ThangType.heroes when original is hero
|
||||||
|
|
69
scripts/analytics/subscriptionStats.js
Normal file
69
scripts/analytics/subscriptionStats.js
Normal file
|
@ -0,0 +1,69 @@
|
||||||
|
// To use: set the range you want below, make sure your environment has the stripe key, then run:
|
||||||
|
// node scripts/analytics/subscriptions.js
|
||||||
|
|
||||||
|
require('coffee-script');
|
||||||
|
require('coffee-script/register');
|
||||||
|
config = require('../../server_config');
|
||||||
|
if(config.stripe.secretKey.indexOf('sk_test_')==0) {
|
||||||
|
throw new Error('You should not run this on the test data... Get your environment in gear.');
|
||||||
|
}
|
||||||
|
|
||||||
|
stripe = require('stripe')(config.stripe.secretKey);
|
||||||
|
|
||||||
|
var range = {
|
||||||
|
gt: ''+(new Date('2015-01-01').getTime()/1000),
|
||||||
|
lt: ''+(new Date('2015-02-01').getTime()/1000)
|
||||||
|
};
|
||||||
|
|
||||||
|
begin = function(starting_after) {
|
||||||
|
var query = {date: range, limit: 100};
|
||||||
|
if(starting_after) {
|
||||||
|
query.starting_after = starting_after;
|
||||||
|
}
|
||||||
|
stripe.invoices.list(query, onInvoicesReceived);
|
||||||
|
}
|
||||||
|
|
||||||
|
customersPaid = []
|
||||||
|
|
||||||
|
onInvoicesReceived = function(err, invoices) {
|
||||||
|
for(var i in invoices.data) {
|
||||||
|
var invoice = invoices.data[i];
|
||||||
|
if(!invoice.paid) { continue; }
|
||||||
|
customersPaid.push(invoice.customer);
|
||||||
|
}
|
||||||
|
if(invoices.has_more) {
|
||||||
|
console.log('Loaded', customersPaid.length, 'invoices.')
|
||||||
|
begin(invoices.data[i].id);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
console.log('How many customers paid for a subscription:', customersPaid.length);
|
||||||
|
loadNewCustomers();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
loadNewCustomers = function(starting_after) {
|
||||||
|
query = {created: range, limit: 100};
|
||||||
|
if(starting_after) {
|
||||||
|
query.starting_after = starting_after;
|
||||||
|
}
|
||||||
|
stripe.customers.list(query, onCustomersReceived);
|
||||||
|
}
|
||||||
|
|
||||||
|
newCustomersPaid = [];
|
||||||
|
|
||||||
|
onCustomersReceived = function(err, customers) {
|
||||||
|
for(var i in customers.data) {
|
||||||
|
var customer = customers.data[i];
|
||||||
|
if(customersPaid.indexOf(customer.id) == -1) { continue; }
|
||||||
|
newCustomersPaid.push(customer.id);
|
||||||
|
}
|
||||||
|
if(customers.has_more) {
|
||||||
|
console.log('Loaded', newCustomersPaid.length, 'new customers.');
|
||||||
|
loadNewCustomers(customers.data[i].id);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
console.log('How many new customers paid for a subscription:', newCustomersPaid.length);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
begin();
|
Loading…
Reference in a new issue