sibu 0.1.20 → 0.1.21

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: 4506dd1c2b0f1f720045ba1bddd840a03ec19945
4
- data.tar.gz: 2e028cfdf5c22480d37186397402d1dc7b3551b8
3
+ metadata.gz: 5c5d82061f85ff21bd3989f9b12554ed157a9338
4
+ data.tar.gz: b11f19b5ee199a81cea6dbbd5703916349e01bb0
5
5
  SHA512:
6
- metadata.gz: b38dbbe585fd82607bcb2d459b7262fb6b1302a104f06101d547038af567dda790dbeab16d2fc1fc8546653ebc4607c6c5d353a50d02dd3ed3d64b5d0772f53a
7
- data.tar.gz: a03b06e0164de60a92a0e3c24071c1a4bb126260ab25fbb288951372884354e539108d666bb9110592707d5bc289e0ef25b5317f47669a027cc3538f7496a8ae
6
+ metadata.gz: 75fe75f7afaa6dd93753f4c11c4106f5dd386244daab9765733ad73651091f6e76e86012ca6209096bba78898659fef9450dfeb3549541c02f8810b5369e9c22
7
+ data.tar.gz: 7a88ff8ceddec27e47629ddad26c66636670290fbef6e4eb8a581f444b79050ed1678856abe495758b352c12260c40eeb31c7e78a1a959031dcfd2e832a5d60b
@@ -49,7 +49,7 @@
49
49
  right: 0;
50
50
  }
51
51
 
52
- #edit_panel {
52
+ #edit_panel, #sections_panel {
53
53
  position: fixed;
54
54
  left: 0;
55
55
  bottom: 0;
@@ -59,7 +59,12 @@
59
59
  background-color: white;
60
60
  }
61
61
 
62
- #element_actions {
62
+ #sections_panel .sibu_sections {
63
+ max-height: 60vh;
64
+ overflow-y: scroll;
65
+ }
66
+
67
+ #element_actions button {
63
68
  display: none;
64
69
  }
65
70
 
@@ -3,10 +3,10 @@ require_dependency "sibu/application_controller"
3
3
  module Sibu
4
4
  class PagesController < ApplicationController
5
5
  before_action :set_page, only: [:edit, :update, :destroy, :edit_element, :update_element, :clone_element,
6
- :delete_element, :edit_section, :clone_section, :delete_section]
6
+ :delete_element, :child_element, :new_section, :create_section, :delete_section]
7
7
  before_action :set_site, only: [:index, :new]
8
8
  before_action :set_edit_context, only: [:edit_element, :update_element, :clone_element, :delete_element,
9
- :clone_section, :delete_section]
9
+ :child_element, :new_section, :create_section, :delete_section]
10
10
  skip_before_action Rails.application.config.sibu[:auth_filter], only: [:show]
11
11
 
12
12
  def index
@@ -75,6 +75,7 @@ module Sibu
75
75
  @element = @entity.element(*@section_id.split('|'), *@element_id.split('|'))
76
76
  @repeat = params[:repeat]
77
77
  @size = params[:size].blank? ? :medium : params[:size].to_sym
78
+ @children = params[:children]
78
79
  end
79
80
 
80
81
  def update_element
@@ -90,14 +91,21 @@ module Sibu
90
91
  @deleted = @entity.delete_element(*@section_id.split('|'), *@element_id.split('|'))
91
92
  end
92
93
 
93
- def edit_section
94
+ def child_element
95
+ @added = @entity.child_element(*@section_id.split('|'), *@element_id.split('|'))
94
96
  end
95
97
 
96
- def update_section
98
+ # Todo - init available sections properly and fix dynamic sections creation (init needed)
99
+ def new_section
100
+ @after = params[:after]
101
+ @links = @site.pages_path_by_id
102
+ @page.sections << {"id" => "sibu_template_free_text", "elements" => [{"id" => "paragraph0"}]}
103
+ @page.sections << {"id" => "sibu_template_gallery",
104
+ "elements" => [{"id" => "slide0", "elements" => [{"id" => "slide0"}, {"id" => "slide1"}, {"id" => "slide2"}]}]}
97
105
  end
98
106
 
99
- def clone_section
100
- @cloned = @entity.clone_section(*@section_id.split('|'))
107
+ def create_section
108
+ @created = @entity.create_section(*@section_id.split('|'), params[:after], section_params)
101
109
  end
102
110
 
103
111
  def delete_section
@@ -129,5 +137,9 @@ module Sibu
129
137
  def element_params
130
138
  params.require(:element).permit!
131
139
  end
140
+
141
+ def section_params
142
+ params.require(:section).permit!
143
+ end
132
144
  end
133
145
  end
@@ -11,6 +11,11 @@ module Sibu
11
11
  [['Accueil', 'home'], ['Offre', 'offer'], ['Galerie', 'gallery'], ['Destination', 'destination'], ['Mentions légales', 'text']]
