sibu 1.0.13 → 1.0.18

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: dd539c6932c5892e902387c23af671662ef5e6f0
4
- data.tar.gz: 3479e3686c6e4eb316c4717e720424ffa98175b3
3
+ metadata.gz: e913afa40651591876a68f2f23dade0fb309c410
4
+ data.tar.gz: bca620a625fdbc2cfd19a536e387f1841587af4a
5
5
  SHA512:
6
- metadata.gz: f1893df21c5e7b14cd4504744851ea2916bd0c4773245936899fafcc66832c8ebda987e93b24b07489eca3574a6d0c5a9f0584efe7daec8a53040b783d19f4aa
7
- data.tar.gz: e152ccc9a2afc46648b5a53a9a5801e4f02fa6aba8a3feb79f41e036b424ff8592bd25859c812e67137322cdfcc538d0c445cd41181a936e5c2f99c312a7deda
6
+ metadata.gz: 492a6fda285b61ed431cbb30c8f61ec9b55e98bb15d69f5671b5c9520bf260caec02b44834a15323650111075d96b0826e76e76ce3df0f18e281ab3f379c212f
7
+ data.tar.gz: 859ccb722dd7fe498ec580bdd3ccb76a7a22c0831865c25299fe3c6af04f8658aa29670b3e839e2c0a9151061dd26ca3e8d4fb5ef911b52c2e59873cf30854d8
@@ -20,11 +20,15 @@ module Sibu
20
20
  p = Sibu::Page.find(@page_id)
21
21
  entity = @entity_type == 'site' ? p.site : p
22
22
  ids = (@section_id.split('|') + @element_id.split('|')).uniq[0...-1]
23
- elt = entity.update_element(*ids, {"id" => @img_id, "src" => @image.file_url(@size.to_sym), "alt" => @image.alt})
24
- if elt.nil?
25
- msg = {alert: "Une erreur s'est produite lors de la mise à jour de l'image."}
23
+ if entity.has_section?(ids.first)
24
+ elt = entity.update_element(*ids, {"id" => @img_id, "src" => @image.file_url(@size.to_sym), "alt" => @image.alt})
25
+ if elt.nil?
26
+ msg = {alert: "Une erreur s'est produite lors de la mise à jour de l'image."}
27
+ else
28
+ msg = {notice: "L'image a bien été mise à jour."}
29
+ end
26
30
  else
27
- msg = {notice: "L'image a bien été mise à jour."}
31
+ msg = {alert: "L'image n'a pas pu être ajoutée à la section."}
28
32
  end
29
33
  redirect_to site_page_edit_content_path(p.site_id, @page_id), msg
30
34
  else
@@ -11,6 +11,8 @@ module Sibu
11
11
  :child_element, :new_section, :create_section, :edit_section,
12
12
  :update_section, :delete_section]
13
13
  before_action :set_online, only: [:show, :edit]
14
+ before_action :check_section, only: [:edit_element, :update_element, :clone_element, :delete_element,
15
+ :child_element, :edit_section, :update_section, :delete_section]
14
16
 
15
17
  skip_before_action Rails.application.config.sibu[:auth_filter], only: [:show]
16
18
 
@@ -197,6 +199,13 @@ module Sibu
197
199
  params.permit!
198
200
  end
199
201
 
202
+ def check_section
203
+ section_id = params[:section_id]
204
+ unless @entity && @entity.has_section?(section_id)
205
+ redirect_to main_app.root_url, alert: "L'opération n'a pas pu aboutir."
206
+ end
207
+ end
208
+
200
209
  def compile_assets
201
210
  Sibu::DynamicStyle.new(params[:site_id]).compile if Rails.env.development? && conf[:custom_styles] && !params[:site_id].blank?
202
211
  end
@@ -1,3 +1,4 @@
1
+ # Note : methods defined here are included in ActionView::Base
1
2
  module Sibu
2
3
  module PagesHelper
3
4
  include Sibu::Engine.routes.url_helpers
@@ -52,10 +53,10 @@ module Sibu
52
53
  defaults = {"id" => t_id, "text" => (t == :p ? Sibu::DEFAULT_PARAGRAPH : Sibu::DEFAULT_TEXT)}
53
54
  content = defaults.merge(elt.is_a?(Hash) ? elt : (select_element(elt) || {}))
54
55
  html_opts = {"id" => t_id}.merge(opts.except(:repeat, :children).stringify_keys)
55
- @sb_section = (@sb_section || []) + [t_id]
56
+ push_section_ids(t_id)
56
57
  if action_name != 'show'
