spina-conferences-primer_theme-fork 0.9.1 → 1.0.0.rc2

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 (91) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +16 -4
  3. data/Rakefile +6 -0
  4. data/app/assets/builds/spina/conferences/primer_theme/application.css +25964 -0
  5. data/app/assets/config/spina_conferences_primer_theme_manifest.js +7 -4
  6. data/app/assets/javascripts/spina/conferences/primer_theme/application.js +6 -7
  7. data/app/assets/javascripts/spina/conferences/primer_theme/controllers/application.js +10 -0
  8. data/app/assets/javascripts/spina/conferences/primer_theme/controllers/index.js +5 -0
  9. data/app/assets/javascripts/spina/conferences/primer_theme/controllers/{slideshow_controller.es6 → slideshow_controller.js} +4 -3
  10. data/app/assets/stylesheets/spina/conferences/primer_theme/application.sass +1 -1
  11. data/app/controllers/spina/conferences/primer_theme/blog/application_controller.rb +2 -0
  12. data/app/controllers/spina/conferences/primer_theme/blog/categories_controller.rb +0 -2
  13. data/app/controllers/spina/conferences/primer_theme/blog/posts_controller.rb +5 -7
  14. data/app/controllers/spina/conferences/primer_theme/conferences/application_controller.rb +17 -0
  15. data/app/controllers/spina/conferences/primer_theme/conferences/conferences_controller.rb +14 -13
  16. data/app/controllers/spina/conferences/primer_theme/conferences/presentations_controller.rb +2 -1
  17. data/app/controllers/spina/conferences/primer_theme/journal/application_controller.rb +16 -0
  18. data/app/controllers/spina/conferences/primer_theme/journal/articles_controller.rb +15 -7
  19. data/app/controllers/spina/conferences/primer_theme/journal/authors_controller.rb +48 -0
  20. data/app/controllers/spina/conferences/primer_theme/journal/issues_controller.rb +12 -5
  21. data/app/helpers/spina/conferences/primer_theme/application_helper.rb +33 -14
  22. data/app/helpers/spina/conferences/primer_theme/asset_helper.rb +10 -2
  23. data/app/helpers/spina/conferences/primer_theme/navigations_helper.rb +11 -1
  24. data/app/models/spina/parts/conferences/primer_theme/checkbox.rb +6 -2
  25. data/app/models/spina/parts/conferences/primer_theme.rb +9 -3
  26. data/app/views/conferences_primer_theme/pages/about.html.haml +14 -14
  27. data/app/views/conferences_primer_theme/pages/committee.html.haml +13 -12
  28. data/app/views/conferences_primer_theme/pages/embedded_form.html.haml +2 -2
  29. data/app/views/conferences_primer_theme/pages/events.html.haml +3 -3
  30. data/app/views/conferences_primer_theme/pages/homepage.html.haml +2 -2
  31. data/app/views/conferences_primer_theme/pages/information.html.haml +2 -2
  32. data/app/views/conferences_primer_theme/pages/journal_information.html.haml +10 -0
  33. data/app/views/conferences_primer_theme/pages/periodical.html.haml +10 -10
  34. data/app/views/conferences_primer_theme/pages/show.html.haml +1 -1
  35. data/app/views/conferences_primer_theme/partials/_event.html.haml +2 -2
  36. data/app/views/conferences_primer_theme/partials/_homepage_item.html.haml +2 -2
  37. data/app/views/layouts/conferences_primer_theme/application.html.haml +1 -1
  38. data/app/views/layouts/spina/conferences/primer_theme/application.html.haml +7 -14
  39. data/app/views/layouts/spina/conferences/primer_theme/journal/articles.html.haml +3 -0
  40. data/app/views/layouts/spina/conferences/primer_theme/journal/authors.html.haml +5 -0
  41. data/app/views/layouts/spina/conferences/primer_theme/journal/issues.html.haml +3 -0
  42. data/app/views/spina/application/_admin_bar.html.haml +7 -0
  43. data/app/views/spina/application/_alert.html.haml +4 -0
  44. data/app/views/spina/application/_analytics.html.erb +10 -0
  45. data/app/views/spina/application/{_footer_content.html.haml → _cookies_footer.html.haml} +1 -1
  46. data/app/views/spina/application/_footer.html.haml +20 -12
  47. data/app/views/spina/application/_google_site_verification.html.haml +1 -0
  48. data/app/views/spina/application/_journal_navigation.html.haml +17 -0
  49. data/app/views/spina/application/_mobile_navigation_items.html.haml +0 -3
  50. data/app/views/spina/application/_navigation.html.haml +0 -3
  51. data/app/views/spina/application/_text.html.haml +1 -1
  52. data/app/views/spina/conferences/primer_theme/blog/categories/show.html.haml +3 -3
  53. data/app/views/spina/conferences/primer_theme/blog/posts/_post.html.haml +4 -3
  54. data/app/views/spina/conferences/primer_theme/blog/posts/index.html.haml +3 -3
  55. data/app/views/spina/conferences/primer_theme/blog/posts/show.html.haml +8 -8
  56. data/app/views/spina/conferences/primer_theme/blog/shared/_sidebar.html.haml +1 -1
  57. data/app/views/spina/conferences/primer_theme/conferences/conferences/_conference.html.haml +2 -2
  58. data/app/views/spina/conferences/primer_theme/conferences/conferences/_event.html.haml +6 -6
  59. data/app/views/spina/conferences/primer_theme/conferences/conferences/_events.html.haml +1 -1
  60. data/app/views/spina/conferences/primer_theme/conferences/conferences/_header.html.haml +4 -4
  61. data/app/views/spina/conferences/primer_theme/conferences/conferences/_presentation.html.haml +4 -4
  62. data/app/views/spina/conferences/primer_theme/conferences/conferences/_presentations.html.haml +4 -4
  63. data/app/views/spina/conferences/primer_theme/conferences/conferences/_submission_flash.html.haml +3 -3
  64. data/app/views/spina/conferences/primer_theme/conferences/conferences/index.html.haml +3 -3
  65. data/app/views/spina/conferences/primer_theme/conferences/conferences/show.html.haml +5 -5
  66. data/app/views/spina/conferences/primer_theme/conferences/presentations/_abstract.html.haml +1 -1
  67. data/app/views/spina/conferences/primer_theme/conferences/presentations/_attachments.html.haml +1 -1
  68. data/app/views/spina/conferences/primer_theme/conferences/presentations/show.html.haml +3 -3
  69. data/app/views/spina/conferences/primer_theme/journal/articles/_authorship.html.haml +8 -6
  70. data/app/views/spina/conferences/primer_theme/journal/articles/_metadata.html.haml +7 -7
  71. data/app/views/spina/conferences/primer_theme/journal/articles/show.html.haml +24 -26
  72. data/app/views/spina/conferences/primer_theme/journal/authors/_author.html.haml +9 -0
  73. data/app/views/spina/conferences/primer_theme/journal/authors/index.html.haml +10 -0
  74. data/app/views/spina/conferences/primer_theme/journal/authors/show.html.haml +20 -0
  75. data/app/views/spina/conferences/primer_theme/journal/issues/_article.html.haml +6 -6
  76. data/app/views/spina/conferences/primer_theme/journal/issues/_issue.html.haml +10 -9
  77. data/app/views/spina/conferences/primer_theme/journal/issues/index.html.haml +27 -23
  78. data/app/views/spina/conferences/primer_theme/journal/issues/show.html.haml +31 -21
  79. data/config/initializers/importmap.rb +21 -0
  80. data/config/initializers/mime_types.rb +3 -1
  81. data/config/initializers/primer.rb +1 -1
  82. data/config/initializers/themes/conferences_primer_theme.rb +14 -2
  83. data/config/locales/en.yml +23 -33
  84. data/config/routes.rb +7 -3
  85. data/db/migrate/20210206170704_change_current_conference_alert_to_text.rb +1 -1
  86. data/lib/spina/conferences/primer_theme/breadcrumbs/builder.rb +4 -17
  87. data/lib/spina/conferences/primer_theme/engine.rb +7 -3
  88. data/lib/spina/conferences/primer_theme/version.rb +1 -1
  89. data/lib/spina/conferences/primer_theme.rb +10 -3
  90. metadata +62 -33
  91. data/app/views/spina/application/_current_conference_alert.html.haml +0 -4
@@ -1,12 +1,12 @@
1
- = render Primer::FlexComponent.new(direction: [:column_reverse, nil, :row, nil]) do
2
- = render Primer::FlexItemComponent.new(flex_auto: true, mb: [4, nil, 0, nil]) do
1
+ = render Primer::BoxComponent.new(display: :flex, direction: [:column_reverse, nil, :row, nil]) do
2
+ = render Primer::BoxComponent.new(flex: :auto, mb: [4, nil, 0, nil]) do
3
3
  %filter-input{ aria: { owns: 'conference_list' } }
4
4
  - if @conferences.any?
5
5
  .subnav.subnav-flush
6
6
  .subnav-search.float-left.ml-0
7
7
  = search_field_tag 'search', nil, class: %w[form-control subnav-search-input], aria: { label: t(:'.search') }
8
8
  = render Primer::OcticonComponent.new('search', classes: 'subnav-search-icon')
9
- = render Primer::FlexItemComponent.new(mb: [4, nil, 0, nil]) do
9
+ = render Primer::BoxComponent.new(mb: [4, nil, 0, nil]) do
10
10
  = render Primer::ButtonComponent.new(tag: :a, href: frontend_conferences_url(protocol: :webcal, format: :ics), button_type: :primary,
11
11
  ml: [0, nil, 6, nil]) do
12
12
  = render Primer::OcticonComponent.new('calendar')
@@ -4,15 +4,15 @@
4
4
  - content_for(:header) { render 'header' }
5
5
 
6
6
  = turbo_frame_tag 'conference_tabs' do
7
- = render Primer::UnderlineNavComponent.new(label: t(:'.conference_navigation')) do |component|
7
+ = render Primer::Alpha::UnderlineNav.new(tag: :div, label: t(:'.conference_navigation')) do |component|
8
8
  - component.tab(href: frontend_conference_path(@conference, tab: 'information', presentation_type: @presentation_type&.id),
9
- aria: { selected: (@tab == 'information').to_s }, classes: 'UnderlineNav-item', role: 'tab') do
9
+ selected: (@tab == 'information'), id: 'information') do
10
10
  = t(:'.tabs.information')
11
11
  - component.tab(href: frontend_conference_path(@conference, tab: 'presentations', presentation_type: @presentation_type&.id),
12
- aria: { selected: (@tab == 'presentations').to_s }, classes: 'UnderlineNav-item', role: 'tab') do
12
+ selected: (@tab == 'presentations'), id: 'presentations') do
13
13
  = t(:'.tabs.presentations')
14
14
  - component.tab(href: frontend_conference_path(@conference, tab: 'events', presentation_type: @presentation_type&.id),
15
- aria: { selected: (@tab == 'events').to_s }, classes: 'UnderlineNav-item', role: 'tab') do
15
+ selected: (@tab == 'events'), id: 'events') do
16
16
  = t(:'.tabs.events')
17
17
  - component.actions do
