hippo-fw 0.9.2 → 0.9.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 646a4300a544e32e68520975fb4b9bad15e7ddd4
4
- data.tar.gz: 98f55a67a95e64261cff0560af01143f2afaddeb
3
+ metadata.gz: 82181b31b5579f88b13be87e7bbc04d6b51e4436
4
+ data.tar.gz: 62de1b88b1ba249ed360afd5d482b788471a89a6
5
5
  SHA512:
6
- metadata.gz: cfd18318f831660561a8e30f848c2b8f52540a2dc982b780ef7a4f331ac163b9c9073c2348dacd3fc22d62accd7367fd92b57563089592a8bd1562857df2eb25
7
- data.tar.gz: 7862bfe0cc3c3e977c9958be2a8600522d9dbbf597d62968250d538ab0fc23393fab759c89a8789d9fc0c0722308d2ba4bc2daeb75bee5e8b5b2f41eada9d15a
6
+ metadata.gz: 687fc0c88df1d479e020340054d00233cbb6ce206d921ffa3c60de601ba86ba43be2c028f01f553d705a85192481e9fd8a8ee4b2250fdc74048af44f6c48197a
7
+ data.tar.gz: 599be4e27ad43bbcaf10e910f4dbe06173f626b23038941e09a9ac85c9ec6f28b370d2c060c0281eb1524d30fc8649c7efc91e21d0d96c64c78a092a4b9a5d23
data/bin/hippo CHANGED
@@ -1,8 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require 'rubygems'
4
- Bundler.require :default, ENV['HIPPO_ENV'] || "development"
5
-
6
4
  require 'hippo'
7
5
  require 'hippo/cli'
8
6
 
@@ -5,7 +5,7 @@
5
5
  "transform-class-properties",
6
6
  "transform-function-bind",
7
7
  "transform-react-jsx",
8
- "transform-runtime"
8
+ "transform-runtime",
9
9
  "lodash"
10
10
  ],
