spina 2.2.0 → 2.3.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of spina might be problematic. Click here for more details.

Files changed (61) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/config/spina/manifest.js +1 -0
  3. data/app/assets/javascripts/spina/application.js +2 -0
  4. data/app/assets/javascripts/spina/controllers/attachment_picker_controller.js +1 -1
  5. data/app/assets/javascripts/spina/controllers/autofocus_controller.js +1 -1
  6. data/app/assets/javascripts/spina/controllers/button_controller.js +1 -1
  7. data/app/assets/javascripts/spina/controllers/confetti_controller.js +2 -2
  8. data/app/assets/javascripts/spina/controllers/confirm_controller.js +1 -1
  9. data/app/assets/javascripts/spina/controllers/delegate_click_controller.js +1 -1
  10. data/app/assets/javascripts/spina/controllers/exists_controller.js +1 -1
  11. data/app/assets/javascripts/spina/controllers/form_controller.js +2 -2
  12. data/app/assets/javascripts/spina/controllers/hotkeys_controller.js +2 -2
  13. data/app/assets/javascripts/spina/controllers/image_collection_controller.js +2 -2
  14. data/app/assets/javascripts/spina/controllers/image_fade_in_controller.js +1 -1
  15. data/app/assets/javascripts/spina/controllers/infinite_scroll_controller.js +1 -1
  16. data/app/assets/javascripts/spina/controllers/loading_button_controller.js +1 -1
  17. data/app/assets/javascripts/spina/controllers/media_picker_controller.js +1 -1
  18. data/app/assets/javascripts/spina/controllers/media_picker_modal_controller.js +1 -1
  19. data/app/assets/javascripts/spina/controllers/modal_controller.js +1 -1
  20. data/app/assets/javascripts/spina/controllers/navigation_controller.js +1 -1
  21. data/app/assets/javascripts/spina/controllers/parent_pages_controller.js +1 -1
  22. data/app/assets/javascripts/spina/controllers/repeater_controller.js +2 -2
  23. data/app/assets/javascripts/spina/controllers/select_placeholder_controller.js +1 -1
  24. data/app/assets/javascripts/spina/controllers/selectable_controller.js +1 -1
  25. data/app/assets/javascripts/spina/controllers/shortcuts_controller.js +1 -1
  26. data/app/assets/javascripts/spina/controllers/sortable_controller.js +3 -3
  27. data/app/assets/javascripts/spina/controllers/switch_controller.js +1 -1
  28. data/app/assets/javascripts/spina/controllers/tabs_controller.js +1 -1
  29. data/app/assets/javascripts/spina/controllers/toggle_controller.js +1 -1
  30. data/app/assets/javascripts/spina/controllers/trix_controller.js +1 -1
  31. data/app/assets/javascripts/spina/controllers/unique_id_controller.js +1 -1
  32. data/app/assets/javascripts/spina/libraries/stimulus-reveal@1.2.4.js +1 -1
  33. data/app/assets/stylesheets/spina/_tailwind.css +110078 -105581
  34. data/app/components/spina/media_picker/modal_component.html.erb +2 -2
  35. data/app/controllers/concerns/spina/api/paginable.rb +44 -0
  36. data/app/controllers/spina/api/api_controller.rb +29 -0
  37. data/app/controllers/spina/api/images_controller.rb +12 -0
  38. data/app/controllers/spina/api/navigations_controller.rb +20 -0
  39. data/app/controllers/spina/api/pages_controller.rb +26 -0
  40. data/app/controllers/spina/api/resources_controller.rb +19 -0
  41. data/app/helpers/spina/images_helper.rb +1 -5
  42. data/app/helpers/spina/spina_helper.rb +5 -8
  43. data/app/models/spina/page.rb +1 -1
  44. data/app/serializers/spina/api/base_serializer.rb +6 -0
  45. data/app/serializers/spina/api/image_serializer.rb +20 -0
  46. data/app/serializers/spina/api/navigation_serializer.rb +30 -0
  47. data/app/serializers/spina/api/page_serializer.rb +28 -0
  48. data/app/serializers/spina/api/resource_serializer.rb +12 -0
  49. data/app/views/layouts/spina/admin/application.html.erb +3 -7
  50. data/app/views/spina/admin/shared/_navigation.html.erb +2 -2
  51. data/config/locales/ru.yml +199 -177
  52. data/config/routes.rb +10 -0
  53. data/lib/generators/spina/templates/config/initializers/spina.rb +12 -0
  54. data/lib/spina.rb +12 -2
  55. data/lib/spina/engine.rb +12 -4
  56. data/lib/spina/railtie.rb +1 -1
  57. data/lib/spina/version.rb +1 -1
  58. data/lib/tasks/spina_tasks.rake +1 -1
  59. metadata +49 -11
  60. data/app/assets/javascripts/spina/importmap.json.erb +0 -5
  61. data/lib/spina/importmap_helper.rb +0 -37
