diff --git a/src/js/actions/LevelActions.js b/src/js/actions/LevelActions.js index 80638ccd..5aebff8f 100644 --- a/src/js/actions/LevelActions.js +++ b/src/js/actions/LevelActions.js @@ -18,7 +18,14 @@ var LevelActions = { AppDispatcher.handleViewAction({ type: ActionTypes.RESET_LEVELS_SOLVED }); - } + }, + + setIsSolvingLevel: function(isSolvingLevel) { + AppDispatcher.handleViewAction({ + type: ActionTypes.SET_IS_SOLVING_LEVEL, + isSolvingLevel: isSolvingLevel, + }); + }, }; diff --git a/src/js/app/index.js b/src/js/app/index.js index 98568d1c..fce24fbe 100644 --- a/src/js/app/index.js +++ b/src/js/app/index.js @@ -75,6 +75,10 @@ var init = function() { window.LocaleStore = LocaleStore; window.LocaleActions = LocaleActions; window.intl = intl; + + $(window).on('beforeunload', function(e) { + return GlobalStateStore.getIsSolvingLevel() ? 'you have a level in progress' : null; + }); }; var vcsModeRefresh = function(eventData) { diff --git a/src/js/constants/AppConstants.js b/src/js/constants/AppConstants.js index 1c8c80bd..26a32bcd 100644 --- a/src/js/constants/AppConstants.js +++ b/src/js/constants/AppConstants.js @@ -32,7 +32,8 @@ module.exports = { * solve the level, not ask for solution * or solve it again. */ - SOLVE_LEVEL: null + SOLVE_LEVEL: null, + SET_IS_SOLVING_LEVEL: null, }), PayloadSources: keyMirror({ diff --git a/src/js/level/index.js b/src/js/level/index.js index 4e66f433..4dff1703 100644 --- a/src/js/level/index.js +++ b/src/js/level/index.js @@ -58,6 +58,7 @@ var Level = Sandbox.extend({ this.startOffCommand(); this.handleOpen(options.deferred); + LevelActions.setIsSolvingLevel(true); }, getIsGoalExpanded: function() { @@ -65,6 +66,7 @@ var Level = Sandbox.extend({ }, handleOpen: function(deferred) { + LevelActions.setIsSolvingLevel(true); deferred = deferred || Q.defer(); // if there is a multiview in the beginning, open that @@ -573,6 +575,7 @@ var Level = Sandbox.extend({ delete this.mainVis; delete this.goalVis; delete this.goalCanvasHolder; + LevelActions.setIsSolvingLevel(false); }, getInstantCommands: function() { diff --git a/src/js/stores/GlobalStateStore.js b/src/js/stores/GlobalStateStore.js index 74f4e47f..732ea203 100644 --- a/src/js/stores/GlobalStateStore.js +++ b/src/js/stores/GlobalStateStore.js @@ -10,6 +10,7 @@ var _isAnimating = false; var _flipTreeY = false; var _numLevelsSolved = 0; var _disableLevelInstructions = false; +var _isSolvingLevel = false; var GlobalStateStore = Object.assign( {}, @@ -20,6 +21,10 @@ AppConstants.StoreSubscribePrototype, return _isAnimating; }, + getIsSolvingLevel: function() { + return _isSolvingLevel; + }, + getFlipTreeY: function() { return _flipTreeY; }, @@ -37,6 +42,10 @@ AppConstants.StoreSubscribePrototype, var shouldInform = false; switch (action.type) { + case ActionTypes.SET_IS_SOLVING_LEVEL: + _isSolvingLevel = action.isSolvingLevel; + shouldInform = true; + break; case ActionTypes.CHANGE_IS_ANIMATING: _isAnimating = action.isAnimating; shouldInform = true;