18
18
  = render Primer::ButtonComponent.new(tag: :a, href: frontend_conference_url(@conference, protocol: :webcal, format: :ics),
@@ -23,7 +23,7 @@
23
23
  - when 'information'
24
24
  - cache [@conference, @tab] do
25
25
  - if @conference.content(:text).present?
26
- = render(Primer::MarkdownComponent.new(my: 4)) { @conference.content.html(:text) }
26
+ = render(Primer::Markdown.new(my: 4)) { @conference.content.html(:text).to_s }
27
27
  - else
28
28
  = render Primer::BlankslateComponent.new(title: t(:'.no_information'), icon: 'info', my: 4)
29
29
  - when 'presentations'
@@ -1,2 +1,2 @@
1
- = render(Primer::MarkdownComponent.new(my: 4)) do
1
+ = render(Primer::Markdown.new(my: 4)) do
2
2
  = abstract
@@ -1,5 +1,5 @@
1
1
  - cache [attachments, attachments.collect(&:attachment)] do
2
2
  - if attachments.any?
3
- = render Primer::ButtonGroupComponent.new(mt: 1) do |component|
3
+ = render Primer::ButtonGroup.new(mt: 1) do |component|
4
4
  = render partial: 'attachment', collection: attachments, cached: -> attachment { [attachment, attachment.attachment] },
5
5
  locals: { component: component }
@@ -1,17 +1,17 @@
1
1
  - cache [@presentation, @presentation.presenters, @presentation.attachments.collect(&:attachment)] do
2
2
  - cache [@presentation, @presentation.presenters] do
3
- = render(Primer::HeadingComponent.new(mb: [1, nil, 2, nil])) { @presentation.title }
3
+ = render(Primer::HeadingComponent.new(tag: :h1, mb: [1, nil, 2, nil])) { @presentation.title }
4
4
  %ul.text-secondary-dark.list-style-none.d-flex.flex-column.flex-sm-row.flex-wrap
5
5
  %li.mr-sm-3.mb-1
6
6
  = render Primer::OcticonComponent.new(@presentation.presenters.many? ? 'people' : 'person')
7
- = render Primer::TextComponent.new(tag: :address, display: :inline) do
7
+ = render Primer::Beta::Text.new(tag: :address, display: :inline) do
8
8
  = @presentation.presenters.collect(&:full_name_and_institution).to_sentence
9
9
  %li.mr-sm-3.mb-1
10
10
  = render Primer::OcticonComponent.new('clock')
11
11
  = time_tag @presentation.start_datetime, format: :short
12
12
  %li.mb-1
13
13
  = render Primer::OcticonComponent.new('location')
14
- = render Primer::TextComponent.new(tag: :address, display: :inline) do
14
+ = render Primer::Beta::Text.new(tag: :address, display: :inline) do
15
15
  = t :'.room_and_institution', room: @presentation.session.room_name, institution: @presentation.room.institution.name
16
16
 
17
17
  = render partial: 'attachments', object: @presentation.attachments
@@ -1,6 +1,8 @@
1
- = render(Primer::FlexComponent.new(tag: :li, mr: 4, align_items: :center)) do
2
- = render(Primer::FlexItemComponent.new(mr: 2)) do
3
- = render(Primer::OcticonComponent.new('person'))
4
- = render(Primer::FlexComponent.new(tag: :address, direction: :column)) do
5
- = render(Primer::TextComponent.new(tag: :div, font_weight: :bold)) { authorship.affiliation.name }
6
- = render(Primer::TextComponent.new(tag: :div, color: :text_secondary)) { authorship.affiliation.institution.name }
1
+ %li
2
+ = link_to frontend_author_path(authorship.affiliation.author) do
3
+ = render(Primer::BoxComponent.new(display: :flex, tag: :li, mr: 4, align_items: :center)) do
4
+ = render(Primer::BoxComponent.new(mr: 2)) do
5
+ = render(Primer::OcticonComponent.new('person'))
6
+ = render(Primer::BoxComponent.new(display: :flex, tag: :address, direction: :column)) do
7
+ = render(Primer::Beta::Text.new(tag: :div, font_weight: :bold)) { authorship.affiliation.name }
8
+ = render(Primer::Beta::Text.new(tag: :div, color: :muted)) { authorship.affiliation.institution.name }
@@ -2,13 +2,13 @@
2
2
  %link{ rel: 'schema.DC', href: 'http://purl.org/dc/elements/1.1/' }
3
3
  - @article.authorships.sorted_within_article.each do |authorship|
4
4
  %meta{ name: 'DC.Creator.PersonalName', content: authorship.affiliation.name }
5
- %meta{ name: 'DC.Date.created', scheme: 'ISO8601', content: @issue.date.to_s(:iso8601) }
6
- %meta{ name: 'DC.Date.issued', scheme: 'ISO8601', content: @issue.date.to_s(:iso8601) }
7
- %meta{ name: 'DC.Date.modified', scheme: 'ISO8601', content: @issue.date.to_s(:iso8601) }
5
+ %meta{ name: 'DC.Date.created', scheme: 'ISO8601', content: @issue.date.to_formatted_s(:iso8601) }
6
+ %meta{ name: 'DC.Date.issued', scheme: 'ISO8601', content: @issue.date.to_formatted_s(:iso8601) }
7
+ %meta{ name: 'DC.Date.modified', scheme: 'ISO8601', content: @issue.date.to_formatted_s(:iso8601) }
8
8
  - if @article.has_content? :attachment
9
9
  %meta{ name: 'DC.Format', scheme: 'IMT', content: 'application/pdf' }
10
10
  %meta{ name: 'DC.Identifier', content: @article.id }
11
- %meta{ name: 'DC.Identifier.URI', content: frontend_issue_article_url(@issue.id, @article.id) }
11
+ %meta{ name: 'DC.Identifier.URI', content: frontend_volume_issue_article_url(@volume.number, @issue.number, @article.number) }
12
12
  - if @article.has_content? :page_range
13
13
  %meta{ name: 'DC.Identifier.pageNumber', content: "#{@article.content(:page_range).first_page}-#{@article.content(:page_range).last_page}" }
14
14
  %meta{ name: 'DC.Language', scheme: 'ISO639-1', content: 'en' }
@@ -31,11 +31,11 @@
31
31
  %meta{ name: 'citation_author', content: authorship.affiliation.name }
32
32
  %meta{ name: 'citation_author_institution', content: authorship.affiliation.institution.name }
33
33
  %meta{ name: 'citation_language', content: 'en' }
34
- %meta{ name: 'citation_date', content: @issue.date.to_s(:iso8601).gsub('-', '/') }
34
+ %meta{ name: 'citation_date', content: @issue.date.to_formatted_s(:iso8601).gsub('-', '/') }
35
35
  %meta{ name: 'citation_volume', content: @issue.volume.number }
36
36
  %meta{ name: 'citation_issue', content: @issue.number }
37
37
  - if @article.has_content? :page_range
38
38
  %meta{ name: 'citation_firstpage', content: @article.content(:page_range).first_page }
39
39
  %meta{ name: 'citation_lastpage', content: @article.content(:page_range).last_page }
40
- %meta{ name: 'citation_abstract_html_url', content: frontend_issue_article_url(@issue.id, @article.id) }
41
- %meta{ name: 'citation_pdf_url', content: frontend_issue_article_url(@issue.id, @article.id) + '.pdf' }
40
+ %meta{ name: 'citation_abstract_html_url', content: frontend_volume_issue_article_url(@volume.number, @issue.number, @article.number) }
41
+ %meta{ name: 'citation_pdf_url', content: frontend_volume_issue_article_url(@volume.number, @issue.number, @article.number) + '.pdf' }
@@ -1,56 +1,54 @@
1
1
  - cache [@article, @article.authorships, @article.affiliations, @article.content(:abstract), @article.issue, @article.issue.volume, @article.issue.content(:cover_img)] do
2
2
  = render partial: 'metadata'
3
3
 
4
- = render(Primer::HeadingComponent.new) { @article.title }
4
+ = render(Primer::HeadingComponent.new(tag: :h1)) { @article.title }
5
5
 
6
- = render(Primer::FlexComponent.new(direction: [:column, nil, :row, nil])) do
7
- = render(Primer::FlexItemComponent.new(flex_auto: true, mr: [nil, nil, 4, nil])) do
6
+ = render(Primer::BoxComponent.new(display: :flex, direction: [:column, nil, nil, :row])) do
7
+ = render(Primer::BoxComponent.new(flex: :auto, mr: [nil, nil, nil, 4], col: [nil, nil, nil, 8])) do
8
8
  %ul.list-style-none.d-flex.flex-column.flex-sm-row.my-2
9
- - @article.affiliations.each do |affiliation|
10
- = render(Primer::FlexComponent.new(tag: :li, mr: 4, align_items: :center)) do
11
- = render(Primer::FlexItemComponent.new(mr: 2)) do
12
- = render(Primer::OcticonComponent.new('person'))
13
- = render(Primer::FlexComponent.new(tag: :address, direction: :column)) do
14
- = render(Primer::TextComponent.new(tag: :div, font_weight: :bold)) { affiliation.name }
15
- = render(Primer::TextComponent.new(tag: :div, color: :text_secondary)) { affiliation.institution.name }
9
+ = render partial: 'authorship', collection: @article.authorships.sorted_within_article
16
10
 
17
11
  - if @article.has_content?(:abstract)
18
12
  = render(Primer::HeadingComponent.new(tag: :h2, mt: 4, font_size: 3)) { t '.abstract' }
19
- = render(Primer::MarkdownComponent.new) { @article.content.html(:abstract) }
13
+ = render(Primer::Markdown.new) { @article.content.html(:abstract).to_s }
20
14
 
21
- = render(Primer::BorderBoxComponent.new(ml: [nil, nil, 4, nil], style: 'min-width: 20vw')) do |sidebar|
15
+ = render(Primer::BorderBoxComponent.new(ml: [nil, nil, nil, 4], col: [nil, nil, nil, 4])) do |sidebar|
22
16
  - sidebar.body do
23
17
  - if @article.issue.has_content?(:cover_img)
24
18
  = render partial: 'spina/conferences/primer_theme/journal/issues/issue_cover', locals: { issue: @article.issue, cover_img: @article.issue.content(:cover_img), size: [200, 400] }
25
19
  = render(Primer::BorderBoxComponent.new) do |component|
26
20
  - if @article.has_content?(:attachment)
27
21
  - component.row do
28
- = render(Primer::ButtonComponent.new(tag: :a, href: frontend_issue_article_path(@issue, @article, format: :pdf), download: '', scheme: :primary)) do
22
+ = render(Primer::ButtonComponent.new(tag: :a, href: frontend_volume_issue_article_path(@issue.volume.number, @issue.number, @article.number, format: :pdf), download: '', scheme: :primary)) do
29
23
  = render Primer::OcticonComponent.new('download')
30
24
  = t '.download'
31
25
  - component.row do
32
- = render(Primer::HeadingComponent.new(tag: :h2, font_size: 4, color: :text_secondary)) { t '.published' }
33
- = render(Primer::TextComponent.new) do
26
+ = render(Primer::HeadingComponent.new(tag: :h2, font_size: 4, color: :muted)) { t '.published' }
27
+ = render(Primer::Beta::Text.new) do
34
28
  = time_tag @article.issue.date, format: :long
35
29
  - component.row do
36
- = render(Primer::HeadingComponent.new(tag: :h2, font_size: 4, color: :text_secondary)) { t '.issue' }
37
- = render(Primer::TextComponent.new) do
30
+ = render(Primer::HeadingComponent.new(tag: :h2, font_size: 4, color: :muted)) { t '.issue' }
31
+ = render(Primer::Beta::Text.new) do
38
32
  = link_to t('spina.conferences.primer_theme.journal.volume_issue',
39
33
  volume_number: @article.issue.volume.number,
40
- issue_number: @article.issue.number), frontend_issue_path(@article.issue)
34
+ issue_number: @article.issue.number), frontend_volume_issue_path(@article.issue.volume.number, @article.issue.number)
41
35
  - unless @article.doi.blank?