12
12
  end
13
13
 
14
+ def sections_templates
15
+ Dir.glob(File.join(Rails.root, "app/views/shared/#{@site.site_template.path}/*.erb")).map {|f| f.split('/').last}
16
+ .map {|f| f[1..-1].gsub('.html.erb', '')}.select {|f| f != 'site'}.map {|f| {"id" => "sibu_template_#{f}", "template" => f}}
17
+ end
18
+
14
19
  def page_languages
15
20
  [['Français', 'fr'], ['Anglais', 'en']]
16
21
  end
@@ -29,7 +34,7 @@ module Sibu
29
34
 
30
35
  [:h1, :h2, :h3, :h4, :h5, :h6, :span].each do |t|
31
36
  define_method(t) do |elt, html_opts = {}|
32
- defaults = {"id" => elt.is_a?(Hash) ? elt["id"] : elt, "text" => "Texte à modifier"}
37
+ defaults = {"id" => elt.is_a?(Hash) ? elt["id"] : elt, "text" => DEFAULT_TEXT}
33
38
  content = defaults.merge(elt.is_a?(Hash) ? elt : (select_element(elt) || {}))
34
39
  html_opts.merge!({data: {id: elt_id(elt), type: "text"}}) if action_name != 'show'
35
40
  content_tag(t, raw(content["text"]).html_safe, html_opts)
@@ -37,7 +42,7 @@ module Sibu
37
42
  end
38
43
 
39
44
  def p(elt, html_opts = {})
40
- defaults = {"id" => elt.is_a?(Hash) ? elt["id"] : elt, "text" => "Texte à modifier"}
45
+ defaults = {"id" => elt.is_a?(Hash) ? elt["id"] : elt, "text" => DEFAULT_PARAGRAPH}
41
46
  content = defaults.merge(elt.is_a?(Hash) ? elt : (select_element(elt) || {}))
42
47
  html_opts.merge!({data: {id: elt_id(elt), type: "paragraph"}}) if action_name != 'show'
43
48
  content_tag(:div, content_tag(:p, raw(content["text"]).html_safe), html_opts)
@@ -48,18 +53,19 @@ module Sibu
48
53
  end
49
54
 
50
55
  def select_element(id)
51
- @sb_entity.section(*@sb_section).select {|elt| elt["id"] == id}.first
56
+ @sb_entity.element(*@sb_section, id)
52
57
  end
53
58
 
54
59
  def elements(id = nil)
55
- id ? select_element(id)["elements"] : @sb_entity.section(*@sb_section)
60
+ items = id ? select_element(id)["elements"] : @sb_entity.find_or_init(*@sb_section)["elements"]
61
+ items.blank? ? [{"id" => ""}] : items
56
62
  end
57
63
 
58
64
  def img(elt, opts = {})
59
65
  wrapper = opts.delete(:wrapper)
60
66
  repeat = opts.delete(:repeat)
61
67
  size = opts.delete(:size)
62
- defaults = {"id" => elt.is_a?(Hash) ? elt["id"] : elt, "src" => "/default.jpg"}
68
+ defaults = {"id" => elt.is_a?(Hash) ? elt["id"] : elt, "src" => DEFAULT_IMG}
63
69
  content = defaults.merge(elt.is_a?(Hash) ? elt : (select_element(elt) || {}))
64
70
  opts.merge!({data: {id: elt_id(elt), type: "media", repeat: repeat, size: size}}) if action_name != 'show'
65
71
  wrapper ? content_tag(wrapper, content_tag(:img, nil, content.except("id")), opts) : content_tag(:img, nil, content.except("id").merge(opts))
@@ -80,61 +86,61 @@ module Sibu
80
86
 
81
87
  def section(id, tag, html_opts = {}, &block)
82
88
  @sb_section = [id]
83
- rpt = html_opts.delete(:repeat)
84
- opts = action_name != 'show' ? html_opts.merge({"data-sb-id" => id, "data-sb-repeat" => rpt, "data-sb-entity" => @sb_entity == @site ? 'site' : 'page'}) : html_opts
89
+ opts = action_name != 'show' ? html_opts.merge({"data-sb-id" => id, "data-sb-repeat" => @sb_entity != @site, "data-sb-entity" => @sb_entity == @site ? 'site' : 'page'}) : html_opts
85
90
  content_tag(tag, capture(self, &block), opts)
86
91
  end
87
92
 
93
+ # Todo : voir comment générer une section par défaut en mode liste des sections et insertion d'un bloc avec sections
88
94
  def sections(id, tag, html_opts = {}, &block)
