From eee5451c5c6dbf6da8c22330f4f88aaec5a454bf Mon Sep 17 00:00:00 2001 From: Fabio Bas Date: Tue, 23 Feb 2016 20:12:21 +0100 Subject: Better fix for 4e666b6a4df28721df5dd21d5aa698e14b3da7cc Split TJuiControlOptions in its own file --- .../Web/UI/JuiControls/TJuiControlAdapter.php | 172 +------------------- .../Web/UI/JuiControls/TJuiControlOptions.php | 181 +++++++++++++++++++++ framework/Web/UI/TPage.php | 2 +- 3 files changed, 183 insertions(+), 172 deletions(-) create mode 100644 framework/Web/UI/JuiControls/TJuiControlOptions.php (limited to 'framework/Web/UI') diff --git a/framework/Web/UI/JuiControls/TJuiControlAdapter.php b/framework/Web/UI/JuiControls/TJuiControlAdapter.php index 39485c5d..7feac4ff 100644 --- a/framework/Web/UI/JuiControls/TJuiControlAdapter.php +++ b/framework/Web/UI/JuiControls/TJuiControlAdapter.php @@ -10,6 +10,7 @@ */ Prado::using('System.Web.UI.ActiveControls.TActiveControlAdapter'); +Prado::using('System.Web.UI.JuiControls.TJuiControlOptions'); /** * TJuiControlAdapter class @@ -100,177 +101,6 @@ class TJuiControlAdapter extends TActiveControlAdapter } -/** - * IJuiOptions interface - * - * IJuiOptions is the interface that must be implemented by controls using - * {@link TJuiControlOptions}. - * - * @author Fabio Bas - * @package System.Web.UI.JuiControls - * @since 3.3 - */ -interface IJuiOptions -{ - public function getWidget(); - public function getWidgetID(); - public function getOptions(); - public function getValidOptions(); - public function getValidEvents(); -} - -/** - * TJuiControlOptions interface - * - * TJuiControlOptions is an helper class that can collect a list of options - * for a control. The control must implement {@link IJuiOptions}. - * The options are validated againg an array of valid options provided by the control itself. - * Since component properties are case insensitive, the array of valid options is used - * to ensure the option name has the correct case. - * The options array can then get retrieved using {@link toArray} and applied to the jQuery-ui widget. - * In addition to the options, this class will render the needed javascript to raise a callback - * for any event for which an handler is defined in the control. - * - * @author Fabio Bas - * @package System.Web.UI.JuiControls - * @since 3.3 - */ -class TJuiControlOptions -{ - /** - * @var TMap map of javascript options. - */ - private $_options; - /** - * @var TControl parent control. - */ - private $_control; - - /** - * Constructor. Set the parent control owning these options. - * @param TControl parent control - */ - public function __construct($control) - { - $this->setControl($control); - } - - /** - * Sets the parent control. - * @param TControl $control - * @throws THttpException - */ - public function setControl($control) - { - if(!$control instanceof IJuiOptions) - throw new THttpException(500,'juioptions_control_invalid',$control->ID); - $this->_control=$control; - } - - /** - * Sets a named options with a value. Options are used to store and retrive - * named values for the javascript control. - * @param string option name. - * @param mixed option value. - * @throws THttpException - */ - public function __set($name,$value) - { - if($this->_options===null) - $this->_options=array(); - - foreach($this->_control->getValidOptions() as $option) - { - if(0 == strcasecmp($name, $option)) - { - $low = strtolower($value); - if($low === 'null') - { - $this->_options[$option] = null; - } elseif($low === 'true') { - $this->_options[$option] = true; - } elseif($low === 'false') { - $this->_options[$option] = false; - } elseif(is_numeric($value)) { - // trick to get float or integer automatically when needed - $this->_options[$option] = $value + 0; - } elseif(substr($low,0,8)=='function') { - $this->_options[$option] = new TJavaScriptLiteral($value); - } else { - $this->_options[$option] = $value; - } - return; - } - } - - throw new THttpException(500,'juioptions_option_invalid',$this->_control->ID, $name); - } - - /** - * Gets an option named value. Options are used to store and retrive - * named values for the base active controls. - * @param string option name. - * @return mixed options value or null if not set. - */ - public function __get($name) - { - if($this->_options===null) - $this->_options=array(); - - foreach($this->_control->getValidOptions() as $option) - { - if(0 == strcasecmp($name, $option) && isset($this->_options[$option])) - { - return $this->_options[$option]; - } - } - - return null; - } - - /** - * Only serialize the options itself, not the corresponding parent control. - * @return mixed array with the names of all variables of that object that should be serialized. - */ - public function __sleep() { - return array('_options'); - } - - /** - * @return Array of active control options - */ - public function toArray() - { - $ret= ($this->_options===null) ? array() : $this->_options; - - foreach($this->_control->getValidEvents() as $event) - if($this->_control->hasEventHandler('on'.$event)) - $ret[$event]=new TJavaScriptLiteral("function( event, ui ) { Prado.JuiCallback(".TJavascript::encode($this->_control->getUniqueID()).", ".TJavascript::encode($event).", event, ui, this); }"); - - return $ret; - } - - /** - * Raise the specific callback event handler of the target control. - * @param mixed callback parameters - */ - public function raiseCallbackEvent($param) - { - $callbackParam=$param->CallbackParameter; - if(isset($callbackParam->event)) - { - $eventName = 'On'.ucfirst($callbackParam->event); - if($this->_control->hasEventHandler($eventName)) - { - $this->_control->$eventName( new TJuiEventParameter( - $this->_control->getResponse(), - isset($callbackParam->ui) ? $callbackParam->ui : null) - ); - } - } - } -} - /** * TJuiEventParameter class * diff --git a/framework/Web/UI/JuiControls/TJuiControlOptions.php b/framework/Web/UI/JuiControls/TJuiControlOptions.php new file mode 100644 index 00000000..64cf7102 --- /dev/null +++ b/framework/Web/UI/JuiControls/TJuiControlOptions.php @@ -0,0 +1,181 @@ + + * @link https://github.com/pradosoft/prado + * @copyright Copyright © 2013-2015 PradoSoft + * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT + * @package System.Web.UI.JuiControls + */ + +/** + * IJuiOptions interface + * + * IJuiOptions is the interface that must be implemented by controls using + * {@link TJuiControlOptions}. + * + * @author Fabio Bas + * @package System.Web.UI.JuiControls + * @since 3.3 + */ +interface IJuiOptions +{ + public function getWidget(); + public function getWidgetID(); + public function getOptions(); + public function getValidOptions(); + public function getValidEvents(); +} + +/** + * TJuiControlOptions interface + * + * TJuiControlOptions is an helper class that can collect a list of options + * for a control. The control must implement {@link IJuiOptions}. + * The options are validated againg an array of valid options provided by the control itself. + * Since component properties are case insensitive, the array of valid options is used + * to ensure the option name has the correct case. + * The options array can then get retrieved using {@link toArray} and applied to the jQuery-ui widget. + * In addition to the options, this class will render the needed javascript to raise a callback + * for any event for which an handler is defined in the control. + * + * @author Fabio Bas + * @package System.Web.UI.JuiControls + * @since 3.3 + */ +class TJuiControlOptions +{ + /** + * @var TMap map of javascript options. + */ + private $_options; + /** + * @var TControl parent control. + */ + private $_control; + + /** + * Constructor. Set the parent control owning these options. + * @param TControl parent control + */ + public function __construct($control) + { + $this->setControl($control); + } + + /** + * Sets the parent control. + * @param TControl $control + * @throws THttpException + */ + public function setControl($control) + { + if(!$control instanceof IJuiOptions) + throw new THttpException(500,'juioptions_control_invalid',$control->ID); + $this->_control=$control; + } + + /** + * Sets a named options with a value. Options are used to store and retrive + * named values for the javascript control. + * @param string option name. + * @param mixed option value. + * @throws THttpException + */ + public function __set($name,$value) + { + if($this->_options===null) + $this->_options=array(); + + foreach($this->_control->getValidOptions() as $option) + { + if(0 == strcasecmp($name, $option)) + { + $low = strtolower($value); + if($low === 'null') + { + $this->_options[$option] = null; + } elseif($low === 'true') { + $this->_options[$option] = true; + } elseif($low === 'false') { + $this->_options[$option] = false; + } elseif(is_numeric($value)) { + // trick to get float or integer automatically when needed + $this->_options[$option] = $value + 0; + } elseif(substr($low,0,8)=='function') { + $this->_options[$option] = new TJavaScriptLiteral($value); + } else { + $this->_options[$option] = $value; + } + return; + } + } + + throw new THttpException(500,'juioptions_option_invalid',$this->_control->ID, $name); + } + + /** + * Gets an option named value. Options are used to store and retrive + * named values for the base active controls. + * @param string option name. + * @return mixed options value or null if not set. + */ + public function __get($name) + { + if($this->_options===null) + $this->_options=array(); + + foreach($this->_control->getValidOptions() as $option) + { + if(0 == strcasecmp($name, $option) && isset($this->_options[$option])) + { + return $this->_options[$option]; + } + } + + return null; + } + + /** + * Only serialize the options itself, not the corresponding parent control. + * @return mixed array with the names of all variables of that object that should be serialized. + */ + public function __sleep() { + return array('_options'); + } + + /** + * @return Array of active control options + */ + public function toArray() + { + $ret= ($this->_options===null) ? array() : $this->_options; + + foreach($this->_control->getValidEvents() as $event) + if($this->_control->hasEventHandler('on'.$event)) + $ret[$event]=new TJavaScriptLiteral("function( event, ui ) { Prado.JuiCallback(".TJavascript::encode($this->_control->getUniqueID()).", ".TJavascript::encode($event).", event, ui, this); }"); + + return $ret; + } + + /** + * Raise the specific callback event handler of the target control. + * @param mixed callback parameters + */ + public function raiseCallbackEvent($param) + { + $callbackParam=$param->CallbackParameter; + if(isset($callbackParam->event)) + { + $eventName = 'On'.ucfirst($callbackParam->event); + if($this->_control->hasEventHandler($eventName)) + { + $this->_control->$eventName( new TJuiEventParameter( + $this->_control->getResponse(), + isset($callbackParam->ui) ? $callbackParam->ui : null) + ); + } + } + } +} \ No newline at end of file diff --git a/framework/Web/UI/TPage.php b/framework/Web/UI/TPage.php index 50640078..f1ae5917 100644 --- a/framework/Web/UI/TPage.php +++ b/framework/Web/UI/TPage.php @@ -299,7 +299,7 @@ class TPage extends TTemplateControl protected function processCallbackRequest($writer) { Prado::using('System.Web.UI.ActiveControls.TActivePageAdapter'); - Prado::using('System.Web.UI.JuiControls.TJuiControlAdapter'); + Prado::using('System.Web.UI.JuiControls.TJuiControlOptions'); $this->setAdapter(new TActivePageAdapter($this)); -- cgit v1.2.3