spina-admin-journal 1.0.0.rc1 → 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.
- checksums.yaml +4 -4
- data/app/assets/config/spina_admin_journal_manifest.js +0 -4
- data/app/components/spina/admin/journal/form_group_component.html.haml +4 -0
- data/app/components/spina/admin/journal/form_group_component.rb +17 -0
- data/app/components/spina/admin/journal/list_component.html.haml +11 -10
- data/app/controllers/spina/admin/journal/articles_controller.rb +2 -0
- data/app/controllers/spina/admin/journal/authors_controller.rb +3 -1
- data/app/controllers/spina/admin/journal/institutions_controller.rb +2 -0
- data/app/controllers/spina/admin/journal/issues_controller.rb +2 -0
- data/app/controllers/spina/admin/journal/journals_controller.rb +2 -0
- data/app/controllers/spina/admin/journal/licences_controller.rb +2 -0
- data/app/controllers/spina/admin/journal/volumes_controller.rb +2 -0
- data/app/models/spina/admin/journal/author.rb +1 -0
- data/app/models/spina/admin/journal/authorship.rb +9 -0
- data/app/views/spina/admin/hooks/journal/_primary_navigation.html.haml +4 -4
- data/app/views/spina/admin/journal/articles/_form.html.haml +2 -1
- data/app/views/spina/admin/journal/articles/_form_authors.html.haml +1 -0
- data/app/views/spina/admin/journal/articles/_form_details.html.haml +31 -21
- data/app/views/spina/admin/journal/authors/_form.html.haml +1 -1
- data/app/views/spina/admin/journal/authors/_form_affiliation.html.haml +12 -8
- data/app/views/spina/admin/journal/authors/_form_articles.html.haml +1 -0
- data/app/views/spina/admin/journal/authors/_form_details.html.haml +28 -2
- data/app/views/spina/admin/journal/institutions/_form.html.haml +1 -1
- data/app/views/spina/admin/journal/institutions/_form_details.html.haml +2 -1
- data/app/views/spina/admin/journal/institutions/_form_view_affiliations.html.haml +1 -0
- data/app/views/spina/admin/journal/issues/_form.html.haml +1 -1
- data/app/views/spina/admin/journal/issues/_form_articles.html.haml +1 -0
- data/app/views/spina/admin/journal/issues/_form_details.html.haml +8 -7
- data/app/views/spina/admin/journal/journals/_form.html.haml +10 -8
- data/app/views/spina/admin/journal/licences/_form.html.haml +12 -10
- data/app/views/spina/admin/journal/volumes/_form.html.haml +1 -1
- data/app/views/spina/admin/journal/volumes/_form_details.html.haml +3 -2
- data/app/views/spina/admin/journal/volumes/_form_issues.html.haml +1 -0
- data/app/views/spina/admin/parts/admin/journal/page_ranges/_form.html.haml +3 -4
- data/config/locales/en.yml +46 -6
- data/db/migrate/20220130171603_add_orcid_to_spina_admin_journal_author.rb +7 -0
- data/lib/spina/admin/journal/version.rb +1 -1
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e9dfe8f35c6a45f02481c7259fb3a6d5eba37cae6c7725c5e82f7a5658a340a7
|
4
|
+
data.tar.gz: 4daa82dba66f3f02c473db5d8a165934b68241af3069ddae1c509b246e6ae936
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 56e6ce7ac600354e6dd0c2bfba6d7b702661ecd6da9ac6666f44890f62805f3853bfa14c81475a33cf4e84350ed20f446d7e6e3beb2833ea73e1133057acc036
|
7
|
+
data.tar.gz: f6ae39891fe012f049cfedb9517ec2a386de90b82c947db39f46e24eb783c94bee25cbc0caf37a52c0f5b9925a6d7318d79ef2aab27aecf7da23acb89872576b
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Spina
|
4
|
+
module Admin
|
5
|
+
module Journal
|
6
|
+
# Correctly styles label, description and content of form fields.
|
7
|
+
class FormGroupComponent < ApplicationComponent
|
8
|
+
attr_reader :label, :description
|
9
|
+
|
10
|
+
def initialize(label:, description: '')
|
11
|
+
@label = label
|
12
|
+
@description = description
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -1,10 +1,11 @@
|
|
1
|
-
-
|
2
|
-
|
3
|
-
.
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
- @list_items.
|
8
|
-
|
9
|
-
|
10
|
-
|
1
|
+
.my-6.md:m-8
|
2
|
+
- if sortable?
|
3
|
+
.mb-4.text-gray-600.text-sm= t 'spina.admin.journal.sort_info'
|
4
|
+
.bg-white.md:rounded-lg.border-l-0.border-r-0.border.md:border-r.md:border-l.border-gray-200.border-b-0.shadow-sm{ data: { controller: 'sortable' } }
|
5
|
+
= form_with(url: @sort_path, data: { sortable_target: 'form' }) { |f| }
|
6
|
+
%ul{ data: { sortable_target: 'list' } }
|
7
|
+
- if @list_items.any?
|
8
|
+
- @list_items.each do |item|
|
9
|
+
= render Spina::Admin::Journal::ListItemComponent.new(id: item[:id], label: item[:label], path: item[:path], sortable: sortable?)
|
10
|
+
- else
|
11
|
+
= render Spina::Admin::Journal::EmptyListComponent.new
|
@@ -9,6 +9,8 @@ module Spina
|
|
9
9
|
before_action :set_tabs, except: %i[index destroy]
|
10
10
|
before_action :set_author, only: %i[edit update destroy]
|
11
11
|
|
12
|
+
admin_section :journal_settings
|
13
|
+
|
12
14
|
def index
|
13
15
|
@authors = Author.all
|
14
16
|
end
|
@@ -60,7 +62,7 @@ module Spina
|
|
60
62
|
private
|
61
63
|
|
62
64
|
def author_params
|
63
|
-
params.require(:author).permit(:primary_affiliation_index,
|
65
|
+
params.require(:author).permit(:primary_affiliation_index, :orcid,
|
64
66
|
affiliations_attributes: %i[id institution_id first_name
|
65
67
|
surname])
|
66
68
|
end
|
@@ -26,6 +26,7 @@ module Spina
|
|
26
26
|
has_many :articles, through: :affiliations
|
27
27
|
|
28
28
|
validate :must_have_one_primary_affiliation
|
29
|
+
validates :orcid, format: { with: /\A((\d{4}-){3}\d{3}(\d|X))?\z/ }
|
29
30
|
|
30
31
|
# @!attribute [r] primary_affiliation
|
31
32
|
# @return [ActiveRecord::Relation] The author's primary affiliation.
|
@@ -16,9 +16,18 @@ module Spina
|
|
16
16
|
# @!attribute [rw] position
|
17
17
|
# @return [Integer] used to order the affiliations for each article
|
18
18
|
|
19
|
+
before_validation :set_default_position, unless: :persisted?
|
19
20
|
validates :position, presence: true, uniqueness: { scope: :article_id }
|
20
21
|
|
21
22
|
scope :sorted_within_article, -> { order(position: :asc) }
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def set_default_position
|
27
|
+
return if article.authorships.sorted_within_article.last.nil?
|
28
|
+
|
29
|
+
self.position = article.authorships.sorted_within_article.last.position + 1
|
30
|
+
end
|
22
31
|
end
|
23
32
|
end
|
24
33
|
end
|
@@ -1,8 +1,8 @@
|
|
1
|
-
= render Spina::MainNavigation::SubNavComponent.new(:
|
1
|
+
= render Spina::MainNavigation::SubNavComponent.new(:journal) do |nav|
|
2
2
|
- nav.icon do
|
3
|
-
= heroicon 'document-
|
3
|
+
= heroicon 'document-duplicate', style: :solid, class: 'w-8 h-8 text-white md:mr-3'
|
4
4
|
.text-white.font-semibold.hidden{class: 'md:block transform -translate-x-2 ease-in-out duration-300 absolute md:relative opacity-0 transition-all', 'data-navigation-target': 'label'}
|
5
|
-
= Spina::Admin::Journal::Journal.instance.name
|
5
|
+
= Spina::Admin::Journal::Journal.instance.has_content?(:journal_abbreviation) ? Spina::Admin::Journal::Journal.instance.content(:journal_abbreviation) : Spina::Admin::Journal::Journal.instance.name
|
6
6
|
|
7
7
|
- nav.links do
|
8
8
|
= render Spina::MainNavigation::LinkComponent.new(Spina::Admin::Journal::Volume.model_name.human(count: :many),
|
@@ -18,7 +18,7 @@
|
|
18
18
|
|
19
19
|
= render Spina::MainNavigation::SubNavComponent.new(:journal_settings) do |nav|
|
20
20
|
- nav.icon do
|
21
|
-
= heroicon '
|
21
|
+
= heroicon 'view-grid', style: :solid, class: 'w-8 h-8 text-white md:mr-3'
|
22
22
|
.text-white.font-semibold.hidden{class: 'md:block transform -translate-x-2 ease-in-out duration-300 absolute md:relative opacity-0 transition-all', 'data-navigation-target': 'label'}
|
23
23
|
= t 'spina.admin.journal.navigation_title'
|
24
24
|
|
@@ -1,27 +1,37 @@
|
|
1
1
|
= form_with model: [spina, :admin_journal, @article], id: dom_id(@article), html: { autocomplete: 'off' } do |f|
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
2
|
+
.-mt-6
|
3
|
+
= render Spina::Admin::Journal::FormGroupComponent.new(label: Spina::Admin::Journal::Issue.model_name.human(count: :one)) do
|
4
|
+
= f.collection_select(:issue_id,
|
5
|
+
::Spina::Admin::Journal::Issue.sorted_desc,
|
6
|
+
:id,
|
7
|
+
->(issue) { t '.volume_issue', volume_number: issue.volume.number, issue_number: issue.number },
|
8
|
+
{},
|
9
|
+
class: 'form-select')
|
10
|
+
= render Spina::Admin::Journal::FormGroupComponent.new(label: Spina::Admin::Journal::Article.human_attribute_name(:number),
|
11
|
+
description: t('.unchangeable')) do
|
12
|
+
= f.number_field :number, disabled: true, class: 'form-input'
|
13
|
+
= render Spina::Admin::Journal::FormGroupComponent.new(label: Spina::Admin::Journal::Article.human_attribute_name(:title)) do
|
8
14
|
= render Spina::Forms::TextFieldComponent.new(f, :title)
|
9
|
-
= render Spina::
|
10
|
-
= f.select :status, Spina::Admin::Journal::Article.statuses.keys.map { |key| [key.humanize, key] }
|
11
|
-
= render Spina::
|
12
|
-
= f.collection_select :licence_id, Spina::Admin::Journal::Licence.sorted, :id, :name, prompt: true
|
13
|
-
= render Spina::
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
15
|
+
= render Spina::Admin::Journal::FormGroupComponent.new(label: Spina::Admin::Journal::Article.human_attribute_name(:status)) do
|
16
|
+
= f.select :status, Spina::Admin::Journal::Article.statuses.keys.map { |key| [key.humanize, key] }, {}, class: 'form-select'
|
17
|
+
= render Spina::Admin::Journal::FormGroupComponent.new(label: Spina::Admin::Journal::Article.human_attribute_name(:licence)) do
|
18
|
+
= f.collection_select :licence_id, Spina::Admin::Journal::Licence.sorted, :id, :name, { prompt: true }, { class: 'form-select' }
|
19
|
+
= render Spina::Admin::Journal::FormGroupComponent.new(label: Spina::Admin::Journal::Author.model_name.human(count: :many),
|
20
|
+
description: t('.affiliation_info')) do
|
21
|
+
%ul.list-none.ml-4
|
22
|
+
= f.collection_check_boxes(:affiliation_ids,
|
23
|
+
Spina::Admin::Journal::Affiliation.sorted,
|
24
|
+
:id,
|
25
|
+
->(affiliation) { t '.name_institution', name: affiliation.name, institution: affiliation.institution.name },
|
26
|
+
{},
|
27
|
+
class: 'form-checkbox rounded') do |builder|
|
28
|
+
%li
|
29
|
+
.form-checkbox
|
30
|
+
= builder.check_box
|
31
|
+
%span.text-sm.font-medium.text-gray-600= builder.label
|
32
|
+
= render Spina::Admin::Journal::FormGroupComponent.new(label: Spina::Admin::Journal::Article.human_attribute_name(:url)) do
|
23
33
|
= render Spina::Forms::TextFieldComponent.new(f, :url)
|
24
|
-
= render Spina::
|
34
|
+
= render Spina::Admin::Journal::FormGroupComponent.new(label: Spina::Admin::Journal::Article.human_attribute_name(:doi)) do
|
25
35
|
= render Spina::Forms::TextFieldComponent.new(f, :doi)
|
26
36
|
|
27
37
|
= f.fields_for :"#{@locale}_content", @parts do |ff|
|
@@ -26,4 +26,4 @@
|
|
26
26
|
= form_with model: [spina, :admin_journal, @author], id: dom_id(@author), html: { autocomplete: 'off' } do |f|
|
27
27
|
- @tabs.each_with_index do |tab, i|
|
28
28
|
%div{ 'data-tabs-target': 'pane', id: tab, hidden: i != 0 }
|
29
|
-
= render "form_#{tab}", f: f
|
29
|
+
.max-w-5xl= render "form_#{tab}", f: f
|
@@ -1,8 +1,12 @@
|
|
1
|
-
|
2
|
-
= render Spina::
|
3
|
-
= render Spina::Forms::
|
4
|
-
= render Spina::
|
5
|
-
= render Spina::Forms::
|
6
|
-
=
|
7
|
-
=
|
8
|
-
=
|
1
|
+
%div{ data: { 'part-id': "#{f.object.object_id}", 'tabs-target': 'pane' }, id: "pane_#{f.object.object_id}" }
|
2
|
+
= render Spina::Admin::Journal::FormGroupComponent.new(label: Spina::Admin::Journal::Affiliation.human_attribute_name(:first_name)) do
|
3
|
+
= render Spina::Forms::TextFieldComponent.new(f, :first_name)
|
4
|
+
= render Spina::Admin::Journal::FormGroupComponent.new(label: Spina::Admin::Journal::Affiliation.human_attribute_name(:surname)) do
|
5
|
+
= render Spina::Forms::TextFieldComponent.new(f, :surname)
|
6
|
+
= render Spina::Admin::Journal::FormGroupComponent.new(label: Spina::Admin::Journal::Affiliation.human_attribute_name(:institution)) do
|
7
|
+
= f.collection_select :institution_id, Spina::Admin::Journal::Institution.sorted, :id, :name, {}, class: 'form-select'
|
8
|
+
= render Spina::Admin::Journal::FormGroupComponent.new(label: t('.primary'), description: t('.primary_explanation')) do
|
9
|
+
= radio_button_tag 'author[primary_affiliation_index]', f.index, f.object.status == 'primary', class: 'form-radio'
|
10
|
+
|
11
|
+
.text-right
|
12
|
+
= button_tag t('spina.ui.delete'), type: :button, class: 'btn btn-default bg-transparent hover:bg-white hover:text-red-500 h-8 px-3 inline-block mt-3', data: { action: 'repeater#removeFields', id: "pane_#{f.object.object_id}" }
|
@@ -1,2 +1,28 @@
|
|
1
|
-
=
|
2
|
-
|
1
|
+
.text-gray-700.text-sm.font-light= t '.explanation'
|
2
|
+
.mt-6{ 'data-controller': 'repeater' }
|
3
|
+
%label.block.text-sm.leading-5.font-medium.text-gray-700= Spina::Admin::Journal::Author.human_attribute_name :affiliations
|
4
|
+
.-mt-4.flex.flex-col.md:flex-row{ data: { 'controller': 'tabs', 'tabs-active': 'bg-spina-dark bg-opacity-10 text-gray-900', 'tabs-inactive': 'text-gray-500' } }
|
5
|
+
.md:w-64.md:pr-6
|
6
|
+
|
7
|
+
-# Fields for new affiliation
|
8
|
+
- new_affiliation = Spina::Admin::Journal::Affiliation.new
|
9
|
+
- fields = f.fields_for(:affiliations, [new_affiliation], child_index: new_affiliation.object_id) { |ff| render('form_affiliation', f: ff) }.gsub('\n', '')
|
10
|
+
|
11
|
+
-# Tabs
|
12
|
+
.pt-6.-ml-3
|
13
|
+
%div{ data: { action: 'exists->tabs#added', 'repeater-target' => 'list', 'tabs-target' => 'list' } }
|
14
|
+
- (f.object.affiliations || []).each.with_index do |affiliation, index|
|
15
|
+
%button.text-gray-500.hover:text-gray-900.rounded-md.px-3.truncate.text-sm.font-medium.flex.items-center.w-full.h-9{ data: { 'action': 'tabs#show', 'pane-id': "pane_#{affiliation.object_id}", 'repeater-target': 'listItem', 'tabs-target': 'button' }, type: 'button' }
|
16
|
+
= affiliation&.name
|
17
|
+
%button.text-gray-400.pl-2.hover:text-gray-900.rounded-md.truncate.text-sm.font-medium.flex.items-center.w-full.h-10{ data: { 'action': 'repeater#addFields', 'child-index': "#{new_affiliation.object_id}", 'fields': fields }, type: 'button' }
|
18
|
+
= heroicon 'plus', style: :solid, class: 'w-6 h-6 mr-1'
|
19
|
+
= t 'spina.ui.new_entry'
|
20
|
+
|
21
|
+
-# Content
|
22
|
+
.flex-1.pl-6.md:pl-0{ 'data-repeater-target': 'content' }
|
23
|
+
= f.fields_for :affiliations do |affiliation_fields|
|
24
|
+
= render 'form_affiliation', f: affiliation_fields
|
25
|
+
|
26
|
+
= render Spina::Admin::Journal::FormGroupComponent.new(label: Spina::Admin::Journal::Author.human_attribute_name(:orcid),
|
27
|
+
description: t('.orcid_info')) do
|
28
|
+
= render Spina::Forms::TextFieldComponent.new(f, :orcid)
|
@@ -26,4 +26,4 @@
|
|
26
26
|
= form_with model: [spina, :admin_journal, @institution], id: dom_id(@institution), html: { autocomplete: 'off' } do |f|
|
27
27
|
- @tabs.each_with_index do |tab, i|
|
28
28
|
%div{ 'data-tabs-target': 'pane', id: tab, hidden: i != 0 }
|
29
|
-
= render "form_#{tab}", f: f
|
29
|
+
.max-w-5xl= render "form_#{tab}", f: f
|
@@ -1,3 +1,4 @@
|
|
1
|
-
|
1
|
+
.-mt-6
|
2
|
+
= render Spina::Admin::Journal::FormGroupComponent.new(label: Spina::Admin::Journal::Institution.human_attribute_name(:name)) do
|
2
3
|
= render Spina::Forms::TextFieldComponent.new(f, :name)
|
3
4
|
|
@@ -1,13 +1,14 @@
|
|
1
1
|
= form_with model: [spina, :admin_journal, @issue], id: dom_id(@issue), html: { autocomplete: 'off' } do |f|
|
2
|
-
|
3
|
-
|
4
|
-
|
2
|
+
.-mt-6
|
3
|
+
= render Spina::Admin::Journal::FormGroupComponent.new(label: Spina::Admin::Journal::Volume.human_attribute_name(:number)) do
|
4
|
+
= f.collection_select :volume_id, ::Spina::Admin::Journal::Volume.sorted_desc, :id, :number, {}, class: 'form-select'
|
5
|
+
= render Spina::Admin::Journal::FormGroupComponent.new(label: Spina::Admin::Journal::Issue.human_attribute_name(:number),
|
5
6
|
description: t('.issue_unchangeable')) do
|
6
|
-
= f.number_field :number, disabled: true
|
7
|
-
= render Spina::
|
7
|
+
= f.number_field :number, disabled: true, class: 'form-input'
|
8
|
+
= render Spina::Admin::Journal::FormGroupComponent.new(label: Spina::Admin::Journal::Issue.human_attribute_name(:title)) do
|
8
9
|
= render Spina::Forms::TextFieldComponent.new(f, :title)
|
9
|
-
= render Spina::
|
10
|
-
= f.date_field :date
|
10
|
+
= render Spina::Admin::Journal::FormGroupComponent.new(label: Spina::Admin::Journal::Issue.human_attribute_name(:date)) do
|
11
|
+
= f.date_field :date, class: 'form-input'
|
11
12
|
|
12
13
|
= f.fields_for :"#{@locale}_content", @parts do |ff|
|
13
14
|
= ff.hidden_field :type, value: ff.object.class
|
@@ -13,13 +13,15 @@
|
|
13
13
|
= t '.save'
|
14
14
|
|
15
15
|
.p-4.md:p-8
|
16
|
-
|
17
|
-
=
|
18
|
-
|
16
|
+
.max-w-5xl
|
17
|
+
= form_with model: [spina, :admin_journal, @journal], id: dom_id(@journal), html: { autocomplete: 'off' } do |f|
|
18
|
+
.-mt-6
|
19
|
+
= render Spina::Admin::Journal::FormGroupComponent.new(label: Spina::Admin::Journal::Journal.human_attribute_name(:name)) do
|
20
|
+
= render Spina::Forms::TextFieldComponent.new(f, :name)
|
19
21
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
22
|
+
= f.fields_for :"#{@locale}_content", @parts do |ff|
|
23
|
+
= ff.hidden_field :type, value: ff.object.class
|
24
|
+
= ff.hidden_field :title
|
25
|
+
= ff.hidden_field :name
|
24
26
|
|
25
|
-
|
27
|
+
= render "spina/admin/parts/#{parts_partial_namespace(ff.object.class.to_s)}/form", f: ff
|
@@ -13,16 +13,18 @@
|
|
13
13
|
= t '.save'
|
14
14
|
|
15
15
|
.p-4.md:p-8
|
16
|
-
|
17
|
-
=
|
18
|
-
|
19
|
-
|
20
|
-
|
16
|
+
.max-w-5xl
|
17
|
+
= form_with model: [spina, :admin_journal, @licence], id: dom_id(@licence), html: { autocomplete: 'off' } do |f|
|
18
|
+
.-mt-6
|
19
|
+
= render Spina::Admin::Journal::FormGroupComponent.new(label: Spina::Admin::Journal::Licence.human_attribute_name(:name)) do
|
20
|
+
= render Spina::Forms::TextFieldComponent.new(f, :name)
|
21
|
+
= render Spina::Admin::Journal::FormGroupComponent.new(label: Spina::Admin::Journal::Licence.human_attribute_name(:abbreviated_name)) do
|
22
|
+
= render Spina::Forms::TextFieldComponent.new(f, :abbreviated_name)
|
21
23
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
24
|
+
= f.fields_for :"#{@locale}_content", @parts do |ff|
|
25
|
+
= ff.hidden_field :type, value: ff.object.class
|
26
|
+
= ff.hidden_field :title
|
27
|
+
= ff.hidden_field :name
|
26
28
|
|
27
|
-
|
29
|
+
= render "spina/admin/parts/#{parts_partial_namespace(ff.object.class.to_s)}/form", f: ff
|
28
30
|
|
@@ -1,4 +1,5 @@
|
|
1
1
|
= form_with model: [spina, :admin_journal, @volume], id: dom_id(@volume), html: { autocomplete: 'off' } do |f|
|
2
|
-
|
2
|
+
.-mt-6
|
3
|
+
= render Spina::Admin::Journal::FormGroupComponent.new(label: Spina::Admin::Journal::Volume.human_attribute_name(:number),
|
3
4
|
description: t('.unchangeable')) do
|
4
|
-
= f.number_field :number, disabled: true
|
5
|
+
= f.number_field :number, disabled: true, class: 'form-input'
|
@@ -1,6 +1,5 @@
|
|
1
|
-
.
|
2
|
-
.
|
3
|
-
= f.number_field :first_page, style: 'width: 10%;'
|
1
|
+
= render Spina::Admin::Journal::FormGroupComponent.new(label: f.object.title) do
|
2
|
+
= f.number_field :first_page, style: 'width: 10%;', class: 'form-input'
|
4
3
|
–
|
5
|
-
= f.number_field :last_page, style: 'width: 10%;'
|
4
|
+
= f.number_field :last_page, style: 'width: 10%;', class: 'form-input'
|
6
5
|
|
data/config/locales/en.yml
CHANGED
@@ -1,11 +1,15 @@
|
|
1
1
|
en:
|
2
2
|
spina:
|
3
|
+
languages:
|
4
|
+
en-GB: British English
|
3
5
|
admin:
|
4
6
|
journal:
|
5
7
|
navigation_title: Journal settings
|
6
8
|
unnamed_journal: Unnamed journal
|
7
9
|
edit: Edit
|
8
|
-
sort_info:
|
10
|
+
sort_info:
|
11
|
+
"Click and drag items by the handles to reorder. NB: item names will only update after
|
12
|
+
you refresh the page."
|
9
13
|
empty_list: There are no items.
|
10
14
|
journals:
|
11
15
|
index:
|
@@ -38,6 +42,8 @@ en:
|
|
38
42
|
saved: Volume saved.
|
39
43
|
form:
|
40
44
|
save: Save
|
45
|
+
details: Details
|
46
|
+
issues: Issues
|
41
47
|
delete_confirmation: "Are you sure you want to delete Volume <strong>#%{number}</strong>?"
|
42
48
|
form_details:
|
43
49
|
unchangeable: The volume number can be changed by clicking 'Change Order' in the index view.
|
@@ -67,6 +73,8 @@ en:
|
|
67
73
|
deleted: Issue deleted.
|
68
74
|
form:
|
69
75
|
save: Save issue
|
76
|
+
details: Details
|
77
|
+
articles: Articles
|
70
78
|
delete_confirmation: "Are you sure you want to delete Issue <strong>#%{number}</strong>?"
|
71
79
|
form_details:
|
72
80
|
issue_unchangeable: The issue order can be changed in the 'Volumes' tab.
|
@@ -91,10 +99,16 @@ en:
|
|
91
99
|
deleted: Article deleted.
|
92
100
|
form:
|
93
101
|
save: Save article
|
102
|
+
details: Details
|
103
|
+
authors: Authors
|
94
104
|
delete_confirmation: "Are you sure you want to delete '<strong>%{title}</strong>'?"
|
95
105
|
form_details:
|
96
106
|
volume_issue: "Volume %{volume_number} Issue %{issue_number}"
|
107
|
+
name_institution: "%{name} (%{institution})"
|
97
108
|
unchangeable: Article order can be changed in the issue.
|
109
|
+
affiliation_info:
|
110
|
+
All affiliations are listed here. You can select multiple affiliations for co-authored
|
111
|
+
articles, but these must be from different authors.
|
98
112
|
form_authors:
|
99
113
|
no_authors: There are no authors.
|
100
114
|
number_of_articles: "# Articles"
|
@@ -123,10 +137,24 @@ en:
|
|
123
137
|
sort_error: There was an error when sorting. Check the server logs for more information.
|
124
138
|
form:
|
125
139
|
save: Save author
|
126
|
-
|
140
|
+
details: Details
|
141
|
+
articles: Articles
|
127
142
|
delete_confirmation: "Are you sure you want to delete the author %{name}?"
|
143
|
+
form_details:
|
144
|
+
explanation:
|
145
|
+
"An author represents an individual person. A person may change names and/or
|
146
|
+
institutions over time. This is represented in Journal with
|
147
|
+
'affiliations'. An affiliation consists of an author's name and institution at a
|
148
|
+
particular time, or generally within a particular context."
|
149
|
+
orcid_info:
|
150
|
+
It is highly recommended to provide an ORCID iD for each author. Find out more at
|
151
|
+
orcid.org.
|
128
152
|
form_affiliation:
|
129
153
|
primary: Primary?
|
154
|
+
primary_explanation:
|
155
|
+
If checked, this affiliation will be marked as the author's primary affiliation. An
|
156
|
+
author can only have one primary affiliation. It is the primary affiliation that will
|
157
|
+
be shown most prominently on the author's page.
|
130
158
|
form_articles:
|
131
159
|
no_articles: There are no articles.
|
132
160
|
institutions:
|
@@ -147,14 +175,18 @@ en:
|
|
147
175
|
deleted: Institution deleted.
|
148
176
|
form:
|
149
177
|
save: Save institution
|
178
|
+
details: Details
|
179
|
+
view_affiliations: Affiliations
|
180
|
+
delete_confirmation:
|
181
|
+
"Are you sure you want to delete the institution <strong>%{name}</strong>?
|
182
|
+
This action is irreversible, and will delete all associated affiliations. Authors
|
183
|
+
will not be deleted."
|
150
184
|
form_view_affiliations:
|
151
185
|
no_affiliations: This institution has no associated affiliations.
|
152
186
|
number_of_articles: "# articles"
|
153
|
-
form_details:
|
154
|
-
delete_confirmation:
|
155
|
-
"Are you sure you want to delete the institution <strong>%{name}</strong>?
|
156
|
-
This action is irreversible, and will delete all associated affiliations. Authors will not be deleted."
|
157
187
|
licences:
|
188
|
+
index:
|
189
|
+
new: New licence
|
158
190
|
new:
|
159
191
|
new: New licence
|
160
192
|
create:
|
@@ -217,11 +249,19 @@ en:
|
|
217
249
|
spina/admin/journal/authorship:
|
218
250
|
position: Position
|
219
251
|
spina/admin/journal/author:
|
252
|
+
affiliations: Affiliations
|
253
|
+
orcid: ORCID iD
|
220
254
|
spina/admin/journal/institution:
|
221
255
|
name: Institution Name
|
222
256
|
spina/admin/journal/licence:
|
223
257
|
name: Licence Name
|
224
258
|
abbreviated_name: Short Name
|
259
|
+
errors:
|
260
|
+
models:
|
261
|
+
author:
|
262
|
+
attributes:
|
263
|
+
orcid:
|
264
|
+
invalid: Invalid format for ORCID iD
|
225
265
|
|
226
266
|
date:
|
227
267
|
formats:
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spina-admin-journal
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.0.
|
4
|
+
version: 1.0.0.rc2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Louis Van Steene
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-01-
|
11
|
+
date: 2022-01-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: haml-rails
|
@@ -266,6 +266,8 @@ files:
|
|
266
266
|
- app/components/spina/admin/journal/authorships_list_component.rb
|
267
267
|
- app/components/spina/admin/journal/empty_list_component.html.haml
|
268
268
|
- app/components/spina/admin/journal/empty_list_component.rb
|
269
|
+
- app/components/spina/admin/journal/form_group_component.html.haml
|
270
|
+
- app/components/spina/admin/journal/form_group_component.rb
|
269
271
|
- app/components/spina/admin/journal/institutions_list_component.rb
|
270
272
|
- app/components/spina/admin/journal/issues_list_component.rb
|
271
273
|
- app/components/spina/admin/journal/licences_list_component.rb
|
@@ -355,6 +357,7 @@ files:
|
|
355
357
|
- db/migrate/20210618090155_create_spina_admin_journal_licences.rb
|
356
358
|
- db/migrate/20210618094533_add_licence_to_spina_admin_journal_articles.rb
|
357
359
|
- db/migrate/20210626153728_create_spina_parts_admin_journal_page_ranges.rb
|
360
|
+
- db/migrate/20220130171603_add_orcid_to_spina_admin_journal_author.rb
|
358
361
|
- lib/spina/admin/journal.rb
|
359
362
|
- lib/spina/admin/journal/engine.rb
|
360
363
|
- lib/spina/admin/journal/version.rb
|