summaryrefslogtreecommitdiff
path: root/lfpe.js
blob: b10a2655caa9bfe32e11bc10b2776a2f5eb5daa4 (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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
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 base_url = "http://coltrane.cl.uni-heidelberg.de:60666"; // FIXME: variable

  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', "http://coltrane.cl.uni-heidelberg.de:60666/confirm");
      xhr_confirm.send(); // FIXME: handle errors
    }
  };

  xhr.onerror = function() {
    // FIXME: do something reasonable
  };

  xhr.send(); // send 'next' request
}