Dropped bootstrap directory

This commit is contained in:
Josh Sherman 2013-01-31 15:08:26 -05:00
parent 465976818c
commit 96ac5ccbf5
26 changed files with 0 additions and 8514 deletions

View file

@ -1 +0,0 @@
private/logs

View file

@ -1,4 +0,0 @@
<VirtualHost *:80>
ServerName pickles.local
DocumentRoot /usr/share/pickles/bootstrap/public
</VirtualHost>

View file

@ -1,54 +0,0 @@
server
{
listen 80;
server_name pickles.local;
access_log /var/log/nginx/pickles.access.log;
error_log /var/log/nginx/pickles.error.log;
root /usr/share/pickles/bootstrap/public;
rewrite_log on;
# Rewrites static content with an appended timestamp
location ~ ^/(.+)\.(\d+)\.(css|js|gif|png|jpg|jpeg)$
{
rewrite ^/(.+)\.(\d+)\.(css|js|gif|png|jpg|jpeg)$ /$1.$3 break;
expires max;
}
location /
{
index index.php;
# Strips the trailing slash
rewrite ^/(.*)/$ /$1 permanent;
# if file exists return it right away
if (-f $request_filename)
{
expires max;
break;
}
if (!-e $request_filename)
{
rewrite ^/(.+)$ /index.php?request=$1 last;
}
}
location ~ index\.php$
{
try_files $uri =404;
include /etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/share/pickles/bootstrap/public$fastcgi_script_name;
}
location ~ /\.ht
{
deny all;
}
}

View file

@ -1,53 +0,0 @@
<?php
$config = array(
'environments' => array(
'local' => 'pickles.local',
'production' => 'pickles.prod',
),
'php' => array(
'local' => array(
'date.timezone' => 'America/New_York',
'display_errors' => true,
'error_reporting' => -1,
'session.gc_maxlifetime' => Time::DAY,
),
'production' => array(
'date.timezone' => 'America/New_York',
'display_errors' => false,
'error_reporting' => -1,
'session.gc_maxlifetime' => Time::DAY,
),
),
'pickles' => array(
'disabled' => false,
'session' => 'files',
'template' => 'index',
'module' => 'home',
//'404' => 'error/404',
'datasource' => 'mysql',
'cache' => 'memcached',
'profiler' => array(
'local' => false,
'production' => false,
),
'logging' => array(
'local' => true,
'production' => false,
),
'minify' => array(
'local' => true,
'production' => false,
),
),
'site' => array(
'name' => 'PICKLES Bootstrap',
'analytics' => 'UA-########-#',
),
);
?>

View file

@ -1,22 +0,0 @@
<?php
class callback_github_hook extends Module
{
public $method = 'POST';
public function __default()
{
if (isset($_SERVER['HTTP_USER_AGENT'], $_SERVER['REMOTE_ADDR'], $_POST['payload'])
&& $_SERVER['HTTP_USER_AGENT'] == 'GitHub Services Web Hook'
&& in_array($_SERVER['REMOTE_ADDR'], array('207.97.227.253', '50.57.128.197', '108.171.174.178')))
{
`git pull origin master`;
`git submodule init`;
`git submodule update`;
}
Browser::redirect('/');
}
}
?>

View file

@ -1,56 +0,0 @@
# Sets the expires header
#ExpiresActive on
#ExpiresDefault "access plus 10 years"
# Sets up ETags
FileETag MTime Size
# Sets up compression
SetOutputFilter DEFLATE
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI \.pdf$ no-gzip dont-vary
# Prevent session IDs from appearing
php_value session.use_only_cookies 1
php_value session.use_trans_sid 0
# Sets up the mod_rewrite engine
RewriteEngine on
RewriteBase /
# Strips the trailing slash
RewriteRule ^(.+)/$ $1 [R]
# Strips the preceeding subdomain
# RewriteCond %{SERVER_ADDR} ^74\.207\.225\.243
# RewriteCond %{HTTP_HOST} ^(.+).scenekids.com$ [NC]
# RewriteRule ^(.*)$ http://scenekids.com [R=301,L]
# Doesn't rewrite any files that actually exist
RewriteCond %{REQUEST_FILENAME} -f [NC,OR]
RewriteCond %{REQUEST_FILENAME} -d [NC]
RewriteRule .* - [L]
# Sends error pages to / with a 301
#RewriteRule ^error$ / [R=301,L]
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f
# Rewrites static content with an appended timestamp
RewriteRule ^(.+)\.([\d]+)\.(css|js|gif|png|jpg|jpeg)$ /$1.$3 [NC,QSA,L]
# TODO Add additional rewrites for ID's / pagination
RewriteRule ^(.+)$ index.php?request=$1 [NC,QSA]
# Set up the error documents
ErrorDocument 400 /error
ErrorDocument 401 /error
ErrorDocument 403 /error
ErrorDocument 404 /error
ErrorDocument 500 /error
# Blocks access to .htaccess
<Files .htaccess>
order allow,deny
deny from all
</Files>

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

