From b7f95ce37ae577e95a81e64aa2aaf3e2e698109d Mon Sep 17 00:00:00 2001 From: xue <> Date: Sat, 5 Aug 2006 21:34:30 +0000 Subject: merge from 3.0 branch till 1329. --- .gitattributes | 9 ++++ HISTORY | 7 +++ buildscripts/classtree/build.php | 4 +- demos/quickstart/protected/controls/DocLink.php | 3 +- .../protected/pages/Advanced/Themes.page | 3 ++ .../Samples/TClientSideValidator/Home.page | 41 ++++++++++++++++ .../Controls/Samples/TClientSideValidator/Home.php | 23 +++++++++ .../protected/pages/Controls/Validation.page | 35 ++++++++++++++ demos/quickstart/protected/pages/Search.php | 10 ++-- framework/Exceptions/messages.txt | 3 +- framework/I18N/TGlobalization.php | 27 +++++++++-- framework/I18N/core/Gettext/MO.php | 1 + framework/I18N/core/Gettext/PO.php | 1 + framework/I18N/core/MessageSource_XLIFF.php | 7 ++- framework/I18N/core/MessageSource_gettext.php | 6 ++- framework/IO/TTarFileExtractor.php | 2 + framework/PradoBase.php | 2 +- framework/TApplication.php | 3 ++ framework/Util/TSimpleDateFormatter.php | 5 +- framework/Web/Javascripts/js/validator.js | 9 +++- framework/Web/Javascripts/prado/validation3.js | 14 +++++- framework/Web/TAssetManager.php | 3 ++ framework/Web/UI/TClientScriptManager.php | 34 +++++++++----- framework/Web/UI/TPage.php | 21 ++++++++- framework/Web/UI/WebControls/TBaseValidator.php | 4 ++ framework/Web/UI/WebControls/TDataGrid.php | 1 + framework/Web/UI/WebControls/TDataList.php | 2 +- .../Web/UI/WebControls/TDataTypeValidator.php | 3 ++ framework/Web/UI/WebControls/TDatePicker.php | 3 +- framework/Web/UI/WebControls/TOutputCache.php | 2 +- framework/Web/UI/WebControls/TPanelStyle.php | 2 +- framework/Web/UI/WebControls/TStyle.php | 33 +++++++++++-- framework/Web/UI/WebControls/TStyleSheet.php | 18 +++++++- framework/Web/UI/WebControls/TWizard.php | 10 ++-- framework/prado-cli.php | 4 -- .../features/protected/pages/FocusControl.page | 46 ++++++++++++++++++ .../features/protected/pages/FocusControl.php | 17 +++++++ .../tickets/protected/pages/Ticket274.page | 22 +++++++++ .../tickets/protected/pages/Ticket278.page | 42 +++++++++++++++++ .../tickets/protected/pages/Ticket278.php | 23 +++++++++ .../tickets/tests/Ticket274TestCase.php | 24 ++++++++++ .../tickets/tests/Ticket278TestCase.php | 54 ++++++++++++++++++++++ .../validators/tests/DataTypeValidatorTestCase.php | 2 +- 43 files changed, 535 insertions(+), 50 deletions(-) create mode 100644 demos/quickstart/protected/pages/Controls/Samples/TClientSideValidator/Home.page create mode 100644 demos/quickstart/protected/pages/Controls/Samples/TClientSideValidator/Home.php create mode 100644 tests/FunctionalTests/features/protected/pages/FocusControl.page create mode 100644 tests/FunctionalTests/features/protected/pages/FocusControl.php create mode 100644 tests/FunctionalTests/tickets/protected/pages/Ticket274.page create mode 100644 tests/FunctionalTests/tickets/protected/pages/Ticket278.page create mode 100644 tests/FunctionalTests/tickets/protected/pages/Ticket278.php create mode 100644 tests/FunctionalTests/tickets/tests/Ticket274TestCase.php create mode 100644 tests/FunctionalTests/tickets/tests/Ticket278TestCase.php diff --git a/.gitattributes b/.gitattributes index 140bf48d..61552a8d 100644 --- a/.gitattributes +++ b/.gitattributes @@ -861,6 +861,8 @@ demos/quickstart/protected/pages/Controls/Samples/TCheckBox/Home.page -text demos/quickstart/protected/pages/Controls/Samples/TCheckBox/Home.php -text demos/quickstart/protected/pages/Controls/Samples/TCheckBoxList/Home.page -text demos/quickstart/protected/pages/Controls/Samples/TCheckBoxList/Home.php -text +demos/quickstart/protected/pages/Controls/Samples/TClientSideValidator/Home.page -text +demos/quickstart/protected/pages/Controls/Samples/TClientSideValidator/Home.php -text demos/quickstart/protected/pages/Controls/Samples/TCompareValidator/Home.page -text demos/quickstart/protected/pages/Controls/Samples/TCompareValidator/Home.php -text demos/quickstart/protected/pages/Controls/Samples/TCustomValidator/Home.page -text @@ -1874,6 +1876,8 @@ tests/FunctionalTests/features/protected/pages/ActiveControls/config.xml -text tests/FunctionalTests/features/protected/pages/ColorPicker.page -text tests/FunctionalTests/features/protected/pages/FeatureList.page -text tests/FunctionalTests/features/protected/pages/FeatureList.php -text +tests/FunctionalTests/features/protected/pages/FocusControl.page -text +tests/FunctionalTests/features/protected/pages/FocusControl.php -text tests/FunctionalTests/features/protected/pages/I18N/BasicI18N.page -text tests/FunctionalTests/features/protected/pages/I18N/BasicI18N.php -text tests/FunctionalTests/features/protected/pages/I18N/Home.page -text @@ -1939,6 +1943,9 @@ tests/FunctionalTests/tickets/protected/pages/Ticket239.page -text tests/FunctionalTests/tickets/protected/pages/Ticket239.php -text tests/FunctionalTests/tickets/protected/pages/Ticket269.page -text tests/FunctionalTests/tickets/protected/pages/Ticket27.page -text +tests/FunctionalTests/tickets/protected/pages/Ticket274.page -text +tests/FunctionalTests/tickets/protected/pages/Ticket278.page -text +tests/FunctionalTests/tickets/protected/pages/Ticket278.php -text tests/FunctionalTests/tickets/protected/pages/Ticket28.page -text tests/FunctionalTests/tickets/protected/pages/Ticket28.php -text tests/FunctionalTests/tickets/protected/pages/Ticket284.page -text @@ -1965,6 +1972,8 @@ tests/FunctionalTests/tickets/tests/Ticket169TestCase.php -text tests/FunctionalTests/tickets/tests/Ticket191TestCase.php -text tests/FunctionalTests/tickets/tests/Ticket21TestCase.php -text tests/FunctionalTests/tickets/tests/Ticket239TestCase.php -text +tests/FunctionalTests/tickets/tests/Ticket274TestCase.php -text +tests/FunctionalTests/tickets/tests/Ticket278TestCase.php -text tests/FunctionalTests/tickets/tests/Ticket27TestCase.php -text tests/FunctionalTests/tickets/tests/Ticket284TestCase.php -text tests/FunctionalTests/tickets/tests/Ticket285TestCase.php -text diff --git a/HISTORY b/HISTORY index 43d8764b..38dc7d6e 100644 --- a/HISTORY +++ b/HISTORY @@ -14,8 +14,10 @@ Version 3.0.3 August 6, 2006 ============================ BUG: Ticket#264 - Typos in some exception throw statements (Knut) BUG: Ticket#268 - THttpResponse.redirect() may fail for some browsers (Qiang) +BUG: Ticket#271 - Page method setFocus doesn't work (Wei) BUG: Ticket#285 - NumberFormat Rounding Bug (Wei) BUG: Ticket#297 - THttpRequest::constructUrl() encoding bug about array GET parameters (Qiang) +BUG: Ticket#320 - Typo in calling TDataList::setSelectedItemIndex and a bug in inserting wizard steps (Qiang) BUG: TDataGrid may complain getting ItemType on a non-object if the grid is not data-bound (Qiang) BUG: TCheckBox.Value should be converted to string (Qiang) BUG: Ticket#302 - TDatePicker's bug with AutoPostBack set to "true" (Wei) @@ -31,9 +33,14 @@ ENH: Ticket#223 - Use TRequiredFieldValidator for TRadioButtons with GroupName p ENH: StringLength, multi-byte, check in TRangeValidator (Wei) ENH: Ticket#263 - TListBox and TDropDownList support optgroup now (Qiang) ENH: Ticket#277 - Added TControl.CustomData property (Qiang) +ENH: Ticket#278 - client-side validator enable/disable (conditional) (Wei) ENH: Ticket#287 - TControl::broadcastEvent() may raise events now (Qiang) ENH: Ticket#292 - Added THttpRequest::parseUrl() so that it is easier to be extended (Qiang) ENH: Ticket#309 - Added THttpRequest.UrlParamSeparator property (Qiang) +ENH: Ticket#313 - Added TTableStyle.BorderCollapse property (Qiang) +ENH: Ticket#316 - Added media type support to CSS files in a theme (Qiang) +ENH: Validating TDatePicker does not need to explictly specific the DateFormat in validators. (Wei) +ENH: TRequireFieldValidator can be used to validate a valid date (Wei). NEW: Added TStyleSheet (Wei) diff --git a/buildscripts/classtree/build.php b/buildscripts/classtree/build.php index d7f74828..c0b5ba35 100644 --- a/buildscripts/classtree/build.php +++ b/buildscripts/classtree/build.php @@ -6,9 +6,9 @@ require_once($frameworkPath.'/prado.php'); require_once($basePath.'/DWExtension.php'); $exclusions=array( - 'prado.php', +// 'prado.php', 'pradolite.php', - 'PradoBase.php', +// 'PradoBase.php', 'clientscripts.php', '.svn', '/I18N/core', diff --git a/demos/quickstart/protected/controls/DocLink.php b/demos/quickstart/protected/controls/DocLink.php index 74398efb..e8ca7dfa 100644 --- a/demos/quickstart/protected/controls/DocLink.php +++ b/demos/quickstart/protected/controls/DocLink.php @@ -22,7 +22,8 @@ class DocLink extends THyperLink { $classFile=array_pop($paths).'.html'; $this->setNavigateUrl(self::BASE_URL . '/' . implode('.',$paths) . '/' . $classFile); - $this->setText('API Manual'); + if($this->getText() === '') + $this->setText('API Manual'); } } } diff --git a/demos/quickstart/protected/pages/Advanced/Themes.page b/demos/quickstart/protected/pages/Advanced/Themes.page index 5ba0a121..07435928 100644 --- a/demos/quickstart/protected/pages/Advanced/Themes.page +++ b/demos/quickstart/protected/pages/Advanced/Themes.page @@ -28,6 +28,9 @@ This will apply the 'Blue' skin to the button. Note, the initial property values

