pages_core 3.12.3 → 3.12.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/app/assets/builds/pages_core/admin-dist.js +1 -44
- data/app/assets/builds/pages_core/admin-dist.js.map +3 -3
- data/app/assets/builds/pages_core/admin.css +79 -46
- data/app/assets/stylesheets/pages_core/admin/components/attachments.css +3 -4
- data/app/assets/stylesheets/pages_core/admin/components/forms.css +17 -16
- data/app/assets/stylesheets/pages_core/admin/components/image_editor.css +8 -4
- data/app/assets/stylesheets/pages_core/admin/components/image_grid.css +1 -1
- data/app/assets/stylesheets/pages_core/admin/components/list_table.css +11 -3
- data/app/assets/stylesheets/pages_core/admin/components/modal.css +9 -5
- data/app/assets/stylesheets/pages_core/admin/components/page_tree.css +5 -1
- data/app/assets/stylesheets/pages_core/admin/components/toast.css +2 -2
- data/app/assets/stylesheets/pages_core/admin/controllers/pages.css +4 -2
- data/app/assets/stylesheets/pages_core/admin/vars.css +2 -1
- data/app/controllers/admin/calendars_controller.rb +2 -2
- data/app/controllers/admin/categories_controller.rb +3 -3
- data/app/controllers/admin/news_controller.rb +6 -6
- data/app/controllers/admin/pages_controller.rb +12 -11
- data/app/controllers/admin/users_controller.rb +1 -1
- data/app/controllers/concerns/pages_core/preview_pages_controller.rb +15 -17
- data/app/controllers/pages_core/admin_controller.rb +2 -2
- data/app/controllers/pages_core/base_controller.rb +1 -8
- data/app/controllers/pages_core/frontend/pages_controller.rb +13 -5
- data/app/controllers/pages_core/frontend_controller.rb +12 -7
- data/app/helpers/admin/menu_helper.rb +2 -0
- data/app/helpers/admin/pages_helper.rb +1 -4
- data/app/helpers/pages_core/admin/admin_helper.rb +0 -1
- data/app/helpers/pages_core/admin/content_tabs_helper.rb +9 -2
- data/app/helpers/pages_core/application_helper.rb +2 -3
- data/app/helpers/pages_core/frontend_helper.rb +1 -1
- data/app/helpers/pages_core/head_tags_helper.rb +15 -46
- data/app/helpers/pages_core/images_helper.rb +76 -21
- data/app/helpers/pages_core/locales_helper.rb +9 -0
- data/app/helpers/pages_core/open_graph_tags_helper.rb +3 -5
- data/app/helpers/pages_core/page_path_helper.rb +1 -1
- data/app/javascript/components/Attachments/Attachment.tsx +55 -52
- data/app/javascript/components/Attachments/AttachmentEditor.tsx +45 -50
- data/app/javascript/components/Attachments/Placeholder.tsx +1 -2
- data/app/javascript/components/Attachments.jsx +69 -57
- data/app/javascript/components/DateRangeSelect.jsx +94 -54
- data/app/javascript/components/EditableImage.tsx +20 -16
- data/app/javascript/components/FileUploadButton.tsx +12 -12
- data/app/javascript/components/ImageCropper/FocalPoint.tsx +22 -20
- data/app/javascript/components/ImageCropper/Image.tsx +20 -16
- data/app/javascript/components/ImageCropper/Toolbar.tsx +35 -27
- data/app/javascript/components/ImageCropper/useCrop.ts +105 -91
- data/app/javascript/components/ImageCropper.tsx +34 -25
- data/app/javascript/components/ImageEditor/Form.tsx +32 -43
- data/app/javascript/components/ImageEditor.tsx +29 -21
- data/app/javascript/components/ImageGrid/DragElement.tsx +6 -4
- data/app/javascript/components/ImageGrid/GridImage.tsx +56 -52
- data/app/javascript/components/ImageGrid/Placeholder.tsx +1 -1
- data/app/javascript/components/ImageGrid.jsx +132 -101
- data/app/javascript/components/ImageUploader.tsx +59 -55
- data/app/javascript/components/Modal.tsx +2 -4
- data/app/javascript/components/PageDates.jsx +25 -20
- data/app/javascript/components/PageFiles.jsx +7 -5
- data/app/javascript/components/PageImages.tsx +9 -7
- data/app/javascript/components/PageTree/Draggable.tsx +46 -40
- data/app/javascript/components/PageTree/Node.tsx +111 -95
- data/app/javascript/components/PageTree/types.ts +9 -9
- data/app/javascript/components/PageTree.tsx +44 -29
- data/app/javascript/components/RichTextArea.jsx +51 -37
- data/app/javascript/components/RichTextToolbarButton.tsx +8 -5
- data/app/javascript/components/TagEditor/AddTagForm.tsx +11 -10
- data/app/javascript/components/TagEditor/Tag.tsx +10 -8
- data/app/javascript/components/TagEditor.tsx +15 -10
- data/app/javascript/components/Toast.tsx +3 -7
- data/app/javascript/components/drag/draggedOrder.ts +17 -16
- data/app/javascript/components/drag/types.ts +12 -12
- data/app/javascript/components/drag/useDragCollection.ts +36 -42
- data/app/javascript/components/drag/useDragUploader.ts +3 -2
- data/app/javascript/components/drag.ts +5 -4
- data/app/javascript/controllers/LoginController.ts +0 -1
- data/app/javascript/controllers/MainController.ts +6 -2
- data/app/javascript/controllers/PageOptionsController.js +7 -2
- data/app/javascript/features/RichText.tsx +9 -7
- data/app/javascript/index.ts +5 -3
- data/app/javascript/lib/Tree.ts +27 -24
- data/app/javascript/lib/copyToClipboard.ts +5 -4
- data/app/javascript/lib/readyHandler.ts +4 -4
- data/app/javascript/lib/request.ts +7 -3
- data/app/javascript/stores/useModalStore.ts +3 -3
- data/app/javascript/stores/useToastStore.ts +14 -12
- data/app/javascript/types.ts +22 -22
- data/app/models/concerns/pages_core/page_model/templateable.rb +1 -1
- data/app/views/admin/calendars/show.html.erb +1 -1
- data/app/views/admin/news/index.html.erb +1 -1
- data/app/views/admin/pages/_edit_files.html.erb +1 -1
- data/app/views/admin/pages/_edit_images.html.erb +1 -1
- data/app/views/admin/pages/_list_item.html.erb +1 -1
- data/app/views/admin/pages/_search_bar.html.erb +1 -1
- data/app/views/admin/pages/deleted.html.erb +2 -2
- data/app/views/admin/pages/edit.html.erb +3 -3
- data/app/views/admin/pages/index.html.erb +4 -4
- data/app/views/admin/pages/new.html.erb +1 -1
- data/app/views/admin/pages/search.html.erb +3 -3
- data/app/views/feeds/pages.rss.builder +2 -2
- data/app/views/layouts/admin/_page_header.html.erb +4 -4
- data/app/views/layouts/admin.html.erb +1 -2
- data/config/locales/en.yml +1 -0
- data/lib/pages_core/pages_plugin.rb +5 -3
- data/lib/rails/generators/pages_core/frontend/templates/application.html.erb +15 -13
- data/lib/tasks/pages/reports.rake +26 -0
- metadata +32 -4
- data/app/helpers/pages_core/admin/deprecated_admin_helper.rb +0 -40
- data/app/views/pages_core/_google_analytics.html.erb +0 -8
@@ -9,9 +9,9 @@ module Admin
|
|
9
9
|
require_authorization object: Page
|
10
10
|
|
11
11
|
def index
|
12
|
-
@archive_finder = archive_finder(@news_pages,
|
12
|
+
@archive_finder = archive_finder(@news_pages, content_locale)
|
13
13
|
unless @year
|
14
|
-
redirect_to(admin_news_index_path(
|
14
|
+
redirect_to(admin_news_index_path(content_locale,
|
15
15
|
(@archive_finder.latest_year ||
|
16
16
|
Time.zone.now.year)))
|
17
17
|
return
|
@@ -32,11 +32,11 @@ module Admin
|
|
32
32
|
|
33
33
|
def find_news_pages
|
34
34
|
@news_pages = Page.news_pages
|
35
|
-
.in_locale(
|
36
|
-
.
|
35
|
+
.in_locale(content_locale)
|
36
|
+
.sort { |a, b| b.children.count <=> a.children.count }
|
37
37
|
return if @news_pages.any?
|
38
38
|
|
39
|
-
redirect_to(admin_pages_url(
|
39
|
+
redirect_to(admin_pages_url(content_locale))
|
40
40
|
end
|
41
41
|
|
42
42
|
def find_year_and_month
|
@@ -48,7 +48,7 @@ module Admin
|
|
48
48
|
def require_news_pages
|
49
49
|
return if Page.news_pages.any?
|
50
50
|
|
51
|
-
redirect_to(admin_pages_url(
|
51
|
+
redirect_to(admin_pages_url(content_locale))
|
52
52
|
end
|
53
53
|
|
54
54
|
def latest_year
|
@@ -10,11 +10,11 @@ module Admin
|
|
10
10
|
require_authorization
|
11
11
|
|
12
12
|
def index
|
13
|
-
@pages = Page.admin_list(
|
13
|
+
@pages = Page.admin_list(content_locale)
|
14
14
|
end
|
15
15
|
|
16
16
|
def deleted
|
17
|
-
@pages = Page.deleted.by_updated_at.in_locale(
|
17
|
+
@pages = Page.deleted.by_updated_at.in_locale(content_locale)
|
18
18
|
end
|
19
19
|
|
20
20
|
def search
|
@@ -22,27 +22,28 @@ module Admin
|
|
22
22
|
|
23
23
|
@search_documents =
|
24
24
|
SearchDocument.where(searchable_type: "Page")
|
25
|
-
.search(search_query, locale:
|
25
|
+
.search(search_query, locale: content_locale)
|
26
26
|
.paginate(per_page: 50, page: params[:page])
|
27
27
|
end
|
28
28
|
|
29
29
|
def show
|
30
|
-
redirect_to edit_admin_page_url(
|
30
|
+
redirect_to edit_admin_page_url(content_locale, @page)
|
31
31
|
end
|
32
32
|
|
33
33
|
def new
|
34
34
|
build_params = params[:page] ? page_params : nil
|
35
|
-
@page = build_page(
|
35
|
+
@page = build_page(content_locale, build_params)
|
36
36
|
@page.parent = Page.find_by(id: params[:parent])
|
37
37
|
end
|
38
38
|
|
39
39
|
def edit; end
|
40
40
|
|
41
41
|
def create
|
42
|
-
@page = build_page(
|
42
|
+
@page = build_page(content_locale, page_params,
|
43
|
+
param_categories).tap(&:save)
|
43
44
|
if @page.valid?
|
44
45
|
respond_with_page(@page) do
|
45
|
-
redirect_to(edit_admin_page_url(
|
46
|
+
redirect_to(edit_admin_page_url(content_locale, @page))
|
46
47
|
end
|
47
48
|
else
|
48
49
|
render action: :new
|
@@ -54,7 +55,7 @@ module Admin
|
|
54
55
|
@page.categories = param_categories
|
55
56
|
respond_with_page(@page) do
|
56
57
|
flash[:notice] = t("pages_core.changes_saved")
|
57
|
-
redirect_to edit_admin_page_url(
|
58
|
+
redirect_to edit_admin_page_url(content_locale, @page)
|
58
59
|
end
|
59
60
|
else
|
60
61
|
render action: :edit
|
@@ -64,12 +65,12 @@ module Admin
|
|
64
65
|
def move
|
65
66
|
parent = params[:parent_id] ? Page.find(params[:parent_id]) : nil
|
66
67
|
@page.update(parent: parent, position: params[:position])
|
67
|
-
respond_with_page(@page) { redirect_to admin_pages_url(
|
68
|
+
respond_with_page(@page) { redirect_to admin_pages_url(content_locale) }
|
68
69
|
end
|
69
70
|
|
70
71
|
def destroy
|
71
72
|
Page.find(params[:id]).flag_as_deleted!
|
72
|
-
redirect_to admin_pages_url(
|
73
|
+
redirect_to admin_pages_url(content_locale)
|
73
74
|
end
|
74
75
|
|
75
76
|
private
|
@@ -110,7 +111,7 @@ module Admin
|
|
110
111
|
end
|
111
112
|
|
112
113
|
def find_page
|
113
|
-
@page = Page.find(params[:id]).localize(
|
114
|
+
@page = Page.find(params[:id]).localize(content_locale)
|
114
115
|
end
|
115
116
|
|
116
117
|
def find_categories
|
@@ -48,7 +48,7 @@ module Admin
|
|
48
48
|
flash[:notice] = "Your changed to #{@user.name} were saved."
|
49
49
|
redirect_to admin_users_url
|
50
50
|
else
|
51
|
-
flash.now[:error] = "
|
51
|
+
flash.now[:error] = t("pages_core.problems_saving")
|
52
52
|
render action: :edit
|
53
53
|
end
|
54
54
|
end
|
@@ -4,23 +4,6 @@ module PagesCore
|
|
4
4
|
module PreviewPagesController
|
5
5
|
extend ActiveSupport::Concern
|
6
6
|
|
7
|
-
included do
|
8
|
-
before_action :disable_xss_protection, only: [:preview]
|
9
|
-
end
|
10
|
-
|
11
|
-
def preview
|
12
|
-
redirect_to(page_url(@locale, @page)) && return unless logged_in?
|
13
|
-
|
14
|
-
@preview = true
|
15
|
-
@page.attributes = page_params.merge(
|
16
|
-
status: 2,
|
17
|
-
published_at: Time.zone.now,
|
18
|
-
locale: @locale,
|
19
|
-
redirect_to: nil
|
20
|
-
)
|
21
|
-
render_page
|
22
|
-
end
|
23
|
-
|
24
7
|
def preview?
|
25
8
|
@preview || false
|
26
9
|
end
|
@@ -45,5 +28,20 @@ module PagesCore
|
|
45
28
|
Page.localized_attributes + permitted_page_attributes
|
46
29
|
)
|
47
30
|
end
|
31
|
+
|
32
|
+
def preview_page(page)
|
33
|
+
redirect_to(page_url(content_locale, page)) && return unless logged_in?
|
34
|
+
|
35
|
+
disable_xss_protection
|
36
|
+
|
37
|
+
@preview = true
|
38
|
+
page.attributes = page_params.merge(
|
39
|
+
status: 2,
|
40
|
+
published_at: Time.zone.now,
|
41
|
+
locale: content_locale,
|
42
|
+
redirect_to: nil
|
43
|
+
)
|
44
|
+
render_page
|
45
|
+
end
|
48
46
|
end
|
49
47
|
end
|
@@ -24,9 +24,9 @@ module PagesCore
|
|
24
24
|
|
25
25
|
def redirect
|
26
26
|
if Page.news_pages.any?
|
27
|
-
redirect_to news_admin_pages_url(
|
27
|
+
redirect_to news_admin_pages_url(content_locale)
|
28
28
|
else
|
29
|
-
redirect_to admin_pages_url(
|
29
|
+
redirect_to admin_pages_url(content_locale)
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
@@ -5,11 +5,11 @@ module PagesCore
|
|
5
5
|
include PagesCore::Authentication
|
6
6
|
include PagesCore::ErrorRenderer
|
7
7
|
include PagesCore::ErrorReporting
|
8
|
+
include PagesCore::LocalesHelper
|
8
9
|
include PagesCore::ProcessTitler
|
9
10
|
include PagesCore::PoliciesHelper
|
10
11
|
include PagesCore::StaticCacheController
|
11
12
|
|
12
|
-
before_action :set_locale
|
13
13
|
after_action :set_content_language_header
|
14
14
|
|
15
15
|
protected
|
@@ -20,13 +20,6 @@ module PagesCore
|
|
20
20
|
payload.merge!(current_user_context)
|
21
21
|
end
|
22
22
|
|
23
|
-
# Sets @locale from params[:locale], with I18n.default_locale as fallback
|
24
|
-
def set_locale
|
25
|
-
legacy_locales = { "nor" => "nb", "eng" => "en" }
|
26
|
-
@locale = params[:locale] || I18n.default_locale.to_s
|
27
|
-
@locale = legacy_locales[@locale] if legacy_locales[@locale]
|
28
|
-
end
|
29
|
-
|
30
23
|
def set_content_language_header
|
31
24
|
return unless locale
|
32
25
|
|
@@ -27,6 +27,10 @@ module PagesCore
|
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
|
+
def preview
|
31
|
+
preview_page(@page)
|
32
|
+
end
|
33
|
+
|
30
34
|
def show
|
31
35
|
respond_to do |format|
|
32
36
|
format.html { render_published_page(@page) }
|
@@ -64,10 +68,6 @@ module PagesCore
|
|
64
68
|
super
|
65
69
|
end
|
66
70
|
|
67
|
-
def page_param
|
68
|
-
params[:page].is_a?(String) ? params[:page] : 1
|
69
|
-
end
|
70
|
-
|
71
71
|
def page_template(page)
|
72
72
|
if PagesCore::Templates.names.include?(page.template)
|
73
73
|
page.template
|
@@ -98,7 +98,7 @@ module PagesCore
|
|
98
98
|
|
99
99
|
def find_page
|
100
100
|
@page ||= Page.find_by(id: params[:id]) || unique_page(params[:id])
|
101
|
-
@page.locale =
|
101
|
+
@page.locale = content_locale if @page
|
102
102
|
end
|
103
103
|
|
104
104
|
def render_published_page(page)
|
@@ -110,6 +110,14 @@ module PagesCore
|
|
110
110
|
end
|
111
111
|
end
|
112
112
|
|
113
|
+
def redirect_to_parent_or_root(page)
|
114
|
+
if page.parent
|
115
|
+
redirect_to page_url(locale, page.parent)
|
116
|
+
else
|
117
|
+
redirect_to root_url
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
113
121
|
def redirect_page(page)
|
114
122
|
return false unless page.redirects?
|
115
123
|
|
@@ -6,6 +6,7 @@ module PagesCore
|
|
6
6
|
include ApplicationHelper
|
7
7
|
|
8
8
|
before_action :set_i18n_locale
|
9
|
+
helper_method :page_param
|
9
10
|
|
10
11
|
# Loads @root_pages and @rss_feeds. To automatically load these in your
|
11
12
|
# own controllers, add the following line to your controller definition:
|
@@ -13,21 +14,25 @@ module PagesCore
|
|
13
14
|
# before_action :load_root_pages
|
14
15
|
#
|
15
16
|
def load_root_pages
|
16
|
-
@root_pages = Page.roots.localized(
|
17
|
-
@rss_feeds = Page.where(feed_enabled: true)
|
17
|
+
@root_pages = Page.roots.localized(content_locale).published
|
18
|
+
@rss_feeds = Page.where(feed_enabled: true)
|
19
|
+
.localized(content_locale)
|
20
|
+
.published
|
18
21
|
end
|
19
22
|
|
20
23
|
private
|
21
24
|
|
22
25
|
def legacy_locales
|
23
|
-
{
|
24
|
-
"
|
25
|
-
|
26
|
-
|
26
|
+
{ "nor" => "nb",
|
27
|
+
"eng" => "en" }
|
28
|
+
end
|
29
|
+
|
30
|
+
def page_param
|
31
|
+
params[:page].is_a?(String) ? params[:page] : 1
|
27
32
|
end
|
28
33
|
|
29
34
|
def set_i18n_locale
|
30
|
-
locale_param =
|
35
|
+
locale_param = content_locale
|
31
36
|
if legacy_locales[locale_param]
|
32
37
|
locale_param = legacy_locales[locale_param]
|
33
38
|
end
|
@@ -4,7 +4,6 @@ module PagesCore
|
|
4
4
|
module Admin
|
5
5
|
module AdminHelper
|
6
6
|
include PagesCore::Admin::ContentTabsHelper
|
7
|
-
include PagesCore::Admin::DeprecatedAdminHelper
|
8
7
|
include PagesCore::Admin::DateRangeHelper
|
9
8
|
include PagesCore::Admin::ImageUploadsHelper
|
10
9
|
include PagesCore::Admin::LocalesHelper
|
@@ -3,8 +3,15 @@
|
|
3
3
|
module PagesCore
|
4
4
|
module Admin
|
5
5
|
module ContentTabsHelper
|
6
|
-
def
|
6
|
+
def content_tabs
|
7
7
|
@content_tabs ||= []
|
8
|
+
end
|
9
|
+
|
10
|
+
def content_tabs?
|
11
|
+
content_tabs.any?
|
12
|
+
end
|
13
|
+
|
14
|
+
def content_tab(name, options = {}, &block)
|
8
15
|
return unless block_given?
|
9
16
|
|
10
17
|
tab = {
|
@@ -13,7 +20,7 @@ module PagesCore
|
|
13
20
|
options: options,
|
14
21
|
content: capture(&block)
|
15
22
|
}
|
16
|
-
|
23
|
+
content_tabs.push(tab)
|
17
24
|
content_tab_tag(tab[:key], tab[:content])
|
18
25
|
end
|
19
26
|
|
@@ -22,13 +22,12 @@ module PagesCore
|
|
22
22
|
end
|
23
23
|
|
24
24
|
def unique_page(page_name, &block)
|
25
|
-
locale = @locale || I18n.default_locale.to_s
|
26
25
|
page = Page.where(unique_name: page_name).first
|
27
26
|
if page && block_given?
|
28
|
-
output = capture(page.localize(
|
27
|
+
output = capture(page.localize(content_locale), &block)
|
29
28
|
concat(output)
|
30
29
|
end
|
31
|
-
page&.localize(
|
30
|
+
page&.localize(content_locale)
|
32
31
|
end
|
33
32
|
|
34
33
|
private
|
@@ -10,13 +10,10 @@ module PagesCore
|
|
10
10
|
if args.any?
|
11
11
|
@document_title = args.first
|
12
12
|
else
|
13
|
-
safe_join(
|
14
|
-
|
15
|
-
" - "
|
16
|
-
)
|
13
|
+
safe_join([@document_title, PagesCore.config(:site_name)].compact.uniq,
|
14
|
+
" - ")
|
17
15
|
end
|
18
16
|
end
|
19
|
-
alias page_title document_title
|
20
17
|
|
21
18
|
# Returns true if document title has been set.
|
22
19
|
def document_title?
|
@@ -30,28 +27,19 @@ module PagesCore
|
|
30
27
|
# feed_tags include_hidden: true
|
31
28
|
#
|
32
29
|
def feed_tags(options = {})
|
33
|
-
feeds = Page.enabled_feeds(
|
30
|
+
feeds = Page.enabled_feeds(content_locale, options)
|
34
31
|
return unless feeds.any?
|
35
32
|
|
36
33
|
feed_tags = [
|
37
34
|
rss_link_tag(PagesCore.config(:site_name),
|
38
|
-
pages_url(
|
35
|
+
pages_url(content_locale, format: :rss))
|
39
36
|
] + feeds.map do |page|
|
40
37
|
rss_link_tag("#{PagesCore.config(:site_name)}: #{page.name}",
|
41
|
-
page_url(
|
38
|
+
page_url(content_locale, page, format: :rss))
|
42
39
|
end
|
43
40
|
safe_join(feed_tags, "\n")
|
44
41
|
end
|
45
42
|
|
46
|
-
# Outputs Google Analytics tracking code.
|
47
|
-
#
|
48
|
-
# google_analytics_tags "UA-12345678-1"
|
49
|
-
#
|
50
|
-
def google_analytics_tags(account_id)
|
51
|
-
render(partial: "pages_core/google_analytics",
|
52
|
-
locals: { account_id: account_id })
|
53
|
-
end
|
54
|
-
|
55
43
|
# Outputs a HTML5 doctype and head tags, with document title
|
56
44
|
# and relevant meta tags. Takes a block which will be placed
|
57
45
|
# inside <head>.
|
@@ -66,14 +54,7 @@ module PagesCore
|
|
66
54
|
# The block output must be captured first
|
67
55
|
block_output = block_given? ? capture(&block) : nil
|
68
56
|
|
69
|
-
safe_join(
|
70
|
-
[
|
71
|
-
"<!doctype html>\n<html lang=\"#{I18n.locale}\">".html_safe,
|
72
|
-
tag.head do
|
73
|
-
safe_join(head_tag_contents(block_output), "\n")
|
74
|
-
end
|
75
|
-
]
|
76
|
-
)
|
57
|
+
tag.head { safe_join(head_tag_contents(block_output), "\n") }
|
77
58
|
end
|
78
59
|
|
79
60
|
# Generates a link to an RSS feed.
|
@@ -87,30 +68,18 @@ module PagesCore
|
|
87
68
|
href: href)
|
88
69
|
end
|
89
70
|
|
90
|
-
# Outputs Typekit tags.
|
91
|
-
#
|
92
|
-
# typekit_tags "aadgrag"
|
93
|
-
#
|
94
|
-
def typekit_tags(kit_id)
|
95
|
-
safe_join([
|
96
|
-
javascript_include_tag("http://use.typekit.com/#{kit_id}.js"),
|
97
|
-
javascript_tag("try{Typekit.load();}catch(e){}")
|
98
|
-
], "\n")
|
99
|
-
end
|
100
|
-
|
101
71
|
private
|
102
72
|
|
103
73
|
def head_tag_contents(block_output)
|
104
|
-
[
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
]
|
74
|
+
[tag.meta(charset: "utf-8"),
|
75
|
+
tag.meta("http-equiv" => "X-UA-Compatible", "content" => "IE=edge"),
|
76
|
+
tag.title(document_title),
|
77
|
+
meta_description_tag,
|
78
|
+
meta_keywords_tag,
|
79
|
+
(tag.link(rel: "image_src", href: meta_image) if meta_image?),
|
80
|
+
open_graph_tags,
|
81
|
+
csrf_meta_tags,
|
82
|
+
block_output]
|
114
83
|
end
|
115
84
|
|
116
85
|
def meta_description_tag
|
@@ -5,10 +5,8 @@ module PagesCore
|
|
5
5
|
include DynamicImage::Helper
|
6
6
|
|
7
7
|
def dynamic_image_tag(record_or_array, options = {})
|
8
|
-
super(
|
9
|
-
|
10
|
-
extract_alt_text(record_or_array).merge(options)
|
11
|
-
)
|
8
|
+
super(record_or_array,
|
9
|
+
extract_alt_text(record_or_array).merge(options))
|
12
10
|
end
|
13
11
|
|
14
12
|
def image_caption(image, caption: nil)
|
@@ -32,25 +30,51 @@ module PagesCore
|
|
32
30
|
def image_figure(image, opts = {})
|
33
31
|
class_name = ["image", image_class_name(image), opts[:class_name]].compact
|
34
32
|
image_tag = image_figure_image_tag(image,
|
35
|
-
size: opts[:size],
|
36
|
-
opts[:ratio])
|
33
|
+
size: opts[:size],
|
34
|
+
ratio: opts[:ratio])
|
37
35
|
content = opts[:link] ? image_link_to(image_tag, opts[:link]) : image_tag
|
38
36
|
tag.figure(content + image_caption(image, caption: opts[:caption]),
|
39
37
|
class: class_name)
|
40
38
|
end
|
41
39
|
|
40
|
+
# Renders an image figure tag with caption.
|
41
|
+
#
|
42
|
+
# ==== Options
|
43
|
+
# * <tt>:caption</tt>: Override caption with a string, or set to false to
|
44
|
+
# disable captions.
|
45
|
+
# * <tt>:class_name</tt>: Class name to add to figure tag.
|
46
|
+
# * <tt>:link</tt>: Link target for image.
|
47
|
+
# * <tt>:ratio</tt>: Ratio to constrain image by.
|
48
|
+
# * <tt>:sizes</tt>: Sizes attribute for image tag, default: "100vw".
|
49
|
+
def picture(image, opts = {})
|
50
|
+
class_name = ["image", image_class_name(image), opts[:class_name]].compact
|
51
|
+
pict = picture_tag(image, ratio: opts[:ratio], sizes: opts[:sizes])
|
52
|
+
content = opts[:link] ? image_link_to(pict, opts[:link]) : pict
|
53
|
+
tag.figure(content + image_caption(image, caption: opts[:caption]),
|
54
|
+
class: class_name)
|
55
|
+
end
|
56
|
+
|
57
|
+
def picture_tag(image, ratio: nil, sizes: "100vw")
|
58
|
+
tag.picture do
|
59
|
+
safe_join(
|
60
|
+
[webp_source(image, ratio: ratio, sizes: sizes || "100vw"),
|
61
|
+
dynamic_image_tag(image,
|
62
|
+
size: image_size(1050, ratio),
|
63
|
+
crop: (ratio ? true : false),
|
64
|
+
sizes: sizes,
|
65
|
+
srcset: srcset(image, ratio: ratio))]
|
66
|
+
)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
42
70
|
def original_dynamic_image_tag(record_or_array, options = {})
|
43
|
-
super(
|
44
|
-
|
45
|
-
extract_alt_text(record_or_array).merge(options)
|
46
|
-
)
|
71
|
+
super(record_or_array,
|
72
|
+
extract_alt_text(record_or_array).merge(options))
|
47
73
|
end
|
48
74
|
|
49
75
|
def uncropped_dynamic_image_tag(record_or_array, options = {})
|
50
|
-
super(
|
51
|
-
|
52
|
-
extract_alt_text(record_or_array).merge(options)
|
53
|
-
)
|
76
|
+
super(record_or_array,
|
77
|
+
extract_alt_text(record_or_array).merge(options))
|
54
78
|
end
|
55
79
|
|
56
80
|
private
|
@@ -72,13 +96,10 @@ module PagesCore
|
|
72
96
|
end
|
73
97
|
|
74
98
|
def image_class_name(image)
|
75
|
-
if image.size.x == image.size.y
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
else
|
80
|
-
"portrait"
|
81
|
-
end
|
99
|
+
return "square" if image.size.x == image.size.y
|
100
|
+
return "landscape" if image.size.x > image.size.y
|
101
|
+
|
102
|
+
"portrait"
|
82
103
|
end
|
83
104
|
|
84
105
|
def image_figure_image_tag(image, size: nil, ratio: nil)
|
@@ -91,5 +112,39 @@ module PagesCore
|
|
91
112
|
def image_link_to(content, href)
|
92
113
|
tag.a(content, href: href)
|
93
114
|
end
|
115
|
+
|
116
|
+
def image_size(width, ratio)
|
117
|
+
return "#{width}x" unless ratio
|
118
|
+
|
119
|
+
"#{width}x#{(width / ratio).round}"
|
120
|
+
end
|
121
|
+
|
122
|
+
def image_widths(image)
|
123
|
+
[233, 350, 700, 1050, 1400, 2100, 2800].select do |w|
|
124
|
+
image.size.x >= w
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
def srcset(image, ratio: nil, format: nil)
|
129
|
+
image_widths(image).map do |width|
|
130
|
+
options = { size: image_size(width, ratio),
|
131
|
+
crop: (ratio ? true : false) }
|
132
|
+
options[:format] = format if format
|
133
|
+
|
134
|
+
"#{dynamic_image_path(image, options)} #{width}w"
|
135
|
+
end.join(", ")
|
136
|
+
end
|
137
|
+
|
138
|
+
def webp_source(image, ratio: nil, sizes: "100vw")
|
139
|
+
return unless webp_compatible?(image)
|
140
|
+
|
141
|
+
tag.source(type: "image/webp",
|
142
|
+
srcset: srcset(image, ratio: ratio, format: :webp),
|
143
|
+
sizes: sizes)
|
144
|
+
end
|
145
|
+
|
146
|
+
def webp_compatible?(image)
|
147
|
+
image.content_type != "image/gif"
|
148
|
+
end
|
94
149
|
end
|
95
150
|
end
|
@@ -11,7 +11,7 @@ module PagesCore
|
|
11
11
|
properties = default_open_graph_properties.merge(open_graph_properties)
|
12
12
|
safe_join(
|
13
13
|
properties
|
14
|
-
.
|
14
|
+
.compact
|
15
15
|
.map do |name, content|
|
16
16
|
tag.meta(property: "og:#{name}", content: content)
|
17
17
|
end,
|
@@ -38,14 +38,12 @@ module PagesCore
|
|
38
38
|
end
|
39
39
|
|
40
40
|
def default_open_graph_properties
|
41
|
-
{
|
42
|
-
type: "website",
|
41
|
+
{ type: "website",
|
43
42
|
site_name: PagesCore.config(:site_name),
|
44
43
|
title: default_open_graph_title,
|
45
44
|
image: (meta_image if meta_image?),
|
46
45
|
description: default_open_graph_description,
|
47
|
-
url: request.url
|
48
|
-
}
|
46
|
+
url: request.url }
|
49
47
|
end
|
50
48
|
end
|
51
49
|
end
|