udongo 6.3.2 → 6.4.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.
Files changed (61) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/backend/application.js +1 -0
  3. data/app/assets/javascripts/backend/general.js +6 -0
  4. data/app/assets/stylesheets/backend/application.scss +1 -0
  5. data/app/assets/stylesheets/backend/base/_general.scss +7 -0
  6. data/app/assets/stylesheets/backend/pages/_flexible_content.scss +0 -8
  7. data/app/assets/stylesheets/backend/udongo.scss +2 -0
  8. data/app/controllers/backend/content/rows/columns_controller.rb +1 -9
  9. data/app/controllers/backend/content/rows/slideshows_controller.rb +11 -0
  10. data/app/controllers/backend/content/rows_controller.rb +16 -0
  11. data/app/controllers/backend/forms/fields_controller.rb +3 -1
  12. data/app/controllers/backend/image_collections/base_controller.rb +11 -0
  13. data/app/controllers/backend/image_collections/images_controller.rb +15 -0
  14. data/app/controllers/backend/image_collections_controller.rb +50 -0
  15. data/app/controllers/concerns/backend/content_type_controller.rb +1 -10
  16. data/app/decorators/content_slideshow_decorator.rb +3 -0
  17. data/app/models/content_slideshow.rb +9 -0
  18. data/app/models/image_collection.rb +9 -0
  19. data/app/views/backend/content/_form.html.erb +1 -1
  20. data/app/views/backend/content/_rows.html.erb +11 -7
  21. data/app/views/backend/content/_slideshow.html.erb +6 -0
  22. data/app/views/backend/content/rows/columns/edit.html.erb +6 -14
  23. data/app/views/backend/content/rows/columns/new.html.erb +6 -14
  24. data/app/views/backend/content/rows/edit.html.erb +31 -0
  25. data/app/views/backend/content/rows/forms/edit.html.erb +4 -12
  26. data/app/views/backend/content/rows/images/edit.html.erb +12 -20
  27. data/app/views/backend/content/rows/pictures/edit.html.erb +7 -15
  28. data/app/views/backend/content/rows/pictures/link_or_upload.html.erb +12 -20
  29. data/app/views/backend/content/rows/slideshows/edit.html.erb +17 -0
  30. data/app/views/backend/content/rows/texts/edit.html.erb +2 -10
  31. data/app/views/backend/content/rows/videos/edit.html.erb +5 -6
  32. data/app/views/backend/forms/fields/_form.html.erb +1 -0
  33. data/app/views/backend/image_collections/_form.html.erb +19 -0
  34. data/app/views/backend/image_collections/_tabs.html.erb +18 -0
  35. data/app/views/backend/image_collections/edit.html.erb +6 -0
  36. data/app/views/backend/image_collections/images/index.html.erb +43 -0
  37. data/app/views/backend/image_collections/index.html.erb +30 -0
  38. data/app/views/backend/image_collections/new.html.erb +5 -0
  39. data/app/views/backend/lightbox_saved.html.erb +3 -0
  40. data/app/views/layouts/backend/_top_navigation.html.erb +1 -0
  41. data/app/views/layouts/backend/lightbox.html.erb +5 -3
  42. data/changelog.md +13 -0
  43. data/config/locales/en_backend.yml +5 -6
  44. data/config/locales/en_forms.yml +14 -0
  45. data/config/locales/nl_backend.yml +7 -6
  46. data/config/locales/nl_forms.yml +13 -0
  47. data/config/routes.rb +7 -1
  48. data/db/migrate/20170615113617_create_asset_collections.rb +12 -0
  49. data/db/migrate/20170615120716_rename_asset_collection_to_image_collection.rb +5 -0
  50. data/db/migrate/20170615131909_create_content_slideshows.rb +11 -0
  51. data/db/migrate/20170615184855_add_content_row_margin_padding_and_bg_color.rb +9 -0
  52. data/db/migrate/20170616114757_add_external_ref_to_form_field.rb +6 -0
  53. data/lib/udongo/bogus_model.rb +34 -0
  54. data/lib/udongo/configs/flexible_content.rb +1 -1
  55. data/lib/udongo/search/result_objects/base.rb +1 -1
  56. data/lib/udongo/version.rb +1 -1
  57. data/spec/factories/content_slideshows.rb +5 -0
  58. data/spec/factories/image_collections.rb +6 -0
  59. data/vendor/assets/javascripts/backend/lity.js +637 -0
  60. data/vendor/assets/stylesheets/backend/lity.scss +200 -0
  61. metadata +30 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9cdf12054d6d8972e4bde7c95678ee6f9f741eca
