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 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