1 /* js for download progress */ |
|
2 |
|
3 var debugDownloadSignals = true; |
|
4 |
|
5 // Generate HTML to populate download DIV element. |
|
6 |
|
7 function downloadProgressHTML() |
|
8 { |
|
9 var html = |
|
10 '<div class="DownloadFile" id="DownloadFile"></div>' + |
|
11 '<div class="DownloadMeter" id="DownloadMeter" style="width: 200px">' + |
|
12 '<div class="DownloadProgress" id="DownloadProgress" style="width: 0px"></div>' + |
|
13 '<div class="DownloadCounter" id="DownloadCounter" style="left: 210px"></div>' + |
|
14 '</div>'; |
|
15 |
|
16 // FIXME ;;; replace form with pure div/css button |
|
17 |
|
18 html += |
|
19 '<form name="DownloadForm" action="">' + |
|
20 '<input type="button" name="DownloadButton" value="Clear" ' + |
|
21 'onClick="window.snippets.DownloadId.hide();">' + |
|
22 '</form>'; |
|
23 |
|
24 return html; |
|
25 } |
|
26 |
|
27 function downloadErrorHTML(file, error) |
|
28 { |
|
29 var html = |
|
30 '<div class="DownloadFile" id="DownloadFile">' + file + '</div>' + |
|
31 '<div class="DownloadError" id="DownloadError">ERROR: ' + error + '</div>'; |
|
32 |
|
33 return html; |
|
34 } |
|
35 |
|
36 function writeDownloadEmpty() |
|
37 { |
|
38 document.write(downloadProgressHTML()); |
|
39 } |
|
40 |
|
41 // Initialize download DIV. |
|
42 |
|
43 function Download() |
|
44 { |
|
45 this.write = writeDownloadEmpty; |
|
46 |
|
47 this.write(); |
|
48 } |
|
49 |
|
50 // Update HTML. |
|
51 |
|
52 function setDownloadHTML(html) |
|
53 { |
|
54 var dlElem = document.getElementById("DownloadId"); |
|
55 dlElem.innerHTML = html; |
|
56 } |
|
57 |
|
58 function setDownloadFile(file) |
|
59 { |
|
60 var dlFile = document.getElementById("DownloadFile"); |
|
61 dlFile.innerHTML = file; |
|
62 } |
|
63 |
|
64 function setDownloadPercent(percent) |
|
65 { |
|
66 var outer = document.getElementById("DownloadMeter"); |
|
67 var inner = document.getElementById("DownloadProgress"); |
|
68 var counter = document.getElementById("DownloadCounter"); |
|
69 |
|
70 var outerWidthStyle = outer.style.width; |
|
71 var innerWidthStyle = inner.style.width; |
|
72 var counterLeftStyle = counter.style.left; |
|
73 |
|
74 var outerWidthNum = parseInt(outerWidthStyle); |
|
75 var innerWidthNum = parseInt(innerWidthStyle); |
|
76 var counterLeftNum = parseInt(counterLeftStyle); |
|
77 |
|
78 innerWidthNum = Math.floor(outerWidthNum * percent / 100.0); |
|
79 innerWidthStyle = innerWidthStyle.replace(/^\d+/, innerWidthNum); |
|
80 |
|
81 counterLeftNum = outerWidthNum + 10 - innerWidthNum; |
|
82 counterLeftStyle = counterLeftStyle.replace(/^\d+/, counterLeftNum); |
|
83 |
|
84 inner.style.width = innerWidthStyle; |
|
85 counter.style.left = counterLeftStyle; |
|
86 counter.style.width = "" + (innerWidthNum + 50) + "px"; |
|
87 |
|
88 counter.innerHTML = "" + percent + "%"; |
|
89 } |
|
90 |
|
91 function setDownloadSize(size, sofar, percent) |
|
92 { |
|
93 if (size >= 0) { |
|
94 setDownloadPercent(percent); |
|
95 } else { |
|
96 var counter = document.getElementById("DownloadCounter"); |
|
97 counter.innerHTML = "" + sofar + " bytes"; |
|
98 } |
|
99 } |
|
100 |
|
101 // Connect to relevant ChromeJSObject signals. |
|
102 |
|
103 window.chrome.onDownloadCreated.connect( |
|
104 function(id) { |
|
105 if (debugDownloadSignals) { |
|
106 window.chrome.alert("JS received signal onDownloadCreated"); |
|
107 window.chrome.alert("id=" + id); |
|
108 } |
|
109 window.snippets.DownloadId.show(); |
|
110 setDownloadHTML(downloadProgressHTML()); |
|
111 } |
|
112 ); |
|
113 |
|
114 window.chrome.onDownloadStarted.connect( |
|
115 function(id, file, size) { |
|
116 if (debugDownloadSignals) { |
|
117 window.chrome.alert("JS received signal onDownloadStarted"); |
|
118 window.chrome.alert("id=" + id); |
|
119 window.chrome.alert("file=" + file); |
|
120 window.chrome.alert("size=" + size); |
|
121 } |
|
122 setDownloadFile(file); |
|
123 } |
|
124 ); |
|
125 |
|
126 window.chrome.onDownloadProgress.connect( |
|
127 function(id, file, size, sofar, percent) { |
|
128 if (debugDownloadSignals) { |
|
129 window.chrome.alert("JS received signal onDownloadProgress"); |
|
130 window.chrome.alert("id=" + id); |
|
131 window.chrome.alert("file=" + file); |
|
132 window.chrome.alert("size=" + size); |
|
133 window.chrome.alert("sofar=" + sofar); |
|
134 window.chrome.alert("percent=" + percent); |
|
135 } |
|
136 setDownloadFile(file); |
|
137 setDownloadSize(size, sofar, percent); |
|
138 } |
|
139 ); |
|
140 |
|
141 window.chrome.onDownloadFinished.connect( |
|
142 function(id, file, size, sofar, percent) { |
|
143 if (debugDownloadSignals) { |
|
144 window.chrome.alert("JS received signal onDownloadFinished"); |
|
145 window.chrome.alert("id=" + id); |
|
146 window.chrome.alert("file=" + file); |
|
147 window.chrome.alert("size=" + size); |
|
148 window.chrome.alert("sofar=" + sofar); |
|
149 window.chrome.alert("percent=" + percent); |
|
150 } |
|
151 setDownloadFile(file); |
|
152 setDownloadSize(size, sofar, percent); |
|
153 } |
|
154 ); |
|
155 |
|
156 window.chrome.onDownloadPaused.connect( |
|
157 function(id, file, size, sofar, percent, error) { |
|
158 if (debugDownloadSignals) { |
|
159 window.chrome.alert("JS received signal onDownloadPaused"); |
|
160 window.chrome.alert("id=" + id); |
|
161 window.chrome.alert("file=" + file); |
|
162 window.chrome.alert("size=" + size); |
|
163 window.chrome.alert("sofar=" + sofar); |
|
164 window.chrome.alert("percent=" + percent); |
|
165 window.chrome.alert("error=" + error); |
|
166 } |
|
167 setDownloadHTML(downloadErrorHTML(file, error)); |
|
168 } |
|
169 ); |
|
170 |
|
171 window.chrome.onDownloadCancelled.connect( |
|
172 function(id, file, size, sofar, percent, error) { |
|
173 if (debugDownloadSignals) { |
|
174 window.chrome.alert("JS received signal onDownloadCancelled"); |
|
175 window.chrome.alert("id=" + id); |
|
176 window.chrome.alert("file=" + file); |
|
177 window.chrome.alert("size=" + size); |
|
178 window.chrome.alert("sofar=" + sofar); |
|
179 window.chrome.alert("percent=" + percent); |
|
180 window.chrome.alert("error=" + error); |
|
181 } |
|
182 setDownloadHTML(downloadErrorHTML(file, error)); |
|
183 } |
|
184 ); |
|
185 |
|
186 window.chrome.onDownloadFailed.connect( |
|
187 function(id, file, size, sofar, percent, error) { |
|
188 if (debugDownloadSignals) { |
|
189 window.chrome.alert("JS received signal onDownloadFailed"); |
|
190 window.chrome.alert("id=" + id); |
|
191 window.chrome.alert("file=" + file); |
|
192 window.chrome.alert("size=" + size); |
|
193 window.chrome.alert("sofar=" + sofar); |
|
194 window.chrome.alert("percent=" + percent); |
|
195 window.chrome.alert("error=" + error); |
|
196 } |
|
197 setDownloadHTML(downloadErrorHTML(file, error)); |
|
198 } |
|
199 ); |
|
200 |
|
201 window.chrome.onDownloadNetworkLoss.connect( |
|
202 function(id, file, size, sofar, percent, error) { |
|
203 if (debugDownloadSignals) { |
|
204 window.chrome.alert("JS received signal onDownloadNetworkLoss"); |
|
205 window.chrome.alert("id=" + id); |
|
206 window.chrome.alert("file=" + file); |
|
207 window.chrome.alert("size=" + size); |
|
208 window.chrome.alert("sofar=" + sofar); |
|
209 window.chrome.alert("percent=" + percent); |
|
210 window.chrome.alert("error=" + error); |
|
211 } |
|
212 setDownloadHTML(downloadErrorHTML(file, error)); |
|
213 } |
|
214 ); |
|
215 |
|
216 window.chrome.onDownloadError.connect( |
|
217 function(id, file, size, sofar, percent, error) { |
|
218 if (debugDownloadSignals) { |
|
219 window.chrome.alert("JS received signal onDownloadError"); |
|
220 window.chrome.alert("id=" + id); |
|
221 window.chrome.alert("file=" + file); |
|
222 window.chrome.alert("size=" + size); |
|
223 window.chrome.alert("sofar=" + sofar); |
|
224 window.chrome.alert("percent=" + percent); |
|
225 window.chrome.alert("error=" + error); |
|
226 } |
|
227 setDownloadHTML(downloadErrorHTML(file, error)); |
|
228 } |
|
229 ); |
|