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 */ 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 */ 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);