summaryrefslogtreecommitdiff
path: root/framework/Web/UI
diff options
context:
space:
mode:
authorwei <>2006-05-07 09:47:15 +0000
committerwei <>2006-05-07 09:47:15 +0000
commit12c16fb3c7314b51d74dcaffdca4d311c6fad8c0 (patch)
treeef82b73e3a2fa5f8f313a43ce3dcaaf39f569d8f /framework/Web/UI
parenta7f6c6640ac9295eec3ae2edbb2250179eb85e33 (diff)
Adding TAutoComplete
Diffstat (limited to 'framework/Web/UI')
-rw-r--r--framework/Web/UI/ActiveControls/TActiveControlAdapter.php4
-rw-r--r--framework/Web/UI/ActiveControls/TActivePageAdapter.php2
-rw-r--r--framework/Web/UI/ActiveControls/TAutoComplete.php186
-rw-r--r--framework/Web/UI/ActiveControls/TCallbackResponse.php13
4 files changed, 200 insertions, 5 deletions
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 @@
+<?php
+/*
+ * Created on 7/05/2006
+ */
+
+class TAutoComplete extends TActiveTextBox implements ICallbackEventHandler, INamingContainer
+{
+ /**
+ * @var ITemplate template for repeater items
+ */
+ private $_repeater=null;
+ private $_resultPanel=null;
+
+ public function setDataSource($data)
+ {
+ $this->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('<ul>'));
+ $repeater->setFooterTemplate(new TAutoCompleteTemplate('</ul>'));
+ $repeater->setItemTemplate(new TTemplate('<li><%# $this->DataItem %></li>',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 <weizhuo[at]gmail[dot]com>
+ * @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 <qiang.xue@gmail.com>
+ * @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;