svelte-rails 0.1.0 → 0.2.1
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 +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +13 -2
- data/lib/svelte/rails.rb +2 -0
- data/lib/svelte/rails/controller_renderer.rb +26 -0
- data/lib/svelte/rails/railtie.rb +10 -1
- data/lib/svelte/rails/version.rb +1 -1
- data/svelte_ujs/index.js +8 -4
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fad4acbc714ff104f2e645df762b489a163f6bc1fa7fab2433d968830834b9cb
|
4
|
+
data.tar.gz: 06603b3aad94c632056682912aa22f56db526fed4403b226cdd175eb94217226
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: afb452a583aeabb8de7292f6fd188a6b0ec520fd65611defd33847c5ecddd090b2440ba14b38ec72fcbfcf5bbad8e56215c359deef5f70feb36ab317a5dfcd26
|
7
|
+
data.tar.gz: 0d22f07356a04de782e74fb0e915ce7e73e9a17903e03da2378d2b0a72d98c46191a9f798c7371fdd369c558d4bb92d34218b02ad64d924c47895ac605e7df86
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -31,11 +31,22 @@ https://github.com/nning/svelte-rails-demo/commits/master
|
|
31
31
|
<%= svelte_component :Hello, name: 'Svelte' %>
|
32
32
|
```
|
33
33
|
|
34
|
+
## Controller Renderer
|
35
|
+
|
36
|
+
```ruby
|
37
|
+
class TodoController < ApplicationController
|
38
|
+
def index
|
39
|
+
@todos = Todo.all
|
40
|
+
render component: 'TodoList', props: { todos: @todos }
|
41
|
+
end
|
42
|
+
end
|
43
|
+
```
|
44
|
+
|
45
|
+
`prerender` is activated by default, can be disabled with `prerender: false`.
|
46
|
+
|
34
47
|
## Missing Features
|
35
48
|
|
36
|
-
* Turbolinks integration
|
37
49
|
* HMR and Bundle consistency (server-rendered HTML is cached and client-side updates on changes to the sources)
|
38
|
-
* Render components directly from controllers
|
39
50
|
* Generator for components
|
40
51
|
* Render pools
|
41
52
|
* Better documentation for setup
|
data/lib/svelte/rails.rb
CHANGED
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'svelte/rails/view_helper'
|
2
|
+
|
3
|
+
module Svelte
|
4
|
+
module Rails
|
5
|
+
class ControllerRenderer
|
6
|
+
include Svelte::Rails::ViewHelper
|
7
|
+
# include ActionView::Helpers::TagHelper
|
8
|
+
# include ActionView::Helpers::TextHelper
|
9
|
+
|
10
|
+
attr_accessor :output_buffer
|
11
|
+
|
12
|
+
# @return [String] HTML for `component_name` with `options[:props]`
|
13
|
+
def call(component_name, options, &block)
|
14
|
+
props = options.fetch(:props, {})
|
15
|
+
options = default_options.merge(options.slice(:data, :aria, :tag, :class, :id, :prerender, :camelize_props))
|
16
|
+
svelte_component(component_name, props, options, &block)
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def default_options
|
22
|
+
{ prerender: true }
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/lib/svelte/rails/railtie.rb
CHANGED
@@ -2,12 +2,21 @@ require 'rails/railtie'
|
|
2
2
|
|
3
3
|
module Svelte::Rails
|
4
4
|
class Railtie < ::Rails::Railtie
|
5
|
-
initializer '
|
5
|
+
initializer 'svelte_rails.setup_view_helpers', after: :load_config_initializers, group: :all do |app|
|
6
6
|
ActiveSupport.on_load(:action_view) do
|
7
7
|
include ::Svelte::Rails::ViewHelper
|
8
8
|
end
|
9
9
|
end
|
10
10
|
|
11
|
+
initializer 'svelte_rails.add_component_renderer', group: :all do |app|
|
12
|
+
ActionController::Renderers.add :component do |component_name, options|
|
13
|
+
renderer = ::Svelte::Rails::ControllerRenderer.new
|
14
|
+
html = renderer.call(component_name, options)
|
15
|
+
render_options = options.merge(inline: html)
|
16
|
+
render(render_options)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
11
20
|
rake_tasks do
|
12
21
|
load 'svelte/rails/install_task.rake'
|
13
22
|
end
|
data/lib/svelte/rails/version.rb
CHANGED
data/svelte_ujs/index.js
CHANGED
@@ -10,13 +10,15 @@ class SvelteRailsUJS {
|
|
10
10
|
static start() {
|
11
11
|
SvelteRailsUJS.mountComponents()
|
12
12
|
|
13
|
-
document.addEventListener('DOMContentLoaded',
|
14
|
-
SvelteRailsUJS.mountComponents
|
15
|
-
|
13
|
+
document.addEventListener('DOMContentLoaded',
|
14
|
+
SvelteRailsUJS.mountComponents)
|
15
|
+
|
16
|
+
document.addEventListener('turbolinks:load',
|
17
|
+
SvelteRailsUJS.mountComponents)
|
16
18
|
}
|
17
19
|
|
18
20
|
static mountComponents() {
|
19
|
-
document.querySelectorAll('[data-svelte-class]')
|
21
|
+
document.querySelectorAll('[data-svelte-class]:not([data-svelte-initialized])')
|
20
22
|
.forEach(SvelteRailsUJS.mountComponent)
|
21
23
|
}
|
22
24
|
|
@@ -36,6 +38,8 @@ class SvelteRailsUJS {
|
|
36
38
|
console.debug(Component, {target, props, hydrate});
|
37
39
|
|
38
40
|
const component = new Component({target, props, hydrate})
|
41
|
+
|
42
|
+
target.dataset.svelteInitialized = true
|
39
43
|
}
|
40
44
|
}
|
41
45
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: svelte-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- henning mueller
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-07-
|
11
|
+
date: 2020-07-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -75,6 +75,7 @@ files:
|
|
75
75
|
- bin/console
|
76
76
|
- bin/setup
|
77
77
|
- lib/svelte/rails.rb
|
78
|
+
- lib/svelte/rails/controller_renderer.rb
|
78
79
|
- lib/svelte/rails/install_generator.rb
|
79
80
|
- lib/svelte/rails/install_task.rake
|
80
81
|
- lib/svelte/rails/railtie.rb
|