1 | var mcReplacedURL = { |
---|
2 | |
---|
3 | get STRING() { return document.getElementById("mcRepString"); }, |
---|
4 | get SEARCHLIST() { return document.getElementById("mcRepSearchMenulist"); }, |
---|
5 | get REPLACETEXT(){ return document.getElementById("mcRepReplaceTextbox"); }, |
---|
6 | get ACCEPTBTN() { return document.getElementById("mcRepDialog").getButton("accept"); }, |
---|
7 | get REPLACEBTN() { return document.getElementById("mcRepReplaceButton"); }, |
---|
8 | get REPLACETAR() { return document.getElementById("mcRepTargetDirectory"); }, |
---|
9 | |
---|
10 | get DataSource() { return window.opener.top.bitsObjectMng.DataSource; }, |
---|
11 | get Common() { return window.opener.top.bitsObjectMng.Common; }, |
---|
12 | get XPath() { return window.opener.top.bitsObjectMng.XPath; }, |
---|
13 | get Database() { return window.opener.top.bitsObjectMng.Database; }, |
---|
14 | get XML() { return window.opener.top.bitsObjectMng.XML; }, |
---|
15 | get gBrowser() { return window.opener.top.bitsObjectMng.getBrowser();}, |
---|
16 | |
---|
17 | item : null, |
---|
18 | resource : null, |
---|
19 | property : "", |
---|
20 | changed : false, |
---|
21 | |
---|
22 | init : function(){ |
---|
23 | this.item = window.arguments[0]; |
---|
24 | this.resource = this.item.res; |
---|
25 | this.list = this.item.list; |
---|
26 | this.objArr = []; |
---|
27 | this.id2changed = []; |
---|
28 | var dbtype = this.DataSource.getProperty(this.resource, "dbtype"); |
---|
29 | var i; |
---|
30 | for(i=0;i<this.list.length;i++){ |
---|
31 | this.objArr.push(this.list[i]); |
---|
32 | this.id2changed[this.list[i].oid] = false; |
---|
33 | } |
---|
34 | this.remakeList(); |
---|
35 | var title = this.STRING.getString("REPLACED_URL"); |
---|
36 | document.title = title + " [ " + this.DataSource.getProperty(this.resource, "title") + " ]"; |
---|
37 | window.sizeToContent(); |
---|
38 | var width = window.opener.top.innerWidth - 50; |
---|
39 | window.resizeTo(width,window.outerHeight); |
---|
40 | if(this.ACCEPTBTN) this.ACCEPTBTN.setAttribute("disabled","true"); |
---|
41 | if(this.REPLACEBTN) this.REPLACEBTN.setAttribute("disabled","true"); |
---|
42 | }, |
---|
43 | |
---|
44 | remakeList : function(){ |
---|
45 | var i,key; |
---|
46 | var hash = []; |
---|
47 | var aURI; |
---|
48 | var aURL; |
---|
49 | for(i=0;i<this.objArr.length;i++){ |
---|
50 | var uri = this.objArr[i].doc_url; |
---|
51 | if(this.REPLACETAR.selected){ |
---|
52 | aURI = Components.classes['@mozilla.org/network/standard-url;1'].createInstance(Components.interfaces.nsIURI); |
---|
53 | aURI.spec = uri; |
---|
54 | aURL = aURI.QueryInterface(Components.interfaces.nsIURL); |
---|
55 | uri = aURL.prePath+aURL.directory; |
---|
56 | } |
---|
57 | hash[uri] = ""; |
---|
58 | } |
---|
59 | var arr = []; |
---|
60 | for(key in hash){ |
---|
61 | if(typeof hash[key] == "function") continue; |
---|
62 | arr.push(key); |
---|
63 | } |
---|
64 | arr.sort(); |
---|
65 | this.SEARCHLIST.removeAllItems(); |
---|
66 | this.SEARCHLIST.value = ""; |
---|
67 | for(i=0;i<arr.length;i++){ |
---|
68 | this.SEARCHLIST.appendItem(arr[i],"",""); |
---|
69 | } |
---|
70 | }, |
---|
71 | |
---|
72 | changeTarget : function(){ |
---|
73 | this.remakeList(); |
---|
74 | }, |
---|
75 | |
---|
76 | change : function(){ |
---|
77 | var searched_text = this.SEARCHLIST.value; |
---|
78 | var replaced_text = this.REPLACETEXT.value; |
---|
79 | if(!searched_text || searched_text == "" || !replaced_text || replaced_text == ""){ |
---|
80 | this.REPLACEBTN.setAttribute("disabled","true"); |
---|
81 | }else{ |
---|
82 | this.REPLACEBTN.removeAttribute("disabled"); |
---|
83 | } |
---|
84 | }, |
---|
85 | |
---|
86 | displayURL : function(){ |
---|
87 | var uri = this.gBrowser.contentDocument.location.href; |
---|
88 | if(this.REPLACETAR.selected){ |
---|
89 | var aURI = Components.classes['@mozilla.org/network/standard-url;1'].createInstance(Components.interfaces.nsIURI); |
---|
90 | aURI.spec = uri; |
---|
91 | var aURL = aURI.QueryInterface(Components.interfaces.nsIURL); |
---|
92 | uri = aURL.prePath+aURL.directory; |
---|
93 | } |
---|
94 | this.REPLACETEXT.value = uri; |
---|
95 | this.change(); |
---|
96 | }, |
---|
97 | |
---|
98 | folderURL : function(){ |
---|
99 | var folder = this.getFolder(); |
---|
100 | if(!folder) return; |
---|
101 | this.REPLACETEXT.value = this.Common.convertFilePathToURL(folder.path); |
---|
102 | this.change(); |
---|
103 | }, |
---|
104 | |
---|
105 | getFolder : function (){ |
---|
106 | var picker = Components.classes["@mozilla.org/filepicker;1"].createInstance(Components.interfaces.nsIFilePicker); |
---|
107 | var result = null; |
---|
108 | try{ |
---|
109 | picker.init(window, "Selected Folder", picker.modeGetFolder); |
---|
110 | var showResult = picker.show(); |
---|
111 | if(showResult == picker.returnOK){ |
---|
112 | result = picker.file; |
---|
113 | }else if(showResult == picker.returnReplace){ |
---|
114 | if(picker.file.exists()) picker.file.remove(false); |
---|
115 | result = picker.file; |
---|
116 | } |
---|
117 | }catch(e){ |
---|
118 | result = null; |
---|
119 | } |
---|
120 | return result; |
---|
121 | }, |
---|
122 | |
---|
123 | replaced : function(){ |
---|
124 | var searched_text = this.SEARCHLIST.value; |
---|
125 | var replaced_text = this.REPLACETEXT.value; |
---|
126 | if(!searched_text || searched_text == "") return; |
---|
127 | var replacedNum = 0; |
---|
128 | var i; |
---|
129 | for(i=0;i<this.objArr.length;i++){ |
---|
130 | if(this.objArr[i].doc_url.indexOf(searched_text)>=0){ |
---|
131 | replacedNum++; |
---|
132 | }else if(this.objArr[i].con_url.indexOf(searched_text)>=0){ |
---|
133 | replacedNum++; |
---|
134 | } |
---|
135 | } |
---|
136 | if(replacedNum==0){ |
---|
137 | this.Common.alert(this.STRING.getString("ALERT_REPLACED_URL"),undefined,window); |
---|
138 | return; |
---|
139 | } |
---|
140 | var title = this.STRING.getString("CONFIRM_REPLACED_URL"); |
---|
141 | if(!this.Common.confirm("[ "+replacedNum + " ] " + title,undefined,undefined,undefined,undefined,window)) return; |
---|
142 | var parser = new DOMParser(); |
---|
143 | var s = new XMLSerializer(); |
---|
144 | for(i=0;i<this.objArr.length;i++){ |
---|
145 | if(this.objArr[i].doc_url.indexOf(searched_text)>=0){ |
---|
146 | this.objArr[i].doc_url = this.objArr[i].doc_url.replace(searched_text, replaced_text); |
---|
147 | this.id2changed[this.objArr[i].oid] = true; |
---|
148 | } |
---|
149 | if(this.objArr[i].con_url.indexOf(searched_text)>=0){ |
---|
150 | this.objArr[i].con_url = this.objArr[i].con_url.replace(searched_text, replaced_text); |
---|
151 | this.id2changed[this.objArr[i].oid] = true; |
---|
152 | } |
---|
153 | if(this.objArr[i].oid_property){ |
---|
154 | try{ var xmldoc = parser.parseFromString(this.objArr[i].oid_property,"text/xml"); }catch(e){xmldoc = null; } |
---|
155 | if(xmldoc && xmldoc.documentElement){ |
---|
156 | var xmlnode = xmldoc.getElementsByTagName("HYPER_ANCHOR")[0]; |
---|
157 | if(xmlnode && xmlnode.textContent.indexOf(searched_text)>=0){ |
---|
158 | var hyperAnchor = xmlnode.textContent; |
---|
159 | while(xmlnode.hasChildNodes()){ |
---|
160 | xmlnode.removeChild(xmlnode.lastChild); |
---|
161 | } |
---|
162 | hyperAnchor = hyperAnchor.replace(searched_text, replaced_text); |
---|
163 | xmlnode.appendChild(xmldoc.createTextNode(hyperAnchor)); |
---|
164 | this.objArr[i].oid_property = s.serializeToString(xmldoc); |
---|
165 | } |
---|
166 | } |
---|
167 | } |
---|
168 | this.changed |= this.id2changed[this.objArr[i].oid]; |
---|
169 | } |
---|
170 | s = undefined; |
---|
171 | parser = undefined; |
---|
172 | if(this.changed && this.ACCEPTBTN) this.ACCEPTBTN.removeAttribute("disabled"); |
---|
173 | this.remakeList(); |
---|
174 | }, |
---|
175 | |
---|
176 | accept : function(){ |
---|
177 | var rtnArr = []; |
---|
178 | var i; |
---|
179 | for(i=0;i<this.objArr.length;i++){ |
---|
180 | if(!this.id2changed[this.objArr[i].oid]) continue; |
---|
181 | rtnArr.push(this.objArr[i]); |
---|
182 | } |
---|
183 | if(window.arguments[0]){ |
---|
184 | if(rtnArr.length>0) window.arguments[0].objArr = rtnArr; |
---|
185 | window.arguments[0].accept = this.changed; |
---|
186 | if(window.arguments[0].callback) window.arguments[0].callback(window.arguments[0]); |
---|
187 | } |
---|
188 | }, |
---|
189 | |
---|
190 | cancel : function(){ |
---|
191 | if(window.arguments[0]) window.arguments[0].accept = false; |
---|
192 | }, |
---|
193 | }; |
---|
194 | |
---|
195 | |
---|
196 | function _dump(aString){ |
---|
197 | window.opener.top.bitsMarkingCollection._dump(aString); |
---|
198 | } |
---|
199 | |
---|