alchemy_cms 3.5.0 → 3.6.0
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/.rubocop.yml +82 -26
- data/.travis.yml +1 -1
- data/CHANGELOG.md +23 -1
- data/README.md +14 -5
- data/Rakefile +0 -1
- data/alchemy_cms.gemspec +2 -5
- data/app/assets/images/alchemy/alchemy-logo.png +0 -0
- data/app/assets/javascripts/alchemy/admin.js +1 -1
- data/app/assets/javascripts/alchemy/alchemy.base.js.coffee +4 -8
- data/app/assets/javascripts/alchemy/alchemy.buttons.js.coffee +2 -2
- data/app/assets/javascripts/alchemy/alchemy.datepicker.js.coffee +18 -27
- data/app/assets/javascripts/alchemy/alchemy.dialog.js.coffee +1 -1
- data/app/assets/javascripts/alchemy/alchemy.element_editors.js.coffee +3 -8
- data/app/assets/javascripts/alchemy/alchemy.elements_window.js.coffee +1 -1
- data/app/assets/javascripts/alchemy/alchemy.gui.js.coffee +0 -1
- data/app/assets/javascripts/alchemy/alchemy.page_sorter.js +22 -46
- data/app/assets/javascripts/alchemy/alchemy.preview_window.js.coffee +1 -1
- data/app/assets/javascripts/alchemy/alchemy.sitemap.js.coffee +2 -2
- data/app/assets/javascripts/alchemy/alchemy.spinner.js +32 -0
- data/app/assets/javascripts/alchemy/alchemy.tinymce.js.coffee +1 -1
- data/app/assets/javascripts/alchemy/templates/index.js +1 -0
- data/app/assets/javascripts/alchemy/templates/spinner.hbs +7 -0
- data/app/assets/stylesheets/alchemy/_extends.scss +1 -0
- data/app/assets/stylesheets/alchemy/admin.scss +1 -0
- data/app/assets/stylesheets/alchemy/base.scss +1 -7
- data/app/assets/stylesheets/alchemy/buttons.scss +1 -5
- data/app/assets/stylesheets/alchemy/dialogs.scss +0 -4
- data/app/assets/stylesheets/alchemy/elements.scss +2 -6
- data/app/assets/stylesheets/alchemy/frame.scss +0 -5
- data/app/assets/stylesheets/alchemy/image_library.scss +0 -13
- data/app/assets/stylesheets/alchemy/sitemap.scss +5 -34
- data/app/assets/stylesheets/alchemy/spinner.scss +52 -0
- data/app/controllers/alchemy/admin/attachments_controller.rb +12 -11
- data/app/controllers/alchemy/admin/base_controller.rb +3 -7
- data/app/controllers/alchemy/admin/essence_pictures_controller.rb +2 -1
- data/app/controllers/alchemy/admin/languages_controller.rb +3 -8
- data/app/controllers/alchemy/admin/pictures_controller.rb +11 -7
- data/app/controllers/alchemy/admin/resources_controller.rb +1 -1
- data/app/controllers/alchemy/attachments_controller.rb +2 -0
- data/app/controllers/alchemy/base_controller.rb +4 -5
- data/app/controllers/concerns/alchemy/admin/uploader_responses.rb +1 -1
- data/app/helpers/alchemy/admin/base_helper.rb +17 -8
- data/app/helpers/alchemy/admin/tags_helper.rb +31 -18
- data/app/helpers/alchemy/base_helper.rb +1 -1
- data/app/helpers/alchemy/pages_helper.rb +4 -7
- data/app/models/alchemy/attachment.rb +4 -0
- data/app/models/alchemy/cell.rb +1 -1
- data/app/models/alchemy/element.rb +6 -12
- data/app/models/alchemy/element/definitions.rb +2 -2
- data/app/models/alchemy/element/element_contents.rb +1 -1
- data/app/models/alchemy/essence_picture_view.rb +14 -2
- data/app/models/alchemy/language.rb +4 -4
- data/app/models/alchemy/page.rb +25 -28
- data/app/models/alchemy/page/page_elements.rb +1 -1
- data/app/models/alchemy/page/page_natures.rb +1 -1
- data/app/models/alchemy/picture.rb +5 -1
- data/app/models/alchemy/site.rb +27 -12
- data/app/views/alchemy/admin/attachments/_tag_list.html.erb +14 -13
- data/app/views/alchemy/admin/dashboard/info.html.erb +1 -1
- data/app/views/alchemy/admin/layoutpages/edit.html.erb +1 -1
- data/app/views/alchemy/admin/pages/_create_language_form.html.erb +1 -1
- data/app/views/alchemy/admin/pages/_form.html.erb +1 -1
- data/app/views/alchemy/admin/pages/_new_page_form.html.erb +1 -1
- data/app/views/alchemy/admin/pages/_page.html.erb +1 -1
- data/app/views/alchemy/admin/pages/_sitemap.html.erb +2 -2
- data/app/views/alchemy/admin/pages/configure_external.html.erb +1 -1
- data/app/views/alchemy/admin/pages/index.html.erb +5 -7
- data/app/views/alchemy/admin/pages/sort.html.erb +19 -0
- data/app/views/alchemy/admin/pages/update.js.erb +1 -1
- data/app/views/alchemy/admin/pictures/_archive.html.erb +19 -19
- data/app/views/alchemy/admin/pictures/_tag_list.html.erb +3 -4
- data/app/views/alchemy/admin/resources/_tag_list.html.erb +3 -4
- data/app/views/alchemy/admin/resources/edit.html.erb +1 -1
- data/app/views/alchemy/admin/resources/new.html.erb +1 -1
- data/app/views/alchemy/pages/_meta_data.html.erb +1 -1
- data/app/views/alchemy/pages/show.rss.builder +0 -2
- data/app/views/alchemy/welcome.html.erb +1 -1
- data/app/views/layouts/alchemy/admin.html.erb +1 -1
- data/config/locales/alchemy.de.yml +4 -4
- data/config/locales/alchemy.en.yml +4 -4
- data/config/locales/alchemy.es.yml +3 -3
- data/config/locales/alchemy.fr.yml +4 -4
- data/config/locales/alchemy.it.yml +3 -3
- data/config/locales/alchemy.nl.yml +4 -4
- data/config/locales/alchemy.ru.yml +3 -3
- data/lib/alchemy/auth_accessors.rb +6 -6
- data/lib/alchemy/cache_digests/template_tracker.rb +5 -5
- data/lib/alchemy/controller_actions.rb +1 -6
- data/lib/alchemy/engine.rb +0 -53
- data/lib/alchemy/errors.rb +12 -3
- data/lib/alchemy/i18n.rb +1 -1
- data/lib/alchemy/logger.rb +1 -1
- data/lib/alchemy/page_layout.rb +5 -5
- data/lib/alchemy/seeder.rb +16 -49
- data/lib/alchemy/tasks/helpers.rb +1 -1
- data/lib/alchemy/test_support/config_stubbing.rb +28 -0
- data/lib/alchemy/test_support/essence_shared_examples.rb +6 -6
- data/lib/alchemy/test_support/factories/language_factory.rb +1 -1
- data/lib/alchemy/test_support/factories/page_factory.rb +7 -0
- data/lib/alchemy/test_support/factories/site_factory.rb +6 -0
- data/lib/alchemy/test_support/shared_contexts.rb +14 -0
- data/lib/alchemy/test_support/shared_uploader_examples.rb +10 -0
- data/lib/alchemy/touching.rb +1 -1
- data/lib/alchemy/version.rb +1 -1
- data/lib/alchemy_cms.rb +56 -1
- data/lib/{alchemy/kaminari → kaminari}/scoped_pagination_url_helper.rb +0 -0
- data/lib/rails/generators/alchemy/base.rb +1 -1
- data/lib/rails/generators/alchemy/elements/elements_generator.rb +2 -1
- data/lib/rails/generators/alchemy/page_layouts/page_layouts_generator.rb +2 -1
- data/lib/rails/generators/alchemy/site_layouts/site_layouts_generator.rb +2 -1
- data/lib/tasks/alchemy/tidy.rake +91 -89
- data/lib/tasks/alchemy/upgrade.rake +15 -15
- metadata +29 -14
- data/app/assets/javascripts/alchemy/alchemy.spinner.js.coffee +0 -49
- data/app/views/alchemy/admin/pages/sort.js.erb +0 -4
- data/vendor/assets/javascripts/handlebars.js +0 -4608
- data/vendor/assets/javascripts/spin.min.js +0 -1
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
<% p = params.dup %>
|
|
2
1
|
<% if Alchemy::Picture.tag_counts.any? %>
|
|
3
2
|
<h2><%= Alchemy.t("Filter by tag") %></h2>
|
|
4
3
|
<%= js_filter_field '.tag-list li' %>
|
|
5
4
|
<ul>
|
|
6
|
-
<%= render_tag_list('Alchemy::Picture'
|
|
5
|
+
<%= render_tag_list('Alchemy::Picture') %>
|
|
7
6
|
</ul>
|
|
8
|
-
<% if
|
|
7
|
+
<% if params[:tagged_with].present? %>
|
|
9
8
|
<%= link_to(
|
|
10
9
|
render_icon('delete-small') + Alchemy.t('Remove tag filter'),
|
|
11
|
-
url_for(
|
|
10
|
+
url_for(tag_list_params.delete_if { |k, v| k == "tagged_with" }.merge(action: 'index')),
|
|
12
11
|
remote: request.xhr?,
|
|
13
12
|
class: 'button small with_icon please_wait'
|
|
14
13
|
) %>
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
<div class="<%= params[:tagged_with].present? ? 'tag-list filtered' : 'tag-list' %>">
|
|
2
|
-
<% p = params.dup %>
|
|
3
2
|
<h2><%= Alchemy.t("Filter by tag") %></h2>
|
|
4
3
|
<%= js_filter_field '.tag-list li' %>
|
|
5
4
|
<ul>
|
|
6
|
-
<%= render_tag_list(resource_model.name
|
|
5
|
+
<%= render_tag_list(resource_model.name) %>
|
|
7
6
|
</ul>
|
|
8
|
-
<% if
|
|
7
|
+
<% if params[:tagged_with].present? %>
|
|
9
8
|
<%= link_to(
|
|
10
9
|
render_icon('delete-small') + Alchemy.t('Remove tag filter'),
|
|
11
|
-
url_for(
|
|
10
|
+
url_for(tag_list_params.delete_if { |k, v| k == "tagged_with" }.merge(action: 'index')),
|
|
12
11
|
remote: request.xhr?,
|
|
13
12
|
class: 'button small with_icon please_wait'
|
|
14
13
|
) %>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<%= render
|
|
1
|
+
<%= render 'form' %>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<%= render
|
|
1
|
+
<%= render 'form' %>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<% if @page %>
|
|
2
|
-
<meta charset="
|
|
2
|
+
<meta charset="utf-8">
|
|
3
3
|
<title><%= page_title prefix: local_assigns.fetch(:title_prefix, nil), separator: local_assigns.fetch(:title_separator, nil) %></title>
|
|
4
4
|
<%= tag(:meta, name: 'created', content: @page.updated_at) %>
|
|
5
5
|
<%= tag(:meta, name: 'robots', content: meta_robots) %>
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
<body>
|
|
13
13
|
<div class="container">
|
|
14
14
|
<%= image_tag 'alchemy/alchemy-logo.svg' %>
|
|
15
|
-
<h3>You have
|
|
15
|
+
<h3>You have successfully installed AlchemyCMS!</h3>
|
|
16
16
|
<p>
|
|
17
17
|
Thank you for using Alchemy. We hope you enjoy using it as much as we do.
|
|
18
18
|
</p>
|
|
@@ -99,7 +99,7 @@ de:
|
|
|
99
99
|
message: 'Nachricht'
|
|
100
100
|
send: 'absenden'
|
|
101
101
|
mandatory_fields: '*Pflichtfelder. Bitte füllen Sie diese Felder aus.'
|
|
102
|
-
# The flash message shown after
|
|
102
|
+
# The flash message shown after successfully sending the message.
|
|
103
103
|
messages:
|
|
104
104
|
success: 'Ihre Nachricht wurde erfolgreich übermittelt.'
|
|
105
105
|
|
|
@@ -589,9 +589,9 @@ de:
|
|
|
589
589
|
"Edit": "Bearbeiten"
|
|
590
590
|
"Delete": "Löschen"
|
|
591
591
|
"Show error details": Fehlerdetails anzeigen
|
|
592
|
-
"
|
|
593
|
-
"
|
|
594
|
-
"
|
|
592
|
+
"Successfully created": "Erfolgreich erstellt"
|
|
593
|
+
"Successfully updated": "Erfolgreich aktualisiert"
|
|
594
|
+
"Successfully removed": "Erfolgreich gelöscht"
|
|
595
595
|
"Nothing found": "Keine Einträge gefunden."
|
|
596
596
|
complete: 'Abgeschlossen'
|
|
597
597
|
"Update available": 'Es ist ein Update verfügbar'
|
|
@@ -554,7 +554,7 @@ en:
|
|
|
554
554
|
uploader:
|
|
555
555
|
alchemy/attachment:
|
|
556
556
|
button_label: Upload file(s)
|
|
557
|
-
upload_success: "File %{name}
|
|
557
|
+
upload_success: "File %{name} successfully uploaded"
|
|
558
558
|
upload_failure: "File %{name} upload error: %{error}"
|
|
559
559
|
alchemy/picture:
|
|
560
560
|
button_label: Upload image(s)
|
|
@@ -582,9 +582,9 @@ en:
|
|
|
582
582
|
"Create": "Create"
|
|
583
583
|
"Edit": "Edit"
|
|
584
584
|
"Delete": "Delete"
|
|
585
|
-
"
|
|
586
|
-
"
|
|
587
|
-
"
|
|
585
|
+
"Successfully created": "Successfully created"
|
|
586
|
+
"Successfully updated": "Successfully updated"
|
|
587
|
+
"Successfully removed": "Successfully removed"
|
|
588
588
|
"Nothing found": "Nothing found."
|
|
589
589
|
complete: 'Abgeschlossen'
|
|
590
590
|
"Update available": 'Update available'
|
|
@@ -583,9 +583,9 @@ es:
|
|
|
583
583
|
"Create": "Crear"
|
|
584
584
|
"Edit": "Editar"
|
|
585
585
|
"Delete": "Eliminar"
|
|
586
|
-
"
|
|
587
|
-
"
|
|
588
|
-
"
|
|
586
|
+
"Successfully created": "Creado correctamente"
|
|
587
|
+
"Successfully updated": "Actualizado correctamente"
|
|
588
|
+
"Successfully removed": "Eliminado correctamente"
|
|
589
589
|
"Nothing found": "No se encontró nada."
|
|
590
590
|
complete: 'Completado'
|
|
591
591
|
"Update available": 'Actualización disponible'
|
|
@@ -114,7 +114,7 @@ fr:
|
|
|
114
114
|
message: 'Message'
|
|
115
115
|
send: 'envoyer'
|
|
116
116
|
mandatory_fields: "*Obligatoire. S'il vous plaît remplir ces champs."
|
|
117
|
-
# The flash message shown after
|
|
117
|
+
# The flash message shown after successfully sending the message.
|
|
118
118
|
messages:
|
|
119
119
|
success: 'Votre message a été envoyé avec succès.'
|
|
120
120
|
|
|
@@ -602,9 +602,9 @@ fr:
|
|
|
602
602
|
"Create": "ajouter"
|
|
603
603
|
"Edit": "Modifier"
|
|
604
604
|
"Delete": "supprimer"
|
|
605
|
-
"
|
|
606
|
-
"
|
|
607
|
-
"
|
|
605
|
+
"Successfully created": "créé avec succès"
|
|
606
|
+
"Successfully updated": "correctement mis à jour"
|
|
607
|
+
"Successfully removed": "supprimé avec succès"
|
|
608
608
|
"Nothing found": "Aucun article trouvé."
|
|
609
609
|
"Now drop the files": "Lacher les fichiers maintenant"
|
|
610
610
|
"Queued x files": "x Fichiers dans la file d'attente."
|
|
@@ -582,9 +582,9 @@ it:
|
|
|
582
582
|
"Create": "Crea"
|
|
583
583
|
"Edit": "Modifica"
|
|
584
584
|
"Delete": "Elimina"
|
|
585
|
-
"
|
|
586
|
-
"
|
|
587
|
-
"
|
|
585
|
+
"Successfully created": "Creato con successo"
|
|
586
|
+
"Successfully updated": "Aggiornato con successo"
|
|
587
|
+
"Successfully removed": "Rimosso con successo"
|
|
588
588
|
"Nothing found": "Non è stato trovato nulla."
|
|
589
589
|
complete: 'Completato'
|
|
590
590
|
"Update available": 'Aggiornamento disponibile'
|
|
@@ -99,7 +99,7 @@ nl:
|
|
|
99
99
|
message: 'Bericht'
|
|
100
100
|
send: 'Verzenden'
|
|
101
101
|
mandatory_fields: '*Verplichte velden.'
|
|
102
|
-
# The flash message shown after
|
|
102
|
+
# The flash message shown after successfully sending the message.
|
|
103
103
|
messages:
|
|
104
104
|
success: 'Het bericht is verzonden.'
|
|
105
105
|
|
|
@@ -576,9 +576,9 @@ nl:
|
|
|
576
576
|
"Create": "Aanmaken"
|
|
577
577
|
"Edit": "Aanpassen"
|
|
578
578
|
"Delete": "Verwijderen"
|
|
579
|
-
"
|
|
580
|
-
"
|
|
581
|
-
"
|
|
579
|
+
"Successfully created": "Aangemaakt"
|
|
580
|
+
"Successfully updated": "Aangepast"
|
|
581
|
+
"Successfully removed": "Verwijderd"
|
|
582
582
|
"Nothing found": "Niets gevonden"
|
|
583
583
|
complete: 'Compleet'
|
|
584
584
|
"Update available": "Er is een update verkrijgbaar"
|
|
@@ -578,9 +578,9 @@ ru:
|
|
|
578
578
|
"Create": "Создать"
|
|
579
579
|
"Edit": "Редактировать"
|
|
580
580
|
"Delete": "Удалить"
|
|
581
|
-
"
|
|
582
|
-
"
|
|
583
|
-
"
|
|
581
|
+
"Successfully created": "Успешно создано"
|
|
582
|
+
"Successfully updated": "Успешно обновлено"
|
|
583
|
+
"Successfully removed": "Успешно удалено"
|
|
584
584
|
"Nothing found": "Ничег не найдено."
|
|
585
585
|
complete: 'Завершить'
|
|
586
586
|
"Update available": 'Доступно обновление'
|
|
@@ -71,15 +71,15 @@ module Alchemy
|
|
|
71
71
|
end
|
|
72
72
|
rescue NameError => e
|
|
73
73
|
if e.message =~ /#{Regexp.escape(@@user_class_name)}/
|
|
74
|
-
abort <<-MSG
|
|
74
|
+
abort <<-MSG.strip_heredoc
|
|
75
75
|
|
|
76
|
-
AlchemyCMS cannot find any user class!
|
|
76
|
+
AlchemyCMS cannot find any user class!
|
|
77
77
|
|
|
78
|
-
Please add a user class and tell Alchemy about it or, if you don't want
|
|
79
|
-
to create your own class, add the `alchemy-devise` gem to your Gemfile.
|
|
78
|
+
Please add a user class and tell Alchemy about it or, if you don't want
|
|
79
|
+
to create your own class, add the `alchemy-devise` gem to your Gemfile.
|
|
80
80
|
|
|
81
|
-
gem 'alchemy-devise', '~> 2.1.0'
|
|
82
|
-
MSG
|
|
81
|
+
gem 'alchemy-devise', '~> 2.1.0'
|
|
82
|
+
MSG
|
|
83
83
|
else
|
|
84
84
|
raise e
|
|
85
85
|
end
|
|
@@ -12,20 +12,20 @@ module Alchemy
|
|
|
12
12
|
def dependencies
|
|
13
13
|
case @name.to_s
|
|
14
14
|
when /^alchemy\/pages\/show/
|
|
15
|
-
|
|
15
|
+
PageLayout.all.collect { |p| "alchemy/page_layouts/_#{p['name']}" }
|
|
16
16
|
when /^alchemy\/page_layouts\/_(.+)/
|
|
17
17
|
page_layout = page_layout($1)
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
element_templates(page_layout) +
|
|
19
|
+
page_layout.fetch('cells', []).map { |name| "alchemy/cells/_#{name}" }
|
|
20
20
|
when /^alchemy\/cells\/_(.+)/
|
|
21
|
-
|
|
21
|
+
element_templates cell_definition($1)
|
|
22
22
|
when /alchemy\/elements\/_(.+)_view/
|
|
23
23
|
essences = essence_types($1)
|
|
24
24
|
element = element_definition($1)
|
|
25
25
|
if element && element['picture_gallery']
|
|
26
26
|
essences += ['EssencePicture']
|
|
27
27
|
end
|
|
28
|
-
|
|
28
|
+
essences.map { |name| "alchemy/essences/_#{name.underscore}_view" }.uniq
|
|
29
29
|
else
|
|
30
30
|
ActionView::DependencyTracker::ERBTracker.call(@name, @template)
|
|
31
31
|
end
|
|
@@ -65,7 +65,7 @@ module Alchemy
|
|
|
65
65
|
# find the best language and remember it for later
|
|
66
66
|
@language = load_alchemy_language_from_params ||
|
|
67
67
|
load_alchemy_language_from_session ||
|
|
68
|
-
|
|
68
|
+
Language.default
|
|
69
69
|
end
|
|
70
70
|
store_current_alchemy_language(@language)
|
|
71
71
|
end
|
|
@@ -89,11 +89,6 @@ module Alchemy
|
|
|
89
89
|
Language.find_by_code(id_or_code)
|
|
90
90
|
end
|
|
91
91
|
|
|
92
|
-
# Load the default language from current site.
|
|
93
|
-
def load_default_alchemy_language
|
|
94
|
-
Language.default || raise(DefaultLanguageNotFoundError)
|
|
95
|
-
end
|
|
96
|
-
|
|
97
92
|
# Stores language's id in the session.
|
|
98
93
|
#
|
|
99
94
|
# Also stores language in +Language.current+
|
data/lib/alchemy/engine.rb
CHANGED
|
@@ -1,56 +1,3 @@
|
|
|
1
|
-
# Require globally used external libraries
|
|
2
|
-
require 'acts_as_list'
|
|
3
|
-
require 'acts-as-taggable-on'
|
|
4
|
-
require 'action_view/dependency_tracker'
|
|
5
|
-
require 'active_model_serializers'
|
|
6
|
-
require 'awesome_nested_set'
|
|
7
|
-
require 'bourbon'
|
|
8
|
-
require 'cancan'
|
|
9
|
-
require 'dragonfly'
|
|
10
|
-
require 'jquery-rails'
|
|
11
|
-
require 'jquery-ui-rails'
|
|
12
|
-
require 'kaminari'
|
|
13
|
-
require 'non-stupid-digest-assets'
|
|
14
|
-
require 'ransack'
|
|
15
|
-
require 'request_store'
|
|
16
|
-
require 'responders'
|
|
17
|
-
require 'simple_form'
|
|
18
|
-
require 'select2-rails'
|
|
19
|
-
require 'turbolinks'
|
|
20
|
-
require 'userstamp'
|
|
21
|
-
|
|
22
|
-
# Require globally used Alchemy mixins
|
|
23
|
-
require_relative './ability_helper'
|
|
24
|
-
require_relative './admin/locale'
|
|
25
|
-
require_relative './auth_accessors'
|
|
26
|
-
require_relative './cache_digests/template_tracker'
|
|
27
|
-
require_relative './config'
|
|
28
|
-
require_relative './configuration_methods'
|
|
29
|
-
require_relative './controller_actions'
|
|
30
|
-
require_relative './errors'
|
|
31
|
-
require_relative './essence'
|
|
32
|
-
require_relative './filetypes'
|
|
33
|
-
require_relative './forms/builder'
|
|
34
|
-
require_relative './hints'
|
|
35
|
-
require_relative './i18n'
|
|
36
|
-
require_relative './logger'
|
|
37
|
-
require_relative './modules'
|
|
38
|
-
require_relative './name_conversions'
|
|
39
|
-
require_relative './on_page_layout'
|
|
40
|
-
require_relative './on_page_layout/callbacks_runner'
|
|
41
|
-
require_relative './page_layout'
|
|
42
|
-
require_relative './paths'
|
|
43
|
-
require_relative './permissions'
|
|
44
|
-
require_relative './picture_attributes'
|
|
45
|
-
require_relative './sass_support'
|
|
46
|
-
require_relative './ssl_protection'
|
|
47
|
-
require_relative './resource'
|
|
48
|
-
require_relative './tinymce'
|
|
49
|
-
require_relative './touching'
|
|
50
|
-
|
|
51
|
-
# Require hacks
|
|
52
|
-
require_relative './kaminari/scoped_pagination_url_helper'
|
|
53
|
-
|
|
54
1
|
module Alchemy
|
|
55
2
|
class Engine < Rails::Engine
|
|
56
3
|
isolate_namespace Alchemy
|
data/lib/alchemy/errors.rb
CHANGED
|
@@ -10,9 +10,18 @@ module Alchemy
|
|
|
10
10
|
end
|
|
11
11
|
|
|
12
12
|
class DefaultLanguageNotFoundError < StandardError
|
|
13
|
-
# Raised if no default language can be found.
|
|
13
|
+
# Raised if no default language configuration can be found.
|
|
14
14
|
def message
|
|
15
|
-
"No default language found!
|
|
15
|
+
"No default language configuration found!" \
|
|
16
|
+
" Please ensure that you have a 'default_language' defined in Alchemy configuration file."
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
class DefaultSiteNotFoundError < StandardError
|
|
21
|
+
# Raised if no default site configuration can be found.
|
|
22
|
+
def message
|
|
23
|
+
"No default site configuration found!" \
|
|
24
|
+
" Please ensure that you have a 'default_site' defined in Alchemy configuration file."
|
|
16
25
|
end
|
|
17
26
|
end
|
|
18
27
|
|
|
@@ -66,7 +75,7 @@ module Alchemy
|
|
|
66
75
|
class TinymceError < StandardError; end
|
|
67
76
|
|
|
68
77
|
class UpdateServiceUnavailable < StandardError
|
|
69
|
-
# Raised
|
|
78
|
+
# Raised if no successful connection to GitHub was possible
|
|
70
79
|
def message
|
|
71
80
|
"The update service is temporarily unavailable!"
|
|
72
81
|
end
|
data/lib/alchemy/i18n.rb
CHANGED
data/lib/alchemy/logger.rb
CHANGED
data/lib/alchemy/page_layout.rb
CHANGED
|
@@ -35,7 +35,7 @@ module Alchemy
|
|
|
35
35
|
#
|
|
36
36
|
def get(name)
|
|
37
37
|
return {} if name.blank?
|
|
38
|
-
all.detect { |a| a['name'].casecmp(name)
|
|
38
|
+
all.detect { |a| a['name'].casecmp(name).zero? }
|
|
39
39
|
end
|
|
40
40
|
|
|
41
41
|
def get_all_by_attributes(attributes)
|
|
@@ -44,7 +44,7 @@ module Alchemy
|
|
|
44
44
|
if attributes.is_a? Hash
|
|
45
45
|
layouts = []
|
|
46
46
|
attributes.stringify_keys.each do |key, value|
|
|
47
|
-
result = all.select { |l| l.key?(key) && l[key].to_s.casecmp(value.to_s)
|
|
47
|
+
result = all.select { |l| l.key?(key) && l[key].to_s.casecmp(value.to_s).zero? }
|
|
48
48
|
layouts += result unless result.empty?
|
|
49
49
|
end
|
|
50
50
|
layouts
|
|
@@ -56,7 +56,7 @@ module Alchemy
|
|
|
56
56
|
# Returns page layouts ready for Rails' select form helper.
|
|
57
57
|
#
|
|
58
58
|
def layouts_for_select(language_id, only_layoutpages = false)
|
|
59
|
-
@map_array = [
|
|
59
|
+
@map_array = []
|
|
60
60
|
mapped_layouts_for_select(selectable_layouts(language_id, only_layoutpages))
|
|
61
61
|
end
|
|
62
62
|
|
|
@@ -99,7 +99,7 @@ module Alchemy
|
|
|
99
99
|
definition.fetch('elements', [])
|
|
100
100
|
else
|
|
101
101
|
Rails.logger.warn "\n+++ Warning: No layout definition for #{page_layout} found! in page_layouts.yml\n"
|
|
102
|
-
|
|
102
|
+
[]
|
|
103
103
|
end
|
|
104
104
|
end
|
|
105
105
|
|
|
@@ -157,7 +157,7 @@ module Alchemy
|
|
|
157
157
|
#
|
|
158
158
|
def read_definitions_file
|
|
159
159
|
if File.exist?(layouts_file_path)
|
|
160
|
-
YAML.
|
|
160
|
+
YAML.safe_load(ERB.new(File.read(layouts_file_path)).result, [Date], [], true) || []
|
|
161
161
|
else
|
|
162
162
|
raise LoadError, "Could not find page_layouts.yml file! Please run `rails generate alchemy:scaffold`"
|
|
163
163
|
end
|
data/lib/alchemy/seeder.rb
CHANGED
|
@@ -1,62 +1,33 @@
|
|
|
1
1
|
require "alchemy/shell"
|
|
2
2
|
|
|
3
3
|
module Alchemy
|
|
4
|
+
# This seeder builds Alchemy pages in your database.
|
|
5
|
+
#
|
|
6
|
+
# Create a +db/seeds/alchemy/pages.yml+ and +db/seeds/alchemy/users.yml+ files
|
|
7
|
+
# and put +Alchemy::Seeder.seed!+ into your +db/seeds.rb+ file.
|
|
8
|
+
#
|
|
9
|
+
# Then run +rake db:seed+
|
|
10
|
+
#
|
|
4
11
|
class Seeder
|
|
5
12
|
extend Alchemy::Shell
|
|
6
13
|
|
|
7
14
|
class << self
|
|
8
|
-
#
|
|
9
|
-
#
|
|
10
|
-
# Call this from your +db/seeds.rb+ file with the `rake db:seed task'.
|
|
15
|
+
# Put +Alchemy::Seeder.seed!+ into your +db/seeds.rb+ file and run +rake db:seed+.
|
|
11
16
|
#
|
|
12
17
|
def seed!
|
|
13
|
-
|
|
14
|
-
if create_root_page
|
|
15
|
-
try_seed_pages
|
|
16
|
-
elsif page_seeds_file.file?
|
|
17
|
-
desc "Seeding Alchemy pages"
|
|
18
|
-
log "There are already pages present in your database. " \
|
|
19
|
-
"Please use `rake db:reset' if you want to rebuild your database.", :skip
|
|
20
|
-
end
|
|
18
|
+
try_seed_pages
|
|
21
19
|
seed_users if user_seeds_file.file?
|
|
22
20
|
end
|
|
23
21
|
|
|
24
22
|
protected
|
|
25
23
|
|
|
26
|
-
def create_default_site
|
|
27
|
-
desc "Creating default Alchemy site"
|
|
28
|
-
if Alchemy::Site.count == 0
|
|
29
|
-
site = Alchemy::Site.new(
|
|
30
|
-
name: site_config['name'],
|
|
31
|
-
host: site_config['host']
|
|
32
|
-
)
|
|
33
|
-
if Alchemy::Language.any?
|
|
34
|
-
site.languages = Alchemy::Language.all
|
|
35
|
-
end
|
|
36
|
-
site.save!
|
|
37
|
-
log "Created default Alchemy site with default language."
|
|
38
|
-
else
|
|
39
|
-
log "Default Alchemy site was already present.", :skip
|
|
40
|
-
end
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
def create_root_page
|
|
44
|
-
desc "Creating Alchemy root page"
|
|
45
|
-
root = Alchemy::Page.find_or_initialize_by(name: 'Root')
|
|
46
|
-
root.do_not_sweep = true
|
|
47
|
-
if root.new_record?
|
|
48
|
-
if root.save!
|
|
49
|
-
log "Created Alchemy root page."
|
|
50
|
-
return true
|
|
51
|
-
end
|
|
52
|
-
else
|
|
53
|
-
log "Alchemy root page was already present.", :skip
|
|
54
|
-
return false
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
|
|
58
24
|
def try_seed_pages
|
|
59
|
-
|
|
25
|
+
return unless page_seeds_file.file?
|
|
26
|
+
if Alchemy::Page.exists?
|
|
27
|
+
desc "Seeding Alchemy pages"
|
|
28
|
+
log "There are already pages present in your database. " \
|
|
29
|
+
"Please use `rake db:reset' if you want to rebuild your database.", :skip
|
|
30
|
+
else
|
|
60
31
|
seed_pages if contentpages.present?
|
|
61
32
|
seed_layoutpages if layoutpages.present?
|
|
62
33
|
end
|
|
@@ -107,10 +78,6 @@ module Alchemy
|
|
|
107
78
|
|
|
108
79
|
private
|
|
109
80
|
|
|
110
|
-
def site_config
|
|
111
|
-
@_site_config ||= Alchemy::Config.get(:default_site)
|
|
112
|
-
end
|
|
113
|
-
|
|
114
81
|
def page_seeds_file
|
|
115
82
|
@_page_seeds_file ||= Rails.root.join('db', 'seeds', 'alchemy', 'pages.yml')
|
|
116
83
|
end
|
|
@@ -120,7 +87,7 @@ module Alchemy
|
|
|
120
87
|
end
|
|
121
88
|
|
|
122
89
|
def contentpages
|
|
123
|
-
page_yml.
|
|
90
|
+
page_yml.reject { |p| p['layoutpage'] }
|
|
124
91
|
end
|
|
125
92
|
|
|
126
93
|
def layoutpages
|