89
- (@sb_entity.section(id).map.with_index do |elt, i|
95
+ (@sb_entity.find_or_init(id)["elements"].map.with_index do |elt, i|
90
96
  @sb_section = [id, elt["id"]]
91
97
  opts = action_name != 'show' ? html_opts.merge({"data-sb-id" => @sb_section.join('|'), "data-sb-repeat" => true, "data-sb-entity" => @sb_entity == @site ? 'site' : 'page'}) : html_opts
92
98
  content_tag(tag, capture(self, i, &block), opts)
93
99
  end).join('').html_safe
94
100
  end
95
101
 
96
- def elt(id)
97
- select_element(id)
98
- end
99
-
100
- # Note : could work well - set the ids hierarchy in elements retrieved from the db
101
102
  def elts(id)
102
103
  items = []
103
- @sb_entity.section(*@sb_section, id).each do |item|
104
- item["id"] = [id, item["id"]].join("|")
105
- items << item
104
+ element_id = elt_id(id)
105
+ elemnts = @sb_entity.elements(*(@sb_section + element_id.split("|")).uniq)
106
+ if elemnts
107
+ elemnts.each do |e|
108
+ e["data-id"] = [element_id, e["id"]].join("|")
109
+ items << e
110
+ end
106
111
  end
107
- items
112
+ items.blank? ? [{"id" => element_id.split("|").last, "data-id" => [element_id, "#{id}0"].join("|")}] : items
108
113
  end
109
114
 
110
115
  def link(elt, html_opts = {}, &block)
111
116
  repeat = html_opts.delete(:repeat)
112
- defaults = {"id" => elt_id(elt), "value" => "", "text" => "Nouveau lien"}
117
+ children = html_opts.delete(:children)
118
+ defaults = {"id" => elt_id(elt), "value" => "", "text" => DEFAULT_TEXT}
113
119
  content = defaults.merge(elt.is_a?(Hash) ? elt : (select_element(elt) || {}))
114
120
  val = content.delete("value") || ""
115
121
  text = content.delete("text");
116
- html_opts.merge!({data: {id: elt_id(elt), type: "link", repeat: repeat}}) if action_name != 'show'
122
+ html_opts.merge!({data: {id: elt_id(elt), type: "link", repeat: repeat, children: children}}) if action_name != 'show'
117
123
  if val.to_s.include?('http')
118
124
  content["href"] = val
119
125
  else
120
126
  content["href"] = @links.keys.include?(val.to_s) ? (action_name == 'show' ? link_path(val) : site_page_edit_content_path(@site.id, val)) : '#'
121
127
  end
122
128
  if block_given?
123
- content_tag(:a, content.merge(html_opts), &block)
129
+ content_tag(:a, content.merge(html_opts).except("elements"), &block)
124
130
  else
125
- content_tag(:a, text, content.merge(html_opts))
131
+ content_tag(:a, text, content.merge(html_opts).except("elements"))
126
132
  end
127
133
  end
128
134
 
129
135
  def interactive_map(elt, html_opts = {}, &block)
130
- defaults = {"data-lat" => "45.68854", "data-lng" => "5.91587", "data-title" => "Titre marqueur"}
136
+ defaults = {"data-lat" => "45.68854", "data-lng" => "5.91587", "data-title" => DEFAULT_TEXT}
131
137
  content = elt.is_a?(Hash) ? defaults.merge(elt) : (select_element(elt) || {"id" => elt}).merge(defaults)
132
138
  html_opts.merge!({data: {id: elt_id(elt), type: "map"}}) if action_name != 'show'
133
139
  content_tag(:div, nil, content.merge(html_opts))
134
140
  end
135
141
 
136
142
  def elt_id(elt)
137
- elt.is_a?(Hash) ? elt["id"] : elt
143
+ elt.is_a?(Hash) ? (elt["data-id"] || elt["id"]) : elt
138
144
  end
139
145
  end
140
146
  end
@@ -2,68 +2,54 @@ module Sibu
2
2
  module SectionsConcern
3
3
  include ActiveSupport::Concern
4
4
 
5
- def section(*ids)
6
- if ids.length == 1
7
- s = nil
8
- if sections.blank?
9
- self.sections = {}
10
- else
11
- s = sections[ids[0]]
12
- end
13
- if s.nil?
14
- logger.debug("init section #{ids[0]}")
15
- s = []
16
- self.sections[ids[0]] = s
17
- save
18
- end
19
- s
20
- elsif ids.length == 2
21
- subsection(*ids)
22
- elsif ids.length == 3
23
- sub = subsection(*ids[0..1])
24
- elt_idx = sub.index {|elt| elt["id"] == ids.last}
25
- sub[elt_idx]["elements"]
5
+ def section(id)
6
+ if id
7
+ pos = sections.index {|s| s["id"] == id}
8
+ pos ? sections[pos] : {"id" => id}
26
9
  end
27
10
  end
28
11
 
29
- def subsection(id, subid)
30
- s = section(id)
31
- sub_idx = s.index {|elt| elt["id"] == subid}
32
- if sub_idx
33
- sub = s[sub_idx]
34
- else
35
- sub = {"id" => subid, "elements" => []}
36
- self.sections[id] << sub
37
- save
12
+ def elements(*ids)
13
+ unless ids.blank?
14
+ s = section(ids.first)
15
+ unless s["elements"].blank?
16
+ ids[1..-1].each do |elt_id|
17
+ pos = s["elements"].index {|e| e["id"] == elt_id.split('|').last}
18
+ s = pos ? s["elements"][pos] : {"id" => elt_id, "elements" => []}
19
+ end
20
+ s["elements"]
21
+ end
38
22
  end
39
- sub["elements"]
40
- end
41
-
42
- def element(*ids, element_id)
43
- elt = section(*ids).select {|e| e["id"] == element_id}.first
44
- elt || {"id" => element_id}
45
23
  end
46
24
 
47
- # Todo : add an "elements" method
48
- # and make section and subsection return sections
49
-
50
- def update_section(*ids, value)
25
+ def element(*ids)
26
+ unless ids.blank?
27
+ if ids.length == 1
28
+ section(ids.first)
29
+ else
30
+ elts = elements(*ids[0..-2]) || []
31
+ pos = elts.index {|e| e["id"] == ids.last}
32
+ pos ? elts[pos] : {"id" => ids.last}
33
+ end
34
+ end
51
35
  end
52
36
 
53
37
  def update_element(*ids, value)
54
- sanitize_value(value)
55
- parent_section = section(*ids)
56
- if parent_section.any? {|elt| elt["id"] == value["id"]}
57
- parent_section.map! {|elt| elt["id"] == value["id"] ? value : elt}
58
- else
59
- parent_section << value
60
- end
38
+ unless ids.blank?
39
+ parent_section = find_or_init(*ids)["elements"]
40
+ if parent_section.any? {|elt| elt["id"] == value["id"]}
41
+ parent_section.map! {|elt| elt["id"] == value["id"] ? value : elt}
42
+ else
43
+ parent_section << value.to_h
44
+ end
61
45
 
62
- value if save
46
+ value if save
47
+ end
63
48
  end
64
49
 
65
50
  def clone_element(*ids, element_id)
66
- siblings = section(*ids)
51
+ src_elt = find_or_init(*ids, element_id)
52
+ siblings = find_or_init(*ids)["elements"]
67
53
  ref_index = siblings.index {|s| s["id"] == element_id}
68
54
  new_elt = siblings[ref_index].deep_dup
69
55
  new_elt["id"] = element_id + '§'
@@ -72,7 +58,8 @@ module Sibu
72
58
  end
73
59
 
74
60
  def delete_element(*ids, element_id)
75
- siblings = section(*ids)
61
+ src_elt = find_or_init(*ids, element_id)
62
+ siblings = find_or_init(*ids)["elements"]
76
63
  if siblings.length > 1
77
64
  ref_index = siblings.index {|s| s["id"] == element_id}
78
65
  siblings.delete_at(ref_index)
@@ -82,30 +69,65 @@ module Sibu
82
69
  end
83
70
  end
84
71
 
85
- def clone_section(*ids)
86
- siblings = section(ids.first)
87
- ref_index = siblings.index {|s| s["id"] == ids.last}
88
- new_section = siblings[ref_index].deep_dup
89
- new_section["id"] = ids.last + '§'
90
- siblings.insert(ref_index + 1, new_section)
72
+ def child_element(*ids, element_id)
73
+ siblings = elements(*ids)
74
+ parent_elt = siblings[siblings.index {|s| s["id"] == element_id}]
75
+ if parent_elt["elements"].blank?
76
+ parent_elt["elements"] = [{"id" => "#{element_id}*"}]
77
+ else
78
+ parent_elt["elements"] << [{"id" => "#{parent_elt["elements"].last["id"]}§"}]
79
+ end
80
+ save
81
+ end
82
+
83
+ def create_section(*ids, after, new_section)
84
+ new_section["id"] = "#{new_section["template"]}-#{Time.current.to_i}"
85
+ if ids.length == 1
86
+ parent = sections
87
+ else
88
+ parent = find_or_init(*ids[0..-2])["elements"]
89
+ end
90
+ ref_pos = parent.index {|s| s["id"] == ids.last}
91
+ parent.insert(after.to_s == 'true' ? ref_pos + 1 : ref_pos, new_section)
91
92
  save ? new_section : nil
92
93
  end
93
94
 
94
95
  def delete_section(*ids)
95
- siblings = section(ids.first)
96
- if siblings.length == 1
97
- nil
96
+ if ids.length == 1
97
+ if sections.length == 1
98
+ nil
99
+ else
100
+ ref_index = sections.index {|s| s["id"] == ids.first}
101
+ sections.delete_at(ref_index)
102
+ save
103
+ end
98
104
  else
99
- ref_index = siblings.index {|s| s["id"] == ids.last}
100
- siblings.delete_at(ref_index)
105
+ parent = find_or_init(*ids[0..-2])
106
+ ref_index = parent["elements"].index {|s| s["id"] == ids.last}
107
+ parent["elements"].delete_at(ref_index)
101
108
  save
102
109
  end
103
110
  end
104
111
 
105
- def sanitize_value(value)
106
- # unless value["text"].blank?
107
- # value["text"].gsub!(/<\/?(div|p|ul|li)>/, '')
108
- # end
112
+ def elt(siblings, elt_id, default_elt = nil)
113
+ pos = siblings.index {|e| e["id"] == elt_id}
114
+ pos ? siblings[pos] : default_elt
115
+ end
116
+
117
+ def find_or_init(*ids)
118
+ node = nil
119
+ siblings = sections
120
+ ids.each do |elt_id|
121
+ node = elt(siblings, elt_id)
122
+ if node.nil?
123
+ node = {"id" => elt_id, "elements" => []}
124
+ siblings << node
125
+ elsif node["elements"].nil?
126
+ node["elements"] = []
127
+ end
128
+ siblings = node["elements"]
129
+ end
130
+ node
109
131
  end
110
132
  end
111
133
  end
@@ -6,19 +6,20 @@ module Sibu
6
6
 
7
7
  store :metadata, accessors: [:title, :description, :keywords], coder: JSON
8
8
 
9
- before_save :init_path
10
- validates_presence_of :name, :site, :language, :template
9
+ before_save :update_path
10
+ validates_presence_of :name, :site, :language
11
11
 
12
12
  def save_and_init
13
13
  if valid?
14
- template_defaults = site.site_template.pages.select {|p| p[:template] == template}.first
14
+ template_defaults = site.site_template.pages.first
15
15
  self.sections = template_defaults[:sections] if template_defaults
16
16
  end
17
17
  save
18
18
  end
19
19
 
20
- def init_path
21
- self.path = template if self.path.blank? && template != 'home'
20
+ # Todo : fix me (is_home flag ?)
21
+ def update_path
22
+ self.path = name.parameterize if self.path.blank? && name != 'Accueil'
22
23
  end
23
24
  end
24
25
  end
@@ -10,8 +10,8 @@ module Sibu
10
10
 
11
11
  validates_presence_of :name, :site_template
12
12
 
13
- def page_template(page)
14
- "#{site_template.path}/#{page.template}"
13
+ def section_template(section)
14
+ "#{site_template.path}/#{section["template"]}"
15
15
  end
16
16
 
17
17
  def not_found
@@ -2,5 +2,9 @@ module Sibu
2
2
  class SiteTemplate < ApplicationRecord
3
3
  store :default_sections, accessors: [:sections], coder: JSON
4
4
  store :default_pages, accessors: [:pages], coder: JSON
5
+
6
+ def reference
7
+ name.parameterize.gsub('-', '_')
8
+ end
5
9
  end
6
10
  end
@@ -26,6 +26,7 @@
26
26
  <%= render conf[panel] %>
27
27
  <% if panel == :content_panel %>
28
28
  <div id="edit_panel" class="sibu_panel sibu_view"></div>
29
+ <div id="sections_panel"></div>
29
30
  <div id="edit_mode_overlay" class="sibu_panel sibu_view">
30
31
  <div class="overlay_top"></div>
31
32
  <div class="overlay_right"></div>
@@ -33,7 +34,8 @@
33
34
  <div class="overlay_bottom"></div>
34
35
  <div class="edit_mode_actions">
35
36
  <p id="edit_section_msg">Modifier la section</p>
36
- <button id="clone_section" onclick="cloneSection()">Dupliquer</button>
37
+ <button id="new_section_before" onclick="newSection(false)">Insérer avant</button>
38
+ <button id="new_section_after" onclick="newSection(true)">Insérer après</button>
37
39
  <button id="delete_section" onclick="deleteSection()">Supprimer</button>
38
40
  <button onclick="cancelEditMode()">Fermer</button>
39
41
  </div>
@@ -60,10 +62,12 @@
60
62
  editMode.find("#edit_section_msg").text("Modifier la section");
61
63
  editMode.show();
62
64
  if(!section.data('sb-repeat')) {
63
- editMode.find("#clone_section").hide();
65
+ editMode.find("#new_section_before").hide();
66
+ editMode.find("#new_section_after").hide();
64
67
  editMode.find("#delete_section").hide();
65
68
  } else {
66
- editMode.find("#clone_section").show();
69
+ editMode.find("#new_section_before").show();
70
+ editMode.find("#new_section_after").show();
67
71
  editMode.find("#delete_section").show();
68
72
  }
69
73
  rootElt.animate({scrollTop: top}, 500);
@@ -82,18 +86,17 @@
82
86
  }