To use the Javascript files and CSS files contained in a theme, a THead control must be placed on the page template. This is because the theme will register those files with the page and THead is the right place to load those files.

+

+It is possible to specify media types of CSS files contained in a theme. By default, a CSS file applies to all media types. If the CSS file is named like mystyle.print.css, it will be applied only to print media type. As another example, mystyle.screen.css applies to screen media only, and mystyle.css applies to all media types. +

Theme Storage

diff --git a/demos/quickstart/protected/pages/Controls/Samples/TClientSideValidator/Home.page b/demos/quickstart/protected/pages/Controls/Samples/TClientSideValidator/Home.page new file mode 100644 index 00000000..e96e7c12 --- /dev/null +++ b/demos/quickstart/protected/pages/Controls/Samples/TClientSideValidator/Home.page @@ -0,0 +1,41 @@ + +

Validator Toggle - Server and Client Side

+ + + +
+ +
+ + + + + + + Event.OnLoad(function() + { + Event.observe("<%= $this->check1->ClientID %>", "click", function(ev) + { + $("<%= $this->panel1->ClientID %>").toggle(); + }); + }); + + \ No newline at end of file diff --git a/demos/quickstart/protected/pages/Controls/Samples/TClientSideValidator/Home.php b/demos/quickstart/protected/pages/Controls/Samples/TClientSideValidator/Home.php new file mode 100644 index 00000000..c5440996 --- /dev/null +++ b/demos/quickstart/protected/pages/Controls/Samples/TClientSideValidator/Home.php @@ -0,0 +1,23 @@ +Enabled = $this->check1->Checked; + } + + function validate2_onPostValidate($sender, $param) + { + $sender->Enabled = true; + } + + function onPreRender($param) + { + parent::onPreRender($param); + $this->panel1->Style = + $this->check1->Checked ? "display:block" : "display:none"; + } +} + +?> \ No newline at end of file diff --git a/demos/quickstart/protected/pages/Controls/Validation.page b/demos/quickstart/protected/pages/Controls/Validation.page index 12836b8c..2241f346 100644 --- a/demos/quickstart/protected/pages/Controls/Validation.page +++ b/demos/quickstart/protected/pages/Controls/Validation.page @@ -151,4 +151,39 @@ The summary can be displayed as a list, a bulleted list, or a single paragraph b