4
- data.tar.gz: 60853bda10fb1c8095eecae3b721bd5602a94fa3
3
+ metadata.gz: 3b5b3b1a404230641c9fca147994774185e156ad
4
+ data.tar.gz: af7318f3a5bf2061fcf1a815600d8ba127513571
5
5
  SHA512:
6
- metadata.gz: c018dd10a9e3bb83cba4c09c3f5825ce63b5a5ee78aed48ec0f9d1543caf0378e4de6460e30a5759c5a78a891475bc33bce3702a4f551538a641e5d2fb9c5c6e
7
- data.tar.gz: a9db01cda86bf9b309f3ff5a4220317292a9e34b37e080530d60253b331d2070e0320b97327d079c102cb6a531478d4ecc467bdeb86b3adb3aff389c8443804a
6
+ metadata.gz: 2eabef60a87981eae7cb4e62635d350b1977aaf47a3840dd960042b144f00235990eef0f74bc905980c08baf20e7a52d36b7d5074457aff571df2ce85debc25c
7
+ data.tar.gz: efb9507168f2d96cb4b1e547f489b66be1f2768d12edccf79afbe087e66a1d2c8984a06f74343e369891ba798e46c12cd5fca15d4d4397e67889da489c3c5cdf
@@ -25,3 +25,4 @@
25
25
  //= require backend/bootstrap-datepicker.min
26
26
  //= require backend/datepickers
27
27
  //= require backend/select2.min
28
+ //= require backend/lity
@@ -2,6 +2,12 @@ var general = general || {
2
2
  init: function() {
3
3
  $('form:not(.no-focus) input:visible:not(.no-focus):first').focus();
4
4
  $('[data-toggle="tooltip"]').tooltip();
5
+ $('[href="#lity-close"]').on('click', this.lity_close_click_listener);
6
+ },
7
+
8
+ lity_close_click_listener: function(e) {
9
+ e.preventDefault();
10
+ $(parent.window.document).find('[data-lity-close=""]').trigger('click');
5
11
  }
6
12
  };
7
13
 
@@ -18,5 +18,6 @@
18
18
  @import 'bootstrap';
19
19
  @import 'backend/bootstrap-datepicker';
20
20
  @import 'backend/select2.min';
21
+ @import 'backend/lity';
21
22
  @import 'udongo';
22
23
  @import 'custom';
@@ -0,0 +1,7 @@
1
+ .lightbox {
2
+ margin-top: 1rem;
3
+ }
4
+
5
+ .img-fluid {
6
+ margin-bottom: 1rem;
7
+ }
@@ -62,11 +62,3 @@
62
62
  padding: 25px;
63
63
  }
64
64
  }
65
-
66
- .lightbox {
67
- margin-top: 35px;
68
- }
69
-
70
- .img-fluid {
71
- margin-bottom: 1rem;
72
- }
@@ -1,6 +1,8 @@
1
1
  @charset "utf-8";
2
2
 
3
3
  // Base
4
+ @import 'base/general';
5
+
4
6
  // fonts
5
7
  @import 'font-awesome';
6
8
 
@@ -7,7 +7,6 @@ class Backend::Content::Rows::ColumnsController < Backend::BaseController
7
7
 
8
8
  def new
9
9
  @column = @row.columns.new(@row.column_width_calculator.hashed_values)
10
- cancel_url
11
10
  end
12
11
 
13
12
  def create
@@ -25,7 +24,7 @@ class Backend::Content::Rows::ColumnsController < Backend::BaseController
25
24
 
26
25
  def update