83
87
  }
84
88
 
85
- function cloneSection() {
86
- if (window.confirm("Dupliquer la section ?")) {
87
- var section = $(".sb-editing").first();
88
- $.ajax({
89
- url: "<%= clone_section_site_page_path(@site.id, @page.id) %>",
90
- method: "POST",
91
- data: {
92
- section_id: section.data("sb-id"),
93
- entity: section.data("sb-entity")
94
- }
95
- })
96
- }
89
+ function newSection(isAfter) {
90
+ var section = $(".sb-editing").first();
91
+ $.ajax({
92
+ url: "<%= new_section_site_page_path(@site.id, @page.id) %>",
93
+ method: "GET",
94
+ data: {
95
+ section_id: section.data("sb-id"),
96
+ entity: section.data("sb-entity"),
97
+ after: isAfter
98
+ }
99
+ })
97
100
  }
98
101
 
99
102
  function deleteSection() {
@@ -138,11 +141,26 @@
138
141
  }
139
142
  }
140
143
 
144
+ function addChildElement(entity, sectionId, elementId) {
145
+ if (window.confirm("Ajouter un sous-menu ?")) {
146
+ $.ajax({
147
+ url: "<%= child_element_site_page_path(@site.id, @page.id) %>",
148
+ method: "POST",
149
+ data: {
150
+ section_id: sectionId,
151
+ element_id: elementId,
152
+ entity: entity
153
+ }
154
+ })
155
+ }
156
+ }
157
+
141
158
  function cancelEdit() {
142
159
  $("#edit_panel").slideUp("fast");
160
+ document.body.style.overflow = "initial";
143
161
  }
144
162
 
145
- function editContent(eltId, sectionId, entity, repeat, contentType, size) {
163
+ function editContent(eltId, sectionId, entity, repeat, contentType, size, children) {
146
164
  $.ajax({
147
165
  url: "<%= edit_element_site_page_path(@site.id, @page.id) %>",
148
166
  method: "GET",
@@ -152,7 +170,8 @@
152
170
  entity: entity,
153
171
  repeat: repeat,
154
172
  content_type: contentType,
155
- size: size
173
+ size: size,
174
+ children: children
156
175
  }
157
176
  })
158
177
  }
@@ -167,9 +186,10 @@
167
186
  });
168
187
  editables.click(function(evt) {
169
188
  evt.preventDefault();
170
- var elt = $(this), eltId = elt.data("id"), repeat = elt.data("repeat"), type = elt.data("type"), size = elt.data("size");
189
+ var elt = $(this), eltId = elt.data("id"), repeat = elt.data("repeat"), type = elt.data("type"),
190
+ size = elt.data("size"), children = elt.data("children");
171
191
  var sectionId = section.data("sb-id"), entity = section.data("sb-entity");
172
- editContent(eltId, sectionId, entity, repeat, type, size);
192
+ editContent(eltId, sectionId, entity, repeat, type, size, children);
173
193
  })