data/config/routes.rb CHANGED
@@ -11,6 +11,16 @@ Rails.application.routes.draw do
11
11
  end
12
12
 
13
13
  Spina::Engine.routes.draw do
14
+
15
+ # API
16
+ namespace :api, path: Spina.config.api_path do
17
+ resources :pages, only: [:index, :show]
18
+ resources :navigations, only: [:index, :show]
19
+ resources :resources, only: [:index, :show] do
20
+ resources :pages, only: [:index, :show]
21
+ end
22
+ resources :images, only: [:show]
23
+ end
14
24
 
15
25
  # Backend
16
26
  namespace :admin, path: Spina.config.backend_path do
@@ -21,6 +21,11 @@ Spina.configure do |config|
21
21
  # You can define your desired dimensions here.
22
22
  # config.embedded_image_size = [2000, 2000]
23
23
 
24
+ # Thumbnail image size
25
+ # ===============
26
+ # Thumbnail images for the API are generated using `resize_to_fill`.
27
+ # config.thumbnail_image_size = [400, 400]
28
+
24
29
  # Parent controller
25
30
  # ===============
26
31
  # The parent controller all frontend Spina controllers inherit from
@@ -34,6 +39,13 @@ Spina.configure do |config|
34
39
  # The default is Spina::Authentication::Sessions and includes basic user management
35
40
  # config.authentication = "Spina::Authentication::Sessions"
36
41
 
42
+ # API
43
+ # ===============
44
+ # Set an API key to activate Spina's API.
45
+ # It's highly recommended to use Rails credentials to store this API key.
46
+ # config.api_key = Rails.application.credentials.spina_api_key
47
+ # config.api_path = 'api'
48
+
37
49
  # Background jobs
38
50
  # ===============
39
51
  # By default, all background jobs are queued as :default
data/lib/spina.rb CHANGED
@@ -1,4 +1,3 @@
1
- require 'spina/importmap_helper'
2
1
  require 'spina/engine'
3
2
  require 'spina/admin_sectionable'
4
3
  require 'spina/railtie'
@@ -17,24 +16,31 @@ module Spina
17
16
  PLUGINS = []
18
17
  THEMES = []
19
18
 
20
- config_accessor :authentication,
19
+ config_accessor :api_key,
20
+ :api_path,
21
+ :authentication,
21
22
  :backend_path,
23
+ :importmap,
22
24
  :frontend_parent_controller,
23
25
  :disable_frontend_routes,
24
26
  :disable_decorator_load,
25
27
  :locales,
26
28
  :embedded_image_size,
29
+ :thumbnail_image_size,
27
30
  :party_pooper,
28
31
  :tailwind_purge_content,
29
32
  :queues,
30
33
  :transliterations
31
34
 
32
35
  # Defaults
36
+ self.api_key = nil
37
+ self.api_path = "api"
33
38
  self.authentication = "Spina::Authentication::Sessions"
34
39
  self.backend_path = 'admin'
35
40
  self.disable_frontend_routes = false
36
41
  self.disable_decorator_load = false
