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

Revision 1654, 11.4 KB checked in by amuller, 14 years ago (diff)

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