42
36
  - component.row do
43
- = render(Primer::HeadingComponent.new(tag: :h2, font_size: 4, color: :text_secondary)) { t '.doi' }
44
- = render(Primer::TextComponent.new(tag: :div, color: :text_secondary, mt: 1)) do
37
+ = render(Primer::HeadingComponent.new(tag: :h2, font_size: 4, color: :muted)) { t '.doi' }
38
+ = render(Primer::Beta::Text.new(tag: :div, color: :muted, mt: 1)) do
45
39
  = link_to nil, @article.doi
46
40
  - unless @article.url.blank?
47
41
  - component.row do
48
- = render(Primer::HeadingComponent.new(tag: :h2, font_size: 4, color: :text_secondary)) { t '.url' }
49
- = render(Primer::TextComponent.new(tag: :div, color: :text_secondary, mt: 1)) do
42
+ = render(Primer::HeadingComponent.new(tag: :h2, font_size: 4, color: :muted)) { t '.url' }
43
+ = render(Primer::Beta::Text.new(tag: :div, color: :muted, mt: 1)) do
50
44
  = link_to nil, @article.url
51
45
  - component.row do
52
- = render(Primer::FlexComponent.new(direction: :column)) do
53
- = render(Primer::TextComponent.new(mb: 2)) do
46
+ = render(Primer::HeadingComponent.new(tag: :h2, font_size: 4, color: :muted)) { t '.permalink' }
47
+ = render(Primer::Beta::Text.new(tag: :div, color: :muted, mt: 1)) do
48
+ = link_to nil, frontend_volume_issue_article_url(@volume.number, @issue.number, @article.number)
49
+ - component.row do
50
+ = render(Primer::BoxComponent.new(display: :flex, direction: :column)) do
51
+ = render(Primer::Beta::Text.new(mb: 2)) do
54
52
  Copyright © #{@article.issue.date.year} #{@article.affiliations.collect(&:name).to_sentence}