37
42
  self.embedded_image_size = [2000, 2000]
43
+ self.thumbnail_image_size = [400, 400]
38
44
  self.frontend_parent_controller = "ApplicationController"
39
45
  self.locales = [I18n.default_locale]
40
46
  self.party_pooper = false
@@ -44,6 +50,10 @@ module Spina
44
50
  # - config.queues.page_updates
45
51
  self.queues = ActiveSupport::InheritableOptions.new
46
52
 
53
+ # An importmap specifically meant for Spina
54
+ self.importmap = ActiveSupport::OrderedOptions.new
55
+ self.importmap.paths = Importmap::Paths.new
56
+
47
57
  # Tailwind purging
48
58
  # Spina will by default purge all unused Tailwind classes by scanning
49
59
  # the files listed below. You probably don't want to override this in
data/lib/spina/engine.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'sass-rails'
2
+ require 'importmap-rails'
2
3
  require 'turbo-rails'
3
4
  require 'stimulus-rails'
4
5
  require 'ancestry'
@@ -9,6 +10,7 @@ require 'rack-rewrite'
9
10
  require 'babosa'
10
11
  require 'attr_json'
11
12
  require 'view_component/engine'
13
+ require 'jsonapi/serializer'
12
14
 
13
15
  module Spina
14
16
  class Engine < ::Rails::Engine
@@ -36,11 +38,17 @@ module Spina
36
38
  Spina::Parts::Attachment
37
39
  )
38
40
  end
39
-
40
- initializer "spina.helpers" do
41
- Rails.application.config.assets.configure do |env|
42
- env.context_class.class_eval { include Spina::ImportmapHelper }
41
+
42
+ initializer "spina.importmap" do
43
+ Spina.config.importmap.paths.tap do |paths|
44
+ # Stimulus & Turbo
45
+ paths.asset "@hotwired/stimulus", path: "stimulus"
46
+ paths.asset "@hotwired/stimulus-autoloader", path: "stimulus-autoloader"
47
+ paths.asset "@hotwired/turbo-rails", path: "turbo"
48
+
49
+ paths.assets_in Spina::Engine.root.join("app/assets/javascripts/spina"), append_base_path: true
43
50
  end
44
51
  end
52
+
45
53
  end
46
54
  end
data/lib/spina/railtie.rb CHANGED
@@ -2,7 +2,7 @@ module Spina
2
2
  class Railtie < Rails::Railtie
3
3
 
4
4
  initializer "spina.assets.precompile" do |app|
5
- app.config.assets.precompile += %w(spina/manifest spina/importmap.json)
5
+ app.config.assets.precompile += %w(spina/manifest)
6
6
  end
7
7
 
8
8
  ActiveSupport.on_load(:action_controller) do
data/lib/spina/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Spina
2
- VERSION = "2.2.0"
2
+ VERSION = "2.3.0"
3
3
  end
@@ -25,7 +25,7 @@ namespace :spina do
25
25
  desc "Compile Tailwind.css for Spina"
26
26
  task :compile do
27
27
  Dir.chdir(File.join(__dir__, "../..")) do
28
- system "npx tailwindcss-cli@latest build ./app/assets/stylesheets/spina/tailwind/custom.css -o ./app/assets/stylesheets/spina/_tailwind.css -c ./app/assets/config/spina/tailwind.config.js"
28
+ system "npx tailwindcss-cli@latest build -i ./app/assets/stylesheets/spina/tailwind/custom.css -o ./app/assets/stylesheets/spina/_tailwind.css -c ./app/assets/config/spina/tailwind.config.js"
29
29
  end
30
30
  end
31
31
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spina
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.0
4
+ version: 2.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bram Jetten
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-07-26 00:00:00.000000000 Z
11
+ date: 2021-08-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -126,16 +126,16 @@ dependencies:
126
126
  name: mobility
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
- - - '='
129
+ - - ">="
130
130
  - !ruby/object:Gem::Version