View file

@ -1,28 +0,0 @@
body
{
padding-top: 40px;
}
.btn:active
{
margin-top: 2px;
}
input.error, .error
{
color: #b94a48;
border-color: #ee5f5b;
}
label.error
{
font-style: italic;
}
input.error:focus, .error:focus
{
border-color: #e9322d;
-webkit-box-shadow: 0 0 6px #f8b9b7;
-moz-box-shadow: 0 0 6px #f8b9b7;
box-shadow: 0 0 6px #f8b9b7;
}

View file

@ -1 +0,0 @@
body{padding-top:40px}.btn:active{margin-top:2px}input.error,.error{color:#b94a48;border-color:#ee5f5b}label.error{font-style:italic}input.error:focus,.error:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7}

View file

@ -1,42 +0,0 @@
.clear { clear: both }
.clear-left { clear: left }
.clear-right { clear: right }
.pointer { cursor: pointer }
.hidden { display: none }
.float-left { float: left }
.float-right { float: right }
.italic { font-style: italic }
.oblique { font-style: oblique }
.small-caps { font-variant: small-caps }
.bold { font-weight: bold }
.absolute { position: absolute }
.fixed { position: fixed }
.relative { position: relative }
.center { text-align: center }
.left { text-align: left }
.right { text-align: right }
.underline { text-decoration: underline }
.overline { text-decoration: overline }
.strike { text-decoration: line-through }
.blink { text-decoration: blink }
.upper { text-transform: uppercase }
.lower { text-transform: lowercase }
.capitalize { text-transform: capitalize }
.top { vertical-align: top }
.middle { vertical-align: middle }
.bottom { vertical-align: bottom }
.nowrap { white-space: nowrap }
.normal { text-transform: none; font-style: normal; font-weight: normal; text-decoration: none }

View file

@ -1 +0,0 @@
.clear { clear:both }.clear-left { clear:left }.clear-right{ clear:right }.pointer { cursor:pointer }.hidden { display:none }.float-left { float:left }.float-right{ float:right }.italic { font-style:italic }.oblique { font-style:oblique }.small-caps { font-variant:small-caps }.bold { font-weight:bold }.absolute { position:absolute }.fixed { position:fixed }.relative { position:relative }.center { text-align:center }.left { text-align:left }.right { text-align:right }.underline { text-decoration:underline }.overline { text-decoration:overline }.strike { text-decoration:line-through }.blink { text-decoration:blink }.upper { text-transform:uppercase }.lower { text-transform:lowercase }.capitalize { text-transform:capitalize }.top { vertical-align:top }.middle { vertical-align:middle }.bottom { vertical-align:bottom }.nowrap { white-space:nowrap }.normal { text-transform:none; font-style:normal; font-weight:normal; text-decoration:none }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

View file

@ -1,12 +0,0 @@
<?php
// Where dem PICKLES at?!
set_include_path(get_include_path() . PATH_SEPARATOR . '/usr/share/pickles');
// Give'm to me!
require_once 'pickles.php';
// OM NOM NOM NOM!!~!
new Controller();
?>

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

View file

@ -1,24 +0,0 @@
window.onload = function()
{
if (window.jQuery)
{
$(document).ready(function()
{
$('.tip').tooltip({
'placement': 'top',
'trigger' : 'hover'
});
if ($('.content form').length)
{
$('.content form input:eq(0)').focus();
}
$('.content form input, .content form button').focus(function()
{
$('.content form label span.label').hide().removeClass('hidden');
$(this).parent('.well').children().find('span').show();
});
});
}
}

View file

@ -1 +0,0 @@
window.onload=function(){window.jQuery&&$(document).ready(function(){$(".tip").tooltip({placement:"top",trigger:"hover"});$(".content form").length&&$(".content form input:eq(0)").focus();$(".content form input, .content form button").focus(function(){$(".content form label span.label").hide().removeClass("hidden");$(this).parent(".well").children().find("span").show()})})};

View file

@ -1,203 +0,0 @@
$(document).ready(function()
{
// Apply the validator if available
if (jQuery().validate)
{
$('form').validate();
}
// Catches forms being submitted
$('form.ajax input[type=submit], form.ajax button[type=submit], form.ajax .submit').live('click', function()
{
if ($(this).attr('readonly') == 'readonly')
{
return;
}
// Grabs the form
var form = $(this).parents('form').get();
// Removes any messages
$('.ajax-form-error, .ajax-form-message, label.error', form).fadeOut('normal', function(){ $(this).remove(); });
// Checks that it's valid
if (typeof $(form).valid == 'undefined' || $(form).valid() == true)
{
// Sets the buttons, inputs and textareas to READONLY
$('button, input, textarea', form).attr('readonly', 'readonly');
// Forces the cursor to be waiting
document.body.style.cursor = 'wait';
var method = $(form).attr('method') == '' ? 'GET' : $(form).attr('method');
var action = $(form).attr('action');
if (action == '')
{
injectMessage(form, 'Form element lacks action attribute', 'error');
// Removes READONLY status
$('button, input, textarea', form).removeAttr('readonly');
// Returns the cursor to normal... but is anyone really normal?
document.body.style.cursor = 'default';
}
else
{
$.ajax({
'type': method,
'url': action,
'data': $(form).serialize(),
'dataType': 'json',
'success': function(data, textStatus, XMLHttpRequest)
{
if (data.status != 'success' && typeof(data.message) != 'undefined')
{
injectMessage(form, data.message, 'error');
}
else if (data.status == 'success')
{
$('input[type=text]', form).val('');
$('input[type=email]', form).val('');
$('select', form).val('');
$('textarea', form).val('');
if (typeof(data.message) != 'undefined')
{
injectMessage(form, data.message, 'message');
}
if (typeof(data.url) != 'undefined')
{
parent.location.href = data.url;
}
}
else
{
// Only really serves a purpose when debugging
//injectMessage(form, data, 'error');
}
if (typeof(data.callback) != 'undefined')
{
window[data.callback](data);
}
// Removes READONLY status
$('button, input, textarea', form).removeAttr('readonly');
// Returns the cursor to normal... but is anyone really normal?
document.body.style.cursor = 'default';
},
'error': function(XMLHttpRequest, textStatus, errorThrown)
{
injectMessage(form, errorThrown, 'error');
// Removes READONLY status
$('button, input, textarea', form).removeAttr('readonly');
// Returns the cursor to normal... but is anyone really normal?
document.body.style.cursor = 'default';
}
});
}
}
else
{
return false;
}
});
// Forces forms to return false on submit
$('form.ajax').submit(function(){ return false; });
// Automatically applies zebra stripes to tables
$('table tr:even td').addClass('even');
$('table tr:odd td').addClass('odd');
});
// Injects a div before the passed element
function injectMessage(element, message, type, duration)
{
if (typeof type == 'undefined')
{
var type = 'error';
}
switch (type)
{
case 'error':
var type = 'error';
message = '<strong>Error:</strong> ' + message;
break;
case 'message':
var type = 'success';
break;
default:
var type = 'info';
break;
}
var id = 'pickles-' + Date.now();
var class_name = 'ajax-form-' + type + ' alert alert-' + type;
var style = 'display:none';
$('.' + class_name, element).remove();
$(element).prepend('<div id="' + id + '" class="' + class_name + '" style="' + style + '" generated="true">' + message + '</div>');
$('#' + id, element).fadeIn();
if (typeof duration != 'undefined')
{
$('#' + id, element).delay(duration).fadeOut();
}
return $('.' + class_name, element);
}
// Automatically tab to next element when max length is reached
function autoTab(element)
{
if ($(element).val().length >= $(element).attr('maxlength'))
{
$(element).next().focus();
}
}
// Disable Enter Key
function disableEnterKey(e)
{
var key;
if(window.event)
{
key = window.event.keyCode; // IE
}
else
{
key = e.which; // Firefox
}
return (key != 13);
}
// Truncate a string and optionally create a roll over
function truncate(string, length, hover)
{
if (string.length > length)
{
if (hover == true)
{
string = '<span title="' + string + '" style="cursor:help">' + string.substring(0, length) + '...</span>';
}
else
{
string = string.substring(0, length) + '...';
}
}
return string;
}

View file

@ -1,6 +0,0 @@
$(document).ready(function(){jQuery().validate&&$("form").validate();$("form.ajax input[type=submit], form.ajax button[type=submit], form.ajax .submit").live("click",function(){if("readonly"!=$(this).attr("readonly")){var a=$(this).parents("form").get();$(".ajax-form-error, .ajax-form-message, label.error",a).fadeOut("normal",function(){$(this).remove()});if("undefined"==typeof $(a).valid||!0==$(a).valid()){$("button, input, textarea",a).attr("readonly","readonly");document.body.style.cursor="wait";
var c=""==$(a).attr("method")?"GET":$(a).attr("method"),b=$(a).attr("action");""==b?(injectMessage(a,"Form element lacks action attribute","error"),$("button, input, textarea",a).removeAttr("readonly"),document.body.style.cursor="default"):$.ajax({type:c,url:b,data:$(a).serialize(),dataType:"json",success:function(b){"success"!=b.status&&"undefined"!=typeof b.message?injectMessage(a,b.message,"error"):"success"==b.status&&($("input[type=text]",a).val(""),$("input[type=email]",a).val(""),$("select",
a).val(""),$("textarea",a).val(""),"undefined"!=typeof b.message&&injectMessage(a,b.message,"message"),"undefined"!=typeof b.url&&(parent.location.href=b.url));if("undefined"!=typeof b.callback)window[b.callback](b);$("button, input, textarea",a).removeAttr("readonly");document.body.style.cursor="default"},error:function(b,c,f){injectMessage(a,f,"error");$("button, input, textarea",a).removeAttr("readonly");document.body.style.cursor="default"}})}else return!1}});$("form.ajax").submit(function(){return!1});
$("table tr:even td").addClass("even");$("table tr:odd td").addClass("odd")});
function injectMessage(a,c,b,e){"undefined"==typeof b&&(b="error");switch(b){case "error":b="error";c="<strong>Error:</strong> "+c;break;case "message":b="success";break;default:b="info"}var d="pickles-"+Date.now(),b="ajax-form-"+b+" alert alert-"+b;$("."+b,a).remove();$(a).prepend('<div id="'+d+'" class="'+b+'" style="display:none" generated="true">'+c+"</div>");$("#"+d,a).fadeIn();"undefined"!=typeof e&&$("#"+d,a).delay(e).fadeOut();return $("."+b,a)}
function autoTab(a){$(a).val().length>=$(a).attr("maxlength")&&$(a).next().focus()}function disableEnterKey(a){return 13!=(window.event?window.event.keyCode:a.which)}function truncate(a,c,b){a.length>c&&(a=!0==b?'<span title="'+a+'" style="cursor:help">'+a.substring(0,c)+"...</span>":a.substring(0,c)+"...");return a};

View file

@ -1,5 +0,0 @@
#!/bin/bash
# Check if either mysql or postgresql is passed in
# Check if the username and password are present

View file

@ -1,81 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title><?php echo $__config->site['name']; ?></title>
<link rel="icon" type="image/x-icon" href="/favicon.ico" />
<link rel="shortcut icon" type="image/x-icon" href="/favicon.ico" />
<link rel="stylesheet" href="<?php echo $__dynamic->css('/css/bootstrap.css'); ?>" />
<link rel="stylesheet" href="<?php echo $__dynamic->css('/css/foundation.css'); ?>" />
<link rel="stylesheet" href="<?php echo $__dynamic->css('/css/core.css'); ?>" />
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', '<?php // TODO ?>']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
</head>
<body>
<div class="navbar navbar-inverse navbar-fixed-top">
<div class="navbar-inner">
<div class="container<?php $__fluid ? '-fluid' : ''; ?>">
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</a>
<a class="brand" href="/"><?php echo $__config->site['name']; ?></a>
<div class="nav-collapse collapse">
<ul class="nav">
<li class="active"><a href="/">Home</a></li>
<li><a href="/about">About</a></li>
<li><a href="/contact">Contact</a></li>
</ul>
<ul class="nav pull-right">
<li><a href="/login"><span class="icon-lock icon-white"></span> Sign in / Sign up</a></li>
</ul>
</div>
</div>
</div>
</div>
<div class="container<?php $__fluid ? '-fluid' : ''; ?>">
<div class="content <?php echo $__css_class; ?>">
<?php require $__template; ?>
</div>
<hr />
<footer>
<p>&copy; <?php echo date('Y') . ' ' . $__config->site['name']; ?></p>
</footer>
</div>
<!--[if lt IE 9]><script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.10.0/jquery.validate.min.js"></script>
<script src="<?php echo $__dynamic->js('/js/bootstrap.js'); ?>"></script>
<script src="<?php echo $__dynamic->js('/js/pickles.js'); ?>"></script>
<script src="<?php echo $__dynamic->js('/js/core.js'); ?>"></script>
<script>
var _gaq = _gaq || [];
_gaq.push(['_setAccount', '<?php echo $__config->site['analytics']; ?>']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
</body>
</html>

View file

@ -1,12 +0,0 @@
<div class="page-header"><h1>About <?php echo $__config->site['name']; ?></h1></div>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis eget tellus arcu, non cursus turpis. Sed id ligula elit. Pellentesque purus est, volutpat et lacinia ut, ultrices porttitor mi. Cras accumsan euismod lectus, id rhoncus justo suscipit vel. Aliquam sed orci massa. Phasellus hendrerit velit vitae lorem fermentum commodo. Suspendisse potenti. Aenean non arcu justo, at tincidunt massa. Vestibulum ultrices lacus quis felis blandit vestibulum vitae sit amet tortor. Vivamus aliquet vulputate justo et scelerisque. Phasellus at sapien massa. Proin id elit id sapien varius commodo.</p>
<p>Mauris molestie ultricies libero non sodales. Maecenas suscipit lacus non mauris pellentesque porttitor. Nam urna eros, ultricies eget ultrices non, interdum a lectus. Maecenas sagittis ligula sit amet tellus sagittis hendrerit. Donec porttitor risus a ante posuere eu lacinia felis rhoncus. Sed semper condimentum posuere. Quisque vitae mi nisi. Nullam sem turpis, suscipit ac lacinia a, feugiat id lacus. Morbi facilisis tristique vulputate. Curabitur et nisi ante. Nam turpis nisi, lacinia nec luctus sit amet, accumsan id quam.</p>
<p>Nullam nec nulla vitae neque tincidunt ultrices vel ac mi. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Ut tempor auctor purus mattis suscipit. Integer at nibh neque, convallis semper felis. Etiam ornare, enim at elementum bibendum, urna mauris scelerisque erat, sed consequat risus mi vestibulum ipsum. Nulla a ipsum a enim iaculis blandit ut a magna. In sollicitudin scelerisque auctor. Proin et magna ante. Donec tincidunt venenatis leo ornare volutpat. Aenean libero sem, accumsan in placerat ac, sagittis quis tellus. Cras erat nisi, viverra et vehicula at, porta vel turpis. Vestibulum accumsan ultricies diam vitae adipiscing. Proin lorem felis, molestie nec varius ut, malesuada vitae enim.</p>
<p>In non egestas lorem. Quisque nibh ipsum, gravida non varius a, tincidunt eget odio. Aenean eleifend tincidunt elit, nec placerat neque semper nec. Vestibulum interdum commodo libero sit amet blandit. Nulla arcu metus, porttitor a tincidunt non, laoreet id enim. Nulla bibendum tincidunt porta. Aliquam eget velit a sem hendrerit euismod. Phasellus ultricies velit lectus.</p>
<p>Donec mauris arcu, iaculis id sodales vel, mattis at libero. Maecenas lacus massa, tincidunt vitae varius sit amet, sollicitudin nec odio. Mauris semper magna vitae sem laoreet vitae imperdiet quam scelerisque. In eget ipsum nec justo suscipit tristique at ac elit. Morbi bibendum vehicula lobortis. Cras bibendum rhoncus euismod. Fusce gravida fringilla nisi, ut viverra ante rutrum eu. Nam lorem lorem, rutrum sed pharetra et, porttitor vestibulum enim. Nulla et orci quis tellus porta pretium. Curabitur commodo magna vel ipsum vehicula quis semper justo eleifend. Suspendisse tempor, dolor nec lacinia tempus, neque augue pulvinar nulla, vitae gravida lacus metus at enim. Pellentesque eu elit sed augue gravida rutrum aliquet sit amet mauris.</p>

View file

@ -1,25 +0,0 @@
<!-- Main hero unit for a primary marketing message or call to action -->
<div class="hero-unit">
<h1>Hello, world!</h1>
<p>This is a template for a simple marketing or informational website. It includes a large callout called the hero unit and three supporting pieces of content. Use it as a starting point to create something more unique.</p>
<p><a class="btn btn-primary btn-large">Learn more &raquo;</a></p>
</div>
<!-- Example row of columns -->
<div class="row">
<div class="span4">
<h2>Heading</h2>
<p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p>
<p><a class="btn" href="#">View details &raquo;</a></p>
</div>
<div class="span4">
<h2>Heading</h2>
<p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p>
<p><a class="btn" href="#">View details &raquo;</a></p>
</div>
<div class="span4">
<h2>Heading</h2>
<p>Donec sed odio dui. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Vestibulum id ligula porta felis euismod semper. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.</p>
<p><a class="btn" href="#">View details &raquo;</a></p>
</div>
</div>