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

Revision 1704, 15.9 KB checked in by amuller, 14 years ago (diff)

Ticket #597 - Melhorias na visualização do módulo fm com tema azul

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