mirror of
https://github.com/Yetangitu/ampache
synced 2025-10-05 10:49:37 +02:00
moved back to a GPL flash player for 3.4 codebase, fixed some stream issues (non-m3u playlist types were failing) and tweaked the look of the /test.php page and fixed the xspf playlist generation
This commit is contained in:
parent
d24fe88905
commit
edf482ff3d
28 changed files with 81 additions and 3459 deletions
|
@ -4,6 +4,10 @@
|
|||
|
||||
--------------------------------------------------------------------------
|
||||
v.3.4-Alpha1
|
||||
- Disabled Search, Random Play & Localplay for Alpha release
|
||||
- Repalced CC Flash player with the previous GPL based flash player
|
||||
used patched 0.2.3 version created by Sylvain of
|
||||
http://www.jamendo.com/fr/
|
||||
- Round the downsampled content-length
|
||||
- Fixed cataloging so that Orphaned Albums are always the same year
|
||||
- Added new preferences, created new Playlist Preference section
|
||||
|
|
|
@ -29,17 +29,18 @@
|
|||
class Stream {
|
||||
|
||||
/* Variables from DB */
|
||||
var $type;
|
||||
var $web_path;
|
||||
var $songs = array();
|
||||
var $urls = array();
|
||||
var $sess;
|
||||
public $type;
|
||||
public $web_path;
|
||||
public $songs = array();
|
||||
public $urls = array();
|
||||
public $sess;
|
||||
public $user_id;
|
||||
|
||||
/*!
|
||||
@function stream
|
||||
@discussion constructor for the stream class
|
||||
*/
|
||||
function Stream($type='m3u', $song_ids=0) {
|
||||
/**
|
||||
* Constructor for the stream class takes a type and an array
|
||||
* of song ids
|
||||
*/
|
||||
public function __construct($type='m3u', $song_ids=0) {
|
||||
|
||||
$this->type = $type;
|
||||
$this->songs = $song_ids;
|
||||
|
@ -52,7 +53,7 @@ class Stream {
|
|||
$this->sess = session_id();
|
||||
$this->user_id = $GLOBALS['user']->id;
|
||||
|
||||
} //constructor
|
||||
} // Constructor
|
||||
|
||||
/**
|
||||
* start
|
||||
|
@ -86,18 +87,17 @@ class Stream {
|
|||
* to whatever, this is an exception for when we don't actually
|
||||
* have a object_id but instead a weird or special URL
|
||||
*/
|
||||
function manual_url_add($url) {
|
||||
public function manual_url_add($url) {
|
||||
|
||||
$this->urls[] = $url;
|
||||
|
||||
} // manual_url_add
|
||||
|
||||
/*!
|
||||
@function create_simplem3u
|
||||
@discussion this creates a simple m3u
|
||||
without any of the extended information
|
||||
*/
|
||||
function create_simple_m3u() {
|
||||
/**
|
||||
* create_simplem3u
|
||||
* this creates a simple m3u without any of the extended information
|
||||
*/
|
||||
public function create_simple_m3u() {
|
||||
|
||||
header("Cache-control: public");
|
||||
header("Content-Disposition: filename=playlist.m3u");
|
||||
|
@ -168,7 +168,7 @@ class Stream {
|
|||
foreach ($this->songs as $song_id) {
|
||||
$i++;
|
||||
$song = new Song($song_id);
|
||||
$song->format_song();
|
||||
$song->format();
|
||||
$song_name = $song->f_artist_full . " - " . $song->title . "." . $song->type;
|
||||
$song_url = $song->get_url();
|
||||
echo "File" . $i . "=$song_url\n";
|
||||
|
@ -203,7 +203,7 @@ class Stream {
|
|||
|
||||
foreach ($this->songs as $song_id) {
|
||||
$song = new Song($song_id);
|
||||
$song->format_song();
|
||||
$song->format();
|
||||
$url = $song->get_url();
|
||||
$song_name = $song->f_artist_full . " - " . $song->title . "." . $song->type;
|
||||
|
||||
|
@ -238,22 +238,22 @@ class Stream {
|
|||
|
||||
if (isset($_REQUEST['flash_hack'])) {
|
||||
$flash_hack = '&flash_hack=' . $_REQUEST['flash_hack'];
|
||||
if (!conf('require_session')) { $flash_hack .= '&sid=' . session_id(); }
|
||||
if (!Config::get('require_session')) { $flash_hack .= '&sid=' . session_id(); }
|
||||
}
|
||||
|
||||
// Itterate through the songs
|
||||
foreach ($this->songs as $song_id) {
|
||||
|
||||
$song = new Song($song_id);
|
||||
$song->format_song();
|
||||
$song->format();
|
||||
|
||||
$xml = array();
|
||||
$xml['track']['location'] = $song->get_url() . $flash_hack;
|
||||
$xml['track']['identifier'] = $xml['track']['location'];
|
||||
$xml['track']['title'] = $song->title;
|
||||
$xml['track']['creator'] = $song->f_artist_full;
|
||||
$xml['track']['info'] = conf('web_path') . "/albums.php?action=show&album=" . $song->album;
|
||||
$xml['track']['image'] = conf('web_path') . "/image.php?id=" . $song->album . "&thumb=3&sid=" . session_id();
|
||||
$xml['track']['info'] = Config::get('web_path') . "/albums.php?action=show&album=" . $song->album;
|
||||
$xml['track']['image'] = Config::get('web_path') . "/image.php?id=" . $song->album . "&thumb=3&sid=" . session_id();
|
||||
$xml['track']['album'] = $song->f_album_full;
|
||||
$xml['track']['duration'] = $song->time;
|
||||
$result .= xml_from_array($xml,1,'xspf');
|
||||
|
@ -261,7 +261,7 @@ class Stream {
|
|||
} // end foreach
|
||||
|
||||
header("Cache-control: public");
|
||||
header("Content-Disposition: filename=playlist.xspf");
|
||||
header("Content-Disposition: filename=ampache-playlist.xspf");
|
||||
header("Content-Type: application/xspf+xml; charset=utf-8");
|
||||
echo xml_get_header('xspf');
|
||||
echo $result;
|
||||
|
@ -294,15 +294,18 @@ class Stream {
|
|||
|
||||
// start ugly evil javascript code
|
||||
//FIXME: This needs to go in a template, here for now though
|
||||
if ($GLOBALS['user']->prefs['embed_xspf'] == 1 ){
|
||||
header("Location: ".conf('web_path')."/index.php?xspf&play_info=".$tmp_playlist->id);
|
||||
}else{
|
||||
//FIXME: This preference doesn't even exists, we'll eventually
|
||||
//FIXME: just make it the default
|
||||
if ($GLOBALS['user']->prefs['embed_xspf'] == 1 ){
|
||||
header("Location: ".Config::get('web_path')."/index.php?xspf&play_info=".$tmp_playlist->id);
|
||||
}
|
||||
else {
|
||||
echo "<html><head>\n";
|
||||
echo "<title>" . conf('site_title') . "</title>\n";
|
||||
echo "<title>" . Config::get('site_title') . "</title>\n";
|
||||
echo "<script language=\"javascript\" type=\"text/javascript\">\n";
|
||||
echo "<!-- begin\n";
|
||||
echo "function PlayerPopUp(URL) {\n";
|
||||
echo "window.open(URL, 'XSPF_player', 'width=350,height=300,scrollbars=0,toolbar=0,location=0,directories=0,status=0,resizable=0');\n";
|
||||
echo "window.open(URL, 'XSPF_player', 'width=400,height=200,scrollbars=0,toolbar=0,location=0,directories=0,status=0,resizable=0');\n";
|
||||
echo "window.location = '" . return_referer() . "';\n";
|
||||
echo "return false;\n";
|
||||
echo "}\n";
|
||||
|
@ -310,13 +313,12 @@ class Stream {
|
|||
echo "</script>\n";
|
||||
echo "</head>\n";
|
||||
|
||||
echo "<body onLoad=\"javascript:PlayerPopUp('" . conf('web_path') . "/modules/flash/xspf_player.php" . $play_info . "')\">\n";
|
||||
echo "<body onLoad=\"javascript:PlayerPopUp('" . Config::get('web_path') . "/modules/flash/xspf_player.php" . $play_info . "')\">\n";
|
||||
echo "</body>\n";
|
||||
echo "</html>\n";
|
||||
}
|
||||
} // create_xspf_player
|
||||
|
||||
|
||||
/**
|
||||
* create_localplay
|
||||
* This calls the Localplay API and attempts to
|
||||
|
|
|
@ -61,7 +61,8 @@ function check_database_inserted($dbh,$db_name) {
|
|||
return false;
|
||||
}
|
||||
|
||||
if (!Dba::num_rows($db_results)) {
|
||||
// Make sure the whole table is there
|
||||
if (Dba::num_rows($db_results) != '6') {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
@ -67,7 +67,7 @@ if (!count($results)) {
|
|||
}
|
||||
|
||||
/** This is the version.... fluf nothing more... **/
|
||||
$results['version'] = '3.4-Alpha1 (Build 002)';
|
||||
$results['version'] = '3.4-Alpha1';
|
||||
$results['int_config_version'] = '2';
|
||||
|
||||
$results['raw_web_path'] = $results['web_path'];
|
||||
|
|
|
@ -330,6 +330,14 @@ function create_preference_input($name,$value) {
|
|||
echo "\t<option value=\"append\">" . _('Append to Existing') . "</option>\n";
|
||||
echo "\t<option value=\"default\">" . _('Default') . "</option>\n";
|
||||
echo "</select>\n";
|
||||
break;
|
||||
case 'playlist_method':
|
||||
echo "<select name=\"$name\">\n";
|
||||
echo "\t<option value=\"send\">" . _('Send on Add') . "</option>\n";
|
||||
echo "\t<option value=\"send\">" . _('Send and Clear') . "</option>\n";
|
||||
echo "\t<option value=\"default\">" . _('Default') . "</option>\n";
|
||||
echo "</select>\n";
|
||||
break;
|
||||
default:
|
||||
echo "<input type=\"text\" size=\"$len\" name=\"$name\" value=\"$value\" />";
|
||||
break;
|
||||
|
|
93
lib/song.php
93
lib/song.php
|
@ -27,56 +27,6 @@
|
|||
* and the like
|
||||
*/
|
||||
|
||||
/*!
|
||||
@function get_songs
|
||||
@discussion pass a sql statement, and it gets full song info and returns
|
||||
an array of the goods.. can be set to format them as well
|
||||
*/
|
||||
function get_songs($sql, $action=0) {
|
||||
|
||||
$db_results = mysql_query($sql, dbh());
|
||||
while ($r = mysql_fetch_array($db_results)) {
|
||||
$results[] = $r['id'];
|
||||
}
|
||||
|
||||
return $results;
|
||||
|
||||
|
||||
} // get_songs
|
||||
|
||||
/**
|
||||
* get_songs_from_type
|
||||
* This gets an array of songs based on the type and from the results array
|
||||
* can pull songs from an array of albums, artists whatever
|
||||
*/
|
||||
function get_songs_from_type($type,$results,$artist_id='') {
|
||||
|
||||
// Init the array
|
||||
$songs = array();
|
||||
|
||||
$type = sql_escape($type);
|
||||
|
||||
$sql = "SELECT id FROM song WHERE (";
|
||||
|
||||
foreach ($results as $value) {
|
||||
$value = sql_escape($value);
|
||||
$sql .= "`$type`='$value' OR ";
|
||||
}
|
||||
|
||||
// Run the long query
|
||||
$sql = rtrim($sql,'OR ') . ')';
|
||||
$sql .= " ORDER BY `track`";
|
||||
|
||||
$db_results = mysql_query($sql,dbh());
|
||||
|
||||
while ($r = mysql_fetch_assoc($db_results)) {
|
||||
$songs[] = $r['id'];
|
||||
}
|
||||
|
||||
return $songs;
|
||||
|
||||
} // get_song_from_type
|
||||
|
||||
/**
|
||||
* get_recently_played
|
||||
* This function returns the last X songs that have been played
|
||||
|
@ -105,52 +55,21 @@ function get_recently_played($user_id='') {
|
|||
|
||||
} // get_recently_played
|
||||
|
||||
/**
|
||||
* get_popular_songs
|
||||
* This returns the current popular songs
|
||||
* @package Stream
|
||||
* @catagory Get
|
||||
*/
|
||||
function get_popular_songs( $threshold, $type, $user_id = '' ) {
|
||||
|
||||
$dbh = dbh();
|
||||
|
||||
if ( $type == 'your' ) {
|
||||
$sql = "SELECT object_id FROM object_count" .
|
||||
" WHERE object_type = 'song'" .
|
||||
" AND userid = '$user_id'" .
|
||||
" ORDER BY count DESC LIMIT $threshold";
|
||||
}
|
||||
else {
|
||||
$sql = "SELECT object_id FROM object_count" .
|
||||
" WHERE object_type = 'song'" .
|
||||
" ORDER BY count DESC LIMIT $threshold";
|
||||
}
|
||||
|
||||
$db_result = mysql_query($sql, $dbh);
|
||||
$songs = array();
|
||||
|
||||
while ( $id = mysql_fetch_array($db_result) ) {
|
||||
$songs[] = $id[0];
|
||||
}
|
||||
|
||||
return $songs;
|
||||
|
||||
} // get_popular_songs()
|
||||
|
||||
|
||||
/**
|
||||
* get_song_id_from_file
|
||||
* This function takes a filename and returns it's best guess for a song id
|
||||
* It is used by some of the localplay methods to go from filename to ampache
|
||||
* song record for items that are manualy entered into the clients
|
||||
*/
|
||||
function get_song_id_from_file($filename) {
|
||||
|
||||
$filename = sql_escape($filename);
|
||||
$filename = Dba::escape($filename);
|
||||
|
||||
$sql = "SELECT id FROM song WHERE file LIKE '%$filename'";
|
||||
$db_results = mysql_query($sql, dbh());
|
||||
$sql = "SELECT `id` FROM `song` WHERE `file` LIKE '%$filename'";
|
||||
$db_results = Dba::query($sql);
|
||||
|
||||
$results = mysql_fetch_assoc($db_results);
|
||||
$results = Dba::fetch_assoc($db_results);
|
||||
|
||||
return $results['id'];
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
/*
|
||||
|
||||
Copyright 2001 - 2006 Ampache.org
|
||||
Copyright 2001 - 2007 Ampache.org
|
||||
All Rights Reserved
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
|
|
|
@ -1353,9 +1353,9 @@ function xml_get_header($type){
|
|||
$header = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n" .
|
||||
"<playlist version = \"1\" xmlns=\"http://xspf.org/ns/0/\">\n ".
|
||||
"<title>Ampache XSPF Playlist</title>\n" .
|
||||
"<creator>" . conf('site_title') . "</creator>\n" .
|
||||
"<annotation>" . conf('site_title') . "</annotation>\n" .
|
||||
"<info>". conf('web_path') ."</info>\n" .
|
||||
"<creator>" . Config::get('site_title') . "</creator>\n" .
|
||||
"<annotation>" . Config::get('site_title') . "</annotation>\n" .
|
||||
"<info>". Config::get('web_path') ."</info>\n" .
|
||||
"<trackList>\n\n\n\n";
|
||||
return $header;
|
||||
break;
|
||||
|
|
Binary file not shown.
Binary file not shown.
|
@ -1,48 +0,0 @@
|
|||
XSPF Player + FMP3 by Enrico Lai http://www.enricolai.com
|
||||
|
||||
|
||||
XSPF & FMP3 SWF files are released under Creative Commons License:
|
||||
http://creativecommons.org/licenses/by-nc-nd/2.5/
|
||||
|
||||
EnricoLai.com is NOT responsible of the content diffused with XSPF - FMP3 Player.
|
||||
Please check twice that you have legal rights to diffuse what you're willing to.
|
||||
|
||||
EnricoLai.com given the permission to integrate and distribute XSPF player into http://www.ampache.org Project.
|
||||
|
||||
So you can redistribute XSPF player only with the entire project. For other purpose please contact the author.
|
||||
|
||||
|
||||
¤ You may not:
|
||||
======================
|
||||
|
||||
* re-copy, decompil/disassemble, rename, change, redistribute all XSPF Player files without a direct EnricoLai.com authorization.
|
||||
* Re-sale XSPF Player
|
||||
* Use XSPF Player to diffuse illegal MP3 Files
|
||||
* Use XSPF - FMP3 Player without respect the conditions specified here
|
||||
|
||||
|
||||
¤ You may:
|
||||
======================
|
||||
|
||||
* Install XSPF Player everywhere you need to.
|
||||
|
||||
|
||||
|
||||
¤ PayPal donations:
|
||||
======================
|
||||
|
||||
http://www.ampache.org/team.php
|
||||
|
||||
http://www.enricolai.com/fmp3/xspf-flash-mp3-player.asp
|
||||
|
||||
|
||||
|
||||
|
||||
¤ Disclaimer
|
||||
======================
|
||||
|
||||
For more information about Disclaimer, License and Conditions
|
||||
|
||||
http://www.enricolai.com/FMP3/
|
||||
http://www.enricolai.com/fmp3/xspf-flash-mp3-player.asp
|
||||
|
|
@ -1,49 +0,0 @@
|
|||
XSPF Player - Extended Version
|
||||
|
||||
This version is completely similar, like functionality, to the previous version
|
||||
but it adds the possibility to visualize the photo of album (a JPG 80x80 pixel)
|
||||
beyond that the eventual one link to the page of information.
|
||||
|
||||
XSPF Player does not have need of no language scripting server side.
|
||||
|
||||
XSPF Player is not open source (the .fla is not disclosed), can be unloaded and used free of charge in the Creative respect of the license Commons
|
||||
and in the respect of the Conditions of I use indicated to the end of this page. See license.txt for more information.
|
||||
|
||||
Parameters to pass to the SWF
|
||||
|
||||
variable value
|
||||
folder Absolute distance that it indicates where finds the rows FMP3.swf
|
||||
(http://www.enricolai.com/FMP3/) as an example.
|
||||
The rows that come tried must be called .fmp3.swf. therefore not rinominate the rows.
|
||||
playlist Absolute URL of the playlist in format XSPF to read.
|
||||
As an example http://www.enricolai.com/FMP3/kahvi.xml
|
||||
(rows XML must reside in the same domain in which the application is found).
|
||||
In contrary case you must use one script server side that functions from Gateway.
|
||||
The URL can also make reference to a dynamic script that gives back playlist the XSPF to the flight.
|
||||
color Hexdecimal color (as an example FFCC00) in order to change the color of the background of the player.
|
||||
loop possible values: yes | not | playlist
|
||||
If it comes set up yes the rows mp3 comes reproduced from the every beginning which time arrives to the term.
|
||||
If it comes no instead set up contrary of yes.
|
||||
If it comes set up on playlist the player it passes to the successive trace once finished a trace
|
||||
and continues therefore on the entire list of rows mp3.
|
||||
lma (loop mode active) possible values: yes | no
|
||||
it allows to activate or less the key of the Loop mode that it allows to the customer of set or less the Loop option.
|
||||
textcolor Hexdecimal color (as an example FFCC00) in order to change the color of the text and the icon Audio.
|
||||
action possible values: play | stop
|
||||
The player sets up so that the trace mp3 leaves endured or not.
|
||||
In modality stop the customer must click to play in order to start the trace.
|
||||
vol (volume begins them) is possible to set up a value for the volume from 0 to 100.
|
||||
If the value is not set up the player it reproduces the rows mp3 to maximum volume (100)
|
||||
display Example 1@. - @0@ - @. It tightens that it allows to personalize the visualization of the list.
|
||||
Default the player it visualizes the values of the tag annotation present in playlist the XSPF.
|
||||
The first value before the @ indicates if to visualize or less the progressive numeration for every trace (1, 2, 3 etc etc).
|
||||
According to value it indicates tightens to use in order to separate it the numerical value of the trace from the text.
|
||||
The third value is a numerical value that allows to choose the tag of the XML to visualize using as separatory it tightens
|
||||
it specified in the fourth value. The possible values for the third parameter are:
|
||||
0 - it visualizes the values of the tag title
|
||||
1 - |separatore 4° valore| + visualizes the values of tag creator + title
|
||||
2 - |separatore 4° valore| + visualizes the values of tag title + creator
|
||||
3 - |separatore 4° valore| + visualizes the values of tag album + title
|
||||
4 - |separatore 4° valore| + visualizes the values of tag title + album
|
||||
viewinfo If set on true it visualizes push-button INFO on the photo of the album and allows to activate
|
||||
the link to the page specified in the tag info of rows XSPF.
|
|
@ -1,138 +0,0 @@
|
|||
/**
|
||||
* SWFObject v1.4.4: Flash Player detection and embed - http://blog.deconcept.com/swfobject/
|
||||
*
|
||||
* SWFObject is (c) 2006 Geoff Stearns and is released under the MIT License:
|
||||
* http://www.opensource.org/licenses/mit-license.php
|
||||
*
|
||||
* **SWFObject is the SWF embed script formerly known as FlashObject. The name was changed for
|
||||
* legal reasons.
|
||||
*/
|
||||
if(typeof deconcept=="undefined"){var deconcept=new Object();}
|
||||
if(typeof deconcept.util=="undefined"){deconcept.util=new Object();}
|
||||
if(typeof deconcept.SWFObjectUtil=="undefined"){deconcept.SWFObjectUtil=new Object();}
|
||||
deconcept.SWFObject=function(_1,id,w,h,_5,c,_7,_8,_9,_a,_b){if(!document.getElementById){return;}
|
||||
this.DETECT_KEY=_b?_b:"detectflash";
|
||||
this.skipDetect=deconcept.util.getRequestParameter(this.DETECT_KEY);
|
||||
this.params=new Object();
|
||||
this.variables=new Object();
|
||||
this.attributes=new Array();
|
||||
if(_1){this.setAttribute("swf",_1);}
|
||||
if(id){this.setAttribute("id",id);}
|
||||
if(w){this.setAttribute("width",w);}
|
||||
if(h){this.setAttribute("height",h);}
|
||||
if(_5){this.setAttribute("version",new deconcept.PlayerVersion(_5.toString().split(".")));}
|
||||
this.installedVer=deconcept.SWFObjectUtil.getPlayerVersion();
|
||||
if(c){this.addParam("bgcolor",c);}
|
||||
var q=_8?_8:"high";
|
||||
this.addParam("quality",q);
|
||||
this.setAttribute("useExpressInstall",_7);
|
||||
this.setAttribute("doExpressInstall",false);
|
||||
var _d=(_9)?_9:window.location;
|
||||
this.setAttribute("xiRedirectUrl",_d);
|
||||
this.setAttribute("redirectUrl","");
|
||||
if(_a){this.setAttribute("redirectUrl",_a);}};
|
||||
deconcept.SWFObject.prototype={setAttribute:function(_e,_f){
|
||||
this.attributes[_e]=_f;
|
||||
},getAttribute:function(_10){
|
||||
return this.attributes[_10];
|
||||
},addParam:function(_11,_12){
|
||||
this.params[_11]=_12;
|
||||
},getParams:function(){
|
||||
return this.params;
|
||||
},addVariable:function(_13,_14){
|
||||
this.variables[_13]=_14;
|
||||
},getVariable:function(_15){
|
||||
return this.variables[_15];
|
||||
},getVariables:function(){
|
||||
return this.variables;
|
||||
},getVariablePairs:function(){
|
||||
var _16=new Array();
|
||||
var key;
|
||||
var _18=this.getVariables();
|
||||
for(key in _18){_16.push(key+"="+_18[key]);}
|
||||
return _16;},getSWFHTML:function(){var _19="";
|
||||
if(navigator.plugins&&navigator.mimeTypes&&navigator.mimeTypes.length){
|
||||
if(this.getAttribute("doExpressInstall")){
|
||||
this.addVariable("MMplayerType","PlugIn");}
|
||||
_19="<embed type=\"application/x-shockwave-flash\" src=\""+this.getAttribute("swf")+"\" width=\""+this.getAttribute("width")+"\" height=\""+this.getAttribute("height")+"\"";
|
||||
_19+=" id=\""+this.getAttribute("id")+"\" name=\""+this.getAttribute("id")+"\" ";
|
||||
var _1a=this.getParams();
|
||||
for(var key in _1a){_19+=[key]+"=\""+_1a[key]+"\" ";}
|
||||
var _1c=this.getVariablePairs().join("&");
|
||||
if(_1c.length>0){_19+="flashvars=\""+_1c+"\"";}_19+="/>";
|
||||
}else{if(this.getAttribute("doExpressInstall")){this.addVariable("MMplayerType","ActiveX");}
|
||||
_19="<object id=\""+this.getAttribute("id")+"\" classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\" width=\""+this.getAttribute("width")+"\" height=\""+this.getAttribute("height")+"\">";
|
||||
_19+="<param name=\"movie\" value=\""+this.getAttribute("swf")+"\" />";
|
||||
var _1d=this.getParams();
|
||||
for(var key in _1d){_19+="<param name=\""+key+"\" value=\""+_1d[key]+"\" />";}
|
||||
var _1f=this.getVariablePairs().join("&");
|
||||
if(_1f.length>0){_19+="<param name=\"flashvars\" value=\""+_1f+"\" />";}_19+="</object>";}
|
||||
return _19;
|
||||
},write:function(_20){
|
||||
if(this.getAttribute("useExpressInstall")){
|
||||
var _21=new deconcept.PlayerVersion([6,0,65]);
|
||||
if(this.installedVer.versionIsValid(_21)&&!this.installedVer.versionIsValid(this.getAttribute("version"))){
|
||||
this.setAttribute("doExpressInstall",true);
|
||||
this.addVariable("MMredirectURL",escape(this.getAttribute("xiRedirectUrl")));
|
||||
document.title=document.title.slice(0,47)+" - Flash Player Installation";
|
||||
this.addVariable("MMdoctitle",document.title);}}
|
||||
if(this.skipDetect||this.getAttribute("doExpressInstall")||this.installedVer.versionIsValid(this.getAttribute("version"))){
|
||||
var n=(typeof _20=="string")?document.getElementById(_20):_20;
|
||||
n.innerHTML=this.getSWFHTML();return true;
|
||||
}else{if(this.getAttribute("redirectUrl")!=""){document.location.replace(this.getAttribute("redirectUrl"));}}
|
||||
return false;}};
|
||||
deconcept.SWFObjectUtil.getPlayerVersion=function(){
|
||||
var _23=new deconcept.PlayerVersion([0,0,0]);
|
||||
if(navigator.plugins&&navigator.mimeTypes.length){
|
||||
var x=navigator.plugins["Shockwave Flash"];
|
||||
if(x&&x.description){_23=new deconcept.PlayerVersion(x.description.replace(/([a-zA-Z]|\s)+/,"").replace(/(\s+r|\s+b[0-9]+)/,".").split("."));}
|
||||
}else{try{var axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");}
|
||||
catch(e){try{var axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
|
||||
_23=new deconcept.PlayerVersion([6,0,21]);axo.AllowScriptAccess="always";}
|
||||
catch(e){if(_23.major==6){return _23;}}try{axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash");}
|
||||
catch(e){}}if(axo!=null){_23=new deconcept.PlayerVersion(axo.GetVariable("$version").split(" ")[1].split(","));}}
|
||||
return _23;};
|
||||
deconcept.PlayerVersion=function(_27){
|
||||
this.major=_27[0]!=null?parseInt(_27[0]):0;
|
||||
this.minor=_27[1]!=null?parseInt(_27[1]):0;
|
||||
this.rev=_27[2]!=null?parseInt(_27[2]):0;
|
||||
};
|
||||
deconcept.PlayerVersion.prototype.versionIsValid=function(fv){
|
||||
if(this.major<fv.major){return false;}
|
||||
if(this.major>fv.major){return true;}
|
||||
if(this.minor<fv.minor){return false;}
|
||||
if(this.minor>fv.minor){return true;}
|
||||
if(this.rev<fv.rev){
|
||||
return false;
|
||||
}return true;};
|
||||
deconcept.util={getRequestParameter:function(_29){
|
||||
var q=document.location.search||document.location.hash;
|
||||
if(q){var _2b=q.substring(1).split("&");
|
||||
for(var i=0;i<_2b.length;i++){
|
||||
if(_2b[i].substring(0,_2b[i].indexOf("="))==_29){
|
||||
return _2b[i].substring((_2b[i].indexOf("=")+1));}}}
|
||||
return "";}};
|
||||
deconcept.SWFObjectUtil.cleanupSWFs=function(){if(window.opera||!document.all){return;}
|
||||
var _2d=document.getElementsByTagName("OBJECT");
|
||||
for(var i=0;i<_2d.length;i++){_2d[i].style.display="none";for(var x in _2d[i]){
|
||||
if(typeof _2d[i][x]=="function"){_2d[i][x]=function(){};}}}};
|
||||
deconcept.SWFObjectUtil.prepUnload=function(){__flash_unloadHandler=function(){};
|
||||
__flash_savedUnloadHandler=function(){};
|
||||
if(typeof window.onunload=="function"){
|
||||
var _30=window.onunload;
|
||||
window.onunload=function(){
|
||||
deconcept.SWFObjectUtil.cleanupSWFs();_30();};
|
||||
}else{window.onunload=deconcept.SWFObjectUtil.cleanupSWFs;}};
|
||||
if(typeof window.onbeforeunload=="function"){
|
||||
var oldBeforeUnload=window.onbeforeunload;
|
||||
window.onbeforeunload=function(){
|
||||
deconcept.SWFObjectUtil.prepUnload();
|
||||
oldBeforeUnload();};
|
||||
}else{window.onbeforeunload=deconcept.SWFObjectUtil.prepUnload;}
|
||||
if(Array.prototype.push==null){
|
||||
Array.prototype.push=function(_31){
|
||||
this[this.length]=_31;
|
||||
return this.length;};}
|
||||
var getQueryParamValue=deconcept.util.getRequestParameter;
|
||||
var FlashObject=deconcept.SWFObject;
|
||||
var SWFObject=deconcept.SWFObject;
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
/*
|
||||
|
||||
Copyright (c) 2001 - 2006 Ampache.org
|
||||
Copyright (c) 2001 - 2007 Ampache.org
|
||||
All rights reserved.
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
|
@ -19,11 +19,9 @@
|
|||
|
||||
*/
|
||||
|
||||
require_once('../../lib/init.php');
|
||||
require_once '../../lib/init.php';
|
||||
|
||||
|
||||
$dbh = dbh();
|
||||
$web_path = conf('web_path');
|
||||
$web_path = Config::get('web_path');
|
||||
|
||||
/* Attempt to build the temp playlist */
|
||||
$action = scrub_in($_REQUEST['action']);
|
||||
|
@ -40,7 +38,7 @@ switch ($action) {
|
|||
break;
|
||||
case 'show':
|
||||
$play_info = "?tmp_id=" . scrub_out($_REQUEST['tmpplaylist_id']);
|
||||
require_once (conf('prefix') . '/templates/show_xspf_player.inc.php');
|
||||
require_once Config::get('prefix') . '/templates/show_xspf_player.inc.php';
|
||||
break;
|
||||
} // end switch
|
||||
|
||||
|
|
Binary file not shown.
|
@ -1,106 +0,0 @@
|
|||
====================================================================
|
||||
xajax PHP Class Library
|
||||
The easiest way to develop asynchronous Ajax applications with PHP
|
||||
|
||||
Version 0.2.4 (stable release)
|
||||
README Text File
|
||||
|
||||
------------------------------------------------------
|
||||
| Release Notes: |
|
||||
| http://wiki.xajaxproject.org/0.2.4_Release_Notes |
|
||||
| |
|
||||
| Lead Developers: |
|
||||
| Jared White (jared@intuitivefuture.com) |
|
||||
| J. Max Wilson (jmaxwilson@users.sourceforge.net) |
|
||||
| Eion Robb (eion@bigfoot.com) |
|
||||
------------------------------------------------------
|
||||
====================================================================
|
||||
|
||||
:: To find out what's changed since the 0.2.3 release of xajax, ::
|
||||
:: view the Release Notes in the link above. ::
|
||||
|
||||
1. Introduction
|
||||
|
||||
xajax is a PHP library that you can include in your PHP scripts
|
||||
to provide an easy way for Web pages to call PHP functions or
|
||||
object methods using Ajax (Asynchronous Javascript And XML). Simply
|
||||
register one or more functions/methods with the xajax object that
|
||||
return a proper XML response using the supplied response class, add
|
||||
a statement in your HTML header to print the Javascript include,
|
||||
and run a request processor prior to outputting any HTML. Then add
|
||||
some simple Javascript function calls to your HTML, and xajax takes
|
||||
care of the rest!
|
||||
|
||||
xajax includes a Javascript object to facilitate the communication
|
||||
between the browser and the server, and it can also be used as a
|
||||
Javascript library directly to simplify certain DOM and event
|
||||
manipulations. However, you can definitely choose to use a
|
||||
dedicated Javascript "engine" of your liking and integrate it with
|
||||
xajax's client/server communication features in a number of ways.
|
||||
More tightly-coupled integration will be forthcoming in a future
|
||||
version of xajax.
|
||||
|
||||
2. For More Information
|
||||
|
||||
The official xajax Web site is located at:
|
||||
http://www.xajaxproject.org
|
||||
|
||||
Visit the xajax Forums at:
|
||||
http://community.xajaxproject.org
|
||||
to keep track of the latest news and participate in the community
|
||||
discussion.
|
||||
|
||||
There is also a wiki with documentation, tips & tricks, and other
|
||||
information located at:
|
||||
http://wiki.xajaxproject.org
|
||||
|
||||
3. Installation
|
||||
|
||||
To run xajax, you need:
|
||||
* Apache Web Server or IIS for Windows XP/2003 Server
|
||||
(other servers may or may not work and are not supported at this
|
||||
time)
|
||||
* PHP 4.3.x or PHP 5.x
|
||||
* Minimum supported browsers: Internet Explorer 5.5, Firefox 1.0 (or
|
||||
equivalent Gecko-based browser), Safari 1.3, Opera 8.5 (older
|
||||
versions only work with GET requests)
|
||||
|
||||
To install xajax:
|
||||
Unpack the contents of this archive and copy them to your main Web
|
||||
site folder. Or if you wish, you can put all of the files in a
|
||||
dedicated "xajax" folder on your Web server (make sure that you
|
||||
know what that URL is relative your site pages so you can provide
|
||||
xajax with the correct installed folder URL). Note that the
|
||||
|
||||
"thewall" folder in the "examples" folder needs to be writable by
|
||||
|
||||
the Web server for that example to function.
|
||||
|
||||
Within the main xajax folder there are two folders: "examples"
|
||||
and "tests". You should be able to view these PHP pages from your
|
||||
Web browser and see xajax working in action. If you can view the
|
||||
pages but the AJAX calls are not working, there may be something
|
||||
wrong with your server setup or perhaps your browser is not
|
||||
supported or configured correctly. If worst comes to worst, post
|
||||
a message in our forums and someone may be able to help you.
|
||||
|
||||
4. Documentation
|
||||
|
||||
Detailed documentation for the xajax PHP classes is available on
|
||||
our wiki (URL listed above in section 2), and more is on the way
|
||||
(particularly in regards to the Javascript component of xajax).
|
||||
Another good way of learning xajax is to look at the code for the
|
||||
examples and tests. If you need any help, pop in the forums and
|
||||
ask for assistance (and the more specific your questions are,
|
||||
the better the answers will be).
|
||||
|
||||
5. Contributing to xajax
|
||||
|
||||
xajax is released under the LGPL open source license. If you wish
|
||||
to contribute to the project or suggest new features, introduce
|
||||
yourself on the forums or you can e-mail the lead developers at
|
||||
the addresses listed at the top of this README.
|
||||
|
||||
6. Good luck and enjoy!
|
||||
|
||||
====================================================================
|
File diff suppressed because it is too large
Load diff
|
@ -1,182 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* xajaxCompress.php :: function to compress Javascript
|
||||
*
|
||||
* xajax version 0.2.4
|
||||
* copyright (c) 2005 by Jared White & J. Max Wilson
|
||||
* http://www.xajaxproject.org
|
||||
*
|
||||
* xajax is an open source PHP class library for easily creating powerful
|
||||
* PHP-driven, web-based Ajax Applications. Using xajax, you can asynchronously
|
||||
* call PHP functions and update the content of your your webpage without
|
||||
* reloading the page.
|
||||
*
|
||||
* xajax is released under the terms of the LGPL license
|
||||
* http://www.gnu.org/copyleft/lesser.html#SEC3
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) 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
|
||||
* Lesser 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, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* @package xajax
|
||||
* @version $Id$
|
||||
* @copyright Copyright (c) 2005-2006 by Jared White & J. Max Wilson
|
||||
* @license http://www.gnu.org/copyleft/lesser.html#SEC3 LGPL License
|
||||
*/
|
||||
|
||||
/**
|
||||
* Compresses the Javascript code for more efficient delivery.
|
||||
* (used internally)
|
||||
*
|
||||
* @param string contains the Javascript code to compress
|
||||
*/
|
||||
function xajaxCompressJavascript($sJS)
|
||||
{
|
||||
//remove windows cariage returns
|
||||
$sJS = str_replace("\r","",$sJS);
|
||||
|
||||
//array to store replaced literal strings
|
||||
$literal_strings = array();
|
||||
|
||||
//explode the string into lines
|
||||
$lines = explode("\n",$sJS);
|
||||
//loop through all the lines, building a new string at the same time as removing literal strings
|
||||
$clean = "";
|
||||
$inComment = false;
|
||||
$literal = "";
|
||||
$inQuote = false;
|
||||
$escaped = false;
|
||||
$quoteChar = "";
|
||||
|
||||
for($i=0;$i<count($lines);$i++)
|
||||
{
|
||||
$line = $lines[$i];
|
||||
$inNormalComment = false;
|
||||
|
||||
//loop through line's characters and take out any literal strings, replace them with ___i___ where i is the index of this string
|
||||
for($j=0;$j<strlen($line);$j++)
|
||||
{
|
||||
$c = substr($line,$j,1);
|
||||
$d = substr($line,$j,2);
|
||||
|
||||
//look for start of quote
|
||||
if(!$inQuote && !$inComment)
|
||||
{
|
||||
//is this character a quote or a comment
|
||||
if(($c=="\"" || $c=="'") && !$inComment && !$inNormalComment)
|
||||
{
|
||||
$inQuote = true;
|
||||
$inComment = false;
|
||||
$escaped = false;
|
||||
$quoteChar = $c;
|
||||
$literal = $c;
|
||||
}
|
||||
else if($d=="/*" && !$inNormalComment)
|
||||
{
|
||||
$inQuote = false;
|
||||
$inComment = true;
|
||||
$escaped = false;
|
||||
$quoteChar = $d;
|
||||
$literal = $d;
|
||||
$j++;
|
||||
}
|
||||
else if($d=="//") //ignore string markers that are found inside comments
|
||||
{
|
||||
$inNormalComment = true;
|
||||
$clean .= $c;
|
||||
}
|
||||
else
|
||||
{
|
||||
$clean .= $c;
|
||||
}
|
||||
}
|
||||
else //allready in a string so find end quote
|
||||
{
|
||||
if($c == $quoteChar && !$escaped && !$inComment)
|
||||
{
|
||||
$inQuote = false;
|
||||
$literal .= $c;
|
||||
|
||||
//subsitute in a marker for the string
|
||||
$clean .= "___" . count($literal_strings) . "___";
|
||||
|
||||
//push the string onto our array
|
||||
array_push($literal_strings,$literal);
|
||||
|
||||
}
|
||||
else if($inComment && $d=="*/")
|
||||
{
|
||||
$inComment = false;
|
||||
$literal .= $d;
|
||||
|
||||
//subsitute in a marker for the string
|
||||
$clean .= "___" . count($literal_strings) . "___";
|
||||
|
||||
//push the string onto our array
|
||||
array_push($literal_strings,$literal);
|
||||
|
||||
$j++;
|
||||
}
|
||||
else if($c == "\\" && !$escaped)
|
||||
$escaped = true;
|
||||
else
|
||||
$escaped = false;
|
||||
|
||||
$literal .= $c;
|
||||
}
|
||||
}
|
||||
if($inComment) $literal .= "\n";
|
||||
$clean .= "\n";
|
||||
}
|
||||
//explode the clean string into lines again
|
||||
$lines = explode("\n",$clean);
|
||||
|
||||
//now process each line at a time
|
||||
for($i=0;$i<count($lines);$i++)
|
||||
{
|
||||
$line = $lines[$i];
|
||||
|
||||
//remove comments
|
||||
$line = preg_replace("/\/\/(.*)/","",$line);
|
||||
|
||||
//strip leading and trailing whitespace
|
||||
$line = trim($line);
|
||||
|
||||
//remove all whitespace with a single space
|
||||
$line = preg_replace("/\s+/"," ",$line);
|
||||
|
||||
//remove any whitespace that occurs after/before an operator
|
||||
$line = preg_replace("/\s*([!\}\{;,&=\|\-\+\*\/\)\(:])\s*/","\\1",$line);
|
||||
|
||||
$lines[$i] = $line;
|
||||
}
|
||||
|
||||
//implode the lines
|
||||
$sJS = implode("\n",$lines);
|
||||
|
||||
//make sure there is a max of 1 \n after each line
|
||||
$sJS = preg_replace("/[\n]+/","\n",$sJS);
|
||||
|
||||
//strip out line breaks that immediately follow a semi-colon
|
||||
$sJS = preg_replace("/;\n/",";",$sJS);
|
||||
|
||||
//curly brackets aren't on their own
|
||||
$sJS = preg_replace("/[\n]*\{[\n]*/","{",$sJS);
|
||||
|
||||
//finally loop through and replace all the literal strings:
|
||||
for($i=0;$i<count($literal_strings);$i++)
|
||||
$sJS = str_replace("___".$i."___",$literal_strings[$i],$sJS);
|
||||
|
||||
return $sJS;
|
||||
}
|
||||
?>
|
|
@ -1,580 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* xajaxResponse.inc.php :: xajax XML response class
|
||||
*
|
||||
* xajax version 0.2.4
|
||||
* copyright (c) 2005 by Jared White & J. Max Wilson
|
||||
* http://www.xajaxproject.org
|
||||
*
|
||||
* xajax is an open source PHP class library for easily creating powerful
|
||||
* PHP-driven, web-based Ajax Applications. Using xajax, you can asynchronously
|
||||
* call PHP functions and update the content of your your webpage without
|
||||
* reloading the page.
|
||||
*
|
||||
* xajax is released under the terms of the LGPL license
|
||||
* http://www.gnu.org/copyleft/lesser.html#SEC3
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) 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
|
||||
* Lesser 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, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* @package xajax
|
||||
* @version $Id$
|
||||
* @copyright Copyright (c) 2005-2006 by Jared White & J. Max Wilson
|
||||
* @license http://www.gnu.org/copyleft/lesser.html#SEC3 LGPL License
|
||||
*/
|
||||
|
||||
/*
|
||||
----------------------------------------------------------------------------
|
||||
| Online documentation for this class is available on the xajax wiki at: |
|
||||
| http://wiki.xajaxproject.org/Documentation:xajaxResponse.inc.php |
|
||||
----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* The xajaxResponse class is used to create responses to be sent back to your
|
||||
* Web page. A response contains one or more command messages for updating
|
||||
* your page.
|
||||
* Currently xajax supports 21 kinds of command messages, including some common
|
||||
* ones such as:
|
||||
* <ul>
|
||||
* <li>Assign - sets the specified attribute of an element in your page</li>
|
||||
* <li>Append - appends data to the end of the specified attribute of an
|
||||
* element in your page</li>
|
||||
* <li>Prepend - prepends data to the beginning of the specified attribute of
|
||||
* an element in your page</li>
|
||||
* <li>Replace - searches for and replaces data in the specified attribute of
|
||||
* an element in your page</li>
|
||||
* <li>Script - runs the supplied JavaScript code</li>
|
||||
* <li>Alert - shows an alert box with the supplied message text</li>
|
||||
* </ul>
|
||||
*
|
||||
* <i>Note:</i> elements are identified by their HTML id, so if you don't see
|
||||
* your browser HTML display changing from the request, make sure you're using
|
||||
* the right id names in your response.
|
||||
*
|
||||
* @package xajax
|
||||
*/
|
||||
class xajaxResponse
|
||||
{
|
||||
/**#@+
|
||||
* @access protected
|
||||
*/
|
||||
/**
|
||||
* @var string internal XML storage
|
||||
*/
|
||||
var $xml;
|
||||
/**
|
||||
* @var string the encoding type to use
|
||||
*/
|
||||
var $sEncoding;
|
||||
/**
|
||||
* @var boolean if special characters in the XML should be converted to
|
||||
* entities
|
||||
*/
|
||||
var $bOutputEntities;
|
||||
|
||||
/**#@-*/
|
||||
|
||||
/**
|
||||
* The constructor's main job is to set the character encoding for the
|
||||
* response.
|
||||
*
|
||||
* <i>Note:</i> to change the character encoding for all of the
|
||||
* responses, set the XAJAX_DEFAULT_ENCODING constant before you
|
||||
* instantiate xajax.
|
||||
*
|
||||
* @param string contains the character encoding string to use
|
||||
* @param boolean lets you set if you want special characters in the output
|
||||
* converted to HTML entities
|
||||
*
|
||||
*/
|
||||
function xajaxResponse($sEncoding=XAJAX_DEFAULT_CHAR_ENCODING, $bOutputEntities=false)
|
||||
{
|
||||
$this->setCharEncoding($sEncoding);
|
||||
$this->bOutputEntities = $bOutputEntities;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the character encoding for the response based on $sEncoding, which
|
||||
* is a string containing the character encoding to use. You don't need to
|
||||
* use this method normally, since the character encoding for the response
|
||||
* gets set automatically based on the XAJAX_DEFAULT_CHAR_ENCODING
|
||||
* constant.
|
||||
*
|
||||
* @param string
|
||||
*/
|
||||
function setCharEncoding($sEncoding)
|
||||
{
|
||||
$this->sEncoding = $sEncoding;
|
||||
}
|
||||
|
||||
/**
|
||||
* Tells the response object to convert special characters to HTML entities
|
||||
* automatically (only works if the mb_string extension is available).
|
||||
*/
|
||||
function outputEntitiesOn()
|
||||
{
|
||||
$this->bOutputEntities = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Tells the response object to output special characters intact. (default
|
||||
* behavior)
|
||||
*/
|
||||
function outputEntitiesOff()
|
||||
{
|
||||
$this->bOutputEntities = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a confirm commands command message to the XML response.
|
||||
*
|
||||
* <i>Usage:</i> <kbd>$objResponse->addConfirmCommands(1, "Do you want to preview the new data?");</kbd>
|
||||
*
|
||||
* @param integer the number of commands to skip if the user presses
|
||||
* Cancel in the browsers's confirm dialog
|
||||
* @param string the message to show in the browser's confirm dialog
|
||||
*/
|
||||
function addConfirmCommands($iCmdNumber, $sMessage)
|
||||
{
|
||||
$this->xml .= $this->_cmdXML(array("n"=>"cc","t"=>$iCmdNumber),$sMessage);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds an assign command message to the XML response.
|
||||
*
|
||||
* <i>Usage:</i> <kbd>$objResponse->addAssign("contentDiv", "innerHTML", "Some Text");</kbd>
|
||||
*
|
||||
* @param string contains the id of an HTML element
|
||||
* @param string the part of the element you wish to modify ("innerHTML",
|
||||
* "value", etc.)
|
||||
* @param string the data you want to set the attribute to
|
||||
*/
|
||||
function addAssign($sTarget,$sAttribute,$sData)
|
||||
{
|
||||
$this->xml .= $this->_cmdXML(array("n"=>"as","t"=>$sTarget,"p"=>$sAttribute),$sData);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds an append command message to the XML response.
|
||||
*
|
||||
* <i>Usage:</i> <kbd>$objResponse->addAppend("contentDiv", "innerHTML", "Some New Text");</kbd>
|
||||
*
|
||||
* @param string contains the id of an HTML element
|
||||
* @param string the part of the element you wish to modify ("innerHTML",
|
||||
* "value", etc.)
|
||||
* @param string the data you want to append to the end of the attribute
|
||||
*/
|
||||
function addAppend($sTarget,$sAttribute,$sData)
|
||||
{
|
||||
$this->xml .= $this->_cmdXML(array("n"=>"ap","t"=>$sTarget,"p"=>$sAttribute),$sData);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds an prepend command message to the XML response.
|
||||
*
|
||||
* <i>Usage:</i> <kbd>$objResponse->addPrepend("contentDiv", "innerHTML", "Some Starting Text");</kbd>
|
||||
*
|
||||
* @param string contains the id of an HTML element
|
||||
* @param string the part of the element you wish to modify ("innerHTML",
|
||||
* "value", etc.)
|
||||
* @param string the data you want to prepend to the beginning of the
|
||||
* attribute
|
||||
*/
|
||||
function addPrepend($sTarget,$sAttribute,$sData)
|
||||
{
|
||||
$this->xml .= $this->_cmdXML(array("n"=>"pp","t"=>$sTarget,"p"=>$sAttribute),$sData);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a replace command message to the XML response.
|
||||
*
|
||||
* <i>Usage:</i> <kbd>$objResponse->addReplace("contentDiv", "innerHTML", "text", "<b>text</b>");</kbd>
|
||||
*
|
||||
* @param string contains the id of an HTML element
|
||||
* @param string the part of the element you wish to modify ("innerHTML",
|
||||
* "value", etc.)
|
||||
* @param string the string to search for
|
||||
* @param string the string to replace the search string when found in the
|
||||
* attribute
|
||||
*/
|
||||
function addReplace($sTarget,$sAttribute,$sSearch,$sData)
|
||||
{
|
||||
$sDta = "<s><![CDATA[$sSearch]]></s><r><![CDATA[$sData]]></r>";
|
||||
$this->xml .= $this->_cmdXML(array("n"=>"rp","t"=>$sTarget,"p"=>$sAttribute),$sDta);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a clear command message to the XML response.
|
||||
*
|
||||
* <i>Usage:</i> <kbd>$objResponse->addClear("contentDiv", "innerHTML");</kbd>
|
||||
*
|
||||
* @param string contains the id of an HTML element
|
||||
* @param string the part of the element you wish to clear ("innerHTML",
|
||||
* "value", etc.)
|
||||
*/
|
||||
function addClear($sTarget,$sAttribute)
|
||||
{
|
||||
$this->addAssign($sTarget,$sAttribute,'');
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds an alert command message to the XML response.
|
||||
*
|
||||
* <i>Usage:</i> <kbd>$objResponse->addAlert("This is important information");</kbd>
|
||||
*
|
||||
* @param string the text to be displayed in the Javascript alert box
|
||||
*/
|
||||
function addAlert($sMsg)
|
||||
{
|
||||
$this->xml .= $this->_cmdXML(array("n"=>"al"),$sMsg);
|
||||
}
|
||||
|
||||
/**
|
||||
* Uses the addScript() method to add a Javascript redirect to another URL.
|
||||
*
|
||||
* <i>Usage:</i> <kbd>$objResponse->addRedirect("http://www.xajaxproject.org");</kbd>
|
||||
*
|
||||
* @param string the URL to redirect the client browser to
|
||||
*/
|
||||
function addRedirect($sURL)
|
||||
{
|
||||
//we need to parse the query part so that the values are rawurlencode()'ed
|
||||
//can't just use parse_url() cos we could be dealing with a relative URL which
|
||||
// parse_url() can't deal with.
|
||||
$queryStart = strpos($sURL, '?', strrpos($sURL, '/'));
|
||||
if ($queryStart !== FALSE)
|
||||
{
|
||||
$queryStart++;
|
||||
$queryEnd = strpos($sURL, '#', $queryStart);
|
||||
if ($queryEnd === FALSE)
|
||||
$queryEnd = strlen($sURL);
|
||||
$queryPart = substr($sURL, $queryStart, $queryEnd-$queryStart);
|
||||
parse_str($queryPart, $queryParts);
|
||||
$newQueryPart = "";
|
||||
foreach($queryParts as $key => $value)
|
||||
{
|
||||
$newQueryPart .= rawurlencode($key).'='.rawurlencode($value).ini_get('arg_separator.output');
|
||||
}
|
||||
$sURL = str_replace($queryPart, $newQueryPart, $sURL);
|
||||
}
|
||||
$this->addScript('window.location = "'.$sURL.'";');
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a Javascript command message to the XML response.
|
||||
*
|
||||
* <i>Usage:</i> <kbd>$objResponse->addScript("var x = prompt('get some text');");</kbd>
|
||||
*
|
||||
* @param string contains Javascript code to be executed
|
||||
*/
|
||||
function addScript($sJS)
|
||||
{
|
||||
$this->xml .= $this->_cmdXML(array("n"=>"js"),$sJS);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a Javascript function call command message to the XML response.
|
||||
*
|
||||
* <i>Usage:</i> <kbd>$objResponse->addScriptCall("myJSFunction", "arg 1", "arg 2", 12345);</kbd>
|
||||
*
|
||||
* @param string $sFunc the name of a Javascript function
|
||||
* @param mixed $args,... optional arguments to pass to the Javascript function
|
||||
*/
|
||||
function addScriptCall() {
|
||||
$arguments = func_get_args();
|
||||
$sFunc = array_shift($arguments);
|
||||
$sData = $this->_buildObjXml($arguments);
|
||||
$this->xml .= $this->_cmdXML(array("n"=>"jc","t"=>$sFunc),$sData);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a remove element command message to the XML response.
|
||||
*
|
||||
* <i>Usage:</i> <kbd>$objResponse->addRemove("Div2");</kbd>
|
||||
*
|
||||
* @param string contains the id of an HTML element to be removed
|
||||
*/
|
||||
function addRemove($sTarget)
|
||||
{
|
||||
$this->xml .= $this->_cmdXML(array("n"=>"rm","t"=>$sTarget),'');
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a create element command message to the XML response.
|
||||
*
|
||||
* <i>Usage:</i> <kbd>$objResponse->addCreate("parentDiv", "h3", "myid");</kbd>
|
||||
*
|
||||
* @param string contains the id of an HTML element to to which the new
|
||||
* element will be appended.
|
||||
* @param string the tag to be added
|
||||
* @param string the id to be assigned to the new element
|
||||
* @param string deprecated, use the addCreateInput() method instead
|
||||
*/
|
||||
function addCreate($sParent, $sTag, $sId, $sType="")
|
||||
{
|
||||
if ($sType)
|
||||
{
|
||||
trigger_error("The \$sType parameter of addCreate has been deprecated. Use the addCreateInput() method instead.", E_USER_WARNING);
|
||||
return;
|
||||
}
|
||||
$this->xml .= $this->_cmdXML(array("n"=>"ce","t"=>$sParent,"p"=>$sId),$sTag);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a insert element command message to the XML response.
|
||||
*
|
||||
* <i>Usage:</i> <kbd>$objResponse->addInsert("childDiv", "h3", "myid");</kbd>
|
||||
*
|
||||
* @param string contains the id of the child before which the new element
|
||||
* will be inserted
|
||||
* @param string the tag to be added
|
||||
* @param string the id to be assigned to the new element
|
||||
*/
|
||||
function addInsert($sBefore, $sTag, $sId)
|
||||
{
|
||||
$this->xml .= $this->_cmdXML(array("n"=>"ie","t"=>$sBefore,"p"=>$sId),$sTag);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a insert element command message to the XML response.
|
||||
*
|
||||
* <i>Usage:</i> <kbd>$objResponse->addInsertAfter("childDiv", "h3", "myid");</kbd>
|
||||
*
|
||||
* @param string contains the id of the child after which the new element
|
||||
* will be inserted
|
||||
* @param string the tag to be added
|
||||
* @param string the id to be assigned to the new element
|
||||
*/
|
||||
function addInsertAfter($sAfter, $sTag, $sId)
|
||||
{
|
||||
$this->xml .= $this->_cmdXML(array("n"=>"ia","t"=>$sAfter,"p"=>$sId),$sTag);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a create input command message to the XML response.
|
||||
*
|
||||
* <i>Usage:</i> <kbd>$objResponse->addCreateInput("form1", "text", "username", "input1");</kbd>
|
||||
*
|
||||
* @param string contains the id of an HTML element to which the new input
|
||||
* will be appended
|
||||
* @param string the type of input to be created (text, radio, checkbox,
|
||||
* etc.)
|
||||
* @param string the name to be assigned to the new input and the variable
|
||||
* name when it is submitted
|
||||
* @param string the id to be assigned to the new input
|
||||
*/
|
||||
function addCreateInput($sParent, $sType, $sName, $sId)
|
||||
{
|
||||
$this->xml .= $this->_cmdXML(array("n"=>"ci","t"=>$sParent,"p"=>$sId,"c"=>$sType),$sName);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds an insert input command message to the XML response.
|
||||
*
|
||||
* <i>Usage:</i> <kbd>$objResponse->addInsertInput("input5", "text", "username", "input1");</kbd>
|
||||
*
|
||||
* @param string contains the id of the child before which the new element
|
||||
* will be inserted
|
||||
* @param string the type of input to be created (text, radio, checkbox,
|
||||
* etc.)
|
||||
* @param string the name to be assigned to the new input and the variable
|
||||
* name when it is submitted
|
||||
* @param string the id to be assigned to the new input
|
||||
*/
|
||||
function addInsertInput($sBefore, $sType, $sName, $sId)
|
||||
{
|
||||
$this->xml .= $this->_cmdXML(array("n"=>"ii","t"=>$sBefore,"p"=>$sId,"c"=>$sType),$sName);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds an insert input command message to the XML response.
|
||||
*
|
||||
* <i>Usage:</i> <kbd>$objResponse->addInsertInputAfter("input7", "text", "email", "input2");</kbd>
|
||||
*
|
||||
* @param string contains the id of the child after which the new element
|
||||
* will be inserted
|
||||
* @param string the type of input to be created (text, radio, checkbox,
|
||||
* etc.)
|
||||
* @param string the name to be assigned to the new input and the variable
|
||||
* name when it is submitted
|
||||
* @param string the id to be assigned to the new input
|
||||
*/
|
||||
function addInsertInputAfter($sAfter, $sType, $sName, $sId)
|
||||
{
|
||||
$this->xml .= $this->_cmdXML(array("n"=>"iia","t"=>$sAfter,"p"=>$sId,"c"=>$sType),$sName);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds an event command message to the XML response.
|
||||
*
|
||||
* <i>Usage:</i> <kbd>$objResponse->addEvent("contentDiv", "onclick", "alert(\'Hello World\');");</kbd>
|
||||
*
|
||||
* @param string contains the id of an HTML element
|
||||
* @param string the event you wish to set ("onclick", "onmouseover", etc.)
|
||||
* @param string the Javascript string you want the event to invoke
|
||||
*/
|
||||
function addEvent($sTarget,$sEvent,$sScript)
|
||||
{
|
||||
$this->xml .= $this->_cmdXML(array("n"=>"ev","t"=>$sTarget,"p"=>$sEvent),$sScript);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a handler command message to the XML response.
|
||||
*
|
||||
* <i>Usage:</i> <kbd>$objResponse->addHandler("contentDiv", "onclick", "content_click");</kbd>
|
||||
*
|
||||
* @param string contains the id of an HTML element
|
||||
* @param string the event you wish to set ("onclick", "onmouseover", etc.)
|
||||
* @param string the name of a Javascript function that will handle the
|
||||
* event. Multiple handlers can be added for the same event
|
||||
*/
|
||||
function addHandler($sTarget,$sEvent,$sHandler)
|
||||
{
|
||||
$this->xml .= $this->_cmdXML(array("n"=>"ah","t"=>$sTarget,"p"=>$sEvent),$sHandler);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a remove handler command message to the XML response.
|
||||
*
|
||||
* <i>Usage:</i> <kbd>$objResponse->addRemoveHandler("contentDiv", "onclick", "content_click");</kbd>
|
||||
*
|
||||
* @param string contains the id of an HTML element
|
||||
* @param string the event you wish to remove ("onclick", "onmouseover",
|
||||
* etc.)
|
||||
* @param string the name of a Javascript handler function that you want to
|
||||
* remove
|
||||
*/
|
||||
function addRemoveHandler($sTarget,$sEvent,$sHandler)
|
||||
{
|
||||
$this->xml .= $this->_cmdXML(array("n"=>"rh","t"=>$sTarget,"p"=>$sEvent),$sHandler);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds an include script command message to the XML response.
|
||||
*
|
||||
* <i>Usage:</i> <kbd>$objResponse->addIncludeScript("functions.js");</kbd>
|
||||
*
|
||||
* @param string URL of the Javascript file to include
|
||||
*/
|
||||
function addIncludeScript($sFileName)
|
||||
{
|
||||
$this->xml .= $this->_cmdXML(array("n"=>"in"),$sFileName);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the XML to be returned from your function to the xajax processor
|
||||
* on your page. Since xajax 0.2, you can also return an xajaxResponse
|
||||
* object from your function directly, and xajax will automatically request
|
||||
* the XML using this method call.
|
||||
*
|
||||
* <i>Usage:</i> <kbd>return $objResponse->getXML();</kbd>
|
||||
*
|
||||
* @return string response XML data
|
||||
*/
|
||||
function getXML()
|
||||
{
|
||||
$sXML = "<?xml version=\"1.0\"";
|
||||
if ($this->sEncoding && strlen(trim($this->sEncoding)) > 0)
|
||||
$sXML .= " encoding=\"".$this->sEncoding."\"";
|
||||
$sXML .= " ?"."><xjx>" . $this->xml . "</xjx>";
|
||||
|
||||
return $sXML;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds the commands of the provided response XML output to this response
|
||||
* object
|
||||
*
|
||||
* <i>Usage:</i>
|
||||
* <code>$r1 = $objResponse1->getXML();
|
||||
* $objResponse2->loadXML($r1);
|
||||
* return $objResponse2->getXML();</code>
|
||||
*
|
||||
* @param string the response XML (returned from a getXML() method) to add
|
||||
* to the end of this response object
|
||||
*/
|
||||
function loadXML($mXML)
|
||||
{
|
||||
if (is_a($mXML, "xajaxResponse")) {
|
||||
$mXML = $mXML->getXML();
|
||||
}
|
||||
$sNewXML = "";
|
||||
$iStartPos = strpos($mXML, "<xjx>") + 5;
|
||||
$sNewXML = substr($mXML, $iStartPos);
|
||||
$iEndPos = strpos($sNewXML, "</xjx>");
|
||||
$sNewXML = substr($sNewXML, 0, $iEndPos);
|
||||
$this->xml .= $sNewXML;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates XML from command data
|
||||
*
|
||||
* @access private
|
||||
* @param array associative array of attributes
|
||||
* @param string data
|
||||
* @return string XML command
|
||||
*/
|
||||
function _cmdXML($aAttributes, $sData)
|
||||
{
|
||||
if ($this->bOutputEntities) {
|
||||
if (function_exists('mb_convert_encoding')) {
|
||||
$sData = call_user_func_array('mb_convert_encoding', array(&$sData, 'HTML-ENTITIES', $this->sEncoding));
|
||||
}
|
||||
else {
|
||||
trigger_error("The xajax XML response output could not be converted to HTML entities because the mb_convert_encoding function is not available", E_USER_NOTICE);
|
||||
}
|
||||
}
|
||||
$xml = "<cmd";
|
||||
foreach($aAttributes as $sAttribute => $sValue)
|
||||
$xml .= " $sAttribute=\"$sValue\"";
|
||||
if ($sData !== null && !stristr($sData,'<![CDATA['))
|
||||
$xml .= "><![CDATA[$sData]]></cmd>";
|
||||
else if ($sData !== null)
|
||||
$xml .= ">$sData</cmd>";
|
||||
else
|
||||
$xml .= "></cmd>";
|
||||
|
||||
return $xml;
|
||||
}
|
||||
|
||||
/**
|
||||
* Recursively serializes a data structure in XML so it can be sent to
|
||||
* the client. It could be thought of as the opposite of
|
||||
* {@link xajax::_parseObjXml()}.
|
||||
*
|
||||
* @access private
|
||||
* @param mixed data structure to serialize to XML
|
||||
* @return string serialized XML
|
||||
*/
|
||||
function _buildObjXml($var) {
|
||||
if (gettype($var) == "object") $var = get_object_vars($var);
|
||||
if (!is_array($var)) {
|
||||
return "<![CDATA[$var]]>";
|
||||
}
|
||||
else {
|
||||
$data = "<xjxobj>";
|
||||
foreach ($var as $key => $value) {
|
||||
$data .= "<e>";
|
||||
$data .= "<k>" . htmlspecialchars($key) . "</k>";
|
||||
$data .= "<v>" . $this->_buildObjXml($value) . "</v>";
|
||||
$data .= "</e>";
|
||||
}
|
||||
$data .= "</xjxobj>";
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
|
||||
}// end class xajaxResponse
|
||||
?>
|
|
@ -1,172 +0,0 @@
|
|||
/* xajax Javascript library :: version 0.2.4 */
|
||||
Array.prototype.containsValue=function(valueToCheck){for(var i=0;i<this.length;i++){if(this[i]==valueToCheck)return true;}
|
||||
return false;}
|
||||
function Xajax(){this.DebugMessage=function(text){if(text.length > 1000)text=text.substr(0,1000)+"...\n[long response]\n...";try{if(this.debugWindow==undefined||this.debugWindow.closed==true){this.debugWindow=window.open('about:blank','xajax-debug','width=800,height=600,scrollbars=1,resizable,status');this.debugWindow.document.write('<html><head><title>Xajax debug output</title></head><body><h2>Xajax debug output</h2><div id="debugTag"></div></body></html>');}
|
||||
text=text.replace(/&/g,"&")
|
||||
text=text.replace(/</g,"<")
|
||||
text=text.replace(/>/g,">")
|
||||
debugTag=this.debugWindow.document.getElementById('debugTag');debugTag.innerHTML=('<b>'+(new Date()).toString()+'</b>: '+text+'<hr/>')+debugTag.innerHTML;}catch(e){alert("Xajax Debug:\n "+text);}
|
||||
};this.workId='xajaxWork'+new Date().getTime();this.depth=0;this.responseErrorsForAlert=["400","401","402","403","404","500","501","502","503"];this.getRequestObject=function(){if(xajaxDebug)this.DebugMessage("Initializing Request Object..");var req=null;if(typeof XMLHttpRequest!="undefined")
|
||||
req=new XMLHttpRequest();if(!req&&typeof ActiveXObject!="undefined"){try{req=new ActiveXObject("Msxml2.XMLHTTP");}
|
||||
catch(e){try{req=new ActiveXObject("Microsoft.XMLHTTP");}
|
||||
catch(e2){try{req=new ActiveXObject("Msxml2.XMLHTTP.4.0");}
|
||||
catch(e3){req=null;}
|
||||
}
|
||||
}
|
||||
}
|
||||
if(!req&&window.createRequest)
|
||||
req=window.createRequest();if(!req)this.DebugMessage("Request Object Instantiation failed.");return req;}
|
||||
this.$=function(sId){if(!sId){return null;}
|
||||
var returnObj=document.getElementById(sId);if(!returnObj&&document.all){returnObj=document.all[sId];}
|
||||
if(xajaxDebug&&!returnObj&&sId!=this.workId){this.DebugMessage("Element with the id \""+sId+"\" not found.");}
|
||||
return returnObj;}
|
||||
this.include=function(sFileName){var objHead=document.getElementsByTagName('head');var objScript=document.createElement('script');objScript.type='text/javascript';objScript.src=sFileName;objHead[0].appendChild(objScript);}
|
||||
this.stripOnPrefix=function(sEventName){sEventName=sEventName.toLowerCase();if(sEventName.indexOf('on')==0){sEventName=sEventName.replace(/on/,'');}
|
||||
return sEventName;}
|
||||
this.addOnPrefix=function(sEventName){sEventName=sEventName.toLowerCase();if(sEventName.indexOf('on')!=0){sEventName='on'+sEventName;}
|
||||
return sEventName;}
|
||||
this.addHandler=function(sElementId,sEvent,sFunctionName){if(window.addEventListener){sEvent=this.stripOnPrefix(sEvent);eval("this.$('"+sElementId+"').addEventListener('"+sEvent+"',"+sFunctionName+",false);");}
|
||||
else{sAltEvent=this.addOnPrefix(sEvent);eval("this.$('"+sElementId+"').attachEvent('"+sAltEvent+"',"+sFunctionName+",false);");}
|
||||
}
|
||||
this.removeHandler=function(sElementId,sEvent,sFunctionName){if(window.addEventListener){sEvent=this.stripOnPrefix(sEvent);eval("this.$('"+sElementId+"').removeEventListener('"+sEvent+"',"+sFunctionName+",false);");}
|
||||
else{sAltEvent=this.addOnPrefix(sEvent);eval("this.$('"+sElementId+"').detachEvent('"+sAltEvent+"',"+sFunctionName+",false);");}
|
||||
}
|
||||
this.create=function(sParentId,sTag,sId){var objParent=this.$(sParentId);objElement=document.createElement(sTag);objElement.setAttribute('id',sId);if(objParent)
|
||||
objParent.appendChild(objElement);}
|
||||
this.insert=function(sBeforeId,sTag,sId){var objSibling=this.$(sBeforeId);objElement=document.createElement(sTag);objElement.setAttribute('id',sId);objSibling.parentNode.insertBefore(objElement,objSibling);}
|
||||
this.insertAfter=function(sAfterId,sTag,sId){var objSibling=this.$(sAfterId);objElement=document.createElement(sTag);objElement.setAttribute('id',sId);objSibling.parentNode.insertBefore(objElement,objSibling.nextSibling);}
|
||||
this.getInput=function(sType,sName,sId){var Obj;if(!window.addEventListener){Obj=document.createElement('<input type="'+sType+'" id="'+sId+'" name="'+sName+'">');}
|
||||
else{Obj=document.createElement('input');Obj.setAttribute('type',sType);Obj.setAttribute('name',sName);Obj.setAttribute('id',sId);}
|
||||
return Obj;}
|
||||
this.createInput=function(sParentId,sType,sName,sId){var objParent=this.$(sParentId);var objElement=this.getInput(sType,sName,sId);if(objParent&&objElement)
|
||||
objParent.appendChild(objElement);}
|
||||
this.insertInput=function(sBeforeId,sType,sName,sId){var objSibling=this.$(sBeforeId);var objElement=this.getInput(sType,sName,sId);if(objElement&&objSibling&&objSibling.parentNode)
|
||||
objSibling.parentNode.insertBefore(objElement,objSibling);}
|
||||
this.insertInputAfter=function(sAfterId,sType,sName,sId){var objSibling=this.$(sAfterId);var objElement=this.getInput(sType,sName,sId);if(objElement&&objSibling&&objSibling.parentNode){objSibling.parentNode.insertBefore(objElement,objSibling.nextSibling);}
|
||||
}
|
||||
this.remove=function(sId){objElement=this.$(sId);if(objElement&&objElement.parentNode&&objElement.parentNode.removeChild){objElement.parentNode.removeChild(objElement);}
|
||||
}
|
||||
this.replace=function(sId,sAttribute,sSearch,sReplace){var bFunction=false;if(sAttribute=="innerHTML")
|
||||
sSearch=this.getBrowserHTML(sSearch);eval("var txt=this.$('"+sId+"')."+sAttribute);if(typeof txt=="function"){txt=txt.toString();bFunction=true;}
|
||||
if(txt.indexOf(sSearch)>-1){var newTxt='';while(txt.indexOf(sSearch)>-1){x=txt.indexOf(sSearch)+sSearch.length+1;newTxt+=txt.substr(0,x).replace(sSearch,sReplace);txt=txt.substr(x,txt.length-x);}
|
||||
newTxt+=txt;if(bFunction){eval('this.$("'+sId+'").'+sAttribute+'=newTxt;');}
|
||||
else if(this.willChange(sId,sAttribute,newTxt)){eval('this.$("'+sId+'").'+sAttribute+'=newTxt;');}
|
||||
}
|
||||
}
|
||||
this.getFormValues=function(frm){var objForm;var submitDisabledElements=false;if(arguments.length > 1&&arguments[1]==true)
|
||||
submitDisabledElements=true;var prefix="";if(arguments.length > 2)
|
||||
prefix=arguments[2];if(typeof(frm)=="string")
|
||||
objForm=this.$(frm);else
|
||||
objForm=frm;var sXml="<xjxquery><q>";if(objForm&&objForm.tagName=='FORM'){var formElements=objForm.elements;for(var i=0;i < formElements.length;i++){if(!formElements[i].name)
|
||||
continue;if(formElements[i].name.substring(0,prefix.length)!=prefix)
|
||||
continue;if(formElements[i].type&&(formElements[i].type=='radio'||formElements[i].type=='checkbox')&&formElements[i].checked==false)
|
||||
continue;if(formElements[i].disabled&&formElements[i].disabled==true&&submitDisabledElements==false)
|
||||
continue;var name=formElements[i].name;if(name){if(sXml!='<xjxquery><q>')
|
||||
sXml+='&';if(formElements[i].type=='select-multiple'){for(var j=0;j < formElements[i].length;j++){if(formElements[i].options[j].selected==true)
|
||||
sXml+=name+"="+encodeURIComponent(formElements[i].options[j].value)+"&";}
|
||||
}
|
||||
else{sXml+=name+"="+encodeURIComponent(formElements[i].value);}
|
||||
}
|
||||
}
|
||||
}
|
||||
sXml+="</q></xjxquery>";return sXml;}
|
||||
this.objectToXML=function(obj){var sXml="<xjxobj>";for(i in obj){try{if(i=='constructor')
|
||||
continue;if(obj[i]&&typeof(obj[i])=='function')
|
||||
continue;var key=i;var value=obj[i];if(value&&typeof(value)=="object"&&this.depth <=50){this.depth++;value=this.objectToXML(value);this.depth--;}
|
||||
sXml+="<e><k>"+key+"</k><v>"+value+"</v></e>";}
|
||||
catch(e){if(xajaxDebug)this.DebugMessage(e.name+": "+e.message);}
|
||||
}
|
||||
sXml+="</xjxobj>";return sXml;}
|
||||
this._nodeToObject=function(node){if(node.nodeName=='#cdata-section'){var data="";for(var j=0;j<node.parentNode.childNodes.length;j++){data+=node.parentNode.childNodes[j].data;}
|
||||
return data;}
|
||||
else if(node.nodeName=='xjxobj'){var data=new Array();for(var j=0;j<node.childNodes.length;j++){var child=node.childNodes[j];var key;var value;if(child.nodeName=='e'){for(var k=0;k<child.childNodes.length;k++){if(child.childNodes[k].nodeName=='k'){key=child.childNodes[k].firstChild.data;}
|
||||
else if(child.childNodes[k].nodeName=='v'){value=this._nodeToObject(child.childNodes[k].firstChild);}
|
||||
}
|
||||
if(key!=null&&value!=null){data[key]=value;key=value=null;}
|
||||
}
|
||||
}
|
||||
return data;}
|
||||
}
|
||||
this.loadingFunction=function(){};this.doneLoadingFunction=function(){};var loadingTimeout;this.call=function(sFunction,aArgs,sRequestType){var i,r,postData;if(document.body&&xajaxWaitCursor)
|
||||
document.body.style.cursor='wait';if(xajaxStatusMessages==true)window.status='Sending Request...';clearTimeout(loadingTimeout);loadingTimeout=setTimeout("xajax.loadingFunction();",400);if(xajaxDebug)this.DebugMessage("Starting xajax...");if(sRequestType==null){var xajaxRequestType=xajaxDefinedPost;}
|
||||
else{var xajaxRequestType=sRequestType;}
|
||||
var uri=xajaxRequestUri;var value;switch(xajaxRequestType){case xajaxDefinedGet:{var uriGet=uri.indexOf("?")==-1?"?xajax="+encodeURIComponent(sFunction):"&xajax="+encodeURIComponent(sFunction);if(aArgs){for(i=0;i<aArgs.length;i++){value=aArgs[i];if(typeof(value)=="object")
|
||||
value=this.objectToXML(value);uriGet+="&xajaxargs[]="+encodeURIComponent(value);}
|
||||
}
|
||||
uriGet+="&xajaxr="+new Date().getTime();uri+=uriGet;postData=null;}break;case xajaxDefinedPost:{postData="xajax="+encodeURIComponent(sFunction);postData+="&xajaxr="+new Date().getTime();if(aArgs){for(i=0;i <aArgs.length;i++){value=aArgs[i];if(typeof(value)=="object")
|
||||
value=this.objectToXML(value);postData=postData+"&xajaxargs[]="+encodeURIComponent(value);}
|
||||
}
|
||||
}break;default:
|
||||
alert("Illegal request type: "+xajaxRequestType);return false;break;}
|
||||
r=this.getRequestObject();if(!r)return false;r.open(xajaxRequestType==xajaxDefinedGet?"GET":"POST",uri,true);if(xajaxRequestType==xajaxDefinedPost){try{r.setRequestHeader("Method","POST "+uri+" HTTP/1.1");r.setRequestHeader("Content-Type","application/x-www-form-urlencoded");}
|
||||
catch(e){alert("Your browser does not appear to support asynchronous requests using POST.");return false;}
|
||||
}
|
||||
r.onreadystatechange=function(){if(r.readyState!=4)
|
||||
return;if(r.status==200){if(xajaxDebug)xajax.DebugMessage("Received:\n"+r.responseText);if(r.responseXML&&r.responseXML.documentElement)
|
||||
xajax.processResponse(r.responseXML);else{var errorString="Error: the XML response that was returned from the server is invalid.";errorString+="\nReceived:\n"+r.responseText;trimmedResponseText=r.responseText.replace(/^\s+/g,"");trimmedResponseText=trimmedResponseText.replace(/\s+$/g,"");if(trimmedResponseText!=r.responseText)
|
||||
errorString+="\nYou have whitespace in your response.";alert(errorString);document.body.style.cursor='default';if(xajaxStatusMessages==true)window.status='Invalid XML response error';}
|
||||
}
|
||||
else{if(xajax.responseErrorsForAlert.containsValue(r.status)){var errorString="Error: the server returned the following HTTP status: "+r.status;errorString+="\nReceived:\n"+r.responseText;alert(errorString);}
|
||||
document.body.style.cursor='default';if(xajaxStatusMessages==true)window.status='Invalid XML response error';}
|
||||
delete r;r=null;}
|
||||
if(xajaxDebug)this.DebugMessage("Calling "+sFunction+" uri="+uri+" (post:"+postData+")");r.send(postData);if(xajaxStatusMessages==true)window.status='Waiting for data...';delete r;return true;}
|
||||
this.getBrowserHTML=function(html){tmpXajax=this.$(this.workId);if(!tmpXajax){tmpXajax=document.createElement("div");tmpXajax.setAttribute('id',this.workId);tmpXajax.style.display="none";tmpXajax.style.visibility="hidden";document.body.appendChild(tmpXajax);}
|
||||
tmpXajax.innerHTML=html;var browserHTML=tmpXajax.innerHTML;tmpXajax.innerHTML='';return browserHTML;}
|
||||
this.willChange=function(element,attribute,newData){if(!document.body){return true;}
|
||||
if(attribute=="innerHTML"){newData=this.getBrowserHTML(newData);}
|
||||
elementObject=this.$(element);if(elementObject){var oldData;eval("oldData=this.$('"+element+"')."+attribute);if(newData!==oldData)
|
||||
return true;}
|
||||
return false;}
|
||||
this.viewSource=function(){return "<html>"+document.getElementsByTagName("HTML")[0].innerHTML+"</html>";}
|
||||
this.processResponse=function(xml){clearTimeout(loadingTimeout);this.doneLoadingFunction();if(xajaxStatusMessages==true)window.status='Processing...';var tmpXajax=null;xml=xml.documentElement;if(xml==null)
|
||||
return;var skipCommands=0;for(var i=0;i<xml.childNodes.length;i++){if(skipCommands > 0){skipCommands--;continue;}
|
||||
if(xml.childNodes[i].nodeName=="cmd"){var cmd;var id;var property;var data;var search;var type;var before;var objElement=null;for(var j=0;j<xml.childNodes[i].attributes.length;j++){if(xml.childNodes[i].attributes[j].name=="n"){cmd=xml.childNodes[i].attributes[j].value;}
|
||||
else if(xml.childNodes[i].attributes[j].name=="t"){id=xml.childNodes[i].attributes[j].value;}
|
||||
else if(xml.childNodes[i].attributes[j].name=="p"){property=xml.childNodes[i].attributes[j].value;}
|
||||
else if(xml.childNodes[i].attributes[j].name=="c"){type=xml.childNodes[i].attributes[j].value;}
|
||||
}
|
||||
if(xml.childNodes[i].childNodes.length > 1&&xml.childNodes[i].firstChild.nodeName=="#cdata-section"){data="";for(var j=0;j<xml.childNodes[i].childNodes.length;j++){data+=xml.childNodes[i].childNodes[j].data;}
|
||||
}
|
||||
else if(xml.childNodes[i].firstChild&&xml.childNodes[i].firstChild.nodeName=='xjxobj'){data=this._nodeToObject(xml.childNodes[i].firstChild);objElement="XJX_SKIP";}
|
||||
else if(xml.childNodes[i].childNodes.length > 1){for(var j=0;j<xml.childNodes[i].childNodes.length;j++){if(xml.childNodes[i].childNodes[j].childNodes.length > 1&&xml.childNodes[i].childNodes[j].firstChild.nodeName=="#cdata-section"){var internalData="";for(var k=0;k<xml.childNodes[i].childNodes[j].childNodes.length;k++){internalData+=xml.childNodes[i].childNodes[j].childNodes[k].nodeValue;}
|
||||
}else{var internalData=xml.childNodes[i].childNodes[j].firstChild.nodeValue;}
|
||||
if(xml.childNodes[i].childNodes[j].nodeName=="s"){search=internalData;}
|
||||
if(xml.childNodes[i].childNodes[j].nodeName=="r"){data=internalData;}
|
||||
}
|
||||
}
|
||||
else if(xml.childNodes[i].firstChild)
|
||||
data=xml.childNodes[i].firstChild.nodeValue;else
|
||||
data="";if(objElement!="XJX_SKIP")objElement=this.$(id);var cmdFullname;try{if(cmd=="cc"){cmdFullname="addConfirmCommands";var confirmResult=confirm(data);if(!confirmResult){skipCommands=id;}
|
||||
}
|
||||
if(cmd=="al"){cmdFullname="addAlert";alert(data);}
|
||||
else if(cmd=="js"){cmdFullname="addScript/addRedirect";eval(data);}
|
||||
else if(cmd=="jc"){cmdFullname="addScriptCall";var scr=id+'(';if(data[0]!=null){scr+='data[0]';for(var l=1;l<data.length;l++){scr+=',data['+l+']';}
|
||||
}
|
||||
scr+=');';eval(scr);}
|
||||
else if(cmd=="in"){cmdFullname="addIncludeScript";this.include(data);}
|
||||
else if(cmd=="as"){cmdFullname="addAssign/addClear";if(this.willChange(id,property,data)){eval("objElement."+property+"=data;");}
|
||||
}
|
||||
else if(cmd=="ap"){cmdFullname="addAppend";eval("objElement."+property+"+=data;");}
|
||||
else if(cmd=="pp"){cmdFullname="addPrepend";eval("objElement."+property+"=data+objElement."+property);}
|
||||
else if(cmd=="rp"){cmdFullname="addReplace";this.replace(id,property,search,data)
|
||||
}
|
||||
else if(cmd=="rm"){cmdFullname="addRemove";this.remove(id);}
|
||||
else if(cmd=="ce"){cmdFullname="addCreate";this.create(id,data,property);}
|
||||
else if(cmd=="ie"){cmdFullname="addInsert";this.insert(id,data,property);}
|
||||
else if(cmd=="ia"){cmdFullname="addInsertAfter";this.insertAfter(id,data,property);}
|
||||
else if(cmd=="ci"){cmdFullname="addCreateInput";this.createInput(id,type,data,property);}
|
||||
else if(cmd=="ii"){cmdFullname="addInsertInput";this.insertInput(id,type,data,property);}
|
||||
else if(cmd=="iia"){cmdFullname="addInsertInputAfter";this.insertInputAfter(id,type,data,property);}
|
||||
else if(cmd=="ev"){cmdFullname="addEvent";property=this.addOnPrefix(property);eval("this.$('"+id+"')."+property+"= function(){"+data+";}");}
|
||||
else if(cmd=="ah"){cmdFullname="addHandler";this.addHandler(id,property,data);}
|
||||
else if(cmd=="rh"){cmdFullname="addRemoveHandler";this.removeHandler(id,property,data);}
|
||||
}
|
||||
catch(e){if(xajaxDebug)
|
||||
alert("While trying to '"+cmdFullname+"' (command number "+i+"), the following error occured:\n"
|
||||
+e.name+": "+e.message+"\n"
|
||||
+(id&&!objElement?"Object with id='"+id+"' wasn't found.\n":""));}
|
||||
delete objElement;delete cmd;delete cmdFullname;delete id;delete property;delete search;delete data;delete type;delete before;delete internalData;delete j;delete k;}
|
||||
}
|
||||
delete xml;delete i;document.body.style.cursor='default';if(xajaxStatusMessages==true)window.status='Done';}
|
||||
}
|
||||
var xajax=new Xajax();xajaxLoaded=true;
|
|
@ -1,795 +0,0 @@
|
|||
/* xajax Javascript library :: version 0.2.4 */
|
||||
|
||||
Array.prototype.containsValue = function(valueToCheck)
|
||||
{
|
||||
for (var i=0;i<this.length;i++) {
|
||||
if (this[i] == valueToCheck) return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function Xajax()
|
||||
{
|
||||
this.DebugMessage = function(text)
|
||||
{
|
||||
if (text.length > 1000) text = text.substr(0,1000)+"...\n[long response]\n...";
|
||||
try {
|
||||
if (this.debugWindow == undefined || this.debugWindow.closed == true) {
|
||||
this.debugWindow = window.open('about:blank', 'xajax-debug', 'width=800,height=600,scrollbars=1,resizable,status');
|
||||
this.debugWindow.document.write('<html><head><title>Xajax debug output</title></head><body><h2>Xajax debug output</h2><div id="debugTag"></div></body></html>');
|
||||
}
|
||||
text = text.replace(/&/g, "&")
|
||||
text = text.replace(/</g, "<")
|
||||
text = text.replace(/>/g, ">")
|
||||
debugTag = this.debugWindow.document.getElementById('debugTag');
|
||||
debugTag.innerHTML = ('<b>'+(new Date()).toString()+'</b>: ' + text + '<hr/>') + debugTag.innerHTML;
|
||||
} catch (e) {
|
||||
alert("Xajax Debug:\n " + text);
|
||||
}
|
||||
};
|
||||
|
||||
this.workId = 'xajaxWork'+ new Date().getTime();
|
||||
this.depth = 0;
|
||||
this.responseErrorsForAlert = ["400","401","402","403","404","500","501","502","503"];
|
||||
|
||||
//Get the XMLHttpRequest Object
|
||||
this.getRequestObject = function()
|
||||
{
|
||||
if (xajaxDebug) this.DebugMessage("Initializing Request Object..");
|
||||
var req = null;
|
||||
if (typeof XMLHttpRequest != "undefined")
|
||||
req = new XMLHttpRequest();
|
||||
if (!req && typeof ActiveXObject != "undefined")
|
||||
{
|
||||
try
|
||||
{
|
||||
req=new ActiveXObject("Msxml2.XMLHTTP");
|
||||
}
|
||||
catch (e)
|
||||
{
|
||||
try
|
||||
{
|
||||
req=new ActiveXObject("Microsoft.XMLHTTP");
|
||||
}
|
||||
catch (e2)
|
||||
{
|
||||
try {
|
||||
req=new ActiveXObject("Msxml2.XMLHTTP.4.0");
|
||||
}
|
||||
catch (e3)
|
||||
{
|
||||
req=null;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if(!req && window.createRequest)
|
||||
req = window.createRequest();
|
||||
|
||||
if (!req) this.DebugMessage("Request Object Instantiation failed.");
|
||||
|
||||
return req;
|
||||
}
|
||||
|
||||
// xajax.$() is shorthand for document.getElementById()
|
||||
this.$ = function(sId)
|
||||
{
|
||||
if (!sId) {
|
||||
return null;
|
||||
}
|
||||
var returnObj = document.getElementById(sId);
|
||||
if (!returnObj && document.all) {
|
||||
returnObj = document.all[sId];
|
||||
}
|
||||
if (xajaxDebug && !returnObj && sId != this.workId) {
|
||||
this.DebugMessage("Element with the id \"" + sId + "\" not found.");
|
||||
}
|
||||
return returnObj;
|
||||
}
|
||||
|
||||
// xajax.include(sFileName) dynamically includes an external javascript file
|
||||
this.include = function(sFileName)
|
||||
{
|
||||
var objHead = document.getElementsByTagName('head');
|
||||
var objScript = document.createElement('script');
|
||||
objScript.type = 'text/javascript';
|
||||
objScript.src = sFileName;
|
||||
objHead[0].appendChild(objScript);
|
||||
}
|
||||
|
||||
this.stripOnPrefix = function(sEventName)
|
||||
{
|
||||
sEventName = sEventName.toLowerCase();
|
||||
if (sEventName.indexOf('on') == 0)
|
||||
{
|
||||
sEventName = sEventName.replace(/on/,'');
|
||||
}
|
||||
|
||||
return sEventName;
|
||||
}
|
||||
|
||||
this.addOnPrefix = function(sEventName)
|
||||
{
|
||||
sEventName = sEventName.toLowerCase();
|
||||
if (sEventName.indexOf('on') != 0)
|
||||
{
|
||||
sEventName = 'on' + sEventName;
|
||||
}
|
||||
|
||||
return sEventName;
|
||||
}
|
||||
|
||||
// xajax.addHandler adds an event handler to an element
|
||||
this.addHandler = function(sElementId, sEvent, sFunctionName)
|
||||
{
|
||||
if (window.addEventListener)
|
||||
{
|
||||
sEvent = this.stripOnPrefix(sEvent);
|
||||
eval("this.$('"+sElementId+"').addEventListener('"+sEvent+"',"+sFunctionName+",false);");
|
||||
}
|
||||
else
|
||||
{
|
||||
sAltEvent = this.addOnPrefix(sEvent);
|
||||
eval("this.$('"+sElementId+"').attachEvent('"+sAltEvent+"',"+sFunctionName+",false);");
|
||||
}
|
||||
}
|
||||
|
||||
// xajax.removeHandler removes an event handler from an element
|
||||
this.removeHandler = function(sElementId, sEvent, sFunctionName)
|
||||
{
|
||||
if (window.addEventListener)
|
||||
{
|
||||
sEvent = this.stripOnPrefix(sEvent);
|
||||
eval("this.$('"+sElementId+"').removeEventListener('"+sEvent+"',"+sFunctionName+",false);");
|
||||
}
|
||||
else
|
||||
{
|
||||
sAltEvent = this.addOnPrefix(sEvent);
|
||||
eval("this.$('"+sElementId+"').detachEvent('"+sAltEvent+"',"+sFunctionName+",false);");
|
||||
}
|
||||
}
|
||||
|
||||
// xajax.create creates a new child node under a parent
|
||||
this.create = function(sParentId, sTag, sId)
|
||||
{
|
||||
var objParent = this.$(sParentId);
|
||||
objElement = document.createElement(sTag);
|
||||
objElement.setAttribute('id',sId);
|
||||
if (objParent)
|
||||
objParent.appendChild(objElement);
|
||||
}
|
||||
|
||||
// xajax.insert inserts a new node before another node
|
||||
this.insert = function(sBeforeId, sTag, sId)
|
||||
{
|
||||
var objSibling = this.$(sBeforeId);
|
||||
objElement = document.createElement(sTag);
|
||||
objElement.setAttribute('id',sId);
|
||||
objSibling.parentNode.insertBefore(objElement, objSibling);
|
||||
}
|
||||
|
||||
// xajax.insertAfter inserts a new node after another node
|
||||
this.insertAfter = function(sAfterId, sTag, sId)
|
||||
{
|
||||
var objSibling = this.$(sAfterId);
|
||||
objElement = document.createElement(sTag);
|
||||
objElement.setAttribute('id',sId);
|
||||
objSibling.parentNode.insertBefore(objElement, objSibling.nextSibling);
|
||||
}
|
||||
|
||||
this.getInput = function(sType, sName, sId)
|
||||
{
|
||||
var Obj;
|
||||
if (!window.addEventListener)
|
||||
{
|
||||
Obj = document.createElement('<input type="'+sType+'" id="'+sId+'" name="'+sName+'">');
|
||||
}
|
||||
else
|
||||
{
|
||||
Obj = document.createElement('input');
|
||||
Obj.setAttribute('type',sType);
|
||||
Obj.setAttribute('name',sName);
|
||||
Obj.setAttribute('id',sId);
|
||||
}
|
||||
return Obj;
|
||||
}
|
||||
|
||||
// xajax.createInput creates a new input node under a parent
|
||||
this.createInput = function(sParentId, sType, sName, sId)
|
||||
{
|
||||
var objParent = this.$(sParentId);
|
||||
var objElement = this.getInput(sType, sName, sId);
|
||||
if (objParent && objElement)
|
||||
objParent.appendChild(objElement);
|
||||
}
|
||||
|
||||
// xajax.insertInput creates a new input node before another node
|
||||
this.insertInput = function(sBeforeId, sType, sName, sId)
|
||||
{
|
||||
var objSibling = this.$(sBeforeId);
|
||||
var objElement = this.getInput(sType, sName, sId);
|
||||
if (objElement && objSibling && objSibling.parentNode)
|
||||
objSibling.parentNode.insertBefore(objElement, objSibling);
|
||||
}
|
||||
|
||||
// xajax.insertInputAfter creates a new input node after another node
|
||||
this.insertInputAfter = function(sAfterId, sType, sName, sId)
|
||||
{
|
||||
var objSibling = this.$(sAfterId);
|
||||
var objElement = this.getInput(sType, sName, sId);
|
||||
if (objElement && objSibling && objSibling.parentNode) {
|
||||
objSibling.parentNode.insertBefore(objElement, objSibling.nextSibling);
|
||||
}
|
||||
}
|
||||
|
||||
// xajax.remove deletes an element
|
||||
this.remove = function(sId)
|
||||
{
|
||||
objElement = this.$(sId);
|
||||
if (objElement && objElement.parentNode && objElement.parentNode.removeChild)
|
||||
{
|
||||
objElement.parentNode.removeChild(objElement);
|
||||
}
|
||||
}
|
||||
|
||||
//xajax.replace searches for text in an attribute of an element and replaces it
|
||||
//with a different text
|
||||
this.replace = function(sId,sAttribute,sSearch,sReplace)
|
||||
{
|
||||
var bFunction = false;
|
||||
|
||||
if (sAttribute == "innerHTML")
|
||||
sSearch = this.getBrowserHTML(sSearch);
|
||||
|
||||
eval("var txt=this.$('"+sId+"')."+sAttribute);
|
||||
if (typeof txt == "function")
|
||||
{
|
||||
txt = txt.toString();
|
||||
bFunction = true;
|
||||
}
|
||||
if (txt.indexOf(sSearch)>-1)
|
||||
{
|
||||
var newTxt = '';
|
||||
while (txt.indexOf(sSearch) > -1)
|
||||
{
|
||||
x = txt.indexOf(sSearch)+sSearch.length+1;
|
||||
newTxt += txt.substr(0,x).replace(sSearch,sReplace);
|
||||
txt = txt.substr(x,txt.length-x);
|
||||
}
|
||||
newTxt += txt;
|
||||
if (bFunction)
|
||||
{
|
||||
eval('this.$("'+sId+'").'+sAttribute+'=newTxt;');
|
||||
}
|
||||
else if (this.willChange(sId,sAttribute,newTxt))
|
||||
{
|
||||
eval('this.$("'+sId+'").'+sAttribute+'=newTxt;');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// xajax.getFormValues() builds a query string XML message from the elements of a form object
|
||||
// * The first argument is the id of the form
|
||||
// * The second argument (optional) can be set to true if you want to submit disabled elements
|
||||
// * The third argument (optional) allows you to specify a string prefix that a form element
|
||||
// name must contain if you want that element to be submitted
|
||||
this.getFormValues = function(frm)
|
||||
{
|
||||
var objForm;
|
||||
var submitDisabledElements = false;
|
||||
if (arguments.length > 1 && arguments[1] == true)
|
||||
submitDisabledElements = true;
|
||||
var prefix="";
|
||||
if(arguments.length > 2)
|
||||
prefix = arguments[2];
|
||||
|
||||
if (typeof(frm) == "string")
|
||||
objForm = this.$(frm);
|
||||
else
|
||||
objForm = frm;
|
||||
var sXml = "<xjxquery><q>";
|
||||
if (objForm && objForm.tagName == 'FORM')
|
||||
{
|
||||
var formElements = objForm.elements;
|
||||
for( var i=0; i < formElements.length; i++)
|
||||
{
|
||||
if (!formElements[i].name)
|
||||
continue;
|
||||
if (formElements[i].name.substring(0, prefix.length) != prefix)
|
||||
continue;
|
||||
if (formElements[i].type && (formElements[i].type == 'radio' || formElements[i].type == 'checkbox') && formElements[i].checked == false)
|
||||
continue;
|
||||
if (formElements[i].disabled && formElements[i].disabled == true && submitDisabledElements == false)
|
||||
continue;
|
||||
var name = formElements[i].name;
|
||||
if (name)
|
||||
{
|
||||
if (sXml != '<xjxquery><q>')
|
||||
sXml += '&';
|
||||
if(formElements[i].type=='select-multiple')
|
||||
{
|
||||
for (var j = 0; j < formElements[i].length; j++)
|
||||
{
|
||||
if (formElements[i].options[j].selected == true)
|
||||
sXml += name+"="+encodeURIComponent(formElements[i].options[j].value)+"&";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
sXml += name+"="+encodeURIComponent(formElements[i].value);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sXml +="</q></xjxquery>";
|
||||
|
||||
return sXml;
|
||||
}
|
||||
|
||||
// Generates an XML message that xajax can understand from a javascript object
|
||||
this.objectToXML = function(obj)
|
||||
{
|
||||
var sXml = "<xjxobj>";
|
||||
for (i in obj)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (i == 'constructor')
|
||||
continue;
|
||||
if (obj[i] && typeof(obj[i]) == 'function')
|
||||
continue;
|
||||
|
||||
var key = i;
|
||||
var value = obj[i];
|
||||
if (value && typeof(value)=="object" && this.depth <= 50)
|
||||
{
|
||||
this.depth++;
|
||||
value = this.objectToXML(value);
|
||||
this.depth--;
|
||||
}
|
||||
|
||||
sXml += "<e><k>"+key+"</k><v>"+value+"</v></e>";
|
||||
|
||||
}
|
||||
catch(e)
|
||||
{
|
||||
if (xajaxDebug) this.DebugMessage(e.name+": "+e.message);
|
||||
}
|
||||
}
|
||||
sXml += "</xjxobj>";
|
||||
|
||||
return sXml;
|
||||
}
|
||||
|
||||
// unserializes data structure from xajaxResponse::_buildObjXml()
|
||||
this._nodeToObject = function(node) {
|
||||
// parentNode here is weird, have to tune
|
||||
if (node.nodeName == '#cdata-section') {
|
||||
var data = "";
|
||||
for (var j=0; j<node.parentNode.childNodes.length; j++) {
|
||||
data += node.parentNode.childNodes[j].data;
|
||||
}
|
||||
return data;
|
||||
}
|
||||
else if (node.nodeName == 'xjxobj') {
|
||||
var data = new Array();
|
||||
for (var j=0; j<node.childNodes.length; j++) {
|
||||
var child = node.childNodes[j];
|
||||
var key;
|
||||
var value;
|
||||
if (child.nodeName == 'e') {
|
||||
for (var k=0; k<child.childNodes.length; k++) {
|
||||
if (child.childNodes[k].nodeName == 'k') {
|
||||
key = child.childNodes[k].firstChild.data;
|
||||
}
|
||||
else if (child.childNodes[k].nodeName == 'v') {
|
||||
value = this._nodeToObject(child.childNodes[k].firstChild);
|
||||
}
|
||||
}
|
||||
if (key != null && value != null) {
|
||||
data[key] = value;
|
||||
key = value = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
return data;
|
||||
}
|
||||
}
|
||||
|
||||
this.loadingFunction = function(){};
|
||||
this.doneLoadingFunction = function(){};
|
||||
var loadingTimeout;
|
||||
|
||||
// Sends a XMLHttpRequest to call the specified PHP function on the server
|
||||
// * sRequestType is optional -- defaults to POST
|
||||
this.call = function(sFunction, aArgs, sRequestType)
|
||||
{
|
||||
var i,r,postData;
|
||||
if (document.body && xajaxWaitCursor)
|
||||
document.body.style.cursor = 'wait';
|
||||
if (xajaxStatusMessages == true) window.status = 'Sending Request...';
|
||||
clearTimeout(loadingTimeout);
|
||||
loadingTimeout = setTimeout("xajax.loadingFunction();",400);
|
||||
if (xajaxDebug) this.DebugMessage("Starting xajax...");
|
||||
if (sRequestType == null) {
|
||||
var xajaxRequestType = xajaxDefinedPost;
|
||||
}
|
||||
else {
|
||||
var xajaxRequestType = sRequestType;
|
||||
}
|
||||
var uri = xajaxRequestUri;
|
||||
var value;
|
||||
switch(xajaxRequestType)
|
||||
{
|
||||
case xajaxDefinedGet:{
|
||||
var uriGet = uri.indexOf("?")==-1?"?xajax="+encodeURIComponent(sFunction):"&xajax="+encodeURIComponent(sFunction);
|
||||
if (aArgs) {
|
||||
for (i = 0; i<aArgs.length; i++)
|
||||
{
|
||||
value = aArgs[i];
|
||||
if (typeof(value)=="object")
|
||||
value = this.objectToXML(value);
|
||||
uriGet += "&xajaxargs[]="+encodeURIComponent(value);
|
||||
}
|
||||
}
|
||||
uriGet += "&xajaxr=" + new Date().getTime();
|
||||
uri += uriGet;
|
||||
postData = null;
|
||||
} break;
|
||||
case xajaxDefinedPost:{
|
||||
postData = "xajax="+encodeURIComponent(sFunction);
|
||||
postData += "&xajaxr="+new Date().getTime();
|
||||
if (aArgs) {
|
||||
for (i = 0; i <aArgs.length; i++)
|
||||
{
|
||||
value = aArgs[i];
|
||||
if (typeof(value)=="object")
|
||||
value = this.objectToXML(value);
|
||||
postData = postData+"&xajaxargs[]="+encodeURIComponent(value);
|
||||
}
|
||||
}
|
||||
} break;
|
||||
default:
|
||||
alert("Illegal request type: " + xajaxRequestType); return false; break;
|
||||
}
|
||||
r = this.getRequestObject();
|
||||
if (!r) return false;
|
||||
r.open(xajaxRequestType==xajaxDefinedGet?"GET":"POST", uri, true);
|
||||
if (xajaxRequestType == xajaxDefinedPost)
|
||||
{
|
||||
try
|
||||
{
|
||||
r.setRequestHeader("Method", "POST " + uri + " HTTP/1.1");
|
||||
r.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
|
||||
}
|
||||
catch(e)
|
||||
{
|
||||
alert("Your browser does not appear to support asynchronous requests using POST.");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
r.onreadystatechange = function()
|
||||
{
|
||||
if (r.readyState != 4)
|
||||
return;
|
||||
|
||||
if (r.status==200)
|
||||
{
|
||||
if (xajaxDebug) xajax.DebugMessage("Received:\n" + r.responseText);
|
||||
if (r.responseXML && r.responseXML.documentElement)
|
||||
xajax.processResponse(r.responseXML);
|
||||
else {
|
||||
var errorString = "Error: the XML response that was returned from the server is invalid.";
|
||||
errorString += "\nReceived:\n" + r.responseText;
|
||||
trimmedResponseText = r.responseText.replace( /^\s+/g, "" );// strip leading space
|
||||
trimmedResponseText = trimmedResponseText.replace( /\s+$/g, "" );// strip trailing
|
||||
if (trimmedResponseText != r.responseText)
|
||||
errorString += "\nYou have whitespace in your response.";
|
||||
alert(errorString);
|
||||
document.body.style.cursor = 'default';
|
||||
if (xajaxStatusMessages == true) window.status = 'Invalid XML response error';
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (xajax.responseErrorsForAlert.containsValue(r.status)) {
|
||||
var errorString = "Error: the server returned the following HTTP status: " + r.status;
|
||||
errorString += "\nReceived:\n" + r.responseText;
|
||||
alert(errorString);
|
||||
}
|
||||
document.body.style.cursor = 'default';
|
||||
if (xajaxStatusMessages == true) window.status = 'Invalid XML response error';
|
||||
}
|
||||
|
||||
delete r;
|
||||
r = null;
|
||||
}
|
||||
if (xajaxDebug) this.DebugMessage("Calling "+sFunction +" uri="+uri+" (post:"+ postData +")");
|
||||
r.send(postData);
|
||||
if (xajaxStatusMessages == true) window.status = 'Waiting for data...';
|
||||
delete r;
|
||||
return true;
|
||||
}
|
||||
|
||||
//Gets the text as it would be if it were being retrieved from
|
||||
//the innerHTML property in the current browser
|
||||
this.getBrowserHTML = function(html)
|
||||
{
|
||||
tmpXajax = this.$(this.workId);
|
||||
if (!tmpXajax)
|
||||
{
|
||||
tmpXajax = document.createElement("div");
|
||||
tmpXajax.setAttribute('id',this.workId);
|
||||
tmpXajax.style.display = "none";
|
||||
tmpXajax.style.visibility = "hidden";
|
||||
document.body.appendChild(tmpXajax);
|
||||
}
|
||||
tmpXajax.innerHTML = html;
|
||||
var browserHTML = tmpXajax.innerHTML;
|
||||
tmpXajax.innerHTML = '';
|
||||
|
||||
return browserHTML;
|
||||
}
|
||||
|
||||
// Tests if the new Data is the same as the extant data
|
||||
this.willChange = function(element, attribute, newData)
|
||||
{
|
||||
if (!document.body)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
if (attribute == "innerHTML")
|
||||
{
|
||||
newData = this.getBrowserHTML(newData);
|
||||
}
|
||||
elementObject = this.$(element);
|
||||
if (elementObject) {
|
||||
var oldData;
|
||||
eval("oldData=this.$('"+element+"')."+attribute);
|
||||
if (newData !== oldData)
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
//Returns the source code of the page after it's been modified by xajax
|
||||
this.viewSource = function()
|
||||
{
|
||||
return "<html>"+document.getElementsByTagName("HTML")[0].innerHTML+"</html>";
|
||||
}
|
||||
|
||||
//Process XML xajaxResponses returned from the request
|
||||
this.processResponse = function(xml)
|
||||
{
|
||||
clearTimeout(loadingTimeout);
|
||||
this.doneLoadingFunction();
|
||||
if (xajaxStatusMessages == true) window.status = 'Processing...';
|
||||
var tmpXajax = null;
|
||||
xml = xml.documentElement;
|
||||
if (xml == null)
|
||||
return;
|
||||
|
||||
var skipCommands = 0;
|
||||
for (var i=0; i<xml.childNodes.length; i++)
|
||||
{
|
||||
if (skipCommands > 0) {
|
||||
skipCommands--;
|
||||
continue;
|
||||
}
|
||||
if (xml.childNodes[i].nodeName == "cmd")
|
||||
{
|
||||
var cmd;
|
||||
var id;
|
||||
var property;
|
||||
var data;
|
||||
var search;
|
||||
var type;
|
||||
var before;
|
||||
var objElement = null;
|
||||
|
||||
for (var j=0; j<xml.childNodes[i].attributes.length; j++)
|
||||
{
|
||||
if (xml.childNodes[i].attributes[j].name == "n")
|
||||
{
|
||||
cmd = xml.childNodes[i].attributes[j].value;
|
||||
}
|
||||
else if (xml.childNodes[i].attributes[j].name == "t")
|
||||
{
|
||||
id = xml.childNodes[i].attributes[j].value;
|
||||
}
|
||||
else if (xml.childNodes[i].attributes[j].name == "p")
|
||||
{
|
||||
property = xml.childNodes[i].attributes[j].value;
|
||||
}
|
||||
else if (xml.childNodes[i].attributes[j].name == "c")
|
||||
{
|
||||
type = xml.childNodes[i].attributes[j].value;
|
||||
}
|
||||
}
|
||||
if (xml.childNodes[i].childNodes.length > 1 && xml.childNodes[i].firstChild.nodeName == "#cdata-section")
|
||||
{
|
||||
data = "";
|
||||
for (var j=0; j<xml.childNodes[i].childNodes.length; j++)
|
||||
{
|
||||
data += xml.childNodes[i].childNodes[j].data;
|
||||
}
|
||||
}
|
||||
else if (xml.childNodes[i].firstChild && xml.childNodes[i].firstChild.nodeName == 'xjxobj') {
|
||||
data = this._nodeToObject(xml.childNodes[i].firstChild);
|
||||
objElement = "XJX_SKIP";
|
||||
}
|
||||
else if (xml.childNodes[i].childNodes.length > 1)
|
||||
{
|
||||
for (var j=0; j<xml.childNodes[i].childNodes.length; j++)
|
||||
{
|
||||
if (xml.childNodes[i].childNodes[j].childNodes.length > 1 && xml.childNodes[i].childNodes[j].firstChild.nodeName == "#cdata-section")
|
||||
{
|
||||
var internalData = "";
|
||||
for (var k=0; k<xml.childNodes[i].childNodes[j].childNodes.length;k++)
|
||||
{
|
||||
internalData+=xml.childNodes[i].childNodes[j].childNodes[k].nodeValue;
|
||||
}
|
||||
} else {
|
||||
var internalData = xml.childNodes[i].childNodes[j].firstChild.nodeValue;
|
||||
}
|
||||
|
||||
if (xml.childNodes[i].childNodes[j].nodeName == "s")
|
||||
{
|
||||
search = internalData;
|
||||
}
|
||||
if (xml.childNodes[i].childNodes[j].nodeName == "r")
|
||||
{
|
||||
data = internalData;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (xml.childNodes[i].firstChild)
|
||||
data = xml.childNodes[i].firstChild.nodeValue;
|
||||
else
|
||||
data = "";
|
||||
|
||||
if (objElement != "XJX_SKIP") objElement = this.$(id);
|
||||
var cmdFullname;
|
||||
try
|
||||
{
|
||||
if (cmd=="cc") {
|
||||
cmdFullname = "addConfirmCommands";
|
||||
var confirmResult = confirm(data);
|
||||
if (!confirmResult) {
|
||||
skipCommands = id;
|
||||
}
|
||||
}
|
||||
if (cmd=="al")
|
||||
{
|
||||
cmdFullname = "addAlert";
|
||||
alert(data);
|
||||
}
|
||||
else if (cmd=="js")
|
||||
{
|
||||
cmdFullname = "addScript/addRedirect";
|
||||
eval(data);
|
||||
}
|
||||
else if (cmd=="jc")
|
||||
{
|
||||
cmdFullname = "addScriptCall";
|
||||
var scr = id + '(';
|
||||
if (data[0] != null) {
|
||||
scr += 'data[0]';
|
||||
for (var l=1; l<data.length; l++) {
|
||||
scr += ',data['+l+']';
|
||||
}
|
||||
}
|
||||
scr += ');';
|
||||
eval(scr);
|
||||
}
|
||||
else if (cmd=="in")
|
||||
{
|
||||
cmdFullname = "addIncludeScript";
|
||||
this.include(data);
|
||||
}
|
||||
else if (cmd=="as")
|
||||
{
|
||||
cmdFullname = "addAssign/addClear";
|
||||
if (this.willChange(id,property,data))
|
||||
{
|
||||
eval("objElement."+property+"=data;");
|
||||
}
|
||||
}
|
||||
else if (cmd=="ap")
|
||||
{
|
||||
cmdFullname = "addAppend";
|
||||
eval("objElement."+property+"+=data;");
|
||||
}
|
||||
else if (cmd=="pp")
|
||||
{
|
||||
cmdFullname = "addPrepend";
|
||||
eval("objElement."+property+"=data+objElement."+property);
|
||||
}
|
||||
else if (cmd=="rp")
|
||||
{
|
||||
cmdFullname = "addReplace";
|
||||
this.replace(id,property,search,data)
|
||||
}
|
||||
else if (cmd=="rm")
|
||||
{
|
||||
cmdFullname = "addRemove";
|
||||
this.remove(id);
|
||||
}
|
||||
else if (cmd=="ce")
|
||||
{
|
||||
cmdFullname = "addCreate";
|
||||
this.create(id,data,property);
|
||||
}
|
||||
else if (cmd=="ie")
|
||||
{
|
||||
cmdFullname = "addInsert";
|
||||
this.insert(id,data,property);
|
||||
}
|
||||
else if (cmd=="ia")
|
||||
{
|
||||
cmdFullname = "addInsertAfter";
|
||||
this.insertAfter(id,data,property);
|
||||
}
|
||||
else if (cmd=="ci")
|
||||
{
|
||||
cmdFullname = "addCreateInput";
|
||||
this.createInput(id,type,data,property);
|
||||
}
|
||||
else if (cmd=="ii")
|
||||
{
|
||||
cmdFullname = "addInsertInput";
|
||||
this.insertInput(id,type,data,property);
|
||||
}
|
||||
else if (cmd=="iia")
|
||||
{
|
||||
cmdFullname = "addInsertInputAfter";
|
||||
this.insertInputAfter(id,type,data,property);
|
||||
}
|
||||
else if (cmd=="ev")
|
||||
{
|
||||
cmdFullname = "addEvent";
|
||||
property = this.addOnPrefix(property);
|
||||
eval("this.$('"+id+"')."+property+"= function(){"+data+";}");
|
||||
}
|
||||
else if (cmd=="ah")
|
||||
{
|
||||
cmdFullname = "addHandler";
|
||||
this.addHandler(id, property, data);
|
||||
}
|
||||
else if (cmd=="rh")
|
||||
{
|
||||
cmdFullname = "addRemoveHandler";
|
||||
this.removeHandler(id, property, data);
|
||||
}
|
||||
}
|
||||
catch(e)
|
||||
{
|
||||
if (xajaxDebug)
|
||||
alert("While trying to '"+cmdFullname+"' (command number "+i+"), the following error occured:\n"
|
||||
+ e.name+": "+e.message+"\n"
|
||||
+ (id&&!objElement?"Object with id='"+id+"' wasn't found.\n":""));
|
||||
}
|
||||
delete objElement;
|
||||
delete cmd;
|
||||
delete cmdFullname;
|
||||
delete id;
|
||||
delete property;
|
||||
delete search;
|
||||
delete data;
|
||||
delete type;
|
||||
delete before;
|
||||
delete internalData;
|
||||
delete j;
|
||||
delete k;
|
||||
}
|
||||
}
|
||||
delete xml;
|
||||
delete i;
|
||||
document.body.style.cursor = 'default';
|
||||
if (xajaxStatusMessages == true) window.status = 'Done';
|
||||
}
|
||||
}
|
||||
|
||||
var xajax = new Xajax();
|
||||
xajaxLoaded = true;
|
|
@ -64,7 +64,7 @@ body {
|
|||
/* Table style */
|
||||
td{
|
||||
padding:5px;
|
||||
background-color: #D9E0E8;
|
||||
//background-color: #D9E0E8;
|
||||
font-size: smaller;
|
||||
}
|
||||
|
||||
|
|
|
@ -33,7 +33,7 @@ if ($_REQUEST['tab'] != 'account' && $_REQUEST['tab'] != 'modules') {
|
|||
|
||||
?>
|
||||
<input class="button" type="submit" value="<?php echo _('Update Preferences'); ?>" />
|
||||
<input type="hidden" name="tab" value="<?php echo scrub_out($current_tab); ?>" />
|
||||
<input type="hidden" name="tab" value="<?php echo scrub_out($_REQUEST['tab']); ?>" />
|
||||
<input type="hidden" name="method" value="<?php echo scrub_out($_REQUEST['action']); ?>" />
|
||||
<input class="button" type="submit" name="action" value="<?php echo _("Cancel"); ?>" />
|
||||
<?php
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
<h1><?php echo _('Ampache Debug'); ?></h1>
|
||||
<p><?php echo _('You\'ve reached this page because a configuration error has occured. Debug Information below'); ?></p>
|
||||
</div>
|
||||
<table border="0" cellpadding="3" cellspacing="0">
|
||||
<table align="center" border="0" cellpadding="3" cellspacing="0">
|
||||
<tr>
|
||||
<td><font size="+1"><?php echo _('CHECK'); ?></font></td>
|
||||
<td>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
/*
|
||||
|
||||
Copyright (c) 2001 - 2006 Ampache.org
|
||||
Copyright (c) 2001 - 2007 Ampache.org
|
||||
All rights reserved.
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
|
@ -22,8 +22,6 @@
|
|||
<html>
|
||||
<head><title>Ampache XSPF Player</title></head>
|
||||
<body style="margin:0px; padding:0px; border:0px; background-color: #000000">
|
||||
<div id="mp3player">
|
||||
<script type="text/javascript" src="<?php echo conf('web_path'); ?>/modules/flash/swfobject.js"></script>
|
||||
<script language=JavaScript>
|
||||
<!--
|
||||
//Disable right mouse click Script to hide the source url for the flash player it prevents ripping music a bit.
|
||||
|
@ -55,11 +53,15 @@ document.oncontextmenu=new Function("return false")
|
|||
// -->
|
||||
</script>
|
||||
<script type="text/javascript">
|
||||
<!--
|
||||
var flashObj = new SWFObject ("<?php echo conf('web_path'); ?>/modules/flash/xspf_player.swf?action=play&playlist=<?php echo conf('web_path'); ?>/modules/flash/xspf_player.php<?php echo $play_info; ?>&folder=<?php echo conf('web_path'); ?>/modules/flash/&textcolor=033066&color=E6E6E6&loop=playlist&lma=yes&viewinfo=true&vol=30&display=1@. - @2@ - @", "FMP3", "350", "300", 7, "#000000", true);
|
||||
flashObj.write ("mp3player");
|
||||
// -->
|
||||
</script>
|
||||
|
||||
<div id="mp3player">
|
||||
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" width="400" height="170" id="xspf_player" align="middle">
|
||||
<param name="allowScriptAccess" value="sameDomain" />
|
||||
<param name="movie" value="xspf_player.swf" />
|
||||
<param name="quality" value="high" />
|
||||
<param name="bgcolor" value="#ffffff" />
|
||||
<embed src="<?php echo Config::get('web_path'); ?>/modules/flash/xspf_player.swf?autoplay=true&playlist_url=<?php echo Config::get('web_path'); ?>/modules/flash/xspf_player.php<?php echo $play_info; ?>" quality="high" bgcolor="#ffffff" width="400" height="170" name="xspf_player" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
|
||||
</object>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
<span><a href="<?php echo $web_path; ?>/index.php"><?php echo _('Currently Playing'); ?></a></span>
|
||||
<span><a href="<?php echo $web_path; ?>/stats.php"><?php echo _('Statistics'); ?></a></span>
|
||||
<hr />
|
||||
<!-- RANDOM, Hidden for now cause its broken
|
||||
<h4><?php echo _('Search'); ?></h4>
|
||||
<div id="sidebar_subsearch">
|
||||
<form name="sub_search" method="post" action="<?php echo $web_path; ?>/search.php" enctype="multipart/form-data" style="Display:inline">
|
||||
|
@ -14,7 +15,6 @@
|
|||
</form>
|
||||
</div>
|
||||
<hr />
|
||||
<!-- RANDOM, Hidden for now cause its broken
|
||||
<h4><?php echo _('Random'); ?></h4>
|
||||
<form name="sub_random" method="post" enctype="multipart/form-data" action="<?php echo $web_path; ?>/song.php?action=random&method=stream" style="Display:inline">
|
||||
<select name="random" style="width:80px;">
|
||||
|
|
|
@ -1,8 +1,2 @@
|
|||
<h4><?php echo _('Browse By'); ?></h4>
|
||||
<select name="type">
|
||||
<option value="song"><?php echo _('Song Title'); ?></option>
|
||||
<option value="album"><?php echo _('Albums'); ?></option>
|
||||
<option value="artist"><?php echo _('Artist'); ?></option>
|
||||
<option value="genre"><?php echo _('Genre'); ?></option>
|
||||
</select>
|
||||
DISABLED
|
||||
<hr />
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
<h4><?php echo _('Search'); ?></h4>
|
||||
<!--
|
||||
<form method="post" action="#" id="search_side" name="search_side">
|
||||
<input type="textbox" name="string" value="" size="8" />
|
||||
<hr />
|
||||
|
@ -6,4 +7,6 @@
|
|||
<input type="checkbox" name="all" value="1" /> <?php echo _('Titles'); ?><br />
|
||||
<input type="checkbox" name="year" value="1" /> <?php echo _('Year'); ?><br />
|
||||
</form>
|
||||
-->
|
||||
DISABLED
|
||||
<hr />
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue