summaryrefslogtreecommitdiff
path: root/framework/Web/UI/WebControls
diff options
context:
space:
mode:
Diffstat (limited to 'framework/Web/UI/WebControls')
-rw-r--r--framework/Web/UI/WebControls/TBaseValidator.php71
-rw-r--r--framework/Web/UI/WebControls/THtmlArea.php97
-rw-r--r--framework/Web/UI/WebControls/TValidationSummary.php129
3 files changed, 236 insertions, 61 deletions
diff --git a/framework/Web/UI/WebControls/TBaseValidator.php b/framework/Web/UI/WebControls/TBaseValidator.php
index 4ca4c1f6..a63941db 100644
--- a/framework/Web/UI/WebControls/TBaseValidator.php
+++ b/framework/Web/UI/WebControls/TBaseValidator.php
@@ -43,7 +43,7 @@
*
* You can also customized the client-side behaviour by adding javascript
* code to the subproperties of the {@link getClientValidation ClientValidation}
- * property.
+ * property. See quickstart documentation for further details.
*
* You can also place a {@link TValidationSummary} control on a page to display error messages
* from the validators together. In this case, only the {@link setErrorMessage ErrorMessage}
@@ -79,7 +79,9 @@ abstract class TBaseValidator extends TLabel implements IValidator
* @var boolean whether the validator has been registered with the page
*/
private $_registered=false;
-
+ /**
+ * @var TValidatorClientScript validator client-script options.
+ */
private $_clientScript;
/**
@@ -186,7 +188,7 @@ abstract class TBaseValidator extends TLabel implements IValidator
*/
protected function createClientScript()
{
- return new TValidatorClientScript($this->getPage()->getClientScript());
+ return new TValidatorClientScript;
}
/**
@@ -491,7 +493,21 @@ abstract class TBaseValidator extends TLabel implements IValidator
/**
* TValidatorClientScript class.
*
- * @todo Add doc to quickstart and classes.
+ * Client-side validator events can be modified through the {@link
+ * TBaseValidator::getClientValidation ClientValidation} property of a
+ * validator. The subproperties of ClientValidation are those of the
+ * TValidatorClientScript properties. The client-side validator supports the
+ * following events.
+ *
+ * The <tt>OnValidate</tt> event is raise before the validator validation
+ * functions are called.
+ *
+ * The <tt>OnSuccess</tt> event is raised after the validator has successfully
+ * validate the control.
+ *
+ * The <tt>OnError</tt> event is raised after the validator fails validation.
+ *
+ * See the quickstart documentation for further details.
*
* @author Wei Zhuo <weizhuo[at]gmail[dot]com>
* @version $Revision: $ $Date: $
@@ -500,58 +516,95 @@ abstract class TBaseValidator extends TLabel implements IValidator
*/
class TValidatorClientScript extends TComponent
{
+ /**
+ * @var TMap client-side validator event javascript code.
+ */
private $_options;
- private $_manager;
- private $_effectsEnabled = false;
- public function __construct($manager)
+ /**
+ * Constructor.
+ */
+ public function __construct()
{
$this->_options = new TMap;
- $this->_manager = $manager;
}
+ /**
+ * @return string javascript code for client-side OnValidate event.
+ */
public function getOnValidate()
{
return $this->_options->itemAt['OnValidate'];
}
+ /**
+ * Client-side OnValidate validator event is raise before the validators
+ * validation functions are called.
+ * @param string javascript code for client-side OnValidate event.
+ */
public function setOnValidate($javascript)
{
$this->_options->add('OnValidate', $this->ensureFunction($javascript));
}
+ /**
+ * Client-side OnSuccess event is raise after validation is successfull.
+ * This will override the default client-side validator behaviour.
+ * @param string javascript code for client-side OnSuccess event.
+ */
public function setOnSuccess($javascript)
{
$this->_options->add('OnSuccess', $this->ensureFunction($javascript));
}
+ /**
+ * @return string javascript code for client-side OnSuccess event.
+ */
public function getOnSuccess()
{
return $this->_options->itemAt('OnSuccess');
}
+ /**
+ * Client-side OnError event is raised after validation failure.
+ * This will override the default client-side validator behaviour.
+ * @param string javascript code for client-side OnError event.
+ */
public function setOnError($javascript)
{
$this->_options->add('OnError', $this->ensureFunction($javascript));
}
+ /**
+ * @return string javascript code for client-side OnError event.
+ */
public function getOnError()
{
return $this->_options->itemAt('OnError');
}
+ /**
+ * @return array list of client-side event code.
+ */
public function getOptions()
{
return $this->_options->toArray();
}
+ /**
+ * Ensure the string is a valid javascript function. If the string begins
+ * with "javascript:" valid javascript function is assumed, otherwise the
+ * code block is enclosed with "function(validator, sender){ }" block.
+ * @param string javascript code.
+ * @return string javascript function code.
+ */
private function ensureFunction($javascript)
{
if(TJavascript::isFunction($javascript))
return $javascript;
else
{
- $code = "function(validator, invoker){ {$javascript} }";
+ $code = "function(validator, sender){ {$javascript} }";
return TJavascript::quoteFunction($code);
}
}
diff --git a/framework/Web/UI/WebControls/THtmlArea.php b/framework/Web/UI/WebControls/THtmlArea.php
index 8e5fcd16..8b214b69 100644
--- a/framework/Web/UI/WebControls/THtmlArea.php
+++ b/framework/Web/UI/WebControls/THtmlArea.php
@@ -78,44 +78,44 @@ Prado::using('System.Web.UI.WebControls.TTextBox');
*/
class THtmlArea extends TTextBox
{
- // Qiang: need to clean up the following (too inefficient)
+ /**
+ * @var array list of locale => language file pairs.
+ */
private static $_langs = array(
- 'da' => array('da'),
- 'fa' => array('fa'),
- 'hu' => array('hu'),
- 'nb' => array('nb'),
- 'pt_br' => array('pt_BR'),
- 'sk' => array('sk'),
- 'zh_tw_utf8' => array('zh_TW', 'zh_HK'),
- 'ar' => array('ar'),
- 'de' => array('de'),
- 'fi' => array('fi'),
- 'is' => array('is'),
- 'nl' => array('nl'),
- 'sv' => array('sv'),
- 'ca' => array('ca'),
- 'el' => array('el'),
- 'fr' => array('fr'),
- 'it' => array('it'),
- 'nn' => array('nn'), //what is nn?
-// 'ru' => array('ru'),
- 'th' => array('th'),
- 'cs' => array('cs'),
- 'en' => array('en'),
- 'fr_ca' => array('fr_CA'),
- 'ja' => array('ja'),
- 'pl' => array('pl'),
-// 'ru_KOI8-R' => array('ru'), /// what is this?
- 'zh_cn' => array('zh_CN'),
- 'cy' => array('cy'), //what is this?
- 'es' => array('es'),
- 'he' => array('he'),
- 'ko' => array('ko'),
- 'pt' => array('pt'),
- 'ru_UTF-8' => array('ru'),
- 'tr' => array('tr'),
- 'si' => array('si'),
-// 'zh_tw' => array('zh_TW'),
+ 'ar' => 'ar',
+ 'ca' => 'ca',
+ 'cs' => 'cs',
+ 'da' => 'da',
+ 'de' => 'de',
+ 'el' => 'el',
+ 'en' => 'en',
+ 'es' => 'es',
+ 'fa' => 'fa',
+ 'fi' => 'fi',
+ 'fr' => 'fr',
+ 'fr_CA' => 'fr_ca',
+ 'he' => 'he',
+ 'hu' => 'hu',
+ 'is' => 'is',
+ 'it' => 'it',
+ 'ja' => 'ja',
+ 'ko' => 'ko',
+ 'nb' => 'nb',
+ 'nl' => 'nl',
+ 'pl' => 'pl',
+ 'pt' => 'pt',
+ 'pt_BR' => 'pt_br',
+ 'ru' => 'ru_UTF-8',
+ 'si' => 'si',
+ 'sk' => 'sk',
+ 'sv' => 'sv',
+ 'th' => 'th',
+ 'tr' => 'tr',
+ 'vi' => 'vi',
+ 'zh' => 'zh_cn_utf8',
+ 'zh_CN' => 'zh_cn_utf8',
+ 'zh_HK' => 'zh_tw_utf8',
+ 'zh_TW' => 'zh_tw_utf8'
);
/**
@@ -271,9 +271,14 @@ class THtmlArea extends TTextBox
$options['elements'] = $this->getClientID();
$options['language'] = $this->getLanguageSuffix($this->getCulture());
$options['theme'] = 'advanced';
+
+ //make it basic advanced to fit into 1 line of buttons.
+ //$options['theme_advanced_buttons1'] = 'bold,italic,underline,strikethrough,separator,justifyleft,justifycenter,justifyright, justifyfull,separator,bullist,numlist,separator,undo,redo,separator,link,unlink,separator,charmap,separator,code,help';
+ //$options['theme_advanced_buttons2'] = ' ';
$options['theme_advanced_buttons1'] = 'formatselect,fontselect,fontsizeselect,separator,bold,italic,underline,strikethrough,sub,sup';
$options['theme_advanced_buttons2'] = 'justifyleft,justifycenter,justifyright,justifyfull,separator,bullist,numlist,separator,outdent,indent,separator,forecolor,backcolor,separator,hr,link,unlink,image,charmap,separator,removeformat,code,help';
$options['theme_advanced_buttons3'] = ' ';
+
$options['theme_advanced_toolbar_location'] = 'top';
$options['theme_advanced_toolbar_align'] = 'left';
$options['theme_advanced_path_location'] = 'bottom';
@@ -312,22 +317,10 @@ class THtmlArea extends TTextBox
if(!is_null($app))
$variants = $app->getCultureVariants($culture);
- //default the variant to "en"
- if(count($variants) == 0)
- {
- if(empty($culture))
- return 'en';
- $variants[] = strtolower($culture);
- }
-
- // TODO: triple loops???
- foreach(self::$_langs as $js => $langs)
+ foreach($variants as $variant)
{
- foreach($variants as $variant)
- {
- if(in_array($variant, $langs))
- return $js;
- }
+ if(isset(self::$_langs[$variant]))
+ return self::$_langs[$variant];
}
return 'en';
diff --git a/framework/Web/UI/WebControls/TValidationSummary.php b/framework/Web/UI/WebControls/TValidationSummary.php
index 2bc3f62c..aa46142b 100644
--- a/framework/Web/UI/WebControls/TValidationSummary.php
+++ b/framework/Web/UI/WebControls/TValidationSummary.php
@@ -37,6 +37,11 @@
class TValidationSummary extends TWebControl
{
/**
+ * @var TValidatorClientScript validator client-script options.
+ */
+ private $_clientScript;
+
+ /**
* Constructor.
* This method sets the foreground color to red.
*/
@@ -242,10 +247,33 @@ class TValidationSummary extends TWebControl
$options['Refresh'] = $this->getAutoUpdate();
$options['ValidationGroup'] = $this->getValidationGroup();
$options['Display'] = $this->getDisplay();
+
+ if(!is_null($this->_clientScript))
+ $options = array_merge($options,$this->_clientScript->getOptions());
+
return $options;
}
/**
+ * @return TValidationSummaryClientScript client-side validation summary
+ * event options.
+ */
+ public function getClientValidation()
+ {
+ if(is_null($this->_clientScript))
+ $this->_clientScript = $this->createClientScript();
+ return $this->_clientScript;
+ }
+
+ /**
+ * @return TValidationSummaryClientScript javascript validation summary
+ * event options.
+ */
+ protected function createClientScript()
+ {
+ return new TValidationSummaryClientScript;
+ }
+ /**
* Get the list of validation error messages.
* @return array list of validator error messages.
*/
@@ -343,4 +371,105 @@ class TValidationSummary extends TWebControl
}
}
+/**
+ * TValidationSummaryClientScript class.
+ *
+ * Client-side validation summary events such as {@link setOnHideSummary
+ * OnHideSummary} and {@link setOnShowSummary OnShowSummary} can be modified
+ * through the {@link TBaseValidator:: getClientValidation ClientValidation}
+ * property of a validation summary.
+ *
+ * The <tt>OnHideSummary</tt> event is raise when the validation summary
+ * requests to hide the messages.
+ *
+ * The <tt>OnShowSummary</tt> event is raised when the validation summary
+ * requests to show the messages.
+ *
+ * See the quickstart documentation for further details.
+ *
+ * @author Wei Zhuo <weizhuo[at]gmail[dot]com>
+ * @version $Revision: $ $Date: $
+ * @package System.Web.UI.WebControls
+ * @since 3.0
+ */
+class TValidationSummaryClientScript extends TComponent
+{
+ /**
+ * @var TMap client-side validation summary event javascript code.
+ */
+ private $_options;
+
+ /**
+ * Constructor.
+ */
+ public function __construct()
+ {
+ $this->_options = new TMap;
+ }
+
+ /**
+ * @return string javascript code for client-side OnHideSummary event.
+ */
+ public function getOnHideSummary()
+ {
+ return $this->_options->itemAt['OnHideSummary'];
+ }
+
+ /**
+ * Client-side OnHideSummary validation summary event is raise when all the
+ * validators are valid. This will override the default client-side
+ * validation summary behaviour.
+ * @param string javascript code for client-side OnHideSummary event.
+ */
+ public function setOnHideSummary($javascript)
+ {
+ $this->_options->add('OnHideSummary', $this->ensureFunction($javascript));
+ }
+
+ /**
+ * Client-side OnShowSummary event is raise when one or more validators are
+ * not valid. This will override the default client-side validation summary
+ * behaviour.
+ * @param string javascript code for client-side OnShowSummary event.
+ */
+ public function setOnShowSummary($javascript)
+ {
+ $this->_options->add('OnShowSummary', $this->ensureFunction($javascript));
+ }
+
+ /**
+ * @return string javascript code for client-side OnShowSummary event.
+ */
+ public function getOnShowSummary()
+ {
+ return $this->_options->itemAt('OnShowSummary');
+ }
+
+ /**
+ * @return array list of client-side event code.
+ */
+ public function getOptions()
+ {
+ return $this->_options->toArray();
+ }
+
+ /**
+ * Ensure the string is a valid javascript function. If the string begins
+ * with "javascript:" valid javascript function is assumed, otherwise the
+ * code block is enclosed with "function(summary, validators){ }" block.
+ * @param string javascript code.
+ * @return string javascript function code.
+ */
+ private function ensureFunction($javascript)
+ {
+ if(TJavascript::isFunction($javascript))
+ return $javascript;
+ else
+ {
+ $code = "function(summary, validators){ {$javascript} }";
+ return TJavascript::quoteFunction($code);
+ }
+ }
+}
+
?> \ No newline at end of file