forum MDL-19808 Fixed minor regressions caused by upgrades
[moodle.git] / lib / form / filemanager.js
CommitLineData
56a7bf68 1/**
2 * This file is part of Moodle - http://moodle.org/
3 * File manager
4 * @copyright 1999 onwards Dongsheng Cai <dongsheng@moodle.com>
5 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
6 */
7
8var fm_cfg = {};
9var fm_move_dlg = null;
10var fm_rename_dlg = null;
11var fm_mkdir_dlg = null;
12
13// initialize file manager
14var filemanager = (function(){
15 function _filemanager() {
16 this.init = function(client_id, options) {
17 this.client_id = client_id;
56a7bf68 18 html_compiler(client_id, options);
1420162a 19 }
20 }
56a7bf68 21 return _filemanager;
22})();
23
24filemanager.url = moodle_cfg.wwwroot + '/files/files_ajax.php';
25filemanager.fileicon = moodle_cfg.wwwroot + '/pix/i/settings.gif';
26
27// callback function for file picker
28function filemanager_callback(obj) {
29 refresh_filemanager(obj.filepath, fm_cfg[obj.client_id]);
30 fm_cfg[obj.client_id].currentfiles++;
31
45fa433e 32 if (fm_cfg[obj.client_id].currentfiles>=fm_cfg[obj.client_id].maxfiles && fm_cfg[obj.client_id].maxfiles!=-1) {
71588976 33 var btn = document.getElementById('btnadd-'+obj.client_id);
45fa433e 34 if (btn)
35 btn.style.display = 'none';
71588976 36 }
1420162a 37}
56a7bf68 38
39// setup options for file picker
40function fm_launch_filepicker(el_id, options) {
1420162a 41 var picker = document.createElement('DIV');
56a7bf68 42 picker.id = 'file-picker-'+options.client_id;
1420162a 43 picker.className = 'file-picker';
44 document.body.appendChild(picker);
45 var el=document.getElementById(el_id);
46 var params = {};
47 params.env = 'filemanager';
56a7bf68 48 params.itemid = options.itemid;
49 params.maxfiles = options.maxfiles;
50 params.maxbytes = options.maxbytes;
51 params.savepath = options.savepath;
1420162a 52 params.target = el;
56a7bf68 53 params.callback = filemanager_callback;
54 var fp = open_filepicker(options.client_id, params);
1420162a 55 return false;
71588976 56}
56a7bf68 57
58// create a new folder in draft area
4bb7f787 59function mkdir(e, client_id, itemid) {
56a7bf68 60 var mkdir_cb = {
61 success: function(o) {
62 var result = json_decode(o.responseText);
63 fm_mkdir_dlg.hide();
64 refresh_filemanager(result.filepath, fm_cfg[client_id]);
65 }
66 }
67 var perform = function(e) {
68 var foldername = document.getElementById('fm-newname').value;
69 if (!foldername) {
70 return;
71 }
72 var params = [];
73 params['itemid'] = itemid;
74 params['newdirname'] = foldername;
75 params['sesskey'] = moodle_cfg.sesskey;
76 params['filepath'] = fm_cfg[client_id].currentpath;
77 var trans = YAHOO.util.Connect.asyncRequest('POST',
78 filemanager.url+'?action=mkdir', mkdir_cb, build_querystring(params));
79 YAHOO.util.Event.preventDefault(e);
80 }
81 if (!document.getElementById('fm-mkdir-dlg')) {
82 var el = document.createElement('DIV');
83 el.id = 'fm-mkdir-dlg';
84 el.innerHTML = '<div class="hd">'+mstr.repository.entername+'</div><div class="bd"><input type="text" id="fm-newname" /></div>';
85 document.body.appendChild(el);
4bb7f787 86 var x = YAHOO.util.Event.getPageX(e);
87 var y = YAHOO.util.Event.getPageY(e);
56a7bf68 88 fm_mkdir_dlg = new YAHOO.widget.Dialog("fm-mkdir-dlg", {
89 width: "300px",
56a7bf68 90 visible: true,
4bb7f787 91 x:y,
92 y:y,
56a7bf68 93 constraintoviewport : true
94 });
95
96 }
97 var buttons = [ { text:mstr.moodle.ok, handler:perform, isDefault:true },
98 { text:mstr.moodle.cancel, handler:function(){this.cancel();}}];
99
100 fm_mkdir_dlg.cfg.queueProperty("buttons", buttons);
101 fm_mkdir_dlg.render();
102 fm_mkdir_dlg.show();
103
104 var k1 = new YAHOO.util.KeyListener(document.getElementById('fm-mkdir-dlg'), {keys:13}, {fn:function(){perform();}, correctScope: true});
105 k1.enable();
106
107 document.getElementById('fm-newname').value = '';
108}
109
110// generate html
111function html_compiler(client_id, options) {
112 var list = options.list;
113 var breadcrumb = document.getElementById('fm-path-'+client_id);
114 var count = 0;
115 if (options.path) {
116 breadcrumb.innerHTML = '';
117 var count = 0;
118 for(var p in options.path) {
4bb7f787 119 var sep = document.createElement('SPAN');
120 sep.innerHTML = ' ▶ ';
121 if (count==0) {
22f6b8df 122 sep.innerHTML = mstr.moodle.path + ': ';
4bb7f787 123 } else {
124 sep.innerHTML = ' ▶ ';
125 }
56a7bf68 126 count++;
127 var pathid = 'fm-path-node-'+client_id;
128 pathid += ('-'+count);
129
130 var el = document.createElement('A');
131 el.id = pathid;
132 el.innerHTML = options.path[p].name;
133 el.href = '###';
56a7bf68 134 breadcrumb.appendChild(sep);
135 breadcrumb.appendChild(el);
136
137 var args = {};
138 args.itemid = options.itemid;
139 args.requestpath = options.path[p].path;
140 args.client_id = client_id;
141
142 YAHOO.util.Event.addListener(pathid, 'click', click_breadcrumb, args);
143 }
144 }
145 var template = document.getElementById('fm-tmpl');
146 var container = document.getElementById('filemanager-' + client_id);
147 var listhtml = '<ul id="draftfiles-'+client_id+'">';
148
149 var folder_ids = [];
150
151 var file_ids = [];
152 var file_data = {};
153 var folder_data = {};
154 var html_ids = [];
155 var html_data = {};
156 var zip_data = {};
157 file_data.itemid = folder_data.itemid = zip_data.itemid = options.itemid;
158 file_data.client_id = folder_data.client_id = zip_data.client_id = options.client_id;
159
160 var zip_ids = [];
161 var foldername_ids = [];
162 if (list.length == 0) {
163 // hide file browser and breadcrumb
164 container.style.display='none';
165 if (options.path.length <= 1) {
6f5e0852 166 breadcrumb.style.display='none';
56a7bf68 167 }
168 return;
169 } else {
170 container.style.display='block';
6f5e0852 171 breadcrumb.style.display='block';
56a7bf68 172 }
173 count = 0;
174 for(var i in list) {
175 count++;
176 var htmlid = 'fileitem-'+client_id+'-'+count;
177 var fileid = 'filename-'+client_id+'-'+count;
178 var action = 'action-' +client_id+'-'+count;
179 var html = template.innerHTML;
180
181 html_ids.push(htmlid);
182 html_data[htmlid] = action;
183
184 list[i].htmlid = htmlid;
185 list[i].fileid = fileid;
186 list[i].action = action;
187 var url = "###";
188 var ismainfile = false;
bc6f7235 189 if (fm_cfg[client_id].mainfilename && (fm_cfg[client_id].mainfilename.toLowerCase() == list[i].fullname.toLowerCase())) {
56a7bf68 190 ismainfile = true;
191 }
192 switch (list[i].type) {
193 case 'folder':
194 foldername_ids.push(fileid);
195 folder_ids.push(action);
196 folder_data[action] = list[i];
197 folder_data[fileid] = list[i];
198 break;
199 case 'file':
200 file_ids.push(action);
201 file_data[action] = list[i];
202 if (list[i].url) {
203 url = list[i].url;
204 }
205 break;
206 case 'zip':
207 zip_ids.push(action);
208 zip_data[action] = list[i];
209 if (list[i].url) {
210 url = list[i].url;
211 }
212 break;
213 }
6f5e0852 214 var fullname = list[i].fullname;
56a7bf68 215 if (ismainfile) {
216 fullname = "<strong>"+list[i].fullname+"</strong> <img src='"+moodle_cfg.wwwroot+"/pix/i/tick_green_small.gif"+"' />";
217 }
218 html = html.replace('___fullname___', '<a href="'+url+'" id="'+fileid+'"><img src="'+list[i].icon+'" /> ' + fullname + '</a>');
219 html = html.replace('___action___', '<a style="display:none" href="###" id="'+action+'"><img alt="▶" src="'+filemanager.fileicon+'" /></a>');
220 html = '<li id="'+htmlid+'">'+html+'</li>';
221 listhtml += html;
222 }
223 container.innerHTML = (listhtml+'</ul>');
224
225 options.client_id=client_id;
226
227 YAHOO.util.Event.addListener(file_ids, 'click', create_filemenu, file_data);
228 YAHOO.util.Event.addListener(folder_ids, 'click', create_foldermenu, folder_data);
229 YAHOO.util.Event.addListener(zip_ids, 'click', create_zipmenu, zip_data);
230 YAHOO.util.Event.addListener(html_ids, 'mouseover', fm_mouseover_menu, html_data);
231 YAHOO.util.Event.addListener(html_ids, 'mouseout', fm_mouseout_menu, html_data);
232
233 YAHOO.util.Event.addListener(foldername_ids,'click', click_folder, folder_data);
234}
235
236function fm_mouseover_menu(ev, args) {
237 this.style.backgroundColor = '#0066EE';
238 var menu = args[this.id];
239 menu = document.getElementById(menu);
240 menu.style.display = 'inline';
241}
242
243function fm_mouseout_menu(ev, args) {
244 this.style.backgroundColor = 'transparent';
245 var menu = args[this.id];
246 menu = document.getElementById(menu);
247 menu.style.display = 'none';
248}
249
250function click_breadcrumb(ev, args) {
251 var params = [];
252 params['itemid'] = args.itemid;
253 params['sesskey'] = moodle_cfg.sesskey;
254 params['filepath'] = args.requestpath;
255 this.cb = {
256 success: function(o) {
257 var data = json_decode(o.responseText);
258 for(var key in data) {
259 this.options[key] = data[key];
260 }
261 html_compiler(this.client_id, this.options);
262 }
263 }
264 this.cb.options = args;
265 this.cb.client_id = args.client_id;
266
267 fm_cfg[args.client_id].currentpath = args.requestpath;
268 fm_loading('filemanager-'+args.client_id, 'fm-prgressbar');
269 var trans = YAHOO.util.Connect.asyncRequest('POST',
270 filemanager.url+'?action=list', this.cb, build_querystring(params));
271}
272
273function click_folder(ev, args) {
274 var file = args[this.id];
275 refresh_filemanager(file.filepath, args);
276}
277
278function refresh_filemanager(path, args) {
279 var params = [];
280 params['itemid'] = args.itemid;
281 params['filepath'] = path;
282 params['sesskey'] = moodle_cfg.sesskey;
283 this.cb = {
284 success: function(o) {
285 var data = json_decode(o.responseText);
286 for(var key in data) {
287 this.options[key] = data[key];
288 }
289 html_compiler(this.client_id, this.options);
290 }
291 }
292 this.cb.options = args;
293 this.cb.client_id = args.client_id;
294
295 fm_cfg[args.client_id].currentpath = params['filepath'];
296 fm_loading('filemanager-'+args.client_id, 'fm-prgressbar');
297 var trans = YAHOO.util.Connect.asyncRequest('POST',
298 filemanager.url+'?action=list', this.cb, build_querystring(params));
299}
300
301function create_foldermenu(e, data) {
302 var file = data[this.id];
303 this.zip = function(type, ev, obj) {
304 this.cb = {
305 success: function(o) {
306 var result = json_decode(o.responseText);
307 if (result) {
308 refresh_filemanager(result.filepath, fm_cfg[this.client_id]);
309 }
310 }
311 }
312 this.cb.client_id = obj.client_id;
313 this.cb.file = this.file;
314 var params = [];
315 params['itemid'] = obj.itemid;
316 params['filepath'] = this.file.filepath;
317 params['filename'] = '.';
318 params['sesskey'] = moodle_cfg.sesskey;
319 fm_loading('filemanager-'+obj.client_id, 'fm-prgressbar');
320 var trans = YAHOO.util.Connect.asyncRequest('POST',
321 filemanager.url+'?action=zip', this.cb, build_querystring(params));
322 }
323 this.zip.file = file;
324 var menuitems = [
325 {text: mstr.editor.zip, onclick: {fn: this.zip, obj: data, scope: this.zip}},
326 ];
327 create_menu(e, 'foldermenu', menuitems, file, data);
328}
329
330function create_filemenu(e, data) {
331 var file = data[this.id];
332
333 var menuitems = [
334 {text: mstr.moodle.download, url:file.url}
335 ];
336 create_menu(e, 'filemenu', menuitems, file, data);
337}
338
339function create_zipmenu(e, data) {
340 var file = data[this.id];
341 this.unzip = function(type, ev, obj) {
342 this.cb = {
343 success:function(o) {
344 var result = json_decode(o.responseText);
345 if (result) {
346 refresh_filemanager(result.filepath, fm_cfg[this.client_id]);
347 }
348 }
349 }
350 this.cb.client_id = obj.client_id;
351 var params = [];
352 params['itemid'] = obj.itemid;
353 params['filepath'] = this.file.filepath;
354 params['filename'] = this.file.fullname;
355 params['sesskey'] = moodle_cfg.sesskey;
356 fm_loading('filemanager-'+obj.client_id, 'fm-prgressbar');
357 var trans = YAHOO.util.Connect.asyncRequest('POST',
358 filemanager.url+'?action=unzip', this.cb, build_querystring(params));
359 }
360 this.unzip.file = file;
361
362 var menuitems = [
363 {text: mstr.moodle.download, url:file.url},
364 {text: mstr.moodle.unzip, onclick: {fn: this.unzip, obj: data, scope: this.unzip}}
365 ];
366 create_menu(e, 'zipmenu', menuitems, file, data);
367}
368
369function create_menu(ev, menuid, menuitems, file, options) {
370 var position = YAHOO.util.Event.getXY(ev);
371 var el = document.getElementById(menuid);
372 var menu = new YAHOO.widget.Menu(menuid, {xy:position});
373
374 this.remove = function(type, ev, obj) {
375 var args = {};
376 args.message = mstr.repository.confirmdeletefile;
377 args.callback = function() {
378 var params = {};
379 if (this.file.type == 'folder') {
380 params['filename'] = '.';
381 params['filepath'] = this.file.fullname;
382 } else {
383 params['filename'] = this.file.fullname;
384 params['filepath'] = fm_cfg[this.client_id].currentpath;
385 }
386 params['itemid'] = this.itemid;
387 params['sesskey'] = moodle_cfg.sesskey;
388 fm_loading('filemanager-'+this.client_id, 'fm-prgressbar');
389 var trans = YAHOO.util.Connect.asyncRequest('POST',
390 filemanager.url+'?action=delete', this.cb, build_querystring(params));
391 }
392 var dlg = confirm_dialog(ev, args);
393 dlg.file = file;
394 dlg.client_id = obj.client_id;
395 dlg.itemid = obj.itemid;
396 dlg.cb = {
397 success: function(o) {
398 var result = json_decode(o.responseText);
399 if (!result) {
400 alert(mstr.error.cannotdeletefile);
401 }
402 fm_cfg[this.client_id].currentfiles--;
403 if (fm_cfg[this.client_id].currentfiles<fm_cfg[this.client_id].maxfiles) {
404 var btn = document.getElementById('btnadd-'+this.client_id);
405 btn.style.display = 'inline';
406 }
407 refresh_filemanager(result.filepath, fm_cfg[this.client_id]);
408 }
409 }
410 dlg.cb.file = this.file;
411 dlg.cb.client_id = obj.client_id;
412 }
413 this.remove.file = file;
414
415 this.rename = function(type, ev, obj) {
416 var file = this.file;
417 var rename_cb = {
418 success: function(o) {
419 var result = json_decode(o.responseText);
420 if (result) {
421 var el = document.getElementById(file.fileid);
422 el.innerHTML = this.newfilename;
423 // update filename
424 file.fullname = this.newfilename;
425 file.filepath = result.filepath;
426 fm_rename_dlg.hide();
427 }
428 }
429 }
430 var perform = function(e) {
431 var newfilename = document.getElementById('fm-rename-input').value;
432 if (!newfilename) {
433 return;
434 }
435
436 var action = '';
437 var params = [];
438 params['itemid'] = obj.itemid;
439 if (file.type == 'folder') {
440 params['filepath'] = file.filepath;
441 params['filename'] = '.';
442 action = 'renamedir';
443 } else {
444 params['filepath'] = file.filepath;
445 params['filename'] = file.fullname;
446 action = 'rename';
447 }
448 params['newfilename'] = newfilename;
449
450 params['sesskey'] = moodle_cfg.sesskey;
451 rename_cb.newfilename = newfilename;
452 var trans = YAHOO.util.Connect.asyncRequest('POST',
453 filemanager.url+'?action='+action, rename_cb, build_querystring(params));
454 }
455
456 var scope = document.getElementById('fm-rename-dlg');
457 if (!scope) {
458 var el = document.createElement('DIV');
459 el.id = 'fm-rename-dlg';
460 el.innerHTML = '<div class="hd">'+mstr.repository.enternewname+'</div><div class="bd"><input type="text" id="fm-rename-input" /></div>';
461 document.body.appendChild(el);
462 fm_rename_dlg = new YAHOO.widget.Dialog("fm-rename-dlg", {
463 width: "300px",
464 fixedcenter: true,
465 visible: true,
466 constraintoviewport : true
467 });
468
469 }
470 var buttons = [ { text:mstr.moodle.rename, handler:perform, isDefault:true },
471 { text:mstr.moodle.cancel, handler:function(){this.cancel();}}];
472
473 fm_rename_dlg.cfg.queueProperty("buttons", buttons);
474 fm_rename_dlg.render();
475 fm_rename_dlg.show();
476
477 var k1 = new YAHOO.util.KeyListener(scope, {keys:13}, {fn:function(){perform();}, correctScope: true});
478 k1.enable();
479
480 document.getElementById('fm-rename-input').value = file.fullname;
481 }
482 this.rename.file = file;
483
484 this.move = function(type, ev, obj) {
485 var tree = new YAHOO.widget.TreeView("fm-tree");
486 var file = this.file;
487
488 this.asyncMove = function(e) {
489 if (!tree.targetpath) {
490 return;
491 }
492 var cb = {
493 success : function(o) {
494 var result = json_decode(o.responseText);
495 var p = '/';
496 if (result) {
497 p = result.filepath;
498 }
499 refresh_filemanager(result.filepath, fm_cfg[obj.client_id]);
500 this.dlg.cancel();
501 }
502 }
503 cb.dlg = this;
504 var params = {};
505 if (file.type == 'folder') {
506 alert('Moving folder is not supported yet');
507 return;
508 action = 'movedir';
509 } else {
510 action = 'movefile';
511 }
512 params['filepath'] = file.filepath;
513 params['filename'] = file.fullname;
514 params['itemid'] = obj.itemid;
515 params['sesskey'] = moodle_cfg.sesskey;
516 params['newfilepath'] = tree.targetpath;
517 fm_loading('filemanager-'+obj.client_id, 'fm-prgressbar');
518 var trans = YAHOO.util.Connect.asyncRequest('POST',
519 filemanager.url+'?action='+action, cb, build_querystring(params));
520 }
521
522 var buttons = [ { text:mstr.moodle.move, handler:this.asyncMove, isDefault:true },
523 { text:mstr.moodle.cancel, handler:function(){this.cancel();}}];
524
525 fm_move_dlg.cfg.queueProperty("buttons", buttons);
526
527
528 tree.subscribe("dblClickEvent", function(e) {
529 // update destidatoin folder
530 this.targetpath = e.node.data.path;
531 var el = document.getElementById('fm-move-div');
532 el.innerHTML = '<strong>"' + this.targetpath + '"</strong> has been selected.';
533 YAHOO.util.Event.preventDefault(e);
534 });
535
536 this.loadDataForNode = function(node, onCompleteCallback) {
537 this.cb = {
538 success: function(o) {
539 var data = json_decode(o.responseText);
540 data = data.children;
541 if (data.length == 0) {
542 // so it is empty
543 } else {
544 for (var i in data) {
545 var textnode = {label: data[i].fullname, path: data[i].filepath, itemid: this.itemid};
546 var tmpNode = new YAHOO.widget.TextNode(textnode, node, false);
547 }
548 }
549 this.complete();
550 }
551 }
552 var params = {};
553 params['itemid'] = node.data.itemid;
554 params['filepath'] = node.data.path;
555 params['sesskey'] = moodle_cfg.sesskey;
556 var trans = YAHOO.util.Connect.asyncRequest('POST',
557 filemanager.url+'?action=dir', this.cb, build_querystring(params));
558 this.cb.complete = onCompleteCallback;
559 this.cb.itemid = node.data.itemid;
560 }
561 this.loadDataForNode.itemid = obj.itemid;
562
563 fm_move_dlg.subscribe('show', function(){
564
565 var el = document.getElementById('fm-move-div');
566 el.innerHTML = '<div class="hd"></div><div class="bd"><div id="fm-move-div">'+mstr.repository.nopathselected+'</div><div id="fm-tree"></div></div>';
567
568 var rootNode = tree.getRoot();
569 tree.setDynamicLoad(this.loadDataForNode);
6f5e0852 570 tree.removeChildren(rootNode);
56a7bf68 571 var textnode = {label: "Files", path: '/', itemid: obj.itemid};
572 var tmpNode = new YAHOO.widget.TextNode(textnode, rootNode, true);
573 tree.draw();
574
575 }, this, true);
576
577 fm_move_dlg.render();
578 fm_move_dlg.show();
579 }
580 this.move.file = file;
581 var shared_items = [
582 {text: mstr.moodle.rename+'...', onclick: {fn: this.rename, obj: options, scope: this.rename}},
583 {text: mstr.moodle.move+'...', onclick: {fn: this.move, obj: options, scope: this.move}},
584 {text: mstr.moodle['delete']+'...', onclick: {fn: this.remove, obj: options, scope: this.remove}}
585 ];
586 menu.addItems(menuitems);
587 menu.addItems(shared_items);
588 if (fm_cfg[options.client_id].mainfile && (file.type!='folder')) {
589 this.set_mainfile = function(type, ev, obj) {
590 if (fm_cfg[obj.client_id].mainfile) {
bc6f7235 591 var mainfile = document.getElementById(fm_cfg[obj.client_id].mainfile+'-id');
56a7bf68 592 mainfile.value = this.file.filepath+this.file.fullname;
bc6f7235 593 document.getElementById(fm_cfg[obj.client_id].mainfile+'-label').innerHTML = mainfile.value;
56a7bf68 594 }
595 fm_cfg[obj.client_id].mainfilename = this.file.fullname;
596 refresh_filemanager(fm_cfg[obj.client_id].currentpath, fm_cfg[obj.client_id]);
bc6f7235 597
56a7bf68 598 }
599 this.set_mainfile.file = file;
600 menu.addItem({text: mstr.resource.setmainfile, onclick: {fn: this.set_mainfile, obj: options, scope: this.set_mainfile}});
601 }
602 menu.render(document.body);
603 menu.show();
604 menu.subscribe('hide', function(){
605 this.destroy();
606 });
607}
608
609function setup_filebrowser(client_id, options) {
610 if (!options) {
611 options = {};
612 }
bc6f7235 613 fm_cfg[client_id] = {};
614 fm_cfg[client_id] = options;
615 fm_cfg[client_id].mainfile = options.mainfile;
616 fm_cfg[client_id].currentpath = '/';
6f5e0852 617 fm_cfg[client_id].currentfiles = 0;
56a7bf68 618 // XXX: When editing existing folder, currentfiles shouldn't
619 // be 0
6f5e0852 620 fm_cfg[client_id].maxfiles = options.maxfiles;
bc6f7235 621 if (options.mainfile) {
622 var mainfilename = document.getElementById(options.mainfile+'-id');
623 if (mainfilename.value) {
624 var re = new RegExp(".*\/(.*)$", "i");
625 var result = mainfilename.value.match(re);
626 document.getElementById(options.mainfile+'-label').innerHTML = mainfilename.value;
627 fm_cfg[client_id].mainfilename = result[1];
628 } else {
629 fm_cfg[client_id].mainfilename = '';
630 }
631 }
632 var fm = new filemanager();
633 fm.init(client_id, options);
56a7bf68 634 setup_buttons(client_id, options);
635}
636
637function setup_buttons(client_id, options) {
638 //var fileadd = new YAHOO.widget.Button("btnadd-"+client_id);
639 var fileadd = document.getElementById("btnadd-"+client_id);;
640 var foldercreate = document.getElementById("btncrt-"+client_id);
641 var folderdownload = document.getElementById("btndwn-"+client_id);
642
643 var el = null;
644 if (!fm_move_dlg) {
645 el = document.createElement('DIV');
646 el.id = 'fm-move-dlg';
647 document.body.appendChild(el);
648 fm_move_dlg = new YAHOO.widget.Dialog("fm-move-dlg", {
649 width : "600px",
650 fixedcenter : true,
651 visible : false,
652 constraintoviewport : true
653 });
654 } else {
655 el = document.getElementById('fm-move-div');
656 }
657
658 el.innerHTML = '<div class="hd"></div><div class="bd"><div id="fm-move-div">'+mstr.repository.nopathselected+'</div><div id="fm-tree"></div></div>';
659
660 fm_move_dlg.render();
661
4bb7f787 662 // if maxfiles == -1, the no limit
663 if (fm_cfg[client_id].filecount >= fm_cfg[client_id].maxfiles && fm_cfg[client_id].maxfiles!=-1) {
664 fileadd.style.display = 'none';
665 } else {
666 fm_cfg[client_id].currentfiles = fm_cfg[client_id].filecount;
667 fileadd.onclick = function(e) {
668 this.options.savepath = this.options.currentpath;
669 fm_launch_filepicker(this.options.target, this.options);
670 }
671 fileadd.options = fm_cfg[client_id];
56a7bf68 672 }
be4487f4 673 if (fm_cfg[client_id].subdirs) {
4bb7f787 674 foldercreate.onclick = function(e) {
675 mkdir(e, this.options.client_id, this.options.itemid);
be4487f4 676 }
677 foldercreate.options = fm_cfg[client_id];
678 } else {
679 foldercreate.style.display = 'none';
56a7bf68 680 }
56a7bf68 681 folderdownload.onclick = function() {
682 var cb = {
683 success:function(o) {
684 var result = json_decode(o.responseText);
685 refresh_filemanager(result.filepath, fm_cfg[this.client_id]);
6f5e0852 686 var win = window.open(result.fileurl, 'fm-download-folder');
56a7bf68 687 if (!win) {
688 alert(mstr.repository.popupblockeddownload);
689 }
690 }
691 };
692 cb.client_id = this.options.client_id;
693 var params = [];
694 params['itemid'] = this.options.itemid;
695 params['sesskey'] = moodle_cfg.sesskey;
696 params['filepath'] = this.options.currentpath;
697 var trans = YAHOO.util.Connect.asyncRequest('POST',
698 filemanager.url+'?action=downloaddir', cb, build_querystring(params));
699 }
700 folderdownload.options = fm_cfg[client_id];
701}
702
703function fm_loading(container, id) {
704
705 if (!document.getElementById(id)) {
706 var el = document.createElement('DIV');
707 el.id = id;
708 el.style.backgroundColor = "white";
709 var container = document.getElementById(container);
710 container.innerHTML = '';
711 container.appendChild(el);
712 }
713
714 var loading = new YAHOO.widget.Module(id, {visible:false});
715 loading.setBody('<div style="text-align:center"><img alt="'+mstr.repository.loading+'" src="'+moodle_cfg.wwwroot+'/pix/i/progressbar.gif" /></div>');
716 loading.render();
717 loading.show();
718
719 return loading;
720}