+function retrieveFile(thefile)
+{
+ processor = function(xml)
+ {
+ if (is_defined(xml)) {
+ current_fname = thefile;
+ lockedbackup = ""
+ locked.innerHTML = lockedbackup;
+ // code originally used in google chrome (problems with mozilla)
+ // debug(xml.getElementsByTagName("file")[0].childNodes[0].nodeValue);
+ // unlocked.innerHTML = xml.getElementsByTagName("file")[0].childNodes[0].nodeValue;
+ debug(xml.childNodes[0].textContent);
+ if (document.all) { // IE
+ unlocked.innerHTML = xml.childNodes[0].text;
+ } else {
+ unlocked.innerHTML = xml.childNodes[0].textContent;
+ }
+
+ } else {
+ debug("file open failed");
+ }
+ };
+ dialogBox.style.display = "none";
+ callServer("open",processor,"file=" + escape(thefile));
+}
+
+function showLibrary(title,callback,reloadDialog)
+{
+ var req = null;
+ dialogBox.reload = reloadDialog;
+ // pause();
+ if (window.XMLHttpRequest)
+ {
+ req = new XMLHttpRequest();
+ }
+ else if (window.ActiveXObject)
+ {
+ try {
+ req = new ActiveXObject("Msxml2.XMLHTTP");
+ } catch (e)
+ {
+ try {
+ req = new ActiveXObject("Microsoft.XMLHTTP");
+ } catch (e) {}
+ }
+ }
+ req.onreadystatechange = function()
+ {
+
+ rs = req.readyState;
+
+ if(rs == 4)
+ {
+ stat = req.status;
+ stxt = req.statusText;
+ if(stat == 200)
+ {
+ debug(req.responseText);
+ showDialog("<H2>" + title + "</H2>",req.responseText, callback);
+ }
+ }
+ };
+ req.open("POST", "viewlib"); // + escape(unlocked.innerHTML), true);
+ req.setRequestHeader("Content-type","application/x-www-form-urlencoded");
+ req.send();
+
+}
+
+function uploadDialog()
+{
+ uploadBox.style.display = "block";
+}
+
+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";
+// }
+// }
+}
+
+function openDialog()
+{
+ callback = function (fname) { retrieveFile(fname); };
+ showLibrary("Open file", callback, openDialog);
+}
+
+function saveDialog()
+{
+ callback = function (fname) {
+ dialogBox.style.display = "none";
+ saveFile(fname,
+ (locked.innerHTML.html_to_matita()).sescape(),
+ (unlocked.innerHTML.html_to_matita()).sescape(),
+ false,saveDialog);
+ };
+ showLibrary("Save file as", callback, saveDialog);
+}
+
+function newDialog()
+{
+ callback = function (fname) {
+ dialogBox.style.display = "none";
+ saveFile(fname,"","",false,newDialog,true);
+ };
+ showLibrary("Create new file", callback, newDialog);
+}
+
+
+function saveFile(fname,lockedtxt,unlockedtxt,force,reloadDialog,reloadFile)
+{
+ if (!is_defined(reloadFile)) { reloadFile = true };
+ if (!is_defined(fname)) {
+ fname = current_fname;
+ lockedtxt = (locked.innerHTML.html_to_matita()).sescape();
+ unlockedtxt = (unlocked.innerHTML.html_to_matita()).sescape();
+ force = true;
+ // when force is true, reloadDialog is not needed
+ }
+ processor = function(xml) {
+ current_fname = fname;
+ if (is_defined(xml)) {
+ if (xml.childNodes[0].textContent != "ok") {
+ if (confirm("File already exists. All existing data will be lost.\nDo you want to proceed anyway?")) {
+ saveFile(fname,lockedtxt,unlockedtxt,true,reloadDialog,reloadFile);
+ } else {
+ reloadDialog();
+ }
+ } else {
+ current_fname = fname;
+ debug("file saved!");
+ if (reloadFile) { retrieveFile(fname); }
+ }
+ } else {
+ debug("save file failed");
+ }
+ resume();
+ };
+ if (is_defined(fname)) {
+ pause();
+ callServer("save",processor,"file=" + escape(fname) +
+ "&locked=" + lockedtxt +
+ "&unlocked=" + unlockedtxt +
+ "&force=" + force);
+ }
+ else { debug("no file selected"); }
+}
+
+function createDir() {
+ abortDialog();
+ dirname = prompt("New directory name:\ncic:/matita/","newdir");
+ if (dirname != null) {
+ processor = function(xml) {
+ if (is_defined(xml)) {
+ if (xml.childNodes[0].textContent != "ok") {
+ alert("An error occurred :-(");
+ }
+ } else {
+ alert("An error occurred :-(");
+ }
+ dialogBox.reload();
+ };
+ pause();
+ callServer("save",processor,"file=" + escape(dirname) +
+ "&locked=&unlocked=&force=false&dir=true");
+ } else {
+ dialogBox.reload();
+ }
+}
+
+function commitAll()
+{
+ processor = function(xml) {
+ if (is_defined(xml)) {
+ debug(xml.getElementsByTagName("details")[0].textContent);
+ 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!");
+ }
+ resume();
+ };
+ pause();
+ callServer("commit",processor);
+}
+
+function updateAll()
+{
+ processor = function(xml) {
+ if (is_defined(xml)) {
+ alert("Update executed.\n\n" +
+ "Details:\n" +
+ xml.getElementsByTagName("details")[0].textContent);
+ } else {
+ alert("Update failed!");
+ }
+ resume();
+ };
+ pause();
+ callServer("update",processor);
+}
+