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.
Files changed (33) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +6 -0
  5. data/Gemfile +8 -0
  6. data/LICENSE +20 -0
  7. data/README.md +24 -3
  8. data/lib/generators/web_app_template/layout/layout_generator.rb +60 -0
  9. data/lib/generators/web_app_template/layout/templates/bootstrap3/carousel.html.erb +336 -0
  10. data/lib/generators/web_app_template/layout/templates/bootstrap3/jumbotron.html.erb +85 -0
  11. data/lib/generators/web_app_template/layout/templates/bootstrap3/justified_nav.html.erb +157 -0
  12. data/lib/generators/web_app_template/layout/templates/bootstrap3/narrow_jumbotron.html.erb +146 -0
  13. data/lib/generators/web_app_template/layout/templates/bootstrap3/navbar.html.erb +78 -0
  14. data/lib/generators/web_app_template/layout/templates/bootstrap3/navbar_fixed_top.html.erb +77 -0
  15. data/lib/generators/web_app_template/layout/templates/bootstrap3/navbar_static_top.html.erb +81 -0
  16. data/lib/generators/web_app_template/layout/templates/bootstrap3/non_responsive.html.erb +200 -0
  17. data/lib/generators/web_app_template/layout/templates/bootstrap3/offcanvas.html.erb +163 -0
  18. data/lib/generators/web_app_template/layout/templates/bootstrap3/sign_in_page.html.erb +76 -0
  19. data/lib/generators/web_app_template/layout/templates/bootstrap3/starter.html.erb +57 -0
  20. data/lib/generators/web_app_template/layout/templates/bootstrap3/sticky_footer.html.erb +77 -0
  21. data/lib/generators/web_app_template/layout/templates/bootstrap3/sticky_footer_navbar.html.erb +118 -0
  22. data/lib/web_app_template/version.rb +1 -1
  23. data/spec/generators/layout_spec.rb +42 -0
  24. data/spec/spec_helper.rb +14 -0
  25. data/web_app_template.gemspec +3 -2
  26. metadata +39 -11
  27. data/.idea/encodings.xml +0 -5
  28. data/.idea/misc.xml +0 -5
  29. data/.idea/modules.xml +0 -9
  30. data/.idea/scopes/scope_settings.xml +0 -5
  31. data/.idea/vcs.xml +0 -7
  32. data/.idea/web_app_template.iml +0 -19
  33. data/.idea/workspace.xml +0 -50
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8f63260808f395cae094aab455c1d17f7a4f510a
4
- data.tar.gz: 1fd9e3f775aa256df53fec693d5d2df35c794302
3
+ metadata.gz: 18d05517e8ff8b41ab8042d4de1f0cae4a5aa917
4
+ data.tar.gz: cbe5a10fdc1f5c03bb06505b029212bdd9c58d32
5
5
  SHA512:
6
- metadata.gz: 3a237318641fef093fbe2bb26d392f215ccaf07f48434a3cb625316042f481cde980dcdc26bb7fdd96ba7eff100a84d4cff8cbf6964385480926ea1ba3da47f5
7
- data.tar.gz: dbe907cf4ea9d705f82cd5c75678a92fee0dc2f999482122b8773bce244ddfd1126ea6b818ca04cd268a49bbfe7c8a2b641b3b739ad8d0033594f24227aebbf4
6
+ metadata.gz: 03f5645d549c14554dc53c93db42cc2c470a77b07f6678d841ff673f8b27058077ded05f05c237715a8adcf465e2420bad213469bb25508ac9605c2e0652269e
7
+ data.tar.gz: 9f5085284dde3f4709f986d00cf77c3650f7b733118f6c9d19718203c3caef159cebfd847df982c3e6560368c0ef24b39d1c35d98e7954cd3017c08e4e24dbd1
data/.gitignore CHANGED
@@ -3,6 +3,7 @@
3
3
  .bundle
4
4
  .config
5
5
  .yardoc
6
+ .idea
6
7
  Gemfile.lock
7
8
  InstalledFiles
8
9
  _yardoc
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format progress
data/.travis.yml ADDED
@@ -0,0 +1,6 @@
1
+ language: ruby
2
+ rvm:
3
+ - "1.9.3"
4
+ - "2.0.0"
5
+ # uncomment this line if your project needs to run something other than `rake`:
6
+ script: bundle exec rspec spec
data/Gemfile CHANGED
@@ -2,3 +2,11 @@ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in web_app_template.gemspec
4
4
  gemspec
5
+
6
+ group :test do
7
+ gem "generator_spec"
8
+ gem 'haml'
9
+ gem 'slim'
10
+ gem 'html2haml'
11
+ gem 'haml2slim'
12
+ end
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
- TODO: Write a gem description
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
- TODO: Write usage instructions here
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/<my-github-username>/web_app_template/fork )
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 &raquo;</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 &raquo;</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 &raquo;</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>&copy; 2013 Company, Inc. &middot; <a href="#">Privacy</a> &middot; <a href="#">Terms</a></p>
331
+ </footer>
332
+
333
+ </div><!-- /.container -->
334
+
335
+ </body>
336
+ </html>