hippo-fw 0.9.2 → 0.9.3

Sign up to get free protection for your applications and to get access to all the features.
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>