source: branches/2.2/filemanager/js/connector.js @ 3879

Revision 3879, 7.8 KB checked in by alexandrecorreia, 13 years ago (diff)

Ticket #1648 - Correcao( codigo ) e melhoria( laytou/informacao ) no upload de arquivos para o servidor.

Line 
1var progressBar;
2
3if (document.all)
4{
5        navigator.userAgent.toLowerCase().indexOf('msie 5') != -1 ? is_ie5 = true : is_ie5 = false;
6        is_ie = true;
7        is_moz1_6 = false;
8        is_mozilla = false;
9        is_ns4 = false;
10}
11else if (document.getElementById)
12{
13        navigator.userAgent.toLowerCase().match('mozilla.*rv[:]1\.6.*gecko') ? is_moz1_6 = true : is_moz1_6 = false;
14        is_ie = false;
15        is_ie5 = false;
16        is_mozilla = true;
17        is_ns4 = false;
18}
19else if (document.layers)
20{
21        is_ie = false;
22        is_ie5 = false
23        is_moz1_6 = false;
24        is_mozilla = false;
25        is_ns4 = true;
26}
27
28/****************************************** Connector Class *************************************************/
29// Constructor
30function cConnector()
31{
32        this.requests = new Array();
33        this.oxmlhttp = null;
34        this.isVisibleBar = false;
35        this.tid = 0;
36        this.progressBar = null;
37        this.oldX = 0;
38        this.oldY = 0;
39        this.updateVersion = "";
40}
41cConnector.prototype.buildBar = function()
42{
43        var div = document.getElementById('divProgressBar');
44
45        if(! div) {
46                div = document.createElement("DIV");
47                //div.style.visibility  = "hidden";
48                div.style.width = "103px";
49                div.id = 'divProgressBar';
50                div.align = "center";
51                div.innerHTML = '&nbsp;&nbsp;<font face="Verdana" size="2" color="WHITE">'+get_lang('loading')+'...</font>&nbsp;';
52                div.style.background = "#cc4444";
53                div.style.position = 'fixed';
54                div.style.top = '0px';
55                div.style.right = '0px';
56                document.getElementById('divAppboxHeader').appendChild(div);
57
58                if(is_ie) {
59                        var elem = document.all[div.id];
60                        elem.style.position="absolute";
61                        var root = document.body;
62                        var posX = elem.offsetLeft-root.scrollLeft;
63                        var posY = elem.offsetTop-root.scrollTop;
64                        root.onscroll = function() {
65                                elem.style.right = '0px';
66                                elem.style.top = (posY + root.scrollTop) + "px";
67                        };
68                }
69        }
70}
71
72cConnector.prototype.hideProgressBar = function ()
73{
74        var div = document.getElementById('divProgressBar');
75        if (div != null)
76                div.style.visibility = 'hidden';
77        else
78                setTimeout('connector.hideProgressBar()',100);
79        this.isVisibleBar = false;
80}
81
82cConnector.prototype.showProgressBar = function(){
83        var div = document.getElementById('divProgressBar');
84        if (! div){
85                connector.buildBar();
86                return;
87        }
88
89        div.style.visibility = 'visible';
90
91        this.isVisibleBar = true;
92}
93
94        function XMLTools()
95        {
96                this.path = "";
97        }
98var connector = new cConnector();
99
100function cExecuteForm_(form, handler){
101        connector.showProgressBar();
102       
103        if( ! ( divUpload = document.getElementById('divUpload') ) )
104        {
105                divUpload                = document.createElement('DIV');               
106                divUpload.id             = 'divUpload';
107                document.body.appendChild(divUpload);
108        }
109
110        handlerExecuteForm = handler;
111       
112        var form_handler = function (data)
113        {
114                handlerExecuteForm(data);
115                handlerExecuteForm = null;
116        }
117       
118        divUpload.innerHTML= "<iframe onload=\"connector.hideProgressBar();cExecute_('./index.php/index.php?menuaction=filemanager.uifilemanager.getReturnExecuteForm',"+form_handler+");\"  style='display:none;width:0;height:0;' name='uploadFile'></iframe>";
119       
120        form.target ="uploadFile";
121        form.submit();
122}
123
124function cExecute_(requestURL, handler, params){
125        if (connector.isVisibleBar == true){
126                setTimeout('cExecute_("'+requestURL+'",'+handler+')',150);
127                return;
128        }
129        connector.showProgressBar();
130        var AjaxRequest = function () {
131                Ajax = false;
132                if (window.XMLHttpRequest) //Gecko
133                        Ajax = new XMLHttpRequest();
134                else
135                        if (window.ActiveXObject) //Other nav.
136                                try
137                                {
138                                        Ajax = new ActiveXObject("Msxml12.XMLHTTP");
139                                } catch (e)
140                {
141                        Ajax = new ActiveXObject("Microsoft.XMLHTTP");
142                }
143        }
144       
145        var responseRequest = function()
146        {
147                try
148                {
149                        if ( Ajax.readyState == 4 )
150                        {
151                                switch ( Ajax.status )
152                                {
153                                        case 200:
154                                                if (typeof(handler) == 'function')
155                                                {                                                                                                                               
156                                                        connector.hideProgressBar();
157                                                        var data = Ajax.responseText;
158                                                        handler(data);
159                                                }
160
161                                                break;
162
163                                        case 404:
164                                               
165                                                alert(get_lang('Page Not Found!'));
166                                                break;
167
168                                        default:                                                                                               
169                                }
170                        }
171                }
172                catch (e)
173                {                       
174                        connector.hideProgressBar();
175                        // View Exception in Javascript Console
176                        throw(e);
177                }
178        }
179       
180        AjaxRequest();
181       
182        if (!Ajax){
183                throw("No connection");
184                return;
185        }
186
187        if( typeof(params) == 'undefined' )
188        {
189                Ajax.open('GET', requestURL, true);
190                Ajax.onreadystatechange = responseRequest;
191                Ajax.send(null);
192        }       
193        else
194        {
195                Ajax.open("POST", requestURL, true);
196                Ajax.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
197                Ajax.onreadystatechange = responseRequest;
198                Ajax.send( params );
199        }
200}
201
202function unserialize(str)
203{
204
205        var matchB = function (str, iniPos)
206        {
207                var nOpen, nClose = iniPos;
208                do
209                {
210                        nOpen = str.indexOf('{', nClose+1);
211                        nClose = str.indexOf('}', nClose+1);
212
213                        if (nOpen == -1)
214                        {
215                                return nClose;
216                        }
217                        if (nOpen < nClose )
218                        {
219                                nClose = matchB(str, nOpen);
220                        }
221                } while (nOpen < nClose);
222
223                return nClose;
224        }
225
226        var f = function (str)
227        {
228                switch (str.charAt(0))
229                {
230                        case 'a':
231                                var data = new Array();
232                                var n = parseInt( str.substring( str.indexOf(':')+1, str.indexOf(':',2) ) );
233                                var arrayContent = str.substring(str.indexOf('{')+1, str.lastIndexOf('}'));
234
235                                for (var i = 0; i < n; i++)
236                                {
237                                        var pos = 0;
238
239                                        /* Process Index */
240                                        var indexStr = arrayContent.substr(pos, arrayContent.indexOf(';')+1);
241                                        var index = f(indexStr);
242                                        pos = arrayContent.indexOf(';', pos)+1;
243
244                                        /* Process Content */
245                                        var part = null;
246                                        switch (arrayContent.charAt(pos))
247                                        {
248                                                case 'a':
249                                                        var pos_ = matchB(arrayContent, arrayContent.indexOf('{', pos))+1;
250                                                        part = arrayContent.substring(pos, pos_);
251                                                        pos = pos_;
252                                                        data[index] = f(part);
253                                                        break;
254
255                                                case 's':
256                                                        var pval = arrayContent.indexOf(':', pos+2);
257                                                        var val  = parseInt(arrayContent.substring(pos+2, pval));
258                                                        pos = pval + val + 4;
259                                                        data[index] = arrayContent.substr(pval+2, val);
260                                                        break;
261
262                                                default:
263                                                        part = arrayContent.substring(pos, arrayContent.indexOf(';', pos)+1);
264                                                        pos = arrayContent.indexOf(';', pos)+1;
265                                                        data[index] = f(part);
266                                                        break;
267                                        }
268                                        arrayContent = arrayContent.substr(pos);
269                                }
270                                break;
271
272                        case 's':
273                                var pos = str.indexOf(':', 2);
274                                var val = parseInt(str.substring(2,pos));
275                                var data = str.substr(pos+2, val);
276                                str = str.substr(pos + 4 + val);
277                                break;
278
279                        case 'i':
280                        case 'd':
281                                var pos = str.indexOf(';');
282                                var data = parseInt(str.substring(2,pos));
283                                str = str.substr(pos + 1);
284                                break;
285
286                        case 'N':
287                                var data = null;
288                                str = str.substr(str.indexOf(';') + 1);
289                                break;
290
291                        case 'b':
292                                var data = str.charAt(2) == '1' ? true : false;
293                                break;
294                }
295                return data;
296        }
297        unserialized = f(str);
298        return unserialized;
299}
300var unserialized = new Object();
301
302// Serialize Data Method
303function serialize(data)
304{
305        var f = function(data)
306        {
307                var str_data;
308
309                if (data == null ||
310                                (typeof(data) == 'string' && data == ''))
311                {
312                        str_data = 'N;';
313                }
314
315                else switch(typeof(data))
316                {
317                        case 'object':
318                                var arrayCount = 0;
319
320                                str_data = '';
321
322                                for (i in data)
323                                {
324                                        if (i == 'length')
325                                        {
326                                                continue;
327                                        }
328
329                                        arrayCount++;
330                                        switch (typeof(i))
331                                        {
332                                                case 'number':
333                                                        str_data += 'i:' + i + ';' + f(data[i]);
334                                                        break;
335
336                                                case 'string':
337                                                        str_data += 's:' + i.length + ':"' + i + '";' + f(data[i]);
338                                                        break;
339
340                                                default:
341                                                        showMessage(Element('cc_msg_err_serialize_data_unknown').value);
342                                                        break;
343                                        }
344                                }
345                                if (!arrayCount)
346                                {
347                                        str_data = 'N;';       
348                                }
349                                else
350                                {
351                                        str_data = 'a:' + arrayCount + ':{' + str_data + '}';
352                                        }
353
354                                        break;
355
356                                        case 'string':
357                                        str_data = 's:' + data.length + ':"' + data + '";';
358                                        break;
359
360                                        case 'number':
361                                        str_data = 'i:' + data + ';';
362                                        break;
363
364                                        case 'boolean':
365                                        str_data = 'b:' + (data ? '1' : '0') + ';';
366                                        break;
367
368                                        default:
369                                        showMessage(Element('cc_msg_err_serialize_data_unknown').value);
370                                        return null;
371                                }
372
373                                return str_data;
374                }
375
376                return f(data);
377        }
Note: See TracBrowser for help on using the repository browser.