mvpkit 1.1.2 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +1 -24
- data/README.md +43 -48
- data/VERSION +1 -1
- data/bin/mvp +2 -2
- data/config/routes.rb +0 -4
- data/mvpkit.gemspec +57 -129
- data/package.json +3 -22
- data/project/.babelrc +23 -1
- data/project/.gitignore +2 -0
- data/project/.postcssrc.yml +4 -0
- data/project/Gemfile +21 -13
- data/project/Gemfile.lock +181 -153
- data/project/Procfile +1 -1
- data/project/README.md +2 -116
- data/project/app/assets/javascripts/application.js +0 -8
- data/project/app/assets/stylesheets/application.scss +9 -3
- data/project/app/assets/stylesheets/elements/alerts.scss +10 -0
- data/project/app/assets/stylesheets/elements/badges.scss +16 -0
- data/project/app/assets/stylesheets/elements/buttons.scss +107 -0
- data/project/app/assets/stylesheets/elements/cards.scss +68 -0
- data/project/app/assets/stylesheets/elements/drawer.scss +66 -0
- data/project/app/assets/stylesheets/elements/forms.scss +64 -0
- data/project/app/assets/stylesheets/elements/interstitial.scss +24 -0
- data/project/app/assets/stylesheets/elements/navs.scss +15 -0
- data/project/app/assets/stylesheets/elements/sidebar.scss +30 -0
- data/project/app/assets/stylesheets/elements/tables.scss +61 -0
- data/project/app/assets/stylesheets/elements/timeline.scss +38 -0
- data/project/app/assets/stylesheets/elements/typography.scss +80 -0
- data/project/app/assets/stylesheets/init/bootstrap.scss +53 -0
- data/project/app/assets/stylesheets/init/reset.scss +20 -0
- data/project/app/assets/stylesheets/init/variables.scss +40 -0
- data/project/app/assets/stylesheets/treatments/backgrounds.scss +23 -0
- data/project/app/assets/stylesheets/treatments/borders.scss +7 -0
- data/project/app/{webpack/stylesheets/skin → assets/stylesheets/treatments}/spacing.scss +4 -10
- data/{app/controllers/mvp → project/app/controllers}/analytics_controller.rb +0 -0
- data/{app/controllers/concerns/mvp → project/app/controllers/concerns}/analytics_concern.rb +0 -0
- data/{app/controllers/concerns/mvp → project/app/controllers/concerns}/seo_concern.rb +0 -0
- data/{app/controllers/concerns/mvp → project/app/controllers/concerns}/session_concern.rb +0 -0
- data/project/app/controllers/conversions_controller.rb +1 -2
- data/{app/controllers/mvp → project/app/controllers}/seo_controller.rb +0 -0
- data/project/app/engines/admin/app/views/layouts/admin/_header.html.erb +18 -18
- data/project/app/helpers/application_helper.rb +0 -14
- data/{app/assets/stylesheets/mvp/application.scss → project/app/javascript/components/.gitkeep} +0 -0
- data/project/app/javascript/components/conversion.jsx +73 -0
- data/project/app/javascript/packs/application.js +28 -0
- data/project/app/javascript/packs/server_rendering.js +5 -0
- data/project/app/models/conversion.rb +1 -1
- data/project/app/views/conversions/show.json.jbuilder +1 -0
- data/project/app/views/home/index.html.erb +22 -22
- data/project/app/views/layouts/_header.html.erb +35 -34
- data/{app/views/layouts/mvp → project/app/views/layouts}/_instrumentation.html.erb +0 -0
- data/{app/views/layouts/mvp → project/app/views/layouts}/_meta.html.erb +0 -0
- data/project/app/views/layouts/application.html.erb +31 -21
- data/project/bin/setup +1 -1
- data/project/bin/webpack +28 -0
- data/project/bin/webpack-dev-server +43 -0
- data/project/config/initializers/assets.rb +2 -0
- data/{config → project/config}/initializers/canonical_host.rb +0 -0
- data/{config → project/config}/initializers/cloudinary.rb +0 -0
- data/{config → project/config}/initializers/rollbar.rb +0 -0
- data/{config → project/config}/initializers/routing.rb +0 -0
- data/{config → project/config}/initializers/spoof_ip.rb +0 -0
- data/{config → project/config}/initializers/ssl.rb +0 -0
- data/project/config/routes.rb +5 -7
- data/project/config/webpack/configuration.js +35 -0
- data/project/config/webpack/development.js +32 -0
- data/project/config/webpack/loaders/assets.js +12 -0
- data/project/config/webpack/loaders/babel.js +5 -0
- data/project/config/webpack/loaders/coffee.js +4 -0
- data/project/config/webpack/loaders/erb.js +9 -0
- data/project/config/webpack/loaders/react.js +5 -0
- data/project/config/webpack/loaders/sass.js +15 -0
- data/project/config/webpack/production.js +35 -0
- data/project/config/webpack/shared.js +58 -0
- data/project/config/webpack/test.js +6 -0
- data/project/config/webpacker.yml +38 -0
- data/project/package-lock.json +250 -0
- data/project/package.json +37 -17
- data/project/yarn.lock +4538 -0
- metadata +56 -326
- data/app/assets/javascripts/mvp/application.js +0 -1
- data/app/controllers/mvp/styleguide_controller.rb +0 -23
- data/app/helpers/minimum_viable_product/body_helper.rb +0 -14
- data/app/helpers/minimum_viable_product/bootstrap_helper.rb +0 -38
- data/app/helpers/minimum_viable_product/styleguide_helper.rb +0 -4
- data/app/models/concerns/mvp/slugification.rb +0 -24
- data/app/views/layouts/mvp/application.html.erb +0 -19
- data/app/views/mvp/styleguide/_example.html.erb +0 -6
- data/app/views/mvp/styleguide/bootstrap.html.erb +0 -43
- data/app/views/mvp/styleguide/bootstrap/_buttons.html.erb +0 -191
- data/app/views/mvp/styleguide/bootstrap/_forms.html.erb +0 -192
- data/app/views/mvp/styleguide/bootstrap/_header.html.erb +0 -48
- data/app/views/mvp/styleguide/bootstrap/_panels.html.erb +0 -16
- data/app/views/mvp/styleguide/bootstrap/_tables.html.erb +0 -34
- data/app/views/mvp/styleguide/bootstrap/_typography.html.erb +0 -51
- data/app/views/mvp/styleguide/elements/_grouping.html.erb +0 -1
- data/app/views/mvp/styleguide/elements/partials/_row_groups_of.html.erb +0 -7
- data/app/views/mvp/styleguide/index.html.erb +0 -17
- data/app/views/mvp/styleguide/layouts/basic.html.erb +0 -4
- data/app/views/mvp/styleguide/layouts/carousel.html.erb +0 -120
- data/app/views/mvp/styleguide/layouts/cover.html.erb +0 -34
- data/config/initializers/assets.rb +0 -2
- data/config/initializers/geocoder.rb +0 -9
- data/project/app/assets/javascripts/pack-compiled.js +0 -37394
- data/project/app/assets/javascripts/pack-compiled.js.map +0 -1
- data/project/app/assets/javascripts/templates.js.erb +0 -14
- data/project/app/assets/stylesheets/pack-compiled.css +0 -33946
- data/project/app/assets/stylesheets/pack-compiled.css.map +0 -1
- data/project/app/controllers/examples_controller.rb +0 -2
- data/project/app/views/examples/index.html.erb +0 -1
- data/project/app/views/examples/mustache.html.erb +0 -40
- data/project/app/views/examples/mustache/template.mustache +0 -1
- data/project/app/views/home/conversion.html.erb +0 -12
- data/project/app/webpack/javascripts/behaviors/example.js +0 -21
- data/project/app/webpack/javascripts/controllers/home.js +0 -15
- data/project/app/webpack/javascripts/lib/analytics.js +0 -22
- data/project/app/webpack/javascripts/lib/clientsidevalidations.js +0 -3
- data/project/app/webpack/javascripts/lib/controllers.js +0 -28
- data/project/app/webpack/javascripts/lib/forms.js +0 -28
- data/project/app/webpack/javascripts/lib/selectize.js +0 -1
- data/project/app/webpack/javascripts/pack.js +0 -50
- data/project/app/webpack/stylesheets/config/variables.scss +0 -41
- data/project/app/webpack/stylesheets/init/reset.scss +0 -48
- data/project/app/webpack/stylesheets/layout/main.scss +0 -7
- data/project/app/webpack/stylesheets/pack.scss +0 -20
- data/project/app/webpack/stylesheets/skin/alerts.scss +0 -3
- data/project/app/webpack/stylesheets/skin/buttons.scss +0 -38
- data/project/app/webpack/stylesheets/skin/hero.scss +0 -45
- data/project/app/webpack/stylesheets/skin/images.scss +0 -13
- data/project/app/webpack/stylesheets/skin/progress.scss +0 -3
- data/project/app/webpack/stylesheets/skin/selectize.scss +0 -30
- data/project/app/webpack/stylesheets/skin/tables.scss +0 -24
- data/project/app/webpack/stylesheets/skin/treatments.scss +0 -3
- data/project/app/webpack/stylesheets/skin/turbolinks.scss +0 -4
- data/project/app/webpack/stylesheets/skin/typography.scss +0 -116
- data/project/webpack.config.js +0 -76
File without changes
|
@@ -1,21 +1,21 @@
|
|
1
|
-
<nav class="navbar navbar-
|
2
|
-
<
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
<a class="navbar-brand" href="/">__PROJECT_NAME__ <span class="text-danger">Admin</span></a>
|
1
|
+
<nav class="navbar navbar-expand-lg navbar-light bg-light">
|
2
|
+
<a class="navbar-brand" href="/">__PROJECT_NAME__</a>
|
3
|
+
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
|
4
|
+
<span class="navbar-toggler-icon"></span>
|
5
|
+
</button>
|
7
6
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
7
|
+
<div class="collapse navbar-collapse" id="navbarSupportedContent">
|
8
|
+
<ul class="navbar-nav mr-auto">
|
9
|
+
<li class="nav-item <%= 'active' if controller_name == 'conversions' %>">
|
10
|
+
<%= link_to 'Conversions', conversions_path, class: "nav-link" %>
|
11
|
+
</li>
|
12
|
+
<li class="nav-item <%= 'active' if controller_name == 'users' %>">
|
13
|
+
<%= link_to 'Users', users_path, class: "nav-link" %>
|
14
|
+
</li>
|
15
|
+
</ul>
|
16
|
+
<form class="form-inline my-2 my-lg-0">
|
17
|
+
<input class="form-control mr-sm-2" type="text" placeholder="Search" aria-label="Search">
|
18
|
+
<button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>
|
19
|
+
</form>
|
20
20
|
</div>
|
21
21
|
</nav>
|
@@ -17,20 +17,6 @@ module ApplicationHelper
|
|
17
17
|
)
|
18
18
|
end
|
19
19
|
|
20
|
-
def render_mustache(template, object)
|
21
|
-
mustache = Mustache.new
|
22
|
-
mustache.template_extension = 'mustache'
|
23
|
-
mustache.template_path = Rails.root.join("app/templates")
|
24
|
-
mustache.template_file = Rails.root.join("app/templates/#{template}.mustache")
|
25
|
-
mustache.instance_eval %%
|
26
|
-
def logged_in
|
27
|
-
#{!!current_user}
|
28
|
-
end
|
29
|
-
%
|
30
|
-
# mustache.template_extension = 'mustache'
|
31
|
-
mustache.render(object).html_safe
|
32
|
-
end
|
33
|
-
|
34
20
|
def store_and_redirect_path(path)
|
35
21
|
url_for(:only_path => false, :trailing_slash => true) + "r/" + path
|
36
22
|
end
|
data/{app/assets/stylesheets/mvp/application.scss → project/app/javascript/components/.gitkeep}
RENAMED
File without changes
|
@@ -0,0 +1,73 @@
|
|
1
|
+
import autobind from 'react-autobind';
|
2
|
+
import React from 'react';
|
3
|
+
import { Form, Input } from 'reactstrap';
|
4
|
+
import validator from 'validator';
|
5
|
+
import SuperAgent from 'superagent';
|
6
|
+
|
7
|
+
class Conversion extends React.Component {
|
8
|
+
constructor(props){
|
9
|
+
super(props);
|
10
|
+
this.state = {
|
11
|
+
disabled: true,
|
12
|
+
}
|
13
|
+
autobind(this);
|
14
|
+
}
|
15
|
+
|
16
|
+
onEmailChange(e){
|
17
|
+
let val = e.target.value;
|
18
|
+
|
19
|
+
if (!validator.isEmail(val)) {
|
20
|
+
this.setState({disabled: true})
|
21
|
+
return;
|
22
|
+
}
|
23
|
+
|
24
|
+
this.setState({
|
25
|
+
disabled: false,
|
26
|
+
email: val,
|
27
|
+
})
|
28
|
+
}
|
29
|
+
|
30
|
+
onSubmit(e){
|
31
|
+
e.preventDefault();
|
32
|
+
|
33
|
+
SuperAgent
|
34
|
+
.post('/conversion')
|
35
|
+
.send({ conversion: {email: this.state.email} })
|
36
|
+
.end((err, res) => {
|
37
|
+
if (res.ok) {
|
38
|
+
this.setState({success: true});
|
39
|
+
} else {
|
40
|
+
this.setState({
|
41
|
+
errors: res.body.errors,
|
42
|
+
});
|
43
|
+
}
|
44
|
+
})
|
45
|
+
}
|
46
|
+
|
47
|
+
render(){
|
48
|
+
if (this.state.success){
|
49
|
+
return(
|
50
|
+
<div className="card">
|
51
|
+
<div className="card-body text-center">
|
52
|
+
<h4>Conversion Successful!</h4>
|
53
|
+
</div>
|
54
|
+
</div>
|
55
|
+
)
|
56
|
+
}
|
57
|
+
return (
|
58
|
+
<div className="card">
|
59
|
+
<div className="card-body">
|
60
|
+
<h4 className="mb10">Conversion Form</h4>
|
61
|
+
<Form onSubmit={(e)=>{e.preventDefault()}}>
|
62
|
+
<Input onChange={this.onEmailChange} placeholder="Enter your email ..."/>
|
63
|
+
<div className="mt15">
|
64
|
+
<button onClick={this.onSubmit} className="btn btn-primary" disabled={this.state.disabled}>Join Now</button>
|
65
|
+
</div>
|
66
|
+
</Form>
|
67
|
+
</div>
|
68
|
+
</div>
|
69
|
+
)
|
70
|
+
}
|
71
|
+
}
|
72
|
+
|
73
|
+
export default Conversion;
|
@@ -0,0 +1,28 @@
|
|
1
|
+
/* eslint no-console:0 */
|
2
|
+
// This file is automatically compiled by Webpack, along with any other files
|
3
|
+
// present in this directory. You're encouraged to place your actual application logic in
|
4
|
+
// a relevant structure within app/javascript and only use these pack files to reference
|
5
|
+
// that code so it'll be compiled.
|
6
|
+
//
|
7
|
+
// To reference this file, add <%= javascript_pack_tag 'application' %> to the appropriate
|
8
|
+
// layout file, like app/views/layouts/application.html.erb
|
9
|
+
|
10
|
+
// Support component names relative to this directory:
|
11
|
+
var componentRequireContext = require.context("components", true)
|
12
|
+
var ReactRailsUJS = require("react_ujs")
|
13
|
+
ReactRailsUJS.useContext(componentRequireContext)
|
14
|
+
|
15
|
+
window.Tether = require('tether');
|
16
|
+
window.Popper = require('popper.js').default
|
17
|
+
window.jQuery = require('jquery')
|
18
|
+
window.jQueryUJS = require('jquery-ujs');
|
19
|
+
window.$ = window.jQuery;
|
20
|
+
|
21
|
+
window.is = require('is_js');
|
22
|
+
window._ = require('lodash');
|
23
|
+
_.mixin(require('lodash-inflection'));
|
24
|
+
|
25
|
+
window.Moment = require('moment');
|
26
|
+
window.bs = require('bootstrap');
|
27
|
+
|
28
|
+
window.Conversion = require('components/conversion');
|
@@ -0,0 +1,5 @@
|
|
1
|
+
// By default, this pack is loaded for server-side rendering.
|
2
|
+
// It must expose react_ujs as `ReactRailsUJS` and prepare a require context.
|
3
|
+
var componentRequireContext = require.context("components", true)
|
4
|
+
var ReactRailsUJS = require("react_ujs")
|
5
|
+
ReactRailsUJS.useContext(componentRequireContext)
|
@@ -0,0 +1 @@
|
|
1
|
+
json.extract! @conversion, :id, :email
|
@@ -1,28 +1,28 @@
|
|
1
|
-
<div class="row mt100">
|
2
|
-
<div class="col-
|
3
|
-
<
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
<%= simple_form_for Conversion.new, url: conversion_path, remote:true, validate: true, html: { class: 'disable-on-submit' } do |f| %>
|
12
|
-
<div class="row">
|
13
|
-
<div class="col-sm-7 pr10-sm">
|
14
|
-
<%= f.input :email, placeholder: 'joe@example.com', label: false, input_html: { class: "mb0" } %>
|
15
|
-
</div>
|
16
|
-
<div class="col-sm-5 pl0-sm">
|
17
|
-
<%= f.submit "Register for Free", class: 'btn btn-primary btn-block' %>
|
18
|
-
</div>
|
19
|
-
</div>
|
1
|
+
<div class="row mt100 justify-content-center">
|
2
|
+
<div class="col-lg-8">
|
3
|
+
<div class="mb50">
|
4
|
+
<h1 class="text-center mb10">mvpkit is running</h1>
|
5
|
+
<p class='text-center'>
|
6
|
+
Hopefully that was easy. Now, onto the good stuff.
|
7
|
+
</p>
|
8
|
+
</div>
|
9
|
+
|
10
|
+
<h2 class="mb20">Quick Tour</h2>
|
20
11
|
|
21
|
-
|
22
|
-
|
23
|
-
|
12
|
+
<div class="mb50">
|
13
|
+
<p class="mb20">You've got <a href="https://getbootstrap.com/docs/4.0/getting-started/introduction/">Bootstrap 4</a> ready to go.</p>
|
14
|
+
|
15
|
+
<div class="row">
|
16
|
+
<% ['primary','secondary','success','warning','danger'].each do |color| %>
|
17
|
+
<div class="col-sm-4 mb20">
|
18
|
+
<a href="#" class="btn btn-<%= color %> btn-block">.btn-<%= color %></a>
|
19
|
+
</div>
|
24
20
|
<% end %>
|
25
21
|
</div>
|
26
22
|
</div>
|
23
|
+
|
24
|
+
<p class="mb15">Here's a sample React conversion form. It takes an email as an input, validates and submits to the server to create a conversion, which will show up in <a href="/a/conversions">conversions admin</a></p>
|
25
|
+
|
26
|
+
<%= react_component 'Conversion' %>
|
27
27
|
</div>
|
28
28
|
</div>
|
@@ -1,37 +1,38 @@
|
|
1
|
-
<nav class="navbar navbar-
|
2
|
-
<
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
<a class="navbar-brand" href="/">__PROJECT_NAME__</a>
|
1
|
+
<nav class="navbar navbar-expand-lg navbar-light bg-light">
|
2
|
+
<a class="navbar-brand" href="/">__PROJECT_NAME__</a>
|
3
|
+
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
|
4
|
+
<span class="navbar-toggler-icon"></span>
|
5
|
+
</button>
|
7
6
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
<
|
20
|
-
|
21
|
-
<li class="nav-item dropdown">
|
22
|
-
<a class="nav-link dropdown-toggle" href="http://example.com" id="navbarDropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
23
|
-
<%= current_user.email %>
|
24
|
-
</a>
|
25
|
-
<div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
|
26
|
-
<%= link_to 'Log Out', destroy_user_session_path, method: :delete, class: 'nav-link' %>
|
27
|
-
</div>
|
28
|
-
</li>
|
29
|
-
<% else %>
|
30
|
-
<li class="nav-item">
|
31
|
-
<%= link_to 'Log In / Register', new_user_session_path, class: 'nav-link' %>
|
32
|
-
</li>
|
33
|
-
<% end %>
|
34
|
-
</ul>
|
35
|
-
</div>
|
7
|
+
<div class="collapse navbar-collapse" id="navbarSupportedContent">
|
8
|
+
<ul class="navbar-nav mr-auto">
|
9
|
+
<li class="nav-item active">
|
10
|
+
<a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a>
|
11
|
+
</li>
|
12
|
+
<li class="nav-item">
|
13
|
+
<%= link_to 'Admin', admin_path, class: 'nav-link' %>
|
14
|
+
</li>
|
15
|
+
</ul>
|
16
|
+
<form class="form-inline my-2 my-lg-0">
|
17
|
+
<input class="form-control mr-sm-2" type="text" placeholder="Search" aria-label="Search">
|
18
|
+
<button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>
|
19
|
+
</form>
|
36
20
|
</div>
|
37
21
|
</nav>
|
22
|
+
|
23
|
+
<!-- <ul class="navbar-nav">
|
24
|
+
<% if user_signed_in? %>
|
25
|
+
<li class="nav-item dropdown">
|
26
|
+
<a class="nav-link dropdown-toggle" href="http://example.com" id="navbarDropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
27
|
+
<%= current_user.email %>
|
28
|
+
</a>
|
29
|
+
<div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
|
30
|
+
<%= link_to 'Log Out', destroy_user_session_path, method: :delete, class: 'nav-link' %>
|
31
|
+
</div>
|
32
|
+
</li>
|
33
|
+
<% else %>
|
34
|
+
<li class="nav-item">
|
35
|
+
<%= link_to 'Log In / Register', new_user_session_path, class: 'nav-link' %>
|
36
|
+
</li>
|
37
|
+
<% end %>
|
38
|
+
</ul> -->
|
File without changes
|
File without changes
|
@@ -1,28 +1,38 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
<%=
|
5
|
-
|
1
|
+
<!DOCTYPE HTML>
|
2
|
+
<html lang='en'>
|
3
|
+
<head>
|
4
|
+
<%= render('layouts/meta').gsub(/\n/,'').html_safe %>
|
5
|
+
<%= yield :meta %>
|
6
6
|
|
7
|
-
<%- content_for :stylesheets do %>
|
8
7
|
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
|
9
|
-
|
8
|
+
<%= yield :stylesheets %>
|
10
9
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
10
|
+
<!--[if lt IE 9]> <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> <![endif]-->
|
11
|
+
<%= csrf_meta_tags %>
|
12
|
+
<%= render 'layouts/instrumentation' %>
|
13
|
+
</head>
|
14
|
+
<body id="<%= body_id %>" class="<%= body_classes %>" data-controller="<%= controller.controller_path %>" data-action="<%= controller.action_name %>" data-iteration="<%= MVP::Iteration.version %>">
|
15
|
+
<% if content_for? :body %>
|
16
|
+
<%= yield :body %>
|
17
|
+
<% else %>
|
18
|
+
<% unless page.hide_header == true %>
|
19
|
+
<% if content_for :header %>
|
20
|
+
<%= yield :header %>
|
21
|
+
<% else %>
|
22
|
+
<%= render 'layouts/header' %>
|
23
|
+
<% end %>
|
17
24
|
<% end %>
|
18
|
-
<% end %>
|
19
25
|
|
20
|
-
|
26
|
+
<%= yield :pre %>
|
21
27
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
<% end %>
|
28
|
+
<div class="container <%= page.container_class %>">
|
29
|
+
<%= render 'layouts/notifications' %>
|
30
|
+
<%= yield %>
|
31
|
+
</div>
|
32
|
+
<% end %>
|
27
33
|
|
28
|
-
<%=
|
34
|
+
<%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
|
35
|
+
<%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>
|
36
|
+
<%= yield :javascripts %>
|
37
|
+
</body>
|
38
|
+
</html>
|
data/project/bin/setup
CHANGED
@@ -14,7 +14,7 @@ chdir APP_ROOT do
|
|
14
14
|
puts '== Installing dependencies =='
|
15
15
|
system! 'gem install bundler --conservative'
|
16
16
|
system!('bundle install')
|
17
|
-
system!('
|
17
|
+
system!('yarn')
|
18
18
|
|
19
19
|
# puts "\n== Copying sample files =="
|
20
20
|
# unless File.exist?('config/database.yml')
|
data/project/bin/webpack
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
$stdout.sync = true
|
3
|
+
|
4
|
+
require "shellwords"
|
5
|
+
require "yaml"
|
6
|
+
|
7
|
+
ENV["RAILS_ENV"] ||= "development"
|
8
|
+
RAILS_ENV = ENV["RAILS_ENV"]
|
9
|
+
|
10
|
+
ENV["NODE_ENV"] ||= RAILS_ENV
|
11
|
+
NODE_ENV = ENV["NODE_ENV"]
|
12
|
+
|
13
|
+
APP_PATH = File.expand_path("../", __dir__)
|
14
|
+
NODE_MODULES_PATH = File.join(APP_PATH, "node_modules")
|
15
|
+
WEBPACK_CONFIG = File.join(APP_PATH, "config/webpack/#{NODE_ENV}.js")
|
16
|
+
|
17
|
+
unless File.exist?(WEBPACK_CONFIG)
|
18
|
+
puts "Webpack configuration not found."
|
19
|
+
puts "Please run bundle exec rails webpacker:install to install webpacker"
|
20
|
+
exit!
|
21
|
+
end
|
22
|
+
|
23
|
+
newenv = { "NODE_PATH" => NODE_MODULES_PATH.shellescape }
|
24
|
+
cmdline = ["yarn", "run", "webpack", "--", "--config", WEBPACK_CONFIG] + ARGV
|
25
|
+
|
26
|
+
Dir.chdir(APP_PATH) do
|
27
|
+
exec newenv, *cmdline
|
28
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
$stdout.sync = true
|
3
|
+
|
4
|
+
require "shellwords"
|
5
|
+
require "yaml"
|
6
|
+
|
7
|
+
ENV["RAILS_ENV"] ||= "development"
|
8
|
+
RAILS_ENV = ENV["RAILS_ENV"]
|
9
|
+
|
10
|
+
ENV["NODE_ENV"] ||= RAILS_ENV
|
11
|
+
NODE_ENV = ENV["NODE_ENV"]
|
12
|
+
|
13
|
+
APP_PATH = File.expand_path("../", __dir__)
|
14
|
+
CONFIG_FILE = File.join(APP_PATH, "config/webpacker.yml")
|
15
|
+
NODE_MODULES_PATH = File.join(APP_PATH, "node_modules")
|
16
|
+
WEBPACK_CONFIG = File.join(APP_PATH, "config/webpack/development.js")
|
17
|
+
|
18
|
+
def args(key)
|
19
|
+
index = ARGV.index(key)
|
20
|
+
index ? ARGV[index + 1] : nil
|
21
|
+
end
|
22
|
+
|
23
|
+
begin
|
24
|
+
dev_server = YAML.load_file(CONFIG_FILE)["development"]["dev_server"]
|
25
|
+
|
26
|
+
DEV_SERVER_HOST = "http#{"s" if args('--https') || dev_server["https"]}://#{args('--host') || dev_server["host"]}:#{args('--port') || dev_server["port"]}"
|
27
|
+
|
28
|
+
rescue Errno::ENOENT, NoMethodError
|
29
|
+
puts "Webpack dev_server configuration not found in #{CONFIG_FILE}."
|
30
|
+
puts "Please run bundle exec rails webpacker:install to install webpacker"
|
31
|
+
exit!
|
32
|
+
end
|
33
|
+
|
34
|
+
newenv = {
|
35
|
+
"NODE_PATH" => NODE_MODULES_PATH.shellescape,
|
36
|
+
"ASSET_HOST" => DEV_SERVER_HOST.shellescape
|
37
|
+
}.freeze
|
38
|
+
|
39
|
+
cmdline = ["yarn", "run", "webpack-dev-server", "--", "--progress", "--color", "--config", WEBPACK_CONFIG] + ARGV
|
40
|
+
|
41
|
+
Dir.chdir(APP_PATH) do
|
42
|
+
exec newenv, *cmdline
|
43
|
+
end
|