123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174 |
- <?php
- /**
- * CJuiButton class file.
- *
- * @author Sebastian Thierer <sebas@artfos.com>
- * @link http://www.yiiframework.com/
- * @copyright 2008-2013 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/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(
- * 'buttonType'=>'submit',
- * 'name'=>'btnSubmit',
- * 'value'=>'1',
- * 'caption'=>'Submit form',
- * 'htmlOptions'=>array('class'=>'ui-button-primary')
- * ),
- * ));
- * </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(
- * 'buttonType'=>'button',
- * 'name'=>'btnSave',
- * 'caption'=>'Save',
- * 'onclick'=>new CJavaScriptExpression('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://api.jqueryui.com/button/ JUI Button API} documentation
- * for possible options (name-value pairs) and
- * {@link http://jqueryui.com/button/ JUI Button page} for general description
- * and demo.
- *
- * @author Sebastian Thierer <sebathi@gmail.com>
- * @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 mixed a URL or an action route that can be used to create a URL. Used when a buttonType "link" is selected.
- * See {@link normalizeUrl} for more details about how to specify this parameter.
- */
- 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')
- {
- if(!isset($this->htmlOptions['id']))
- $this->htmlOptions['id']=$this->getId();
- 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=CJavaScript::encode($this->options);
- if($this->onclick!==null)
- {
- if(!($this->onclick instanceof CJavaScriptExpression))
- $this->onclick=new CJavaScriptExpression($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);");
- }
- }
- }
|