From 36921f7644dd8e6eaec44dfbb8d7698b7bb964e8 Mon Sep 17 00:00:00 2001
From: Matt Lott <mattlott@live.com>
Date: Tue, 6 Jan 2015 10:53:32 -0800
Subject: [PATCH 1/3] Fix IE9 script loading
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Script tags weren’t loading sequentially.

IE9 doesn’t support the defer attribute:
https://github.com/h5bp/lazyweb-requests/issues/42
Conditional comments:
http://msdn.microsoft.com/en-us/library/ms537512%28v=vs.85%29.aspx
Breaking change:
https://github.com/codecombat/codecombat/commit/b698745e0505857ef8a21de9
fa2729ff5ab473ce
---
 app/assets/main.html | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/app/assets/main.html b/app/assets/main.html
index 810cf0cf9..3bb759a1f 100644
--- a/app/assets/main.html
+++ b/app/assets/main.html
@@ -28,11 +28,20 @@
   <link rel="shortcut icon" href="/images/favicon.ico">
   <link rel="stylesheet" href="/stylesheets/app.css">
 
+  <!-- IE9 doesn't support defer attribute: https://github.com/h5bp/lazyweb-requests/issues/42 -->
+  <!--[if IE 9]>
+  <script src="/lib/ace/ace.js"></script>
+  <script src="/javascripts/box2d.js"></script>
+  <script src="/javascripts/vendor.js"></script>
+  <script src="/javascripts/aether.js"></script>
+  <script src="/javascripts/app.js"></script>
+  <![endif]-->
+  <![if (gt IE 9)|(!IE)]>
   <script src="/lib/ace/ace.js" defer></script>
-  <!--[if IE 9]><script src="/javascripts/box2d.js"></script><![endif]-->
   <script src="/javascripts/vendor.js" defer></script>
   <script src="/javascripts/aether.js" defer></script>
   <script src="/javascripts/app.js" defer></script> <!-- it's all Backbone! -->
+  <![endif]>
   <script>
 
     // Placeholder for iPad, which inspects the user object at the bottom of an injected page.

From 677ba56ce9a0856f0c2c461ba41f534b03579f24 Mon Sep 17 00:00:00 2001
From: Nick Winter <livelily@gmail.com>
Date: Tue, 6 Jan 2015 12:40:10 -0800
Subject: [PATCH 2/3] Make sure to save level sessions after difficulty
 increase.

---
 app/models/CocoModel.coffee    | 4 ++--
 app/models/LevelSession.coffee | 1 +
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/app/models/CocoModel.coffee b/app/models/CocoModel.coffee
index e6f649bc4..e9a687882 100644
--- a/app/models/CocoModel.coffee
+++ b/app/models/CocoModel.coffee
@@ -19,10 +19,10 @@ class CocoModel extends Backbone.Model
     @on 'error', @onError, @
     @on 'add', @onLoaded, @
     @saveBackup = _.debounce(@saveBackup, 500)
-    @usesVersions = @schema().properties.version?
+    @usesVersions = @schema()?.properties?.version?
 
   backupKey: ->
-    if @usesVersions then @id else @id + ':' + @attributes.__v  # TODO: doesn't work because __v doesn't actually increment?
+    if @usesVersions then @id else @id + ':' + @attributes.__v  # TODO: doesn't work because __v doesn't actually increment. #2061
 
   setProjection: (project) ->
     return if project is @project
diff --git a/app/models/LevelSession.coffee b/app/models/LevelSession.coffee
index cc30de4b8..cf8f21a45 100644
--- a/app/models/LevelSession.coffee
+++ b/app/models/LevelSession.coffee
@@ -59,6 +59,7 @@ module.exports = class LevelSession extends CocoModel
     state.difficulty = (state.difficulty ? 0) + 1
     delete state.lastUnsuccessfulSubmissionTime
     @set 'state', state
+    @save()
 
   timeUntilResubmit: ->
     state = @get('state') ? {}

From 9a3f18e60ae8ee4efb8b96c4464edf8e0455744d Mon Sep 17 00:00:00 2001
From: Nick Winter <livelily@gmail.com>
Date: Tue, 6 Jan 2015 13:03:09 -0800
Subject: [PATCH 3/3] Save more UserCodeProblems and LevelSessions.

---
 app/lib/LevelBus.coffee                    | 4 ++--
 app/views/play/level/tome/SpellView.coffee | 3 ---
 2 files changed, 2 insertions(+), 5 deletions(-)

diff --git a/app/lib/LevelBus.coffee b/app/lib/LevelBus.coffee
index 750e5fbc1..adbf25c28 100644
--- a/app/lib/LevelBus.coffee
+++ b/app/lib/LevelBus.coffee
@@ -30,9 +30,9 @@ module.exports = class LevelBus extends Bus
     super(arguments...)
     @changedSessionProperties = {}
     if document.location.href.search('codecombat.com') isnt -1
-      @saveSession = _.debounce(@reallySaveSession, 10000, {maxWait: 30000})  # Save us during HoC
+      @saveSession = _.debounce(@reallySaveSession, 4000, {maxWait: 10000})  # Save slower on production.
     else
-      @saveSession = _.debounce(@reallySaveSession, 1000, {maxWait: 5000})  # Not this fast during HoC
+      @saveSession = _.debounce(@reallySaveSession, 1000, {maxWait: 5000})  # Save quickly in development.
     @playerIsIdle = false
 
   init: ->
diff --git a/app/views/play/level/tome/SpellView.coffee b/app/views/play/level/tome/SpellView.coffee
index cde4b7ecc..7f0e3465d 100644
--- a/app/views/play/level/tome/SpellView.coffee
+++ b/app/views/play/level/tome/SpellView.coffee
@@ -733,9 +733,6 @@ module.exports = class SpellView extends CocoView
     hashValue = aether.raw + aetherProblem.message
     return if hashValue of @savedProblems
     @savedProblems[hashValue] = true
-    if Math.random() > 0.01
-      # Let's only save a tiny fraction of these during HoC to reduce writes.
-      return
 
     # Save new problem
     @userCodeProblem = new UserCodeProblem()