55
53
  - unless @licence.nil?
56
54
  - cache [@licence, @licence.content(:logo), @licence.content(:url)] do
@@ -63,8 +61,8 @@
63
61
  class: 'py-1'
64
62
  - unless @licence.nil?
65
63
  - cache [@licence, @licence.content(:text)] do
66
- = @licence.has_content?(:text) && render(Primer::TextComponent.new(mt: 1)) { @licence.content(:text) }
64
+ = @licence.has_content?(:text) && render(Primer::Beta::Text.new(mt: 1)) { @licence.content(:text) }
67
65
 
68
66
  - if @article.draft?
69
67
  - component.row do
70
- = render(Primer::TextComponent.new(tag: :div, color: :text_danger, font_weight: :bold)) { t '.draft' }
68
+ = render(Primer::Beta::Text.new(tag: :div, color: :danger, font_weight: :bold)) { t '.draft' }
@@ -0,0 +1,9 @@
1
+ = render(Primer::BoxComponent.new(display: :flex, direction: [:column, nil, :row, nil], align_items: [:flex_start, nil, nil, :center])) do
2
+ = render(Primer::BoxComponent.new(mr: 2)) do
3
+ = render(Primer::OcticonComponent.new('person'))
4
+ = render(Primer::BoxComponent.new(flex: :auto)) do
5
+ = link_to frontend_author_path(author) do
6
+ = render(Primer::HeadingComponent.new(tag: :h3, mb: 1)) do
7
+ = author.primary_affiliation.name
8
+ = render(Primer::HeadingComponent.new(tag: :h4, color: :muted, mb: 1)) do
9
+ = author.primary_affiliation.institution.name
@@ -0,0 +1,10 @@
1
+ = render(Primer::BoxComponent.new(display: :flex, direction: [:column, nil, nil, :row])) do
2
+ = render(Primer::BoxComponent.new(col: [nil, nil, nil, 9])) do
3
+ = render(Primer::HeadingComponent.new(tag: :h1)) do
4
+ = @journal.name
5
+ = render(Primer::HeadingComponent.new(tag: :h2, mt: 3)) { t '.authors' }
6
+ - if @authors.any?
7
+ %ul= render partial: 'author', collection: @authors, layout: 'list_item', cached: true
8
+ - else
9
+ = render Primer::BlankslateComponent.new(title: t(:'.no_authors'), icon: 'mortar-board')
10
+ = render 'journal_navigation'
@@ -0,0 +1,20 @@
1
+ = render(Primer::BoxComponent.new(display: :flex, direction: [:column, nil, nil, :row])) do
2
+ = render(Primer::BoxComponent.new(col: [nil, nil, nil, 9])) do
3
+ = render(Primer::HeadingComponent.new(tag: :h1)) do
4
+ = @journal.name
5
+ = render(Primer::HeadingComponent.new(tag: :h2, mt: 2)) do
6
+ = t '.name_institution', name: @author.primary_affiliation.name, institution: @author.primary_affiliation.institution.name
7
+ - if @author.affiliations.count > 1
8
+ = render(Primer::BoxComponent.new) do
9
+ = render(Primer::Beta::Text.new) do
10
+ = t '.aka'
11
+ = @author.affiliations.not_primary.map { |affiliation| t('.name_institution', name: affiliation.name, institution: affiliation.institution.name) }.join(', ')
12
+
13
+ = render(Primer::HeadingComponent.new(tag: :h3, mt: 3)) { t '.articles' }
14
+
15
+ - if @author.articles.any?
16
+ %ul= render partial: 'spina/conferences/primer_theme/journal/issues/article', collection: @author.articles.sorted_asc, layout: 'list_item', cached: true
17
+ - else
18
+ = render Primer::BlankslateComponent.new(title: t(:'.no_articles'), icon: 'mortar-board')
19
+
20
+ = render 'journal_navigation'
@@ -1,15 +1,15 @@
1
- = render(Primer::FlexComponent.new(direction: [:column, nil, :row, nil])) do
2
- = render(Primer::FlexItemComponent.new(flex_auto: true)) do
1
+ = render(Primer::BoxComponent.new(display: :flex, direction: [:column, nil, :row, nil])) do
2
+ = render(Primer::BoxComponent.new(flex: :auto)) do
3
3
  = render(Primer::HeadingComponent.new(tag: :h3, mb: 1)) do
