Current File : /home/k/a/r/karenpetzb/www/items/category/Container.php.tar |
home/karenpetzb/library/Zend/View/Helper/Placeholder/Container.php 0000604 00000002330 15071470162 0021210 0 ustar 00 <?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @package Zend_View
* @subpackage Helper
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
* @version $Id: Container.php 9099 2008-03-30 19:35:47Z thomas $
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
/** Zend_View_Helper_Placeholder_Container_Abstract */
require_once 'Zend/View/Helper/Placeholder/Container/Abstract.php';
/**
* Container for placeholder values
*
* @package Zend_View
* @subpackage Helper
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
class Zend_View_Helper_Placeholder_Container extends Zend_View_Helper_Placeholder_Container_Abstract
{
}
home/karenpetzb/library/ZendX/JQuery/View/Helper/JQuery/Container.php 0000604 00000046306 15071503712 0021565 0 ustar 00 <?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @category ZendX
* @package ZendX_JQuery
* @subpackage View
* @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
* @version $Id: Container.php 20751 2010-01-29 11:14:09Z beberlei $
*/
/**
* @see ZendX_JQuery
*/
require_once "ZendX/JQuery.php";
/**
* jQuery View Helper. Transports all jQuery stack and render information across all views.
*
* @uses ZendX_JQuery_View_Helper_JQuery_Container
* @package ZendX_JQuery
* @subpackage View
* @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
class ZendX_JQuery_View_Helper_JQuery_Container
{
/**
* Path to local webserver jQuery library
*
* @var String
*/
protected $_jqueryLibraryPath = null;
/**
* Additional javascript files that for jQuery Helper components.
*
* @var Array
*/
protected $_javascriptSources = array();
/**
* Indicates wheater the jQuery View Helper is enabled.
*
* @var Boolean
*/
protected $_enabled = false;
/**
* Indicates if a capture start method for javascript or onLoad has been called.
*
* @var Boolean
*/
protected $_captureLock = false;
/**
* Additional javascript statements that need to be executed after jQuery lib.
*
* @var Array
*/
protected $_javascriptStatements = array();
/**
* Additional stylesheet files for jQuery related components.
*
* @var Array
*/
protected $_stylesheets = array();
/**
* jQuery onLoad statements Stack
*
* @var Array
*/
protected $_onLoadActions = array();
/**
* View is rendered in XHTML or not.
*
* @var Boolean
*/
protected $_isXhtml = false;
/**
* Default CDN jQuery Library version
*
* @var String
*/
protected $_version = ZendX_JQuery::DEFAULT_JQUERY_VERSION;
/**
* Default Render Mode (all parts)
*
* @var Integer
*/
protected $_renderMode = ZendX_JQuery::RENDER_ALL;
/**
* jQuery UI Library Enabled
*
* @var Boolean
*/
protected $_uiEnabled = false;
/**
* Local jQuery UI Path. Use Google CDN if
* variable is null
*
* @var String
*/
protected $_uiPath = null;
/**
* jQuery UI Google CDN Version
*
* @var String
*/
protected $_uiVersion = ZendX_JQuery::DEFAULT_UI_VERSION;
/**
* Load CDN Path from SSL or Non-SSL?
*
* @var boolean
*/
protected $_loadSslCdnPath = false;
/**
* View Instance
*
* @var Zend_View_Interface
*/
public $view = null;
/**
* Set view object
*
* @param Zend_View_Interface $view
* @return void
*/
public function setView(Zend_View_Interface $view)
{
$this->view = $view;
}
/**
* Enable jQuery
*
* @return ZendX_JQuery_View_Helper_JQuery_Container
*/
public function enable()
{
$this->_enabled = true;
return $this;
}
/**
* Disable jQuery
*
* @return ZendX_JQuery_View_Helper_JQuery_Container
*/
public function disable()
{
$this->uiDisable();
$this->_enabled = false;
return $this;
}
/**
* Is jQuery enabled?
*
* @return boolean
*/
public function isEnabled()
{
return $this->_enabled;
}
/**
* Set the version of the jQuery library used.
*
* @param string $version
* @return ZendX_JQuery_View_Helper_JQuery_Container
*/
public function setVersion($version)
{
$this->_version = $version;
return $this;
}
/**
* Get the version used with the jQuery library
*
* @return string
*/
public function getVersion()
{
return $this->_version;
}
/**
* Use CDN, using version specified. Currently supported
* by Googles Ajax Library API are: 1.2.3, 1.2.6
*
* @deprecated As of version 1.8, use {@link setVersion()} instead.
* @param string $version
* @return ZendX_JQuery_View_Helper_JQuery_Container
*/
public function setCdnVersion($version = null)
{
return $this->setVersion($version);
}
/**
* Get CDN version
*
* @deprecated As of version 1.8, use {@link getVersion()} instead.
* @return string
*/
public function getCdnVersion()
{
return $this->getVersion();
}
/**
* Set Use SSL on CDN Flag
*
* @return ZendX_JQuery_View_Helper_JQuery_Container
*/
public function setCdnSsl($flag)
{
$this->_loadSslCdnPath = $flag;
return $this;
}
/**
* Are we using the CDN?
*
* @return boolean
*/
public function useCdn()
{
return !$this->useLocalPath();
}
/**
* Set path to local jQuery library
*
* @param string $path
* @return ZendX_JQuery_View_Helper_JQuery_Container
*/
public function setLocalPath($path)
{
$this->_jqueryLibraryPath = (string) $path;
return $this;
}
/**
* Enable jQuery UI Library Rendering
*
* @return ZendX_JQuery_View_Helper_JQuery_Container
*/
public function uiEnable()
{
$this->enable();
$this->_uiEnabled = true;
return $this;
}
/**
* Disable jQuery UI Library Rendering
*
* @return ZendX_JQuery_View_Helper_JQuery_Container
*/
public function uiDisable()
{
$this->_uiEnabled = false;
return $this;
}
/**
* Check wheater currently the jQuery UI library is enabled.
*
* @return boolean
*/
public function uiIsEnabled()
{
return $this->_uiEnabled;
}
/**
* Set jQuery UI version used.
*
* @param string $version
* @return ZendX_JQuery_View_Helper_JQuery_Container
*/
public function setUiVersion($version)
{
$this->_uiVersion = $version;
return $this;
}
/**
* Get jQuery UI Version used.
*
* @return string
*/
public function getUiVersion()
{
return $this->_uiVersion;
}
/**
* Set jQuery UI CDN Version
*
* @deprecated As of 1.8 use {@link setUiVersion()}
* @param String $version
* @return ZendX_JQuery_View_Helper_JQuery_Container
*/
public function setUiCdnVersion($version="1.5.2")
{
return $this->setUiVersion($version);
}
/**
* Return jQuery UI CDN Version
*
* @deprecated As of 1.8 use {@link getUiVersion()}
* @return String
*/
public function getUiCdnVersion()
{
return $this->getUiVersion();
}
/**
* Set local path to jQuery UI library
*
* @param String $path
* @return ZendX_JQuery_View_Helper_JQuery_Container
*/
public function setUiLocalPath($path)
{
$this->_uiPath = (string) $path;
return $this;
}
/**
* Return the local jQuery UI Path if set.
*
* @return string
*/
public function getUiPath()
{
return $this->_uiPath;
}
/**
* Proxies to getUiPath() for consistency in function naming.
*
* @return string
*/
public function getUiLocalPath()
{
return $this->getUiPath();
}
/**
* Is the jQuery Ui loaded from local scope?
*
* @return boolean
*/
public function useUiLocal()
{
return (null===$this->_uiPath ? false : true);
}
/**
* Is the jQuery Ui enabled and loaded from CDN?
*
* @return ZendX_JQuery_View_Helper_JQuery_Container
*/
public function useUiCdn()
{
return !$this->useUiLocal();
}
/**
* Get local path to jQuery
*
* @return string
*/
public function getLocalPath()
{
return $this->_jqueryLibraryPath;
}
/**
* Are we using a local path?
*
* @return boolean
*/
public function useLocalPath()
{
return (null === $this->_jqueryLibraryPath) ? false : true;
}
/**
* Start capturing routines to run onLoad
*
* @return boolean
*/
public function onLoadCaptureStart()
{
if ($this->_captureLock) {
require_once 'Zend/Exception.php';
throw new Zend_Exception('Cannot nest onLoad captures');
}
$this->_captureLock = true;
return ob_start();
}
/**
* Stop capturing routines to run onLoad
*
* @return boolean
*/
public function onLoadCaptureEnd()
{
$data = ob_get_clean();
$this->_captureLock = false;
$this->addOnLoad($data);
return true;
}
/**
* Capture arbitrary javascript to include in jQuery script
*
* @return boolean
*/
public function javascriptCaptureStart()
{
if ($this->_captureLock) {
require_once 'Zend/Exception.php';
throw new Zend_Exception('Cannot nest captures');
}
$this->_captureLock = true;
return ob_start();
}
/**
* Finish capturing arbitrary javascript to include in jQuery script
*
* @return boolean
*/
public function javascriptCaptureEnd()
{
$data = ob_get_clean();
$this->_captureLock = false;
$this->addJavascript($data);
return true;
}
/**
* Add a Javascript File to the include stack.
*
* @return ZendX_JQuery_View_Helper_JQuery_Container
*/
public function addJavascriptFile($path)
{
$path = (string) $path;
if (!in_array($path, $this->_javascriptSources)) {
$this->_javascriptSources[] = (string) $path;
}
return $this;
}
/**
* Return all currently registered Javascript files.
*
* This does not include the jQuery library, which is handled by another retrieval
* strategy.
*
* @return Array
*/
public function getJavascriptFiles()
{
return $this->_javascriptSources;
}
/**
* Clear all currently registered Javascript files.
*
* @return ZendX_JQuery_View_Helper_JQuery_Container
*/
public function clearJavascriptFiles()
{
$this->_javascriptSources = array();
return $this;
}
/**
* Add arbitrary javascript to execute in jQuery JS container
*
* @param string $js
* @return ZendX_JQuery_View_Helper_JQuery_Container
*/
public function addJavascript($js)
{
$this->_javascriptStatements[] = $js;
$this->enable();
return $this;
}
/**
* Return all registered javascript statements
*
* @return array
*/
public function getJavascript()
{
return $this->_javascriptStatements;
}
/**
* Clear arbitrary javascript stack
*
* @return ZendX_JQuery_View_Helper_JQuery_Container
*/
public function clearJavascript()
{
$this->_javascriptStatements = array();
return $this;
}
/**
* Add a stylesheet
*
* @param string $path
* @return ZendX_JQuery_View_Helper_JQuery_Container
*/
public function addStylesheet($path)
{
$path = (string) $path;
if (!in_array($path, $this->_stylesheets)) {
$this->_stylesheets[] = (string) $path;
}
return $this;
}
/**
* Retrieve registered stylesheets
*
* @return array
*/
public function getStylesheets()
{
return $this->_stylesheets;
}
/**
* Add a script to execute onLoad
*
* @param string $callback Lambda
* @return ZendX_JQuery_View_Helper_JQuery_Container
*/
public function addOnLoad($callback)
{
if (!in_array($callback, $this->_onLoadActions, true)) {
$this->_onLoadActions[] = $callback;
}
$this->enable();
return $this;
}
/**
* Retrieve all registered onLoad actions
*
* @return array
*/
public function getOnLoadActions()
{
return $this->_onLoadActions;
}
/**
* Clear the onLoadActions stack.
*
* @return ZendX_JQuery_View_Helper_JQuery_Container
*/
public function clearOnLoadActions()
{
$this->_onLoadActions = array();
return $this;
}
/**
* Set which parts of the jQuery enviroment should be rendered.
*
* This function allows for a gradual refactoring of the jQuery code
* rendered by calling __toString(). Use ZendX_JQuery::RENDER_*
* constants. By default all parts of the enviroment are rendered.
*
* @see ZendX_JQuery::RENDER_ALL
* @param integer $mask
* @return ZendX_JQuery_View_Helper_JQuery_Container
*/
public function setRenderMode($mask)
{
$this->_renderMode = $mask;
return $this;
}
/**
* Return bitmask of the current Render Mode
* @return integer
*/
public function getRenderMode()
{
return $this->_renderMode;
}
/**
* String representation of jQuery environment
*
* @return string
*/
public function __toString()
{
if (!$this->isEnabled()) {
return '';
}
$this->_isXhtml = $this->view->doctype()->isXhtml();
$html = $this->_renderStylesheets() . PHP_EOL
. $this->_renderScriptTags() . PHP_EOL
. $this->_renderExtras();
return $html;
}
/**
* Render jQuery stylesheets
*
* @return string
*/
protected function _renderStylesheets()
{
if( ($this->getRenderMode() & ZendX_JQuery::RENDER_STYLESHEETS) == 0) {
return '';
}
foreach ($this->getStylesheets() as $stylesheet) {
$stylesheets[] = $stylesheet;
}
if (empty($stylesheets)) {
return '';
}
array_reverse($stylesheets);
$style = "";
foreach($stylesheets AS $stylesheet) {
if ($this->view instanceof Zend_View_Abstract) {
$closingBracket = ($this->view->doctype()->isXhtml()) ? ' />' : '>';
} else {
$closingBracket = ' />';
}
$style .= '<link rel="stylesheet" href="'.$stylesheet.'" '.
'type="text/css" media="screen"' . $closingBracket . PHP_EOL;
}
return $style;
}
/**
* Renders all javascript file related stuff of the jQuery enviroment.
*
* @return string
*/
protected function _renderScriptTags()
{
$scriptTags = '';
if( ($this->getRenderMode() & ZendX_JQuery::RENDER_LIBRARY) > 0) {
$source = $this->_getJQueryLibraryPath();
$scriptTags .= '<script type="text/javascript" src="' . $source . '"></script>'.PHP_EOL;
if($this->uiIsEnabled()) {
$uiPath = $this->_getJQueryUiLibraryPath();
$scriptTags .= '<script type="text/javascript" src="'.$uiPath.'"></script>'.PHP_EOL;
}
if(ZendX_JQuery_View_Helper_JQuery::getNoConflictMode() == true) {
$scriptTags .= '<script type="text/javascript">var $j = jQuery.noConflict();</script>'.PHP_EOL;
}
}
if( ($this->getRenderMode() & ZendX_JQuery::RENDER_SOURCES) > 0) {
foreach($this->getJavascriptFiles() AS $javascriptFile) {
$scriptTags .= '<script type="text/javascript" src="' . $javascriptFile . '"></script>'.PHP_EOL;
}
}
return $scriptTags;
}
/**
* Renders all javascript code related stuff of the jQuery enviroment.
*
* @return string
*/
protected function _renderExtras()
{
$onLoadActions = array();
if( ($this->getRenderMode() & ZendX_JQuery::RENDER_JQUERY_ON_LOAD) > 0) {
foreach ($this->getOnLoadActions() as $callback) {
$onLoadActions[] = $callback;
}
}
$javascript = '';
if( ($this->getRenderMode() & ZendX_JQuery::RENDER_JAVASCRIPT) > 0) {
$javascript = implode("\n ", $this->getJavascript());
}
$content = '';
if (!empty($onLoadActions)) {
if(ZendX_JQuery_View_Helper_JQuery::getNoConflictMode() == true) {
$content .= '$j(document).ready(function() {'."\n ";
} else {
$content .= '$(document).ready(function() {'."\n ";
}
$content .= implode("\n ", $onLoadActions) . "\n";
$content .= '});'."\n";
}
if (!empty($javascript)) {
$content .= $javascript . "\n";
}
if (preg_match('/^\s*$/s', $content)) {
return '';
}
$html = '<script type="text/javascript">' . PHP_EOL
. (($this->_isXhtml) ? '//<![CDATA[' : '//<!--') . PHP_EOL
. $content
. (($this->_isXhtml) ? '//]]>' : '//-->') . PHP_EOL
. PHP_EOL . '</script>';
return $html;
}
/**
* @return string
*/
protected function _getJQueryLibraryBaseCdnUri()
{
if($this->_loadSslCdnPath == true) {
$baseUri = ZendX_JQuery::CDN_BASE_GOOGLE_SSL;
} else {
$baseUri = ZendX_JQuery::CDN_BASE_GOOGLE;
}
return $baseUri;
}
/**
* @return string
*/
protected function _getJQueryUiLibraryBaseCdnUri()
{
if($this->_loadSslCdnPath == true) {
$baseUri = ZendX_JQuery::CDN_BASEUI_GOOGLE_SSL;
} else {
$baseUri = ZendX_JQuery::CDN_BASEUI_GOOGLE;
}
return $baseUri;
}
/**
* Internal function that constructs the include path of the jQuery library.
*
* @return string
*/
protected function _getJQueryLibraryPath()
{
if($this->_jqueryLibraryPath != null) {
$source = $this->_jqueryLibraryPath;
} else {
$baseUri = $this->_getJQueryLibraryBaseCdnUri();
$source = $baseUri .
ZendX_JQuery::CDN_SUBFOLDER_JQUERY .
$this->getCdnVersion() .
ZendX_JQuery::CDN_JQUERY_PATH_GOOGLE;
}
return $source;
}
/**
* @return string
*/
protected function _getJQueryUiLibraryPath()
{
if($this->useUiCdn()) {
$baseUri = $this->_getJQueryLibraryBaseCdnUri();
$uiPath = $baseUri.
ZendX_JQuery::CDN_SUBFOLDER_JQUERYUI .
$this->getUiCdnVersion() .
"/jquery-ui.min.js";
} else if($this->useUiLocal()) {
$uiPath = $this->getUiPath();
}
return $uiPath;
}
} home/karenpetzb/library/Zend/Dojo/View/Helper/Dojo/Container.php 0000604 00000061111 15071602445 0020557 0 ustar 00 <?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @category Zend
* @package Zend_Dojo
* @subpackage View
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
* @version $Id: Container.php 11991 2008-10-16 15:12:15Z matthew $
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
/** Zend_Dojo */
require_once 'Zend/Dojo.php';
/**
* Container for Dojo View Helper
*
*
* @package Zend_Dojo
* @subpackage View
* @copyright Copyright (C) 2008 - Present, Zend Technologies, Inc.
* @license New BSD {@link http://framework.zend.com/license/new-bsd}
*/
class Zend_Dojo_View_Helper_Dojo_Container
{
/**
* @var Zend_View_Interface
*/
public $view;
/**
* addOnLoad capture lock
* @var bool
*/
protected $_captureLock = false;
/**
* addOnLoad object on which to apply lambda
* @var string
*/
protected $_captureObj;
/**
* Base CDN url to utilize
* @var string
*/
protected $_cdnBase = Zend_Dojo::CDN_BASE_GOOGLE;
/**
* Path segment following version string of CDN path
* @var string
*/
protected $_cdnDojoPath = Zend_Dojo::CDN_DOJO_PATH_GOOGLE;
/**
* Dojo version to use from CDN
* @var string
*/
protected $_cdnVersion = '1.2.0';
/**
* Has the dijit loader been registered?
* @var bool
*/
protected $_dijitLoaderRegistered = false;
/**
* Registered programmatic dijits
* @var array
*/
protected $_dijits = array();
/**
* Dojo configuration
* @var array
*/
protected $_djConfig = array();
/**
* Whether or not dojo is enabled
* @var bool
*/
protected $_enabled = false;
/**
* Are we rendering as XHTML?
* @var bool
*/
protected $_isXhtml = false;
/**
* Arbitrary javascript to include in dojo script
* @var array
*/
protected $_javascriptStatements = array();
/**
* Dojo layers (custom builds) to use
* @var array
*/
protected $_layers = array();
/**
* Relative path to dojo
* @var string
*/
protected $_localPath = null;
/**
* Root of dojo where all dojo files are installed
* @var string
*/
protected $_localRelativePath = null;
/**
* Modules to require
* @var array
*/
protected $_modules = array();
/**
* Registered module paths
* @var array
*/
protected $_modulePaths = array();
/**
* Actions to perform on window load
* @var array
*/
protected $_onLoadActions = array();
/**
* Register the Dojo stylesheet?
* @var bool
*/
protected $_registerDojoStylesheet = false;
/**
* Style sheet modules to load
* @var array
*/
protected $_stylesheetModules = array();
/**
* Local stylesheets
* @var array
*/
protected $_stylesheets = array();
/**
* Set view object
*
* @param Zend_Dojo_View_Interface $view
* @return void
*/
public function setView(Zend_View_Interface $view)
{
$this->view = $view;
}
/**
* Enable dojo
*
* @return Zend_Dojo_View_Helper_Dojo_Container
*/
public function enable()
{
$this->_enabled = true;
return $this;
}
/**
* Disable dojo
*
* @return Zend_Dojo_View_Helper_Dojo_Container
*/
public function disable()
{
$this->_enabled = false;
return $this;
}
/**
* Is dojo enabled?
*
* @return bool
*/
public function isEnabled()
{
return $this->_enabled;
}
/**
* Specify a module to require
*
* @param string $module
* @return Zend_Dojo_View_Helper_Dojo_Container
*/
public function requireModule($module)
{
if (!is_string($module) && !is_array($module)) {
require_once 'Zend/Dojo/View/Exception.php';
throw new Zend_Dojo_View_Exception('Invalid module name specified; must be a string or an array of strings');
}
$module = (array) $module;
foreach ($module as $mod) {
if (!preg_match('/^[a-z][a-z0-9._-]+$/i', $mod)) {
require_once 'Zend/Dojo/View/Exception.php';
throw new Zend_Dojo_View_Exception(sprintf('Module name specified, "%s", contains invalid characters', (string) $mod));
}
if (!in_array($mod, $this->_modules)) {
$this->_modules[] = $mod;
}
}
return $this;
}
/**
* Retrieve list of modules to require
*
* @return array
*/
public function getModules()
{
return $this->_modules;
}
/**
* Register a module path
*
* @param string $path
* @return Zend_Dojo_View_Helper_Dojo_Container
*/
public function registerModulePath($module, $path)
{
$path = (string) $path;
if (!in_array($module, $this->_modulePaths)) {
$this->_modulePaths[$module] = $path;
}
return $this;
}
/**
* List registered module paths
*
* @return array
*/
public function getModulePaths()
{
return $this->_modulePaths;
}
/**
* Add layer (custom build) path
*
* @param string $path
* @return Zend_Dojo_View_Helper_Dojo_Container
*/
public function addLayer($path)
{
$path = (string) $path;
if (!in_array($path, $this->_layers)) {
$this->_layers[] = $path;
}
return $this;
}
/**
* Get registered layers
*
* @return array
*/
public function getLayers()
{
return $this->_layers;
}
/**
* Remove a registered layer
*
* @param string $path
* @return Zend_Dojo_View_Helper_Dojo_Container
*/
public function removeLayer($path)
{
$path = (string) $path;
$layers = array_flip($this->_layers);
if (array_key_exists($path, $layers)) {
unset($layers[$path]);
$this->_layers = array_keys($layers);
}
return $this;
}
/**
* Clear all registered layers
*
* @return Zend_Dojo_View_Helper_Dojo_Container
*/
public function clearLayers()
{
$this->_layers = array();
return $this;
}
/**
* Set CDN base path
*
* @param string $url
* @return Zend_Dojo_View_Helper_Dojo_Container
*/
public function setCdnBase($url)
{
$this->_cdnBase = (string) $url;
return $this;
}
/**
* Return CDN base URL
*
* @return string
*/
public function getCdnBase()
{
return $this->_cdnBase;
}
/**
* Use CDN, using version specified
*
* @param string $version
* @return Zend_Dojo_View_Helper_Dojo_Container
*/
public function setCdnVersion($version = null)
{
$this->enable();
if (preg_match('/^[1-9]\.[0-9](\.[0-9])?$/', $version)) {
$this->_cdnVersion = $version;
}
return $this;
}
/**
* Get CDN version
*
* @return string
*/
public function getCdnVersion()
{
return $this->_cdnVersion;
}
/**
* Set CDN path to dojo (relative to CDN base + version)
*
* @param string $path
* @return Zend_Dojo_View_Helper_Dojo_Container
*/
public function setCdnDojoPath($path)
{
$this->_cdnDojoPath = (string) $path;
return $this;
}
/**
* Get CDN path to dojo (relative to CDN base + version)
*
* @return string
*/
public function getCdnDojoPath()
{
return $this->_cdnDojoPath;
}
/**
* Are we using the CDN?
*
* @return bool
*/
public function useCdn()
{
return !$this->useLocalPath();
}
/**
* Set path to local dojo
*
* @param string $path
* @return Zend_Dojo_View_Helper_Dojo_Container
*/
public function setLocalPath($path)
{
$this->enable();
$this->_localPath = (string) $path;
return $this;
}
/**
* Get local path to dojo
*
* @return string
*/
public function getLocalPath()
{
return $this->_localPath;
}
/**
* Are we using a local path?
*
* @return bool
*/
public function useLocalPath()
{
return (null === $this->_localPath) ? false : true;
}
/**
* Set Dojo configuration
*
* @param string $option
* @param mixed $value
* @return Zend_Dojo_View_Helper_Dojo_Container
*/
public function setDjConfig(array $config)
{
$this->_djConfig = $config;
return $this;
}
/**
* Set Dojo configuration option
*
* @param string $option
* @param mixed $value
* @return Zend_Dojo_View_Helper_Dojo_Container
*/
public function setDjConfigOption($option, $value)
{
$option = (string) $option;
$this->_djConfig[$option] = $value;
return $this;
}
/**
* Retrieve dojo configuration values
*
* @return array
*/
public function getDjConfig()
{
return $this->_djConfig;
}
/**
* Get dojo configuration value
*
* @param string $option
* @param mixed $default
* @return mixed
*/
public function getDjConfigOption($option, $default = null)
{
$option = (string) $option;
if (array_key_exists($option, $this->_djConfig)) {
return $this->_djConfig[$option];
}
return $default;
}
/**
* Add a stylesheet by module name
*
* @param string $module
* @return Zend_Dojo_View_Helper_Dojo_Container
*/
public function addStylesheetModule($module)
{
if (!preg_match('/^[a-z0-9]+\.[a-z0-9_-]+(\.[a-z0-9_-]+)*$/i', $module)) {
require_once 'Zend/Dojo/View/Exception.php';
throw new Zend_Dojo_View_Exception('Invalid stylesheet module specified');
}
if (in_array($module, $this->_stylesheetModules)) {
return $this;
}
$this->_stylesheetModules[] = $module;
return $this;
}
/**
* Get all stylesheet modules currently registered
*
* @return array
*/
public function getStylesheetModules()
{
return $this->_stylesheetModules;
}
/**
* Add a stylesheet
*
* @param string $path
* @return Zend_Dojo_View_Helper_Dojo_Container
*/
public function addStylesheet($path)
{
$path = (string) $path;
if (!in_array($path, $this->_stylesheets)) {
$this->_stylesheets[] = (string) $path;
}
return $this;
}
/**
* Register the dojo.css stylesheet?
*
* With no arguments, returns the status of the flag; with arguments, sets
* the flag and returns the object.
*
* @param null|bool $flag
* @return Zend_Dojo_View_Helper_Dojo_Container|bool
*/
public function registerDojoStylesheet($flag = null)
{
if (null === $flag) {
return $this->_registerDojoStylesheet;
}
$this->_registerDojoStylesheet = (bool) $flag;
return $this;
}
/**
* Retrieve registered stylesheets
*
* @return array
*/
public function getStylesheets()
{
return $this->_stylesheets;
}
/**
* Add a script to execute onLoad
*
* dojo.addOnLoad accepts:
* - function name
* - lambda
*
* @param string $callback Lambda
* @return Zend_Dojo_View_Helper_Dojo_Container
*/
public function addOnLoad($callback)
{
if (!in_array($callback, $this->_onLoadActions, true)) {
$this->_onLoadActions[] = $callback;
}
return $this;
}
/**
* Retrieve all registered onLoad actions
*
* @return array
*/
public function getOnLoadActions()
{
return $this->_onLoadActions;
}
/**
* Start capturing routines to run onLoad
*
* @return bool
*/
public function onLoadCaptureStart()
{
if ($this->_captureLock) {
require_once 'Zend/Dojo/View/Exception.php';
throw new Zend_Dojo_View_Exception('Cannot nest onLoad captures');
}
$this->_captureLock = true;
ob_start();
return;
}
/**
* Stop capturing routines to run onLoad
*
* @return bool
*/
public function onLoadCaptureEnd()
{
$data = ob_get_clean();
$this->_captureLock = false;
$this->addOnLoad($data);
return true;
}
/**
* Add a programmatic dijit
*
* @param string $id
* @param array $params
* @return Zend_Dojo_View_Helper_Dojo_Container
*/
public function addDijit($id, array $params)
{
if (array_key_exists($id, $this->_dijits)) {
require_once 'Zend/Dojo/View/Exception.php';
throw new Zend_Dojo_View_Exception(sprintf('Duplicate dijit with id "%s" already registered', $id));
}
$this->_dijits[$id] = array(
'id' => $id,
'params' => $params,
);
return $this;
}
/**
* Set a programmatic dijit (overwrites)
*
* @param string $id
* @param array $params
* @return Zend_Dojo_View_Helper_Dojo_Container
*/
public function setDijit($id, array $params)
{
$this->removeDijit($id);
return $this->addDijit($id, $params);
}
/**
* Add multiple dijits at once
*
* Expects an array of id => array $params pairs
*
* @param array $dijits
* @return Zend_Dojo_View_Helper_Dojo_Container
*/
public function addDijits(array $dijits)
{
foreach ($dijits as $id => $params) {
$this->addDijit($id, $params);
}
return $this;
}
/**
* Set multiple dijits at once (overwrites)
*
* Expects an array of id => array $params pairs
*
* @param array $dijits
* @return Zend_Dojo_View_Helper_Dojo_Container
*/
public function setDijits(array $dijits)
{
$this->clearDijits();
return $this->addDijits($dijits);
}
/**
* Is the given programmatic dijit already registered?
*
* @param string $id
* @return bool
*/
public function hasDijit($id)
{
return array_key_exists($id, $this->_dijits);
}
/**
* Retrieve a dijit by id
*
* @param string $id
* @return array|null
*/
public function getDijit($id)
{
if ($this->hasDijit($id)) {
return $this->_dijits[$id]['params'];
}
return null;
}
/**
* Retrieve all dijits
*
* Returns dijits as an array of assoc arrays
*
* @return array
*/
public function getDijits()
{
return array_values($this->_dijits);
}
/**
* Remove a programmatic dijit if it exists
*
* @param string $id
* @return Zend_Dojo_View_Helper_Dojo_Container
*/
public function removeDijit($id)
{
if (array_key_exists($id, $this->_dijits)) {
unset($this->_dijits[$id]);
}
return $this;
}
/**
* Clear all dijits
*
* @return Zend_Dojo_View_Helper_Dojo_Container
*/
public function clearDijits()
{
$this->_dijits = array();
return $this;
}
/**
* Render dijits as JSON structure
*
* @return string
*/
public function dijitsToJson()
{
require_once 'Zend/Json.php';
return Zend_Json::encode($this->getDijits());
}
/**
* Create dijit loader functionality
*
* @return void
*/
public function registerDijitLoader()
{
if (!$this->_dijitLoaderRegistered) {
$js =<<<EOJ
function() {
dojo.forEach(zendDijits, function(info) {
var n = dojo.byId(info.id);
if (null != n) {
dojo.attr(n, dojo.mixin({ id: info.id }, info.params));
}
});
dojo.parser.parse();
}
EOJ;
$this->requireModule('dojo.parser');
$this->addOnLoad($js);
$this->addJavascript('var zendDijits = ' . $this->dijitsToJson() . ';');
$this->_dijitLoaderRegistered = true;
}
}
/**
* Add arbitrary javascript to execute in dojo JS container
*
* @param string $js
* @return Zend_Dojo_View_Helper_Dojo_Container
*/
public function addJavascript($js)
{
$js = preg_replace('/^\s*(.*?)\s*$/s', '$1', $js);
if (!in_array(substr($js, -1), array(';', '}'))) {
$js .= ';';
}
if (in_array($js, $this->_javascriptStatements)) {
return $this;
}
$this->_javascriptStatements[] = $js;
return $this;
}
/**
* Return all registered javascript statements
*
* @return array
*/
public function getJavascript()
{
return $this->_javascriptStatements;
}
/**
* Clear arbitrary javascript stack
*
* @return Zend_Dojo_View_Helper_Dojo_Container
*/
public function clearJavascript()
{
$this->_javascriptStatements = array();
return $this;
}
/**
* Capture arbitrary javascript to include in dojo script
*
* @return void
*/
public function javascriptCaptureStart()
{
if ($this->_captureLock) {
require_once 'Zend/Dojo/View/Exception.php';
throw new Zend_Dojo_View_Exception('Cannot nest captures');
}
$this->_captureLock = true;
ob_start();
return;
}
/**
* Finish capturing arbitrary javascript to include in dojo script
*
* @return true
*/
public function javascriptCaptureEnd()
{
$data = ob_get_clean();
$this->_captureLock = false;
$this->addJavascript($data);
return true;
}
/**
* String representation of dojo environment
*
* @return string
*/
public function __toString()
{
if (!$this->isEnabled()) {
return '';
}
$this->_isXhtml = $this->view->doctype()->isXhtml();
if (Zend_Dojo_View_Helper_Dojo::useDeclarative()) {
if (null === $this->getDjConfigOption('parseOnLoad')) {
$this->setDjConfigOption('parseOnLoad', true);
}
}
if (!empty($this->_dijits)) {
$this->registerDijitLoader();
}
$html = $this->_renderStylesheets() . PHP_EOL
. $this->_renderDjConfig() . PHP_EOL
. $this->_renderDojoScriptTag() . PHP_EOL
. $this->_renderLayers() . PHP_EOL
. $this->_renderExtras();
return $html;
}
/**
* Retrieve local path to dojo resources for building relative paths
*
* @return string
*/
protected function _getLocalRelativePath()
{
if (null === $this->_localRelativePath) {
$localPath = $this->getLocalPath();
$localPath = preg_replace('|[/\\\\]dojo[/\\\\]dojo.js[^/\\\\]*$|i', '', $localPath);
$this->_localRelativePath = $localPath;
}
return $this->_localRelativePath;
}
/**
* Render dojo stylesheets
*
* @return string
*/
protected function _renderStylesheets()
{
if ($this->useCdn()) {
$base = $this->getCdnBase()
. $this->getCdnVersion();
} else {
$base = $this->_getLocalRelativePath();
}
$registeredStylesheets = $this->getStylesheetModules();
foreach ($registeredStylesheets as $stylesheet) {
$themeName = substr($stylesheet, strrpos($stylesheet, '.') + 1);
$stylesheet = str_replace('.', '/', $stylesheet);
$stylesheets[] = $base . '/' . $stylesheet . '/' . $themeName . '.css';
}
foreach ($this->getStylesheets() as $stylesheet) {
$stylesheets[] = $stylesheet;
}
if ($this->_registerDojoStylesheet) {
$stylesheets[] = $base . '/dojo/resources/dojo.css';
}
if (empty($stylesheets)) {
return '';
}
array_reverse($stylesheets);
$style = '<style type="text/css">' . PHP_EOL
. (($this->_isXhtml) ? '<!--' : '<!--') . PHP_EOL;
foreach ($stylesheets as $stylesheet) {
$style .= ' @import "' . $stylesheet . '";' . PHP_EOL;
}
$style .= (($this->_isXhtml) ? '-->' : '-->') . PHP_EOL
. '</style>';
return $style;
}
/**
* Render DjConfig values
*
* @return string
*/
protected function _renderDjConfig()
{
$djConfigValues = $this->getDjConfig();
if (empty($djConfigValues)) {
return '';
}
require_once 'Zend/Json.php';
$scriptTag = '<script type="text/javascript">' . PHP_EOL
. (($this->_isXhtml) ? '//<![CDATA[' : '//<!--') . PHP_EOL
. ' var djConfig = ' . Zend_Json::encode($djConfigValues) . ';' . PHP_EOL
. (($this->_isXhtml) ? '//]]>' : '//-->') . PHP_EOL
. '</script>';
return $scriptTag;
}
/**
* Render dojo script tag
*
* Renders Dojo script tag by utilizing either local path provided or the
* CDN. If any djConfig values were set, they will be serialized and passed
* with that attribute.
*
* @return string
*/
protected function _renderDojoScriptTag()
{
if ($this->useCdn()) {
$source = $this->getCdnBase()
. $this->getCdnVersion()
. $this->getCdnDojoPath();
} else {
$source = $this->getLocalPath();
}
$scriptTag = '<script type="text/javascript" src="' . $source . '"></script>';
return $scriptTag;
}
/**
* Render layers (custom builds) as script tags
*
* @return string
*/
protected function _renderLayers()
{
$layers = $this->getLayers();
if (empty($layers)) {
return '';
}
$html = array();
foreach ($layers as $path) {
$html[] = sprintf(
'<script type="text/javascript" src="%s"></script>',
htmlentities($path, ENT_QUOTES)
);
}
return implode("\n", $html);
}
/**
* Render dojo module paths and requires
*
* @return string
*/
protected function _renderExtras()
{
$js = array();
$modulePaths = $this->getModulePaths();
if (!empty($modulePaths)) {
foreach ($modulePaths as $module => $path) {
$js[] = 'dojo.registerModulePath("' . $this->view->escape($module) . '", "' . $this->view->escape($path) . '");';
}
}
$modules = $this->getModules();
if (!empty($modules)) {
foreach ($modules as $module) {
$js[] = 'dojo.require("' . $this->view->escape($module) . '");';
}
}
$onLoadActions = array();
foreach ($this->getOnLoadActions() as $callback) {
$onLoadActions[] = 'dojo.addOnLoad(' . $callback . ');';
}
$javascript = implode("\n ", $this->getJavascript());
$content = '';
if (!empty($js)) {
$content .= implode("\n ", $js) . "\n";
}
if (!empty($onLoadActions)) {
$content .= implode("\n ", $onLoadActions) . "\n";
}
if (!empty($javascript)) {
$content .= $javascript . "\n";
}
if (preg_match('/^\s*$/s', $content)) {
return '';
}
$html = '<script type="text/javascript">' . PHP_EOL
. (($this->_isXhtml) ? '//<![CDATA[' : '//<!--') . PHP_EOL
. $content
. (($this->_isXhtml) ? '//]]>' : '//-->') . PHP_EOL
. PHP_EOL . '</script>';
return $html;
}
}