summaryrefslogtreecommitdiff
path: root/framework/Web/UI/ActiveControls/TAutoComplete.php
diff options
context:
space:
mode:
Diffstat (limited to 'framework/Web/UI/ActiveControls/TAutoComplete.php')
-rw-r--r--framework/Web/UI/ActiveControls/TAutoComplete.php186
1 files changed, 186 insertions, 0 deletions
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