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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
|
function init()
{
document.getElementById("target_textarea").value = "";
document.getElementById("raw_source_textarea").value = "";
document.getElementById("source").value = "";
document.getElementById("current_seg_id").value = "";
document.getElementById("paused").value = "";
document.getElementById("next").removeAttribute("disabled");
return false;
}
function CreateCORSRequest(method, url)
{
var xhr = new XMLHttpRequest();
if ("withCredentials" in xhr) {
xhr.open(method, url, true);
} else {
xhr = null;
}
return xhr;
}
function catch_return(e)
{
if (e.keyCode == 13) {
e.preventDefault();
Next();
}
return false;
}
function pause()
{
var paused = document.getElementById("paused");
var button = document.getElementById("pause_button");
var next_button = document.getElementById("next");
if (paused.value == 0) {
button.innerHTML = "Unpause";
paused.value = 1;
next.setAttribute("disabled", "disabled");
} else {
button.innerHTML = "Pause";
paused.value = 0;
next.removeAttribute("disabled");
}
}
function Next()
{
// elements
var button = document.getElementById("next");
var target_textarea = document.getElementById("target_textarea")
var raw_source_textarea = document.getElementById("raw_source_textarea");
var current_seg_id = document.getElementById("current_seg_id");
var source = document.getElementById("source");
var status = document.getElementById("status");
// disable button and textarea
button.setAttribute("disabled", "disabled");
target_textarea.setAttribute("disabled", "disabled");
var port = document.getElementById("port").value;
var base_url = "http://coltrane.cl.uni-heidelberg.de:"+port;
var key = document.getElementById("key").value;
next_url = base_url+"/next?key="+key;
var post_edit = target_textarea.value;
if (post_edit != "") {
// compose request
next_url += "&example="+source.value+" %7C%7C%7C "+post_edit;
// update document overview
document.getElementById("seg_"+(current_seg_id.value)+"_t").innerHTML=post_edit;
} else {
if (source.value != "") {
alert("Error: 1");
}
// FIXME: do something reasonable
}
// show 'working' message
status.style.display = "block";
// build request
var xhr = CreateCORSRequest('get', next_url);
if (!xhr) {
alert("Error: 2");
// FIXME: do something reasonable
}
// 'next' request's callbacks
xhr.onload = function() {
/*
* translation system is currently handling another request
* FIXME: maybe poll server for result?
*
*/
if (xhr.responseText == "locked") {
alert("Translation system is locked, try again in a moment (reload page and click 'Start/Continue' again).");
document.getElementById("status").style.display = "none";
return;
}
// got response: seg id\tsource\ttranslation\traw source
// 0 1 2 3
var x = xhr.responseText.split("\t");
if (x == "fi") { // done, hide/disable functional elements
raw_source_textarea.style.display = "none";
target_textarea.style.display = "none";
status.style.display = "none";
button.innerHTML = "Session finished, thank you!";
button.setAttribute("disabled", "disabled");
document.getElementById("pause_button").setAttribute("disabled", "disabled");
document.getElementById("seg_"+current_seg_id.value).className = "";
} else {
var id = x[0];
var src = x[1];
var translation = x[2];
var raw_source = x[3];
// update interface
status.style.display = "none";
target_textarea.value = translation;
raw_source_textarea.value = raw_source;
button.innerHTML = "Next";
button.removeAttribute("disabled");
target_textarea.removeAttribute("disabled", "disabled");
document.getElementById("seg_"+id).className = "bold";
if (x[0] > 0) {
document.getElementById("seg_"+(id-1)).className = "";
}
target_textarea.rows = Math.round(translation.length/80)+1;
raw_source_textarea.rows = Math.round(raw_source.length/80)+1;
target_textarea.focus();
target_textarea.selectionStart = 0;
target_textarea.selectionEnd = 0;
// remember aux data in DOM
current_seg_id.value = id;
source.value = src;
// confirm to server
var xhr_confirm = CreateCORSRequest('get', base_url+"/confirm");
xhr_confirm.send(); // FIXME: handle errors
}
};
xhr.onerror = function() {
// FIXME: do something reasonable
};
xhr.send(); // send 'next' request
}
|