You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							123 lines
						
					
					
						
							3.0 KiB
						
					
					
				
			
		
		
	
	
							123 lines
						
					
					
						
							3.0 KiB
						
					
					
				<?php | 
						|
/** | 
						|
 * @link http://www.yiiframework.com/ | 
						|
 * @copyright Copyright (c) 2008 Yii Software LLC | 
						|
 * @license http://www.yiiframework.com/license/ | 
						|
 */ | 
						|
 | 
						|
namespace yii\bootstrap; | 
						|
 | 
						|
use Yii; | 
						|
use yii\base\View; | 
						|
 | 
						|
 | 
						|
/** | 
						|
 * Bootstrap is the base class for bootstrap widgets. | 
						|
 * | 
						|
 * @author Antonio Ramirez <amigo.cobos@gmail.com> | 
						|
 * @since 2.0 | 
						|
 */ | 
						|
class Widget extends \yii\base\Widget | 
						|
{ | 
						|
 | 
						|
	/** | 
						|
	 * @var bool whether to register the asset | 
						|
	 */ | 
						|
	public static $responsive = true; | 
						|
 | 
						|
	/** | 
						|
	 * @var array the HTML attributes for the widget container tag. | 
						|
	 */ | 
						|
	public $options = array(); | 
						|
 | 
						|
	/** | 
						|
	 * Initializes the widget. | 
						|
	 */ | 
						|
	public function init() | 
						|
	{ | 
						|
		// ensure bundle | 
						|
		$this->registerBundle(static::$responsive); | 
						|
	} | 
						|
 | 
						|
	/** | 
						|
	 * Registers plugin events with the API. | 
						|
	 * @param string $selector the CSS selector. | 
						|
	 * @param string[] $events  the JavaScript event configuration (name=>handler). | 
						|
	 * @return boolean whether the events were registered. | 
						|
	 * @todo To be discussed | 
						|
	 */ | 
						|
	protected function registerEvents($selector, $events = array()) | 
						|
	{ | 
						|
		if (empty($events)) | 
						|
			return; | 
						|
 | 
						|
		$script = ''; | 
						|
		foreach ($events as $name => $handler) { | 
						|
			$handler = ($handler instanceof JsExpression) | 
						|
				? $handler | 
						|
				: new JsExpression($handler); | 
						|
 | 
						|
			$script .= ";jQuery('{$selector}').on('{$name}', {$handler});"; | 
						|
		} | 
						|
		if (!empty($script)) | 
						|
			$this->view->registerJs($script); | 
						|
	} | 
						|
 | 
						|
	/** | 
						|
	 * Registers a specific Bootstrap plugin using the given selector and options. | 
						|
	 * | 
						|
	 * @param string $name the name of the javascript widget to initialize | 
						|
	 * @param array $options the Javascript options for the plugin | 
						|
	 */ | 
						|
	public function registerPlugin($name, $options = array()) | 
						|
	{ | 
						|
		$selector = '#' . ArrayHelper::getValue($this->options, 'id'); | 
						|
		$options = !empty($options) ? Json::encode($options) : ''; | 
						|
		$script = ";jQuery('{$selector}').{$name}({$options});"; | 
						|
		$this->view->registerJs($script); | 
						|
	} | 
						|
 | 
						|
	/** | 
						|
	 * Registers bootstrap bundle | 
						|
	 * @param bool $responsive | 
						|
	 */ | 
						|
	public function registerBundle($responsive = false) | 
						|
	{ | 
						|
		$bundle = $responsive ? 'yii/bootstrap-responsive' : 'yii/bootstrap'; | 
						|
		$this->view->registerAssetBundle($bundle); | 
						|
	} | 
						|
 | 
						|
 | 
						|
	/** | 
						|
	 * Adds a new class to options. If the class key does not exists, it will create one, if it exists it will append | 
						|
	 * the value and also makes sure the uniqueness of them. | 
						|
	 * | 
						|
	 * @param string $class | 
						|
	 * @return array | 
						|
	 */ | 
						|
	protected function addClassName($class) | 
						|
	{ | 
						|
		if (isset($this->options['class'])) { | 
						|
			if (!is_array($this->options['class'])) | 
						|
				$this->options['class'] = explode(' ', $this->options['class']); | 
						|
			$this->options['class'][] = $class; | 
						|
			$this->options['class'] = array_unique($this->options['class']); | 
						|
			$this->options['class'] = implode(' ', $this->options['class']); | 
						|
		} else | 
						|
			$this->options['class'] = $class; | 
						|
		return $this->options; | 
						|
	} | 
						|
 | 
						|
	/** | 
						|
	 * Sets the default value for an item if not set. | 
						|
	 * @param string $key the name of the item. | 
						|
	 * @param mixed $value the default value. | 
						|
	 * @return array | 
						|
	 */ | 
						|
	protected function defaultOption($key, $value) | 
						|
	{ | 
						|
		if (!isset($this->options[$key])) | 
						|
			$this->options[$key] = $value; | 
						|
		return $this->options; | 
						|
	} | 
						|
} |