Skip to content
Snippets Groups Projects
Commit ba9c9562 authored by Robin Appelman's avatar Robin Appelman
Browse files

ajax interface

parent 3f88fb9f
No related branches found
No related tags found
No related merge requests found
......@@ -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
<?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
<?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
<?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();
?>
<?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
<?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
img/icons/delete.png

641 B

img/icons/rename.png

245 B

......@@ -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;
}
}
......
......@@ -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>');
......
/**
* 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
/**
* 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
/**
* 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
/**
* 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);
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment