web_app_template 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.rspec +2 -0
- data/.travis.yml +6 -0
- data/Gemfile +8 -0
- data/LICENSE +20 -0
- data/README.md +24 -3
- data/lib/generators/web_app_template/layout/layout_generator.rb +60 -0
- data/lib/generators/web_app_template/layout/templates/bootstrap3/carousel.html.erb +336 -0
- data/lib/generators/web_app_template/layout/templates/bootstrap3/jumbotron.html.erb +85 -0
- data/lib/generators/web_app_template/layout/templates/bootstrap3/justified_nav.html.erb +157 -0
- data/lib/generators/web_app_template/layout/templates/bootstrap3/narrow_jumbotron.html.erb +146 -0
- data/lib/generators/web_app_template/layout/templates/bootstrap3/navbar.html.erb +78 -0
- data/lib/generators/web_app_template/layout/templates/bootstrap3/navbar_fixed_top.html.erb +77 -0
- data/lib/generators/web_app_template/layout/templates/bootstrap3/navbar_static_top.html.erb +81 -0
- data/lib/generators/web_app_template/layout/templates/bootstrap3/non_responsive.html.erb +200 -0
- data/lib/generators/web_app_template/layout/templates/bootstrap3/offcanvas.html.erb +163 -0
- data/lib/generators/web_app_template/layout/templates/bootstrap3/sign_in_page.html.erb +76 -0
- data/lib/generators/web_app_template/layout/templates/bootstrap3/starter.html.erb +57 -0
- data/lib/generators/web_app_template/layout/templates/bootstrap3/sticky_footer.html.erb +77 -0
- data/lib/generators/web_app_template/layout/templates/bootstrap3/sticky_footer_navbar.html.erb +118 -0
- data/lib/web_app_template/version.rb +1 -1
- data/spec/generators/layout_spec.rb +42 -0
- data/spec/spec_helper.rb +14 -0
- data/web_app_template.gemspec +3 -2
- metadata +39 -11
- data/.idea/encodings.xml +0 -5
- data/.idea/misc.xml +0 -5
- data/.idea/modules.xml +0 -9
- data/.idea/scopes/scope_settings.xml +0 -5
- data/.idea/vcs.xml +0 -7
- data/.idea/web_app_template.iml +0 -19
- data/.idea/workspace.xml +0 -50
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 18d05517e8ff8b41ab8042d4de1f0cae4a5aa917
|
4
|
+
data.tar.gz: cbe5a10fdc1f5c03bb06505b029212bdd9c58d32
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 03f5645d549c14554dc53c93db42cc2c470a77b07f6678d841ff673f8b27058077ded05f05c237715a8adcf465e2420bad213469bb25508ac9605c2e0652269e
|
7
|
+
data.tar.gz: 9f5085284dde3f4709f986d00cf77c3650f7b733118f6c9d19718203c3caef159cebfd847df982c3e6560368c0ef24b39d1c35d98e7954cd3017c08e4e24dbd1
|
data/.gitignore
CHANGED
data/.rspec
ADDED
data/.travis.yml
ADDED
data/Gemfile
CHANGED
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2014 jurrick
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
6
|
+
this software and associated documentation files (the "Software"), to deal in
|
7
|
+
the Software without restriction, including without limitation the rights to
|
8
|
+
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
9
|
+
the Software, and to permit persons to whom the Software is furnished to do so,
|
10
|
+
subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
17
|
+
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
18
|
+
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
19
|
+
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
20
|
+
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# WebAppTemplate
|
2
2
|
|
3
|
-
|
3
|
+
Web App Template is a rails generator that you can use to generate site templates quickly.
|
4
|
+
Today some bootstrap v3 templates already available to generate layouts.
|
4
5
|
|
5
6
|
## Installation
|
6
7
|
|
@@ -18,11 +19,31 @@ Or install it yourself as:
|
|
18
19
|
|
19
20
|
## Usage
|
20
21
|
|
21
|
-
|
22
|
+
### Layout generator
|
23
|
+
|
24
|
+
Used without parameters, it generates the layout inside the application.html.erb file using the bootstrap template "Starter".
|
25
|
+
|
26
|
+
rails g web_app_template:layout
|
27
|
+
|
28
|
+
You can specify the layout file name in the first parameter:
|
29
|
+
|
30
|
+
rails g web_app_template:layout admin # it will generate a layout called `admin.html.erb`
|
31
|
+
|
32
|
+
If you want to use another bootstrap template layout, instead of the default, you can use the `--template` option:
|
33
|
+
|
34
|
+
rails g web_app_template:layout admin --template="jumbotron"
|
35
|
+
|
36
|
+
You can specify the template engine with `--engine=name` option, where name can be erb (default), haml or slim:
|
37
|
+
|
38
|
+
rails g web_app_template:layout --engine=slim # you must specify slim in your Gemfile
|
39
|
+
|
40
|
+
You can specify the text used in the header with the `--app-name` option:
|
41
|
+
|
42
|
+
rails g web_app_template:layout --app-name="My New Application"
|
22
43
|
|
23
44
|
## Contributing
|
24
45
|
|
25
|
-
1. Fork it ( http://github.com
|
46
|
+
1. Fork it ( http://github.com/jurrick/web_app_template/fork )
|
26
47
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
27
48
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
28
49
|
4. Push to the branch (`git push origin my-new-feature`)
|
@@ -0,0 +1,60 @@
|
|
1
|
+
module WebAppTemplate
|
2
|
+
class Layout < Rails::Generators::Base
|
3
|
+
desc "Installs the application layout"
|
4
|
+
source_root File.expand_path('../templates/bootstrap3', __FILE__)
|
5
|
+
|
6
|
+
argument :layout_name, :type => :string, :default => 'application'
|
7
|
+
|
8
|
+
class_option :app_name, :type => :string, :default => 'Web App', :desc => 'Specify the application name'
|
9
|
+
class_option :engine, :type => :string, :default => 'erb', :desc => 'Specify the template engine (erb, haml or slim)'
|
10
|
+
class_option :type, :type => :string, :default => 'bootstrap3', :desc => 'Layout type, default or bootstrap3'
|
11
|
+
class_option :template, :type => :string, :default => 'starter', :desc => 'Layout template, default starter'
|
12
|
+
|
13
|
+
def copy_layout
|
14
|
+
layout = "#{options.template.underscore}.html.erb"
|
15
|
+
case options.engine
|
16
|
+
when 'erb'
|
17
|
+
template layout, "app/views/layouts/#{layout_name.underscore}.html.erb"
|
18
|
+
when 'haml'
|
19
|
+
generate_haml_layout layout
|
20
|
+
when 'slim'
|
21
|
+
generate_slim_layout layout
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
protected
|
26
|
+
|
27
|
+
def generate_haml_layout(layout)
|
28
|
+
require 'haml'
|
29
|
+
require 'html2haml'
|
30
|
+
Dir.mktmpdir('web-app-template-haml') do |haml_root|
|
31
|
+
tmp_html_path = "#{haml_root}/#{layout}"
|
32
|
+
tmp_haml_path = "#{haml_root}/#{layout}.haml"
|
33
|
+
template layout, tmp_html_path, :verbose => false
|
34
|
+
`html2haml --erb --xhtml #{tmp_html_path} #{tmp_haml_path}`
|
35
|
+
copy_file tmp_haml_path, "app/views/layouts/#{layout_name.underscore}.html.haml"
|
36
|
+
end
|
37
|
+
rescue LoadError
|
38
|
+
say "HAML is not installed, or it is not specified in your Gemfile."
|
39
|
+
exit
|
40
|
+
end
|
41
|
+
|
42
|
+
def generate_slim_layout(layout)
|
43
|
+
require 'slim'
|
44
|
+
require 'html2haml'
|
45
|
+
require 'haml2slim'
|
46
|
+
Dir.mktmpdir('web-app-template-slim') do |slim_root|
|
47
|
+
tmp_html_path = "#{slim_root}/#{layout}"
|
48
|
+
tmp_haml_path = "#{slim_root}/#{layout}.haml"
|
49
|
+
tmp_slim_path = "#{slim_root}/#{layout}.slim"
|
50
|
+
template layout, tmp_html_path, :verbose => false
|
51
|
+
`html2haml --erb --xhtml #{tmp_html_path} #{tmp_haml_path}`
|
52
|
+
`haml2slim #{tmp_haml_path} #{tmp_slim_path}`
|
53
|
+
copy_file tmp_slim_path, "app/views/layouts/#{layout_name.underscore}.html.slim"
|
54
|
+
end
|
55
|
+
rescue LoadError
|
56
|
+
say "SLIM is not installed, or it is not specified in your Gemfile."
|
57
|
+
exit
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,336 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html lang="en">
|
3
|
+
<head>
|
4
|
+
<meta charset="utf-8">
|
5
|
+
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
6
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
7
|
+
|
8
|
+
<title><%= options.app_name %></title>
|
9
|
+
|
10
|
+
<%%= stylesheet_link_tag "application", media: "all", "data-turbolinks-track" => true %>
|
11
|
+
<%%= javascript_include_tag "application", "data-turbolinks-track" => true %>
|
12
|
+
<%%= csrf_meta_tag %>
|
13
|
+
|
14
|
+
<style type="text/css">
|
15
|
+
/* GLOBAL STYLES
|
16
|
+
-------------------------------------------------- */
|
17
|
+
/* Padding below the footer and lighter body text */
|
18
|
+
|
19
|
+
body {
|
20
|
+
padding-bottom: 40px;
|
21
|
+
color: #5a5a5a;
|
22
|
+
}
|
23
|
+
|
24
|
+
|
25
|
+
|
26
|
+
/* CUSTOMIZE THE NAVBAR
|
27
|
+
-------------------------------------------------- */
|
28
|
+
|
29
|
+
/* Special class on .container surrounding .navbar, used for positioning it into place. */
|
30
|
+
.navbar-wrapper {
|
31
|
+
position: absolute;
|
32
|
+
top: 0;
|
33
|
+
left: 0;
|
34
|
+
right: 0;
|
35
|
+
z-index: 20;
|
36
|
+
}
|
37
|
+
|
38
|
+
/* Flip around the padding for proper display in narrow viewports */
|
39
|
+
.navbar-wrapper .container {
|
40
|
+
padding-left: 0;
|
41
|
+
padding-right: 0;
|
42
|
+
}
|
43
|
+
.navbar-wrapper .navbar {
|
44
|
+
padding-left: 15px;
|
45
|
+
padding-right: 15px;
|
46
|
+
}
|
47
|
+
|
48
|
+
|
49
|
+
/* CUSTOMIZE THE CAROUSEL
|
50
|
+
-------------------------------------------------- */
|
51
|
+
|
52
|
+
/* Carousel base class */
|
53
|
+
.carousel {
|
54
|
+
height: 500px;
|
55
|
+
margin-bottom: 60px;
|
56
|
+
}
|
57
|
+
/* Since positioning the image, we need to help out the caption */
|
58
|
+
.carousel-caption {
|
59
|
+
z-index: 10;
|
60
|
+
}
|
61
|
+
|
62
|
+
/* Declare heights because of positioning of img element */
|
63
|
+
.carousel .item {
|
64
|
+
height: 500px;
|
65
|
+
background-color: #777;
|
66
|
+
}
|
67
|
+
.carousel-inner > .item > img {
|
68
|
+
position: absolute;
|
69
|
+
top: 0;
|
70
|
+
left: 0;
|
71
|
+
min-width: 100%;
|
72
|
+
height: 500px;
|
73
|
+
}
|
74
|
+
|
75
|
+
|
76
|
+
|
77
|
+
/* MARKETING CONTENT
|
78
|
+
-------------------------------------------------- */
|
79
|
+
|
80
|
+
/* Pad the edges of the mobile views a bit */
|
81
|
+
.marketing {
|
82
|
+
padding-left: 15px;
|
83
|
+
padding-right: 15px;
|
84
|
+
}
|
85
|
+
|
86
|
+
/* Center align the text within the three columns below the carousel */
|
87
|
+
.marketing .col-lg-4 {
|
88
|
+
text-align: center;
|
89
|
+
margin-bottom: 20px;
|
90
|
+
}
|
91
|
+
.marketing h2 {
|
92
|
+
font-weight: normal;
|
93
|
+
}
|
94
|
+
.marketing .col-lg-4 p {
|
95
|
+
margin-left: 10px;
|
96
|
+
margin-right: 10px;
|
97
|
+
}
|
98
|
+
|
99
|
+
|
100
|
+
/* Featurettes
|
101
|
+
------------------------- */
|
102
|
+
|
103
|
+
.featurette-divider {
|
104
|
+
margin: 80px 0; /* Space out the Bootstrap <hr> more */
|
105
|
+
}
|
106
|
+
|
107
|
+
/* Thin out the marketing headings */
|
108
|
+
.featurette-heading {
|
109
|
+
font-weight: 300;
|
110
|
+
line-height: 1;
|
111
|
+
letter-spacing: -1px;
|
112
|
+
}
|
113
|
+
|
114
|
+
|
115
|
+
|
116
|
+
/* RESPONSIVE CSS
|
117
|
+
-------------------------------------------------- */
|
118
|
+
|
119
|
+
@media (min-width: 768px) {
|
120
|
+
|
121
|
+
/* Remove the edge padding needed for mobile */
|
122
|
+
.marketing {
|
123
|
+
padding-left: 0;
|
124
|
+
padding-right: 0;
|
125
|
+
}
|
126
|
+
|
127
|
+
/* Navbar positioning foo */
|
128
|
+
.navbar-wrapper {
|
129
|
+
margin-top: 20px;
|
130
|
+
}
|
131
|
+
.navbar-wrapper .container {
|
132
|
+
padding-left: 15px;
|
133
|
+
padding-right: 15px;
|
134
|
+
}
|
135
|
+
.navbar-wrapper .navbar {
|
136
|
+
padding-left: 0;
|
137
|
+
padding-right: 0;
|
138
|
+
}
|
139
|
+
|
140
|
+
/* The navbar becomes detached from the top, so we round the corners */
|
141
|
+
.navbar-wrapper .navbar {
|
142
|
+
border-radius: 4px;
|
143
|
+
}
|
144
|
+
|
145
|
+
/* Bump up size of carousel content */
|
146
|
+
.carousel-caption p {
|
147
|
+
margin-bottom: 20px;
|
148
|
+
font-size: 21px;
|
149
|
+
line-height: 1.4;
|
150
|
+
}
|
151
|
+
|
152
|
+
.featurette-heading {
|
153
|
+
font-size: 50px;
|
154
|
+
}
|
155
|
+
|
156
|
+
}
|
157
|
+
|
158
|
+
@media (min-width: 992px) {
|
159
|
+
.featurette-heading {
|
160
|
+
margin-top: 120px;
|
161
|
+
}
|
162
|
+
}
|
163
|
+
</style>
|
164
|
+
</head>
|
165
|
+
<!-- NAVBAR
|
166
|
+
================================================== -->
|
167
|
+
<body>
|
168
|
+
<div class="navbar-wrapper">
|
169
|
+
<div class="container">
|
170
|
+
|
171
|
+
<div class="navbar navbar-inverse navbar-static-top" role="navigation">
|
172
|
+
<div class="container">
|
173
|
+
<div class="navbar-header">
|
174
|
+
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
|
175
|
+
<span class="sr-only">Toggle navigation</span>
|
176
|
+
<span class="icon-bar"></span>
|
177
|
+
<span class="icon-bar"></span>
|
178
|
+
<span class="icon-bar"></span>
|
179
|
+
</button>
|
180
|
+
<a class="navbar-brand" href="#"><%= options.app_name %></a>
|
181
|
+
</div>
|
182
|
+
<div class="navbar-collapse collapse">
|
183
|
+
<ul class="nav navbar-nav">
|
184
|
+
<li class="active"><a href="#">Home</a></li>
|
185
|
+
<li><a href="#about">About</a></li>
|
186
|
+
<li><a href="#contact">Contact</a></li>
|
187
|
+
<li class="dropdown">
|
188
|
+
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a>
|
189
|
+
<ul class="dropdown-menu">
|
190
|
+
<li><a href="#">Action</a></li>
|
191
|
+
<li><a href="#">Another action</a></li>
|
192
|
+
<li><a href="#">Something else here</a></li>
|
193
|
+
<li class="divider"></li>
|
194
|
+
<li class="dropdown-header">Nav header</li>
|
195
|
+
<li><a href="#">Separated link</a></li>
|
196
|
+
<li><a href="#">One more separated link</a></li>
|
197
|
+
</ul>
|
198
|
+
</li>
|
199
|
+
</ul>
|
200
|
+
</div>
|
201
|
+
</div>
|
202
|
+
</div>
|
203
|
+
|
204
|
+
</div>
|
205
|
+
</div>
|
206
|
+
|
207
|
+
|
208
|
+
<!-- Carousel
|
209
|
+
================================================== -->
|
210
|
+
<div id="myCarousel" class="carousel slide" data-ride="carousel">
|
211
|
+
<!-- Indicators -->
|
212
|
+
<ol class="carousel-indicators">
|
213
|
+
<li data-target="#myCarousel" data-slide-to="0" class="active"></li>
|
214
|
+
<li data-target="#myCarousel" data-slide-to="1"></li>
|
215
|
+
<li data-target="#myCarousel" data-slide-to="2"></li>
|
216
|
+
</ol>
|
217
|
+
<div class="carousel-inner">
|
218
|
+
<div class="item active">
|
219
|
+
<img data-src="holder.js/900x500/auto/#777:#7a7a7a/text:First slide" alt="First slide">
|
220
|
+
<div class="container">
|
221
|
+
<div class="carousel-caption">
|
222
|
+
<h1>Example headline.</h1>
|
223
|
+
<p>Note: If you're viewing this page via a <code>file://</code> URL, the "next" and "previous" Glyphicon buttons on the left and right might not load/display properly due to web browser security rules.</p>
|
224
|
+
<p><a class="btn btn-lg btn-primary" href="#" role="button">Sign up today</a></p>
|
225
|
+
</div>
|
226
|
+
</div>
|
227
|
+
</div>
|
228
|
+
<div class="item">
|
229
|
+
<img data-src="holder.js/900x500/auto/#666:#6a6a6a/text:Second slide" alt="Second slide">
|
230
|
+
<div class="container">
|
231
|
+
<div class="carousel-caption">
|
232
|
+
<h1>Another example headline.</h1>
|
233
|
+
<p>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.</p>
|
234
|
+
<p><a class="btn btn-lg btn-primary" href="#" role="button">Learn more</a></p>
|
235
|
+
</div>
|
236
|
+
</div>
|
237
|
+
</div>
|
238
|
+
<div class="item">
|
239
|
+
<img data-src="holder.js/900x500/auto/#555:#5a5a5a/text:Third slide" alt="Third slide">
|
240
|
+
<div class="container">
|
241
|
+
<div class="carousel-caption">
|
242
|
+
<h1>One more for good measure.</h1>
|
243
|
+
<p>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.</p>
|
244
|
+
<p><a class="btn btn-lg btn-primary" href="#" role="button">Browse gallery</a></p>
|
245
|
+
</div>
|
246
|
+
</div>
|
247
|
+
</div>
|
248
|
+
</div>
|
249
|
+
<a class="left carousel-control" href="#myCarousel" data-slide="prev"><span class="glyphicon glyphicon-chevron-left"></span></a>
|
250
|
+
<a class="right carousel-control" href="#myCarousel" data-slide="next"><span class="glyphicon glyphicon-chevron-right"></span></a>
|
251
|
+
</div><!-- /.carousel -->
|
252
|
+
|
253
|
+
|
254
|
+
|
255
|
+
<!-- Marketing messaging and featurettes
|
256
|
+
================================================== -->
|
257
|
+
<!-- Wrap the rest of the page in another container to center all the content. -->
|
258
|
+
|
259
|
+
<div class="container marketing">
|
260
|
+
|
261
|
+
<!-- Three columns of text below the carousel -->
|
262
|
+
<div class="row">
|
263
|
+
<div class="col-lg-4">
|
264
|
+
<img class="img-circle" data-src="holder.js/140x140" alt="Generic placeholder image">
|
265
|
+
<h2>Heading</h2>
|
266
|
+
<p>Donec sed odio dui. Etiam porta sem malesuada magna mollis euismod. Nullam id dolor id nibh ultricies vehicula ut id elit. Morbi leo risus, porta ac consectetur ac, vestibulum at eros. Praesent commodo cursus magna.</p>
|
267
|
+
<p><a class="btn btn-default" href="#" role="button">View details »</a></p>
|
268
|
+
</div><!-- /.col-lg-4 -->
|
269
|
+
<div class="col-lg-4">
|
270
|
+
<img class="img-circle" data-src="holder.js/140x140" alt="Generic placeholder image">
|
271
|
+
<h2>Heading</h2>
|
272
|
+
<p>Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh.</p>
|
273
|
+
<p><a class="btn btn-default" href="#" role="button">View details »</a></p>
|
274
|
+
</div><!-- /.col-lg-4 -->
|
275
|
+
<div class="col-lg-4">
|
276
|
+
<img class="img-circle" data-src="holder.js/140x140" alt="Generic placeholder image">
|
277
|
+
<h2>Heading</h2>
|
278
|
+
<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>
|
279
|
+
<p><a class="btn btn-default" href="#" role="button">View details »</a></p>
|
280
|
+
</div><!-- /.col-lg-4 -->
|
281
|
+
</div><!-- /.row -->
|
282
|
+
|
283
|
+
|
284
|
+
<!-- START THE FEATURETTES -->
|
285
|
+
|
286
|
+
<hr class="featurette-divider">
|
287
|
+
|
288
|
+
<div class="row featurette">
|
289
|
+
<div class="col-md-7">
|
290
|
+
<h2 class="featurette-heading">First featurette heading. <span class="text-muted">It'll blow your mind.</span></h2>
|
291
|
+
<p class="lead">Donec ullamcorper nulla non metus auctor fringilla. Vestibulum id ligula porta felis euismod semper. Praesent commodo cursus magna, vel scelerisque nisl consectetur. Fusce dapibus, tellus ac cursus commodo.</p>
|
292
|
+
</div>
|
293
|
+
<div class="col-md-5">
|
294
|
+
<img class="featurette-image img-responsive" data-src="holder.js/500x500/auto" alt="Generic placeholder image">
|
295
|
+
</div>
|
296
|
+
</div>
|
297
|
+
|
298
|
+
<hr class="featurette-divider">
|
299
|
+
|
300
|
+
<div class="row featurette">
|
301
|
+
<div class="col-md-5">
|
302
|
+
<img class="featurette-image img-responsive" data-src="holder.js/500x500/auto" alt="Generic placeholder image">
|
303
|
+
</div>
|
304
|
+
<div class="col-md-7">
|
305
|
+
<h2 class="featurette-heading">Oh yeah, it's that good. <span class="text-muted">See for yourself.</span></h2>
|
306
|
+
<p class="lead">Donec ullamcorper nulla non metus auctor fringilla. Vestibulum id ligula porta felis euismod semper. Praesent commodo cursus magna, vel scelerisque nisl consectetur. Fusce dapibus, tellus ac cursus commodo.</p>
|
307
|
+
</div>
|
308
|
+
</div>
|
309
|
+
|
310
|
+
<hr class="featurette-divider">
|
311
|
+
|
312
|
+
<div class="row featurette">
|
313
|
+
<div class="col-md-7">
|
314
|
+
<h2 class="featurette-heading">And lastly, this one. <span class="text-muted">Checkmate.</span></h2>
|
315
|
+
<p class="lead">Donec ullamcorper nulla non metus auctor fringilla. Vestibulum id ligula porta felis euismod semper. Praesent commodo cursus magna, vel scelerisque nisl consectetur. Fusce dapibus, tellus ac cursus commodo.</p>
|
316
|
+
</div>
|
317
|
+
<div class="col-md-5">
|
318
|
+
<img class="featurette-image img-responsive" data-src="holder.js/500x500/auto" alt="Generic placeholder image">
|
319
|
+
</div>
|
320
|
+
</div>
|
321
|
+
|
322
|
+
<hr class="featurette-divider">
|
323
|
+
|
324
|
+
<!-- /END THE FEATURETTES -->
|
325
|
+
|
326
|
+
|
327
|
+
<!-- FOOTER -->
|
328
|
+
<footer>
|
329
|
+
<p class="pull-right"><a href="#">Back to top</a></p>
|
330
|
+
<p>© 2013 Company, Inc. · <a href="#">Privacy</a> · <a href="#">Terms</a></p>
|
331
|
+
</footer>
|
332
|
+
|
333
|
+
</div><!-- /.container -->
|
334
|
+
|
335
|
+
</body>
|
336
|
+
</html>
|