dns-lookup.deblan.org/lib/xajax/xajax_core/plugin_layer/xajaxDefaultIncludePlugin.inc.php
2015-03-02 21:27:28 +01:00

353 lines
8.9 KiB
PHP
Executable file

<?php
/*
File: xajaxDefaultIncludePlugin.inc.php
Contains the default script include plugin class.
Title: xajax default script include plugin class
Please see <copyright.inc.php> for a detailed description, copyright
and license information.
*/
/*
@package xajax
@version $Id: xajaxDefaultIncludePlugin.inc.php 362 2007-05-29 15:32:24Z calltoconstruct $
@copyright Copyright (c) 2005-2007 by Jared White & J. Max Wilson
@copyright Copyright (c) 2008-2009 by Joseph Woolley, Steffen Konerow, Jared White & J. Max Wilson
@license http://www.xajaxproject.org/bsd_license.txt BSD License
*/
/*
Class: xajaxIncludeClientScript
Generates the SCRIPT tags necessary to 'include' the xajax javascript
library on the browser.
This is called when the page is first loaded.
*/
class xajaxIncludeClientScriptPlugin extends xajaxRequestPlugin
{
var $sJsURI;
var $aJsFiles;
var $sDefer;
var $sRequestURI;
var $sStatusMessages;
var $sWaitCursor;
var $sVersion;
var $sDefaultMode;
var $sDefaultMethod;
var $bDebug;
var $bVerboseDebug;
var $nScriptLoadTimeout;
var $bUseUncompressedScripts;
var $bDeferScriptGeneration;
var $sLanguage;
var $nResponseQueueSize;
function xajaxIncludeClientScriptPlugin()
{
$this->sJsURI = '';
$this->aJsFiles = array();
$this->sDefer = '';
$this->sRequestURI = '';
$this->sStatusMessages = 'false';
$this->sWaitCursor = 'true';
$this->sVersion = 'unknown';
$this->sDefaultMode = 'asynchronous';
$this->sDefaultMethod = 'POST'; // W3C: Method is case sensitive
$this->bDebug = false;
$this->bVerboseDebug = false;
$this->nScriptLoadTimeout = 2000;
$this->bUseUncompressedScripts = false;
$this->bDeferScriptGeneration = false;
$this->sLanguage = null;
$this->nResponseQueueSize = null;
}
/*
Function: configure
*/
function configure($sName, $mValue)
{
if ('javascript URI' == $sName) {
$this->sJsURI = $mValue;
} else if ("javascript files" == $sName) {
$this->aJsFiles = $mValue;
} else if ("scriptDefferal" == $sName) {
if (true === $mValue) $this->sDefer = "defer ";
else $this->sDefer = "";
} else if ("requestURI" == $sName) {
$this->sRequestURI = $mValue;
} else if ("statusMessages" == $sName) {
if (true === $mValue) $this->sStatusMessages = "true";
else $this->sStatusMessages = "false";
} else if ("waitCursor" == $sName) {
if (true === $mValue) $this->sWaitCursor = "true";
else $this->sWaitCursor = "false";
} else if ("version" == $sName) {
$this->sVersion = $mValue;
} else if ("defaultMode" == $sName) {
if ("asynchronous" == $mValue || "synchronous" == $mValue)
$this->sDefaultMode = $mValue;
} else if ("defaultMethod" == $sName) {
if ("POST" == $mValue || "GET" == $mValue) // W3C: Method is case sensitive
$this->sDefaultMethod = $mValue;
} else if ("debug" == $sName) {
if (true === $mValue || false === $mValue)
$this->bDebug = $mValue;
} else if ("verboseDebug" == $sName) {
if (true === $mValue || false === $mValue)
$this->bVerboseDebug = $mValue;
} else if ("scriptLoadTimeout" == $sName) {
$this->nScriptLoadTimeout = $mValue;
} else if ("useUncompressedScripts" == $sName) {
if (true === $mValue || false === $mValue)
$this->bUseUncompressedScripts = $mValue;
} else if ('deferScriptGeneration' == $sName) {
if (true === $mValue || false === $mValue)
$this->bDeferScriptGeneration = $mValue;
else if ('deferred' == $mValue)
$this->bDeferScriptGeneration = $mValue;
} else if ('language' == $sName) {
$this->sLanguage = $mValue;
} else if ('responseQueueSize' == $sName) {
$this->nResponseQueueSize = $mValue;
}
}
/*
Function: generateClientScript
*/
function generateClientScript()
{
if (false === $this->bDeferScriptGeneration)
{
$this->printJavascriptConfig();
$this->printJavascriptInclude();
}
else if (true === $this->bDeferScriptGeneration)
{
$this->printJavascriptInclude();
}
else if ('deferred' == $this->bDeferScriptGeneration)
{
$this->printJavascriptConfig();
}
}
/*
Function: getJavascriptConfig
Generates the xajax settings that will be used by the xajax javascript
library when making requests back to the server.
Returns:
string - The javascript code necessary to configure the settings on
the browser.
*/
function getJavascriptConfig()
{
ob_start();
$this->printJavascriptConfig();
return ob_get_clean();
}
/*
Function: printJavascriptConfig
See <xajaxIncludeClientScriptPlugin::getJavascriptConfig>
*/
function printJavascriptConfig()
{
$sCrLf = "\n";
echo $sCrLf;
echo '<';
echo 'script type="text/javascript" ';
echo $this->sDefer;
echo 'charset="UTF-8">';
echo $sCrLf;
echo '/* <';
echo '![CDATA[ */';
echo $sCrLf;
echo 'try { if (undefined == xajax.config) xajax.config = {}; } catch (e) { xajax = {}; xajax.config = {}; };';
echo $sCrLf;
echo 'xajax.config.requestURI = "';
echo $this->sRequestURI;
echo '";';
echo $sCrLf;
echo 'xajax.config.statusMessages = ';
echo $this->sStatusMessages;
echo ';';
echo $sCrLf;
echo 'xajax.config.waitCursor = ';
echo $this->sWaitCursor;
echo ';';
echo $sCrLf;
echo 'xajax.config.version = "';
echo $this->sVersion;
echo '";';
echo $sCrLf;
echo 'xajax.config.legacy = false;';
echo $sCrLf;
echo 'xajax.config.defaultMode = "';
echo $this->sDefaultMode;
echo '";';
echo $sCrLf;
echo 'xajax.config.defaultMethod = "';
echo $this->sDefaultMethod;
echo '";';
if (false === (null === $this->nResponseQueueSize))
{
echo $sCrLf;
echo 'xajax.config.responseQueueSize = ';
echo $this->nResponseQueueSize;
echo ';';
}
echo $sCrLf;
echo '/* ]]> */';
echo $sCrLf;
echo '<';
echo '/script>';
echo $sCrLf;
}
/*
Function: getJavascriptInclude
Generates SCRIPT tags necessary to load the javascript libraries on
the browser.
sJsURI - (string): The relative or fully qualified PATH that will be
used to compose the URI to the specified javascript files.
aJsFiles - (array): List of javascript files to include.
Returns:
string - The SCRIPT tags that will cause the browser to load the
specified files.
*/
function getJavascriptInclude()
{
ob_start();
$this->printJavascriptInclude();
return ob_get_clean();
}
/*
Function: printJavascriptInclude
See <xajaxIncludeClientScriptPlugin::getJavascriptInclude>
*/
function printJavascriptInclude()
{
$aJsFiles = $this->aJsFiles;
$sJsURI = $this->sJsURI;
if (0 == count($aJsFiles)) {
$aJsFiles[] = array($this->_getScriptFilename('xajax_js/xajax_core.js'), 'xajax');
if (true === $this->bDebug)
$aJsFiles[] = array($this->_getScriptFilename('xajax_js/xajax_debug.js'), 'xajax.debug');
if (true === $this->bVerboseDebug)
$aJsFiles[] = array($this->_getScriptFilename('xajax_js/xajax_verbose.js'), 'xajax.debug.verbose');
if (null !== $this->sLanguage)
$aJsFiles[] = array($this->_getScriptFilename('xajax_js/xajax_lang_' . $this->sLanguage . '.js'), 'xajax');
}
if ($sJsURI != '' && substr($sJsURI, -1) != '/')
$sJsURI .= '/';
$sCrLf = "\n";
foreach ($aJsFiles as $aJsFile) {
echo '<';
echo 'script type="text/javascript" src="';
echo $sJsURI;
echo $aJsFile[0];
echo '" ';
echo $this->sDefer;
echo 'charset="UTF-8"><';
echo '/script>';
echo $sCrLf;
}
if (0 < $this->nScriptLoadTimeout) {
foreach ($aJsFiles as $aJsFile) {
echo '<';
echo 'script type="text/javascript" ';
echo $this->sDefer;
echo 'charset="UTF-8">';
echo $sCrLf;
echo '/* <';
echo '![CDATA[ */';
echo $sCrLf;
echo 'window.setTimeout(';
echo $sCrLf;
echo ' function() {';
echo $sCrLf;
echo ' var scriptExists = false;';
echo $sCrLf;
echo ' try { if (';
echo $aJsFile[1];
echo '.isLoaded) scriptExists = true; }';
echo $sCrLf;
echo ' catch (e) {}';
echo $sCrLf;
echo ' if (!scriptExists) {';
echo $sCrLf;
echo ' alert("Error: the ';
echo $aJsFile[1];
echo ' Javascript component could not be included. Perhaps the URL is incorrect?\nURL: ';
echo $sJsURI;
echo $aJsFile[0];
echo '");';
echo $sCrLf;
echo ' }';
echo $sCrLf;
echo ' }, ';
echo $this->nScriptLoadTimeout;
echo ');';
echo $sCrLf;
echo '/* ]]> */';
echo $sCrLf;
echo '<';
echo '/script>';
echo $sCrLf;
}
}
}
/*
Function: _getScriptFilename
Returns the name of the script file, based on the current settings.
sFilename - (string): The base filename.
Returns:
string - The filename as it should be specified in the script tags
on the browser.
*/
function _getScriptFilename($sFilename)
{
if ($this->bUseUncompressedScripts) {
return str_replace('.js', '_uncompressed.js', $sFilename);
}
return $sFilename;
}
}
/*
Register the xajaxIncludeClientScriptPlugin object with the xajaxPluginManager.
*/
$objPluginManager =& xajaxPluginManager::getInstance();
$objPluginManager->registerPlugin(new xajaxIncludeClientScriptPlugin(), 99);