Subversion Repositories cryptochat

Compare Revisions

No changes between revisions

Regard whitespace Rev 1 → Rev 2

/trunk/dependencies/sajax/perl/Sajax.pm
0,0 → 1,184
package Sajax;
use Data::Dumper;
 
my $rs_debug_mode = 0;
my $rs_js_has_been_shown = 0;
my %rs_export_list = ();
my %rs_coderef_list = ();
 
sub incl_sajax {
}
sub rs_init {
$rs_debug_mode = 0;
$rs_js_has_been_shown = 0;
%rs_export_list = ();
%rs_coderef_list = ();
 
}
sub rs_handle_client_request {
my($q)=@_;
my $rv="";
if (!defined $q->param("rs")) {
return undef;
}
my $func_name = $q->param("rs");
 
if ( defined $rs_export_list{$func_name}) {
$rv .= "+:";
eval {
$rv .= &$func_name($q->param("rsargs"));
};
if($@) {
print STDERR "Err:[$@]\n";
}
} elsif ( defined $rs_coderef_list{$func_name}) {
$rv .= "+:";
my $cr = $rs_coderef_list{$func_name};
eval {
$rv .= &$cr($q->param("rsargs"));
};
if($@) {
print STDERR "Err:[$@]\n";
}
} else {
$rv .= "-:$func_name not callable";
}
return $rv;
}
sub rs_show_common_js() {
my $rv = "";
my $debug_mode = $rs_debug_mode ? "true" : "false";
my $CC = "\n// Perl backend version (c) copyright 2005 Nathan Schmidt";
$CC = "";
$rv .= <<EOT;
// remote scripting library
// (c) copyright 2005 modernmethod, inc$CC
var rs_debug_mode = $debug_mode;
var rs_obj = false;
var rs_callback = false;
 
function rs_debug(text) {
if (rs_debug_mode)
alert("RSD: " + text)
}
function rs_init_object() {
rs_debug("rs_init_object() called..")
var A;
try {
A=new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
A=new ActiveXObject("Microsoft.XMLHTTP");
} catch (oc) {
A=null;
}
}
if(!A && typeof XMLHttpRequest != "undefined")
A = new XMLHttpRequest();
if (!A)
rs_debug("Could not create connection object.");
return A;
}
EOT
return $rv;
}
 
 
#javascript escape a value
sub rs_esc {
my ($val)=@_;
$val =~ s/\"/\\\\\"/;
return $val;
}
 
sub rs_urlencode {
my($enc) = @_;
$enc =~ s/^\s+|\s+$//gs;
$enc =~ s/([^a-zA-Z0-9_\-.])/uc sprintf("%%%02x",ord($1))/eg;
$enc =~ s/ /\+/g;
$enc =~ s/%20/\+/g;
return $enc;
}
 
sub rs_show_one {
my($q,$func_name)=@_;
my $rv = "";
my $uri = $q->url(-query=>1);
if ($uri =~ m/\?/) {
$uri .= "&rs=".rs_urlencode($func_name);
} else {
$uri .= "?rs=".rs_urlencode($func_name);
}
 
my $urie = rs_esc($uri);
 
$rv .= <<EOT;
 
// wrapper for $func_name
function x_$func_name() {
// count args; build URL
var i, x, n;
var url = "$urie", a = x_$func_name.arguments;
for (i = 0; i < a.length-1; i++)
url = url + "&rsargs=" + escape(a[i]);
url = url.replace( /[+]/g, '%2B'); // fix the unescaped plus signs
x = rs_init_object();
x.open("GET", url, true);
x.onreadystatechange = function() {
if (x.readyState != 4)
return;
rs_debug("received " + x.responseText);
var status;
var data;
status = x.responseText.charAt(0);
data = x.responseText.substring(2);
if (status == "-")
alert("Error: " + callback_n);
else
a[a.length-1](data);
}
x.send(null);
rs_debug("x_$func_name url = " + url);
rs_debug("x_$func_name waiting..");
}
 
 
EOT
return $rv;
}
 
sub rs_register {
my($fn,$coderef)=@_;
$rs_coderef_list{$fn} = $coderef;
}
sub rs_export {
map {$rs_export_list{$_}=$_} @_;
return;
}
 
sub rs_show_javascript {
my ($q) = @_;
my $rv = "";
if (! $rs_js_has_been_shown) {
$rv .= rs_show_common_js();
$rs_js_has_been_shown = 1;
}
 
foreach my $func (keys %rs_export_list) {
$rv .= rs_show_one($q,$func);
}
foreach my $func (keys %rs_coderef_list) {
$rv .= rs_show_one($q,$func);
}
 
return $rv;
}
 
1;
Property changes:
Added: svn:mime-type
+text/x-perl
\ No newline at end of property