diff options
Diffstat (limited to 'framework')
| -rw-r--r-- | framework/TComponent.php | 2 | ||||
| -rw-r--r-- | framework/Web/Javascripts/TJavaScript.php | 42 | ||||
| -rw-r--r-- | framework/Web/UI/ActiveControls/TAutoComplete.php | 2 | ||||
| -rwxr-xr-x | framework/Web/UI/ActiveControls/TDropContainer.php | 2 | ||||
| -rw-r--r-- | framework/Web/UI/TClientScriptManager.php | 4 | ||||
| -rw-r--r-- | framework/Web/UI/TTemplateManager.php | 17 | ||||
| -rw-r--r-- | framework/Web/UI/WebControls/TAccordion.php | 4 | ||||
| -rw-r--r-- | framework/Web/UI/WebControls/TDatePicker.php | 6 | ||||
| -rw-r--r-- | framework/Web/UI/WebControls/TSlider.php | 8 | ||||
| -rw-r--r-- | framework/Web/UI/WebControls/TTabPanel.php | 8 | 
10 files changed, 55 insertions, 40 deletions
diff --git a/framework/TComponent.php b/framework/TComponent.php index dbcf4a60..dcc1064c 100644 --- a/framework/TComponent.php +++ b/framework/TComponent.php @@ -590,6 +590,8 @@ class TPropertyValue  	 */  	public static function ensureString($value)  	{ +		if (TJavaScript::isJsLiteral($value)) +			return $value;  		if (is_bool($value))  			return $value?'true':'false';  		else diff --git a/framework/Web/Javascripts/TJavaScript.php b/framework/Web/Javascripts/TJavaScript.php index ad120771..9a152a32 100644 --- a/framework/Web/Javascripts/TJavaScript.php +++ b/framework/Web/Javascripts/TJavaScript.php @@ -85,21 +85,37 @@ class TJavaScript  	 * @return Marks a string as a javascript function. Once marke, the string is considered as a
  	 * raw javascript function that is not supposed to be encoded by {@link encode}
  	 */
 -	public static function quoteFunction($js)
 +	public static function quoteJsLiteral($js)
  	{
 -		if($js instanceof TJavaScriptFunction)
 +		if($js instanceof TJavaScriptLiteral)
  			return $js;
  		else
 -			return new TJavaScriptFunction($js);
 +			return new TJavaScriptLiteral($js);
 +	}
 +
 +	/**
 +	 * Deprecated, use {@link quoteJsLiteral} instead
 +	 */
 +	public static function quoteFunction($js)
 +	{
 +		return self::quoteJsLiteral($js);
  	}
  	/**
  	 * @return boolean true if the parameter is marked as a javascript function, i.e. if it's considered as a
  	 * raw javascript function that is not supposed to be encoded by {@link encode}
  	 */
 +	public static function isJsLiteral($js)
 +	{
 +		return ($js instanceof TJavaScriptLiteral);
 +	}
 +
 +	/**
 +	 * Deprecated, use {@link isJsLiteral} instead
 +	 */
  	public static function isFunction($js)
  	{
 -		return ($js instanceof TJavaScriptFunction);
 +		return self::isJsLiteral($js);
  	}
  	/**
 @@ -117,9 +133,6 @@ class TJavaScript  	 * For higher complexity data structures use {@link jsonEncode} and {@link jsonDecode}
  	 * to serialize and unserialize.
  	 *
 -	 * Note: strings begining with <tt>javascript:</tt> will be considered as
 -	 * raw javascript code and no encoding of that string will be enforced.
 -	 *
  	 * @param mixed PHP variable to be encoded
  	 * @param boolean whether the output is a map or a list.
  	 * @since 3.1.5
 @@ -129,16 +142,7 @@ class TJavaScript  	public static function encode($value,$toMap=true,$encodeEmptyStrings=false)
  	{
  		if(is_string($value))
 -		{
 -			if(($n=strlen($value))>2)
 -			{
 -				$first=$value[0];
 -				$last=$value[$n-1];
 -				if(($first==='[' && $last===']') || ($first==='{' && $last==='}'))
 -					return $value;
 -			}
  			return self::quoteString($value);
 -		}
  		else if(is_bool($value))
  			return $value?'true':'false';
  		else if(is_array($value))
 @@ -193,7 +197,7 @@ class TJavaScript  			}
  		}
  		else if(is_object($value))
 -			if ($value instanceof TJavaScriptFunction)
 +			if ($value instanceof TJavaScriptLiteral)
  				return preg_replace('/^\s*javascript:/', '', $value);
  			else
  				return self::encode(get_object_vars($value),$toMap);
 @@ -276,11 +280,11 @@ class TJavaScript  }
  /**
 - * TJavaScriptFunction class that encloses string literals that are not 
 + * TJavaScriptLiteral class that encloses string literals that are not 
   * supposed to be escaped by TJavaScript::encode()
   *
   */
 -class TJavaScriptFunction
 +class TJavaScriptLiteral
  {
  	private $_s;
 diff --git a/framework/Web/UI/ActiveControls/TAutoComplete.php b/framework/Web/UI/ActiveControls/TAutoComplete.php index cc63deae..2c160578 100644 --- a/framework/Web/UI/ActiveControls/TAutoComplete.php +++ b/framework/Web/UI/ActiveControls/TAutoComplete.php @@ -328,7 +328,7 @@ class TAutoComplete extends TActiveTextBox implements INamingContainer  		{
  			$string = strtr($string,array('\t'=>"\t",'\n'=>"\n",'\r'=>"\r"));
  			$token = preg_split('//', $string, -1, PREG_SPLIT_NO_EMPTY);
 -			$options['tokens'] = TJavaScript::encode($token,false);
 +			$options['tokens'] = $token;
  		}
  		if($this->getAutoPostBack())
  		{
 diff --git a/framework/Web/UI/ActiveControls/TDropContainer.php b/framework/Web/UI/ActiveControls/TDropContainer.php index e6933147..daa8469b 100755 --- a/framework/Web/UI/ActiveControls/TDropContainer.php +++ b/framework/Web/UI/ActiveControls/TDropContainer.php @@ -157,7 +157,7 @@ class TDropContainer extends TPanel implements IActiveControl, ICallbackEventHan  		$options['ID'] = $this->getClientID();  		$options['EventTarget'] = $this->getUniqueID(); -		$options['accept'] = TJavascript::encode($this->getAcceptCssClass()); +		$options['accept'] = $this->getAcceptCssClass();  		$options['hoverclass'] = $this->getHoverCssClass();  		return $options;  	} diff --git a/framework/Web/UI/TClientScriptManager.php b/framework/Web/UI/TClientScriptManager.php index 1804c9d1..3f1664ac 100644 --- a/framework/Web/UI/TClientScriptManager.php +++ b/framework/Web/UI/TClientScriptManager.php @@ -800,8 +800,8 @@ abstract class TClientSideOptions extends TComponent  	 */  	protected function setFunction($name, $code)  	{ -		if(!TJavaScript::isFunction($code)) -			$code = TJavaScript::quoteFunction($this->ensureFunction($code)); +		if(!TJavaScript::isJsLiteral($code)) +			$code = TJavaScript::quoteJsLiteral($this->ensureFunction($code));  		$this->setOption($name, $code);  	} diff --git a/framework/Web/UI/TTemplateManager.php b/framework/Web/UI/TTemplateManager.php index a5e635da..566f6876 100644 --- a/framework/Web/UI/TTemplateManager.php +++ b/framework/Web/UI/TTemplateManager.php @@ -423,10 +423,17 @@ class TTemplate extends TApplicationComponent implements ITemplate  	{
  		if(strncasecmp($name,'on',2)===0)		// is an event
  			$this->configureEvent($control,$name,$value,$control);
 -		else if(($pos=strrpos($name,'.'))===false)	// is a simple property or custom attribute
 -			$this->configureProperty($control,$name,$value);
 -		else	// is a subproperty
 -			$this->configureSubProperty($control,$name,$value);
 +		else {
 +			if(strncasecmp($name,'js',2)===0)
 +			{
 +				$name=substr($name,2);
 +				$value=TJavaScript::quoteJsLiteral($value);
 +			}
 +			if(($pos=strrpos($name,'.'))===false)	// is a simple property or custom attribute
 +				$this->configureProperty($control,$name,$value);
 +			else	// is a subproperty
 +				$this->configureSubProperty($control,$name,$value);
 +		}
  	}
  	/**
 @@ -937,6 +944,8 @@ class TTemplate extends TApplicationComponent implements ITemplate  				}
  				else
  				{
 +					if(strncasecmp($name,'js',2)===0)
 +						$name=substr($name, 2);
  					// a simple property
  					if(!$class->hasMethod('set'.$name))
  					{
 diff --git a/framework/Web/UI/WebControls/TAccordion.php b/framework/Web/UI/WebControls/TAccordion.php index 60494617..4e1cd325 100644 --- a/framework/Web/UI/WebControls/TAccordion.php +++ b/framework/Web/UI/WebControls/TAccordion.php @@ -489,10 +489,10 @@ class TAccordion extends TWebControl implements IPostBackDataHandler  		{
  			if($views!='') 
  				$views.=', ';
 -			$views.= '"'.$view->getClientID().'":'.($view->getVisible() ? '1': '0' );
 +			$views.= TJavaScript::encode($view->getClientID()).':'.($view->getVisible() ? '1': '0' );
  		}
 -		$options['Views']='{'.$views.='}';
 +		$options['Views']=TJavaScript::quoteJsLiteral('{'.$views.='}');
  		$viewIDs=array();
  		return $options;
 diff --git a/framework/Web/UI/WebControls/TDatePicker.php b/framework/Web/UI/WebControls/TDatePicker.php index 6d2f1427..a0dee3d4 100644 --- a/framework/Web/UI/WebControls/TDatePicker.php +++ b/framework/Web/UI/WebControls/TDatePicker.php @@ -563,9 +563,9 @@ class TDatePicker extends TTextBox  			return array();
  		$date = $this->getLocalizedCalendarInfo();
 -		$options['MonthNames'] = TJavaScript::encode($date->getMonthNames(),false);
 -		$options['AbbreviatedMonthNames'] = TJavaScript::encode($date->getAbbreviatedMonthNames(),false);
 -		$options['ShortWeekDayNames'] = TJavaScript::encode($date->getAbbreviatedDayNames(),false);
 +		$options['MonthNames'] = $date->getMonthNames();
 +		$options['AbbreviatedMonthNames'] = $date->getAbbreviatedMonthNames();
 +		$options['ShortWeekDayNames'] = $date->getAbbreviatedDayNames();
  		return $options;
  	}
 diff --git a/framework/Web/UI/WebControls/TSlider.php b/framework/Web/UI/WebControls/TSlider.php index f453e3ac..5dc65d47 100644 --- a/framework/Web/UI/WebControls/TSlider.php +++ b/framework/Web/UI/WebControls/TSlider.php @@ -457,7 +457,7 @@ class TSlider extends TWebControl implements IPostBackDataHandler, IDataRenderer  		$options['axis'] = strtolower($this->getDirection());
  		$options['maximum'] = $maxValue;
  		$options['minimum'] = $minValue;
 -		$options['range'] = TJavascript::quoteFunction('$R('.$minValue.",".$maxValue.")");
 +		$options['range'] = TJavascript::quoteJsLiteral('$R('.$minValue.",".$maxValue.")");
  		$options['sliderValue'] = $this->getValue();
  		$options['disabled'] = !$this->getEnabled();
  		$values=$this->getValues();
 @@ -488,7 +488,7 @@ class TSlider extends TWebControl implements IPostBackDataHandler, IDataRenderer  			// Add max if it's not in the array because of step
  			if (!in_array($maxValue, $values)) $values[]=$maxValue;
  		}
 -		$options['values'] = TJavaScript::Encode($values,false);
 +		$options['values'] = $values;
  		if($this->_clientScript!==null)
  			$options = array_merge($options,$this->_clientScript->getOptions()->toArray());
  		return $options;
 @@ -520,7 +520,7 @@ class TSliderClientScript extends TClientSideOptions  	 */
  	public function setOnChange($javascript)
  	{
 -		$code=TJavascript::quoteFunction("function (value) { {$javascript} }");
 +		$code=TJavascript::quoteJsLiteral("function (value) { {$javascript} }");
  		$this->setFunction('onChange', $code);
  	}
 @@ -537,7 +537,7 @@ class TSliderClientScript extends TClientSideOptions  	 */
  	public function setOnSlide($javascript)
  	{
 -		$code=TJavascript::quoteFunction("function (value) { {$javascript} }");
 +		$code=TJavascript::quoteJsLiteral("function (value) { {$javascript} }");
  		$this->setFunction('onSlide', $code);
  	}
 diff --git a/framework/Web/UI/WebControls/TTabPanel.php b/framework/Web/UI/WebControls/TTabPanel.php index a1ddca39..558ead4e 100644 --- a/framework/Web/UI/WebControls/TTabPanel.php +++ b/framework/Web/UI/WebControls/TTabPanel.php @@ -443,11 +443,11 @@ class TTabPanel extends TWebControl implements IPostBackDataHandler  		$viewVis=array();
  		foreach($this->getViews() as $view)
  		{
 -			$viewIDs[]=$view->getClientID();
 -			$viewVis[]=$view->getVisible();
 +			$viewIDs[]=TJavaScript::encode($view->getClientID());
 +			$viewVis[]=TJavaScript::encode($view->getVisible());
  		}
 -		$options['Views']='[\''.implode('\',\'',$viewIDs).'\']';
 -		$options['ViewsVis']='[\''.implode('\',\'',$viewVis).'\']';
 +		$options['Views']=TJavaScript::quoteJsLiteral('['.implode(',',$viewIDs).']');
 +		$options['ViewsVis']=TJavaScript::quoteJsLiteral('['.implode(',',$viewVis).']');
  		return $options;
  	}
  | 
