summaryrefslogtreecommitdiff
path: root/js/codeq/login.js
blob: e1daadfe58a9397400b2f2819cf26ee7fa346b72 (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
(function(){
    var urlPrefix = '/svc/';

    $(document).ready(function () {

        $.ajax({
            'type': 'POST',
            'url': urlPrefix + 'list_problems',
            'accepts': 'application/json',
            'contentType': 'application/json; charset=UTF-8',
            'data': JSON.stringify({}),
            'processData': false,
            'dataType': 'json',
            'error': function loginErrorHandler(jqXHR, textStatus, errorThrown) {
                $('#disabled').css('cursor', '');
                alert('Request to obtain list of problems failed: ' + (errorThrown || textStatus));
            },
            'success': function loginSuccessHandler(data, textStatus, jqXHR) {
                var i, groups, group, problems, problem, first_group,
                    jqGroup = $('#problem_group'),
                    jqProblems = $('#problems'),
                    html = [],
                    mapping = {}
                    onGroupChange = function () {
                        var problems = mapping[jqGroup.val()],
                            html = [],
                            i, p;
                        if (problems) {
                            for (i = 0; i < problems.length; i++) {
                                p = problems[i];
                                html.push('<option value="', p.identifier, '">', p.name, '</option>\n')
                            }
                        }
                        jqProblems.html(html.join(''));
                    };

                if (data && (data.code === 0)) {
                    $('#disabled').css('display', 'none');
                    groups = data.problems;
                    for (i = 0; i < groups.length; i++) {
                        group = groups[i];
                        var identifier = group.identifier.language + '/' + group.identifier.group;
                        var name = group.name.language + ': ' + group.name.group;
                        html.push('<option value="', identifier, '">', name, '</option>\n');
                        mapping[identifier] = group.problems;
                    }
                    jqGroup.html(html.join(''));
                    first_group = html[1];
                    html = null;

                    jqGroup.on('click', onGroupChange);
                    jqGroup.val(first_group);
                    onGroupChange();

                    $("#submit").on('click', function () {
                        var identifier = $('#problem_group').val().split('/'),
                            problem = $('#problems').val();
                        if (identifier.length < 2) alert('Choose a problem group');
                        else if (!problem) alert('Choose a problem');
                        else {
                            $.ajax({
                                'type': 'POST',
                                'url': urlPrefix + 'login',
                                'accepts': 'application/json',
                                'contentType': 'application/json; charset=UTF-8',
                                'data': JSON.stringify({
                                    'username': $('#username').val(),
                                    'password': $('#password').val()
                                }),
                                'processData': false,
                                'dataType': 'json',
                                'error': function loginErrorHandler(jqXHR, textStatus, errorThrown) {
                                    alert('Request for login failed: ' + (errorThrown || textStatus));
                                },
                                'success': function loginSuccessHandler(data, textStatus, jqXHR) {
                                    if (data && (data.code === 0)) {
                                        window.location = identifier[0] + '.html#sid=' + data.sid + '/lang=' + identifier[0] + '/grp=' + identifier[1] + '/prb=' + problem;
                                    }
                                    else {
                                        alert('Login failed: code=' + data.code + ', reason=' + data.message);
                                    }
                                }
                            });
                        }
                    });
                }
                else {
                    $('#disabled').css('cursor', '');
                    alert('Obtaining list of problems failed: code=' + data.code + ', reason=' + data.message);
                }
            }
        });
    });
})();