* $config['Domain51_App_Js']['js_libraries'][] = array(
* 'libraryName' => 'library',
* 'fileName' => 'library.js',
* 'path' => '/path/to/library/'
* );
*
*
* The library would be access via the following URL:
*
* index.php/js/?client=library
*
*
* @author Travis Swicegood
* @package Domain51
* @subpackage Domain51_App_Js
* @license Released under the same license as Solar
*/
class Domain51_App_Js extends Solar_Controller_Page
{
/**
* Provide the base configuration values for this object.
*
* `pack_javascript`
* : (boolean) Should JavaScript code be stripped of whitespace
*
* `js_libraries`
* : (array) An array of JavaScript libraries to load. The format
* follows the naming convention of
* {@link HTML_AJAX_Server::registerJSLibaries()}.
* `libraryName`
* : (string)
* The name the library will be referenced by
* `fileName`
* : (string)
* The name of the JS file to load when libraryName is
* requested.
* `path`
* : (string|false)
* If not false, the path to where fileName is located
*
* `init_objects`
* : (array)
* An array of HTML_AJAX init objects.
*
* `classes`
* : (array)
* An array of arrays containing data necessary to load a particular
* class and make it accessible to an AJAX call. The keys are named
* to match {@link HTML_AJAX_Server::registerClass()} with the
* exception of name instead of instance.
* `name` : (string)
* The name of the object to load via {@link Solar::factory()}
* `exportedName` : (string|false)
* The name to register this object with, if not false
* `exportedMethods` : (array|false)
* An array of the method names to export, if not false
*
* @var array
* @access protected
*/
protected $_Domain51_App_Js = array(
'pack_javascript' => false,
'js_libraries' => array(),
'init_objects' => array(),
'classes' => array(),
);
/**
* Specifies that {@link actionServer()} is the action that should be
* called if nothing is specified.
*
* @var string
* @access protected
* @see actionServer()
*/
protected $_action_default = 'server';
/**
* Creates an HTML_AJAX server file to handle AJAX requests
*
* @return void
* @access public
*/
public function actionServer() {
// include the server class
include 'HTML/AJAX/Server.php';
// create our new server
$server = new HTML_AJAX_Server();
// Set packJavaScript property
$server->ajax->packJavaScript = $this->_config['pack_javascript'];
// Load all known JS libraries
foreach ($this->_config['js_libraries'] as $info) {
$server->registerJSLibrary(
$info['libraryName'],
$info['fileName'],
$info['path']
);
}
// If any init_objects are specified, turn initMethods on and load the
// init objects.
if (count($this->_config['init_objects']) > 0) {
$server->initMethods = true;
foreach ($this->_config['init_objects'] as $name) {
$instance = Solar::factory($name);
$server->registerInitObject($instance);
}
}
// Register all classes that have been explicitly defined by the config.
foreach ($this->_config['classes'] as $class) {
if (!isset($class['exportedName'])) {
$class['exportedName'] = false;
}
if (!isset($class['exportedMethods'])) {
$class['exportedMethods'] = false;
}
$instance = Solar::factory($class['name']);
$server->registerClass($instance, $class['exportedName'], $class['exportedMethods']);
}
// handle different types of requests possiblities are
// ?client=all - request for all javascript client files
// ?stub=classname - request for proxy stub for given class, can be combined with client but this may hurt caching unless stub=all is used
// ?c=classname&m=method - an ajax call, server handles serialization and handing things off to the proper method then returning the results
$server->handleRequest();
}
/**
* Override the default {@link Solar_Controller_Page::_render()} to prevent
* an attempt to load templates.
*
* @return void
*/
protected function _render() {
}
}
?>