summaryrefslogtreecommitdiff
path: root/logikorr.js
blob: a0730bf9e9f584d7a882d4040b1c947dfc30dcc3 (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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
var loader;
var autocompleteList;
YUI().use('node-base', 'io-base', 'io-form', 'io-queue', 'json', function (Y) {
    function markAsChanged(input) {
        input.setAttribute("style", "background-color: #faa");
    }

    function markAsRegistered(input) {
        input.setAttribute("style", "background-color: #afa");
    }

    function registerScoreInputChange(event, input, row) {
        var id = row.getAttribute("mulk:id");
        var inputnum = 0;
        var inputSiblings = input.parentNode.childNodes;
        for (; inputnum < inputSiblings.length; inputnum++) {
            if (inputSiblings[inputnum] == input) {
                break;
            }
        };
        Y.io("update-student-score",
             { 'on'  : { 'complete': function(id, o, args) {
                             try { Y.log(o.responseText); Y.JSON.parse(o.responseText); }
                             catch(e) { return null; }
                             markAsRegistered(input);
                         } },
               'data': "id=" + id + "&score-number=" + inputnum + "&score=" + input.value });
    }

    function makeScoreInput(cell, value) {
        var input = document.createElement('input');
        input.setAttribute('type', 'text');
        input.setAttribute('maxlength', '3');
        input.setAttribute('size', '3');
        if (value != undefined) {
            input.value = value;
        }
        cell.appendChild(input);
        Y.on("keyup", function(e) { ensureFreeInput(cell); }, input, Y);
        Y.on("keyup", function(e) { markAsChanged(input); }, input, Y);
        Y.on("change", registerScoreInputChange, input, Y, input, cell.parentNode);
        return input;
    };

    function ensureFreeInput(scoreCell) {
        if (!(scoreCell.lastChild.value == undefined || scoreCell.lastChild.value == "")) {
            return makeScoreInput(scoreCell);
        } else {
            return scoreCell.lastChild;
        }
    };

    function updateStudentRowFromName(event, nameInput, scoreCell) {
        Y.log(event);
        Y.log(nameInput);
        Y.log(scoreCell);
        function doUpdate(id, o, args) {
            ensureFreeStudentRow();

            var data = o.responseText;
            try {
                var student = Y.JSON.parse(data);
            } catch (e) {
                return null;
            };
            Y.log(student);

            scoreCell.parentNode.setAttribute("mulk:id", student.id);

            while (scoreCell.firstChild) {
                scoreCell.removeChild(scoreCell.firstChild);
            };

            for (var i = 0; i < student.score.length; i++) {
                var x = student.score[i];
                makeScoreInput(scoreCell, x);
            };

            var freeInput = makeScoreInput(scoreCell);
            freeInput.focus();
        }
        var request = Y.io("find-student", { 'on'  : { 'complete': doUpdate },
                                             'data': "name=" + nameInput.value });
    };

    function makeStudentRow() {
        var table = document.getElementById('ergebnisse');
        var num = table.rows.length;
        var row = table.insertRow(num);

        var cell = row.insertCell(0);
        var input = document.createElement('input');
        var completion = document.createElement('div');
        input.setAttribute('type', 'text');
        completion.setAttribute('class', 'autocomplete');
        cell.appendChild(input);
        cell.appendChild(completion);
        new Autocompleter.Local(input, completion, autocompleteList, { 'fullSearch' : true, 'partialChars': 1 });

        var cell = row.insertCell(1);
        makeScoreInput(cell);

        Y.on("blur", updateStudentRowFromName, input, Y, input, cell);

        return row;
    };

    function ensureFreeStudentRow() {
        var table = document.getElementById('ergebnisse')
        var num = table.rows.length;
        var input = table.rows[num - 1].cells[0].firstChild;
        if (!(input.value == undefined || input.value == "")) {
            return makeStudentRow();
        } else {
            return table.lastChild;
        }
    };

    return Y.on('domready', makeStudentRow);
});