svelte-rails 0.1.0 → 0.2.1

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
  SHA256:
3
- metadata.gz: 052fd518710717fbb8cadfb1c1a51c5e9f1fea3f77d96f2dd2824929904259e4
4
- data.tar.gz: c580d4913b1941b856e0a5eeeb9489a9035772c113867057c0fb7bd5d3727037
3
+ metadata.gz: fad4acbc714ff104f2e645df762b489a163f6bc1fa7fab2433d968830834b9cb
4
+ data.tar.gz: 06603b3aad94c632056682912aa22f56db526fed4403b226cdd175eb94217226
5
5
  SHA512:
6
- metadata.gz: 051c1b3d9503ff68f78c797946821042d4cfa07115c43bcfda363eac4f292f94ee6af02fa9901384251b73aeea644acc5077e22c0e15c5eab2b2ae5b0cd8c06f
7
- data.tar.gz: 3c783c15087de0bd415368e76590bf592d2203ca8078fc02592403839fc257eb0c3739b6dccb5027eced2e844346d8172378be22888ed1aedf6f38fbe9986c8f
6
+ metadata.gz: afb452a583aeabb8de7292f6fd188a6b0ec520fd65611defd33847c5ecddd090b2440ba14b38ec72fcbfcf5bbad8e56215c359deef5f70feb36ab317a5dfcd26
7
+ data.tar.gz: 0d22f07356a04de782e74fb0e915ce7e73e9a17903e03da2378d2b0a72d98c46191a9f798c7371fdd369c558d4bb92d34218b02ad64d924c47895ac605e7df86
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- svelte-rails (0.1.0)
4
+ svelte-rails (0.2.1)
5
5
  execjs
6
6
  railties (>= 5.2)
7
7
 
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
@@ -7,4 +7,6 @@ module Svelte
7
7
  end
8
8
 
9
9
  require 'svelte/rails/view_helper'
10
+ require 'svelte/rails/controller_renderer'
11
+
10
12
  require 'svelte/rails/railtie' if defined?(Rails)
@@ -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
@@ -2,12 +2,21 @@ require 'rails/railtie'
2
2
 
3
3
  module Svelte::Rails
4
4
  class Railtie < ::Rails::Railtie
5
- initializer 'react_rails.setup_view_helpers', after: :load_config_initializers, group: :all do |app|
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
@@ -1,5 +1,5 @@
1
1
  module Svelte
2
2
  module Rails
3
- VERSION = "0.1.0"
3
+ VERSION = '0.2.1'
4
4
  end
5
5
  end
@@ -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.0
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-03 00:00:00.000000000 Z
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