let i = ref 0 in
let newid () = incr i; ("node" ^ string_of_int !i) in
+ let basedir = (Helm_registry.get "matita.rt_base_dir") ^ "/users/" ^ uid in
+
let branch text acc =
let id = newid () in
+ let name = Filename.basename text in
+ let name = if name <> "." then name else "cic:/matita" in
"<span class=\"trigger\" onClick=\"showBranch('" ^ id ^ "')\">\n" ^
"<img src=\"treeview/closed.gif\" id=\"I" ^ id ^ "\"/>\n" ^
- text ^ "<br/></span>\n" ^
+ name ^ "<br/></span>\n" ^
"<span class=\"branch\" id=\"" ^ id ^ "\">\n" ^
acc ^ "\n</span>"
in
- let leaf text link =
+ let leaf text =
"<img src=\"treeview/doc.gif\"/>\n" ^
- "<a href=\"" ^ link ^ "\">" ^ text ^ "</a><br/>"
+ "<a href=\"javascript:retrieveFile('" ^ text ^ "')\">" ^
+ (Filename.basename text) ^ "</a><br/>"
in
let rec aux path =
+ let lpath filename = path ^ "/" ^ filename in
+ let gpath filename = basedir ^ "/" ^ path ^ "/" ^ filename in
let dirlist =
- List.filter (fun x -> String.sub x 0 1 = ".") (Array.to_list (Sys.readdir path)) in
- let subdirs = List.filter (fun x -> Sys.is_directory (path ^ "/" ^ x)) dirlist in
+ List.filter (fun x -> String.sub x 0 1 = ".")
+ (Array.to_list (Sys.readdir (basedir ^ "/" ^ path))) in
+ let subdirs = List.filter (fun x -> Sys.is_directory (gpath x)) dirlist in
let scripts =
List.filter (fun x ->
try
let i = String.rindex x '.' in
- not (Sys.is_directory (path ^ "/" ^ x)) && (String.sub x i 3 = ".ma")
+ let len = String.length x - i in
+ not (Sys.is_directory (gpath x)) && (String.sub x i len = ".ma")
with Not_found | Invalid_argument _ -> false) dirlist in
let subdirtags =
- String.concat "\n" (List.map (fun x -> aux (path ^ "/" ^ x)) subdirs) in
+ String.concat "\n" (List.map (fun x -> aux (lpath x)) subdirs) in
let scripttags =
String.concat "\n"
- (List.map (fun x -> leaf x (path ^ "/" ^ x)) scripts)
+ (List.map (fun x -> leaf (gpath x)) scripts)
in
- branch (Filename.basename path) (subdirtags ^ "\n" ^ scripttags)
+ branch path (subdirtags ^ "\n" ^ scripttags)
in
- let basedir = (Helm_registry.get "matita.rt_base_dir") ^ "/users/" ^ uid in
- let res = aux basedir in
+ let res = aux "." in
prerr_endline "BEGIN TREE";prerr_endline res;prerr_endline "END TREE";
res
;;
let rt_path () = Helm_registry.get "matita.rt_base_dir"
+let libdir uid = (rt_path ()) ^ "/users/" ^ uid
+
let utf8_length = Netconversion.ustring_length `Enc_utf8
let utf8_parsed_text s floc =
(try
let sid = Uuidm.of_string (Netcgi.Cookie.value (env#cookie "session")) in
let sid = HExtlib.unopt sid in
+ let uid = MatitaAuthentication.user_of_session sid in
cgi # set_header
~cache:`No_cache
~content_type:"text/xml; charset=\"utf-8\""
();
- let filename = cgi # argument_value "file" in
+ let filename = libdir uid ^ "/" ^ (cgi # argument_value "file") in
prerr_endline ("reading file " ^ filename);
let body =
Netencoding.Html.encode ~in_enc:`Enc_utf8 ~prefer_name:false ()
callServer("open",processor,"file=" + escape(filename.value));
}
+function retrieveFile(thefile)
+{
+ processor = function(xml)
+ {
+ if (is_defined(xml)) {
+ locked.innerHTML = "";
+ unlocked.innerHTML = xml.documentElement.textContent;
+ } else {
+ debug("file open failed");
+ }
+ };
+ dialogBox.style.display = "none";
+ callServer("open",processor,"file=" + escape(thefile);
+}
+
function showLibrary()
{
var req = null;