174
194
  }
175
195
 
@@ -1,21 +1,21 @@
1
1
  <% content_for :styles do %>
2
2
  <style>
3
3
  <% unless @site.primary_color.blank? %>
4
- :not(.sibu_panel) [class*='bg--primary'] {
4
+ .sibu_site_content [class*='bg--primary'] {
5
5
  background-color: <%= @site.primary_color %> !important;
6
6
  }
7
7
 
8
- :not(.sibu_panel) [class *='txt--primary'] {
8
+ .sibu_site_content [class *='txt--primary'] {
9
9
  color: <%= @site.primary_color %> !important;
10
10
  }
11
11
  <% end %>
12
12
 
13
13
  <% unless @site.secondary_color.blank? %>
14
- :not(.sibu_panel) [class*='bg--success'] {
14
+ .sibu_site_content [class*='bg--success'] {
15
15
  background-color: <%= @site.secondary_color %> !important;
16
16
  }
17
17
 
18
- :not(.sibu_panel) [class *='txt--success'] {
18
+ .sibu_site_content [class *='txt--success'] {
19
19
  color: <%= @site.secondary_color %> !important;
20
20
  }
21
21
  <% end %>
@@ -1,4 +1,5 @@
1
1
  <div id="element_actions">
2
- <button onclick="cloneElement('<%= @entity_type %>', '<%= @section_id %>', '<%= @element_id %>')">Dupliquer</button>
3
- <button onclick="deleteElement('<%= @entity_type %>', '<%= @section_id %>', '<%= @element_id %>')">Supprimer</button>
2
+ <button id="clone_elt" onclick="cloneElement('<%= @entity_type %>', '<%= @section_id %>', '<%= @element_id %>')">Dupliquer</button>
3
+ <button id="duplicate_elt" onclick="deleteElement('<%= @entity_type %>', '<%= @section_id %>', '<%= @element_id %>')">Supprimer</button>
4
+ <button id="child_elt" onclick="addChildElement('<%= @entity_type %>', '<%= @section_id %>', '<%= @element_id %>')">Ajouter un sous-menu</button>
4
5
  </div>
@@ -6,13 +6,6 @@
6
6
  <small>Libellé utilisé dans l'outil d'administration (non utilisé dans le site)</small>
7
7
  </div>
8
8
  </div>
9
- <div class="sibu_field">
10
- <%= f.label :template, 'Modèle' %>
11
- <div>
12
- <%= f.select(:template, page_templates, {prompt: 'Sélectionnez un modèle de page'}) %>
13
- <small>Le gabarit utilisé pour créer la page</small>
14
- </div>
15
- </div>
16
9
  <div class="sibu_field">
17
10
  <%= f.label :path, "Chemin d'accès" %>
18
11
  <div>
@@ -22,7 +22,7 @@
22
22
  <%= hidden_field_tag :entity, @entity_type %>
23
23
  <div class="sibu_actions">
24
24
  <%= submit_tag 'Valider' %>
25
- <%= link_to 'Annuler', '#', onclick: '$("#edit_panel").slideUp("fast"); return false;' %>
25
+ <%= link_to 'Annuler', '#', onclick: 'cancelEdit(); return false;' %>
26
26
  </div>
27
27
  <% end %>
28
28
  </div>
@@ -0,0 +1,25 @@
1
+ <div class="sibu_panel sibu_view">
2
+ <h2>Choix du type de section</h2>
3
+ <div id="edit_msg"></div>
4
+ </div>
5
+ <div>
6
+ <div id="<%= "#{@site.site_template.reference}_sections" %>" class="sibu_sections sibu_site_content">
7
+ <% sections_templates.each do |st| %>
8
+ <div data-sb-template="<%= st["template"] %>">
9
+ <%= render "shared/#{@site.section_template(st)}", sec: st %>
10
+ </div>
11
+ <% end %>
12
+ </div>
13
+ <%= form_tag(create_section_site_page_path(@site.id, @page.id), method: :post, remote: true) do |f| %>
14
+ <%= hidden_field_tag 'section[template]', '' %>
15
+ <%= hidden_field_tag :section_id, @section_id %>
16
+ <%= hidden_field_tag :after, @after%>
17
+ <%= hidden_field_tag :entity, @entity_type %>
18
+ <div class="sibu_panel sibu_view">
19
+ <div class="sibu_actions">
20
+ <%= submit_tag 'Valider' %>
21
+ <%= link_to 'Annuler', '#', onclick: 'cancelEdit(); return false;' %>
22
+ </div>
23
+ </div>
24
+ <% end %>
25
+ </div>
@@ -0,0 +1,6 @@
1
+ <% if @added.nil? %>
2
+ $("#edit_panel #edit_msg").html("<p class='sibu_alert'>Une erreur s'est produite lors de l'ajout du sous-menu.</p>");
3
+ <% else %>
4
+ $("#edit_panel").slideUp();
5
+ location.reload(true);
6
+ <% end %>
@@ -1,4 +1,4 @@
1
- <% if @cloned %>
1
+ <% if @created %>
2
2
  location.reload(true);
3
3
  <% else %>
4
4
  $("#edit_section_msg").html("<p class='sibu_alert'>Une erreur s'est produite lors de l'enregistrement.</p>");
@@ -40,8 +40,15 @@ editPanel.html("");
40
40
  <% end %>
41
41
 
42
42
  <% if @repeat %>
43
- $("#element_actions").show();
43
+ $("#clone_elt, #duplicate_elt").show();
44
44
  <% else %>
45
- $("#element_actions").hide();
45
+ $("#clone_elt, #duplicate_elt").remove();
46
+ <% end %>
47
+
48
+ <% if @children %>
49
+ $("#child_elt").show();
50
+ <% else %>
51
+ $("#child_elt").remove();
46
52
  <% end %>
47
53
  editPanel.slideDown("fast");
54
+ document.body.style.overflow = "hidden";
@@ -7,7 +7,6 @@
7
7
  <thead>
8
8
  <tr>
9
9
  <th>Nom</th>
10
- <th>Modèle</th>
11
10
  <th>Chemin d'accès</th>
12
11
  <th>Mise à jour</th>
13
12
  <th colspan="2"></th>
@@ -17,7 +16,6 @@
17
16
  <% @pages.each do |p| %>
18
17
  <tr>
19
18
  <td><%= p.name %></td>
20
- <td><%= t "sibu.templates.#{p.template}" %></td>
21
19
  <td><%= p.path %></td>
22
20
  <td><%= l p.updated_at %></td>
23
21
  <td colspan="2">
@@ -0,0 +1,17 @@
1
+ var sectionsPanel = $("#sections_panel");
2
+ sectionsPanel.html("");
3
+ sectionsPanel.html("<%= j(render 'new_section_panel') %>");
4
+ var sections = sectionsPanel.find(".sibu_sections > *");
5
+ sections.click(function() {
6
+ if(!$(this).hasClass('selected')) {
7
+ sections.removeClass('selected');
8
+ $(this).addClass('selected');
9
+ $("#section_template").val($(this).data("sb-template"));
10
+ }
11
+ });
12
+ sectionsPanel.slideDown("fast", function() {
13
+ if(typeof initSectionsForm === "function") {
14
+ initSectionsForm();
15
+ }
16
+ });
17
+ document.body.style.overflow = "hidden";
@@ -1 +1,3 @@
1
- <%= render "shared/#{@site.site_template.path}/site" %>
1
+ <div class="sibu_site_content">
2
+ <%= render "shared/#{@site.site_template.path}/site" %>
3
+ </div>
@@ -0,0 +1,3 @@
1
+ DEFAULT_TEXT = "Lorem ipsum"
2
+ DEFAULT_PARAGRAPH = "Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut."
3
+ DEFAULT_IMG = "/default.jpg"
data/config/routes.rb CHANGED
@@ -12,8 +12,9 @@ Sibu::Engine.routes.draw do
12
12
  patch 'update_element', on: :member
13
13
  post 'clone_element', on: :member
14
14
  delete 'delete_element', on: :member
15
- patch 'update_section', on: :member
16
- post 'clone_section', on: :member
15
+ post 'child_element', on: :member
16
+ get 'new_section', on: :member
17
+ post 'create_section', on: :member
17
18
  delete 'delete_section', on: :member
18
19
  end
19
20
 
data/lib/sibu/utils.rb ADDED
@@ -0,0 +1,15 @@
1
+ module Sibu
2
+ class Utils
3
+ def self.convert_sections
4
+ Sibu::Site.all.each do |s|
5
+ sections = s.sections
6
+ s.update(sections: sections.keys.map {|k| {id: k, elements: sections[k]}})
7
+ end
8
+
9
+ Sibu::Page.all.each do |p|
10
+ sections = p.sections
11
+ p.update(sections: sections.keys.map {|k| {id: k, elements: sections[k]}})
12
+ end
13
+ end
14
+ end
15
+ end
data/lib/sibu/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Sibu
2
- VERSION = '0.1.20'
2
+ VERSION = '0.1.21'
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: 0.1.20
4
+ version: 0.1.21
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: 2018-02-21 00:00:00.000000000 Z
11
+ date: 2018-02-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -141,10 +141,12 @@ files:
141
141
  - app/views/sibu/pages/_form.html.erb
142
142
  - app/views/sibu/pages/_link_edit_panel.html.erb
143
143
  - app/views/sibu/pages/_media_edit_panel.html.erb
144
+ - app/views/sibu/pages/_new_section_panel.html.erb
144
145
  - app/views/sibu/pages/_paragraph_edit_panel.html.erb
145
146
  - app/views/sibu/pages/_text_edit_panel.html.erb
147
+ - app/views/sibu/pages/child_element.js.erb
146
148
  - app/views/sibu/pages/clone_element.js.erb
147
- - app/views/sibu/pages/clone_section.js.erb
149
+ - app/views/sibu/pages/create_section.js.erb
148
150
  - app/views/sibu/pages/delete_element.js.erb
149
151
  - app/views/sibu/pages/delete_section.js.erb
150
152
  - app/views/sibu/pages/destroy.html.erb
@@ -153,6 +155,7 @@ files:
153
155
  - app/views/sibu/pages/edit_element.js.erb
154
156
  - app/views/sibu/pages/index.html.erb
155
157
  - app/views/sibu/pages/new.html.erb
158
+ - app/views/sibu/pages/new_section.js.erb
156
159
  - app/views/sibu/pages/show.html.erb
157
160
  - app/views/sibu/pages/update.html.erb
158
161
  - app/views/sibu/pages/update_element.js.erb
@@ -163,6 +166,7 @@ files:
163
166
  - app/views/sibu/sites/new.html.erb
164
167
  - app/views/sibu/sites/show.html.erb
165
168
  - app/views/sibu/sites/update.html.erb
169
+ - config/initializers/constants.rb
166
170
  - config/initializers/shrine.rb
167
171
  - config/routes.rb
168
172
  - config/tinymce.yml
@@ -179,6 +183,7 @@ files:
179
183
  - db/migrate/20180214134653_add_fields_to_sites.rb
180
184
  - lib/sibu.rb
181
185
  - lib/sibu/engine.rb
186
+ - lib/sibu/utils.rb
182
187
  - lib/sibu/version.rb
183
188
  - lib/tasks/sibu_tasks.rake
184
189
  homepage: http://hotentic.com