131
- version: 1.1.2
131
+ version: 1.1.3
132
132
  type: :runtime
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
- - - '='
136
+ - - ">="
137
137
  - !ruby/object:Gem::Version
138
- version: 1.1.2
138
+ version: 1.1.3
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: rack-rewrite
141
141
  requirement: !ruby/object:Gem::Requirement
@@ -178,22 +178,50 @@ dependencies:
178
178
  - - "~>"
179
179
  - !ruby/object:Gem::Version
180
180
  version: '2.32'
181
+ - !ruby/object:Gem::Dependency
182
+ name: importmap-rails
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - ">="
186
+ - !ruby/object:Gem::Version
187
+ version: 0.1.1
188
+ type: :runtime
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - ">="
193
+ - !ruby/object:Gem::Version
194
+ version: 0.1.1
181
195
  - !ruby/object:Gem::Dependency
182
196
  name: turbo-rails
183
197
  requirement: !ruby/object:Gem::Requirement
184
198
  requirements:
185
199
  - - ">="
186
200
  - !ruby/object:Gem::Version
187
- version: '0'
201
+ version: 0.7.0
188
202
  type: :runtime
189
203
  prerelease: false
190
204
  version_requirements: !ruby/object:Gem::Requirement
191
205
  requirements:
192
206
  - - ">="
193
207
  - !ruby/object:Gem::Version
194
- version: '0'
208
+ version: 0.7.0
195
209
  - !ruby/object:Gem::Dependency
196
210
  name: stimulus-rails
211
+ requirement: !ruby/object:Gem::Requirement
212
+ requirements:
213
+ - - ">="
214
+ - !ruby/object:Gem::Version
215
+ version: 0.3.0
216
+ type: :runtime
217
+ prerelease: false
218
+ version_requirements: !ruby/object:Gem::Requirement
219
+ requirements:
220
+ - - ">="
221
+ - !ruby/object:Gem::Version
222
+ version: 0.3.0
223
+ - !ruby/object:Gem::Dependency
224
+ name: babosa
197
225
  requirement: !ruby/object:Gem::Requirement
198
226
  requirements:
199
227
  - - ">="
@@ -207,7 +235,7 @@ dependencies:
207
235
  - !ruby/object:Gem::Version
208
236
  version: '0'
209
237
  - !ruby/object:Gem::Dependency
210
- name: babosa
238
+ name: jsonapi-serializer
211
239
  requirement: !ruby/object:Gem::Requirement
212
240
  requirements:
213
241
  - - ">="
@@ -772,6 +800,7 @@ files:
772
800
  - app/assets/images/spina/favicon.png
773
801
  - app/assets/images/spina/spina.png
774
802
  - app/assets/images/spina/spina.svg
803
+ - app/assets/javascripts/spina/application.js
775
804
  - app/assets/javascripts/spina/controllers/attachment_picker_controller.js
776
805
  - app/assets/javascripts/spina/controllers/autofocus_controller.js
777
806
  - app/assets/javascripts/spina/controllers/button_controller.js
@@ -801,7 +830,6 @@ files:
801
830
  - app/assets/javascripts/spina/controllers/toggle_controller.js
802
831
  - app/assets/javascripts/spina/controllers/trix_controller.js
803
832
  - app/assets/javascripts/spina/controllers/unique_id_controller.js
804
- - app/assets/javascripts/spina/importmap.json.erb
805
833
  - app/assets/javascripts/spina/libraries/canvas-confetti.js
806
834
  - app/assets/javascripts/spina/libraries/canvas-confetti@1.3.2.js
807
835
  - app/assets/javascripts/spina/libraries/form-request-submit-polyfill.js
@@ -865,6 +893,7 @@ files:
865
893
  - app/components/spina/user_interface/modal_component.rb
866
894
  - app/components/spina/user_interface/tab_link_component.html.erb
867
895
  - app/components/spina/user_interface/tab_link_component.rb
896
+ - app/controllers/concerns/spina/api/paginable.rb
868
897
  - app/controllers/concerns/spina/current_account.rb