27
26
  if @column.update_attributes allowed_params
28
- redirect_to cancel_url
27
+ render 'backend/lightbox_saved'
29
28
  else
30
29
  render :edit
31
30
  end
@@ -57,11 +56,4 @@ class Backend::Content::Rows::ColumnsController < Backend::BaseController
57
56
  def redirect_to_edit(column)
58
57
  redirect_to send("edit_backend_content_#{column.content.decorate.content_type}_path", column.content)
59
58
  end
60
-
61
- def cancel_url
62
- instance = @row.rowable
63
- path = "edit_translation_backend_#{instance.class.to_s.downcase}_path"
64
- send(path, instance, @row.locale, anchor: "content-row-#{@row.id}")
65
- end
66
- helper_method :cancel_url
67
59
  end
@@ -0,0 +1,11 @@
1
+ class Backend::Content::Rows::SlideshowsController < Backend::BaseController
2
+ include Concerns::Backend::ContentTypeController
3
+
4
+ model ContentSlideshow
5
+ allowed_params :image_collection_id, :autoplay, :slide_interval
6
+
7
+ def image_collections
8
+ ImageCollection.order(:description).map { |c| [c.description, c.id] }
9
+ end
10
+ helper_method :image_collections
11
+ end
@@ -1,6 +1,7 @@
1
1
  class Backend::Content::RowsController < Backend::BaseController
2
2
  include Concerns::Backend::PositionableController
3
3
  before_action :find_model, except: [:new]
4
+ layout 'backend/lightbox'
4
5
 
5
6
  def new
6
7
  if params[:klass] && params[:id] && params[:locale]
@@ -13,6 +14,14 @@ class Backend::Content::RowsController < Backend::BaseController
13
14
  end
14
15
  end
15
16
 
17
+ def update
18
+ if @row.update_attributes allowed_params
19
+ render 'backend/lightbox_saved'
20
+ else
21
+ render :edit
22
+ end
23
+ end
24
+
16
25
  def horizontal_alignment
17
26
  align = params[:align].to_s
18
27
  align = 'left' unless %w(left center right).include?(align)
@@ -54,4 +63,11 @@ class Backend::Content::RowsController < Backend::BaseController
54
63
  anchor = "content-row-#{@row.id}" unless anchor.present?
55
64
  redirect_to content_path(@row.rowable, @row.locale, anchor)
56
65
  end
66
+
67
+ def allowed_params
68
+ params.require(:content_row).permit(
69
+ :background_color, :margin_top, :margin_bottom, :padding_top,
70
+ :padding_bottom
71
+ )
72
+ end
57
73
  end
@@ -42,7 +42,9 @@ class Backend::Forms::FieldsController < Backend::Forms::BaseController
42
42
  private
43
43
 
44
44
  def allowed_params
45
- params[:form_field].permit(:identifier, :field_type, :presence, :email)
45
+ params[:form_field].permit(
46
+ :identifier, :field_type, :presence, :email, :external_reference
47
+ )
46
48
  end
47
49
 
48
50
  def find_model