57
58
  html_opts.merge!({
58
- "data-id" => @sb_section[1..-1].join('|'),
59
+ "data-id" => instance_variable_get("@sb_section")[1..-1].join('|'),
59
60
  "data-type" => (t == :p ? "paragraph" : "text"),
60
61
  "data-repeat" => opts.delete(:repeat),
61
62
  "data-children" => opts.delete(:children)
@@ -74,7 +75,7 @@ module Sibu
74
75
  html_output = content_tag(t, raw(content["text"]).html_safe, html_opts)
75
76
  end
76
77
  end
77
- @sb_section -= [t_id]
78
+ pop_section_id
78
79
  html_output
79
80
  end
80
81
  end
@@ -82,18 +83,18 @@ module Sibu
82
83
  [:div, :section, :article, :aside, :header, :footer, :nav, :main, :ul, :ol, :wrapper].each do |t|
83
84
  define_method(t) do |elt, opts = {}, &block|
84
85
  t_id = elt.is_a?(Hash) ? elt["id"] : elt
85
- @sb_section = (@sb_section || []) + [t_id]
86
+ push_section_ids(t_id)
86
87
  html_opts = {"id" => t_id}.merge(opts.except(:repeat, :children).stringify_keys)
87
88
  if action_name != 'show'
88
89
  html_opts.merge!({
89
- "data-id" => @sb_section[1..-1].join('|'),
90
+ "data-id" => instance_variable_get("@sb_section")[1..-1].join('|'),
90
91
  "data-type" => "group",
91
92
  "data-repeat" => opts.delete(:repeat),
92
93
  "data-children" => opts.delete(:children)
93
94
  })
94
95
  end
95
96
  html_output = t == :wrapper ? capture(current_elt(elt), nested_elements(t_id), &block) : content_tag(t, capture(current_elt(elt), nested_elements(t_id), &block), html_opts)
96
- @sb_section -= [t_id]
97
+ pop_section_id
97
98
  html_output
98
99
  end
99
100
  end
@@ -112,7 +113,7 @@ module Sibu
112
113
  # Note : add "each_with_elements" and "elements" on section/elts enumerables
113
114
  def nested_elements(elt_or_id)
114
115
  element_id = elt_id(elt_or_id)
115
- element_id_tokens = (@sb_section + element_id.split("|")).uniq
116
+ element_id_tokens = (instance_variable_get("@sb_section") + element_id.split("|")).uniq
116
117
  nested_elts = @sb_entity.elements(*element_id_tokens)
117
118
  nested_elts.blank? ? [{"id" => element_id.split("|").last, "data-id" => join_tokens(element_id_tokens[1..-1], "#{element_id}0")}] :
118
119
  nested_elts.map {|e| e.merge({"data-id" => join_tokens(element_id_tokens[1..-1], e['id'])})}
@@ -120,13 +121,13 @@ module Sibu
120
121
 
121
122
  def each_element(elt_or_id)
122
123
  element_id = elt_id(elt_or_id)
123
- @sb_section = (@sb_section + element_id.split("|")).uniq unless element_id.blank?
124
- (@sb_entity.elements(*@sb_section) || []).map {|el| yield(el)}
125
- @sb_section -= [element_id] unless element_id.blank?
124
+ push_section_ids(*element_id.split("|")) unless element_id.blank?
125
+ (@sb_entity.elements(*instance_variable_get("@sb_section")) || []).map {|el| yield(el)}
126
+ pop_section_id unless element_id.blank?
126
127
  end
127
128
 
128
129
  def select_element(id)
129
- @sb_entity.element(*@sb_section, id)
130
+ @sb_entity.element(*instance_variable_get("@sb_section"), id)
130
131
  end
131
132
 
132
133
  def elements(id = nil)
@@ -134,6 +135,16 @@ module Sibu
134
135
  items.blank? ? [{"id" => "el#{Time.current.to_i}"}] : items
135
136
  end
136
137
 
138
+ def push_section_ids(*section_ids)
139
+ # Rails.logger.debug "push section ids #{section_ids}"
140
+ instance_variable_set("@sb_section", (instance_variable_get("@sb_section") || []) + section_ids)
141
+ end
142
+
143
+ def pop_section_id
144
+ instance_variable_set("@sb_section", instance_variable_get("@sb_section")[0..-2])
145
+ # Rails.logger.debug "popped section - now #{instance_variable_get("@sb_section")}"
146
+ end
147
+
137
148
  def img(elt, opts = {})
138
149
  wrapper = opts.delete(:wrapper)
139
150
  repeat = opts.delete(:repeat)
@@ -141,15 +152,15 @@ module Sibu
141
152
  t_id = elt.is_a?(Hash) ? elt["id"] : elt
142
153
  defaults = {"id" => t_id, "src" => Sibu::DEFAULT_IMG}
143
154
  content = defaults.merge(elt.is_a?(Hash) ? elt : (select_element(elt) || {}))
144
- @sb_section = (@sb_section || []) + [t_id]
155
+ push_section_ids(t_id)
145
156
  if action_name == 'show'
146
157
  content["src"] = ("/#{conf[:deployment_path]}" + content["src"]) if @online && conf[:deployment_path]
147
158
  else
148
- opts.merge!({data: {id: @sb_section[1..-1].join('|'), type: "media", repeat: repeat, size: size}})
159
+ opts.merge!({data: {id: instance_variable_get("@sb_section")[1..-1].join('|'), type: "media", repeat: repeat, size: size}})
149
160
  end
150
161
  html_output = wrapper ? content_tag(wrapper, content_tag(:img, nil, content.except("id")), opts)
151
162
  : content_tag(:img, nil, content.except("id").merge(opts.stringify_keys) {|k, old, new| k == 'class' ? [old, new].join(' ') : new})
152
- @sb_section -= [t_id]
163
+ pop_section_id
153
164
  html_output
154
165
  end
155
166
 
@@ -265,8 +276,10 @@ module Sibu
265
276
 
266
277
  alias site sb_site
267
278
 
279
+ # Resets section ids to clean up remaining ids
268
280
  def render_page_section(s, set_id = false)
269
- @sb_section = [s['id']]
281
+ instance_variable_set("@sb_section", [])
282
+ push_section_ids(s['id'])
270
283
  @sb_entity = @page
271
284
  render partial: "shared/#{@site.section_template(s)}",
272
285
  locals: {sibu: self, sibu_section: s, sibu_attrs: sibu_attributes(s, set_id).html_safe}
@@ -278,9 +291,10 @@ module Sibu
278
291
  attrs + (action_name != 'show' ? ('data-sb-id="' + section['id'] + '" data-sb-entity="page"') : '')
279
292
  end
280
293
 
281
- # Site sections attrs
294
+ # Site sections attrs - resets section ids
282
295
  def sibu_attrs(section_id)
283
- @sb_section = [section_id]
296
+ instance_variable_set("@sb_section", [])
297
+ push_section_ids(section_id)
284
298
  @sb_entity = @site
285
299
  action_name != 'show' ? ('data-sb-id="' + section_id + '" data-sb-entity="site"').html_safe : ''
286
300
  end
@@ -313,8 +327,9 @@ module Sibu
313
327
  content = defaults.merge(link_elt)
314
328
  val = content.delete("value") || ""
315
329
  text = content.delete("text")
316
- @sb_section = (@sb_section || []) + [t_id]
317
- html_opts.merge!({data: {id: @sb_section[1..-1].join('|'), type: "link", repeat: repeat, children: children}}) if action_name != 'show'
330
+ push_section_ids(t_id)
331
+
332
+ html_opts.merge!({data: {id: instance_variable_get("@sb_section")[1..-1].join('|'), type: "link", repeat: repeat, children: children}}) if action_name != 'show'
318
333
  if val.to_s.start_with?('http')
319
334
  content["href"] = val
320
335
  elsif val.to_s.start_with?('#')
@@ -332,7 +347,7 @@ module Sibu
332
347
  else
333
348
  html_output = content_tag(:a, raw(text), content.merge(html_opts).except("elements"))
334
349
  end
335
- @sb_section -= [t_id]
350
+ pop_section_id
336
351
  html_output
337
352
  end
338
353
 
@@ -25,7 +25,7 @@ class Sibu::ImageUploader < Shrine
25
25
  def generate_location(io, context)
26
26
  user_id = context[:record] ? context[:record].user_id : nil
27
27
  style = context[:version] != :original ? "resized" : "originals"
28
- name = super
28
+ name = "#{context.dig(:metadata, 'filename') ? context.dig(:metadata, 'filename').gsub(/\.\w+$/, '').parameterize : 'image'}-#{super}"
29
29
 
30
30
  [user_id, style, name].compact.join("/")
31
31
  end
@@ -131,5 +131,9 @@ module Sibu
131
131
  end
132
132
  node
133
133
  end
134
+
135
+ def has_section?(section_id)
136
+ sections && sections.find {|s| s['id'] == section_id}
137
+ end
134
138
  end
135
139
  end
data/lib/sibu/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Sibu
2
- VERSION = '1.0.13'
2
+ VERSION = '1.0.18'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sibu
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.13
4
+ version: 1.0.18
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jean-Baptiste Vilain
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-03-25 00:00:00.000000000 Z
11
+ date: 2021-06-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails