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

Revision 1648, 8.3 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 = "menu_box";
16                document.getElementById('tableDivAppbox').appendChild(menu);
17        }
18        menu.style.visibility = '';
19
20}
21function formfmValidate(arg)
22{
23        var button = document.getElementsByName(arg);
24        button = button[0];
25        switch (arg) {
26                case 'newdir':
27                        break;
28                case 'new':
29                        elements = new Array();
30                        elements[0] = new Array();
31                        elements[0]['text'] = get_lang('empty file');
32                        elements[0]['url'] = 'javascript:newEmptyFile();';
33                        elements[1] = new Array();
34                        elements[1]['text'] = get_lang('File from model');
35                        address = document.location.toString();
36                        address = address.split("?");
37                        elements[1]['url'] = address[0]+"?menuaction=filemanager.uifilemanager.fileModels";
38                        elements[2] = new Array();
39                        elements[2]['text'] = get_lang('Upload');
40                        address = document.location.toString();
41                        address = address.split("?");
42                        elements[2]['url'] = address[0]+"?menuaction=filemanager.uifilemanager.index&upload=clicked&upload.x=1&path="+base64_encode(document.getElementById('cdtodir').value);
43
44                        draw_menu(arg,button.parentNode.offsetLeft+50,190,elements);
45                        return false;
46                        break;
47                case 'edit_comments':
48                case 'rename':
49                case 'delete':
50                case 'edit':
51                        var one_checked = false;
52                        files=document.getElementsByClassName('checkbox');
53                        for (i = 0; i <  files.length; i++)
54                                if (files[i].checked)
55                                        one_checked = true;
56                        if (one_checked)
57                                return true;
58                        else
59                        {
60                                write_msg(get_lang('Please select a file'));
61                                return false;
62                        }
63                        break;
64                case 'move_to':
65                case 'copy_to':
66                        filesUrl = "";
67                        var one_checked = false;
68                        files=document.getElementsByClassName('checkbox');
69                        for (i = 0; i <  files.length; i++)
70                                if (files[i].checked){
71                                        one_checked = true;
72                                        filesUrl += "&"+files[i].name+"="+files[i].value;
73                                }
74                        if (!one_checked)
75                        {
76                                write_msg(get_lang('Please select a file'));
77                                return false;
78                        }
79                        var elements = new Array();
80                        inputEl = document.getElementsByName('todir');
81                        for(i=0; i< inputEl[0].childNodes.length; i++)
82                        {
83                                elements[i] = new Array();
84                                elements[i]['text'] =inputEl[0].childNodes[i].innerHTML;
85                                address = document.location.toString();
86                                address = address.split("&");
87                                elements[i]['url'] = address[0]+
88                                        "&todir="+inputEl[0].childNodes[i].innerHTML+
89                                        "&"+arg+".x=10"+filesUrl;
90                        }
91                        draw_menu(arg,button.parentNode.offsetLeft+50,190,elements);
92                        return false;
93                        break;
94                default:
95                        return true;
96        }
97}
98
99var denyFileExtensions = new Array('exe','com','reg','chm','cnf','hta','ins',
100                                        'jse','job','lnk','pif','src','scf','sct','shb',
101                                        'vbe','vbs','wsc','wsf','wsh','cer','its','mau',
102                                        'mda','mar','mdz','prf','pst');
103function validateFileExtension(fileName){
104        var error_flag = false;
105        var fileExtension = fileName.split(".");
106        fileExtension = fileExtension[(fileExtension.length-1)];
107        for(var i=0; i<denyFileExtensions.length; i++)
108        {
109                if(denyFileExtensions[i] == fileExtension)
110                {
111                        error_flag = true;
112                        break;
113                }
114
115        }
116
117        if ( error_flag == true )
118        {
119                write_error(get_lang('File extension forbidden or invalid file') + '.');
120                return false;
121        }
122        return true;
123}
124
125function get_lang(_key){
126        var key = _key.toLowerCase();
127        if(array_lang[key])
128                var _value = array_lang[key];
129        else
130                var _value = _key+"*";
131
132        if(arguments.length > 1)
133                for(j = 1; typeof(arguments[j]) != 'undefined'; j++)
134                        _value = _value.replace("%"+j,arguments[j]);
135        return _value;
136
137}
138
139
140function newEmptyFile(){
141        var name = prompt(get_lang('Enter with the name of new file/directory'), '');
142        var input_text = document.getElementById('newfile_or_dir');
143        if (name != null && name != '' && validateFileExtension(name))
144        {
145                var fileExtension = name.split(".");
146                fileExtension = fileExtension[1];
147                if (typeof(fileExtension) == 'undefined')
148                        input_text.value = name+".html";
149                else
150                        input_text.value = name;
151                address = document.location.toString();
152                address = address.split("&");
153                document.location = address[0]+"&newfile.x=clicked&newfile_or_dir="+input_text.value;
154
155        }
156
157}
158
159
160/*
161 * base64.js - Base64 encoding and decoding functions
162 *
163 * Copyright (c) 2007, David Lindquist <david.lindquist@gmail.com>
164 * Released under the MIT license
165 */
166
167function base64_encode(str) {
168        var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
169        var encoded = [];
170        var c = 0;
171        while (c < str.length) {
172                var b0 = str.charCodeAt(c++);
173                var b1 = str.charCodeAt(c++);
174                var b2 = str.charCodeAt(c++);
175                var buf = (b0 << 16) + ((b1 || 0) << 8) + (b2 || 0);
176                var i0 = (buf & (63 << 18)) >> 18;
177                var i1 = (buf & (63 << 12)) >> 12;
178                var i2 = isNaN(b1) ? 64 : (buf & (63 << 6)) >> 6;
179                var i3 = isNaN(b2) ? 64 : (buf & 63);
180                encoded[encoded.length] = chars.charAt(i0);
181                encoded[encoded.length] = chars.charAt(i1);
182                encoded[encoded.length] = chars.charAt(i2);
183                encoded[encoded.length] = chars.charAt(i3);
184        }
185        return encoded.join('');
186}
187
188function base64_decode(str) {
189        var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
190        var invalid = {
191strlen: (str.length % 4 != 0),
192        chars:  new RegExp('[^' + chars + ']').test(str),
193        equals: (/=/.test(str) && (/=[^=]/.test(str) || /={3}/.test(str)))
194        };
195        if (invalid.strlen || invalid.chars || invalid.equals)
196                throw new Error('Invalid base64 data');
197        var decoded = [];
198        var c = 0;
199        while (c < str.length) {
200                var i0 = chars.indexOf(str.charAt(c++));
201                var i1 = chars.indexOf(str.charAt(c++));
202                var i2 = chars.indexOf(str.charAt(c++));
203                var i3 = chars.indexOf(str.charAt(c++));
204                var buf = (i0 << 18) + (i1 << 12) + ((i2 & 63) << 6) + (i3 & 63);
205                var b0 = (buf & (255 << 16)) >> 16;
206                var b1 = (i2 == 64) ? -1 : (buf & (255 << 8)) >> 8;
207                var b2 = (i3 == 64) ? -1 : (buf & 255);
208                decoded[decoded.length] = String.fromCharCode(b0);
209                if (b1 >= 0) decoded[decoded.length] = String.fromCharCode(b1);
210                if (b2 >= 0) decoded[decoded.length] = String.fromCharCode(b2);
211        }
212        return decoded.join('');
213}
214
215
216function setRestricted(data){
217        if (data.indexOf("True") == 0){
218                returnVal = data.split(':');
219                var img_lock = document.getElementById('restrict_'+returnVal[1]);
220                if (img_lock.src.indexOf('button_unlock') > 0)
221                {
222                        img_lock.src = img_lock.src.replace(/button_unlock/g,'button_lock');
223                        write_msg(get_lang('%1 marked as restricted',returnVal[1]));
224                }
225                else
226                {
227                        img_lock.src = img_lock.src.replace(/button_lock/g,'button_unlock');
228                        write_msg(get_lang('%1 unmarked as restricted',returnVal[1]));
229                }
230        }
231        else
232                write_error("Could not mark as restricted");
233}
234
235function setComments(el){
236        if (el.innerHTML == "&lt;"+get_lang('no comments')+"&gt;")
237                var comment = "";
238        else
239                var comment = el.innerHTML;
240        var filename = base64_encode(el.id);
241        input_el = document.createElement('INPUT');
242        input_el.id = "inputTemp"+el.id;
243        input_el.size = (comment.length-2);
244        input_el.maxlength = "255";
245        input_el.value = comment;
246        el.parentNode.appendChild(input_el);
247        el.parentNode.removeChild(el);
248        input_el.focus();
249        input_el.onblur = function () { cExecute('/index.php?menuaction=filemanager.vfs_functions.editComment&comment_files['+filename+']='+this.value,updateComment); };
250}
251
252function updateComment(data) {
253        var returnVal = data.split(':');
254        if (data.indexOf("True") == 0){
255                var input_el = document.getElementById("inputTemp"+returnVal[1]);
256                span_comment = document.createElement('span');
257                span_comment.innerHTML = input_el.value;
258                span_comment.id=returnVal[1];
259                span_comment.onclick=function () { setComments(span_comment) };
260                input_el.parentNode.appendChild(span_comment);
261                input_el.parentNode.removeChild(input_el);
262                write_msg(get_lang('Updated comment for %1',returnVal[1]));
263        }
264        else
265        {
266                if (returnVal[1] == "badchar")
267                        write_error(get_lang('Comments cannot contain "%1"',returnVal[2]));
268                else
269                        write_error(get_lang('You have no permission to access this file'));
270        }
271
272}
Note: See TracBrowser for help on using the repository browser.