udongo 6.3.2 → 6.4.0

Sign up to get free protection for your applications and to get access to all the features.
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 %>