You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

400 lines
12 KiB

16 years ago
16 years ago
16 years ago
16 years ago
16 years ago
16 years ago
16 years ago
16 years ago
16 years ago
16 years ago
  1. /**
  2. * ownCloud - ajax frontend
  3. *
  4. * @author Robin Appelman
  5. * @copyright 2010 Robin Appelman icewind1991@gmail.com
  6. *
  7. * This library is free software; you can redistribute it and/or
  8. * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
  9. * License as published by the Free Software Foundation; either
  10. * version 3 of the License, or any later version.
  11. *
  12. * This library is distributed in the hope that it will be useful,
  13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  15. * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
  16. *
  17. * You should have received a copy of the GNU Lesser General Public
  18. * License along with this library. If not, see <http://www.gnu.org/licenses/>.
  19. *
  20. */
  21. OC_FILES=new Object();
  22. OC_FILES.cache=new Object();
  23. OC_FILES.cache.files=Array();
  24. OC_FILES.cache.incomplete=Array();
  25. OC_FILES.cache.actions=new Object();
  26. OC_FILES.cache.actions.move=Array();
  27. OC_FILES.cache.actions.rename=Array();
  28. OC_FILES.cache.actions['new']=Array();
  29. OC_FILES.cache.actions['delete']=Array();
  30. OC_FILES.cache.actions.upload=Array();
  31. OC_FILES.cache.refresh=function(){
  32. OC_FILES.getdirectorycontent(OC_FILES.dir,false,true);
  33. }
  34. OC_FILES.xmlloader=new OCXMLLoader();
  35. OC_FILES.getdirectorycontent_parse=function(req){
  36. var files=new Array();
  37. var response=req.responseXML;
  38. OC_FILES.cache.files=Array();
  39. if(response){
  40. var dir=response.getElementsByTagName('dir').item(0);
  41. var fileElements=response.getElementsByTagName('file');
  42. if(fileElements.length>0){
  43. for(index=0;index<fileElements.length;index++){
  44. var file=new Array();
  45. var attributes=Array('size','name','type','directory','date','mime');
  46. for(i in attributes){
  47. var name=attributes[i];
  48. file[name]=fileElements.item(index).getAttribute(name);
  49. }
  50. files[file.name]=file;
  51. }
  52. }
  53. OC_FILES.cache.files=files;
  54. if(OC_FILES.cache.incomplete[OC_FILES.dir]){
  55. files=arrayMerge(files,OC_FILES.cache.incomplete[OC_FILES.dir]);
  56. }
  57. files['max_upload']=dir.getAttribute('max_upload');
  58. if(OC_FILES.getdirectorycontent_callback){
  59. OC_FILES.getdirectorycontent_callback(files);
  60. }
  61. }
  62. }
  63. OC_FILES.getdirectorycontent=function(dir,callback,refresh){
  64. if(refresh || OC_FILES.dir!=dir){
  65. OC_FILES.dir=dir;
  66. if(callback){
  67. OC_FILES.getdirectorycontent_callback=callback;
  68. }
  69. OC_FILES.xmlloader.setCallBack(OC_FILES.getdirectorycontent_parse);
  70. OC_FILES.xmlloader.load('files/get_files.php?dir='+dir);
  71. }else{
  72. var files=OC_FILES.cache.files
  73. if(OC_FILES.cache.incomplete[OC_FILES.dir]){
  74. files=arrayMerge(files,OC_FILES.cache.incomplete[OC_FILES.dir]);
  75. }
  76. callback(files);
  77. }
  78. }
  79. OC_FILES.dir='';
  80. OC_FILES.get=function(dir,file){
  81. window.location='files/get_file.php?dir='+encodeURIComponent(dir)+'&files='+encodeURIComponent(file);
  82. }
  83. OC_FILES.upload=function(dir,iframeId){
  84. var file=new Object;
  85. var fileSelector=document.getElementById('fileSelector');
  86. var max_upload=document.getElementById('max_upload').value;
  87. var name=false;
  88. if(fileSelector.files && fileSelector.files[0].fileName){
  89. name=fileSelector.files[0].fileName;
  90. }
  91. if(fileSelector.files && fileSelector.files[0].fileSize){
  92. var size=fileSelector.files[0].fileSize;
  93. if(size>max_upload){
  94. new OCNotification('File to large',10000)
  95. return false;
  96. }
  97. }
  98. var mime='';
  99. if(fileSelector.files && fileSelector.files[0].type){
  100. var mime=fileSelector.files[0].type;
  101. }
  102. file.dir=dir;
  103. file.dir=dir;
  104. file.name=name;
  105. file.type='file';
  106. file.size=size;
  107. file.iframeId=iframeId;
  108. if(!OC_FILES.cache.incomplete[dir]){
  109. OC_FILES.cache.incomplete[dir]=Array();
  110. }
  111. OC_FILES.cache.incomplete[dir][name]=Array();
  112. OC_FILES.cache.incomplete[dir][name]['name']=name;
  113. OC_FILES.cache.incomplete[dir][name]['type']='incomplete';
  114. OC_FILES.cache.incomplete[dir][name]['size']=size;
  115. OC_FILES.cache.incomplete[dir][name]['mime']=mime;
  116. OC_FILES.uploadIFrames[iframeId].file=file;
  117. OC_FILES.uploadIFrames[iframeId].addEvent('onload',new callBack(OC_FILES.upload_callback,OC_FILES.uploadIFrames[iframeId]));
  118. OC_FILES.browser.files.add(name,'incomplete',size,null,mime);
  119. OC_FILES.uploadForm.submit();
  120. if(OC_FILES.uploadForm.parentElement){
  121. OC_FILES.uploadForm.className='hidden';
  122. OC_FILES.uploadForm.parentNode.removeChild(OC_FILES.uploadForm);
  123. var body=document.getElementsByTagName('body').item(0);
  124. body.appendChild(OC_FILES.uploadForm);
  125. OC_FILES.uploadIFrames[iframeId].uploadForm=OC_FILES.uploadForm;
  126. OC_FILES.browser.showuploader(OC_FILES.dir,OC_FILES.uploadIFrames[iframeId].uploadParent,OC_FILES.maxUpload)
  127. }
  128. }
  129. OC_FILES.upload_callback=function(iframeId){
  130. var file=this.file;
  131. if(OC_FILES.cache.incomplete[file.dir][file.name]){
  132. OC_FILES.browser.files.remove(file.name);
  133. OC_FILES.cache.files[file.name]=OC_FILES.cache.incomplete[file.dir][file.name]
  134. delete OC_FILES.cache.incomplete[file.dir][file.name];
  135. OC_FILES.cache.files[file.name]['type']=file.type;
  136. this.uploadForm.parentNode.removeChild(this.uploadForm);
  137. this.parentNode.removeChild(this);
  138. OC_FILES.uploadIFrames[file.iframeId]=null;
  139. OC_FILES.browser.show(file.dir);
  140. }
  141. }
  142. OC_FILES.rename=function(dir,file,event){
  143. if(event && event.preventDefault){
  144. event.preventDefault();
  145. }
  146. var item=document.getElementById(file+'_newname');
  147. var newname=item.value;
  148. if(newname==''){
  149. return false;
  150. }else if(file==newname){
  151. OC_FILES.browser.show(OC_FILES.dir);
  152. return false;
  153. }
  154. arg=new Object;
  155. arg.oldname=file;
  156. arg.newname=newname;
  157. arg.dir=dir;
  158. arg.type=OC_FILES.cache.files[file]['type'];
  159. OC_API.run('rename',{dir:dir,file:file,newname:newname},OC_FILES.rename_callback,arg)
  160. if(!OC_FILES.cache.incomplete[dir]){
  161. OC_FILES.cache.incomplete[dir]=Array();
  162. }
  163. OC_FILES.cache.files[file]['type']='incomplete';
  164. OC_FILES.cache.incomplete[dir][newname]=OC_FILES.cache.files[file];
  165. OC_FILES.cache.incomplete[dir][newname]['name']=newname;
  166. OC_FILES.browser.files.remove(file);
  167. OC_FILES.browser.files.add(newname,'incomplete');
  168. return false;
  169. }
  170. OC_FILES.rename_callback=function(req,file){
  171. delete OC_FILES.cache.files[file.oldname]
  172. OC_FILES.cache.files[file.newname]=OC_FILES.cache.incomplete[file.dir][file.newname];
  173. delete OC_FILES.cache.incomplete[file.dir][file.newname];
  174. OC_FILES.browser.files.remove(file.newname);
  175. OC_FILES.cache.files[file.newname]['type']=file.type;
  176. OC_FILES.browser.show(OC_FILES.dir);
  177. }
  178. OC_FILES.remove=function(dir,file){
  179. remove=confirm('delete file \''+file+'\'?');
  180. if(remove){
  181. OC_API.run('delete',{dir:dir,file:file},OC_FILES.remove_callback,file)
  182. OC_FILES.browser.files.remove(file);
  183. delete OC_FILES.cache.files[file];
  184. }
  185. }
  186. OC_FILES.remove_callback=function(req,name){
  187. // OC_FILES.browser.files.remove(name);
  188. // OC_FILES.browser.show(OC_FILES.dir);
  189. }
  190. OC_FILES.getSelected=function(){
  191. var nodes=document.getElementsByName('fileSelector');
  192. var files=Array();
  193. for(index in nodes){
  194. if(nodes[index].checked){
  195. files[files.length]=nodes[index].value;
  196. }
  197. }
  198. return files;
  199. }
  200. OC_FILES.newFile=function(type,name,dir){
  201. arg=new Object;
  202. arg.name=name;
  203. arg.dir=dir;
  204. arg.type=type;
  205. OC_API.run('new',{dir:dir,name:name,type:type},OC_FILES.new_callback,arg)
  206. if(!OC_FILES.cache.incomplete[dir]){
  207. OC_FILES.cache.incomplete[dir]=Array();
  208. }
  209. OC_FILES.cache.incomplete[dir][name]=Array();
  210. OC_FILES.cache.incomplete[dir][name]['name']=name;
  211. OC_FILES.cache.incomplete[dir][name]['type']='incomplete';
  212. OC_FILES.cache.incomplete[dir][name]['size']=0;
  213. OC_FILES.browser.files.add(name,'incomplete');
  214. }
  215. OC_FILES.new_callback=function(req,file){
  216. OC_FILES.cache.files[file.name]=OC_FILES.cache.incomplete[file.dir][file.name];
  217. delete OC_FILES.cache.incomplete[file.dir][file.name];
  218. OC_FILES.cache.files[file.name]['type']=file.type;
  219. OC_FILES.browser.files.remove(file.name);
  220. // OC_FILES.browser.files.add(name);
  221. OC_FILES.browser.show(OC_FILES.dir,true);
  222. }
  223. OC_FILES.move=function(source,target,sourceDir,targetDir){
  224. if(sourceDir!=targetDir || source!=target){
  225. if(!OC_FILES.cache.incomplete[sourceDir]){
  226. OC_FILES.cache.incomplete[sourceDir]=Array();
  227. }
  228. if(!OC_FILES.cache.incomplete[targetDir]){
  229. OC_FILES.cache.incomplete[targetDir]=Array();
  230. }
  231. if(!OC_FILES.cache.incomplete[targetDir+'/'+target]){
  232. OC_FILES.cache.incomplete[targetDir+'/'+target]=Array();
  233. }
  234. arg=new Object;
  235. arg.source=source;
  236. arg.target=target;
  237. arg.sourceDir=sourceDir;
  238. arg.targetDir=targetDir;
  239. arg.type=OC_FILES.cache.files[source]['type'];
  240. OC_FILES.cache.files[source]['type']='incomplete';
  241. OC_FILES.cache.incomplete[targetDir+'/'+target][source]=OC_FILES.cache.files[source];
  242. OC_API.run('move',{sourcedir:sourceDir,source:source,targetdir:targetDir,target:target},OC_FILES.move_callback,arg);
  243. }
  244. }
  245. OC_FILES.move_callback=function(req,file){
  246. OC_FILES.cache.incomplete[file.targetDir+'/'+file.target][file.source]['type']=file.type;
  247. delete OC_FILES.cache.files[file.source];
  248. OC_FILES.browser.show(OC_FILES.dir);
  249. }
  250. OC_FILES.selectAll=function(){
  251. var value=document.getElementById('select_all').checked;
  252. var nodes=document.getElementsByName('fileSelector');
  253. for(index in nodes){
  254. if(nodes[index].value){
  255. nodes[index].checked=value;
  256. }
  257. }
  258. }
  259. OC_FILES.action_selected=function(){
  260. var dropdown=action=document.getElementById('selected_action');
  261. var action=dropdown.options[dropdown.selectedIndex].value;
  262. if(OC_FILES.actions_selected[action] && OC_FILES.actions_selected[action].call){
  263. OC_FILES.actions_selected[action].call(OC_FILES);
  264. }
  265. }
  266. OC_FILES.actions_selected=new Object();
  267. OC_FILES.actions_selected.download=function(){
  268. files=OC_FILES.getSelected();
  269. if(files.length==0){
  270. return false;
  271. }else if(files.length>1){
  272. files=files.join(';');
  273. }else{
  274. files=files[0];
  275. }
  276. OC_FILES.get(dir,files);
  277. // window.location=WEBROOT+'/files/get_file.php?dir='+OC_FILES.dir+'&files='+files;
  278. }
  279. OC_FILES.actions_selected['delete']=function(){
  280. files=OC_FILES.getSelected();
  281. for(index in files){
  282. OC_FILES.remove(OC_FILES.dir,files[index]);
  283. }
  284. }
  285. OC_FILES.files=Array();
  286. OC_FILES.file=function(dir,file,type,mime){
  287. if(file){
  288. this.type=type;
  289. this.file=file;
  290. this.dir=dir;
  291. this.mime=mime;
  292. if(mime){
  293. var mimeParts=mime.split('/');
  294. this.mime1=mimeParts[0];
  295. this.mime2=mimeParts[1];
  296. }
  297. this.actions=new Object();
  298. if(file.lastIndexOf('.')){
  299. this.extention=file.substr(file.lastIndexOf('.')+1);
  300. }else{
  301. this.extention;
  302. }
  303. for(index in OC_FILES.fileActions.all){
  304. if(OC_FILES.fileActions.all[index].call){
  305. this.actions[index]=OC_FILES.fileActions.all[index];
  306. }
  307. }
  308. if(OC_FILES.fileActions[this.type]){
  309. for(index in OC_FILES.fileActions[this.type]){
  310. if(OC_FILES.fileActions[this.type][index].call){
  311. this.actions[index]=OC_FILES.fileActions[this.type][index];
  312. }
  313. }
  314. }
  315. if(OC_FILES.fileActions[this.mime1]){
  316. for(index in OC_FILES.fileActions[this.mime1]){
  317. if(OC_FILES.fileActions[this.mime1][index].call){
  318. this.actions[index]=OC_FILES.fileActions[this.mime1][index];
  319. }
  320. }
  321. }
  322. if(OC_FILES.fileActions[this.mime]){
  323. for(index in OC_FILES.fileActions[this.mime]){
  324. if(OC_FILES.fileActions[this.mime][index].call){
  325. this.actions[index]=OC_FILES.fileActions[this.mime][index];
  326. }
  327. }
  328. }
  329. }
  330. }
  331. OC_FILES.file.prototype.showactions=function(){
  332. OC_FILES.browser.showactions(this.file);
  333. }
  334. OC_FILES.file.prototype.hideactions=function(){
  335. OC_FILES.browser.showactions(this.file,true);
  336. }
  337. OC_FILES.fileActions=new Object();
  338. OC_FILES.fileActions.all=new Object();
  339. OC_FILES.fileActions.all.remove=function(){
  340. OC_FILES.remove(this.dir,this.file);
  341. }
  342. OC_FILES.fileActions.all.rename=function(){
  343. OC_FILES.browser.show_rename(this.dir,this.file);
  344. }
  345. OC_FILES.fileActions.all.download=function(){
  346. OC_FILES.get(this.dir,this.file);
  347. }
  348. OC_FILES.fileActions.all['default']=OC_FILES.fileActions.all.download;
  349. OC_FILES.fileActions.dir=new Object()
  350. OC_FILES.fileActions.dir.open=function(){
  351. OC_FILES.browser.show(this.dir+'/'+this.file);
  352. }
  353. OC_FILES.fileActions.dir['default']=OC_FILES.fileActions.dir.open;
  354. OC_FILES.fileActions.dir.dropOn=function(file){
  355. OC_FILES.move(file.file,file.file,file.dir,this.dir+'/'+this.file);
  356. }
  357. OC_FILES.fileActions.image=new Object()
  358. OC_FILES.fileActions.image.show=function(){
  359. OC_FILES.browser.showImage(this.dir,this.file);
  360. }
  361. OC_FILES.fileActions.image['default']=OC_FILES.fileActions.image.show;