summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJens Klaer <kj.landwehr.software@gmail.com>2015-10-22 10:48:13 +0200
committerJens Klaer <kj.landwehr.software@gmail.com>2015-10-22 10:48:13 +0200
commitfd76b5617e3c136be2f8b5374e7629d2bea77070 (patch)
tree719eff831c25b0e557b321ed826b6d6365496b64
parenta262ce578b6584ab71421a7fb59d506848f60683 (diff)
extended ISurroundable to provide the surrounding tag in addition to the id
- ISurroundable introducing getSurroundingTag(), adjusted controls implementing the interface - TActiveDataGrid/TActiveRepeater now support changing the container tag to avoid invalid html in specific situations - revised corresponding quickstart demos
-rwxr-xr-xdemos/quickstart/protected/pages/ActiveControls/Samples/TActiveRepeater/Home.page8
-rwxr-xr-xdemos/quickstart/protected/pages/ActiveControls/Samples/TActiveRepeater/Home.php1
-rw-r--r--framework/Web/UI/ActiveControls/TActiveDataGrid.php35
-rw-r--r--framework/Web/UI/ActiveControls/TActiveRepeater.php40
-rw-r--r--framework/Web/UI/TControl.php10
-rw-r--r--framework/Web/UI/WebControls/TCheckBox.php22
6 files changed, 90 insertions, 26 deletions
diff --git a/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveRepeater/Home.page b/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveRepeater/Home.page
index 546166eb..7b0b4c2b 100755
--- a/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveRepeater/Home.page
+++ b/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveRepeater/Home.page
@@ -6,6 +6,8 @@
The following example allows users to modify the existing tabular data using a <tt>TActiveRepeater</tt>. Two validators are used in the repeater to ensure the validity of user inputs. One is to ensure product names are not empty, the other ensures product prices are valid numeric format. After clicking on the <tt>save</tt> button, the input data is displayed in a table at the bottom of the page.
</p>
+<com:TActiveRepeater ID="Repeater" OnItemDataBound="repeaterDataBound">
+<prop:HeaderTemplate>
<table>
<tr>
<th>Name</th>
@@ -13,7 +15,7 @@ The following example allows users to modify the existing tabular data using a <
<th>Price</th>
<th>Imported</th>
</tr>
-<com:TActiveRepeater ID="Repeater" OnItemDataBound="repeaterDataBound">
+</prop:HeaderTemplate>
<prop:ItemTemplate>
<tr>
<td>
@@ -47,8 +49,10 @@ The following example allows users to modify the existing tabular data using a <
</td>
</tr>
</prop:ItemTemplate>
-</com:TActiveRepeater>
+<prop:FooterTemplate>
</table>
+</prop:FooterTemplate>
+</com:TActiveRepeater>
<div>
<com:TActiveButton Text="Save" OnClick="saveInput"/>
diff --git a/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveRepeater/Home.php b/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveRepeater/Home.php
index 57e75d72..138118ed 100755
--- a/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveRepeater/Home.php
+++ b/demos/quickstart/protected/pages/ActiveControls/Samples/TActiveRepeater/Home.php
@@ -60,6 +60,7 @@ class Home extends TPage
$data=array();
foreach($this->Repeater->Items as $item)
{
+ if($item->getItemType()!=TListItemType::Item && $item->getItemType()!=TListItemType::AlternatingItem) continue;
$item=array(
'id'=>$products[$index]['id'],
'name'=>$item->ProductName->Text,
diff --git a/framework/Web/UI/ActiveControls/TActiveDataGrid.php b/framework/Web/UI/ActiveControls/TActiveDataGrid.php
index bb5f6c0f..2f23c49f 100644
--- a/framework/Web/UI/ActiveControls/TActiveDataGrid.php
+++ b/framework/Web/UI/ActiveControls/TActiveDataGrid.php
@@ -54,6 +54,11 @@ Prado::using('System.Web.UI.WebControls.TCheckBoxColumn');
*/
class TActiveDataGrid extends TDataGrid implements IActiveControl, ISurroundable {
+ /**
+ * @var string the tag used to render the surrounding container
+ */
+ protected $_surroundingTag='div';
+
/**
* @return string Name of the class used in AutoGenerateColumns mode
*/
@@ -94,11 +99,27 @@ class TActiveDataGrid extends TDataGrid implements IActiveControl, ISurroundable
}
/**
- * Returns the id of the surrounding container (div).
+ * Gets the tag used to render the surrounding container. Defaults to 'div'.
+ * @return string container tag
+ */
+ public function getSurroundingTag() {
+ return $this->_surroundingTag;
+ }
+
+ /**
+ * Sets the tag used to render the surrounding container.
+ * @param string $value container tag
+ */
+ public function setSurroundingTag($value) {
+ $this->_surroundingTag=TPropertyValue::ensureString($value);
+ }
+
+ /**
+ * Returns the id of the surrounding container.
* @return string container id
*/
public function getSurroundingTagID() {
- return $this->ClientID.'_Container';
+ return $this->getClientID().'_Container';
}
/**
@@ -181,14 +202,16 @@ class TActiveDataGrid extends TDataGrid implements IActiveControl, ISurroundable
}
/**
- * Renders the datagrid by writing a div tag with the container id obtained from {@link getSurroundingTagId()}
- * which will be called by the replacement method of the client script to update it's content.
+ * Renders the datagrid by writing a {@link getSurroundingTag()} with the container id obtained
+ * from {@link getSurroundingTagId()} which will be called by the replacement method of the client
+ * script to update it's content.
* @param THtmlWriter writer for the rendering purpose
*/
private function renderDataGrid($writer) {
- $writer->write('<div id="'.$this->getSurroundingTagId().'">');
+ $writer->addAttribute('id',$this->getSurroundingTagID());
+ $writer->renderBeginTag($this->getSurroundingTag());
parent::render($writer);
- $writer->write('</div>');
+ $writer->renderEndTag();
}
}
diff --git a/framework/Web/UI/ActiveControls/TActiveRepeater.php b/framework/Web/UI/ActiveControls/TActiveRepeater.php
index 08aeefab..ad97d30d 100644
--- a/framework/Web/UI/ActiveControls/TActiveRepeater.php
+++ b/framework/Web/UI/ActiveControls/TActiveRepeater.php
@@ -25,10 +25,15 @@
*/
class TActiveRepeater extends TRepeater implements IActiveControl, ISurroundable {
-/**
- * Creates a new callback control, sets the adapter to
- * TActiveControlAdapter.
- */
+ /**
+ * @var string the tag used to render the surrounding container
+ */
+ protected $_surroundingTag='div';
+
+ /**
+ * Creates a new callback control, sets the adapter to
+ * TActiveControlAdapter.
+ */
public function __construct() {
parent::__construct();
$this->setAdapter(new TActiveControlAdapter($this));
@@ -57,11 +62,27 @@ class TActiveRepeater extends TRepeater implements IActiveControl, ISurroundable
}
/**
- * Returns the id of the surrounding container (span).
+ * Gets the tag used to render the surrounding container. Defaults to 'div'.
+ * @return string container tag
+ */
+ public function getSurroundingTag() {
+ return $this->_surroundingTag;
+ }
+
+ /**
+ * Sets the tag used to render the surrounding container.
+ * @param string $value container tag
+ */
+ public function setSurroundingTag($value) {
+ $this->_surroundingTag=TPropertyValue::ensureString($value);
+ }
+
+ /**
+ * Returns the id of the surrounding container.
* @return string container id
*/
public function getSurroundingTagID() {
- return $this->ClientID.'_Container';
+ return $this->getClientID().'_Container';
}
/**
@@ -96,13 +117,14 @@ class TActiveRepeater extends TRepeater implements IActiveControl, ISurroundable
}
/**
- * Renders the repeater by writing a span tag with the container id obtained from {@link getSurroundingTagID()}
- * which will be called by the replacement method of the client script to update it's content.
+ * Renders the repeater by writing a {@link getSurroundingTag()} with the container id obtained
+ * from {@link getSurroundingTagID()} which will be called by the replacement method of the client
+ * script to update it's content.
* @param THtmlWriter writer for the rendering purpose
*/
private function renderRepeater($writer) {
$writer->addAttribute('id',$this->getSurroundingTagID());
- $writer->renderBeginTag('span');
+ $writer->renderBeginTag($this->getSurroundingTag());
parent::render($writer);
$writer->renderEndTag();
}
diff --git a/framework/Web/UI/TControl.php b/framework/Web/UI/TControl.php
index f12504be..eb5c016e 100644
--- a/framework/Web/UI/TControl.php
+++ b/framework/Web/UI/TControl.php
@@ -2142,7 +2142,8 @@ interface IButtonControl
* ISurroundable interface
*
* Identifies controls that may create an additional surrounding tag. The id of the
- * tag can be obtained with {@link getSurroundingTagID}.
+ * tag can be obtained with {@link getSurroundingTagID}, the tag used to render the
+ * surrounding container is obtained by {@link getSurroundingTag}.
*
* @package System.Web.UI
* @since 3.1.2
@@ -2150,7 +2151,12 @@ interface IButtonControl
interface ISurroundable
{
/**
- * @return string the id of the embedding tag of the control or the control's clientID if not surrounded
+ * @return string the tag used to wrap the control in (if surrounding is needed).
+ */
+ public function getSurroundingTag();
+
+ /**
+ * @return string the id of the embedding tag of the control or the control's clientID if not surrounded.
*/
public function getSurroundingTagID();
}
diff --git a/framework/Web/UI/WebControls/TCheckBox.php b/framework/Web/UI/WebControls/TCheckBox.php
index a28beac7..672aa9b2 100644
--- a/framework/Web/UI/WebControls/TCheckBox.php
+++ b/framework/Web/UI/WebControls/TCheckBox.php
@@ -284,11 +284,19 @@ class TCheckBox extends TWebControl implements IPostBackDataHandler, IValidatabl
}
/**
- * @return string the id of the surrounding tag or this clientID if no such tag needed
+ * @return string the tag used to wrap the control in.
+ */
+ public function getSurroundingTag()
+ {
+ return 'span';
+ }
+
+ /**
+ * @return string the id of the surrounding tag or this clientID if no such tag needed.
*/
public function getSurroundingTagID()
{
- return $this->getSpanNeeded() ? $this->getClientID().'_parent' : $this->getClientID();
+ return $this->getSpanNeeded() ? $this->getClientID().'_parent' : $this->getClientID();
}
/**
@@ -318,11 +326,11 @@ class TCheckBox extends TWebControl implements IPostBackDataHandler, IValidatabl
}
else
$onclick='';
- if($needspan=$this->getSpanNeeded())
- {
- $writer->addAttribute('id',$this->getSurroundingTagID());
- $writer->renderBeginTag('span');
- }
+ if($needspan=$this->getSpanNeeded())
+ {
+ $writer->addAttribute('id',$this->getSurroundingTagID());
+ $writer->renderBeginTag($this->getSurroundingTag());
+ }
$clientID=$this->getClientID();
if(($text=$this->getText())!=='')
{