diff options
-rw-r--r-- | .gitattributes | 1 | ||||
-rw-r--r-- | HISTORY | 340 | ||||
-rw-r--r-- | buildscripts/texbuilder/pages.php | 1 | ||||
-rw-r--r-- | demos/quickstart/protected/pages/Advanced/Scripts3.page | 3 | ||||
-rw-r--r-- | demos/quickstart/protected/pages/Controls/ClientScript.page | 52 | ||||
-rw-r--r-- | demos/quickstart/protected/pages/Controls/Standard.page | 4 | ||||
-rw-r--r-- | framework/Web/UI/WebControls/TClientScript.php | 120 | ||||
-rw-r--r-- | framework/Web/UI/WebControls/TStyleSheet.php | 7 | ||||
-rw-r--r-- | tests/FunctionalTests/features/protected/pages/ClientScripTest.page | 8 |
9 files changed, 264 insertions, 272 deletions
diff --git a/.gitattributes b/.gitattributes index aa284132..6aa5af74 100644 --- a/.gitattributes +++ b/.gitattributes @@ -807,6 +807,7 @@ demos/quickstart/protected/pages/Configurations/Templates3.page -text demos/quickstart/protected/pages/Construction.page -text demos/quickstart/protected/pages/Controls/Button.page -text demos/quickstart/protected/pages/Controls/CheckBox.page -text +demos/quickstart/protected/pages/Controls/ClientScript.page -text demos/quickstart/protected/pages/Controls/ColorPicker.page -text demos/quickstart/protected/pages/Controls/Data.page -text demos/quickstart/protected/pages/Controls/DataGrid.page -text @@ -1,170 +1,170 @@ -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: TDataGrid may complain getting ItemType on a non-object if the grid is not data-bound (Qiang)
-NEW: Added TStyleSheet (Wei)
-
-Version 3.0.2 July 2, 2006
-==========================
-BUG: Ticket#182 - List and validator controls cause problem in child classes (Qiang)
-BUG: Ticket#191 - Duplicated postbacks occur when using TButton with validators (Qiang)
-BUG: Ticket#207 - Validators ClientSide.OnError triggered twice (Wei)
-BUG: Ticket#213 - PRADO Requirements Checker charset error (Qiang)
-BUG: Ticket#227 - Enabled property doesn't works with THtmlArea (Wei)
-BUG: Ticket#234 - Postback target could be out of date (Qiang)
-BUG: Ticket#239 - Ondeactivate handler for the first View of MultiView is always fired (Qiang)
-BUG: Ticket#244 - redirect() needs absolute URL (Qiang)
-BUG: Ticket#245 - getIsSecureConnection() is not working correctly (Qiang)
-BUG: Ticket#246 - TDatePicker wrong popup position in scrolled div (Wei)
-BUG: Ticket#260 - Wrong value of a configuration option in setUseTransparentSessionID (Qiang)
-CHG: ensureChildControls() is now invoked in TControl::initRecursive (Qiang)
-CHG: Postback enabled control will always disable default client-side browser action. (Qiang)
-CHG: CSS and JS files in a theme are now included in page in alphabetic order (Qiang)
-ENH: Ticket#206 - Added OnValidate, OnError, OnSuccess events to validators (Qiang)
-ENH: Ticket#230 - Added TDataList.EmptyTemplate property (Qiang)
-ENH: Ticket#231 - Added TButton.ButtonType property to allow reset button (Qiang)
-ENH: Ticket#232 - Allow <%# %> and <%= %> embedded within property values (Qiang)
-ENH: Ticket#256 - Datagrid columns can now be accessed via IDs (Qiang)
-ENH: Ticket#257 - OnSelectedIndexChanged event of TDataList and TDataGrid now passes the original command parameter (Qiang)
-ENH: Ticket#262 - Added TCheckBox.Value property (Qiang)
-ENH: TRepeater, TDataList and TDataGrid will store data indices in DataKeys if DataKeyField is not set. (Qiang)
-ENH: Added TPageService.BasePageClass property (Qiang)
-ENH: Added TDataGrid.EmptyTemplate property (Qiang)
-ENH: Added paging feature to all TDataBoundControl-derived controls (Qiang)
-ENH: ClientSide.ObserveChanges="false" to only revalidate client side validator when control changes (Wei)
-NEW: Added TPager (Qiang)
-NEW: Added Dreamweaver taglib extension (Stanislav, Qiang)
-NEW: Prado Command line script to create a new project, see framework/prado-cli.php (Wei)
-
-Version 3.0.1 June 4, 2006
-==========================
-BUG: Ticket#28 - OnClick does not work with Safari/KHTML (Wei)
-BUG: Ticket#37 - Changes of config files do not trigger cache update (Qiang)
-BUG: Ticket#44 - THtmlArea (tiny_mce) not working on some systems (Qiang)
-BUG: Ticket#162 - Missing currency sign in TNumberFormat if Value is 0 (Wei)
-BUG: Ticket#167 - TSecurityManager issues warning when trying to encrypt/decrypt strings (Qiang)
-BUG: Ticket#169 - Validation of subclass of THtmlArea/TDatePicker fails (Wei)
-BUG: Ticket#179 - CGI incompatibility causing clientscripts.php failure (Qiang)
-BUG: Ticket#181 - Unable to change Content-Type in response header if charset is not set (Qiang)
-BUG: Ticket#200 - onClick javascript event triggered twice on CheckBox label (Qiang)
-BUG: newly created controls during postbacks might get their initial states reset during loadStateRecursive. (Qiang)
-ENH: Ticket#150 - TDataGrid and TDataList now render table section tags (Qiang)
-ENH: Ticket#152 - constituent parts of TWizard are exposed (Qiang)
-ENH: Ticket#184 - added TUserManager.Users and Roles properties (Qiang)
-ENH: Ticket#197 - sanity check for datagrid header and footer (Qiang)
-ENH: added sanity check to calling event handlers (Qiang)
-ENH: added search for quickstart tutorials (Wei)
-ENH: added support to property tags for template owner control (Qiang)
-ENH: added Bulgarian requirement checker messages (StanProg)
-ENH: added TTheme.BaseUrl and TTheme.BasePath property (Qiang)
-ENH: added TListControl.SelectedValues property (Qiang)
-ENH: added TThemeManager.AvailableThemes property (Qiang)
-ENH: refactored TUserManager and TAuthManager so that they are easier to be extended (Qiang)
-ENH: template syntax now supports setting event handler via subproperties (Qiang)
-CHG: Ticket#151 - URL format is modified to handle empty GET values (Qiang)
-CHG: Ticket#153 - TAssetManager now ignores .svn directories (Qiang)
-CHG: Changed TControl::onBubbleEvent() to TControl::bubbleEvent() (Qiang)
-NEW: TTableHeaderRow, TTableFooterRow and table section support (Qiang)
-NEW: TCompositeControl (Qiang)
-NEW: TTextProcessor (Qiang)
-NEW: TMarkdown (Wei)
-NEW: Blog demo (Qiang)
-
-Version 3.0.0 May 1, 2006
-=========================
-BUG: Ticket#68 - 2 TButtons with THtmlArea causes second button to fail to function (Wei)
-BUG: Ticket#70 - Javascript for TDataTypeValidator added (Wei)
-BUG: Ticket#131 - TImageMap and TLinkButton continue to postback even client validator fails (Wei)
-BUG: Ticket#135 - TBrowserLogRoute reports wrong timings (Qiang)
-BUG: Ticket#137 - The JavasciptLogger does not work (Qiang)
-BUG: Ticket#138 - missing file in TDataGrid (Qiang)
-BUG: Ticket#139 - TThemeManager::setBasePath() should understand an alias path (Qiang)
-BUG: Non-control components can now use expressions in their properties (Qiang)
-BUG: TControl.Visible did not make use of overriden getVisible() (Qiang)
-BUG: TWizard did not stop navigation upon a validation failure (Qiang)
-BUG: NumberFormat will now zero-fill numbers base on the pattern. (Wei)
-ENH: TButton, TImageButton and TLinkButton now implement IButtonControl interface (Qiang)
-ENH: TResponse::writeFile takes three additional parameters to allow sending memory data (Qiang)
-ENH: TButtonColumn can now be a column of image buttons (Qiang)
-ENH: TLiteral will display body content if Text is empty (Qiang)
-ENH: Format string in classes extending TDataGridColumn can now evaluate an expression (Qiang)
-ENH: Format string in classes extending TListControl can now evaluate an expression (Qiang)
-ENH: Added THttpResponse::reload() (Qiang)
-ENH: Custom visual effects can be added to client-side validators via ClientSide property in validators. (Wei)
-ENH: TJavascript::encode() allows raw javascript code when string begins with "javascript:" (Wei)
-ENH: Update TinyMCE to 2.0.5.1
-CHG: Rewrote client-side javascript validators, check your client-side validation behaviour (Wei)
-CHG: Updated the javascript Prototype library, a few utilties functions REMOVED, may break your existing javascript code. (Wei)
-CHG: Build javascript without compression, only comments are removed. (Wei)
-CHG: TDatePicker's date can be set using Date property, it value must be in same format as DateFormat, TimeStamp must be set as integer (wei)
-CHG: TSimpleDateFormatter::parse() now return an integer or null on parse error (Wei)
-CHG: TControl::createControls() is changed to public. (Qiang)
-CHG: Template comment tag is changed from <! ... !> to <!-- ... --!> (Qiang)
-NEW: TListControlValidator (Wei)
-NEW: TClientScript (Wei)
-
-
-Version 3.0RC2 April 16, 2006
-=============================
-BUG: Ticket#54 - recursive reverse() definition (Wei)
-BUG: Ticket#93 - ValidationGroup not working in TImageMap for js validator (Wei)
-BUG: Ticket#97 - Invalid return type value for TSimpleDateFormatter::parse (Wei)
-BUG: Ticket#118 - Variables that may not have been initialized (Qiang)
-BUG: Ticket#121 - OnClick don't fire with TImageButton and TRequiredFieldValidator (Wei)
-BUG: Ticket#129 - TRadioButtonList in TWizard step does not postback correctly (Qiang)
-CHG: Moved localize() into PradoBase (Qiang)
-CHG: List controls now use array keys as list item values even if the array is integer-indexed (Qiang)
-CHG: THttpUtility::htmlEncode and htmlDecode now do not deal with & (Qiang)
-CHG: Expressions appeared in a template are evaluated in PreRender stage (Qiang)
-CHG: The context of expressions appeared in a template is changed to the template control (Qiang)
-ENH: Optimized the representation and evaluation of template expressions (Qiang)
-ENH: Added Raw layout to TDataList (Qiang)
-ENH: Added TRepeater.DataKeys and TRepeater.DataKeyField (Qiang)
-
-Version 3.0RC1 April 5, 2006
-============================
-BUG: Ticket#85 - Undefined TDataGrid::setSelectedIndex (Qiang)
-BUG: Ticket#87 - Typo in IDbConnection (Qiang)
-BUG: Ticket#88 - Unclosed HTML tag in TDatePicker and TColorPicker (Qiang)
-BUG: Ticket#89 - TInlineFrame::ScrollBars wrong behaviour expected (Qiang)
-BUG: Ticket#95 - Typo in TTemplateControl::registerContentPlaceHolder (Qiang)
-BUG: Ticket#103 - Typo in TStyle::setVerticalAlign (Qiang)
-BUG: Ticket#107 - ListControls not respect parent disabling (Qiang)
-BUG: SF#1432624 - Incorrect documentation about caching expiry (Qiang)
-BUG: SF#1446846 - Typo in THead (Qiang)
-BUG: THttpSession fails when user storage module is used (Qiang)
-CHG: TTextHighlighter.EnableCopyCode defaults to false (Qiang)
-CHG: Reorganized quickstart tutorial demo, added new sections (Qiang)
-CHG: Reorganized folders under framework (Qiang)
-CHG: Modified THtmlArea default toolbar and size. (Qiang)
-CHG: Pagers in TDataGrid are now enclosed within panels (Qiang)
-ENH: Ticket#92 - Support for user exception message file (Qiang)
-ENH: Ticket#106 - Support for validation on THiddenField (Qiang)
-ENH: Ticket#110 - Support for TVarDump with syntax highlight (Qiang)
-ENH: TDataFieldAccessor can access public class variables (Qiang)
-ENH: TPhpErrorException now shows the actual error lines (Qiang)
-ENH: Refactored cache classes with support for cache dependency (Qiang)
-NEW: TStack component (Qiang)
-NEW: TImageMap control (Qiang)
-NEW: TWizard control (Qiang)
-NEW: TVarDumper and PradoBase::varDump() (Qiang)
-NEW: TComponentReflection (Qiang)
-NEW: TParameterModule (Qiang)
-NEW: TPropelLogRoute (Jason)
-
-Version 3.0b March 6, 2006
-==========================
-BUG: fixed many
-CHG: event names must be prefixed with 'On' (Qiang)
-CHG: values of properties whose name ends with 'Template' are parsed directly by template parser (Qiang)
-ENH: template parser reports exact error location (Qiang)
-ENH: cookie HMAC check (Qiang)
-NEW: TInlineFrame (Jason)
-NEW: TAPCCache (Alban)
-NEW: TColorPicker, TDatePicker, TRatingList, TAdodbProvider, TCreoleProvider (Wei)
-NEW: TMultiView, TView, TControlAdapter, TWebControlAdapter, TPagedList, TAttributeCollection (Qiang)
-
-Version 3.0a January 18, 2006
-=============================
-Starting, main feaures ready (Qiang)
+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: TDataGrid may complain getting ItemType on a non-object if the grid is not data-bound (Qiang) +NEW: Added TStyleSheet (Wei) + +Version 3.0.2 July 2, 2006 +========================== +BUG: Ticket#182 - List and validator controls cause problem in child classes (Qiang) +BUG: Ticket#191 - Duplicated postbacks occur when using TButton with validators (Qiang) +BUG: Ticket#207 - Validators ClientSide.OnError triggered twice (Wei) +BUG: Ticket#213 - PRADO Requirements Checker charset error (Qiang) +BUG: Ticket#227 - Enabled property doesn't works with THtmlArea (Wei) +BUG: Ticket#234 - Postback target could be out of date (Qiang) +BUG: Ticket#239 - Ondeactivate handler for the first View of MultiView is always fired (Qiang) +BUG: Ticket#244 - redirect() needs absolute URL (Qiang) +BUG: Ticket#245 - getIsSecureConnection() is not working correctly (Qiang) +BUG: Ticket#246 - TDatePicker wrong popup position in scrolled div (Wei) +BUG: Ticket#260 - Wrong value of a configuration option in setUseTransparentSessionID (Qiang) +CHG: ensureChildControls() is now invoked in TControl::initRecursive (Qiang) +CHG: Postback enabled control will always disable default client-side browser action. (Qiang) +CHG: CSS and JS files in a theme are now included in page in alphabetic order (Qiang) +ENH: Ticket#206 - Added OnValidate, OnError, OnSuccess events to validators (Qiang) +ENH: Ticket#230 - Added TDataList.EmptyTemplate property (Qiang) +ENH: Ticket#231 - Added TButton.ButtonType property to allow reset button (Qiang) +ENH: Ticket#232 - Allow <%# %> and <%= %> embedded within property values (Qiang) +ENH: Ticket#256 - Datagrid columns can now be accessed via IDs (Qiang) +ENH: Ticket#257 - OnSelectedIndexChanged event of TDataList and TDataGrid now passes the original command parameter (Qiang) +ENH: Ticket#262 - Added TCheckBox.Value property (Qiang) +ENH: TRepeater, TDataList and TDataGrid will store data indices in DataKeys if DataKeyField is not set. (Qiang) +ENH: Added TPageService.BasePageClass property (Qiang) +ENH: Added TDataGrid.EmptyTemplate property (Qiang) +ENH: Added paging feature to all TDataBoundControl-derived controls (Qiang) +ENH: ClientSide.ObserveChanges="false" to only revalidate client side validator when control changes (Wei) +NEW: Added TPager (Qiang) +NEW: Added Dreamweaver taglib extension (Stanislav, Qiang) +NEW: Prado Command line script to create a new project, see framework/prado-cli.php (Wei) + +Version 3.0.1 June 4, 2006 +========================== +BUG: Ticket#28 - OnClick does not work with Safari/KHTML (Wei) +BUG: Ticket#37 - Changes of config files do not trigger cache update (Qiang) +BUG: Ticket#44 - THtmlArea (tiny_mce) not working on some systems (Qiang) +BUG: Ticket#162 - Missing currency sign in TNumberFormat if Value is 0 (Wei) +BUG: Ticket#167 - TSecurityManager issues warning when trying to encrypt/decrypt strings (Qiang) +BUG: Ticket#169 - Validation of subclass of THtmlArea/TDatePicker fails (Wei) +BUG: Ticket#179 - CGI incompatibility causing clientscripts.php failure (Qiang) +BUG: Ticket#181 - Unable to change Content-Type in response header if charset is not set (Qiang) +BUG: Ticket#200 - onClick javascript event triggered twice on CheckBox label (Qiang) +BUG: newly created controls during postbacks might get their initial states reset during loadStateRecursive. (Qiang) +ENH: Ticket#150 - TDataGrid and TDataList now render table section tags (Qiang) +ENH: Ticket#152 - constituent parts of TWizard are exposed (Qiang) +ENH: Ticket#184 - added TUserManager.Users and Roles properties (Qiang) +ENH: Ticket#197 - sanity check for datagrid header and footer (Qiang) +ENH: added sanity check to calling event handlers (Qiang) +ENH: added search for quickstart tutorials (Wei) +ENH: added support to property tags for template owner control (Qiang) +ENH: added Bulgarian requirement checker messages (StanProg) +ENH: added TTheme.BaseUrl and TTheme.BasePath property (Qiang) +ENH: added TListControl.SelectedValues property (Qiang) +ENH: added TThemeManager.AvailableThemes property (Qiang) +ENH: refactored TUserManager and TAuthManager so that they are easier to be extended (Qiang) +ENH: template syntax now supports setting event handler via subproperties (Qiang) +CHG: Ticket#151 - URL format is modified to handle empty GET values (Qiang) +CHG: Ticket#153 - TAssetManager now ignores .svn directories (Qiang) +CHG: Changed TControl::onBubbleEvent() to TControl::bubbleEvent() (Qiang) +NEW: TTableHeaderRow, TTableFooterRow and table section support (Qiang) +NEW: TCompositeControl (Qiang) +NEW: TTextProcessor (Qiang) +NEW: TMarkdown (Wei) +NEW: Blog demo (Qiang) + +Version 3.0.0 May 1, 2006 +========================= +BUG: Ticket#68 - 2 TButtons with THtmlArea causes second button to fail to function (Wei) +BUG: Ticket#70 - Javascript for TDataTypeValidator added (Wei) +BUG: Ticket#131 - TImageMap and TLinkButton continue to postback even client validator fails (Wei) +BUG: Ticket#135 - TBrowserLogRoute reports wrong timings (Qiang) +BUG: Ticket#137 - The JavasciptLogger does not work (Qiang) +BUG: Ticket#138 - missing file in TDataGrid (Qiang) +BUG: Ticket#139 - TThemeManager::setBasePath() should understand an alias path (Qiang) +BUG: Non-control components can now use expressions in their properties (Qiang) +BUG: TControl.Visible did not make use of overriden getVisible() (Qiang) +BUG: TWizard did not stop navigation upon a validation failure (Qiang) +BUG: NumberFormat will now zero-fill numbers base on the pattern. (Wei) +ENH: TButton, TImageButton and TLinkButton now implement IButtonControl interface (Qiang) +ENH: TResponse::writeFile takes three additional parameters to allow sending memory data (Qiang) +ENH: TButtonColumn can now be a column of image buttons (Qiang) +ENH: TLiteral will display body content if Text is empty (Qiang) +ENH: Format string in classes extending TDataGridColumn can now evaluate an expression (Qiang) +ENH: Format string in classes extending TListControl can now evaluate an expression (Qiang) +ENH: Added THttpResponse::reload() (Qiang) +ENH: Custom visual effects can be added to client-side validators via ClientSide property in validators. (Wei) +ENH: TJavascript::encode() allows raw javascript code when string begins with "javascript:" (Wei) +ENH: Update TinyMCE to 2.0.5.1 +CHG: Rewrote client-side javascript validators, check your client-side validation behaviour (Wei) +CHG: Updated the javascript Prototype library, a few utilties functions REMOVED, may break your existing javascript code. (Wei) +CHG: Build javascript without compression, only comments are removed. (Wei) +CHG: TDatePicker's date can be set using Date property, it value must be in same format as DateFormat, TimeStamp must be set as integer (wei) +CHG: TSimpleDateFormatter::parse() now return an integer or null on parse error (Wei) +CHG: TControl::createControls() is changed to public. (Qiang) +CHG: Template comment tag is changed from <! ... !> to <!-- ... --!> (Qiang) +NEW: TListControlValidator (Wei) +NEW: TClientScript (Wei) + + +Version 3.0RC2 April 16, 2006 +============================= +BUG: Ticket#54 - recursive reverse() definition (Wei) +BUG: Ticket#93 - ValidationGroup not working in TImageMap for js validator (Wei) +BUG: Ticket#97 - Invalid return type value for TSimpleDateFormatter::parse (Wei) +BUG: Ticket#118 - Variables that may not have been initialized (Qiang) +BUG: Ticket#121 - OnClick don't fire with TImageButton and TRequiredFieldValidator (Wei) +BUG: Ticket#129 - TRadioButtonList in TWizard step does not postback correctly (Qiang) +CHG: Moved localize() into PradoBase (Qiang) +CHG: List controls now use array keys as list item values even if the array is integer-indexed (Qiang) +CHG: THttpUtility::htmlEncode and htmlDecode now do not deal with & (Qiang) +CHG: Expressions appeared in a template are evaluated in PreRender stage (Qiang) +CHG: The context of expressions appeared in a template is changed to the template control (Qiang) +ENH: Optimized the representation and evaluation of template expressions (Qiang) +ENH: Added Raw layout to TDataList (Qiang) +ENH: Added TRepeater.DataKeys and TRepeater.DataKeyField (Qiang) + +Version 3.0RC1 April 5, 2006 +============================ +BUG: Ticket#85 - Undefined TDataGrid::setSelectedIndex (Qiang) +BUG: Ticket#87 - Typo in IDbConnection (Qiang) +BUG: Ticket#88 - Unclosed HTML tag in TDatePicker and TColorPicker (Qiang) +BUG: Ticket#89 - TInlineFrame::ScrollBars wrong behaviour expected (Qiang) +BUG: Ticket#95 - Typo in TTemplateControl::registerContentPlaceHolder (Qiang) +BUG: Ticket#103 - Typo in TStyle::setVerticalAlign (Qiang) +BUG: Ticket#107 - ListControls not respect parent disabling (Qiang) +BUG: SF#1432624 - Incorrect documentation about caching expiry (Qiang) +BUG: SF#1446846 - Typo in THead (Qiang) +BUG: THttpSession fails when user storage module is used (Qiang) +CHG: TTextHighlighter.EnableCopyCode defaults to false (Qiang) +CHG: Reorganized quickstart tutorial demo, added new sections (Qiang) +CHG: Reorganized folders under framework (Qiang) +CHG: Modified THtmlArea default toolbar and size. (Qiang) +CHG: Pagers in TDataGrid are now enclosed within panels (Qiang) +ENH: Ticket#92 - Support for user exception message file (Qiang) +ENH: Ticket#106 - Support for validation on THiddenField (Qiang) +ENH: Ticket#110 - Support for TVarDump with syntax highlight (Qiang) +ENH: TDataFieldAccessor can access public class variables (Qiang) +ENH: TPhpErrorException now shows the actual error lines (Qiang) +ENH: Refactored cache classes with support for cache dependency (Qiang) +NEW: TStack component (Qiang) +NEW: TImageMap control (Qiang) +NEW: TWizard control (Qiang) +NEW: TVarDumper and PradoBase::varDump() (Qiang) +NEW: TComponentReflection (Qiang) +NEW: TParameterModule (Qiang) +NEW: TPropelLogRoute (Jason) + +Version 3.0b March 6, 2006 +========================== +BUG: fixed many +CHG: event names must be prefixed with 'On' (Qiang) +CHG: values of properties whose name ends with 'Template' are parsed directly by template parser (Qiang) +ENH: template parser reports exact error location (Qiang) +ENH: cookie HMAC check (Qiang) +NEW: TInlineFrame (Jason) +NEW: TAPCCache (Alban) +NEW: TColorPicker, TDatePicker, TRatingList, TAdodbProvider, TCreoleProvider (Wei) +NEW: TMultiView, TView, TControlAdapter, TWebControlAdapter, TPagedList, TAttributeCollection (Qiang) + +Version 3.0a January 18, 2006 +============================= +Starting, main feaures ready (Qiang) diff --git a/buildscripts/texbuilder/pages.php b/buildscripts/texbuilder/pages.php index f49d15fd..9b8a97ad 100644 --- a/buildscripts/texbuilder/pages.php +++ b/buildscripts/texbuilder/pages.php @@ -33,6 +33,7 @@ $pages['Configurations'] = array( $pages['Control Reference : Standard Controls'] = array(
'Controls/Button.page',
'Controls/CheckBox.page',
+ 'Controls/ClientScript.page',
'Controls/ColorPicker.page',
'Controls/DatePicker.page',
'Controls/Expression.page',
diff --git a/demos/quickstart/protected/pages/Advanced/Scripts3.page b/demos/quickstart/protected/pages/Advanced/Scripts3.page index 9883f43e..123caa3a 100644 --- a/demos/quickstart/protected/pages/Advanced/Scripts3.page +++ b/demos/quickstart/protected/pages/Advanced/Scripts3.page @@ -29,4 +29,7 @@ that require a particular library will also automatically load the necessary lib For example, if you add a TDatePicker component on the page, the <tt>datapicker</tt>
and its dependencies will be automatically included on the page.</p>
+<p>See <a href="?page=Controls.ClientScript">TClientScript</a> for options of adding
+ your custom javascript code to the page.</p>
+
</com:TContent>
\ No newline at end of file diff --git a/demos/quickstart/protected/pages/Controls/ClientScript.page b/demos/quickstart/protected/pages/Controls/ClientScript.page new file mode 100644 index 00000000..5dab41d5 --- /dev/null +++ b/demos/quickstart/protected/pages/Controls/ClientScript.page @@ -0,0 +1,52 @@ +<com:TContent ID="body" > + +<h1>TClientScript</h1> +<com:DocLink ClassPath="System.Web.UI.WebControls.TClientScript" /> +<h2>Including Bundled Javascript Libraries in Prado</h2> +<p> +<tt>TClientScript</tt> allows javascript code to be insert or linked to the +page template. Prado is bundled with a large library of javascript functionality +including effects, AJAX, basic event handlers, and many others. The bundled +javascript libraries can be linked to the current page template using the +<tt>UsingPradoScripts</tt> property. Multiple bundled javascript libraries +can be specified using comma delimited string of the name of javascript library +to include on the page. For following example will include the "ajax" and "effects" library. +</p> +<com:TTextHighlighter Language="prado" CssClass="source"> +<com:TClientScript UsingPradoScripts="ajax, effects" /> +</com:TTextHighlighter> + +<p> + The available bundled libraries included in Prado are + <ul> + <li><tt>prado</tt> : basic prado javascript framework based on Prototype</li> + <li><tt>effects</tt> : visual effects from script.aculo.us</li> + <li><tt>ajax</tt> : ajax and callback related based on Prototype</li> + <li><tt>validator</tt> : validation</li> + <li><tt>logger</tt> : javascript logger and object browser</li> + <li><tt>datepicker</tt> : datepicker</li> + <li><tt>rico</tt> : Rico library</li> + <li><tt>colorpicker</tt> : colorpicker</li> + </ul> +</p> +<p>The dependencies for each library are automatically resolved. That is, + specifying, say the "ajax", will also include the "prado" library.</p> + +<h2>Including Custom Javascript Files</h2> +<p>Custom javascript files can be register using the <tt>ScriptUrl</tt> property. +The following example includes the javascript file "test.js" to the page. In this case, the file +"test.js" is relative the current template you are using. Since the property value is +<a href="?page=Configurations.Templates3">dynamic asset tag</a>, the file "test.js" will be published +automatically, that is, the file will be copied to the assets directory if necessary. +</p> +<com:TTextHighlighter Language="prado" CssClass="source"> +<com:TClientScript ScriptUrl=<%~ test.js %> /> +</com:TTextHighlighter> +<p>You can include javascript files from other servers by specifying the full URL string in + the <tt>ScriptUrl</tt> property.</p> + +<h2>Including Custom Javascript Code Blocks</h2> +<p> Any content within the <tt>TClientScript</tt> control tag will be considered as + javascript code and will be rendered where it is declared.</p> + +</com:TContent>
\ No newline at end of file diff --git a/demos/quickstart/protected/pages/Controls/Standard.page b/demos/quickstart/protected/pages/Controls/Standard.page index 156b39e5..086ba293 100644 --- a/demos/quickstart/protected/pages/Controls/Standard.page +++ b/demos/quickstart/protected/pages/Controls/Standard.page @@ -11,6 +11,10 @@ <a href="?page=Controls.CheckBox">TCheckBox</a> represents a checkbox on a Web page. It can be used to collect two-state user input.
</li>
+ <li>
+ <a href="?page=Controls.ClientScript">TClientScript</a> adds javascript code to the page.
+ </li>
+
<li>*
<a href="?page=Controls.ColorPicker">TColorPicker</a> represents an input field taking color values via a color dialog.
</li>
diff --git a/framework/Web/UI/WebControls/TClientScript.php b/framework/Web/UI/WebControls/TClientScript.php index b2fbf925..abc23c45 100644 --- a/framework/Web/UI/WebControls/TClientScript.php +++ b/framework/Web/UI/WebControls/TClientScript.php @@ -22,11 +22,6 @@ * <com:TClientScript UsingPradoScripts="effects, rico" />
* </code>
*
- * The {@link setPreRenderControlTypes PreRenderControlTypes} property can
- * be used to specify that controls type/class names that should pre-render itself
- * even though they may not be rendered on the page. This is useful to publish
- * controls that require assets and is only visible after a callback response.
- *
* Custom javascript files can be register using the {@link setScriptUrl ScriptUrl}
* property.
* <code>
@@ -34,18 +29,13 @@ * </code>
*
* Contents within TClientScript will be treated as javascript code and will be
- * rendered.
- *
- * The {@link setScriptPosition ScriptPosition} property specifies where the script
- * will be rendered. The allows values of {@link setScriptPosition ScriptPosition} are
+ * rendered in place.
*
- * - <b>Head</b> -- renders the script within the <head>
- * - <b>Begin</b> -- renders the script within and near the begining of TForm
- * - <b>Here</b> -- renders the script inplace, this is the default
- * - <b>End</b> -- renders the script within and near the end of TForm
+ * The {@link setPreRenderControlTypes PreRenderControlTypes} property can
+ * be used to specify that controls type/class names that should pre-render itself
+ * even though they may not be rendered on the page. This is useful to publish
+ * controls that require assets and is only visible after a callback response.
*
- * TODO: Allow binding expressions inside scripts
- *
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
* @version $Revision: $ $Date: $
* @package System.Web.UI.WebControls
@@ -54,11 +44,6 @@ class TClientScript extends TControl
{
/**
- * @var string body contents
- */
- private $_content = '';
-
- /**
* @return string comma delimited list of javascript libraries to included
* on the page.
*/
@@ -112,26 +97,7 @@ class TClientScript extends TControl {
return $this->getViewState('PreRenderControls', '');
}
-
- /**
- * @return string position the script should be rendered, default is 'Here'.
- */
- public function getScriptPosition()
- {
- return $this->getViewState('ScriptPosition', 'Here');
- }
-
- /**
- * Sets the position where the script will be rendered.
- * The allow positions are 'Head', 'Begin', 'Here', and 'End', default is 'Here'.
- * @param string script position 'Head', 'Begin', 'Here' or 'End'.
- */
- public function setScriptPosition($value)
- {
- $this->setViewState('ScriptPosition',
- TPropertyValue::ensureEnum($value, 'Head', 'Begin', 'Here', 'End'), 'Here');
- }
-
+
/**
* Calls the client script manager to add each of the requested client
* script libraries.
@@ -148,42 +114,9 @@ class TClientScript extends TControl if(strlen($script) > 0)
$cs->registerPradoScript($script);
}
- if($this->getEnabled(true))
- {
- $this->registerCustomScriptFile();
- $this->registerCustomScript();
- }
$this->preRenderControls($param);
}
-
- /**
- * Registers the custom script file.
- */
- protected function registerCustomScriptFile()
- {
- $scriptUrl = $this->getScriptUrl();
- if(strlen($scriptUrl))
- {
- $position = $this->getScriptPosition();
- $cs = $this->getPage()->getClientScript();
- switch($this->getScriptPosition())
- {
- case 'Head':
- $cs->registerHeadScriptFile($scriptUrl, $scriptUrl);
- break;
- case 'Begin':
- $cs->registerScriptFile($scriptUrl, $scriptUrl);
- break;
- case 'Here':
- $this->_content .= TJavascript::renderScriptFile($scriptUrl);
- break;
- default :
- throw new TConfigurationException('clientscript_invalid_file_position',
- $this->getID(), $position);
- }
- }
- }
-
+
/**
* Renders the body content as javascript block.
* Overrides parent implementation, parent renderChildren method is called during
@@ -192,31 +125,32 @@ class TClientScript extends TControl */
public function render($writer)
{
- if($this->getEnabled(true) && strlen($this->_content) > 0)
- $writer->write($this->_content);
+ $this->renderCustomScriptFile($writer);
+ $this->renderCustomScript($writer);
}
/**
- * Registers the body content as scripts at specific locations. Calls
- * {@link parent::renderChildren} to capture the body contents.
+ * Renders the custom script file.
+ * @param THtmLWriter the renderer
+ */
+ protected function renderCustomScriptFile($writer)
+ {
+ $scriptUrl = $this->getScriptUrl();
+ if(strlen($scriptUrl) > 0)
+ $writer->write("<script type=\"text/javascript\" src=\"$scriptUrl\"></script>\n");
+ }
+
+ /**
+ * Registers the body content as javascript.
+ * @param THtmlWriter the renderer
*/
- protected function registerCustomScript()
+ protected function renderCustomScript($writer)
{
- $textWriter=new TTextWriter;
- $this->renderChildren(new THtmlWriter($textWriter));
- $script=$textWriter->flush();
- if(strlen($script)>0)
+ if($this->getHasControls())
{
- $cs = $this->getPage()->getClientScript();
- $position = $this->getScriptPosition();
- if($position == 'Here')
- $this->_content .= TJavaScript::renderScriptBlock($script);
- else
- {
- $key = sprintf('%08X', crc32($script));
- $method = 'register'.$position.'Script';
- $cs->{$method}($key, $script);
- }
+ $writer->write("<script type=\"text/javascript\">\n/*<![CDATA[*/\n");
+ $this->renderChildren($writer);
+ $writer->write("\n/*]]>*/\n</script>\n");
}
}
diff --git a/framework/Web/UI/WebControls/TStyleSheet.php b/framework/Web/UI/WebControls/TStyleSheet.php index 02ac40cd..5925645c 100644 --- a/framework/Web/UI/WebControls/TStyleSheet.php +++ b/framework/Web/UI/WebControls/TStyleSheet.php @@ -52,11 +52,8 @@ class TStyleSheet extends TControl */ public function onPreRender($param) { - if($this->getEnabled(true)) - { - if(($url=$this->getStyleSheetUrl())!=='') - $this->getPage()->getClientScript()->registerStyleSheetFile($url,$url); - } + if(($url=$this->getStyleSheetUrl())!=='') + $this->getPage()->getClientScript()->registerStyleSheetFile($url,$url); } /** diff --git a/tests/FunctionalTests/features/protected/pages/ClientScripTest.page b/tests/FunctionalTests/features/protected/pages/ClientScripTest.page index 8dbf7133..d5b6e182 100644 --- a/tests/FunctionalTests/features/protected/pages/ClientScripTest.page +++ b/tests/FunctionalTests/features/protected/pages/ClientScripTest.page @@ -1,13 +1,13 @@ <com:TContent ID="Content"> <h1>ClientScript Test</h1> - <com:TClientScript ScriptUrl=<%~ test.js %> ScriptPosition="Head"> + <com:TClientScript ScriptUrl=<%~ test.js %>> if(typeof(ClientScriptInfo) == "undefined") ClientScriptInfo = []; ClientScriptInfo.push("ok 3?") </com:TClientScript> - <com:TClientScript ScriptPosition="Begin"> + <com:TClientScript> if(typeof(ClientScriptInfo) == "undefined") ClientScriptInfo = []; ClientScriptInfo.push("ok 2!") @@ -16,12 +16,12 @@ <com:TLabel ID="label1" Text="Label 1" /> <input type="button" id="button1" value="update" /> - <com:TClientScript ScriptPosition="End" UsingPradoScripts="prado"> + <com:TClientScript UsingPradoScripts="prado"> Event.observe("button1", "click", function() { element = $("<%= $this->label1->ClientID %>"); if(element) - element.innerHTML = inspect(ClientScriptInfo); + element.innerHTML = "Label 1: "+inspect(ClientScriptInfo); else alert("failed"); }); |