summaryrefslogtreecommitdiff
path: root/js
diff options
context:
space:
mode:
authorAleš Smodiš <aless@guru.si>2015-12-15 11:26:23 +0100
committerAleš Smodiš <aless@guru.si>2015-12-15 11:26:23 +0100
commit13c8be3d82350082093df8cd65771f09fcb83c54 (patch)
tree3df49dfdff29a1d57cb30857c323187d50852a5e /js
parent8b223c8ad6e096105703776a59937da62d8cb3d5 (diff)
Fixed the bug about the loss of problem solving screen state when entering a navigation-bar state and getting back.
Now every state carries with itself the publicly exposed jqScreen object and isModal boolean information, which is used by the globalStateMachine in the actualTransition method.
Diffstat (limited to 'js')
-rw-r--r--js/codeq/aaiLogin.js2
-rw-r--r--js/codeq/about.js3
-rw-r--r--js/codeq/change_password.js3
-rw-r--r--js/codeq/language.js2
-rw-r--r--js/codeq/login.js2
-rw-r--r--js/codeq/navigation.js44
-rw-r--r--js/codeq/problem_list.js2
-rw-r--r--js/codeq/profile.js10
-rw-r--r--js/codeq/prolog.js3
-rw-r--r--js/codeq/python.js2
-rw-r--r--js/codeq/robot.js2
-rw-r--r--js/codeq/settings.js3
-rw-r--r--js/codeq/signup.js2
-rw-r--r--js/codeq/upgrade_to_aai.js2
14 files changed, 74 insertions, 8 deletions
diff --git a/js/codeq/aaiLogin.js b/js/codeq/aaiLogin.js
index a0a8e68..abe7283 100644
--- a/js/codeq/aaiLogin.js
+++ b/js/codeq/aaiLogin.js
@@ -29,6 +29,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */
samlLoginUrl = '';
codeq.globalStateMachine.register('aailogin',{
+ 'jqScreen': jqScreen,
+
'enter': function(){
jqDisabledOverlay.css('display', '');
codeq.samlLogin = true;//set the flag
diff --git a/js/codeq/about.js b/js/codeq/about.js
index 25fa829..f56d9fd 100644
--- a/js/codeq/about.js
+++ b/js/codeq/about.js
@@ -23,6 +23,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */
jqBtnGoBack = $("#btnAboutGoBack");
codeq.globalStateMachine.register('about',{
+ 'jqScreen': jqScreen,
+ 'isModal': true,
+
'enter': function(){
jqBtnGoBack.on('click',function(){
history.back();//forces a transition to the previous state
diff --git a/js/codeq/change_password.js b/js/codeq/change_password.js
index dc5db39..6ebd6dd 100644
--- a/js/codeq/change_password.js
+++ b/js/codeq/change_password.js
@@ -26,6 +26,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */
jqChangePassForm = $('#formChangePassword');
codeq.globalStateMachine.register('changePassword',{
+ 'jqScreen': jqScreen,
+ 'isModal': true,
+
'enter': function(){
jqCancelBtn.on('click',function(){
history.back();//forces a transition to the previous state
diff --git a/js/codeq/language.js b/js/codeq/language.js
index 5433c84..cacdb32 100644
--- a/js/codeq/language.js
+++ b/js/codeq/language.js
@@ -28,6 +28,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */
};
codeq.globalStateMachine.register('language',{
+ 'jqScreen': jqScreen,
+
'enter': function(){
jqScreen.css('display', '');
jqProlog.on('click', function (e) { e.preventDefault(); choose('prolog') });
diff --git a/js/codeq/login.js b/js/codeq/login.js
index 162e336..f7ddeb3 100644
--- a/js/codeq/login.js
+++ b/js/codeq/login.js
@@ -78,6 +78,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */
formInputs = $('#username, #password');
codeq.globalStateMachine.register('login',{
+ 'jqScreen': jqScreen,
+
'enter': function(){
jqNavigationHomeBtn.off('click');//remove the click listener of this element here
jqNavBarRight.css('display','none');//hide settings etc.
diff --git a/js/codeq/navigation.js b/js/codeq/navigation.js
index da2b04a..cfff71b 100644
--- a/js/codeq/navigation.js
+++ b/js/codeq/navigation.js
@@ -49,7 +49,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */
//the global state machine is a bit different - so it'll be implemented here
var makeGlobalStateMachine = function (def) {
- var currState = null;
+ var currState = null,
+ waitingState = null; // state hidden with a modal form
var stateChangeFun = function historyStateChangeHandler() {
var historyState = History.getState();
codeq.globalStateMachine.actualTransition.apply(codeq.globalStateMachine, $.merge([historyState.data.state] ,historyState.data.params));
@@ -77,11 +78,14 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */
}
},
'destroy': function () {
+ var i;
if (currState) currState.exit();
currState = null;
+ if (waitingState) waitingState.exit();
+ waitingState = null;
History.Adapter.unbind(window, 'statechange', stateChangeFun);
},
- 'register': function (name, state) {
+ 'register': function (name, state, props) {
if (name in def) codeq.log.error('The state ' + name + ' is already registered, overriding');
def[name] = state;
},
@@ -93,9 +97,39 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */
var newState = def[name];//if the newState is not the same as the old or if it doesn't exist at all is already checked at this point
- if (currState) currState.exit();
- currState = newState;
- currState.enter.apply(currState, Array.prototype.slice.apply(arguments, [1]));
+// if (currState) currState.exit();
+// currState = newState;
+// currState.enter.apply(currState, Array.prototype.slice.apply(arguments, [1]));
+ if (currState) {
+ if (newState.isModal) {
+ if (currState.isModal) currState.exit();
+ else {
+ waitingState = currState;
+ waitingState.jqScreen.css('display', 'none');
+ }
+ currState = newState;
+ currState.enter.apply(currState, Array.prototype.slice.apply(arguments, [1]));
+ }
+ else {
+ currState.exit();
+ currState = newState;
+ if (waitingState === newState) {
+ waitingState.jqScreen.css('display', '');
+ waitingState = null;
+ }
+ else {
+ if (waitingState) {
+ waitingState.exit();
+ waitingState = null;
+ }
+ currState.enter.apply(currState, Array.prototype.slice.apply(arguments, [1]));
+ }
+ }
+ }
+ else {
+ currState = newState;
+ currState.enter.apply(currState, Array.prototype.slice.apply(arguments, [1]));
+ }
}
}
};
diff --git a/js/codeq/problem_list.js b/js/codeq/problem_list.js
index 8c3808e..e3ce255 100644
--- a/js/codeq/problem_list.js
+++ b/js/codeq/problem_list.js
@@ -382,6 +382,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */
// ================================================================================
codeq.globalStateMachine.register('problem_list', {
+ 'jqScreen': jqScreen,
+
'enter': function(language){
var data = languageCache[language]; // language data
diff --git a/js/codeq/profile.js b/js/codeq/profile.js
index 09a0e05..f863140 100644
--- a/js/codeq/profile.js
+++ b/js/codeq/profile.js
@@ -20,13 +20,17 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */
(function(){
- var jqBtnChangePass = $("#change_pass_profile"),
+ var jqScreen = $("#screen_profile"),
+ jqBtnChangePass = $("#change_pass_profile"),
jqBtnGoBack = $("#btnProfileGoBack");
codeq.profile = {
};
codeq.globalStateMachine.register('profile',{
+ 'jqScreen': jqScreen,
+ 'isModal': true,
+
'enter': function(){
jqBtnChangePass.on('click',function(){
codeq.globalStateMachine.transition('changePassword');
@@ -35,7 +39,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */
history.back();//forces a transition to the previous state
});
if(codeq.samlLogin) $('#loggedInViaSamlSpan').css("display","");//show the span if we actually logged in with SAML
- $("#screen_profile").css('display', '');
+ jqScreen.css('display', '');
$('#disabled').css('display', 'none');
codeq.comms.getUserStat()
.then(function (data) {
@@ -78,7 +82,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */
'exit' : function(){
jqBtnChangePass.off('click');
jqBtnGoBack.off('click');
- $("#screen_profile").css('display', 'none');
+ jqScreen.css('display', 'none');
$('#loggedInViaSamlSpan').css("display","none");
}
});
diff --git a/js/codeq/prolog.js b/js/codeq/prolog.js
index 7f74aaf..8a6cddc 100644
--- a/js/codeq/prolog.js
+++ b/js/codeq/prolog.js
@@ -82,6 +82,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */
};
var prologHandler; //created when we enter the prolog state and destroyed once we leave it
codeq.globalStateMachine.register('prolog', {
+ 'jqScreen': jqScreen,
+
'enter': function (problemDef, commonDef, currentSolution) {
$('#navigation-problem_list').css('display', '');
$("#navigation-prolog").addClass("active");
@@ -103,6 +105,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */
});
},
'exit': function () {
+ codeq.log.info('prolog exit()');
jqAllButtons.off(); // unregister all event handlers
jqAllQuadrants.off();
jqScreen.css('display', 'none');
diff --git a/js/codeq/python.js b/js/codeq/python.js
index 4033a63..b1f46f5 100644
--- a/js/codeq/python.js
+++ b/js/codeq/python.js
@@ -87,6 +87,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */
};
var pythonHandler; //created when we enter the python state and destroyed once we leave it
codeq.globalStateMachine.register('python', {
+ 'jqScreen': jqScreen,
+
'enter': function (problemDef, commonDef, currentSolution) {
$('#navigation-problem_list').css('display', '');
$("#navigation-python").addClass("active");
diff --git a/js/codeq/robot.js b/js/codeq/robot.js
index 0dca6f3..cfff13d 100644
--- a/js/codeq/robot.js
+++ b/js/codeq/robot.js
@@ -82,6 +82,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */
};
var robotHandler; //created when we enter the robot state and destroyed once we leave it
codeq.globalStateMachine.register('robot', {
+ 'jqScreen': jqScreen,
+
'enter': function (problemDef, commonDef, currentSolution) {
$('#navigation-problem_list').css('display', '');
$("#navigation-robot").addClass("active");
diff --git a/js/codeq/settings.js b/js/codeq/settings.js
index 3e72cbd..6fec614 100644
--- a/js/codeq/settings.js
+++ b/js/codeq/settings.js
@@ -34,6 +34,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */
});
codeq.globalStateMachine.register('settings',{
+ 'jqScreen': jqScreenSettings,
+ 'isModal': true,
+
'enter':function(){
jqDisabledOverlay.css('display', '');
robotAddressInput.val(codeq.settings['robot_address']);//set the robot address once we enter the state
diff --git a/js/codeq/signup.js b/js/codeq/signup.js
index 2667fe4..5f3f2be 100644
--- a/js/codeq/signup.js
+++ b/js/codeq/signup.js
@@ -32,6 +32,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */
jqNavigationHomeBtn = $('#navigation-home');
codeq.globalStateMachine.register('signup',{
+ 'jqScreen': jqScreen,
+
'enter': function(){
jqNavigationHomeBtn.off('click');//remove the click listener of this element here
jqNavBarRight.css('display','none');//hide settings etc.
diff --git a/js/codeq/upgrade_to_aai.js b/js/codeq/upgrade_to_aai.js
index 6ea5855..5357a29 100644
--- a/js/codeq/upgrade_to_aai.js
+++ b/js/codeq/upgrade_to_aai.js
@@ -26,6 +26,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */
jqLangSelect = jqScreen.find('.lang-select');
codeq.globalStateMachine.register('upgradeToAAI',{
+ 'jqScreen': jqScreen,
+
'enter': function(){
jqNoBtn.on('click',function(){
codeq.comms.samlLogin(false)