4
- = link_to article.title, frontend_issue_article_path(article.issue, article)
5
- = render(Primer::TextComponent.new(tag: :div, color: :text_secondary)) do
4
+ = link_to article.title, frontend_volume_issue_article_path(article.issue.volume.number, article.issue.number, article.number)
5
+ = render(Primer::Beta::Text.new(tag: :div, color: :muted)) do
6
6
  = render(Primer::OcticonComponent.new(article.affiliations.many? ? 'people' : 'person'))
7
7
  = render(Primer::BaseComponent.new(tag: :address, display: :inline)) do
8
8
  = article.authorships.sorted_within_article.collect { |authorship| authorship.affiliation.name }.to_sentence
9
9
  - unless article.doi.blank?
10
- = render(Primer::TextComponent.new(tag: :div, color: :text_secondary)) do
10
+ = render(Primer::Beta::Text.new(tag: :div, color: :muted)) do
11
11
  = link_to nil, article.doi
12
12
  - if article.has_content?(:attachment)
13
- = render(Primer::ButtonComponent.new(tag: :a, href: frontend_issue_article_path(article.issue, article, format: :pdf), mt: 2, download: '')) do
13
+ = render(Primer::ButtonComponent.new(tag: :a, href: frontend_volume_issue_article_path(article.issue.volume.number, article.issue.number, article.number, format: :pdf), mt: 2, download: '')) do
14
14
  = render Primer::OcticonComponent.new('download')
15
15
  = t '.download'
@@ -1,17 +1,18 @@
1
- = render(Primer::FlexComponent.new(direction: [:column, nil, :row, nil])) do
1
+ = render(Primer::BoxComponent.new(display: :flex, direction: [:column, nil, :row, nil])) do
2
2
  - if issue.content(:cover_img).present?
3
- = render(Primer::FlexItemComponent.new(mr: 4)) do
4
- = render partial: 'issue_cover', locals: { issue: issue, cover_img: issue.content(:cover_img), size: [150, 300] }
5
- = render(Primer::FlexItemComponent.new(flex_auto: true)) do
3
+ = render(Primer::BoxComponent.new(mr: 4)) do
4
+ = link_to frontend_volume_issue_path(issue.volume.number, issue.number) do
5
+ = render partial: 'issue_cover', locals: { issue: issue, cover_img: issue.content(:cover_img), size: [150, 300] }
6
+ = render(Primer::BoxComponent.new(flex: :auto)) do
6
7
  = render(Primer::HeadingComponent.new(tag: :h3, mb: 1)) do
7
8
  = link_to t('spina.conferences.primer_theme.journal.volume_issue',
8
9
  volume_number: issue.volume.number,
9
- issue_number: issue.number), frontend_issue_path(issue)
10
+ issue_number: issue.number), frontend_volume_issue_path(issue.volume.number, issue.number)
10
11
  - unless issue.title.blank?
11
- = render(Primer::HeadingComponent.new(tag: :h4, color: :text_secondary, mb: 1)) do
12
+ = render(Primer::HeadingComponent.new(tag: :h4, color: :muted, mb: 1)) do
12
13
  = issue.title
13
- = render(Primer::TextComponent.new(tag: :div, color: :text_secondary, font_weight: :bold)) do
14
+ = render(Primer::Beta::Text.new(tag: :div, color: :muted, font_weight: :bold)) do
14
15
  = time_tag issue.date, format: :long
15
16
  - if issue.has_content?(:description)
16
- = render(Primer::TextComponent.new(tag: :div, color: :text_secondary, mt: 2)) do
17
- = issue.content.html(:description)
17
+ = render(Primer::Beta::Text.new(tag: :div, color: :muted, mt: 2)) do
18
+ = issue.content.html(:description).to_s
@@ -1,26 +1,25 @@
1
- = render(Primer::FlexComponent.new(direction: [:column, nil, :row, nil])) do
2
- = render(Primer::FlexComponent.new(direction: :column, flex: :auto)) do
3
- = render(Primer::HeadingComponent.new) { @journal.name }
4
- - if @journal.has_content? :description
5
- = render(Primer::MarkdownComponent.new(my: 4)) { @journal.content.html(:description) }
6
- = render(Primer::BorderBoxComponent.new(ml: [nil, nil, 4, nil], style: 'min-width: 15vw;')) do |sidebar|
7
- - if @journal.has_content? :logo
8
- - sidebar.header(bg: :primary) do
9
- = render(Primer::FlexItemComponent.new(mb: 4)) do
10
- - cache @journal.content(:logo) do
11
- = image_tag main_app.url_for(@journal.content(:logo).variant(resize_to_limit: [300, 150])),
12
- srcset: srcset(@journal.content(:logo), variant: { resize_to_limit: [300, 150] }),
13
- alt_description: t('.logo'),
14
- draggable: false,
15
- class: 'p-1'
16
- - unless @latest_issue.nil?
17
- - sidebar.row do
18
- = render(Primer::HeadingComponent.new(tag: :h2, font_size: 3)) do
19
- = link_to t('.latest_issue', volume_number: @latest_issue.volume.number, issue_number: @latest_issue.number), frontend_issue_path(@latest_issue)
20
- - if @latest_issue.has_content?(:cover_img)
21
- - sidebar.row do
22
- = link_to(frontend_issue_path(@latest_issue)) do
23
- = render partial: 'issue_cover', locals: { issue: @latest_issue, cover_img: @latest_issue.content(:cover_img), size: [150, 300] }
1
+ = render(Primer::BoxComponent.new(display: :flex, direction: [:column, nil, nil, :row])) do
2
+ = render(Primer::BoxComponent.new(display: :flex, direction: :column, col: [nil, nil, nil, 9])) do
3
+ = render(Primer::BoxComponent.new) do
4
+ = render(Primer::HeadingComponent.new(tag: :h1)) { @journal.name }
5
+ - if @journal.has_content? :description
6
+ = render(Primer::Markdown.new(my: 4)) { @journal.content.html(:description).to_s }
7
+ = render Primer::BoxComponent.new(my: 4, col: [12, nil, 6, nil], float: [nil, nil, :left, nil]) do
8
+ - if @journal.has_content?(:documents) && @journal.content(:documents)&.any?
9
+ = render Primer::SubheadComponent.new do |component|
10
+ = component.heading { t :'.documents.title' }
11
+ %ul
12
+ - @journal.content(:documents).each do |document|
13
+ %li.list-style-none.py-1.d-flex.flex-items-center
14
+ = render(Primer::Beta::Text.new(tag: :div, flex: :auto)) { document.content(:name).presence || t(:'.documents.no_name') }
15
+ - if document.content(:attachment).present?
16
+ = render Primer::ButtonComponent.new(tag: :a, ml: 2, href: main_app.url_for(document.content(:attachment)), download: '') do
17
+ = render Primer::OcticonComponent.new('desktop-download')
18
+ = t :'.documents.download'
19
+ - else
20
+ = render(Primer::Beta::Text.new(tag: :div, font_size: 6, color: :muted)) { t :'.documents.no_file' }
21
+
22
+ = render 'journal_navigation'
24
23
 
