trestle 0.10.0.pre → 0.10.0.pre2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (72) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/release.yml +26 -0
  3. data/.github/workflows/rspec.yml +6 -2
  4. data/Gemfile +14 -5
  5. data/app/assets/bundle/trestle/admin.css +4 -4
  6. data/app/assets/bundle/trestle/admin.js +2 -2
  7. data/app/controllers/concerns/trestle/controller/turbo_stream.rb +12 -0
  8. data/app/controllers/concerns/trestle/resource/controller/actions.rb +3 -3
  9. data/app/controllers/trestle/application_controller.rb +1 -1
  10. data/app/helpers/trestle/modal_helper.rb +0 -5
  11. data/app/helpers/trestle/turbo/frame_helper.rb +29 -0
  12. data/app/helpers/trestle/turbo/stream_helper.rb +9 -0
  13. data/app/helpers/trestle/turbo/tag_builder.rb +21 -0
  14. data/app/helpers/trestle/url_helper.rb +1 -1
  15. data/app/views/layouts/trestle/admin.html.erb +1 -1
  16. data/app/views/layouts/trestle/admin.turbo_stream.erb +2 -9
  17. data/app/views/trestle/application/_header.html.erb +12 -10
  18. data/app/views/trestle/resource/create.turbo_stream.erb +1 -5
  19. data/app/views/trestle/resource/destroy.turbo_stream.erb +1 -1
  20. data/app/views/trestle/resource/edit.html.erb +2 -0
  21. data/app/views/trestle/resource/index.html.erb +5 -0
  22. data/app/views/trestle/resource/new.html.erb +5 -0
  23. data/app/views/trestle/resource/show.html.erb +2 -0
  24. data/app/views/trestle/resource/update.turbo_stream.erb +1 -5
  25. data/app/views/trestle/shared/_sidebar.html.erb +2 -2
  26. data/frontend/css/components/_alerts.scss +22 -20
  27. data/frontend/css/components/_avatar.scss +12 -12
  28. data/frontend/css/components/_background.scss +1 -1
  29. data/frontend/css/components/_breadcrumbs.scss +8 -29
  30. data/frontend/css/components/_buttons.scss +3 -3
  31. data/frontend/css/components/_datepicker.scss +3 -3
  32. data/frontend/css/components/_dropdown.scss +18 -26
  33. data/frontend/css/components/_forms.scss +4 -4
  34. data/frontend/css/components/_grid.scss +29 -0
  35. data/frontend/css/components/_media-grid.scss +1 -1
  36. data/frontend/css/components/_modal.scss +4 -4
  37. data/frontend/css/components/_pagination.scss +4 -8
  38. data/frontend/css/components/_popover.scss +1 -1
  39. data/frontend/css/components/_scopes.scss +4 -10
  40. data/frontend/css/components/_select.scss +8 -9
  41. data/frontend/css/components/_sort.scss +1 -1
  42. data/frontend/css/components/_table.scss +5 -5
  43. data/frontend/css/components/_tabs.scss +11 -18
  44. data/frontend/css/components/_tags.scss +16 -6
  45. data/frontend/css/components/_toolbars.scss +9 -9
  46. data/frontend/css/core/_functions.scss +0 -8
  47. data/frontend/css/core/_theme.scss +3 -0
  48. data/frontend/css/core/_typography.scss +12 -19
  49. data/frontend/css/index.scss +3 -1
  50. data/frontend/css/layout/_base.scss +4 -2
  51. data/frontend/css/layout/_content-header.scss +71 -0
  52. data/frontend/css/layout/_footer.scss +5 -7
  53. data/frontend/css/layout/_main-content.scss +107 -0
  54. data/frontend/css/layout/_navigation.scss +111 -49
  55. data/frontend/css/layout/_sidebar.scss +58 -34
  56. data/frontend/css/variables/_bootstrap.scss +30 -21
  57. data/frontend/css/variables/_trestle.scss +17 -17
  58. data/frontend/js/controllers/batch_action_controller.js +59 -0
  59. data/frontend/js/controllers/checkbox_select_controller.js +3 -0
  60. data/lib/trestle/engine.rb +18 -16
  61. data/lib/trestle/resource/toolbar.rb +18 -8
  62. data/lib/trestle/sprockets_compressor.rb +16 -0
  63. data/lib/trestle/toolbar/context.rb +7 -4
  64. data/lib/trestle/toolbar/menu.rb +8 -5
  65. data/lib/trestle/version.rb +1 -1
  66. data/package.json +1 -1
  67. data/trestle.gemspec +5 -9
  68. data/yarn.lock +17 -32
  69. metadata +34 -69
  70. data/app/controllers/concerns/trestle/controller/turbo.rb +0 -21
  71. data/app/helpers/trestle/turbo_frame_helper.rb +0 -34
  72. data/frontend/css/layout/_content.scss +0 -173
