summaryrefslogtreecommitdiff
path: root/framework/zii/widgets/jui/CJuiButton.php
diff options
context:
space:
mode:
Diffstat (limited to 'framework/zii/widgets/jui/CJuiButton.php')
-rw-r--r--framework/zii/widgets/jui/CJuiButton.php184
1 files changed, 184 insertions, 0 deletions
diff --git a/framework/zii/widgets/jui/CJuiButton.php b/framework/zii/widgets/jui/CJuiButton.php
new file mode 100644
index 0000000..f8859f8
--- /dev/null
+++ b/framework/zii/widgets/jui/CJuiButton.php
@@ -0,0 +1,184 @@
+<?php
+/**
+ * CJuiButton class file.
+ *
+ * @author Sebastian Thierer <sebas@artfos.com>
+ * @link http://www.yiiframework.com/
+ * @copyright Copyright &copy; 2008-2011 Yii Software LLC
+ * @license http://www.yiiframework.com/license/
+ */
+
+Yii::import('zii.widgets.jui.CJuiInputWidget');
+
+/**
+ * CJuiButton displays a button widget.
+ *
+ * CJuiButton encapsulates the {@link http://jqueryui.com/demos/button/ JUI Button}
+ * plugin.
+ *
+ * To use this widget as a submit button, you may insert the following code in a view:
+ * <pre>
+ * $this->widget('zii.widgets.jui.CJuiButton', array(
+ * 'name'=>'submit',
+ * 'caption'=>'Save',
+ * 'options'=>array(
+ * 'onclick'=>'js:function(){alert("Yes");}',
+ * ),
+ * ));
+ * </pre>
+ *
+ * To use this widget as a button, you may insert the following code in a view:
+ * <pre>
+ * $this->widget('zii.widgets.jui.CJuiButton',
+ * array(
+ * 'name'=>'button',
+ * 'caption'=>'Save',
+ * 'value'=>'asd',
+ * 'onclick'=>'js:function(){alert("Save button clicked"); this.blur(); return false;}',
+ * )
+ * );
+ * </pre>
+ *
+ * By configuring the {@link options} property, you may specify the options
+ * that need to be passed to the JUI button plugin. Please refer to
+ * the {@link http://jqueryui.com/demos/button/ JUI Button} documentation
+ * for possible options (name-value pairs).
+ *
+ * @author Sebastian Thierer <sebathi@gmail.com>
+ * @version $Id: CJuiButton.php 2799 2011-01-01 19:31:13Z qiang.xue $
+ * @package zii.widgets.jui
+ * @since 1.1.3
+ */
+class CJuiButton extends CJuiInputWidget
+{
+ /**
+ * @var string The button type (possible types: submit, button, link, radio, checkbox, buttonset).
+ * "submit" is used as default.
+ */
+ public $buttonType = 'submit';
+
+ /**
+ * @var string The default html tag for the buttonset
+ */
+ public $htmlTag = 'div';
+ /**
+ * @var string The url used when a buttonType "link" is selected.
+ */
+ public $url = null;
+
+ /**
+ * @var mixed The value of the current item. Used only for "radio" and "checkbox"
+ */
+ public $value;
+
+ /**
+ * @var string The button text
+ */
+ public $caption="";
+ /**
+ * @var string The javascript function to be raised when this item is clicked (client event).
+ */
+ public $onclick;
+
+ /**
+ * (non-PHPdoc)
+ * @see framework/zii/widgets/jui/CJuiWidget::init()
+ */
+ public function init(){
+ parent::init();
+ if ($this->buttonType=='buttonset')
+ {
+ list($name,$id)=$this->resolveNameID();
+
+ if(isset($this->htmlOptions['id']))
+ $id=$this->htmlOptions['id'];
+ else
+ $this->htmlOptions['id']=$id;
+ if(isset($this->htmlOptions['name']))
+ $name=$this->htmlOptions['name'];
+ else
+ $this->htmlOptions['name']=$name;
+
+ echo CHtml::openTag($this->htmlTag, $this->htmlOptions);
+ }
+ }
+
+ /**
+ * (non-PHPdoc)
+ * @see framework/CWidget::run()
+ */
+ public function run()
+ {
+ $cs = Yii::app()->getClientScript();
+ list($name,$id)=$this->resolveNameID();
+
+ if(isset($this->htmlOptions['id']))
+ $id=$this->htmlOptions['id'];
+ else
+ $this->htmlOptions['id']=$id;
+ if(isset($this->htmlOptions['name']))
+ $name=$this->htmlOptions['name'];
+ else
+ $this->htmlOptions['name']=$name;
+
+ if ($this->buttonType=='buttonset')
+ {
+ echo CHtml::closeTag($this->htmlTag);
+ $cs->registerScript(__CLASS__.'#'.$id,"jQuery('#{$id}').buttonset();");
+ }
+ else
+ {
+ switch($this->buttonType)
+ {
+ case 'submit':
+ echo CHtml::submitButton($this->caption, $this->htmlOptions) . "\n";
+ break;
+ case 'button':
+ echo CHtml::htmlButton($this->caption, $this->htmlOptions) . "\n";
+ break;
+ case 'link':
+ echo CHtml::link($this->caption, $this->url, $this->htmlOptions) . "\n";
+ break;
+ case 'radio':
+ if ($this->hasModel())
+ {
+ echo CHtml::activeRadioButton($this->model, $this->attribute, $this->htmlOptions);
+ echo CHtml::label($this->caption, CHtml::activeId($this->model, $this->attribute)) . "\n";
+ }
+ else
+ {
+ echo CHtml::radioButton($name, $this->value, $this->htmlOptions);
+ echo CHtml::label($this->caption, $id) . "\n";
+ }
+ break;
+ case 'checkbox':
+ if ($this->hasModel())
+ {
+ echo CHtml::activeCheckbox($this->model, $this->attribute, $this->htmlOptions);
+ echo CHtml::label($this->caption, CHtml::activeId($this->model, $this->attribute)) . "\n";
+ }
+ else
+ {
+ echo CHtml::checkbox($name, $this->value, $this->htmlOptions);
+ echo CHtml::label($this->caption, $id) . "\n";
+ }
+ break;
+ default:
+ throw new CException(Yii::t('zii','The button type "{type}" is not supported.',array('{type}'=>$this->buttonType)));
+ }
+
+ $options=empty($this->options) ? '' : CJavaScript::encode($this->options);
+ if (isset($this->onclick))
+ {
+ if(strpos($this->onclick,'js:')!==0)
+ $this->onclick='js:'.$this->onclick;
+ $click = CJavaScript::encode($this->onclick);
+ $cs->registerScript(__CLASS__.'#'.$id,"jQuery('#{$id}').button($options).click($click);");
+ }
+ else
+ {
+ $cs->registerScript(__CLASS__.'#'.$id,"jQuery('#{$id}').button($options);");
+ }
+ }
+ }
+}