25
24
  #journal-issues-list
26
25
  = render(Primer::HeadingComponent.new(tag: :h2, mt: 3)) { t '.all_issues' }
@@ -28,3 +27,8 @@
28
27
  %ul= render partial: 'issue', collection: @issues, layout: 'list_item', cached: true
29
28
  - else
30
29
  = render Primer::BlankslateComponent.new(title: t(:'.no_issues'), icon: 'mortar-board')
30
+
31
+ - if @journal.has_content?(:issn) && !@journal.content(:issn).empty?
32
+ = render(Primer::BoxComponent.new(mt: 4)) do
33
+ = render(Primer::Beta::Text.new(font_weight: :bold)) do
34
+ = t '.issn', issn: @journal.content(:issn)
@@ -1,27 +1,37 @@
1
1
  - cache [@issue, @issue.volume, @issue.articles, @issue.content(:cover_img), @issue.content(:description)] do
2
- - cache [@issue, @issue.volume] do
3
- = render(Primer::HeadingComponent.new) do
4
- = t('spina.conferences.primer_theme.journal.volume_issue',
5
- volume_number: @issue.volume.number,
6
- issue_number: @issue.number)
2
+ = render(Primer::BoxComponent.new(display: :flex, direction: [:column, nil, nil, :row])) do
3
+ = render(Primer::BoxComponent.new(mr: [nil, nil, nil, 4], col: [nil, nil, nil, 8])) do
4
+ - cache [@issue, @issue.volume] do
5
+ = render(Primer::HeadingComponent.new(tag: :h1)) do
6
+ = t('spina.conferences.primer_theme.journal.volume_issue',
7
+ volume_number: @issue.volume.number,
8
+ issue_number: @issue.number)
7
9
 
8
- - unless @issue.title.blank?
9
- = render(Primer::HeadingComponent.new(tag: :h2, color: :text_secondary, mb: 2)) { @issue.title }
10
+ - unless @issue.title.blank?
11
+ = render(Primer::HeadingComponent.new(tag: :h2, color: :muted, mb: 2)) { @issue.title }
10
12
 
11
- - if @issue.has_content?(:cover_img)
12
- = render partial: 'issue_cover', locals: { issue: @issue, cover_img: @issue.content(:cover_img), size: [300, 600] }
13
+ - if @issue.has_content?(:description)
14
+ = render(Primer::Markdown.new(my: 4)) do
15
+ = @issue.content.html(:description).to_s
13
16
 
14
- - if @issue.has_content?(:description)
15
- = render(Primer::MarkdownComponent.new(my: 4)) do
16
- = @issue.content.html(:description)
17
17
 
18
- - if @issue.has_content?(:attachment)
19
- = render(Primer::ButtonComponent.new(tag: :a, scheme: :primary, href: main_app.url_for(@issue.content(:attachment)), my: 2, download: '')) do
20
- = render Primer::OcticonComponent.new('download')
21
- = t '.download'
18
+ %div#journal-articles-list.border-top
19
+ - if @articles.any?
20
+ %ul= render partial: 'article', collection: @articles.sorted_asc, layout: 'list_item', cached: true
21
+ - else
22
+ = render Primer::BlankslateComponent.new(title: t(:'.no_articles'), icon: 'mortar-board')
22
23
 
23
- %div#journal-articles-list.border-top
24
- - if @articles.any?
25
- %ul= render partial: 'article', collection: @articles.sorted_asc, layout: 'list_item', cached: true
26
- - else
27
- = render Primer::BlankslateComponent.new(title: t(:'.no_articles'), icon: 'mortar-board')
24
+ = render(Primer::BorderBoxComponent.new(ml: [nil, nil, nil, 4], col: [nil, nil, nil, 4])) do |sidebar|
25
+ - sidebar.body do
26
+ - if @issue.has_content?(:cover_img)
27
+ = render partial: 'spina/conferences/primer_theme/journal/issues/issue_cover', locals: { issue: @issue, cover_img: @issue.content(:cover_img), size: [300, 600] }
28
+ = render(Primer::BorderBoxComponent.new) do |component|
29
+ - component.row do
30
+ = render(Primer::HeadingComponent.new(tag: :h2, font_size: 4, color: :muted)) { t '.published' }
31
+ = render(Primer::Beta::Text.new) do
32
+ = time_tag @issue.date, format: :long
33
+ - if @issue.has_content?(:attachment)
34
+ - component.row do
35
+ = render(Primer::ButtonComponent.new(tag: :a, scheme: :primary, href: main_app.url_for(@issue.content(:attachment)), my: 2, download: '')) do
36
+ = render Primer::OcticonComponent.new('download')
37
+ = t '.download'
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ Spina::Conferences::PrimerTheme.config.importmap.draw do
4
+ # Stimulus & Turbo, as included with spina
5
+ pin '@hotwired/stimulus', to: 'stimulus.js'
6
+ pin '@hotwired/stimulus-loading', to: 'stimulus-loading.js'
7
+ pin '@hotwired/turbo-rails', to: 'turbo.js'
8
+
9
+ # GitHub Primer
10
+ pin '@github/details-dialog-element', to: '@github/details-dialog-element/dist/index.js'
11
+ pin '@github/include-fragment-element', to: '@github/include-fragment-element/dist/index.js'
12
+ pin '@github/filter-input-element', to: '@github/filter-input-element/dist/index.js'
13
+ pin '@github/details-menu-element', to: '@github/details-menu-element/dist/index.js'
14
+
15
+ # Frontend entrypoint
16
+ pin 'application', to: 'spina/conferences/primer_theme/application.js'
17
+
18
+ pin_all_from Spina::Conferences::PrimerTheme::Engine.root.join('app/assets/javascripts/spina/conferences/primer_theme/controllers'), # rubocop:disable Layout/LineLength
19
+ under: 'controllers',
20
+ to: 'spina/conferences/primer_theme/controllers'
21
+ end
@@ -1 +1,3 @@
1
- Mime::Type.register "application/pdf", :pdf
1
+ # frozen_string_literal: true
2
+
3
+ Mime::Type.register 'application/pdf', :pdf
@@ -1,3 +1,3 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- Rails.application.config.primer_view_components.silence_deprecations = true
3
+ Rails.application.config.primer_view_components.silence_deprecations = false
@@ -4,7 +4,7 @@
4
4
  theme.name = 'conferences_primer_theme'