@@ -0,0 +1,11 @@
1
+ class Backend::ImageCollections::BaseController < Backend::BaseController
2
+ before_action :find_image_collection
3
+ before_action do
4
+ breadcrumb.add t('b.image_collections'), backend_image_collections_path
5
+ breadcrumb.add @image_collection.description, edit_backend_image_collection_path(@image_collection)
6
+ end
7
+
8
+ def find_image_collection
9
+ @image_collection = ImageCollection.find params[:image_collection_id]
10
+ end
11
+ end
@@ -0,0 +1,15 @@
1
+ class Backend::ImageCollections::ImagesController < Backend::ImageCollections::BaseController
2
+ include Concerns::Backend::PositionableController
3
+
4
+ before_action { breadcrumb.add t('b.images') }
5
+
6
+ def index
7
+ @images = @image_collection.images
8
+ end
9
+
10
+ private
11
+
12
+ def find_model
13
+ @model = @image_collection.images.find params[:id]
14
+ end
15
+ end
@@ -0,0 +1,50 @@
1
+ class Backend::ImageCollectionsController < Backend::BaseController
2
+ before_action :find_model, only: [:show, :edit, :update, :destroy]
3
+ before_action -> { breadcrumb.add t('b.image_collections'), backend_image_collections_path }
4
+
5
+ def index
6
+ @image_collections = ImageCollection.order(:description)
7
+ end
8
+
9
+ def show
10
+ redirect_to edit_backend_image_collection_path(@model)
11
+ end
12
+
13
+ def new
14
+ @model = ImageCollection.new
15
+ end
16
+
17
+ def create
18
+ @model = ImageCollection.new(allowed_params)
19
+
20
+ if @model.save
21
+ redirect_to edit_backend_image_collection_path(@model),
22
+ notice: translate_notice(:added, :image_collection)
23
+ else
24
+ render :new
25
+ end
26
+ end
27
+
28
+ def update
29
+ if @model.update_attributes allowed_params
30
+ redirect_to backend_image_collections_path, notice: translate_notice(:edited, :image_collection)
31
+ else
32
+ render :edit
33
+ end
34
+ end
35
+
36
+ def destroy
37
+ @model.destroy
38
+ redirect_to backend_image_collections_path, notice: translate_notice(:deleted, :image_collection)
39
+ end
40
+
41
+ private
42
+
43
+ def find_model
44
+ @model = ImageCollection.find(params[:id])
45
+ end
46
+
47
+ def allowed_params
48
+ params[:image_collection].permit(:identifier, :description)
49
+ end
50
+ end
@@ -6,7 +6,6 @@ module Concerns
6
6
  included do
7
7
  layout 'backend/lightbox'
8
8
  before_action :find_model
9
- helper_method :content_path
10
9
  end
11
10
 
12
11
  module ClassMethods
@@ -25,17 +24,9 @@ module Concerns
25
24
  @model = model.find(params[:id]).decorate
26
25
  end
27
26
 
28
- def content_path
29
- column = @model.column
30
- path = "edit_translation_backend_#{column.row.rowable.class.to_s.downcase}_path"
31
- # TODO this needs to be the locale that you were editing, not the interface locale.
32
- # You can reproduce this by editing flexible content in NL when your interface is english.
33
- send(path, column.row.rowable, @model.column.row.locale, anchor: "content-row-#{column.row.id}")
34
- end
35
-
36
27
  def update
37
28
  if @model.update_attributes allowed_params
38
- redirect_to content_path
29
+ render 'backend/lightbox_saved'
39
30
  else
40
31
  render :edit
41
32
  end
@@ -0,0 +1,3 @@
1
+ class ContentSlideshowDecorator < ApplicationDecorator
2
+ delegate_all
3
+ end
@@ -0,0 +1,9 @@
1
+ class ContentSlideshow < ApplicationRecord
2
+ include Concerns::ContentType
3
+
4
+ belongs_to :image_collection
5
+
6
+ def content_type
7
+ :slideshow
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ class ImageCollection < ApplicationRecord
2
+ include Concerns::Imageable
3
+
4
+ include Concerns::Cacheable
5
+ cache_by :identifier
6
+
7
+ validates :description, presence: true
8
+ validates :identifier, uniqueness: { case_sensitive: false }, allow_blank: true
9
+ end
@@ -1,5 +1,5 @@
1
1
  <% if object.present? && object.form.present? %>
2
- <%= t 'b.form' %> &gt; <%= object.form.description %>
2
+ <strong><%= t 'b.form' %></strong> &gt; <%= object.form.description %>
3
3
  <% else %>
4
4
  <%= t 'b.msg.flexible_content.no_form_present' %>
5
5
  <% end %>
@@ -18,7 +18,7 @@
18
18
  <% end %>
19
19
 
20
20
  <% rows.decorate.each do |row| %>
21
- <div id="content-row-<%= row.id %>" class="card content-row" data-update-position="<%= update_position_backend_content_row_path(row) %>">
21
+ <div id="content-row-<%= row.id %>" class="card content-row" data-update-position="<%= update_position_backend_content_row_path(row) %>" style="background-color: <%= row.background_color %>">
22
22
  <div class="card-header handle">
