Merge branch 'master' into production

This commit is contained in:
Matt Lott 2014-12-09 12:30:16 -08:00
commit 203374d2cc
8 changed files with 33 additions and 13 deletions

View file

@ -111,9 +111,6 @@ class AudioPlayer extends CocoClass
@soundsToPlayWhenLoaded[name] = audioOptions.volume @soundsToPlayWhenLoaded[name] = audioOptions.volume
audioOptions = @applyPanning audioOptions, pos if @camera and not @camera.destroyed and pos audioOptions = @applyPanning audioOptions, pos if @camera and not @camera.destroyed and pos
instance = createjs.Sound.play name, audioOptions instance = createjs.Sound.play name, audioOptions
# For some reason, individual sound volume control doesn't work any more.
# I tried updating to SoundJS NEXT on 2014-09-10, but couldn't get any sounds to play with that one.
#console.log 'got instance with volume', instance.volume, instance._volume, instance.gainNode?.gain.value
instance instance
hasLoadedSound: (filename, name) -> hasLoadedSound: (filename, name) ->

View file

@ -10,7 +10,7 @@ module.exports = class Simulator extends CocoClass
@options ?= {} @options ?= {}
_.extend @, Backbone.Events _.extend @, Backbone.Events
@trigger 'statusUpdate', 'Starting simulation!' @trigger 'statusUpdate', 'Starting simulation!'
@retryDelayInSeconds = 10 @retryDelayInSeconds = 2
@taskURL = '/queue/scoring' @taskURL = '/queue/scoring'
@simulatedByYou = 0 @simulatedByYou = 0
@god = new God maxAngels: 1, workerCode: @options.workerCode, headless: true # Start loading worker. @god = new God maxAngels: 1, workerCode: @options.workerCode, headless: true # Start loading worker.
@ -85,7 +85,11 @@ module.exports = class Simulator extends CocoClass
processSingleGameResults: (simulationResults) -> processSingleGameResults: (simulationResults) ->
return console.error "Weird, we destroyed the Simulator before it processed results?" if @destroyed return console.error "Weird, we destroyed the Simulator before it processed results?" if @destroyed
taskResults = @formTaskResultsObject simulationResults try
taskResults = @formTaskResultsObject simulationResults
catch error
console.log "Failed to form task results:", error
return @cleanupAndSimulateAnotherTask()
console.log 'Processing results:', taskResults console.log 'Processing results:', taskResults
humanSessionRank = taskResults.sessions[0].metrics.rank humanSessionRank = taskResults.sessions[0].metrics.rank
ogreSessionRank = taskResults.sessions[1].metrics.rank ogreSessionRank = taskResults.sessions[1].metrics.rank
@ -237,7 +241,11 @@ module.exports = class Simulator extends CocoClass
processResults: (simulationResults) -> processResults: (simulationResults) ->
return console.error "Weird, we destroyed the Simulator before it processed results?" if @destroyed return console.error "Weird, we destroyed the Simulator before it processed results?" if @destroyed
taskResults = @formTaskResultsObject simulationResults try
taskResults = @formTaskResultsObject simulationResults
catch error
console.log "Failed to form task results:", error
return @cleanupAndSimulateAnotherTask()
unless taskResults.taskID unless taskResults.taskID
console.error "*** Error: taskResults has no taskID ***\ntaskResults:", taskResults console.error "*** Error: taskResults has no taskID ***\ntaskResults:", taskResults
@cleanupAndSimulateAnotherTask() @cleanupAndSimulateAnotherTask()

View file

@ -27,7 +27,7 @@ module.exports = class MusicPlayer extends CocoClass
onPlayMusic: (e) -> onPlayMusic: (e) ->
return if application.isIPadApp # Hard to measure, but just guessing this will save memory. return if application.isIPadApp # Hard to measure, but just guessing this will save memory.
src = e.file src = e.file
src = "/file#{e.file}#{AudioPlayer.ext}" src = "/file#{src}#{AudioPlayer.ext}"
if (not e.file) or src is @currentMusic?.src if (not e.file) or src is @currentMusic?.src
if e.play then @restartCurrentMusic() else @fadeOutCurrentMusic() if e.play then @restartCurrentMusic() else @fadeOutCurrentMusic()
return return

View file

