alchemy_cms 5.0.3 → 5.1.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.
Files changed (115) hide show
  1. checksums.yaml +4 -4
  2. data/.github/PULL_REQUEST_TEMPLATE.md +1 -1
  3. data/.github/workflows/stale.yml +1 -1
  4. data/.gitignore +1 -0
  5. data/CHANGELOG.md +66 -2
  6. data/CONTRIBUTING.md +2 -2
  7. data/Gemfile +1 -1
  8. data/README.md +1 -1
  9. data/alchemy_cms.gemspec +3 -3
  10. data/app/assets/images/alchemy/missing-image.svg +1 -0
  11. data/app/assets/javascripts/alchemy/admin.js +0 -1
  12. data/app/assets/javascripts/alchemy/alchemy.element_editors.js.coffee +1 -4
  13. data/app/assets/javascripts/alchemy/alchemy.preview.js.coffee +0 -3
  14. data/app/assets/javascripts/alchemy/alchemy.preview_window.js.coffee +29 -4
  15. data/app/assets/stylesheets/alchemy/_variables.scss +8 -0
  16. data/app/assets/stylesheets/alchemy/admin.scss +0 -1
  17. data/app/assets/stylesheets/alchemy/archive.scss +23 -17
  18. data/app/assets/stylesheets/alchemy/buttons.scss +26 -15
  19. data/app/assets/stylesheets/alchemy/elements.scss +58 -19
  20. data/app/assets/stylesheets/alchemy/errors.scss +1 -1
  21. data/app/assets/stylesheets/alchemy/frame.scss +0 -1
  22. data/app/assets/stylesheets/alchemy/hints.scss +2 -1
  23. data/app/assets/stylesheets/alchemy/navigation.scss +7 -10
  24. data/app/assets/stylesheets/alchemy/pagination.scss +1 -1
  25. data/app/assets/stylesheets/alchemy/search.scss +13 -3
  26. data/app/assets/stylesheets/alchemy/selects.scss +26 -20
  27. data/app/assets/stylesheets/alchemy/tables.scss +38 -9
  28. data/app/assets/stylesheets/alchemy/tags.scss +19 -31
  29. data/app/controllers/alchemy/admin/pages_controller.rb +58 -8
  30. data/app/controllers/alchemy/admin/pictures_controller.rb +13 -6
  31. data/app/controllers/alchemy/admin/resources_controller.rb +3 -3
  32. data/app/controllers/alchemy/pages_controller.rb +49 -14
  33. data/app/decorators/alchemy/element_editor.rb +1 -0
  34. data/app/helpers/alchemy/admin/base_helper.rb +0 -44
  35. data/app/helpers/alchemy/admin/navigation_helper.rb +2 -1
  36. data/app/models/alchemy/attachment.rb +20 -3
  37. data/app/models/alchemy/attachment/url.rb +40 -0
  38. data/app/models/alchemy/essence_picture.rb +3 -3
  39. data/app/models/alchemy/essence_picture_view.rb +5 -3
  40. data/app/models/alchemy/legacy_page_url.rb +1 -1
  41. data/app/models/alchemy/page.rb +24 -1
  42. data/app/models/alchemy/page/page_natures.rb +2 -0
  43. data/app/models/alchemy/page/url_path.rb +8 -6
  44. data/app/models/alchemy/picture.rb +58 -2
  45. data/app/models/alchemy/picture/calculations.rb +55 -0
  46. data/app/models/alchemy/picture/transformations.rb +5 -49
  47. data/app/models/alchemy/picture/url.rb +28 -77
  48. data/app/models/alchemy/picture_thumb.rb +57 -0
  49. data/app/models/alchemy/picture_thumb/create.rb +39 -0
  50. data/app/models/alchemy/picture_thumb/signature.rb +23 -0
  51. data/app/models/alchemy/picture_thumb/uid.rb +22 -0
  52. data/app/models/alchemy/picture_variant.rb +114 -0
  53. data/app/models/alchemy/site/layout.rb +30 -2
  54. data/app/views/alchemy/admin/attachments/show.html.erb +8 -8
  55. data/app/views/alchemy/admin/dashboard/index.html.erb +13 -16
  56. data/app/views/alchemy/admin/elements/_element_footer.html.erb +1 -1
  57. data/app/views/alchemy/admin/elements/publish.js.erb +1 -0
  58. data/app/views/alchemy/admin/essence_pictures/crop.html.erb +1 -1
  59. data/app/views/alchemy/admin/essence_pictures/edit.html.erb +2 -2
  60. data/app/views/alchemy/admin/layoutpages/edit.html.erb +4 -6
  61. data/app/views/alchemy/admin/pages/_create_language_form.html.erb +19 -29
  62. data/app/views/alchemy/admin/pages/_form.html.erb +4 -6
  63. data/app/views/alchemy/admin/pages/_new_page_form.html.erb +12 -2
  64. data/app/views/alchemy/admin/pages/_page_layout_filter.html.erb +29 -0
  65. data/app/views/alchemy/admin/pages/_table.html.erb +27 -0
  66. data/app/views/alchemy/admin/pages/_table_row.html.erb +107 -0
  67. data/app/views/alchemy/admin/pages/_toolbar.html.erb +77 -0
  68. data/app/views/alchemy/admin/pages/edit.html.erb +9 -1
  69. data/app/views/alchemy/admin/pages/index.html.erb +41 -74
  70. data/app/views/alchemy/admin/pages/list/_table.html.erb +31 -0
  71. data/app/views/alchemy/admin/pages/unlock.js.erb +2 -2
  72. data/app/views/alchemy/admin/pages/update.js.erb +19 -10
  73. data/app/views/alchemy/admin/partials/_remote_search_form.html.erb +14 -13
  74. data/app/views/alchemy/admin/partials/_search_form.html.erb +8 -8
  75. data/app/views/alchemy/admin/pictures/_archive.html.erb +1 -1
  76. data/app/views/alchemy/admin/pictures/_form.html.erb +1 -1
  77. data/app/views/alchemy/admin/pictures/_picture.html.erb +3 -3
  78. data/app/views/alchemy/admin/pictures/_picture_to_assign.html.erb +1 -1
  79. data/app/views/alchemy/admin/pictures/edit_multiple.html.erb +1 -1
  80. data/app/views/alchemy/admin/pictures/index.html.erb +1 -1
  81. data/app/views/alchemy/admin/pictures/show.html.erb +3 -3
  82. data/app/views/alchemy/admin/resources/_filter_bar.html.erb +13 -11
  83. data/app/views/alchemy/admin/resources/_per_page_select.html.erb +3 -3
  84. data/app/views/alchemy/admin/resources/index.html.erb +4 -1
  85. data/app/views/alchemy/admin/tags/index.html.erb +14 -15
  86. data/app/views/alchemy/base/500.html.erb +11 -13
  87. data/app/views/alchemy/essences/_essence_file_view.html.erb +3 -3
  88. data/config/alchemy/config.yml +15 -11
  89. data/config/alchemy/modules.yml +12 -12
  90. data/config/locales/alchemy.en.yml +6 -4
  91. data/config/routes.rb +1 -1
  92. data/db/migrate/20200617110713_create_alchemy_picture_thumbs.rb +22 -0
  93. data/db/migrate/20200907111332_remove_tri_state_booleans.rb +33 -0
  94. data/lib/alchemy.rb +66 -0
  95. data/lib/alchemy/admin/preview_url.rb +2 -0
  96. data/lib/alchemy/auth_accessors.rb +12 -5
  97. data/lib/alchemy/config.rb +1 -3
  98. data/lib/alchemy/engine.rb +7 -6
  99. data/lib/alchemy/modules.rb +11 -1
  100. data/lib/alchemy/permissions.rb +1 -0
  101. data/lib/alchemy/test_support/factories/picture_factory.rb +0 -1
  102. data/lib/alchemy/test_support/factories/picture_thumb_factory.rb +12 -0
  103. data/lib/alchemy/test_support/integration_helpers.rb +0 -7
  104. data/lib/alchemy/version.rb +1 -1
  105. data/lib/alchemy_cms.rb +2 -4
  106. data/lib/generators/alchemy/install/files/alchemy.en.yml +2 -2
  107. data/lib/generators/alchemy/install/templates/dragonfly.rb.tt +5 -5
  108. data/lib/tasks/alchemy/thumbnails.rake +37 -0
  109. data/vendor/assets/javascripts/jquery_plugins/select2.js +3729 -0
  110. data/vendor/assets/stylesheets/alchemy_admin/select2.scss +740 -0
  111. metadata +41 -31
  112. data/.github/workflows/greetings.yml +0 -13
  113. data/app/controllers/concerns/alchemy/locale_redirects.rb +0 -40
  114. data/app/controllers/concerns/alchemy/page_redirects.rb +0 -68
  115. data/lib/alchemy/userstamp.rb +0 -12
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 54cfa6b7582851195ca4efa3cba8f84bbb4f1d4f064df0e0ed7827d2878c9642
4
- data.tar.gz: 2d8c9abc0af15288204c2c8fd190d36717ff2c5d6fd2b9d1cef4d1dff0d0ab66
3
+ metadata.gz: 26151f079727fc910a0425ec586606fdaa184dfc94b95757b4655630222138ed
4
+ data.tar.gz: 4a0f82f3b3ee7e28fad01b662f467b8eeec411dae15afa0253befb2d777501e6
5
5
  SHA512:
