pages_core 3.7.0 → 3.8.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -2
- data/Rakefile +37 -0
- data/app/assets/builds/pages_core/admin-dist.js +55 -0
- data/app/assets/stylesheets/pages/admin/components/image_editor.scss +1 -0
- data/app/assets/stylesheets/pages/admin/components/image_grid.scss +33 -5
- data/app/assets/stylesheets/pages/admin/components/layout.scss +2 -1
- data/app/assets/stylesheets/pages/admin/components/login.scss +6 -0
- data/app/assets/stylesheets/pages/admin/components/tabs.scss +5 -0
- data/app/assets/stylesheets/pages/admin/components/tag_editor.scss +13 -7
- data/app/assets/stylesheets/pages/admin/controllers/pages.scss +13 -5
- data/app/assets/stylesheets/pages/admin.scss +0 -1
- data/app/controller_dummies/admin/admin_controller.rb +1 -1
- data/app/controller_dummies/application_controller.rb +1 -1
- data/app/controller_dummies/attachments_controller.rb +1 -1
- data/app/controller_dummies/frontend_controller.rb +1 -1
- data/app/controller_dummies/images_controller.rb +1 -1
- data/app/controller_dummies/page_files_controller.rb +1 -1
- data/app/controller_dummies/pages_controller.rb +1 -1
- data/app/controller_dummies/sitemaps_controller.rb +1 -1
- data/app/controllers/admin/attachments_controller.rb +1 -1
- data/app/controllers/admin/images_controller.rb +11 -8
- data/app/controllers/concerns/pages_core/authentication.rb +9 -4
- data/app/controllers/concerns/pages_core/preview_pages_controller.rb +5 -0
- data/app/controllers/pages_core/frontend/pages_controller.rb +5 -2
- data/app/controllers/sessions_controller.rb +1 -1
- data/app/formatters/pages_core/link_renderer.rb +2 -2
- data/app/helpers/application_helper.rb +1 -1
- data/app/helpers/frontend_helper.rb +1 -1
- data/app/helpers/pages_core/admin/content_tabs_helper.rb +5 -2
- data/app/helpers/pages_core/admin/image_uploads_helper.rb +2 -3
- data/app/helpers/pages_core/admin/tag_editor_helper.rb +9 -39
- data/app/helpers/pages_core/head_tags_helper.rb +11 -20
- data/app/helpers/pages_core/open_graph_tags_helper.rb +1 -1
- data/app/javascript/admin-dist.js +2 -0
- data/app/javascript/components/Attachments/Attachment.jsx +121 -0
- data/app/javascript/components/Attachments/AttachmentEditor.jsx +116 -0
- data/app/javascript/components/Attachments/Placeholder.jsx +10 -0
- data/app/javascript/components/Attachments.jsx +165 -0
- data/app/{assets/javascripts/pages/admin/components/date_range_select.jsx → javascript/components/DateRangeSelect.jsx} +16 -5
- data/app/javascript/components/EditableImage.jsx +61 -0
- data/app/javascript/components/FileUploadButton.jsx +47 -0
- data/app/{assets/javascripts/pages/admin/components/focal_point.jsx → javascript/components/ImageCropper/FocalPoint.jsx} +12 -1
- data/app/javascript/components/ImageCropper/Image.jsx +65 -0
- data/app/javascript/components/ImageCropper/Toolbar.jsx +73 -0
- data/app/javascript/components/ImageCropper/useCrop.js +199 -0
- data/app/javascript/components/ImageCropper.jsx +90 -0
- data/app/javascript/components/ImageEditor/Form.jsx +98 -0
- data/app/javascript/components/ImageEditor.jsx +62 -0
- data/app/javascript/components/ImageGrid/DragElement.jsx +30 -0
- data/app/javascript/components/ImageGrid/FilePlaceholder.jsx +9 -0
- data/app/javascript/components/ImageGrid/GridImage.jsx +103 -0
- data/app/javascript/components/ImageGrid/Placeholder.jsx +23 -0
- data/app/javascript/components/ImageGrid.jsx +257 -0
- data/app/javascript/components/ImageUploader.jsx +171 -0
- data/app/{assets/javascripts/pages/admin/components/modal.jsx → javascript/components/Modal.jsx} +13 -2
- data/app/{assets/javascripts/pages/admin/components/page_dates.jsx → javascript/components/PageDates.jsx} +11 -1
- data/app/{assets/javascripts/pages/admin/components/page_files.jsx → javascript/components/PageFiles.jsx} +11 -2
- data/app/{assets/javascripts/pages/admin/components/page_images.jsx → javascript/components/PageImages.jsx} +11 -2
- data/app/{assets/javascripts/pages/admin/components/page_tree_store.jsx → javascript/components/PageTree.jsx} +127 -137
- data/app/{assets/javascripts/pages/admin/components/page_tree.jsx → javascript/components/PageTreeDraggable.jsx} +35 -29
- data/app/{assets/javascripts/pages/admin/components/page_tree_node.jsx → javascript/components/PageTreeNode.jsx} +35 -20
- data/app/javascript/components/RichTextArea.jsx +213 -0
- data/app/javascript/components/RichTextToolbarButton.jsx +20 -0
- data/app/javascript/components/TagEditor/AddTagForm.jsx +42 -0
- data/app/javascript/components/TagEditor/Tag.jsx +32 -0
- data/app/javascript/components/TagEditor.jsx +61 -0
- data/app/javascript/components/Toast.jsx +72 -0
- data/app/javascript/components/drag/draggedOrder.js +51 -0
- data/app/javascript/components/drag/useDragCollection.js +84 -0
- data/app/javascript/components/drag/useDragUploader.js +112 -0
- data/app/javascript/components/drag/useDraggable.js +17 -0
- data/app/javascript/components/drag.js +6 -0
- data/app/javascript/components.js +15 -0
- data/app/javascript/controllers/EditPageController.js +20 -0
- data/app/javascript/controllers/LoginController.js +29 -0
- data/app/javascript/controllers/MainController.js +65 -0
- data/app/javascript/controllers/PageOptionsController.js +62 -0
- data/app/javascript/features/RichText.jsx +34 -0
- data/app/javascript/hooks.js +2 -0
- data/app/javascript/index.js +38 -0
- data/app/{assets/javascripts/pages/admin/lib/tree.jsx → javascript/lib/Tree.js} +55 -54
- data/app/javascript/lib/copyToClipboard.js +13 -0
- data/app/javascript/lib/readyHandler.js +22 -0
- data/app/javascript/lib/request.js +36 -0
- data/app/javascript/stores/ModalStore.jsx +12 -0
- data/app/javascript/stores/ToastStore.jsx +14 -0
- data/app/javascript/stores.js +2 -0
- data/app/models/concerns/pages_core/page_model/images.rb +3 -1
- data/app/models/concerns/pages_core/page_model/searchable.rb +19 -0
- data/app/models/concerns/pages_core/searchable_document.rb +71 -0
- data/app/models/concerns/pages_core/taggable.rb +27 -12
- data/app/models/page.rb +2 -0
- data/app/models/page_exporter.rb +2 -2
- data/app/models/page_image.rb +0 -2
- data/app/models/role.rb +1 -1
- data/app/models/search_document.rb +72 -0
- data/app/models/tag.rb +1 -0
- data/app/models/user.rb +1 -1
- data/app/{serializers/admin/attachment_serializer.rb → resources/admin/attachment_resource.rb} +6 -5
- data/app/{serializers/admin/image_serializer.rb → resources/admin/image_resource.rb} +9 -9
- data/app/resources/admin/page_file_resource.rb +10 -0
- data/app/{serializers/admin/page_image_serializer.rb → resources/admin/page_image_resource.rb} +4 -2
- data/app/resources/export/attachment_resource.rb +10 -0
- data/app/resources/export/page_image_resource.rb +45 -0
- data/app/resources/export/page_resource.rb +42 -0
- data/app/{serializers/page_image_serializer.rb → resources/page_image_resource.rb} +8 -16
- data/app/resources/page_resource.rb +33 -0
- data/app/services/pages_core/destroy_invite_service.rb +2 -2
- data/app/services/pages_core/invite_service.rb +2 -2
- data/app/views/admin/pages/_edit_content.html.erb +1 -1
- data/app/views/admin/pages/_edit_files.html.erb +1 -5
- data/app/views/admin/pages/_edit_images.html.erb +1 -5
- data/app/views/admin/pages/_edit_options.html.erb +74 -55
- data/app/views/admin/pages/_form.html.erb +19 -0
- data/app/views/admin/pages/edit.html.erb +35 -61
- data/app/views/admin/pages/index.html.erb +0 -1
- data/app/views/admin/pages/new.html.erb +32 -32
- data/app/views/admin/users/_access_control.html.erb +5 -1
- data/app/views/admin/users/login.html.erb +12 -4
- data/app/views/feeds/pages.rss.builder +1 -2
- data/app/views/layouts/admin/_header.html.erb +1 -1
- data/app/views/layouts/admin/_page_header.html.erb +33 -0
- data/app/views/layouts/admin.html.erb +23 -42
- data/app/views/pages_core/_google_analytics.html.erb +8 -0
- data/db/migrate/20180625154059_enable_search_extensions.rb +10 -0
- data/db/migrate/20210209151400_create_search_configurations.rb +35 -0
- data/db/migrate/20210210235200_create_search_documents.rb +74 -0
- data/lib/pages_core/engine.rb +1 -5
- data/lib/pages_core/templates/block_configuration.rb +1 -1
- data/lib/pages_core/templates/configuration_handler.rb +1 -1
- data/lib/pages_core/version.rb +3 -1
- data/lib/pages_core.rb +3 -5
- data/lib/rails/generators/pages_core/frontend/frontend_generator.rb +0 -7
- data/lib/rails/generators/pages_core/install/templates/page_templates_initializer.rb +2 -2
- metadata +116 -115
- data/app/assets/javascripts/pages/admin/components/attachment.jsx +0 -130
- data/app/assets/javascripts/pages/admin/components/attachment_editor.jsx +0 -131
- data/app/assets/javascripts/pages/admin/components/attachments.jsx +0 -211
- data/app/assets/javascripts/pages/admin/components/drag_uploader.jsx +0 -174
- data/app/assets/javascripts/pages/admin/components/editable_image.jsx +0 -57
- data/app/assets/javascripts/pages/admin/components/file_upload_button.jsx +0 -44
- data/app/assets/javascripts/pages/admin/components/grid_image.jsx +0 -124
- data/app/assets/javascripts/pages/admin/components/image_editor.jsx +0 -496
- data/app/assets/javascripts/pages/admin/components/image_grid.jsx +0 -306
- data/app/assets/javascripts/pages/admin/components/image_uploader.jsx +0 -176
- data/app/assets/javascripts/pages/admin/components/modal_store.jsx +0 -20
- data/app/assets/javascripts/pages/admin/components/rich_text_area.jsx +0 -64
- data/app/assets/javascripts/pages/admin/components/rich_text_toolbar.jsx +0 -91
- data/app/assets/javascripts/pages/admin/components/toast.jsx +0 -34
- data/app/assets/javascripts/pages/admin/components/toast_store.jsx +0 -52
- data/app/assets/javascripts/pages/admin/components.jsx +0 -2
- data/app/assets/javascripts/pages/admin/features/content_tabs.jsx +0 -72
- data/app/assets/javascripts/pages/admin/features/edit_page.jsx +0 -97
- data/app/assets/javascripts/pages/admin/features/rich_text.jsx +0 -14
- data/app/assets/javascripts/pages/admin/features/tag_editor.jsx +0 -160
- data/app/assets/javascripts/pages/admin.jsx +0 -17
- data/app/assets/javascripts/pages/login_form.jsx +0 -21
- data/app/serializers/admin/page_file_serializer.rb +0 -8
- data/app/serializers/page_export_serializer.rb +0 -32
- data/app/serializers/page_file_export_serializer.rb +0 -6
- data/app/serializers/page_image_export_serializer.rb +0 -42
- data/app/serializers/page_serializer.rb +0 -23
- data/app/views/layouts/admin/_analytics.html.erb +0 -16
- data/lib/rails/generators/pages_core/frontend/templates/application.js.erb +0 -15
- data/vendor/assets/javascripts/ReactCrop.min.js +0 -1
- data/vendor/assets/javascripts/reflux.min.js +0 -1
@@ -135,10 +135,7 @@ $grid-image-padding: 7px;
|
|
135
135
|
}
|
136
136
|
|
137
137
|
.grid {
|
138
|
-
width:
|
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:
|
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;
|
@@ -12,13 +12,24 @@
|
|
12
12
|
display: block;
|
13
13
|
float: left;
|
14
14
|
margin: 0 5px 5px 0;
|
15
|
-
padding: 0px
|
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
|
-
|
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
|
-
|
142
|
+
display: none;
|
143
|
+
&.show {
|
144
|
+
display: block;
|
145
|
+
}
|
138
146
|
}
|
139
147
|
|
140
|
-
main
|
141
|
-
main
|
148
|
+
main input[type=text],
|
149
|
+
main textarea {
|
142
150
|
width: 100%;
|
143
151
|
max-width: 100%;
|
144
152
|
}
|
145
153
|
|
146
|
-
main
|
154
|
+
main input.page_title {
|
147
155
|
font-weight: bold;
|
148
156
|
font-size: 1.4em;
|
149
157
|
color: $c-text;
|
@@ -16,20 +16,14 @@ module Admin
|
|
16
16
|
@image = Image.create(image_params)
|
17
17
|
|
18
18
|
respond_to do |format|
|
19
|
-
format.json
|
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
|
|
29
23
|
def update
|
30
24
|
@image.update(image_params)
|
31
25
|
respond_to do |format|
|
32
|
-
format.json {
|
26
|
+
format.json { render_image_json(@image) }
|
33
27
|
end
|
34
28
|
end
|
35
29
|
|
@@ -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
|
-
|
23
|
-
|
22
|
+
reset_session
|
23
|
+
authenticated(user)
|
24
24
|
end
|
25
25
|
|
26
26
|
def deauthenticate!
|
27
27
|
@current_user = nil
|
28
|
-
|
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
|
-
|
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.
|
31
|
-
format.
|
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
|
|
@@ -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
|
@@ -20,8 +20,11 @@ module PagesCore
|
|
20
20
|
private
|
21
21
|
|
22
22
|
def content_tab_tag(key, content)
|
23
|
-
tag.div(content,
|
24
|
-
|
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::
|
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
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
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
|
-
|
52
|
-
|
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
|
-
|
92
|
-
|
93
|
-
|
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(
|
115
|
-
tag(
|
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(
|
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(
|
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(
|
125
|
+
tag.meta(name: "keywords", content: meta_keywords)
|
135
126
|
end
|
136
127
|
end
|
137
128
|
end
|