From 12c16fb3c7314b51d74dcaffdca4d311c6fad8c0 Mon Sep 17 00:00:00 2001
From: wei <>
Date: Sun, 7 May 2006 09:47:15 +0000
Subject: Adding TAutoComplete
---
.../UI/ActiveControls/TActiveControlAdapter.php | 4 +-
.../Web/UI/ActiveControls/TActivePageAdapter.php | 2 +-
framework/Web/UI/ActiveControls/TAutoComplete.php | 186 +++++++++++++++++++++
.../Web/UI/ActiveControls/TCallbackResponse.php | 13 +-
4 files changed, 200 insertions(+), 5 deletions(-)
create mode 100644 framework/Web/UI/ActiveControls/TAutoComplete.php
(limited to 'framework/Web/UI')
diff --git a/framework/Web/UI/ActiveControls/TActiveControlAdapter.php b/framework/Web/UI/ActiveControls/TActiveControlAdapter.php
index 2409d9fe..1cdd5d73 100644
--- a/framework/Web/UI/ActiveControls/TActiveControlAdapter.php
+++ b/framework/Web/UI/ActiveControls/TActiveControlAdapter.php
@@ -14,9 +14,11 @@ class TActiveControlAdapter extends TControlAdapter
{
if(!self::$_renderedPosts)
{
+ $cs = $this->getPage()->getClientScript();
+ $cs->registerPradoScript('ajax');
$options = TJavascript::encode($this->getPage()->getPostDataLoaders(),false);
$script = "Prado.CallbackRequest.PostDataLoaders = {$options};";
- $this->getPage()->getClientScript()->registerEndScript(get_class($this), $script);
+ $cs->registerEndScript(get_class($this), $script);
self::$_renderedPosts = true;
}
parent::render($writer);
diff --git a/framework/Web/UI/ActiveControls/TActivePageAdapter.php b/framework/Web/UI/ActiveControls/TActivePageAdapter.php
index 11c3303e..e92c9cdc 100644
--- a/framework/Web/UI/ActiveControls/TActivePageAdapter.php
+++ b/framework/Web/UI/ActiveControls/TActivePageAdapter.php
@@ -257,7 +257,7 @@ class TCallbackEventParameter extends TEventParameter
*/
public function getOutput()
{
- return $this->_response->createHtmlWriter();
+ return $this->_response->createHtmlWriter(null,$this);
}
/**
diff --git a/framework/Web/UI/ActiveControls/TAutoComplete.php b/framework/Web/UI/ActiveControls/TAutoComplete.php
new file mode 100644
index 00000000..2ebba495
--- /dev/null
+++ b/framework/Web/UI/ActiveControls/TAutoComplete.php
@@ -0,0 +1,186 @@
+getSuggestions()->setDataSource($data);
+ }
+
+ public function getResultPanel()
+ {
+ if(is_null($this->_resultPanel))
+ $this->_resultPanel = $this->createResultPanel();
+ return $this->_resultPanel;
+ }
+
+ protected function createResultPanel()
+ {
+ $panel = Prado::createComponent('System.Web.UI.WebControls.TPanel');
+ $this->getControls()->add($panel);
+ $panel->setID('result');
+ return $panel;
+ }
+
+ /**
+ * @return TRepeater suggestion list repeater
+ */
+ public function getSuggestions()
+ {
+ if(is_null($this->_repeater))
+ $this->_repeater = $this->createRepeater();
+ return $this->_repeater;
+ }
+
+ /**
+ *
+ */
+ protected function createRepeater()
+ {
+ $repeater = Prado::createComponent('System.Web.UI.WebControls.TRepeater');
+ $repeater->setHeaderTemplate(new TAutoCompleteTemplate('
'));
+ $repeater->setFooterTemplate(new TAutoCompleteTemplate('
'));
+ $repeater->setItemTemplate(new TTemplate('<%# $this->DataItem %>',null));
+ $this->getControls()->add($repeater);
+ return $repeater;
+ }
+
+ /**
+ * @return TCallbackClientSideOptions callback client-side options.
+ */
+ protected function createClientSideOptions()
+ {
+ $options = new TAutoCompleteClientSideOptions;
+ $options->setEnablePageStateUpdate(false);
+ return $options;
+ }
+
+ public function renderEndTag($writer)
+ {
+ $this->getPage()->getClientScript()->registerPradoScript('effects');
+ parent::renderEndTag($writer);
+ $this->renderResultPanel($writer);
+ }
+
+ public function renderResultPanel($writer)
+ {
+ $this->getResultPanel()->render($writer);
+ }
+
+ public function render($writer)
+ {
+ if($this->canUpdateClientSide())
+ {
+ $this->getSuggestions()->render($writer);
+ $boundary = $writer->getWriter()->getBoundary();
+ $writer->getWriter()->getResponse()->setData($boundary);
+ }
+ else
+ parent::render($writer);
+ }
+
+ /**
+ * @return array list of callback options.
+ */
+ protected function getCallbackOptions()
+ {
+ $options = $this->getClientSide()->getOptions()->toArray();
+ if($this->getAutoPostBack())
+ $options = array_merge($options,$this->getPostBackOptions());
+ $options['ResultPanel'] = $this->getResultPanel()->getClientID();
+ $options['ID'] = $this->getClientID();
+ $options['EventTarget'] = $this->getUniqueID();
+ return $options;
+ }
+
+ /**
+ * Adds attribute name-value pairs to renderer.
+ * This method overrides the parent implementation with additional textbox specific attributes.
+ * @param THtmlWriter the writer used for the rendering purpose
+ */
+ protected function addAttributesToRender($writer)
+ {
+ parent::addAttributesToRender($writer);
+ $this->renderClientControlScript($writer);
+ }
+
+}
+
+/**
+ * Client-side options for TAutoComplete.
+ *
+ * @author Wei Zhuo
+ * @version $Revision: $ $Date: $
+ * @package System.Web.UI.ActiveControls
+ * @since 3.0
+ */
+class TAutoCompleteClientSideOptions extends TCallbackClientSideOptions
+{
+ public function getSeparator()
+ {
+ return $this->getOption('tokens');
+ }
+
+ public function setSeparator($value)
+ {
+ $this->setOption('tokens', $chars = preg_split('//', $value, -1, PREG_SPLIT_NO_EMPTY));
+ }
+
+ public function getFrequency()
+ {
+ return $this->getOption('frequency');
+ }
+
+ public function setFrequency($value)
+ {
+ $this->setOption('frequency', TPropertyValue::ensureFloat($value));
+ }
+
+ public function getMinChars()
+ {
+ return $this->getOption('minChars');
+ }
+
+ public function setMinChars($value)
+ {
+ $this->setOption('minChars', TPropertyValue::ensureInteger($value));
+ }
+}
+
+/**
+ * TWizardSideBarTemplate class.
+ * TWizardSideBarTemplate is the default template for wizard sidebar.
+ * @author Qiang Xue
+ * @version $Revision: $ $Date: $
+ * @package System.Web.UI.WebControls
+ * @since 3.0
+ */
+class TAutoCompleteTemplate extends TComponent implements ITemplate
+{
+ private $_template;
+
+ public function __construct($template)
+ {
+ $this->_template = $template;
+ }
+ /**
+ * Instantiates the template.
+ * It creates a {@link TDataList} control.
+ * @param TControl parent to hold the content within the template
+ */
+ public function instantiateIn($parent)
+ {
+ $parent->getControls()->add($this->_template);
+ }
+}
+
+?>
\ No newline at end of file
diff --git a/framework/Web/UI/ActiveControls/TCallbackResponse.php b/framework/Web/UI/ActiveControls/TCallbackResponse.php
index 024ad6ef..b28d817b 100644
--- a/framework/Web/UI/ActiveControls/TCallbackResponse.php
+++ b/framework/Web/UI/ActiveControls/TCallbackResponse.php
@@ -7,9 +7,9 @@ class TCallbackResponse extends THttpResponse
{
private $_writers=array();
- public function createHtmlWriter($type=null)
+ public function createHtmlWriter($type=null,$parameter=null)
{
- $writer = new TCallbackResponseWriter();
+ $writer = new TCallbackResponseWriter($parameter);
$this->_writers[] = $writer;
if($type===null)
$type=$this->getHtmlWriterType();
@@ -27,12 +27,19 @@ class TCallbackResponse extends THttpResponse
class TCallbackResponseWriter extends TTextWriter
{
private $_boundary;
+ private $_response;
- public function __construct()
+ public function __construct($response)
{
+ $this->_response = $response;
$this->_boundary = sprintf('%x',crc32((string)$this));
}
+ public function getResponse()
+ {
+ return $this->_response;
+ }
+
public function getBoundary()
{
return $this->_boundary;
--
cgit v1.2.3