Commits

Christoffer Niska committed 3ea0412 Merge

merged 0.9.11 to default

Comments (0)

Files changed (36)

.idea/dictionaries/Crisu.xml

       <w>navbar</w>
       <w>scrollspy</w>
       <w>tabbable</w>
+      <w>typeahead</w>
       <w>uneditable</w>
       <w>unstyled</w>
     </words>

.idea/inspectionProfiles/Project_Default.xml

+<component name="InspectionProjectProfileManager">
+  <profile version="1.0" is_locked="false">
+    <option name="myName" value="Project Default" />
+    <option name="myLocal" value="false" />
+    <inspection_tool class="PhpDocMissingReturnTagInspection" enabled="false" level="WEAK WARNING" enabled_by_default="false" />
+  </profile>
+</component>

.idea/inspectionProfiles/profiles_settings.xml

+<component name="InspectionProjectProfileManager">
+  <settings>
+    <option name="PROJECT_PROFILE" value="Project Default" />
+    <option name="USE_PROJECT_PROFILE" value="true" />
+    <version value="1.0" />
+  </settings>
+</component>

assets/css/bootstrap-yii.css

+/*
+	Forms
+*/
+
+span.required {
+	color: #F00;
+}
+
+/*
+	Grid view
+*/
+
+.grid-view {
+	padding-top: 20px;
+}
+
+.grid-view-loading {
+	background: url(../img/loading.gif) no-repeat;
+}
+
+.grid-view table.items th a {
+	display: block;
+	position: relative;
+}
+
+.grid-view table.items th a .caret {
+	display: none;
+	position: absolute;
+	right: 5px;
+	top: 7px;
+}
+
+.grid-view table.items th a.asc .caret {
+	display: block;
+}
+
+.grid-view table.items th a.desc .caret {
+	border-bottom: 4px solid #000;
+	border-top: none;
+	display: block;
+}
+
+.grid-view table.items tr.selected td {
+	background: #EEE;
+}
+
+.grid-view .button-column {
+	text-align: center;
+	width: 50px;
+}
+
+.grid-view .checkbox-column {
+	width: 15px;
+}
+
+.grid-view .summary {
+	margin-bottom: 5px;
+	text-align: right;
+}
+
+.grid-view .pager {
+	margin-top: 5px;
+}
+
+.grid-view .empty {
+	font-style: italic;
+}
+
+.grid-view .filters .filter-container {
+	padding: 0 10px 0 0;
+}
+
+.grid-view .filters input,
+.grid-view .filters select {
+	margin-bottom: 0;
+	width: 100%;
+}
+
+/*
+	List view
+*/
+
+.list-view-loading {
+	background: url(../img/loading.gif) no-repeat;
+}
+
+.list-view .summary {
+	margin-bottom: 5px;
+	text-align: right;
+}
+
+.list-view .pager {
+	margin-top: 5px;
+}
+
+.list-view .sorter ul {
+	display: inline;
+	list-style: none outside none;
+	margin: 0;
+	padding: 0;
+}
+
+.list-view .sorter li {
+	display: inline;
+	margin: 0 0 0 5px;
+	padding: 0;
+}
+
+.list-view .sorter a .caret {
+	position: absolute;
+	right: 5px;
+	top: 7px;
+}
+
+.list-view .sorter a.desc .caret {
+	border-bottom: 4px solid #000;
+	border-top: none;
+}
+
+/*
+	Detail view
+*/
+
+table.detail-view .null {
+	color: #FFC0CB;
+}
+
+table.detail-view th {
+	text-align: right;
+	width: 160px;
+}

assets/img/loading.gif

Added
New image

components/Bootstrap.php

  * @author Christoffer Niska <ChristofferNiska@gmail.com>
  * @copyright Copyright &copy; Christoffer Niska 2011-
  * @license http://www.opensource.org/licenses/bsd-license.php New BSD License
