1 | var bitsTreeProjectService = { |
---|
2 | _openurl : "", |
---|
3 | _doc : null, |
---|
4 | _loaddoc : null, |
---|
5 | _url : "", |
---|
6 | _fileid : "", |
---|
7 | _oid : null, |
---|
8 | _savehtml : [], |
---|
9 | _applytimer : null, |
---|
10 | |
---|
11 | _caseSensitive_exp : new RegExp("[A-Z]{2,}",""), |
---|
12 | _marker_exp : new RegExp("^"+bitsMarker.id_key+"\\D+\\d+$",""), |
---|
13 | |
---|
14 | appDataDir : null, |
---|
15 | appDataURL : "", |
---|
16 | appDataSTRING : "", |
---|
17 | appDataURLExp : null, |
---|
18 | appDataAddSTRING : "_files", |
---|
19 | zipApp : null, |
---|
20 | zipAppScript : null, |
---|
21 | _title2obj : {}, |
---|
22 | |
---|
23 | ///////////////////////////////////////////////////////////////////// |
---|
24 | get STRING() { return document.getElementById("MarkingCollectionOverlayString"); }, |
---|
25 | |
---|
26 | get DataSource() { return window.top.bitsObjectMng.DataSource; }, |
---|
27 | get Common() { return window.top.bitsObjectMng.Common; }, |
---|
28 | get Database() { return window.top.bitsObjectMng.Database; }, |
---|
29 | get XML() { return window.top.bitsObjectMng.XML; }, |
---|
30 | get XPath() { return window.top.bitsObjectMng.XPath; }, |
---|
31 | get gBrowser() { return window.top.bitsObjectMng.getBrowser();}, |
---|
32 | |
---|
33 | get MAINWINDOW() { return window.top.document.getElementById("main-window"); }, |
---|
34 | get SIDEBAR() { return window.top.document.getElementById("sidebar"); }, |
---|
35 | get CONTENT() { return window.top.document.getElementById("content"); }, |
---|
36 | |
---|
37 | get SIDEBAR_DOC() {try{return this.SIDEBAR.contentDocument;}catch(e){return undefined;}}, |
---|
38 | get SIDEBAR_WIN() {try{return this.SIDEBAR.contentWindow;}catch(e){return undefined;}}, |
---|
39 | get mcTreeHandler() {try{return this.SIDEBAR_WIN.mcTreeHandler;}catch(e){return undefined;}}, |
---|
40 | get mcMainService() {try{return this.SIDEBAR_WIN.mcMainService;}catch(e){return undefined;}}, |
---|
41 | get mcController() {try{return this.SIDEBAR_WIN.mcController;}catch(e){return undefined;}}, |
---|
42 | get mcPropertyView() {try{return this.SIDEBAR_WIN.mcPropertyView;}catch(e){return undefined;}}, |
---|
43 | get mcTreeViewModeService() {try{return this.SIDEBAR_WIN.mcTreeViewModeService;}catch(e){return undefined;}}, |
---|
44 | get bitsItemView() {try{return this.SIDEBAR_WIN.bitsItemView;}catch(e){return undefined;}}, |
---|
45 | |
---|
46 | get TREE_POPUP(){try{return this.SIDEBAR_DOC.getElementById("mcPopup");}catch(e){return undefined;}}, |
---|
47 | get TREE_LISTVIEWMENU(){try{return this.SIDEBAR_DOC.getElementById("mcPopupViewMenu");}catch(e){return undefined;}}, |
---|
48 | get TREE_INDEXMENU(){try{return this.SIDEBAR_DOC.getElementById("mcPopupProjectIndexMenu");}catch(e){return undefined;}}, |
---|
49 | get TREE_DOCUMENTMENU(){try{return this.SIDEBAR_DOC.getElementById("mcPopupProjectDocumentsMenu");}catch(e){return undefined;}}, |
---|
50 | get TREE_DICTIONARYMENU(){try{return this.SIDEBAR_DOC.getElementById("mcPopupProjectDictionaryMenu");}catch(e){return undefined;}}, |
---|
51 | |
---|
52 | get xmldoc(){ return this._xmldoc; }, |
---|
53 | |
---|
54 | ///////////////////////////////////////////////////////////////////// |
---|
55 | init : function(){ |
---|
56 | try{ |
---|
57 | this.gBrowser.addEventListener("pageshow", bitsTreeProjectService.pageshow, false); |
---|
58 | }catch(ex){ |
---|
59 | this._dump("bitsTreeProjectService.init():"+ex); |
---|
60 | } |
---|
61 | }, |
---|
62 | |
---|
63 | ///////////////////////////////////////////////////////////////////// |
---|
64 | done : function(){ |
---|
65 | try{ |
---|
66 | this.gBrowser.removeEventListener("pageshow", bitsTreeProjectService.pageshow, false); |
---|
67 | }catch(ex){ |
---|
68 | this._dump("bitsTreeProjectService.done():"+ex); |
---|
69 | } |
---|
70 | }, |
---|
71 | |
---|
72 | ///////////////////////////////////////////////////////////////////// |
---|
73 | pageshow : function(aEvent){ |
---|
74 | bitsTreeProjectService._pageshow(aEvent); |
---|
75 | }, |
---|
76 | |
---|
77 | ///////////////////////////////////////////////////////////////////// |
---|
78 | _pageshow : function(aEvent){ |
---|
79 | var self = this; |
---|
80 | var doc = aEvent.target; |
---|
81 | if(doc.location.protcol == "chrome:" || doc.location.protcol == "about:") return; |
---|
82 | if(!doc.body) return; |
---|
83 | if(doc.contentType != "text/plain") return; |
---|
84 | var pre = doc.body.getElementsByTagName("pre")[0]; |
---|
85 | if(!pre || pre.style.cssText != "") return; |
---|
86 | var textplain_display = nsPreferences.copyUnicharPref("wiredmarker.textplain.display","usually"); |
---|
87 | if(textplain_display == "usually") return; |
---|
88 | setTimeout(function(){ |
---|
89 | if(textplain_display == "confirm" && !self.Common.confirm(self.STRING.getString("CONFIRM_BROWSER_TO_FIT_TEXT"))) return; |
---|
90 | var title = doc.title!=""?doc.title:doc.location.toString(); |
---|
91 | var textContent = pre.textContent.replace(/(\x0D\x0A|\x0D|\x0A)/g,"<br>$1"); |
---|
92 | var textContent_Arr = textContent.split("<br>"); |
---|
93 | var cDoc = doc; |
---|
94 | try{ |
---|
95 | while(cDoc.body.lastChild){ cDoc.body.removeChild(cDoc.body.lastChild); } |
---|
96 | cDoc.body.appendChild(cDoc.createElement("pre")); |
---|
97 | if(cDoc.body.lastChild){ |
---|
98 | var span = cDoc.body.lastChild; |
---|
99 | span.style.whiteSpace = "normal"; |
---|
100 | var backgroundColor = nsPreferences.copyUnicharPref("wiredmarker.textplain.background_color"); |
---|
101 | var fontFamily = nsPreferences.copyUnicharPref("wiredmarker.textplain.font.name"); |
---|
102 | var fontSize = nsPreferences.getIntPref("wiredmarker.textplain.font.size"); |
---|
103 | if(backgroundColor) span.style.backgroundColor = backgroundColor; |
---|
104 | if(fontFamily) span.style.fontFamily = fontFamily; |
---|
105 | if(fontSize) span.style.fontSize = fontSize+'pt'; |
---|
106 | var i; |
---|
107 | for(i=0;i<textContent_Arr.length;i++){ |
---|
108 | span.appendChild(cDoc.createTextNode(textContent_Arr[i])); |
---|
109 | var elem_br = cDoc.createElement("br"); |
---|
110 | elem_br.setAttribute("id",bitsMarker.id_key+"dummy_br"); |
---|
111 | span.appendChild(elem_br); |
---|
112 | } |
---|
113 | } |
---|
114 | var urlString = self.Common.getURLStringFromDocument(cDoc); |
---|
115 | var info = bitsAutocacheService.getSaveCacheInfo(urlString); |
---|
116 | var rtn = bitsMarkingCollection.marking(cDoc,(info?info.URL:undefined)); |
---|
117 | }catch(e){ |
---|
118 | self.Common.alert(e); |
---|
119 | } |
---|
120 | },0); |
---|
121 | }, |
---|
122 | |
---|
123 | ///////////////////////////////////////////////////////////////////// |
---|
124 | load : function(aEvent){ |
---|
125 | var popup = this.TREE_POPUP; |
---|
126 | if(!popup) return; |
---|
127 | popup.addEventListener("popupshowing",this.popupshowing_tree, false); |
---|
128 | }, |
---|
129 | |
---|
130 | ///////////////////////////////////////////////////////////////////// |
---|
131 | unload : function(aEvent){ |
---|
132 | var popup = this.TREE_POPUP; |
---|
133 | if(!popup) return; |
---|
134 | popup.removeEventListener("popupshowing",this.popupshowing_tree, false); |
---|
135 | }, |
---|
136 | |
---|
137 | ///////////////////////////////////////////////////////////////////// |
---|
138 | popupshowing_tree : function(aEvent){ |
---|
139 | bitsTreeProjectService._popupshowing_tree(aEvent); |
---|
140 | }, |
---|
141 | |
---|
142 | _popupshowing_tree : function(aEvent){ |
---|
143 | var aRes = null; |
---|
144 | var type = null; |
---|
145 | if(this.mcTreeHandler && this.mcTreeHandler.resource) aRes = this.mcTreeHandler.resource; |
---|
146 | if(aRes) type = this.DataSource.getProperty(aRes,"type"); |
---|
147 | var contextmenu_type = nsPreferences.copyUnicharPref("wiredmarker.contextmenu.type",""); |
---|
148 | if(this.TREE_LISTVIEWMENU.hasAttribute("hidden") || contextmenu_type == "simple"){ |
---|
149 | this.TREE_INDEXMENU.setAttribute("hidden","true"); |
---|
150 | this.TREE_DOCUMENTMENU.setAttribute("hidden","true"); |
---|
151 | this.TREE_DICTIONARYMENU.setAttribute("hidden","true"); |
---|
152 | }else if(type && type == "localfolder"){ |
---|
153 | this.TREE_DOCUMENTMENU.setAttribute("hidden","true"); |
---|
154 | this.TREE_DICTIONARYMENU.setAttribute("hidden","true"); |
---|
155 | }else{ |
---|
156 | this.TREE_INDEXMENU.removeAttribute("hidden"); |
---|
157 | this.TREE_DOCUMENTMENU.removeAttribute("hidden"); |
---|
158 | this.TREE_DICTIONARYMENU.removeAttribute("hidden"); |
---|
159 | } |
---|
160 | }, |
---|
161 | |
---|
162 | ///////////////////////////////////////////////////////////////////// |
---|
163 | click : function(aEvent){}, |
---|
164 | |
---|
165 | ///////////////////////////////////////////////////////////////////// |
---|
166 | blur : function(aEvent){}, |
---|
167 | |
---|
168 | ///////////////////////////////////////////////////////////////////// |
---|
169 | onPopupShowing : function(aEvent){}, |
---|
170 | |
---|
171 | ///////////////////////////////////////////////////////////////////// |
---|
172 | onPopupHiding : function(aEvent){}, |
---|
173 | |
---|
174 | ///////////////////////////////////////////////////////////////////// |
---|
175 | onCommand : function(aEvent){}, |
---|
176 | |
---|
177 | ///////////////////////////////////////////////////////////////////// |
---|
178 | setWaitCursor : function(aValue){ |
---|
179 | var menu_MainBits = window.top.document.getElementById("bitsExtensionsMainMenu"); |
---|
180 | var menu_ToolsBits = window.top.document.getElementById("bitsExtensionsToolsMenu"); |
---|
181 | var menu_BookmarksBits = window.top.document.getElementById("bitsExtensionsBookmarksMenu"); |
---|
182 | var elems = this.SIDEBAR_DOC.getElementsByTagName("*"); |
---|
183 | var i; |
---|
184 | if(aValue){ |
---|
185 | if(menu_MainBits) menu_MainBits.setAttribute("disabled","true"); |
---|
186 | if(menu_ToolsBits) menu_ToolsBits.setAttribute("disabled","true"); |
---|
187 | if(menu_BookmarksBits) menu_BookmarksBits.setAttribute("disabled","true"); |
---|
188 | for(i=0;i<elems.length;i++){ |
---|
189 | try{ |
---|
190 | if(elems[i].hasAttribute("disabled") && elems[i].disabled){ |
---|
191 | elems[i].setAttribute("disabled_prev","true"); |
---|
192 | }else{ |
---|
193 | elems[i].setAttribute("disabled","true"); |
---|
194 | } |
---|
195 | }catch(e){this._dump("setWaitCursor("+aValue+"):"+e);} |
---|
196 | try{elems[i].setAttribute("wait-cursor","true");}catch(e){this._dump("setWaitCursor("+aValue+"):"+e);} |
---|
197 | } |
---|
198 | }else{ |
---|
199 | if(menu_MainBits) menu_MainBits.removeAttribute("disabled"); |
---|
200 | if(menu_ToolsBits) menu_ToolsBits.removeAttribute("disabled"); |
---|
201 | if(menu_BookmarksBits) menu_BookmarksBits.removeAttribute("disabled"); |
---|
202 | for(i=0;i<elems.length;i++){ |
---|
203 | try{elems[i].removeAttribute("wait-cursor");}catch(e){this._dump("setWaitCursor("+aValue+"):"+e);} |
---|
204 | try{ |
---|
205 | if(elems[i].hasAttribute("disabled_prev")){ |
---|
206 | elems[i].removeAttribute("disabled_prev"); |
---|
207 | }else{ |
---|
208 | elems[i].removeAttribute("disabled"); |
---|
209 | } |
---|
210 | }catch(e){this._dump("setWaitCursor("+aValue+"):"+e);} |
---|
211 | } |
---|
212 | } |
---|
213 | }, |
---|
214 | |
---|
215 | ///////////////////////////////////////////////////////////////////// |
---|
216 | updateFolderProperty : function(aRes,aProperty,aOptions){ |
---|
217 | var changed = false; |
---|
218 | var fid = this.DataSource.getProperty(aRes,"id"); |
---|
219 | var dbtype = this.DataSource.getProperty(aRes,"dbtype"); |
---|
220 | var folders = this.Database.getFolderFormID(fid, dbtype); |
---|
221 | if(folders && folders.length>0){ |
---|
222 | if(aProperty != undefined){ |
---|
223 | var parser = new DOMParser(); |
---|
224 | var xmldoc; |
---|
225 | if(folders[0].fid_property){ |
---|
226 | xmldoc = parser.parseFromString(folders[0].fid_property, "text/xml"); |
---|
227 | } |
---|
228 | if(!xmldoc) xmldoc = parser.parseFromString("<PROPERTY/>", "text/xml"); |
---|
229 | parser = undefined; |
---|
230 | if(aProperty.icon != undefined){ |
---|
231 | var icon_elem; |
---|
232 | this.DataSource.setProperty(aRes,"icon",aProperty.icon); |
---|
233 | icon_elem = xmldoc.getElementsByTagName("ICON")[0]; |
---|
234 | if(icon_elem){ |
---|
235 | while(icon_elem.hasChildNodes()){ icon_elem.removeChild(icon_elem.lastChild); } |
---|
236 | }else{ |
---|
237 | icon_elem = xmldoc.createElement("ICON"); |
---|
238 | xmldoc.documentElement.appendChild(icon_elem); |
---|
239 | } |
---|
240 | icon_elem.appendChild(xmldoc.createTextNode(aProperty.icon)); |
---|
241 | } |
---|
242 | if(aProperty.contextmenu != undefined){ |
---|
243 | var contextmenu_elem; |
---|
244 | this.DataSource.setProperty(aRes,"contextmenu",aProperty.contextmenu); |
---|
245 | contextmenu_elem = xmldoc.getElementsByTagName("CONTEXTMENU")[0]; |
---|
246 | if(contextmenu_elem){ |
---|
247 | while(contextmenu_elem.hasChildNodes()){ contextmenu_elem.removeChild(contextmenu_elem.lastChild); } |
---|
248 | }else{ |
---|
249 | contextmenu_elem = xmldoc.createElement("CONTEXTMENU"); |
---|
250 | xmldoc.documentElement.appendChild(contextmenu_elem); |
---|
251 | } |
---|
252 | contextmenu_elem.appendChild(xmldoc.createTextNode(aProperty.contextmenu)); |
---|
253 | } |
---|
254 | if(aProperty.propertyOverlay != undefined){ |
---|
255 | var propertyOverlay_elem; |
---|
256 | propertyOverlay_elem = xmldoc.getElementsByTagName("PROPERTYOVERLAY")[0]; |
---|
257 | if(propertyOverlay_elem){ |
---|
258 | while(propertyOverlay_elem.hasChildNodes()){ propertyOverlay_elem.removeChild(propertyOverlay_elem.lastChild); } |
---|
259 | }else{ |
---|
260 | propertyOverlay_elem = xmldoc.createElement("PROPERTYOVERLAY"); |
---|
261 | xmldoc.documentElement.appendChild(propertyOverlay_elem); |
---|
262 | } |
---|
263 | propertyOverlay_elem.appendChild(xmldoc.createTextNode(aProperty.propertyOverlay)); |
---|
264 | } |
---|
265 | var s = new XMLSerializer(); |
---|
266 | folders[0].fid_property = s.serializeToString(xmldoc); |
---|
267 | s = undefined; |
---|
268 | } |
---|
269 | if(aOptions != undefined){ |
---|
270 | if(aOptions.fid_style != undefined) folders[0].fid_style = aOptions.fid_style; |
---|
271 | if(aOptions.fid_mode != undefined) folders[0].fid_mode = aOptions.fid_mode; |
---|
272 | if(aOptions.pfid_order != undefined) folders[0].pfid_order = aOptions.pfid_order; |
---|
273 | } |
---|
274 | delete folders[0].dbtype; |
---|
275 | changed = this.Database.updateFolder(folders[0],dbtype); |
---|
276 | } |
---|
277 | return changed; |
---|
278 | }, |
---|
279 | |
---|
280 | ///////////////////////////////////////////////////////////////////// |
---|
281 | createFolders : function(aEvent){ |
---|
282 | var curIdx = this.mcTreeHandler.TREE.currentIndex; |
---|
283 | var curRes = null; |
---|
284 | if(curIdx>=0){ |
---|
285 | if(!this.mcTreeHandler.TREE.view.isContainer(curIdx)) return; |
---|
286 | curRes = this.mcTreeHandler.TREE.builderView.getResourceAtIndex(curIdx); |
---|
287 | if(!this.mcTreeHandler.TREE.view.isContainerOpen(curIdx)) this.mcTreeHandler.TREE.view.toggleOpenState(curIdx); |
---|
288 | }else{ |
---|
289 | curRes = this.Common.RDF.GetResource(this.mcTreeHandler.TREE.ref); |
---|
290 | } |
---|
291 | var title = this.DataSource.getProperty(curRes,"title"); |
---|
292 | var style = this.DataSource.getProperty(curRes,"style"); |
---|
293 | var editmode = "0"; |
---|
294 | if(title != ""){ |
---|
295 | title = "New Project Folder ["+title+"]"; |
---|
296 | }else{ |
---|
297 | title = "New Project Folder"; |
---|
298 | } |
---|
299 | if(editmode == "") editmode = "0"; |
---|
300 | if(!style || style==""){ |
---|
301 | var styleIdx = nsPreferences.getIntPref("wiredmarker.folderstyleindex",1); |
---|
302 | if(styleIdx>8) styleIdx = 1; |
---|
303 | style = bitsMarker.PRESET_STYLES[styleIdx]; |
---|
304 | nsPreferences.setIntPref("wiredmarker.folderstyleindex",styleIdx); |
---|
305 | } |
---|
306 | //ãããžã§ã¯ããã©ã«ã |
---|
307 | var newRes = this.mcMainService.createGroupFolder(title,curRes.Value,undefined,"","",editmode); |
---|
308 | this.mcController.rebuildLocal(); |
---|
309 | bitsMarkingCollection.reOrder(curRes); |
---|
310 | var newIdx = this.mcTreeHandler.TREE.builderView.getIndexOfResource(newRes); |
---|
311 | this.mcTreeHandler.TREE.view.selection.select(newIdx); |
---|
312 | this.mcTreeHandler.TREE.focus(); |
---|
313 | if(!this.mcTreeHandler.TREE.view.isContainerOpen(newIdx)) this.mcTreeHandler.TREE.view.toggleOpenState(newIdx); |
---|
314 | var fid_mode = 0x0002; |
---|
315 | this.updateFolderProperty(newRes,{icon:"chrome://markingcollection/skin/project.png",contextmenu:"mcPopupProjectMainMenu"},{fid_mode : fid_mode }); |
---|
316 | this.DataSource.setProperty(newRes,"editmode",fid_mode.toString()); |
---|
317 | //ããã¥ã¡ã³ããã©ã«ã |
---|
318 | var newRes_Docs = this.mcMainService.createGroupFolder("Documents",newRes.Value,undefined,"","",editmode); |
---|
319 | this.mcController.rebuildLocal(); |
---|
320 | bitsMarkingCollection.reOrder(newRes); |
---|
321 | fid_mode = 0x0002; |
---|
322 | this.updateFolderProperty(newRes_Docs,{icon:"chrome://markingcollection/skin/documents.png",contextmenu:"mcPopupProjectDocumentsMenu"},{fid_mode : fid_mode}); |
---|
323 | this.DataSource.setProperty(newRes_Docs,"editmode",fid_mode.toString()); |
---|
324 | //èŸæžãã©ã«ã |
---|
325 | var newRes_Dic = this.mcMainService.createGroupFolder("Dictionary",newRes.Value,undefined,"","",editmode); |
---|
326 | this.mcController.rebuildLocal(); |
---|
327 | bitsMarkingCollection.reOrder(newRes); |
---|
328 | fid_mode = 0x0002; |
---|
329 | this.updateFolderProperty(newRes_Dic,{icon:"chrome://markingcollection/skin/dictionary.png",contextmenu:"mcPopupProjectDictionaryMenu"},{fid_mode : fid_mode}); |
---|
330 | this.DataSource.setProperty(newRes_Dic,"editmode",fid_mode.toString()); |
---|
331 | //HAãã©ã«ã |
---|
332 | var newRes_Anchor = this.mcMainService.createGroupFolder("Anchor",newRes.Value,undefined,style,"",editmode); |
---|
333 | this.mcController.rebuildLocal(); |
---|
334 | bitsMarkingCollection.reOrder(newRes); |
---|
335 | fid_mode = 0x0000; |
---|
336 | this.updateFolderProperty(newRes_Anchor,{icon:"chrome://markingcollection/skin/hyperanchor.png",contextmenu:"mcPopupProjectAnchorMenu"}); |
---|
337 | this.DataSource.setProperty(newRes_Anchor,"editmode",fid_mode.toString()); |
---|
338 | var result = this.mcController.property(newRes); |
---|
339 | if(result){ |
---|
340 | bitsMarkingCollection.reOrder(curRes); |
---|
341 | }else{ |
---|
342 | this.mcTreeHandler.remove(undefined,undefined,true); |
---|
343 | } |
---|
344 | var newIdx = this.mcTreeHandler.TREE.builderView.getIndexOfResource(newRes); |
---|
345 | this.mcController.rebuildLocal(); |
---|
346 | var selectIdx = newIdx; |
---|
347 | if(selectIdx<0) selectIdx = curIdx; |
---|
348 | this.mcTreeHandler.TREE.currentIndex = selectIdx; |
---|
349 | if(!this.mcTreeHandler.TREE.view.selection.isSelected(this.mcTreeHandler.TREE.currentIndex)) this.mcTreeHandler.TREE.view.selection.select(this.mcTreeHandler.TREE.currentIndex); |
---|
350 | this.mcTreeHandler.TREE.focus(); |
---|
351 | this.mcTreeHandler.TREE.treeBoxObject.ensureRowIsVisible(selectIdx); |
---|
352 | this.mcPropertyView.dispProperty(this.mcTreeHandler.object); |
---|
353 | }, |
---|
354 | |
---|
355 | ///////////////////////////////////////////////////////////////////// |
---|
356 | createDocumentsFolder : function(aEvent){ |
---|
357 | var curIdx = this.mcTreeHandler.TREE.currentIndex; |
---|
358 | var curRes = null; |
---|
359 | if(curIdx>=0){ |
---|
360 | if(!this.mcTreeHandler.TREE.view.isContainer(curIdx)) return; |
---|
361 | curRes = this.mcTreeHandler.TREE.builderView.getResourceAtIndex(curIdx); |
---|
362 | if(!this.mcTreeHandler.TREE.view.isContainerOpen(curIdx)) this.mcTreeHandler.TREE.view.toggleOpenState(curIdx); |
---|
363 | }else{ |
---|
364 | curRes = this.Common.RDF.GetResource(this.mcTreeHandler.TREE.ref); |
---|
365 | } |
---|
366 | var title = this.DataSource.getProperty(curRes,"title"); |
---|
367 | var style = this.DataSource.getProperty(curRes,"style"); |
---|
368 | var editmode = "0"; |
---|
369 | if(title != ""){ |
---|
370 | title = "New Documents Folder ["+title+"]"; |
---|
371 | }else{ |
---|
372 | title = "New Documents Folder"; |
---|
373 | } |
---|
374 | if(editmode == "") editmode = "0"; |
---|
375 | var fid_mode = 0x0002; |
---|
376 | //ããã¥ã¡ã³ããã©ã«ã |
---|
377 | var newRes = this.mcMainService.createGroupFolder(title,curRes.Value,undefined,"","",editmode); |
---|
378 | this.mcController.rebuildLocal(); |
---|
379 | bitsMarkingCollection.reOrder(newRes); |
---|
380 | var newIdx = this.mcTreeHandler.TREE.builderView.getIndexOfResource(newRes); |
---|
381 | this.mcTreeHandler.TREE.view.selection.select(newIdx); |
---|
382 | this.mcTreeHandler.TREE.focus(); |
---|
383 | if(!this.mcTreeHandler.TREE.view.isContainerOpen(newIdx)) this.mcTreeHandler.TREE.view.toggleOpenState(newIdx); |
---|
384 | this.updateFolderProperty(newRes, |
---|
385 | { |
---|
386 | icon : "chrome://markingcollection/skin/documents.png", |
---|
387 | contextmenu : "mcPopupProjectDocumentsMenu" |
---|
388 | }, |
---|
389 | { fid_mode : fid_mode } |
---|
390 | ); |
---|
391 | this.DataSource.setProperty(newRes,"editmode",fid_mode.toString()); |
---|
392 | var result = this.mcController.property(newRes); |
---|
393 | if(result){ |
---|
394 | bitsMarkingCollection.reOrder(curRes); |
---|
395 | }else{ |
---|
396 | this.mcTreeHandler.remove(undefined,undefined,true); |
---|
397 | } |
---|
398 | var newIdx = this.mcTreeHandler.TREE.builderView.getIndexOfResource(newRes); |
---|
399 | this.mcController.rebuildLocal(); |
---|
400 | var selectIdx = newIdx; |
---|
401 | if(selectIdx<0) selectIdx = curIdx; |
---|
402 | this.mcTreeHandler.TREE.currentIndex = selectIdx; |
---|
403 | if(!this.mcTreeHandler.TREE.view.selection.isSelected(this.mcTreeHandler.TREE.currentIndex)) this.mcTreeHandler.TREE.view.selection.select(this.mcTreeHandler.TREE.currentIndex); |
---|
404 | this.mcTreeHandler.TREE.focus(); |
---|
405 | this.mcTreeHandler.TREE.treeBoxObject.ensureRowIsVisible(selectIdx); |
---|
406 | this.mcPropertyView.dispProperty(this.mcTreeHandler.object); |
---|
407 | }, |
---|
408 | |
---|
409 | ///////////////////////////////////////////////////////////////////// |
---|
410 | createDictionaryFolder : function(aEvent){ |
---|
411 | var curIdx = this.mcTreeHandler.TREE.currentIndex; |
---|
412 | var curRes = null; |
---|
413 | if(curIdx>=0){ |
---|
414 | if(!this.mcTreeHandler.TREE.view.isContainer(curIdx)) return; |
---|
415 | curRes = this.mcTreeHandler.TREE.builderView.getResourceAtIndex(curIdx); |
---|
416 | if(!this.mcTreeHandler.TREE.view.isContainerOpen(curIdx)) this.mcTreeHandler.TREE.view.toggleOpenState(curIdx); |
---|
417 | }else{ |
---|
418 | curRes = this.Common.RDF.GetResource(this.mcTreeHandler.TREE.ref); |
---|
419 | } |
---|
420 | var title = this.DataSource.getProperty(curRes,"title"); |
---|
421 | var style = this.DataSource.getProperty(curRes,"style"); |
---|
422 | var editmode = "0"; |
---|
423 | if(title != ""){ |
---|
424 | title = "New Dictionary Folder ["+title+"]"; |
---|
425 | }else{ |
---|
426 | title = "New Dictionary Folder"; |
---|
427 | } |
---|
428 | if(editmode == "") editmode = "0"; |
---|
429 | if(!style || style==""){ |
---|
430 | var styleIdx = nsPreferences.getIntPref("wiredmarker.folderstyleindex",1); |
---|
431 | if(styleIdx>8) styleIdx = 1; |
---|
432 | style = bitsMarker.PRESET_STYLES[styleIdx]; |
---|
433 | nsPreferences.setIntPref("wiredmarker.folderstyleindex",styleIdx); |
---|
434 | } |
---|
435 | var fid_mode = 0x0000; |
---|
436 | //èŸæžãã©ã«ã |
---|
437 | var newRes = this.mcMainService.createGroupFolder(title,curRes.Value,undefined,style,"",editmode); |
---|
438 | this.mcController.rebuildLocal(); |
---|
439 | bitsMarkingCollection.reOrder(newRes); |
---|
440 | var newIdx = this.mcTreeHandler.TREE.builderView.getIndexOfResource(newRes); |
---|
441 | this.mcTreeHandler.TREE.view.selection.select(newIdx); |
---|
442 | this.mcTreeHandler.TREE.focus(); |
---|
443 | if(!this.mcTreeHandler.TREE.view.isContainerOpen(newIdx)) this.mcTreeHandler.TREE.view.toggleOpenState(newIdx); |
---|
444 | this.updateFolderProperty(newRes, |
---|
445 | { |
---|
446 | icon : "chrome://markingcollection/skin/dictionary.png", |
---|
447 | contextmenu : "mcPopupProjectDictionaryMenu", |
---|
448 | }, |
---|
449 | {fid_mode : fid_mode} |
---|
450 | ); |
---|
451 | this.DataSource.setProperty(newRes,"editmode",fid_mode.toString()); |
---|
452 | var result = this.mcController.property(newRes); |
---|
453 | if(result){ |
---|
454 | bitsMarkingCollection.reOrder(curRes); |
---|
455 | }else{ |
---|
456 | this.mcTreeHandler.remove(undefined,undefined,true); |
---|
457 | } |
---|
458 | var newIdx = this.mcTreeHandler.TREE.builderView.getIndexOfResource(newRes); |
---|
459 | this.mcController.rebuildLocal(); |
---|
460 | var selectIdx = newIdx; |
---|
461 | if(selectIdx<0) selectIdx = curIdx; |
---|
462 | this.mcTreeHandler.TREE.currentIndex = selectIdx; |
---|
463 | if(!this.mcTreeHandler.TREE.view.selection.isSelected(this.mcTreeHandler.TREE.currentIndex)) this.mcTreeHandler.TREE.view.selection.select(this.mcTreeHandler.TREE.currentIndex); |
---|
464 | this.mcTreeHandler.TREE.focus(); |
---|
465 | this.mcTreeHandler.TREE.treeBoxObject.ensureRowIsVisible(selectIdx); |
---|
466 | this.mcPropertyView.dispProperty(this.mcTreeHandler.object); |
---|
467 | }, |
---|
468 | |
---|
469 | ///////////////////////////////////////////////////////////////////// |
---|
470 | readDocumentFromFolder : function(aEvent){ |
---|
471 | try{ |
---|
472 | var mcTreeHandler = null; |
---|
473 | if(this.mcTreeHandler) mcTreeHandler = this.mcTreeHandler; |
---|
474 | if(!mcTreeHandler) return; |
---|
475 | var aRes = mcTreeHandler.resource; |
---|
476 | if(!aRes) return; |
---|
477 | this.readDocuments(this.getReadFolder()); |
---|
478 | }catch(e){ |
---|
479 | this._dump("bitsTreeProjectService.readDocumentFromFolder():"+e); |
---|
480 | if(this._progressWindow && !this._progressWindow.closed) this._progressWindow.close(); |
---|
481 | this._progressWindow = null; |
---|
482 | } |
---|
483 | }, |
---|
484 | |
---|
485 | ///////////////////////////////////////////////////////////////////// |
---|
486 | readDocumentFromFile : function(aEvent){ |
---|
487 | try{ |
---|
488 | var mcTreeHandler = null; |
---|
489 | if(this.mcTreeHandler) mcTreeHandler = this.mcTreeHandler; |
---|
490 | if(!mcTreeHandler) return; |
---|
491 | var aRes = mcTreeHandler.resource; |
---|
492 | if(!aRes) return; |
---|
493 | this.readDocuments(this.getReadFiles()); |
---|
494 | }catch(e){ |
---|
495 | this._dump("bitsTreeProjectService.readDocumentFromFile():"+e); |
---|
496 | if(this._progressWindow && !this._progressWindow.closed) this._progressWindow.close(); |
---|
497 | this._progressWindow = null; |
---|
498 | } |
---|
499 | }, |
---|
500 | |
---|
501 | ///////////////////////////////////////////////////////////////////// |
---|
502 | readDocuments : function(urls){ |
---|
503 | try{ |
---|
504 | if(!urls || urls.length==0) return; |
---|
505 | var curIdx = this.mcTreeHandler.TREE.currentIndex; |
---|
506 | var aRes = this.mcTreeHandler.TREE.builderView.getResourceAtIndex(curIdx); |
---|
507 | if(!this.mcTreeHandler.TREE.view.isContainerOpen(curIdx)) this.mcTreeHandler.TREE.view.toggleOpenState(curIdx); |
---|
508 | var fid = this.DataSource.getProperty(aRes, "id"); |
---|
509 | var fid_style = this.DataSource.getProperty(aRes, "style"); |
---|
510 | var dbtype = this.DataSource.getProperty(aRes, "dbtype"); |
---|
511 | var pfid = this.DataSource.getProperty(aRes, "pfid"); |
---|
512 | var param = { |
---|
513 | fid : fid, |
---|
514 | fid_style : fid_style, |
---|
515 | dbtype : dbtype, |
---|
516 | resource : aRes, |
---|
517 | pfid : pfid |
---|
518 | }; |
---|
519 | if(!this._progressWindow){ |
---|
520 | var x = screen.width; |
---|
521 | var y = screen.height; |
---|
522 | this._progressWindow = window.openDialog( |
---|
523 | "chrome://markingcollection/content/progress.xul", |
---|
524 | "myProgress", "chrome,centerscreen,alwaysRaised,dependent=yes,left="+x+",top="+y, |
---|
525 | {status: this.STRING.getString("MSG_READING_DOCUMENTS") + "... [ "+ urls.length + " ]"}); |
---|
526 | } |
---|
527 | if(this._progressWindow && !this._progressWindow.closed) this._progressWindow.focus(); |
---|
528 | var self = this; |
---|
529 | setTimeout(function(){ self._readDocuments(param,urls); },100); |
---|
530 | bitsAutocacheService._refreshFlag = false; |
---|
531 | if(this.bitsItemView && this.bitsItemView.isChecked) this.bitsItemView._refreshFlag = false; |
---|
532 | bitsArticleNavigation.stopObserver(); |
---|
533 | this.setWaitCursor(true); |
---|
534 | }catch(e){ |
---|
535 | this._dump("bitsTreeProjectService.readDocuments():"+e); |
---|
536 | if(this._progressWindow && !this._progressWindow.closed) this._progressWindow.close(); |
---|
537 | this._progressWindow = null; |
---|
538 | } |
---|
539 | }, |
---|
540 | |
---|
541 | ///////////////////////////////////////////////////////////////////// |
---|
542 | _readDocuments : function(aParam,aUrls){ |
---|
543 | try{ |
---|
544 | var i; |
---|
545 | for(i=0;i<10 && aUrls.length>0;i++){ |
---|
546 | var url = aUrls.shift(); |
---|
547 | this._addURLText(aParam,url); |
---|
548 | } |
---|
549 | if(aUrls.length>0){ |
---|
550 | var self = this; |
---|
551 | setTimeout(function(){ self._readDocuments(aParam,aUrls); },100); |
---|
552 | if(this._progressWindow && !this._progressWindow.closed && this._progressWindow.setStatus) this._progressWindow.setStatus(this.STRING.getString("MSG_READING_DOCUMENTS") + "... [ "+ aUrls.length + " ]"); |
---|
553 | }else{ |
---|
554 | if(this._progressWindow && !this._progressWindow.closed) this._progressWindow.close(); |
---|
555 | this._progressWindow = null; |
---|
556 | bitsAutocacheService._refreshFlag = true; |
---|
557 | bitsAutocacheService.refresh(); |
---|
558 | if(this.bitsItemView && this.bitsItemView.isChecked){ |
---|
559 | this.bitsItemView._refreshFlag = true; |
---|
560 | this.bitsItemView.refresh(); |
---|
561 | }else if(this.mcTreeViewModeService){ |
---|
562 | this.DataSource.flush(); |
---|
563 | } |
---|
564 | bitsArticleNavigation.startObserver(); |
---|
565 | this.setWaitCursor(false); |
---|
566 | } |
---|
567 | }catch(e){ |
---|
568 | this._dump("bitsTreeProjectService._readDocuments():"+e); |
---|
569 | } |
---|
570 | }, |
---|
571 | |
---|
572 | ///////////////////////////////////////////////////////////////////// |
---|
573 | _addURLText : function(aParam, aURLString){ |
---|
574 | try{ |
---|
575 | var rtn = false; |
---|
576 | var url = aURLString; |
---|
577 | var doc_url = url; |
---|
578 | var con_url = url; |
---|
579 | var parentID = aParam.fid; |
---|
580 | var style = aParam.fid_style; |
---|
581 | var dbtype = aParam.dbtype; |
---|
582 | var resource = aParam.resource; |
---|
583 | var pfid_order = this.Database.getMaxOrderFormPID(parentID); |
---|
584 | var rObj = this.Database.newObject(undefined,dbtype); |
---|
585 | if(rObj){ |
---|
586 | rObj.pfid = parentID; |
---|
587 | rObj.doc_url = bitsAutocacheService.convertCacheURLToOriginalURL(doc_url); |
---|
588 | rObj.doc_title = rObj.doc_url; |
---|
589 | rObj.con_url = bitsAutocacheService.convertCacheURLToOriginalURL(con_url); |
---|
590 | rObj.oid_title = decodeURIComponent(this.Common.getFileName(url)); |
---|
591 | if(rObj.oid_title == "") rObj.oid_title = decodeURIComponent(url); |
---|
592 | rObj.doc_title = rObj.oid_title; |
---|
593 | rObj.oid_mode = "0"; |
---|
594 | try{ rObj.oid_type = this.Common.MIME.getTypeFromURI(this.Common.convertURLToObject(url)); }catch(e){ rObj.oid_type=null; } |
---|
595 | if(!rObj.oid_type) rObj.oid_type = "url"; |
---|
596 | rObj.oid_txt = bitsAutocacheService.convertCacheURLToOriginalURL(url); |
---|
597 | rObj.oid_date = bitsAutocacheService.getURLTimeStampFormatDate(doc_url); |
---|
598 | rObj.pfid_order = ++pfid_order; |
---|
599 | rtn = this.Database.addObject(rObj,dbtype); |
---|
600 | if(rtn){ |
---|
601 | if(this.bitsItemView && this.bitsItemView.isChecked){ |
---|
602 | }else if(this.mcTreeViewModeService){ |
---|
603 | var newDCitem = this.Common.newItem(); |
---|
604 | newDCitem.id = rObj.oid; |
---|
605 | newDCitem.about = this.DataSource.getAbout(rObj.oid,rObj.pfid,dbtype); |
---|
606 | newDCitem.pfid = rObj.pfid; |
---|
607 | newDCitem.type = "item"; |
---|
608 | newDCitem.title = rObj.oid_title; |
---|
609 | newDCitem.editmode = rObj.oid_mode; |
---|
610 | newDCitem.uri = rObj.doc_url; |
---|
611 | newDCitem.date = rObj.oid_date; |
---|
612 | newDCitem.dbtype = dbtype; |
---|
613 | if(url.indexOf("file://") == 0){ |
---|
614 | newDCitem.title = rObj.oid_title; |
---|
615 | }else{ |
---|
616 | newDCitem.icon = this.Database.getFavicon(rObj.doc_url,dbtype); |
---|
617 | } |
---|
618 | var aParName = this.DataSource.getID2About(parentID,aParam.pfid,dbtype); |
---|
619 | var newRes = this.DataSource.addItem(newDCitem, aParName, -1, dbtype); |
---|
620 | } |
---|
621 | } |
---|
622 | rObj = undefined; |
---|
623 | } |
---|
624 | }catch(ex){ |
---|
625 | bitsMarkingCollection._dump("bitsMarkingCollection.addURLText():"+ex); |
---|
626 | } |
---|
627 | return rtn; |
---|
628 | }, |
---|
629 | |
---|
630 | ///////////////////////////////////////////////////////////////////// |
---|
631 | _getDictionaryDir : function(aDBtype){ |
---|
632 | if(aDBtype == undefined) return undefined; |
---|
633 | var dir = this.Common.getExtensionDir().clone(); |
---|
634 | dir.append("dictionary"); |
---|
635 | dir.append(aDBtype); |
---|
636 | return dir; |
---|
637 | }, |
---|
638 | |
---|
639 | ///////////////////////////////////////////////////////////////////// |
---|
640 | _getDictionaryFile : function(aID,aDBtype){ |
---|
641 | bitsMarkingCollection._dump("CALLED _getDictionaryFile():"); |
---|
642 | if(aID == undefined || aDBtype == undefined) return undefined; |
---|
643 | var file = this._getDictionaryDir(aDBtype); |
---|
644 | if(!file) return undefined; |
---|
645 | file.append(aID+".xml"); |
---|
646 | return file; |
---|
647 | }, |
---|
648 | |
---|
649 | ///////////////////////////////////////////////////////////////////// |
---|
650 | _createDictionaryXML : function(){ |
---|
651 | var parser = new DOMParser(); |
---|
652 | var xmldoc = parser.parseFromString("<DICTIONARY/>", "text/xml"); |
---|
653 | parser = undefined; |
---|
654 | if(xmldoc && xmldoc.documentElement.nodeName == "parsererror") xmldoc = undefined; |
---|
655 | return xmldoc; |
---|
656 | }, |
---|
657 | |
---|
658 | ///////////////////////////////////////////////////////////////////// |
---|
659 | _getDictionaryXML : function(aID,aDBtype){ |
---|
660 | if(aID == undefined || aDBtype == undefined) return undefined; |
---|
661 | var file = this._getDictionaryFile(aID,aDBtype); |
---|
662 | var content = this.readFile(file); |
---|
663 | if(!content || content == "") return undefined; |
---|
664 | var parser = new DOMParser(); |
---|
665 | var xmldoc = parser.parseFromString(content, "text/xml"); |
---|
666 | parser = undefined; |
---|
667 | if(xmldoc && xmldoc.documentElement.nodeName == "parsererror") xmldoc = undefined; |
---|
668 | return xmldoc; |
---|
669 | }, |
---|
670 | |
---|
671 | ///////////////////////////////////////////////////////////////////// |
---|
672 | _putDictionaryXML : function(aID,aDBtype,aXMLDoc){ |
---|
673 | if(aID == undefined || aDBtype == undefined || aXMLDoc == undefined) return undefined; |
---|
674 | var file = this._getDictionaryFile(aID,aDBtype); |
---|
675 | var s = new XMLSerializer(); |
---|
676 | var content = s.serializeToString(aXMLDoc); |
---|
677 | s = undefined; |
---|
678 | return this.writeFile(file,content); |
---|
679 | }, |
---|
680 | |
---|
681 | ///////////////////////////////////////////////////////////////////// |
---|
682 | makeDictionary : function(aEvent){ |
---|
683 | var mcTreeHandler = null; |
---|
684 | if(this.mcTreeHandler) mcTreeHandler = this.mcTreeHandler; |
---|
685 | if(!mcTreeHandler) return undefined; |
---|
686 | var aRes = mcTreeHandler.resource; |
---|
687 | if(!aRes) return undefined; |
---|
688 | if(this._makeDictionary(aRes)){ |
---|
689 | this.Common.alert(this.STRING.getString("SUCCEEDED_DICTIONARY_UPDATE")); |
---|
690 | }else{ |
---|
691 | this.Common.alert(this.STRING.getString("ALERT_DICTIONARY_UPDATE")); |
---|
692 | } |
---|
693 | }, |
---|
694 | |
---|
695 | ///////////////////////////////////////////////////////////////////// |
---|
696 | _makeDictionary : function(aRes){ |
---|
697 | var fid = this.DataSource.getProperty(aRes, "id"); |
---|
698 | var dbtype = this.DataSource.getProperty(aRes, "dbtype"); |
---|
699 | var fid_title = this.DataSource.getProperty(aRes, "title"); |
---|
700 | var fid_style = this.DataSource.getProperty(aRes, "style"); |
---|
701 | var fid_note = ""; |
---|
702 | var folders = this.Database.getFolder({fid:fid},dbtype); |
---|
703 | if(folders){ |
---|
704 | if(folders[0].fid_property && folders[0].fid_property != ""){ |
---|
705 | try{ |
---|
706 | var parser = new DOMParser(); |
---|
707 | var xmldoc = parser.parseFromString(folders[0].fid_property, "text/xml"); |
---|
708 | parser = undefined; |
---|
709 | }catch(ex){} |
---|
710 | if(xmldoc && xmldoc.documentElement.nodeName == "parsererror") xmldoc = undefined; |
---|
711 | if(xmldoc){ |
---|
712 | var elems = xmldoc.getElementsByTagName("TAG"); |
---|
713 | if(elems && elems.length>0) fid_title = elems[0].textContent; |
---|
714 | elems = undefined; |
---|
715 | elems = xmldoc.getElementsByTagName("NOTE"); |
---|
716 | if(elems && elems.length>0) fid_note = elems[0].textContent; |
---|
717 | elems = undefined; |
---|
718 | xmldoc = undefined; |
---|
719 | } |
---|
720 | } |
---|
721 | } |
---|
722 | var xmldoc = this._getDictionaryXML(fid,dbtype); |
---|
723 | if(!xmldoc) xmldoc = this._createDictionaryXML(); |
---|
724 | if(!xmldoc) return undefined; |
---|
725 | /* TITLEãšã¬ã¡ã³ãäœæ */ |
---|
726 | var titleElem = xmldoc.createTextNode(fid_title); |
---|
727 | var elems = xmldoc.documentElement.getElementsByTagName("TITLE"); |
---|
728 | if(elems && elems.length > 0){ |
---|
729 | if(elems[0].hasChildNodes()){ |
---|
730 | elems[0].replaceChild(titleElem,elems[0].firstChild); |
---|
731 | }else{ |
---|
732 | elems[0].appendChild(titleElem); |
---|
733 | } |
---|
734 | }else{ |
---|
735 | var elem = xmldoc.createElement("TITLE"); |
---|
736 | if(elem){ |
---|
737 | elem.appendChild(titleElem); |
---|
738 | xmldoc.documentElement.appendChild(elem); |
---|
739 | } |
---|
740 | } |
---|
741 | /* NOTEãšã¬ã¡ã³ãäœæ */ |
---|
742 | var noteElem = xmldoc.createTextNode(fid_note); |
---|
743 | var elems = xmldoc.documentElement.getElementsByTagName("NOTE"); |
---|
744 | if(elems && elems.length > 0){ |
---|
745 | if(elems[0].hasChildNodes()){ |
---|
746 | elems[0].replaceChild(noteElem,elems[0].firstChild); |
---|
747 | }else{ |
---|
748 | elems[0].appendChild(noteElem); |
---|
749 | } |
---|
750 | }else{ |
---|
751 | var elem = xmldoc.createElement("NOTE"); |
---|
752 | if(elem){ |
---|
753 | elem.appendChild(noteElem); |
---|
754 | xmldoc.documentElement.appendChild(elem); |
---|
755 | } |
---|
756 | } |
---|
757 | /* STYLEãšã¬ã¡ã³ãäœæ */ |
---|
758 | var styleElem = xmldoc.createTextNode(fid_style); |
---|
759 | var elems = xmldoc.documentElement.getElementsByTagName("STYLE"); |
---|
760 | if(elems && elems.length > 0){ |
---|
761 | if(elems[0].hasChildNodes()){ |
---|
762 | elems[0].replaceChild(styleElem,elems[0].firstChild); |
---|
763 | }else{ |
---|
764 | elems[0].appendChild(styleElem); |
---|
765 | } |
---|
766 | }else{ |
---|
767 | var elem = xmldoc.createElement("STYLE"); |
---|
768 | if(elem){ |
---|
769 | elem.appendChild(styleElem); |
---|
770 | xmldoc.documentElement.appendChild(elem); |
---|
771 | } |
---|
772 | } |
---|
773 | /* TERMSãšã¬ã¡ã³ãäœæ */ |
---|
774 | var terms; |
---|
775 | var elems = xmldoc.documentElement.getElementsByTagName("TERMS"); |
---|
776 | if(elems && elems.length > 0){ |
---|
777 | terms = elems[0]; |
---|
778 | }else{ |
---|
779 | terms = xmldoc.createElement("TERMS"); |
---|
780 | if(terms) xmldoc.documentElement.appendChild(terms); |
---|
781 | } |
---|
782 | if(!terms) return undefined; |
---|
783 | var i; |
---|
784 | var termhash = {}; |
---|
785 | var elems = terms.getElementsByTagName("TERM"); |
---|
786 | for(i=0;i<elems.length;i++){ |
---|
787 | if(!elems[i].textContent) continue; |
---|
788 | termhash[elems[i].textContent.toLowerCase()] = i; |
---|
789 | } |
---|
790 | var objs = this.Database.getObject({pfid:fid},dbtype); |
---|
791 | if(objs){ |
---|
792 | for(i=0;i<objs.length;i++){ |
---|
793 | var term = objs[i].oid_title.replace(/^\s*/mg,"").replace(/\s*$/mg,""); |
---|
794 | var key = term.toLowerCase(); |
---|
795 | if(termhash[key] != undefined) continue; |
---|
796 | termhash[key] = i; |
---|
797 | var elem = xmldoc.createElement("TERM"); |
---|
798 | if(!this._caseSensitive_exp.test(term)) term = term.toLowerCase(); |
---|
799 | var termElem = xmldoc.createTextNode(term); |
---|
800 | if(!elem || !termElem) continue; |
---|
801 | elem.setAttribute("date",objs[i].oid_date); |
---|
802 | terms.appendChild(elem); |
---|
803 | elem.appendChild(termElem); |
---|
804 | } |
---|
805 | } |
---|
806 | if(this._putDictionaryXML(fid,dbtype,xmldoc)){ |
---|
807 | return xmldoc; |
---|
808 | }else{ |
---|
809 | return undefined; |
---|
810 | } |
---|
811 | }, |
---|
812 | |
---|
813 | ///////////////////////////////////////////////////////////////////// |
---|
814 | applyDictionary : function(aEvent){ |
---|
815 | var mcTreeHandler = null; |
---|
816 | if(this.mcTreeHandler) mcTreeHandler = this.mcTreeHandler; |
---|
817 | if(!mcTreeHandler) return; |
---|
818 | var aRes = mcTreeHandler.resource; |
---|
819 | if(!aRes) return; |
---|
820 | |
---|
821 | var doc = this.gBrowser.contentDocument; |
---|
822 | var doc_url = this.Common.getURLStringFromDocument(doc); |
---|
823 | if(!bitsAutocacheService.isMarking(doc_url)) return undefined; |
---|
824 | |
---|
825 | var dbtype = this.DataSource.getProperty(aRes, "dbtype"); |
---|
826 | this._oid = this.Database._oidIdentify(dbtype,bitsObjectMng.Common.getTimeStamp()); |
---|
827 | |
---|
828 | if(!this._progressWindow){ |
---|
829 | var x = screen.width; |
---|
830 | var y = screen.height; |
---|
831 | this._progressWindow = window.openDialog( |
---|
832 | "chrome://markingcollection/content/progress_determined.xul", |
---|
833 | "myProgress", "chrome,centerscreen,alwaysRaised,dependent=yes,left="+x+",top="+y, |
---|
834 | {status: "Loading Dictionary..."}); |
---|
835 | } |
---|
836 | if(this._progressWindow && !this._progressWindow.closed){ |
---|
837 | if(this._progressWindow.setStatus) this._progressWindow.setStatus("Loading Dictionary..."); |
---|
838 | this._progressWindow.focus(); |
---|
839 | } |
---|
840 | var self = this; |
---|
841 | if(this._applytimer) clearTimeout(this._applytimer); |
---|
842 | this._applytimer = setTimeout(function(){ self._applyDictionaryReadingXMLDictionary(doc,aRes); },1000); |
---|
843 | this.setWaitCursor(true); |
---|
844 | }, |
---|
845 | |
---|
846 | ///////////////////////////////////////////////////////////////////// |
---|
847 | _applyDictionaryReadingXMLDictionary : function(doc,aRes){ |
---|
848 | var xmldocs = []; |
---|
849 | var i,j; |
---|
850 | var foldResList = this.DataSource.flattenResources(aRes, 1, true); |
---|
851 | for(i=0;i<foldResList.length;i++){ |
---|
852 | var fid = this.DataSource.getProperty(foldResList[i], "id"); |
---|
853 | var style = this.DataSource.getProperty(foldResList[i], "style"); |
---|
854 | var dbtype = this.DataSource.getProperty(foldResList[i], "dbtype"); |
---|
855 | var xmldoc = this._getDictionaryXML(fid,dbtype); |
---|
856 | if(!xmldoc){ |
---|
857 | var title = this.DataSource.getProperty(foldResList[i], "title"); |
---|
858 | if(this.Common.confirm("[ "+title+" ]\n"+this.STRING.getString("CONFIRM_DICTIONARY_UPDATE"))) xmldoc = this._makeDictionary(foldResList[i]); |
---|
859 | } |
---|
860 | if(xmldoc) xmldocs.push({doc:xmldoc,fid:fid,dbtype:dbtype,style:style}); |
---|
861 | } |
---|
862 | var selection = doc.defaultView.getSelection(); |
---|
863 | if(!selection) return; |
---|
864 | selection.removeAllRanges(); |
---|
865 | if(this._progressWindow && !this._progressWindow.closed){ |
---|
866 | if(this._progressWindow.setStatus) this._progressWindow.setStatus("Sort Dictionary..."); |
---|
867 | this._progressWindow.focus(); |
---|
868 | } |
---|
869 | var self = this; |
---|
870 | this._applytimer = setTimeout(function(){ self._applyDictionaryLoadingDictionary(doc,xmldocs); },1000); |
---|
871 | }, |
---|
872 | |
---|
873 | ///////////////////////////////////////////////////////////////////// |
---|
874 | _applyDictionaryLoadingDictionary : function(doc,xmldocs){ |
---|
875 | var rangeCount = 0; |
---|
876 | var termhash = {}; |
---|
877 | var termarray = []; |
---|
878 | var j; |
---|
879 | while(xmldocs && xmldocs.length>0){ |
---|
880 | var xmldocobj = xmldocs.shift(); |
---|
881 | var xmldoc = xmldocobj.doc; |
---|
882 | /* TERMSãšã¬ã¡ã³ãäœæ */ |
---|
883 | var terms = xmldoc.documentElement.getElementsByTagName("TERMS")[0]; |
---|
884 | if(!terms){ |
---|
885 | terms = xmldoc.createElement("TERMS"); |
---|
886 | if(terms) xmldoc.documentElement.appendChild(terms); |
---|
887 | } |
---|
888 | if(!terms) continue; |
---|
889 | var elems = terms.getElementsByTagName("TERM"); |
---|
890 | if(elems.length == 0) continue; |
---|
891 | for(j=0;j<elems.length;j++){ |
---|
892 | if(!elems[j].textContent) continue; |
---|
893 | if(elems[j].hasAttribute("delete")) continue; |
---|
894 | if(elems[j].hasAttribute("exception")) continue; |
---|
895 | var key = elems[j].textContent.toLowerCase(); |
---|
896 | if(termhash[key] != undefined) continue; |
---|
897 | termhash[key] = j; |
---|
898 | termarray.push({ |
---|
899 | term : elems[j].textContent, |
---|
900 | obj : xmldocobj, |
---|
901 | }); |
---|
902 | } |
---|
903 | } |
---|
904 | termhash = undefined; |
---|
905 | if(termarray.length>0){ |
---|
906 | termarray.sort( |
---|
907 | function(a,b){ |
---|
908 | if(a.term.length>b.term.length) return -1; |
---|
909 | if(a.term.length<b.term.length) return 1; |
---|
910 | return 0; |
---|
911 | } |
---|
912 | ); |
---|
913 | if(this._progressWindow && !this._progressWindow.closed){ |
---|
914 | if(this._progressWindow.setProgress) this._progressWindow.setProgress(0); |
---|
915 | if(this._progressWindow.setStatus) this._progressWindow.setStatus(this.STRING.getString("MSG_DOCUMENTATION_TO_MATCH_THE_DICTIONARY") + "... [ 0% ], Remaining term:[ "+ termarray.length + " ], Meet term:[ "+ rangeCount + " ]"); |
---|
916 | if(this._progressWindow.setCallback) this._progressWindow.setCallback(this._applyDictionaryCancel); |
---|
917 | this._progressWindow.focus(); |
---|
918 | } |
---|
919 | var self = this; |
---|
920 | this._applytimer = setTimeout(function(){ self._applyDictionary(doc,termarray,termarray.length); },100); |
---|
921 | bitsAutocacheService._refreshFlag = false; |
---|
922 | if(this.bitsItemView && this.bitsItemView.isChecked) this.bitsItemView._refreshFlag = false; |
---|
923 | bitsArticleNavigation.stopObserver(); |
---|
924 | }else{ |
---|
925 | if(this._progressWindow && !this._progressWindow.closed) this._progressWindow.close(); |
---|
926 | this._progressWindow = null; |
---|
927 | this.setWaitCursor(false); |
---|
928 | } |
---|
929 | }, |
---|
930 | |
---|
931 | ///////////////////////////////////////////////////////////////////// |
---|
932 | _applyDictionaryCancel : function(aEvent){ |
---|
933 | var self = bitsTreeProjectService; |
---|
934 | if(self._applytimer) clearTimeout(self._applytimer); |
---|
935 | self._applytimer = null; |
---|
936 | if(self._progressWindow && !self._progressWindow.closed) self._progressWindow.close(); |
---|
937 | self._progressWindow = null; |
---|
938 | bitsAutocacheService._refreshFlag = true; |
---|
939 | bitsAutocacheService.refresh(); |
---|
940 | if(self.bitsItemView && self.bitsItemView.isChecked){ |
---|
941 | self.bitsItemView._refreshFlag = true; |
---|
942 | self.bitsItemView.refresh(); |
---|
943 | }else if(self.mcTreeViewModeService){ |
---|
944 | self.mcTreeViewModeService.rebuild(); |
---|
945 | } |
---|
946 | bitsArticleNavigation.startObserver(); |
---|
947 | self.setWaitCursor(false); |
---|
948 | }, |
---|
949 | |
---|
950 | ///////////////////////////////////////////////////////////////////// |
---|
951 | _applyDictionary : function(aDoc,aTermArray,aMaxTerm,aRangeCount){ |
---|
952 | var self = this; |
---|
953 | if(aRangeCount == undefined) aRangeCount = 0; |
---|
954 | if(aTermArray.length == 0 || !this._applytimer){ |
---|
955 | if(this._progressWindow && !this._progressWindow.closed) this._progressWindow.close(); |
---|
956 | this._progressWindow = null; |
---|
957 | setTimeout(function(){ |
---|
958 | self.Common.alert("Term has [ "+ aRangeCount + " ] matches."); |
---|
959 | if(self.bitsItemView && self.bitsItemView.isChecked){ |
---|
960 | self.bitsItemView._refreshFlag = true; |
---|
961 | self.bitsItemView.refresh(); |
---|
962 | }else if(self.mcTreeViewModeService){ |
---|
963 | bitsMarkingCollection._dump("bitsTreeProjectService._applyDictionary(1)"); |
---|
964 | self.mcTreeViewModeService.rebuild(); |
---|
965 | bitsMarkingCollection._dump("bitsTreeProjectService._applyDictionary(2)"); |
---|
966 | } |
---|
967 | },100); |
---|
968 | bitsAutocacheService._refreshFlag = true; |
---|
969 | bitsAutocacheService.refresh(); |
---|
970 | var url = this.Common.getURLStringFromDocument(aDoc); |
---|
971 | setTimeout(function(){ |
---|
972 | var rtn= bitsAutocacheService.selectRowFromURL(url); |
---|
973 | if(!rtn) setTimeout(function(){ bitsAutocacheService.selectRowFromURL(url); },2000); |
---|
974 | },500); |
---|
975 | bitsArticleNavigation.startObserver(); |
---|
976 | this.setWaitCursor(false); |
---|
977 | return; |
---|
978 | } |
---|
979 | var maxcnt = aMaxTerm>=20 ? parseInt(aMaxTerm/20) : aMaxTerm; |
---|
980 | if(maxcnt>100) maxcnt = 100; |
---|
981 | var doc = aDoc; |
---|
982 | var findRange = this._getFindRange(); |
---|
983 | var j; |
---|
984 | for(j=0;j<maxcnt && aTermArray.length>0;j++){ |
---|
985 | var termobj = aTermArray.shift(); |
---|
986 | var findtext = termobj.term; |
---|
987 | findRange.caseSensitive = this._caseSensitive_exp.test(findtext); |
---|
988 | var docRange = doc.createRange(); |
---|
989 | docRange.selectNode(doc.body); |
---|
990 | var startRange = docRange.cloneRange(); |
---|
991 | var stopRange = docRange.cloneRange(); |
---|
992 | startRange.collapse(true); |
---|
993 | stopRange.collapse(false); |
---|
994 | var rangeCount = 0; |
---|
995 | var result; |
---|
996 | while((result = findRange.Find(findtext, docRange, startRange, stopRange))){ |
---|
997 | if(result.endContainer != null && |
---|
998 | result.startContainer != null && |
---|
999 | result.endContainer.nodeType == Node.TEXT_NODE && |
---|
1000 | result.startContainer.nodeType == Node.TEXT_NODE && |
---|
1001 | !this._isNodeInputNodeOrChildOf(result.startContainer) && |
---|
1002 | !this._isNodeInputNodeOrChildOf(result.endContainer)) { |
---|
1003 | var startChar = null; |
---|
1004 | if(result.startOffset > 0) startChar = result.startContainer.nodeValue.charAt(result.startOffset - 1); |
---|
1005 | var endChar = result.endContainer.nodeValue.charAt(result.endOffset); |
---|
1006 | if(!this._isWordCharacter(startChar) && !this._isWordCharacter(endChar)){ |
---|
1007 | if(!((result.startContainer.parentNode && this._marker_exp.test(result.startContainer.parentNode.id)) || (result.endContainer.parentNode && this._marker_exp.test(result.endContainer.parentNode.id)))){ |
---|
1008 | var rtn = this._addSelectedText( |
---|
1009 | aDoc, |
---|
1010 | { |
---|
1011 | fid : termobj.obj.fid, |
---|
1012 | fid_style : termobj.obj.style, |
---|
1013 | dbtype : termobj.obj.dbtype |
---|
1014 | },result); |
---|
1015 | if(rtn && rtn[0].id){ |
---|
1016 | var elem = aDoc.getElementById(rtn[0].id); |
---|
1017 | if(elem){ |
---|
1018 | result.selectNode(elem); |
---|
1019 | rangeCount++; |
---|
1020 | } |
---|
1021 | } |
---|
1022 | }else{ |
---|
1023 | } |
---|
1024 | }else{ |
---|
1025 | } |
---|
1026 | } |
---|
1027 | startRange = result; |
---|
1028 | startRange.collapse(false); |
---|
1029 | } |
---|
1030 | if(rangeCount>0){ |
---|
1031 | aRangeCount += rangeCount; |
---|
1032 | break; |
---|
1033 | } |
---|
1034 | } |
---|
1035 | this._applytimer = setTimeout(function(){ self._applyDictionary(aDoc,aTermArray,aMaxTerm,aRangeCount); },100); |
---|
1036 | if(this._progressWindow && !this._progressWindow.closed){ |
---|
1037 | var p = (aMaxTerm-aTermArray.length)/aMaxTerm; |
---|
1038 | if(this._progressWindow.setProgress) this._progressWindow.setProgress( parseInt(p*100) ); |
---|
1039 | if(this._progressWindow.setStatus) this._progressWindow.setStatus(this.STRING.getString("MSG_DOCUMENTATION_TO_MATCH_THE_DICTIONARY") + "... [ "+ parseInt(p*100) + "% ], Remaining term:[ "+ aTermArray.length + " ], Meet term:[ "+ aRangeCount + " ]"); |
---|
1040 | } |
---|
1041 | }, |
---|
1042 | |
---|
1043 | ///////////////////////////////////////////////////////////////////// |
---|
1044 | _addSelectedText : function(aDoc, aParName, aRange){ |
---|
1045 | try{ |
---|
1046 | var parentID = aParName.fid; |
---|
1047 | var style = aParName.fid_style; |
---|
1048 | var dbtype = aParName.dbtype; |
---|
1049 | var pfid_order = this.Database.getMaxOrderFormPID(parentID); |
---|
1050 | var doc_url = this.Common.getURLStringFromDocument(aDoc); |
---|
1051 | bitsAutocacheService.createCache(doc_url); |
---|
1052 | var rtnContent = null; |
---|
1053 | var parser = new DOMParser(); |
---|
1054 | var rtnNewObj = []; |
---|
1055 | var r; |
---|
1056 | var range = aRange.cloneRange(); |
---|
1057 | if(range.startContainer.nodeType != range.startContainer.TEXT_NODE || range.endContainer.nodeType != range.endContainer.TEXT_NODE){ |
---|
1058 | var docRange = range.cloneRange(); |
---|
1059 | var startRange = range.cloneRange(); |
---|
1060 | var stopRange = range.cloneRange(); |
---|
1061 | startRange.collapse(true) |
---|
1062 | stopRange.collapse(false) |
---|
1063 | var xContext = range.toString().replace(/^\s*/g,"").replace(/\s*$/g,""); |
---|
1064 | var findRange = bitsMarker._getFindRange(); |
---|
1065 | var result = findRange.Find(xContext, docRange, startRange, stopRange); |
---|
1066 | if(result) range = result.cloneRange(); |
---|
1067 | } |
---|
1068 | var context = range.toString(); |
---|
1069 | var startContainer = range.startContainer; |
---|
1070 | var startOffset = range.startOffset; |
---|
1071 | var endContainer = range.endContainer; |
---|
1072 | var endOffset = range.endOffset; |
---|
1073 | var stXPath = this.XPath.getOffsetFromParentNode(startContainer,startOffset); |
---|
1074 | var enXPath = this.XPath.getOffsetFromParentNode(endContainer,endOffset); |
---|
1075 | try{ |
---|
1076 | var hyperAnchor = bitsHyperAnchor._getAnchorURL({node:startContainer,offset:startOffset,style:style,prefix:"b",contents:range.toString()},{node:endContainer,offset:endOffset,prefix:"e",contents:range.toString()}); |
---|
1077 | }catch(ex3){ |
---|
1078 | try{ |
---|
1079 | var hyperAnchor = bitsHyperAnchorDummy._getAnchorURL({node:startContainer,offset:startOffset,style:style,prefix:"b",contents:range.toString()},{node:endContainer,offset:endOffset,prefix:"e",contents:range.toString()}); |
---|
1080 | }catch(ex3){ hyperAnchor = null; } |
---|
1081 | } |
---|
1082 | if(hyperAnchor) hyperAnchor = bitsAutocacheService.convertCacheURLToOriginalURL(hyperAnchor); |
---|
1083 | var con_url = this.Common.getURLStringFromDocument(stXPath.node.ownerDocument); |
---|
1084 | var rObj = {}; |
---|
1085 | rObj.pfid = parentID; |
---|
1086 | rObj.doc_url = bitsAutocacheService.convertCacheURLToOriginalURL(doc_url); |
---|
1087 | rObj.con_url = bitsAutocacheService.convertCacheURLToOriginalURL(con_url); |
---|
1088 | rObj.doc_title = this.gBrowser.contentDocument.title?this.gBrowser.contentDocument.title:rObj.doc_url; |
---|
1089 | rObj.bgn_dom = stXPath.xpath + "("+stXPath.offset+")" + "("+stXPath.type+")"; |
---|
1090 | rObj.end_dom = enXPath.xpath + "("+enXPath.offset+")" + "("+enXPath.type+")"; |
---|
1091 | rObj.oid_title = this.Common.exceptCode(context.replace(/[\r\n\t]+/mg," ").replace(/\s{2,}/mg," ")); |
---|
1092 | rObj.oid_txt = this.Common.exceptCode(context.replace(/\s+$/mg,"").replace(/^\s+/mg,"")); |
---|
1093 | rObj.oid_date = bitsAutocacheService.getURLTimeStampFormatDate(doc_url); |
---|
1094 | rObj.oid_mode = "0"; |
---|
1095 | rObj.con_doc = stXPath.node.ownerDocument; |
---|
1096 | var frame_name; |
---|
1097 | if(doc_url != con_url){ |
---|
1098 | var win = this.gBrowser.contentWindow; |
---|
1099 | if(win.frames != null){ |
---|
1100 | var i; |
---|
1101 | for(i=0;i<win.frames.length;i++){ |
---|
1102 | if(this.Common.getURLStringFromDocument(win.frames[i].document) != con_url) continue; |
---|
1103 | frame_name = win.frames[i].name; |
---|
1104 | break; |
---|
1105 | } |
---|
1106 | } |
---|
1107 | } |
---|
1108 | rObj.oid_type = "text"; |
---|
1109 | if(hyperAnchor || frame_name){ |
---|
1110 | var xmldoc = parser.parseFromString("<PROPERTY/>","text/xml"); |
---|
1111 | if(xmldoc && xmldoc.documentElement.nodeName == "parsererror") xmldoc = undefined; |
---|
1112 | if(xmldoc){ |
---|
1113 | if(xmldoc.documentElement){ |
---|
1114 | if(frame_name){ |
---|
1115 | var xmlnode = xmldoc.createElement("FRAME_NAME"); |
---|
1116 | if(xmlnode){ |
---|
1117 | xmlnode.appendChild(xmldoc.createTextNode(frame_name)); |
---|
1118 | xmldoc.documentElement.appendChild(xmlnode); |
---|
1119 | } |
---|
1120 | } |
---|
1121 | if(hyperAnchor){ |
---|
1122 | var xmlnode = xmldoc.createElement("HYPER_ANCHOR"); |
---|
1123 | if(xmlnode){ |
---|
1124 | xmlnode.appendChild(xmldoc.createTextNode(hyperAnchor)); |
---|
1125 | xmldoc.documentElement.appendChild(xmlnode); |
---|
1126 | } |
---|
1127 | } |
---|
1128 | } |
---|
1129 | var s = new XMLSerializer(); |
---|
1130 | rObj.oid_property = s.serializeToString(xmldoc); |
---|
1131 | s = undefined; |
---|
1132 | } |
---|
1133 | } |
---|
1134 | rtnNewObj.unshift(rObj); |
---|
1135 | parser = undefined; |
---|
1136 | for(r=0;r<rtnNewObj.length;r++){ |
---|
1137 | var rObj = this.Database.newObject(this._oid); |
---|
1138 | for(var key in rtnNewObj[r]){ |
---|
1139 | if(key == "oid") continue; |
---|
1140 | if(key == "con_doc") continue; |
---|
1141 | rObj[key] = rtnNewObj[r][key]; |
---|
1142 | } |
---|
1143 | rObj.pfid_order = ++pfid_order; |
---|
1144 | this._oid = parseInt(rObj.oid)-1; |
---|
1145 | var rtn = this.Database.addObject(rObj,dbtype); |
---|
1146 | if(!rtn) rObj = undefined; |
---|
1147 | if(!rObj) continue; |
---|
1148 | try{ |
---|
1149 | rtnContent = bitsMarker.xPathMarker( |
---|
1150 | rtnNewObj[r].con_doc, |
---|
1151 | { |
---|
1152 | start : rObj.bgn_dom, |
---|
1153 | end : rObj.end_dom, |
---|
1154 | context : rObj.oid_txt, |
---|
1155 | con_url : this.Common.getURLStringFromDocument(rtnNewObj[r].con_doc) |
---|
1156 | }, |
---|
1157 | { |
---|
1158 | id : rObj.oid, |
---|
1159 | dbtype : dbtype, |
---|
1160 | pfid : rObj.pfid, |
---|
1161 | style : style |
---|
1162 | } |
---|
1163 | ); |
---|
1164 | if(!rtnContent){ |
---|
1165 | var rtn = this.Database.removeObject(rObj,dbtype); |
---|
1166 | } |
---|
1167 | }catch(ex2){ |
---|
1168 | bitsMarkingCollection._dump("bitsTreeProjectService._addSelectedText():"+ex2); |
---|
1169 | rtnContent = null; |
---|
1170 | } |
---|
1171 | } |
---|
1172 | }catch(e){ |
---|
1173 | bitsMarkingCollection._dump("bitsTreeProjectService._addSelectedText():"+e); |
---|
1174 | rtnContent = null; |
---|
1175 | } |
---|
1176 | return rtnContent; |
---|
1177 | }, |
---|
1178 | |
---|
1179 | ///////////////////////////////////////////////////////////////////// |
---|
1180 | _getFindRange : function(){ |
---|
1181 | var findRange = Components.classes["@mozilla.org/embedcomp/rangefind;1"].createInstance(); |
---|
1182 | if(!findRange || !(findRange instanceof Components.interfaces.nsIFind)) return undefined; |
---|
1183 | findRange.caseSensitive = false; |
---|
1184 | findRange.findBackwards = false; |
---|
1185 | return findRange; |
---|
1186 | }, |
---|
1187 | |
---|
1188 | ///////////////////////////////////////////////////////////////////// |
---|
1189 | _isWordCharacter : function(ch){ |
---|
1190 | if(ch == null || typeof ch != "string" || ch.length != 1) return false; |
---|
1191 | var code = ch.charCodeAt(0); |
---|
1192 | return code >= 48 && code <= 57 || code >= 65 && code <= 90 || code >= 97 && code <= 122 || code >= 138 && code <= 142 || code >= 154 && code <= 159 || code >= 192 && code <= 255; |
---|
1193 | }, |
---|
1194 | |
---|
1195 | ///////////////////////////////////////////////////////////////////// |
---|
1196 | _isNodeInputNodeOrChildOf : function(node){ |
---|
1197 | if(node.nodeName.toUpperCase() == "INPUT") return true; |
---|
1198 | if(node.parentNode != null) return this._isNodeInputNodeOrChildOf(node.parentNode); |
---|
1199 | return false; |
---|
1200 | }, |
---|
1201 | |
---|
1202 | ///////////////////////////////////////////////////////////////////// |
---|
1203 | readDictionary : function(aEvent){ |
---|
1204 | try{ |
---|
1205 | var mcTreeHandler = null; |
---|
1206 | if(this.mcTreeHandler) mcTreeHandler = this.mcTreeHandler; |
---|
1207 | if(!mcTreeHandler) return; |
---|
1208 | var aRes = mcTreeHandler.resource; |
---|
1209 | if(!aRes) return; |
---|
1210 | var file = this.getReadFile(); |
---|
1211 | if(file){ |
---|
1212 | var text_content = null; |
---|
1213 | var r_xmldoc = null; |
---|
1214 | try{ var mimetype = this.Common.MIME.getTypeFromFile(file); }catch(e){ mimetype=null; } |
---|
1215 | if(mimetype == "text/plain"){ |
---|
1216 | text_content = this.readFile(file); |
---|
1217 | }else if(mimetype == "text/xml"){ |
---|
1218 | text_content = this.readFile(file); |
---|
1219 | var parser = new DOMParser(); |
---|
1220 | r_xmldoc = parser.parseFromString(text_content, "text/xml"); |
---|
1221 | parser = undefined; |
---|
1222 | if(r_xmldoc && r_xmldoc.documentElement.nodeName == "parsererror") r_xmldoc = undefined; |
---|
1223 | if(!r_xmldoc){ |
---|
1224 | this.Common.alert("Read Error!!["+file.path+"]"); |
---|
1225 | return; |
---|
1226 | } |
---|
1227 | }else{ |
---|
1228 | this.Common.alert("Unknown MIME Type!"); |
---|
1229 | return; |
---|
1230 | } |
---|
1231 | var fid = this.DataSource.getProperty(aRes, "id"); |
---|
1232 | var fid_style = this.DataSource.getProperty(aRes, "style"); |
---|
1233 | var dbtype = this.DataSource.getProperty(aRes, "dbtype"); |
---|
1234 | var xmldoc = this._getDictionaryXML(fid,dbtype); |
---|
1235 | if(!xmldoc) xmldoc = this._createDictionaryXML(); |
---|
1236 | if(!xmldoc) return; |
---|
1237 | var terms = xmldoc.documentElement.getElementsByTagName("TERMS")[0]; |
---|
1238 | if(!terms){ |
---|
1239 | terms = xmldoc.createElement("TERMS"); |
---|
1240 | if(terms) xmldoc.documentElement.appendChild(terms); |
---|
1241 | } |
---|
1242 | var elems = terms.getElementsByTagName("TERM"); |
---|
1243 | if(r_xmldoc){ |
---|
1244 | }else if(text_content){ |
---|
1245 | var dd = new Date; |
---|
1246 | dd.setTime(file.lastModifiedTime); |
---|
1247 | var y = dd.getFullYear(); |
---|
1248 | var m = dd.getMonth() + 1; if(m < 10) m = "0" + m; |
---|
1249 | var d = dd.getDate(); if(d < 10) d = "0" + d; |
---|
1250 | var h = dd.getHours(); if(h < 10) h = "0" + h; |
---|
1251 | var i = dd.getMinutes(); if(i < 10) i = "0" + i; |
---|
1252 | var s = dd.getSeconds(); if(s < 10) s = "0" + s; |
---|
1253 | var date = m.toString() + "/" + d.toString() + "/" + y.toString() + " " + h.toString() + ":" + i.toString() + ":" + s.toString(); |
---|
1254 | var text_arr = text_content.replace(/\x0D\x0A|\x0D|\x0A/g,"\n").split("\n"); |
---|
1255 | if(!this._progressWindow){ |
---|
1256 | var x = screen.width; |
---|
1257 | var y = screen.height; |
---|
1258 | this._progressWindow = window.openDialog( |
---|
1259 | "chrome://markingcollection/content/progress_determined.xul", |
---|
1260 | "myProgress", "chrome,centerscreen,alwaysRaised,dependent=yes,left="+x+",top="+y, |
---|
1261 | { |
---|
1262 | status : this.STRING.getString("MSG_READING_DICTIONARY") + "...", |
---|
1263 | progress : 0, |
---|
1264 | callback : function(aEvent){ self._readDictionaryCancel(aRes,xmldoc);} |
---|
1265 | }); |
---|
1266 | } |
---|
1267 | var self = this; |
---|
1268 | if(this._progressWindow && !this._progressWindow.closed) this._progressWindow.focus(); |
---|
1269 | if(this._applytimer) clearTimeout(this._applytimer); |
---|
1270 | this._applytimer = setTimeout(function(){ self._readDictionaryLoadXMLDictionary(aRes,xmldoc,elems,text_arr,date); },0); |
---|
1271 | this.setWaitCursor(true); |
---|
1272 | } |
---|
1273 | } |
---|
1274 | }catch(e){ |
---|
1275 | this._dump("bitsTreeProjectService.readDictionary():"+e); |
---|
1276 | } |
---|
1277 | }, |
---|
1278 | |
---|
1279 | ///////////////////////////////////////////////////////////////////// |
---|
1280 | _readDictionaryCancel : function(aRes,aXMLDoc){ |
---|
1281 | var self = bitsTreeProjectService; |
---|
1282 | if(self._applytimer) clearTimeout(self._applytimer); |
---|
1283 | self._applytimer = null; |
---|
1284 | var fid = self.DataSource.getProperty(aRes, "id"); |
---|
1285 | var dbtype = self.DataSource.getProperty(aRes, "dbtype"); |
---|
1286 | self._putDictionaryXML(fid,dbtype,aXMLDoc); |
---|
1287 | if(self._progressWindow && !self._progressWindow.closed) self._progressWindow.close(); |
---|
1288 | self._progressWindow = null; |
---|
1289 | this.setWaitCursor(false); |
---|
1290 | }, |
---|
1291 | |
---|
1292 | ///////////////////////////////////////////////////////////////////// |
---|
1293 | _readDictionaryLoadXMLDictionary : function(aRes,aXMLDoc,aTermElems,aTermArray,aDateString,aTermHash,aIndex){ |
---|
1294 | var self = this; |
---|
1295 | if(aXMLDoc == undefined) return; |
---|
1296 | if(aTermHash == undefined) aTermHash = {}; |
---|
1297 | if(aIndex == undefined) aIndex = 0; |
---|
1298 | var i = aIndex; |
---|
1299 | for(;i<aIndex+50 && i<aTermElems.length;i++){ |
---|
1300 | if(!aTermElems[i].textContent) continue; |
---|
1301 | if(this._caseSensitive_exp.test(aTermElems[i].textContent)){ |
---|
1302 | aTermHash[aTermElems[i].textContent] = i+1; |
---|
1303 | }else{ |
---|
1304 | aTermHash[aTermElems[i].textContent.toLowerCase()] = i+1; |
---|
1305 | } |
---|
1306 | } |
---|
1307 | aIndex = i; |
---|
1308 | if(aIndex<aTermElems.length){ |
---|
1309 | this._applytimer = setTimeout(function(){ self._readDictionaryLoadXMLDictionary(aRes,aXMLDoc,aTermElems,aTermArray,aDateString,aTermHash,aIndex); },0); |
---|
1310 | return; |
---|
1311 | }else{ |
---|
1312 | if(this._progressWindow && !this._progressWindow.closed){ |
---|
1313 | if(this._progressWindow.setStatus) this._progressWindow.setStatus(this.STRING.getString("MSG_READING_DICTIONARY") + "... [ 0% ][ "+ aTermArray.length + " ]"); |
---|
1314 | } |
---|
1315 | this._applytimer = setTimeout(function(){ self._readDictionary(aTermArray,aTermHash,aDateString,aRes,aXMLDoc,aTermArray.length); },0); |
---|
1316 | } |
---|
1317 | }, |
---|
1318 | |
---|
1319 | ///////////////////////////////////////////////////////////////////// |
---|
1320 | _readDictionary : function(aTermArray,aTermHash,aDateString,aRes,aXMLDoc,aMaxTerm){ |
---|
1321 | var terms = aXMLDoc.documentElement.getElementsByTagName("TERMS")[0]; |
---|
1322 | if(!terms) return; |
---|
1323 | var i,j; |
---|
1324 | for(i=0,j=0;i<50 && j<250 && aTermArray.length>0;j++){ |
---|
1325 | var term = aTermArray.shift(); |
---|
1326 | term = term.replace(/^\s*/mg,"").replace(/\s*$/mg,""); |
---|
1327 | var key; |
---|
1328 | if(this._caseSensitive_exp.test(term)){ |
---|
1329 | key = term; |
---|
1330 | }else{ |
---|
1331 | key = term.toLowerCase(); |
---|
1332 | } |
---|
1333 | if(aTermHash[key] != undefined) continue; |
---|
1334 | i++; |
---|
1335 | aTermHash[key] = i; |
---|
1336 | var elem = aXMLDoc.createElement("TERM"); |
---|
1337 | if(!this._caseSensitive_exp.test(term)) term = term.toLowerCase(); |
---|
1338 | var termElem = aXMLDoc.createTextNode(term); |
---|
1339 | if(!elem || !termElem) continue; |
---|
1340 | elem.setAttribute("date",aDateString); |
---|
1341 | terms.appendChild(elem); |
---|
1342 | elem.appendChild(termElem); |
---|
1343 | } |
---|
1344 | var self = this; |
---|
1345 | if(aTermArray.length == 0){ |
---|
1346 | var fid = this.DataSource.getProperty(aRes, "id"); |
---|
1347 | var dbtype = this.DataSource.getProperty(aRes, "dbtype"); |
---|
1348 | this._putDictionaryXML(fid,dbtype,aXMLDoc); |
---|
1349 | if(this._progressWindow && !this._progressWindow.closed) this._progressWindow.close(); |
---|
1350 | this._progressWindow = null; |
---|
1351 | setTimeout(function(){ self.Common.alert(self.STRING.getString("SUCCEEDED_READING_DICTIONARY")); },100); |
---|
1352 | this.setWaitCursor(false); |
---|
1353 | return; |
---|
1354 | } |
---|
1355 | this._applytimer = setTimeout(function(){ self._readDictionary(aTermArray,aTermHash,aDateString,aRes,aXMLDoc,aMaxTerm); },0); |
---|
1356 | if(this._progressWindow && !this._progressWindow.closed){ |
---|
1357 | var p = (aMaxTerm-aTermArray.length)/aMaxTerm; |
---|
1358 | if(this._progressWindow.setProgress) this._progressWindow.setProgress( parseInt(p*100) ); |
---|
1359 | if(this._progressWindow.setStatus) this._progressWindow.setStatus(this.STRING.getString("MSG_READING_DICTIONARY") + "... [ "+ parseInt(p*100) + "% ][ "+ aTermArray.length + " ]"); |
---|
1360 | } |
---|
1361 | }, |
---|
1362 | |
---|
1363 | ///////////////////////////////////////////////////////////////////// |
---|
1364 | saveDictionary : function(aEvent){ |
---|
1365 | var mcTreeHandler = null; |
---|
1366 | if(this.mcTreeHandler) mcTreeHandler = this.mcTreeHandler; |
---|
1367 | if(!mcTreeHandler) return; |
---|
1368 | var aRes = mcTreeHandler.resource; |
---|
1369 | if(!aRes) return; |
---|
1370 | var fid = this.DataSource.getProperty(aRes, "id"); |
---|
1371 | var title = this.DataSource.getProperty(aRes, "title"); |
---|
1372 | var dbtype = this.DataSource.getProperty(aRes, "dbtype"); |
---|
1373 | var xmldoc = this._getDictionaryXML(fid,dbtype); |
---|
1374 | if(!xmldoc){ |
---|
1375 | var title = this.DataSource.getProperty(aRes, "title"); |
---|
1376 | if(this.Common.confirm("[ "+title+" ]\n"+this.STRING.getString("CONFIRM_DICTIONARY_UPDATE"))) xmldoc = this._makeDictionary(aRes); |
---|
1377 | } |
---|
1378 | if(!xmldoc) return; |
---|
1379 | var dataArray = null; |
---|
1380 | var terms = xmldoc.documentElement.getElementsByTagName("TERMS")[0]; |
---|
1381 | if(terms){ |
---|
1382 | var i; |
---|
1383 | var termhash = {}; |
---|
1384 | var elems = terms.getElementsByTagName("TERM"); |
---|
1385 | if(elems.length>0) dataArray = []; |
---|
1386 | for(i=0;i<elems.length;i++){ |
---|
1387 | if(elems[i].hasAttribute("exception")) continue; |
---|
1388 | if(!elems[i].textContent) continue; |
---|
1389 | if(termhash[elems[i].textContent]) continue; |
---|
1390 | termhash[elems[i].textContent] = true; |
---|
1391 | dataArray.push(elems[i].textContent); |
---|
1392 | } |
---|
1393 | } |
---|
1394 | if(dataArray){ |
---|
1395 | var file = this.getSaveFile(title); |
---|
1396 | if(file){ |
---|
1397 | this.writeFile(file,dataArray.join("\n")+"\n"); |
---|
1398 | this.Common.alert(this.STRING.getString("SUCCEEDED_DICTIONARY_SAVE")); |
---|
1399 | } |
---|
1400 | dataArray = undefined; |
---|
1401 | }else{ |
---|
1402 | this.Common.alert(this.STRING.getString("ALERT_DICTIONARY_NO_TERMS")); |
---|
1403 | } |
---|
1404 | }, |
---|
1405 | |
---|
1406 | ///////////////////////////////////////////////////////////////////// |
---|
1407 | mngDictionary : function(aEvent){ |
---|
1408 | var mcTreeHandler = null; |
---|
1409 | if(this.mcTreeHandler) mcTreeHandler = this.mcTreeHandler; |
---|
1410 | if(!mcTreeHandler) return; |
---|
1411 | var aRes = mcTreeHandler.resource; |
---|
1412 | if(!aRes) return; |
---|
1413 | var fid = this.DataSource.getProperty(aRes, "id"); |
---|
1414 | var style = this.DataSource.getProperty(aRes, "style"); |
---|
1415 | var title = this.DataSource.getProperty(aRes, "title"); |
---|
1416 | var dbtype = this.DataSource.getProperty(aRes, "dbtype"); |
---|
1417 | var xmldoc = this._getDictionaryXML(fid,dbtype); |
---|
1418 | if(!xmldoc && this.Common.confirm("[ "+title+" ]\n"+this.STRING.getString("CONFIRM_DICTIONARY_UPDATE"))) xmldoc = this._makeDictionary(aRes); |
---|
1419 | if(!xmldoc){ |
---|
1420 | this.Common.alert(this.STRING.getString("ALERT_DICTIONARY_UPDATE")); |
---|
1421 | return; |
---|
1422 | } |
---|
1423 | var result = { |
---|
1424 | accept : false, |
---|
1425 | fid : fid, |
---|
1426 | fid_style : style, |
---|
1427 | fid_title : title, |
---|
1428 | dbtype : dbtype, |
---|
1429 | xmldoc : xmldoc, |
---|
1430 | }; |
---|
1431 | window.openDialog("chrome://markingcollection/content/treeprojectDicMngDialog.xul", "", "chrome,centerscreen,modal", result); |
---|
1432 | if(result.accept){ |
---|
1433 | this._putDictionaryXML(fid,dbtype,result.xmldoc); |
---|
1434 | } |
---|
1435 | }, |
---|
1436 | |
---|
1437 | ///////////////////////////////////////////////////////////////////// |
---|
1438 | getFolder : function(){ |
---|
1439 | if(!this.mcTreeHandler) return undefined; |
---|
1440 | var curIdx = this.mcTreeHandler.TREE.currentIndex; |
---|
1441 | if(curIdx<0) return undefined; |
---|
1442 | if(!this.mcTreeHandler.TREE.view.isContainer(curIdx)) return undefined; |
---|
1443 | var aRes = this.mcTreeHandler.TREE.builderView.getResourceAtIndex(curIdx); |
---|
1444 | var fid = this.DataSource.getProperty(aRes,"id"); |
---|
1445 | var dbtype = this.DataSource.getProperty(aRes,"dbtype"); |
---|
1446 | var folder; |
---|
1447 | if(fid != "0"){ |
---|
1448 | var foldres = this.Database.getFolderFormID(fid,dbtype); |
---|
1449 | if(foldres) folder = foldres[0]; |
---|
1450 | }else{ |
---|
1451 | folder = {fid:fid,dbtype:dbtype,fid_title:this.DataSource.getProperty(aRes,"title"),fid_property:""}; |
---|
1452 | } |
---|
1453 | return folder; |
---|
1454 | }, |
---|
1455 | |
---|
1456 | ///////////////////////////////////////////////////////////////////// |
---|
1457 | displayIndex : function(aEvent,aXSLPath){ |
---|
1458 | bitsMarkingCollection._dump("CALLED displayIndex():"); |
---|
1459 | aEvent.stopPropagation(); |
---|
1460 | var xmlContent = this.createXML(aXSLPath); |
---|
1461 | if(!xmlContent) return; |
---|
1462 | bitsTreeListService._fileid = this.Common.getTimeStamp(); |
---|
1463 | var file = bitsTreeListService.getTreeListDir(); |
---|
1464 | file.append(bitsTreeListService._fileid+".xml"); |
---|
1465 | if(file.exists()) file.remove(false); |
---|
1466 | file.create(file.NORMAL_FILE_TYPE, 0666); |
---|
1467 | var ostream = Components.classes['@mozilla.org/network/file-output-stream;1'].createInstance(Components.interfaces.nsIFileOutputStream); |
---|
1468 | ostream.init(file, 2, 0x200, false); |
---|
1469 | this.Common.UNICODE.charset = "UTF-8"; |
---|
1470 | xmlContent = this.Common.UNICODE.ConvertFromUnicode(xmlContent); |
---|
1471 | ostream.write(xmlContent, xmlContent.length); |
---|
1472 | ostream.close(); |
---|
1473 | var cur_uri = this.Common.getURLStringFromDocument(this.gBrowser.contentDocument); |
---|
1474 | var basedir = bitsTreeListService.getBaseDir(); |
---|
1475 | var res_uri = this.Common.convertFilePathToURL(basedir.path); |
---|
1476 | if(cur_uri.indexOf(res_uri)>=0) bitsTreeListService._doc = this.gBrowser.contentDocument; |
---|
1477 | var url = this.Common.convertFilePathToURL(file.path); |
---|
1478 | var loadFlag = false; |
---|
1479 | if(this.gBrowser.browsers.length == 1 && res_uri != "" && cur_uri != res_uri){ |
---|
1480 | loadFlag = true; |
---|
1481 | }else if(cur_uri == res_uri){ |
---|
1482 | loadFlag = false; |
---|
1483 | }else{ |
---|
1484 | loadFlag = true; |
---|
1485 | for(var i=0;i<this.gBrowser.browsers.length;i++){ |
---|
1486 | var doc = this.gBrowser.browsers[i].contentDocument; |
---|
1487 | var cur_uri = this.Common.getURLStringFromDocument(doc); |
---|
1488 | if(cur_uri.indexOf(res_uri)>=0){ |
---|
1489 | loadFlag = false; |
---|
1490 | this.gBrowser.tabContainer.selectedIndex = i; |
---|
1491 | break; |
---|
1492 | } |
---|
1493 | } |
---|
1494 | } |
---|
1495 | this.Common.loadURL(url,loadFlag); |
---|
1496 | bitsTreeListService._openurl = url; |
---|
1497 | if(bitsTreeListService._openurl != ""){ |
---|
1498 | var remove_dir = this.Common.convertURLToFile(this.Common.getBaseHref(bitsTreeListService._openurl)); |
---|
1499 | window.top.bitsMarkingCollection._removefile.push(remove_dir); |
---|
1500 | if(this.mcTreeViewModeService) this.mcTreeViewModeService._openlist[url] = loadFlag; |
---|
1501 | } |
---|
1502 | }, |
---|
1503 | |
---|
1504 | ///////////////////////////////////////////////////////////////////// |
---|
1505 | saveIndex : function(aEvent){ |
---|
1506 | bitsMarkingCollection._dump("CALLED saveIndex():"); |
---|
1507 | aEvent.stopPropagation(); |
---|
1508 | var savedir = this.getSaveFolder(); |
---|
1509 | if(!savedir) return; |
---|
1510 | var xmlContent =this.createXML(); |
---|
1511 | if(!xmlContent) return; |
---|
1512 | if(!this._folder) return; |
---|
1513 | var file = savedir.clone(); |
---|
1514 | file.append(this._folder.fid_title+".xml"); |
---|
1515 | if(file.exists()){ |
---|
1516 | var filecnt; |
---|
1517 | for(filecnt=1;;filecnt++){ |
---|
1518 | file = savedir.clone(); |
---|
1519 | file.append(this._folder.fid_title+"("+filecnt+")"+".xml"); |
---|
1520 | if(!file.exists()) break; |
---|
1521 | } |
---|
1522 | } |
---|
1523 | file.create(file.NORMAL_FILE_TYPE, 0666); |
---|
1524 | var ostream = Components.classes['@mozilla.org/network/file-output-stream;1'].createInstance(Components.interfaces.nsIFileOutputStream); |
---|
1525 | ostream.init(file, 2, 0x200, false); |
---|
1526 | this.Common.UNICODE.charset = "UTF-8"; |
---|
1527 | xmlContent = this.Common.UNICODE.ConvertFromUnicode(xmlContent); |
---|
1528 | ostream.write(xmlContent, xmlContent.length); |
---|
1529 | ostream.close(); |
---|
1530 | var msg = this.STRING.getString("SUCCEEDED_INDEX") + "\n"; |
---|
1531 | msg += file.path; |
---|
1532 | var prompts = this.Common.PROMPT; |
---|
1533 | var flags = prompts.BUTTON_TITLE_OK + prompts.BUTTON_POS_0_DEFAULT; |
---|
1534 | var button = prompts.confirmEx(window, this.STRING.getString("APP_TITLE"), msg, flags, "", "", "", null, {}); |
---|
1535 | }, |
---|
1536 | |
---|
1537 | ///////////////////////////////////////////////////////////////////// |
---|
1538 | createXML : function(aXSLPath){ |
---|
1539 | this._folder = undefined; |
---|
1540 | var folder = this.getFolder(); |
---|
1541 | if(!folder) return; |
---|
1542 | this._folder = folder; |
---|
1543 | this.createTITLE2OBJ(folder); |
---|
1544 | if(!this._title2obj) return ""; |
---|
1545 | var aContent = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\n'; |
---|
1546 | var stylesheet; |
---|
1547 | if(aXSLPath && aXSLPath.match(/^file:/)){ |
---|
1548 | stylesheet = this.Common.readFile(this.Common.convertURLToFile(aXSLPath)); |
---|
1549 | }else if(aXSLPath && aXSLPath.match(/^chrome:\/\/markingcollection\/content\//)){ |
---|
1550 | var xslURL = this.Common.convertURLToObject(aXSLPath); |
---|
1551 | stylesheet = bitsTreeListService.loadText(xslURL); |
---|
1552 | }else{ |
---|
1553 | var xslURL = this.Common.convertURLToObject("chrome://markingcollection/content/treeindex_standard.xsl"); |
---|
1554 | stylesheet = bitsTreeListService.loadText(xslURL); |
---|
1555 | } |
---|
1556 | if(stylesheet && stylesheet != ""){ |
---|
1557 | var type = "xsl"; |
---|
1558 | aContent += '<?xml-stylesheet type="text/'+type+'" href="#treeindex"?>\n'; |
---|
1559 | } |
---|
1560 | aContent += '<!DOCTYPE WM_INDEX_LIST'; |
---|
1561 | aContent += '[\n'; |
---|
1562 | aContent += ' <!ATTLIST xsl:stylesheet id ID #REQUIRED>\n'; |
---|
1563 | aContent += ']'; |
---|
1564 | aContent += '>\n<WM_INDEX_LIST>\n'; |
---|
1565 | if(stylesheet && stylesheet != "") aContent += stylesheet+'\n'; |
---|
1566 | aContent += "</WM_INDEX_LIST>\n"; |
---|
1567 | if(!this.createXMLDoc(aContent)) return ""; |
---|
1568 | this._xmldoc.documentElement.setAttribute("title",folder.fid_title); |
---|
1569 | var url2icon = {}; |
---|
1570 | var title_arr = []; |
---|
1571 | var title; |
---|
1572 | var tcnt; |
---|
1573 | var ocnt; |
---|
1574 | var kcnt; |
---|
1575 | for(title in this._title2obj){ |
---|
1576 | title_arr.push(title); |
---|
1577 | } |
---|
1578 | title_arr.sort(function(a,b){ |
---|
1579 | if(a.toUpperCase() == b.toUpperCase()) return 0; |
---|
1580 | if(a.toUpperCase() > b.toUpperCase()) return 1; |
---|
1581 | if(a.toUpperCase() < b.toUpperCase()) return -1; |
---|
1582 | }); |
---|
1583 | try{ |
---|
1584 | var indexsnode = this._xmldoc.createElement("INDEXS"); |
---|
1585 | this._xmldoc.documentElement.appendChild(indexsnode); |
---|
1586 | }catch(e){} |
---|
1587 | for(tcnt=0;tcnt<title_arr.length;tcnt++){ |
---|
1588 | title = title_arr[tcnt]; |
---|
1589 | try{ |
---|
1590 | indexsnode.appendChild(this._xmldoc.createTextNode("\n ")); |
---|
1591 | }catch(e){} |
---|
1592 | try{ |
---|
1593 | var indexnode = this._xmldoc.createElement("INDEX"); |
---|
1594 | indexsnode.appendChild(indexnode); |
---|
1595 | }catch(e){} |
---|
1596 | try{ |
---|
1597 | indexnode.appendChild(this._xmldoc.createTextNode("\n ")); |
---|
1598 | var titlenode = this._xmldoc.createElement("TITLE"); |
---|
1599 | titlenode.appendChild(this._xmldoc.createTextNode(title)); |
---|
1600 | indexnode.appendChild(titlenode); |
---|
1601 | }catch(e){} |
---|
1602 | var urlhash = {}; |
---|
1603 | for(ocnt=0;ocnt<this._title2obj[title].length;ocnt++){ |
---|
1604 | try{ |
---|
1605 | var obj = this._title2obj[title][ocnt]; |
---|
1606 | var objkey; |
---|
1607 | if(obj && obj.oid_property){ |
---|
1608 | try{ |
---|
1609 | var parser = new DOMParser(); |
---|
1610 | var xmldoc = parser.parseFromString(obj.oid_property, "text/xml"); |
---|
1611 | parser = undefined; |
---|
1612 | if(this._xmldoc && this._xmldoc.documentElement.nodeName == "parsererror") xmldoc = undefined; |
---|
1613 | if(xmldoc){ |
---|
1614 | var objkeys = ["NOTE","HYPER_ANCHOR"]; |
---|
1615 | for(kcnt=0;kcnt<objkeys.length;kcnt++){ |
---|
1616 | objkey = objkeys[kcnt].toUpperCase(); |
---|
1617 | var elem = xmldoc.getElementsByTagName(objkey)[0]; |
---|
1618 | if(!elem) continue; |
---|
1619 | obj[objkey] = elem.textContent; |
---|
1620 | } |
---|
1621 | } |
---|
1622 | }catch(e){} |
---|
1623 | } |
---|
1624 | if(obj && obj.doc_url){ |
---|
1625 | if(urlhash[obj.doc_url] == undefined) urlhash[obj.doc_url] = []; |
---|
1626 | urlhash[obj.doc_url].push(obj); |
---|
1627 | } |
---|
1628 | }catch(e){} |
---|
1629 | } |
---|
1630 | var urlarr = []; |
---|
1631 | var url; |
---|
1632 | for(url in urlhash){ |
---|
1633 | urlarr.push(url); |
---|
1634 | } |
---|
1635 | if(urlarr.length>0){ |
---|
1636 | try{ |
---|
1637 | indexnode.appendChild(this._xmldoc.createTextNode("\n ")); |
---|
1638 | var urlsnode = this._xmldoc.createElement("URLS"); |
---|
1639 | indexnode.appendChild(urlsnode); |
---|
1640 | urlarr.sort(function(a,b){ |
---|
1641 | if(a.toUpperCase() == b.toUpperCase()) return 0; |
---|
1642 | if(a.toUpperCase() > b.toUpperCase()) return 1; |
---|
1643 | if(a.toUpperCase() < b.toUpperCase()) return -1; |
---|
1644 | }); |
---|
1645 | for(ocnt=0;ocnt<urlarr.length;ocnt++){ |
---|
1646 | url = urlarr[ocnt]; |
---|
1647 | urlsnode.appendChild(this._xmldoc.createTextNode("\n ")); |
---|
1648 | var urlnode = this._xmldoc.createElement("URL"); |
---|
1649 | urlsnode.appendChild(urlnode); |
---|
1650 | urlnode.appendChild(this._xmldoc.createTextNode("\n ")); |
---|
1651 | var docurlnode = this._xmldoc.createElement("DOCUMENT_URL"); |
---|
1652 | docurlnode.appendChild(this._xmldoc.createTextNode(url)); |
---|
1653 | urlnode.appendChild(docurlnode); |
---|
1654 | if(url2icon[url]){ |
---|
1655 | urlnode.appendChild(this._xmldoc.createTextNode("\n ")); |
---|
1656 | var iconnode = this._xmldoc.createElement("FAVICON"); |
---|
1657 | iconnode.appendChild(this._xmldoc.createTextNode(url2icon[url])); |
---|
1658 | urlnode.appendChild(iconnode); |
---|
1659 | } |
---|
1660 | urlnode.appendChild(this._xmldoc.createTextNode("\n ")); |
---|
1661 | var objsnode = this._xmldoc.createElement("OBJECTS"); |
---|
1662 | urlnode.appendChild(objsnode); |
---|
1663 | for(kcnt=0;kcnt<urlhash[url].length;kcnt++){ |
---|
1664 | var obj = urlhash[url][kcnt]; |
---|
1665 | if(kcnt == 0){ |
---|
1666 | urlnode.appendChild(this._xmldoc.createTextNode("\n ")); |
---|
1667 | var docurlnode = this._xmldoc.createElement("DOCUMENT_TITLE"); |
---|
1668 | docurlnode.appendChild(this._xmldoc.createTextNode(obj.doc_title)); |
---|
1669 | urlnode.appendChild(docurlnode); |
---|
1670 | } |
---|
1671 | objsnode.appendChild(this._xmldoc.createTextNode("\n ")); |
---|
1672 | var objnode = this._xmldoc.createElement("OBJECT"); |
---|
1673 | objsnode.appendChild(objnode); |
---|
1674 | for(objkey in obj){ |
---|
1675 | objnode.appendChild(this._xmldoc.createTextNode("\n ")); |
---|
1676 | var keynode = this._xmldoc.createElement(objkey.toUpperCase()); |
---|
1677 | keynode.appendChild(this._xmldoc.createTextNode(obj[objkey])); |
---|
1678 | objnode.appendChild(keynode); |
---|
1679 | } |
---|
1680 | if(obj && obj.doc_url){ |
---|
1681 | if(url2icon[obj.doc_url]){ |
---|
1682 | objnode.appendChild(this._xmldoc.createTextNode("\n ")); |
---|
1683 | var iconnode = this._xmldoc.createElement("ICON"); |
---|
1684 | iconnode.appendChild(this._xmldoc.createTextNode(url2icon[obj.doc_url])); |
---|
1685 | objnode.appendChild(iconnode); |
---|
1686 | } |
---|
1687 | } |
---|
1688 | objnode.appendChild(this._xmldoc.createTextNode("\n ")); |
---|
1689 | } |
---|
1690 | objsnode.appendChild(this._xmldoc.createTextNode("\n ")); |
---|
1691 | urlnode.appendChild(this._xmldoc.createTextNode("\n ")); |
---|
1692 | } |
---|
1693 | urlsnode.appendChild(this._xmldoc.createTextNode("\n ")); |
---|
1694 | }catch(e){} |
---|
1695 | } |
---|
1696 | try{ |
---|
1697 | indexnode.appendChild(this._xmldoc.createTextNode("\n ")); |
---|
1698 | }catch(e){} |
---|
1699 | } |
---|
1700 | try{ |
---|
1701 | indexsnode.appendChild(this._xmldoc.createTextNode("\n")); |
---|
1702 | this._xmldoc.documentElement.appendChild(this._xmldoc.createTextNode("\n")); |
---|
1703 | }catch(e){} |
---|
1704 | return this.xmlSerializer(); |
---|
1705 | }, |
---|
1706 | |
---|
1707 | ///////////////////////////////////////////////////////////////////// |
---|
1708 | createTITLE2OBJ : function(aFolder){ |
---|
1709 | this._title2obj = undefined; |
---|
1710 | var title2obj = {}; |
---|
1711 | var pos = 0; |
---|
1712 | var key; |
---|
1713 | var object; |
---|
1714 | var fid2style = {}; |
---|
1715 | var contResList = this._getAllObject(aFolder); |
---|
1716 | if(contResList.length>0){ |
---|
1717 | var ocnt; |
---|
1718 | for(ocnt=0;ocnt<contResList.length;ocnt++){ |
---|
1719 | if(!contResList[ocnt].bgn_dom) continue; |
---|
1720 | var title = contResList[ocnt].oid_title; |
---|
1721 | title = title.replace(/^\s+/mg,"").replace(/\s+$/mg,""); |
---|
1722 | var oid = contResList[ocnt].oid; |
---|
1723 | var dbtype = contResList[ocnt].dbtype; |
---|
1724 | var pfid = contResList[ocnt].pfid; |
---|
1725 | var objects = this.Database.getObjectWithProperty({oid:oid},dbtype); |
---|
1726 | if(!objects) continue; |
---|
1727 | object = objects[0]; |
---|
1728 | if(title2obj[title] == undefined) title2obj[title] = []; |
---|
1729 | pos = title2obj[title].length; |
---|
1730 | title2obj[title][pos] = {}; |
---|
1731 | for(key in object){ |
---|
1732 | title2obj[title][pos][key] = object[key]; |
---|
1733 | } |
---|
1734 | var i=0; |
---|
1735 | if(object.oid_type.match(/^image\/(.+)$/)){ |
---|
1736 | var blob = this.Database.getObjectBLOB(object.oid,dbtype); |
---|
1737 | if(blob && blob.length>0 && blob[0].length>0){ |
---|
1738 | var images = String.fromCharCode.apply(String, blob[0]); |
---|
1739 | var image_b64 = btoa(images); // base64 encoding |
---|
1740 | image_b64 = 'data:' + object.oid_type + ';base64,' + image_b64; |
---|
1741 | title2obj[title][pos].oid_img = image_b64; |
---|
1742 | /* ã·ã¹ãã ã§ç®¡çããŠããã€ã¡ãŒãžã®å Žå */ |
---|
1743 | var blobFile = this.Database.getObjectBLOBFile(object.oid,dbtype); |
---|
1744 | var blobUrl = this.Common.convertFilePathToURL(blobFile.path); |
---|
1745 | if(object.doc_url == blobUrl) title2obj[title][pos].doc_url = image_b64; |
---|
1746 | if(object.con_url == blobUrl) title2obj[title][pos].con_url = image_b64; |
---|
1747 | } |
---|
1748 | } |
---|
1749 | if(fid2style[pfid] == undefined){ |
---|
1750 | var folders = this.Database.getFolderFormID(pfid,dbtype); |
---|
1751 | if(folders && folders.length>0) fid2style[pfid] = folders[0].fid_style.replace(/([:;\(,])\s+/mg,"$1"); |
---|
1752 | } |
---|
1753 | if(fid2style[pfid] != undefined) title2obj[title][pos].fid_style = fid2style[pfid]; |
---|
1754 | } |
---|
1755 | } |
---|
1756 | contResList = undefined; |
---|
1757 | this._title2obj = title2obj; |
---|
1758 | }, |
---|
1759 | |
---|
1760 | ///////////////////////////////////////////////////////////////////// |
---|
1761 | readFile : function(aFile){ |
---|
1762 | if(!aFile || !aFile.exists()) return undefined; |
---|
1763 | try { |
---|
1764 | var istream = Components.classes['@mozilla.org/network/file-input-stream;1'].createInstance(Components.interfaces.nsIFileInputStream); |
---|
1765 | istream.init(aFile, 1, 0, false); |
---|
1766 | var sstream = Components.classes['@mozilla.org/scriptableinputstream;1'].createInstance(Components.interfaces.nsIScriptableInputStream); |
---|
1767 | sstream.init(istream); |
---|
1768 | var content = sstream.read(sstream.available()); |
---|
1769 | sstream.close(); |
---|
1770 | istream.close(); |
---|
1771 | content = this.Common.convertToUnicode(content,"UTF-8"); |
---|
1772 | return content; |
---|
1773 | }catch(ex){ |
---|
1774 | this._dump("bitsTreeProjectService ERROR: readFile():" + ex); |
---|
1775 | return undefined; |
---|
1776 | } |
---|
1777 | }, |
---|
1778 | |
---|
1779 | ///////////////////////////////////////////////////////////////////// |
---|
1780 | writeFile : function(aFile, aContent){ |
---|
1781 | try { |
---|
1782 | if(!aFile.parent.exists()) aFile.parent.create(aFile.DIRECTORY_TYPE, 0777); |
---|
1783 | if(aFile.exists()) aFile.remove(false); |
---|
1784 | aFile.create(aFile.NORMAL_FILE_TYPE, 0666); |
---|
1785 | var content = this.Common.convertFormUnicode(aContent,"UTF-8"); |
---|
1786 | var ostream = Components.classes['@mozilla.org/network/file-output-stream;1'].createInstance(Components.interfaces.nsIFileOutputStream); |
---|
1787 | ostream.init(aFile, 2, 0x200, false); |
---|
1788 | ostream.write(content, content.length); |
---|
1789 | ostream.close(); |
---|
1790 | return true; |
---|
1791 | }catch(ex){ |
---|
1792 | this._dump("bitsTreeProjectService ERROR: Failed to write file: " + aFile.path + "["+ ex + "]"); |
---|
1793 | return false; |
---|
1794 | } |
---|
1795 | }, |
---|
1796 | |
---|
1797 | ///////////////////////////////////////////////////////////////////// |
---|
1798 | createXMLDoc : function(aContent){ |
---|
1799 | var parser = new DOMParser(); |
---|
1800 | this._xmldoc = parser.parseFromString(aContent, "text/xml"); |
---|
1801 | parser = undefined; |
---|
1802 | if(this._xmldoc && this._xmldoc.documentElement.nodeName == "parsererror"){ |
---|
1803 | this._xmldoc = undefined; |
---|
1804 | } |
---|
1805 | return this._xmldoc; |
---|
1806 | }, |
---|
1807 | |
---|
1808 | ///////////////////////////////////////////////////////////////////// |
---|
1809 | xmlSerializer : function(){ |
---|
1810 | if(!this._xmldoc) return ""; |
---|
1811 | var s = new XMLSerializer(); |
---|
1812 | var aContent = s.serializeToString(this._xmldoc); |
---|
1813 | s = undefined; |
---|
1814 | return aContent; |
---|
1815 | }, |
---|
1816 | |
---|
1817 | ///////////////////////////////////////////////////////////////////// |
---|
1818 | validateFileName : function(aFileName){ |
---|
1819 | var re = /[\/]+/g; |
---|
1820 | if (navigator.appVersion.indexOf("Windows") != -1) { |
---|
1821 | re = /[\\\/\|]+/g; |
---|
1822 | aFileName = aFileName.replace(/[\"]+/g, "'"); |
---|
1823 | aFileName = aFileName.replace(/[\*\:\?]+/g, " "); |
---|
1824 | aFileName = aFileName.replace(/[\<]+/g, "("); |
---|
1825 | aFileName = aFileName.replace(/[\>]+/g, ")"); |
---|
1826 | aFileName = aFileName.replace(/[\"\?!~`]+/g, ""); |
---|
1827 | aFileName = aFileName.replace(/[\*\&]+/g, "+"); |
---|
1828 | aFileName = aFileName.replace(/[\\\/\|\:;]+/g, "-"); |
---|
1829 | aFileName = aFileName.replace(/[\<]+/g, "("); |
---|
1830 | aFileName = aFileName.replace(/[\>]+/g, ")"); |
---|
1831 | aFileName = aFileName.replace(/[\s]+/g, "_"); |
---|
1832 | aFileName = aFileName.replace(/[%]+/g, "@"); |
---|
1833 | }else if (navigator.appVersion.indexOf("Macintosh") != -1) |
---|
1834 | re = /[\:\/]+/g; |
---|
1835 | return aFileName.replace(re, "_"); |
---|
1836 | }, |
---|
1837 | |
---|
1838 | ///////////////////////////////////////////////////////////////////// |
---|
1839 | getReadFileFromFolder : function (aFolder){ |
---|
1840 | var result = []; |
---|
1841 | try{ |
---|
1842 | var entries = aFolder.directoryEntries; |
---|
1843 | while(entries.hasMoreElements()){ |
---|
1844 | var entry = entries.getNext(); |
---|
1845 | entry.QueryInterface(Components.interfaces.nsIFile); |
---|
1846 | if(entry.isDirectory()){ |
---|
1847 | result = result.concat(this.getReadFileFromFolder(entry)); |
---|
1848 | }else{ |
---|
1849 | try{ var mimetype = this.Common.MIME.getTypeFromFile(entry); }catch(e){ mimetype = undefined; } |
---|
1850 | if(!mimetype) continue; |
---|
1851 | if(mimetype != "text/plain" && mimetype != "text/html" && mimetype != "application/pdf") continue; |
---|
1852 | var arg = this.Common.convertFilePathToURL(entry.QueryInterface(Components.interfaces.nsILocalFile).path); |
---|
1853 | result.push(arg); |
---|
1854 | } |
---|
1855 | } |
---|
1856 | }catch(e){ |
---|
1857 | this._dump("bitsTreeProjectService.getReadFileFromFolder():aFolder=["+aFolder+"]"); |
---|
1858 | this._dump("bitsTreeProjectService.getReadFileFromFolder():"+e); |
---|
1859 | } |
---|
1860 | return result; |
---|
1861 | }, |
---|
1862 | |
---|
1863 | ///////////////////////////////////////////////////////////////////// |
---|
1864 | getReadFolder : function (aDefaultFolder){ |
---|
1865 | var result = undefined; |
---|
1866 | try{ |
---|
1867 | var picker = Components.classes["@mozilla.org/filepicker;1"].createInstance(Components.interfaces.nsIFilePicker); |
---|
1868 | picker.init(window, "Selected Folder", picker.modeGetFolder); |
---|
1869 | if(aDefaultFolder) picker.displayDirectory = aDefaultFolder; |
---|
1870 | var showResult = picker.show(); |
---|
1871 | if(showResult == picker.returnOK) result = this.getReadFileFromFolder(picker.file); |
---|
1872 | }catch(e){ |
---|
1873 | result = undefined; |
---|
1874 | this._dump("bitsTreeProjectService.getReadFolder():"+e); |
---|
1875 | } |
---|
1876 | return result; |
---|
1877 | }, |
---|
1878 | |
---|
1879 | ///////////////////////////////////////////////////////////////////// |
---|
1880 | getReadFiles : function (){ |
---|
1881 | var result = undefined; |
---|
1882 | try{ |
---|
1883 | var picker = Components.classes["@mozilla.org/filepicker;1"].createInstance(Components.interfaces.nsIFilePicker); |
---|
1884 | picker.init(window, "Selected Files", picker.modeOpenMultiple); |
---|
1885 | picker.appendFilter("HTML File or Text File or PDF File","*.htm; *.html; *.txt; *.pdf"); |
---|
1886 | picker.appendFilters(picker.filterHTML | picker.filterText); |
---|
1887 | picker.appendFilter("PDF File","*.pdf"); |
---|
1888 | picker.filterIndex = 0; |
---|
1889 | var showResult = picker.show(); |
---|
1890 | if(showResult == picker.returnOK){ |
---|
1891 | var files = picker.files; |
---|
1892 | result = []; |
---|
1893 | while (files.hasMoreElements()){ |
---|
1894 | var arg = this.Common.convertFilePathToURL(files.getNext().QueryInterface(Components.interfaces.nsILocalFile).path); |
---|
1895 | result.push(arg); |
---|
1896 | } |
---|
1897 | } |
---|
1898 | }catch(e){ |
---|
1899 | result = undefined; |
---|
1900 | this._dump("bitsTreeProjectService.getReadFiles():"+e); |
---|
1901 | if(e.message=="Component returned failure code: 0x80520001 (NS_ERROR_FILE_UNRECOGNIZED_PATH) [nsIFilePicker.show]"){ |
---|
1902 | if(this.Common.confirm(this.STRING.getString("CONFIRM_READING_DOCUMENTS_SELECT_OVER"))) result = this.getReadFolder((picker&&picker.displayDirectory?picker.displayDirectory:undefined)); |
---|
1903 | } |
---|
1904 | } |
---|
1905 | return result; |
---|
1906 | }, |
---|
1907 | |
---|
1908 | ///////////////////////////////////////////////////////////////////// |
---|
1909 | getReadFile : function (){ |
---|
1910 | var picker = Components.classes["@mozilla.org/filepicker;1"].createInstance(Components.interfaces.nsIFilePicker); |
---|
1911 | var result = undefined; |
---|
1912 | try{ |
---|
1913 | picker.init(window, "Selected File", picker.modeOpen); |
---|
1914 | picker.appendFilters(picker.filterText); |
---|
1915 | picker.filterIndex = 0; |
---|
1916 | var showResult = picker.show(); |
---|
1917 | if(showResult == picker.returnOK || showResult == picker.returnReplace) result = picker.file; |
---|
1918 | }catch(e){ |
---|
1919 | result = undefined; |
---|
1920 | this.Common.alert(e); |
---|
1921 | } |
---|
1922 | return result; |
---|
1923 | }, |
---|
1924 | |
---|
1925 | ///////////////////////////////////////////////////////////////////// |
---|
1926 | getSaveFile : function (aTitle){ |
---|
1927 | var picker = Components.classes["@mozilla.org/filepicker;1"].createInstance(Components.interfaces.nsIFilePicker); |
---|
1928 | var result = null; |
---|
1929 | try{ |
---|
1930 | var title = "Selected Save File"; |
---|
1931 | if(aTitle) title += " ["+aTitle+"]"; |
---|
1932 | picker.init(window, title, picker.modeSave); |
---|
1933 | picker.defaultExtension = ".txt"; |
---|
1934 | if(aTitle) picker.defaultString = aTitle + picker.defaultExtension; |
---|
1935 | picker.appendFilters(picker.filterText); |
---|
1936 | var showResult = picker.show(); |
---|
1937 | if(showResult == picker.returnOK){ |
---|
1938 | result = picker.file; |
---|
1939 | }else if(showResult == picker.returnReplace){ |
---|
1940 | if(picker.file.exists()) picker.file.remove(false); |
---|
1941 | result = picker.file; |
---|
1942 | } |
---|
1943 | }catch(e){ |
---|
1944 | result = null; |
---|
1945 | this.Common.alert(e); |
---|
1946 | } |
---|
1947 | return result; |
---|
1948 | }, |
---|
1949 | |
---|
1950 | ///////////////////////////////////////////////////////////////////// |
---|
1951 | getSaveFolder : function (aTitle){ |
---|
1952 | var picker = Components.classes["@mozilla.org/filepicker;1"].createInstance(Components.interfaces.nsIFilePicker); |
---|
1953 | var result = null; |
---|
1954 | try{ |
---|
1955 | var title = "Selected Save Folder"; |
---|
1956 | if(aTitle) title += " ["+aTitle+"]"; |
---|
1957 | picker.init(window, title, picker.modeGetFolder); |
---|
1958 | if(aTitle) picker.defaultString = aTitle; |
---|
1959 | var showResult = picker.show(); |
---|
1960 | if(showResult == picker.returnOK){ |
---|
1961 | result = picker.file; |
---|
1962 | }else if(showResult == picker.returnReplace){ |
---|
1963 | if(picker.file.exists()) picker.file.remove(false); |
---|
1964 | result = picker.file; |
---|
1965 | } |
---|
1966 | }catch(e){ |
---|
1967 | result = null; |
---|
1968 | this.Common.alert(e); |
---|
1969 | } |
---|
1970 | return result; |
---|
1971 | }, |
---|
1972 | |
---|
1973 | ///////////////////////////////////////////////////////////////////// |
---|
1974 | getTemplateDir : function(){}, |
---|
1975 | |
---|
1976 | ///////////////////////////////////////////////////////////////////// |
---|
1977 | createMenu : function(aParentNode,aEntry){}, |
---|
1978 | |
---|
1979 | ///////////////////////////////////////////////////////////////////// |
---|
1980 | loadText : function(aURI){}, |
---|
1981 | |
---|
1982 | ///////////////////////////////////////////////////////////////////// |
---|
1983 | _getZipEntry : function(aZipEntry){ |
---|
1984 | return escape(aZipEntry); |
---|
1985 | }, |
---|
1986 | |
---|
1987 | ///////////////////////////////////////////////////////////////////// |
---|
1988 | addEntryDirectory : function(aZipWriter,aDir,aParentPath){ |
---|
1989 | var LANG = this.Common.getLang(); |
---|
1990 | var entries = aDir.directoryEntries; |
---|
1991 | while(entries.hasMoreElements()){ |
---|
1992 | var pDir = entries.getNext().QueryInterface(Components.interfaces.nsILocalFile); |
---|
1993 | if(!pDir.isDirectory()) continue; |
---|
1994 | var entryName = (aParentPath?aParentPath+"/":"") + pDir.leafName; |
---|
1995 | aZipWriter.addEntryDirectory(this._getZipEntry(entryName), pDir.lastModifiedTime, false); |
---|
1996 | this.addEntryDirectory(aZipWriter, pDir, entryName); |
---|
1997 | } |
---|
1998 | }, |
---|
1999 | |
---|
2000 | ///////////////////////////////////////////////////////////////////// |
---|
2001 | addEntryFile : function(aZipWriter,aDir,aParentPath){ |
---|
2002 | var entries = aDir.directoryEntries; |
---|
2003 | while(entries.hasMoreElements()){ |
---|
2004 | var pDir = entries.getNext().QueryInterface(Components.interfaces.nsILocalFile); |
---|
2005 | var entryName = (aParentPath?aParentPath+"/":"") + pDir.leafName; |
---|
2006 | if(pDir.isDirectory()){ |
---|
2007 | this.addEntryFile(aZipWriter, pDir, entryName); |
---|
2008 | }else{ |
---|
2009 | aZipWriter.addEntryFile(this._getZipEntry(entryName), Components.interfaces.nsIZipWriter.COMPRESSION_DEFAULT, pDir, false); |
---|
2010 | } |
---|
2011 | } |
---|
2012 | }, |
---|
2013 | |
---|
2014 | ///////////////////////////////////////////////////////////////////// |
---|
2015 | saveFile : function(aEvent){ |
---|
2016 | try{ |
---|
2017 | aEvent.preventDefault(); |
---|
2018 | aEvent.stopPropagation(); |
---|
2019 | this._savehtml.length = 0; |
---|
2020 | this._savehtml = []; |
---|
2021 | var contentWindow = null; |
---|
2022 | var mcTreeHandler = null; |
---|
2023 | if(bitsMarkingCollection._contentWindow) contentWindow = bitsMarkingCollection._contentWindow; |
---|
2024 | if(contentWindow && contentWindow.mcTreeHandler) mcTreeHandler = contentWindow.mcTreeHandler; |
---|
2025 | if(!mcTreeHandler) return; |
---|
2026 | var curIdx = mcTreeHandler.TREE.currentIndex; |
---|
2027 | if(curIdx<0) return; |
---|
2028 | var aRes = null; |
---|
2029 | if(!mcTreeHandler.TREE.view.isContainer(curIdx)) return; |
---|
2030 | aRes = mcTreeHandler.TREE.builderView.getResourceAtIndex(curIdx); |
---|
2031 | var fid = this.DataSource.getProperty(aRes,"id"); |
---|
2032 | var dbtype = this.DataSource.getProperty(aRes,"dbtype"); |
---|
2033 | if(fid != "0"){ |
---|
2034 | var foldres = this.Database.getFolderFormID(fid,dbtype); |
---|
2035 | if(foldres) this._saveFile(foldres[0]); |
---|
2036 | }else{ |
---|
2037 | this._saveFile({fid:fid,dbtype:dbtype,fid_title:this.DataSource.getProperty(aRes,"title"),fid_property:""}); |
---|
2038 | } |
---|
2039 | }catch(ex){ |
---|
2040 | this.Common.alert("bitsTreeProjectService.saveFile():"+ex); |
---|
2041 | } |
---|
2042 | }, |
---|
2043 | |
---|
2044 | |
---|
2045 | ///////////////////////////////////////////////////////////////////// |
---|
2046 | _saveFile : function(aFolder){ |
---|
2047 | bitsMarkingCollection._dump("CALLED _saveFile():"); |
---|
2048 | try{ |
---|
2049 | var saveFolder = this.getSaveFolder(aFolder.fid_title); |
---|
2050 | if(!saveFolder) return; |
---|
2051 | var tmpDir = window.top.bitsMarkingCollection.getTmpDir().clone(); |
---|
2052 | tmpDir.append(this.STRING.getString("APP_TITLE")); |
---|
2053 | tmpDir.createUnique(tmpDir.DIRECTORY_TYPE, 0777); |
---|
2054 | tmpDir.append(this._getZipEntry(this.validateFileName(aFolder.fid_title))); |
---|
2055 | if(tmpDir.exists()) tmpDir.remove(true); |
---|
2056 | if(!tmpDir.exists()) tmpDir.create(tmpDir.DIRECTORY_TYPE, 0777); |
---|
2057 | var file = tmpDir.clone(); |
---|
2058 | file.append(this._getZipEntry(this.validateFileName(aFolder.fid_title))+".xml"); |
---|
2059 | var leafName = unescape(file.leafName); |
---|
2060 | var filename = this.Common.splitFileName(leafName)[0]; |
---|
2061 | this.appDataSTRING = this.appDataAddSTRING; |
---|
2062 | var aContent = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\n'; |
---|
2063 | var aURL = this.Common.convertURLToObject("chrome://markingcollection/content/treeexport.xsl"); |
---|
2064 | var stylesheet = bitsTreeListService.loadText(aURL); |
---|
2065 | if(stylesheet && stylesheet != ""){ |
---|
2066 | var type = "xsl"; |
---|
2067 | aContent += '<?xml-stylesheet type="text/'+type+'" href="#treeexport"?>\n'; |
---|
2068 | } |
---|
2069 | aContent += '<!DOCTYPE LIST'; |
---|
2070 | aContent += '[\n'; |
---|
2071 | aContent += ' <!ATTLIST xsl:stylesheet id ID #REQUIRED>\n'; |
---|
2072 | aContent += ']'; |
---|
2073 | aContent += '>\n<LIST title="'+ this.xmlEncode(aFolder.fid_title) +'">\n'; |
---|
2074 | if(stylesheet && stylesheet != "") aContent += stylesheet+'\n'; |
---|
2075 | aContent += "</LIST>\n"; |
---|
2076 | this.createXMLDoc(aContent); |
---|
2077 | bitsTreeProjectService.createID2OBJ(aFolder); |
---|
2078 | bitsTreeProjectService.createXML(aFolder,this.xmldoc.documentElement); |
---|
2079 | aContent = ""; |
---|
2080 | if(this._savehtml.length>0){ |
---|
2081 | var elem = this.xmldoc.createElement("BASENAME"); |
---|
2082 | var elemT = this.xmldoc.createTextNode(filename); |
---|
2083 | if(elem && elemT){ |
---|
2084 | elem.appendChild(elemT); |
---|
2085 | this.xmldoc.documentElement.appendChild(elem) |
---|
2086 | } |
---|
2087 | } |
---|
2088 | aContent = this.xmlSerializer(); |
---|
2089 | this.Common.writeFile(file, aContent, "UTF-8"); |
---|
2090 | var savePath = null; |
---|
2091 | if(this._savehtml.length>0){ |
---|
2092 | savePath = file.parent.clone(); |
---|
2093 | savePath.append(this.appDataSTRING); |
---|
2094 | if(savePath.exists()) savePath.remove(true); |
---|
2095 | savePath.create(savePath.DIRECTORY_TYPE, 0777); |
---|
2096 | var i; |
---|
2097 | for(i=0;i<this._savehtml.length;i++){ |
---|
2098 | var htmlfile = this.Common.convertURLToFile(this._savehtml[i]); |
---|
2099 | if(!htmlfile.exists()) continue; |
---|
2100 | var htmlpath2 = htmlfile.parent.clone(); |
---|
2101 | var htmlpath1 = htmlpath2.parent.clone(); |
---|
2102 | var copypath1 = savePath.clone(); |
---|
2103 | copypath1.append(htmlpath1.leafName); |
---|
2104 | if(!copypath1.exists()) copypath1.create(copypath1.DIRECTORY_TYPE, 0777); |
---|
2105 | var copyfile1 = copypath1.clone(); |
---|
2106 | copyfile1.append(".info"); |
---|
2107 | if(!copyfile1.exists()){ |
---|
2108 | var htmlfile1 = htmlpath1.clone(); |
---|
2109 | htmlfile1.append(".info"); |
---|
2110 | if(htmlfile1.exists()) htmlfile1.copyTo(copypath1,htmlfile1.leafName); |
---|
2111 | htmlfile1 = undefined; |
---|
2112 | } |
---|
2113 | copyfile1 = undefined; |
---|
2114 | var copypath2 = copypath1.clone(); |
---|
2115 | copypath2.append(htmlpath2.leafName); |
---|
2116 | if(copypath2.exists()) continue; |
---|
2117 | htmlpath2.copyTo(copypath1,htmlpath2.leafName); |
---|
2118 | var urlinfo = copypath2.clone(); |
---|
2119 | urlinfo.append(".urlinfo"); |
---|
2120 | if(urlinfo.exists()){ |
---|
2121 | var content = this.Common.readFile(urlinfo); |
---|
2122 | if(content && content != ""){ |
---|
2123 | var content_arr = content.split("\n"); |
---|
2124 | var j,k; |
---|
2125 | for(j=0;j<content_arr.length;j++){ |
---|
2126 | var url_arr = content_arr[j].split("\t"); |
---|
2127 | for(k=0;k<url_arr.length;k++){ |
---|
2128 | if(url_arr[k].match(this.appDataURLExp)) url_arr[k] = url_arr[k].replace(this.appDataURLExp, this.appDataSTRING); |
---|
2129 | } |
---|
2130 | content_arr[j] = url_arr.join("\t"); |
---|
2131 | } |
---|
2132 | content = content_arr.join("\n"); |
---|
2133 | this.Common.writeFile(urlinfo, content, "UTF-8"); |
---|
2134 | } |
---|
2135 | } |
---|
2136 | urlinfo = undefined; |
---|
2137 | htmlfile = undefined; |
---|
2138 | htmlpath2 = undefined; |
---|
2139 | htmlpath2 = undefined; |
---|
2140 | copypath1 = undefined; |
---|
2141 | copypath2 = undefined; |
---|
2142 | } |
---|
2143 | } |
---|
2144 | try{ |
---|
2145 | var nsIZipWriter = Components.interfaces.nsIZipWriter; |
---|
2146 | var zipWriter = Components.classes["@mozilla.org/zipwriter;1"].createInstance(nsIZipWriter); |
---|
2147 | }catch(e){} |
---|
2148 | var zipFile; |
---|
2149 | if(zipWriter){ |
---|
2150 | var parent = tmpDir.parent.clone(); |
---|
2151 | zipFile = saveFolder.clone(); |
---|
2152 | zipFile.append(filename+".zip"); |
---|
2153 | if(zipFile.exists()){ |
---|
2154 | var filecnt; |
---|
2155 | for(filecnt=1;;filecnt++){ |
---|
2156 | zipFile = saveFolder.clone(); |
---|
2157 | zipFile.append(filename+"("+filecnt+")"+".zip"); |
---|
2158 | if(!zipFile.exists()) break; |
---|
2159 | } |
---|
2160 | } |
---|
2161 | if(!zipFile.exists()) zipFile.create(zipFile.NORMAL_FILE_TYPE, 0664); |
---|
2162 | zipWriter.open(zipFile, 0x04 | 0x08 | 0x20); |
---|
2163 | this.addEntryDirectory(zipWriter, parent); |
---|
2164 | this.addEntryFile(zipWriter, parent); |
---|
2165 | zipWriter.close(); |
---|
2166 | if(parent.exists()) parent.remove(true); |
---|
2167 | }else if(this.zipApp){ |
---|
2168 | try{ |
---|
2169 | var LANG = this.Common.getLang(); |
---|
2170 | var args = []; |
---|
2171 | if(this.zipAppScript) args.push(this.Common.convertFormUnicode(this.zipAppScript.path,LANG)); |
---|
2172 | if(navigator.platform == "Win32") args.push("//Nologo"); |
---|
2173 | zipFile = saveFolder.clone(); |
---|
2174 | zipFile.append(filename+".zip"); |
---|
2175 | if(zipFile.exists()){ |
---|
2176 | var filecnt; |
---|
2177 | for(filecnt=1;;filecnt++){ |
---|
2178 | zipFile = saveFolder.clone(); |
---|
2179 | zipFile.append(filename+"("+filecnt+")"+".zip"); |
---|
2180 | if(!zipFile.exists()) break; |
---|
2181 | } |
---|
2182 | } |
---|
2183 | args.push(this.Common.convertFormUnicode(zipFile.path,LANG)); |
---|
2184 | if(navigator.platform == "Win32"){ |
---|
2185 | args.push(this.Common.convertFormUnicode(tmpDir.path,LANG)); |
---|
2186 | }else{ |
---|
2187 | args.push("-r"); |
---|
2188 | args.push(this.Common.convertFormUnicode(tmpDir.path,LANG)); |
---|
2189 | } |
---|
2190 | var proc = Components.classes["@mozilla.org/process/util;1"].createInstance(Components.interfaces.nsIProcess); |
---|
2191 | proc.init(this.zipApp); |
---|
2192 | proc.run(true, args, args.length); |
---|
2193 | if(tmpDir.parent.exists()) tmpDir.parent.remove(true); |
---|
2194 | }catch(ex2){ |
---|
2195 | this.Common.alert("bitsTreeProjectService._saveFile():"+ex2); |
---|
2196 | if(zipFile && zipFile.exists()) zipFile.remove(true); |
---|
2197 | var parent = tmpDir.parent.clone(); |
---|
2198 | zipFile = saveFolder.clone(); |
---|
2199 | zipFile.append(tmpDir.leafName); |
---|
2200 | if(zipFile.exists()){ |
---|
2201 | var filecnt; |
---|
2202 | for(filecnt=1;;filecnt++){ |
---|
2203 | zipFile = saveFolder.clone(); |
---|
2204 | zipFile.append(tmpDir.leafName+"("+filecnt+")"); |
---|
2205 | if(!zipFile.exists()) break; |
---|
2206 | } |
---|
2207 | } |
---|
2208 | tmpDir.moveTo(saveFolder,zipFile.leafName); |
---|
2209 | if(parent.exists()) parent.remove(true); |
---|
2210 | } |
---|
2211 | }else{ |
---|
2212 | var parent = tmpDir.parent.clone(); |
---|
2213 | zipFile = saveFolder.clone(); |
---|
2214 | zipFile.append(unescape(tmpDir.leafName)); |
---|
2215 | if(zipFile.exists()){ |
---|
2216 | var filecnt; |
---|
2217 | for(filecnt=1;;filecnt++){ |
---|
2218 | zipFile = saveFolder.clone(); |
---|
2219 | zipFile.append(unescape(tmpDir.leafName)+"("+filecnt+")"); |
---|
2220 | if(!zipFile.exists()) break; |
---|
2221 | } |
---|
2222 | } |
---|
2223 | tmpDir.moveTo(saveFolder,zipFile.leafName); |
---|
2224 | if(parent.exists()) parent.remove(true); |
---|
2225 | } |
---|
2226 | var msg = this.STRING.getString("SUCCEEDED_EXPORT") + "\n"; |
---|
2227 | if(zipFile && zipFile.exists()){ |
---|
2228 | msg += zipFile.path; |
---|
2229 | }else{ |
---|
2230 | msg += saveFolder.path; |
---|
2231 | } |
---|
2232 | var prompts = this.Common.PROMPT; |
---|
2233 | var flags = prompts.BUTTON_TITLE_OK + prompts.BUTTON_POS_0_DEFAULT; |
---|
2234 | var button = prompts.confirmEx(window, bitsTreeProjectService.STRING.getString("APP_TITLE"), msg, flags, "", "", "", null, {}); |
---|
2235 | }catch(ex){ |
---|
2236 | this.Common.alert("bitsTreeProjectService._saveFile():"+ex); |
---|
2237 | } |
---|
2238 | }, |
---|
2239 | |
---|
2240 | ///////////////////////////////////////////////////////////////////// |
---|
2241 | getBaseDir : function(){ |
---|
2242 | var dir = window.top.bitsMarkingCollection.getExtensionDir().clone(); |
---|
2243 | dir.append("treelist"); |
---|
2244 | if(!dir.exists()) dir.create(dir.DIRECTORY_TYPE, 0700); |
---|
2245 | return dir; |
---|
2246 | }, |
---|
2247 | |
---|
2248 | ///////////////////////////////////////////////////////////////////// |
---|
2249 | getTreeListDir : function(){ |
---|
2250 | var dir = this.getBaseDir().clone(); |
---|
2251 | dir.append(this._fileid); |
---|
2252 | if(!dir.exists()) dir.create(dir.DIRECTORY_TYPE, 0700); |
---|
2253 | return dir; |
---|
2254 | }, |
---|
2255 | |
---|
2256 | ///////////////////////////////////////////////////////////////////// |
---|
2257 | xmlEncode : function(aString){ |
---|
2258 | return aString.replace(/&/mg,"&").replace(/</mg,"<").replace(/>/mg,">").replace(/\"/mg,"""); |
---|
2259 | }, |
---|
2260 | |
---|
2261 | ///////////////////////////////////////////////////////////////////// |
---|
2262 | _getAllObject : function(aFolder){ |
---|
2263 | var rtn = []; |
---|
2264 | var Foldres = this.Database.getFolderFormPID(aFolder.fid,aFolder.dbtype,false); |
---|
2265 | if(Foldres){ |
---|
2266 | var aocnt; |
---|
2267 | for(aocnt=0;aocnt<Foldres.length;aocnt++){ |
---|
2268 | rtn = rtn.concat(this._getAllObject(Foldres[aocnt])); |
---|
2269 | } |
---|
2270 | } |
---|
2271 | var Objects = this.Database.getObjectFormPID(aFolder.fid,aFolder.dbtype,false); |
---|
2272 | if(Objects) rtn = rtn.concat(Objects); |
---|
2273 | return rtn; |
---|
2274 | }, |
---|
2275 | |
---|
2276 | ///////////////////////////////////////////////////////////////////// |
---|
2277 | _getAllFolder : function(aFolder){ |
---|
2278 | var rtn = []; |
---|
2279 | var Foldres = this.Database.getFolderFormPID(aFolder.fid,aFolder.dbtype,false); |
---|
2280 | if(Foldres){ |
---|
2281 | var aocnt; |
---|
2282 | for(aocnt=0;aocnt<Foldres.length;aocnt++){ |
---|
2283 | rtn.push(Foldres[aocnt]); |
---|
2284 | rtn = rtn.concat(this._getAllFolder(Foldres[aocnt])); |
---|
2285 | } |
---|
2286 | } |
---|
2287 | return rtn; |
---|
2288 | }, |
---|
2289 | |
---|
2290 | ///////////////////////////////////////////////////////////////////// |
---|
2291 | _getAllChild : function(aFolder){ |
---|
2292 | var rtn = []; |
---|
2293 | var Foldres = this.Database.getFolderFormPID(aFolder.fid,aFolder.dbtype,false); |
---|
2294 | if(Foldres){ |
---|
2295 | Foldres.sort(function(a,b){ return a.pfid_order - b.pfid_order; }); |
---|
2296 | rtn = rtn.concat(Foldres); |
---|
2297 | } |
---|
2298 | var Objects = this.Database.getObjectFormPID(aFolder.fid,aFolder.dbtype,false); |
---|
2299 | if(Objects){ |
---|
2300 | Objects.sort(function(a,b){ return a.pfid_order - b.pfid_order; }); |
---|
2301 | rtn = rtn.concat(Objects); |
---|
2302 | } |
---|
2303 | return rtn; |
---|
2304 | }, |
---|
2305 | |
---|
2306 | ///////////////////////////////////////////////////////////////////// |
---|
2307 | createID2OBJ : function(aFolder){ |
---|
2308 | var title2obj = {}; |
---|
2309 | var fid2style = {}; |
---|
2310 | var contResList = this._getAllObject(aFolder); |
---|
2311 | if(contResList.length>0){ |
---|
2312 | var ocnt; |
---|
2313 | for(ocnt=0;ocnt<contResList.length;ocnt++){ |
---|
2314 | var oid = contResList[ocnt].oid; |
---|
2315 | if(title2obj[title] != undefined) continue; |
---|
2316 | var dbtype = contResList[ocnt].dbtype; |
---|
2317 | var objects = this.Database.getObjectWithProperty({oid:oid},dbtype); |
---|
2318 | if(!objects) continue; |
---|
2319 | title2obj[title] = {}; |
---|
2320 | var i=0; |
---|
2321 | if(objects[i].oid_type.match(/^image\/(.+)$/)){ |
---|
2322 | var blob = this.Database.getObjectBLOB(objects[i].oid,dbtype); |
---|
2323 | if(blob && blob.length>0 && blob[0].length>0){ |
---|
2324 | var images = String.fromCharCode.apply(String, blob[0]); |
---|
2325 | var image_b64 = btoa(images); // base64 encoding |
---|
2326 | image_b64 = 'data:' + objects[i].oid_type + ';base64,' + image_b64; |
---|
2327 | title2obj[title].img = image_b64; |
---|
2328 | /* ã·ã¹ãã ã§ç®¡çããŠããã€ã¡ãŒãžã®å Žå */ |
---|
2329 | var blobFile = this.Database.getObjectBLOBFile(objects[i].oid,dbtype); |
---|
2330 | var blobUrl = this.Common.convertFilePathToURL(blobFile.path); |
---|
2331 | if(objects[i].doc_url == blobUrl) objects[i].doc_url = image_b64; |
---|
2332 | if(objects[i].con_url == blobUrl) objects[i].con_url = image_b64; |
---|
2333 | } |
---|
2334 | } |
---|
2335 | if(window.top.bitsScrapPartySaveService){ |
---|
2336 | if(objects[i].doc_url.match(this.appDataURLExp)){ |
---|
2337 | this._savehtml.push(objects[i].doc_url); |
---|
2338 | objects[i].doc_url = objects[i].doc_url.replace(this.appDataURLExp, this.appDataSTRING); |
---|
2339 | } |
---|
2340 | if(objects[i].con_url.match(this.appDataURLExp)){ |
---|
2341 | objects[i].con_url = objects[i].con_url.replace(this.appDataURLExp, this.appDataSTRING); |
---|
2342 | } |
---|
2343 | } |
---|
2344 | title2obj[title].text = objects[i].oid_txt; |
---|
2345 | title2obj[title].uri = objects[i].doc_url; |
---|
2346 | title2obj[title].uri_title = objects[i].doc_title; |
---|
2347 | title2obj[title].con_url = objects[i].con_url; |
---|
2348 | title2obj[title].type = objects[i].oid_type; |
---|
2349 | title2obj[title].st = objects[i].bgn_dom; |
---|
2350 | title2obj[title].en = objects[i].end_dom; |
---|
2351 | if(objects[i].oid_property && objects[i].oid_property != "") title2obj[title].property = objects[i].oid_property; |
---|
2352 | title2obj[title].dbtype = objects[i].dbtype; |
---|
2353 | title2obj[title].date = objects[i].oid_date; |
---|
2354 | title2obj[title].mode = objects[i].oid_mode; |
---|
2355 | if(fid2style[objects[i].pfid] == undefined){ |
---|
2356 | var folders = this.Database.getFolderFormID(objects[i].pfid,dbtype); |
---|
2357 | if(folders && folders.length>0) fid2style[objects[i].pfid] = folders[0].fid_style.replace(/([:;\(,])\s+/mg,"$1"); |
---|
2358 | } |
---|
2359 | if(fid2style[objects[i].pfid] != undefined) title2obj[title].style = fid2style[objects[i].pfid]; |
---|
2360 | } |
---|
2361 | } |
---|
2362 | contResList = undefined; |
---|
2363 | this.title2obj = title2obj; |
---|
2364 | }, |
---|
2365 | |
---|
2366 | ///////////////////////////////////////////////////////////////////// |
---|
2367 | createTextNode : function(aString,aParentNode){ |
---|
2368 | if(aString && aString != ""){ |
---|
2369 | var elemS = this.xmldoc.createTextNode(aString); |
---|
2370 | if(elemS) aParentNode.appendChild(elemS); |
---|
2371 | } |
---|
2372 | }, |
---|
2373 | |
---|
2374 | ///////////////////////////////////////////////////////////////////// |
---|
2375 | createElement : function(aTagName,aString,aParentNode,aTab){ |
---|
2376 | if(!aTagName || !aParentNode) return; |
---|
2377 | if(aTab && aTab != ""){ |
---|
2378 | var elemT = this.xmldoc.createTextNode(aTab); |
---|
2379 | if(elemT) aParentNode.appendChild(elemT); |
---|
2380 | } |
---|
2381 | var elem = this.xmldoc.createElement(aTagName); |
---|
2382 | if(elem){ |
---|
2383 | if(aString){ |
---|
2384 | if(aString != ""){ |
---|
2385 | var elemS = this.xmldoc.createTextNode(aString); |
---|
2386 | if(elemS) elem.appendChild(elemS); |
---|
2387 | } |
---|
2388 | }else{ |
---|
2389 | var elemR = this.xmldoc.createTextNode("\n"); |
---|
2390 | if(elemR) elem.appendChild(elemR); |
---|
2391 | } |
---|
2392 | aParentNode.appendChild(elem) |
---|
2393 | var elemR = this.xmldoc.createTextNode("\n"); |
---|
2394 | if(elemR) aParentNode.appendChild(elemR); |
---|
2395 | } |
---|
2396 | return elem; |
---|
2397 | }, |
---|
2398 | |
---|
2399 | ///////////////////////////////////////////////////////////////////// |
---|
2400 | createXMLObject : function(aObject,aParentNode,aDepth){ |
---|
2401 | var title2obj = this.title2obj; |
---|
2402 | if(aDepth == undefined) aDepth = 0; |
---|
2403 | var aTab = ""; |
---|
2404 | for(var i=0;i<=aDepth;i++){ |
---|
2405 | aTab += " "; |
---|
2406 | } |
---|
2407 | var oid = aObject.oid; |
---|
2408 | var alink = ""; |
---|
2409 | var structure = ""; |
---|
2410 | var hyperAnchor = ""; |
---|
2411 | var disp_image_size_x = ""; |
---|
2412 | var disp_image_size_y = ""; |
---|
2413 | var disp_image_size = ""; |
---|
2414 | var out_property = []; |
---|
2415 | var xmldoc; |
---|
2416 | var structureElem; |
---|
2417 | if(aObject.oid_property && aObject.oid_property != ""){ |
---|
2418 | try{ |
---|
2419 | var parser = new DOMParser(); |
---|
2420 | xmldoc = parser.parseFromString(aObject.oid_property, "text/xml"); |
---|
2421 | parser = undefined; |
---|
2422 | }catch(ex){} |
---|
2423 | if(xmldoc && xmldoc.documentElement.nodeName == "parsererror"){ |
---|
2424 | title2obj[title].property = ""; |
---|
2425 | xmldoc = undefined; |
---|
2426 | } |
---|
2427 | if(xmldoc){ |
---|
2428 | var xmlnode = xmldoc.getElementsByTagName("LINK")[0]; |
---|
2429 | if(xmlnode) alink = xmlnode.textContent; |
---|
2430 | /* STRUCTUREå
ã®ããŒã¿ã¯xhtmlã§æ ŒçŽãããŠããçºããã®ãŸãŸåºåãã */ |
---|
2431 | xmlnode = xmldoc.getElementsByTagName("STRUCTURE")[0]; |
---|
2432 | if(xmlnode && xmlnode.hasChildNodes()){ |
---|
2433 | structureElem = xmlnode.cloneNode(true); |
---|
2434 | } |
---|
2435 | xmlnode = xmldoc.getElementsByTagName("IMG_LIST_DISP_SIZE")[0]; |
---|
2436 | if(xmlnode){ |
---|
2437 | disp_image_size = xmlnode.textContent; |
---|
2438 | if(disp_image_size.match(/^(\d+),(\d+)$/mg)){ |
---|
2439 | disp_image_size_x = RegExp.$1; |
---|
2440 | disp_image_size_y = RegExp.$2; |
---|
2441 | } |
---|
2442 | } |
---|
2443 | xmlnode = xmldoc.getElementsByTagName("NOTE")[0]; |
---|
2444 | if(xmlnode){ |
---|
2445 | out_property["NOTE"] = {}; |
---|
2446 | out_property["NOTE"].type = "text"; |
---|
2447 | out_property["NOTE"].value = xmlnode.textContent; |
---|
2448 | } |
---|
2449 | xmlnode = xmldoc.getElementsByTagName("HYPER_ANCHOR")[0]; |
---|
2450 | if(xmlnode) hyperAnchor = xmlnode.textContent; |
---|
2451 | } |
---|
2452 | } |
---|
2453 | var oNode = this.createElement("OBJECT",undefined,aParentNode,aTab+" "); |
---|
2454 | this.createElement("OID_TITLE",aObject.oid_title,oNode,aTab+" "); |
---|
2455 | if(out_property["NOTE"]) this.createElement("OID_NOTE",out_property["NOTE"].value,oNode,aTab+" "); |
---|
2456 | var tag; |
---|
2457 | for(tag in out_property){ |
---|
2458 | if(typeof out_property[tag] == "function") continue; |
---|
2459 | this.createElement("OID_PROPERTY_"+ tag,out_property[tag].value,oNode,aTab+" "); |
---|
2460 | } |
---|
2461 | if(disp_image_size_x && disp_image_size_y){ |
---|
2462 | this.createElement("OID_IMG_DISP_WIDTH",disp_image_size_x,oNode,aTab+" "); |
---|
2463 | this.createElement("OID_IMG_DISP_HEIGHT",disp_image_size_x,oNode,aTab+" "); |
---|
2464 | } |
---|
2465 | if(title2obj[title].img) this.createElement("OID_IMG",title2obj[title].img,oNode,aTab+" "); |
---|
2466 | if(title2obj[title].uri) this.createElement("DOC_URL",title2obj[title].uri,oNode,aTab+" "); |
---|
2467 | if(title2obj[title].uri_title) this.createElement("DOC_TITLE",title2obj[title].uri_title,oNode,aTab+" "); |
---|
2468 | if(title2obj[title].st) this.createElement("BGN_DOM",title2obj[title].st,oNode,aTab+" "); |
---|
2469 | if(title2obj[title].en) this.createElement("END_DOM",title2obj[title].en,oNode,aTab+" "); |
---|
2470 | if(title2obj[title].con_url) this.createElement("CON_URL",title2obj[title].con_url,oNode,aTab+" "); |
---|
2471 | if(title2obj[title].type) this.createElement("OID_TYPE",title2obj[title].type,oNode,aTab+" "); |
---|
2472 | if(title2obj[title].date) this.createElement("OID_DATE",title2obj[title].date,oNode,aTab+" "); |
---|
2473 | if(title2obj[title].mode) this.createElement("OID_MODE",title2obj[title].mode,oNode,aTab+" "); |
---|
2474 | if(alink != "") this.createElement("OID_LINK",alink,oNode,aTab+" "); |
---|
2475 | if(structureElem){ |
---|
2476 | var elem = this.createElement("OID_STRUCTURE","",oNode,aTab+" "); |
---|
2477 | var i; |
---|
2478 | for(i=0;i<structureElem.childNodes.length;i++){ |
---|
2479 | elem.appendChild(structureElem.childNodes[i].cloneNode(true)); |
---|
2480 | } |
---|
2481 | } |
---|
2482 | if(title2obj[title].text) this.createElement("OID_TXT",title2obj[title].text,oNode,aTab+" "); |
---|
2483 | if(title2obj[title].property) this.createElement("OID_PROPERTY",title2obj[title].property,oNode,aTab+" "); |
---|
2484 | if(title2obj[title].dbtype) this.createElement("OID_DBTYPE",title2obj[title].dbtype,oNode,aTab+" "); |
---|
2485 | if(hyperAnchor != ""){ |
---|
2486 | this.createElement("HYPER_ANCHOR",hyperAnchor,oNode,aTab+" "); |
---|
2487 | }else if(title2obj[title].con_url && title2obj[title].st){ |
---|
2488 | var text = title2obj[title].con_url + '#hyperanchor:' + this.xmlEncode(title2obj[title].st); |
---|
2489 | if(title2obj[title].en) text += "&" + this.xmlEncode(title2obj[title].en); |
---|
2490 | if(title2obj[title].style) text += "&" + this.xmlEncode(title2obj[title].style); |
---|
2491 | this.createElement("HYPER_ANCHOR",text,oNode,aTab+" "); |
---|
2492 | } |
---|
2493 | this.createTextNode(aTab+" ",oNode); |
---|
2494 | }, |
---|
2495 | |
---|
2496 | ///////////////////////////////////////////////////////////////////// |
---|
2497 | _dump : function(aString){ |
---|
2498 | window.top.bitsMarkingCollection._dump(aString); |
---|
2499 | }, |
---|
2500 | |
---|
2501 | }; |
---|