869
898
  - app/controllers/concerns/spina/current_theme.rb
870
899
  - app/controllers/concerns/spina/frontend.rb
@@ -886,6 +915,11 @@ files:
886
915
  - app/controllers/spina/admin/settings_controller.rb
887
916
  - app/controllers/spina/admin/theme_controller.rb
888
917
  - app/controllers/spina/admin/users_controller.rb
918
+ - app/controllers/spina/api/api_controller.rb
919
+ - app/controllers/spina/api/images_controller.rb
920
+ - app/controllers/spina/api/navigations_controller.rb
921
+ - app/controllers/spina/api/pages_controller.rb
922
+ - app/controllers/spina/api/resources_controller.rb
889
923
  - app/controllers/spina/application_controller.rb
890
924
  - app/controllers/spina/pages_controller.rb
891
925
  - app/controllers/spina/sitemaps_controller.rb
@@ -928,6 +962,11 @@ files:
928
962
  - app/models/spina/user.rb
929
963
  - app/presenters/spina/content_presenter.rb
930
964
  - app/presenters/spina/menu_presenter.rb
965
+ - app/serializers/spina/api/base_serializer.rb
966
+ - app/serializers/spina/api/image_serializer.rb
967
+ - app/serializers/spina/api/navigation_serializer.rb
968
+ - app/serializers/spina/api/page_serializer.rb
969
+ - app/serializers/spina/api/resource_serializer.rb
931
970
  - app/views/layouts/spina/admin/admin.html.erb
932
971
  - app/views/layouts/spina/admin/application.html.erb
933
972
  - app/views/layouts/spina/admin/sessions.html.erb
@@ -1053,7 +1092,6 @@ files:
1053
1092
  - lib/spina/authentication/basic.rb
1054
1093
  - lib/spina/authentication/sessions.rb
1055
1094
  - lib/spina/engine.rb
1056
- - lib/spina/importmap_helper.rb
1057
1095
  - lib/spina/part.rb
1058
1096
  - lib/spina/plugin.rb
1059
1097
  - lib/spina/railtie.rb
@@ -1,5 +0,0 @@
1
- {
2
- "imports": {
3
- <%= spina_importmap_with_stimulus_from Spina::Engine.root.join('app/assets/javascripts/spina/controllers'), Spina::Engine.root.join('app/assets/javascripts/spina/libraries') %>
4
- }
5
- }
@@ -1,37 +0,0 @@
1
- module Spina
2
- module ImportmapHelper
3
-
4
- def spina_importmap_with_stimulus_from(*paths)
5
- [ %("stimulus": "#{asset_path("stimulus/libraries/stimulus")}"), spina_importmap_from(*paths) ].reject(&:blank?).join(",\n")
6
- end
7
-
8
- def spina_importmap_from(*paths, prepend: "spina")
9
- Array(paths).flat_map do |path|
10
- if (absolute_path = absolute_root_of(path)).exist?
11
- find_javascript_files_in_tree(absolute_path).collect do |filename|
12
- module_filename = filename.relative_path_from(absolute_path)
13
- module_name = importmap_module_name_from(module_filename)
14
- module_path = asset_path("#{prepend}/" + absolute_path.basename.join(module_filename).to_s)
15
-
16
- %("#{module_name}": "#{module_path}")
17
- end
18
- end
19
- end.compact.join(",\n")
20
- end
21
-
22
- private
23
-
24
- # Strip off the extension and any versioning data for an absolute module name.
25
- def importmap_module_name_from(filename)
26
- filename.basename.to_s.remove(filename.extname).split("@").first
27
- end
28
-
29
- def find_javascript_files_in_tree(path)
30
- Dir[path.join("**/*.js{,m}")].collect { |file| Pathname.new(file) }.select(&:file?)
31
- end
32
-
33
- def absolute_root_of(path)
34
- (pathname = Pathname.new(path)).absolute? ? pathname : Rails.root.join(path)
35
- end
36
- end
37
- end