- * @version 0.9.10
+ * @version 0.9.11
  */
 
 /**
  */
 class Bootstrap extends CApplicationComponent
 {
-	// The Bootstrap core plugins.
+	// Bootstrap plugins.
 	const PLUGIN_ALERT = 'alert';
 	const PLUGIN_BUTTON = 'button';
 	const PLUGIN_CAROUSEL = 'carousel';
 	public $responsiveCss = false;
 	/**
 	 * @var boolean whether to register jQuery and the Bootstrap JavaScript.
+	 * @since 0.9.10
 	 */
 	public $enableJS = true;
 	/**
 	 */
 	public function init()
 	{
+		// Register the bootstrap path alias.
 		if (!Yii::getPathOfAlias('bootstrap'))
 			Yii::setPathOfAlias('bootstrap', realpath(dirname(__FILE__).'/..'));
 
+		// Prevents the extension from registering scripts
+		// and publishing assets when ran from the command line.
+		if (php_sapi_name() === 'cli')
+			return;
+
 		if ($this->coreCss)
 			$this->registerCss();
 
 		if ($this->responsiveCss)
 			$this->registerResponsiveCss();
 
+		$this->registerYiiCss();
+
 		if ($this->enableJS)
-		{
-			Yii::app()->clientScript->registerCoreScript('jquery');
 			$this->registerCorePlugins();
-		}
-	}
-
-	/**
-	 * Returns whether a plugin is registered.
-	 * @param string $name the name of the plugin
-	 * @return boolean the result
-	 */
-	public function isPluginRegistered($name)
-	{
-		return isset($this->_rp[$name]);
 	}
 
 	/**
 	 */
 	public function registerResponsiveCss()
 	{
-		Yii::app()->clientScript->registerCssFile($this->getAssetsUrl().'/css/bootstrap-responsive.min.css');
+		/** @var CClientScript $cs */
+		$cs = Yii::app()->getClientScript();
+		$cs->registerMetaTag('width=device-width, initial-scale=1.0', 'viewport');
+		$cs->registerCssFile($this->getAssetsUrl().'/css/bootstrap-responsive.min.css');
+	}
+
+	/**
+	 * Registers the Yii-specific CSS missing from Bootstrap.
+	 * @since 0.9.11
+	 */
+	public function registerYiiCss()
+	{
+		Yii::app()->clientScript->registerCssFile($this->getAssetsUrl().'/css/bootstrap-yii.css');
 	}
 
 	/**
 	 * Registers the core JavaScript plugins.
 	 * @since 0.9.8
 	 */
-	protected function registerCorePlugins()
+	public function registerCorePlugins()
 	{
+		Yii::app()->clientScript->registerCoreScript('jquery');
+
 		if (!$this->isPluginDisabled(self::PLUGIN_TRANSITION))
 			$this->enableTransitions();
 
 	}
 
 	/**
+	 * Returns whether a plugin is registered.
+	 * @param string $name the name of the plugin
+	 * @return boolean the result
+	 */
+	public function isPluginRegistered($name)
+	{
+		return isset($this->_rp[$name]);
+	}
+
+	/**
 	 * Returns whether a plugin is disabled in the plugin configuration.
 	 * @param string $name the name of the plugin
 	 * @return boolean the result

demo/css/styles.css

 .clearfix{*zoom:1;}.clearfix:before,.clearfix:after{display:table;content:"";}
 .clearfix:after{clear:both;}
 
+.hide-text{overflow:hidden;text-indent:100%;white-space:nowrap;}
 
 
-
-
-
+.input-block-level{display:block;width:100%;min-height:28px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;}
 
 
 
 
 .navbar .add-this{margin:6px 0 6px 10px;padding:6px 0;}
 
-.subnav{border:1px solid #E5E5E5;font-size:12px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;width:100%;height:36px;background-color:#f2f2f2;background-image:-moz-linear-gradient(top, #f5f5f5, #eeeeee);background-image:-ms-linear-gradient(top, #f5f5f5, #eeeeee);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#eeeeee));background-image:-webkit-linear-gradient(top, #f5f5f5, #eeeeee);background-image:-o-linear-gradient(top, #f5f5f5, #eeeeee);background-image:linear-gradient(top, #f5f5f5, #eeeeee);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5', endColorstr='#eeeeee', GradientType=0);}.subnav.subnav-fixed{border-color:#D5D5D5;border-width:1px 0 0;bottom:0;left:0;position:fixed;right:0;z-index:1030;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:inset 0 1px 0 #ffffff;-moz-box-shadow:inset 0 1px 0 #ffffff;box-shadow:inset 0 1px 0 #ffffff;}
-.subnav .nav{margin:0 auto;max-width:1170px;}.subnav .nav >li>a{margin:0;padding:11px;border-left:1px solid whiteSmoke;border-right:1px solid #E5E5E5;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;}
-.subnav .nav >li:first-child>a{border-left:0;}
-.subnav .nav >li:last-child>a{border-right:0;}
-.subnav .nav >.active>a,.subnav .nav .action>a:hover{background-color:#E9E9E9;border-right-color:#DDD;color:#777;-webkit-box-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.05);box-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.05);}
-
+.subnav{font-size:12px;padding:9px 0;position:fixed;right:20px;top:60px;width:160px;z-index:1030;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}.subnav .label{font-size:0.8em;line-height:16px;vertical-align:top;}
 
 footer .powered{color:#888;margin-bottom:20px;}
 footer .copy{color:#666;}
 
 #bootNavbar .navbar-inner>.container{width:auto;}
 #bootMenu .menuCol{min-height:140px;}
-#bootTabbable .tabbable{margin-bottom:20px;}#bootTabbable .tabbable.tabbable-placed{width:340px;}
+#bootTabbable .tabbable{margin-bottom:20px;}#bootTabbable .tabbable .tab-content{width:auto;}
+#bootTabbable .tabbable.tabbable-placed{width:340px;}
 
 #bootThumbnails .list-view{padding-top:30px;}
 #bootActiveForm .form-vertical .control-group>label{font-weight:bold;}
 #bootCarousel .carousel{width:770px;}#bootCarousel .carousel .carousel-caption p{margin-bottom:9px;}
 
 #bootTypeahead input{margin-bottom:0;}
-.hl-code{margin-bottom:20px;}.hl-code pre{background:#FCFCFC;border-color:#EEE transparent #EEE;font-family:"Menlo","Consolas","Courier New",Courier,mono;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;}
+.php-hl-main,.html-hl-main,.javascript-hl-main{margin-bottom:20px;}.php-hl-main pre,.html-hl-main pre,.javascript-hl-main pre{background:#FCFCFC;border-color:#EEE transparent #EEE;font-family:"Menlo","Consolas","Courier New",Courier,mono;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;}
 
 .maintenance .hero-unit{text-align:center;}.maintenance .hero-unit p{text-align:inherit;}
 

demo/less/styles.less

 }
 
 .subnav {
-	border: 1px solid #E5E5E5;
 	font-size: 12px;
+	padding: 9px 0;
+	position: fixed;
+	right: 20px;
+	top: 60px;
+	width: 160px;
+	z-index: 1030;
 	.border-radius(4px);
-	.size(36px, 100%);
-	#gradient > .vertical(#F5F5F5, #EEE);
 
-	&.subnav-fixed {
-		border-color: #D5D5D5;
-		border-width: 1px 0 0;
-		bottom: 0;
-		left: 0;
-		position: fixed;
-		right: 0;
-		z-index: 1030;
-		.border-radius(0);
-		.box-shadow(inset 0 1px 0 #FFF, 0 1px 5px rgba(0, 0, 0, .1));
-	}
-
-	.nav {
-        margin: 0 auto;
-        max-width: 1170px;
-
-		& > li > a {
-			margin: 0;
-			padding: 11px;
-			border-left: 1px solid whiteSmoke;
-			border-right: 1px solid #E5E5E5;
-			.border-radius(0);
-		}
-
-		& > li:first-child > a {
-			border-left: 0;
-		}
-
-		& > li:last-child > a {
-			border-right: 0;
-		}
-
-		& > .active >a, & .action > a:hover {
-			background-color: #E9E9E9;
-			border-right-color: #DDD;
-			color: #777;
-			.box-shadow(inset 0 3px 5px rgba(0, 0, 0, .05));
-		}
+	.label {
+	    font-size: 0.8em;
+	    line-height: 16px;
+		vertical-align: top;
 	}
 }
 
 #bootTabbable .tabbable {
 	margin-bottom: 20px;
 
+	.tab-content {
+		width: auto;
+	}
+
 	&.tabbable-placed {
 		width: 340px;
 	}
 	margin-bottom: 0;
 }
 
-.hl-code {
+.php-hl-main,
+.html-hl-main,
+.javascript-hl-main {
 	margin-bottom: 20px;
 
 	pre {

demo/protected/controllers/SiteController.php

 		$model = new TestForm();
 
 		$tabs = array(
-			array('label'=>'Home', 'content'=>'<p>Raw denim you probably haven\'t heard of them jean shorts Austin. Nesciunt tofu stumptown aliqua, retro synth master cleanse. Mustache cliche tempor, williamsburg carles vegan helvetica. Reprehenderit butcher retro keffiyeh dreamcatcher synth. Cosby sweater eu banh mi, qui irure terry richardson ex squid. Aliquip placeat salvia cillum iphone. Seitan aliquip quis cardigan american apparel, butcher voluptate nisi qui.</p>'),
+			array('label'=>'Home', 'content'=>'<p>Raw denim you probably haven\'t heard of them jean shorts Austin. Nesciunt tofu stumptown aliqua, retro synth master cleanse. Mustache cliche tempor, williamsburg carles vegan helvetica. Reprehenderit butcher retro keffiyeh dreamcatcher synth. Cosby sweater eu banh mi, qui irure terry richardson ex squid. Aliquip placeat salvia cillum iphone. Seitan aliquip quis cardigan american apparel, butcher voluptate nisi qui.</p>', 'active'=>true),
 			array('label'=>'Profile', 'content'=>'<p>Food truck fixie locavore, accusamus mcsweeney\'s marfa nulla single-origin coffee squid. Exercitation +1 labore velit, blog sartorial PBR leggings next level wes anderson artisan four loko farm-to-table craft beer twee. Qui photo booth letterpress, commodo enim craft beer mlkshk aliquip jean shorts ullamco ad vinyl cillum PBR. Homo nostrud organic, assumenda labore aesthetic magna delectus mollit. Keytar helvetica VHS salvia yr, vero magna velit sapiente labore stumptown. Vegan fanny pack odio cillum wes anderson 8-bit, sustainable jean shorts beard ut DIY ethical culpa terry richardson biodiesel. Art party scenester stumptown, tumblr butcher vero sint qui sapiente accusamus tattooed echo park.</p>'),
 			array('label'=>'Dropdown', 'items'=>array(
 				array('label'=>'@fat', 'content'=>'<p>Etsy mixtape wayfarers, ethical wes anderson tofu before they sold out mcsweeney\'s organic lomo retro fanny pack lo-fi farm-to-table readymade. Messenger bag gentrify pitchfork tattooed craft beer, iphone skateboard locavore carles etsy salvia banksy hoodie helvetica. DIY synth PBR banksy irony. Leggings gentrify squid 8-bit cred pitchfork. Williamsburg banh mi whatever gluten-free, carles pitchfork biodiesel fixie etsy retro mlkshk vice blog. Scenester cred you probably haven\'t heard of them, vinyl craft beer blog stumptown. Pitchfork sustainable tofu synth chambray yr.</p>'),
 		);
 
 		$tabbable = array(
-			array('label'=>'Section 1', 'content'=>'<p>I\'m in Section 1.</p>'),
+			array('label'=>'Section 1', 'content'=>'<p>I\'m in Section 1.</p>', 'active'=>true),
 			array('label'=>'Section 2', 'content'=>'<p>Howdy, I\'m in Section 2.</p>'),
 			array('label'=>'Section 3', 'content'=>'<p>What up girl, this is Section 3.</p>'),
 		);
 
-		$gridDataProvider = new CArrayDataProvider(array(
-			array('id'=>1, 'firstName'=>'Mark', 'lastName'=>'Otto', 'language'=>'CSS'),
-			array('id'=>2, 'firstName'=>'Jacob', 'lastName'=>'Thornton', 'language'=>'JavaScript'),
-			array('id'=>3, 'firstName'=>'Stu', 'lastName'=>'Dent', 'language'=>'HTML'),
-		));
+		$mark = new Person();
+		$mark->id = 1;
+		$mark->firstName = 'Mark';
+		$mark->lastName = 'Otto';
+		$mark->language = 'CSS';
+
+		$jacob = new Person();
+		$jacob->id = 2;
+		$jacob->firstName = 'Jacob';
+		$jacob->lastName = 'Thornton';
+		$jacob->language = 'JavaScript';
+
+		$stu = new Person();
+		$stu->id = 3;
+		$stu->firstName = 'Stu';
+		$stu->lastName = 'Dent';
+		$stu->language = 'HTML';
+
+		$persons = array($mark, $jacob, $stu);
+
+		$gridDataProvider = new CArrayDataProvider($persons);
 
 		$gridColumns = array(
-			array('name'=>'id', 'header'=>'#'),
+			array('name'=>'id', 'header'=>'#', 'htmlOptions'=>array('style'=>'width: 60px')),
 			array('name'=>'firstName', 'header'=>'First name'),
 			array('name'=>'lastName', 'header'=>'Last name'),
 			array('name'=>'language', 'header'=>'Language'),
 			array(
 				'class'=>'bootstrap.widgets.BootButtonColumn',
-				'htmlOptions'=>array('style'=>'width: 50px'),
 				'viewButtonUrl'=>null,
 				'updateButtonUrl'=>null,
 				'deleteButtonUrl'=>null,
 			'pagination'=>array('pageSize'=>8),
 		));
 
+		$phpLighter = new CTextHighlighter();
+		$phpLighter->language = 'PHP';
+
+		$jsLighter = new CTextHighlighter();
+		$jsLighter->language = 'JAVASCRIPT';
+
+		$htmlLighter = new CTextHighlighter();
+		$htmlLighter->language = 'HTML';
+
 		$this->render('index', array(
 			'model'=>$model,
+			'person'=>new Person(),
 			'tabs'=>$tabs,
 			'tabbable'=>$tabbable,
 			'gridDataProvider'=>$gridDataProvider,
 			'gridColumns'=>$gridColumns,
 			'listDataProvider'=>$listDataProvider,
-			'parser'=>new CMarkdownParser(),
+			'phpLighter'=>$phpLighter,
+			'jsLighter'=>$jsLighter,
+			'htmlLighter'=>$htmlLighter,
 		));
 	}
 

demo/protected/models/Person.php

+<?php
+class Person extends CModel
+{
+	public $id;
+	public $firstName;
+	public $lastName;
+	public $language;
+
+	public function attributeNames()
+	{
+		return array(
+			'id',
+			'firstName',
+			'lastName',
+			'language',
+		);
+	}
+
+	public function search()
+	{
+		return new Person();
+	}
+}

demo/protected/views/layouts/main.php

 	<!--[if lt IE 9]>
 		<script type="text/javascript" src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
 	<![endif]-->
+<!-- start Mixpanel --><script type="text/javascript">(function(d,c){var a,b,g,e;a=d.createElement("script");a.type="text/javascript";a.async=!0;a.src=("https:"===d.location.protocol?"https:":"http:")+'//api.mixpanel.com/site_media/js/api/mixpanel.2.js';b=d.getElementsByTagName("script")[0];b.parentNode.insertBefore(a,b);c._i=[];c.init=function(a,d,f){var b=c;"undefined"!==typeof f?b=c[f]=[]:f="mixpanel";g="disable track track_links track_forms register register_once unregister identify name_tag set_config".split(" ");for(e=0;e<
+g.length;e++)(function(a){b[a]=function(){b.push([a].concat(Array.prototype.slice.call(arguments,0)))}})(g[e]);c._i.push([a,d,f])};window.mixpanel=c})(document,[]);
+mixpanel.init("733930f08f73894be317b7fdbfd15229");</script><!-- end Mixpanel -->
 	<script type="text/javascript">
 		var _gaq = _gaq || [];
 		_gaq.push(['_setAccount', 'UA-29040179-1']);
 	<footer>
 
 		<p class="powered">
-			Powered by <?php echo CHtml::link('Yii PHP framework 1.1.10', 'http://www.yiiframework.com', array('target'=>'_blank')); ?> /
-			<?php echo CHtml::link('jQuery 1.7.1', 'http://www.jquery.com', array('target'=>'_blank')); ?> /
-			<?php echo CHtml::link('Yii-Bootstrap 0.9.10', 'http://www.yiiframework.com/extension/bootstrap', array('target'=>'_blank')); ?> /
-			<?php echo CHtml::link('Yii-LESS 0.9.1', 'http://www.yiiframework.com/extension/less', array('target'=>'_blank')); ?>  /
-			<?php echo CHtml::link('Yii-SEO 0.9.3', 'http://www.yiiframework.com/extension/seo', array('target'=>'_blank')); ?> /
-			<?php echo CHtml::link('Yii-Facebook 0.9.1', '#', array('rel'=>'tooltip', 'title'=>'Link available soon')); ?> /
-			<?php echo CHtml::link('Bootstrap 2.0.2', 'http://twitter.github.com/bootstrap', array('target'=>'_blank')); ?> /
+			Powered by <?php echo CHtml::link('Yii PHP framework', 'http://www.yiiframework.com', array('target'=>'_blank')); ?> /
+			<?php echo CHtml::link('jQuery', 'http://www.jquery.com', array('target'=>'_blank')); ?> /
+			<?php echo CHtml::link('Yii-Bootstrap', 'http://www.yiiframework.com/extension/bootstrap', array('target'=>'_blank')); ?> /
+			<?php echo CHtml::link('Yii-LESS', 'http://www.yiiframework.com/extension/less', array('target'=>'_blank')); ?>  /
+			<?php echo CHtml::link('Yii-SEO', 'http://www.yiiframework.com/extension/seo', array('target'=>'_blank')); ?> /
+			<?php echo CHtml::link('Yii-Facebook', '#', array('rel'=>'tooltip', 'title'=>'Link available soon')); ?> /
+			<?php echo CHtml::link('Bootstrap', 'http://twitter.github.com/bootstrap', array('target'=>'_blank')); ?> /
 			<?php echo CHtml::link('LESS', 'http://www.lesscss.org', array('target'=>'_blank')); ?>
 		</p>
 

demo/protected/views/site/index.php

 
 	<h4>Source code</h4>
 
-<?php echo $parser->safeTransform("~~~
-[php]
-<?php
+<?php echo $phpLighter->highlight("<?php
 Yii::app()->user->setFlash('success', '<strong>Well done!</strong> You successfully read this important alert message.');
 Yii::app()->user->setFlash('info', '<strong>Heads up!</strong> This alert needs your attention, but it\'s not super important.');
 Yii::app()->user->setFlash('warning', '<strong>Warning!</strong> Best check yo self, you\'re not looking too good.');
 Yii::app()->user->setFlash('error', '<strong>Oh snap!</strong> Change a few things up and try submitting again.');
-?>
-~~~
-~~~
-[php]
-<?php \$this->widget('bootstrap.widgets.BootAlert'); ?>
-~~~"); ?>
+?>"); ?>
+
+<?php echo $phpLighter->highlight("<?php \$this->widget('bootstrap.widgets.BootAlert'); ?>"); ?>
 
 	<a class="top" href="#top">Back to top &uarr;</a>
 
 
 	<h4>Source code</h4>
 
-<?php echo $parser->safeTransform("~~~
-[php]
-<?php \$this->widget('bootstrap.widgets.BootBreadcrumbs', array(
+<?php echo $phpLighter->highlight("<?php \$this->widget('bootstrap.widgets.BootBreadcrumbs', array(
 	'links'=>array('Library'=>'#', 'Data'),
-)); ?>
-~~~"); ?>
+)); ?>"); ?>
 
 	<a class="top" href="#top">Back to top &uarr;</a>
 
 					array('label'=>'Link', 'url'=>'#'),
 					array('label'=>'Link', 'url'=>'#'),
 					array('label'=>'Dropdown', 'url'=>'#', 'items'=>array(
-						array('label'=>'DROPDOWN HEADER'),
 						array('label'=>'Action', 'url'=>'#'),
 						array('label'=>'Another action', 'url'=>'#'),
 						array('label'=>'Something else here', 'url'=>'#'),
 						'---',
+						array('label'=>'NAV HEADER'),
 						array('label'=>'Separated link', 'url'=>'#'),
+						array('label'=>'One more separated link', 'url'=>'#'),
 					)),
 				),
 			),
 				'htmlOptions'=>array('class'=>'pull-right'),
 				'items'=>array(
 					array('label'=>'Link', 'url'=>'#'),
+					'---',
 					array('label'=>'Dropdown', 'url'=>'#', 'items'=>array(
-						array('label'=>'DROPDOWN HEADER'),
 						array('label'=>'Action', 'url'=>'#'),
 						array('label'=>'Another action', 'url'=>'#'),
 						array('label'=>'Something else here', 'url'=>'#'),
 
 	<h4>Source code</h4>
 
-<?php echo $parser->safeTransform("~~~
-[php]
-<?php \$this->widget('bootstrap.widgets.BootNavbar', array(
+<?php echo $phpLighter->highlight("<?php \$this->widget('bootstrap.widgets.BootNavbar', array(
 	'fixed'=>false,
 	'brand'=>'Project name',
 	'brandUrl'=>'#',
 				array('label'=>'Home', 'url'=>'#', 'active'=>true),
 				array('label'=>'Link', 'url'=>'#'),
 				array('label'=>'Dropdown', 'url'=>'#', 'items'=>array(
-					array('label'=>'DROPDOWN HEADER'),
 					array('label'=>'Action', 'url'=>'#'),
 					array('label'=>'Another action', 'url'=>'#'),
 					array('label'=>'Something else here', 'url'=>'#'),
 					'---',
+					array('label'=>'NAV HEADER'),
 					array('label'=>'Separated link', 'url'=>'#'),
+					array('label'=>'One more separated link', 'url'=>'#'),
 				)),
 			),
 		),
 			'htmlOptions'=>array('class'=>'pull-right'),
 			'items'=>array(
 				array('label'=>'Link', 'url'=>'#'),
+				'---',
 				array('label'=>'Dropdown', 'url'=>'#', 'items'=>array(
-					array('label'=>'DROPDOWN HEADER'),
 					array('label'=>'Action', 'url'=>'#'),
 					array('label'=>'Another action', 'url'=>'#'),
 					array('label'=>'Something else here', 'url'=>'#'),
 			),
 		),
 	),
-)); ?>
-~~~"); ?>
+)); ?>"); ?>
 
 	<a class="top" href="#top">Back to top &uarr;</a>
 
 
 	<h4>Source code</h4>
 
-<?php echo $parser->safeTransform("~~~
-[php]
-<?php \$this->widget('bootstrap.widgets.BootMenu', array(
+<?php echo $phpLighter->highlight("<?php \$this->widget('bootstrap.widgets.BootMenu', array(
 	'type'=>'tabs', // '', 'tabs', 'pills' (or 'list')
 	'stacked'=>false, // whether this is a stacked menu
 	'items'=>array(
 		array('label'=>'Profile', 'url'=>'#'),
 		array('label'=>'Messages', 'url'=>'#'),
 	),
-)); ?>
-~~~"); ?>
+)); ?>"); ?>
 
 	<h3>Nav list</h3>
 
 
 	<h4>Source code</h4>
 
-<?php echo $parser->safeTransform("~~~
-[php]
-<?php \$this->widget('bootstrap.widgets.BootMenu', array(
+<?php echo $phpLighter->highlight("<?php \$this->widget('bootstrap.widgets.BootMenu', array(
 	'type'=>'list',
 	'items'=>array(
 		array('label'=>'LIST HEADER'),
 		array('label'=>'Settings', 'icon'=>'cog', 'url'=>'#'),
 		array('label'=>'Help', 'icon'=>'flag', 'url'=>'#'),
 	),
-)); ?>
-~~~"); ?>
+)); ?>"); ?>
 
 	<a class="top" href="#top">Back to top &uarr;</a>
 
 		'type'=>'tabs', // 'tabs' or 'pills'
 		'htmlOptions'=>array('class'=>'tabbable'),
 		'tabs'=>$tabs,
-		/*
 		'events'=>array(
 			'show'=>"js:function() { console.log('Tabbable show.'); }",
 			'shown'=>"js:function() { console.log('Tabbable shown.'); }",
 		),
-		*/
 	)); ?>
 
 	<h4>Source code</h4>
 
