/**
* 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='+dir+'&file='+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);
}