@ -144,7 +144,7 @@ module.exports = class User extends CocoModel
@subscribeCopyGroup = switch group @subscribeCopyGroup = switch group
when 0, 1, 2 then 'original' when 0, 1, 2 then 'original'
when 3, 4, 5 then 'new' when 3, 4, 5 then 'new'
if /^en/.test(@get('preferredLanguage')) and not me.isAdmin() if (not @get('preferredLanguage') or /^en/.test(@get('preferredLanguage'))) and not me.isAdmin()
application.tracker.identify subscribeCopyGroup: @subscribeCopyGroup application.tracker.identify subscribeCopyGroup: @subscribeCopyGroup
else else
@subscribeCopyGroup = 'original' @subscribeCopyGroup = 'original'

View file

@ -96,6 +96,7 @@ $gameControlMargin: 30px
.map-background .map-background
width: 100% width: 100%
height: 100% height: 100%
@include user-select(none)
.level, .level-shadow .level, .level-shadow
position: absolute position: absolute

View file

@ -48,7 +48,7 @@ block content
strong Variables strong Variables
| - adds the skill of referencing values that change over time. | - adds the skill of referencing values that change over time.
p Students may continue past level 12, depending on their speed and interest, to learn two additional concepts in later levels: p Students may continue past level 20, depending on their speed and interest, to learn two additional concepts in later levels:
ol ol
li li
strong Conditional logic strong Conditional logic

View file

@ -161,7 +161,7 @@ module.exports = class CocoView extends Backbone.View
else else
@warnConnectionError() @warnConnectionError()
return _.delay (=> r.load()), 3000 return _.delay (=> r.load()), 3000
@$el.find('.loading-container .errors').append(loadingErrorTemplate({ @$el.find('.loading-container .errors').append(loadingErrorTemplate({
status: r.jqxhr?.status status: r.jqxhr?.status
name: r.name name: r.name
@ -173,7 +173,7 @@ module.exports = class CocoView extends Backbone.View
warnConnectionError: -> warnConnectionError: ->
msg = $.i18n.t 'loading_error.connection_failure', defaultValue: 'Connection failed.' msg = $.i18n.t 'loading_error.connection_failure', defaultValue: 'Connection failed.'
noty text: msg, layout: 'center', type: 'error', killer: true, timeout: 3000 noty text: msg, layout: 'center', type: 'error', killer: true, timeout: 3000
onRetryResource: (e) -> onRetryResource: (e) ->
res = @supermodel.getResource($(e.target).data('resource-index')) res = @supermodel.getResource($(e.target).data('resource-index'))
# different views may respond to this call, and not all have the resource to reload # different views may respond to this call, and not all have the resource to reload
@ -425,6 +425,9 @@ module.exports = class CocoView extends Backbone.View
isIPadBrowser: -> isIPadBrowser: ->
navigator?.userAgent?.indexOf('iPad') isnt -1 navigator?.userAgent?.indexOf('iPad') isnt -1
isFirefox: ->
navigator.userAgent.toLowerCase().indexOf('firefox') isnt -1
initSlider: ($el, startValue, changeCallback) -> initSlider: ($el, startValue, changeCallback) ->
slider = $el.slider({animate: 'fast'}) slider = $el.slider({animate: 'fast'})
slider.slider('value', startValue) slider.slider('value', startValue)

View file

@ -27,6 +27,8 @@ module.exports = class SimulateTabView extends CocoView
onLoaded: -> onLoaded: ->
super() super()
@render() @render()
if document.location.hash is '#simulate' and not @simulator
@startSimulating()
getRenderData: -> getRenderData: ->
ctx = super() ctx = super()
@ -43,9 +45,18 @@ module.exports = class SimulateTabView extends CocoView
onSimulateButtonClick: (e) -> onSimulateButtonClick: (e) ->
application.tracker?.trackEvent 'Simulate Button Click', {} application.tracker?.trackEvent 'Simulate Button Click', {}
@startSimulating
startSimulating: ->
@simulationPageRefreshTimeout = _.delay @refreshAndContinueSimulating, 20 * 60 * 1000
@simulateNextGame()
$('#simulate-button').prop 'disabled', true $('#simulate-button').prop 'disabled', true
$('#simulate-button').text 'Simulating...' $('#simulate-button').text 'Simulating...'
@simulateNextGame()
refreshAndContinueSimulating: =>
# We refresh the page every now and again to make sure simulations haven't gotten derailed by bogus games, and that simulators don't hang on to old, stale code or data.
document.location.hash = '#simulate'
document.location.reload()
simulateNextGame: -> simulateNextGame: ->
unless @simulator unless @simulator
@ -101,7 +112,7 @@ module.exports = class SimulateTabView extends CocoView
console.log jqxhr.responseText console.log jqxhr.responseText
destroy: -> destroy: ->
clearInterval @refreshInterval clearTimeout @simulationPageRefreshTimeout
@simulator?.destroy() @simulator?.destroy()
super() super()