-	<?php echo $parser->safeTransform("~~~
-[php]
-<?php \$this->widget('bootstrap.widgets.BootTabbed', array(
-	'type'=>'pills', // 'tabs' or 'pills'
+<?php echo $phpLighter->highlight("<?php \$this->widget('bootstrap.widgets.BootTabbable', array(
+	'type'=>'tabs', // 'tabs' or 'pills'
 	'tabs'=>array(
-		array('label'=>'Home', 'content'=>'Raw denim you probably haven\'t heard of them jean shorts Austin. Nesciunt tofu stumptown aliqua, retro synth master cleanse. Mustache cliche tempor, williamsburg carles vegan helvetica. Reprehenderit butcher retro keffiyeh dreamcatcher synth. Cosby sweater eu banh mi, qui irure terry richardson ex squid. Aliquip placeat salvia cillum iphone. Seitan aliquip quis cardigan american apparel, butcher voluptate nisi qui.'),
+		array('label'=>'Home', 'content'=>'Raw denim you probably haven\'t heard of them jean shorts Austin. Nesciunt tofu stumptown aliqua, retro synth master cleanse. Mustache cliche tempor, williamsburg carles vegan helvetica. Reprehenderit butcher retro keffiyeh dreamcatcher synth. Cosby sweater eu banh mi, qui irure terry richardson ex squid. Aliquip placeat salvia cillum iphone. Seitan aliquip quis cardigan american apparel, butcher voluptate nisi qui.', 'active'=>true),
 		array('label'=>'Profile', 'content'=>'Food truck fixie locavore, accusamus mcsweeney\'s marfa nulla single-origin coffee squid. Exercitation +1 labore velit, blog sartorial PBR leggings next level wes anderson artisan four loko farm-to-table craft beer twee. Qui photo booth letterpress, commodo enim craft beer mlkshk aliquip jean shorts ullamco ad vinyl cillum PBR. Homo nostrud organic, assumenda labore aesthetic magna delectus mollit. Keytar helvetica VHS salvia yr, vero magna velit sapiente labore stumptown. Vegan fanny pack odio cillum wes anderson 8-bit, sustainable jean shorts beard ut DIY ethical culpa terry richardson biodiesel. Art party scenester stumptown, tumblr butcher vero sint qui sapiente accusamus tattooed echo park.'),
 		array('label'=>'Dropdown', 'items'=>array(
 			array('label'=>'@fat', 'content'=>'Etsy mixtape wayfarers, ethical wes anderson tofu before they sold out mcsweeney\'s organic lomo retro fanny pack lo-fi farm-to-table readymade. Messenger bag gentrify pitchfork tattooed craft beer, iphone skateboard locavore carles etsy salvia banksy hoodie helvetica. DIY synth PBR banksy irony. Leggings gentrify squid 8-bit cred pitchfork. Williamsburg banh mi whatever gluten-free, carles pitchfork biodiesel fixie etsy retro mlkshk vice blog. Scenester cred you probably haven\'t heard of them, vinyl craft beer blog stumptown. Pitchfork sustainable tofu synth chambray yr.'),
 			array('label'=>'@mdo', 'content'=>'Trust fund seitan letterpress, keytar raw denim keffiyeh etsy art party before they sold out master cleanse gluten-free squid scenester freegan cosby sweater. Fanny pack portland seitan DIY, art party locavore wolf cliche high life echo park Austin. Cred vinyl keffiyeh DIY salvia PBR, banh mi before they sold out farm-to-table VHS viral locavore cosby sweater. Lomo wolf viral, mustache readymade thundercats keffiyeh craft beer marfa ethical. Wolf salvia freegan, sartorial keffiyeh echo park vegan.'),
 		)),
+		'events'=>array(
+			'show'=>\"js:function() { console.log('Tabbable show.'); }\",
+			'shown'=>\"js:function() { console.log('Tabbable shown.'); }\",
+		),
 	),
-)); ?>
-~~~"); ?>
+)); ?>"); ?>
+
+	<div class="alert alert-block alert-warning">
+		<strong>Note!</strong>
+		Because of a bug in the current version of Bootstrap tab-content fall below the tabs even when it shouldn't. This can be fixed by setting tab-content width to auto.
+	</div>
 
 	<div class="row">
 
 
 	</div>
 
