/** * ownCloud - ajax frontend * * @author Robin Appelman * @copyright 2010 Robin Appelman icewind1991@gmail.com * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE * License as published by the Free Software Foundation; either * version 3 of the License, or any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU AFFERO GENERAL PUBLIC LICENSE for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . * */ OC_FILES.browser=new Object(); OC_FILES.browser.showInitial=function(){ if(document.getElementById('content')){ var dir='' var loc=document.location.toString(); if(loc.indexOf('#')!=-1){ dir=loc.substring(loc.indexOf('#')+1); } OC_FILES.getdirectorycontent(dir,OC_FILES.browser.show_callback,true); } } OC_FILES.browser.show=function(dir,forceReload){ if(!dir || !dir.split){ dir=''; } OC_FILES.getdirectorycontent(dir,OC_FILES.browser.show_callback,forceReload); } OC_FILES.browser.breadcrumb=new Object(); OC_FILES.browser.breadcrumb.node=null; OC_FILES.browser.breadcrumb.crumbs=Array(); OC_FILES.browser.breadcrumb.show=function(parent,path){ if((!OC_FILES.browser.breadcrumb.node==parent && parent) || OC_FILES.browser.breadcrumb.node==null){ OC_FILES.browser.breadcrumb.clear(); OC_FILES.browser.breadcrumb.node=parent; OC_FILES.browser.breadcrumb.add('Home','/'); } var dirs=path.split('/'); var currentPath='/'; var paths=Array(); var currentPath; if(dirs.length>0){ for(var i=0;i=1){ contentNode.removeChild(contentNode.firstChild); } } var table=document.createElement('table'); OC_FILES.browser.table=table; table.className='browser'; var tbody=document.createElement('tbody'); var thead=document.createElement('thead'); var tfoot=document.createElement('tfoot'); table.appendChild(thead); table.appendChild(tbody); table.appendChild(tfoot); OC_FILES.files=Array(); table.setAttribute('cellpadding',6); tr=document.createElement('tr'); thead.appendChild(tr); tr.className='breadcrumb'; td=document.createElement('td'); tr.appendChild(td); input=document.createElement('input'); input.className='fileSelector' input.setAttribute('type','checkbox'); input.setAttribute('name','fileSelector'); input.setAttribute('value','select_all'); input.setAttribute('id','select_all'); input.addEvent('onclick',OC_FILES.selectAll); td.appendChild(input); td.className='breadcrumb'; OC_FILES.browser.breadcrumb.show(td,dir); // files and directories tr=document.createElement('tr'); tbody.appendChild(tr); td=document.createElement('td'); tr.appendChild(td); div=document.createElement('div'); div.className='fileList'; td.appendChild(div); OC_FILES.browser.files.show(div,content); tr=document.createElement('tr'); tfoot.appendChild(tr); tr.className='utilityline'; td=document.createElement('td'); tr.appendChild(td); td.className='actionsSelected'; dropdown=document.createElement('select'); td.appendChild(dropdown); dropdown.setAttribute('id','selected_action'); for(index in OC_FILES.actions_selected){ if(OC_FILES.actions_selected[index].call){ option=document.createElement('option'); dropdown.appendChild(option); option.setAttribute('value',index); option.appendChild(document.createTextNode(capitaliseFirstLetter(index))); } } td.appendChild(document.createTextNode(' Selected ')); button=document.createElement('button'); td.appendChild(button); button.appendChild(document.createTextNode('Go')); button.addEvent('onclick',OC_FILES.action_selected); div=document.createElement('div'); td.appendChild(div); div.className='moreActionsButton'; OC_FILES.maxUpload=content['max_upload']; var p=document.createElement('p'); div.appendChild(p); p.appendChild(document.createTextNode('More Actions')); div.setAttribute('id','moreActionsButton'); OC_FILES.browser.moreActionsShown=false; p.addEvent('onclick',OC_FILES.browser.showMoreActions); contentNode.appendChild(table); }else{ OC_FILES.browser.breadcrumb.show(null,dir); OC_FILES.browser.files.show(null,content); } if(OC_FILES.uploadForm){ OC_FILES.uploadForm.setAttribute('action','files/upload.php?dir='+dir); } } OC_FILES.browser.handleDropOn=function(event,node){ var dropTargetFile=this.file; var dropFile=node.parentNode.file; if(dropTargetFile!=dropFile){ if(dropTargetFile.actions.dropOn && dropTargetFile.actions.dropOn.call){ dropTargetFile.actions.dropOn.call(dropTargetFile,dropFile); } return false; } } OC_FILES.browser.handleDrop=function(event,node){ var dropTargetFile=node.file; var dropFile=this.parentNode.file; if(dropFile.actions.drop && dropFile.actions.drop.call){ dropFile.actions.drop.call(dropFile,dropTargetFile); } return false; } OC_FILES.browser.showMoreActions=function(){ if(!OC_FILES.browser.moreActionsList){ var div=document.createElement('div'); div.className='moreActionsList'; var table=document.createElement('table'); div.appendChild(table); var tbody=document.createElement('tbody'); table.appendChild(tbody); var tr=document.createElement('tr'); tbody.appendChild(tr); var td=document.createElement('td'); tr.appendChild(td); OC_FILES.browser.showuploader(OC_FILES.dir,td,OC_FILES.maxUpload); tr=document.createElement('tr'); tbody.appendChild(tr); td=document.createElement('td'); tr.appendChild(td); var form=document.createElement('form'); td.appendChild(form); form.appendChild(document.createTextNode('New ')); var dropdown=document.createElement('select'); form.appendChild(dropdown); dropdown.setAttribute('id','newFileType'); var option=document.createElement('option'); dropdown.appendChild(option); option.setAttribute('value','dir'); option.appendChild(document.createTextNode('Folder')); option=document.createElement('option'); dropdown.appendChild(option); option.setAttribute('value','file'); option.appendChild(document.createTextNode('File')); form.appendChild(document.createTextNode(' ')); var input=document.createElement('input'); form.appendChild(input); input.setAttribute('id','newFileName'); form.addEvent('onsubmit',OC_FILES.browser.newFile); var submit=document.createElement('input'); submit.type='submit'; form.appendChild(submit); submit.value='Create'; OC_FILES.browser.moreActionsList=div; }else{ var div=OC_FILES.browser.moreActionsList; } var button=document.getElementById('moreActionsButton'); if(!OC_FILES.browser.moreActionsShown){ button.appendChild(div); OC_FILES.browser.moreActionsShown=true; button.className='moreActionsButton moreActionsButtonClicked'; }else{ OC_FILES.browser.moreActionsShown=false; button.removeChild(div); button.className='moreActionsButton'; } } OC_FILES.browser.newFile=function(event){ if(event.preventDefault){ event.preventDefault(); }; var typeSelect=document.getElementById('newFileType'); var type=typeSelect.options[typeSelect.selectedIndex].value; var name=document.getElementById('newFileName').value; OC_FILES.newFile(type,name,OC_FILES.dir); return false; } OC_FILES.browser.showicon=function(filetype){ var td=document.createElement('td'); td.className='fileicon'; var img=document.createElement('img'); td.appendChild(img); img.setAttribute('width',16); img.setAttribute('height',16); if(filetype=='dir'){ img.src=WEBROOT+'/img/icons/folder.png'; }else if(filetype=='incomplete'){ img.src=WEBROOT+'/img/icons/loading.gif'; }else{ img.src=WEBROOT+'/img/icons/other.png'; } return td; } OC_FILES.uploadIFrames=Array(); OC_FILES.browser.showuploader=function(dir,parent,max_upload){ var iframeId=OC_FILES.uploadIFrames.length OC_FILES.uploadForm=document.createElement('form'); OC_FILES.uploadForm.setAttribute('target','uploadIFrame'+iframeId); OC_FILES.uploadForm.setAttribute('action','files/upload.php?dir='+dir); OC_FILES.uploadForm.method='post'; OC_FILES.uploadForm.setAttribute('enctype','multipart/form-data'); OC_FILES.uploadIFrames[iframeId]=document.createElement('iframe'); OC_FILES.uploadIFrames[iframeId].uploadParent=parent; OC_FILES.uploadIFrames[iframeId].className='hidden'; OC_FILES.uploadIFrames[iframeId].name='uploadIFrame'+iframeId; var input=document.createElement('input'); input.setAttribute('type','hidden'); input.setAttribute('name','MAX_FILE_SIZE'); input.setAttribute('value',max_upload); input.setAttribute('id','max_upload'); OC_FILES.uploadForm.appendChild(input); var file=document.createElement('input'); file.name='file'; file.setAttribute('id','fileSelector'); file.setAttribute('type','file'); file.addEvent('onchange',OC_FILES.upload,[iframeId]); OC_FILES.uploadForm.appendChild(document.createTextNode('Upload file: ')); OC_FILES.uploadForm.appendChild(file); parent.appendChild(OC_FILES.uploadForm); var body=document.getElementsByTagName('body').item(0); body.appendChild(OC_FILES.uploadIFrames[iframeId]); } OC_FILES.browser.show_rename=function(dir,file){ var item=document.getElementById(file); item.oldContent=Array(); if(item.hasChildNodes()){ while(item.childNodes.length >=1){ item.oldContent[item.oldContent.length]=item.firstChild; item.removeChild(item.firstChild); } } var form=document.createElement('form'); form.addEvent('onsubmit',OC_FILES.rename,[dir,file]); var input=document.createElement('input'); input.setAttribute('type','text'); input.setAttribute('name','newname'); input.setAttribute('value',file); input.setAttribute('id',file+'_newname') input.addEvent('onblur',OC_FILES.browser.rename_cancel,[file]); form.appendChild(input); item.appendChild(form); input.focus(); } OC_FILES.browser.rename_cancel=function(file){ var item=document.getElementsByName(file).item(0); if(item.hasChildNodes()){ while(item.childNodes.length >=1){ item.removeChild(item.firstChild); } } for(index in item.oldContent){ if(item.oldContent[index].nodeType){ item.appendChild(item.oldContent[index]); } } } OC_FILES.browser.showactions=function(file,hide){ var node=document.getElementById(file); if(node &&(node.actionsshown || hide===true)){ if(node.actionsshown){ node.actionsdiv.parentNode.removeChild(node.actionsdiv); } node.actionsdiv=null; node.actionsshown=false }else if(node){ node.actionsshown=true div=document.createElement('div'); node.actionsdiv=div; div.className='fileactionlist'; table=document.createElement('table'); div.appendChild(table); tbody=document.createElement('tbody'); table.appendChild(tbody); var file=OC_FILES.files[file] var actions=file.actions; var name; for(name in actions){ if(actions[name].call && name!='default' && name!='dropOn' && name!='drop'){ tr=document.createElement('tr'); tbody.appendChild(tr); td=document.createElement('td'); tr.appendChild(td); a=document.createElement('a'); td.appendChild(a); a.appendChild(document.createTextNode(capitaliseFirstLetter(name))); var action=actions[name]; td.addEvent('onclick',new callBack(action,file)); } } node.appendChild(div); OC_FILES.hideallenabled=false; setTimeout('OC_FILES.hideallenabled=true',50); } } OC_FILES.browser.hideallactions=function(){ if(OC_FILES.hideallenabled){ for(name in OC_FILES.files){ if(OC_FILES.files[name]){ if(OC_FILES.files[name].hideactions){ OC_FILES.files[name].hideactions.call(OC_FILES.files[name]); } } } } } OC_FILES.hideallenabled=true; //used to prevent browsers from hiding actionslists right after they are displayed; sizeFormat=function(size){ if(isNaN(size)){ return false; } var orig=size; var steps=Array('B','KiB','MiB','GiB','TiB'); var step=0; while(size>(1024*2)){ step++; size=size/1024; } if(size.toFixed){ size=size.toFixed(2); } return ''+size+' '+steps[step]; } OC_FILES.browser.showImage=function(dir,file){ var path=WEBROOT+'/files/open_file.php?dir='+encodeURIComponent(dir)+'&file='+encodeURIComponent(file); var div=document.createElement('div'); div.setAttribute('id','imageframe'); div.addEvent('onclick',OC_FILES.browser.hideImage) var img=document.createElement('img'); img.setAttribute('src',path); div.appendChild(img); body=document.getElementsByTagName('body').item(0); body.appendChild(div); } OC_FILES.browser.hideImage=function(){ var div=document.getElementById('imageframe'); div.parentNode.removeChild(div); } function capitaliseFirstLetter(string){ return string.charAt(0).toUpperCase() + string.slice(1); }