@@ -0,0 +1,59 @@
1
+ import ApplicationController from './application_controller'
2
+
3
+ export default class extends ApplicationController {
4
+ static outlets = ['checkbox-select']
5
+
6
+ connect () {
7
+ if (!this.hasCheckboxSelectOutlet) {
8
+ // Set default outlet if none specified
9
+ this.element.setAttribute(`data-${this.identifier}-checkbox-select-outlet`, '.trestle-table')
10
+ }
11
+
12
+ this.baseHref = this.element.href
13
+
14
+ this.update()
15
+ }
16
+
17
+ update () {
18
+ this.toggleEnabled()
19
+ this.updateHref()
20
+ }
21
+
22
+ toggleEnabled () {
23
+ this.element.classList.toggle('disabled', this.checkboxes.length === 0)
24
+ }
25
+
26
+ updateHref () {
27
+ this.element.href = this.hrefWithSelectedIds
28
+ }
29
+
30
+ get checkboxes () {
31
+ if (this.hasCheckboxSelectOutlet) {
32
+ return this.checkboxSelectOutlet.checked
33
+ } else {
34
+ return []
35
+ }
36
+ }
37
+
38
+ get selectedIds () {
39
+ return this.checkboxes.map(c => c.value)
40
+ }
41
+
42
+ get hrefWithSelectedIds () {
43
+ const ids = this.selectedIds
44
+
45
+ if (ids.length) {
46
+ return `${this.baseHref}?ids=${ids.join(',')}`
47
+ } else {
48
+ return this.baseHref
49
+ }
50
+ }
51
+
52
+ checkboxSelectOutletConnected (outlet, element) {
53
+ element.addEventListener('checkbox-select:change', this.update.bind(this))
54
+ }
55
+
56
+ checkboxSelectOutletDisconnected (outlet, element) {
57
+ element.removeEventListener('checkbox-select:change', this.update.bind(this))
58
+ }
59
+ }
@@ -5,6 +5,7 @@ export default class extends ApplicationController {
5
5
 
6
6
  toggle () {
7
7
  this.updateSelectAllState()
8
+ this.dispatch('change')
8
9
  }
9
10
 
10
11
  toggleAll () {
@@ -13,6 +14,8 @@ export default class extends ApplicationController {
13
14
  this.checkboxTargets.forEach((checkbox) => {
14
15
  checkbox.checked = isChecked
15
16
  })
17
+
18
+ this.dispatch('change')
16
19
  }
17
20
 
18
21
  updateSelectAllState () {
@@ -1,3 +1,5 @@
1
+ require "turbo-rails"
2
+
1
3
  module Trestle
2
4
  class Engine < ::Rails::Engine
3
5
  isolate_namespace Trestle
@@ -30,22 +32,6 @@ module Trestle
30
32
  end
31
33
  end
32
34
 
33
- initializer "turbo.mimetype" do
34
- Mime::Type.register "text/vnd.turbo-stream.html", :turbo_stream unless Mime[:turbo_stream]
35
- end
36
-
37
- initializer "turbo.renderer" do
38
- ActiveSupport.on_load(:action_controller) do
39
- # Compatibility fix for Rails 5.2
40
- delegate :media_type, to: "@_response" unless instance_methods.include?(:media_type)
41
-
42
- ActionController::Renderers.add :turbo_stream do |turbo_streams_html, options|
43
- self.content_type = Mime[:turbo_stream] if media_type.nil?
44
- turbo_streams_html
45
- end
46
- end
47
- end
48
-
49
35
  config.to_prepare do
50
36
  Engine.reset_helpers!
51
37
  end
@@ -55,6 +41,22 @@ module Trestle
55
41
  reloader.install(app) unless app.config.eager_load
56
42
  end
57
43
 
44
+ # For compatibility with the `sassc-rails`` gem, register a custom compressor that excludes the
45
+ # Trestle admin stylesheets as a) they are already minimized and b) libsass is not compatible with
46
+ # some of the newer CSS syntax that is used.
47
+ #
48
+ # To avoid this being necessary, it is recommended that either
49
+ # 1) `sassc-rails` is removed from the Gemfile (if not required),
50
+ # 2) the `sassc-embedded` gem is added to the Gemfile, or
51
+ # 3) `sassc-rails` is replaced with `dartsass-sprockets`
52
+ config.assets.configure do |env|
53
+ if original_compressor = config.assets.css_compressor
54
+ require "trestle/sprockets_compressor"
55
+ original_compressor = Sprockets.compressors['text/css'][original_compressor] if original_compressor.is_a?(Symbol)
56
+ config.assets.css_compressor = Trestle::SprocketsCompressor.new(original_compressor)
57
+ end
58
+ end if defined?(SassC::Rails)
59
+
58
60
  def reset_helpers!
59
61
  @helpers = nil
60
62
  end
@@ -5,20 +5,30 @@ module Trestle
5
5
  delegate :admin, :instance, to: :@template
6
6
  delegate :translate, :t, to: :admin
7
7
 
8
- def new
9
- link(t("buttons.new", default: "New %{model_name}"), action: :new, style: :light, icon: "fa fa-plus", class: "btn-new-resource") if action?(:new)
8
+ def new(label: t("buttons.new", default: "New %{model_name}"), **attrs)
9
+ return unless action?(:new)
10
+
11
+ defaults = { action: :new, style: :light, icon: "fa fa-plus", class: "btn-new-resource" }
12
+ link(label, defaults.merge(attrs))
10
13
  end
11
14
 
12
- def save
13
- button(t("buttons.save", default: "Save %{model_name}"), style: :success)
15
+ def save(label: t("buttons.save", default: "Save %{model_name}"), **attrs)
16
+ defaults = { style: :success }
17
+ button(label, defaults.merge(attrs))
14
18
  end
15
19
 
16
- def delete
17
- link(t("buttons.delete", default: "Delete %{model_name}"), instance, action: :destroy, style: :danger, icon: "fa fa-trash", data: { turbo_method: "delete", controller: "confirm-delete", confirm_delete_placement_value: "bottom" }) if action?(:destroy)
20
+ def delete(label: t("buttons.delete", default: "Delete %{model_name}"), **attrs)
21
+ return unless action?(:destroy)
22
+
23
+ defaults = Trestle::Options.new(action: :destroy, style: :danger, icon: "fa fa-trash", data: { turbo_method: "delete", controller: "confirm-delete", confirm_delete_placement_value: "bottom" })
24
+ link(label, instance, defaults.merge(attrs))
18
25
  end
19
26
 
20
- def dismiss
21
- button(t("buttons.ok", default: "OK"), style: :light, data: { bs_dismiss: "modal" }) if @template.modal_request?
27
+ def dismiss(label: t("buttons.ok", default: "OK"), **attrs)
28
+ return unless @template.modal_request?
29
+
30
+ defaults = Trestle::Options.new(type: :button, style: :light, data: { bs_dismiss: "modal" })
31
+ button(label, defaults.merge(attrs))
22
32
  end
23
33
  alias ok dismiss
24
34
 
@@ -0,0 +1,16 @@
1
+ module Trestle
2
+ class SprocketsCompressor
3
+ def initialize(original_compressor, excluded_files: ["trestle/admin"])
4
+ @original_compressor = original_compressor
5
+ @excluded_files = excluded_files
6
+ end
7
+
8
+ def call(input)
9
+ if @excluded_files.include?(input[:name])
10
+ input[:data]
11
+ else
12
+ @original_compressor.call(input)
13
+ end
14
+ end
15
+ end
16
+ end
@@ -21,11 +21,10 @@ module Trestle
21
21
  end
22
22
 
23
23
  private
24
- def respond_to_missing?(name, include_all=false)
25
- builder.respond_to?(name) || super
26
- end
24
+ def self.ruby2_keywords(*)
25
+ end unless respond_to?(:ruby2_keywords, true)
27
26
 
28
- def method_missing(name, *args, &block)
27
+ ruby2_keywords def method_missing(name, *args, &block)
29
28
  result = builder.send(name, *args, &block)
30
29
 
31
30
  if builder.builder_methods.include?(name)
@@ -34,6 +33,10 @@ module Trestle
34
33
  result
35
34
  end
36
35
  end
36
+
37
+ def respond_to_missing?(name, include_all=false)
38
+ builder.respond_to?(name) || super
39
+ end
37
40
  end
38
41
  end
39
42
  end
@@ -28,13 +28,17 @@ module Trestle
28
28
  end
29
29
 
30
30
  class Builder
31
- delegate :admin_link_to, :content_tag, to: :@template
31
+ delegate :admin_link_to, :content_tag, :tag, to: :@template
32
32
 
33
33
  def initialize(menu, template)
34
34
  @menu, @template = menu, template
35
35
  end
36
36
 
37
37
  def link(content, instance_or_url=nil, options={}, &block)
38
+ if instance_or_url.is_a?(Hash)
39
+ instance_or_url, options = nil, instance_or_url
40
+ end
41
+
38
42
  options[:class] = Array(options[:class])
39
43
  options[:class] << "dropdown-item"
40
44
 
@@ -42,16 +46,15 @@ module Trestle
42
46
  end
43
47
 
44
48
  def header(text)
45
- item(class: "dropdown-header") { text }
49
+ item { content_tag(:h6, text, class: "dropdown-header") }
46
50
  end
47
51
 
48
52
  def divider
49
- item(class: "divider")
53
+ item { tag(:hr, class: "dropdown-divider") }
50
54
  end
51
55
 
52
56
  def item(options={}, &block)
53
- opts = { role: "presentation" }.merge(options)
54
- item = block_given? ? content_tag(:li, opts, &block) : content_tag(:li, "", opts)
57
+ item = block_given? ? content_tag(:li, options, &block) : content_tag(:li, "", options)
55
58
 
56
59
  @menu.items << item
57
60
 
@@ -1,3 +1,3 @@
1
1
  module Trestle
2
- VERSION = "0.10.0.pre"
2
+ VERSION = "0.10.0.pre2"
3
3
  end
data/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "trestle",
3
- "version": "0.10.0.pre",
3
+ "version": "0.10.0-pre2",
4
4
  "description": "A modern, responsive admin framework for Ruby on Rails",
5
5
  "homepage": "https://trestle.io",
6
6
  "repository": "https://github.com/TrestleAdmin/trestle.git",
data/trestle.gemspec CHANGED
@@ -18,19 +18,15 @@ Gem::Specification.new do |spec|
18
18
 
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.required_ruby_version = ">= 2.2.2"
21
+ spec.required_ruby_version = ">= 2.6.0"
22
22
 
23
- spec.add_dependency "railties", ">= 5.2.0"
24
- spec.add_dependency "activemodel", ">= 5.2.0"
25
- spec.add_dependency "kaminari", ">= 1.1.0"
23
+ spec.add_dependency "railties", ">= 6.0.0"
24
+ spec.add_dependency "activemodel", ">= 6.0.0"
25
+ spec.add_dependency "turbo-rails", ">= 2.0.0"
26
+ spec.add_dependency "kaminari", ">= 1.1.0"
26
27
 
27
28
  spec.add_development_dependency "rspec-rails", ">= 5.1.2"
28
29
  spec.add_development_dependency "rspec-html-matchers", "~> 0.10.0"
29
30
  spec.add_development_dependency "database_cleaner", "~> 2.0.2"
30
31
  spec.add_development_dependency "ammeter", "~> 1.1.5"
31
- spec.add_development_dependency "i18n-js", "~> 4.2.3"
32
-
33
- spec.add_development_dependency "bundler"
34
- spec.add_development_dependency "rake"
35
- spec.add_development_dependency "sqlite3"
36
32
  end
data/yarn.lock CHANGED
@@ -232,16 +232,16 @@
232
232
  dependencies:
233
233
  "@babel/types" "^7.24.7"
234
234
 
235
- "@babel/helper-string-parser@^7.24.1":
236
- version "7.24.1"
237
- resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz#f99c36d3593db9540705d0739a1f10b5e20c696e"
238
- integrity sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==
239
-
240
235
  "@babel/helper-string-parser@^7.24.7":
241
236
  version "7.24.7"
242
237
  resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz#4d2d0f14820ede3b9807ea5fc36dfc8cd7da07f2"
243
238
  integrity sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==
244
239
 
240
+ "@babel/helper-string-parser@^7.24.8":
241
+ version "7.24.8"
242
+ resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz#5b3329c9a58803d5df425e5785865881a81ca48d"
243
+ integrity sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==
244
+
245
245
  "@babel/helper-validator-identifier@^7.24.5", "@babel/helper-validator-identifier@^7.24.7":
246
246
  version "7.24.7"
247
247
  resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz#75b889cfaf9e35c2aaf42cf0d72c8e91719251db"
@@ -979,13 +979,13 @@
979
979
  debug "^4.3.1"
980
980
  globals "^11.1.0"
981
981
 
982
- "@babel/types@^7.22.5":
983
- version "7.24.5"
984
- resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.5.tgz#7661930afc638a5383eb0c4aee59b74f38db84d7"
985
- integrity sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==
982
+ "@babel/types@^7.18.6":
983
+ version "7.24.9"
984
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.9.tgz#228ce953d7b0d16646e755acf204f4cf3d08cc73"
985
+ integrity sha512-xm8XrMKz0IlUdocVbYJe0Z9xEgidU7msskG8BbhnTPK/HZ2z/7FP7ykqPgrUH+C+r414mNfNWam1f2vqOjqjYQ==
986
986
  dependencies:
987
- "@babel/helper-string-parser" "^7.24.1"
988
- "@babel/helper-validator-identifier" "^7.24.5"
987
+ "@babel/helper-string-parser" "^7.24.8"
988
+ "@babel/helper-validator-identifier" "^7.24.7"
989
989
  to-fast-properties "^2.0.0"
990
990
 
991
991
  "@babel/types@^7.24.7", "@babel/types@^7.4.4":
@@ -1549,25 +1549,10 @@ caniuse-api@^3.0.0:
1549
1549
  lodash.memoize "^4.1.2"
1550
1550
  lodash.uniq "^4.5.0"
1551
1551
 
1552
- caniuse-lite@^1.0.0:
1553
- version "1.0.30001520"
1554
- resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001520.tgz#62e2b7a1c7b35269594cf296a80bdf8cb9565006"
1555
- integrity sha512-tahF5O9EiiTzwTUqAeFjIZbn4Dnqxzz7ktrgGlMYNLH43Ul26IgTMH/zvL3DG0lZxBYnlT04axvInszUsZULdA==
1556
-
1557
- caniuse-lite@^1.0.30001517:
1558
- version "1.0.30001585"
1559
- resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001585.tgz#0b4e848d84919c783b2a41c13f7de8ce96744401"
1560
- integrity sha512-yr2BWR1yLXQ8fMpdS/4ZZXpseBgE7o4g41x3a6AJOqZuOi+iE/WdJYAuZ6Y95i4Ohd2Y+9MzIWRR+uGABH4s3Q==
1561
-
1562
- caniuse-lite@^1.0.30001599:
1563
- version "1.0.30001621"
1564
- resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001621.tgz#4adcb443c8b9c8303e04498318f987616b8fea2e"
1565
- integrity sha512-+NLXZiviFFKX0fk8Piwv3PfLPGtRqJeq2TiNoUff/qB5KJgwecJTvCXDpmlyP/eCI/GUEmp/h/y5j0yckiiZrA==
1566
-
1567
- caniuse-lite@^1.0.30001629:
1568
- version "1.0.30001638"
1569
- resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001638.tgz#598e1f0c2ac36f37ebc3f5b8887a32ca558e5d56"
1570
- integrity sha512-5SuJUJ7cZnhPpeLHaH0c/HPAnAHZvS6ElWyHK9GSIbVOQABLzowiI2pjmpvZ1WEbkyz46iFd4UXlOHR5SqgfMQ==
1552
+ caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001517, caniuse-lite@^1.0.30001599, caniuse-lite@^1.0.30001629:
1553
+ version "1.0.30001643"
1554
+ resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001643.tgz"
1555
+ integrity sha512-ERgWGNleEilSrHM6iUz/zJNSQTP8Mr21wDWpdgvRwcTXGAq6jMtOUPP4dqFPTdKqZ2wKTdtB+uucZ3MRpAUSmg==
1571
1556
 
1572
1557
  chalk@^2.4.2:
1573
1558
  version "2.4.2"
@@ -2459,7 +2444,7 @@ ms@2.1.2:
2459
2444
  resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
2460
2445
  integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
2461
2446
 
2462
- nanoid@^3.3.7:
2447
+ nanoid@^3.3.6, nanoid@^3.3.7:
2463
2448
  version "3.3.7"
2464
2449
  resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8"
2465
2450
  integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==
@@ -3107,7 +3092,7 @@ slash@^4.0.0:
3107
3092
  resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7"
3108
3093
  integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==
3109
3094
 
3110
- "source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.2.0:
3095
+ "source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.2, source-map-js@^1.2.0:
3111
3096
  version "1.2.0"
3112
3097
  resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af"
3113
3098
  integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: trestle
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.0.pre
4
+ version: 0.10.0.pre2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sam Pohlenz
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-07-03 00:00:00.000000000 Z
11
+ date: 2024-08-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: railties
@@ -16,28 +16,42 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 5.2.0
19
+ version: 6.0.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 5.2.0
26
+ version: 6.0.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: activemodel
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 5.2.0
33
+ version: 6.0.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: 5.2.0
40
+ version: 6.0.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: turbo-rails
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: 2.0.0
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: 2.0.0
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: kaminari
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -108,62 +122,6 @@ dependencies:
108
122
  - - "~>"
109
123
  - !ruby/object:Gem::Version
110
124
  version: 1.1.5
111
- - !ruby/object:Gem::Dependency
112
- name: i18n-js
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - "~>"
116
- - !ruby/object:Gem::Version
117
- version: 4.2.3
118
- type: :development
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - "~>"
123
- - !ruby/object:Gem::Version
124
- version: 4.2.3
125
- - !ruby/object:Gem::Dependency
126
- name: bundler
127
- requirement: !ruby/object:Gem::Requirement
128
- requirements:
129
- - - ">="
130
- - !ruby/object:Gem::Version
131
- version: '0'
132
- type: :development
133
- prerelease: false
134
- version_requirements: !ruby/object:Gem::Requirement
135
- requirements:
136
- - - ">="
137
- - !ruby/object:Gem::Version
138
- version: '0'
139
- - !ruby/object:Gem::Dependency
140
- name: rake
141
- requirement: !ruby/object:Gem::Requirement
142
- requirements:
143
- - - ">="
144
- - !ruby/object:Gem::Version
145
- version: '0'
146
- type: :development
147
- prerelease: false
148
- version_requirements: !ruby/object:Gem::Requirement
149
- requirements:
150
- - - ">="
151
- - !ruby/object:Gem::Version
152
- version: '0'
153
- - !ruby/object:Gem::Dependency
154
- name: sqlite3
155
- requirement: !ruby/object:Gem::Requirement
156
- requirements:
157
- - - ">="
158
- - !ruby/object:Gem::Version
159
- version: '0'
160
- type: :development
161
- prerelease: false
162
- version_requirements: !ruby/object:Gem::Requirement
163
- requirements:
164
- - - ">="
165
- - !ruby/object:Gem::Version
166
- version: '0'
167
125
  description: Trestle is a modern, responsive admin framework for Ruby on Rails.
168
126
  email:
169
127
  - sam@sampohlenz.com
@@ -174,6 +132,7 @@ files:
174
132
  - ".babelrc"
175
133
  - ".browserslistrc"
176
134
  - ".gitattributes"
135
+ - ".github/workflows/release.yml"
177
136
  - ".github/workflows/rspec.yml"
178
137
  - ".gitignore"
179
138
  - ".rspec"
@@ -285,7 +244,7 @@ files:
285
244
  - app/controllers/concerns/trestle/controller/modal.rb
286
245
  - app/controllers/concerns/trestle/controller/title.rb
287
246
  - app/controllers/concerns/trestle/controller/toolbars.rb
288
- - app/controllers/concerns/trestle/controller/turbo.rb
247
+ - app/controllers/concerns/trestle/controller/turbo_stream.rb
289
248
  - app/controllers/concerns/trestle/resource/controller/actions.rb
290
249
  - app/controllers/concerns/trestle/resource/controller/data_methods.rb
291
250
  - app/controllers/concerns/trestle/resource/controller/redirection.rb
@@ -318,7 +277,9 @@ files:
318
277
  - app/helpers/trestle/timestamp_helper.rb
319
278
  - app/helpers/trestle/title_helper.rb
320
279
  - app/helpers/trestle/toolbars_helper.rb
321
- - app/helpers/trestle/turbo_frame_helper.rb
280
+ - app/helpers/trestle/turbo/frame_helper.rb
281
+ - app/helpers/trestle/turbo/stream_helper.rb
282
+ - app/helpers/trestle/turbo/tag_builder.rb
322
283
  - app/helpers/trestle/url_helper.rb
323
284
  - app/views/kaminari/trestle/_first_page.html.erb
324
285
  - app/views/kaminari/trestle/_gap.html.erb
@@ -391,6 +352,7 @@ files:
391
352
  - frontend/css/components/_datepicker.scss
392
353
  - frontend/css/components/_dropdown.scss
393
354
  - frontend/css/components/_forms.scss
355
+ - frontend/css/components/_grid.scss
394
356
  - frontend/css/components/_media-grid.scss
395
357
  - frontend/css/components/_modal.scss
396
358
  - frontend/css/components/_pagination.scss
@@ -414,9 +376,10 @@ files:
414
376
  - frontend/css/icons/_fontawesome.scss
415
377
  - frontend/css/index.scss
416
378
  - frontend/css/layout/_base.scss
417
- - frontend/css/layout/_content.scss
379
+ - frontend/css/layout/_content-header.scss
418
380
  - frontend/css/layout/_footer.scss
419
381
  - frontend/css/layout/_header.scss
382
+ - frontend/css/layout/_main-content.scss
420
383
  - frontend/css/layout/_navigation.scss
421
384
  - frontend/css/layout/_sidebar.scss
422
385
  - frontend/css/support/_sprockets.scss
@@ -427,6 +390,7 @@ files:
427
390
  - frontend/images/bright-squares.png
428
391
  - frontend/index.js
429
392
  - frontend/js/controllers/application_controller.js
393
+ - frontend/js/controllers/batch_action_controller.js
430
394
  - frontend/js/controllers/checkbox_select_controller.js
431
395
  - frontend/js/controllers/confirm_controller.js
432
396
  - frontend/js/controllers/confirm_delete_controller.js
@@ -565,6 +529,7 @@ files:
565
529
  - lib/trestle/scopes/block.rb
566
530
  - lib/trestle/scopes/definition.rb
567
531
  - lib/trestle/scopes/scope.rb
532
+ - lib/trestle/sprockets_compressor.rb
568
533
  - lib/trestle/tab.rb
569
534
  - lib/trestle/table.rb
570
535
  - lib/trestle/table/actions_column.rb
@@ -587,7 +552,7 @@ homepage: https://www.trestle.io
587
552
  licenses:
588
553
  - LGPL-3.0-only
589
554
  metadata: {}
590
- post_install_message:
555
+ post_install_message:
591
556
  rdoc_options: []
592
557
  require_paths:
593
558
  - lib
@@ -595,7 +560,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
595
560
  requirements:
596
561
  - - ">="
597
562
  - !ruby/object:Gem::Version
598
- version: 2.2.2
563
+ version: 2.6.0
599
564
  required_rubygems_version: !ruby/object:Gem::Requirement
600
565
  requirements:
601
566
  - - ">="
@@ -603,7 +568,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
603
568
  version: '0'
604
569
  requirements: []
605
570
  rubygems_version: 3.5.11
606
- signing_key:
571
+ signing_key:
607
572
  specification_version: 4
608
573
  summary: A modern, responsive admin framework for Ruby on Rails
609
574
  test_files: []
@@ -1,21 +0,0 @@
1
- module Trestle
2
- module Controller
3
- module Turbo
4
- extend ActiveSupport::Concern
5
-
6
- included do
7
- etag { :frame if turbo_frame_request? }
8
- helper_method :turbo_frame_request?, :turbo_frame_request_id
9
- end
10
-
11
- private
12
- def turbo_frame_request?
13
- turbo_frame_request_id.present?
14
- end
15
-
16
- def turbo_frame_request_id
17
- request.headers["Turbo-Frame"]
18
- end
19
- end
20
- end
21
- end
@@ -1,34 +0,0 @@
1
- module Trestle
2
- module TurboFrameHelper
3
- def index_turbo_frame(options={}, &block)
4
- defaults = {
5
- id: "index",
6
- data: {
7
- controller: "reloadable",
8
- turbo_action: "advance"
9
- }
10
- }
11
-
12
- content_tag("turbo-frame", defaults.merge(options), &block)
13
- end
14
-
15
- def resource_turbo_frame(instance, options={}, &block)
16
- defaults = {
17
- id: dom_id(instance),
18
- target: ("_top" unless modal_request?),
19
- data: {
20
- controller: resource_turbo_frame_controllers.join(" ").presence
21
- }
22
- }
23
-
24
- content_tag("turbo-frame", defaults.merge(options), &block)
25
- end
26
-
27
- def resource_turbo_frame_controllers
28
- controllers = []
29
- controllers << "modal-frame" if modal_request?
30
- controllers << "deprecated--init" if modal_request? || request.post? || turbo_frame_request?
31
- controllers
32
- end
33
- end
34
- end