summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--framework/TComponent.php2
-rw-r--r--framework/Web/Javascripts/TJavaScript.php42
-rw-r--r--framework/Web/UI/ActiveControls/TAutoComplete.php2
-rwxr-xr-xframework/Web/UI/ActiveControls/TDropContainer.php2
-rw-r--r--framework/Web/UI/TClientScriptManager.php4
-rw-r--r--framework/Web/UI/TTemplateManager.php17
-rw-r--r--framework/Web/UI/WebControls/TAccordion.php4
-rw-r--r--framework/Web/UI/WebControls/TDatePicker.php6
-rw-r--r--framework/Web/UI/WebControls/TSlider.php8
-rw-r--r--framework/Web/UI/WebControls/TTabPanel.php8
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;
}