pages_core 3.7.0 → 3.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (164) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -2
  3. data/app/assets/builds/pages_core/admin-dist.js +55 -0
  4. data/app/assets/stylesheets/pages/admin/components/image_editor.scss +1 -0
  5. data/app/assets/stylesheets/pages/admin/components/image_grid.scss +33 -5
  6. data/app/assets/stylesheets/pages/admin/components/layout.scss +2 -1
  7. data/app/assets/stylesheets/pages/admin/components/login.scss +6 -0
  8. data/app/assets/stylesheets/pages/admin/components/tabs.scss +5 -0
  9. data/app/assets/stylesheets/pages/admin/components/tag_editor.scss +13 -7
  10. data/app/assets/stylesheets/pages/admin/controllers/pages.scss +13 -5
  11. data/app/assets/stylesheets/pages/admin.scss +0 -1
  12. data/app/controller_dummies/admin/admin_controller.rb +1 -1
  13. data/app/controller_dummies/application_controller.rb +1 -1
  14. data/app/controller_dummies/attachments_controller.rb +1 -1
  15. data/app/controller_dummies/frontend_controller.rb +1 -1
  16. data/app/controller_dummies/images_controller.rb +1 -1
  17. data/app/controller_dummies/page_files_controller.rb +1 -1
  18. data/app/controller_dummies/pages_controller.rb +1 -1
  19. data/app/controller_dummies/sitemaps_controller.rb +1 -1
  20. data/app/controllers/admin/attachments_controller.rb +1 -1
  21. data/app/controllers/admin/images_controller.rb +10 -7
  22. data/app/controllers/concerns/pages_core/authentication.rb +9 -4
  23. data/app/controllers/concerns/pages_core/preview_pages_controller.rb +5 -0
  24. data/app/controllers/pages_core/frontend/pages_controller.rb +5 -2
  25. data/app/controllers/sessions_controller.rb +1 -1
  26. data/app/formatters/pages_core/link_renderer.rb +2 -2
  27. data/app/helpers/application_helper.rb +1 -1
  28. data/app/helpers/frontend_helper.rb +1 -1
  29. data/app/helpers/pages_core/admin/content_tabs_helper.rb +5 -2
  30. data/app/helpers/pages_core/admin/image_uploads_helper.rb +2 -3
  31. data/app/helpers/pages_core/admin/tag_editor_helper.rb +9 -39
  32. data/app/helpers/pages_core/head_tags_helper.rb +11 -20
  33. data/app/helpers/pages_core/open_graph_tags_helper.rb +1 -1
  34. data/app/javascript/admin-dist.js +2 -0
  35. data/app/javascript/components/Attachments/Attachment.jsx +121 -0
  36. data/app/javascript/components/Attachments/AttachmentEditor.jsx +116 -0
  37. data/app/javascript/components/Attachments/Placeholder.jsx +10 -0
  38. data/app/javascript/components/Attachments.jsx +165 -0
  39. data/app/{assets/javascripts/pages/admin/components/date_range_select.jsx → javascript/components/DateRangeSelect.jsx} +16 -5
  40. data/app/javascript/components/EditableImage.jsx +61 -0
  41. data/app/{assets/javascripts/pages/admin/components/file_upload_button.jsx → javascript/components/FileUploadButton.jsx} +11 -1
  42. data/app/{assets/javascripts/pages/admin/components/focal_point.jsx → javascript/components/ImageCropper/FocalPoint.jsx} +12 -1
  43. data/app/javascript/components/ImageCropper/Image.jsx +65 -0
  44. data/app/javascript/components/ImageCropper/Toolbar.jsx +73 -0
  45. data/app/javascript/components/ImageCropper/useCrop.js +199 -0
  46. data/app/javascript/components/ImageCropper.jsx +90 -0
  47. data/app/javascript/components/ImageEditor/Form.jsx +98 -0
  48. data/app/javascript/components/ImageEditor.jsx +62 -0
  49. data/app/javascript/components/ImageGrid/DragElement.jsx +30 -0
  50. data/app/javascript/components/ImageGrid/FilePlaceholder.jsx +9 -0
  51. data/app/javascript/components/ImageGrid/GridImage.jsx +103 -0
  52. data/app/javascript/components/ImageGrid/Placeholder.jsx +23 -0
  53. data/app/javascript/components/ImageGrid.jsx +257 -0
  54. data/app/javascript/components/ImageUploader.jsx +171 -0
  55. data/app/{assets/javascripts/pages/admin/components/modal.jsx → javascript/components/Modal.jsx} +13 -2
  56. data/app/javascript/components/ModalStore.jsx +12 -0
  57. data/app/{assets/javascripts/pages/admin/components/page_dates.jsx → javascript/components/PageDates.jsx} +11 -1
  58. data/app/{assets/javascripts/pages/admin/components/page_files.jsx → javascript/components/PageFiles.jsx} +11 -2
  59. data/app/{assets/javascripts/pages/admin/components/page_images.jsx → javascript/components/PageImages.jsx} +11 -2
  60. data/app/{assets/javascripts/pages/admin/components/page_tree_store.jsx → javascript/components/PageTree.jsx} +127 -137
  61. data/app/{assets/javascripts/pages/admin/components/page_tree.jsx → javascript/components/PageTreeDraggable.jsx} +35 -29
  62. data/app/{assets/javascripts/pages/admin/components/page_tree_node.jsx → javascript/components/PageTreeNode.jsx} +35 -20
  63. data/app/javascript/components/RichTextArea.jsx +213 -0
  64. data/app/javascript/components/RichTextToolbarButton.jsx +20 -0
  65. data/app/javascript/components/TagEditor/AddTagForm.jsx +42 -0
  66. data/app/javascript/components/TagEditor/Tag.jsx +32 -0
  67. data/app/javascript/components/TagEditor.jsx +61 -0
  68. data/app/javascript/components/Toast.jsx +72 -0
  69. data/app/javascript/components/ToastStore.jsx +14 -0
  70. data/app/javascript/components/drag/draggedOrder.js +51 -0
  71. data/app/javascript/components/drag/useDragCollection.js +84 -0
  72. data/app/javascript/components/drag/useDragUploader.js +112 -0
  73. data/app/javascript/components/drag/useDraggable.js +17 -0
  74. data/app/javascript/components/drag.js +6 -0
  75. data/app/javascript/components.js +14 -0
  76. data/app/javascript/controllers/EditPageController.js +20 -0
  77. data/app/javascript/controllers/LoginController.js +29 -0
  78. data/app/javascript/controllers/MainController.js +65 -0
  79. data/app/javascript/controllers/PageOptionsController.js +62 -0
  80. data/app/javascript/features/RichText.jsx +34 -0
  81. data/app/javascript/hooks.js +2 -0
  82. data/app/javascript/index.js +33 -0
  83. data/app/{assets/javascripts/pages/admin/lib/tree.jsx → javascript/lib/Tree.js} +55 -54
  84. data/app/javascript/lib/copyToClipboard.js +13 -0
  85. data/app/javascript/lib/readyHandler.js +22 -0
  86. data/app/javascript/lib/request.js +36 -0
  87. data/app/models/concerns/pages_core/page_model/images.rb +3 -1
  88. data/app/models/concerns/pages_core/page_model/searchable.rb +19 -0
  89. data/app/models/concerns/pages_core/searchable_document.rb +71 -0
  90. data/app/models/concerns/pages_core/taggable.rb +27 -12
  91. data/app/models/page.rb +2 -0
  92. data/app/models/page_exporter.rb +2 -2
  93. data/app/models/page_image.rb +0 -2
  94. data/app/models/role.rb +1 -1
  95. data/app/models/search_document.rb +72 -0
  96. data/app/models/tag.rb +1 -0
  97. data/app/models/user.rb +1 -1
  98. data/app/{serializers/admin/attachment_serializer.rb → resources/admin/attachment_resource.rb} +6 -5
  99. data/app/{serializers/admin/image_serializer.rb → resources/admin/image_resource.rb} +9 -9
  100. data/app/resources/admin/page_file_resource.rb +10 -0
  101. data/app/{serializers/admin/page_image_serializer.rb → resources/admin/page_image_resource.rb} +4 -2
  102. data/app/resources/export/attachment_resource.rb +10 -0
  103. data/app/resources/export/page_image_resource.rb +45 -0
  104. data/app/resources/export/page_resource.rb +42 -0
  105. data/app/{serializers/page_image_serializer.rb → resources/page_image_resource.rb} +8 -16
  106. data/app/resources/page_resource.rb +33 -0
  107. data/app/services/pages_core/destroy_invite_service.rb +2 -2
  108. data/app/services/pages_core/invite_service.rb +2 -2
  109. data/app/views/admin/pages/_edit_content.html.erb +1 -1
  110. data/app/views/admin/pages/_edit_files.html.erb +1 -5
  111. data/app/views/admin/pages/_edit_images.html.erb +1 -5
  112. data/app/views/admin/pages/_edit_options.html.erb +74 -55
  113. data/app/views/admin/pages/_form.html.erb +19 -0
  114. data/app/views/admin/pages/edit.html.erb +35 -61
  115. data/app/views/admin/pages/index.html.erb +0 -1
  116. data/app/views/admin/pages/new.html.erb +32 -32
  117. data/app/views/admin/users/_access_control.html.erb +5 -1
  118. data/app/views/admin/users/login.html.erb +12 -4
  119. data/app/views/feeds/pages.rss.builder +1 -2
  120. data/app/views/layouts/admin/_header.html.erb +1 -1
  121. data/app/views/layouts/admin/_page_header.html.erb +33 -0
  122. data/app/views/layouts/admin.html.erb +23 -42
  123. data/app/views/pages_core/_google_analytics.html.erb +8 -0
  124. data/db/migrate/20180625154059_enable_search_extensions.rb +10 -0
  125. data/db/migrate/20210209151400_create_search_configurations.rb +35 -0
  126. data/db/migrate/20210210235200_create_search_documents.rb +74 -0
  127. data/lib/pages_core/engine.rb +1 -5
  128. data/lib/pages_core/templates/block_configuration.rb +1 -1
  129. data/lib/pages_core/templates/configuration_handler.rb +1 -1
  130. data/lib/pages_core/version.rb +1 -1
  131. data/lib/pages_core.rb +3 -5
  132. data/lib/rails/generators/pages_core/frontend/frontend_generator.rb +0 -7
  133. data/lib/rails/generators/pages_core/install/templates/page_templates_initializer.rb +2 -2
  134. metadata +101 -115
  135. data/app/assets/javascripts/pages/admin/components/attachment.jsx +0 -130
  136. data/app/assets/javascripts/pages/admin/components/attachment_editor.jsx +0 -131
  137. data/app/assets/javascripts/pages/admin/components/attachments.jsx +0 -211
  138. data/app/assets/javascripts/pages/admin/components/drag_uploader.jsx +0 -174
  139. data/app/assets/javascripts/pages/admin/components/editable_image.jsx +0 -57
  140. data/app/assets/javascripts/pages/admin/components/grid_image.jsx +0 -124
  141. data/app/assets/javascripts/pages/admin/components/image_editor.jsx +0 -496
  142. data/app/assets/javascripts/pages/admin/components/image_grid.jsx +0 -306
  143. data/app/assets/javascripts/pages/admin/components/image_uploader.jsx +0 -176
  144. data/app/assets/javascripts/pages/admin/components/modal_store.jsx +0 -20
  145. data/app/assets/javascripts/pages/admin/components/rich_text_area.jsx +0 -64
  146. data/app/assets/javascripts/pages/admin/components/rich_text_toolbar.jsx +0 -91
  147. data/app/assets/javascripts/pages/admin/components/toast.jsx +0 -34
  148. data/app/assets/javascripts/pages/admin/components/toast_store.jsx +0 -52
  149. data/app/assets/javascripts/pages/admin/components.jsx +0 -2
  150. data/app/assets/javascripts/pages/admin/features/content_tabs.jsx +0 -72
  151. data/app/assets/javascripts/pages/admin/features/edit_page.jsx +0 -97
  152. data/app/assets/javascripts/pages/admin/features/rich_text.jsx +0 -14
  153. data/app/assets/javascripts/pages/admin/features/tag_editor.jsx +0 -160
  154. data/app/assets/javascripts/pages/admin.jsx +0 -17
  155. data/app/assets/javascripts/pages/login_form.jsx +0 -21
  156. data/app/serializers/admin/page_file_serializer.rb +0 -8
  157. data/app/serializers/page_export_serializer.rb +0 -32
  158. data/app/serializers/page_file_export_serializer.rb +0 -6
  159. data/app/serializers/page_image_export_serializer.rb +0 -42
  160. data/app/serializers/page_serializer.rb +0 -23
  161. data/app/views/layouts/admin/_analytics.html.erb +0 -16
  162. data/lib/rails/generators/pages_core/frontend/templates/application.js.erb +0 -15
  163. data/vendor/assets/javascripts/ReactCrop.min.js +0 -1
  164. data/vendor/assets/javascripts/reflux.min.js +0 -1
