blacklight-spotlight 1.5.1 → 2.0.0.rc1
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/README.md +11 -3
- data/app/assets/javascripts/spotlight/translation_progress.js +23 -0
- data/app/assets/stylesheets/spotlight/_spotlight.scss +2 -0
- data/app/assets/stylesheets/spotlight/_translations.scss +47 -0
- data/app/assets/stylesheets/spotlight/_utilities.scss +3 -0
- data/app/assets/stylesheets/spotlight/_variables.scss +5 -0
- data/app/controllers/concerns/spotlight/controller.rb +12 -1
- data/app/controllers/spotlight/about_pages_controller.rb +6 -0
- data/app/controllers/spotlight/browse_controller.rb +1 -1
- data/app/controllers/spotlight/catalog_controller.rb +6 -1
- data/app/controllers/spotlight/exhibits_controller.rb +10 -2
- data/app/controllers/spotlight/feature_pages_controller.rb +6 -0
- data/app/controllers/spotlight/filters_controller.rb +2 -2
- data/app/controllers/spotlight/home_pages_controller.rb +10 -0
- data/app/controllers/spotlight/languages_controller.rb +46 -0
- data/app/controllers/spotlight/pages_controller.rb +57 -3
- data/app/controllers/spotlight/solr_controller.rb +3 -3
- data/app/controllers/spotlight/translations_controller.rb +34 -0
- data/app/helpers/spotlight/application_helper.rb +1 -0
- data/app/helpers/spotlight/languages_helper.rb +33 -0
- data/app/helpers/spotlight/translations_helper.rb +13 -0
- data/app/models/concerns/spotlight/custom_translation_extension.rb +4 -0
- data/app/models/concerns/spotlight/translatables.rb +30 -0
- data/app/models/spotlight/ability.rb +5 -2
- data/app/models/spotlight/about_page.rb +1 -1
- data/app/models/spotlight/exhibit.rb +14 -6
- data/app/models/spotlight/feature_page.rb +1 -2
- data/app/models/spotlight/home_page.rb +1 -3
- data/app/models/spotlight/language.rb +24 -0
- data/app/models/spotlight/main_navigation.rb +12 -0
- data/app/models/spotlight/page.rb +53 -1
- data/app/models/spotlight/resources/upload.rb +6 -1
- data/app/models/spotlight/search.rb +4 -0
- data/app/services/spotlight/clone_translated_page_from_locale.rb +32 -0
- data/app/views/_user_util_links.html.erb +1 -0
- data/app/views/devise/mailer/invitation_instructions.html.erb +2 -2
- data/app/views/layouts/spotlight/spotlight.html.erb +2 -2
- data/app/views/shared/_curated_features_navbar.html.erb +2 -2
- data/app/views/spotlight/about_pages/_sidebar.html.erb +1 -1
- data/app/views/spotlight/admin_users/index.html.erb +1 -1
- data/app/views/spotlight/catalog/_edit_default.html.erb +1 -1
- data/app/views/spotlight/exhibits/_export.html.erb +1 -1
- data/app/views/spotlight/exhibits/_form.html.erb +1 -1
- data/app/views/spotlight/exhibits/_import.html.erb +2 -1
- data/app/views/spotlight/exhibits/_languages.html.erb +56 -0
- data/app/views/spotlight/exhibits/edit.html.erb +11 -5
- data/app/views/spotlight/feature_pages/_sidebar.html.erb +1 -1
- data/app/views/spotlight/filters/_form.html.erb +2 -1
- data/app/views/spotlight/resources/upload/_form.html.erb +1 -1
- data/app/views/spotlight/shared/_curation_sidebar.html.erb +5 -0
- data/app/views/spotlight/shared/_locale_picker.html.erb +14 -0
- data/app/views/spotlight/translations/_browse_categories.html.erb +67 -0
- data/app/views/spotlight/translations/_general.html.erb +176 -0
- data/app/views/spotlight/translations/_metadata.html.erb +67 -0
- data/app/views/spotlight/translations/_page.html.erb +45 -0
- data/app/views/spotlight/translations/_pages.html.erb +37 -0
- data/app/views/spotlight/translations/_pages_table.html.erb +15 -0
- data/app/views/spotlight/translations/_search_fields.html.erb +97 -0
- data/app/views/spotlight/translations/edit.html.erb +55 -0
- data/config/i18n-tasks.yml +81 -0
- data/config/locales/devise.en.yml +2 -1
- data/config/locales/spotlight.en.yml +657 -614
- data/config/routes.rb +19 -1
- data/db/migrate/20180308203409_create_spotlight_languages.rb +12 -0
- data/db/migrate/20180403130857_translation_uniqueness.rb +5 -0
- data/db/migrate/20180405044000_add_locale_to_pages.rb +6 -0
- data/db/migrate/20180406212516_add_default_locale_reference_to_spotlight_pages.rb +7 -0
- data/lib/generators/spotlight/templates/catalog_controller.rb +2 -2
- data/lib/generators/spotlight/templates/config/initializers/spotlight_initializer.rb +14 -4
- data/lib/generators/spotlight/templates/config/initializers/translation.rb +4 -2
- data/lib/migration/page_language.rb +27 -0
- data/lib/spotlight/engine.rb +32 -4
- data/lib/spotlight/upload_field_config.rb +27 -0
- data/lib/spotlight/version.rb +1 -1
- data/lib/tasks/spotlight_tasks.rake +6 -0
- data/spec/controllers/spotlight/about_pages_controller_spec.rb +67 -1
- data/spec/controllers/spotlight/feature_pages_controller_spec.rb +50 -0
- data/spec/controllers/spotlight/filters_controller_spec.rb +4 -4
- data/spec/controllers/spotlight/home_pages_controller_spec.rb +25 -0
- data/spec/controllers/spotlight/languages_controller_spec.rb +66 -0
- data/spec/controllers/spotlight/pages_controller_spec.rb +45 -0
- data/spec/controllers/spotlight/solr_controller_spec.rb +1 -1
- data/spec/controllers/spotlight/translations_controller_spec.rb +67 -0
- data/spec/examples.txt +1171 -1281
- data/spec/factories/exhibits.rb +1 -1
- data/spec/factories/language.rb +6 -0
- data/spec/factories/main_navigation.rb +7 -0
- data/spec/factories/searches.rb +1 -0
- data/spec/factories/tags.rb +1 -0
- data/spec/features/exhibits/language_create_edit_spec.rb +53 -0
- data/spec/features/exhibits/translation_editing_spec.rb +397 -0
- data/spec/features/javascript/locale_selector_spec.rb +61 -0
- data/spec/helpers/spotlight/languages_helper_spec.rb +73 -0
- data/spec/helpers/spotlight/translations_helper_spec.rb +16 -0
- data/spec/i18n_spec.rb +29 -0
- data/spec/lib/migration/page_language_spec.rb +21 -0
- data/spec/lib/spotlight/upload_field_config_spec.rb +24 -0
- data/spec/models/spotlight/ability_spec.rb +17 -4
- data/spec/models/spotlight/exhibit_spec.rb +49 -0
- data/spec/models/spotlight/language_spec.rb +41 -0
- data/spec/models/spotlight/page_spec.rb +109 -0
- data/spec/models/translation_spec.rb +11 -0
- data/spec/services/spotlight/clone_translated_page_from_locale_spec.rb +29 -0
- data/spec/spec_helper.rb +1 -13
- data/spec/support/disable_friendly_id_deprecation_warnings.rb +7 -6
- data/spec/test_app_templates/Gemfile.extra +3 -0
- data/spec/test_app_templates/catalog_controller.rb +31 -31
- data/spec/test_app_templates/lib/generators/test_app_generator.rb +9 -6
- data/spec/views/spotlight/contacts/edit.html.erb_spec.rb +13 -0
- data/spec/views/spotlight/exhibits/_form.html.erb_spec.rb +33 -0
- data/spec/views/spotlight/exhibits/edit.html.erb_spec.rb +4 -1
- data/spec/views/spotlight/resources/_external_resources_form.html.erb_spec.rb +13 -0
- data/spec/views/spotlight/resources/new.html.erb_spec.rb +10 -4
- data/spec/views/spotlight/translations/_page.html.erb_spec.rb +75 -0
- metadata +88 -28
- data/app/assets/javascripts/spotlight/sir-trevor.js +0 -0
- data/app/views/shared/_share_follow.html.erb +0 -5
- data/config/locales/social_share_button.en.yml +0 -18
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 43aa7318e230cbd7070a23b77fc8f2758251955d
|
|
4
|
+
data.tar.gz: 5746230c90332de03ca53665ce41ded0779a41b9
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: e974e1406d141557044df899294a30804b8a05b47b2ae833619236d530fa7dbf6b794ae057996e3ab9a2c099705ce6386d444870f34b435d73cdb16b68786e65
|
|
7
|
+
data.tar.gz: 802dcd0807263030ff2ae9371d552e6330826b4fce26a516dafdacef728aea2e5a7784c914c35c0adab99021a04120afd8e8fb6a84007c33409223a274f39a44
|
data/README.md
CHANGED
|
@@ -9,8 +9,8 @@ Read more about what Spotlight is, our motivations for creating it, and how to i
|
|
|
9
9
|
|
|
10
10
|
## Requirements
|
|
11
11
|
|
|
12
|
-
1. Ruby (2.
|
|
13
|
-
2. Rails (5.
|
|
12
|
+
1. Ruby (2.3.0 or greater)
|
|
13
|
+
2. Rails (5.1 or greater)
|
|
14
14
|
3. Java (7 or greater) *for Solr*
|
|
15
15
|
4. ImageMagick (http://www.imagemagick.org/script/index.php) due to [carrierwave](https://github.com/carrierwaveuploader/carrierwave#adding-versions)
|
|
16
16
|
|
|
@@ -45,7 +45,7 @@ $ rake db:migrate
|
|
|
45
45
|
Start Solr (possibly using `solr_wrapper` in development or testing):
|
|
46
46
|
|
|
47
47
|
```
|
|
48
|
-
$ solr_wrapper
|
|
48
|
+
$ solr_wrapper
|
|
49
49
|
```
|
|
50
50
|
|
|
51
51
|
and the Rails development server:
|
|
@@ -88,3 +88,11 @@ $ rake
|
|
|
88
88
|
```
|
|
89
89
|
|
|
90
90
|
This utilizes Solr and the testing rails app automatically.
|
|
91
|
+
|
|
92
|
+
## Translations
|
|
93
|
+
|
|
94
|
+
Spotlight ships with [`i18n-tasks`](https://github.com/glebm/i18n-tasks) to help manage translations. To run a translation health check:
|
|
95
|
+
|
|
96
|
+
```sh
|
|
97
|
+
$ bundle exec i18n-tasks health
|
|
98
|
+
```
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
Spotlight.onLoad(function() {
|
|
2
|
+
$('[data-behavior="translation-progress"]').translationProgress();
|
|
3
|
+
});
|
|
4
|
+
|
|
5
|
+
// translationProgress is a plugin that updates the "3/14" progress
|
|
6
|
+
// counters in the tabs of the translation adminstration dashboard.
|
|
7
|
+
// This works by counting the number of progress items and translations
|
|
8
|
+
// present (indicated by data attributes) in each tab's content
|
|
9
|
+
(function($) {
|
|
10
|
+
$.fn.translationProgress = function() {
|
|
11
|
+
var translationTabs = this;
|
|
12
|
+
$(translationTabs).each(function(){
|
|
13
|
+
var currentTab = $(this);
|
|
14
|
+
var tabName = $(this).attr('aria-controls');
|
|
15
|
+
var translationFields = $('#' + tabName).find('[data-translation-progress-item="true"]');
|
|
16
|
+
var completedTranslations = $('#' + tabName).find('[data-translation-present="true"]');
|
|
17
|
+
|
|
18
|
+
currentTab.find('span').text(completedTranslations.length + '/' + translationFields.length);
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
return this;
|
|
22
|
+
};
|
|
23
|
+
})(jQuery);
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
.translation-edit-form {
|
|
2
|
+
.glyphicon-ok {
|
|
3
|
+
color: $translation-available-color;
|
|
4
|
+
}
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
.translation-subheading {
|
|
8
|
+
border-bottom: 1px solid $navbar-default-border;
|
|
9
|
+
margin-bottom: 20px;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
.form-group.translation-form {
|
|
13
|
+
.control-label {
|
|
14
|
+
padding-top: $panel-body-padding + $padding-base-vertical;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.glyphicon-ok {
|
|
18
|
+
padding-top: $panel-body-padding + $padding-base-vertical;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.tanslation-description-toggle {
|
|
23
|
+
margin: 0;
|
|
24
|
+
padding: 0;
|
|
25
|
+
|
|
26
|
+
&.collapsed {
|
|
27
|
+
.caret {
|
|
28
|
+
transform: rotate(-90deg);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
label { cursor: pointer; }
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.panel-translation {
|
|
36
|
+
background-color: $translation-panel-bg;
|
|
37
|
+
padding-bottom: 0;
|
|
38
|
+
|
|
39
|
+
.help-block {
|
|
40
|
+
color: $translation-help-color;
|
|
41
|
+
padding-left: 12px;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
.default-page-outdated {
|
|
46
|
+
font-weight: 700;
|
|
47
|
+
}
|
|
@@ -36,3 +36,8 @@ $navbar-transparent-brand-hover-bg: transparent !default;
|
|
|
36
36
|
$navbar-transparent-toggle-hover-bg: $navbar-default-toggle-hover-bg !default;
|
|
37
37
|
$navbar-transparent-toggle-icon-bar-bg: $navbar-default-toggle-icon-bar-bg !default;
|
|
38
38
|
$navbar-transparent-toggle-border-color: $navbar-default-toggle-border-color !default;
|
|
39
|
+
|
|
40
|
+
// Translations
|
|
41
|
+
$translation-available-color: #80bf77;
|
|
42
|
+
$translation-panel-bg: #f5f5f5;
|
|
43
|
+
$translation-help-color: #555;
|
|
@@ -8,7 +8,7 @@ module Spotlight
|
|
|
8
8
|
|
|
9
9
|
included do
|
|
10
10
|
helper_method :current_site, :current_exhibit, :current_masthead, :exhibit_masthead?, :resource_masthead?
|
|
11
|
-
before_action :set_exhibit_locale_scope
|
|
11
|
+
before_action :set_exhibit_locale_scope, :set_locale
|
|
12
12
|
end
|
|
13
13
|
|
|
14
14
|
def set_exhibit_locale_scope
|
|
@@ -48,6 +48,17 @@ module Spotlight
|
|
|
48
48
|
current_exhibit && current_exhibit.masthead && current_exhibit.masthead.display?
|
|
49
49
|
end
|
|
50
50
|
|
|
51
|
+
def set_locale
|
|
52
|
+
I18n.locale = params[:locale] || I18n.default_locale
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def default_url_options
|
|
56
|
+
return super unless current_exhibit
|
|
57
|
+
return super if current_exhibit.languages.accessible_by(current_ability).none? || I18n.locale == I18n.default_locale
|
|
58
|
+
|
|
59
|
+
super.merge(locale: I18n.locale)
|
|
60
|
+
end
|
|
61
|
+
|
|
51
62
|
# overwrites Blacklight::Controller#blacklight_config
|
|
52
63
|
def blacklight_config
|
|
53
64
|
if current_exhibit
|
|
@@ -5,6 +5,12 @@ module Spotlight
|
|
|
5
5
|
load_and_authorize_resource through: :exhibit, instance_name: 'page'
|
|
6
6
|
before_action :attach_breadcrumbs, except: [:update_contacts]
|
|
7
7
|
|
|
8
|
+
# We're oddly getting an unknown action
|
|
9
|
+
# error w/o explicitly defining this here
|
|
10
|
+
def clone
|
|
11
|
+
super
|
|
12
|
+
end
|
|
13
|
+
|
|
8
14
|
def update_contacts
|
|
9
15
|
if @exhibit.update(contact_params)
|
|
10
16
|
redirect_to exhibit_about_pages_path(@exhibit), notice: t(:'helpers.submit.contact.batch_updated')
|
|
@@ -56,7 +56,7 @@ module Spotlight
|
|
|
56
56
|
end
|
|
57
57
|
|
|
58
58
|
def attach_breadcrumbs
|
|
59
|
-
add_breadcrumb t(:'spotlight.
|
|
59
|
+
add_breadcrumb t(:'spotlight.curation.nav.home', title: @exhibit.title), @exhibit
|
|
60
60
|
add_breadcrumb(@exhibit.main_navigations.browse.label_or_default, exhibit_browse_index_path(@exhibit))
|
|
61
61
|
end
|
|
62
62
|
|
|
@@ -133,7 +133,12 @@ module Spotlight
|
|
|
133
133
|
# /exhibits/1?f%5Bgenre_sim%5D%5B%5D=map&q= is not the same as /exhibits/1
|
|
134
134
|
# Otherwise the exhibit breadcrumb won't be a link.
|
|
135
135
|
# see http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-current_page-3F
|
|
136
|
-
|
|
136
|
+
if view_context.current_page?(action: :admin)
|
|
137
|
+
add_breadcrumb t(:'spotlight.exhibits.breadcrumb', title: @exhibit.title), exhibit_root_path(@exhibit, q: '')
|
|
138
|
+
else
|
|
139
|
+
# When not on the admin page, get the translated value for the "Home" breadcrumb
|
|
140
|
+
add_breadcrumb t(:'spotlight.curation.nav.home', title: @exhibit.title), exhibit_root_path(@exhibit, q: '')
|
|
141
|
+
end
|
|
137
142
|
end
|
|
138
143
|
|
|
139
144
|
##
|
|
@@ -3,6 +3,7 @@ module Spotlight
|
|
|
3
3
|
# Administrative CRUD actions for an exhibit
|
|
4
4
|
class ExhibitsController < Spotlight::ApplicationController
|
|
5
5
|
before_action :authenticate_user!, except: [:index]
|
|
6
|
+
before_action :set_tab, only: [:edit, :update]
|
|
6
7
|
include Blacklight::SearchHelper
|
|
7
8
|
|
|
8
9
|
load_and_authorize_resource
|
|
@@ -63,7 +64,9 @@ module Spotlight
|
|
|
63
64
|
|
|
64
65
|
def update
|
|
65
66
|
if @exhibit.update(exhibit_params)
|
|
66
|
-
redirect_to edit_exhibit_path(@exhibit
|
|
67
|
+
redirect_to edit_exhibit_path(@exhibit, tab: @tab),
|
|
68
|
+
notice: t(:'helpers.submit.exhibit.updated',
|
|
69
|
+
model: @exhibit.class.model_name.human.downcase)
|
|
67
70
|
else
|
|
68
71
|
flash[:alert] = @exhibit.errors.full_messages.join('<br>'.html_safe)
|
|
69
72
|
render action: :edit
|
|
@@ -89,10 +92,15 @@ module Spotlight
|
|
|
89
92
|
:description,
|
|
90
93
|
:published,
|
|
91
94
|
:tag_list,
|
|
92
|
-
contact_emails_attributes: [:id, :email]
|
|
95
|
+
contact_emails_attributes: [:id, :email],
|
|
96
|
+
languages_attributes: [:id, :public]
|
|
93
97
|
)
|
|
94
98
|
end
|
|
95
99
|
|
|
100
|
+
def set_tab
|
|
101
|
+
@tab = params[:tab]
|
|
102
|
+
end
|
|
103
|
+
|
|
96
104
|
def create_params
|
|
97
105
|
params.require(:exhibit).permit(
|
|
98
106
|
:title,
|
|
@@ -5,6 +5,12 @@ module Spotlight
|
|
|
5
5
|
load_and_authorize_resource through: :exhibit, instance_name: 'page'
|
|
6
6
|
before_action :attach_breadcrumbs
|
|
7
7
|
|
|
8
|
+
# We're oddly getting an unknown action
|
|
9
|
+
# error w/o explicitly defining this here
|
|
10
|
+
def clone
|
|
11
|
+
super
|
|
12
|
+
end
|
|
13
|
+
|
|
8
14
|
protected
|
|
9
15
|
|
|
10
16
|
def attach_breadcrumbs
|
|
@@ -11,14 +11,14 @@ module Spotlight
|
|
|
11
11
|
else
|
|
12
12
|
flash[:alert] = @filter.errors.full_messages.join('<br/>'.html_safe)
|
|
13
13
|
end
|
|
14
|
-
redirect_to spotlight.edit_exhibit_path @exhibit,
|
|
14
|
+
redirect_to spotlight.edit_exhibit_path @exhibit, tab: 'filter'
|
|
15
15
|
end
|
|
16
16
|
|
|
17
17
|
def update
|
|
18
18
|
unless @filter.update(filter_params)
|
|
19
19
|
flash[:alert] = @filter.errors.full_messages.join('<br/>'.html_safe)
|
|
20
20
|
end
|
|
21
|
-
redirect_to spotlight.edit_exhibit_path @exhibit,
|
|
21
|
+
redirect_to spotlight.edit_exhibit_path @exhibit, tab: 'filter'
|
|
22
22
|
end
|
|
23
23
|
|
|
24
24
|
def filter_params
|
|
@@ -29,11 +29,21 @@ module Spotlight
|
|
|
29
29
|
end
|
|
30
30
|
end
|
|
31
31
|
|
|
32
|
+
# We're oddly getting an unknown action
|
|
33
|
+
# error w/o explicitly defining this here
|
|
34
|
+
def clone
|
|
35
|
+
super
|
|
36
|
+
end
|
|
37
|
+
|
|
32
38
|
private
|
|
33
39
|
|
|
34
40
|
alias search_action_url exhibit_search_action_url
|
|
35
41
|
alias search_facet_url exhibit_search_facet_url
|
|
36
42
|
|
|
43
|
+
def load_locale_specific_page
|
|
44
|
+
@page = Spotlight::HomePage.for_locale.find_by(exhibit: current_exhibit)
|
|
45
|
+
end
|
|
46
|
+
|
|
37
47
|
def allowed_page_params
|
|
38
48
|
super.concat [:display_title, :display_sidebar]
|
|
39
49
|
end
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
module Spotlight
|
|
2
|
+
# Create and update languages for an exhibit
|
|
3
|
+
class LanguagesController < ApplicationController
|
|
4
|
+
before_action :authenticate_user!
|
|
5
|
+
load_and_authorize_resource :exhibit, class: 'Spotlight::Exhibit'
|
|
6
|
+
load_and_authorize_resource through: :exhibit
|
|
7
|
+
|
|
8
|
+
# This is being done in a before action to de-couple the Page creation from Language creation.
|
|
9
|
+
# A language can be created in tests, console, etc. w/o necessarily requiring an associated page is created.
|
|
10
|
+
# This ties the home page creation explicitly to the action in the dashboard.
|
|
11
|
+
before_action only: :create do
|
|
12
|
+
@cloned_home_page = CloneTranslatedPageFromLocale.call(
|
|
13
|
+
locale: @language.locale,
|
|
14
|
+
page: @language.exhibit.home_page
|
|
15
|
+
)
|
|
16
|
+
@cloned_home_page.published = true
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def create
|
|
20
|
+
if @language.save && @cloned_home_page.save
|
|
21
|
+
flash[:notice] = t('helpers.submit.language.created', model: @language.model_name.human.downcase)
|
|
22
|
+
else
|
|
23
|
+
flash[:alert] = [
|
|
24
|
+
@language.errors.full_messages,
|
|
25
|
+
@cloned_home_page.errors.full_messages
|
|
26
|
+
].join('<br/>'.html_safe)
|
|
27
|
+
end
|
|
28
|
+
redirect_to spotlight.edit_exhibit_path @exhibit, tab: 'language'
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def destroy
|
|
32
|
+
@language.destroy
|
|
33
|
+
|
|
34
|
+
redirect_to(
|
|
35
|
+
spotlight.edit_exhibit_path(@exhibit, tab: 'language'),
|
|
36
|
+
notice: t(:'helpers.submit.language.destroyed', model: @language.model_name.human.downcase)
|
|
37
|
+
)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
private
|
|
41
|
+
|
|
42
|
+
def create_params
|
|
43
|
+
params.require(:language).permit(:locale)
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
module Spotlight
|
|
2
2
|
##
|
|
3
3
|
# Base CRUD controller for pages
|
|
4
|
+
# rubocop:disable Metrics/ClassLength
|
|
5
|
+
# Disableing class length because this is a base
|
|
6
|
+
# controller that gives other controllers their behavior
|
|
4
7
|
class PagesController < Spotlight::ApplicationController
|
|
5
8
|
before_action :authenticate_user!, except: [:show]
|
|
9
|
+
before_action :load_locale_specific_page, only: [:destroy, :edit, :show, :update]
|
|
6
10
|
load_and_authorize_resource :exhibit, class: Spotlight::Exhibit
|
|
7
11
|
load_and_authorize_resource through: :exhibit, instance_name: 'page', only: [:index]
|
|
8
12
|
|
|
@@ -19,7 +23,7 @@ module Spotlight
|
|
|
19
23
|
|
|
20
24
|
respond_to do |format|
|
|
21
25
|
format.html
|
|
22
|
-
format.json { render json: @pages.published.to_json(methods: [:thumbnail_image_url]) }
|
|
26
|
+
format.json { render json: @pages.for_locale.published.to_json(methods: [:thumbnail_image_url]) }
|
|
23
27
|
end
|
|
24
28
|
end
|
|
25
29
|
|
|
@@ -85,6 +89,20 @@ module Spotlight
|
|
|
85
89
|
redirect_back fallback_location: spotlight.exhibit_dashboard_path(@exhibit), notice: notice
|
|
86
90
|
end
|
|
87
91
|
|
|
92
|
+
def clone
|
|
93
|
+
new_page = CloneTranslatedPageFromLocale.call(locale: clone_params, page: @page)
|
|
94
|
+
|
|
95
|
+
model_name = @page.class.model_name.human.downcase
|
|
96
|
+
if new_page.save
|
|
97
|
+
redirect_to(
|
|
98
|
+
edit_exhibit_translations_path(current_exhibit, new_page, language: clone_params, tab: 'pages'),
|
|
99
|
+
notice: t(:'helpers.submit.page.created', model: model_name)
|
|
100
|
+
)
|
|
101
|
+
else
|
|
102
|
+
redirect_to :back, error: t(:'helpers.submit.page.clone_error', model: model_name)
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
|
|
88
106
|
protected
|
|
89
107
|
|
|
90
108
|
def _prefixes
|
|
@@ -100,6 +118,10 @@ module Spotlight
|
|
|
100
118
|
view_context.safe_join([t(:"helpers.submit.page.#{key}", model: @page.class.model_name.human.downcase), undo_link], ' ')
|
|
101
119
|
end
|
|
102
120
|
|
|
121
|
+
def clone_params
|
|
122
|
+
params.require(:language)
|
|
123
|
+
end
|
|
124
|
+
|
|
103
125
|
##
|
|
104
126
|
# Browsing an exhibit should start a new search session
|
|
105
127
|
def start_new_search_session?
|
|
@@ -129,17 +151,49 @@ module Spotlight
|
|
|
129
151
|
|
|
130
152
|
def attach_breadcrumbs
|
|
131
153
|
if view_context.current_page? '/'
|
|
132
|
-
add_breadcrumb t(:'spotlight.
|
|
154
|
+
add_breadcrumb t(:'spotlight.curation.nav.home', title: current_exhibit.title), main_app.root_path
|
|
155
|
+
elsif @page
|
|
156
|
+
# Use curator-accessible i18n key for user-facing breadcrumb
|
|
157
|
+
breadcrumb_to_exhibit_root(:'spotlight.curation.nav.home')
|
|
133
158
|
else
|
|
134
|
-
|
|
159
|
+
# Use admin interface language for dashboard breadcrumb
|
|
160
|
+
breadcrumb_to_exhibit_root(:'spotlight.exhibits.breadcrumb')
|
|
135
161
|
end
|
|
136
162
|
end
|
|
137
163
|
|
|
164
|
+
def load_locale_specific_page
|
|
165
|
+
@page = current_exhibit.pages.for_locale.find(params[:id])
|
|
166
|
+
rescue ActiveRecord::RecordNotFound
|
|
167
|
+
redirect_page_to_related_locale_version
|
|
168
|
+
end
|
|
169
|
+
|
|
138
170
|
private
|
|
139
171
|
|
|
172
|
+
def update_all_page_params
|
|
173
|
+
params.require(:exhibit).permit(
|
|
174
|
+
pages_attributes: [:id, :published]
|
|
175
|
+
)
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
def breadcrumb_to_exhibit_root(key)
|
|
179
|
+
add_breadcrumb t(key, title: current_exhibit.title), spotlight.exhibit_root_path(current_exhibit)
|
|
180
|
+
end
|
|
181
|
+
|
|
140
182
|
# Only allow a trusted parameter "white list" through.
|
|
141
183
|
def page_params
|
|
142
184
|
params.require(controller_name.singularize).permit(allowed_page_params)
|
|
143
185
|
end
|
|
186
|
+
|
|
187
|
+
def redirect_page_to_related_locale_version
|
|
188
|
+
pages_for_id = current_exhibit.pages.find(params[:id])
|
|
189
|
+
if pages_for_id.default_locale_page
|
|
190
|
+
redirect_to polymorphic_path([current_exhibit, pages_for_id.default_locale_page])
|
|
191
|
+
elsif pages_for_id.translated_page_for(I18n.locale)
|
|
192
|
+
redirect_to polymorphic_path([current_exhibit, pages_for_id.translated_page_for(I18n.locale)])
|
|
193
|
+
else
|
|
194
|
+
raise ActiveRecord::RecordNotFound
|
|
195
|
+
end
|
|
196
|
+
end
|
|
144
197
|
end
|
|
198
|
+
# rubocop:enable Metrics/ClassLength
|
|
145
199
|
end
|