summaryrefslogtreecommitdiff
path: root/js/codeq/settings.js
blob: 1f35abfa1932471b19ed340bba3f538e0dfb004e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
/* CodeQ: an online programming tutor.
   Copyright (C) 2015 UL FRI

This program is free software: you can redistribute it and/or modify it under
the terms of the GNU Affero General Public License as published by the Free
Software Foundation, either version 3 of the License, or (at your option) any
later version.

This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
details.

You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */

/**
 * Created by robert on 9/29/15.
 *
 */

(function(){
    "use strict";
    var navigationSettings = $('#navigation-settings'),
        guiLangSelect = $('#gui_lang_select'),
        robotAddressInput = $('#robot_address_input'),
        jqDisabledOverlay = $('#disabled'),
        jqSettForm = $("#settingsForm"),
        jqSettCancelBtn = $("#settings_cancel_btn"),
        jqScreenSettings = $('#screen_settings'),
        jqLayoutSelect = $('#gui_layout_select');

    codeq.on('layoutchange', function(){
        $("#screen_prolog").removeClass(codeq.supportedLayouts.join(" ")).addClass(codeq.getLayout());
        $("#screen_python").removeClass(codeq.supportedLayouts.join(" ")).addClass(codeq.getLayout());
        $("#screen_robot").removeClass(codeq.supportedLayouts.join(" ")).addClass(codeq.getLayout());
    });

    codeq.globalStateMachine.register('settings',{
        'jqScreen': jqScreenSettings,
        'isModal': true,

        'enter':function(){
            jqDisabledOverlay.css('display', '');
            navigationSettings.addClass('active');

            robotAddressInput.val(codeq.settings['robot_address']);//set the robot address once we enter the state
            var previousGuiLang = codeq.settings['gui_lang'];
            var previousLayout = codeq.settings['gui_layout'];
            jqSettForm.on("submit", function(e) {
                codeq.settings['robot_address'] = robotAddressInput.val();
                codeq.log.debug("settings for update:"+JSON.stringify(codeq.settings));
                codeq.comms.updateSettings(codeq.settings)
                    .then(function (data) {
                        if (data.code !== 0) {
                            throw new Error('Updating settings failed, code: ' + data.code + ', message: ' + data.message);
                        }
                        history.back();
                    })
                    .fail(function(reason){
                        codeq.log.error('Settings update failed: ' + reason);
                        alert('Settings update failed: ' + reason);
                    })
                    .done();
                e.preventDefault();
            });
            jqSettCancelBtn.on("click",function(){
                jqLayoutSelect.val(previousLayout);
                if ($.inArray(previousLayout, codeq.supportedLayouts) >= 0) codeq.setLayout(previousLayout);
                guiLangSelect.val(previousGuiLang);
                if (previousGuiLang in codeq.supportedLangs) codeq.setLang(previousGuiLang);
                history.back();
            });
            guiLangSelect.on("change",function() {
                var lang = guiLangSelect.val();
                if (lang in codeq.supportedLangs) {
                    codeq.setLang(lang);
                }
            });
            jqLayoutSelect.on("change",function(){
                jqDisabledOverlay.css('display', '');
                var newLayout = jqLayoutSelect.val();
                if ($.inArray(newLayout, codeq.supportedLayouts) >= 0){
                    codeq.setLayout(newLayout);
                }
                jqDisabledOverlay.css('display', 'none');
            });
            jqScreenSettings.css('display', '');
            jqDisabledOverlay.css('display', 'none');
        },
        'exit':function(){
            jqSettForm.off('submit');
            jqSettCancelBtn.off('click');
            guiLangSelect.off('select');
            robotAddressInput.val('');
            jqScreenSettings.css('display', 'none');
            navigationSettings.removeClass('active');
        }
    });
})();