6
- metadata.gz: 10d8633d5579d29799a981f465fefd14341e8165c124c008f75e1598b8e7001bccb7960fb3a79fcda915587296ff8aec627446ff733059cda3e548ab2480ab30
7
- data.tar.gz: 3f9af3b0200fa6a4d58ce70c955a95e40296a9332f58f8773d31987911b9254fc83e6b7bddabdb0a8380ba2e7768a37abb7620287848d1f8150fd2c6657d1802
6
+ metadata.gz: 8eb46f1505bb2b18e0d0f2331ac4b603910cfac6fd97d092188203eb408a8736486d13013b12dc6041bacce977330ceb706dc27001c1bf0429d1165852dab28c
7
+ data.tar.gz: ae47388fe6a4465ad07dda2edd32b7c168168e2b69df4ea629b813dea7d283b0de794b00c8232c23f5872e51a73cea123c207ff003755ab27ab178fc5cf51fc8
@@ -13,6 +13,6 @@ Explain any changes (maybe breaking?) that have been made.
13
13
  Remove if no visual changes have been made.
14
14
 
15
15
  ## Checklist
16
- - [ ] I have followed [Pull Request guidelines](https://github.com/AlchemyCMS/alchemy_cms/blob/master/CONTRIBUTING.md)
16
+ - [ ] I have followed [Pull Request guidelines](https://github.com/AlchemyCMS/alchemy_cms/blob/main/CONTRIBUTING.md)
17
17
  - [ ] I have added a detailed description into each commit message
18
18
  - [ ] I have added tests to cover this change
@@ -14,4 +14,4 @@ jobs:
14
14
  with:
15
15
  repo-token: ${{ secrets.GITHUB_TOKEN }}
16
16
  stale-issue-message: 'This issue has not seen any activity in a long time. If the issue described still exists in recent versions of Alchemy, please open a new issue or preferably open a PR with a fix. Thanks for reporting.'
17
- stale-pr-message: 'This pull request has not seen any activiy in a long time. Probably because of missing tests or a necessary rebase. Please open a new PR to latest master if you want to continue working on this. Thanks for the contribution.'
17
+ stale-pr-message: 'This pull request has not seen any activiy in a long time. Probably because of missing tests or a necessary rebase. Please open a new PR to latest main if you want to continue working on this. Thanks for the contribution.'
data/.gitignore CHANGED
@@ -40,3 +40,4 @@ yarn-error.log
40
40
  yarn-debug.log*
41
41
  .yarn-integrity
42
42
  yarn.lock
43
+ /spec/dummy/public/pictures
@@ -1,3 +1,67 @@
1
+ ## 5.1.1 (2021-01-12)
2
+
3
+ - Fix copy element feature [#1996](https://github.com/AlchemyCMS/alchemy_cms/pull/1996) ([tvdeyen](https://github.com/tvdeyen))
4
+
5
+ ## 5.1.0 (2020-12-18)
6
+
7
+ ### Features
8
+
9
+ - Allow pound sign in legacy url [#1980](https://github.com/AlchemyCMS/alchemy_cms/pull/1980) ([robinboening](https://github.com/robinboening))
10
+ - Adjust element editor UI [#1979](https://github.com/AlchemyCMS/alchemy_cms/pull/1979) ([tvdeyen](https://github.com/tvdeyen))
11
+ - Always show the full page name in active page tab [#1972](https://github.com/AlchemyCMS/alchemy_cms/pull/1972) ([tvdeyen](https://github.com/tvdeyen))
12
+ - Allow multiple preview sources [#1959](https://github.com/AlchemyCMS/alchemy_cms/pull/1959) ([tvdeyen](https://github.com/tvdeyen))
13
+ - Add Publish Targets [#1957](https://github.com/AlchemyCMS/alchemy_cms/pull/1957) ([tvdeyen](https://github.com/tvdeyen))
14
+ - Persist rendered picture variants [#1882](https://github.com/AlchemyCMS/alchemy_cms/pull/1882) ([tvdeyen](https://github.com/tvdeyen))
15
+ - Store current pictures size in session [#1927](https://github.com/AlchemyCMS/alchemy_cms/pull/1927) ([tvdeyen](https://github.com/tvdeyen))
16
+ - Add support for custom mount points in Page::UrlPath [#1921](https://github.com/AlchemyCMS/alchemy_cms/pull/1921) ([tvdeyen](https://github.com/tvdeyen))
17
+ - Allow to set a custom Page::UrlPath class [#1919](https://github.com/AlchemyCMS/alchemy_cms/pull/1919) ([tvdeyen](https://github.com/tvdeyen))
18
+ - Introduce a pages list view [#1906](https://github.com/AlchemyCMS/alchemy_cms/pull/1906) ([tvdeyen](https://github.com/tvdeyen))
19
+
20
+ ### Changes
21
+
22
+ - Fix height of search input field [#1973](https://github.com/AlchemyCMS/alchemy_cms/pull/1973) ([tvdeyen](https://github.com/tvdeyen))
23
+ - Load select2 from assets folder [#1961](https://github.com/AlchemyCMS/alchemy_cms/pull/1961) ([tvdeyen](https://github.com/tvdeyen))
24
+ - Do not abort if user class cannot be found [#1950](https://github.com/AlchemyCMS/alchemy_cms/pull/1950) ([tvdeyen](https://github.com/tvdeyen))
25
+ - Deprivatize useful picture view methods [#1936](https://github.com/AlchemyCMS/alchemy_cms/pull/1936) ([mickenorlen](https://github.com/mickenorlen))
26
+ - Unset render_size on layout default selection [#1935](https://github.com/AlchemyCMS/alchemy_cms/pull/1935) ([mickenorlen](https://github.com/mickenorlen))
27
+ - Dont show sizes selection if using srcset [#1934](https://github.com/AlchemyCMS/alchemy_cms/pull/1934) ([mickenorlen](https://github.com/mickenorlen))
28
+ - Change all Boolean columns to never be null [#1933](https://github.com/AlchemyCMS/alchemy_cms/pull/1933) ([mamhoff](https://github.com/mamhoff))
29
+ - Autoselect first if only one layout available [#1932](https://github.com/AlchemyCMS/alchemy_cms/pull/1932) ([mickenorlen](https://github.com/mickenorlen))
30
+ - Remove page from search form query [#1928](https://github.com/AlchemyCMS/alchemy_cms/pull/1928) ([tvdeyen](https://github.com/tvdeyen))
31
+ - Allow coffee-rails 5 [#1926](https://github.com/AlchemyCMS/alchemy_cms/pull/1926) ([sechix](https://github.com/sechix))
32
+ - Update documentation [#1917](https://github.com/AlchemyCMS/alchemy_cms/pull/1917) ([dhughesbc](https://github.com/dhughesbc))
33
+ - Remove deprecated Attachment#urlname [#1911](https://github.com/AlchemyCMS/alchemy_cms/pull/1911) ([tvdeyen](https://github.com/tvdeyen))
34
+ - Remove redirect_to_public_child flag and feature [#1910](https://github.com/AlchemyCMS/alchemy_cms/pull/1910) ([tvdeyen](https://github.com/tvdeyen))
35
+ - Remove toolbar helper [#1909](https://github.com/AlchemyCMS/alchemy_cms/pull/1909) ([tvdeyen](https://github.com/tvdeyen))
36
+ - Two minor CSS fixes [#1908](https://github.com/AlchemyCMS/alchemy_cms/pull/1908) ([tvdeyen](https://github.com/tvdeyen))
37
+ - Do not convert JPG images into JPEG [#1905](https://github.com/AlchemyCMS/alchemy_cms/pull/1905) ([tvdeyen](https://github.com/tvdeyen))
38
+ - Full text search respects filters [#1901](https://github.com/AlchemyCMS/alchemy_cms/pull/1901) ([tvdeyen](https://github.com/tvdeyen))
39
+ - Do not add id attributes to hidden fields in search and filters [#1899](https://github.com/AlchemyCMS/alchemy_cms/pull/1899) ([tvdeyen](https://github.com/tvdeyen))
40
+ - Do not freeze common_search_filter_includes [#1898](https://github.com/AlchemyCMS/alchemy_cms/pull/1898) ([tvdeyen](https://github.com/tvdeyen))
41
+ - Refactor sidebar CSS [#1897](https://github.com/AlchemyCMS/alchemy_cms/pull/1897) ([tvdeyen](https://github.com/tvdeyen))
42
+ - Fix tag-list height [#1896](https://github.com/AlchemyCMS/alchemy_cms/pull/1896) ([tvdeyen](https://github.com/tvdeyen))
43
+ - Fix vertical position of site name in page tab [#1895](https://github.com/AlchemyCMS/alchemy_cms/pull/1895) ([tvdeyen](https://github.com/tvdeyen))
44
+ - Support nested controllers in modules [#1894](https://github.com/AlchemyCMS/alchemy_cms/pull/1894) ([tvdeyen](https://github.com/tvdeyen))
45
+ - Always make pages taggable [#1893](https://github.com/AlchemyCMS/alchemy_cms/pull/1893) ([tvdeyen](https://github.com/tvdeyen))
46
+ - Fix editing sites [#1891](https://github.com/AlchemyCMS/alchemy_cms/pull/1891) ([mamhoff](https://github.com/mamhoff))
47
+ - Fix missing help_text_text translations [#1888](https://github.com/AlchemyCMS/alchemy_cms/pull/1888) ([gr8bit](https://github.com/gr8bit))
48
+
49
+ ### Misc
50
+
51
+ - Move away from Travis CI [#1981](https://github.com/AlchemyCMS/alchemy_cms/pull/1981) ([tvdeyen](https://github.com/tvdeyen))
52
+ - Remove poltergeist and phantomjs leftovers [#1970](https://github.com/AlchemyCMS/alchemy_cms/pull/1970) ([tvdeyen](https://github.com/tvdeyen))
53
+ - [ruby - main] Upgrade rubocop to version 1.1.0 [#1958](https://github.com/AlchemyCMS/alchemy_cms/pull/1958) ([depfu](https://github.com/apps/depfu))
54
+ - Remove greetings action [#1956](https://github.com/AlchemyCMS/alchemy_cms/pull/1956) ([tvdeyen](https://github.com/tvdeyen))
55
+ - [ruby] Upgrade rubocop to version 1.0.0 [#1952](https://github.com/AlchemyCMS/alchemy_cms/pull/1952) ([depfu](https://github.com/apps/depfu))
56
+ - [ruby] Upgrade rubocop to version 0.93.1 [#1948](https://github.com/AlchemyCMS/alchemy_cms/pull/1948) ([depfu](https://github.com/apps/depfu))
57
+ - [ruby] Upgrade puma to version 5.0.2 [#1944](https://github.com/AlchemyCMS/alchemy_cms/pull/1944) ([depfu](https://github.com/apps/depfu))
58
+ - [ruby] Upgrade rubocop to version 0.92.0 [#1942](https://github.com/AlchemyCMS/alchemy_cms/pull/1942) ([depfu](https://github.com/apps/depfu))
59
+ - Use Node 12 on CI runs [#1925](https://github.com/AlchemyCMS/alchemy_cms/pull/1925) ([tvdeyen](https://github.com/tvdeyen))
60
+ - [ruby] Upgrade rubocop to version 0.89.0 [#1920](https://github.com/AlchemyCMS/alchemy_cms/pull/1920) ([depfu](https://github.com/apps/depfu))
61
+ - Move back to Travis CI [#1907](https://github.com/AlchemyCMS/alchemy_cms/pull/1907) ([tvdeyen](https://github.com/tvdeyen))
62
+ - [ruby] Upgrade rubocop to version 0.88.0 [#1892](https://github.com/AlchemyCMS/alchemy_cms/pull/1892) ([depfu](https://github.com/apps/depfu))
63
+ - [ruby] Upgrade rubocop to version 0.87.1 [#1889](https://github.com/AlchemyCMS/alchemy_cms/pull/1889) ([depfu](https://github.com/apps/depfu))
64
+
1
65
  ## 5.0.3 (2021-01-12)
2
66
 
3
67
  - Fix copy element feature [#1996](https://github.com/AlchemyCMS/alchemy_cms/pull/1996) ([tvdeyen](https://github.com/tvdeyen))
@@ -8,7 +72,7 @@
8
72
 
9
73
  ## 5.0.1 (2020-09-29)
10
74
 
11
- - Better image alt text support [#1940](https://github.com/AlchemyCMS/alchemy_cms/pull/1940) ([tvdeyen](https://github.com/tvdeyen))
75
+ - [a11y] Better image alt text support [#1940](https://github.com/AlchemyCMS/alchemy_cms/pull/1940) ([tvdeyen](https://github.com/tvdeyen))
12
76
 
13
77
  ## 5.0.0 (2020-07-17)
14
78
 
@@ -16,7 +80,7 @@
16
80
  - Do not enable image cropper if file is missing [#1903](https://github.com/AlchemyCMS/alchemy_cms/pull/1903) ([tvdeyen](https://github.com/tvdeyen))
17
81
  - Always show original image as zoomed image [#1902](https://github.com/AlchemyCMS/alchemy_cms/pull/1902) ([tvdeyen](https://github.com/tvdeyen))
18
82
  - Rename Attachment#urlname into slug [#1848](https://github.com/AlchemyCMS/alchemy_cms/pull/1848) ([tvdeyen](https://github.com/tvdeyen))
19
- - Deprecate toolbar helper ([tvdeyen](https://github.com/tvdeyen))
83
+ - Deprecate toolbar helper [#1900](https://github.com/AlchemyCMS/alchemy_cms/pull/1900) ([tvdeyen](https://github.com/tvdeyen))
20
84
  - Deprecate redirect_to_public_child ([tvdeyen](https://github.com/tvdeyen))
21
85
  - Add --auto-accept option to installer ([tvdeyen](https://github.com/tvdeyen))
22
86
  - Move all installer code into install generator ([tvdeyen](https://github.com/tvdeyen))
@@ -39,11 +39,11 @@ refactoring and documentation changes require no new tests. If you are adding
39
39
  functionality or fixing a bug, we need tests!
40
40
 
41
41
  4. Push to your fork and submit a pull request. If the changes will apply cleanly
42
- to the latest stable branches and master branch, you will only need to submit one
42
+ to the latest stable branches and main branch, you will only need to submit one
43
43
  pull request.
44
44
 
45
45
  5. If a PR does not apply cleanly to one of its targeted branches, then a separate
46
- PR should be created that does. For instance, if a PR applied to master & 2.7-stable but not 2.8-stable, then there should be one PR for master & 2.7-stable and another, separate PR for 2.8-stable.
46
+ PR should be created that does. For instance, if a PR applied to main & 2.7-stable but not 2.8-stable, then there should be one PR for main & 2.7-stable and another, separate PR for 2.8-stable.
47
47
 
48
48
  At this point you're waiting on us. We like to at least comment on, if not
49
49
  accept pull requests. We may suggest some changes or improvements or alternatives.
data/Gemfile CHANGED
@@ -22,7 +22,7 @@ group :development, :test do
22
22
  gem "yard"
23
23
  gem "redcarpet"
24
24
  gem "pry-byebug"
25
- gem "rubocop", "~> 0.85.0", require: false
25
+ gem "rubocop", "~> 1.1.0", require: false
26
26
  gem "listen"
27
27
  gem "localeapp", "~> 3.0", require: false
28
28
  gem "dotenv", "~> 2.2"
data/README.md CHANGED
@@ -18,7 +18,7 @@ Alchemy is an open source CMS engine written in Ruby on Rails.
18
18
 
19
19
  Read more about Alchemy on the [website](https://alchemy-cms.com) and in the [guidelines](https://guides.alchemy-cms.com).
20
20
 
21
- **CAUTION: This master branch is a development branch that *can* contain bugs. For productive environments you should use the [current Ruby gem version](https://rubygems.org/gems/alchemy_cms), or the [latest stable branch (4.5-stable)](https://github.com/AlchemyCMS/alchemy_cms/tree/4.5-stable).**
21
+ **CAUTION: This main branch is a development branch that *can* contain bugs. For productive environments you should use the [current Ruby gem version](https://rubygems.org/gems/alchemy_cms), or the [latest stable branch (5.0-stable)](https://github.com/AlchemyCMS/alchemy_cms/tree/5.0-stable).**
22
22
 
23
23
 
24
24
  ## ✅ Features
@@ -22,7 +22,7 @@ Gem::Specification.new do |gem|
22
22
  gem.add_runtime_dependency 'acts_as_list', ['>= 0.3', '< 2']
23
23
  gem.add_runtime_dependency 'awesome_nested_set', ['~> 3.1']
24
24
  gem.add_runtime_dependency 'cancancan', ['>= 2.1', '< 4.0']
25
- gem.add_runtime_dependency 'coffee-rails', ['~> 4.0', '< 5.0']
25
+ gem.add_runtime_dependency 'coffee-rails', ['>= 4.0', '< 6.0']
26
26
  gem.add_runtime_dependency 'dragonfly', ['~> 1.0', '>= 1.0.7']
27
27
  gem.add_runtime_dependency 'dragonfly_svg', ['~> 0.0.4']
28
28
  gem.add_runtime_dependency 'gutentag', ['~> 2.2', '>= 2.2.1']
@@ -37,7 +37,6 @@ Gem::Specification.new do |gem|
37
37
  gem.add_runtime_dependency 'request_store', ['~> 1.2']
38
38
  gem.add_runtime_dependency 'responders', ['>= 2.0', '< 4.0']
39
39
  gem.add_runtime_dependency 'sassc-rails', ['~> 2.1']
40
- gem.add_runtime_dependency 'select2-rails', ['>= 3.5.9.1', '< 4.0']
41
40
  gem.add_runtime_dependency 'simple_form', ['>= 4.0', '< 6']
42
41
  gem.add_runtime_dependency 'sprockets', ['>= 3.0', '< 5']
43
42
  gem.add_runtime_dependency 'turbolinks', ['>= 2.5']
@@ -46,7 +45,7 @@ Gem::Specification.new do |gem|
46
45
  gem.add_development_dependency 'capybara', ['~> 3.0']
47
46
  gem.add_development_dependency 'capybara-screenshot', ['~> 1.0']
48
47
  gem.add_development_dependency 'factory_bot_rails', ['~> 6.0']
49
- gem.add_development_dependency 'puma', ['~> 4.0']
48
+ gem.add_development_dependency 'puma', ['~> 5.0']
50
49
  gem.add_development_dependency 'rails-controller-testing', ['~> 1.0']
51
50
  gem.add_development_dependency 'rspec-activemodel-mocks', ['~> 1.0']
52
51
  gem.add_development_dependency 'rspec-rails', ['>= 4.0.0.beta2']
@@ -54,6 +53,7 @@ Gem::Specification.new do |gem|
54
53
  gem.add_development_dependency 'webdrivers', ['~> 4.0']
55
54
  gem.add_development_dependency 'webmock', ['~> 3.3']
56
55
  gem.add_development_dependency 'shoulda-matchers', ['~> 4.0']
56
+ gem.add_development_dependency 'timecop', ['~> 0.9']
57
57
 
58
58
  gem.post_install_message = <<-MSG
59
59
  -------------------------------------------------------------
@@ -0,0 +1 @@
1
+ <svg aria-hidden="true" focusable="false" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512" width="16" height="16"><path fill="#f7f7f7" d="M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z" class=""></path></svg>
@@ -13,7 +13,6 @@
13
13
  //= require clipboard.min
14
14
  //= require keymaster
15
15
  //= require requestAnimationFrame
16
- //= require select2
17
16
  //= require handlebars
18
17
  //= require alchemy/templates
19
18
  //= require alchemy/alchemy.base
@@ -38,10 +38,7 @@ Alchemy.ElementEditors =
38
38
  @onSaveElement(e, data)
39
39
  # Listen to postMessage messages from the preview frame
40
40
  window.addEventListener 'message', (e) =>
41
- if e.origin == window.location.origin
42
- @onMessage(e.data)
43
- else
44
- console.warn 'Unsafe message origin!', e.origin
41
+ @onMessage(e.data)
45
42
  true
46
43
  return
47
44
 
@@ -22,9 +22,6 @@ Alchemy.initAlchemyPreviewMode = ->
22
22
 
23
23
  init: ->
24
24
  window.addEventListener "message", (event) =>
25
- if event.origin != window.location.origin
26
- console.warn 'Unsafe message origin!', event.origin
27
- return
28
25
  switch event.data.message
29
26
  when "Alchemy.blurElements" then @blurElements()
30
27
  when "Alchemy.focusElement" then @focusElement(event.data)
@@ -4,8 +4,10 @@ Alchemy.PreviewWindow =
4
4
  MIN_WIDTH: 240
5
5
  HEIGHT: 75 # Top menu height
6
6
 
7
- init: (url) ->
8
- $iframe = $("<iframe name=\"alchemy_preview_window\" src=\"#{url}\" id=\"alchemy_preview_window\" frameborder=\"0\"/>")
7
+ init: (previewUrl) ->
8
+ @select = document.querySelector('#preview_url')
9
+ @previewUrl = @_getCurrentPreviewUrl() || previewUrl[1]
10
+ $iframe = $("<iframe name=\"alchemy_preview_window\" src=\"#{@previewUrl}\" id=\"alchemy_preview_window\" frameborder=\"0\"/>")
9
11
  $reload = $('#reload_preview_button')
10
12
  @_showSpinner()
11
13
  $iframe.load =>
@@ -13,6 +15,10 @@ Alchemy.PreviewWindow =
13
15
  $('body').append($iframe)
14
16
  @currentWindow = $iframe
15
17
  @_bindReloadButton()
18
+ if @select
19
+ @select.value = @previewUrl
20
+ @_bindSelect()
21
+ return
16
22
 
17
23
  resize: (width) ->
18
24
  width = @MIN_WIDTH if width < @MIN_WIDTH
@@ -29,12 +35,12 @@ Alchemy.PreviewWindow =
29
35
  @_hideSpinner()
30
36
  if callback
31
37
  callback.call(e, $iframe)
32
- $iframe.attr 'src', $iframe.attr('src')
38
+ $iframe.attr('src', @previewUrl)
33
39
  true
34
40
 
35
41
  postMessage: (data) ->
36
42
  frameWindow = @currentWindow[0].contentWindow
37
- frameWindow.postMessage(data, window.location.origin)
43
+ frameWindow.postMessage(data, "*")
38
44
 
39
45
  _showSpinner: ->
40
46
  @reload = $('#reload_preview_button')
@@ -53,5 +59,24 @@ Alchemy.PreviewWindow =
53
59
  e.preventDefault()
54
60
  @refresh()
55
61
 
62
+ _getCurrentPreviewUrl: ->
63
+ if @select
64
+ option = Array.from(@select.options).find (o) =>
65
+ o.text == window.localStorage.getItem("alchemyPreview")
66
+ if option
67
+ option.value
68
+ else
69
+ null
70
+ else
71
+ null
72
+
73
+ _bindSelect: ->
74
+ $(@select).change (e) =>
75
+ @previewUrl = e.target.value
76
+ option = e.target.querySelector("option[value='#{@previewUrl}']")
77
+ window.localStorage.setItem("alchemyPreview", option.text)
78
+ @refresh()
79
+ return
80
+
56
81
  Alchemy.reloadPreview = ->
57
82
  Alchemy.PreviewWindow.refresh()
@@ -102,6 +102,9 @@ $error_border_color: #c49c9c !default;
102
102
  $error_text_color: #a23434 !default;
103
103
  $error_background_color: #efd3d3 !default;
104
104
 
105
+ $hint-background-color: $light_yellow !default;
106
+ $hint-text-color: $very-dark-gray !default;
107
+
105
108
  $form-left-width: 35% !default;
106
109
  $form-right-width: 65% !default;
107
110
 
@@ -140,9 +143,12 @@ $table-row-hover-color: rgba($light_yellow, 0.5) !default;
140
143
  $elements-window-width: 22.5vw !default;
141
144
  $elements-window-min-width: 400px !default;
142
145
  $element-header-bg-color: $medium-gray !default;
146
+ $element-header-active-bg-color: $dark-blue !default;
147
+ $element-header-active-color: $white !default;
143
148
  $top-menu-height: 75px !default;
144
149
 
145
150
  $tabs-height: 31px !default;
151
+ $pagination-height: 52px !default;
146
152
 
147
153
  $datepicker_current_bg: $blue !default;
148
154
  $datepicker_current_color: $white !default;
@@ -158,6 +164,8 @@ $datepicker_day_color: $text-color !default;
158
164
 
159
165
  $select-hover-bg-color: $dark-blue !default;
160
166
  $select-hover-text-color: $white !default;
167
+ $medium-select-box-width: 90px;
168
+ $large-select-box-width: 120px;
161
169
 
162
170
  $thumbnail-background-color: opacify($default-border-color, 1) !default;
163
171
  $medium-screen-break-point: 700px;
@@ -1,6 +1,5 @@
1
1
  /* Alchemy CMS Sprockets Manifest
2
2
  * -------------------------------
3
- *= require select2
4
3
  *= require_self
5
4
  */
6
5
 
@@ -1,5 +1,5 @@
1
1
  .resources-header {
2
- padding: 2*$default-padding;
2
+ padding: 2 * $default-padding;
3
3
  }
4
4
 
5
5
  .resources-table-wrapper {
@@ -16,12 +16,11 @@ div#image_assign_filter_and_image_sizing {
16
16
  }
17
17
 
18
18
  #picture_archive {
19
-
20
19
  .selected_item_tools {
21
- margin: -2*$default-padding;
20
+ margin: -2 * $default-padding;
22
21
  border-bottom: 1px solid $default-border-color;
23
- margin-bottom: 4*$default-padding;
24
- padding: 4*$default-padding;
22
+ margin-bottom: 4 * $default-padding;
23
+ padding: 4 * $default-padding;
25
24
  display: none;
26
25
  }
27
26
  }
@@ -37,7 +36,7 @@ div#image_assign_filter_and_image_sizing {
37
36
  }
38
37
 
39
38
  .picture_thumbnail {
40
- margin: 2*$default-margin;
39
+ margin: 2 * $default-margin;
41
40
  background-color: #fff;
42
41
  position: relative;
43
42
  box-shadow: 0 0 0 1px $default-border-color;
@@ -80,8 +79,8 @@ div#image_assign_filter_and_image_sizing {
80
79
  }
81
80
 
82
81
  &:hover {
83
-
84
- .picture_tool, .picture_tags {
82
+ .picture_tool,
83
+ .picture_tags {
85
84
  visibility: visible;
86
85
  opacity: 1;
87
86
  }
@@ -95,7 +94,6 @@ div#image_assign_filter_and_image_sizing {
95
94
  }
96
95
 
97
96
  #pictures {
98
-
99
97
  .thumbnail_background {
100
98
  @include zoom-in;
101
99
  }
@@ -165,25 +163,34 @@ div.assign_image_list_image {
165
163
  pointer-events: none;
166
164
  }
167
165
 
168
- .picture_tags, .picture_tool {
166
+ .picture_tags,
167
+ .picture_tool {
169
168
  visibility: hidden;
170
169
  opacity: 0;
171
170
  transition: opacity $transition-duration;
172
171
  }
173
172
 
174
173
  div#library_sidebar {
174
+ display: flex;
175
+ flex-direction: column;
175
176
  position: fixed;
176
177
  border-left: 1px solid $default-border-color;
177
178
  top: 0;
178
179
  right: 0;
179
180
  width: 232px;
180
- padding: 86px 4*$default-padding 0 4*$default-padding;
181
+
182
+ padding: $top-menu-height + 2 * $default-padding 4 * $default-padding
183
+ $pagination-height + 2 * $default-padding 4 * $default-padding;
181
184
  height: 100%;
182
185
  z-index: 3;
183
186
  background-color: $light-gray;
184
187
 
185
188
  h2 {
186
- margin-top: 4*$default-margin;
189
+ margin-top: 4 * $default-margin;
190
+ }
191
+
192
+ h3 {
193
+ margin: 2em 0 1em;
187
194
  }
188
195
  }
189
196
 
@@ -192,20 +199,19 @@ div#library_sidebar {
192
199
  }
193
200
 
194
201
  div#filter_bar {
195
-
196
202
  .selectboxit {
197
203
  width: 194px;
198
204
  }
199
205
  }
200
206
 
201
207
  .alchemy-dialog-body {
202
-
203
208
  #library_sidebar {
204
- padding: 0 4*$default-padding;
209
+ padding: 0 4 * $default-padding;
205
210
  }
206
211
  }
207
212
 
208
- #assign_image_list, #assign_file_list {
213
+ #assign_image_list,
214
+ #assign_file_list {
209
215
  position: relative;
210
216
  height: 548px;
211
217
  }
@@ -234,7 +240,7 @@ div#filter_bar {
234
240
  display: block;
235
241
  line-height: 25px;
236
242
  text-decoration: none;
237
- padding: $default-padding 2*$default-padding;
243
+ padding: $default-padding 2 * $default-padding;
238
244
  }
239
245
 
240
246
  .icon {
@@ -1,4 +1,7 @@
1
- button, input[type="submit"], a.button, input.button {
1
+ button,
2
+ input[type="submit"],
3
+ a.button,
4
+ input.button {
2
5
  @include button-defaults;
3
6
  position: relative;
4
7
 
@@ -14,7 +17,8 @@ button, input[type="submit"], a.button, input.button {
14
17
  );
15
18
  }
16
19
 
17
- &:active, &:active:focus {
20
+ &:active,
21
+ &:active:focus {
18
22
  border-color: $button-hover-border-color;
19
23
  box-shadow: none;
20
24
  }
@@ -23,7 +27,7 @@ button, input[type="submit"], a.button, input.button {
23
27
  &.small {
24
28
  padding: $small-button-padding;
25
29
  vertical-align: inherit;
26
- line-height: 4*$default-padding;
30
+ line-height: 4 * $default-padding;
27
31
  font-size: inherit;
28
32
  }
29
33
 
@@ -83,13 +87,14 @@ button, input[type="submit"], a.button, input.button {
83
87
  border: $default-border-width $default-border-style $icon-color;
84
88
  color: $icon-color;
85
89
 
86
- .icon { color: inherit }
90
+ .icon {
91
+ color: inherit;
92
+ }
87
93
  }
88
94
  }
89
95
 
90
96
  &.disabled,
91
97
  &[disabled] {
92
-
93
98
  span {
94
99
  opacity: 0.3;
95
100
  cursor: not-allowed;
@@ -118,7 +123,8 @@ button.icon_button {
118
123
  border: 0 none;
119
124
  box-shadow: none;
120
125
 
121
- &:disabled, &.disabled {
126
+ &:disabled,
127
+ &.disabled {
122
128
  background: transparent;
123
129
  }
124
130
  }
@@ -131,10 +137,15 @@ button.icon_button {
131
137
  position: relative;
132
138
  display: inline-block;
133
139
  text-align: center;
134
- margin: 0 2*$default-margin;
135
140
 
136
- &.active, &:active, &:hover {
137
- .icon_button:not([disabled]) {
141
+ .toolbar_buttons & {
142
+ margin: 0 2 * $default-margin;
143
+ }
144
+
145
+ &.active,
146
+ &:active,
147
+ &:hover {
148
+ .icon_button:not([disabled]) {
138
149
  background-color: $default-border-color;
139
150
  cursor: pointer;
140
151
  }
@@ -161,8 +172,8 @@ button.icon_button {
161
172
  }
162
173
  }
163
174
 
164
- .button_with_label, .button_group {
165
-
175
+ .button_with_label,
176
+ .button_group {
166
177
  .icon_button {
167
178
  width: 29px;
168
179
  height: 29px;
@@ -179,16 +190,16 @@ button.icon_button {
179
190
  z-index: 30;
180
191
  background-color: $tooltip-background-color;
181
192
  color: $white;
182
- padding: $default-padding 2*$default-padding 1.5*$default-padding;
193
+ padding: $default-padding 2 * $default-padding 1.5 * $default-padding;
183
194
  line-height: 1;
184
195
  box-shadow: 0 0 4px $default-border-color;
185
196
  white-space: nowrap;
186
197
  pointer-events: none;
187
198
  opacity: 0;
188
- transition: .3s;
199
+ transition: 0.3s;
189
200
 
190
201
  &:before {
191
- content: '';
202
+ content: "";
192
203
  position: absolute;
193
204
  bottom: -10px;
194
205
  left: 8px;
@@ -238,6 +249,6 @@ button.icon_button {
238
249
  visibility: visible;
239
250
  opacity: 1;
240
251
  top: -25px;
241
- transition-delay: .2s;
252
+ transition-delay: 0.2s;
242
253
  }
243
254
  }