X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;ds=sidebyside;f=matitaB%2Fmatita%2Fmatitaweb.js;h=cd25cd15a68b2e349647378de40deb9551c338df;hb=06d5ff2316426acfb16a9cc9784d40ce19351771;hp=c98937735770f2023f9a2ff585d8510962f8e788;hpb=070bda8035e9ae0d3bfe69110d184bb82183cf46;p=helm.git diff --git a/matitaB/matita/matitaweb.js b/matitaB/matita/matitaweb.js index c98937735..cd25cd15a 100644 --- a/matitaB/matita/matitaweb.js +++ b/matitaB/matita/matitaweb.js @@ -85,9 +85,33 @@ function initialize() // initialize keyboard events in the unlocked script init_keyboard(unlocked); + + init_autotraces(); + } } +function init_autotraces() { + $("#unlocked .autotactic").tooltip({ + delay: 0, + showURL: false, + bodyHandler: function() { + return (trace_of($(this)[0])); + } + }); + $("#locked .autotactic").tooltip({ + delay: 0, + showURL: false, + bodyHandler: function() { + return (trace_of($(this)[0])); + } + }); +} + +function trace_of(node) { + return text_of_html(filterByClass(node.childNodes,"autotrace")[0]); +} + function changeFile(name) { current_fname = name; matitaTitle.innerHTML = "Matita - cic:/matita/" + name; @@ -196,7 +220,7 @@ function strip_tags(tagname,classname) tags[i].parentNode.insertBefore(children[j],tags[i]); } } - for (;tags.length > 0;) { + for (var i = 0;tags.length > i;i++) { tags[0].parentNode.removeChild(tags[0]); } } @@ -214,9 +238,9 @@ function keypress(e) strip_tags("span","error"); if (s == " ") { j = getCursorPos(); - i = unlocked.innerHTML.lastIndexOf('\\',j); + i = unlocked.innerHTML.html_to_matita().lastIndexOf('\\',j); if (i >= 0) { - match = unlocked.innerHTML.substring(i,j); + match = unlocked.innerHTML.html_to_matita().substring(i,j); sym = unescape_html(lookup_tex(match)); if (sym != "undefined") { if (window.getSelection) { // non IE @@ -293,6 +317,9 @@ function listnil() return (""); } +function list_append(l1,l2) +{ return (l1 + l2) } + function is_nil(l) { return (l == ""); @@ -470,22 +497,6 @@ String.prototype.matita_to_html = function() return (unescape(result)); } -function pause() -{ - advanceButton.disabled = true; - retractButton.disabled = true; - cursorButton.disabled = true; - bottomButton.disabled = true; -} - -function resume() -{ - advanceButton.disabled = false; - retractButton.disabled = false; - cursorButton.disabled = false; - bottomButton.disabled = false; -} - function is_defined(x) { return (typeof x != "undefined"); @@ -553,32 +564,347 @@ function callServer(servicename,processResponse,reqbody) } +function advOneStep(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")); + // len0 = unlocked.innerHTML.length; + var unescaped = unlocked.innerHTML.html_to_matita(); + var parsedtxt = parsed.childNodes[0].wholeText; + //parsedtxt = unescaped.substr(0,len); + var unparsedtxt = unescaped.substr(len); + lockedbackup += parsedtxt; + locked.innerHTML = lockedbackup; + unlocked.innerHTML = unparsedtxt.matita_to_html(); + // len1 = unlocked.innerHTML.length; + // len2 = len0 - len1; + var len2 = parsedtxt.length; + metasenv = xml.getElementsByTagName("meta"); + statements = listcons(len2,statements); + unlocked.scrollIntoView(true); + return len; + } + else if (is_defined(ambiguity)) { + var start = parseInt(ambiguity.getAttribute("start")); + var stop = parseInt(ambiguity.getAttribute("stop")); + var choices = xml.getElementsByTagName("choice"); + + matita.ambiguityStart = start; + matita.ambiguityStop = stop; + matita.unlockedbackup = unlocked.innerHTML.html_to_matita(); + matita.interpretations = []; + + var unlockedtxt = unlocked.innerHTML.html_to_matita(); + 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 = "
Errors at node " + cpno + " = " + choicedesc + "
"; + } else { + subtitle = "Global errors:
"; + } + + 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","<< Go 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) { if (is_defined(xml)) { - var parsed = xml.getElementsByTagName("parsed")[0]; + // debug("goto bottom: received response\nBEGIN\n" + req.responseText + "\nEND"); + var parsed = xml.getElementsByTagName("parsed"); + var localized = xml.getElementsByTagName("localized")[0]; var ambiguity = xml.getElementsByTagName("ambiguity")[0]; - if (is_defined(parsed)) { - // debug("advance: received response\nBEGIN\n" + req.responseText + "\nEND"); - var len = parseInt(parsed.getAttribute("length")); - // len0 = unlocked.innerHTML.length; - var unescaped = unlocked.innerHTML.html_to_matita(); - var parsedtxt = parsed.childNodes[0].nodeValue; - //parsedtxt = unescaped.substr(0,len); - var unparsedtxt = unescaped.substr(len); - lockedbackup += parsedtxt; - locked.innerHTML = lockedbackup; - unlocked.innerHTML = unparsedtxt.matita_to_html(); - // len1 = unlocked.innerHTML.length; - // len2 = len0 - len1; - var len2 = parsedtxt.length; - var metasenv = xml.getElementsByTagName("meta"); - populate_goalarray(metasenv); - statements = listcons(len2,statements); - unlocked.scrollIntoView(true); + var generic_err = xml.getElementsByTagName("error")[0]; + var disamberr = xml.getElementsByTagName("disamberror")[0]; + for (var i = 0;i < parsed.length; i++) { + var len = parsed[i].getAttribute("length"); + // len0 = unlocked.innerHTML.length; + var unescaped = unlocked.innerHTML.html_to_matita(); + // the browser may decide to split textnodes: use wholeText! + var parsedtxt = parsed[i].childNodes[0].wholeText; + //parsedtxt = unescaped.substr(0,len); + var unparsedtxt = unescaped.substr(len); + lockedbackup += parsedtxt; + locked.innerHTML = lockedbackup; //.matita_to_html(); + unlocked.innerHTML = unparsedtxt.matita_to_html(); + // len1 = unlocked.innerHTML.length; + var len2 = parsedtxt.length; + statements = listcons(len2,statements); } - else if (is_defined(ambiguity)) { + unlocked.scrollIntoView(true); + metasenv = xml.getElementsByTagName("meta"); + init_autotraces(); + populate_goalarray(metasenv); + + if (is_defined(ambiguity)) { var start = parseInt(ambiguity.getAttribute("start")); var stop = parseInt(ambiguity.getAttribute("stop")); var choices = xml.getElementsByTagName("choice"); @@ -633,51 +959,25 @@ function advanceForm1() disambcell.appendChild(okbutton); disambcell.appendChild(cancelbutton); - disable_toparea(); - matita.disambMode = true; updateSide(); } - else { - var error = xml.getElementsByTagName("error")[0]; - unlocked.innerHTML = error.childNodes[0].nodeValue; - // debug(xml.childNodes[0].nodeValue); + else if (is_defined(disamberr)) { + // must be fixed in a daemon: it makes sense to return a + // disambiguation error with no choices + if (disamberr.childNodes.length > 0) { + set_cps(disamberr.childNodes); + matita.unlockedbackup = unlocked.innerHTML.html_to_matita(); + matita.disambMode = true; + next_cp(0); + } + throw "Stop"; } - } else { - debug("advance failed"); - } - resume(); - }; - pause(); - callServer("advance",processor,"body=" + (unlocked.innerHTML.html_to_matita()).sescape()); - -} - -function gotoBottom() -{ - processor = function(xml) { - if (is_defined(xml)) { - // debug("goto bottom: received response\nBEGIN\n" + req.responseText + "\nEND"); - parsed = xml.getElementsByTagName("parsed")[0]; - len = parseInt(parsed.getAttribute("length")); - if (len > 0) { - // len0 = unlocked.innerHTML.length; - unescaped = unlocked.innerHTML.html_to_matita(); - // not working in mozilla - // parsedtxt = parsed.childNodes[0].nodeValue; - parsedtxt = parsed.childNodes[0].wholeText; - //parsedtxt = unescaped.substr(0,len); - unparsedtxt = unescaped.substr(len); - lockedbackup += parsedtxt; - locked.innerHTML = lockedbackup; //.matita_to_html(); - unlocked.innerHTML = unparsedtxt.matita_to_html(); - // len1 = unlocked.innerHTML.length; - len2 = parsedtxt.length; - metasenv = xml.getElementsByTagName("meta"); - populate_goalarray(metasenv); - if (len2 > 0) - statements = listcons(len2,statements); - unlocked.scrollIntoView(true); + else if (is_defined(localized)) { + unlocked.innerHTML = localized.childNodes[0].wholeText; + } + else if (is_defined(generic_err)) { + debug("Unmanaged error:\n" ^ generic_err.childNodes[0].wholeText); } } else { debug("goto bottom failed"); @@ -686,7 +986,6 @@ function gotoBottom() }; pause(); callServer("bottom",processor,"body=" + (unlocked.innerHTML.html_to_matita()).sescape()); - } @@ -708,6 +1007,7 @@ function gotoTop() unlocked.innerHTML = lockedbackup + unlocked.innerHTML; lockedbackup = ""; locked.innerHTML = lockedbackup; + init_autotraces(); hideSequent(); unlocked.scrollIntoView(true); } else { @@ -719,6 +1019,7 @@ function gotoTop() callServer("top",processor,"body=" + (unlocked.innerHTML.html_to_matita()).sescape()); } + function gotoPos(offset) { if (!is_defined(offset)) { @@ -726,11 +1027,13 @@ function gotoPos(offset) } processor = function(xml) { if (is_defined(xml)) { + try { + /* parsed = xml.getElementsByTagName("parsed")[0]; len = parseInt(parsed.getAttribute("length")); // len0 = unlocked.innerHTML.length; unescaped = unlocked.innerHTML.html_to_matita(); - parsedtxt = parsed.childNodes[0].nodeValue; + parsedtxt = parsed.childNodes[0].wholeText; //parsedtxt = unescaped.substr(0,len); unparsedtxt = unescaped.substr(len); lockedbackup += parsedtxt; @@ -743,13 +1046,26 @@ function gotoPos(offset) statements = listcons(len2,statements); unlocked.scrollIntoView(true); // la populate non andrebbe fatta a ogni passo + */ + var len = advOneStep(xml); if (offset <= len) { + init_autotraces(); populate_goalarray(metasenv); resume(); } else { gotoPos(offset - len); } + } catch (er) { + init_autotraces(); + populate_goalarray(metasenv); + if (er == "Stop") + resume(); + else + pause(); + + } } else { + init_autotraces(); unlocked.scrollIntoView(true); populate_goalarray(metasenv); resume(); @@ -778,6 +1094,7 @@ function retract() locked.innerHTML = lockedbackup; unlocked.innerHTML = statement + unlocked.innerHTML; metasenv = xml.getElementsByTagName("meta"); + init_autotraces(); populate_goalarray(metasenv); unlocked.scrollIntoView(true); } else { @@ -785,10 +1102,8 @@ function retract() } resume(); }; - debug("retract 1"); pause(); callServer("retract",processor); - debug("retract 2"); } function openFile() @@ -812,6 +1127,9 @@ function retrieveFile(thefile) { if (is_defined(xml)) { changeFile(thefile); + matita.disambMode = false; + matita.proofMode = false; + updateSide(); lockedbackup = "" locked.innerHTML = lockedbackup; // code originally used in google chrome (problems with mozilla) @@ -823,12 +1141,13 @@ function retrieveFile(thefile) } else { unlocked.innerHTML = xml.childNodes[0].textContent; } + init_autotraces(); } else { debug("file open failed"); } }; - abortDialog(); + abortDialog("dialogBox"); callServer("open",processor,"file=" + escape(thefile)); } @@ -882,26 +1201,28 @@ function uploadDialog() function uploadOK() { var file = document.getElementById("uploadFilename").files[0]; - if (file) { - var filecontent = file.getAsText("UTF-8"); - locked.innerHTML = lockedbackup; - unlocked.innerHTML = filecontent; - uploadBox.style.display = "none"; - } // if (file) { -// var reader = new FileReader(); -// reader.readAsText(file, "UTF-8"); -// reader.onloadend = function (evt) { -// lockedbackup = ""; -// locked.innerHTML = lockedbackup -// unlocked.innerHTML = evt.target.result; -// uploadBox.style.display = "none"; -// } -// reader.onerror = function (evt) { -// debug("file open failed"); -// uploadBox.style.display = "none"; -// } +// var filecontent = file.getAsText("UTF-8"); +// locked.innerHTML = lockedbackup; +// unlocked.innerHTML = filecontent; +// uploadBox.style.display = "none"; // } + if (file) { + var reader = new FileReader(); + reader.onerror = function (evt) { + debug("file open failed"); + } + reader.onload = function (evt) { + lockedbackup = ""; + locked.innerHTML = lockedbackup; + unlocked.innerHTML = ""; + unlocked.appendChild(document.createTextNode(evt.target.result)); + uploadBox.style.display = "none"; + } + try { reader.readAsText(file, "UTF-8"); } + catch (err) { /* nothing to do */ }; + uploadBox.style.display = "none"; + } } function openDialog() @@ -913,7 +1234,7 @@ function openDialog() function saveDialog() { callback = function (fname) { - abortDialog(); + abortDialog("dialogBox"); saveFile(fname, (locked.innerHTML.html_to_matita()).sescape(), (unlocked.innerHTML.html_to_matita()).sescape(), @@ -925,7 +1246,7 @@ function saveDialog() function newDialog() { callback = function (fname) { - abortDialog(); + abortDialog("dialogBox"); saveFile(fname,"","",false,newDialog,true); }; showLibrary("Create new file", callback, newDialog); @@ -971,7 +1292,7 @@ function saveFile(fname,lockedtxt,unlockedtxt,force,reloadDialog,reloadFile) } function createDir() { - abortDialog(); + abortDialog("dialogBox"); dirname = prompt("New directory name:\ncic:/matita/","newdir"); if (dirname != null) { processor = function(xml) { @@ -1000,7 +1321,7 @@ function commitAll() alert("Commit executed: see details in the log.\n\n" + "NOTICE: this message does NOT imply (yet) that the commit was successful."); } else { - alert("Commit failed!"); + alert("Commit failed!\n(maybe you don't have permissionis to commit?)"); } resume(); }; @@ -1016,7 +1337,7 @@ function updateAll() "Details:\n" + xml.getElementsByTagName("details")[0].textContent); } else { - alert("Update failed!"); + alert("Update failed!\n(maybe you don't have permissions to update?)"); } resume(); }; @@ -1049,8 +1370,8 @@ function showDialog(title,content,callback) { $('#mask').css({'width':maskWidth,'height':maskHeight}); //transition effect - $('#mask').fadeIn(1000); - $('#mask').fadeTo("slow",0.8); + $('#mask').fadeIn(100); + $('#mask').fadeTo(200,0.8); //Get the window height and width var winH = $(window).height(); @@ -1061,14 +1382,14 @@ function showDialog(title,content,callback) { $('#dialogBox').css('left', winW/2-$('#dialogBox').width()/2); //transition effect - $('#dialogBox').fadeIn(2000); + $('#dialogBox').fadeIn(200); dialogBox.style.display = "block"; } function abortDialog(dialog) { + document.getElementById(dialog).style.display = "none"; $('#mask').hide(); - dialogBox.style.display = "none"; } function removeElement(id) { @@ -1117,7 +1438,7 @@ function findNode(list, node, acc) { dup = list[i].cloneNode(true); sandbox.appendChild(dup); // debug("fail " + i + ": " + sandbox.innerHTML); - acc += sandbox.innerHTML.length; + acc += sandbox.innerHTML.html_to_matita().length; sandbox.removeChild(dup); } throw "not found"; @@ -1139,7 +1460,10 @@ function get_checked_index(name) { function cancel_disambiguate() { matita.disambMode = false; - $('#whitemask').hide(); + resume(); + // enable_toparea(); + // enable_editing(); + strip_tags("span","error"); updateSide(); } @@ -1166,11 +1490,37 @@ function do_disambiguate() { unlocked.innerHTML = pre + mid + post; matita.disambMode = false; - $('#whitemask').hide(); + enable_toparea(); + enable_editing(); updateSide(); } } +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(';'); @@ -1202,3 +1552,38 @@ function disable_toparea() { $('#whitemask').css('height',$('#toparea').outerHeight() + "px"); $('#whitemask').fadeTo('fast',0.7); } + +function enable_toparea() { + $('#whitemask').hide(); +} + +function disable_editing() { + unlocked.contentEditable = false; +} + +function enable_editing() { + unlocked.contentEditable = true; +} + +function pause() +{ + // advanceButton.disabled = true; + // retractButton.disabled = true; + // cursorButton.disabled = true; + // bottomButton.disabled = true; + disable_toparea(); + disable_editing(); +} + +function resume() +{ + // advanceButton.disabled = false; + // retractButton.disabled = false; + // cursorButton.disabled = false; + // bottomButton.disabled = false; + if (!matita.disambMode) { + enable_toparea(); + enable_editing(); + } +} +