11
11
  "presets": [
@@ -1,9 +1,9 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
3
  # For development while Hippo is evolving track master branch
4
- gem "hippo", git: "https://github.com/argosity/hippo", branch: 'master'
4
+ gem "hippo-fw", git: "https://github.com/argosity/hippo", branch: 'master'
5
5
 
6
- # gem "hippo", '0.9.1'
6
+ # gem "hippo", '0.9.3'
7
7
 
8
8
  gem "rake"
9
9
  gem 'puma'
@@ -1,26 +1,46 @@
1
- const HtmlWebpackPlugin = require('html-webpack-plugin');
1
+ const CompressionPlugin = require("compression-webpack-plugin");
2
2
  const webpack = require('webpack');
3
3
  const path = require('path');
4
4
 
5
+ const entries = {
6
+ app: [
7
+ 'appy-app/index.js',
8
+ ],
9
+ };
10
+
11
+ <% unless Hippo.env.production? -%>
12
+ for (var key in entries) {
13
+ entries[key].unshift('react-hot-loader/patch');
14
+ }
15
+ <% end -%>
16
+
5
17
  const config = {
6
- entry: {
7
- app: [
8
- 'react-hot-loader/patch',
9
- '<%= "#{Hippo::Extensions.controlling.identifier}/index.js" %>',
10
- ],
11
- },
18
+ entry: entries,
12
19
  output: {
13
- path: __dirname,
14
- publicPath: '/',
15
- filename: `${process.env.EXTENSION_ID}/.js`,
20
+ path: '<%= config_directory.join('..','public', 'assets') %>',
21
+ publicPath: '<%= Hippo.env.production? ? "https://assets.#{Hippo.config.website_domain}/assets/" : 'http://test.hippo.dev:8889/assets/' %>',
22
+ filename: '[name]-[hash].js',
16
23
  },
17
24
  resolve: {
18
- modules: process.env.HIPPO_MODULES.split(':'),
25
+ modules: [
26
+ "<%= Hippo::Extensions.client_module_paths.join('","') %>",
27
+ "<%= generated_directory.to_s %>",
28
+ ],
19
29
  extensions: ['.js', '.jsx'],
20
30
  },
21
31
  module: {
22
32
  rules: [
23
- { test: /\.css$/, use: ['style-loader', 'css-loader'] },
33
+ {
34
+ test: /\.css$/,
35
+ use: [ 'style-loader', 'css-loader' ]
36
+ },
37
+ {
38
+ test: /\.(jpg|png|svg)$/,
39
+ loader: 'url-loader',
40
+ options: {
41
+ limit: 25000,
42
+ },
43
+ },
24
44
  {
25
45
  loader: 'babel-loader',
26
46
  test: /\.jsx?$/,
@@ -28,6 +48,7 @@ const config = {
28
48
  options: {
29
49
  plugins: [
30
50
  'react-hot-loader/babel',
51
+ 'babel-plugin-lodash',
31
52
  'babel-plugin-transform-decorators-legacy',
32
53
  'babel-plugin-transform-class-properties',
33
54
  'babel-plugin-transform-function-bind',
@@ -45,6 +66,7 @@ const config = {
45
66
  use: [
46
67
  'style-loader',
47
68
  'css-loader',
69
+ 'resolve-url-loader',
48
70
  {
49
71
  loader: 'sass-loader',
50
72
  options: {
@@ -57,17 +79,23 @@ const config = {
57
79
  },
58
80
  devtool: 'source-map',
59
81
  plugins: [
60
- new webpack.optimize.CommonsChunkPlugin({
61
- name: 'vendor', minChunks: Infinity, filename: '[name].[hash].js',
62
- }),
63
- new HtmlWebpackPlugin({
64
- filename: 'index.html',
65
- template: '<%= directory.join('index.html') %>',
66
- chunks: ['app'],
67
- }),
68
82
  new webpack.DefinePlugin({
69
83
  'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || 'development'),
70
84
  }),
85
+ <% if Hippo.env.production? %>
86
+ new webpack.optimize.UglifyJsPlugin(), //minify everything
87
+ new webpack.optimize.AggressiveMergingPlugin(), //Merge chunks
88
+ new webpack.optimize.OccurrenceOrderPlugin(), // use smallest id for most used chuncks
89
+ new CompressionPlugin({
90
+ asset: "[path].gz[query]",
91
+ algorithm: "gzip",
92
+ test: /\.(js|html)$/,
93
+ threshold: 10240,
94
+ minRatio: 0.8
95
+ }),
96
+ <% else %>
97
+ new webpack.NamedModulesPlugin(),
98
+ <% end %>
71
99
  ],
72
100
  node: {
73
101
  fs: 'empty',
@@ -76,11 +104,16 @@ const config = {
76
104
  hot: true,
77
105
  inline: true,
78
106
  port: 8889,
79
- historyApiFallback: true,
80
- proxy: [{
81
- context: '/api',
82
- target: 'http://localhost:9292',
83
- }],
107
+ contentBase: './public',
108
+ historyApiFallback: {
109
+ index: '/assets/app.html'
110
+ },
111
+ headers: {
112
+ "Access-Control-Allow-Origin": "*",
113
+ "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, PATCH, OPTIONS",
114
+ "Access-Control-Allow-Headers": "X-Requested-With, content-type, Authorization"
115
+ },
116
+ disableHostCheck: true,
84
117
  stats: {
85
118
  colors: true,
86
119
  profile: true,
@@ -54,6 +54,6 @@ end
54
54
 
55
55
  Hippo::API::Routing.root_view_route ||= lambda do
56
56
  Hippo::API::Root.get '/*' do
57
- erb :index
57
+ erb :hippo_root_view
58
58
  end
59
59
  end
@@ -0,0 +1,10 @@
1
+ class CreateSystemSettings < ActiveRecord::Migration[5.0]
2
+ def change
3
+
4
+ create_table :system_settings do |t|
5
+ t.references :tenant, null: false
6
+ t.jsonb "settings", null: false, default: {}
7
+ end
8
+
9
+ end
10
+ end
@@ -1,7 +1,7 @@
1
1
  class CreateAssets < ActiveRecord::Migration[5.0]
2
2
  def change
3
- create_table "assets", partition_key: :tenant_id do |t|
4
- t.integer :tenant_id, null: false
3
+ create_table :assets do |t|
4
+ t.references :tenant, null: false
5
5
  t.references :owner, polymorphic: true, null: false
6
6
  t.integer :order
7
7
  t.jsonb :file_data, null: false, default: {}
@@ -1,11 +1,11 @@
1
1
  class CreateUsers < ActiveRecord::Migration[5.0]
2
2
  def change
3
- create_table :users, partition_key: :tenant_id do | t |
4
- t.integer :tenant_id, null: false
3
+ create_table :users do | t |
4
+ t.references :tenant, null: false
5
5
  t.string :login, :name, :email, null: false
6
6
  t.string :password_digest, null: false
7
- t.string "role_names", array: true, null:false, default: []
8
- t.jsonb "options", null: false, default: {}
7
+ t.string :role_names, array: true, null:false, default: []
8
+ t.jsonb :options, null: false, default: {}
9
9
  t.timestamps null:false
10
10
  end
11
11
 
@@ -45,6 +45,10 @@ module Hippo
45
45
  content_type 'application/json'
46
46
  API.to_json(response)
47
47
  end
48
+
49
+ def find_template(views, name, engine, &block)
50
+ views.each{ |v| super(v, name, engine, &block) }
51
+ end
48
52
  end
49
53
  end
50
54
  end
@@ -13,6 +13,7 @@ module Hippo::API
13
13
  helpers RequestWrapper
14
14
  helpers HelperMethods
15
15
  helpers FormattedReply
16
+
16
17
  use TenantDomainRouter
17
18
  use Rack::Session::Cookie,
18
19
  :key => 'rack.session',
@@ -33,7 +34,7 @@ module Hippo::API
33
34
  set :show_exceptions, false
34
35
  Hippo::Configuration.apply
35
36
  Hippo::Extensions.load_controlling_config
36
- set :views, Hippo::Extensions.controlling.root_path.join('views')
37
+ set :views, Hippo::Extensions.map{|ext| ext.root_path.join('views') }.reverse
37
38
  set :webpack, Hippo::Webpack.new
38
39
  webpack.start
39
40
  require_relative './routing'
@@ -47,10 +47,10 @@ module Hippo
47
47
  template "spec/client/setup.js"
48
48
  template "spec/server/spec_helper.rb"
49
49
 
50
- copy_file "../views/index.erb", "views/index.erb"
51
50
  create_file "log/.gitkeep",""
51
+ create_file "views/.gitkeep",""
52
52
  create_file "tmp/.gitkeep",""
53
- create_file "db/.gitkeep", ""
53
+ create_file "db/migrate/.gitkeep",""
54
54
  end
55
55
 
56
56
  def create_client_files
@@ -23,10 +23,9 @@ module Hippo
23
23
 
24
24
  def configure_rake_environment
25
25
  ActiveRecord::Tasks::DatabaseTasks.seed_loader = Hippo::DB
26
- default_schema = Extensions.controlling.root_path.join("db","schema.sql")
26
+ default_schema = Extensions.controlling.root_path.join("db","schema.rb")
27
27
  ENV['SCHEMA'] ||= default_schema.to_s
28
28
  ENV['DB_STRUCTURE'] ||= default_schema.to_s
29
- ActiveRecord::Base.schema_format = :sql
30
29
  ActiveRecord::Base.dump_schema_after_migration = !Hippo.env.production?
31
30
  Hippo::DB.establish_connection
32
31
  ActiveRecord::Tasks::DatabaseTasks.database_configuration = ActiveRecord::Base.configurations
@@ -1,7 +1,6 @@
1
1
  module Hippo
2
2
 
3
3
  module Extensions
4
- mattr_accessor :controlling_locked
5
4
 
6
5
  ALL=Array.new
7
6
 
@@ -17,19 +16,9 @@ module Hippo
17
16
  end
18
17
  end
19
18
 
20
- # # lock the current controlling extension so that it can't
21
- # # be changed by other extensions that are loaded later
22
- # def lock_controlling!
23
- # self.controlling_locked=true
24
- # end
25
-
26
19
  def add(klass)
27
20
  @cached_instances = nil
28
- if Extensions.controlling_locked
29
- ALL.unshift(klass)
30
- else
31
- ALL << klass
32
- end
21
+ ALL << klass
33
22
  end
34
23
 
35
24
  def all
@@ -1,3 +1,5 @@
1
+ require 'active_support/core_ext/string'
2
+
1
3
  module Hippo
2
4
 
3
5
  module Strings
@@ -1,5 +1,5 @@
1
1
  module Hippo
2
2
 
3
- VERSION = "0.9.2"
3
+ VERSION = "0.9.3"
4
4
 
5
5
  end
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hippo-fw",
3
- "version": "0.9.1",
3
+ "version": "0.9.2",
4
4
  "description": "Hippo is a framework for easily writing single page web applications",
5
5
  "main": "index.js",
6
6
  "repository": "https://github.com/argosity/hippo",
@@ -20,6 +20,7 @@
20
20
  "babel-plugin-transform-flow-strip-types": "^6.22.0",
21
21
  "babel-plugin-transform-function-bind": "^6.22.0",
22
22
  "babel-plugin-transform-runtime": "^6.15.0",
23
+ "babel-preset-env": "^1.5.1",
23
24
  "babel-preset-es2015-loose": "^8.0.0",
24
25
  "babel-preset-latest": "^6.16.0",
25
26
  "babel-preset-react": "^6.16.0",
@@ -27,6 +28,7 @@
27
28
  "babel-preset-stage-1": "^6.16.0",
28
29
  "big.js": "^3.1.3",
29
30
  "classnames": "^2.2.5",
31
+ "compression-webpack-plugin": "^0.4.0",
30
32
  "core-decorators": "^0.17.0",
31
33
  "css-loader": "^0.26.1",
32
34
  "date-fns": "^1.28.2",
@@ -5,7 +5,7 @@
5
5
  "transform-class-properties",
6
6
  "transform-function-bind",
7
7
  "transform-react-jsx",
8
- "transform-runtime"
8
+ "transform-runtime",
9
9
  "lodash"
10
10
  ],
11
11
  "presets": [
@@ -1,7 +1,7 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
3
  # For development while Hippo is evolving track master branch
4
- gem "hippo", git: "https://github.com/argosity/hippo", branch: 'master'
4
+ gem "hippo-fw", git: "https://github.com/argosity/hippo", branch: 'master'
5
5
 
6
6
  # gem "hippo", '<%= Hippo::VERSION %>'
7
7
 
@@ -1,26 +1,46 @@
1
- const HtmlWebpackPlugin = require('html-webpack-plugin');
1
+ const CompressionPlugin = require("compression-webpack-plugin");
2
2
  const webpack = require('webpack');
3
3
  const path = require('path');
4
4
 
5
+ const entries = {
6
+ app: [
7
+ '<%= identifier %>/index.js',
8
+ ],
9
+ };
10
+
11
+ <%% unless Hippo.env.production? -%>
12
+ for (var key in entries) {
13
+ entries[key].unshift('react-hot-loader/patch');
14
+ }
15
+ <%% end -%>
16
+
5
17
  const config = {
6
- entry: {
7
- app: [
8
- 'react-hot-loader/patch',
9
- '<%%= "#{Hippo::Extensions.controlling.identifier}/index.js" %>',
10
- ],
11
- },
18
+ entry: entries,
12
19
  output: {
13
- path: __dirname,
14
- publicPath: '/',
15
- filename: `${process.env.EXTENSION_ID}/.js`,
20
+ path: '<%%= config_directory.join('..','public', 'assets') %>',
21
+ publicPath: '<%%= Hippo.env.production? ? "https://assets.#{Hippo.config.website_domain}/assets/" : 'http://test.hippo.dev:8889/assets/' %>',
22
+ filename: '[name]-[hash].js',
16
23
  },
17
24
  resolve: {
18
- modules: process.env.HIPPO_MODULES.split(':'),
25
+ modules: [
26
+ "<%%= Hippo::Extensions.client_module_paths.join('","') %>",
27
+ "<%%= generated_directory.to_s %>",
28
+ ],
19
29
  extensions: ['.js', '.jsx'],
20
30
  },
21
31
  module: {
22
32
  rules: [
23
- { test: /\.css$/, use: ['style-loader', 'css-loader'] },
33
+ {
34
+ test: /\.css$/,
35
+ use: [ 'style-loader', 'css-loader' ]
36
+ },
37
+ {
38
+ test: /\.(jpg|png|svg)$/,
39
+ loader: 'url-loader',
40
+ options: {
41
+ limit: 25000,
42
+ },
43
+ },
24
44
  {
25
45
  loader: 'babel-loader',
26
46
  test: /\.jsx?$/,
@@ -28,6 +48,7 @@ const config = {
28
48
  options: {
29
49
  plugins: [
30
50
  'react-hot-loader/babel',
51
+ 'babel-plugin-lodash',
31
52
  'babel-plugin-transform-decorators-legacy',
32
53
  'babel-plugin-transform-class-properties',
33
54
  'babel-plugin-transform-function-bind',
@@ -45,6 +66,7 @@ const config = {
45
66
  use: [
46
67
  'style-loader',
47
68
  'css-loader',
69
+ 'resolve-url-loader',
48
70
  {
49
71
  loader: 'sass-loader',
50
72
  options: {
@@ -57,17 +79,23 @@ const config = {
57
79
  },
58
80
  devtool: 'source-map',
59
81
  plugins: [
60
- new webpack.optimize.CommonsChunkPlugin({
61
- name: 'vendor', minChunks: Infinity, filename: '[name].[hash].js',
62
- }),
63
- new HtmlWebpackPlugin({
64
- filename: 'index.html',
65
- template: '<%%= directory.join('index.html') %>',
66
- chunks: ['app'],
67
- }),
68
82
  new webpack.DefinePlugin({
69
83
  'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || 'development'),
70
84
  }),
85
+ <%% if Hippo.env.production? %>
86
+ new webpack.optimize.UglifyJsPlugin(), //minify everything
87
+ new webpack.optimize.AggressiveMergingPlugin(), //Merge chunks
88
+ new webpack.optimize.OccurrenceOrderPlugin(), // use smallest id for most used chuncks
89
+ new CompressionPlugin({
90
+ asset: "[path].gz[query]",
91
+ algorithm: "gzip",
92
+ test: /\.(js|html)$/,
93
+ threshold: 10240,
94
+ minRatio: 0.8
95
+ }),
96
+ <%% else %>
97
+ new webpack.NamedModulesPlugin(),
98
+ <%% end %>
71
99
  ],
72
100
  node: {
73
101
  fs: 'empty',
@@ -76,11 +104,16 @@ const config = {
76
104
  hot: true,
77
105
  inline: true,
78
106
  port: 8889,
79
- historyApiFallback: true,
80
- proxy: [{
81
- context: '/api',
82
- target: 'http://localhost:9292',
83
- }],
107
+ contentBase: './public',
108
+ historyApiFallback: {
109
+ index: '/assets/app.html'
110
+ },
111
+ headers: {
112
+ "Access-Control-Allow-Origin": "*",
113
+ "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, PATCH, OPTIONS",
114
+ "Access-Control-Allow-Headers": "X-Requested-With, content-type, Authorization"
115
+ },
116
+ disableHostCheck: true,
84
117
  stats: {
85
118
  colors: true,
86
119
  profile: true,
@@ -4,7 +4,7 @@
4
4
  <meta charset="utf-8">
5
5
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no, minimal-ui"/>
7
- <title><%= hippo_application_title %></title>
7
+ <title><%= Hippo::Extensions.controlling.title %></title>
8
8
  <style>
9
9
  .loading {
10
10
  position: fixed;
@@ -23,7 +23,6 @@
23
23
  border: 0;
24
24
  transition: opacity .5s ease-in-out;
25
25
  }
26
-
27
26
  .loading:before {
28
27
  content: '';
29
28
  display: block;
@@ -34,7 +33,6 @@
34
33
  height: 100%;
35
34
  background-color: rgba(0,0,0,0.3);
36
35
  }
37
-
38
36
  .loading:after {
39
37
  content: '';
40
38
  display: block;
@@ -56,13 +54,16 @@
56
54
  opacity: 0;
57
55
  }
58
56
  </style>
59
- <%= hippo_stylesheet_tags %>
60
57
  </head>
61
-
62
58
  <body>
63
- <div class="loading">Loading&#8230;</div>
64
- <div id="hippo-root" />
65
- <%= hippo_javascript_tags %>
66
- <script type="text/json" id="bootstrap-data"><%= Hippo::API.to_json(Hippo::Extensions.client_bootstrap_data) %></script>
59
+ <div class="loading">Loading&#8230;</div>
60
+ <div id="hippo-root">
61
+ <script type="text/json" id="bootstrap-data">
62
+ <%= Hippo::API.to_json(
63
+ Hippo::Extensions.client_bootstrap_data
64
+ ) %>
65
+ </script>
66
+ </div>
67
+ <%= javascript_tags :app %>
67
68
  </body>
68
69
  </html>
data/yarn.lock CHANGED
@@ -221,6 +221,10 @@ async-foreach@^0.1.3:
221
221
  version "0.1.3"
222
222
  resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542"
223
223
 
224
+ async@0.2.x:
225
+ version "0.2.10"
226
+ resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1"
227
+
224
228
  async@^1.4.0, async@^1.5.2:
225
229
  version "1.5.2"
226
230
  resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
@@ -634,7 +638,7 @@ babel-plugin-transform-es2015-block-scoped-functions@^6.22.0:
634
638
  dependencies:
635
639
  babel-runtime "^6.22.0"
636
640
 
637
- babel-plugin-transform-es2015-block-scoping@^6.22.0:
641
+ babel-plugin-transform-es2015-block-scoping@^6.22.0, babel-plugin-transform-es2015-block-scoping@^6.23.0:
638
642
  version "6.23.0"
639
643
  resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.23.0.tgz#e48895cf0b375be148cd7c8879b422707a053b51"
640
644
  dependencies:
@@ -644,7 +648,7 @@ babel-plugin-transform-es2015-block-scoping@^6.22.0:
644
648
  babel-types "^6.23.0"
645
649
  lodash "^4.2.0"
646
650
 
647
- babel-plugin-transform-es2015-classes@^6.22.0:
651
+ babel-plugin-transform-es2015-classes@^6.22.0, babel-plugin-transform-es2015-classes@^6.23.0:
648
652
  version "6.23.0"
649
653
  resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.23.0.tgz#49b53f326202a2fd1b3bbaa5e2edd8a4f78643c1"
650
654
  dependencies:
@@ -665,7 +669,7 @@ babel-plugin-transform-es2015-computed-properties@^6.22.0:
665
669
  babel-runtime "^6.22.0"
666
670
  babel-template "^6.22.0"
667
671
 
668
- babel-plugin-transform-es2015-destructuring@^6.22.0:
672
+ babel-plugin-transform-es2015-destructuring@^6.22.0, babel-plugin-transform-es2015-destructuring@^6.23.0:
669
673
  version "6.23.0"
670
674
  resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d"
671
675
  dependencies:
@@ -678,7 +682,7 @@ babel-plugin-transform-es2015-duplicate-keys@^6.22.0:
678
682
  babel-runtime "^6.22.0"
679
683
  babel-types "^6.22.0"
680
684
 
681
- babel-plugin-transform-es2015-for-of@^6.22.0:
685
+ babel-plugin-transform-es2015-for-of@^6.22.0, babel-plugin-transform-es2015-for-of@^6.23.0:
682
686
  version "6.23.0"
683
687
  resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691"
684
688
  dependencies:
@@ -698,7 +702,7 @@ babel-plugin-transform-es2015-literals@^6.22.0:
698
702
  dependencies:
699
703
  babel-runtime "^6.22.0"
700
704
 
701
- babel-plugin-transform-es2015-modules-amd@^6.24.0:
705
+ babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015-modules-amd@^6.24.0:
702
706
  version "6.24.0"
703
707
  resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.0.tgz#a1911fb9b7ec7e05a43a63c5995007557bcf6a2e"
704
708
  dependencies:
@@ -715,7 +719,7 @@ babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-e
715
719
  babel-template "^6.23.0"
716
720
  babel-types "^6.23.0"
717
721
 
718
- babel-plugin-transform-es2015-modules-systemjs@^6.22.0:
722
+ babel-plugin-transform-es2015-modules-systemjs@^6.22.0, babel-plugin-transform-es2015-modules-systemjs@^6.23.0:
719
723
  version "6.23.0"
720
724
  resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.23.0.tgz#ae3469227ffac39b0310d90fec73bfdc4f6317b0"
721
725
  dependencies:
@@ -723,7 +727,7 @@ babel-plugin-transform-es2015-modules-systemjs@^6.22.0:
723
727
  babel-runtime "^6.22.0"
724
728
  babel-template "^6.23.0"
725
729
 
726
- babel-plugin-transform-es2015-modules-umd@^6.24.0:
730
+ babel-plugin-transform-es2015-modules-umd@^6.23.0, babel-plugin-transform-es2015-modules-umd@^6.24.0:
727
731
  version "6.24.0"
728
732
  resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.0.tgz#fd5fa63521cae8d273927c3958afd7c067733450"
729
733
  dependencies:
@@ -738,7 +742,7 @@ babel-plugin-transform-es2015-object-super@^6.22.0:
738
742
  babel-helper-replace-supers "^6.22.0"
739
743
  babel-runtime "^6.22.0"
740
744
 
741
- babel-plugin-transform-es2015-parameters@^6.22.0:
745
+ babel-plugin-transform-es2015-parameters@^6.22.0, babel-plugin-transform-es2015-parameters@^6.23.0:
742
746
  version "6.23.0"
743
747
  resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.23.0.tgz#3a2aabb70c8af945d5ce386f1a4250625a83ae3b"
744
748
  dependencies:
@@ -776,7 +780,7 @@ babel-plugin-transform-es2015-template-literals@^6.22.0:
776
780
  dependencies:
777
781
  babel-runtime "^6.22.0"
778
782
 
779
- babel-plugin-transform-es2015-typeof-symbol@^6.22.0:
783
+ babel-plugin-transform-es2015-typeof-symbol@^6.22.0, babel-plugin-transform-es2015-typeof-symbol@^6.23.0:
780
784
  version "6.23.0"
781
785
  resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372"
782
786
  dependencies:
@@ -873,6 +877,41 @@ babel-plugin-transform-strict-mode@^6.22.0:
873
877
  babel-runtime "^6.22.0"
874
878
  babel-types "^6.22.0"
875
879
 
880
+ babel-preset-env@^1.5.1:
881
+ version "1.5.1"
882
+ resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.5.1.tgz#d2eca6af179edf27cdc305a84820f601b456dd0b"
883
+ dependencies:
884
+ babel-plugin-check-es2015-constants "^6.22.0"
885
+ babel-plugin-syntax-trailing-function-commas "^6.22.0"
886
+ babel-plugin-transform-async-to-generator "^6.22.0"
887
+ babel-plugin-transform-es2015-arrow-functions "^6.22.0"
888
+ babel-plugin-transform-es2015-block-scoped-functions "^6.22.0"
889
+ babel-plugin-transform-es2015-block-scoping "^6.23.0"
890
+ babel-plugin-transform-es2015-classes "^6.23.0"
891
+ babel-plugin-transform-es2015-computed-properties "^6.22.0"
892
+ babel-plugin-transform-es2015-destructuring "^6.23.0"
893
+ babel-plugin-transform-es2015-duplicate-keys "^6.22.0"
894
+ babel-plugin-transform-es2015-for-of "^6.23.0"
895
+ babel-plugin-transform-es2015-function-name "^6.22.0"
896
+ babel-plugin-transform-es2015-literals "^6.22.0"
897
+ babel-plugin-transform-es2015-modules-amd "^6.22.0"
898
+ babel-plugin-transform-es2015-modules-commonjs "^6.23.0"
899
+ babel-plugin-transform-es2015-modules-systemjs "^6.23.0"
900
+ babel-plugin-transform-es2015-modules-umd "^6.23.0"
901
+ babel-plugin-transform-es2015-object-super "^6.22.0"
902
+ babel-plugin-transform-es2015-parameters "^6.23.0"
903
+ babel-plugin-transform-es2015-shorthand-properties "^6.22.0"
904
+ babel-plugin-transform-es2015-spread "^6.22.0"
905
+ babel-plugin-transform-es2015-sticky-regex "^6.22.0"
906
+ babel-plugin-transform-es2015-template-literals "^6.22.0"
907
+ babel-plugin-transform-es2015-typeof-symbol "^6.23.0"
908
+ babel-plugin-transform-es2015-unicode-regex "^6.22.0"
909
+ babel-plugin-transform-exponentiation-operator "^6.22.0"
910
+ babel-plugin-transform-regenerator "^6.22.0"
911
+ browserslist "^2.1.2"
912
+ invariant "^2.2.2"
913
+ semver "^5.3.0"
914
+
876
915
  babel-preset-es2015-loose@^8.0.0:
877
916
  version "8.0.0"
878
917
  resolved "https://registry.yarnpkg.com/babel-preset-es2015-loose/-/babel-preset-es2015-loose-8.0.0.tgz#82ee293ab31329c7a94686b644b62adfbcdc3f57"
@@ -1186,6 +1225,13 @@ browserslist@^1.0.1, browserslist@^1.5.2, browserslist@^1.7.6:
1186
1225
  caniuse-db "^1.0.30000639"
1187
1226
  electron-to-chromium "^1.2.7"
1188
1227
 
1228
+ browserslist@^2.1.2:
1229
+ version "2.1.4"
1230
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.1.4.tgz#cc526af4a1312b7d2e05653e56d0c8ab70c0e053"
1231
+ dependencies:
1232
+ caniuse-lite "^1.0.30000670"
1233
+ electron-to-chromium "^1.3.11"
1234
+
1189
1235
  bser@1.0.2:
1190
1236
  version "1.0.2"
1191
1237
  resolved "https://registry.yarnpkg.com/bser/-/bser-1.0.2.tgz#381116970b2a6deea5646dd15dd7278444b56169"
@@ -1272,6 +1318,10 @@ caniuse-db@^1.0.30000346, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639:
1272
1318
  version "1.0.30000646"
1273
1319
  resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000646.tgz#c724b90d61df24286e015fc528d062073c00def4"
1274
1320
 
1321
+ caniuse-lite@^1.0.30000670:
1322
+ version "1.0.30000676"
1323
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000676.tgz#1e962123f48073f0c51c4ea0651dd64d25786498"
1324
+
1275
1325
  caseless@~0.12.0:
1276
1326
  version "0.12.0"
1277
1327
  resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
@@ -1455,6 +1505,12 @@ combined-stream@^1.0.5, combined-stream@~1.0.5:
1455
1505
  dependencies:
1456
1506
  delayed-stream "~1.0.0"
1457
1507
 
1508
+ commander@^2.8.1:
1509
+ version "2.9.0"
1510
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4"
1511
+ dependencies:
1512
+ graceful-readlink ">= 1.0.0"
1513
+
1458
1514
  commondir@^1.0.1:
1459
1515
  version "1.0.1"
1460
1516
  resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
@@ -1469,6 +1525,15 @@ compressible@~2.0.8:
1469
1525
  dependencies:
1470
1526
  mime-db ">= 1.27.0 < 2"
1471
1527
 
1528
+ compression-webpack-plugin@^0.4.0:
1529
+ version "0.4.0"
1530
+ resolved "https://registry.yarnpkg.com/compression-webpack-plugin/-/compression-webpack-plugin-0.4.0.tgz#811de04215f811ea6a12d4d8aed8457d758f13ac"
1531
+ dependencies:
1532
+ async "0.2.x"
1533
+ webpack-sources "^0.1.0"
1534
+ optionalDependencies:
1535
+ node-zopfli "^2.0.0"
1536
+
1472
1537
  compression@^1.5.2:
1473
1538
  version "1.6.2"
1474
1539
  resolved "https://registry.yarnpkg.com/compression/-/compression-1.6.2.tgz#cceb121ecc9d09c52d7ad0c3350ea93ddd402bc3"
@@ -1795,6 +1860,12 @@ default-require-extensions@^1.0.0:
1795
1860
  dependencies:
1796
1861
  strip-bom "^2.0.0"
1797
1862
 
1863
+ defaults@^1.0.2:
1864
+ version "1.0.3"
1865
+ resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d"
1866
+ dependencies:
1867
+ clone "^1.0.2"
1868
+
1798
1869
  define-properties@^1.1.2:
1799
1870
  version "1.1.2"
1800
1871
  resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94"
@@ -1931,6 +2002,10 @@ electron-to-chromium@^1.2.7:
1931
2002
  version "1.3.2"
1932
2003
  resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.2.tgz#b8ce5c93b308db0e92f6d0435c46ddec8f6363ab"
1933
2004
 
2005
+ electron-to-chromium@^1.3.11:
2006
+ version "1.3.13"
2007
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.13.tgz#1b3a5eace6e087bb5e257a100b0cbfe81b2891fc"
2008
+
1934
2009
  elliptic@^6.0.0:
1935
2010
  version "6.4.0"
1936
2011
  resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.0.tgz#cac9af8762c85836187003c8dfe193e5e2eae5df"
@@ -2692,6 +2767,10 @@ graceful-fs@^4.1.2, graceful-fs@^4.1.6:
2692
2767
  version "4.1.11"
2693
2768
  resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
2694
2769
 
2770
+ "graceful-readlink@>= 1.0.0":
2771
+ version "1.0.1"
2772
+ resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725"
2773
+
2695
2774
  grommet@^1.4.0:
2696
2775
  version "1.4.0"
2697
2776
  resolved "https://registry.yarnpkg.com/grommet/-/grommet-1.4.0.tgz#6ff556ab2df82a34186bac8eee0b60b1d5c0d1b5"
@@ -4145,7 +4224,7 @@ mute-stream@0.0.5:
4145
4224
  version "0.0.5"
4146
4225
  resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0"
4147
4226
 
4148
- nan@^2.3.0, nan@^2.3.2:
4227
+ nan@^2.0.0, nan@^2.3.0, nan@^2.3.2:
4149
4228
  version "2.5.1"
4150
4229
  resolved "https://registry.yarnpkg.com/nan/-/nan-2.5.1.tgz#d5b01691253326a97a2bbee9e61c55d8d60351e2"
4151
4230
 
@@ -4223,7 +4302,7 @@ node-notifier@^5.0.1:
4223
4302
  shellwords "^0.1.0"
4224
4303
  which "^1.2.12"
4225
4304
 
4226
- node-pre-gyp@^0.6.29:
4305
+ node-pre-gyp@^0.6.29, node-pre-gyp@^0.6.4:
4227
4306
  version "0.6.34"
4228
4307
  resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.34.tgz#94ad1c798a11d7fc67381b50d47f8cc18d9799f7"
4229
4308
  dependencies:
@@ -4260,6 +4339,15 @@ node-sass@^4.5.0:
4260
4339
  sass-graph "^2.1.1"
4261
4340
  stdout-stream "^1.4.0"
4262
4341
 
4342
+ node-zopfli@^2.0.0:
4343
+ version "2.0.2"
4344
+ resolved "https://registry.yarnpkg.com/node-zopfli/-/node-zopfli-2.0.2.tgz#a7a473ae92aaea85d4c68d45bbf2c944c46116b8"
4345
+ dependencies:
4346
+ commander "^2.8.1"
4347
+ defaults "^1.0.2"
4348
+ nan "^2.0.0"
4349
+ node-pre-gyp "^0.6.4"
4350
+
4263
4351
  "nopt@2 || 3":
4264
4352
  version "3.0.6"
4265
4353
  resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hippo-fw
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.2
4
+ version: 0.9.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nathan Stitt
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-05-31 00:00:00.000000000 Z
11
+ date: 2017-06-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activejob
@@ -863,7 +863,7 @@ files:
863
863
  - command-reference-files/initial/config/routes.rb
864
864
  - command-reference-files/initial/config/screens.rb
865
865
  - command-reference-files/initial/config/webpack.config.js
866
- - command-reference-files/initial/db/.gitkeep
866
+ - command-reference-files/initial/db/migrate/.gitkeep
867
867
  - command-reference-files/initial/lib/appy-app.rb
868
868
  - command-reference-files/initial/lib/appy-app/extension.rb
869
869
  - command-reference-files/initial/lib/appy-app/model.rb
@@ -874,7 +874,7 @@ files:
874
874
  - command-reference-files/initial/spec/client/setup.js
875
875
  - command-reference-files/initial/spec/server/spec_helper.rb
876
876
  - command-reference-files/initial/tmp/.gitkeep
877
- - command-reference-files/initial/views/index.erb
877
+ - command-reference-files/initial/views/.gitkeep
878
878
  - command-reference-files/model/client/appy-app/models/test_test.js
879
879
  - command-reference-files/model/config/routes.rb
880
880
  - command-reference-files/model/db/migrate/20150218032025_create_test_tests.rb
@@ -883,7 +883,6 @@ files:
883
883
  - command-reference-files/model/spec/client/models/test_test.spec.js
884
884
  - command-reference-files/model/spec/fixtures/appy-app/test_test.yml
885
885
  - command-reference-files/model/spec/server/test_test_spec.rb
886
- - command-reference-files/screen/client/appy-app/extension.js
887
886
  - command-reference-files/screen/client/appy-app/screens/ready-set-go.jsx
888
887
  - command-reference-files/screen/config/screens.rb
889
888
  - command-reference-files/screen/spec/client/screens/ready-set-go.spec.jsx
@@ -896,10 +895,10 @@ files:
896
895
  - config/routes.rb
897
896
  - config/screens.rb
898
897
  - config/webpack.config.js
899
- - db/migrate/01_create_tenants.rb
900
- - db/migrate/02_create_system_settings.rb
901
- - db/migrate/03_create_assets.rb
902
- - db/migrate/04_create_users.rb
898
+ - db/migrate/20170530120001_create_tenants.rb
899
+ - db/migrate/20170530120002_create_system_settings.rb
900
+ - db/migrate/20170530120003_create_assets.rb
901
+ - db/migrate/20170530120004_create_users.rb
903
902
  - db/seed.rb
904
903
  - docs/command.md
905
904
  - docs/model.md
@@ -1166,7 +1165,6 @@ files:
1166
1165
  - templates/spec/server/spec_helper.rb
1167
1166
  - test.js
1168
1167
  - views/hippo_root_view.erb
1169
- - views/index.erb
1170
1168
  - yard_ext/all.rb
1171
1169
  - yard_ext/code_identifier_handler.rb
1172
1170
  - yard_ext/concern_meta_methods.rb
@@ -1,72 +0,0 @@
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, maximum-scale=1, user-scalable=no, minimal-ui"/>
7
- <title><%= Hippo::Extensions.controlling.title %></title>
8
- <style>
9
- .loading {
10
- position: fixed;
11
- z-index: 999;
12
- height: 2em;
13
- width: 2em;
14
- overflow: show;
15
- margin: auto;
16
- top: 0;
17
- left: 0;
18
- bottom: 0;
19
- right: 0;
20
- font-size: 2.8rem;
21
- text-shadow: none;
22
- background-color: transparent;
23
- border: 0;
24
- transition: opacity .5s ease-in-out;
25
- }
26
-
27
- .loading:before {
28
- content: '';
29
- display: block;
30
- position: fixed;
31
- top: 0;
32
- left: 0;
33
- width: 100%;
34
- height: 100%;
35
- background-color: rgba(0,0,0,0.3);
36
- }
37
-
38
- .loading:after {
39
- content: '';
40
- display: block;
41
- font-size: 10px;
42
- width: 1em;
43
- height: 1em;
44
- margin-top: -3em;
45
- margin-left: -3em;
46
- animation: spinner 1500ms infinite linear;
47
- border-radius: 0.5em;
48
- box-shadow: rgba(0, 0, 0, 0.75) 1.5em 0 0 0, rgba(0, 0, 0, 0.75) 1.1em 1.1em 0 0, rgba(0, 0, 0, 0.75) 0 1.5em 0 0, rgba(0, 0, 0, 0.75) -1.1em 1.1em 0 0, rgba(0, 0, 0, 0.75) -1.5em 0 0 0, rgba(0, 0, 0, 0.75) -1.1em -1.1em 0 0, rgba(0, 0, 0, 0.75) 0 -1.5em 0 0, rgba(0, 0, 0, 0.75) 1.1em -1.1em 0 0;
49
- }
50
-
51
- @keyframes spinner {
52
- 0% { transform: rotate(0deg); }
53
- 100% { transform: rotate(360deg); }
54
- }
55
- .loading.complete {
56
- opacity: 0;
57
- }
58
- </style>
59
- </head>
60
-
61
- <body>
62
- <div class="loading">Loading&#8230;</div>
63
- <div id="hippo-root">
64
- <script type="text/json" id="bootstrap-data">
65
- <%= Hippo::API.to_json(
66
- Hippo::Extensions.client_bootstrap_data
67
- ) %>
68
- </script>
69
- <%= javascript_tags :hippo %>
70
- </div>
71
- </body>
72
- </html>
@@ -1,32 +0,0 @@
1
- import {
2
- BaseExtension, identifiedBy, identifier,
3
- } from 'hippo/extensions/base';
4
-
5
- @identifiedBy('extensions/appy-app')
6
- export default class Extension extends BaseExtension {
7
-
8
- // must match the server-side identier in config/screens.rb
9
- // and lib/appy-app/extension.rb
10
- @identifier id = 'appy-app';
11
-
12
- // This method is called when the extension is registered
13
- // Not all of Hippo will be available yet
14
- onRegistered() { }
15
-
16
- // This method is called after Hippo is completly loaded
17
- // and all extensions are registered
18
- onInitialized() { }
19
-
20
- // All extenensions have been given their data and Hippo has completed startup
21
- onAvailable() { }
22
-
23
- // Data that is provided by AppyApp::Extension#client_bootstrap_data
24
- // in lib/appy-app/extension.rb is passed to this method
25
- // the Base class will simply store the provided data as @data
26
- setBootstrapData() { return super.setBootstrapData(...arguments); }
27
-
28
- // A React component that should be rendered as part of the settings screen
29
- get systemSettingsComponent() {
30
- return null;
31
- }
32
- }
@@ -1,11 +0,0 @@
1
- class CreateSystemSettings < ActiveRecord::Migration[5.0]
2
- def change
3
-
4
- create_table "system_settings", partition_key: :tenant_id do |t|
5
- t.integer :tenant_id, null: false
6
- t.integer :configuration_id
7
- t.jsonb "settings", null: false, default: {}
8
- end
9
-
10
- end
11
- end
@@ -1,72 +0,0 @@
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, maximum-scale=1, user-scalable=no, minimal-ui"/>
7
- <title><%= Hippo::Extensions.controlling.title %></title>
8
- <style>
9
- .loading {
10
- position: fixed;
11
- z-index: 999;
12
- height: 2em;
13
- width: 2em;
14
- overflow: show;
15
- margin: auto;
16
- top: 0;
17
- left: 0;
18
- bottom: 0;
19
- right: 0;
20
- font-size: 2.8rem;
21
- text-shadow: none;
22
- background-color: transparent;
23
- border: 0;
24
- transition: opacity .5s ease-in-out;
25
- }
26
-
27
- .loading:before {
28
- content: '';
29
- display: block;
30
- position: fixed;
31
- top: 0;
32
- left: 0;
33
- width: 100%;
34
- height: 100%;
35
- background-color: rgba(0,0,0,0.3);
36
- }
37
-
38
- .loading:after {
39
- content: '';
40
- display: block;
41
- font-size: 10px;
42
- width: 1em;
43
- height: 1em;
44
- margin-top: -3em;
45
- margin-left: -3em;
46
- animation: spinner 1500ms infinite linear;
47
- border-radius: 0.5em;
48
- box-shadow: rgba(0, 0, 0, 0.75) 1.5em 0 0 0, rgba(0, 0, 0, 0.75) 1.1em 1.1em 0 0, rgba(0, 0, 0, 0.75) 0 1.5em 0 0, rgba(0, 0, 0, 0.75) -1.1em 1.1em 0 0, rgba(0, 0, 0, 0.75) -1.5em 0 0 0, rgba(0, 0, 0, 0.75) -1.1em -1.1em 0 0, rgba(0, 0, 0, 0.75) 0 -1.5em 0 0, rgba(0, 0, 0, 0.75) 1.1em -1.1em 0 0;
49
- }
50
-
51
- @keyframes spinner {
52
- 0% { transform: rotate(0deg); }
53
- 100% { transform: rotate(360deg); }
54
- }
55
- .loading.complete {
56
- opacity: 0;
57
- }
58
- </style>
59
- </head>
60
-
61
- <body>
62
- <div class="loading">Loading&#8230;</div>
63
- <div id="hippo-root">
64
- <script type="text/json" id="bootstrap-data">
65
- <%= Hippo::API.to_json(
66
- Hippo::Extensions.client_bootstrap_data
67
- ) %>
68
- </script>
69
- <%= javascript_tags :hippo %>
70
- </div>
71
- </body>
72
- </html>