X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=matitaB%2Fmatita%2Fmatitaweb.js;h=343d539e66deda5c23cc8a963430f0f693bb72c5;hb=04168c737e0916ebdbcdb1457f228bef670c657b;hp=d1480e72d744088a41881c32c6f4b33f9caaf502;hpb=24fc5e5485245fe879e17d46176530b688930b3b;p=helm.git diff --git a/matitaB/matita/matitaweb.js b/matitaB/matita/matitaweb.js index d1480e72d..343d539e6 100644 --- a/matitaB/matita/matitaweb.js +++ b/matitaB/matita/matitaweb.js @@ -586,6 +586,7 @@ function advanceForm1() if (is_defined(xml)) { var parsed = xml.getElementsByTagName("parsed")[0]; var ambiguity = xml.getElementsByTagName("ambiguity")[0]; + var disamberr = xml.getElementsByTagName("disamberror")[0]; if (is_defined(parsed)) { // debug("advance: received response\nBEGIN\n" + req.responseText + "\nEND"); var len = parseInt(parsed.getAttribute("length")); @@ -666,6 +667,13 @@ function advanceForm1() matita.disambMode = true; updateSide(); } + else if (is_defined(disamberr)) { + set_cps(disamberr.childNodes); + matita.unlockedbackup = unlocked.innerHTML.html_to_matita(); + matita.disambMode = true; + disable_toparea(); + next_cp(0); + } else { var error = xml.getElementsByTagName("error")[0]; unlocked.innerHTML = error.childNodes[0].wholeText; @@ -681,6 +689,180 @@ function advanceForm1() } +// get or set 's (in case of disamb error) +function get_cps() { + return matita.choicepoints +} + +function set_cps(cps) { + matita.choicepoints = cps; +} + +// get radio buttons for 's in a given cp +function get_choice_opts(i) { + var res = []; + var choices = get_cps()[i].childNodes; + for (var j = 0;j < choices.length;j++) { + var href = choices[j].getAttribute("href"); + var title = choices[j].getAttribute("title"); + var desc; + if (is_defined(title)) { + desc = title; + } else { + desc = href; + } + + res[j] = document.createElement("input"); + res[j].setAttribute("type","radio"); + res[j].setAttribute("name","choice"); + res[j].setAttribute("choicepointno",i); + res[j].setAttribute("choiceno",j); + res[j].setAttribute("href",href); + res[j].setAttribute("title",title); + res[j].setAttribute("desc",desc); + + if (j == 0) res[j].setAttribute("checked",""); + } + return res; +} + +// get radio buttons for 's in a given choice +function get_failure_opts(i,j) { + var res = []; + var failures = get_cps()[i].childNodes[j].childNodes; + for (var k = 0;k < failures.length;k++) { + var start = failures[k].getAttribute("start"); + var stop = failures[k].getAttribute("stop"); + var title = failures[k].getAttribute("title"); + + res[k] = document.createElement("input"); + res[k].setAttribute("type","radio"); + res[k].setAttribute("name","failure"); + res[k].setAttribute("choicepointno",i); + res[k].setAttribute("choiceno",j); + res[k].setAttribute("failureno",k); + res[k].setAttribute("start",start); + res[k].setAttribute("stop",stop); + res[k].setAttribute("title",title); + + if (k == 0) res[k].setAttribute("checked",""); + } + return res; +} + +function next_cp(curcp) { + var cp = get_cps()[curcp]; + var start = parseInt(cp.getAttribute("start")); + var stop = parseInt(cp.getAttribute("stop")); + + matita.errorStart = start; + matita.errorStop = stop; + // matita.unlockedbackup = unlocked.innerHTML.html_to_matita(); + + var unlockedtxt = matita.unlockedbackup; + var pre = unlockedtxt.substring(0,start).matita_to_html(); + var mid = unlockedtxt.substring(start,stop).matita_to_html(); + var post = unlockedtxt.substring(stop).matita_to_html(); + unlocked.innerHTML = pre + + "" + + mid + "" + post; + + var title = "

Disambiguation failed

"; + disambcell.innerHTML = title; + var choices = get_choice_opts(curcp); + for (var i = 0;i < choices.length;i++) { + disambcell.appendChild(choices[i]); + disambcell.appendChild(document.createTextNode(choices[i].getAttribute("desc"))); + disambcell.appendChild(document.createElement("br")); + } + + // update index of the next choicepoint + new_curcp = (curcp + 1) % get_cps().length; + + var okbutton = document.createElement("input"); + okbutton.setAttribute("type","button"); + okbutton.setAttribute("value","OK"); + okbutton.setAttribute("onclick","show_failures()"); + var cancelbutton = document.createElement("input"); + cancelbutton.setAttribute("type","button"); + cancelbutton.setAttribute("value","Close"); + cancelbutton.setAttribute("onclick","cancel_disambiguate()"); + var tryagainbutton = document.createElement("input"); + tryagainbutton.setAttribute("type","button"); + if (new_curcp > 0) { + tryagainbutton.setAttribute("value","Try something else"); + } else { + tryagainbutton.setAttribute("value","Restart"); + } + tryagainbutton.setAttribute("onclick","next_cp(" + new_curcp + ")"); + + disambcell.appendChild(okbutton); + disambcell.appendChild(tryagainbutton); + disambcell.appendChild(cancelbutton); + + //disable_toparea(); + + //matita.disambMode = true; + updateSide(); + +} + +function show_failures() { + + var choice = document.getElementsByName("choice")[get_checked_index("choice")]; + var cpno = parseInt(choice.getAttribute("choicepointno")); + var choiceno = parseInt(choice.getAttribute("choiceno")); + var choicedesc = choice.getAttribute("desc"); + + var title = "

Disambiguation failed

"; + var subtitle = "

Errors at node " + choiceno + " = " + choicedesc + "

"; + + disambcell.innerHTML = title + subtitle; + var failures = get_failure_opts(cpno,choiceno); + for (var i = 0;i < failures.length;i++) { + disambcell.appendChild(failures[i]); + disambcell.appendChild(document.createTextNode(failures[i].getAttribute("title"))); + disambcell.appendChild(document.createElement("br")); + } + + var okbutton = document.createElement("input"); + okbutton.setAttribute("type","button"); + okbutton.setAttribute("value","Show error loc"); + okbutton.setAttribute("onclick","show_err()"); + var cancelbutton = document.createElement("input"); + cancelbutton.setAttribute("type","button"); + cancelbutton.setAttribute("value","Close"); + cancelbutton.setAttribute("onclick","cancel_disambiguate()"); + var backbutton = document.createElement("input"); + backbutton.setAttribute("type","button"); + backbutton.setAttribute("value","<< Back"); + backbutton.setAttribute("onclick","next_cp(" + cpno + ")"); + + disambcell.appendChild(backbutton); + disambcell.appendChild(okbutton); + disambcell.appendChild(cancelbutton); + +} + +function show_err() { + var radios = document.getElementsByName("failure"); + for (i = 0; i < radios.length; i++) { + if (radios[i].checked) { + var start = radios[i].getAttribute("start"); + var stop = radios[i].getAttribute("stop"); + var title = radios[i].getAttribute("title"); + var unlockedtxt = matita.unlockedbackup; + var pre = unlockedtxt.substring(0,start).matita_to_html(); + var mid = unlockedtxt.substring(start,stop).matita_to_html(); + var post = unlockedtxt.substring(stop).matita_to_html(); + unlocked.innerHTML = pre + + "" + + mid + "" + post; + break; + } + } +} + function gotoBottom() { processor = function(xml) { @@ -1272,6 +1454,31 @@ function do_disambiguate() { } } +function do_showerror() { + var i = get_checked_index("choice"); + if (i != null) { + var pre = matita.unlockedbackup + .substring(0,matita.ambiguityStart).matita_to_html(); + var mid = matita.unlockedbackup + .substring(matita.ambiguityStart,matita.ambiguityStop) + .matita_to_html(); + var post = matita.unlockedbackup + .substring(matita.ambiguityStop).matita_to_html(); + + var href = matita.interpretations[i].href; + var title = matita.interpretations[i].title; + + if (is_defined(title)) { + mid = "" + mid + ""; + } else { + mid = "" + mid + ""; + } + + unlocked.innerHTML = pre + mid + post; + + } +} + function readCookie(name) { var nameEQ = name + "="; var ca = document.cookie.split(';');