23
23
  <div class="btn-group" role="group">
24
24
  <% klass = 'btn btn-secondary' %>
@@ -57,6 +57,10 @@
57
57
  <div class="btn-group" role="group">
58
58
  <%= link_to icon(:trash), backend_content_row_path(row), class: 'btn btn-secondary', title: t('b.delete'), method: :delete, data: { toggle: 'tooltip', placement: 'bottom', confirm: t('b.msg.confirm') } %>
59
59
  </div>
60
+
61
+ <div class="btn-group pull-right" role="group">
62
+ <%= link_to icon(:cog), edit_backend_content_row_path(row), class: 'btn btn-secondary', title: t('b.settings'), data: { toggle: 'tooltip', placement: 'bottom', lity: '' } %>
63
+ </div>
60
64
  </div>
61
65
 
62
66
  <div class="row content-columns card-block <%= row.classes.join(' ') %>">
@@ -74,9 +78,9 @@
74
78
  <div class="card-footer">
75
79
  <div class="btn-group" role="group">
76
80
  <% edit_link = send("edit_backend_content_#{content.content_type}_path", content) %>
77
- <%= link_to icon(:pencil_square_o), edit_link, class: 'btn btn-secondary btn-sm' %>
78
- <%= link_to icon(:trash), backend_content_row_column_path(row, column), class: 'btn btn-secondary btn-sm', method: :delete, data: { confirm: t('b.msg.confirm') } %>
79
- <%= link_to icon(:wrench), edit_backend_content_row_column_path(row, column), class: 'btn btn-secondary btn-sm' %>
81
+ <%= link_to icon(:pencil_square_o), edit_link, class: 'btn btn-secondary btn-sm', title: t('b.edit'), data: { toggle: 'tooltip', placement: 'bottom', lity: '' } %>
82
+ <%= link_to icon(:trash), backend_content_row_column_path(row, column), class: 'btn btn-secondary btn-sm', title: t('b.delete'), method: :delete, data: { toggle: 'tooltip', placement: 'bottom', confirm: t('b.msg.confirm') } %>
83
+ <%= link_to icon(:wrench), edit_backend_content_row_column_path(row, column), class: 'btn btn-secondary btn-sm', title: t('b.settings'), data: { toggle: 'tooltip', placement: 'bottom', lity: '' } %>
80
84
  </div>
81
85
  </div>
82
86
  </div>
@@ -85,10 +89,10 @@
85
89
 
86
90
  <% unless row.column_limit_reached? %>
87
91
  <% if row.columns.blank? %>
88
- <%= link_to icon(:plus, t('b.msg.flexible_content.add_column')), new_backend_content_row_column_path(row), class: 'btn btn-secondary btn-block' %>
92
+ <%= link_to icon(:plus, t('b.msg.flexible_content.add_column')), new_backend_content_row_column_path(row), class: 'btn btn-secondary btn-block', data: { lity: '' } %>
89
93
  <% else %>
90
- <%= link_to icon(:plus, t('b.msg.flexible_content.add_column')), new_backend_content_row_column_path(row), class: 'btn btn-secondary hidden-xl-up full-width' %>
91
- <%= link_to icon(:plus), new_backend_content_row_column_path(row), class: 'btn btn-secondary hidden-lg-down block' %>
94
+ <%= link_to icon(:plus, t('b.msg.flexible_content.add_column')), new_backend_content_row_column_path(row), class: 'btn btn-secondary hidden-xl-up full-width', data: { lity: '' } %>
95
+ <%= link_to icon(:plus), new_backend_content_row_column_path(row), class: 'btn btn-secondary hidden-lg-down block', title: t('b.msg.flexible_content.add_column'), data: { toggle: 'tooltip', placement: 'bottom', lity: '' } %>
92
96
  <% end %>
93
97
  <% end %>
94
98
  </div>
