Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin <robin@Amaya.(none)>2010-03-24 18:35:24 +0300
committerRobin <robin@Amaya.(none)>2010-03-24 18:35:24 +0300
commitba9c95621bccddc8c83689906643a080e1671f22 (patch)
tree0bf3686caccf70312aaa039d50b4cd7e662d964c
parent3f88fb9f14d330e7454edcfecfdf6d39a589949c (diff)
ajax interface
-rwxr-xr-xcss/default.php11
-rw-r--r--files/delete.php34
-rw-r--r--files/get_files.php45
-rw-r--r--files/index.php35
-rw-r--r--files/rename.php34
-rw-r--r--files/upload.php37
-rw-r--r--img/icons/delete.pngbin0 -> 641 bytes
-rw-r--r--img/icons/rename.pngbin0 -> 245 bytes
-rwxr-xr-xinc/lib_files.php67
-rwxr-xr-xinc/templates/header.php14
-rw-r--r--js/ajax.js28
-rw-r--r--js/lib_ajax.js55
-rw-r--r--js/lib_files.js306
-rw-r--r--js/lib_xmlloader.js150
14 files changed, 793 insertions, 23 deletions
diff --git a/css/default.php b/css/default.php
index c781e58de75..8d10b89cab9 100755
--- a/css/default.php
+++ b/css/default.php
@@ -127,6 +127,11 @@ a#owncloud-logo span {
font-weight:bold;
}
-
-
-
+.hidden{
+ height:0px;
+ width:0px;
+ margin:0px;
+ padding:0px;
+ border:0px;
+ //do not use display:none here, it breaks iframes in some browsers
+} \ No newline at end of file
diff --git a/files/delete.php b/files/delete.php
new file mode 100644
index 00000000000..1c660d97807
--- /dev/null
+++ b/files/delete.php
@@ -0,0 +1,34 @@
+<?php
+
+/**
+* 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 <http://www.gnu.org/licenses/>.
+*
+*/
+require_once('../inc/lib_base.php');
+
+$dir=$_GET['dir'];
+$file=$_GET['file'];
+if(isset($_SESSION['username']) and $_SESSION['username'] and strpos($dir,'..')===false){
+ $file=$CONFIG_DATADIRECTORY.'/'.$dir.'/'.$file;
+ if(is_file($file)){
+ unlink($file);
+ }
+}
+
+?> \ No newline at end of file
diff --git a/files/get_files.php b/files/get_files.php
new file mode 100644
index 00000000000..f6db75b3a4b
--- /dev/null
+++ b/files/get_files.php
@@ -0,0 +1,45 @@
+<?php
+
+/**
+* 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 <http://www.gnu.org/licenses/>.
+*
+*/
+require_once('../inc/lib_base.php');
+
+// header('Content-type: text/plain');
+header('Content-type: application/xml');
+
+$dir=isset($_GET['dir'])?$_GET['dir']:'';
+$files=OC_FILES::getdirectorycontent($CONFIG_DATADIRECTORY.'/'.$dir);
+$dirname=$files[0]['directory'];
+$dirname=substr($dirname,strrpos($dirname,'/'));
+ob_clean();
+echo "<?xml version='1.0' standalone='yes'?>\n";
+echo "<dir name='$dirname'>\n";
+foreach($files as $file){
+ $attributes='';
+ foreach($file as $name=>$data){
+ $data=str_replace("'",'&#39;',$data);
+ if (is_string($name)) $attributes.=" $name='$data'";
+ }
+ $attributes.=' date=\''.date($CONFIG_DATEFORMAT,$file['mtime']).'\'';
+ echo "<file$attributes/>\n";
+}
+echo "</dir>";
+?> \ No newline at end of file
diff --git a/files/index.php b/files/index.php
new file mode 100644
index 00000000000..6bd994e7616
--- /dev/null
+++ b/files/index.php
@@ -0,0 +1,35 @@
+<?php
+
+/**
+* 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 <http://www.gnu.org/licenses/>.
+*
+*/
+
+
+//require_once('../../config/config.php');
+require_once('../inc/lib_base.php');
+
+OC_UTIL::addscript('/plugins/ajax/ajax.js');
+
+OC_UTIL::showheader();
+
+echo "<div id='content'></div>";
+
+OC_UTIL::showfooter();
+?>
diff --git a/files/rename.php b/files/rename.php
new file mode 100644
index 00000000000..f0f272f018f
--- /dev/null
+++ b/files/rename.php
@@ -0,0 +1,34 @@
+<?php
+
+/**
+* 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 <http://www.gnu.org/licenses/>.
+*
+*/
+require_once('../inc/lib_base.php');
+
+$dir=$_GET['dir'];
+$file=$_GET['file'];
+$newname=$_GET['newname'];
+if($file!=$newname and $newname!='' and isset($_SESSION['username']) and $_SESSION['username'] and strpos($dir,'..')===false){
+ $source=$CONFIG_DATADIRECTORY.'/'.$dir.'/'.$file;
+ $target=$CONFIG_DATADIRECTORY.'/'.$dir.'/'.$newname;
+ rename($source,$target);
+}
+
+?> \ No newline at end of file
diff --git a/files/upload.php b/files/upload.php
new file mode 100644
index 00000000000..b5fed2ed5b1
--- /dev/null
+++ b/files/upload.php
@@ -0,0 +1,37 @@
+<?php
+
+/**
+* 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 <http://www.gnu.org/licenses/>.
+*
+*/
+require_once('../inc/lib_base.php');
+
+$fileName=$_FILES['file']['name'];
+$source=$_FILES['file']['tmp_name'];
+$target=$CONFIG_DATADIRECTORY.'/'.$_GET['dir'].'/'.$fileName;
+if(isset($_SESSION['username']) and $_SESSION['username'] and strpos($_GET['dir'],'..')===false){
+ if(move_uploaded_file($source,$target)){
+ echo 'true';
+ }else{
+ echo 'false';
+ }
+}else{
+ echo 'false';
+}
+?> \ No newline at end of file
diff --git a/img/icons/delete.png b/img/icons/delete.png
new file mode 100644
index 00000000000..d04a554ee17
--- /dev/null
+++ b/img/icons/delete.png
Binary files differ
diff --git a/img/icons/rename.png b/img/icons/rename.png
new file mode 100644
index 00000000000..2323757e0e9
--- /dev/null
+++ b/img/icons/rename.png
Binary files differ
diff --git a/inc/lib_files.php b/inc/lib_files.php
index 8eb1fc9c125..dbafa52a180 100755
--- a/inc/lib_files.php
+++ b/inc/lib_files.php
@@ -35,7 +35,7 @@ class OC_FILES {
* @param basedir $basedir
* @param dir $dir
*/
- public static function showbrowser($basedir,$dir){
+ public static function showbrowser($basedir,$dir){/*
global $CONFIG_DATEFORMAT;
global $WEBROOT;
@@ -62,29 +62,62 @@ class OC_FILES {
// files and directories
echo('<div class="center"><table cellpadding="6" cellspacing="0" border="0" class="browser">');
$filesfound=false;
- if (is_dir($directory)) {
+ $content=self::getdirectorycontent($directory);
+ if($content){
+ foreach($content as $file){
+ echo('<tr class="browserline">');
+ OC_UTIL::showicon($file['type']);
+ if($file['type']=='dir') echo('<td class="nametext"><a href="'.$WEBROOT.'/?dir='.$dir.'/'.$file['name'].'">'.$file['name'].'</a></td>');
+ if($file['type']<>'dir') echo('<td class="nametext"><a href="'.$WEBROOT.'/?dir='.$dir.'&file='.$file['name'].'">'.$file['name'].'</a></td>');
+ if($file['type']<>'dir') echo('<td class="sizetext">'.$file['size'].' byte</td>'); else echo('<td></td>');
+ echo('<td class="sizetext">'.date($CONFIG_DATEFORMAT,$file['mtime']).'</td>');
+ echo('</tr>');
+ }
+ }
+ echo('</table>');
+ if(!$content) echo('<p>no files here</p>');
+ echo('</div>');*/
+ echo '<div id="content"/>';
+ }
+
+ /**
+ * get the content of a directory
+ * @param dir $directory
+ */
+ public static function getdirectorycontent($directory){
+ $filesfound=true;
+ $content=array();
+ $dirs=array();
+ $file=array();
+ if (is_dir($directory)) {
if ($dh = opendir($directory)) {
- while (($file = readdir($dh)) !== false) {
- if($file<>'.' and $file<>'..'){
+ while (($filename = readdir($dh)) !== false) {
+ if($filename<>'.' and $filename<>'..'){
+ $file=array();
$filesfound=true;
- $stat=stat($directory.'/'.$file);
- $filetype=filetype($directory .'/'. $file);
- echo('<tr class="browserline">');
- OC_UTIL::showicon($filetype);
-
- if($filetype=='dir') echo('<td class="nametext"><a href="'.$WEBROOT.'/?dir='.$dir.'/'.$file.'">'.$file.'</a></td>');
- if($filetype<>'dir') echo('<td class="nametext"><a href="'.$WEBROOT.'/?dir='.$dir.'&file='.$file.'">'.$file.'</a></td>');
- if($filetype<>'dir') echo('<td class="sizetext">'.$stat['size'].' byte</td>'); else echo('<td></td>');
- echo('<td class="sizetext">'.date($CONFIG_DATEFORMAT,$stat['mtime']).'</td>');
- echo('</tr>');
+ $file['name']=$filename;
+ $file['directory']=$directory;
+ $stat=stat($directory.'/'.$filename);
+ $file=array_merge($file,$stat);
+ $file['type']=filetype($directory .'/'. $filename);
+ if($file['type']=='dir'){
+ $dirs[$file['name']]=$file;
+ }else{
+ $files[$file['name']]=$file;
+ }
}
}
closedir($dh);
}
}
- echo('</table>');
- if(!$filesfound) echo('<p>no files here</p>');
- echo('</div>');
+ ksort($dirs);
+ ksort($files);
+ $content=array_merge($dirs,$files);
+ if($filesfound){
+ return $content;
+ }else{
+ return false;
+ }
}
diff --git a/inc/templates/header.php b/inc/templates/header.php
index 0399a9c6544..66289a23ba9 100755
--- a/inc/templates/header.php
+++ b/inc/templates/header.php
@@ -3,10 +3,17 @@
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>ownCloud</title>
- <base href="<?php echo($WEBROOT); ?>/" />
- <link rel="stylesheet" type="text/css" href="css/default.php" />
+ <base href="<?php echo($WEBROOT); ?>/"/>
+ <link rel="stylesheet" type="text/css" href="css/default.php"/>
+ <script type='text/ecmascript' src='<?php echo($WEBROOT)?>/js/lib_ajax.js'></script>
+ <script type='text/ecmascript' src='<?php echo($WEBROOT)?>/js/lib_xmlloader.js'></script>
+ <script type='text/ecmascript' src='<?php echo($WEBROOT)?>/js/lib_files.js'></script>
+ <script type='text/ecmascript' src='<?php echo($WEBROOT)?>/js/ajax.js'></script>
+ <script type='text/ecmascript'>
+ var WEBROOT='<?php echo($WEBROOT)?>';
+ </script>
</head>
- <body>
+ <body onload='OC_onload.run()'>
<?php
echo('<h1><a id="owncloud-logo" href="'.$WEBROOT.'"><span>ownCloud</span></a></h1>');
@@ -15,6 +22,7 @@ echo('<h1><a id="owncloud-logo" href="'.$WEBROOT.'"><span>ownCloud</span></a></h
$error=OC_CONFIG::writeconfiglisener();
echo $error;
if(empty($CONFIG_ADMINLOGIN)) {
+ global $FIRSTRUN;
$FIRSTRUN=true;
echo('<div class="center">');
echo('<p class="errortext">'.$error.'</p>');
diff --git a/js/ajax.js b/js/ajax.js
new file mode 100644
index 00000000000..6c0185c6592
--- /dev/null
+++ b/js/ajax.js
@@ -0,0 +1,28 @@
+/**
+* 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 <http://www.gnu.org/licenses/>.
+*
+*/
+
+var dir=''
+var loc=document.location.toString();
+if(loc.indexOf('#')!=-1){
+ dir=loc.substring(loc.indexOf('#')+1);
+}
+
+OC_onload.add(new function(){OC_FILES.showbrowser(dir)}); \ No newline at end of file
diff --git a/js/lib_ajax.js b/js/lib_ajax.js
new file mode 100644
index 00000000000..99979422511
--- /dev/null
+++ b/js/lib_ajax.js
@@ -0,0 +1,55 @@
+/**
+* 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 <http://www.gnu.org/licenses/>.
+*
+*/
+
+//The callBack object provides an easy way to pass a member of an object as callback parameter and makes sure that the 'this' is always set correctly when called.
+callBack=function(func,obj){
+ this.func=func;
+ this.obj=obj;
+}
+
+callBack.prototype=function(arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10){
+ this.call(false,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10);
+}
+callBack.prototype.func=false;
+callBack.prototype.obj=false;
+callBack.prototype.call=function(dummy,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10){
+ //the dummy is just to provide compatibility with the normal call function and isn't used
+ this.func.call(this.obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10);
+}
+callBack.prototype.apply=function(dummy,arguments){
+ //the dummy is just to provide compatibility with the normal call function and isn't used
+ this.apply(this.obj,arguments);
+}
+
+//provide a simple way to add things to the onload
+OC_onload=new Object();
+
+OC_onload.items=new Array();
+OC_onload.add=function(callback){
+ OC_onload.items[OC_onload.items.length]=callback;
+}
+OC_onload.run=function(){
+ for(index in OC_onload.items){
+ if(OC_onload.items[index].call){
+ OC_onload.items[index].call();
+ }
+ }
+} \ No newline at end of file
diff --git a/js/lib_files.js b/js/lib_files.js
new file mode 100644
index 00000000000..8d1039a3b0d
--- /dev/null
+++ b/js/lib_files.js
@@ -0,0 +1,306 @@
+/**
+* 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 <http://www.gnu.org/licenses/>.
+*
+*/
+
+OC_FILES=new Object();
+OC_FILES.xmlloader=new OCXMLLoader();
+
+OC_FILES.getdirectorycontent_parse=function(req){
+ var files=new Array();
+ var response=req.responseXML;
+ if(response){
+ var fileElements=response.getElementsByTagName('file');
+ if(fileElements.length>0){
+ for(index in fileElements){
+ var file=new Array();
+ var attributes=Array('size','name','type','directory','date');
+ for(i in attributes){
+ var name=attributes[i];
+ file[name]=fileElements.item(index).getAttribute(name);
+ }
+ files[file.name]=file;
+ }
+ }
+ if(OC_FILES.getdirectorycontent_callback){
+ OC_FILES.getdirectorycontent_callback(files);
+ }
+ }
+}
+
+OC_FILES.getdirectorycontent=function(dir,callback){
+ if(callback){
+ OC_FILES.getdirectorycontent_callback=callback;
+ }
+ OC_FILES.xmlloader.setCallBack(OC_FILES.getdirectorycontent_parse);
+ OC_FILES.xmlloader.load('files/get_files.php?dir='+dir);
+}
+
+OC_FILES.showicon=function(filetype){
+ var td=document.createElement('td');
+ 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{
+ img.src=WEBROOT+'/img/icons/other.png';
+ }
+ return td;
+}
+
+OC_FILES.dir='';
+OC_FILES.browser=null;
+OC_FILES.showbrowser=function(dir){
+ dir=(dir)?dir:'';
+ OC_FILES.dir=dir;
+ OC_FILES.getdirectorycontent(dir,OC_FILES.showbrowser_callback);
+}
+
+OC_FILES.showbrowser_callback=function(content){
+ var dir=OC_FILES.dir
+ var dirs=dir.split('/');
+ var tr=null;
+ var td=null;
+ var img=null;
+
+ //remove current content;
+ var contentNode=document.getElementById('content');
+ if(contentNode.hasChildNodes()){
+ while(contentNode.childNodes.length >=1){
+ contentNode.removeChild(contentNode.firstChild);
+ }
+ }
+
+ // breadcrumb
+ if(dirs.length>0) {
+ var breadcrumb=document.createElement('div');
+ breadcrumb.className='center';
+ var table=document.createElement('table');
+ breadcrumb.appendChild(table);
+ table.setAttribute('cellpadding',2);
+ table.setAttribute('cellspacing',0);
+ var tbody=document.createElement('tbody');//some IE versions need this
+ table.appendChild(tbody);
+ tr=document.createElement('tr');
+ tbody.appendChild(tr);
+ td=document.createElement('td');
+ tr.appendChild(td);
+ td.className='nametext';
+ var a=document.createElement('a');
+ td.appendChild(a);
+ a.setAttribute('href','#');
+ a.setAttribute('onclick','OC_FILES.showbrowser()');
+ a.appendChild(document.createTextNode('Home'));
+ var currentdir='';
+ for(index in dirs) {
+ d=dirs[index];
+ currentdir+='/'+d;
+ if(d!=''){
+ td=document.createElement('td');
+ tr.appendChild(td);
+ td.className='nametext';
+ a=document.createElement('a');
+ td.appendChild(a);
+ a.setAttribute('href','#'+currentdir);
+ a.setAttribute('onclick','OC_FILES.showbrowser("'+currentdir+'")');
+ img=document.createElement('img');
+ a.appendChild(img);
+ img.src=WEBROOT+'/img/arrow.png';
+ a.appendChild(document.createTextNode(' ' +d));
+ }
+ }
+ contentNode.appendChild(breadcrumb);
+ }
+
+ // files and directories
+ var files=document.createElement('div');
+ OC_FILES.browser=files;
+ files.className='center';
+ var table=document.createElement('table');
+ files.appendChild(table);
+ table.setAttribute('cellpadding',6);
+ table.setAttribute('cellspacing',0);
+ table.className='browser';
+ var tbody=document.createElement('tbody');//some IE versions need this
+ table.appendChild(tbody);
+ var filesfound=false;
+ var sizeTd=null;
+ if(content){
+ for(index in content){
+ file=content[index];
+ if(file.name){
+ tr=document.createElement('tr');
+ tbody.appendChild(tr);
+ tr.className='browserline';
+ tr.appendChild(OC_FILES.showicon(file['type']));
+ td=document.createElement('td');
+ tr.appendChild(td);
+ td.className='nametext';
+ td.setAttribute('name',file['name']);
+ a=document.createElement('a');
+ td.appendChild(a);
+ a.appendChild(document.createTextNode(file['name']))
+ if(file['type']=='dir'){
+ a.setAttribute('onclick','OC_FILES.showbrowser("'+dir+file['name']+'")');
+ td.setAttribute('colspan',2);
+ a.setAttribute('href','#'+dir+file['name']);
+ }else{
+ a.setAttribute('href',WEBROOT+'/?dir=/'+dir+'&file='+file['name']);
+ sizeTd=document.createElement('td');
+ tr.appendChild(sizeTd);
+ sizeTd.className='sizetext';
+ sizeTd.appendChild(document.createTextNode(file['size']+' bytes'));
+ }
+ a=document.createElement('a');
+ img=document.createElement('img');
+ td.appendChild(img);
+ img.className='rename';
+ img.alt='rename'
+ img.title='rename';
+ img.src=WEBROOT+'/img/icons/rename.png';
+ img.style.height='16px'
+ img.style.width='16px'
+ img.setAttribute('onclick','OC_FILES.rename(\''+dir+'\',\''+file['name']+'\')')
+ td=document.createElement('td');
+ tr.appendChild(td);
+ td.className='sizetext';
+ td.appendChild(document.createTextNode(file['date']));
+ if(file['type']!='dir'){
+ td=document.createElement('td');
+ tr.appendChild(td);
+ img=document.createElement('img');
+ td.appendChild(img);
+ img.className='delete';
+ img.alt='delete'
+ img.title='delete';
+ img.src=WEBROOT+'/img/icons/delete.png';
+ img.style.height='16px'
+ img.style.width='16px'
+ img.setAttribute('onclick','OC_FILES.remove(\''+dir+'\',\''+file['name']+'\')')
+ }
+ }
+ }
+ }
+ tr=document.createElement('tr');
+ tbody.appendChild(tr);
+ td=document.createElement('td');
+ tr.appendChild(td);
+ td.className='upload';
+ td.setAttribute('colspan','5');
+ this.showuploader(dir,td);
+ contentNode.appendChild(files);
+}
+
+OC_FILES.showuploader=function(dir,parent){
+ this.uploadForm=document.createElement('form');
+ this.uploadForm.setAttribute('target','uploadIFrame');
+ this.uploadForm.setAttribute('action','files/upload.php?dir='+dir);
+ this.uploadForm.method='post';
+ this.uploadForm.setAttribute('enctype','multipart/form-data');
+ this.uploadIFrame=document.createElement('iframe');
+ this.uploadIFrame.className='hidden';
+ this.uploadIFrame.name='uploadIFrame';
+ parent.appendChild(this.uploadIFrame);
+ var file=document.createElement('input');
+ file.name='file';
+ file.setAttribute('type','file');
+ file.setAttribute('onchange','OC_FILES.upload("'+dir+'")');
+ this.uploadForm.appendChild(document.createTextNode('Upload file: '));
+ this.uploadForm.appendChild(file);
+ parent.appendChild(this.uploadForm);
+}
+
+OC_FILES.upload=function(dir){
+ OC_FILES.uploadIFrame.setAttribute('onload',"OC_FILES.upload_callback.call(OC_FILES,'"+dir+"')");
+ OC_FILES.uploadForm.submit();
+}
+
+OC_FILES.upload_callback=function(dir){
+ this.showbrowser(dir);
+}
+
+OC_FILES.rename=function(dir,file){
+ var item=document.getElementsByName(file).item(0);
+ item.oldContent=new 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.setAttribute('onsubmit','return OC_FILES.do_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.setAttribute('onblur','OC_FILES.rename_cancel(\''+file+'\')');
+ form.appendChild(input);
+ item.appendChild(form);
+ input.focus();
+}
+
+OC_FILES.do_rename=function(dir,file){
+ var item=document.getElementById(file+'_newname');
+ var newname=item.value;
+ if(newname==''){
+ return false;
+ }else if(file==newname){
+ OC_FILES.showbrowser(OC_FILES.dir);
+ return false;
+ }
+ xmlloader=new OCXMLLoader();
+ xmlloader.setCallBack(OC_FILES.rename_callback);
+ xmlloader.load('files/rename.php?dir='+dir+'&file='+file+'&newname='+newname);
+ return false;
+}
+
+OC_FILES.rename_callback=function(req){
+ OC_FILES.showbrowser(OC_FILES.dir);
+}
+
+OC_FILES.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.remove=function(dir,file){
+ remove=confirm('remove file \''+file+'\'?');
+ if(remove){
+ xmlloader=new OCXMLLoader();
+ xmlloader.setCallBack(OC_FILES.remove_callback);
+ xmlloader.load('files/delete.php?dir='+dir+'&file='+file);
+ }
+}
+
+OC_FILES.remove_callback=function(req){
+ OC_FILES.showbrowser(OC_FILES.dir);
+} \ No newline at end of file
diff --git a/js/lib_xmlloader.js b/js/lib_xmlloader.js
new file mode 100644
index 00000000000..14fd3ee8af1
--- /dev/null
+++ b/js/lib_xmlloader.js
@@ -0,0 +1,150 @@
+/**
+* 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 <http://www.gnu.org/licenses/>.
+*
+*/
+
+var READY_STATE_UNINITIALIZED=0;
+var READY_STATE_LOADING=1;
+var READY_STATE_LOADED=2;
+var READY_STATE_INTERACTIVE=3;
+var READY_STATE_COMPLETE=4;
+
+/**
+* Class for loaded browser independant xml loading
+*/
+OCXMLLoader=function(){
+ this.errorCallBack=this.defaultError;
+}
+
+OCXMLLoader.prototype={
+ contentType:'',
+ method:'GET',
+ request:'',
+ callBack:null,
+ async:true,
+
+ /**
+ * Loads an XML document
+ * @param string url
+ * @param string request
+ * @none
+ */
+ load:function(url,request){
+ request=(request)?request:"";
+ method=this.method;
+ contentType=(!this.contentType && method=="POST")?"application/x-www-form-urlencoded":this.contentType;
+ if(window.XDomainRequest){
+ req=new XDomainRequest();
+ }else if(window.XMLHttpRequest){
+ req=new XMLHttpRequest();
+ }else if(window.ActiveXObject){
+ req=new ActiveXObject('Microsoft.XMLHTTP')
+ }
+ if (req){
+ try{
+ var loader=this;
+ req.onreadystatechange=function(){
+ loader.onReadyState.call(loader,req)
+ }
+ req.open(method,url,this.async);
+ if (contentType){
+ req.setRequestHeader("Content-Type",contentType);
+ }
+ if(method=="POST"){
+ req.setRequestHeader("Content-length", request.length);
+ req.setRequestHeader("Connection", "close");
+ }
+ req.send(request);
+ }catch (err){
+ this.errorCallBack(req);
+ }
+ }
+ },
+ onReadyState:function(req){
+ var ready=req.readyState;
+ if (ready==READY_STATE_COMPLETE){
+ var HttpStatus=req.status;
+ if (HttpStatus==200 || HttpStatus==0){
+ //alert("response: "+this.req.responseText);
+ this.callBack(req);
+ }else{
+ this.errorCallBack(req);
+ }
+ }
+ },
+ defaultError:function(req){
+ alert("Error fetching data!"
+ +"\n\n<br/><br/>ReadyState: "+req.readyState
+ +"\n<br/>Status: "+req.status
+ +"\n<br/>Headers: "+req.getAllResponseHeaders()
+ +"\n<br/>File: "+req.url
+ +"\n<br/>Response: "+req.responseText);
+ },
+ /**
+ * Sets the request method
+ * @param string method
+ * @none
+ */
+ setMethod:function(method){
+ this.method=method;
+ },
+ /**
+ * Sets the content type
+ * @param string type
+ * @none
+ */
+ setType:function(type){
+ this.type=type;
+ },
+ /**
+ * Sets the callback function
+ * @param function callBack
+ * @none
+ */
+ setCallBack:function(callBack){
+ this.callBack=callBack;
+ },
+ /**
+ * Sets the error callback function
+ * @param function errorCallBack
+ * @none
+ */
+ setErrorCallBack:function(errorCallBack){
+ this.errorCallBack=errorCallBack;
+ }
+}
+
+testClass=function(){
+}
+
+testClass.prototype={
+ testFunc:function(){
+ this.test="test";
+ test=new OCXMLLoader(this);
+ test.setCallBack(this.callBack);
+ test.load(parseUri('%root%/data/sites/index.xml'));
+ },
+ callBack:function(req){
+ alert(this.test);
+ alert(req.responseText);
+ }
+}
+test=new testClass()
+test.testFunc
+// mainLoadStack.append(test.testFunc,test);