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

Revision 1719, 14.9 KB checked in by amuller, 14 years ago (diff)

Ticket #597 - Melhorias no módulo gerenciador de arquivos com ajax

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