diff options
| author | wei <> | 2006-05-07 09:47:15 +0000 | 
|---|---|---|
| committer | wei <> | 2006-05-07 09:47:15 +0000 | 
| commit | 12c16fb3c7314b51d74dcaffdca4d311c6fad8c0 (patch) | |
| tree | ef82b73e3a2fa5f8f313a43ce3dcaaf39f569d8f /framework/Web/UI/ActiveControls | |
| parent | a7f6c6640ac9295eec3ae2edbb2250179eb85e33 (diff) | |
Adding TAutoComplete
Diffstat (limited to 'framework/Web/UI/ActiveControls')
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;
  | 
