M.form_filemanager={templates:{},formChangeChecker:null,};require(['core_form/changechecker'],function(FormChangeChecker){M.form_filemanager.formChangeChecker=FormChangeChecker});M.form_filemanager.set_templates=function(Y,templates){M.form_filemanager.templates=templates};M.form_filemanager.init=function(Y,options){var FileManagerHelper=function(options){FileManagerHelper.superclass.constructor.apply(this,arguments)};FileManagerHelper.NAME="FileManager";FileManagerHelper.ATTRS={options:{},lang:{}};Y.extend(FileManagerHelper,Y.Base,{api:M.cfg.wwwroot+'/repository/draftfiles_ajax.php',menus:{},initializer:function(options){this.options=options;if(options.mainfile){this.enablemainfile=options.mainfile} this.client_id=options.client_id;this.currentpath='/';this.maxfiles=options.maxfiles;this.maxbytes=options.maxbytes;this.areamaxbytes=options.areamaxbytes;this.userprefs=options.userprefs;this.emptycallback=null;this.filepicker_options=options.filepicker?options.filepicker:{};this.filepicker_options.client_id=this.client_id;this.filepicker_options.context=options.context;this.filepicker_options.maxfiles=this.maxfiles;this.filepicker_options.maxbytes=this.maxbytes;this.filepicker_options.areamaxbytes=this.areamaxbytes;this.filepicker_options.env='filemanager';this.filepicker_options.itemid=options.itemid;if(options.filecount){this.filecount=options.filecount}else{this.filecount=0} this.filemanager=Y.one('#filemanager-'+options.client_id);if(this.filemanager.hasClass('filemanager-container')||!this.filemanager.one('.filemanager-container')){this.dndcontainer=this.filemanager}else{this.dndcontainer=this.filemanager.one('.filemanager-container');if(!this.dndcontainer.get('id')){this.dndcontainer.generateID()}} if(this.filemanager.one('.fp-path-folder')){this.pathnode=this.filemanager.one('.fp-path-folder');this.pathbar=this.pathnode.get('parentNode');this.pathbar.removeChild(this.pathnode)} this.selectnode=Y.Node.create(M.form_filemanager.templates.fileselectlayout);this.selectnode.setAttribute('aria-live','assertive');this.selectnode.setAttribute('role','dialog');this.selectnode.generateID();var labelid='fm-dialog-label_'+this.selectnode.get('id');this.selectui=new M.core.dialogue({draggable:!0,headerContent:'

'+M.util.get_string('edit','moodle')+'

',bodyContent:this.selectnode,centered:!0,width:'480px',modal:!0,visible:!1});Y.one('#'+this.selectnode.get('id')).setAttribute('aria-labelledby',labelid);this.selectui.hide();this.setup_select_file();this.setup_buttons();this.filemanager.one('.fp-content').on(['scroll','resize'],this.content_scrolled,this);this.viewmode=this.get_preference("recentviewmode");if(this.viewmode!=2&&this.viewmode!=3){this.viewmode=1} var viewmodeselectors={'1':'.fp-vb-icons','2':'.fp-vb-tree','3':'.fp-vb-details'};this.filemanager.all('.fp-vb-icons,.fp-vb-tree,.fp-vb-details').removeClass('checked');this.filemanager.all(viewmodeselectors[this.viewmode]).addClass('checked');this.refresh(this.currentpath)},wait:function(){this.filemanager.addClass('fm-updating')},request:function(args,redraw){var api=this.api+'?action='+args.action;var params={};var scope=this;if(args.scope){scope=args.scope} params.sesskey=M.cfg.sesskey;params.client_id=this.client_id;params.filepath=this.currentpath;params.itemid=this.options.itemid?this.options.itemid:0;if(args.params){for(i in args.params){params[i]=args.params[i]}} var cfg={method:'POST',on:{complete:function(id,o,p){if(!o){alert('IO FATAL');return} var data=null;try{data=Y.JSON.parse(o.responseText)}catch(e){scope.print_msg(M.util.get_string('invalidjson','repository'),'error');Y.error(M.util.get_string('invalidjson','repository')+":\n"+o.responseText);return} if(data&&data.tree&&scope.set_current_tree){scope.set_current_tree(data.tree)} args.callback(id,data,p)}},arguments:{scope:scope},headers:{'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8'},data:build_querystring(params)};if(args.form){cfg.form=args.form} Y.io(api,cfg);if(redraw){this.wait()}},filepicker_callback:function(obj){this.filecount++;this.check_buttons();this.refresh(this.currentpath);M.form_filemanager.formChangeChecker.markFormChangedFromNode(this.filemanager.getDOMNode());require(['core_form/events'],function(FormEvent){FormEvent.notifyUploadChanged(this.filemanager.get('id'))}.bind(this))},check_buttons:function(){if(this.filecount>0){this.filemanager.removeClass('fm-nofiles')}else{this.filemanager.addClass('fm-nofiles')} if(this.filecount>=this.maxfiles&&this.maxfiles!=-1){this.filemanager.addClass('fm-maxfiles')}else{this.filemanager.removeClass('fm-maxfiles')}},refresh:function(filepath,action){var scope=this;this.currentpath=filepath;if(!filepath){filepath=this.currentpath}else{this.currentpath=filepath} this.request({action:'list',scope:scope,params:{'filepath':filepath},callback:function(id,obj,args){scope.filecount=obj.filecount;scope.options=obj;scope.lazyloading={};scope.check_buttons();scope.render(obj,action)}},!0)},print_msg:function(msg,type,options){var header=M.util.get_string('error','moodle');if(type!='error'){type='info';header=M.util.get_string('info','moodle')} if(!this.msg_dlg){this.msg_dlg_node=Y.Node.create(M.form_filemanager.templates.message);var nodeid=this.msg_dlg_node.generateID();var previousActiveElement=null;if(typeof options.previousActiveElement!='undefined'){previousActiveElement=options.previousActiveElement} this.msg_dlg=new M.core.dialogue({draggable:!0,bodyContent:this.msg_dlg_node,centered:!0,modal:!0,visible:!1,focusAfterHide:previousActiveElement,});this.msg_dlg_node.one('.fp-msg-butok').on('click',function(e){e.preventDefault();this.msg_dlg.hide()},this)} this.msg_dlg.set('headerContent',header);this.msg_dlg_node.removeClass('fp-msg-info').removeClass('fp-msg-error').addClass('fp-msg-'+type) this.msg_dlg_node.one('.fp-msg-text').setContent(Y.Escape.html(msg));this.msg_dlg.show()},is_disabled:function(){return this.filemanager.ancestor('.fitem.disabled')!=null},getSelectedFiles:function(){var markedFiles=this.filemanager.all('[data-togglegroup=file-selections]:checked');var filenames=[];markedFiles.each(function(item){var fileinfo=this.options.list.find(function(element){return item.getData().fullname==element.fullname});if(fileinfo&&fileinfo!=undefined){filenames.push({filepath:fileinfo.filepath,filename:fileinfo.filename})}},this);return filenames},setup_buttons:function(){var button_download=this.filemanager.one('.fp-btn-download');var button_create=this.filemanager.one('.fp-btn-mkdir');var button_addfile=this.filemanager.one('.fp-btn-add');var buttonDeleteFile=this.filemanager.one('.fp-btn-delete');button_addfile.on('click',this.show_filepicker,this);var dndarrow=this.filemanager.one('.dndupload-arrow');if(dndarrow){dndarrow.on('click',this.show_filepicker,this)} if(this.options.subdirs){button_create.on('click',function(e){e.preventDefault();if(this.is_disabled()){return} var scope=this;var perform_action=function(e){e.preventDefault();var foldername=Y.one('#fm-newname-'+scope.client_id).get('value');if(!foldername){scope.mkdir_dialog.hide();return} scope.request({action:'mkdir',params:{filepath:scope.currentpath,newdirname:foldername},callback:function(id,obj,args){var filepath=obj.filepath;scope.mkdir_dialog.hide();scope.refresh(filepath);Y.one('#fm-newname-'+scope.client_id).set('value','');M.form_filemanager.formChangeChecker.markFormChangedFromNode(scope.filemanager.getDOMNode())}})};var validate_folder_name=function(){var valid=!1;var foldername=Y.one('#fm-newname-'+scope.client_id).get('value');if(foldername.length>0){valid=!0} var btn=Y.one('#fm-mkdir-butcreate-'+scope.client_id);if(btn){btn.set('disabled',!valid)} return valid};if(!this.mkdir_dialog){var node=Y.Node.create(M.form_filemanager.templates.mkdir);this.mkdir_dialog=new M.core.dialogue({draggable:!0,bodyContent:node,centered:!0,modal:!0,visible:!1,focusAfterHide:e.target.ancestor('a',!0),});node.one('.fp-dlg-butcreate').set('id','fm-mkdir-butcreate-'+this.client_id).on('click',perform_action,this);node.one('input').set('id','fm-newname-'+this.client_id).on('keydown',function(e){var valid=Y.bind(validate_folder_name,this)();if(valid&&e.keyCode===13){Y.bind(perform_action,this)(e)}},this);node.one('#fm-newname-'+this.client_id).on(['keyup','change'],function(e){Y.bind(validate_folder_name,this)()},this);node.one('label').set('for','fm-newname-'+this.client_id);node.all('.fp-dlg-butcancel').on('click',function(e){e.preventDefault();this.mkdir_dialog.hide()},this);node.all('.fp-dlg-curpath').set('id','fm-curpath-'+this.client_id)} this.mkdir_dialog.show();var foldername=M.util.get_string('newfolder','repository');while(this.has_folder(foldername)){foldername=increment_filename(foldername,!0)} Y.one('#fm-newname-'+scope.client_id).set('value',foldername);Y.bind(validate_folder_name,this)();Y.one('#fm-newname-'+scope.client_id).focus().select();Y.all('#fm-curpath-'+scope.client_id).setContent(this.currentpath)},this)}else{this.filemanager.addClass('fm-nomkdir')} button_download.on('click',function(e){e.preventDefault();if(this.is_disabled()){return} var scope=this;var image_downloading=this.filemanager.one('.fp-img-downloading');if(image_downloading.getStyle('display')=='inline'){return} image_downloading.setStyle('display','inline');var filenames=this.getSelectedFiles();this.request({action:'downloadselected',scope:scope,params:{selected:Y.JSON.stringify(filenames)},callback:function(id,obj,args){var image_downloading=scope.filemanager.one('.fp-img-downloading');image_downloading.setStyle('display','none');if(obj){scope.refresh(obj.filepath);node=Y.Node.create('').setStyles({visibility:'hidden',width:'1px',height:'1px'});node.set('src',obj.fileurl);Y.one('body').appendChild(node)}else{scope.print_msg(M.util.get_string('draftareanofiles','repository'),'error')}}})},this);buttonDeleteFile.on('click',function(e){e.preventDefault();var dialogOptions={};var filenames=this.getSelectedFiles();var previousActiveElement=e.target.ancestor('a',!0);if(!filenames.length){var options={};options.previousActiveElement=previousActiveElement;this.print_msg(M.util.get_string('nofilesselected','repository'),'error',options);return} dialogOptions.scope=this;var params={selected:Y.JSON.stringify(filenames)};dialogOptions.header=M.util.get_string('confirm','moodle');dialogOptions.message=M.util.get_string('confirmdeleteselectedfile','repository',filenames.length);dialogOptions.previousActiveElement=previousActiveElement;dialogOptions.callbackargs=[params];dialogOptions.callback=function(params){this.request({action:'deleteselected',scope:this,params:params,callback:function(id,obj,args){args.scope.filecount-=params.length;if(obj&&obj.length){args.scope.refresh(obj[0],{action:'delete'})} M.form_filemanager.formChangeChecker.markFormChangedFromNode(this.scope.filemanager.getDOMNode());require(['core_form/events'],function(FormEvent){FormEvent.notifyUploadChanged(this.scope.filemanager.get('id'))}.bind(this))}})};this.show_confirm_dialog(dialogOptions)},this);this.filemanager.all('.fp-vb-icons,.fp-vb-tree,.fp-vb-details').on('click',function(e){e.preventDefault();var viewbar=this.filemanager.one('.fp-viewbar') if(!this.is_disabled()&&(!viewbar||!viewbar.hasClass('disabled'))){this.filemanager.all('.fp-vb-icons,.fp-vb-tree,.fp-vb-details').removeClass('checked') if(e.currentTarget.hasClass('fp-vb-tree')){this.viewmode=2}else if(e.currentTarget.hasClass('fp-vb-details')){this.viewmode=3}else{this.viewmode=1} e.currentTarget.addClass('checked') this.render();this.filemanager.one('.fp-content').setAttribute('tabIndex','0');this.filemanager.one('.fp-content').focus();this.set_preference('recentviewmode',this.viewmode)}},this)},show_filepicker:function(e){e.preventDefault();if(this.is_disabled()){return} var options=this.filepicker_options;options.formcallback=this.filepicker_callback;options.magicscope=this;options.savepath=this.currentpath;options.previousActiveElement=e.target.ancestor('a',!0);M.core_filepicker.show(Y,options)},print_path:function(){var p=this.options.path;this.pathbar.setContent('').addClass('empty');if(p&&p.length!=0&&this.viewmode!=2){for(var i=0;i=0||offset+node.getStylePx('height')>=0)){return!0} return!1};if(scope.lazyloading){fpcontent.all('img').each(function(node){if(node.get('id')&&scope.lazyloading[node.get('id')]&&is_node_visible(node)){node.setImgRealSrc(scope.lazyloading)}})} this.processingimages=!1},this),200)},view_files:function(appendfiles,actionfiles){this.filemanager.removeClass('fm-updating').removeClass('fm-noitems');if((appendfiles==null)&&(!this.options.list||this.options.list.length==0)&&this.viewmode!=2){this.filemanager.addClass('fm-noitems');if(actionfiles!==undefined&&actionfiles.action=='delete'){this.filemanager.one('.fp-btn-add a').focus()} return} var list=(appendfiles!=null)?appendfiles:this.options.list;var element_template;if(this.viewmode==2||this.viewmode==3){element_template=Y.Node.create(M.form_filemanager.templates.listfilename)}else{this.viewmode=1;element_template=Y.Node.create(M.form_filemanager.templates.iconfilename)} if(this.viewmode==1||this.viewmode==2){this.filemanager.one('.fp-btn-delete').addClass('d-none')}else{this.filemanager.one('.fp-btn-delete').removeClass('d-none')} var options={viewmode:this.viewmode,appendonly:appendfiles!=null,filenode:element_template,disablecheckboxes:!1,callbackcontext:this,callback:function(e,node){if(e.preventDefault){e.preventDefault()} if(node.type=='folder'){this.refresh(node.filepath)}else{var previousActiveElement=e.target.ancestor('a',!0);this.options.previousActiveElement=previousActiveElement;this.selectui.set('focusOnPreviousTargetAfterHide',!0);this.selectui.set('focusAfterHide',previousActiveElement);this.select_file(node)}},rightclickcallback:function(e,node){if(e.preventDefault){e.preventDefault()} this.select_file(node)},classnamecallback:function(node){var classname='';if(node.type=='folder'||(!node.type&&!node.filename)){classname=classname+' fp-folder'} if(node.filename||node.filepath||(node.path&&node.path!='/')){classname=classname+' fp-hascontextmenu'} if(node.isref){classname=classname+' fp-isreference'} if(node.refcount){classname=classname+' fp-hasreferences'} if(node.originalmissing){classname=classname+' fp-originalmissing'} if(node.sortorder==1){classname=classname+' fp-mainfile'} return Y.Lang.trim(classname)}};if(this.viewmode==2){options.dynload=!0;options.filepath=this.options.path;options.treeview_dynload=this.treeview_dynload;options.norootrightclick=!0;options.callback=function(e,node){if(!node.fullname){return} if(node.type!='folder'){if(e.node.parent&&e.node.parent.origpath){this.options.path=e.node.parent.origpath;this.options.list=e.node.parent.origlist;this.print_path()} this.currentpath=node.filepath;var previousActiveElement=Y.Node(e.event.target).ancestor('a',!0);this.options.previousActiveElement=previousActiveElement;this.selectui.set('focusOnPreviousTargetAfterHide',!0);this.selectui.set('focusAfterHide',previousActiveElement);this.select_file(node)}else{this.options.path=e.node.origpath;this.options.list=e.node.origlist;this.currentpath=node.filepath;this.print_path()}}} if(!this.lazyloading){this.lazyloading={}} this.filemanager.one('.fp-content').fp_display_filelist(options,list,this.lazyloading);if(this.viewmode!=2){this.content_scrolled()} if(actionfiles!==undefined){if(actionfiles.action=='updatefile'||actionfiles.action=='setmainfile'){var fileslist=this.filemanager.one('.fp-content');fileslist.all('a').each(function(parentnode){parentnode.all('.fp-filename').each(function(childnode){if(childnode.get('innerHTML')==actionfiles.newfilename){parentnode.focus()}})})} if(actionfiles.action=='delete'){this.filemanager.one('.fp-btn-delete a').focus()}}},populateLicensesSelect:function(licensenode,filenode){if(!licensenode){return} licensenode.setContent('');var selectedlicense=this.filepicker_options.defaultlicense;if(filenode){selectedlicense=filenode.license}else if(this.filepicker_options.rememberuserlicensepref&&this.get_preference('recentlicense')){selectedlicense=this.get_preference('recentlicense')} var licenses=this.filepicker_options.licenses;for(var i in licenses){if(licenses[i].enabled==!0||(filenode!==undefined&&licenses[i].shortname===filenode.license)){var option=Y.Node.create('