From 407aa2ff5d56859fcd1f47b85b4c4180d035c428 Mon Sep 17 00:00:00 2001 From: wei <> Date: Sat, 21 Jan 2006 02:07:59 +0000 Subject: Fixed DefaultButton and TLinkButton --- framework/Web/UI/TClientScriptManager.php | 31 ++++++++- framework/Web/UI/WebControls/TButton.php | 3 + framework/Web/UI/WebControls/TDatePicker.php | 98 +++++++++++++++++++++++++--- framework/Web/UI/WebControls/TPanel.php | 9 +-- 4 files changed, 124 insertions(+), 17 deletions(-) (limited to 'framework/Web/UI') diff --git a/framework/Web/UI/TClientScriptManager.php b/framework/Web/UI/TClientScriptManager.php index 535e85b2..be6611cd 100644 --- a/framework/Web/UI/TClientScriptManager.php +++ b/framework/Web/UI/TClientScriptManager.php @@ -1,6 +1,6 @@ _trackFocus=$value; } } - +*/ Prado::using('System.Web.Javascripts.*'); class TClientScriptManager extends TComponent @@ -133,6 +133,33 @@ class TClientScriptManager extends TComponent return $options->toJavascript(); } + /** + * Register a default button to panel. When the $panel is in focus and + * the 'enter' key is pressed, the $button will be clicked. + * @param TControl panel to register the default button action + * @param TControl button to trigger a postback + */ + public function registerDefaultButton($panel, $button) + { + $serializer = new TJavascriptSerializer( + $this->getDefaultButtonOptions($panel, $button)); + $options = $serializer->toJavascript(); + $code = "new Prado.WebUI.DefaultButton($options);"; + $scripts = $this->_page->getClientScript(); + $scripts->registerEndScript("prado:".$panel->getClientID(), $code); + } + + /** + * @return array default button options. + */ + protected function getDefaultButtonOptions($panel, $button) + { + $options['Panel'] = $panel->getClientID(); + $options['Target'] = $button->getClientID(); + $options['Event'] = 'click'; + return $options; + } + /** * Register client scripts. diff --git a/framework/Web/UI/WebControls/TButton.php b/framework/Web/UI/WebControls/TButton.php index 9c364af8..85473349 100644 --- a/framework/Web/UI/WebControls/TButton.php +++ b/framework/Web/UI/WebControls/TButton.php @@ -86,6 +86,9 @@ class TButton extends TWebControl implements IPostBackEventHandler parent::addAttributesToRender($writer); } + /** + * @return boolean true if validators are active and can cause validation. + */ protected function canCauseValidation() { $group = $this->getValidationGroup(); diff --git a/framework/Web/UI/WebControls/TDatePicker.php b/framework/Web/UI/WebControls/TDatePicker.php index 10d3248e..60cf882d 100644 --- a/framework/Web/UI/WebControls/TDatePicker.php +++ b/framework/Web/UI/WebControls/TDatePicker.php @@ -1,13 +1,58 @@ + * @link http://www.pradosoft.com/ + * @copyright Copyright © 2005 PradoSoft + * @license http://www.pradosoft.com/license/ + * @version $Revision: $ $Date: $ + * @package System.Web.UI.WebControls + */ /** - * ${classname} * - * ${description} + * TDatePicker class. + * + * TDatePicker displays a text box for date input purpose. + * When the text box receives focus, a calendar will pop up and users can + * pick up from it a date that will be automatically entered into the text box. + * The format of the date string displayed in the text box is determined by + * the DateFormat property. Valid formats are the combination of the + * following tokens, + * + * + * Character Format Pattern (en-US) + * ----------------------------------------- + * d day digit + * dd padded day digit e.g. 01, 02 + * M month digit + * MM padded month digit + * MMMM localized month name, e.g. March, April + * yy 2 digit year + * yyyy 4 digit year + * ----------------------------------------- + * + * + * TDatePicker has three Mode to show the date picker popup. + * + * # Basic -- Only shows a text input, focusing on the input shows the + * date picker. + * # Button -- Shows a button next to the text input, clicking on the + * button shows the date, button text can be by the + * ButtonText property + * # ImageButton -- Shows an image next to the text input, clicking on + * the image shows the date picker, image source can be + * change through the ImageUrl property. + * + * The CssClass property can be used to override the css class name + * for the date picker panel. CalendarStyle property sets the packages + * styles available. E.g. default. * - * @author Wei Zhuo - * @version $Revision: 1.66 $ $Date: ${DATE} ${TIME} $ - * @package ${package} + * @author Wei Zhuo + * @version $Revision: $ $Date: $ + * @package System.Web.UI.WebControls + * @since 3.0 */ class TDatePicker extends TTextBox { @@ -175,6 +220,10 @@ class TDatePicker extends TTextBox return $this->getViewState('UpToYear', intval(@date('Y'))+10); } + /** + * Get javascript date picker options. + * @return array date picker client-side options + */ protected function getDatePickerOptions() { $options['Format'] = $this->getDateFormat(); @@ -189,6 +238,10 @@ class TDatePicker extends TTextBox return $options; } + /** + * Get javascript localization options, e.g. month and weekday names. + * @return array localization options. + */ protected function getCulturalOptions() { $app = $this->getApplication()->getGlobalization(); @@ -206,6 +259,9 @@ class TDatePicker extends TTextBox return $options; } + /** + * Publish the date picker Css asset files. + */ protected function OnPreRender($param) { parent::onPreRender($param); @@ -214,8 +270,8 @@ class TDatePicker extends TTextBox /** * Renders body content. - * This method overrides parent implementation by replacing - * the body content with syntax highlighted result. + * This method overrides parent implementation by adding + * additional date picker button if Mode is "Button" or "ImageButton". * @param THtmlWriter writer */ protected function render($writer) @@ -229,11 +285,19 @@ class TDatePicker extends TTextBox } } + /** + * Gets the ID for the date picker trigger button. + * @return string unique button ID + */ protected function getDatePickerButtonID() { return $this->getClientID().'button'; } + /** + * Adds an additional button such that when clicked it shows the date picker. + * @return THtmlWriter writer + */ protected function renderButtonDatePicker($writer) { $writer->addAttribute('id', $this->getDatePickerButtonID()); @@ -243,7 +307,11 @@ class TDatePicker extends TTextBox $writer->renderBeginTag("input"); } - protected function renderImageButtonDatePicker($writer) + /** + * Adds an additional image button such that when clicked it shows the date picker. + * @return THtmlWriter writer + */ + protected function renderImageButtonDatePicker($writer) { $url = $this->getButtonImageUrl(); $url = empty($url) ? $this->publishDefaultButtonImage() : $url; @@ -253,6 +321,10 @@ class TDatePicker extends TTextBox $writer->renderBeginTag('img'); } + /** + * Publish the default button image asset file. + * @return string image file url. + */ protected function publishDefaultButtonImage() { $cs = $this->getPage()->getClientScript(); @@ -261,6 +333,10 @@ class TDatePicker extends TTextBox return $this->getService()->getAsset($file); } + /** + * Publish the calendar style Css asset file. + * @return string Css file url. + */ protected function publishCalendarStyle() { $cs = $this->getPage()->getClientScript(); @@ -272,6 +348,12 @@ class TDatePicker extends TTextBox return $url; } + /** + * Registers the javascript code to initialize the date picker. + * Must use "Event.OnLoad" to initialize the date picker when the + * full page is loaded, otherwise IE will throw an error. + * @param THtmlWriter writer + */ protected function addAttributesToRender($writer) { parent::addAttributesToRender($writer); diff --git a/framework/Web/UI/WebControls/TPanel.php b/framework/Web/UI/WebControls/TPanel.php index 9eab135e..33ae7cd2 100644 --- a/framework/Web/UI/WebControls/TPanel.php +++ b/framework/Web/UI/WebControls/TPanel.php @@ -72,13 +72,8 @@ class TPanel extends TWebControl throw new TInvalidDataValueException('panel_defaultbutton_invalid',$butt); else { - //TODO - /*$scripts = $this->getPage()->getClientScript(); - $js = $scripts->registerDefaultButtonScript($this,$button); - $clientID=$this->getClientID(); - $scripts->registerEndScript($clientID.'defaultButton', $js); - $writer->addAttribute('id',$clientID); - $writer->addAttribute('onkeypress', "return false;");*/ + $writer->addAttribute('id',$this->getClientID()); + $this->getPage()->getClientScript()->registerDefaultButton($this, $button); } } } -- cgit v1.2.3