@@ -0,0 +1,6 @@
1
+ <% if object.image_collection && object.slide_interval %>
2
+ <strong><%= t 'b.slideshow' %></strong> &gt; <%= object.image_collection.description %>
3
+
4
+ <% else %>
5
+ <p><%= t 'b.msg.flexible_content.no_slideshow_present' %></p>
6
+ <% end %>
@@ -3,23 +3,15 @@
3
3
  <%= simple_form_for(@column, url: backend_content_row_column_path(@row, @column)) do |f| %>
4
4
  <%= render 'column_width_explanation' %>
5
5
 
6
- <div class="card">
7
- <div class="card-header">
8
- <%= t 'b.msg.flexible_content.edit_column' %>
6
+ <div class="row mb-3">
7
+ <div class="col-md-6">
8
+ <%= render 'backend/content/rows/columns/dimension_fields', form: f %>
9
9
  </div>
10
10
 
11
- <div class="card-block">
12
- <div class="row">
13
- <div class="col-md-6">
14
- <%= render 'backend/content/rows/columns/dimension_fields', form: f %>
15
- </div>
16
-
17
- <div class="col-md-6">
18
- <%= f.input :content_type, collection: options_for_content_types, disabled: true, include_blank: false %>
19
- </div>
20
- </div>
11
+ <div class="col-md-6">
12
+ <%= f.input :content_type, collection: options_for_content_types, disabled: true, include_blank: false %>
21
13
  </div>
22
14
  </div>
23
15
 
24
- <%= render 'backend/form_actions', cancel_url: cancel_url %>
16
+ <%= render 'backend/form_actions', cancel_url: '#lity-close' %>
25
17
  <% end %>
@@ -3,23 +3,15 @@
3
3
  <%= simple_form_for(@column, url: backend_content_row_columns_path(@row)) do |f| %>
4
4
  <%= render 'column_width_explanation' %>
5
5
 
6
- <div class="card">
7
- <div class="card-header">
8
- <%= t 'b.msg.flexible_content.add_column' %>
6
+ <div class="row mb-3">
7
+ <div class="col-md-6">
8
+ <%= render 'backend/content/rows/columns/dimension_fields', form: f %>
9
9
  </div>
10
10
 
11
- <div class="card-block">
12
- <div class="row">
13
- <div class="col-md-6">
14
- <%= render 'backend/content/rows/columns/dimension_fields', form: f %>
15
- </div>
16
-
17
- <div class="col-md-6">
18
- <%= f.input :content_type, collection: options_for_content_types, include_blank: false %>
19
- </div>
20
- </div>
11
+ <div class="col-md-6">
12
+ <%= f.input :content_type, collection: options_for_content_types, include_blank: false %>
21
13
  </div>
22
14
  </div>
23
15
 
24
- <%= render 'backend/form_actions', cancel_url: cancel_url %>
16
+ <%= render 'backend/form_actions', cancel_url: '#lity-close' %>
25
17
  <% end %>
@@ -0,0 +1,31 @@
1
+ <%= simple_form_for [:backend, @row] do |f| %>
2
+ <div class="row">
3
+ <div class="col-md-4">
4
+ <%= f.input :background_color, placeholder: 'eg #336699' %>
5
+ </div>
6
+ </div>
7
+
8
+ <% pixels = (1..10).map { |i| ["#{i * 16}px", i] } %>
9
+
10
+ <div class="row">
11
+ <div class="col-md-6">
12
+ <div class="alert alert-info">
13
+ <%= t 'b.msg.flexible_content.margin_explanation' %>
14
+ </div>
15
+
16
+ <%= f.input :margin_top, collection: pixels %>
17
+ <%= f.input :margin_bottom, collection: pixels %>
18
+ </div>
19
+
20
+ <div class="col-md-6">
21
+ <div class="alert alert-info">
22
+ <%= t 'b.msg.flexible_content.padding_explanation' %>
23
+ </div>
24
+
25
+ <%= f.input :padding_top, collection: pixels %>
26
+ <%= f.input :padding_bottom, collection: pixels %>
27
+ </div>
28
+ </div>
29
+
30
+ <%= render 'backend/form_actions', cancel_url: '#lity-close' %>
31
+ <% end %>