source: DASISH/t5.6/client/branches/webannotator-basic/chrome/markingcollection/content/markingcollection/treelist.js @ 5428

Last change on this file since 5428 was 5428, checked in by stephanie.roth@snd.gu.se, 10 years ago

Added new branch for work on schema change related client fixes.

File size: 71.1 KB
Line 
1var bitsTreeListService = {
2        _openurl : "",
3        _doc     : null,
4        _loaddoc : null,
5        _url     : "",
6        _fileid  : "",
7        _click_oid : "",
8        _click_dbtype : "",
9        _timerid : null,
10        _reload_timer : null,
11        _listview_drag : 'chrome://markingcollection/content/listview_drag.xsl',
12
13/////////////////////////////////////////////////////////////////////
14        get CLASS_POPUP() { return window.top.document.getElementById("bitsTreeListContextmenu"); },
15
16/////////////////////////////////////////////////////////////////////
17        get STRING() { return document.getElementById("MarkingCollectionOverlayString"); },
18
19        get DataSource() { return window.top.bitsObjectMng.DataSource; },
20        get Common()     { return window.top.bitsObjectMng.Common;     },
21        get Database()   { return window.top.bitsObjectMng.Database;   },
22        get XML()        { return window.top.bitsObjectMng.XML;        },
23        get XPath()      { return bitsObjectMng.XPath;      },
24        get gBrowser()   { return window.top.bitsObjectMng.getBrowser();},
25
26        get SIDEBAR() { return window.top.document.getElementById("sidebar"); },
27        get SIDEBAR_WIN() {try{return this.SIDEBAR.contentWindow;}catch(e){return undefined;}},
28        get mcTreeHandler() {try{return this.SIDEBAR_WIN.mcTreeHandler;}catch(e){return undefined;}},
29        get mcPropertyView() {try{return this.SIDEBAR_WIN.mcPropertyView;}catch(e){return undefined;}},
30        get bitsTreeDate() {try{return this.SIDEBAR_WIN.bitsTreeDate;}catch(e){return undefined;}},
31
32/////////////////////////////////////////////////////////////////////
33        init : function(){
34                this.gBrowser.addEventListener("pageshow", this.load, true);
35                this.gBrowser.addEventListener("pagehide", this.unload, true);
36                if(this._fileid == "") this._fileid = this.Common.getTimeStamp();
37                if(this.gBrowser.browsers.length>0){
38                        var i;
39                        for(i=0;i<this.gBrowser.browsers.length;i++){
40                                var doc = this.gBrowser.browsers[i].contentDocument;
41                                doc.defaultView.addEventListener("click", bitsTreeListService.click, false);
42                        }
43                }
44                //叀いリスト衚瀺甚のStyleSheetを削陀
45                try{
46                        var sendDir  = this.getTemplateDir();
47                        var dir = this.getDefaultTemplateDir();
48                        if(dir.exists()){
49                                var entries = dir.directoryEntries;
50                                while(entries.hasMoreElements()){
51                                        var entry = entries.getNext().QueryInterface(Components.interfaces.nsILocalFile);
52                                        if(!entry.isFile()) continue;
53                                        var sendFile = sendDir.clone();
54                                        sendFile.append(entry.leafName);
55                                        if(sendFile.exists() && sendFile.lastModifiedTime > entry.lastModifiedTime) continue;
56                                        if(sendFile.exists()) sendFile.remove(false);
57                                }
58                        }
59                }catch(ex){
60                        this._dump("bitsTreeListService.init():"+ex);
61                }
62        },
63
64/////////////////////////////////////////////////////////////////////
65        done : function(){
66                try{
67                        var cur_uri = this.Common.getURLStringFromDocument(this.gBrowser.contentDocument);
68                        var basedir = this.getBaseDir();
69                        var res_uri = this.Common.convertFilePathToURL(basedir.path);
70                        this.gBrowser.removeEventListener("pageshow", this.load, true);
71                        this.gBrowser.removeEventListener("pagehide", this.unload, true);
72                        if(this.gBrowser.browsers.length>0){
73                                var i;
74                                for(i=0;i<this.gBrowser.browsers.length;i++){
75                                        var doc = this.gBrowser.browsers[i].contentDocument;
76                                        if(!doc) continue;
77                                        try{ doc.defaultView.removeEventListener("click", bitsTreeListService.click, false); }catch(e){}
78                                        if(this._click_oid){
79                                                var elemid = "divIMG"+this._click_oid;
80                                                var divElem = doc.getElementById(elemid);
81                                                if(divElem){
82                                                        divElem.style.display = "none";
83                                                        divElem.parentNode.removeChild(divElem);
84                                                }
85                                        }
86                                        var cur_uri = this.Common.getURLStringFromDocument(doc);
87                                        if(cur_uri.indexOf(res_uri)>=0) this.gBrowser.removeTab(this.gBrowser.tabContainer.getItemAtIndex(i));
88                                }
89                        }
90                }catch(e){}
91        },
92
93/////////////////////////////////////////////////////////////////////
94        load : function(aEvent){
95                var url = bitsTreeListService.Common.getURLStringFromDocument(aEvent.target);
96                if(url.indexOf(bitsTreeListService._openurl) < 0) return;
97                aEvent.target.defaultView.addEventListener("click", bitsTreeListService.click, false);
98        },
99
100/////////////////////////////////////////////////////////////////////
101        unload : function(aEvent){},
102
103/////////////////////////////////////////////////////////////////////
104        removeClass : function(aEvent){
105                if(!this._classEditNode) return;
106                var fid = this._classEditNode.getAttribute("fid");
107                var oid = this._classEditNode.getAttribute("oid");
108                var dbtype = this._classEditNode.getAttribute("dbtype");
109                if(fid && fid == '') fid = undefined;
110                if(oid && oid == '') oid = undefined;
111                if(dbtype && dbtype == '') dbtype = undefined;
112                if(!fid || !oid || !dbtype) return;
113
114                var contentWindow = null;
115                var bitsItemView = null;
116                var mcTreeDNDHandler = null;
117                var mcTreeCssService = null;
118                var mcController = null;
119                if(bitsMarkingCollection._contentWindow) contentWindow = bitsMarkingCollection._contentWindow;
120                if(contentWindow && contentWindow.bitsItemView) bitsItemView = contentWindow.bitsItemView;
121                if(contentWindow && contentWindow.mcTreeDNDHandler) mcTreeDNDHandler = contentWindow.mcTreeDNDHandler;
122                if(contentWindow && contentWindow.mcTreeCssService) mcTreeCssService = contentWindow.mcTreeCssService;
123                if(contentWindow && contentWindow.mcController) mcController = contentWindow.mcController;
124
125                var rtn = this.Database.removeLink({oid:oid,pfid:fid},dbtype);
126                var rtnObj = this.Database.getObject({oid:oid},dbtype);
127                if(rtnObj && rtnObj.length == 1 && !rtnObj[0].pfid){
128                        var aObject = undefined;
129                        var objs = this.Database.getObjectWithProperty({oid:oid},dbtype);
130                        if(objs && objs.length>0) aObject = objs[0];
131                        if(aObject){
132                                var blobs =this.Database.getObjectBLOB(aObject.oid,aObject.dbtype);
133                                var addObj = this.Database.newObject(aObject.oid,bitsMarkingCollection._uncategorized.dbtype);
134                                var key;
135                                for(key in aObject){
136                                        if(key == "oid") continue;
137                                        addObj[key] = aObject[key];
138                                }
139                                var pfid = "0";
140                                var pfid_order = this.Database.getMaxOrderFormPID(pfid,bitsMarkingCollection._uncategorized.dbtype);
141                                addObj.pfid = pfid;
142                                addObj.pfid_order = ++pfid_order;
143                                delete addObj.dbtype;
144                                delete addObj.fid_style;
145                                rtn = this.Database.addObject(addObj,bitsMarkingCollection._uncategorized.dbtype);
146                                if(rtn && blobs && blobs.length>0){
147                                        this.Database.updateObjectBLOB(addObj.oid,blobs[0],bitsMarkingCollection._uncategorized.dbtype);
148                                }
149                                if(rtn) rtn = this.Database.removeObject({oid:oid},dbtype);
150
151                                if(rtn){
152                                        if(bitsItemView && bitsItemView.isChecked){
153                                                var source = bitsMarker.id_key+dbtype+oid;
154                                                this.Common.changeNodeStyleFromID(source,bitsMarkingCollection._uncategorized.style,0,addObj.oid,bitsMarkingCollection._uncategorized.dbtype);
155                                        }else{
156                                                var f_pfid = undefined;
157                                                var rtnFolder = this.Database.getFolder({fid:fid},dbtype);
158                                                if(rtnFolder && rtnFolder.length) f_pfid = rtnFolder[0].pfid;
159                                                rtnFolder = undefined;
160                                                var dst_fid = pfid;
161                                                var dst_dbtype = bitsMarkingCollection._uncategorized.dbtype;
162                                                var dstAbout = this.DataSource.getID2About(dst_fid,undefined,dst_dbtype);
163                                                var dstRes = this.Common.RDF.GetResource(dstAbout);
164                                                var srcPRes = this.Common.RDF.GetResource(this.DataSource.getID2About(fid,f_pfid,dbtype));
165                                                var srcAbout = this.DataSource.getID2About(oid,fid,dbtype);
166                                                var srcRes = this.Common.RDF.GetResource(srcAbout);
167                                                if(this.DataSource.moveItem(srcRes, srcPRes, dstRes, -1)){
168                                                        this.DataSource.setProperty(srcRes, "dbtype", dst_dbtype);
169                                                        this.DataSource.setProperty(srcRes, "pfid", dst_fid);
170                                                        this.DataSource.setProperty(srcRes, "id", addObj.oid);
171                                                        this.DataSource.setID2About(oid,pfid,undefined,dbtype);
172                                                        this.DataSource.setID2About(addObj.oid,dst_fid,srcAbout,dst_dbtype);
173                                                        if(mcTreeDNDHandler) mcTreeDNDHandler.changeNodeStyle(srcRes);
174                                                        this.DataSource.flush();
175                                                        if(mcTreeCssService) mcTreeCssService.init();
176                                                        if(mcController) mcController.rebuildLocal();
177                                                }
178                                        }
179                                }
180                        }
181                }else if(rtnObj && rtnObj.length>0 && (bitsItemView && !bitsItemView.isChecked)){
182                        var srcAbout = this.DataSource.getID2About(oid,fid,dbtype);
183                        var srcRes = this.Common.RDF.GetResource(srcAbout);
184                        if(srcRes && this.DataSource.deleteItem(srcRes)){
185                                if(mcTreeDNDHandler) mcTreeDNDHandler.changeNodeStyle(srcRes);
186                                this.DataSource.flush();
187                                if(mcTreeCssService) mcTreeCssService.init();
188                                if(mcController) mcController.rebuildLocal();
189                        }
190                }
191                if(bitsItemView && bitsItemView.isChecked) bitsItemView.refresh();
192                this.reload(this._classEditNode.ownerDocument);
193        },
194
195/////////////////////////////////////////////////////////////////////
196        reload : function(aDocument){
197                if(bitsTreeListService._reload_timer) clearTimeout(bitsTreeListService._reload_timer);
198                if(aDocument){
199                        bitsTreeListService._reload_timer = setTimeout(function(){ bitsTreeListService._reload(aDocument);} ,500);
200                }else{
201                        bitsTreeListService._reload(aDocument);
202                }
203        },
204        _reload : function(aDocument){
205                if(!aDocument){
206                        var basedir = this.getBaseDir();
207                        var res_uri = this.Common.convertFilePathToURL(basedir.path);
208                        for(var i=0;i<this.gBrowser.browsers.length;i++){
209                                var doc = this.gBrowser.browsers[i].contentDocument;
210                                var cur_uri = this.Common.getURLStringFromDocument(doc);
211                                if(cur_uri.indexOf(res_uri)>=0) this.reload(doc);
212                        }
213                        return;
214                }
215                var param = null;
216                var xslpath = undefined;
217                var _fileid = undefined;
218                var xPathResult = this.XPath.evaluate('//meta[@name]',aDocument);
219                for(var k=0;k<xPathResult.snapshotLength;k++){
220                        var node = xPathResult.snapshotItem(k);
221                        var name = node.getAttribute('name');
222                        if(name == 'fid'){
223                                var content = node.getAttribute('content');
224                                if(content != "0"){
225                                        if(content.length<=8){
226                                                var year = content.substr(0,4);
227                                                var month = content.substr(4,2);
228                                                var day = content.substr(6,2);
229                                                if(year){
230                                                        if(!param) param = {};
231                                                        param.date = {};
232                                                        param.date.year = year;
233                                                }
234                                                if(year && month) param.date.month = month;
235                                                if(year && month && day) param.date.day = day;
236                                        }else if(content.match(/^\d+$/) && content.length==14){
237                                                if(!param) param = {};
238                                                param.fid = content;
239                                        }
240                                }
241                        }else if(name == 'dbtype'){
242                                var dbtype = node.getAttribute('content');
243                                if(dbtype && dbtype != ''){
244                                        if(!param) param = {};
245                                        param.dbtype = node.getAttribute('content');
246                                }
247                        }else if(name == 'xslpath'){
248                                xslpath = node.getAttribute('content');
249                                if(xslpath && xslpath == '') xslpath = undefined;
250                        }else if(name == '_fileid'){
251                                _fileid = node.getAttribute('content');
252                        }
253                }
254                if(param){
255                        if(xslpath != bitsTreeListService._listview_drag && !param.fid && param.dbtype) param.fid = "0";
256                        if(param.fid){
257                                param.fid_title = aDocument.title;
258                                window.top.bitsTreeListService.dispList_proc(param,xslpath,_fileid);
259                        }else{
260                                param.text = aDocument.title;
261                                window.top.bitsTreeListService.dispTreeDateList(param,xslpath,_fileid);
262                        }
263                }
264        },
265
266/////////////////////////////////////////////////////////////////////
267        click : function(aEvent){
268                try{
269                        var cur_uri = bitsTreeListService.Common.getURLStringFromDocument(aEvent.target.ownerDocument);
270                        var basedir = bitsTreeListService.getBaseDir();
271                        var res_uri = bitsTreeListService.Common.convertFilePathToURL(basedir.path);
272                        if(cur_uri.indexOf(res_uri)<0) return;
273                }catch(e){
274                        bitsTreeListService._dump("bitsTreeListService.click():"+e);
275                        return;
276                }
277                bitsTreeListService._classEditNode = null;
278                if(
279                        aEvent.target.className == "class" &&
280                        (aEvent.target.nodeName == "SPAN" || aEvent.target.nodeName == "DIV") &&
281                        aEvent.target.hasAttribute("fid") &&
282                        aEvent.target.hasAttribute("oid") &&
283                        aEvent.target.hasAttribute("dbtype")
284                ){
285                        var xPathResult = bitsTreeListService.XPath.evaluate('//meta[@name="xslpath"]', aEvent.target.ownerDocument);
286                        if(xPathResult && xPathResult.snapshotLength>0){
287                                var node = xPathResult.snapshotItem(0);
288                                if(node.getAttribute('content') == bitsTreeListService._listview_drag) bitsTreeListService._classEditNode = aEvent.target;
289                        }
290                        xPathResult = undefined;
291                }
292                if(bitsTreeListService._classEditNode){
293                        if(bitsTreeListService.CLASS_POPUP.openPopupAtScreen){
294                                bitsTreeListService.CLASS_POPUP.openPopupAtScreen(aEvent.screenX,aEvent.screenY,true);
295                        }else{
296                                var elem = document.getElementById("content");
297                                bitsTreeListService.CLASS_POPUP.showPopup(elem,aEvent.layerX+elem.boxObject.x,aEvent.layerY+6,"context","topleft","bottomright");
298                        }
299                        return;
300                }else{
301                        bitsTreeListService.CLASS_POPUP.hidePopup();
302                }
303                var elem = aEvent.target;
304                var edit = elem.getAttribute("edit");
305                var select = elem.getAttribute("select");
306                var edit_text = "";
307                var edit_elem = undefined;
308                var select_elem = undefined;
309                if((!select || select != "true") && elem.firstChild){
310                        var cElem = elem.firstChild;
311                        for(;cElem;cElem = cElem.nextSibling){
312                                if(!cElem || !cElem.getAttribute) continue;
313                                select = cElem.getAttribute("select");
314                                if(select != "true") continue;
315                                select_elem = cElem;
316                                break;
317                        }
318                }else{
319                        select_elem = elem;
320                }
321                if((!edit || edit != "true") && elem.firstChild){
322                        var cElem = elem.firstChild;
323                        for(;cElem;cElem = cElem.nextSibling){
324                                if(!cElem || !cElem.getAttribute) continue;
325                                edit = cElem.getAttribute("edit");
326                                if(edit != "true") continue;
327                                edit_elem = cElem;
328                                break;
329                        }
330                }else{
331                        edit_elem = elem;
332                }
333                if(!edit_elem && !select_elem){
334                        var targetWindow = bitsTreeListService.Common.getFocusedWindow();
335                        var selection = targetWindow.getSelection();
336                        selection.removeAllRanges();
337                        return;
338                }
339                var oid = edit_elem.getAttribute("oid");
340                var dbcolumn = edit_elem.getAttribute("dbcolumn");
341                if(!dbcolumn) dbcolumn = edit_elem.getAttribute("type");
342                var dbtype = edit_elem.getAttribute("dbtype");
343                if(select == "true" && select_elem){
344                        var value = edit_elem.getAttribute("value");
345                        if(!value || value == ""){
346                                var pfid = edit_elem.getAttribute("pfid");
347                                value = bitsTreeListService.DataSource.getID2About(oid,pfid,dbtype);
348                        }
349                        var res = bitsTreeListService.Common.RDF.GetResource(value);
350                        var resArr = [];
351                        var parentRes = res;
352                        do{
353                                parentRes = bitsTreeListService.DataSource.findParentResource(parentRes);
354                                if(parentRes) resArr.push(parentRes);
355                        }while(parentRes && parentRes.Value != bitsTreeListService.DataSource.ABOUT_ROOT);
356                        var mcTreeHandler = this.mcTreeHandler;
357                        if(mcTreeHandler){
358                                for(var i=resArr.length-1;i>=0;i--){
359                                        var selectIdx = mcTreeHandler.TREE.builderView.getIndexOfResource(resArr[i]);
360                                        if(selectIdx>=0 && !mcTreeHandler.TREE.view.isContainerOpen(selectIdx)) mcTreeHandler.TREE.view.toggleOpenState(selectIdx);
361                                }
362                                var idx = mcTreeHandler.TREE.builderView.getIndexOfResource(res);
363                                if(idx>=0){
364                                        mcTreeHandler.TREE.currentIndex = idx;
365                                        if(!mcTreeHandler.TREE.view.selection.isSelected(mcTreeHandler.TREE.currentIndex)) mcTreeHandler.TREE.view.selection.select(mcTreeHandler.TREE.currentIndex);
366                                        mcTreeHandler.TREE.focus();
367                                        mcTreeHandler.TREE.treeBoxObject.ensureRowIsVisible(idx);
368                                        this.mcPropertyView.dispProperty(mcTreeHandler.object);
369                                }
370                        }
371                }
372                if(edit != "true" || !edit_elem) return;
373                if(edit_elem.nodeName == "IMG"){
374                        var elemid = "image"+oid;
375                        edit_elem.setAttribute("id", elemid); 
376                        var orgIMG = new Image();
377                        if(!orgIMG) return;
378                        orgIMG.src = edit_elem.src;
379                        orgIMG.onload = function(){
380                                var elemid = "divIMG"+oid;
381                                var divElem = elem.ownerDocument.getElementById(elemid);
382                                if(!divElem){
383                                        divElem = elem.ownerDocument.createElement("div");
384                                        if(divElem){
385                                                divElem.setAttribute("id",elemid);
386                                                divElem.addEventListener("mouseout", bitsTreeListService.mouseoutIMG, false);
387                                                edit_elem.parentNode.appendChild(divElem);
388                                        }
389                                }
390                                if(!divElem) return;
391                                var style = "position:absolute;left:"+edit_elem.x+"px;top:"+edit_elem.y+"px;width:"+ edit_elem.width +"px;height:"+ edit_elem.height +"px;"
392                                style += "border:1px solid blue;";
393                                divElem.setAttribute("style", style); 
394                                var btn1id = "btn1IMG"+oid;
395                                var btn1Elem = elem.ownerDocument.getElementById(btn1id);
396                                if(!btn1Elem){
397                                        btn1Elem = elem.ownerDocument.createElement("img");
398                                        if(btn1Elem){
399                                                btn1Elem.setAttribute("id",btn1id);
400                                                btn1Elem.setAttribute("oid", oid);
401                                                btn1Elem.setAttribute("dbtype", dbtype);
402                                                btn1Elem.src = "chrome://markingcollection/skin/twisty-clsd.png";
403                                                btn1Elem.addEventListener("click", bitsTreeListService.resizeIMG_P, false);
404                                                divElem.appendChild(btn1Elem);
405                                        }
406                                }
407                                if(!btn1Elem) return;
408                                var style = "position:absolute;left:2px;top:1px;"
409                                if(edit_elem.width>=orgIMG.width && edit_elem.height>=orgIMG.height){
410                                        style += "opacity:0.3;";
411                                }else{
412                                        style += "cursor:pointer;";
413                                }
414                                btn1Elem.setAttribute("style", style);
415                                var btn2id = "btn2IMG"+oid;
416                                var btn2Elem = elem.ownerDocument.getElementById(btn2id);
417                                if(!btn2Elem){
418                                        btn2Elem = elem.ownerDocument.createElement("img");
419                                        if(btn2Elem){
420                                                btn2Elem.setAttribute("id",btn2id);
421                                                btn2Elem.setAttribute("oid", oid);
422                                                btn2Elem.setAttribute("dbtype", dbtype);
423                                                btn2Elem.src = "chrome://markingcollection/skin/twisty-open.png";
424                                                btn2Elem.addEventListener("click", bitsTreeListService.resizeIMG_M, false);
425                                                divElem.appendChild(btn2Elem);
426                                        }
427                                }
428                                if(!btn2Elem) return;
429                                var style = "position:absolute;left:13px;top:1px;"
430                                if(edit_elem.width<=100 && edit_elem.height<=100){
431                                        style += "opacity:0.3;";
432                                }else{
433                                        style += "cursor:pointer;";
434                                }
435                                btn2Elem.setAttribute("style", style); 
436                                if(bitsTreeListService._click_oid != "" && bitsTreeListService._click_oid != oid){
437                                        var elemid = "divIMG"+bitsTreeListService._click_oid;
438                                        var oldElem = elem.ownerDocument.getElementById(elemid);
439                                        if(oldElem) oldElem.style.display = "none";
440                                }
441                                bitsTreeListService._click_oid = oid;
442                                bitsTreeListService._click_dbtype = dbtype;
443                                divElem.style.display = "";
444                        }
445                        return;
446                }
447                var nodeWalker = edit_elem.ownerDocument.createTreeWalker(edit_elem,NodeFilter.SHOW_TEXT,null,false);
448                var txtNode=nodeWalker.nextNode(); 
449                for(;txtNode;txtNode = nodeWalker.nextNode()){
450                        edit_text += txtNode.nodeValue;
451                }
452                var elemid = dbcolumn+oid;
453                var textElem = elem.ownerDocument.getElementById(elemid);
454                if(!textElem) textElem = elem.ownerDocument.createElement("textarea");
455                if(!textElem) return;
456                textElem.setAttribute("id",elemid);
457                textElem.setAttribute("wrap","soft");
458                textElem.setAttribute("style","font-family:arial;font-size:0.9em;width:"+(edit_elem.parentNode.offsetWidth-3)+"px;height:"+(edit_elem.parentNode.offsetHeight-3)+"px;min-height:3em;");
459                textElem.setAttribute("oid",oid);
460                textElem.setAttribute("dbcolumn",dbcolumn);
461                textElem.setAttribute("dbtype",dbtype);
462                textElem.defaultValue = edit_text;
463                textElem.value = edit_text;
464                edit_elem.parentNode.insertBefore(textElem,edit_elem);
465                edit_elem.style.display = "none";
466                textElem.focus();
467                textElem.select();
468                textElem.addEventListener("blur", bitsTreeListService.blur, false);
469        },
470
471/////////////////////////////////////////////////////////////////////
472        mouseoutIMG : function(aEvent){
473                try{
474                        var elem = aEvent.target;
475                        if(elem.nodeName != "DIV") return;
476                        if(elem.offsetLeft <= aEvent.pageX && aEvent.pageX < (elem.offsetLeft+elem.offsetWidth) &&
477                                 elem.offsetTop  <= aEvent.pageY && aEvent.pageY < (elem.offsetTop +elem.offsetHeight)) return;
478                        elem.style.display = "none";
479                        bitsTreeListService._click_oid = "";
480                        bitsTreeListService._click_dbtype = "";
481                }catch(ex){
482                        elem.style.display = "none";
483                        try{
484                                bitsTreeListService._click_oid = "";
485                                bitsTreeListService._click_dbtype = "";
486                        }catch(ex2){}
487                }
488        },
489
490/////////////////////////////////////////////////////////////////////
491        resizeIMG_P : function(aEvent){
492                try{
493                        var elem = aEvent.target;
494                        var oid = elem.getAttribute("oid");
495                        var dbtype = elem.getAttribute("dbtype");
496                        var elemid = "image"+oid;
497                        var imgElem = elem.ownerDocument.getElementById(elemid);
498                        if(!imgElem) return;
499                        var orgIMG = new Image();
500                        if(!orgIMG) return;
501                        orgIMG.src = imgElem.src;
502                        orgIMG.onload = function(){
503                                var elemid = "divIMG"+oid;
504                                var divElem = elem.ownerDocument.getElementById(elemid);
505                                if(!divElem) return;
506                                var width = parseInt(divElem.offsetWidth * 1.1);
507                                var height = parseInt(divElem.offsetHeight * 1.1);
508                                if(orgIMG.width>0 && width>orgIMG.width) width = orgIMG.width;
509                                if(orgIMG.height>0 && height>orgIMG.height) height = orgIMG.height;
510                                divElem.style.width = width + "px";
511                                divElem.style.height = height + "px";
512                                if(bitsTreeListService._timerid) clearTimeout(bitsTreeListService._timerid);
513                                bitsTreeListService._timerid = setTimeout(bitsTreeListService.updateDBImageSize,1000,elem.ownerDocument,oid,dbtype,width,height);
514                        }
515                }catch(ex){
516                        bitsTreeListService._dump("bitsTreeListService.resizeIMG_P():"+ex);
517                }
518                aEvent.stopPropagation();
519        },
520
521/////////////////////////////////////////////////////////////////////
522        resizeIMG_M : function(aEvent){
523                try{
524                        var elem = aEvent.target;
525                        var oid = elem.getAttribute("oid");
526                        var dbtype = elem.getAttribute("dbtype");
527                        var elemid = "divIMG"+oid;
528                        var divElem = elem.ownerDocument.getElementById(elemid);
529                        if(!divElem) return;
530                        var width = parseInt(divElem.offsetWidth * 0.9);
531                        var height = parseInt(divElem.offsetHeight * 0.9);
532                        if(width<100 && height<100){
533                        }else{
534                                divElem.style.width = width + "px";
535                                divElem.style.height = height + "px";
536                        }
537                        if(bitsTreeListService._timerid) clearTimeout(bitsTreeListService._timerid);
538                        bitsTreeListService._timerid = setTimeout(bitsTreeListService.updateDBImageSize,1000,elem.ownerDocument,oid,dbtype,width,height);
539                }catch(ex){
540                        bitsTreeListService._dump("bitsTreeListService.resizeIMG_M():"+ex);
541                }
542                aEvent.stopPropagation();
543        },
544
545/////////////////////////////////////////////////////////////////////
546        updateDBImageSize : function(aDoc,oid,dbtype,width,height){
547                try{
548                        if(bitsTreeListService._timerid){
549                                clearTimeout(bitsTreeListService._timerid);
550                                bitsTreeListService._timerid = null;
551                        }
552                        var elemid = "image"+oid;
553                        var imgElem = aDoc.getElementById(elemid);
554                        if(!imgElem) return;
555                        var orgIMG = new Image();
556                        if(!orgIMG) return;
557                        var elemid = "divIMG"+oid;
558                        var divElem = aDoc.getElementById(elemid);
559                        if(!divElem) return;
560                        divElem.style.display = "none";
561                        orgIMG.src = imgElem.src;
562                        orgIMG.onload = function(){
563                                if(width<100 && height<100){
564                                        if(orgIMG.width>width && orgIMG.height>height){
565                                                if(orgIMG.width>orgIMG.height){
566                                                        width  = 100;
567                                                        height = parseInt((orgIMG.height*100)/orgIMG.width);
568                                                }else{
569                                                        width = parseInt((orgIMG.width*100)/orgIMG.height);
570                                                        height  = 100;
571                                                }
572                                                imgElem.style.maxWidth = width + "px";
573                                                imgElem.style.maxHeight = height + "px";
574                                                imgElem.width = width;
575                                                imgElem.height = height;
576                                        }else{
577                                                imgElem.style.maxWidth = "100px";
578                                                imgElem.style.maxHeight = "100px";
579                                        }
580                                }else{
581                                        imgElem.style.maxWidth = width + "px";
582                                        imgElem.style.maxHeight = height + "px";
583                                        imgElem.width = width;
584                                        imgElem.height = height;
585                                }
586                                var rtnObj = bitsTreeListService.Database.getObject({oid:oid},dbtype);
587                                if(rtnObj){
588                                        var value = imgElem.width.toString() + "," + imgElem.height.toString();
589                                        var newObj = {oid:rtnObj[0].oid};
590                                        newObj.oid_property = rtnObj[0].oid_property;
591                                        newObj.oid_property = newObj.oid_property.replace(/[\r\n\t]/mg," __BR__ ");
592                                        if(newObj.oid_property.match(/^(.*<IMG_LIST_DISP_SIZE>)(.*?)(<\/IMG_LIST_DISP_SIZE>.*)$/m)){
593                                                newObj.oid_property = RegExp.$1 + value + RegExp.$3;
594                                        }else if(newObj.oid_property.match(/^(<PROPERTY>)(.*<\/PROPERTY>)$/m)){
595                                                newObj.oid_property = RegExp.$1 + "<IMG_LIST_DISP_SIZE>" + value + "</IMG_LIST_DISP_SIZE>" + RegExp.$2;
596                                        }else{
597                                                newObj.oid_property = "<PROPERTY><IMG_LIST_DISP_SIZE>" + value + "</IMG_LIST_DISP_SIZE></PROPERTY>";
598                                        }
599                                        newObj.oid_property = newObj.oid_property.replace(/ __BR__ /mg,"\n");
600                                        bitsTreeListService.Database.updateObject(newObj,dbtype);
601                                }
602                                var elemid = "divIMG"+oid;
603                                var divElem = aDoc.getElementById(elemid);
604                                if(divElem){
605                                        var style = "position:absolute;left:"+imgElem.x+"px;top:"+imgElem.y+"px;width:"+ imgElem.width +"px;height:"+ imgElem.height +"px;"
606                                        style += "border:1px solid blue;";
607                                        divElem.setAttribute("style", style); 
608                                        var btn1id = "btn1IMG"+oid;
609                                        var btn1Elem = aDoc.getElementById(btn1id);
610                                        if(btn1Elem){
611                                                var style = "position:absolute;left:2px;top:1px;"
612                                                if(imgElem.width>=orgIMG.width && imgElem.height>=orgIMG.height){
613                                                        style += "opacity:0.3;";
614                                                }else{
615                                                        style += "cursor:pointer;";
616                                                }
617                                                btn1Elem.setAttribute("style", style);
618                                        }
619                                        var btn2id = "btn2IMG"+oid;
620                                        var btn2Elem = aDoc.getElementById(btn2id);
621                                        if(btn2Elem){
622                                                var style = "position:absolute;left:13px;top:1px;"
623                                                if(imgElem.width<=100 && imgElem.height<=100){
624                                                        style += "opacity:0.3;";
625                                                }else{
626                                                        style += "cursor:pointer;";
627                                                }
628                                                btn2Elem.setAttribute("style", style); 
629                                        }
630                                        divElem.style.display = "";
631                                }
632                        };
633                }catch(ex){
634                        bitsTreeListService._dump("bitsTreeListService.updateDBImageSize():"+ex);
635                }
636        },
637
638/////////////////////////////////////////////////////////////////////
639        blur : function(aEvent){
640                var textElem = aEvent.target;
641                var nextElem = textElem.nextSibling;
642                try{
643                        var dbcolumn = textElem.getAttribute("dbcolumn");
644                        if(!dbcolumn) dbcolumn = textElem.getAttribute("type");
645                        if(dbcolumn && dbcolumn == "title"){
646                                var value = textElem.value;
647                                value = value.replace(/^\s+/g,"").replace(/\s+$/g,"");
648                                if(value == ""){
649                                        bitsTreeListService.Common.alert(bitsTreeListService.STRING.getString("ERROR_NOT_ENTER_TITLE"));
650                                        textElem.value = textElem.defaultValue;
651                                        if(aEvent.cancelable){
652                                                aEvent.preventDefault();
653                                                aEvent.stopPropagation();
654                                                setTimeout(function(){
655                                                        textElem.focus();
656                                                        textElem.select();
657                                                },0);
658                                                return;
659                                        }
660                                }
661                        }
662                }catch(e){}
663                if(textElem.value != textElem.defaultValue){
664                        nextElem.innerHTML = textElem.value;
665                        var oid = textElem.getAttribute("oid");
666                        var dbtype = textElem.getAttribute("dbtype");
667                        var rtnObj = bitsTreeListService.Database.getObject({oid:oid},dbtype);
668                        if(rtnObj){
669                                var newObj = {oid:rtnObj[0].oid};
670                                var dbcolumn = textElem.getAttribute("dbcolumn");
671                                if(!dbcolumn) dbcolumn = textElem.getAttribute("type");
672                                dbcolumn = dbcolumn.toLowerCase();
673                                if(dbcolumn == "title" || dbcolumn == "note" || dbcolumn.match(/^property::.+/im)){
674                                        if(dbcolumn == "title"){
675                                                newObj.oid_title = textElem.value;
676                                        }else if(dbcolumn == "note"){
677                                                newObj.oid_property = rtnObj[0].oid_property;
678                                                newObj.oid_property = newObj.oid_property.replace(/[\r\n\t]/mg," __BR__ ");
679                                                if(newObj.oid_property.match(/^(.*<NOTE>)(.*?)(<\/NOTE>.*)$/m)){
680                                                        newObj.oid_property = RegExp.$1 + textElem.value + RegExp.$3;
681                                                }else if(newObj.oid_property.match(/^(<PROPERTY>)(.*<\/PROPERTY>)$/m)){
682                                                        newObj.oid_property = RegExp.$1 + "<NOTE>" + textElem.value + "</NOTE>" + RegExp.$2;
683                                                }else{
684                                                        newObj.oid_property = "<PROPERTY><NOTE>" + textElem.value + "</NOTE></PROPERTY>";
685                                                }
686                                                newObj.oid_property = newObj.oid_property.replace(/ __BR__ /mg,"\n");
687                                        }else if(dbcolumn.match(/^property::(.+)$/im)){
688                                                var tag = RegExp.$1;
689                                                tag = tag.toUpperCase();
690                                                var oid_property = rtnObj[0].oid_property;
691                                                oid_property = oid_property.replace(/[\r\n\t]/mg," __BR__ ");
692                                                var re1 = new RegExp("^(.*<" + tag + ">)(.*?)(</" + tag + ">.*)$","m");
693                                                if(oid_property.match(re1)){
694                                                        oid_property = RegExp.$1 + textElem.value + RegExp.$3;
695                                                }else if(oid_property.match(/^(<PROPERTY>)(.*<\/PROPERTY>)$/m)){
696                                                        oid_property = RegExp.$1 + "<" + tag + ">" + textElem.value + "</" + tag + ">" + RegExp.$2;
697                                                }else{
698                                                        oid_property = "<PROPERTY><" + tag + ">" + textElem.value + "</" + tag + "></PROPERTY>";
699                                                }
700                                                newObj.oid_property = oid_property.replace(/ __BR__ /mg,"\n");
701                                        }
702                                        bitsTreeListService.Database.updateObject(newObj,dbtype);
703                                        var contentWindow = null;
704                                        var mcTreeViewModeService = null;
705                                        var bitsItemView = null;
706                                        if(bitsMarkingCollection._contentWindow) contentWindow = bitsMarkingCollection._contentWindow;
707                                        if(contentWindow && contentWindow.mcTreeViewModeService) mcTreeViewModeService = contentWindow.mcTreeViewModeService;
708                                        if(contentWindow && contentWindow.bitsItemView) bitsItemView = contentWindow.bitsItemView;
709                                        if(bitsItemView){
710                                                if(bitsItemView.isChecked){
711                                                        bitsItemView.refresh();
712                                                }else{
713                                                        if(mcTreeViewModeService) mcTreeViewModeService.rebuild();
714                                                }
715                                        }
716                                }
717                        }
718                }
719                textElem.style.width = "0px";
720                textElem.style.height = "0px";
721                textElem.style.display = "none";
722                nextElem.style.display = "";
723        },
724
725/////////////////////////////////////////////////////////////////////
726        onPopupShowing : function(aEvent){
727                try{
728                        if(
729                                aEvent.target.id != "mcPopupTreeListViewMenuPopup" &&
730                                aEvent.target.id != "mcPopupFolderTreeListViewMenuPopup" &&
731                                aEvent.target.id != "mcPopupDateFolderTreeListViewMenuPopup"
732                        ) return;
733                        var self = bitsTreeListService;
734                        var dir = self.getDefaultTemplateDir();
735                        if(dir.exists()){
736                                var entries = dir.directoryEntries;
737                                while(entries.hasMoreElements()){
738                                        var entry = entries.getNext().QueryInterface(Components.interfaces.nsILocalFile);
739                                        self.createMenu(aEvent.target,entry);
740                                }
741                        }
742                        if(aEvent.target.lastChild.nodeName.toLowerCase() != "menuseparator"){
743                                var elemMenuseparator = aEvent.target.ownerDocument.createElement("menuseparator");
744                                if(elemMenuseparator) aEvent.target.insertBefore(elemMenuseparator,elemMenuitem);
745                        }
746                        var dir  = self.getTemplateDir();
747                        if(dir.exists()){
748                                var entries = dir.directoryEntries;
749                                while(entries.hasMoreElements()){
750                                        var entry = entries.getNext().QueryInterface(Components.interfaces.nsILocalFile);
751                                        self.createMenu(aEvent.target,entry);
752                                }
753                        }
754                        var disabled = false;
755                        if(aEvent.target.lastChild.nodeName.toLowerCase() != "menuseparator"){
756                                var elemMenuseparator = aEvent.target.ownerDocument.createElement("menuseparator");
757                                if(elemMenuseparator) aEvent.target.appendChild(elemMenuseparator);
758                        }else{
759                                disabled = true;
760                        }
761                        var elemMenuSub = top.document.createElement("menu");
762                        var elemMenuSubpopup = top.document.createElement("menupopup");
763                        if(elemMenuSub && elemMenuSubpopup){
764                                var label = self.STRING.getString("STYLESHEET");
765                                elemMenuSub.setAttribute("label",label);
766                                elemMenuSub.setAttribute("class","menu-iconic");
767                                elemMenuSub.setAttribute("image","chrome://markingcollection/skin/icon_option.gif");
768                                elemMenuSub.appendChild(elemMenuSubpopup);
769                                aEvent.target.appendChild(elemMenuSub);
770                                var label = self.STRING.getString("ADD_STYLESHEET");
771                                var elemMenuitem = aEvent.target.ownerDocument.createElement("menuitem");
772                                if(elemMenuitem){
773                                        elemMenuitem.setAttribute("id","mcPopupTreeListViewAddStyleSheet");
774                                        elemMenuitem.setAttribute("label",label+"...");
775                                        elemMenuitem.setAttribute("image","chrome://markingcollection/skin/add_stylesheet.png");
776                                        elemMenuitem.setAttribute("class","menuitem-iconic");
777                                        elemMenuSubpopup.appendChild(elemMenuitem);
778                                }
779                                var label = self.STRING.getString("DEL_STYLESHEET");
780                                var elemMenuitem = aEvent.target.ownerDocument.createElement("menuitem");
781                                if(elemMenuitem){
782                                        elemMenuitem.setAttribute("id","mcPopupTreeListViewDelStyleSheet");
783                                        elemMenuitem.setAttribute("label",label+"...");
784                                        elemMenuitem.setAttribute("image","chrome://markingcollection/skin/remove_stylesheet.png");
785                                        elemMenuitem.setAttribute("class","menuitem-iconic");
786                                        if(disabled) elemMenuitem.setAttribute("disabled","true");
787                                        elemMenuSubpopup.appendChild(elemMenuitem);
788                                }
789                        }
790                }catch(ex){
791                        self._dump("bitsTreeListService.onPopupShowing():"+ex);
792                }
793        },
794
795/////////////////////////////////////////////////////////////////////
796        onPopupHiding : function(aEvent){
797                if(
798                        aEvent.target.id != "mcPopupTreeListViewMenuPopup" &&
799                        aEvent.target.id != "mcPopupFolderTreeListViewMenuPopup" &&
800                        aEvent.target.id != "mcPopupDateFolderTreeListViewMenuPopup"
801                ) return;
802                var elem = aEvent.target.lastChild;
803                for(var i=aEvent.target.childNodes.length-1;i>=2;i--){
804                        aEvent.target.removeChild(aEvent.target.childNodes[i]);
805                }
806        },
807
808/////////////////////////////////////////////////////////////////////
809        onPopupFShowing : function(aEvent){
810                this._explicitOriginalTarget = aEvent.explicitOriginalTarget;
811        },
812
813/////////////////////////////////////////////////////////////////////
814        onCommand : function(aEvent){
815                switch(aEvent.target.id){
816                        case "mcPopupTreeListViewAddStyleSheet":
817                                bitsTreeListService.getStyleSheetFile();
818                                break;
819                        case "mcPopupTreeListViewDelStyleSheet":
820                                bitsTreeListService.removeStyleSheetFile();
821                                break;
822                        default:
823                                bitsTreeListService.dispList(aEvent,aEvent.target.id);
824                                break;
825                }
826        },
827
828/////////////////////////////////////////////////////////////////////
829        getStyleSheetFile : function (){
830                var picker = Components.classes["@mozilla.org/filepicker;1"].createInstance(Components.interfaces.nsIFilePicker);
831                var result = false;
832                try{
833                        picker.init(window, "Selected Stylesheet File", picker.modeOpen);
834                        picker.appendFilter("XSL Stylesheet","*.xsl");
835                        picker.filterIndex = 0;
836                        var showResult = picker.show();
837                        if(showResult == picker.returnOK){
838                                var dir = bitsTreeListService.getTemplateDir().clone();
839                                var aFile = dir.clone();
840                                aFile.append(picker.file.leafName);
841                                if(aFile.exists() && this.Common.confirm(this.STRING.getString("CONFIRM_UPDATE_STYLESHEET"))) aFile.remove(false);
842                                if(!aFile.exists()){
843                                        picker.file.copyTo(dir,picker.file.leafName);
844                                        result = true;
845                                }
846                        }
847                }catch(e){
848                        result = false;
849                        this.Common.alert(e);
850                }
851                return result;
852        },
853
854/////////////////////////////////////////////////////////////////////
855        removeStyleSheetFile : function (){
856                var result = {
857                        accept : false,
858                        list   : [],
859                        title  : this.STRING.getString("STYLESHEET") + this.STRING.getString("DEL_STYLESHEET"),
860                };
861                var dir  = this.getTemplateDir();
862                var entries = dir.directoryEntries;
863                while(entries.hasMoreElements()){
864                        var entry = entries.getNext().QueryInterface(Components.interfaces.nsILocalFile);
865                        if(entry.isFile()){
866                                result.list.push(entry);
867                        }else if(entry.isDirectory()){
868                        }
869                }
870                window.openDialog("chrome://markingcollection/content/removeDialog.xul", "", "chrome,centerscreen,modal", result);
871                if(result.accept){
872                }
873        },
874
875/////////////////////////////////////////////////////////////////////
876        getDefaultTemplateDir : function(){
877                var dir  = window.top.bitsMarkingCollection.getExtInstDir().clone();
878                dir.append("stylesheet");
879                return dir;
880        },
881
882/////////////////////////////////////////////////////////////////////
883        getTemplateDir : function(){
884                var dir  = window.top.bitsMarkingCollection.getExtensionDir().clone();
885                dir.append("stylesheet");
886                if(!dir.exists()) dir.create(dir.DIRECTORY_TYPE, 0700);
887                return dir;
888        },
889
890/////////////////////////////////////////////////////////////////////
891        createMenu : function(aParentNode,aEntry){
892                if(aEntry.isFile() && aEntry.leafName.match(/^(.+)\.xsl$/m)){
893                        var label = RegExp.$1;
894                        var elemMenuitem = top.document.createElement("menuitem");
895                        if(elemMenuitem){
896                                elemMenuitem.setAttribute("id",this.Common.convertFilePathToURL(aEntry.path));
897                                elemMenuitem.setAttribute("label",label);
898                                elemMenuitem.setAttribute("image","chrome://markingcollection/skin/stylesheet.png");
899                                elemMenuitem.setAttribute("class","menuitem-iconic");
900                                aParentNode.appendChild(elemMenuitem);
901                        }
902                }else if(aEntry.isDirectory()){
903                        var elemMenuSub = top.document.createElement("menu");
904                        var elemMenuSubpopup = top.document.createElement("menupopup");
905                        if(!elemMenuSub || !elemMenuSubpopup) return;
906                        elemMenuSub.setAttribute("label",unescape(aEntry.leafName));
907                        elemMenuSub.setAttribute("class","menu-iconic");
908                        elemMenuSub.setAttribute("image","chrome://markingcollection/skin/treefolder.png");
909                        elemMenuSubpopup.setAttribute("id",this.Common.convertFilePathToURL(aEntry.path));
910                        elemMenuSub.appendChild(elemMenuSubpopup);
911                        aParentNode.appendChild(elemMenuSub);
912                        var entries = aEntry.directoryEntries;
913                        while(entries.hasMoreElements()){
914                                var entry = entries.getNext().QueryInterface(Components.interfaces.nsILocalFile);
915                                this.createMenu(elemMenuSubpopup,entry);
916                        }
917                }
918        },
919
920/////////////////////////////////////////////////////////////////////
921        loadText : function(aURI){
922                try {
923                        var channel = this.Common.IO.newChannelFromURI(aURI);
924                        var stream  = channel.open();
925                        var scriptableStream = Components.classes['@mozilla.org/scriptableinputstream;1'].createInstance(Components.interfaces.nsIScriptableInputStream);
926                        scriptableStream.init(stream);
927                        var fileContents = scriptableStream.read(scriptableStream.available());
928                        scriptableStream.close();
929                        stream.close();
930                        return fileContents;
931                }
932          catch(e){ }
933          return null;
934        },
935
936/////////////////////////////////////////////////////////////////////
937        xmlEncode : function(aString){
938                return aString.replace(/&nbsp;/mg," ").replace(/&/mg,"&amp;").replace(/</mg,"&lt;").replace(/>/mg,"&gt;").replace(/\"/mg,"&quot;");
939        },
940
941/////////////////////////////////////////////////////////////////////
942        dispList : function(aEvent,aXSLPath){
943                aEvent.preventDefault();
944                aEvent.stopPropagation();
945                var contentWindow = null;
946                var mcTreeHandler = null;
947                var bitsTreeDate = null;
948                var mcTreeViewModeService = null;
949                if(bitsMarkingCollection._contentWindow) contentWindow = bitsMarkingCollection._contentWindow;
950                if(contentWindow && contentWindow.mcTreeHandler) mcTreeHandler = contentWindow.mcTreeHandler;
951                if(contentWindow && contentWindow.bitsTreeDate) bitsTreeDate = contentWindow.bitsTreeDate;
952                if(!mcTreeHandler || !bitsTreeDate) return;
953                this._viewmode = nsPreferences.copyUnicharPref("wiredmarker.viewmode","all");
954                if(contentWindow && contentWindow.mcTreeViewModeService) mcTreeViewModeService = contentWindow.mcTreeViewModeService;
955                if(mcTreeViewModeService) this._viewmode = mcTreeViewModeService.viewmode;
956                if(bitsTreeDate.isChecked){
957                        var curIdx = bitsTreeDate.TREE.currentIndex;
958                        if(curIdx<0) return;
959                        var obj = bitsTreeDate.getRowObject(curIdx);
960                        if(obj) this.dispTreeDateList(obj,aXSLPath);
961                }else{
962                        var curIdx = mcTreeHandler.TREE.currentIndex;
963                        if(curIdx<0) return;
964                        var aRes = null;
965                        if(!mcTreeHandler.TREE.view.isContainer(curIdx)) return;
966                        aRes = mcTreeHandler.TREE.builderView.getResourceAtIndex(curIdx);
967                        if(aRes){
968                                var fid = this.DataSource.getProperty(aRes,"id");
969                                var dbtype = this.DataSource.getProperty(aRes,"dbtype");
970                                if(fid != "0"){
971                                        var aFolder = this.Database.getFolderFormID(fid,dbtype);
972                                        if(aFolder) this.dispList_proc(aFolder[0],aXSLPath);
973                                }else{
974                                        this.dispList_proc({fid:fid,dbtype:dbtype,fid_title:this.DataSource.getProperty(aRes,"title")},aXSLPath);
975                                }
976                        }
977                }
978        },
979
980/////////////////////////////////////////////////////////////////////
981        initLocalParam : function(aFileid){
982                this.id2img = {};
983                this.id2icon = {};
984                this.id2type = {};
985                this.id2text = {};
986                this.id2uri = {};
987                this.id2uri_content = {};
988                this.id2st = {};
989                this.id2en = {};
990                this.id2property = {};
991                this.id2dbtype = {};
992                this.id2style = {};
993                this.id2pfid = {};
994                this.id2fid_title = {};
995                this.id2folder = {};
996                this.id2Value = {};
997                this.id2date = {};
998                this.id2exists = {};
999                this._fileid = (aFileid?aFileid:this.Common.getTimeStamp());
1000        },
1001
1002/////////////////////////////////////////////////////////////////////
1003        getObjectKey : function(aObject){
1004                return aObject.dbtype + '_' + aObject.oid;
1005        },
1006
1007/////////////////////////////////////////////////////////////////////
1008        setLocalParam : function(aObject){
1009                var oid_key = this.getObjectKey(aObject);
1010                if(aObject.oid_type.match(/^image\/(.+)$/)){
1011                        var blob = this.Database.getObjectBLOB(aObject.oid,aObject.dbtype);
1012                        if(blob && blob.length>0 && blob[0].length>0){
1013                                var images = String.fromCharCode.apply(String, blob[0]);
1014                                var image_b64 = btoa(images); // base64 encoding
1015                                image_b64 = 'data:' + aObject.oid_type + ';base64,' + image_b64;
1016                                this.id2img[oid_key] = image_b64;
1017                                this.id2icon[oid_key] = image_b64;
1018                                var blobFile = this.Database.getObjectBLOBFile(aObject.oid,aObject.dbtype);
1019                                var blobUrl = this.Common.convertFilePathToURL(blobFile.path);
1020                                if(aObject.doc_url == blobUrl){
1021                                        aObject.doc_url = image_b64;
1022                                        this.id2uri[oid_key] = aObject.doc_url;
1023                                }
1024                                if(aObject.con_url == blobUrl){
1025                                        aObject.con_url = image_b64;
1026                                        this.id2uri_content[oid_key] = aObject.con_url;
1027                                }
1028                        }
1029                        this.id2text[oid_key] = aObject.oid_txt;
1030                }else if(aObject.oid_type == "text"){
1031                        this.id2text[oid_key] = aObject.oid_txt;
1032                }else if(aObject.oid_type == "url"){
1033                        this.id2text[oid_key] = aObject.oid_txt;
1034                        var icon = this.Database.getFavicon(aObject.oid_txt,aObject.dbtype);
1035                        if(!icon) icon = this.Database.getFavicon(aObject.doc_url,aObject.dbtype);
1036                        if(icon) this.id2icon[oid_key] = icon;
1037                }
1038                if(!this.id2icon[oid_key] && aObject.oid_property){
1039                        var parser = new DOMParser();
1040                        var xmldoc = parser.parseFromString(aObject.oid_property, "text/xml");
1041                        parser = undefined;
1042                        var icon=null;
1043                        if(xmldoc){
1044                                var xmlnode = xmldoc.getElementsByTagName("ICON")[0];
1045                                if(xmlnode) icon = xmlnode.textContent;
1046                        }else{
1047                                if(aObject.oid_property.match(/^.*<ICON>(.+?)<\/ICON>.*$/m)){
1048                                        icon = RegExp.$1;
1049                                }
1050                        }
1051                        if(icon && icon != ""){
1052                                var url = Components.classes['@mozilla.org/network/standard-url;1'].createInstance(Components.interfaces.nsIURL);
1053                                url.spec = icon;
1054                                if(url.scheme == "file"){
1055                                        var file = bitsObjectMng.Common.convertURLToFile(icon)
1056                                        if(!file.exists()) icon = undefined;
1057                                }else if(url.scheme == "chrome"){
1058                                        var val = this.existsIcon(url);
1059                                        if(!val) icon = undefined;
1060                                }
1061                        }
1062                        if(!icon) icon = this.Database.getFavicon(aObject.doc_url,aObject.dbtype);
1063                        if(!icon) icon = this.Common.getChromeImageURI(this.Common.convertURLToObject('chrome://markingcollection/skin/defaultFavicon.png'));
1064                        if(icon) this.id2icon[oid_key] = icon;
1065                }
1066                this.id2uri[oid_key] = aObject.doc_url;
1067                this.id2uri_content[oid_key] = aObject.con_url;
1068                this.id2date[oid_key] = aObject.oid_date.replace(/(\d{2}\/\d{2})\/(\d{4})/,"$2/$1");
1069                this.id2type[oid_key] = aObject.oid_type;
1070                this.id2st[oid_key] = aObject.bgn_dom;
1071                this.id2en[oid_key] = aObject.end_dom;
1072                if(aObject.oid_property && aObject.oid_property != "") this.id2property[oid_key] = aObject.oid_property;
1073                this.id2dbtype[oid_key] = aObject.dbtype;
1074                if(!this.id2folder[oid_key]) this.id2folder[oid_key] = [];
1075                this.id2folder[oid_key].push({
1076                        fid       : aObject.pfid,
1077                        fid_title : aObject.fid_title,
1078                        fid_style : aObject.fid_style.replace(/([:;\(,])\s+/mg,"$1")
1079                });
1080                if(!this.id2style[oid_key] && aObject.fid_style != undefined && aObject.fid_style != "") this.id2style[oid_key] = aObject.fid_style.replace(/([:;\(,])\s+/mg,"$1");
1081                if(!this.id2fid_title[oid_key] && aObject.fid_title != undefined && aObject.fid_title != "") this.id2fid_title[oid_key] = aObject.fid_title;
1082                if(!this.id2pfid[oid_key] && aObject.pfid != undefined && aObject.pfid != "") this.id2pfid[oid_key] = aObject.pfid;
1083        },
1084
1085/////////////////////////////////////////////////////////////////////
1086        createBaseXML : function(aFID,aDBType,aTitle,aXSLPath){
1087                var aContent = '<?xml version="1.0" encoding="utf-8"?>\n';
1088                var note = "";
1089                var aURL = null;
1090                if(!aXSLPath) aXSLPath = "chrome://markingcollection/content/treelistview.xsl";
1091                if(aXSLPath && aXSLPath.match(/^file:/)){
1092                        note = this.Common.readFile(this.Common.convertURLToFile(aXSLPath));
1093                }else if(aXSLPath && aXSLPath.match(/^chrome:/)){
1094                        note = this.loadText(this.Common.convertURLToObject(aXSLPath));
1095                }
1096                if(note && note != ""){
1097                        var type = "xsl";
1098                        var typefile  = bitsTreeListService.getTreeListDir();
1099                        typefile.append(aFID+"."+type);
1100                        if(typefile.exists()) typefile.remove(false);
1101                        typefile.create(typefile.NORMAL_FILE_TYPE, 0666);
1102                        var typefile_ostream = Components.classes['@mozilla.org/network/file-output-stream;1'].createInstance(Components.interfaces.nsIFileOutputStream);
1103                        typefile_ostream.init(typefile, 2, 0x200, false);
1104                        this.Common.UNICODE.charset = "UTF-8";
1105                        note = this.Common.UNICODE.ConvertFromUnicode(note);
1106                        typefile_ostream.write(note, note.length);
1107                        typefile_ostream.close();
1108                        aContent += '<?xml-stylesheet type="text/'+type+'" href="'+aFID+'.'+type+'"?>\n';
1109                }
1110                if(!aTitle) aTitle = "";
1111                if(!aDBType) aDBType = "";
1112                if(!aFID) aFID = "";
1113                aContent += '<!DOCTYPE LIST>\n<LIST title="'+aTitle+'" fid="'+aFID+'" dbtype="'+aDBType+'" xslpath="'+aXSLPath+'" _fileid="'+this._fileid+'">\n';
1114                aContent += "</LIST>\n";
1115                bitsTreeExportService.createXMLDoc(aContent);
1116        },
1117
1118/////////////////////////////////////////////////////////////////////
1119        loadURL : function(aURL,aFileid){
1120                var cur_uri = this.Common.getURLStringFromDocument(this.gBrowser.contentDocument);
1121                var basedir = this.getBaseDir();
1122                if(aFileid) basedir.append(aFileid);
1123                var res_uri = this.Common.convertFilePathToURL(basedir.path);
1124                if(cur_uri.indexOf(res_uri)>=0) this._doc = this.gBrowser.contentDocument;
1125                var loadFlag = false;
1126                if(this.gBrowser.browsers.length == 1 && res_uri != "" && cur_uri.indexOf(res_uri)<0){
1127                        loadFlag = true;
1128                }else if(cur_uri.indexOf(res_uri)>=0){
1129                        loadFlag = false;
1130                }else{
1131                        loadFlag = true;
1132                        for(var i=0;i<this.gBrowser.browsers.length;i++){
1133                                var doc = this.gBrowser.browsers[i].contentDocument;
1134                                var cur_uri = this.Common.getURLStringFromDocument(doc);
1135                                if(cur_uri.indexOf(res_uri)>=0){
1136                                        loadFlag = false;
1137                                        if(!aFileid) this.gBrowser.tabContainer.selectedIndex = i;
1138                                        break;
1139                                }
1140                        }
1141                }
1142                var self = this;
1143                setTimeout(function(){ self._loadURL(aURL,aFileid,loadFlag); },0);
1144        },
1145        _loadURL : function(aURL,aFileid,loadFlag){
1146                var win = this.Common.WINDOW.getMostRecentWindow("navigator:browser");
1147                var browser = win.document.getElementById("content");
1148                if(aFileid && !loadFlag){
1149                        var basedir = this.getBaseDir();
1150                        if(aFileid) basedir.append(aFileid);
1151                        var res_uri = this.Common.convertFilePathToURL(basedir.path);
1152                        for(var i=0;i<this.gBrowser.browsers.length;i++){
1153                                var doc = this.gBrowser.browsers[i].contentDocument;
1154                                var cur_uri = this.Common.getURLStringFromDocument(this.gBrowser.browsers[i].contentDocument);
1155                                if(cur_uri.indexOf(res_uri)>=0){
1156                                        this.gBrowser.browsers[i].reloadWithFlags(nsIWebNavigation.LOAD_FLAGS_BYPASS_CACHE);
1157                                        break;
1158                                }
1159                        }
1160                }else{
1161                        var flags = nsIWebNavigation.LOAD_FLAGS_REPLACE_HISTORY;
1162                        if(loadFlag){
1163                                browser.selectedTab = browser.addTab('about:blank');
1164                                flags = nsIWebNavigation.LOAD_FLAGS_NONE;
1165                        }
1166                        browser.loadURIWithFlags(aURL,flags);
1167                }
1168                this._openurl = aURL;
1169                if(this._openurl != ""){
1170                        var remove_dir = this.Common.convertURLToFile(this.Common.getBaseHref(this._openurl));
1171                        window.top.bitsMarkingCollection._removefile.push(remove_dir);
1172                        var contentWindow = null;
1173                        var mcTreeViewModeService = null;
1174                        if(bitsMarkingCollection._contentWindow) contentWindow = bitsMarkingCollection._contentWindow;
1175                        if(contentWindow && contentWindow.mcTreeViewModeService) mcTreeViewModeService = contentWindow.mcTreeViewModeService;
1176                        if(mcTreeViewModeService) mcTreeViewModeService._openlist[aURL] = loadFlag;
1177                }
1178        },
1179
1180/////////////////////////////////////////////////////////////////////
1181        dispTreeDateList : function(aObject,aXSLPath,aFileid){
1182                this.initLocalParam(aFileid);
1183                var fid = "";
1184                var param = {};
1185                var title = "";
1186                if(aObject.date){
1187                        if(aObject.date.year){
1188                                param["substr(om_object.oid_date,7,4)"] = aObject.date.year;
1189                                fid += aObject.date.year;
1190                                title += aObject.date.year;
1191                                if(aObject.date.month){
1192                                        param["substr(om_object.oid_date,1,2)"] = aObject.date.month;
1193                                        fid += aObject.date.month;
1194                                        title += '/' + aObject.date.month;
1195                                        if(aObject.date.day){
1196                                                param["substr(om_object.oid_date,4,2)"] = aObject.date.day;
1197                                                fid += aObject.date.day;
1198                                                title += '/' + aObject.date.day;
1199                                        }
1200                                }
1201                        }
1202                }else{
1203                        fid = "0";
1204                        title = aObject.text;
1205                }
1206                if(aXSLPath != bitsTreeListService._listview_drag && !aObject.childlen && this.bitsTreeDate){
1207                        var itemObject = this.bitsTreeDate.getObjectFromID(fid);
1208                        if(itemObject) aObject = itemObject;
1209                }
1210                if(this._viewmode == "single") param.doc_url = this.Common.getURLStringFromDocument(this.gBrowser.contentDocument);
1211                var objects = this.Database.getObject(param, aObject.dbtype);
1212                if(objects && objects.length>0){
1213                        objects.sort(function(a,b){
1214                                var a_date = Date.parse(a.oid_date);
1215                                var b_date = Date.parse(b.oid_date);
1216                                if(a_date < b_date) return -1;
1217                                if(a_date > b_date) return 1;
1218                                return 0;
1219                        });
1220                        var i=0;
1221                        for(i=0;i<objects.length;i++){
1222                                this.setLocalParam(objects[i]);
1223                        }
1224                        if(aXSLPath == this._listview_drag){
1225                                this.id2folder = {};
1226                                for(i=0;i<objects.length;i++){
1227                                        var oid_key = this.getObjectKey(objects[i]);
1228                                        if(this.id2folder[oid_key]) continue;
1229                                        this.id2folder[oid_key] = [];
1230                                        var temp_objects = this.Database.getObject({oid:objects[i].oid},objects[i].dbtype);
1231                                        if(!temp_objects || temp_objects.length==0) continue;
1232                                        temp_objects.sort(function(a,b){
1233                                                var a_order = parseInt(a.folder_order);
1234                                                var b_order = parseInt(b.folder_order);
1235                                                if(a_order < b_order) return -1;
1236                                                if(a_order > b_order) return 1;
1237                                                return 0;
1238                                        });
1239                                        for(var j=0;j<temp_objects.length;j++){
1240                                                if(temp_objects[j].dbtype == bitsMarkingCollection._uncategorized.dbtype) continue;
1241                                                this.id2folder[oid_key].push({
1242                                                        fid       : temp_objects[j].pfid,
1243                                                        fid_title : temp_objects[j].fid_title,
1244                                                        oid       : temp_objects[j].oid,
1245                                                        dbtype    : temp_objects[j].dbtype,
1246                                                        fid_style : temp_objects[j].fid_style.replace(/([:;\(,])\s+/mg,"$1")
1247                                                });
1248                                        }
1249                                }
1250                        }
1251                }
1252                var file  = this.getTreeListDir();
1253                file.append(fid+".xml");
1254                if(file.exists()) file.remove(false);
1255                this.createBaseXML(fid,aObject.dbtype,title,aXSLPath);
1256                this.createTreeDateXML(aObject, bitsTreeExportService.xmldoc.documentElement, aXSLPath);
1257                var aContent = bitsTreeExportService.xmlSerializer();
1258                file.create(file.NORMAL_FILE_TYPE, 0666);
1259                var ostream = Components.classes['@mozilla.org/network/file-output-stream;1'].createInstance(Components.interfaces.nsIFileOutputStream);
1260                ostream.init(file, 2, 0x200, false);
1261                this.Common.UNICODE.charset = "UTF-8";
1262                aContent = this.Common.UNICODE.ConvertFromUnicode(aContent);
1263                ostream.write(aContent, aContent.length);
1264                ostream.close();
1265                this.loadURL(this.Common.convertFilePathToURL(file.path),aFileid);
1266        },
1267
1268/////////////////////////////////////////////////////////////////////
1269        dispList_proc : function(aFolder,aXSLPath,aFileid){
1270               
1271                var fid = aFolder.fid;
1272                var dbtype = aFolder.dbtype;
1273                var title = aFolder.fid_title;
1274                title = this.xmlEncode(title);
1275                var property = aFolder.fid_property;
1276                var note = "";
1277                if(property && property != ""){
1278                        if(property.match(/^(.*<NOTE>)(.*)?(<\/NOTE>.*)$/m)){
1279                                var _property = [];
1280                                _property[0] = RegExp.$1;
1281                                _property[1] = RegExp.$2;
1282                                _property[2] = RegExp.$3;
1283                                _property[1] = this.xmlEncode(_property[1]);
1284                                property = _property.join("");
1285                        }
1286                        if(this.XML.parseFromString(property)){
1287                                var rtnNode = this.XML.getItem("PROPERTY","NOTE");
1288                                if(rtnNode) note = rtnNode[0].textContent;
1289                                if(!rtnNode && note == ""){
1290                                        rtnNode = this.XML.getItem("NOTE");
1291                                        if(rtnNode) note = rtnNode[0].textContent;
1292                                }
1293                                if(!rtnNode && note == ""){
1294                                        var txt = property.replace(/[\r\n\t]/mg," __BR__ ");
1295                                        if(txt.match(/<PROPERTY>(.*?)<\/PROPERTY>/m)){
1296                                                note = unescape(RegExp.$1);
1297                                        }
1298                                }
1299                                if(!rtnNode && note == "") note = property;
1300                        }else{
1301                                note = property;
1302                        }
1303                }
1304                note = note.replace(/ __BR__ /mg,"\n");
1305                this.initLocalParam(aFileid);
1306                var folderResList = bitsTreeExportService._getAllFolder(aFolder);
1307                folderResList.push(aFolder);
1308                var f_dbtype = dbtype;
1309                if(folderResList.length>0){
1310                        var fcnt;
1311                        for(fcnt=0;fcnt<folderResList.length;fcnt++){
1312                                var fid = folderResList[fcnt].fid;
1313                                var objects = undefined;
1314                                if(this._viewmode == "all"){
1315                                        objects = this.Database.getObjectFormPID(fid, f_dbtype);
1316                                }else{
1317                                        var doc_url = this.Common.getURLStringFromDocument(this.gBrowser.contentDocument);
1318                                        objects = this.Database.getObject({pfid:fid,doc_url:doc_url}, f_dbtype);
1319                                }
1320                                if(objects && objects.length>0){
1321                                        var i=0;
1322                                        for(i=0;i<objects.length;i++){
1323                                                this.setLocalParam(objects[i]);
1324                                        }
1325                                        if(aXSLPath == this._listview_drag){
1326                                                this.id2folder = {};
1327                                                for(i=0;i<objects.length;i++){
1328                                                        var oid_key = this.getObjectKey(objects[i]);
1329                                                        if(this.id2folder[oid_key]) continue;
1330                                                        this.id2folder[oid_key] = [];
1331                                                        var temp_objects = this.Database.getObject({oid:objects[i].oid},objects[i].dbtype);
1332                                                        if(!temp_objects || temp_objects.length==0) continue;
1333                                                        temp_objects.sort(function(a,b){
1334                                                                var a_order = parseInt(a.folder_order);
1335                                                                var b_order = parseInt(b.folder_order);
1336                                                                if(a_order < b_order) return -1;
1337                                                                if(a_order > b_order) return 1;
1338                                                                return 0;
1339                                                        });
1340                                                        for(var j=0;j<temp_objects.length;j++){
1341                                                                if(temp_objects[j].dbtype == bitsMarkingCollection._uncategorized.dbtype) continue;
1342                                                                this.id2folder[oid_key].push({
1343                                                                        fid       : temp_objects[j].pfid,
1344                                                                        fid_title : temp_objects[j].fid_title,
1345                                                                        oid       : temp_objects[j].oid,
1346                                                                        dbtype    : temp_objects[j].dbtype,
1347                                                                        fid_style : temp_objects[j].fid_style.replace(/([:;\(,])\s+/mg,"$1")
1348                                                                });
1349                                                        }
1350                                                }
1351                                        }
1352                                }
1353                        }
1354                }
1355                var file  = this.getTreeListDir();
1356                file.append(fid+".xml");
1357                if(file.exists()){
1358                        try{
1359                                file.remove(true);
1360                        }catch(e){
1361                                this._dump("bitsTreeListService.dispList_proc():"+e);
1362                        }
1363                }
1364                if(!file.exists()){
1365                        this.createBaseXML(fid,f_dbtype,title,aXSLPath);
1366                        this.createXML(aFolder, bitsTreeExportService.xmldoc.documentElement, aXSLPath);
1367                        var aContent = bitsTreeExportService.xmlSerializer();
1368                        file.create(file.NORMAL_FILE_TYPE, 0666);
1369                        var ostream = Components.classes['@mozilla.org/network/file-output-stream;1'].createInstance(Components.interfaces.nsIFileOutputStream);
1370                        ostream.init(file, 2, 0x200, false);
1371                        this.Common.UNICODE.charset = "UTF-8";
1372                        aContent = this.Common.UNICODE.ConvertFromUnicode(aContent);
1373                        ostream.write(aContent, aContent.length);
1374                        ostream.close();
1375                        this.loadURL(this.Common.convertFilePathToURL(file.path),aFileid);
1376                }
1377        },
1378
1379/////////////////////////////////////////////////////////////////////
1380        getBaseDir : function(){
1381                var dir  = window.top.bitsMarkingCollection.getExtensionDir().clone();
1382                dir.append("treelist");
1383                if(!dir.exists()) dir.create(dir.DIRECTORY_TYPE, 0700);
1384                return dir;
1385        },
1386
1387/////////////////////////////////////////////////////////////////////
1388        getTreeListDir : function(){
1389                var dir  = this.getBaseDir().clone();
1390                dir.append(this._fileid);
1391                if(!dir.exists()) dir.create(dir.DIRECTORY_TYPE, 0700);
1392                return dir;
1393        },
1394
1395/////////////////////////////////////////////////////////////////////
1396        createXML : function(aFolder, aParentNode, aXSLPath, aDepth){
1397                var pfid = aFolder.fid;
1398                var title = aFolder.fid_title;
1399                var oidArr = [];
1400                var contResList;
1401                var f_dbtype = aFolder.dbtype;
1402                var objects = undefined;
1403                if(this._viewmode == "all"){
1404                        objects = this.Database.getObjectFormPID(pfid, f_dbtype);
1405                }else{
1406                        var doc_url = this.Common.getURLStringFromDocument(this.gBrowser.contentDocument);
1407                        objects = this.Database.getObject({pfid:pfid,doc_url:doc_url}, f_dbtype);
1408                }
1409                if(objects){
1410                        var i=0;
1411                        for(i=0;i<objects.length;i++){
1412                                oidArr.push(objects[i].oid);
1413                        }
1414                }
1415                var contResList = this.Database.getFolderFormPID(aFolder.fid,aFolder.dbtype,false);
1416                if(contResList){
1417                        var fcnt;
1418                        for(fcnt=0;fcnt<contResList.length;fcnt++){
1419                                oidArr.push(contResList[fcnt].fid);
1420                        }
1421                }
1422                if(aDepth == undefined) aDepth = 0;
1423                var aTab = "";
1424                var i;
1425                for(i=0;i<=aDepth;i++){
1426                        aTab += "  ";
1427                }
1428                var fNode = bitsTreeExportService.createElement("FOLDER",undefined,aParentNode,aTab);
1429                if(title != "") bitsTreeExportService.createElement("FID_TITLE",title,fNode,aTab+'  ');
1430                if(pfid != "") bitsTreeExportService.createElement("ID",aFolder.fid,fNode,aTab+'  ');
1431                if(oidArr.length>0) bitsTreeExportService.createElement("CHILDID",oidArr.join(","),fNode,aTab+'  ');
1432                if(contResList && contResList.length>0){
1433                        var fcnt;
1434                        for(fcnt=0;fcnt<contResList.length;fcnt++){
1435                                this.createXML(contResList[fcnt], fNode, aXSLPath, aDepth+1);
1436                        }
1437                }
1438                if(objects){
1439                        var i;
1440                        for(i=0;i<objects.length;i++){
1441                                this.createXMLObject(objects[i], fNode, aXSLPath, aDepth);
1442                        }
1443                }
1444        },
1445
1446/////////////////////////////////////////////////////////////////////
1447        createXMLFolder : function(aFolder, aParentNode, aDepth, oidArr){
1448                if(aDepth == undefined) aDepth = 0;
1449                var aTab = "";
1450                var i;
1451                for(i=0;i<=aDepth;i++){
1452                        aTab += "  ";
1453                }
1454                var fNode = bitsTreeExportService.createElement("FOLDER",undefined,aParentNode,aTab);
1455                if(aFolder.fid_title != "") bitsTreeExportService.createElement("FID_TITLE",aFolder.fid_title,fNode,aTab+'  ');
1456                if(aFolder.fid != "") bitsTreeExportService.createElement("ID",aFolder.fid,fNode,aTab+'  ');
1457                if(oidArr && oidArr.length>0) bitsTreeExportService.createElement("CHILDID",oidArr.join(","),fNode,aTab+'  ');
1458                return fNode;
1459        },
1460
1461/////////////////////////////////////////////////////////////////////
1462        createTreeDateXML : function(aObject, aParentNode, aXSLPath, aDepth){
1463                var oidArr = [];
1464                var contResList = undefined;
1465                var f_dbtype = aObject.dbtype;
1466                var objects = undefined;
1467                if(aXSLPath == this._listview_drag){
1468                        var param = {};
1469                        if(this._viewmode != "all") param.doc_url = this.Common.getURLStringFromDocument(this.gBrowser.contentDocument);
1470                        if(aObject.date && aObject.date.year){
1471                                param["substr(om_object.oid_date,7,4)"] = aObject.date.year;
1472                                if(aObject.date.month){
1473                                        param["substr(om_object.oid_date,1,2)"] = aObject.date.month;
1474                                        if(aObject.date.day) param["substr(om_object.oid_date,4,2)"] = aObject.date.day;
1475                                }
1476                        }
1477                        objects = this.Database.getObject(param, aObject.dbtype);
1478                }else{
1479                        contResList = aObject.childlen;
1480                        if(aObject.date && aObject.date.year && aObject.date.month && aObject.date.day){
1481                                var param = {};
1482                                param["substr(om_object.oid_date,7,4)"] = aObject.date.year;
1483                                param["substr(om_object.oid_date,1,2)"] = aObject.date.month;
1484                                param["substr(om_object.oid_date,4,2)"] = aObject.date.day;
1485                                if(this._viewmode != "all") param.doc_url = this.Common.getURLStringFromDocument(this.gBrowser.contentDocument);
1486                                objects = this.Database.getObject(param, aObject.dbtype);
1487                        }
1488                }
1489                if(objects){
1490                        objects.sort(function(a,b){
1491                                var a_date = Date.parse(a.oid_date);
1492                                var b_date = Date.parse(b.oid_date);
1493                                if(a_date < b_date) return -1;
1494                                if(a_date > b_date) return 1;
1495                                return 0;
1496                        });
1497                        var i=0;
1498                        for(i=0;i<objects.length;i++){
1499                                oidArr.push(objects[i].oid);
1500                        }
1501                }
1502                if(contResList && contResList.length>0){
1503                        var fid = "";
1504                        var fcnt;
1505                        for(fcnt=0;fcnt<contResList.length;fcnt++){
1506                                if(!contResList[fcnt].date) continue;
1507                                fid = "";
1508                                if(contResList[fcnt].date.year){
1509                                        fid += contResList[fcnt].date.year;
1510                                        if(contResList[fcnt].date.month){
1511                                                fid += contResList[fcnt].date.month;
1512                                                if(contResList[fcnt].date.day) fid += contResList[fcnt].date.day;
1513                                        }
1514                                }
1515                                oidArr.push(fid);
1516                        }
1517                }
1518                var aFolder = {
1519                        fid       : "",
1520                        fid_title : "",
1521                };
1522                if(aObject.date){
1523                        if(aObject.date.year){
1524                                aFolder.fid += aObject.date.year;
1525                                aFolder.fid_title += aObject.date.year;
1526                                if(aObject.date.month){
1527                                        aFolder.fid += aObject.date.month;
1528                                        aFolder.fid_title += '/'+aObject.date.month;
1529                                        if(aObject.date.day){
1530                                                aFolder.fid += aObject.date.day;
1531                                                aFolder.fid_title += '/'+aObject.date.day;
1532                                        }
1533                                }
1534                        }
1535                }else{
1536                        aFolder.fid="0";
1537                        aFolder.fid_title=aObject.text;
1538                }
1539                if(aDepth == undefined) aDepth = 0;
1540                var fNode = this.createXMLFolder(aFolder,aParentNode,aDepth,oidArr);
1541                if(contResList && contResList.length>0){
1542                        var fcnt;
1543                        for(fcnt=0;fcnt<contResList.length;fcnt++){
1544                                this.createTreeDateXML(contResList[fcnt], fNode, aXSLPath, aDepth+1);
1545                        }
1546                }
1547                if(objects){
1548                        var i;
1549                        for(i=0;i<objects.length;i++){
1550                                var oid_key = this.getObjectKey(objects[i]);
1551                                if(this.id2exists[oid_key]) continue;
1552                                this.id2exists[oid_key] = true;
1553                                this.createXMLObject(objects[i], fNode, aXSLPath, aDepth);
1554                        }
1555                }
1556        },
1557
1558/////////////////////////////////////////////////////////////////////
1559        createXMLObject : function(aObject, aParentNode, aXSLPath, aDepth){
1560                var oid_key = this.getObjectKey(aObject);
1561                var id2img = this.id2img;
1562                var id2type = this.id2type;
1563                var id2text = this.id2text;
1564                var id2uri = this.id2uri;
1565                var id2uri_content = this.id2uri_content;
1566                var id2st = this.id2st;
1567                var id2en = this.id2en;
1568                var id2date = this.id2date;
1569                var id2property = this.id2property;
1570                var id2dbtype = this.id2dbtype;
1571                var id2style = this.id2style;
1572                var id2Value = this.id2Value;
1573                var id2fid_title = this.id2fid_title;
1574                var id2pfid = this.id2pfid;
1575                if(aDepth == undefined) aDepth = 0;
1576                var aTab = "";
1577                var i;
1578                for(i=0;i<=aDepth;i++){
1579                        aTab += "  ";
1580                }
1581                var aContent = "";
1582                var oid = aObject.oid;
1583                var title = aObject.oid_title;
1584                var alink = "";
1585                var note = "";
1586                var structure = "";
1587                var hyperAnchor = "";
1588                var location_hash = "";
1589                var disp_image_size_x = "";
1590                var disp_image_size_y = "";
1591                var disp_image_size = "";
1592                var out_property = [];
1593                var xmldoc;
1594                var structureElem;
1595                if(id2property[oid_key]){
1596                        try{
1597                                var parser = new DOMParser();
1598                                xmldoc = parser.parseFromString(id2property[oid_key], "text/xml");
1599                                parser = undefined;
1600                        }catch(ex){}
1601                        if(xmldoc && xmldoc.documentElement.nodeName == "parsererror"){
1602                                id2property[oid_key] = "";
1603                                xmldoc = undefined;
1604                        }
1605                        if(xmldoc){
1606                                var xmlnode = xmldoc.getElementsByTagName("LINK")[0];
1607                                if(xmlnode) alink = this.xmlEncode(xmlnode.textContent);
1608                                xmlnode = xmldoc.getElementsByTagName("STRUCTURE")[0];
1609                                if(xmlnode && xmlnode.hasChildNodes()){
1610                                        structureElem = xmlnode.cloneNode(true);
1611                                }
1612                                xmlnode = xmldoc.getElementsByTagName("IMG_LIST_DISP_SIZE")[0];
1613                                if(xmlnode){
1614                                        disp_image_size = this.xmlEncode(xmlnode.textContent);
1615                                        if(disp_image_size.match(/^(\d+),(\d+)$/mg)){
1616                                                disp_image_size_x = RegExp.$1;
1617                                                disp_image_size_y = RegExp.$2;
1618                                        }
1619                                }
1620                                xmlnode = xmldoc.getElementsByTagName("NOTE")[0];
1621                                if(xmlnode){
1622                                        out_property["NOTE"] = {};
1623                                        out_property["NOTE"].type  = "text";
1624                                        out_property["NOTE"].value = xmlnode.textContent;
1625                                }
1626                                xmlnode = xmldoc.getElementsByTagName("HYPER_ANCHOR")[0];
1627                                if(xmlnode) hyperAnchor = xmlnode.textContent;
1628                                xmlnode = xmldoc.getElementsByTagName("LOCATION_HASH")[0];
1629                                if(xmlnode) location_hash = xmlnode.textContent;
1630                        }
1631                }
1632                var oNode = bitsTreeExportService.createElement("OBJECT",undefined,aParentNode,aTab+"  ");
1633                if(title != "") bitsTreeExportService.createElement("OID_TITLE",title,oNode,aTab+"    ");
1634                if(oid != ""){
1635                        bitsTreeExportService.createElement("ID",oid,oNode,aTab+"    ");
1636                        oNode.setAttribute("oid",oid);
1637                }
1638                var tag;
1639                for(tag in out_property){
1640                        if(typeof out_property[tag] == "function") continue;
1641                        var elem = bitsTreeExportService.createElement("OID_PROPERTY_"+tag,out_property[tag].value,oNode,aTab+"    ");
1642                        elem.setAttribute("type",out_property[tag].type);
1643                        if(id2dbtype[oid_key]) elem.setAttribute("dbtype",id2dbtype[oid_key]);
1644                        if(tag.toLowerCase() == "note") bitsTreeExportService.createElement("OID_NOTE",out_property[tag].value,oNode,aTab+"    ");
1645                }
1646                if(id2img[oid_key]) bitsTreeExportService.createElement("OID_IMG",id2img[oid_key],oNode,aTab+"    ");
1647                if(aXSLPath && disp_image_size_x && disp_image_size_y){
1648                        bitsTreeExportService.createElement("OID_IMG_DISP_WIDTH",disp_image_size_x,oNode,aTab+"    ");
1649                        bitsTreeExportService.createElement("OID_IMG_DISP_HEIGHT",disp_image_size_y,oNode,aTab+"    ");
1650                }
1651                if(alink != ""){
1652                        bitsTreeExportService.createElement("OID_TXT",alink,oNode,aTab+"    ");
1653                }else if(id2text[oid_key]){
1654                        bitsTreeExportService.createElement("OID_TXT",id2text[oid_key],oNode,aTab+"    ");
1655                }
1656                if(id2uri[oid_key]) bitsTreeExportService.createElement("DOC_URL",id2uri[oid_key],oNode,aTab+"    ");
1657                if(id2uri_content[oid_key]) bitsTreeExportService.createElement("CON_URL",id2uri_content[oid_key],oNode,aTab+"    ");
1658                if(id2st[oid_key]) bitsTreeExportService.createElement("BGN_DOM",id2st[oid_key],oNode,aTab+"    ");
1659                if(id2en[oid_key]) bitsTreeExportService.createElement("END_DOM",id2en[oid_key],oNode,aTab+"    ");
1660                if(id2date[oid_key]) bitsTreeExportService.createElement("OID_DATE",id2date[oid_key],oNode,aTab+"    ");
1661                if(hyperAnchor != ""){
1662                        if(location_hash != "") hyperAnchor = hyperAnchor.replace(/(#hyperanchor)/,'#'+location_hash+"$1");
1663                        bitsTreeExportService.createElement("HYPER_ANCHOR",hyperAnchor,oNode,aTab+"    ");
1664                }else if(id2uri_content[oid_key] && id2st[oid_key]){
1665                        var text = id2uri_content[oid_key] + '#hyperanchor:' + this.xmlEncode(id2st[oid_key]);
1666                        if(location_hash != "") text += '#' + location_hash;
1667                        text += '#hyperanchor:' + this.xmlEncode(id2st[oid_key]);
1668                        if(id2en[oid_key]) text += "&" + this.xmlEncode(id2en[oid_key]);
1669                        if(id2style[oid_key]) text += "&" + this.xmlEncode(id2style[oid_key]);
1670                        bitsTreeExportService.createElement("HYPER_ANCHOR",text,oNode,aTab+"    ");
1671                }
1672                if(this.id2folder[oid_key]){
1673                        var foldersNode = bitsTreeExportService.createElement("FOLDER_INFOS",undefined,oNode,aTab+"    ");
1674                        foldersNode.setAttribute("oid",oid);
1675                        if(id2dbtype[oid_key]) foldersNode.setAttribute("dbtype",id2dbtype[oid_key]);
1676                        for(var fcnt=0;fcnt<this.id2folder[oid_key].length;fcnt++){
1677                                var folderNode = bitsTreeExportService.createElement("FOLDER_INFO","",foldersNode,aTab+"      ");
1678                                folderNode.setAttribute("fid",this.id2folder[oid_key][fcnt].fid);
1679                                folderNode.setAttribute("fid_title",this.id2folder[oid_key][fcnt].fid_title);
1680                                folderNode.setAttribute("fid_style",this.id2folder[oid_key][fcnt].fid_style);
1681                                folderNode.setAttribute("oid",this.id2folder[oid_key][fcnt].oid);
1682                                folderNode.setAttribute("dbtype",this.id2folder[oid_key][fcnt].dbtype);
1683                        }
1684                }else{
1685                        if(id2style[oid_key]) bitsTreeExportService.createElement("FID_STYLE",id2style[oid_key],oNode,aTab+"    ");
1686                        if(id2fid_title[oid_key]) bitsTreeExportService.createElement("FID_TITLE",id2fid_title[oid_key],oNode,aTab+"    ");
1687                }
1688                if(id2pfid[oid_key]) bitsTreeExportService.createElement("PFID",id2pfid[oid_key],oNode,aTab+"    ");
1689                if(structureElem){
1690                        var elem = bitsTreeExportService.createElement("OID_STRUCTURE","",oNode,aTab+"    ");
1691                        var i;
1692                        for(i=0;i<structureElem.childNodes.length;i++){
1693                                elem.appendChild(structureElem.childNodes[i].cloneNode(true));
1694                        }
1695                }
1696                if(id2dbtype[oid_key]){
1697                        bitsTreeExportService.createElement("DBTYPE",id2dbtype[oid_key],oNode,aTab+"    ");
1698                        oNode.setAttribute("dbtype",id2dbtype[oid_key]);
1699                }
1700                if(id2Value[oid_key]) bitsTreeExportService.createElement("TREE_VALUE",id2Value[oid_key],oNode,aTab+"    ");
1701                if(this.id2icon[oid_key]) bitsTreeExportService.createElement("FAVICON",this.id2icon[oid_key],oNode,aTab+"    ");
1702                bitsTreeExportService.createElement("OID",oid,oNode,aTab+"    ");
1703        },
1704
1705/////////////////////////////////////////////////////////////////////
1706        mergeObject : function(aFolder,aObject){
1707                var mergeRtn = 0;
1708                if(aObject.oid_type != "text") return mergeRtn;
1709
1710                window.top.bitsScrapPartyMergeService._isCancel = false;
1711                window.top.bitsScrapPartyMergeService._isSameprocessing = false;
1712                window.top.bitsScrapPartyMergeService._isMergeMode = 0;
1713                window.top.bitsScrapPartyMergeService._isConfirm = false;
1714                var i;
1715                var mergeFlag = false;
1716                var dstObjects = this.Database.getObject({pfid:aFolder.fid,oid_title:aObject.oid_title}, aFolder.dbtype);
1717                if(!dstObjects || dstObjects.length == 0) return mergeRtn;
1718                mergeFlag = true;
1719                if(!mergeFlag) return mergeRtn;
1720                mergeRtn |= window.top.bitsScrapPartyMergeService._merge(aObject,aFolder);
1721                if(window.top.bitsScrapPartyMergeService.cancel) return -1;
1722                return mergeRtn;
1723        },
1724
1725/////////////////////////////////////////////////////////////////////
1726        copyObject : function(aFolder,aObject){
1727                var addObj = undefined;
1728                var pfid = aFolder.fid;
1729                var pdbtype = aFolder.dbtype;
1730                var pfid_order = this.Database.getMaxOrderFormPID(aFolder.fid,aFolder.dbtype);
1731                var exists = false;
1732                var i;
1733                var rtn = this.Database.existsObject({oid:aObject.oid,pfid:aFolder.fid},aFolder.dbtype);
1734                if(rtn){
1735                        exists = rtn;
1736                }else{
1737                        if(aObject.dbtype == aFolder.dbtype){
1738                                rtn = this.Database.addLink({oid:aObject.oid,pfid:aFolder.fid,pfid_order:++pfid_order},aFolder.dbtype);
1739                                addObj = {};
1740                                for(var key in aObject){
1741                                        addObj[key] = aObject[key];
1742                                }
1743                                addObj.pfid = aFolder.fid;
1744                                addObj.pfid_order = pfid_order;
1745                                addObj.dbtype = aFolder.dbtype;
1746                        }else{
1747                                var objs = this.Database.getObjectWithProperty({oid:aObject.oid,pfid:aObject.pfid},aObject.dbtype);
1748                                var blobs =this.Database.getObjectBLOB(aObject.oid,aObject.dbtype);
1749                                if(objs && objs.length>0) aObject = objs[0];
1750                                addObj = this.Database.newObject(aObject.oid,aFolder.dbtype);
1751                                var key;
1752                                for(key in aObject){
1753                                        if(key == "oid") continue;
1754                                        addObj[key] = aObject[key];
1755                                }
1756                                addObj.pfid = aFolder.fid;
1757                                delete addObj.dbtype;
1758                                delete addObj.fid_style;
1759                                rtn = this.Database.addObject(addObj,aFolder.dbtype);
1760                                if(rtn){
1761                                        if(blobs && blobs.length>0){
1762                                                this.Database.updateObjectBLOB(addObj.oid,blobs[0],aFolder.dbtype);
1763                                        }
1764                                }
1765                        }
1766                }
1767                if(exists) this.Common.alert(this.STRING.getString("ALERT_COPYOBJECT_EXISTS"));
1768                return addObj;
1769        },
1770
1771/////////////////////////////////////////////////////////////////////
1772        moveObject : function(aFolder,aObject,aModShift){
1773                try{
1774                        if(aModShift == undefined) aModShift = false;
1775                        var update = false;
1776                        if(update == false && aObject.dbtype == aFolder.dbtype && this.Database.existsObject({oid:aObject.oid,pfid:aFolder.fid},aFolder.dbtype)){
1777                                if(this.Common.confirm(this.STRING.getString("CONFIRM_COPYOBJECT_OVERWRITE"))){
1778                                        update = true;
1779                                }else{
1780                                        return false;
1781                                }
1782                        }
1783                        if(update && aObject.dbtype == aFolder.dbtype && this.Database.existsObject({oid:aObject.oid,pfid:aFolder.fid},aFolder.dbtype)){
1784                                var rtn = this.Database.removeLink({oid:aObject.oid,pfid:aFolder.fid},aFolder.dbtype);
1785                        }
1786                        var addObj = this._moveObject(aFolder,aObject,aModShift);
1787                        return addObj;
1788                }catch(e){
1789                        this._dump("bitsTreeListService.moveObject():"+e);
1790                        return undefined;
1791                }
1792        },
1793
1794        _moveObject : function(aFolder,aObject,aModShift){
1795                var addObj = undefined;
1796                var rtn;
1797                var pfid_order = this.Database.getMaxOrderFormPID(aFolder.fid,aFolder.dbtype);
1798                var old_source = bitsMarker.id_key+aObject.dbtype+aObject.oid;
1799                var new_source = bitsMarker.id_key;
1800                if(aObject.dbtype == aFolder.dbtype){
1801                        rtn = this.Database.updateObject({oid:aObject.oid,pfid:aFolder.fid,pfid_old:aObject.pfid,pfid_order:++pfid_order},aFolder.dbtype);
1802                        new_source += aFolder.dbtype+aObject.oid;
1803                        addObj = aObject;
1804                }else{
1805                        var objs = this.Database.getObjectWithProperty({oid:aObject.oid,pfid:aObject.pfid},aObject.dbtype);
1806                        var blobs =this.Database.getObjectBLOB(aObject.oid,aObject.dbtype);
1807                        if(objs && objs.length>0) aObject = objs[0];
1808                        addObj = this.Database.newObject(aObject.oid,aFolder.dbtype);
1809                        var key;
1810                        for(key in aObject){
1811                                if(key == "oid") continue;
1812                                addObj[key] = aObject[key];
1813                        }
1814                        addObj.pfid = aFolder.fid;
1815                        addObj.pfid_order = ++pfid_order;
1816                        delete addObj.dbtype;
1817                        delete addObj.fid_style;
1818                        rtn = this.Database.addObject(addObj,aFolder.dbtype);
1819                        if(rtn && blobs && blobs.length>0) this.Database.updateObjectBLOB(addObj.oid,blobs[0],aFolder.dbtype);
1820                        if(rtn && aModShift) rtn = this.Database.removeObject(aObject,aObject.dbtype);
1821                        new_source += aFolder.dbtype+addObj.oid;
1822                }
1823                this.Common.changeNodeStyleFromID(old_source,aFolder.fid_style,addObj.pfid,addObj.oid,aFolder.dbtype);
1824                return addObj;
1825        },
1826
1827/////////////////////////////////////////////////////////////////////
1828        _dump : function(aString){
1829                window.top.bitsMarkingCollection._dump(aString);
1830        },
1831
1832};
Note: See TracBrowser for help on using the repository browser.