-	<?php echo $parser->safeTransform("~~~
-[php]
-<?php \$this->widget('bootstrap.widgets.BootTabbed', array(
+<?php echo $phpLighter->highlight("<?php \$this->widget('bootstrap.widgets.BootTabbable', array(
 	'type'=>'tabs',
-	'placement'=>'below', // '', 'right', 'below' or 'left'
+	'placement'=>'below', // 'above', 'right', 'below' or 'left'
 	'tabs'=>array(
 		array('label'=>'Section 1', 'content'=>'<p>I\'m in Section 1.</p>'),
 		array('label'=>'Section 2', 'content'=>'<p>Howdy, I\'m in Section 2.</p>'),
 		array('label'=>'Section 3', 'content'=>'<p>What up girl, this is Section 3.</p>'),
 	),
-)); ?>
-~~~"); ?>
+)); ?>"); ?>
 
 	<a class="top" href="#top">Back to top &uarr;</a>
 
 
 	<h4>Source code</h4>
 
-<?php echo $parser->safeTransform("~~~
-[php]
-<?php \$this->widget('bootstrap.widgets.BootDetailView', array(
+<?php echo $phpLighter->highlight("<?php \$this->widget('bootstrap.widgets.BootDetailView', array(
 	'data'=>array('id'=>1, 'firstName'=>'Mark', 'lastName'=>'Otto', 'language'=>'CSS'),
 	'attributes'=>array(
 		array('name'=>'firstName', 'label'=>'First name'),
 		array('name'=>'lastName', 'label'=>'Last name'),
 		array('name'=>'language', 'label'=>'Language'),
 	),
-)); ?>
-~~~"); ?>
+)); ?>"); ?>
 
 	<a class="top" href="#top">Back to top &uarr;</a>
 
 	<?php $this->widget('bootstrap.widgets.BootGridView', array(
 		'dataProvider'=>$gridDataProvider,
 		'template'=>"{items}",
-		'itemsCssClass'=>'table',
 		'columns'=>$gridColumns,
 	)); ?>
 
 	<h3>Striped</h3>
 
 	<?php $this->widget('bootstrap.widgets.BootGridView', array(
+		'type'=>'striped',
 		'dataProvider'=>$gridDataProvider,
 		'template'=>"{items}",
-		'itemsCssClass'=>'table table-striped',
 		'columns'=>$gridColumns,
 	)); ?>
 
 	<h3>Bordered</h3>
 
 	<?php $this->widget('bootstrap.widgets.BootGridView', array(
+		'type'=>'bordered',
 		'dataProvider'=>$gridDataProvider,
 		'template'=>"{items}",
-		'itemsCssClass'=>'table table-bordered',
 		'columns'=>$gridColumns,
 	)); ?>
 
 	<h3>Condensed</h3>
 
 	<?php $this->widget('bootstrap.widgets.BootGridView', array(
+		'type'=>'condensed',
 		'dataProvider'=>$gridDataProvider,
 		'template'=>"{items}",
-		'itemsCssClass'=>'table table-condensed',
 		'columns'=>$gridColumns,
 	)); ?>
 
 	<h3>Striped, bordered and condensed</h3>
 
 	<?php $this->widget('bootstrap.widgets.BootGridView', array(
+		'type'=>'striped bordered condensed',
 		'dataProvider'=>$gridDataProvider,
 		'template'=>"{items}",
-		'itemsCssClass'=>'table table-striped table-bordered table-condensed',
+		'filter'=>$person->search(),
 		'columns'=>$gridColumns,
 	)); ?>
 
 	<h4>Source code</h4>
 
-<?php echo $parser->safeTransform("~~~
-[php]
-\$gridDataProvider = new CArrayDataProvider(array(
+<?php echo $phpLighter->highlight("\$gridDataProvider = new CArrayDataProvider(array(
 	array('id'=>1, 'firstName'=>'Mark', 'lastName'=>'Otto', 'language'=>'CSS'),
 	array('id'=>2, 'firstName'=>'Jacob', 'lastName'=>'Thornton', 'language'=>'JavaScript'),
 	array('id'=>3, 'firstName'=>'Stu', 'lastName'=>'Dent', 'language'=>'HTML'),
-));
-~~~
-~~~
-[php]
-<?php \$this->widget('bootstrap.widgets.BootGridView', array(
+));"); ?>
+
+<?php echo $phpLighter->highlight("<?php \$this->widget('bootstrap.widgets.BootGridView', array(
+	'type'=>'striped bordered condensed',
 	'dataProvider'=>\$gridDataProvider,
 	'template'=>\"{items}\",
-	'itemsCssClass'=>'table table-striped table-bordered table-condensed',
 	'columns'=>array(
 		array('name'=>'id', 'header'=>'#'),
 		array('name'=>'firstName', 'header'=>'First name'),
 			'htmlOptions'=>array('style'=>'width: 50px'),
 		),
 	),
-)); ?>
-~~~"); ?>
+)); ?>"); ?>
 
 	<a class="top" href="#top">Back to top &uarr;</a>
 
 
 	<h4>Source code</h4>
 