5
5
  theme.title = 'Conferences Primer theme'
6
6
 
7
- theme.layout_parts = %w[current_conference_alert]
7
+ theme.layout_parts = %w[alert github_url]
8
8
 
9
9
  theme.parts = [{
10
10
  name: 'text',
@@ -87,7 +87,7 @@
87
87
  part_type: 'Spina::Parts::Repeater',
88
88
  parts: %w[name start_date finish_date start_time application_deadline location is_archived description url]
89
89
  }, {
90
- name: 'current_conference_alert',
90
+ name: 'alert',
91
91
  title: 'Alert',
92
92
  part_type: 'Spina::Parts::Text'
93
93
  }, {
@@ -235,6 +235,11 @@
235
235
  title: 'Information',
236
236
  description: 'Contains general information',
237
237
  parts: %w[text]
238
+ }, {
239
+ name: 'journal_information',
240
+ title: 'Information (Journal)',
241
+ description: 'An information page specifically for the journal section',
242
+ parts: %w[text]
238
243
  }, {
239
244
  name: 'committee',
240
245
  title: 'Committee',
@@ -288,5 +293,12 @@
288
293
  label: 'Footer'
289
294
  }]
290
295
 
296
+ theme.resources = [{
297
+ name: 'journal',
298
+ label: 'Journal',
299
+ slug: 'journal',
300
+ view_template: 'journal_information'
301
+ }]
302
+
291
303
  theme.plugins = %w[conferences journal conferences-blog]
292
304
  end
@@ -1,34 +1,3 @@
1
- # Files in the config/locales directory are used for internationalization
2
- # and are automatically loaded by Rails. If you want to use locales other
3
- # than English, add the necessary files in this directory.
4
- #
5
- # To use the locales, use `I18n.t`:
6
- #
7
- # I18n.t 'hello'
8
- #
9
- # In views, this is aliased to just `t`:
10
- #
11
- # <%= t(:'hello') %>
12
- #
13
- # To use a different locale, set it with `I18n.locale`:
14
- #
15
- # I18n.locale = :es
16
- #
17
- # This would use the information in config/locales/es.yml.
18
- #
19
- # The following keys must be escaped otherwise they will not be retrieved by
20
- # the default I18n backend:
21
- #
22
- # true, false, on, off, yes, no
23
- #
24
- # Instead, surround them with single quotes.
25
- #
26
- # en:
27
- # 'true': 'foo'
28
- #
29
- # To learn more, please read the Rails Internationalization guide
30
- # available at http://guides.rubyonrails.org/i18n.html.
31
-
32
1
  en:
33
2
  layouts:
34
3
  spina:
@@ -98,9 +67,12 @@ en:
98
67
  footer:
99
68
  copyright: © %{name} %{year}
100
69
  find_on_github: Find us on GitHub
101
- footer_content:
70
+ cookies_footer:
102
71
  cookies: About cookies
103
72
  loading: Loading…
73
+ journal_navigation:
74
+ issues: View issues
75
+ authors: View authors
104
76
 
105
77
  conferences:
106
78
  primer_theme:
@@ -175,6 +147,12 @@ en:
175
147
  logo: Journal logo
176
148
  all_issues: All Issues
177
149
  latest_issue: "Latest Issue (Vol. %{volume_number} Issue %{issue_number})"
150
+ issn: "ISSN: %{issn}"
151
+ documents:
152
+ title: Useful documents
153
+ download: Download
154
+ no_file: No file uploaded.
155
+ no_name: No name.
178
156
  show:
179
157
  no_articles: This issue has no articles.
180
158
  download: Full Issue PDF
@@ -185,22 +163,34 @@ en:
185
163
  download: PDF
186
164
  doi: DOI
187
165
  url: URL
166
+ permalink: Permalink
188
167
  abstract: Abstract
189
168
  published: Published
190
169
  issue: Issue
191
170
  draft: THIS ARTICLE IS A DRAFT
192
171
  licence_logo: Licence logo
172
+ authors:
173
+ index:
174
+ authors: Authors
175
+ no_authors: This journal has no authors.
176
+ show:
177
+ authors: Authors
178
+ articles: Articles
179
+ aka: "Also known as:"
180
+ name_institution: "%{name} (%{institution})"
181
+
193
182
  blog:
194
183
  posts:
195
184
  index:
196
185
  blog: Blog
186
+ no_posts: There are no posts.
197
187
  post:
198
188
  category_html: "Category: %{name}"
199
189
  categories:
200
190
  show:
201
191
  category: "Category: %{name}"
202
192
  shared:
203
- siebar:
193
+ sidebar:
204
194
  categories: Categories
205
195
 
206
196