@@ -14,6 +14,7 @@
14
14
  font-size: 14px;
15
15
  color: $c-warn-light;
16
16
  text-shadow: 0px 0px 5px rgba(0, 0, 0, 1.0);
17
+ z-index: 100;
17
18
  }
18
19
 
19
20
  img {
@@ -135,10 +135,7 @@ $grid-image-padding: 7px;
135
135
  }
136
136
 
137
137
  .grid {
138
- width: 66.67%;
139
- @include breakpoint-mobile {
140
- width: 100%;
141
- }
138
+ width: 100%;
142
139
  .images {
143
140
  position: relative;
144
141
  display: flex;
@@ -148,7 +145,7 @@ $grid-image-padding: 7px;
148
145
  display: flex;
149
146
  flex-direction: column;
150
147
  justify-content: flex-end;
151
- width: 25%;
148
+ width: 16.66%;
152
149
  @include breakpoint-max(1150px) {
153
150
  width: 50%;
154
151
  }
@@ -159,6 +156,19 @@ $grid-image-padding: 7px;
159
156
  }
160
157
  }
161
158
 
159
+ .editable-image {
160
+ padding-bottom: 75%;
161
+ img {
162
+ position: absolute;
163
+ top: 0px;
164
+ left: 0px;
165
+ width: 100%;
166
+ height: 100%;
167
+ object-fit: contain;
168
+ object-position: 50% 50%;
169
+ }
170
+ }
171
+
162
172
  .drop-target {
163
173
  margin: 10px $grid-image-padding;
164
174
  padding-top: 10px;
@@ -168,6 +178,24 @@ $grid-image-padding: 7px;
168
178
  }
