diff xul/content/annota.js @ 199:49cb8a445126

restarting with version control of xul sidebar/toolbar
author luginbue
date Fri, 27 Feb 2004 11:24:53 +0100
parents
children 28e861dc3467
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/xul/content/annota.js	Fri Feb 27 11:24:53 2004 +0100
@@ -0,0 +1,439 @@
+include ('chrome://jslib/content/io/dir.js');
+include ('chrome://jslib/content/io/file.js');
+/*include ('chrome://jslib/content/io/rdfBase.js');
+include ('chrome://jslib/content/io/rdfResource.js');
+include ('chrome://jslib/content/io/rdfContainer.js');*/
+include ('chrome://jslib/content/io/rdf.js');/*
+include ('chrome://jslib/content/io/rdfFile.js');*/
+include ('chrome://jslib/content/io/fileUtils.js');
+
+var slash='/';
+if (navigator.platform=="Win32"){
+   slash='\\';
+}
+
+var directory=slash;
+var digilib_path=slash;
+
+getProfile();
+
+function makePathCompatible(path){
+  if (navigator.platform=="Win32"){
+    // slash durch backslash ersetzten
+    path=path.replace(/\//g,"\\");
+    // nur 2 backslashs am anfang
+    path=path.replace(/^\\{3}/,"\\\\");
+    // vor Laufwerkbuchstaben kein Backslash
+    if (path.indexOf(":")>0){
+      path=path.replace(/^\\/g,"");
+    }
+    // nur ein Slash gibt Absturz
+    path=path.replace(/^\\$/,"c:\\");
+    //alert(path);
+  }
+  return path;
+}
+
+function file_open(){
+  var nsIFilePicker = Components.interfaces.nsIFilePicker;
+  var fp = Components.classes["@mozilla.org/filepicker;1"]
+        .createInstance(nsIFilePicker);
+  fp.init(window, "Select a Directory", nsIFilePicker.modeGetFolder);
+
+  // set default direcotry
+  var aLocalFile = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
+  directory=makePathCompatible(directory);
+  aLocalFile.initWithPath(directory);
+  fp.displayDirectory=aLocalFile;
+
+  var res=fp.show();
+  if (res==nsIFilePicker.returnOK){
+    directory=fp.fileURL.path;
+    directory=makePathCompatible(directory);
+    setTreeDirectory();
+  }
+}
+
+function setTreeDirectory(){
+    var t=document.getElementById("file_tree");
+    t.setAttribute("datasources","file://"+directory+'test.rdf');
+	//alert('datasource: '+ t.getAttribute("datasources"));
+	//alert('Directory: file://'+directory+'/test.rdf');
+}
+
+function refreshTree(){
+   var t=document.getElementById("file_tree");
+   t.builder.rebuild();
+}
+
+function getAttributeOfSelectedNode(attribute) {
+	var tree=document.getElementById("file_tree");
+    try {
+		return tree.view.getCellText(tree.currentIndex,attribute);
+    } catch(e) {
+		return '';
+	}
+}
+
+/*
+function createSequence(completeURN) {
+    if(completeURN.indexOf(slash) != -1) {
+		    alert('Recursion: '+completeURN);
+	    //lowest sequence
+        var seqNodeContainer = dataSource.getNode(completeURN.substring(0,completeURN.lastIndexOf(":")));
+		seqNodeContainer.makeSeq();
+		//lowest description
+		var rootNodeContainer = dataSource.getNode(completeURN.substring(0,completeURN.lastIndexOf(":")));
+		var fnTemp = completeURN.substring(0,completeURN.lastIndexOf(":"));
+        rootNodeContainer.addTarget("http://echo.unibe.ch/digilib/rdf#fn",completeURN.substring(
+		    fnTemp.lastIndexOf(":")+1,completeURN.lastIndexOf(":")));
+
+        completeURN = completeURN.replace(slash,':');
+
+		//next higher sequence
+        var seqNode = dataSource.getNode(completeURN.substring(0,completeURN.lastIndexOf(":")));
+		seqNode.makeSeq();
+		//next higher description
+        var rootNode = dataSource.getNode(completeURN.substring(0,completeURN.lastIndexOf(":")));
+		fnTemp = completeURN.substring(0,completeURN.lastIndexOf(":"));
+        rootNode.addTarget("http://echo.unibe.ch/digilib/rdf#fn",completeURN.substring(
+		    fnTemp.lastIndexOf(":")+1,completeURN.lastIndexOf(":")));
+        seqNodeContainer.addChild(rootNode);
+		alert('Recursion end: '+completeURN);
+
+		if(completeURN.lastIndexOf(slash) == -1) {
+		    alert('Recursion finished : '+completeURN);
+			var node = dataSource.getNode(completeURN);
+			var arrayParams=window.content.listParameters();
+			for (i=0; i< arrayParams.length; i++){
+				var value=window.content.getParameter(arrayParams[i]);
+				//alert(arrayParams[i]+":"+value);
+				node.addTarget("http://echo.unibe.ch/digilib/rdf#"+arrayParams[i],value);
+			}
+			node.addTarget("http://echo.unibe.ch/digilib/rdf#lv","1");
+			seqNode.addChild(node);
+		}
+		this.createSequence(completeURN);
+	}
+}
+*/
+
+/**
+ * @todo isn't complex yet...
+ */
+function createComplexRDFEntry(completeURN) {
+    var title = window.prompt("Please enter a title for this Annotation",this.getAttributeOfSelectedNode('name'));
+    alert('Title: '+title);
+    var echoContainer = dataSource.getNode("urn:echo");
+    echoContainer.makeSeq();
+
+	echoContainer.addChild(completeURN);
+	var node = dataSource.getNode(completeURN);
+	var arrayParams=window.content.listParameters();
+	for (i=0; i< arrayParams.length; i++){
+		var value=window.content.getParameter(arrayParams[i]);
+		//alert(arrayParams[i]+":"+value);
+		node.addTarget("http://echo.unibe.ch/digilib/rdf#"+arrayParams[i],value);
+	}
+	node.addTarget("http://echo.unibe.ch/digilib/rdf#lv","1");
+	node.addTarget("http://purl.org/dc/elements/1.0/title",title);
+	node.addTarget("http://purl.org/dc/elements/1.0/creator","");
+	node.addTarget("http://purl.org/dc/elements/1.0/date","");
+	node.addTarget("http://www.w3.org/2000/10/annotation-ns#created","");
+	node.addTarget("http://www.w3.org/2000/10/annotation-ns#Annotation","targetof");
+	var node2 = dataSource.getNode("targetof");
+	node2.addTarget("http://echo.unibe.ch/digilib/rdf#lv","1");
+	/*ar subNode = dataSource.getNode('specialised');
+	node.addChild(subNode,true);*/
+}
+
+function file_save(){
+
+  // get Digilib-Parameter form Browser
+  //alert(window.content.location.href);
+
+ var documentpath='';
+    try{
+        documentpath=window.content.getParameter('fn');
+		documentpath=documentpath.replace(':',';');
+    }catch (e){
+        documentpath='';
+    }
+    if (documentpath != ''){
+        //documentpath=documentpath.replace(slash,':');
+	    //alert(documentpath);
+        var docPath='urn:echo:'+documentpath;
+
+		var t=document.getElementById("file_tree");
+		dataSource = new RDFDataSource(t.getAttribute("datasources"));
+		this.createComplexRDFEntry(docPath);
+
+/*		//Create new Node
+		var node = dataSource.getNode(docPath);
+		var arrayParams=window.content.listParameters();
+		for (i=0; i< arrayParams.length; i++){
+			var value=window.content.getParameter(arrayParams[i]);
+			//alert(arrayParams[i]+":"+value);
+			node.addTarget("http://echo.unibe.ch/digilib/rdf#"+arrayParams[i],value);
+		}
+		node.addTarget("http://echo.unibe.ch/digilib/rdf#lv","1");
+		//Add the node to the Seq
+		var seqNode = dataSource.getNode(docPath.substring(0,docPath.lastIndexOf(":")));
+		if(seqNode.isContainer()) {
+			seqNode.addChild(node);
+		} else {
+            seqNode.makeSeq();
+			seqNode.addChild(node);
+		}
+*/
+		dataSource.save();
+		refreshTree();
+/*
+     var ds=new RDFDataSource();
+     ds.parseFromString(rdfString,"http://echo.unibe.ch/digilib/rdf/digilib.rdf");
+     var node=ds.getNode(docPath);
+     var arrayParams=window.content.listParameters();
+     for (i=0; i< arrayParams.length; i++){
+        var value=window.content.getParameter(arrayParams[i]);
+        //alert(arrayParams[i]+":"+value);
+        node.addTarget("http://echo.unibe.ch/digilib/rdf#"+arrayParams[i],value);
+     }
+     node.addTarget("http://echo.unibe.ch/digilib/rdf#lv","1");
+     //alert(ds.serializeToString());
+     var nsIFilePicker = Components.interfaces.nsIFilePicker;
+     var fp = Components.classes["@mozilla.org/filepicker;1"]
+           .createInstance(nsIFilePicker);
+     fp.init(window, "Select a File", nsIFilePicker.modeSave);
+
+     // set default direcotry
+     var aLocalFile = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
+     directory=makePathCompatible(directory);
+     aLocalFile.initWithPath(directory);
+     fp.displayDirectory=aLocalFile;
+
+     fp.appendFilter("Annotations","*.rdf; *.RDF");
+     var res=fp.show();
+     if (res==nsIFilePicker.returnOK){
+       var thefile=fp.file;
+       // --- do something with the file here ---
+       //alert(fp.file);
+       //alert(fp.fileURL.path);
+
+       var strFilePath=fp.file.path;
+       strFilePath=strFilePath.toLowerCase();
+       if (strFilePath.indexOf('.rdf')<0){
+          strFilePath=fp.fileURL.path+".rdf";
+       }else{
+          strFilePath=fp.fileURL.path;
+       }
+       strFilePath=makePathCompatible(strFilePath);
+       var f=new File(strFilePath);
+       //var boolFileExists=f.exists();
+       //alert(boolFileExists);
+       f.create();
+       f.open('w');
+       f.write(ds.serializeToString());
+       f.close();
+       refreshTree();
+     }
+//*/
+  } else{
+        alert("Error: no alcatraz component. can't create an annotation.");
+  }
+}
+
+
+function file_local(){
+  // noch nicht programmiert
+}
+
+function file_annotaDB(){
+  alert("At the moment it is not possible to use the annota DB! This feature is not yet programmed.");
+  var menu_item=document.getElementById('local');
+  menu_item.setAttribute('checked','true');
+}
+
+function tree_click(){
+   var t=document.getElementById("file_tree");    //tree element
+   var l=t.view.getItemAtIndex(t.currentIndex);   //aus baum treeitem herausholen mit dem selected index (currentIndex)
+                                                  //l.firstChild ist treeitem
+   var d=l.firstChild.firstChild;                 //treecell
+   var firstLabel=d.getAttribute("label");
+   var cols=document.getElementById("cols");
+   var col=cols.childNodes;
+   var nodes=l.firstChild.childNodes;
+   var rdf_file="";
+   for (var i=0;i<nodes.length;i++){
+      if (col[i].getAttribute("label")=="URL"){
+         rdf_file=nodes[i].getAttribute("label");
+      }
+   }
+   if (rdf_file!=""){
+     send_annotation(rdf_file);
+   }
+   alert(rdf_file);
+   return rdf_file;  
+}
+
+
+/***
+* Diese Funktion wird gebraucht um im Dialog den Pfad zu digilib zu setzen
+*
+***/
+function setDigilibPath(digilibPathValue){
+   digilib_path=digilibPathValue;
+}
+
+/***
+* Dialog tools momentan kann man nur den Pfad zu digilib setzen
+*
+***/
+function show_dialog(dialog){
+  if (dialog=="tool path"){
+    window.openDialog("tools_dialog.xul","funny dialog",
+                  "chrome",digilib_path,setDigilibPath);
+  }
+}
+
+
+/***
+* Gibt den Inhalt eines Files als String zurueck
+*
+***/
+function readFile(str_Filename){
+  var f=new File(str_Filename);
+  var str="";
+  if (f.isFile()){
+    f.open();
+    str=f.read();
+    f.close();
+  } else {
+    alert(str_Filename + " is not a file");
+  }
+  return str;
+} 
+
+
+
+function send_annotation(rdf_file){
+   rdf_file=rdf_file.replace(/^file:\/\//,"");
+   rdf_file=makePathCompatible(rdf_file);
+   digilib_path="http://pythia2.unibe.ch:8080/docuserver/digitallibrary";
+   alert("Send Annotation: "+rdf_file);
+   strRdfFile=readFile(rdf_file);
+   if (strRdfFile!=""){
+     var formid='mainform';
+	 alert(digilib_path+"/digilib.jsp");
+     var form = createForm(formid, digilib_path+"/digilib.jsp", "post", "_content");
+     //var form = createForm(formid, "http://sophia.unibe.ch:8080/examples/servlet/RequestRDF", "post", "_content");
+     //var form = createForm(formid, "http://hera.unibe.ch:8080/examples/servlet/RequestRDF", "post", "_content");
+     setFormData(form, formid, strRdfFile);
+     form.submit();
+   }
+}
+
+function createForm(formid, action, method, target)
+{
+     var form = document.getElementById(formid);
+     if(form != null)
+     document.documentElement.removeChild(form);
+
+     var form = document.createElementNS("http://www.w3.org/1999/xhtml", "form");
+     form.setAttribute("id", formid);
+     form.setAttribute("action", action);
+     form.setAttribute("method", method);
+     form.setAttribute("target", target);
+     document.documentElement.appendChild(form);
+     return form;
+}
+
+function setFormData(form, formid, rdf)
+{
+     var val1 = document.createElementNS("http://www.w3.org/1999/xhtml", "input");
+     val1.setAttribute('type', 'hidden');
+     val1.setAttribute('name', 'rdf');
+     val1.setAttribute('value', rdf);
+     form.appendChild(val1); 
+}
+
+
+function getProfileDirectory(){
+ // First get the directory service and query interface it to
+   // nsIProperties
+   var dirService = Components.
+       classes['@mozilla.org/file/directory_service;1'].
+       getService(Components.interfaces.nsIProperties);
+ 
+   // Next get the "ProfD" property of type nsIFile from the directory
+   // service, FYI this constant is defined in
+   // mozilla/xpcom/io/nsAppDirectoryServiceDefs.h
+ 
+   const NS_APP_USER_PROFILE_50_DIR = "ProfD";
+   profileDir = dirService.get(NS_APP_USER_PROFILE_50_DIR,
+        Components.interfaces.nsIFile);
+ 
+   // Now that we have it we can show it's path. See nsIFile for the
+   // other things you that can be done with profileDir
+   //alert(profileDir.path);
+   return profileDir.path;
+}
+
+function getProfile(){
+   var strProfile=readFile(getProfileDirectory()+slash+"annota.dat");
+   if (strProfile==""){
+      directory=slash;
+      digilib_path="http://hera.unibe.ch:8080/alcatraz";
+      setProfile();
+   }else{
+      var params=strProfile.split("\n");
+      for (var i=0;i<params.length;i++){
+         var key_value=params[i].split("|");
+	 if (key_value[0]=='directory'){
+	    directory=key_value[1];
+         }
+	 if (key_value[0]=='tool path'){
+	    digilib_path=key_value[1];
+         }
+      }
+   }
+}
+
+function setProfile(){
+   var f=new File(getProfileDirectory()+slash+'annota.dat');
+   f.create();
+   f.open('w');
+   f.write('directory|'+directory+'\n'+'tool path|'+digilib_path+'\n');
+   f.close();
+}
+
+function traverse(node){
+   if (node.hasChildNodes){   
+      var arr_nodes=node.childNodes;  
+      for (var i=0;i<arr_nodes.length;i++){
+	 if (arr_nodes[i].getAttribute("open")){
+            //alert(arr_nodes[i].getAttribute("open"));
+            if (arr_nodes[i].hasChildNodes && arr_nodes[i].firstChild.hasChildNodes){
+               alert(arr_nodes[i].firstChild.firstChild.getAttribute("label"));
+            }
+         }         
+         traverse(arr_nodes[i]);  
+      }
+   }
+}
+
+function traverseTree(){
+    var t=document.getElementById("file_tree");
+    traverse(t);
+}
+
+
+/* @beat: ich habe mich erfrecht, diese billige methode in dein
+          javascript zu verschieben, weil ich eigentlich jetzt zu
+	  dir gehoert und nicht mehr in ein alcatraz.js (das gar
+	  nicht mehr existiert). alcatraz.xul ist nur noch ein 
+	  container fuer andere xul-files und hat deshalb auch
+	  keine eigenen funktionialitaeten mehr - christian
+*/
+function dialog_annotate() {
+	window.openDialog("chrome://alcatraz/content/dialog_annotate.xul", "dialog_annotate", "chrome,dialog,resizable=no", "");
+}