turbo-scroll 0.1.0

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 23360c1f88090467e027eea7b95d0e26124eaf84a88a6b61d92ff4383e5c7547
4
+ data.tar.gz: 1c530abf7d4c18357db082d3c537ccc11304d9a25b18a38566b9df52762f67c1
5
+ SHA512:
6
+ metadata.gz: 5655f6dfb6f34dd1811713562de9c19bf0af16acdd3a2e10d1652e9eea90d42f2bc5139eacabf130a91fa06ff7e4a577408c4739426e7059d200deb3494946bb
7
+ data.tar.gz: da875aded8920791a105d033078d89c394acc08fb5fc056049256cb3707fd3fc0cd1d9849cb8e09136da2640c7262b1bc2d675384e5731c9d5e0f71f152ced50
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2022 Koen handekyn
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,110 @@
1
+ # TurboScroll
2
+
3
+ TurboScroll is a minimalistic gem that provides infinite scrolling for Rails based applications
4
+ using Turbo.
5
+
6
+ Underlying it depends on ViewComponent and Slim but these are not forced upon the user.
7
+
8
+ ## Usage
9
+
10
+ ### Controller
11
+
12
+ Make sure your index action responds both to html and turbo_stream
13
+
14
+ ```
15
+ respond_to do |format|
16
+ format.html
17
+ format.turbo_stream
18
+ end
19
+ ```
20
+
21
+ ### index.html.erb|slim
22
+
23
+ In your index page, make sure you have a DOM element with ID `infinite`
24
+ and render inside of it your initial page content.
25
+
26
+ At the bottom of your page, add the infinite scrolling loader
27
+ by calling the `turbo_scroll_loader` helper and passing the next page index
28
+ if a next page is present.
29
+
30
+ You could use the [next_pageable](https://github.com/allcrux/next_pageable) gem
31
+ but one can also use any other pagination gem of choice.
32
+
33
+ #### Slim Example
34
+
35
+
36
+ ```
37
+ #infinite
38
+ - @articles.each do |article|
39
+ = article
40
+
41
+ = turbo_scroll_loader(page: @articles.next_page_index)
42
+ ```
43
+
44
+ If you want to use a different ID, you'll have to pass it on in turbo_stream response.
45
+
46
+ ### index.turbo_stream.erb|slim
47
+
48
+ Your turbo_stream response can use the `turbo_scroll_update` helper to
49
+ append the next page content and update the current loader with a
50
+ loader for the next page.
51
+
52
+ When using the [next_pageable](https://github.com/allcrux/next_pageable) gem
53
+ the next_page_index is already present on the collection when a next page exists.
54
+
55
+ ```
56
+ = turbo_scroll_update page: @articles.next_page_index
57
+ - @articles.each do |article|
58
+ = article
59
+ ```
60
+
61
+ ### Using a different DOM ID
62
+
63
+ In case you want or need to use a different DOM ID you
64
+ can pass it on as an extra param to the `turbo_scroll_update` helper.
65
+
66
+ The below example illustrates this for the case where your
67
+ DOM ID is `#scroll`.
68
+
69
+ index.html.slim
70
+
71
+ ```
72
+ #scroll
73
+ - @articles.each do |article|
74
+ = article
75
+
76
+ = turbo_scroll_loader(page: @articles.next_page_index)
77
+ ```
78
+
79
+ index.turbo_stream.slim
80
+
81
+ ```
82
+ = turbo_scroll_update page: @articles.next_page_index, infinite_dom_id: :scroll
83
+ - @articles.each do |article|
84
+ = article
85
+ ```
86
+
87
+
88
+
89
+ ### index.
90
+
91
+ ## Installation
92
+ Add this line to your application's Gemfile:
93
+
94
+ ```ruby
95
+ gem "turbo-scroll"
96
+ ```
97
+
98
+ And then execute:
99
+ ```bash
100
+ $ bundle
101
+ ```
102
+
103
+ Or install it yourself as:
104
+ ```bash
105
+ $ gem install turbo-scroll
106
+ ```
107
+
108
+ ## License
109
+
110
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
data/Rakefile ADDED
@@ -0,0 +1,3 @@
1
+ require "bundler/setup"
2
+
3
+ require "bundler/gem_tasks"
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :turbo-scroll do
3
+ # # Task goes here
4
+ # end
@@ -0,0 +1,3 @@
1
+ = turbo_frame_tag :infinite_loader, src: next_page_stream_path, loading: "lazy", target: "_top"
2
+ .page-loading
3
+ p ==t(".click_here", next_page_path: next_page_path)
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "turbo-rails"
4
+
5
+ class TurboScroll::Loader < ViewComponent::Base
6
+ include Turbo::FramesHelper
7
+
8
+ attr_reader :page
9
+
10
+ def initialize(page:)
11
+ @page = page
12
+ end
13
+
14
+ def query_params
15
+ @query_params ||=
16
+ request.query_parameters.except(:page, :raw, :format)
17
+ end
18
+
19
+ def next_page_path
20
+ url_for(page: page, **query_params)
21
+ end
22
+
23
+ def next_page_stream_path
24
+ url_for(format: :turbo_stream, page: page, **query_params)
25
+ end
26
+
27
+ def render?
28
+ page
29
+ end
30
+ end
31
+
@@ -0,0 +1,10 @@
1
+ .page-loading {
2
+ height: 15.5em;
3
+ padding-top: 4em;
4
+ }
5
+
6
+ .page-loading p {
7
+ text-align: center;
8
+ width: 100%;
9
+ padding-top: 2em;
10
+ }
@@ -0,0 +1,13 @@
1
+ module TurboScroll
2
+ class Railtie < ::Rails::Railtie
3
+ initializer "turbo-scrolls.load_components" do
4
+ require_relative "update"
5
+ require_relative "loader"
6
+ end
7
+ initializer "turbo-scrolls.view_helpers" do
8
+ ActiveSupport.on_load(:action_view) do
9
+ include TurboScroll::ViewHelpers
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,5 @@
1
+ = turbo_stream.append(infinite_dom_id)
2
+ = content
3
+
4
+ = turbo_stream.replace(:infinite_loader)
5
+ = render(TurboScroll::Loader.new(page: page))
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "turbo-rails"
4
+
5
+ class TurboScroll::Update < ViewComponent::Base
6
+ include Turbo::FramesHelper
7
+ include Turbo::StreamsHelper
8
+
9
+ attr_reader :page
10
+ attr_reader :infinite_dom_id
11
+
12
+ def initialize(page:, infinite_dom_id: :infinite)
13
+ @page = page
14
+ @infinite_dom_id = infinite_dom_id
15
+ end
16
+ end
17
+
@@ -0,0 +1,3 @@
1
+ module TurboScroll
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,14 @@
1
+ require "turbo-scroll/version"
2
+ require "turbo-scroll/railtie" if defined?(Rails::Railtie)
3
+
4
+ module TurboScroll
5
+ module ViewHelpers
6
+ def turbo_scroll_loader(page:)
7
+ render(TurboScroll::Loader.new(page: page))
8
+ end
9
+
10
+ def turbo_scroll_update(page:, infinite_dom_id: :infinite, &block)
11
+ render(TurboScroll::Update.new(page: page, infinite_dom_id: infinite_dom_id), &block)
12
+ end
13
+ end
14
+ end
metadata ADDED
@@ -0,0 +1,115 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: turbo-scroll
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Koen handekyn
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2022-08-05 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: railties
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '6'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '6'
27
+ - !ruby/object:Gem::Dependency
28
+ name: turbo-rails
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '1'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '1'
41
+ - !ruby/object:Gem::Dependency
42
+ name: view_component
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '2'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '2'
55
+ - !ruby/object:Gem::Dependency
56
+ name: slim
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '4'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '4'
69
+ description: Description of TurboScroll.
70
+ email:
71
+ - koen@handekyn.com
72
+ executables: []
73
+ extensions: []
74
+ extra_rdoc_files: []
75
+ files:
76
+ - MIT-LICENSE
77
+ - README.md
78
+ - Rakefile
79
+ - lib/tasks/turbo_scroll_tasks.rake
80
+ - lib/turbo-scroll.rb
81
+ - lib/turbo-scroll/loader.html.slim
82
+ - lib/turbo-scroll/loader.rb
83
+ - lib/turbo-scroll/loader.scss
84
+ - lib/turbo-scroll/railtie.rb
85
+ - lib/turbo-scroll/update.html.slim
86
+ - lib/turbo-scroll/update.rb
87
+ - lib/turbo-scroll/version.rb
88
+ homepage: https://github.com/allcrux/turbo-scroll
89
+ licenses:
90
+ - MIT
91
+ metadata:
92
+ allowed_push_host: https://rubygems.org
93
+ homepage_uri: https://github.com/allcrux/turbo-scroll
94
+ source_code_uri: https://github.com/allcrux/turbo-scroll
95
+ changelog_uri: https://github.com/allcrux/turbo-scroll/blob/main/CHANGELOG.md
96
+ post_install_message:
97
+ rdoc_options: []
98
+ require_paths:
99
+ - lib
100
+ required_ruby_version: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ required_rubygems_version: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ requirements: []
111
+ rubygems_version: 3.3.7
112
+ signing_key:
113
+ specification_version: 4
114
+ summary: Summary of TurboScroll.
115
+ test_files: []