18 changed files with 1022 additions and 0 deletions
			
			
		| @ -0,0 +1,26 @@ | |||||||
|  | <?php | ||||||
|  | /** | ||||||
|  |  * @copyright Copyright (c) 2008 Yii Software LLC | ||||||
|  |  * @link http://www.yiiframework.com/ | ||||||
|  |  * @license http://www.yiiframework.com/license/ | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | namespace yii\bootstrap\enum; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * AlertEnum provides easy access to all predefined alert set of named values | ||||||
|  |  * | ||||||
|  |  * @author Antonio Ramirez <amigo.cobos@gmail.com> | ||||||
|  |  * @since 2.0 | ||||||
|  |  */ | ||||||
|  | class AlertEnum | ||||||
|  | { | ||||||
|  | 	const CLASS_NAME = 'alert'; | ||||||
|  | 
 | ||||||
|  | 	const TYPE_DEFAULT = ''; | ||||||
|  | 	const TYPE_SUCCESS = 'alert-success'; | ||||||
|  | 	const TYPE_INFORMATION = 'alert-info'; | ||||||
|  | 	const TYPE_ERROR = 'alert-error'; | ||||||
|  | 
 | ||||||
|  | 	const SIZE_BLOCK = 'alert-block'; | ||||||
|  | } | ||||||
| @ -0,0 +1,26 @@ | |||||||
|  | <?php | ||||||
|  | /** | ||||||
|  |  * @copyright Copyright (c) 2008 Yii Software LLC | ||||||
|  |  * @link http://www.yiiframework.com/ | ||||||
|  |  * @license http://www.yiiframework.com/license/ | ||||||
|  |  */ | ||||||
|  | namespace yii\bootstrap\enum; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * BootstrapEnum provides bootstrap shared predefined set of named values. | ||||||
|  |  * | ||||||
|  |  * @author Antonio Ramirez <amigo.cobos@gmail.com> | ||||||
|  |  * @since 2.0 | ||||||
|  |  */ | ||||||
|  | class BootstrapEnum | ||||||
|  | { | ||||||
|  | 	const FADE = 'fade'; | ||||||
|  | 	const IN = 'in'; | ||||||
|  | 	const CLOSE = 'close'; | ||||||
|  | 	const DISABLED = 'disabled'; | ||||||
|  | 	const ACTIVE = 'active'; | ||||||
|  | 	const MODAL = 'modal'; | ||||||
|  | 	const HIDE = 'hide'; | ||||||
|  | 	const DIALOG = 'dialog'; | ||||||
|  | 	const ALERT = 'alert'; | ||||||
|  | } | ||||||
| @ -0,0 +1,33 @@ | |||||||
|  | <?php | ||||||
|  | /** | ||||||
|  |  * @copyright Copyright (c) 2008 Yii Software LLC | ||||||
|  |  * @link http://www.yiiframework.com/ | ||||||
|  |  * @license http://www.yiiframework.com/license/ | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | namespace yii\bootstrap\enum; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * ButtonEnum provides easy access to all predefined button set of named values | ||||||
|  |  * | ||||||
|  |  * @author Antonio Ramirez <amigo.cobos@gmail.com> | ||||||
|  |  * @since 2.0 | ||||||
|  |  */ | ||||||
|  | class ButtonEnum | ||||||
|  | { | ||||||
|  | 	const TYPE_DEFAULT = 'btn'; | ||||||
|  | 	const TYPE_PRIMARY = 'btn-primary'; | ||||||
|  | 	const TYPE_INFO = 'btn-info'; | ||||||
|  | 	const TYPE_SUCCESS = 'btn-success'; | ||||||
|  | 	const TYPE_WARNING = 'btn-warning'; | ||||||
|  | 	const TYPE_DANGER = 'btn-danger'; | ||||||
|  | 	const TYPE_INVERSE = 'btn-inverse'; | ||||||
|  | 	const TYPE_LINK = 'btn-link'; | ||||||
|  | 
 | ||||||
|  | 	const SIZE_DEFAULT = ''; | ||||||
|  | 	const SIZE_LARGE = 'btn-large'; | ||||||
|  | 	const SIZE_SMALL = 'btn-small'; | ||||||
|  | 	const SIZE_MINI = 'btn-mini'; | ||||||
|  | 	const SIZE_BLOCK = 'btn-block'; | ||||||
|  | 
 | ||||||
|  | } | ||||||
| @ -0,0 +1,158 @@ | |||||||
|  | <?php | ||||||
|  | /** | ||||||
|  |  * @copyright Copyright (c) 2008 Yii Software LLC | ||||||
|  |  * @link http://www.yiiframework.com/ | ||||||
|  |  * @license http://www.yiiframework.com/license/ | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | namespace yii\bootstrap\enum; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * IconEnum provides easy access to all predefined icon set of named values | ||||||
|  |  * | ||||||
|  |  * @author Antonio Ramirez <amigo.cobos@gmail.com> | ||||||
|  |  * @since 2.0 | ||||||
|  |  */ | ||||||
|  | class IconEnum | ||||||
|  | { | ||||||
|  | 	const ICON_GLASS = 'icon-glass'; | ||||||
|  | 	const ICON_MUSIC = 'icon-music'; | ||||||
|  | 	const ICON_SEARCH = 'icon-search'; | ||||||
|  | 	const ICON_ENVELOPE = 'icon-envelope'; | ||||||
|  | 	const ICON_HEART = 'icon-heart'; | ||||||
|  | 	const ICON_STAR = 'icon-star'; | ||||||
|  | 	const ICON_STAR_EMPTY = 'icon-star-empty'; | ||||||
|  | 	const ICON_USER = 'icon-user'; | ||||||
|  | 	const ICON_FILM = 'icon-film'; | ||||||
|  | 	const ICON_TH_LARGE = 'icon-th-large'; | ||||||
|  | 	const ICON_TH = 'icon-th'; | ||||||
|  | 	const ICON_TH_LIST = 'icon-th-list'; | ||||||
|  | 	const ICON_OK = 'icon-ok'; | ||||||
|  | 	const ICON_REMOVE = 'icon-remove'; | ||||||
|  | 	const ICON_ZOOM_IN = 'icon-zoom-in'; | ||||||
|  | 	const ICON_ZOOM_OUT = 'icon-zoom-out'; | ||||||
|  | 	const ICON_OFF = 'icon-off'; | ||||||
|  | 	const ICON_SIGNAL = 'icon-signal'; | ||||||
|  | 	const ICON_COG = 'icon-cog'; | ||||||
|  | 	const ICON_TRASH = 'icon-trash'; | ||||||
|  | 	const ICON_HOME = 'icon-home'; | ||||||
|  | 	const ICON_FILE = 'icon-file'; | ||||||
|  | 	const ICON_TIME = 'icon-time'; | ||||||
|  | 	const ICON_ROAD = 'icon-road'; | ||||||
|  | 	const ICON_DOWNLOAD_ALT = 'icon-download-alt'; | ||||||
|  | 	const ICON_DOWNLOAD = 'icon-download'; | ||||||
|  | 	const ICON_UPLOAD = 'icon-upload'; | ||||||
|  | 	const ICON_INBOX = 'icon-inbox'; | ||||||
|  | 	const ICON_PLAY_CIRCLE = 'icon-play-circle'; | ||||||
|  | 	const ICON_REPEAT = 'icon-repeat'; | ||||||
|  | 	const ICON_REFRESH = 'icon-refresh'; | ||||||
|  | 	const ICON_LIST_ALT = 'icon-list-alt'; | ||||||
|  | 	const ICON_LOCK = 'icon-lock'; | ||||||
|  | 	const ICON_FLAG = 'icon-flag'; | ||||||
|  | 	const ICON_HEADPHONES = 'icon-headphones'; | ||||||
|  | 	const ICON_VOLUME_OFF = 'icon-volume-off'; | ||||||
|  | 	const ICON_VOLUME_DOWN = 'icon-volume-down'; | ||||||
|  | 	const ICON_VOLUME_UP = 'icon-volume-up'; | ||||||
|  | 	const ICON_QRCODE = 'icon-qrcode'; | ||||||
|  | 	const ICON_BARCODE = 'icon-barcode'; | ||||||
|  | 	const ICON_TAG = 'icon-tag'; | ||||||
|  | 	const ICON_TAGS = 'icon-tags'; | ||||||
|  | 	const ICON_BOOK = 'icon-book'; | ||||||
|  | 	const ICON_BOOKMARK = 'icon-bookmark'; | ||||||
|  | 	const ICON_PRINT = 'icon-print'; | ||||||
|  | 	const ICON_CAMERA = 'icon-camera'; | ||||||
|  | 	const ICON_FONT = 'icon-font'; | ||||||
|  | 	const ICON_BOLD = 'icon-bold'; | ||||||
|  | 	const ICON_ITALIC = 'icon-italic'; | ||||||
|  | 	const ICON_TEXT_HEIGHT = 'icon-text-height'; | ||||||
|  | 	const ICON_TEXT_WIDTH = 'icon-text-width'; | ||||||
|  | 	const ICON_ALIGN_LEFT = 'icon-align-left'; | ||||||
|  | 	const ICON_ALIGN_CENTER = 'icon-align-center'; | ||||||
|  | 	const ICON_ALIGN_RIGHT = 'icon-align-right'; | ||||||
|  | 	const ICON_ALIGN_JUSTIFY = 'icon-align-justify'; | ||||||
|  | 	const ICON_LIST = 'icon-list'; | ||||||
|  | 	const ICON_INDENT_LEFT = 'icon-indent-left'; | ||||||
|  | 	const ICON_INDENT_RIGHT = 'icon-indent-right'; | ||||||
|  | 	const ICON_FACETIME_VIDEO = 'icon-facetime-video'; | ||||||
|  | 	const ICON_PICTURE = 'icon-picture'; | ||||||
|  | 	const ICON_PENCIL = 'icon-pencil'; | ||||||
|  | 	const ICON_MAP_MARKER = 'icon-map-marker'; | ||||||
|  | 	const ICON_ADJUST = 'icon-adjust'; | ||||||
|  | 	const ICON_TINT = 'icon-tint'; | ||||||
|  | 	const ICON_EDIT = 'icon-edit'; | ||||||
|  | 	const ICON_SHARE = 'icon-share'; | ||||||
|  | 	const ICON_CHECK = 'icon-check'; | ||||||
|  | 	const ICON_MOVE = 'icon-move'; | ||||||
|  | 	const ICON_STEP_BACKWARD = 'icon-step-backward'; | ||||||
|  | 	const ICON_FAST_BACKWARD = 'icon-fast-backward'; | ||||||
|  | 	const ICON_BACKWARD = 'icon-backward'; | ||||||
|  | 	const ICON_PLAY = 'icon-play'; | ||||||
|  | 	const ICON_PAUSE = 'icon-pause'; | ||||||
|  | 	const ICON_STOP = 'icon-pause'; | ||||||
|  | 	const ICON_FORWARD = 'icon-forward'; | ||||||
|  | 	const ICON_FAST_FORWARD = 'icon-fast-forward'; | ||||||
|  | 	const ICON_STEP_FORWARD = 'icon-step-forward'; | ||||||
|  | 	const ICON_EJECT = 'icon-eject'; | ||||||
|  | 	const ICON_CHEVRON_LEFT = 'icon-chevron-left'; | ||||||
|  | 	const ICON_CHEVRON_RIGHT = 'icon-chevron-right'; | ||||||
|  | 	const ICON_PLUS_SIGN = 'icon-plus-sign'; | ||||||
|  | 	const ICON_MINUS_SIGN = 'icon-minus-sign'; | ||||||
|  | 	const ICON_REMOVE_SIGN = 'icon-remove-sign'; | ||||||
|  | 	const ICON_OK_SIGN = 'icon-ok-sign'; | ||||||
|  | 	const ICON_QUESTION_SIGN = 'icon-question-sign'; | ||||||
|  | 	const ICON_INFO_SIGN = 'icon-info-sign'; | ||||||
|  | 	const ICON_SCREENSHOT = 'icon-screenshot'; | ||||||
|  | 	const ICON_REMOVE_CIRCLE = 'icon-remove-circle'; | ||||||
|  | 	const ICON_OK_CIRCLE = 'icon-ok-circle'; | ||||||
|  | 	const ICON_BAN_CIRCLE = 'icon-ban-circle'; | ||||||
|  | 	const ICON_ARROW_LEFT = 'icon-arrow-left'; | ||||||
|  | 	const ICON_ARROW_RIGHT = 'icon-arrow-right'; | ||||||
|  | 	const ICON_ARROW_UP = 'icon-arrow-up'; | ||||||
|  | 	const ICON_ARROW_DOWN = 'icon-arrow-down'; | ||||||
|  | 	const ICON_SHARE_ALT = 'icon-share-alt'; | ||||||
|  | 	const ICON_RESIZE_FULL = 'icon-resize-full'; | ||||||
|  | 	const ICON_RESIZE_SMALL = 'icon-resize-small'; | ||||||
|  | 	const ICON_PLUS = 'icon-plus'; | ||||||
|  | 	const ICON_MINUS = 'icon-minus'; | ||||||
|  | 	const ICON_ASTERISK = 'icon-asterisk'; | ||||||
|  | 	const ICON_EXCLAMATION_SIGN = 'icon-exclamation-sign'; | ||||||
|  | 	const ICON_GIFT = 'icon-gift'; | ||||||
|  | 	const ICON_LEAF = 'icon-leaf'; | ||||||
|  | 	const ICON_FIRE = 'icon-fire'; | ||||||
|  | 	const ICON_EYE_OPEN = 'icon-eye-open'; | ||||||
|  | 	const ICON_EYE_CLOSE = 'icon-eye-close'; | ||||||
|  | 	const ICON_WARNING_SIGN = 'icon-warning-sign'; | ||||||
|  | 	const ICON_PLANE = 'icon-plane'; | ||||||
|  | 	const ICON_CALENDAR = 'icon-calendar'; | ||||||
|  | 	const ICON_RANDOM = 'icon-random'; | ||||||
|  | 	const ICON_COMMENT = 'icon-comment'; | ||||||
|  | 	const ICON_MAGNET = 'icon-magnet'; | ||||||
|  | 	const ICON_CHEVRON_UP = 'icon-chevron-up'; | ||||||
|  | 	const ICON_CHEVRON_DOWN = 'icon-chevron-down'; | ||||||
|  | 	const ICON_RETWEET = 'icon-retweet'; | ||||||
|  | 	const ICON_SHOPPING_CART = 'icon-shopping-cart'; | ||||||
|  | 	const ICON_FOLDER_CLOSE = 'icon-folder-close'; | ||||||
|  | 	const ICON_FOLDER_OPEN = 'icon-folder-open'; | ||||||
|  | 	const ICON_RESIZE_VERTICAL = 'icon-resize-vertical'; | ||||||
|  | 	const ICON_RESIZE_HORIZONTAL = 'icon-resize-horizontal'; | ||||||
|  | 	const ICON_HDD = 'icon-hdd'; | ||||||
|  | 	const ICON_BULLHORN = 'icon-bullhorn'; | ||||||
|  | 	const ICON_BELL = 'icon-bell'; | ||||||
|  | 	const ICON_CERTFICATE = 'icon-certificate'; | ||||||
|  | 	const ICON_THUMBS_UP = 'icon-thumbs-up'; | ||||||
|  | 	const ICON_THUMBS_DOWN = 'icon-thumbs-down'; | ||||||
|  | 	const ICON_HAND_RIGHT = 'icon-hand-right'; | ||||||
|  | 	const ICON_HAND_LEFT = 'icon-hand-left'; | ||||||
|  | 	const ICON_HAND_UP = 'icon-hand-up'; | ||||||
|  | 	const ICON_HAND_DOWN = 'icon-hand-down'; | ||||||
|  | 	const ICON_CIRCLE_ARROW_RIGHT = 'icon-circle-arrow-right'; | ||||||
|  | 	const ICON_CIRCLE_ARROW_LEFT = 'icon-circle-arrow-left'; | ||||||
|  | 	const ICON_CIRCLE_ARROW_UP = 'icon-circle-arrow-up'; | ||||||
|  | 	const ICON_CIRCLE_ARROW_DOWN = 'icon-circle-arrow-down'; | ||||||
|  | 	const ICON_GLOBE = 'icon-globe'; | ||||||
|  | 	const ICON_WRENCH = 'icon-wrench'; | ||||||
|  | 	const ICON_TASKS = 'icon-tasks'; | ||||||
|  | 	const ICON_FILTER = 'icon-filter'; | ||||||
|  | 	const ICON_BRIEFCASE = 'icon-briefcase'; | ||||||
|  | 	const ICON_FULLSCREEN = 'icon-fullscreen'; | ||||||
|  | } | ||||||
| @ -0,0 +1,19 @@ | |||||||
|  | <?php | ||||||
|  | /** | ||||||
|  |  * @copyright Copyright (c) 2008 Yii Software LLC | ||||||
|  |  * @link http://www.yiiframework.com/ | ||||||
|  |  * @license http://www.yiiframework.com/license/ | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | namespace yii\bootstrap\enum; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * ProgressEnum provides easy access to all predefined progress bar set of named values | ||||||
|  |  * | ||||||
|  |  * @author Antonio Ramirez <amigo.cobos@gmail.com> | ||||||
|  |  * @since 2.0 | ||||||
|  |  */ | ||||||
|  | class ProgressEnum | ||||||
|  | { | ||||||
|  | 
 | ||||||
|  | } | ||||||
| @ -0,0 +1,19 @@ | |||||||
|  | <?php | ||||||
|  | /** | ||||||
|  |  * @copyright Copyright (c) 2008 Yii Software LLC | ||||||
|  |  * @link http://www.yiiframework.com/ | ||||||
|  |  * @license http://www.yiiframework.com/license/ | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | namespace yii\bootstrap\helpers; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Alert provides methods to make use of bootstrap alert messages in your application | ||||||
|  |  * | ||||||
|  |  * @author Antonio Ramirez <amigo.cobos@gmail.com> | ||||||
|  |  * @since 2.0 | ||||||
|  |  */ | ||||||
|  | class Alert extends base\Alert | ||||||
|  | { | ||||||
|  | 
 | ||||||
|  | } | ||||||
| @ -0,0 +1,19 @@ | |||||||
|  | <?php | ||||||
|  | /** | ||||||
|  |  * @copyright Copyright (c) 2008 Yii Software LLC | ||||||
|  |  * @link http://www.yiiframework.com/ | ||||||
|  |  * @license http://www.yiiframework.com/license/ | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | namespace yii\bootstrap\helpers; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Assets provides methods to register bootstrap assets. | ||||||
|  |  * | ||||||
|  |  * @author Antonio Ramirez <amigo.cobos@gmail.com> | ||||||
|  |  * @since 2.0 | ||||||
|  |  */ | ||||||
|  | class Assets extends base\Assets | ||||||
|  | { | ||||||
|  | 
 | ||||||
|  | } | ||||||
| @ -0,0 +1,19 @@ | |||||||
|  | <?php | ||||||
|  | /** | ||||||
|  |  * @copyright Copyright (c) 2008 Yii Software LLC | ||||||
|  |  * @link http://www.yiiframework.com/ | ||||||
|  |  * @license http://www.yiiframework.com/license/ | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | namespace yii\bootstrap\helpers; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Button provides methods to make use of bootstrap buttons in your application. | ||||||
|  |  * | ||||||
|  |  * @author Antonio Ramirez <amigo.cobos@gmail.com> | ||||||
|  |  * @since 2.0 | ||||||
|  |  */ | ||||||
|  | class Button extends base\Button | ||||||
|  | { | ||||||
|  | 
 | ||||||
|  | } | ||||||
| @ -0,0 +1,43 @@ | |||||||
|  | <?php | ||||||
|  | /** | ||||||
|  |  * @copyright Copyright (c) 2008 Yii Software LLC | ||||||
|  |  * @link http://www.yiiframework.com/ | ||||||
|  |  * @license http://www.yiiframework.com/license/ | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | namespace yii\bootstrap\helpers; | ||||||
|  | 
 | ||||||
|  | use yii\helpers\Html; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Icon allows you to render Bootstrap Glyphicons sets | ||||||
|  |  * | ||||||
|  |  * @author Antonio Ramirez <amigo.cobos@gmail.com> | ||||||
|  |  * @since 2.0 | ||||||
|  |  */ | ||||||
|  | class Icon extends base\Icon | ||||||
|  | { | ||||||
|  | 	/** | ||||||
|  | 	 * Generates an icon. | ||||||
|  | 	 * @param string $icon the icon type. | ||||||
|  | 	 * @param array $htmlOptions additional HTML attributes. | ||||||
|  | 	 * @return string the generated icon. | ||||||
|  | 	 */ | ||||||
|  | 	public static function i($icon, $htmlOptions = array()) | ||||||
|  | 	{ | ||||||
|  | 		if (is_string($icon)) | ||||||
|  | 		{ | ||||||
|  | 			if (strpos($icon, 'icon-') === false) | ||||||
|  | 				$icon = 'icon-' . implode(' icon-', explode(' ', $icon)); | ||||||
|  | 
 | ||||||
|  | 			// TODO: this method may should be added to ArrayHelper::add or ArrayHelper::append? | ||||||
|  | 			if (isset($htmlOptions['class'])) | ||||||
|  | 				$htmlOptions['class'] .= ' ' . $icon; | ||||||
|  | 			else | ||||||
|  | 				$htmlOptions['class'] = $icon; | ||||||
|  | 
 | ||||||
|  | 			return Html::tag('i', '', $htmlOptions); | ||||||
|  | 		} | ||||||
|  | 		return ''; | ||||||
|  | 	} | ||||||
|  | } | ||||||
| @ -0,0 +1,19 @@ | |||||||
|  | <?php | ||||||
|  | /** | ||||||
|  |  * @copyright Copyright (c) 2008 Yii Software LLC | ||||||
|  |  * @link http://www.yiiframework.com/ | ||||||
|  |  * @license http://www.yiiframework.com/license/ | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | namespace yii\bootstrap\helpers; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Progress provides methods to make use of bootstrap progress bars in your application | ||||||
|  |  * | ||||||
|  |  * @author Antonio Ramirez <amigo.cobos@gmail.com> | ||||||
|  |  * @since 2.0 | ||||||
|  |  */ | ||||||
|  | class Progress extends base\Progress | ||||||
|  | { | ||||||
|  | 
 | ||||||
|  | } | ||||||
| @ -0,0 +1,46 @@ | |||||||
|  | <?php | ||||||
|  | /** | ||||||
|  |  * @copyright Copyright (c) 2008 Yii Software LLC | ||||||
|  |  * @link http://www.yiiframework.com/ | ||||||
|  |  * @license http://www.yiiframework.com/license/ | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | namespace yii\bootstrap\helpers\base; | ||||||
|  | 
 | ||||||
|  | use yii\bootstrap\enum\AlertEnum; | ||||||
|  | use yii\bootstrap\enum\BootstrapEnum; | ||||||
|  | use yii\helpers\Html; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Alert provides methods to make use of bootstrap alert messages in your application | ||||||
|  |  * | ||||||
|  |  * @author Antonio Ramirez <amigo.cobos@gmail.com> | ||||||
|  |  * @since 2.0 | ||||||
|  |  */ | ||||||
|  | class Alert | ||||||
|  | { | ||||||
|  | 
 | ||||||
|  | 	/** | ||||||
|  | 	 * Generates an alert box | ||||||
|  | 	 * @param $message | ||||||
|  | 	 * @param array $htmlOptions | ||||||
|  | 	 * @param bool $dismiss whether to display dismissal link or not | ||||||
|  | 	 * @return string | ||||||
|  | 	 */ | ||||||
|  | 	public static function create($message, $htmlOptions = array(), $dismiss = true) | ||||||
|  | 	{ | ||||||
|  | 		// TODO: this method may should be added to ArrayHelper::add or ArrayHelper::append? | ||||||
|  | 		if (isset($htmlOptions['class'])) | ||||||
|  | 			$htmlOptions['class'] .= ' ' . AlertEnum::CLASS_NAME; | ||||||
|  | 		else | ||||||
|  | 			$htmlOptions['class'] = AlertEnum::CLASS_NAME; | ||||||
|  | 
 | ||||||
|  | 		ob_start(); | ||||||
|  | 		echo Html::beginTag('div', $htmlOptions); | ||||||
|  | 		if ($dismiss) | ||||||
|  | 			echo Button::closeLink('×', BootstrapEnum::ALERT); | ||||||
|  | 		echo $message; | ||||||
|  | 		echo Html::endTag('div'); | ||||||
|  | 		return ob_get_clean(); | ||||||
|  | 	} | ||||||
|  | } | ||||||
| @ -0,0 +1,25 @@ | |||||||
|  | <?php | ||||||
|  | /** | ||||||
|  |  * @copyright Copyright (c) 2008 Yii Software LLC | ||||||
|  |  * @link http://www.yiiframework.com/ | ||||||
|  |  * @license http://www.yiiframework.com/license/ | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | namespace yii\bootstrap\helpers\base; | ||||||
|  | use Yii; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Assets provides methods to register bootstrap assets. | ||||||
|  |  * | ||||||
|  |  * @author Antonio Ramirez <amigo.cobos@gmail.com> | ||||||
|  |  * @since 2.0 | ||||||
|  |  */ | ||||||
|  | class Assets | ||||||
|  | { | ||||||
|  | 	public static function registerBundle($responsive = false) | ||||||
|  | 	{ | ||||||
|  | 		$bundle = $responsive ? 'yii/bootstrap' : 'yii/bootstrap-responsive'; | ||||||
|  | 
 | ||||||
|  | 		Yii::$app->getView()->registerAssetBundle($bundle); | ||||||
|  | 	} | ||||||
|  | } | ||||||
| @ -0,0 +1,69 @@ | |||||||
|  | <?php | ||||||
|  | /** | ||||||
|  |  * @copyright Copyright (c) 2008 Yii Software LLC | ||||||
|  |  * @link http://www.yiiframework.com/ | ||||||
|  |  * @license http://www.yiiframework.com/license/ | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | namespace yii\bootstrap\helpers\base; | ||||||
|  | 
 | ||||||
|  | use yii\bootstrap\enum\AlertEnum; | ||||||
|  | use yii\bootstrap\enum\ButtonEnum; | ||||||
|  | use yii\bootstrap\enum\BootstrapEnum; | ||||||
|  | use yii\helpers\Html; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Button provides methods to make use of bootstrap buttons in your application. | ||||||
|  |  * | ||||||
|  |  * @author Antonio Ramirez <amigo.cobos@gmail.com> | ||||||
|  |  * @since 2.0 | ||||||
|  |  */ | ||||||
|  | class Button | ||||||
|  | { | ||||||
|  | 	/** | ||||||
|  | 	 * Returns a dismissal alert link | ||||||
|  | 	 * @param string $text | ||||||
|  | 	 * @param string $dismiss what to dismiss (alert or modal) | ||||||
|  | 	 * @return string the dismissal alert link | ||||||
|  | 	 */ | ||||||
|  | 	public static function closeLink($text = '×', $dismiss = null) | ||||||
|  | 	{ | ||||||
|  | 		$options = array('class' => BootstrapEnum::CLOSE); | ||||||
|  | 		if(null !== $dismiss) | ||||||
|  | 			$options['data-dismiss'] = $dismiss; | ||||||
|  | 		return Html::a($text, '#', $options); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	/** | ||||||
|  | 	 * Returns a dismissal button | ||||||
|  | 	 * @param string $text the text to use for the close button | ||||||
|  | 	 * @param string $dismiss what to dismiss (alert or modal) | ||||||
|  | 	 * @return string the dismissal button | ||||||
|  | 	 */ | ||||||
|  | 	public static function closeButton($text = '×', $dismiss = null) | ||||||
|  | 	{ | ||||||
|  | 		$options = array('type' => 'button', 'class' => BootstrapEnum::CLOSE); | ||||||
|  | 		if(null !== $dismiss) | ||||||
|  | 			$options['data-dismiss'] = $dismiss; | ||||||
|  | 
 | ||||||
|  | 		return Html::button($text, null, null, $options); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 	/** | ||||||
|  | 	 * Returns a link button | ||||||
|  | 	 * @param string $label the button label | ||||||
|  | 	 * @param array $htmlOptions the HTML attributes of the button | ||||||
|  | 	 * @return string the generated button | ||||||
|  | 	 */ | ||||||
|  | 	public static function link($label, $htmlOptions = array()) | ||||||
|  | 	{ | ||||||
|  | 		// TODO: consider method add or append to ArrayHelper class | ||||||
|  | 		if (isset($htmlOptions['class'])) | ||||||
|  | 			$htmlOptions['class'] .= ' ' . ButtonEnum::TYPE_LINK; | ||||||
|  | 		else | ||||||
|  | 			$htmlOptions['class'] = ButtonEnum::TYPE_LINK; | ||||||
|  | 
 | ||||||
|  | 		return Html::a($label, '#', $htmlOptions); | ||||||
|  | 	} | ||||||
|  | } | ||||||
| @ -0,0 +1,21 @@ | |||||||
|  | <?php | ||||||
|  | /** | ||||||
|  |  * @copyright Copyright (c) 2008 Yii Software LLC | ||||||
|  |  * @link http://www.yiiframework.com/ | ||||||
|  |  * @license http://www.yiiframework.com/license/ | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | namespace yii\bootstrap\helpers\base; | ||||||
|  | 
 | ||||||
|  | use yii\bootstrap\enum\IconEnum; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Icon allows you to render Bootstrap Glyphicons sets | ||||||
|  |  * | ||||||
|  |  * @author Antonio Ramirez <amigo.cobos@gmail.com> | ||||||
|  |  * @since 2.0 | ||||||
|  |  */ | ||||||
|  | class Icon | ||||||
|  | { | ||||||
|  | 
 | ||||||
|  | } | ||||||
| @ -0,0 +1,21 @@ | |||||||
|  | <?php | ||||||
|  | /** | ||||||
|  |  * @copyright Copyright (c) 2008 Yii Software LLC | ||||||
|  |  * @link http://www.yiiframework.com/ | ||||||
|  |  * @license http://www.yiiframework.com/license/ | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | namespace yii\bootstrap\helpers\base; | ||||||
|  | 
 | ||||||
|  | use yii\bootstrap\enum\ProgressEnum; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Progress provides methods to make use of bootstrap progress bars in your application | ||||||
|  |  * | ||||||
|  |  * @author Antonio Ramirez <amigo.cobos@gmail.com> | ||||||
|  |  * @since 2.0 | ||||||
|  |  */ | ||||||
|  | class Progress | ||||||
|  | { | ||||||
|  | 
 | ||||||
|  | } | ||||||
| @ -0,0 +1,303 @@ | |||||||
|  | <?php | ||||||
|  | /** | ||||||
|  |  * @link http://www.yiiframework.com/ | ||||||
|  |  * @copyright Copyright (c) 2008 Yii Software LLC | ||||||
|  |  * @license http://www.yiiframework.com/license/ | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | namespace yii\bootstrap\widgets; | ||||||
|  | 
 | ||||||
|  | use Yii; | ||||||
|  | use yii\helpers\Html; | ||||||
|  | use yii\helpers\ArrayHelper; | ||||||
|  | use yii\bootstrap\helpers\Button; | ||||||
|  | use yii\bootstrap\enum\BootstrapEnum; | ||||||
|  | use yii\web\JsExpression; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Modal renders a bootstrap modal on the page for its use on your application. | ||||||
|  |  * | ||||||
|  |  * Basic usage: | ||||||
|  |  * | ||||||
|  |  * ```php | ||||||
|  |  * $this->widget(Modal::className(), array( | ||||||
|  |  * 	'id' => 'myModal', | ||||||
|  |  * 	'header' => 'Modal Heading', | ||||||
|  |  * 	'content' => '<p>One fine body...</p>', | ||||||
|  |  * 	'footer' => '//modal/_footer', // we can also use view paths | ||||||
|  |  * 	'buttonOptions' => array( | ||||||
|  |  * 		'label' => 'Show Modal', | ||||||
|  |  * 		'class' => \yii\bootstrap\enum\ButtonEnum::TYPE_DEFAULT | ||||||
|  |  * 		) | ||||||
|  |  * )); | ||||||
|  |  * ``` | ||||||
|  |  * @see http://twitter.github.io/bootstrap/javascript.html#modals | ||||||
|  |  * @author Antonio Ramirez <amigo.cobos@gmail.com> | ||||||
|  |  * @since 2.0 | ||||||
|  |  */ | ||||||
|  | class Modal extends base\BootstrapWidget | ||||||
|  | { | ||||||
|  | 	/** | ||||||
|  | 	 * @var array  The additional HTML attributes of the button that will show the modal. If empty array, only | ||||||
|  | 	 * the markup of the modal will be rendered on the page, so users can easily call the modal manually with their own | ||||||
|  | 	 * scripts. The following special attributes are available: | ||||||
|  | 	 * <ul> | ||||||
|  | 	 *    <li>label: string, the label of the button</li> | ||||||
|  | 	 * </ul> | ||||||
|  | 	 * | ||||||
|  | 	 * For available options of the button trigger, see http://twitter.github.com/bootstrap/javascript.html#modals. | ||||||
|  | 	 */ | ||||||
|  | 	public $buttonOptions = array(); | ||||||
|  | 
 | ||||||
|  | 	/** | ||||||
|  | 	 * @var boolean indicates whether the modal should use transitions. Defaults to 'true'. | ||||||
|  | 	 */ | ||||||
|  | 	public $fade = true; | ||||||
|  | 
 | ||||||
|  | 	/** | ||||||
|  | 	 * @var bool $keyboard, closes the modal when escape key is pressed. | ||||||
|  | 	 */ | ||||||
|  | 	public $keyboard = true; | ||||||
|  | 
 | ||||||
|  | 	/** | ||||||
|  | 	 * @var bool $show, shows the modal when initialized. | ||||||
|  | 	 */ | ||||||
|  | 	public $show = false; | ||||||
|  | 
 | ||||||
|  | 	/** | ||||||
|  | 	 * @var mixed includes a modal-backdrop element. Alternatively, specify `static` for a backdrop which doesn't close | ||||||
|  | 	 * the modal on click. | ||||||
|  | 	 */ | ||||||
|  | 	public $backdrop = true; | ||||||
|  | 
 | ||||||
|  | 	/** | ||||||
|  | 	 * @var mixed the remote url. If a remote url is provided, content will be loaded via jQuery's load method and | ||||||
|  | 	 * injected into the .modal-body of the modal. | ||||||
|  | 	 */ | ||||||
|  | 	public $remote; | ||||||
|  | 
 | ||||||
|  | 	/** | ||||||
|  | 	 * @var string a javascript function that will be invoked immediately when the `show` instance method is called. | ||||||
|  | 	 */ | ||||||
|  | 	public $onShow; | ||||||
|  | 
 | ||||||
|  | 	/** | ||||||
|  | 	 * @var string a javascript function that will be invoked when the modal has been made visible to the user | ||||||
|  | 	 *     (will wait for css transitions to complete). | ||||||
|  | 	 */ | ||||||
|  | 	public $onShown; | ||||||
|  | 
 | ||||||
|  | 	/** | ||||||
|  | 	 * @var string a javascript function that will be invoked immediately when the hide instance method has been called. | ||||||
|  | 	 */ | ||||||
|  | 	public $onHide; | ||||||
|  | 
 | ||||||
|  | 	/** | ||||||
|  | 	 * @var string a javascript function that will be invoked when the modal has finished being hidden from the user | ||||||
|  | 	 *     (will wait for css transitions to complete). | ||||||
|  | 	 */ | ||||||
|  | 	public $onHidden; | ||||||
|  | 
 | ||||||
|  | 	/** | ||||||
|  | 	 * @var string[] the Javascript event handlers. | ||||||
|  | 	 */ | ||||||
|  | 	protected $events = array(); | ||||||
|  | 
 | ||||||
|  | 	/** | ||||||
|  | 	 * @var array $pluginOptions the plugin options. | ||||||
|  | 	 */ | ||||||
|  | 	protected $pluginOptions = array(); | ||||||
|  | 
 | ||||||
|  | 	/** | ||||||
|  | 	 * @var string | ||||||
|  | 	 */ | ||||||
|  | 	public $closeText = '×'; | ||||||
|  | 
 | ||||||
|  | 	/** | ||||||
|  | 	 * @var string header content. Header can also be a path to a view file. | ||||||
|  | 	 */ | ||||||
|  | 	public $header; | ||||||
|  | 
 | ||||||
|  | 	/** | ||||||
|  | 	 * @var string body of modal. Body can also be a path to a view file. | ||||||
|  | 	 */ | ||||||
|  | 	public $content; | ||||||
|  | 
 | ||||||
|  | 	/** | ||||||
|  | 	 * @var string footer content. Content can also be a path to a view file. | ||||||
|  | 	 */ | ||||||
|  | 	public $footer; | ||||||
|  | 
 | ||||||
|  | 	/** | ||||||
|  | 	 * Widget's init method | ||||||
|  | 	 */ | ||||||
|  | 	public function init() | ||||||
|  | 	{ | ||||||
|  | 		parent::init(); | ||||||
|  | 
 | ||||||
|  | 		$this->name = 'modal'; | ||||||
|  | 
 | ||||||
|  | 		$this->defaultOption('id', $this->getId()); | ||||||
|  | 		$this->selector = '#' . ArrayHelper::getValue($this->options, 'id'); | ||||||
|  | 
 | ||||||
|  | 		$this->defaultOption('role', BootstrapEnum::DIALOG); | ||||||
|  | 		$this->defaultOption('tabindex', '-1'); | ||||||
|  | 
 | ||||||
|  | 		$this->addOption('class', BootstrapEnum::MODAL); | ||||||
|  | 		$this->addOption('class', BootstrapEnum::HIDE); | ||||||
|  | 
 | ||||||
|  | 		if ($this->fade) | ||||||
|  | 			$this->addOption('class', BootstrapEnum::FADE); | ||||||
|  | 
 | ||||||
|  | 		$this->initPluginOptions(); | ||||||
|  | 		$this->initPluginEvents(); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	/** | ||||||
|  | 	 * Initialize plugin events if any | ||||||
|  | 	 */ | ||||||
|  | 	public function initPluginEvents() | ||||||
|  | 	{ | ||||||
|  | 		foreach (array('onShow', 'onShown', 'onHide', 'onHidden') as $event) { | ||||||
|  | 			if ($this->{$event} !== null) { | ||||||
|  | 				$modalEvent = strtolower(substr($event, 2)); | ||||||
|  | 				if ($this->{$event} instanceof JsExpression) | ||||||
|  | 					$this->events[$modalEvent] = $this->$event; | ||||||
|  | 				else | ||||||
|  | 					$this->events[$modalEvent] = new JsExpression($this->{$event}); | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	/** | ||||||
|  | 	 * Initialize plugin options. | ||||||
|  | 	 * ***Important***: The display of the button overrides the initialization of the modal bootstrap widget. | ||||||
|  | 	 */ | ||||||
|  | 	public function initPluginOptions() | ||||||
|  | 	{ | ||||||
|  | 		if (null !== $this->remote) | ||||||
|  | 			$this->pluginOptions['remote'] = Html::url($this->remote); | ||||||
|  | 
 | ||||||
|  | 		foreach (array('backdrop', 'keyboard', 'show') as $option) { | ||||||
|  | 			$this->pluginOptions[$option] = isset($this->pluginOptions[$option]) | ||||||
|  | 				? $this->pluginOptions[$option] | ||||||
|  | 				: $this->{$option}; | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	/** | ||||||
|  | 	 * Widget's run method | ||||||
|  | 	 */ | ||||||
|  | 	public function run() | ||||||
|  | 	{ | ||||||
|  | 		$this->renderModal(); | ||||||
|  | 		$this->renderButton(); | ||||||
|  | 		$this->registerScript(); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	/** | ||||||
|  | 	 * Renders the button that will open the modal if its options have been configured | ||||||
|  | 	 */ | ||||||
|  | 	public function renderButton() | ||||||
|  | 	{ | ||||||
|  | 		if (!empty($this->buttonOptions)) { | ||||||
|  | 
 | ||||||
|  | 			$this->buttonOptions['data-toggle'] = isset($this->buttonOptions['data-toggle']) | ||||||
|  | 				? $this->buttonOptions['data-toggle'] | ||||||
|  | 				: BootstrapEnum::MODAL; | ||||||
|  | 
 | ||||||
|  | 			if ($this->remote !== null && !isset($this->buttonOptions['data-remote'])) | ||||||
|  | 				$this->buttonOptions['data-remote'] = Html::url($this->remote); | ||||||
|  | 
 | ||||||
|  | 			$label = ArrayHelper::remove($this->buttonOptions, 'label', 'Button'); | ||||||
|  | 			$name = ArrayHelper::remove($this->buttonOptions, 'name'); | ||||||
|  | 			$value = ArrayHelper::remove($this->buttonOptions, 'value'); | ||||||
|  | 
 | ||||||
|  | 			$attr = isset($this->buttonOptions['data-remote']) | ||||||
|  | 				? 'data-target' | ||||||
|  | 				: 'href'; | ||||||
|  | 
 | ||||||
|  | 			$this->buttonOptions[$attr] = isset($this->buttonOptions[$attr]) | ||||||
|  | 				? $this->buttonOptions[$attr] | ||||||
|  | 				: $this->selector; | ||||||
|  | 
 | ||||||
|  | 			echo Html::button($label, $name, $value, $this->buttonOptions); | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	/** | ||||||
|  | 	 * Renders the modal markup | ||||||
|  | 	 */ | ||||||
|  | 	public function renderModal() | ||||||
|  | 	{ | ||||||
|  | 		echo Html::beginTag('div', $this->options) . PHP_EOL; | ||||||
|  | 
 | ||||||
|  | 		$this->renderModalHeader(); | ||||||
|  | 		$this->renderModalBody(); | ||||||
|  | 		$this->renderModalFooter(); | ||||||
|  | 
 | ||||||
|  | 		echo Html::endTag('div') . PHP_EOL; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	/** | ||||||
|  | 	 * Renders the header HTML markup of the modal | ||||||
|  | 	 */ | ||||||
|  | 	public function renderModalHeader() | ||||||
|  | 	{ | ||||||
|  | 		echo '<div class="modal-header">' . PHP_EOL; | ||||||
|  | 		if ($this->closeText) | ||||||
|  | 			echo Button::closeButton($this->closeText, BootstrapEnum::MODAL); | ||||||
|  | 		echo $this->renderSection($this->header); | ||||||
|  | 		echo '</div>' . PHP_EOL; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	/** | ||||||
|  | 	 * Renders the HTML markup for the body of the modal | ||||||
|  | 	 */ | ||||||
|  | 	public function renderModalBody() | ||||||
|  | 	{ | ||||||
|  | 		echo '<div class="modal-body">' . PHP_EOL; | ||||||
|  | 		echo $this->renderSection($this->content); | ||||||
|  | 		echo '</div>' . PHP_EOL; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	/** | ||||||
|  | 	 * Renders the HTML markup for the footer of the modal | ||||||
|  | 	 */ | ||||||
|  | 	public function renderModalFooter() | ||||||
|  | 	{ | ||||||
|  | 
 | ||||||
|  | 		echo '<div class="modal-footer">' . PHP_EOL; | ||||||
|  | 		echo $this->renderSection($this->footer); | ||||||
|  | 		echo '</div>' . PHP_EOL; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	/** | ||||||
|  | 	 * Renders a section. If the section is a view file, the returned string will be the contents of the view file, | ||||||
|  | 	 * otherwise, it will return the string in the $section variable. | ||||||
|  | 	 * @param string $section | ||||||
|  | 	 * @return string | ||||||
|  | 	 */ | ||||||
|  | 	public function renderSection($section) | ||||||
|  | 	{ | ||||||
|  | 		$viewFile = Yii::getAlias($section); | ||||||
|  | 		if (is_file($viewFile)) | ||||||
|  | 			return $this->view->renderFile($viewFile, array(), $this); | ||||||
|  | 		return $section; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	/** | ||||||
|  | 	 * Registers client scripts | ||||||
|  | 	 */ | ||||||
|  | 	public function registerScript() | ||||||
|  | 	{ | ||||||
|  | 		// do we render a button? If so, bootstrap will handle its behavior through its | ||||||
|  | 		// mark-up, otherwise, register the plugin. | ||||||
|  | 		if(empty($this->buttonOptions)) | ||||||
|  | 			$this->registerPlugin($this->selector, $this->pluginOptions); | ||||||
|  | 
 | ||||||
|  | 		// register events | ||||||
|  | 		$this->registerEvents($this->selector, $this->events); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | } | ||||||
| @ -0,0 +1,139 @@ | |||||||
|  | <?php | ||||||
|  | /** | ||||||
|  |  * @link http://www.yiiframework.com/ | ||||||
|  |  * @copyright Copyright (c) 2008 Yii Software LLC | ||||||
|  |  * @license http://www.yiiframework.com/license/ | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | namespace yii\bootstrap\widgets\base; | ||||||
|  | 
 | ||||||
|  | use Yii; | ||||||
|  | use yii\base\View; | ||||||
|  | use yii\base\Widget; | ||||||
|  | use yii\base\InvalidCallException; | ||||||
|  | use yii\helpers\base\Json; | ||||||
|  | use yii\web\JsExpression; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * BootstrapWidget is the base class for bootstrap widgets. | ||||||
|  |  * | ||||||
|  |  * @author Antonio Ramirez <amigo.cobos@gmail.com> | ||||||
|  |  * @since 2.0 | ||||||
|  |  */ | ||||||
|  | class BootstrapWidget extends Widget | ||||||
|  | { | ||||||
|  | 
 | ||||||
|  | 	/** | ||||||
|  | 	 * @var bool whether to register the asset | ||||||
|  | 	 */ | ||||||
|  | 	public $responsive = true; | ||||||
|  | 
 | ||||||
|  | 	/** | ||||||
|  | 	 * @var array the HTML attributes for the widget container tag. | ||||||
|  | 	 */ | ||||||
|  | 	public $options = array(); | ||||||
|  | 
 | ||||||
|  | 	/** | ||||||
|  | 	 * @var string the widget name | ||||||
|  | 	 */ | ||||||
|  | 	protected $name; | ||||||
|  | 
 | ||||||
|  | 	/** | ||||||
|  | 	 * @var string the jQuery selector of the widget | ||||||
|  | 	 */ | ||||||
|  | 	protected $selector; | ||||||
|  | 
 | ||||||
|  | 	/** | ||||||
|  | 	 * Initializes the widget. | ||||||
|  | 	 */ | ||||||
|  | 	public function init() | ||||||
|  | 	{ | ||||||
|  | 		$this->view->registerAssetBundle(($this->responsive ? 'yii/bootstrap' : 'yii/bootstrap-responsive')); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	/** | ||||||
|  | 	 * Registers plugin events with the API. | ||||||
|  | 	 * @param string $selector the CSS selector. | ||||||
|  | 	 * @param string[] $events  the JavaScript event configuration (name=>handler). | ||||||
|  | 	 * @param int $position the position of the JavaScript code. | ||||||
|  | 	 * @return boolean whether the events were registered. | ||||||
|  | 	 */ | ||||||
|  | 	protected function registerEvents($selector, $events = array(), $position = View::POS_END) | ||||||
|  | 	{ | ||||||
|  | 		if (empty($events)) | ||||||
|  | 			return; | ||||||
|  | 
 | ||||||
|  | 		$script = ''; | ||||||
|  | 		foreach ($events as $name => $handler) { | ||||||
|  | 			$handler = ($handler instanceof JsExpression) | ||||||
|  | 				? $handler | ||||||
|  | 				: new JsExpression($handler); | ||||||
|  | 
 | ||||||
|  | 			$script .= ";jQuery(document).ready(function (){jQuery('{$selector}').on('{$name}', {$handler});});"; | ||||||
|  | 		} | ||||||
|  | 		if (!empty($script)) | ||||||
|  | 			$this->view->registerJs($script, array('position' => $position), $this->getUniqueScriptId()); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	/** | ||||||
|  | 	 * Registers a specific Bootstrap plugin using the given selector and options. | ||||||
|  | 	 * @param string $selector the CSS selector. | ||||||
|  | 	 * @param array $options the JavaScript options for the plugin. | ||||||
|  | 	 * @param int $position the position of the JavaScript code. | ||||||
|  | 	 * @throws \yii\base\InvalidCallException | ||||||
|  | 	 */ | ||||||
|  | 	public function registerPlugin($selector, $options = array(), $position = View::POS_END) | ||||||
|  | 	{ | ||||||
|  | 		if(null === $this->name) | ||||||
|  | 			throw new InvalidCallException(); | ||||||
|  | 
 | ||||||
|  | 		$options = !empty($options) ? Json::encode($options) : ''; | ||||||
|  | 		$script = ";jQuery(document).ready(function (){jQuery('{$selector}').{$this->name}({$options});});"; | ||||||
|  | 		$this->view->registerJs($script, array('position'=>$position)); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	/** | ||||||
|  | 	 * Generates a "somewhat" random id string. | ||||||
|  | 	 * @return string the id. | ||||||
|  | 	 * @todo not sure it should be here or | ||||||
|  | 	 */ | ||||||
|  | 	protected function getUniqueScriptId() | ||||||
|  | 	{ | ||||||
|  | 		return uniqid(time() . '#', true); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	/** | ||||||
|  | 	 * Adds a new option. If the 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 $key | ||||||
|  | 	 * @param mixed $value | ||||||
|  | 	 * @param string $glue | ||||||
|  | 	 * @return array | ||||||
|  | 	 */ | ||||||
|  | 	protected function addOption($key, $value, $glue = ' ') | ||||||
|  | 	{ | ||||||
|  | 		if (isset($this->options[$key])) { | ||||||
|  | 			if (!is_array($this->options[$key])) | ||||||
|  | 				$this->options[$key] = explode($glue, $this->options[$key]); | ||||||
|  | 			$this->options[$key][] = $value; | ||||||
|  | 			$this->options[$key] = array_unique($this->options[$key]); | ||||||
|  | 			$this->options[$key] = implode($glue, $this->options[$key]); | ||||||
|  | 		} else | ||||||
|  | 			$this->options[$key] = $value; | ||||||
|  | 		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; | ||||||
|  | 	} | ||||||
|  | } | ||||||
					Loading…
					
					
				
		Reference in new issue