-<?php echo $parser->safeTransform("~~~
-[php]
-<?php \$this->widget('bootstrap.widgets.BootThumbnails', array(
+<?php echo $phpLighter->highlight("<?php \$this->widget('bootstrap.widgets.BootThumbnails', array(
 	'dataProvider'=>\$listDataProvider,
 	'template'=>\"{items}\\n{pager}\",
 	'itemView'=>'_thumb',
 		jQuery('.tooltip').remove();
 		jQuery('a[rel=tooltip]').tooltip();
 	}\",
-)); ?>
-~~~
-**\_thumb.php**
-~~~
-[html]
-<li class=\"span3\">
+)); ?>"); ?>
+
+<?php echo $htmlLighter->highlight("<li class=\"span3\">
 	<a href=\"#\" class=\"thumbnail\" rel=\"tooltip\" data-title=\"Tooltip\">
 		<img src=\"http://placehold.it/280x180\" alt=\"\">
 	</a>
-</li>
-~~~"); ?>
+</li>"); ?>
 
 	<a class="top" href="#top">Back to top &uarr;</a>
 
 
 	<h4>Source code</h4>
 
-<?php echo $parser->safeTransform("~~~
-[html]
-<p class=\"well\">
+<?php echo $htmlLighter->highlight("<p class=\"well\">
 	Lorem ipsum dolor sit <a href=\"#\" rel=\"tooltip\" title=\"First tooltip\">amet</a>,
 	consectetur adipiscing elit.
 	Fusce ut velit sem, id elementum elit. Quisque tincidunt magna in quam luctus a ultrices tellus luctus.
 	Maecenas nec ligula sed ipsum posuere sollicitudin pretium ac sapien.
 	Sed odio dui, pretium eu pellentesque ac,
 	<a href=\"#\" rel=\"tooltip\" title=\"Yet another tooltip\">tempor</a> sed sem.
-</p>
-~~~"); ?>
+</p>"); ?>
 
 	<a class="top" href="#top">Back to top &uarr;</a>
 
 
 	<h4>Source code</h4>
 
-<?php echo $parser->safeTransform("~~~
-[php]
-<?php echo CHtml::link('Hover me', '#', array('class'=>'btn btn-primary btn-danger', 'data-title'=>'Heading', 'data-content'=>'Content ...', 'rel'=>'popover')); ?>
-~~~"); ?>
+<?php echo $phpLighter->highlight("<?php echo CHtml::link('Hover me', '#', array('class'=>'btn btn-primary btn-danger', 'data-title'=>'Heading', 'data-content'=>'Content ...', 'rel'=>'popover')); ?>"); ?>
 
 	<a class="top" href="#top">Back to top &uarr;</a>
 
 
 	<?php $this->beginWidget('bootstrap.widgets.BootModal', array(
 		'id'=>'modal',
-		'htmlOptions'=>array('class'=>'hide'),
 		'events'=>array(
-			'show'=>"js:function() { console.log('modal show.'); }",
-			'shown'=>"js:function() { console.log('modal shown.'); }",
-			'hide'=>"js:function() { console.log('modal hide.'); }",
-			'hidden'=>"js:function() { console.log('modal hidden.'); }",
+			'show'=>"js:function() { console.log('Modal show.'); }",
+			'shown'=>"js:function() { console.log('Modal shown.'); }",
+			'hide'=>"js:function() { console.log('Modal hide.'); }",
+			'hidden'=>"js:function() { console.log('Modal hidden.'); }",
 		),
 	)); ?>
 
 		<a class="close" data-dismiss="modal">&times;</a>
 		<h3>Modal header</h3>
 	</div>
+
 	<div class="modal-body">
 		<p>One fine body...</p>
 	</div>
+
 	<div class="modal-footer">
-		<?php echo CHtml::link('Save changes', '#', array('class'=>'btn btn-primary', 'data-dismiss'=>'modal')); ?>
-		<?php echo CHtml::link('Close', '#', array('class'=>'btn', 'data-dismiss'=>'modal')); ?>
+		<?php $this->widget('bootstrap.widgets.BootButton', array('type'=>'primary', 'label'=>'Save changes', 'url'=>'#', 'htmlOptions'=>array('data-dismiss'=>'modal'))); ?>
+		<?php $this->widget('bootstrap.widgets.BootButton', array('label'=>'Close', 'url'=>'#', 'htmlOptions'=>array('data-dismiss'=>'modal'))); ?>
 	</div>
 
 	<?php $this->endWidget(); ?>
 
 	<h4>Source code</h4>
 
-<?php echo $parser->safeTransform("~~~
-[php]
-<?php \$this->beginWidget('bootstrap.widgets.BootModal', array(
+<?php echo $phpLighter->highlight("<?php \$this->beginWidget('bootstrap.widgets.BootModal', array(
 	'id'=>'modal',
-	'htmlOptions'=>array('class'=>'hide'),
 	'events'=>array(
-		'show'=>\"js:function() { console.log('modal show.'); }\",
-		'shown'=>\"js:function() { console.log('modal shown.'); }\",
-		'hide'=>\"js:function() { console.log('modal hide.'); }\",
-		'hidden'=>\"js:function() { console.log('modal hidden.'); }\",
+		'show'=>\"js:function() { console.log('Modal show.'); }\",
+		'shown'=>\"js:function() { console.log('Modal shown.'); }\",
+		'hide'=>\"js:function() { console.log('Modal hide.'); }\",
+		'hidden'=>\"js:function() { console.log('Modal hidden.'); }\",
 	),
 )); ?>
-~~~
-~~~
-[html]
+
 <div class=\"modal-header\">
 	<a class=\"close\" data-dismiss=\"modal\">&times;</a>
 	<h3>Modal header</h3>
 </div>
+
 <div class=\"modal-body\">
 	<p>One fine body…</p>
 </div>
+
 <div class=\"modal-footer\">
-	<?php echo CHtml::link('Save changes', '#', array('class'=>'btn btn-primary', 'data-dismiss'=>'modal')); ?>
-	<?php echo CHtml::link('Close', '#', array('class'=>'btn', 'data-dismiss'=>'modal')); ?>
+	<?php \$this->widget('bootstrap.widgets.BootButton', array(
+		'type'=>'primary',
+		'label'=>'Save changes',
+		'url'=>'#',
+		'htmlOptions'=>array('data-dismiss'=>'modal'),
+	)); ?>
+	<?php \$this->widget('bootstrap.widgets.BootButton', array(
+		'label'=>'Close',
+		'url'=>'#',
+		'htmlOptions'=>array('data-dismiss'=>'modal'),
+	)); ?>
 </div>
-~~~
-~~~
-[php]
+
 <?php \$this->endWidget(); ?>
-~~~
-~~~
-[php]
-<?php echo CHtml::link('Click me','#modal', array('class'=>'btn btn-primary', 'data-toggle'=>'modal')); ?>
-~~~"); ?>
+
+<?php echo CHtml::link('Click me','#modal', array('class'=>'btn btn-primary', 'data-toggle'=>'modal')); ?>"); ?>
 
 	<a class="top" href="#top">Back to top &uarr;</a>
 
 	<?php echo $form->textFieldRow($model, 'textField', array('class'=>'span3')); ?>
 	<?php echo $form->passwordFieldRow($model, 'password', array('class'=>'span3')); ?>
 	<?php echo $form->checkboxRow($model, 'checkbox'); ?>
-	<?php echo CHtml::htmlButton('<i class="icon-ok"></i> Submit', array('class'=>'btn', 'type'=>'submit')); ?>
+	<?php $this->widget('bootstrap.widgets.BootButton', array('buttonType'=>'submit', 'icon'=>'ok', 'label'=>'Submit')); ?>
 
 	<?php $this->endWidget(); ?>
 
+	<h4>Source code</h4>
+
+<?php echo $phpLighter->highlight("<?php /** @var BootActiveForm \$form */
+\$form = \$this->beginWidget('bootstrap.widgets.BootActiveForm', array(
+	'id'=>'verticalForm',
+	'htmlOptions'=>array('class'=>'well'),
+)); ?>
+
+<?php echo \$form->textFieldRow(\$model, 'textField', array('class'=>'span3')); ?>
+<?php echo \$form->passwordFieldRow(\$model, 'password', array('class'=>'span3')); ?>
+<?php echo \$form->checkboxRow(\$model, 'checkbox'); ?>
+<?php \$this->widget('bootstrap.widgets.BootButton', array('buttonType'=>'submit', 'icon'=>'ok', 'label'=>'Submit')); ?>
+
+<?php \$this->endWidget(); ?>"); ?>
+
 	<h3>Search</h3>
 
 	<?php /** @var BootActiveForm $form */
 	)); ?>
 
 	<?php echo $form->textFieldRow($model, 'textField', array('class'=>'input-medium')); ?>
-	<?php echo CHtml::htmlButton('<i class="icon-search"></i> Search', array('class'=>'btn', 'type'=>'submit')); ?>
+	<?php $this->widget('bootstrap.widgets.BootButton', array('buttonType'=>'submit', 'icon'=>'search', 'label'=>'Search')); ?>
 
 	<?php $this->endWidget(); ?>
 
+	<h4>Source code</h4>
+
+<?php echo $phpLighter->highlight("<?php /** @var BootActiveForm \$form */
+\$form = \$this->beginWidget('bootstrap.widgets.BootActiveForm', array(
+	'id'=>'searchForm',
+	'type'=>'search',
+	'htmlOptions'=>array('class'=>'well'),
+)); ?>
+
+<?php echo \$form->textFieldRow(\$model, 'textField', array('class'=>'input-medium')); ?>
+<?php \$this->widget('bootstrap.widgets.BootButton', array('buttonType'=>'submit', 'icon'=>'search', 'label'=>'Search')); ?>
+
+<?php \$this->endWidget(); ?>"); ?>
+
 	<h3>Inline</h3>
 
 	<?php /** @var BootActiveForm $form */
 
 	<?php echo $form->textFieldRow($model, 'textField', array('class'=>'input-small')); ?>
 	<?php echo $form->passwordFieldRow($model, 'password', array('class'=>'input-small')); ?>
-	<?php echo CHtml::htmlButton('Go', array('class'=>'btn', 'type'=>'submit')); ?>
+	<?php $this->widget('bootstrap.widgets.BootButton', array('buttonType'=>'submit', 'icon'=>'arrow-right', 'label'=>'Log in')); ?>
 
 	<?php $this->endWidget(); ?>
 
+	<h4>Source code</h4>
+
+<?php echo $phpLighter->highlight("<?php /** @var BootActiveForm \$form */
+\$form = \$this->beginWidget('bootstrap.widgets.BootActiveForm', array(
+	'id'=>'inlineForm',
+	'type'=>'inline',
+	'htmlOptions'=>array('class'=>'well'),
+)); ?>
+
+<?php echo \$form->textFieldRow(\$model, 'textField', array('class'=>'input-small')); ?>
+<?php echo \$form->passwordFieldRow(\$model, 'password', array('class'=>'input-small')); ?>
+<?php \$this->widget('bootstrap.widgets.BootButton', array('buttonType'=>'submit', 'icon'=>'arrow-right', 'label'=>'Log in')); ?>
+
+<?php \$this->endWidget(); ?>"); ?>
+
 	<h3>Horizontal</h3>
 
 	<?php /** @var BootActiveForm $form */
 	</fieldset>
 
 	<div class="form-actions">
-		<?php echo CHtml::htmlButton('<i class="icon-ok icon-white"></i> Submit', array('class'=>'btn btn-primary', 'type'=>'submit')); ?>
-		<?php echo CHtml::htmlButton('<i class="icon-ban-circle"></i> Reset', array('class'=>'btn', 'type'=>'reset')); ?>
+		<?php $this->widget('bootstrap.widgets.BootButton', array('buttonType'=>'submit', 'type'=>'primary', 'icon'=>'ok white', 'label'=>'Submit')); ?>
+		<?php $this->widget('bootstrap.widgets.BootButton', array('buttonType'=>'reset', 'icon'=>'remove', 'label'=>'Reset')); ?>
 	</div>
 
 	<?php $this->endWidget(); ?>
 
 	<h4>Source code</h4>
 
-<?php echo $parser->safeTransform("~~~
-[php]
-<?php /** @var BootActiveForm \$form */
-\$form = \$this->beginWidget('bootstrap.widgets.BootActiveForm', array(
-	'id'=>'verticalForm',
-	'htmlOptions'=>array('class'=>'well'),
-)); ?>
-
-<?php echo \$form->textFieldRow(\$model, 'textField', array('class'=>'span3')); ?>
-<?php echo \$form->passwordFieldRow(\$model, 'password', array('class'=>'span3')); ?>
-<?php echo \$form->checkboxRow(\$model, 'checkbox'); ?>
-<?php echo CHtml::htmlButton('<i class=\"icon-ok\"></i> Submit', array('class'=>'btn', 'type'=>'submit')); ?>
-
-<?php \$this->endWidget(); ?>
-~~~
-~~~
-[php]
-<?php /** @var BootActiveForm \$form */
-\$form = \$this->beginWidget('bootstrap.widgets.BootActiveForm', array(
-	'id'=>'searchForm',
-	'type'=>'search',
-	'htmlOptions'=>array('class'=>'well'),
-)); ?>
-
-<?php echo \$form->textFieldRow(\$model, 'textField', array('class'=>'input-medium')); ?>
-<?php echo CHtml::htmlButton('<i class=\"icon-search\"></i> Search', array('class'=>'btn','type'=>'submit')); ?>
-
-<?php \$this->endWidget(); ?>
-~~~
-~~~
-[php]
-<?php /** @var BootActiveForm \$form */
-\$form = \$this->beginWidget('bootstrap.widgets.BootActiveForm', array(
-	'id'=>'inlineForm',
-	'type'=>'inline',
-	'htmlOptions'=>array('class'=>'well'),
-)); ?>
-
-<?php echo \$form->textFieldRow(\$model, 'textField', array('class'=>'input-small')); ?>
-<?php echo \$form->passwordFieldRow(\$model, 'password', array('class'=>'input-small')); ?>
-<?php echo CHtml::htmlButton('Go', array('class'=>'btn', 'type'=>'submit')); ?>
-
-<?php \$this->endWidget(); ?>
-~~~
-~~~
-[php]
-<?php /** @var BootActiveForm \$form */
+<?php echo $phpLighter->highlight("<?php /** @var BootActiveForm \$form */
 \$form = \$this->beginWidget('bootstrap.widgets.BootActiveForm', array(
 	'id'=>'horizontalForm',
 	'type'=>'horizontal',
 </fieldset>
 
 <div class=\"form-actions\">
-	<?php echo CHtml::htmlButton('<i class=\"icon-ok icon-white\"></i> Submit', array('class'=>'btn btn-primary', 'type'=>'submit')); ?>
-	<?php echo CHtml::htmlButton('<i class=\"icon-ban-circle\"></i> Reset', array('class'=>'btn', 'type'=>'reset')); ?>
+	<?php \$this->widget('bootstrap.widgets.BootButton', array('buttonType'=>'submit', 'type'=>'primary', 'icon'=>'ok white', 'label'=>'Submit')); ?>
+	<?php \$this->widget('bootstrap.widgets.BootButton', array('buttonType'=>'reset', 'icon'=>'remove', 'label'=>'Reset')); ?>
 </div>
 
-<?php \$this->endWidget(); ?>
-~~~"); ?>
+<?php \$this->endWidget(); ?>"); ?>
 
 	<a class="top" href="#top">Back to top &uarr;</a>
 
 	<h2>Buttons</h2>
 
 	<div class="row">
-		<div class="span4">
+		<div class="span3">
 			<h3>Large</h3>
 			<p>
 				<?php $this->widget('bootstrap.widgets.BootButton', array(
 			</p>
 		</div>
 
-		<div class="span4">
+		<div class="span3">
 			<h3>Normal</h3>
 			<p>
 				<?php $this->widget('bootstrap.widgets.BootButton', array(
 			</p>
 		</div>
 
-		<div class="span4">
+		<div class="span3">
 			<h3>Small</h3>
 			<p>
 				<?php $this->widget('bootstrap.widgets.BootButton', array(
 				)); ?>
 			</p>
 		</div>
+
+		<div class="span3">
+			<h3>Mini</h3>
+			<p>
+				<?php $this->widget('bootstrap.widgets.BootButton', array(
+					'label'=>'Primary', 'type'=>'primary', 'size'=>'mini',
+				)); ?>
+
+				<?php $this->widget('bootstrap.widgets.BootButton', array(
+					'label'=>'Action', 'size'=>'mini',
+				)); ?>
+			</p>
+		</div>
 	</div>
 
 	<h4>Source code</h4>
 
-<?php echo $parser->safeTransform("~~~
-[php]
-<p>
-	<?php \$this->widget('bootstrap.widgets.BootButton', array(
-		'label'=>'Primary',
-		'type'=>'primary', // '', 'primary', 'info', 'success', 'warning', 'danger' or 'inverse'
-		'size'=>'small', // '', 'small' or 'large'
-	)); ?>
-</p>
-~~~"); ?>
+<?php echo $phpLighter->highlight("<?php \$this->widget('bootstrap.widgets.BootButton', array(
+	'label'=>'Primary',
+	'type'=>'primary', // '', 'primary', 'info', 'success', 'warning', 'danger' or 'inverse'
+	'size'=>'large', // '', 'large', 'small' or 'mini'
+)); ?>"); ?>
 
 	<h3>Button groups</h3>
 
 		)); ?>
 	</div>
 
+	<h4>Source code</h4>
+
+<?php echo $phpLighter->highlight("<?php \$this->widget('bootstrap.widgets.BootButtonGroup', array(
+	'buttons'=>array(
+		array('label'=>'1', 'url'=>'#'),
+		array('label'=>'2', 'url'=>'#'),
+		array('label'=>'3', 'url'=>'#'),
+		array('label'=>'4', 'url'=>'#'),
+	),
+)); ?>"); ?>
+
 	<h3>Dropdowns</h3>
 
 	<div class="btn-toolbar">
 
 	<h4>Source code</h4>
 
-<?php echo $parser->safeTransform("~~~
-[php]
-<div class=\"btn-toolbar\">
+<?php echo $phpLighter->highlight("<div class=\"btn-toolbar\">
 	<?php \$this->widget('bootstrap.widgets.BootButtonGroup', array(
 		'type'=>'primary', // '', 'primary', 'info', 'success', 'warning', 'danger' or 'inverse'
 		'buttons'=>array(
 			)),
 		),
 	)); ?>
-</div>
-~~~"); ?>
+</div>"); ?>
 
 	<h3>Split dropdowns</h3>
 
 
 	<h4>Source code</h4>
 
-<?php echo $parser->safeTransform("~~~
-[php]
-<div class=\"btn-toolbar\">
+<?php echo $phpLighter->highlight("<div class=\"btn-toolbar\">
 	<?php \$this->widget('bootstrap.widgets.BootButtonGroup', array(
 	    'type'=>'primary', // '', 'primary', 'info', 'success', 'warning', 'danger' or 'inverse'
 		'buttons'=>array(
 			)),
 		),
 	)); ?>
-</div>
-~~~"); ?>
+</div>"); ?>
 
 	<h3>Stateful</h3>
 
 	<p>
 		<?php $this->widget('bootstrap.widgets.BootButton', array(
-			'fn'=>'button',
+			'buttonType'=>'button',
 			'type'=>'primary',
 			'label'=>'Click me',
 			'loadingText'=>'loading...',
 
 	<h4>Source code</h4>
 
-<?php echo $parser->safeTransform("~~~
-[php]
-<?php \$this->widget('bootstrap.widgets.BootButton', array(
-	'fn'=>'button',
+<?php echo $phpLighter->highlight("<?php \$this->widget('bootstrap.widgets.BootButton', array(
+	'buttonType'=>'button',
 	'type'=>'primary',
 	'label'=>'Click me',
 	'loadingText'=>'loading...',
 	'htmlOptions'=>array('id'=>'buttonStateful'),
-)); ?>
-~~~"); ?>
+)); ?>"); ?>
 
-<?php echo $parser->safeTransform("~~~
-[javascript]
-$('#buttonStateful').click(function() {
+<?php echo $jsLighter->highlight("$('#buttonStateful').click(function() {
 	var btn = $(this);
 	btn.button('loading'); // call the loading function
 	setTimeout(function() {
 		btn.button('reset'); // call the reset function
 	}, 3000);
-});
-~~~"); ?>
+});"); ?>
 
 	<h3>Single state</h3>
 
 	<p>
 		<?php $this->widget('bootstrap.widgets.BootButton', array(
-			'fn'=>'button',
+			'buttonType'=>'button',
 			'type'=>'primary',
 			'label'=>'Toggle me',
 			'toggle'=>true,
 
 	<h4>Source code</h4>
 
-<?php echo $parser->safeTransform("~~~
-[php]
-<?php \$this->widget('bootstrap.widgets.BootButton', array(
-	'fn'=>'button',
+<?php echo $phpLighter->highlight("<?php \$this->widget('bootstrap.widgets.BootButton', array(
+	'buttonType'=>'button',
 	'type'=>'primary',
 	'label'=>'Toggle me',
 	'toggle'=>true,
-)); ?>
-~~~"); ?>
+)); ?>"); ?>
 
-	<h3>Checkbox</h3>
+	<div class="row">
 
-	<p>@todo</p>
+		<div class="span3">
 
-	<h3>Radio</h3>
+			<h3>Checkbox</h3>
 
-	<p>@todo</p>
+			<?php $this->widget('bootstrap.widgets.BootButtonGroup', array(
+				'type' => 'primary',
+				'toggle' => 'checkbox',
+				'buttons' => array(
+					array('label'=>'Left'),
+					array('label'=>'Middle'),
+					array('label'=>'Right'),
+				),
+			)); ?>
+			<br />
+
+		</div>
+
+		<div class="span3">
+
+			<h3>Radio</h3>
+
+			<?php $this->widget('bootstrap.widgets.BootButtonGroup', array(
+				'type' => 'primary',
+				'toggle' => 'radio',
+				'buttons' => array(
+					array('label'=>'Left'),
+					array('label'=>'Middle'),
+					array('label'=>'Right'),
+				),
+			)); ?>
+			<br />
+
+		</div>
+
+	</div>
+
+	<h4>Source code</h4>
+
+<?php echo $phpLighter->highlight("<?php \$this->widget('bootstrap.widgets.BootButtonGroup', array(
+	'type' => 'primary',
+	'toggle' => 'radio', // 'checkbox' or 'radio'
+	'buttons' => array(
+		array('label'=>'Left'),
+		array('label'=>'Middle'),
+		array('label'=>'Right'),
+	),
+)); ?>"); ?>
 
 	<a class="top" href="#top">Back to top &uarr;</a>
 
 
 	<h4>Source code</h4>
 
-	<?php echo $parser->safeTransform("~~~
-[php]
-<?php \$this->beginWidget('bootstrap.widgets.BootHero', array(
+<?php echo $phpLighter->highlight("<?php \$this->beginWidget('bootstrap.widgets.BootHero', array(
 	'heading'=>'Hello, world!',
-)); ?>
-~~~
-~~~
-[html]
-<p>This is a simple hero unit, a simple jumbotron-style component for calling extra attention to featured content or information.</p>
-<p><a class=\"btn btn-primary btn-large\">Learn more</a></p>
-~~~
-~~~
-[php]
-<?php \$this->endWidget(); ?>
-~~~"); ?>
+)); ?>"); ?>
+
+<?php echo $htmlLighter->highlight("<p>This is a simple hero unit, a simple jumbotron-style component for calling extra attention to featured content or information.</p>
+<p><a class=\"btn btn-primary btn-large\">Learn more</a></p>"); ?>
+
+<?php echo $phpLighter->highlight("<?php \$this->endWidget(); ?>"); ?>
 
 		<a class="top" href="#top">Back to top &uarr;</a>
 
 
 	<h4>Source code</h4>
 
-	<?php echo $parser->safeTransform("~~~
-[php]
-<?php \$this->widget('bootstrap.widgets.BootCarousel', array(
+<?php echo $phpLighter->highlight("<?php \$this->widget('bootstrap.widgets.BootCarousel', array(
 	'items'=>array(
 		array('image'=>'http://placehold.it/770x400&text=First+thumbnail', 'label'=>'First Thumbnail label', 'caption'=>'Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.'),
 		array('image'=>'http://placehold.it/770x400&text=Second+thumbnail', 'label'=>'Second Thumbnail label', 'caption'=>'Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.'),
 		'slide'=>\"js:function() { console.log('Carousel slide.'); }\",
 		'slid'=>\"js:function() { console.log('Carousel slid.'); }\",
 	),
-)); ?>
-~~~"); ?>
+)); ?>"); ?>
 
 		<a class="top" href="#top">Back to top &uarr;</a>
 
 
 	<h4>Source code</h4>
 
-	<?php echo $parser->safeTransform("~~~
-[php]
-<?php \$this->widget('bootstrap.widgets.BootProgress', array(
+<?php echo $phpLighter->highlight("<?php \$this->widget('bootstrap.widgets.BootProgress', array(
 	'type'=>'danger', // '', 'info', 'success' or 'danger'
 	'percent'=>40, // the progress
 	'striped'=>true,
 	'animated'=>true,
-)); ?>
-~~~"); ?>
+)); ?>"); ?>
 
 	<a class="top" href="#top">Back to top &uarr;</a>
 
 
 	<h4>Source code</h4>
 
-	<?php echo $parser->safeTransform("~~~
-[php]
-<?php \$this->widget('bootstrap.widgets.BootTypeahead', array(
+<?php echo $phpLighter->highlight("<?php \$this->widget('bootstrap.widgets.BootTypeahead', array(
 	'options'=>array(
 		'source'=>array('Alabama', 'Alaska', 'Arizona', 'Arkansas', 'California', 'Colorado', 'Connecticut', 'Delaware', 'Florida', 'Georgia', 'Hawaii', 'Idaho', 'Illinois', 'Indiana', 'Iowa', 'Kansas', 'Kentucky', 'Louisiana', 'Maine', 'Maryland', 'Massachusetts', 'Michigan', 'Minnesota', 'Mississippi', 'Missouri', 'Montana', 'Nebraska', 'Nevada', 'New Hampshire', 'New Jersey', 'New Mexico', 'New York', 'North Dakota', 'North Carolina', 'Ohio', 'Oklahoma', 'Oregon', 'Pennsylvania', 'Rhode Island', 'South Carolina', 'South Dakota', 'Tennessee', 'Texas', 'Utah', 'Vermont', 'Virginia', 'Washington', 'West Virginia', 'Wisconsin', 'Wyoming'),
 		'items'=>4,
 	        return ~item.toLowerCase().indexOf(this.query.toLowerCase());
 	    }\",
 	),
-)); ?>
-~~~"); ?>
+)); ?>"); ?>
+
+	<a class="top" href="#top">Back to top &uarr;</a>
+
+</section>
+
+<section id="bootLabel">
+
+	<h2>Labels</h2>
+
+	<p>
+		<?php $this->widget('bootstrap.widgets.BootLabel', array('label'=>'Default')); ?>
+		<?php $this->widget('bootstrap.widgets.BootLabel', array('type'=>'success', 'label'=>'Success')); ?>
+		<?php $this->widget('bootstrap.widgets.BootLabel', array('type'=>'warning', 'label'=>'Warning')); ?>
+		<?php $this->widget('bootstrap.widgets.BootLabel', array('type'=>'important', 'label'=>'Important')); ?>
+		<?php $this->widget('bootstrap.widgets.BootLabel', array('type'=>'info', 'label'=>'Info')); ?>
+		<?php $this->widget('bootstrap.widgets.BootLabel', array('type'=>'inverse', 'label'=>'Inverse')); ?>
+	</p>
+
+	<h4>Source code</h4>
+
+<?php echo $phpLighter->highlight("<?php \$this->widget('bootstrap.widgets.BootLabel', array(
+	'type'=>'success', // '', 'success', 'warning', 'important', 'info' or 'inverse'
+	'label'=>'Success',
+)); ?>"); ?>
+
+	<a class="top" href="#top">Back to top &uarr;</a>
+
+</section>
+
+<section id="bootBadge">
+
+	<h2>Badges</h2>
+
+	<p>
+		<?php $this->widget('bootstrap.widgets.BootBadge', array('label'=>'1')); ?>
+		<?php $this->widget('bootstrap.widgets.BootBadge', array('type'=>'success', 'label'=>'2')); ?>
+		<?php $this->widget('bootstrap.widgets.BootBadge', array('type'=>'warning', 'label'=>'4')); ?>
+		<?php $this->widget('bootstrap.widgets.BootBadge', array('type'=>'error', 'label'=>'6')); ?>
+		<?php $this->widget('bootstrap.widgets.BootBadge', array('type'=>'info', 'label'=>'8')); ?>
+		<?php $this->widget('bootstrap.widgets.BootBadge', array('type'=>'inverse', 'label'=>'10')); ?>
+	</p>
+
+	<h4>Source code</h4>
+
+<?php echo $phpLighter->highlight("<?php \$this->widget('bootstrap.widgets.BootBadge', array(
+	'type'=>'success', // '', 'success', 'warning', 'error', 'info' or 'inverse'
+	'label'=>'2',
+)); ?>"); ?>
 
 	<a class="top" href="#top">Back to top &uarr;</a>
 
 
 </section>
 
-<div class="subnav subnav-fixed">
+<div class="subnav well">
 
 	<?php $this->widget('BootMenu', array(
-		'type'=>'pills',
+		'type'=>'list',
 		'scrollspy'=>array('spy'=>'.subnav', 'offset'=>50),
 		'items'=>array(
+			array('label'=>'WIDGETS'),
 			array('label'=>'Alert', 'url'=>'#bootAlert'),
 			array('label'=>'Breadcrumb', 'url'=>'#bootBreadcrumbs'),
 			array('label'=>'Navbar', 'url'=>'#bootNavbar'),
 			array('label'=>'Carousel', 'url'=>'#bootCarousel'),
 			array('label'=>'Progress', 'url'=>'#bootProgress'),
 			array('label'=>'Typeahead', 'url'=>'#bootTypeahead'),
+			array('label'=>'Labels <span class="label label-inverse">New</span>', 'encodeLabel'=>false, 'url'=>'#bootLabel'),
+			array('label'=>'Badges <span class="label label-inverse">New</span>', 'encodeLabel'=>false, 'url'=>'#bootBadge'),
 		),
 	)); ?>
 

demo/protected/views/site/setup.php

     .....
     'bootstrap'=>array(
         'class'=>'ext.bootstrap.components.Bootstrap', // assuming you extracted bootstrap under extensions
-        'coreCss'=>true, // whether to register the Bootstrap core CSS (bootstrap.min.css), defaults to true
-        'responsiveCss'=>false, // whether to register the Bootstrap responsive CSS (bootstrap-responsive.min.css), default to false
-        'plugins'=>array(
-            // Optionally you can configure the \"global\" plugins (button, popover, tooltip and transition)
-            // To prevent a plugin from being loaded set it to false as demonstrated below
-            'transition'=>false, // disable CSS transitions
-            'tooltip'=>array(
-                'selector'=>'a.tooltip', // bind the plugin tooltip to anchor tags with the 'tooltip' class
-                'options'=>array(
-                    'placement'=>'bottom', // place the tooltips below instead
-				),
-            ),
-            .....
-            // If you need help with configuring the plugins, please refer to Bootstrap's own documentation:
-			// http://twitter.github.com/bootstrap/javascript.html
-        ),
     ),
 ),
 ~~~"); ?>
 
 </section>
 
+<section id="config">
+
+	<h2>Configuration</h2>
+
+	<p>@todo</p>
+
+</section>
+
 <section id="less">
 
 	<h2>Using LESS</h2>
 
 </section>
 
-<div class="subnav subnav-fixed">
+<div class="subnav well">
 
 	<?php $this->widget('bootstrap.widgets.BootMenu', array(
-		'type'=>'pills',
+		'type'=>'list',
 		'scrollspy'=>array('spy'=>'.subnav', 'offset'=>50),
 		'items'=>array(
 			array('label'=>'Setup', 'url'=>'#setup'),
+			array('label'=>'Configuration', 'url'=>'#config'),
 			array('label'=>'Using LESS', 'url'=>'#less'),
 			array('label'=>'Plugin API', 'url'=>'#api')
 		),

gii/bootstrap/BootstrapCode.php

 <?php
 /**
- * BootCrudCode class file.
+ * BootstrapCode class file.
  * @author Christoffer Niska <ChristofferNiska@gmail.com>
  * @copyright Copyright &copy; Christoffer Niska 2011-
  * @license http://www.opensource.org/licenses/bsd-license.php New BSD License
  */
 
 Yii::import('gii.generators.crud.CrudCode');
+
 class BootstrapCode extendS CrudCode
 {
 	public function generateActiveRow($modelClass, $column)

gii/bootstrap/BootstrapGenerator.php

 <?php
 /**
- * BootCrudGenerator class file.
+ * BootstrapGenerator class file.
  * @author Christoffer Niska <ChristofferNiska@gmail.com>
  * @copyright Copyright &copy; Christoffer Niska 2011-
  * @license http://www.opensource.org/licenses/bsd-license.php New BSD License
  */
 
 Yii::import('gii.generators.crud.CrudGenerator');
+
 class BootstrapGenerator extends CrudGenerator
 {
 	public $codeModel = 'bootstrap.gii.bootstrap.BootstrapCode';

gii/bootstrap/templates/default/_form.php

  * - $this: the BootCrudCode object
  */
 ?>
-<?php echo "<?php \$form=\$this->beginWidget('ext.bootstrap.widgets.BootActiveForm',array(
+<?php echo "<?php \$form=\$this->beginWidget('bootstrap.widgets.BootActiveForm',array(
 	'id'=>'".$this->class2id($this->modelClass)."-form',
 	'enableAjaxValidation'=>false,
 )); ?>\n"; ?>
 <?php
 }
 ?>
-	<div class="actions">
-		<?php echo "<?php echo CHtml::submitButton(\$model->isNewRecord ? 'Create' : 'Save',array('class'=>'btn primary')); ?>\n"; ?>
+	<div class="form-actions">
+		<?php echo "<?php \$this->widget('bootstrap.widgets.BootButton', array(
+			'fn'=>'submit',
+			'type'=>'primary',
+			'label'=>\$model->isNewRecord ? 'Create' : 'Save',
+		)); ?>\n"; ?>
 	</div>
 
 <?php echo "<?php \$this->endWidget(); ?>\n"; ?>

gii/bootstrap/templates/default/_search.php

  * - $this: the BootCrudCode object
  */
 ?>
-<?php echo "<?php \$form=\$this->beginWidget('ext.bootstrap.widgets.BootActiveForm',array(
+<?php echo "<?php \$form=\$this->beginWidget('bootstrap.widgets.BootActiveForm',array(
 	'action'=>Yii::app()->createUrl(\$this->route),
 	'method'=>'get',
 )); ?>\n"; ?>
 	<?php echo "<?php echo ".$this->generateActiveRow($this->modelClass,$column)."; ?>\n"; ?>
 
 <?php endforeach; ?>
-	<div class="actions">
-		<?php echo "<?php echo CHtml::submitButton('Search',array('class'=>'btn primary')); ?>\n"; ?>
+	<div class="form-actions">
+		<?php echo "<?php \$this->widget('bootstrap.widgets.BootButton', array(
+			'type'=>'primary',
+			'label'=>'Search',
+		)); ?>\n"; ?>
 	</div>
 
 <?php echo "<?php \$this->endWidget(); ?>\n"; ?>

gii/bootstrap/templates/default/admin.php

 )); ?>\n"; ?>
 </div><!-- search-form -->
 
-<?php echo "<?php"; ?> $this->widget('ext.bootstrap.widgets.BootGridView',array(
+<?php echo "<?php"; ?> $this->widget('bootstrap.widgets.BootGridView',array(
 	'id'=>'<?php echo $this->class2id($this->modelClass); ?>-grid',
 	'dataProvider'=>$model->search(),
 	'filter'=>$model,
 	echo "\t\t*/\n";
 ?>
 		array(
-			'class'=>'CButtonColumn',
+			'class'=>'BootButtonColumn',
 		),
 	),
 )); ?>

gii/bootstrap/templates/default/index.php

 
 <h1><?php echo $label; ?></h1>
 
-<?php echo "<?php"; ?> $this->widget('ext.bootstrap.widgets.BootListView',array(
+<?php echo "<?php"; ?> $this->widget('bootstrap.widgets.BootListView',array(
 	'dataProvider'=>$dataProvider,
 	'itemView'=>'_view',
 )); ?>

gii/bootstrap/templates/default/view.php

 
 <h1>View <?php echo $this->modelClass." #<?php echo \$model->{$this->tableSchema->primaryKey}; ?>"; ?></h1>
 
-<?php echo "<?php"; ?> $this->widget('ext.bootstrap.widgets.BootDetailView',array(
+<?php echo "<?php"; ?> $this->widget('bootstrap.widgets.BootDetailView',array(
 	'data'=>$model,
 	'attributes'=>array(
 <?php

lib/bootstrap/less/mixins.less

 }
 // Reset filters for IE
 .reset-filter() {
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+  filter: e(%("progid:DXImageTransform.Microsoft.gradient(enabled = false)"));
 }
 
 

widgets/BootBadge.php

+<?php
+/**
+ * BootBadge class file.
+ * @author Christoffer Niska <ChristofferNiska@gmail.com>
+ * @copyright  Copyright &copy; Christoffer Niska 2011-
+ * @license http://www.opensource.org/licenses/bsd-license.php New BSD License
+ * @package bootstrap.widgets
+ */
+
+Yii::import('bootstrap.widgets.BootWidget');
+
+/**
+ * Bootstrap badge widget.
+ */
+class BootBadge extends BootWidget
+{
+	// Badge types.
+	const TYPE_DEFAULT = '';
+	const TYPE_SUCCESS = 'success';
+	const TYPE_WARNING = 'warning';
+	const TYPE_ERROR = 'error';
+	const TYPE_INFO = 'info';
+	const TYPE_INVERSE = 'inverse';
+
+	/**
+	 * @var string the badge type (defaults to '').
+	 * Valid types are '', 'success', 'warning', 'error', 'info' and 'inverse'.
+	 */
+	public $type = self::TYPE_DEFAULT;
+	/**
+	 * @var string the badge text.
+	 */
+	public $label;
+	/**
+	 * @var boolean whether to encode the label.
+	 */
+	public $encodeLabel = true;
+
+	/**
+	 * Initializes the widget.
+	 */
+	public function init()
+	{
+		$classes = array('badge');
+
+		$validTypes = array(self::TYPE_SUCCESS, self::TYPE_WARNING,
+				self::TYPE_ERROR, self::TYPE_INFO, self::TYPE_INVERSE);
+
+		if (in_array($this->type, $validTypes))
+			$classes[] = 'badge-'.$this->type;
+
+		$cssClass = implode(' ', $classes);
+		if (isset($this->htmlOptions['class']))
+			$this->htmlOptions['class'] .= ' '.$cssClass;
+		else
+			$this->htmlOptions['class'] = $cssClass;
+
+		if ($this->encodeLabel === true)
+			$this->label = CHtml::encode($this->label);
+	}
+
+	/**
+	 * Runs the widget.
+	 */
+	public function run()
+	{
+		echo CHtml::tag('span', $this->htmlOptions, $this->label);
+	}
+}

widgets/BootButton.php

  */
 class BootButton extends BootWidget
 {
-	// Button callback functions.
-	const FN_LINK = 'link';
-	const FN_BUTTON = 'button';
-	const FN_SUBMIT = 'submit';
-	const FN_SUBMITLINK = 'submitLink';
-	const FN_RESET = 'reset';
-	const FN_AJAXLINK = 'ajaxLink';
-	const FN_AJAXBUTTON = 'ajaxButton';
-	const FN_AJAXSUBMIT = 'ajaxSubmit';
+	// Button callback types.
+	const BUTTON_LINK = 'link';
+	const BUTTON_BUTTON = 'button';
+	const BUTTON_SUBMIT = 'submit';
+	const BUTTON_SUBMITLINK = 'submitLink';
+	const BUTTON_RESET = 'reset';
+	const BUTTON_AJAXLINK = 'ajaxLink';
+	const BUTTON_AJAXBUTTON = 'ajaxButton';
+	const BUTTON_AJAXSUBMIT = 'ajaxSubmit';
 
 	// Button types.
 	const TYPE_NORMAL = '';
 	const TYPE_INVERSE = 'inverse';
 
 	// Button sizes.
+	const SIZE_MINI = 'mini';
 	const SIZE_SMALL = 'small';
 	const SIZE_NORMAL = '';
 	const SIZE_LARGE = 'large';
 
 	/**
-	 * @var string the callback function for rendering the button.
+	 * @var string the button callback types.
 	 * Valid values are 'link', 'button', 'submit', 'submitLink', 'reset', 'ajaxLink', 'ajaxButton' and 'ajaxSubmit'.
 	 */
-	public $fn = self::FN_LINK;
+	public $buttonType = self::BUTTON_LINK;
 	/**
 	 * @var string the button type.
 	 * Valid values are '', 'primary', 'info', 'success', 'warning', 'danger' and 'inverse'.
 	 * @var array the button ajax options (used by 'ajaxLink' and 'ajaxButton').
 	 */