alchemy_cms 7.2.7 → 7.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (183) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +97 -14
  3. data/Gemfile +4 -3
  4. data/Rakefile +1 -0
  5. data/alchemy_cms.gemspec +7 -7
  6. data/app/assets/builds/alchemy/admin/print.css +1 -0
  7. data/app/assets/builds/alchemy/admin/print.css.map +1 -0
  8. data/app/assets/builds/alchemy/admin.css +1 -0
  9. data/app/assets/builds/alchemy/admin.css.map +1 -0
  10. data/app/assets/builds/alchemy/welcome.css +1 -0
  11. data/app/assets/builds/alchemy/welcome.css.map +1 -0
  12. data/app/assets/builds/tinymce/skins/content/alchemy/content.css +1 -0
  13. data/app/assets/builds/tinymce/skins/content/alchemy/content.css.map +1 -0
  14. data/app/assets/builds/tinymce/skins/content/alchemy/content.min.css +1 -0
  15. data/app/assets/builds/tinymce/skins/content/alchemy/content.min.css.map +1 -0
  16. data/app/assets/builds/tinymce/skins/ui/alchemy/skin.css +1 -0
  17. data/app/assets/builds/tinymce/skins/ui/alchemy/skin.css.map +1 -0
  18. data/app/assets/builds/tinymce/skins/ui/alchemy/skin.min.css +1 -0
  19. data/app/assets/builds/tinymce/skins/ui/alchemy/skin.min.css.map +1 -0
  20. data/app/assets/config/alchemy_manifest.js +1 -5
  21. data/app/assets/javascripts/alchemy/alchemy.dialog.js.coffee +4 -0
  22. data/app/assets/stylesheets/alchemy/{_custom-properties.scss → _custom-properties.css} +28 -25
  23. data/app/assets/stylesheets/alchemy/_deprecated_variables.scss +41 -0
  24. data/app/assets/stylesheets/alchemy/_deprecation.scss +17 -0
  25. data/app/assets/stylesheets/alchemy/_extends.scss +1 -1
  26. data/app/assets/stylesheets/alchemy/_mixins.scss +20 -23
  27. data/app/assets/stylesheets/alchemy/_variables.scss +98 -94
  28. data/app/assets/stylesheets/alchemy/{archive.scss → admin/archive.scss} +23 -23
  29. data/app/assets/stylesheets/alchemy/{attachment-select.scss → admin/attachment-select.scss} +2 -2
  30. data/app/assets/stylesheets/alchemy/{attachments.scss → admin/attachments.scss} +4 -4
  31. data/app/assets/stylesheets/alchemy/{base.scss → admin/base.scss} +9 -9
  32. data/app/assets/stylesheets/alchemy/{buttons.scss → admin/buttons.scss} +3 -3
  33. data/app/assets/stylesheets/alchemy/{clipboard.scss → admin/clipboard.scss} +9 -6
  34. data/app/assets/stylesheets/alchemy/{dashboard.scss → admin/dashboard.scss} +8 -8
  35. data/app/assets/stylesheets/alchemy/{dialogs.scss → admin/dialogs.scss} +20 -20
  36. data/app/assets/stylesheets/alchemy/{elements.scss → admin/elements.scss} +128 -88
  37. data/app/assets/stylesheets/alchemy/{errors.scss → admin/errors.scss} +22 -6
  38. data/app/assets/stylesheets/alchemy/{flash.scss → admin/flash.scss} +3 -3
  39. data/app/assets/stylesheets/alchemy/{flatpickr.scss → admin/flatpickr.scss} +55 -35
  40. data/app/assets/stylesheets/alchemy/{form_fields.scss → admin/form_fields.scss} +8 -6
  41. data/app/assets/stylesheets/alchemy/{forms.scss → admin/forms.scss} +20 -16
  42. data/app/assets/stylesheets/alchemy/{frame.scss → admin/frame.scss} +9 -9
  43. data/app/assets/stylesheets/alchemy/{image_library.scss → admin/image_library.scss} +34 -33
  44. data/app/assets/stylesheets/alchemy/admin/labels.scss +3 -0
  45. data/app/assets/stylesheets/alchemy/{list_filter.scss → admin/list_filter.scss} +4 -4
  46. data/app/assets/stylesheets/alchemy/{lists.scss → admin/lists.scss} +9 -7
  47. data/app/assets/stylesheets/alchemy/{navigation.scss → admin/navigation.scss} +17 -17
  48. data/app/assets/stylesheets/alchemy/{node-select.scss → admin/node-select.scss} +5 -5
  49. data/app/assets/stylesheets/alchemy/{nodes.scss → admin/nodes.scss} +11 -11
  50. data/app/assets/stylesheets/alchemy/{notices.scss → admin/notices.scss} +11 -7
  51. data/app/assets/stylesheets/alchemy/{page-select.scss → admin/page-select.scss} +10 -10
  52. data/app/assets/stylesheets/alchemy/{pagination.scss → admin/pagination.scss} +10 -10
  53. data/app/assets/stylesheets/alchemy/{print.scss → admin/print.scss} +2 -6
  54. data/app/assets/stylesheets/alchemy/{resource_info.scss → admin/resource_info.scss} +6 -7
  55. data/app/assets/stylesheets/alchemy/{search.scss → admin/search.scss} +6 -6
  56. data/app/assets/stylesheets/alchemy/{selects.scss → admin/selects.scss} +46 -39
  57. data/app/assets/stylesheets/alchemy/{shoelace.scss → admin/shoelace.scss} +10 -10
  58. data/app/assets/stylesheets/alchemy/{sitemap.scss → admin/sitemap.scss} +18 -19
  59. data/app/assets/stylesheets/alchemy/{tables.scss → admin/tables.scss} +26 -22
  60. data/app/assets/stylesheets/alchemy/admin/tags.scss +158 -0
  61. data/app/assets/stylesheets/alchemy/{toolbar.scss → admin/toolbar.scss} +10 -10
  62. data/app/assets/stylesheets/alchemy/{typography.scss → admin/typography.scss} +3 -3
  63. data/app/assets/stylesheets/alchemy/{upload.scss → admin/upload.scss} +1 -1
  64. data/app/assets/stylesheets/alchemy/admin.scss +40 -45
  65. data/app/assets/stylesheets/alchemy/welcome.scss +57 -0
  66. data/app/assets/stylesheets/tinymce/skins/content/alchemy/{content.min.scss → content.scss} +5 -4
  67. data/app/assets/stylesheets/tinymce/skins/ui/alchemy/{skin.min.scss → skin.scss} +40 -40
  68. data/app/components/alchemy/admin/resource/action.rb +46 -0
  69. data/app/components/alchemy/admin/resource/cell.rb +34 -0
  70. data/app/components/alchemy/admin/resource/header.rb +46 -0
  71. data/app/components/alchemy/admin/resource/table.rb +153 -0
  72. data/app/components/alchemy/ingredients/datetime_view.rb +2 -2
  73. data/app/controllers/alchemy/admin/base_controller.rb +2 -1
  74. data/app/controllers/alchemy/admin/elements_controller.rb +7 -3
  75. data/app/controllers/alchemy/admin/legacy_page_urls_controller.rb +1 -1
  76. data/app/controllers/alchemy/admin/pages_controller.rb +1 -1
  77. data/app/controllers/alchemy/admin/pictures_controller.rb +2 -2
  78. data/app/controllers/alchemy/admin/resources_controller.rb +2 -2
  79. data/app/controllers/alchemy/base_controller.rb +2 -0
  80. data/app/controllers/concerns/alchemy/admin/uploader_responses.rb +2 -11
  81. data/app/decorators/alchemy/ingredient_editor.rb +17 -0
  82. data/app/helpers/alchemy/admin/pages_helper.rb +6 -10
  83. data/app/helpers/alchemy/base_helper.rb +2 -2
  84. data/app/helpers/alchemy/elements_block_helper.rb +13 -1
  85. data/app/helpers/alchemy/pages_helper.rb +2 -2
  86. data/app/javascript/alchemy_admin/components/element_editor.js +23 -31
  87. data/app/javascript/alchemy_admin/components/preview_window.js +2 -3
  88. data/app/javascript/alchemy_admin/picture_selector.js +38 -10
  89. data/app/models/alchemy/attachment.rb +0 -8
  90. data/app/models/alchemy/element/dom_id.rb +1 -0
  91. data/app/models/alchemy/element/element_ingredients.rb +0 -73
  92. data/app/models/alchemy/element/presenters.rb +4 -1
  93. data/app/models/alchemy/element.rb +6 -0
  94. data/app/models/alchemy/elements_repository.rb +2 -2
  95. data/app/models/alchemy/ingredient_validator.rb +10 -0
  96. data/app/models/alchemy/page/page_scopes.rb +1 -1
  97. data/app/models/alchemy/picture.rb +0 -10
  98. data/app/views/alchemy/admin/attachments/_files_list.html.erb +74 -16
  99. data/app/views/alchemy/admin/clipboard/index.html.erb +38 -33
  100. data/app/views/alchemy/admin/dashboard/_dashboard.html.erb +3 -0
  101. data/app/views/alchemy/admin/dashboard/_left_column.html.erb +4 -0
  102. data/app/views/alchemy/admin/dashboard/_right_column.html.erb +9 -0
  103. data/app/views/alchemy/admin/dashboard/_top.html.erb +12 -0
  104. data/app/views/alchemy/admin/dashboard/index.html.erb +1 -25
  105. data/app/views/alchemy/admin/elements/_element.html.erb +1 -2
  106. data/app/views/alchemy/admin/elements/_form.html.erb +1 -1
  107. data/app/views/alchemy/admin/ingredients/_picture_fields.html.erb +10 -3
  108. data/app/views/alchemy/admin/ingredients/update.turbo_stream.erb +7 -0
  109. data/app/views/alchemy/admin/languages/_table.html.erb +16 -42
  110. data/app/views/alchemy/admin/nodes/_form.html.erb +1 -1
  111. data/app/views/alchemy/admin/pages/_table.html.erb +92 -27
  112. data/app/views/alchemy/admin/pages/edit.html.erb +6 -8
  113. data/app/views/alchemy/admin/pages/index.html.erb +0 -4
  114. data/app/views/alchemy/admin/pictures/_form.html.erb +14 -12
  115. data/app/views/alchemy/admin/pictures/index.html.erb +1 -11
  116. data/app/views/alchemy/admin/pictures/update.turbo_stream.erb +6 -0
  117. data/app/views/alchemy/admin/resources/_resource_table.html.erb +3 -0
  118. data/app/views/alchemy/admin/resources/_table.html.erb +2 -0
  119. data/app/views/alchemy/admin/resources/index.html.erb +1 -1
  120. data/app/views/alchemy/admin/sites/index.html.erb +1 -1
  121. data/app/views/alchemy/admin/styleguide/index.html.erb +0 -4
  122. data/app/views/alchemy/admin/tags/index.html.erb +15 -14
  123. data/app/views/alchemy/base/403.html.erb +6 -0
  124. data/app/views/alchemy/base/500.html.erb +14 -12
  125. data/app/views/alchemy/ingredients/_datetime_editor.html.erb +13 -11
  126. data/app/views/alchemy/ingredients/_headline_editor.html.erb +29 -22
  127. data/app/views/alchemy/ingredients/_link_editor.html.erb +17 -11
  128. data/app/views/alchemy/ingredients/_page_editor.html.erb +1 -0
  129. data/app/views/alchemy/ingredients/_picture_editor.html.erb +3 -4
  130. data/app/views/alchemy/ingredients/_richtext_editor.html.erb +5 -1
  131. data/app/views/alchemy/ingredients/_select_editor.html.erb +2 -1
  132. data/app/views/alchemy/ingredients/_text_editor.html.erb +20 -14
  133. data/app/views/alchemy/ingredients/shared/_picture_css_class.html.erb +6 -0
  134. data/app/views/layouts/alchemy/admin.html.erb +4 -2
  135. data/bin/setup +2 -0
  136. data/bin/start +1 -1
  137. data/bun.lockb +0 -0
  138. data/config/alchemy/config.yml +9 -0
  139. data/config/locales/alchemy.en.yml +8 -29
  140. data/config/routes.rb +22 -22
  141. data/lib/alchemy/config.rb +3 -3
  142. data/lib/alchemy/install/tasks.rb +5 -2
  143. data/lib/alchemy/resources_helper.rb +3 -1
  144. data/lib/alchemy/test_support/capybara_helpers.rb +8 -5
  145. data/lib/alchemy/test_support/shared_uploader_examples.rb +0 -1
  146. data/lib/alchemy/upgrader/seven_point_three.rb +52 -0
  147. data/lib/alchemy/version.rb +1 -1
  148. data/lib/alchemy_cms.rb +1 -1
  149. data/lib/generators/alchemy/install/files/article.css +25 -0
  150. data/lib/generators/alchemy/install/files/custom.css +4 -0
  151. data/lib/generators/alchemy/install/install_generator.rb +6 -6
  152. data/lib/tasks/alchemy/upgrade.rake +29 -1
  153. data/vendor/assets/stylesheets/alchemy_admin/select2.css +1 -0
  154. data/vendor/assets/stylesheets/jquery.Jcrop.min.css +2 -0
  155. data/vendor/javascript/shoelace.min.js +62 -63
  156. data/vendor/javascript/tinymce.min.js +1 -1
  157. metadata +132 -105
  158. data/app/assets/images/alchemy/lupe.cur +0 -0
  159. data/app/assets/stylesheets/alchemy/labels.scss +0 -3
  160. data/app/assets/stylesheets/alchemy/tags.scss +0 -155
  161. data/app/assets/stylesheets/alchemy/welcome.sass +0 -49
  162. data/app/views/alchemy/admin/attachments/_attachment.html.erb +0 -81
  163. data/app/views/alchemy/admin/languages/_language.html.erb +0 -50
  164. data/app/views/alchemy/admin/pages/_table_row.html.erb +0 -111
  165. data/app/views/alchemy/admin/pages/list/_table.html.erb +0 -31
  166. data/app/views/alchemy/admin/pictures/update.js.erb +0 -6
  167. data/app/views/alchemy/admin/tags/_tag.html.erb +0 -32
  168. data/app/views/alchemy/base/update.js.erb +0 -5
  169. data/lib/generators/alchemy/install/files/all.css +0 -11
  170. data/lib/generators/alchemy/install/files/article.scss +0 -30
  171. data/package.json +0 -52
  172. data/vendor/assets/stylesheets/alchemy_admin/select2.scss +0 -741
  173. data/vendor/assets/stylesheets/jquery.Jcrop.min.scss +0 -2
  174. /data/app/assets/stylesheets/alchemy/{fonts.scss → _fonts.scss} +0 -0
  175. /data/app/assets/stylesheets/alchemy/{hints.scss → admin/hints.scss} +0 -0
  176. /data/app/assets/stylesheets/alchemy/{icons.scss → admin/icons.scss} +0 -0
  177. /data/app/assets/stylesheets/alchemy/{images.scss → admin/images.scss} +0 -0
  178. /data/app/assets/stylesheets/alchemy/{preview_window.scss → admin/preview_window.scss} +0 -0
  179. /data/app/assets/stylesheets/alchemy/{spinner.scss → admin/spinner.scss} +0 -0
  180. /data/app/views/alchemy/admin/dashboard/{_locked_pages.html.erb → widgets/_locked_pages.html.erb} +0 -0
  181. /data/app/views/alchemy/admin/dashboard/{_recent_pages.html.erb → widgets/_recent_pages.html.erb} +0 -0
  182. /data/app/views/alchemy/admin/dashboard/{_sites.html.erb → widgets/_sites.html.erb} +0 -0
  183. /data/app/views/alchemy/admin/dashboard/{_users.html.erb → widgets/_users.html.erb} +0 -0
