source: sandbox/filemanager/js/common_functions.js @ 1694

Revision 1694, 11.8 KB checked in by amuller, 14 years ago (diff)

Ticket #597 - Melhorias no módulo gerenciados de arquivos

Line 
1var menuTimeout;
2/* draw_menu(id of menu, left position, top position, menu elements) */
3function draw_menu(id,left_pos,top_pos,elements){
4        var menu = document.getElementById('menu_newFile'+id);
5        if (menu == null){
6                menu = document.createElement('DIV');
7                menu.id = "menu_newFile"+id;
8                menu.style.left = left_pos+"px";
9                menu.style.top = top_pos+"px";
10                for(j in elements)
11                {
12                        var link = document.createElement( 'A' );
13                        link.href = elements[j]['url'];
14                        link.appendChild( document.createTextNode( elements[j]['text'] ) );
15                        menu.appendChild(link);
16                        menu.appendChild(document.createElement( 'BR' ));
17                }
18
19                menu.onmouseout = function () { menuTimeout = setTimeout("document.getElementById('menu_newFile"+id+"').style.visibility = 'hidden'",50);}
20                menu.onmouseover = function () { clearTimeout(menuTimeout); };
21                menu.className = 'menubox';
22                menu.style.zIndex='1';
23                document.getElementById('divAppboxHeader').appendChild(menu);
24        }
25        menu.style.visibility = 'visible';
26}
27function toolbar_control(arg)
28{
29        //Used to get button position
30        var button = document.getElementsByName(arg);
31        button = button[0];
32        switch (arg) {
33                case 'newdir':
34                        break;
35                case 'new':
36                        elements = new Array();
37                        elements[0] = new Array();
38                        elements[0]['text'] = get_lang('empty file');
39                        elements[0]['url'] = 'javascript:newEmptyFile();';
40                        elements[1] = new Array();
41                        elements[1]['text'] = get_lang('File from model');
42                        address = document.location.toString();
43                        address = address.split("?");
44                        elements[1]['url'] = address[0]+"?menuaction=filemanager.uifilemanager.fileModels";
45                        elements[2] = new Array();
46                        elements[2]['text'] = get_lang('Upload');
47                        address = document.location.toString();
48                        address = address.split("?");
49                        elements[2]['url'] = address[0]+"?menuaction=filemanager.uifilemanager.index&upload=clicked&upload.x=1&path="+base64_encode(document.getElementById('cdtodir').value);
50                        draw_menu(arg,button.parentNode.offsetLeft+50,190,elements);
51                        break;
52                case 'rename':
53                        // button : <input type="submit" name="save_changes" value="'.lang('Save changes').'">'
54                        var one_checked = false;
55                        files=document.getElementsByName('fileman');
56                        for (i = 0; i <  files.length; i++)
57                                if (files[i].checked){
58                                        one_checked = true;
59                                        files[i].checked = false;
60                                        var nameLink = document.getElementById('name_'+files[i].value);
61                                        var inputName = document.createElement('INPUT');
62                                        inputName.id = 'input_'+files[i].value;
63                                        var filename = nameLink.innerHTML;
64                                        inputName.value = filename;
65                                        inputName.onblur = function () { cExecute('/index.php?menuaction=filemanager.vfs_functions.rename&file='+base64_encode(this.id.substr(6))+'&to='+base64_encode(this.value)+"&path="+base64_encode(currentPath.value),updateRename) };
66                                        nameLink.parentNode.appendChild(inputName);
67                                        nameLink.parentNode.removeChild(nameLink);
68                                }
69                        if (!one_checked)
70                                write_msg(get_lang('Please select a file'));
71                        break;
72                case 'edit':
73                        var one_checked = false;
74                        files=document.getElementsByName('fileman');
75                        for (i = 0; i <  files.length; i++)
76                                if (files[i].checked){
77                                        one_checked = true;
78                                        var filename=files[i].value;
79                                }
80                        if (one_checked){
81                                address = document.location.toString();
82                                address = address.split("&");
83                                document.location = address[0]+"&"+arg+".x=1&filename="+base64_encode(filename);
84                        }
85                        else
86                        {
87                                write_msg(get_lang('Please select a file'));
88                                return;
89                        }
90                        break;
91                case 'delete':
92                        filesUrl = "";
93                        var one_checked = false;
94                        files=document.getElementsByName('fileman');
95                        var j=0;
96                        for (i = 0; i <  files.length; i++)
97                                if (files[i].checked){
98                                        one_checked = true;
99                                        filesUrl += "&fileman["+j+"]="+files[i].value;
100                                        j++;
101                                }
102                        if (!one_checked)
103                        {
104                                write_msg(get_lang('Please select a file'));
105                                return;
106                        }
107
108                        cExecute('/index.php?menuaction=filemanager.vfs_functions.delete&path='+
109                                        base64_encode(currentPath.value)+filesUrl,handlerDelete);
110                        break;
111                case 'move_to':
112                case 'copy_to':
113                        filesUrl = "";
114                        var one_checked = false;
115                        files=document.getElementsByName('fileman');
116                        var j=0;
117                        for (i = 0; i <  files.length; i++)
118                                if (files[i].checked){
119                                        one_checked = true;
120                                        filesUrl += "&fileman["+j+"]="+files[i].value;
121                                        j++;
122                                }
123                        if (!one_checked)
124                        {
125                                write_msg(get_lang('Please select a file'));
126                                return;
127                        }
128                        var elements = new Array();
129                        inputEl = document.getElementsByName('todir');
130                        for(i=0; i< inputEl[0].childNodes.length; i++)
131                        {
132                                elements[i] = new Array();
133                                elements[i]['text'] =inputEl[0].childNodes[i].innerHTML;
134                                address = document.location.toString();
135                                address = address.split("&");
136                                elements[i]['url'] = address[0]+
137                                        "&"+escape(arg)+".x=10"+
138                                        "&to="+base64_encode(inputEl[0].childNodes[i].innerHTML)+
139                                        filesUrl;
140
141                        }
142                        draw_menu(arg,button.parentNode.offsetLeft+50,190,elements);
143                        break;
144                default:
145                        return;
146        }
147}
148
149var denyFileExtensions = new Array('exe','com','reg','chm','cnf','hta','ins',
150                                        'jse','job','lnk','pif','src','scf','sct','shb',
151                                        'vbe','vbs','wsc','wsf','wsh','cer','its','mau',
152                                        'mda','mar','mdz','prf','pst');
153function validateFileExtension(fileName){
154        var error_flag = false;
155        var fileExtension = fileName.split(".");
156        fileExtension = fileExtension[(fileExtension.length-1)];
157        for(var i=0; i<denyFileExtensions.length; i++)
158        {
159                if(denyFileExtensions[i] == fileExtension)
160                {
161                        error_flag = true;
162                        break;
163                }
164
165        }
166
167        if ( error_flag == true )
168        {
169                write_error(get_lang('File extension forbidden or invalid file') + '.');
170                return false;
171        }
172        return true;
173}
174
175function get_lang(_key){
176        var key = _key.toLowerCase();
177        if(array_lang[key])
178                var _value = array_lang[key];
179        else
180                var _value = _key+"*";
181
182        if(arguments.length > 1)
183                for(j = 1; typeof(arguments[j]) != 'undefined'; j++)
184                        _value = _value.replace("%"+j,arguments[j]);
185        return _value;
186
187}
188
189
190function newEmptyFile(){
191        var name = prompt(get_lang('Enter with the name of new file/directory'), '');
192        var input_text = document.getElementById('newfile_or_dir');
193        if (name != null && name != '' && validateFileExtension(name))
194        {
195                var fileExtension = name.split(".");
196                fileExtension = fileExtension[1];
197                if (typeof(fileExtension) == 'undefined')
198                        input_text.value = name+".html";
199                else
200                        input_text.value = name;
201                address = document.location.toString();
202                address = address.split("&");
203                document.location = address[0]+"&newfile.x=1&newfile_or_dir="+input_text.value;
204
205        }
206
207}
208
209
210/*
211 * base64.js - Base64 encoding and decoding functions
212 *
213 * Copyright (c) 2007, David Lindquist <david.lindquist@gmail.com>
214 * Released under the MIT license
215 */
216
217function base64_encode(str) {
218        var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
219        var encoded = [];
220        var c = 0;
221        while (c < str.length) {
222                var b0 = str.charCodeAt(c++);
223                var b1 = str.charCodeAt(c++);
224                var b2 = str.charCodeAt(c++);
225                var buf = (b0 << 16) + ((b1 || 0) << 8) + (b2 || 0);
226                var i0 = (buf & (63 << 18)) >> 18;
227                var i1 = (buf & (63 << 12)) >> 12;
228                var i2 = isNaN(b1) ? 64 : (buf & (63 << 6)) >> 6;
229                var i3 = isNaN(b2) ? 64 : (buf & 63);
230                encoded[encoded.length] = chars.charAt(i0);
231                encoded[encoded.length] = chars.charAt(i1);
232                encoded[encoded.length] = chars.charAt(i2);
233                encoded[encoded.length] = chars.charAt(i3);
234        }
235        return encoded.join('');
236}
237
238function base64_decode(str) {
239        var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
240        var invalid = {
241        strlen: (str.length % 4 != 0),
242        chars:  new RegExp('[^' + chars + ']').test(str),
243        equals: (/=/.test(str) && (/=[^=]/.test(str) || /={3}/.test(str)))
244        };
245        if (invalid.strlen || invalid.chars || invalid.equals)
246                throw new Error('Invalid base64 data');
247        var decoded = [];
248        var c = 0;
249        while (c < str.length) {
250                var i0 = chars.indexOf(str.charAt(c++));
251                var i1 = chars.indexOf(str.charAt(c++));
252                var i2 = chars.indexOf(str.charAt(c++));
253                var i3 = chars.indexOf(str.charAt(c++));
254                var buf = (i0 << 18) + (i1 << 12) + ((i2 & 63) << 6) + (i3 & 63);
255                var b0 = (buf & (255 << 16)) >> 16;
256                var b1 = (i2 == 64) ? -1 : (buf & (255 << 8)) >> 8;
257                var b2 = (i3 == 64) ? -1 : (buf & 255);
258                decoded[decoded.length] = String.fromCharCode(b0);
259                if (b1 >= 0) decoded[decoded.length] = String.fromCharCode(b1);
260                if (b2 >= 0) decoded[decoded.length] = String.fromCharCode(b2);
261        }
262        return decoded.join('');
263}
264
265
266function setRestricted(link){
267        var continue_set = confirm(get_lang('This property will change the visibility of all users that have access to this file, continue?'));
268        if (continue_set)
269                cExecute(link,setRestricted_handler);
270}
271
272function setRestricted_handler(data){
273        if (data.indexOf("True") == 0){
274                returnVal = data.split(':');
275                var img_lock = document.getElementById('restrict_'+returnVal[1]);
276                if (img_lock.src.indexOf('button_unlock') > 0)
277                {
278                        img_lock.src = img_lock.src.replace(/button_unlock/g,'button_lock');
279                        write_msg(get_lang('%1 marked as restricted',returnVal[1]));
280                }
281                else
282                {
283                        img_lock.src = img_lock.src.replace(/button_lock/g,'button_unlock');
284                        write_msg(get_lang('%1 unmarked as restricted',returnVal[1]));
285                }
286        }
287        else
288                write_error("Could not mark as restricted");
289}
290
291function setComments(el){
292        if (el.innerHTML == "&lt;"+get_lang('no comments')+"&gt;")
293                var comment = "";
294        else
295                var comment = el.innerHTML;
296        var filename = base64_encode(el.id);
297        input_el = document.createElement('INPUT');
298        input_el.id = "inputTemp"+el.id;
299        if (comment.length > 0)
300                input_el.size = comment.length;
301        input_el.maxlength = "255";
302        input_el.value = comment;
303        el.parentNode.appendChild(input_el);
304        el.parentNode.removeChild(el);
305        input_el.focus();
306        input_el.onblur = function () { cExecute('/index.php?menuaction=filemanager.vfs_functions.editComment&file='+
307                        filename+'&comment='+base64_encode(this.value),updateComment); };
308}
309
310function updateComment(data) {
311        var returnVal = data.split(':');
312        if (data.indexOf("True") == 0){
313                var input_el = document.getElementById("inputTemp"+returnVal[1]);
314                span_comment = document.createElement('span');
315                span_comment.innerHTML = input_el.value;
316                span_comment.id=returnVal[1];
317                span_comment.onclick=function () { setComments(span_comment) };
318                input_el.parentNode.appendChild(span_comment);
319                input_el.parentNode.removeChild(input_el);
320                write_msg(get_lang('Updated comment for %1',returnVal[1]));
321        }
322        else
323        {
324                if (returnVal[1] == "badchar")
325                        write_error(get_lang('Comments cannot contain "%1"',returnVal[2]));
326                else
327                        write_error(get_lang('You have no permission to access this file'));
328        }
329
330}
331
332function handlerDelete(data){
333        var returnVal = data.split(':');
334        for (i=0; i < returnVal.length; i++)
335                if (returnVal[i] == 'False'){
336                        write_error(get_lang('Could not delete %1',returnVal[i+1]));
337                        return;
338                }else
339                {
340                        if (returnVal[i] != ""){
341                                write_msg(get_lang('Deleted %1',returnVal[i]));
342                                var element = document.getElementById(returnVal[i]);
343                                var pai = element.parentNode.parentNode;
344                                pai.parentNode.removeChild(pai);
345                        }
346                }
347}
348
349function updateRename(data) {
350        var returnVal = data.split(':');
351        if (data.indexOf("True") == 0){
352                write_msg(get_lang('Renamed %1 to %2',returnVal[1],returnVal[2]));
353                var nameLink = document.createElement('A');
354                var inputName = document.getElementById('input_'+returnVal[1]);
355                nameLink.innerHTML = returnVal[2];
356                nameLink.href="./index.php?menuaction=filemanager.uifilemanager.view&file="+base64_encode(returnVal[2])+"&path="+base64_encode(currentPath.value);
357                inputName.parentNode.appendChild(nameLink);
358                inputName.parentNode.removeChild(inputName);
359        }
360        else
361        {
362                if (returnVal[1] == "badchar")
363                        write_error(get_lang('File names cannot contain "%1"',returnVal[2]));
364                else
365                        if (returnVal[1] == "slashes")
366                                write_error(get_lang('File names cannot contain \\ or /'));
367                        if (returnVal[1] == "editing")
368                                write_error(get_lang('This file is being edited right now'));
369                        else
370                                write_error(get_lang('Could not rename %1 to %2', returnVal[1], returnVal[2]));
371        }
372
373}
374
Note: See TracBrowser for help on using the repository browser.