1 | var mcTreeFolderFilterService = { |
---|
2 | item : null, |
---|
3 | |
---|
4 | get KEYWORD() { return document.getElementById("mcTreeFolderFilterKeyword"); }, |
---|
5 | get AVAILABLENESS() { return document.getElementById("mcTreeFolderFilterAvailableness"); }, |
---|
6 | get INVALIDATION() { return document.getElementById("mcTreeFolderFilterInvalidation"); }, |
---|
7 | get CASESENSITIVE() { return document.getElementById("mcTreeFolderFilterCasesensitive"); }, |
---|
8 | |
---|
9 | get DataSource() { try{return window.opener.top.bitsObjectMng.DataSource;}catch(ex){return window.top.bitsObjectMng.DataSource;} }, |
---|
10 | get Common() { try{return window.opener.top.bitsObjectMng.Common;}catch(ex){return null;} }, |
---|
11 | get XPath() { try{return window.opener.top.bitsObjectMng.XPath;}catch(ex){return null;} }, |
---|
12 | get Database() { try{return window.opener.top.bitsObjectMng.Database;}catch(ex){return null;} }, |
---|
13 | get gBrowser() { try{return window.opener.top.bitsObjectMng.getBrowser();}catch(ex){return null;}}, |
---|
14 | |
---|
15 | init : function(){ |
---|
16 | try { |
---|
17 | this.item = window.arguments[0]; |
---|
18 | }catch(ex){ |
---|
19 | } |
---|
20 | if(!this.item) return; |
---|
21 | try { |
---|
22 | document.title += " [" + this.item.title + "]"; |
---|
23 | var i; |
---|
24 | var folder = nsPreferences.copyUnicharPref("wiredmarker.filter.folder",""); |
---|
25 | var folderArr = folder.split("\t"); |
---|
26 | var folderHash = []; |
---|
27 | var folderCasesensitive = []; |
---|
28 | for(i=0;i<folderArr.length;i++){ |
---|
29 | if(!folderArr[i].match(/^(\d+):(\d+):(.+)$/)) continue; |
---|
30 | folderHash[RegExp.$1] = RegExp.$3 |
---|
31 | folderCasesensitive[RegExp.$1] = RegExp.$2 |
---|
32 | } |
---|
33 | var keyword = nsPreferences.copyUnicharPref("wiredmarker.filter.keyword",""); |
---|
34 | var keywordArr = keyword.split("\t"); |
---|
35 | if(keywordArr.length>0){ |
---|
36 | for(i=0;i<keywordArr.length&&i<10;i++){ |
---|
37 | this.KEYWORD.appendItem(keywordArr[i],keywordArr[i]); |
---|
38 | if(folderHash[this.item.id] && folderHash[this.item.id] == keywordArr[i]) this.KEYWORD.selectedIndex = i; |
---|
39 | } |
---|
40 | } |
---|
41 | if(folderHash[this.item.id]){ |
---|
42 | this.INVALIDATION.removeAttribute("selected"); |
---|
43 | this.AVAILABLENESS.setAttribute("selected",true); |
---|
44 | this.KEYWORD.removeAttribute("disabled"); |
---|
45 | this.CASESENSITIVE.removeAttribute("disabled"); |
---|
46 | this.CASESENSITIVE.setAttribute("checked",folderCasesensitive[this.item.id]!=0); |
---|
47 | }else{ |
---|
48 | this.AVAILABLENESS.removeAttribute("selected"); |
---|
49 | this.INVALIDATION.setAttribute("selected",true); |
---|
50 | this.KEYWORD.setAttribute("disabled",true); |
---|
51 | this.CASESENSITIVE.setAttribute("disabled",true); |
---|
52 | } |
---|
53 | }catch(ex){ |
---|
54 | this._dump(ex); |
---|
55 | } |
---|
56 | return; |
---|
57 | }, |
---|
58 | |
---|
59 | done : function(){}, |
---|
60 | |
---|
61 | accept : function(){ |
---|
62 | var disabled = this.KEYWORD.getAttribute("disabled"); |
---|
63 | var newVals = { |
---|
64 | keyword : !disabled?this.KEYWORD.value:"", |
---|
65 | }; |
---|
66 | var props; |
---|
67 | for(props in newVals){ |
---|
68 | window.arguments[0][props] = newVals[props]; |
---|
69 | window.arguments[0].accept = true; |
---|
70 | if(props != "keyword") continue; |
---|
71 | var i; |
---|
72 | var keyword = nsPreferences.copyUnicharPref("wiredmarker.filter.keyword",""); |
---|
73 | var keywordArr = keyword.split("\t"); |
---|
74 | var newArr = []; |
---|
75 | newArr.unshift(newVals[props]); |
---|
76 | for(i=0;i<keywordArr.length;i++){ |
---|
77 | if(keywordArr[i] == newVals[props] || keywordArr[i] == "") continue; |
---|
78 | newArr.push(keywordArr[i]); |
---|
79 | } |
---|
80 | nsPreferences.setUnicharPref("wiredmarker.filter.keyword", newArr.join("\t")); |
---|
81 | var folder = nsPreferences.copyUnicharPref("wiredmarker.filter.folder",""); |
---|
82 | var folderArr = folder.split("\t"); |
---|
83 | var folderHash = []; |
---|
84 | var folderCasesensitive = []; |
---|
85 | for(i=0;i<folderArr.length;i++){ |
---|
86 | if(!folderArr[i].match(/^(\d+):(\d+):(.+)$/)) continue; |
---|
87 | folderHash[RegExp.$1] = RegExp.$3; |
---|
88 | folderCasesensitive[RegExp.$1] = RegExp.$2; |
---|
89 | } |
---|
90 | if(newVals[props] != ""){ |
---|
91 | folderHash[this.item.id] = newVals[props]; |
---|
92 | folderCasesensitive[this.item.id] = this.CASESENSITIVE.checked?1:0; |
---|
93 | }else{ |
---|
94 | delete folderHash[this.item.id]; |
---|
95 | } |
---|
96 | newArr = []; |
---|
97 | var key; |
---|
98 | for(key in folderHash){ |
---|
99 | if(typeof folderHash[key] == "function") continue; |
---|
100 | newArr.push(key+":"+folderCasesensitive[key]+":"+folderHash[key]); |
---|
101 | } |
---|
102 | nsPreferences.setUnicharPref("wiredmarker.filter.folder", newArr.join("\t")); |
---|
103 | } |
---|
104 | }, |
---|
105 | |
---|
106 | cancel : function(){ |
---|
107 | if(window.arguments[0]) window.arguments[0].accept = false; |
---|
108 | }, |
---|
109 | |
---|
110 | radio : function(aEvent){ |
---|
111 | mcTreeFolderFilterService._dump(aEvent.target.id); |
---|
112 | if(this.AVAILABLENESS == aEvent.target){ |
---|
113 | this.KEYWORD.removeAttribute("disabled"); |
---|
114 | this.CASESENSITIVE.removeAttribute("disabled"); |
---|
115 | }else{ |
---|
116 | this.KEYWORD.setAttribute("disabled",true); |
---|
117 | this.CASESENSITIVE.setAttribute("disabled",true); |
---|
118 | } |
---|
119 | }, |
---|
120 | |
---|
121 | checkbox : function(aEvent){}, |
---|
122 | |
---|
123 | onCommand : function(aEvent){ |
---|
124 | var rtn = false; |
---|
125 | var curIdx = mcTreeHandler.TREE.currentIndex; |
---|
126 | if(curIdx<0) return; |
---|
127 | if(!mcTreeHandler.TREE.view.isContainer(curIdx)) return; |
---|
128 | var aRes = mcTreeHandler.TREE.builderView.getResourceAtIndex(curIdx); |
---|
129 | var fid = window.top.bitsObjectMng.DataSource.getProperty(aRes,"id"); |
---|
130 | var result = {}; |
---|
131 | result.title = window.top.bitsObjectMng.DataSource.getProperty(aRes,"title"); |
---|
132 | result.id = fid; |
---|
133 | result.keyword = ""; |
---|
134 | result.accept = true; |
---|
135 | window.openDialog("chrome://markingcollection/content/treefolderfilter.xul", "", "chrome,centerscreen,modal", result); |
---|
136 | if(!result.accept) return; |
---|
137 | this._dump("result.keyword=["+result.keyword+"]") |
---|
138 | mcTreeViewModeService.rebuild(); |
---|
139 | }, |
---|
140 | |
---|
141 | isUseFilter : function(aRes){ |
---|
142 | var fid = this.DataSource.getProperty(aRes,"id"); |
---|
143 | var i; |
---|
144 | var folder = nsPreferences.copyUnicharPref("wiredmarker.filter.folder",""); |
---|
145 | var folderArr = folder.split("\t"); |
---|
146 | var folderHash = []; |
---|
147 | for(i=0;i<folderArr.length;i++){ |
---|
148 | if(!folderArr[i].match(/^(\d+):(.+)$/)) continue; |
---|
149 | folderHash[RegExp.$1] = RegExp.$2 |
---|
150 | } |
---|
151 | return (folderHash[fid] != undefined); |
---|
152 | }, |
---|
153 | |
---|
154 | _dump : function(aString){ |
---|
155 | try{ window.opener.top.bitsMarkingCollection._dump(aString); } catch(e){} |
---|
156 | }, |
---|
157 | }; |
---|