+

Client and Server Side Conditional Validation

+

+ All validators contains the following events. +

    +
  • The OnValidate event is raise before the validator validation functions are called.
  • +
  • The OnSuccess event is raised after the validator has successfully validate the control.
  • +
  • The OnError event is raised after the validator fails validation.
  • +
+ The corresponding events for the client side is available as sub-properties + of the ClientSide property of the validator. +

+

The following example pop-up a message saying "hello" when the validator fails on the client-side. + +<com:TRequiredFieldValidator ... > + <prop:ClientSide.OnError> + alert("hello"); + </prop:ClientSide.OnError> +</com:TRequiredFieldValidator> + +The resulting client-side event callback function is of the following form. + +function onErrorHandler(validator, sender) +{ + alert("hello"); +} + +Where validator is the current client-side validator and sender +is the control that invoked the validator. +

+

Conditional Validation Example

+

+The following example show the use of client-side and server side validator events. The example +demonstrates conditional validation. + +

\ No newline at end of file diff --git a/demos/quickstart/protected/pages/Search.php b/demos/quickstart/protected/pages/Search.php index f1d07ffa..d2dfa7da 100644 --- a/demos/quickstart/protected/pages/Search.php +++ b/demos/quickstart/protected/pages/Search.php @@ -13,11 +13,11 @@ class Search extends TPage $hits_1 = $quickstart->find($text); $this->quickstart_results->setDataSource($hits_1); $this->quickstart_results->dataBind(); - + $this->emptyResult->setVisible(!count($hits_1)); } } - + public function highlightSearch($text) { $words = str_word_count($text, 1); @@ -33,7 +33,7 @@ class Search extends TPage break; } } - + $min = $where - 15 < 0 ? 0 : $where - 15; $max = $where + 15 > $t ? $t : $where + 15; $subtext = array_splice($words, $min, $max-$min); @@ -41,13 +41,13 @@ class Search extends TPage $suffix = $max == $t ? '' : '...'; return $prefix.implode(' ', $subtext).$suffix; } - + protected function containsKeys($word, $keys) { foreach($keys as $key) { if(is_int(strpos($word, $key))) - return true; + return true; } return false; } diff --git a/framework/Exceptions/messages.txt b/framework/Exceptions/messages.txt index 630f7b50..39d304be 100644 --- a/framework/Exceptions/messages.txt +++ b/framework/Exceptions/messages.txt @@ -323,7 +323,8 @@ databoundcontrol_datamember_invalid = databoundcontrol_datamember_invalid clientscript_invalid_file_position = Invalid file position '{1}' for TClientScript control '{0}', must be 'Head', 'Here' or 'Begin'. tdatepicker_autopostback_unsupported = '{0}' does not support AutoPostBack. - +globalization_cache_path_failed = Unable to create translation message cache path '{0}'. Make sure the parent directory exists and is writable by the Web process. +globalization_source_path_failed = Unable to create translation message path '{0}'. Make sure the parent directory exists and is writable by the Web process. callback_not_support_no_priority_state_update = Callback request does not support unprioritized pagestate update. callback_invalid_callback_options = '{1}' is not a valid TCallbackOptions control for Callback control '{0}'. callback_invalid_clientside_options = Callback ClientSide property must be either a string that is the ID of a TCallbackOptions control or an instance of TCallbackClientSideOptions.======= diff --git a/framework/I18N/TGlobalization.php b/framework/I18N/TGlobalization.php index aa545d21..1ea7ce2b 100644 --- a/framework/I18N/TGlobalization.php +++ b/framework/I18N/TGlobalization.php @@ -168,12 +168,33 @@ class TGlobalization extends TModule { if($config['type'] == 'XLIFF' || $config['type'] == 'gettext') { - $config['source'] = Prado::getPathOfNamespace($config['source']); - if($config['source']===null || !is_dir($config['source'])) - throw new TException("invalid source dir '{$config['source']}'"); + if($config['source']) + { + $config['source'] = Prado::getPathOfNamespace($config['source']); + if(!is_dir($config['source'])) + { + if(@mkdir($config['source'])===false) + throw new TConfigurationException('globalization_source_path_failed', + $config['source']); + chmod($config['source'], 0777); //make it deletable + } + } + else + { + throw new TConfigurationException("invalid source dir '{$config['source']}'"); + } } if($config['cache']) + { $config['cache'] = $this->getApplication()->getRunTimePath().'/i18n'; + if(!is_dir($config['cache'])) + { + if(@mkdir($config['cache'])===false) + throw new TConfigurationException('globalization_cache_path_failed', + $config['cache']); + chmod($config['cache'], 0777); //make it deletable + } + } $this->_translation = $config; } diff --git a/framework/I18N/core/Gettext/MO.php b/framework/I18N/core/Gettext/MO.php index 5ee0057f..9f2d5799 100644 --- a/framework/I18N/core/Gettext/MO.php +++ b/framework/I18N/core/Gettext/MO.php @@ -349,6 +349,7 @@ class TGettext_MO extends TGettext // done @flock($this->_handle, LOCK_UN); @fclose($this->_handle); + chmod($file,0777); return true; } } diff --git a/framework/I18N/core/Gettext/PO.php b/framework/I18N/core/Gettext/PO.php index 015747a0..3a5fda04 100644 --- a/framework/I18N/core/Gettext/PO.php +++ b/framework/I18N/core/Gettext/PO.php @@ -154,6 +154,7 @@ class TGettext_PO extends TGettext //done @flock($fh, LOCK_UN); @fclose($fh); + chmod($file,0777); return true; } } diff --git a/framework/I18N/core/MessageSource_XLIFF.php b/framework/I18N/core/MessageSource_XLIFF.php index 2194ca41..7f2f27c5 100644 --- a/framework/I18N/core/MessageSource_XLIFF.php +++ b/framework/I18N/core/MessageSource_XLIFF.php @@ -473,10 +473,15 @@ class MessageSource_XLIFF extends MessageSource $variant = array_shift($variants); $file = $this->getSource($variant); $dir = dirname($file); - if(!is_dir($dir)) @mkdir($dir); + if(!is_dir($dir)) + { + @mkdir($dir); + @chmod($dir,0777); + } if(!is_dir($dir)) throw new TException("Unable to create directory $dir"); file_put_contents($file, $this->getTemplate($catalogue)); + chmod($file, 0777); return array($variant, $file); } diff --git a/framework/I18N/core/MessageSource_gettext.php b/framework/I18N/core/MessageSource_gettext.php index 78fa5259..c92577d4 100644 --- a/framework/I18N/core/MessageSource_gettext.php +++ b/framework/I18N/core/MessageSource_gettext.php @@ -431,7 +431,11 @@ class MessageSource_gettext extends MessageSource $po_file = $this->getPOFile($mo_file); $dir = dirname($mo_file); - if(!is_dir($dir)) @mkdir($dir); + if(!is_dir($dir)) + { + @mkdir($dir); + @chmod($dir,0777); + } if(!is_dir($dir)) throw new TException("Unable to create directory $dir"); diff --git a/framework/IO/TTarFileExtractor.php b/framework/IO/TTarFileExtractor.php index 9f61026d..1bd245ca 100644 --- a/framework/IO/TTarFileExtractor.php +++ b/framework/IO/TTarFileExtractor.php @@ -460,6 +460,7 @@ class TTarFileExtractor .$v_header['filename'].'}'); return false; } + chmod($v_header['filename'], 0777); } } else { if (($v_dest_file = @fopen($v_header['filename'], "wb")) == 0) { @@ -549,6 +550,7 @@ class TTarFileExtractor $this->_error("Unable to create directory '$p_dir'"); return false; } + chmod($p_dir,0777); return true; } diff --git a/framework/PradoBase.php b/framework/PradoBase.php index 50e4ac82..4685ce83 100644 --- a/framework/PradoBase.php +++ b/framework/PradoBase.php @@ -516,7 +516,7 @@ class PradoBase */ public static function varDump($var,$depth=10,$highlight=false) { - require_once(PRADO_DIR.'/Util/TVarDumper.php'); + Prado::using('System.Util.TVarDumper'); return TVarDumper::dump($var,$depth,$highlight); } diff --git a/framework/TApplication.php b/framework/TApplication.php index ef2fd1a1..68064072 100644 --- a/framework/TApplication.php +++ b/framework/TApplication.php @@ -310,8 +310,11 @@ class TApplication extends TComponent $subdir=basename($this->_configFile); $this->_runtimePath.='/'.$subdir; if(!is_dir($this->_runtimePath)) + { if(@mkdir($this->_runtimePath)===false) throw new TConfigurationException('application_runtimepath_failed',$this->_runtimePath); + chmod($this->_runtimePath, 0777); //make it deletable + } } } else diff --git a/framework/Util/TSimpleDateFormatter.php b/framework/Util/TSimpleDateFormatter.php index 971225b5..03ae7b7d 100644 --- a/framework/Util/TSimpleDateFormatter.php +++ b/framework/Util/TSimpleDateFormatter.php @@ -185,7 +185,10 @@ class TSimpleDateFormatter */ public function isValidDate($value) { - return !is_null($this->parse($value, false)); + if(is_null($value)) + return false; + else + return !is_null($this->parse($value, false)); } /** diff --git a/framework/Web/Javascripts/js/validator.js b/framework/Web/Javascripts/js/validator.js index 5e896aa1..711c996e 100644 --- a/framework/Web/Javascripts/js/validator.js +++ b/framework/Web/Javascripts/js/validator.js @@ -97,7 +97,8 @@ control.addClassName(CssClass);}},hide:function() {this.isValid=true;this.updateControl();this.visible=false;},validate:function(invoker) {if(typeof(this.options.OnValidate)=="function") this.options.OnValidate(this,invoker);if(this.enabled) -this.isValid=this.evaluateIsValid();if(this.isValid) +this.isValid=this.evaluateIsValid();else +this.isValid=true;if(this.isValid) {if(typeof(this.options.OnSuccess)=="function") {this.visible=true;this.message.style.visibility="visible";this.updateControlCssClass(this.control,this.isValid);this.options.OnSuccess(this,invoker);} else @@ -126,7 +127,11 @@ return value;},getValidationValue:function(control) control=this.control switch(this.options.ControlType) {case'TDatePicker':if(control.type=="text") -return this.trim($F(control));else +{value=this.trim($F(control));if(this.options.DateFormat) +{date=value.toDate(this.options.DateFormat);return date==null?'':date;} +else +return value;} +else {this.observeDatePickerChanges();return Prado.WebUI.TDatePicker.getDropDownDate(control).getTime();} case'THtmlArea':if(typeof tinyMCE!="undefined") tinyMCE.triggerSave();return this.trim($F(control));case'TRadioButton':if(this.options.GroupName) diff --git a/framework/Web/Javascripts/prado/validation3.js b/framework/Web/Javascripts/prado/validation3.js index 1dba23da..7df6efeb 100644 --- a/framework/Web/Javascripts/prado/validation3.js +++ b/framework/Web/Javascripts/prado/validation3.js @@ -661,6 +661,8 @@ Prado.WebUI.TBaseValidator.prototype = if(this.enabled) this.isValid = this.evaluateIsValid(); + else + this.isValid = true; if(this.isValid) { @@ -776,7 +778,17 @@ Prado.WebUI.TBaseValidator.prototype = { case 'TDatePicker': if(control.type == "text") - return this.trim($F(control)); + { + value = this.trim($F(control)); + + if(this.options.DateFormat) + { + date = value.toDate(this.options.DateFormat); + return date == null ? '' : date; + } + else + return value; + } else { this.observeDatePickerChanges(); diff --git a/framework/Web/TAssetManager.php b/framework/Web/TAssetManager.php index f9fe156f..f6384a08 100644 --- a/framework/Web/TAssetManager.php +++ b/framework/Web/TAssetManager.php @@ -199,7 +199,10 @@ class TAssetManager extends TModule protected function copyFile($src,$dst) { if(!is_dir($dst)) + { @mkdir($dst); + @chmod($dst, 0777); + } $dstFile=$dst.'/'.basename($src); if(@filemtime($dstFile)<@filemtime($src)) { diff --git a/framework/Web/UI/TClientScriptManager.php b/framework/Web/UI/TClientScriptManager.php index 540ea01e..d1f3f457 100644 --- a/framework/Web/UI/TClientScriptManager.php +++ b/framework/Web/UI/TClientScriptManager.php @@ -145,7 +145,7 @@ class TClientScriptManager extends TApplicationComponent } } - /** + /** * Renders the