169
179
  }
170
180
 
181
+ &.with-primary-image {
182
+ .grid {
183
+ width: 66.67%;
184
+ @include breakpoint-mobile {
185
+ width: 100%;
186
+ }
187
+ }
188
+ .images .grid-image {
189
+ width: 25%;
190
+ @include breakpoint-max(1150px) {
191
+ width: 50%;
192
+ }
193
+ @include breakpoint-mobile {
194
+ width: 50%;
195
+ }
196
+ }
197
+ }
198
+
171
199
  .drag-image {
172
200
  position: absolute;
173
201
  width: 150px;
@@ -17,7 +17,8 @@ html, body {
17
17
  display: flex;
18
18
  flex-flow: column nowrap;
19
19
  height: 100vh;
20
- > * {
20
+ > *,
21
+ .main-wrapper {
21
22
  flex-shrink: 0;
22
23
  }
23
24
  }
@@ -24,3 +24,9 @@ main .login-form {
24
24
  }
25
25
  }
26
26
  }
27
+
28
+ .login-tab {
29
+ &.hidden {
30
+ display: none;
31
+ }
32
+ }
@@ -0,0 +1,5 @@
1
+ .content-tab {
2
+ &.hidden {
3
+ display: none;
4
+ }
5
+ }
@@ -12,13 +12,24 @@
12
12
  display: block;