@@ -1,155 +0,0 @@
1
- .tag-list {
2
- display: flex;
3
- flex-direction: column;
4
- height: 100%;
5
-
6
- .alchemy-dialog-body & {
7
- max-height: 316px;
8
- }
9
-
10
- alchemy-list-filter {
11
- margin: 0;
12
-
13
- input {
14
- background-color: transparentize($white, 0.25);
15
-
16
- &:focus {
17
- background-color: $white;
18
- }
19
- }
20
- }
21
-
22
- ul {
23
- list-style-type: none;
24
- padding: 0;
25
- margin: 0;
26
- height: 100%;
27
- overflow-x: hidden;
28
- overflow-y: auto;
29
-
30
- li {
31
- display: block;
32
-
33
- &:first-child {
34
- margin-top: 0;
35
- }
36
-
37
- a {
38
- @include tag-base;
39
- text-decoration: none;
40
- display: flex;
41
- }
42
-
43
- &:hover {
44
- background-color: $very-light-blue;
45
- }
46
-
47
- &.active {
48
- a {
49
- background-color: $dark-gray;
50
- color: $light-gray;
51
-
52
- &:before {
53
- background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="rgba(255, 255, 255, 0.95)"><path d="M10.9042 2.10025L20.8037 3.51446L22.2179 13.414L13.0255 22.6063C12.635 22.9969 12.0019 22.9969 11.6113 22.6063L1.71184 12.7069C1.32131 12.3163 1.32131 11.6832 1.71184 11.2926L10.9042 2.10025ZM11.6113 4.22157L3.83316 11.9997L12.3184 20.485L20.0966 12.7069L19.036 5.28223L11.6113 4.22157ZM13.7327 10.5855C12.9516 9.80448 12.9516 8.53815 13.7327 7.7571C14.5137 6.97606 15.78 6.97606 16.5611 7.7571C17.3421 8.53815 17.3421 9.80448 16.5611 10.5855C15.78 11.3666 14.5137 11.3666 13.7327 10.5855Z"></path></svg>');
54
- }
55
- }
56
- }
57
- }
58
- }
59
- }
60
-
61
- .tag {
62
- @include tag-base(
63
- $margin: $default-margin/2 0,
64
- $padding: $default-padding 2 * $default-padding $default-padding
65
- );
66
- pointer-events: none;
67
- font-size: $small-font-size;
68
- }
69
-
70
- .tags .list .tag {
71
- padding: 0;
72
- }
73
-
74
- #assign_image_list {
75
- .tag-list ul {
76
- height: 316px;
77
- }
78
-
79
- &.filtered .tag-list ul {
80
- height: 292px;
81
- }
82
- }
83
-
84
- #assign_file_list {
85
- .tag-list ul {
86
- height: 396px;
87
- }
88
-
89
- &.filtered .tag-list ul {
90
- height: 372px;
91
- }
92
- }
93
-
94
- #overlay_file_list.with_tag_list {
95
- padding-right: 234px;
96
- }
97
-
98
- #tags_tag_list {
99
- alchemy-list-filter {
100
- margin-top: 0;
101
- }
102
-
103
- ul.tags {
104
- max-height: 10em;
105
- padding: 1px;
106
- margin: 0;
107
- margin-top: 2px;
108
- overflow: auto;
109
- text-align: left;
110
- list-style-type: none;
111
-
112
- li {
113
- background-color: $medium-gray;
114
- padding: 4px;
115
- margin: 0 0 4px 0;
116
- position: relative;
117
- border-radius: $default-border-radius;
118
-
119
- &.odd {
120
- background-color: #eaf3f9;
121
- }
122
-
123
- input {
124
- position: absolute;
125
- top: 3px;
126
- left: 4px;
127
- }
128
-
129
- label {
130
- display: inline-block;
131
- margin-left: 2em;
132
- line-height: 1.6em;
133
- }
134
- }
135
- }
136
- }
137
-
138
- .tag_list,
139
- .autocomplete_tag_list {
140
- .select2-container.select2-container-multi {
141
- .select2-search-choice {
142
- padding: $default-padding 22px;
143
- background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="#{$icon-color}"><path d="M10.9042 2.10025L20.8037 3.51446L22.2179 13.414L13.0255 22.6063C12.635 22.9969 12.0019 22.9969 11.6113 22.6063L1.71184 12.7069C1.32131 12.3163 1.32131 11.6832 1.71184 11.2926L10.9042 2.10025ZM11.6113 4.22157L3.83316 11.9997L12.3184 20.485L20.0966 12.7069L19.036 5.28223L11.6113 4.22157ZM13.7327 10.5855C12.9516 9.80448 12.9516 8.53815 13.7327 7.7571C14.5137 6.97606 15.78 6.97606 16.5611 7.7571C17.3421 8.53815 17.3421 9.80448 16.5611 10.5855C15.78 11.3666 14.5137 11.3666 13.7327 10.5855Z"></path></svg>');
144
- background-repeat: no-repeat;
145
- background-position: 6px;
146
- background-color: $medium-gray;
147
- background-size: 1rem;
148
-
149
- > div {
150
- position: relative;
151
- top: -1px;
152
- }
153
- }
154
- }
155
- }
@@ -1,49 +0,0 @@
1
- @import "alchemy/variables"
2
- @import "alchemy/fonts"
3
-
4
- body
5
- background-color: $main-menu-bg-color
6
- color: $white
7
- font-family: $default-font-family
8
- font-weight: normal
9
- font-size: 15px
10
- line-height: 22px
11
-
12
- h3
13
- font-weight: bold
14
- font-size: 25px
15
- line-height: 1.2
16
- margin-bottom: 20px
17
- padding-top: 20px
18
-
19
- .container
20
- position: absolute
21
- top: 50%
22
- left: 50%
23
- width: 600px
24
- margin-top: -50px
25
- transform: translateY(-50%) translateX(-300px)
26
-
27
- ul
28
- line-height: 1.6
29
- margin-bottom: 17px
30
- padding: 0
31
- padding-left: 20px
32
- margin: 0px
33
- list-style-position: outside
34
-
35
- li
36
- color: $white
37
- margin-bottom: 12px
38
- background-color: none
39
- border-bottom: 0 none
40
- line-height: 22px
41
-
42
- a
43
- color: $white
44
- text-decoration: underline
45
- transition: all 0.1s ease-in-out
46
-
47
- &:hover
48
- color: $white
49
- text-decoration: none
@@ -1,81 +0,0 @@
1
- <tr class="<%= cycle('even', 'odd') %>">
2
- <td class="icon">
3
- <%= render_icon attachment.icon_css_class, size: "xl" %>
4
- </td>
5
- <td class="name">
6
- <% if can?(:show, attachment) %>
7
- <%= link_to_dialog(
8
- attachment.name,
9
- alchemy.admin_attachment_path(attachment),
10
- {
11
- title: attachment.name,
12
- size: attachment_preview_size(attachment)
13
- },
14
- {
15
- title: Alchemy.t('Attachment Preview')
16
- }
17
- ) %>
18
- <% else %>
19
- <%= attachment.name %>
20
- <% end %>
21
- </td>
22
- <td class="file_name"><%= attachment.file_name %></td>
23
- <td class="file_type"><%= mime_to_human(attachment.file_mime_type) %></td>
24
- <td class="file_size"><%= number_to_human_size(attachment.file_size) %></td>
25
- <td class="date"><%= l(attachment.created_at, format: :'alchemy.default') %></td>
26
- <td class="tools long">
27
- <% if can?(:show, attachment) %>
28
- <sl-tooltip content="<%= Alchemy.t('Attachment Preview') %>">
29
- <%= link_to_dialog(
30
- render_icon(:information),
31
- alchemy.admin_attachment_path(attachment),
32
- {
33
- title: attachment.name,
34
- size: attachment_preview_size(attachment)
35
- },
36
- class: "icon_button"
37
- ) %>
38
- </sl-tooltip>
39
- <% end %>
40
- <% if can?(:download, attachment) %>
41
- <sl-tooltip content="<%= Alchemy.t("download_file", filename: attachment.file_name) %>">
42
- <%= link_to render_icon(:download),
43
- alchemy.download_admin_attachment_path(attachment),
44
- target: "_blank",
45
- class: "icon_button" %>
46
- </sl-tooltip>
47
- <% end %>
48
- <% if can?(:edit, attachment) %>
49
- <sl-tooltip content="<%= Alchemy.t(:replace_file) %>">
50
- <%= render 'alchemy/admin/attachments/replace_button',
51
- redirect_url: alchemy.admin_attachments_path,
52
- object: attachment,
53
- file_attribute: 'file' %>
54
- </sl-tooltip>
55
- <% end %>
56
- <% if can?(:destroy, attachment) %>
57
- <sl-tooltip content="<%= Alchemy.t(:delete_file) %>">
58
- <%= link_to_confirm_dialog render_icon(:minus),
59
- Alchemy.t(:confirm_to_delete_file),
60
- alchemy.admin_attachment_path(
61
- id: attachment,
62
- q: search_filter_params[:q],
63
- page: params[:page],
64
- per_page: params[:per_page]
65
- ),
66
- class: "icon_button" %>
67
- </sl-tooltip>
68
- <% end %>
69
- <% if can?(:edit, attachment) %>
70
- <sl-tooltip content="<%= Alchemy.t(:rename_file) %>">
71
- <%= link_to_dialog render_icon(:edit),
72
- alchemy.edit_admin_attachment_path(attachment, q: search_filter_params[:q], page: params[:page]),
73
- {
74
- title: Alchemy.t(:rename_file),
75
- size: '500x250'
76
- },
77
- class: "icon_button" %>
78
- </sl-tooltip>
79
- <% end %>
80
- </td>
81
- </tr>
@@ -1,50 +0,0 @@
1
- <tr class="<%= cycle('even', 'odd') %>">
2
- <td class="icon">
3
- <%= render_icon("translate-2", size: "xl", style: false) %>
4
- </td>
5
- <td>
6
- <%= language.name %>
7
- </td>
8
- <td>
9
- <%= language.language_code %>
10
- </td>
11
- <td>
12
- <%= language.country_code %>
13
- </td>
14
- <td>
15
- <%= language.code %>
16
- </td>
17
- <td>
18
- <%= language.locale %>
19
- </td>
20
- <td>
21
- <%= language.frontpage_name %>
22
- </td>
23
- <td>
24
- <%= Alchemy::Page.human_layout_name(language.page_layout) %>
25
- </td>
26
- <td class="center">
27
- <%= language.public? ? render_icon(:check) : nil %>
28
- </td>
29
- <td class="center">
30
- <%= language.default? ? render_icon(:check) : nil %>
31
- </td>
32
- <td class="tools">
33
- <%- if can?(:destroy, language) -%>
34
- <sl-tooltip content="<%= Alchemy.t("Delete") %>">
35
- <%= delete_button resource_path(language) %>
36
- </sl-tooltip>
37
- <%- end -%>
38
- <%- if can?(:edit, language) -%>
39
- <sl-tooltip content="<%= Alchemy.t("Edit") %>" placement="top-end">
40
- <%= link_to_dialog render_icon(:edit),
41
- alchemy.edit_admin_language_path(language),
42
- {
43
- title: Alchemy.t("Edit"),
44
- size: "430x415"
45
- },
46
- class: "icon_button" %>
47
- </sl-tooltip>
48
- <%- end -%>
49
- </td>
50
- </tr>
@@ -1,111 +0,0 @@
1
- <tr class="<%= cycle(:even, :odd) %>" data-page-id="<%= page.id %>" id="page_<%= page.id %>">
2
- <td class="icon">
3
- <% if can?(:edit_content, page) %>
4
- <% if page.locked? %>
5
- <sl-tooltip class="like-hint-tooltip" content="<%= Alchemy.t("This page is locked", name: page.locker_name) %>" placement="bottom-start">
6
- <%= render_icon "file-edit", size: "xl" %>
7
- </sl-tooltip>
8
- <% else %>
9
- <%= render_icon "file-edit", size: "xl" %>
10
- <% end %>
11
- <% else %>
12
- <sl-tooltip class="like-hint-tooltip" content="<%= Alchemy.t("Your user role does not allow you to edit this page") %>" placement="bottom-start">
13
- <%= render_icon "file-forbid", size: "xl" %>
14
- </sl-tooltip>
15
- <% end %>
16
- </td>
17
- <td class="string name">
18
- <%= link_to_if(
19
- can?(:edit_content, page),
20
- page.name,
21
- alchemy.edit_admin_page_path(page),
22
- title: Alchemy.t(:edit_page),
23
- ) { content_tag(:span, page.name) } -%>
24
- </td>
25
- <td class="url">
26
- <%= page.url_path %>
27
- </td>
28
- <td class="page_layout">
29
- <%= Alchemy.t(page.page_layout, scope: "page_layout_names", default: page.page_layout.to_s.humanize) %>
30
- </td>
31
- <td class="tags">
32
- <% page.tag_list.each do |tag| %>
33
- <%= content_tag(:span, tag, class: "tag") %>
34
- <% end %>
35
- </td>
36
- <td class="date">
37
- <%= l(page.updated_at, format: :"alchemy.default") %>
38
- </td>
39
- <td class="status right">
40
- <% if page.locked? %>
41
- <span class="page_status locked">
42
- <%= render_icon(:edit, size: "1x") %>
43
- <%= page.status_title(:locked) %>
44
- </span>
45
- <% end %>
46
- <% if page.restricted? %>
47
- <span class="page_status">
48
- <%= render_icon(:lock, size: "1x") %>
49
- <%= page.status_title(:restricted) %>
50
- </span>
51
- <% end %>
52
- <% unless page.public? %>
53
- <span class="page_status">
54
- <%= render_icon("cloud-off", size: "1x") %>
55
- <%= page.status_title(:public) %>
56
- </span>
57
- <% end %>
58
- </td>
59
- <td class="tools">
60
- <% if can?(:info, page) %>
61
- <sl-tooltip content="<%= Alchemy.t(:page_infos) %>">
62
- <%= link_to_dialog(
63
- render_icon('info-circle'),
64
- alchemy.info_admin_page_path(page),
65
- {
66
- title: Alchemy.t(:page_infos),
67
- size: '520x290'
68
- },
69
- class: "icon_button"
70
- ) %>
71
- </sl-tooltip>
72
- <% end %>
73
- <% if can?(:configure, page) %>
74
- <sl-tooltip content="<%= Alchemy.t(:edit_page_properties) %>">
75
- <%= link_to_dialog(
76
- render_icon(:cog),
77
- alchemy.configure_admin_page_path(page),
78
- {
79
- title: Alchemy.t(:edit_page_properties),
80
- size: '450x680'
81
- },
82
- class: "icon_button"
83
- ) -%>
84
- </sl-tooltip>
85
- <% end %>
86
- <% if can?(:copy, page) %>
87
- <sl-tooltip content="<%= Alchemy.t(:copy_page) %>">
88
- <%= link_to(
89
- render_icon(:copy),
90
- alchemy.insert_admin_clipboard_path(
91
- remarkable_type: :pages,
92
- remarkable_id: page.id,
93
- ),
94
- remote: true,
95
- method: :post,
96
- class: "icon_button"
97
- ) %>
98
- </sl-tooltip>
99
- <% end %>
100
- <% if can?(:destroy, page) %>
101
- <sl-tooltip content="<%= Alchemy.t(:delete_page) %>">
102
- <%= link_to_confirm_dialog(
103
- render_icon(:minus),
104
- Alchemy.t(:confirm_to_delete_page),
105
- alchemy.admin_page_path(page),
106
- class: "icon_button"
107
- ) -%>
108
- </sl-tooltip>
109
- <% end %>
110
- </td>
111
- </tr>
@@ -1,31 +0,0 @@
1
- <% if @pages.any? %>
2
- <table class="list">
3
- <thead>
4
- <tr>
5
- <th class="icon"></th>
6
- <th class="string name">
7
- <%= sort_link [:alchemy, @query],
8
- "name",
9
- Alchemy::Page.human_attribute_name(:name),
10
- default_order: "asc" %>
11
- </th>
12
- <th><%= Alchemy::Page.human_attribute_name(:urlname) %></th>
13
- <th><%= Alchemy::Page.human_attribute_name(:page_type) %></th>
14
- <th><%= Alchemy::Page.human_attribute_name(:tag_list) %></th>
15
- <th class="status center"><%= Alchemy::Page.human_attribute_name(:status) %></th>
16
- <th class="tools"></th>
17
- </tr>
18
- </thead>
19
- <tbody>
20
- <%= render partial: "page", collection: @pages %>
21
- </tbody>
22
- </table>
23
- <% elsif search_filter_params.present? %>
24
- <%= render_message do %>
25
- <%= Alchemy.t('No pages found') %>
26
- <% end %>
27
- <% else %>
28
- <%= render partial: 'alchemy/admin/pages/create_language_form' %>
29
- <% end %>
30
-
31
- <%= paginate @pages, scope: alchemy, theme: 'alchemy' %>
@@ -1,6 +0,0 @@
1
- Alchemy.growl('<%= @message[:body] %>', '<%= @message[:type] %>');
2
- $('#picture_<%= @picture.id %> .picture_name').text('<%= @picture.name %>');
3
- $('#picture_<%= @picture.id %> .picture_tags').html('<%== @picture.tag_list.map do |tag|
4
- "<span class=\"tag\">#{tag}</span>".html_safe
5
- end.join %>');
6
- $('#picture_name').blur();
@@ -1,32 +0,0 @@
1
- <tr class="<%= cycle('even', 'odd') %>">
2
- <td class="icon"><%= render_icon(:tag, size: "xl") %></td>
3
- <td class="name"><%= tag.name %></td>
4
- <td>
5
- <% tag.taggings.collect(&:taggable).compact.uniq(&:class).each do |taggable| %>
6
- <span class="label">
7
- <%= taggable.class.model_name.human %>
8
- </span>
9
- <% end %>
10
- </td>
11
- <td class="count"><%= tag.taggings.count %></td>
12
- <td class="tools">
13
- <% if can?(:destroy, Alchemy::Tag) %>
14
- <sl-tooltip content="<%= Alchemy.t(:delete_tag) %>">
15
- <%= delete_button admin_tag_path(tag), {
16
- message: Alchemy.t(:do_you_really_want_to_delete_this_tag?),
17
- icon: :minus
18
- } %>
19
- </sl-tooltip>
20
- <% end %>
21
- <% if can?(:edit, Alchemy::Tag) %>
22
- <sl-tooltip content="<%= Alchemy.t(:edit_tag) %>" placement="top-end">
23
- <%= link_to_dialog render_icon(:edit),
24
- edit_admin_tag_path(tag),
25
- {
26
- title: Alchemy.t(:edit_tag),
27
- size: '360x410'
28
- }, class: "icon_button" %>
29
- </sl-tooltip>
30
- <% end %>
31
- </td>
32
- </tr>
@@ -1,5 +0,0 @@
1
- Alchemy.closeCurrentDialog();
2
- <% unless flash[:notice].blank? -%>
3
- Alchemy.growl('<%= j flash[:notice] %>');
4
- <% end -%>
5
- Alchemy.reloadPreview();
@@ -1,11 +0,0 @@
1
- /*
2
- * This is the AlchemyCMS stylesheet manifest that'll be compiled into alchemy/admin/all.css
3
- *
4
- * In order to override existing styles or add custom styles to Alchemy's admin interface just
5
- * require the files here.
6
- *
7
- * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
8
- * or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path.
9
- *
10
- *= require alchemy/admin
11
- */
@@ -1,30 +0,0 @@
1
- article {
2
- width: 50%;
3
- font: 16px/20px Helvetica, Arial, sans-serif;
4
- color: #333;
5
- margin: 1em auto;
6
- padding: 0.5em 1em;
7
- background: #f4f4f4;
8
-
9
- h2 {
10
- font-size: 24px;
11
- line-height: 1.25;
12
- font-weight: bold;
13
- }
14
-
15
- a {
16
- color: #5588D3;
17
- }
18
-
19
- img {
20
- max-width: 100%;
21
- }
22
-
23
- figure {
24
- margin: 0;
25
- }
26
-
27
- figcaption {
28
- font-size: 14px;
29
- }
30
- }
data/package.json DELETED
@@ -1,52 +0,0 @@
1
- {
2
- "name": "alchemy_admin",
3
- "scripts": {
4
- "test": "jest",
5
- "lint": "prettier --check 'app/javascript/**/*.js'",
6
- "eslint": "eslint app/javascript/**/*.js",
7
- "build": "rollup -c"
8
- },
9
- "keywords": [],
10
- "author": "Thomas von Deyen",
11
- "license": "BSD-3-Clause",
12
- "dependencies": {
13
- "@rails/ujs": "^7.1.3",
14
- "@shoelace-style/shoelace": "^2.15.1",
15
- "@ungap/custom-elements": "^1.3.0",
16
- "clipboard": "^2.0.11",
17
- "flatpickr": "^4.6.13",
18
- "keymaster": "^1.6.2",
19
- "sortablejs": "^1.15.2",
20
- "tinymce": "^7.1.1"
21
- },
22
- "devDependencies": {
23
- "@babel/core": "^7.24.5",
24
- "@babel/preset-env": "^7.24.5",
25
- "@rollup/plugin-commonjs": "^25.0.7",
26
- "@rollup/plugin-node-resolve": "^15.2.3",
27
- "@rollup/plugin-terser": "^0.4.4",
28
- "babel-jest": "^29.6.4",
29
- "eslint": "^8.57.0",
30
- "jest": "^29.6.4",
31
- "jest-environment-jsdom": "^29.6.4",
32
- "jquery": "^3.7.1",
33
- "jsdom-testing-mocks": "^1.13.0",
34
- "prettier": "^3.2.5",
35
- "rollup": "^4.18.0",
36
- "xhr-mock": "^2.5.1"
37
- },
38
- "jest": {
39
- "globals": {
40
- "Alchemy": {}
41
- },
42
- "moduleNameMapper": {
43
- "alchemy_admin/(.*)": "<rootDir>/app/javascript/alchemy_admin/$1",
44
- "assets/(.*)": "<rootDir>/vendor/assets/javascripts/$1",
45
- "vendor/(.*)": "<rootDir>/vendor/javascript/$1"
46
- },
47
- "testEnvironment": "jsdom",
48
- "roots": [
49
- "spec/javascript/alchemy_admin"
50
- ]
51
- }
52
- }