Mercurial > hg > digilib-old
comparison xul/content/annota_ohne_annota.js @ 203:bf945fcf9105
restarting with version control of xul sidebar/toolbar
author | luginbue |
---|---|
date | Fri, 27 Feb 2004 11:24:53 +0100 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
202:7501034e54e1 | 203:bf945fcf9105 |
---|---|
1 include ('chrome://jslib/content/io/dir.js'); | |
2 include ('chrome://jslib/content/io/file.js'); | |
3 include ('chrome://jslib/content/io/rdfBase.js'); | |
4 include ('chrome://jslib/content/io/rdfResource.js'); | |
5 include ('chrome://jslib/content/io/rdfContainer.js'); | |
6 include ('chrome://jslib/content/io/rdf.js'); | |
7 include ('chrome://jslib/content/io/rdfFile.js'); | |
8 include ('chrome://jslib/content/io/fileUtils.js'); | |
9 | |
10 var slash='/'; | |
11 if (navigator.platform=="Win32"){ | |
12 slash='\\'; | |
13 } | |
14 | |
15 var directory=slash; | |
16 var digilib_path=slash; | |
17 | |
18 getProfile(); | |
19 | |
20 function makePathCompatible(path){ | |
21 if (navigator.platform=="Win32"){ | |
22 // slash durch backslash ersetzten | |
23 path=path.replace(/\//g,"\\"); | |
24 // nur 2 backslashs am anfang | |
25 path=path.replace(/^\\{3}/,"\\\\"); | |
26 // vor Laufwerkbuchstaben kein Backslash | |
27 if (path.indexOf(":")>0){ | |
28 path=path.replace(/^\\/g,""); | |
29 } | |
30 // nur ein Slash gibt Absturz | |
31 path=path.replace(/^\\$/,"c:\\"); | |
32 //alert(path); | |
33 } | |
34 return path; | |
35 } | |
36 | |
37 function file_open(){ | |
38 var nsIFilePicker = Components.interfaces.nsIFilePicker; | |
39 var fp = Components.classes["@mozilla.org/filepicker;1"] | |
40 .createInstance(nsIFilePicker); | |
41 fp.init(window, "Select a Directory", nsIFilePicker.modeGetFolder); | |
42 | |
43 // set default direcotry | |
44 var aLocalFile = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile); | |
45 directory=makePathCompatible(directory); | |
46 aLocalFile.initWithPath(directory); | |
47 fp.displayDirectory=aLocalFile; | |
48 | |
49 var res=fp.show(); | |
50 if (res==nsIFilePicker.returnOK){ | |
51 directory=fp.fileURL.path; | |
52 directory=makePathCompatible(directory); | |
53 setTreeDirectory(); | |
54 } | |
55 } | |
56 | |
57 function setTreeDirectory(){ | |
58 var t=document.getElementById("file_tree"); | |
59 t.setAttribute("ref","file://"+directory); | |
60 } | |
61 | |
62 function refreshTree(){ | |
63 var t=document.getElementById("file_tree"); | |
64 t.builder.rebuild(); | |
65 } | |
66 | |
67 function file_save(){ | |
68 | |
69 // get Digilib-Parameter form Browser | |
70 // alert(window.content.location.href); | |
71 | |
72 var documentpath=''; | |
73 try{ | |
74 documentpath=window.content.getParameter('fn'); | |
75 }catch (e){ | |
76 documentpath=''; | |
77 } | |
78 if (documentpath != ''){ | |
79 var docPath='urn:echo:'+documentpath; | |
80 | |
81 var rdfString='<?xml version="1.0"?>' + | |
82 '<RDF:RDF xmlns:NS1="http://echo.unibe.ch/digilib/rdf#"' + | |
83 ' xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"' + | |
84 ' xmlns:d="http://purl.org/dc/elements/1.0/"' + | |
85 ' xmlns:a="http://www.w3.org/2000/10/annotation-ns#">' + | |
86 ' <RDF:Seq RDF:about="urn:echo">' + | |
87 ' <RDF:li RDF:resource="'+docPath+'"/>' + | |
88 ' </RDF:Seq>' + | |
89 ' <RDF:Description RDF:about="'+docPath+'" NS1:page=0"/>'+ | |
90 '</RDF:RDF>'; | |
91 | |
92 var ds=new RDFDataSource(); | |
93 ds.parseFromString(rdfString,"http://echo.unibe.ch/digilib/rdf/digilib.rdf"); | |
94 var node=ds.getNode(docPath); | |
95 var arrayParams=window.content.listParameters(); | |
96 for (i=0; i< arrayParams.length; i++){ | |
97 var value=window.content.getParameter(arrayParams[i]); | |
98 //alert(arrayParams[i]+":"+value); | |
99 node.addTarget("http://echo.unibe.ch/digilib/rdf#"+arrayParams[i],value); | |
100 } | |
101 node.addTarget("http://echo.unibe.ch/digilib/rdf#lv","1"); | |
102 //alert(ds.serializeToString()); | |
103 var nsIFilePicker = Components.interfaces.nsIFilePicker; | |
104 var fp = Components.classes["@mozilla.org/filepicker;1"] | |
105 .createInstance(nsIFilePicker); | |
106 fp.init(window, "Select a File", nsIFilePicker.modeSave); | |
107 | |
108 // set default direcotry | |
109 var aLocalFile = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile); | |
110 directory=makePathCompatible(directory); | |
111 aLocalFile.initWithPath(directory); | |
112 fp.displayDirectory=aLocalFile; | |
113 | |
114 fp.appendFilter("Annotations","*.rdf; *.RDF"); | |
115 var res=fp.show(); | |
116 if (res==nsIFilePicker.returnOK){ | |
117 var thefile=fp.file; | |
118 // --- do something with the file here --- | |
119 //alert(fp.file); | |
120 //alert(fp.fileURL.path); | |
121 | |
122 var strFilePath=fp.file.path; | |
123 strFilePath=strFilePath.toLowerCase(); | |
124 if (strFilePath.indexOf('.rdf')<0){ | |
125 strFilePath=fp.fileURL.path+".rdf"; | |
126 }else{ | |
127 strFilePath=fp.fileURL.path; | |
128 } | |
129 strFilePath=makePathCompatible(strFilePath); | |
130 var f=new File(strFilePath); | |
131 //var boolFileExists=f.exists(); | |
132 //alert(boolFileExists); | |
133 f.create(); | |
134 f.open('w'); | |
135 f.write(ds.serializeToString()); | |
136 f.close(); | |
137 refreshTree(); | |
138 } | |
139 }else{ | |
140 alert("Error: no alcatraz component. can't create an annotation."); | |
141 } | |
142 } | |
143 | |
144 function file_local(){ | |
145 // noch nicht programmiert | |
146 } | |
147 | |
148 function file_annotaDB(){ | |
149 alert("At the moment it is not possible to use the annota DB! This feature is not yet programmed."); | |
150 var menu_item=document.getElementById('local'); | |
151 menu_item.setAttribute('checked','true'); | |
152 } | |
153 | |
154 function tree_click(){ | |
155 var t=document.getElementById("file_tree"); //tree element | |
156 var l=t.view.getItemAtIndex(t.currentIndex); //aus baum treeitem herausholen mit dem selected index (currentIndex) | |
157 //l.firstChild ist treeitem | |
158 var d=l.firstChild.firstChild; //treecell | |
159 var firstLabel=d.getAttribute("label"); | |
160 var cols=document.getElementById("cols"); | |
161 var col=cols.childNodes; | |
162 var nodes=l.firstChild.childNodes; | |
163 var rdf_file=""; | |
164 for (var i=0;i<nodes.length;i++){ | |
165 if (col[i].getAttribute("label")=="URL"){ | |
166 rdf_file=nodes[i].getAttribute("label"); | |
167 } | |
168 } | |
169 if (rdf_file!=""){ | |
170 send_annotation(rdf_file); | |
171 } | |
172 return rdf_file; | |
173 } | |
174 | |
175 | |
176 /*** | |
177 * Diese Funktion wird gebraucht um im Dialog den Pfad zu digilib zu setzen | |
178 * | |
179 ***/ | |
180 function setDigilibPath(digilibPathValue){ | |
181 digilib_path=digilibPathValue; | |
182 } | |
183 | |
184 /*** | |
185 * Dialog tools momentan kann man nur den Pfad zu digilib setzen | |
186 * | |
187 ***/ | |
188 function show_dialog(dialog){ | |
189 if (dialog=="tool path"){ | |
190 window.openDialog("tools_dialog.xul","funny dialog", | |
191 "chrome",digilib_path,setDigilibPath); | |
192 } | |
193 } | |
194 | |
195 | |
196 /*** | |
197 * Gibt den Inhalt eines Files als String zurueck | |
198 * | |
199 ***/ | |
200 function readFile(str_Filename){ | |
201 var f=new File(str_Filename); | |
202 var str=""; | |
203 if (f.isFile()){ | |
204 f.open(); | |
205 str=f.read(); | |
206 f.close(); | |
207 } | |
208 return str; | |
209 } | |
210 | |
211 | |
212 | |
213 function send_annotation(rdf_file){ | |
214 rdf_file=rdf_file.replace(/^file:\/\//,""); | |
215 rdf_file=makePathCompatible(rdf_file); | |
216 strRdfFile=readFile(rdf_file); | |
217 if (strRdfFile!=""){ | |
218 var formid='mainform'; | |
219 var form = createForm(formid, digilib_path+"/digilib.jsp", "post", "_content"); | |
220 //var form = createForm(formid, "http://sophia.unibe.ch:8080/examples/servlet/RequestRDF", "post", "_content"); | |
221 //var form = createForm(formid, "http://hera.unibe.ch:8080/examples/servlet/RequestRDF", "post", "_content"); | |
222 setFormData(form, formid, strRdfFile); | |
223 form.submit(); | |
224 } | |
225 } | |
226 | |
227 function createForm(formid, action, method, target) | |
228 { | |
229 var form = document.getElementById(formid); | |
230 if(form != null) | |
231 document.documentElement.removeChild(form); | |
232 | |
233 var form = document.createElementNS("http://www.w3.org/1999/xhtml", "form"); | |
234 form.setAttribute("id", formid); | |
235 form.setAttribute("action", action); | |
236 form.setAttribute("method", method); | |
237 form.setAttribute("target", target); | |
238 document.documentElement.appendChild(form); | |
239 return form; | |
240 } | |
241 | |
242 function setFormData(form, formid, rdf) | |
243 { | |
244 var val1 = document.createElementNS("http://www.w3.org/1999/xhtml", "input"); | |
245 val1.setAttribute('type', 'hidden'); | |
246 val1.setAttribute('name', 'rdf'); | |
247 val1.setAttribute('value', rdf); | |
248 form.appendChild(val1); | |
249 } | |
250 | |
251 | |
252 function getProfileDirectory(){ | |
253 // First get the directory service and query interface it to | |
254 // nsIProperties | |
255 var dirService = Components. | |
256 classes['@mozilla.org/file/directory_service;1']. | |
257 getService(Components.interfaces.nsIProperties); | |
258 | |
259 // Next get the "ProfD" property of type nsIFile from the directory | |
260 // service, FYI this constant is defined in | |
261 // mozilla/xpcom/io/nsAppDirectoryServiceDefs.h | |
262 | |
263 const NS_APP_USER_PROFILE_50_DIR = "ProfD"; | |
264 profileDir = dirService.get(NS_APP_USER_PROFILE_50_DIR, | |
265 Components.interfaces.nsIFile); | |
266 | |
267 // Now that we have it we can show it's path. See nsIFile for the | |
268 // other things you that can be done with profileDir | |
269 //alert(profileDir.path); | |
270 return profileDir.path; | |
271 } | |
272 | |
273 function getProfile(){ | |
274 var strProfile=readFile(getProfileDirectory()+slash+"annota.dat"); | |
275 if (strProfile==""){ | |
276 directory=slash; | |
277 digilib_path="http://hera.unibe.ch:8080/alcatraz"; | |
278 setProfile(); | |
279 }else{ | |
280 var params=strProfile.split("\n"); | |
281 for (var i=0;i<params.length;i++){ | |
282 var key_value=params[i].split("|"); | |
283 if (key_value[0]=='directory'){ | |
284 directory=key_value[1]; | |
285 } | |
286 if (key_value[0]=='tool path'){ | |
287 digilib_path=key_value[1]; | |
288 } | |
289 } | |
290 } | |
291 } | |
292 | |
293 function setProfile(){ | |
294 var f=new File(getProfileDirectory()+slash+'annota.dat'); | |
295 f.create(); | |
296 f.open('w'); | |
297 f.write('directory|'+directory+'\n'+'tool path|'+digilib_path+'\n'); | |
298 f.close(); | |
299 } | |
300 | |
301 function traverse(node){ | |
302 if (node.hasChildNodes){ | |
303 var arr_nodes=node.childNodes; | |
304 for (var i=0;i<arr_nodes.length;i++){ | |
305 if (arr_nodes[i].getAttribute("open")){ | |
306 //alert(arr_nodes[i].getAttribute("open")); | |
307 if (arr_nodes[i].hasChildNodes && arr_nodes[i].firstChild.hasChildNodes){ | |
308 alert(arr_nodes[i].firstChild.firstChild.getAttribute("label")); | |
309 } | |
310 } | |
311 traverse(arr_nodes[i]); | |
312 } | |
313 } | |
314 } | |
315 | |
316 function traverseTree(){ | |
317 var t=document.getElementById("file_tree"); | |
318 traverse(t); | |
319 } |