13
13
  float: left;
14
14
  margin: 0 5px 5px 0;
15
- padding: 0px 10px;
15
+ padding: 0px;
16
16
  background: $c-background-disabled;
17
17
  border-radius: 5px;
18
18
  line-height: 26px;
19
19
  line-height: 36px;
20
20
  min-width: 40px;
21
21
  transition: all 200ms ease-out;
22
+ -webkit-user-select: none;
23
+ -khtml-user-select: none;
24
+ -moz-user-select: none;
25
+ -ms-user-select: none;
26
+ user-select: none;
27
+
28
+ label {
29
+ margin: 0px;
30
+ padding: 0px 10px;
31
+ color: inherit;
32
+ }
22
33
 
23
34
  input {
24
35
  margin: 2px 3px 0 0;
@@ -30,10 +41,6 @@
30
41
  }
31
42
 
32
43
  &.enabled {
33
- //background: #396e97;
34
- //border-color: #274b67;
35
- //text-shadow: #274b67 1px 1px 1px;
36
-
37
44
  color: #fff;
38
45
  background: $c-link;
39
46
  background: $c-blue-dark;
@@ -49,8 +56,7 @@
49
56
  input.add-tag {
50
57
  margin-top: 0px;
51
58
  border-radius: 5px;
52
- //margin: 0 4px 0 0;
53
- //padding: 4px 3px 3px 3px;
59
+ margin: 0 4px 0 0;
54
60
 
55
61
  &.example {
56
62
  color: $c-text-light;
@@ -126,24 +126,32 @@
126
126
  }
127
127
 
128
128
  .edit-page {
129
- padding-top: 1px;
130
129
  width: auto;
131
130
 
131
+ main div.content {
132
+ padding-top: 16px;
133
+ }
134
+
132
135
  .hidden-options {
133
136
  display: none;
134
137
  }
135
138
 
139
+ .autopublish-notice,
140
+ .published-date,
136
141
  .advanced-options {
137
- visibility: none;
142
+ display: none;
143
+ &.show {
144
+ display: block;
145
+ }
138
146
  }
139
147
 
140
- main & input[type=text],
141
- main & textarea {
148
+ main input[type=text],
149
+ main textarea {
142
150
  width: 100%;
143
151
  max-width: 100%;
144
152
  }
145
153
 
146
- main & input.page_title {
154
+ main input.page_title {
147
155
  font-weight: bold;
148
156
  font-size: 1.4em;
149
157
  color: $c-text;
@@ -1,4 +1,3 @@
1
- @import 'jquery-ui';
2
1
  @import 'ReactCrop';
3
2
  @import 'font-awesome';
4
3
  @import 'admin/vars';
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Admin
4
- class AdminController < PagesCore::AdminController #:nodoc:
4
+ class AdminController < PagesCore::AdminController # :nodoc:
5
5
  end
6
6
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class ApplicationController < PagesCore::BaseController #:nodoc:
3
+ class ApplicationController < PagesCore::BaseController # :nodoc:
4
4
  helper :all
5
5
  protect_from_forgery with: :exception
6
6
  end
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class AttachmentsController < PagesCore::AttachmentsController #:nodoc:
3
+ class AttachmentsController < PagesCore::AttachmentsController # :nodoc:
4
4
  end
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class FrontendController < PagesCore::FrontendController #:nodoc:
3
+ class FrontendController < PagesCore::FrontendController # :nodoc:
4
4
  end
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class ImagesController < PagesCore::ImagesController #:nodoc:
3
+ class ImagesController < PagesCore::ImagesController # :nodoc:
4
4
  end
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class PageFilesController < PagesCore::Frontend::PageFilesController #:nodoc:
3
+ class PageFilesController < PagesCore::Frontend::PageFilesController # :nodoc:
4
4
  end
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class PagesController < PagesCore::Frontend::PagesController #:nodoc:
3
+ class PagesController < PagesCore::Frontend::PagesController # :nodoc:
4
4
  end
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class SitemapsController < PagesCore::SitemapsController #:nodoc:
3
+ class SitemapsController < PagesCore::SitemapsController # :nodoc:
4
4
  end
@@ -44,7 +44,7 @@ module Admin
44
44
  end
45
45
 
46
46
  def render_attachment(attachment)
47
- render json: attachment, serializer: Admin::AttachmentSerializer
47
+ render json: Admin::AttachmentResource.new(attachment)
48
48
  end
49
49
  end
50
50
  end
@@ -16,13 +16,7 @@ module Admin
16
16
  @image = Image.create(image_params)
17
17
 
18
18
  respond_to do |format|
19
- format.json do
20
- if @image.valid?
21
- render json: @image, serializer: Admin::ImageSerializer
22
- else
23
- render json: { status: "error", error: @image.errors.first }
24
- end
25
- end
19
+ format.json { render_image_json(@image) }
26
20
  end
27
21
  end
28
22
 
@@ -55,5 +49,14 @@ module Admin
55
49
  def find_image
56
50
  @image = Image.find(params[:id])
57
51
  end
52
+
53
+ def render_image_json(image)
54
+ if image.valid?
55
+ render json: Admin::ImageResource.new(image)
56
+ else
57
+ render json: { status: "error",
58
+ error: image.errors.first.full_message }
59
+ end
60
+ end
58
61
  end
59
62
  end
@@ -19,17 +19,22 @@ module PagesCore
19
19
  end
20
20
 
21
21
  def authenticate!(user)
22
- user.mark_active!
23
- @current_user = user
22
+ reset_session
23
+ authenticated(user)
24
24
  end
25
25
 
26
26
  def deauthenticate!
27
27
  @current_user = nil
28
- session[:current_user_id] = nil
28
+ reset_session
29
29
  end
30
30
 
31
31
  protected
32
32
 
33
+ def authenticated(user)
34
+ user.mark_active!
35
+ @current_user = user
36
+ end
37
+
33
38
  def start_authenticated_session
34
39
  if session[:current_user_id]
35
40
  user = User.where(id: session[:current_user_id]).first
@@ -37,7 +42,7 @@ module PagesCore
37
42
 
38
43
  return unless user&.can_login?
39
44
 
40
- authenticate!(user)
45
+ authenticated(user)
41
46
  end
42
47
 
43
48
  def finalize_authenticated_session
@@ -11,6 +11,7 @@ module PagesCore
11
11
  def preview
12
12
  redirect_to(page_url(@locale, @page)) && return unless logged_in?
13
13
 
14
+ @preview = true
14
15
  @page.attributes = page_params.merge(
15
16
  status: 2,
16
17
  published_at: Time.zone.now,
@@ -20,6 +21,10 @@ module PagesCore
20
21
  render_page
21
22
  end
22
23
 
24
+ def preview?
25
+ @preview || false
26
+ end
27
+
23
28
  private
24
29
 
25
30
  def disable_xss_protection
@@ -27,8 +27,11 @@ module PagesCore
27
27
  def show
28
28
  respond_to do |format|
29
29
  format.html { render_published_page(@page) }
30
- format.rss { render_rss(@page.pages.limit(20), title: @page.name) }
31
- format.json { render json: @page }
30
+ format.json { render json: PageResource.new(@page) }
31
+ format.rss do
32
+ render_rss(@page.pages.limit(20).includes(:image, :author),
33
+ title: @page.name)
34
+ end
32
35
  end
33
36
  end
34
37
 
@@ -9,7 +9,7 @@ class SessionsController < ::ApplicationController
9
9
  redirect_to admin_default_url
10
10
  else
11
11
  flash[:notice] = "The provided email address and password combination " \
12
- "was not valid"
12
+ "was not valid"
13
13
  redirect_to login_admin_users_url
14
14
  end
15
15
  end
@@ -4,13 +4,13 @@ module PagesCore
4
4
  class LinkRenderer < WillPaginate::ActionView::LinkRenderer
5
5
  def previous_page
6
6
  num = @collection.current_page > 1 &&
7
- @collection.current_page - 1
7
+ (@collection.current_page - 1)
8
8
  previous_or_next_page(num, "Previous", "previous")
9
9
  end
10
10
 
11
11
  def next_page
12
12
  num = @collection.current_page < total_pages &&
13
- @collection.current_page + 1
13
+ (@collection.current_page + 1)
14
14
  previous_or_next_page(num, "Next", "next")
15
15
  end
16
16
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module ApplicationHelper #:nodoc:
3
+ module ApplicationHelper # :nodoc:
4
4
  include PagesCore::ApplicationHelper
5
5
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module FrontendHelper #:nodoc:
3
+ module FrontendHelper # :nodoc:
4
4
  include PagesCore::FrontendHelper
5
5
  end
@@ -20,8 +20,11 @@ module PagesCore
20
20
  private
21
21
 
22
22
  def content_tab_tag(key, content)
23
- tag.div(content, class: "content_tab",
24
- id: "content-tab-#{key}")
23
+ tag.div(content,
24
+ class: "content-tab",
25
+ id: "content-tab-#{key}",
26
+ data: { tab: key,
27
+ "main-target" => "tab" })
25
28
  end
26
29
  end
27
30
  end
@@ -31,7 +31,7 @@ module PagesCore
31
31
  return {} unless image
32
32
 
33
33
  { src: dynamic_image_path(image, size: "#{width * 2}x"),
34
- image: ::Admin::ImageSerializer.new(image) }
34
+ image: ::Admin::ImageResource.new(image).to_hash }
35
35
  end
36
36
 
37
37
  def editable_image_options(image, width: 250, caption: false, locale: nil)
@@ -39,8 +39,7 @@ module PagesCore
39
39
  width: width,
40
40
  caption: caption,
41
41
  locale: locale || I18n.default_locale,
42
- locales: PagesCore.config.locales,
43
- csrf_token: form_authenticity_token
42
+ locales: PagesCore.config.locales
44
43
  )
45
44
  end
46
45
  end
@@ -3,45 +3,15 @@
3
3
  module PagesCore
4
4
  module Admin
5
5
  module TagEditorHelper
6
- def tag_editor_for(
7
- form_helper, item, field_name = :serialized_tags, options = {}
8
- )
9
- tags = options[:tags] || Tag.tags_and_suggestions_for(item, limit: 20)
10
- tagged = options[:tagged] || item.tags
11
- options[:placeholder] ||= "Add tag..."
12
- tag.div(class: "tag-editor clearfix") do
13
- form_helper.hidden_field(field_name, class: "serialized_tags") +
14
- tag_check_boxes(tags, tagged) +
15
- add_tag_button(options)
16
- end
17
- end
18
-
19
- private
20
-
21
- def tag_check_box(tag_instance, tagged)
22
- tag.span(class: :tag) do
23
- check_box_tag(
24
- "tag-#{tag_instance.id}",
25
- 1,
26
- tagged.include?(tag_instance)
27
- ) + tag.span(tag_instance.name, class: :name)
28
- end
29
- end
30
-
31
- def tag_check_boxes(tags, tagged)
32
- tag.div(class: :tags) do
33
- safe_join(tags.map { |t| tag_check_box(t, tagged) }, "")
34
- end
35
- end
36
-
37
- def add_tag_button(options = {})
38
- tag.div(class: "add-tag-form") do
39
- text_field_tag(
40
- "add_tag",
41
- options[:placeholder],
42
- class: "add-tag"
43
- ) + tag.button("Add", class: "add-tag-button")
44
- end
6
+ def tag_editor_for(form, object, attribute: :serialized_tags)
7
+ object ||= form.object
8
+ react_component(
9
+ "TagEditor",
10
+ { enabled: object.tags.map(&:name),
11
+ tags: Tag.tags_and_suggestions_for(object, limit: 20)
12
+ .map(&:name),
13
+ name: "#{form.object_name}[#{attribute}]" }
14
+ )
45
15
  end
46
16
  end
47
17
  end
@@ -48,14 +48,8 @@ module PagesCore
48
48
  # google_analytics_tags "UA-12345678-1"
49
49
  #
50
50
  def google_analytics_tags(account_id)
51
- javascript_tag(
52
- "(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||" \
53
- "function(){\n (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new " \
54
- "Date();a=s.createElement(o),\nm=s.getElementsByTagName(o)[0];" \
55
- "a.async=1;a.src=g;m.parentNode.insertBefore(a,m)\n})(window," \
56
- "document,'script','//www.google-analytics.com/analytics.js','ga');" \
57
- "\n\nga('create', '#{account_id}', 'auto');\nga('send', 'pageview');"
58
- )
51
+ render(partial: "pages_core/google_analytics",
52
+ locals: { account_id: account_id })
59
53
  end
60
54
 
61
55
  # Outputs a HTML5 doctype and head tags, with document title
@@ -87,13 +81,10 @@ module PagesCore
87
81
  # rss_link_tag "My feed", "feed.rss"
88
82
  #
89
83
  def rss_link_tag(title, href)
90
- tag(
91
- :link,
92
- rel: "alternate",
93
- type: "application/rss+xml",
94
- title: title,
95
- href: href
96
- )
84
+ tag.link(rel: "alternate",
85
+ type: "application/rss+xml",
86
+ title: title,
87
+ href: href)
97
88
  end
98
89
 
99
90
  # Outputs Typekit tags.
@@ -111,11 +102,11 @@ module PagesCore
111
102
 
112
103
  def head_tag_contents(block_output)
113
104
  [
114
- tag(:meta, charset: "utf-8"),
115
- tag(:meta, "http-equiv" => "X-UA-Compatible", "content" => "IE=edge"),
105
+ tag.meta(charset: "utf-8"),
106
+ tag.meta("http-equiv" => "X-UA-Compatible", "content" => "IE=edge"),
116
107
  tag.title(document_title),
117
108
  meta_description_tag, meta_keywords_tag,
118
- (tag(:link, rel: "image_src", href: meta_image) if meta_image?),
109
+ (tag.link(rel: "image_src", href: meta_image) if meta_image?),
119
110
  open_graph_tags,
120
111
  csrf_meta_tags,
121
112
  block_output
@@ -125,13 +116,13 @@ module PagesCore
125
116
  def meta_description_tag
126
117
  return unless meta_description?
127
118
 
128
- tag(:meta, name: "description", content: meta_description)
119
+ tag.meta(name: "description", content: meta_description)
129
120
  end
130
121
 
131
122
  def meta_keywords_tag
132
123
  return unless meta_keywords?
133
124
 
134
- tag(:meta, name: "keywords", content: meta_keywords)
125
+ tag.meta(name: "keywords", content: meta_keywords)
135
126
  end
136
127
  end
137
128
  end
@@ -13,7 +13,7 @@ module PagesCore
13
13
  properties
14
14
  .delete_if { |_, content| content.nil? }
15
15
  .map do |name, content|
16
- tag(:meta, property: "og:#{name}", content: content)
16
+ tag.meta(property: "og:#{name}", content: content)
17
17
  end,
18
18
  "\n"
19
19
  )
@@ -0,0 +1,2 @@
1
+ import startPages from "./index.js";
2
+ startPages();