sibu 0.8.1 → 0.9.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/MIT-LICENSE +20 -20
- data/README.md +38 -38
- data/Rakefile +36 -36
- data/app/assets/config/sibu_manifest.js +2 -2
- data/app/assets/fonts/sibu/Sibu.eot +0 -0
- data/app/assets/fonts/sibu/Sibu.svg +13 -13
- data/app/assets/fonts/sibu/Sibu.ttf +0 -0
- data/app/assets/fonts/sibu/Sibu.woff +0 -0
- data/app/assets/javascripts/cropper/cropper.js +3694 -3694
- data/app/assets/javascripts/quill/quill.js +11401 -11401
- data/app/assets/javascripts/sibu/common.js +6 -6
- data/app/assets/javascripts/sibu/sibu.js.erb +156 -155
- data/app/assets/javascripts/tabs/van11y-accessible-tab-panel-aria.js +465 -465
- data/app/assets/stylesheets/cropper/cropper.css +304 -304
- data/app/assets/stylesheets/quill/quill.snow.css +945 -945
- data/app/assets/stylesheets/sibu/defaults.scss +317 -336
- data/app/assets/stylesheets/sibu/icons.scss +40 -40
- data/app/assets/stylesheets/sibu/sibu.css +131 -131
- data/app/controllers/sibu/application_controller.rb +14 -14
- data/app/controllers/sibu/documents_controller.rb +35 -35
- data/app/controllers/sibu/images_controller.rb +78 -78
- data/app/controllers/sibu/pages_controller.rb +197 -197
- data/app/controllers/sibu/sites_controller.rb +81 -81
- data/app/helpers/sibu/application_helper.rb +11 -11
- data/app/helpers/sibu/documents_helper.rb +4 -4
- data/app/helpers/sibu/images_helper.rb +4 -4
- data/app/helpers/sibu/pages_helper.rb +217 -194
- data/app/helpers/sibu/sites_helper.rb +23 -23
- data/app/jobs/sibu/application_job.rb +4 -4
- data/app/mailers/sibu/application_mailer.rb +6 -6
- data/app/models/concerns/sibu/document_uploader.rb +8 -8
- data/app/models/concerns/sibu/image_uploader.rb +31 -31
- data/app/models/concerns/sibu/sections_concern.rb +134 -134
- data/app/models/concerns/sibu/style_uploader.rb +1 -1
- data/app/models/concerns/sibu/user_concern.rb +9 -8
- data/app/models/sibu/application_record.rb +5 -5
- data/app/models/sibu/document.rb +16 -16
- data/app/models/sibu/dynamic_style.rb +76 -76
- data/app/models/sibu/image.rb +10 -19
- data/app/models/sibu/page.rb +66 -66
- data/app/models/sibu/site.rb +97 -97
- data/app/models/sibu/site_template.rb +22 -22
- data/app/views/layouts/sibu/application.html.erb +23 -23
- data/app/views/layouts/sibu/edit_content.html.erb +262 -262
- data/app/views/layouts/sibu/site.html.erb +45 -45
- data/app/views/sibu/documents/_form.html.erb +14 -14
- data/app/views/sibu/documents/index.html.erb +37 -37
- data/app/views/sibu/documents/new.html.erb +12 -12
- data/app/views/sibu/images/_edit_form.html.erb +23 -23
- data/app/views/sibu/images/_form.html.erb +34 -34
- data/app/views/sibu/images/edit.js.erb +2 -2
- data/app/views/sibu/images/index.html.erb +31 -13
- data/app/views/sibu/images/new.html.erb +12 -12
- data/app/views/sibu/images/show.html.erb +2 -2
- data/app/views/sibu/pages/_code_edit_panel.html.erb +17 -17
- data/app/views/sibu/pages/_element_actions.html.erb +4 -4
- data/app/views/sibu/pages/_error_panel.html.erb +4 -4
- data/app/views/sibu/pages/_form.html.erb +62 -62
- data/app/views/sibu/pages/_group_edit_panel.html.erb +3 -3
- data/app/views/sibu/pages/_link_edit_panel.html.erb +50 -50
- data/app/views/sibu/pages/_map_edit_panel.html.erb +27 -27
- data/app/views/sibu/pages/_media_edit_panel.html.erb +63 -46
- data/app/views/sibu/pages/_new_section_panel.html.erb +43 -43
- data/app/views/sibu/pages/_paragraph_edit_panel.html.erb +18 -18
- data/app/views/sibu/pages/_text_edit_panel.html.erb +19 -19
- data/app/views/sibu/pages/child_element.js.erb +6 -6
- data/app/views/sibu/pages/clone_element.js.erb +6 -6
- data/app/views/sibu/pages/create_section.js.erb +6 -6
- data/app/views/sibu/pages/delete_element.js.erb +6 -6
- data/app/views/sibu/pages/delete_section.js.erb +6 -6
- data/app/views/sibu/pages/destroy.html.erb +2 -2
- data/app/views/sibu/pages/edit.html.erb +8 -8
- data/app/views/sibu/pages/edit_content.html.erb +3 -3
- data/app/views/sibu/pages/edit_element.js.erb +105 -100
- data/app/views/sibu/pages/edit_section.js.erb +7 -7
- data/app/views/sibu/pages/index.html.erb +40 -40
- data/app/views/sibu/pages/new.html.erb +8 -8
- data/app/views/sibu/pages/new_section.js.erb +19 -19
- data/app/views/sibu/pages/show.html.erb +3 -3
- data/app/views/sibu/pages/update.html.erb +2 -2
- data/app/views/sibu/pages/update_element.js.erb +5 -5
- data/app/views/sibu/pages/update_section.js.erb +5 -5
- data/app/views/sibu/sites/_form.html.erb +125 -125
- data/app/views/sibu/sites/destroy.html.erb +2 -2
- data/app/views/sibu/sites/edit.html.erb +9 -9
- data/app/views/sibu/sites/edit_styles.html.erb +8 -8
- data/app/views/sibu/sites/index.html.erb +41 -41
- data/app/views/sibu/sites/new.html.erb +18 -18
- data/app/views/sibu/sites/update.html.erb +2 -2
- data/config/initializers/constants.rb +2 -2
- data/config/initializers/shrine.rb +18 -18
- data/config/routes.rb +30 -30
- data/config/tinymce.yml +5 -5
- data/db/migrate/20180124095041_create_sibu_sites.rb +12 -12
- data/db/migrate/20180124095213_create_sibu_pages.rb +15 -15
- data/db/migrate/20180124145030_create_sibu_site_templates.rb +10 -10
- data/db/migrate/20180125231638_add_user_id_to_sites.rb +5 -5
- data/db/migrate/20180126114522_rename_url_to_path_in_pages.rb +5 -5
- data/db/migrate/20180126114628_add_domain_to_sites.rb +5 -5
- data/db/migrate/20180127211533_create_sibu_images.rb +11 -11
- data/db/migrate/20180208082317_rename_images_user_id_to_site_id.rb +5 -5
- data/db/migrate/20180208125024_rename_image_data_column.rb +5 -5
- data/db/migrate/20180210181644_add_defaults_to_site_templates.rb +6 -6
- data/db/migrate/20180214134653_add_fields_to_sites.rb +5 -5
- data/db/migrate/20180227151519_add_default_templates_to_site_templates.rb +5 -5
- data/db/migrate/20180301121902_add_style_data_to_sites.rb +5 -5
- data/db/migrate/20180301152101_add_default_styles_to_templates.rb +5 -5
- data/db/migrate/20180321144021_move_images_to_user_level.rb +7 -7
- data/db/migrate/20180321170310_add_version_to_sibu_sites.rb +7 -7
- data/db/migrate/20180405095448_create_sibu_documents.rb +10 -10
- data/db/migrate/20190110204854_add_custom_data_to_sibu_pages.rb +5 -5
- data/lib/sibu.rb +4 -4
- data/lib/sibu/engine.rb +19 -19
- data/lib/sibu/utils.rb +14 -14
- data/lib/sibu/version.rb +3 -3
- data/lib/tasks/sibu_tasks.rake +4 -4
- metadata +7 -7
@@ -1,22 +1,22 @@
|
|
1
|
-
module Sibu
|
2
|
-
class SiteTemplate < ApplicationRecord
|
3
|
-
store :default_sections, accessors: [:sections], coder: JSON
|
4
|
-
store :default_pages, accessors: [:pages], coder: JSON
|
5
|
-
store :default_templates, accessors: [:templates], coder: JSON
|
6
|
-
store :default_styles, accessors: [:primary_font, :secondary_font, :primary_color, :secondary_color], coder: JSON
|
7
|
-
|
8
|
-
def reference
|
9
|
-
name.parameterize.gsub('-', '_')
|
10
|
-
end
|
11
|
-
|
12
|
-
def available_sections(path_prefix = 'app/views/shared')
|
13
|
-
sections_list = []
|
14
|
-
Dir.glob(File.join(Rails.root, "#{path_prefix}/#{path}/*/")).each do |dir|
|
15
|
-
cat = dir.split('/').last
|
16
|
-
sections_list += Dir.glob(dir + "*.erb").map {|f| f.split('/').last}.
|
17
|
-
map {|f| f[1..-1].gsub('.html.erb', '')}.map {|f| {"id" => "sibu_template_#{f}", "category" => cat, "template" => f}}
|
18
|
-
end
|
19
|
-
sections_list
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
1
|
+
module Sibu
|
2
|
+
class SiteTemplate < ApplicationRecord
|
3
|
+
store :default_sections, accessors: [:sections], coder: JSON
|
4
|
+
store :default_pages, accessors: [:pages], coder: JSON
|
5
|
+
store :default_templates, accessors: [:templates], coder: JSON
|
6
|
+
store :default_styles, accessors: [:primary_font, :secondary_font, :primary_color, :secondary_color], coder: JSON
|
7
|
+
|
8
|
+
def reference
|
9
|
+
name.parameterize.gsub('-', '_')
|
10
|
+
end
|
11
|
+
|
12
|
+
def available_sections(path_prefix = 'app/views/shared')
|
13
|
+
sections_list = []
|
14
|
+
Dir.glob(File.join(Rails.root, "#{path_prefix}/#{path}/*/")).each do |dir|
|
15
|
+
cat = dir.split('/').last
|
16
|
+
sections_list += Dir.glob(dir + "*.erb").map {|f| f.split('/').last}.
|
17
|
+
map {|f| f[1..-1].gsub('.html.erb', '')}.map {|f| {"id" => "sibu_template_#{f}", "category" => cat, "template" => f}}
|
18
|
+
end
|
19
|
+
sections_list
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -1,23 +1,23 @@
|
|
1
|
-
<!DOCTYPE html>
|
2
|
-
<html class="sibu">
|
3
|
-
<head>
|
4
|
-
<title><%= conf[:title] %></title>
|
5
|
-
<%= stylesheet_link_tag conf[:stylesheet], media: 'all' %>
|
6
|
-
<%= javascript_include_tag conf[:javascript] %>
|
7
|
-
<%= javascript_include_tag 'sibu/common' %>
|
8
|
-
<%= csrf_meta_tags %>
|
9
|
-
</head>
|
10
|
-
<body>
|
11
|
-
<% [:top_panel, :side_panel, :content_panel, :bottom_panel].each do |panel| %>
|
12
|
-
<% unless conf[panel].blank? %>
|
13
|
-
<div class="sibu_panel">
|
14
|
-
<%= render conf[panel] %>
|
15
|
-
</div>
|
16
|
-
<% end %>
|
17
|
-
<% end %>
|
18
|
-
<script>
|
19
|
-
sibuCallback("<%= "#{action_name}_#{controller_name}".camelize(:lower) %>");
|
20
|
-
</script>
|
21
|
-
<%= yield :scripts %>
|
22
|
-
</body>
|
23
|
-
</html>
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html class="sibu">
|
3
|
+
<head>
|
4
|
+
<title><%= conf[:title] %></title>
|
5
|
+
<%= stylesheet_link_tag conf[:stylesheet], media: 'all' %>
|
6
|
+
<%= javascript_include_tag conf[:javascript] %>
|
7
|
+
<%= javascript_include_tag 'sibu/common' %>
|
8
|
+
<%= csrf_meta_tags %>
|
9
|
+
</head>
|
10
|
+
<body>
|
11
|
+
<% [:top_panel, :side_panel, :content_panel, :bottom_panel].each do |panel| %>
|
12
|
+
<% unless conf[panel].blank? %>
|
13
|
+
<div class="sibu_panel">
|
14
|
+
<%= render conf[panel] %>
|
15
|
+
</div>
|
16
|
+
<% end %>
|
17
|
+
<% end %>
|
18
|
+
<script>
|
19
|
+
sibuCallback("<%= "#{action_name}_#{controller_name}".camelize(:lower) %>");
|
20
|
+
</script>
|
21
|
+
<%= yield :scripts %>
|
22
|
+
</body>
|
23
|
+
</html>
|
@@ -1,262 +1,262 @@
|
|
1
|
-
<!DOCTYPE html>
|
2
|
-
<html>
|
3
|
-
<head>
|
4
|
-
<title><%= conf[:title] %></title>
|
5
|
-
<%= stylesheet_link_tag "#{conf[:stylesheet]}-edit", media: 'all' %>
|
6
|
-
<%= stylesheet_link_tag 'sibu/sibu', media: 'all' %>
|
7
|
-
<%= javascript_include_tag "#{conf[:javascript]}-edit" %>
|
8
|
-
<%= javascript_include_tag 'sibu/sibu' %>
|
9
|
-
<% if @site %>
|
10
|
-
<%= stylesheet_link_tag (conf[:custom_styles] ? @site.style_url : @site.site_template.path), media: "all" %>
|
11
|
-
<%= javascript_include_tag "#{@site.site_template.path}-core" %>
|
12
|
-
<% end %>
|
13
|
-
<%= csrf_meta_tags %>
|
14
|
-
<%= yield :styles %>
|
15
|
-
</head>
|
16
|
-
<body>
|
17
|
-
<% [:top_panel, :side_panel, :content_panel, :bottom_panel].each do |panel| %>
|
18
|
-
<% unless conf[panel].blank? %>
|
19
|
-
<div class="<%= panel == :content_panel ? 'sibu_content_panel' : 'sibu_panel' %>">
|
20
|
-
<%= render conf[panel] %>
|
21
|
-
<% if panel == :content_panel %>
|
22
|
-
<div id="edit_panel" class="sibu_panel sibu_view"></div>
|
23
|
-
<div id="sections_panel"></div>
|
24
|
-
<div id="edit_mode_overlay" class="sibu_panel sibu_view">
|
25
|
-
<div class="overlay_top"></div>
|
26
|
-
<div class="overlay_right"></div>
|
27
|
-
<div class="overlay_left"></div>
|
28
|
-
<div class="overlay_bottom"></div>
|
29
|
-
<div class="edit_mode_actions">
|
30
|
-
<p id="edit_section_msg">Modifier la section</p>
|
31
|
-
<% if conf[:section_form] %>
|
32
|
-
<button id="edit_section" onclick="editSection()">Configurer</button>
|
33
|
-
<% end %>
|
34
|
-
<button id="new_section_before" onclick="newSection(false)">Insérer un bloc avant</button>
|
35
|
-
<button id="new_section_after" onclick="newSection(true)">Insérer un bloc après</button>
|
36
|
-
<button id="delete_section" onclick="deleteSection()">Supprimer</button>
|
37
|
-
<button onclick="cancelEditMode()">Fermer</button>
|
38
|
-
</div>
|
39
|
-
</div>
|
40
|
-
<div id="edit_overlays"></div>
|
41
|
-
<% end %>
|
42
|
-
</div>
|
43
|
-
<% end %>
|
44
|
-
<% end %>
|
45
|
-
<script>
|
46
|
-
var rootElt = $('html, body');
|
47
|
-
|
48
|
-
$(function () {
|
49
|
-
initOverlays();
|
50
|
-
sibuCallback("editContent");
|
51
|
-
<% unless @edit_section.blank? %>
|
52
|
-
$("[data-sb-overlay='<%= @edit_section %>']").click();
|
53
|
-
<% end %>
|
54
|
-
});
|
55
|
-
|
56
|
-
function setEditMode(section, overlay, left, top, width, height) {
|
57
|
-
var editMode = $("#edit_mode_overlay");
|
58
|
-
editMode.find(".overlay_top").css("height", top);
|
59
|
-
editMode.find(".overlay_bottom").css("top", top + height);
|
60
|
-
editMode.find(".overlay_left").css({"height": height, "width": left, "top": top});
|
61
|
-
editMode.find(".overlay_right").css({"height": height, "left": left + width, "top": top});
|
62
|
-
editMode.find(".edit_mode_actions").css({"top": (top <= 120 ? (top + height) : (top - 40 - 20)), left: left, width: width});
|
63
|
-
editMode.find("#edit_section_msg").text("Modifier la section");
|
64
|
-
editMode.show();
|
65
|
-
if(!section.data('sb-repeat')) {
|
66
|
-
editMode.find("#new_section_before").hide();
|
67
|
-
editMode.find("#new_section_after").hide();
|
68
|
-
editMode.find("#delete_section").hide();
|
69
|
-
} else {
|
70
|
-
editMode.find("#new_section_before").show();
|
71
|
-
editMode.find("#new_section_after").show();
|
72
|
-
editMode.find("#delete_section").show();
|
73
|
-
}
|
74
|
-
rootElt.animate({scrollTop: top}, 500);
|
75
|
-
section.addClass('sb-editing');
|
76
|
-
initInnerOverlays(section);
|
77
|
-
$("#edit_overlays").html("");
|
78
|
-
}
|
79
|
-
|
80
|
-
function cancelEditMode() {
|
81
|
-
refreshAfterEdit(false);
|
82
|
-
$("#edit_mode_overlay").hide();
|
83
|
-
cancelEdit();
|
84
|
-
$(".sb-editing").removeClass("sb-editing");
|
85
|
-
initOverlays();
|
86
|
-
if(typeof editCancelledCallback === "function") {
|
87
|
-
editCancelledCallback();
|
88
|
-
}
|
89
|
-
}
|
90
|
-
|
91
|
-
function newSection(isAfter) {
|
92
|
-
var section = $(".sb-editing").first();
|
93
|
-
var sectionsPanel = $("#sections_panel");
|
94
|
-
sectionsPanel.html(
|
95
|
-
'<div class="sibu_panel sibu_view"><h2>Choix du type de section</h2></div>' +
|
96
|
-
'<div><div class="sibu_sections sibu_site_content" style="text-align: center;">Chargement en cours...</div></div>' +
|
97
|
-
'<div class="sibu_panel sibu_view"><div class="sibu_actions"><a href="#" onclick="cancelSectionsEdit(); return false;">Annuler</a></div></div>'
|
98
|
-
);
|
99
|
-
sectionsPanel.slideDown("fast");
|
100
|
-
$.ajax({
|
101
|
-
url: "<%= new_section_site_page_path(@site.id, @page.id) %>",
|
102
|
-
method: "GET",
|
103
|
-
data: {
|
104
|
-
section_id: section.data("sb-id"),
|
105
|
-
entity: section.data("sb-entity"),
|
106
|
-
after: isAfter
|
107
|
-
}
|
108
|
-
})
|
109
|
-
}
|
110
|
-
|
111
|
-
function editSection() {
|
112
|
-
var section = $(".sb-editing").first();
|
113
|
-
$.ajax({
|
114
|
-
url: "<%= edit_section_site_page_path(@site.id, @page.id) %>",
|
115
|
-
method: "GET",
|
116
|
-
data: {
|
117
|
-
section_id: section.data("sb-id"),
|
118
|
-
entity: section.data("sb-entity")
|
119
|
-
}
|
120
|
-
})
|
121
|
-
}
|
122
|
-
|
123
|
-
function deleteSection() {
|
124
|
-
if (window.confirm("Supprimer la section ?")) {
|
125
|
-
var section = $(".sb-editing").first();
|
126
|
-
$.ajax({
|
127
|
-
url: "<%= delete_section_site_page_path(@site.id, @page.id) %>",
|
128
|
-
method: "DELETE",
|
129
|
-
data: {
|
130
|
-
section_id: section.data("sb-id"),
|
131
|
-
entity: section.data("sb-entity")
|
132
|
-
}
|
133
|
-
})
|
134
|
-
}
|
135
|
-
}
|
136
|
-
|
137
|
-
function cloneElement(entity, sectionId, elementId) {
|
138
|
-
if (window.confirm("Dupliquer l'élément ?")) {
|
139
|
-
$.ajax({
|
140
|
-
url: "<%= clone_element_site_page_path(@site.id, @page.id) %>",
|
141
|
-
method: "POST",
|
142
|
-
data: {
|
143
|
-
section_id: sectionId,
|
144
|
-
element_id: elementId,
|
145
|
-
entity: entity
|
146
|
-
}
|
147
|
-
})
|
148
|
-
}
|
149
|
-
}
|
150
|
-
|
151
|
-
function deleteElement(entity, sectionId, elementId) {
|
152
|
-
if (window.confirm("Supprimer l'élément ?")) {
|
153
|
-
$.ajax({
|
154
|
-
url: "<%= delete_element_site_page_path(@site.id, @page.id) %>",
|
155
|
-
method: "DELETE",
|
156
|
-
data: {
|
157
|
-
section_id: sectionId,
|
158
|
-
element_id: elementId,
|
159
|
-
entity: entity
|
160
|
-
}
|
161
|
-
})
|
162
|
-
}
|
163
|
-
}
|
164
|
-
|
165
|
-
function addChildElement(entity, sectionId, elementId) {
|
166
|
-
if (window.confirm("Ajouter un sous-menu ?")) {
|
167
|
-
$.ajax({
|
168
|
-
url: "<%= child_element_site_page_path(@site.id, @page.id) %>",
|
169
|
-
method: "POST",
|
170
|
-
data: {
|
171
|
-
section_id: sectionId,
|
172
|
-
element_id: elementId,
|
173
|
-
entity: entity
|
174
|
-
}
|
175
|
-
})
|
176
|
-
}
|
177
|
-
}
|
178
|
-
|
179
|
-
function cancelEdit() {
|
180
|
-
$("#edit_panel").slideUp("fast");
|
181
|
-
$("#edit_panel").html("");
|
182
|
-
document.body.style.overflow = "initial";
|
183
|
-
}
|
184
|
-
|
185
|
-
function cancelSectionsEdit() {
|
186
|
-
$("#sections_panel").slideUp("fast");
|
187
|
-
$("#sections_panel").html("");
|
188
|
-
document.body.style.overflow = "initial";
|
189
|
-
}
|
190
|
-
|
191
|
-
function editContent(eltId, sectionId, entity, repeat, contentType, size, children) {
|
192
|
-
$.ajax({
|
193
|
-
url: "<%= edit_element_site_page_path(@site.id, @page.id) %>",
|
194
|
-
method: "GET",
|
195
|
-
data: {
|
196
|
-
element_id: eltId,
|
197
|
-
section_id: sectionId,
|
198
|
-
entity: entity,
|
199
|
-
repeat: repeat,
|
200
|
-
content_type: contentType,
|
201
|
-
size: size,
|
202
|
-
children: children
|
203
|
-
}
|
204
|
-
})
|
205
|
-
}
|
206
|
-
|
207
|
-
function initInnerOverlays(section) {
|
208
|
-
var editables = section.find("[data-type]");
|
209
|
-
editables.off();
|
210
|
-
editables.hover(function(evt) {
|
211
|
-
evt.stopPropagation();
|
212
|
-
$(this).addClass("sb-editable");
|
213
|
-
}, function() {
|
214
|
-
$(this).removeClass("sb-editable");
|
215
|
-
});
|
216
|
-
editables.click(function(evt) {
|
217
|
-
evt.stopPropagation();
|
218
|
-
evt.preventDefault();
|
219
|
-
var elt = $(this), eltId = elt.data("id"), repeat = elt.data("repeat"), type = elt.data("type"),
|
220
|
-
size = elt.data("size"), children = elt.data("children");
|
221
|
-
var sectionId = section.data("sb-id"), entity = section.data("sb-entity");
|
222
|
-
editContent(eltId, sectionId, entity, repeat, type, size, children);
|
223
|
-
})
|
224
|
-
}
|
225
|
-
|
226
|
-
function initOverlays() {
|
227
|
-
var container = $("#edit_overlays");
|
228
|
-
container.html("");
|
229
|
-
$("[data-sb-id]").each(function() {
|
230
|
-
var section = $(this);
|
231
|
-
var offset = section.offset();
|
232
|
-
var yOffset = offset.top - $(".sibu_content_panel").offset().top;
|
233
|
-
var width = section.outerWidth(), height = (section.outerHeight() === 0 ? childrenHeight(section) : section.outerHeight());
|
234
|
-
var overlay = $("<div data-sb-overlay='" + section.attr("data-sb-id") + "'>Modifier</div>");
|
235
|
-
container.append(overlay);
|
236
|
-
overlay.css({top: yOffset, left: offset.left, width: width, height: height});
|
237
|
-
overlay.hover(function() {
|
238
|
-
$(this).css("opacity", 1);
|
239
|
-
}, function() {
|
240
|
-
$(this).css("opacity", 0);
|
241
|
-
});
|
242
|
-
overlay.click(function() {
|
243
|
-
setEditMode(section, $(this), offset.left, yOffset, width, height);
|
244
|
-
})
|
245
|
-
});
|
246
|
-
}
|
247
|
-
|
248
|
-
function childrenHeight(parentElt) {
|
249
|
-
var height = 0;
|
250
|
-
parentElt.find("*").each(function() {
|
251
|
-
var childHeight = $(this).height();
|
252
|
-
if(childHeight > height) {
|
253
|
-
height = childHeight;
|
254
|
-
}
|
255
|
-
});
|
256
|
-
return height;
|
257
|
-
}
|
258
|
-
</script>
|
259
|
-
<%= yield :site_scripts %>
|
260
|
-
<%= yield :page_scripts %>
|
261
|
-
</body>
|
262
|
-
</html>
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title><%= conf[:title] %></title>
|
5
|
+
<%= stylesheet_link_tag "#{conf[:stylesheet]}-edit", media: 'all' %>
|
6
|
+
<%= stylesheet_link_tag 'sibu/sibu', media: 'all' %>
|
7
|
+
<%= javascript_include_tag "#{conf[:javascript]}-edit" %>
|
8
|
+
<%= javascript_include_tag 'sibu/sibu' %>
|
9
|
+
<% if @site %>
|
10
|
+
<%= stylesheet_link_tag (conf[:custom_styles] ? @site.style_url : @site.site_template.path), media: "all" %>
|
11
|
+
<%= javascript_include_tag "#{@site.site_template.path}-core" %>
|
12
|
+
<% end %>
|
13
|
+
<%= csrf_meta_tags %>
|
14
|
+
<%= yield :styles %>
|
15
|
+
</head>
|
16
|
+
<body>
|
17
|
+
<% [:top_panel, :side_panel, :content_panel, :bottom_panel].each do |panel| %>
|
18
|
+
<% unless conf[panel].blank? %>
|
19
|
+
<div class="<%= panel == :content_panel ? 'sibu_content_panel' : 'sibu_panel' %>">
|
20
|
+
<%= render conf[panel] %>
|
21
|
+
<% if panel == :content_panel %>
|
22
|
+
<div id="edit_panel" class="sibu_panel sibu_view"></div>
|
23
|
+
<div id="sections_panel"></div>
|
24
|
+
<div id="edit_mode_overlay" class="sibu_panel sibu_view">
|
25
|
+
<div class="overlay_top"></div>
|
26
|
+
<div class="overlay_right"></div>
|
27
|
+
<div class="overlay_left"></div>
|
28
|
+
<div class="overlay_bottom"></div>
|
29
|
+
<div class="edit_mode_actions">
|
30
|
+
<p id="edit_section_msg">Modifier la section</p>
|
31
|
+
<% if conf[:section_form] %>
|
32
|
+
<button id="edit_section" onclick="editSection()">Configurer</button>
|
33
|
+
<% end %>
|
34
|
+
<button id="new_section_before" onclick="newSection(false)">Insérer un bloc avant</button>
|
35
|
+
<button id="new_section_after" onclick="newSection(true)">Insérer un bloc après</button>
|
36
|
+
<button id="delete_section" onclick="deleteSection()">Supprimer</button>
|
37
|
+
<button onclick="cancelEditMode()">Fermer</button>
|
38
|
+
</div>
|
39
|
+
</div>
|
40
|
+
<div id="edit_overlays"></div>
|
41
|
+
<% end %>
|
42
|
+
</div>
|
43
|
+
<% end %>
|
44
|
+
<% end %>
|
45
|
+
<script>
|
46
|
+
var rootElt = $('html, body');
|
47
|
+
|
48
|
+
$(function () {
|
49
|
+
initOverlays();
|
50
|
+
sibuCallback("editContent");
|
51
|
+
<% unless @edit_section.blank? %>
|
52
|
+
$("[data-sb-overlay='<%= @edit_section %>']").click();
|
53
|
+
<% end %>
|
54
|
+
});
|
55
|
+
|
56
|
+
function setEditMode(section, overlay, left, top, width, height) {
|
57
|
+
var editMode = $("#edit_mode_overlay");
|
58
|
+
editMode.find(".overlay_top").css("height", top);
|
59
|
+
editMode.find(".overlay_bottom").css("top", top + height);
|
60
|
+
editMode.find(".overlay_left").css({"height": height, "width": left, "top": top});
|
61
|
+
editMode.find(".overlay_right").css({"height": height, "left": left + width, "top": top});
|
62
|
+
editMode.find(".edit_mode_actions").css({"top": (top <= 120 ? (top + height) : (top - 40 - 20)), left: left, width: width});
|
63
|
+
editMode.find("#edit_section_msg").text("Modifier la section");
|
64
|
+
editMode.show();
|
65
|
+
if(!section.data('sb-repeat')) {
|
66
|
+
editMode.find("#new_section_before").hide();
|
67
|
+
editMode.find("#new_section_after").hide();
|
68
|
+
editMode.find("#delete_section").hide();
|
69
|
+
} else {
|
70
|
+
editMode.find("#new_section_before").show();
|
71
|
+
editMode.find("#new_section_after").show();
|
72
|
+
editMode.find("#delete_section").show();
|
73
|
+
}
|
74
|
+
rootElt.animate({scrollTop: top}, 500);
|
75
|
+
section.addClass('sb-editing');
|
76
|
+
initInnerOverlays(section);
|
77
|
+
$("#edit_overlays").html("");
|
78
|
+
}
|
79
|
+
|
80
|
+
function cancelEditMode() {
|
81
|
+
refreshAfterEdit(false);
|
82
|
+
$("#edit_mode_overlay").hide();
|
83
|
+
cancelEdit();
|
84
|
+
$(".sb-editing").removeClass("sb-editing");
|
85
|
+
initOverlays();
|
86
|
+
if(typeof editCancelledCallback === "function") {
|
87
|
+
editCancelledCallback();
|
88
|
+
}
|
89
|
+
}
|
90
|
+
|
91
|
+
function newSection(isAfter) {
|
92
|
+
var section = $(".sb-editing").first();
|
93
|
+
var sectionsPanel = $("#sections_panel");
|
94
|
+
sectionsPanel.html(
|
95
|
+
'<div class="sibu_panel sibu_view"><h2>Choix du type de section</h2></div>' +
|
96
|
+
'<div><div class="sibu_sections sibu_site_content" style="text-align: center;">Chargement en cours...</div></div>' +
|
97
|
+
'<div class="sibu_panel sibu_view"><div class="sibu_actions"><a href="#" onclick="cancelSectionsEdit(); return false;">Annuler</a></div></div>'
|
98
|
+
);
|
99
|
+
sectionsPanel.slideDown("fast");
|
100
|
+
$.ajax({
|
101
|
+
url: "<%= new_section_site_page_path(@site.id, @page.id) %>",
|
102
|
+
method: "GET",
|
103
|
+
data: {
|
104
|
+
section_id: section.data("sb-id"),
|
105
|
+
entity: section.data("sb-entity"),
|
106
|
+
after: isAfter
|
107
|
+
}
|
108
|
+
})
|
109
|
+
}
|
110
|
+
|
111
|
+
function editSection() {
|
112
|
+
var section = $(".sb-editing").first();
|
113
|
+
$.ajax({
|
114
|
+
url: "<%= edit_section_site_page_path(@site.id, @page.id) %>",
|
115
|
+
method: "GET",
|
116
|
+
data: {
|
117
|
+
section_id: section.data("sb-id"),
|
118
|
+
entity: section.data("sb-entity")
|
119
|
+
}
|
120
|
+
})
|
121
|
+
}
|
122
|
+
|
123
|
+
function deleteSection() {
|
124
|
+
if (window.confirm("Supprimer la section ?")) {
|
125
|
+
var section = $(".sb-editing").first();
|
126
|
+
$.ajax({
|
127
|
+
url: "<%= delete_section_site_page_path(@site.id, @page.id) %>",
|
128
|
+
method: "DELETE",
|
129
|
+
data: {
|
130
|
+
section_id: section.data("sb-id"),
|
131
|
+
entity: section.data("sb-entity")
|
132
|
+
}
|
133
|
+
})
|
134
|
+
}
|
135
|
+
}
|
136
|
+
|
137
|
+
function cloneElement(entity, sectionId, elementId) {
|
138
|
+
if (window.confirm("Dupliquer l'élément ?")) {
|
139
|
+
$.ajax({
|
140
|
+
url: "<%= clone_element_site_page_path(@site.id, @page.id) %>",
|
141
|
+
method: "POST",
|
142
|
+
data: {
|
143
|
+
section_id: sectionId,
|
144
|
+
element_id: elementId,
|
145
|
+
entity: entity
|
146
|
+
}
|
147
|
+
})
|
148
|
+
}
|
149
|
+
}
|
150
|
+
|
151
|
+
function deleteElement(entity, sectionId, elementId) {
|
152
|
+
if (window.confirm("Supprimer l'élément ?")) {
|
153
|
+
$.ajax({
|
154
|
+
url: "<%= delete_element_site_page_path(@site.id, @page.id) %>",
|
155
|
+
method: "DELETE",
|
156
|
+
data: {
|
157
|
+
section_id: sectionId,
|
158
|
+
element_id: elementId,
|
159
|
+
entity: entity
|
160
|
+
}
|
161
|
+
})
|
162
|
+
}
|
163
|
+
}
|
164
|
+
|
165
|
+
function addChildElement(entity, sectionId, elementId) {
|
166
|
+
if (window.confirm("Ajouter un sous-menu ?")) {
|
167
|
+
$.ajax({
|
168
|
+
url: "<%= child_element_site_page_path(@site.id, @page.id) %>",
|
169
|
+
method: "POST",
|
170
|
+
data: {
|
171
|
+
section_id: sectionId,
|
172
|
+
element_id: elementId,
|
173
|
+
entity: entity
|
174
|
+
}
|
175
|
+
})
|
176
|
+
}
|
177
|
+
}
|
178
|
+
|
179
|
+
function cancelEdit() {
|
180
|
+
$("#edit_panel").slideUp("fast");
|
181
|
+
$("#edit_panel").html("");
|
182
|
+
document.body.style.overflow = "initial";
|
183
|
+
}
|
184
|
+
|
185
|
+
function cancelSectionsEdit() {
|
186
|
+
$("#sections_panel").slideUp("fast");
|
187
|
+
$("#sections_panel").html("");
|
188
|
+
document.body.style.overflow = "initial";
|
189
|
+
}
|
190
|
+
|
191
|
+
function editContent(eltId, sectionId, entity, repeat, contentType, size, children) {
|
192
|
+
$.ajax({
|
193
|
+
url: "<%= edit_element_site_page_path(@site.id, @page.id) %>",
|
194
|
+
method: "GET",
|
195
|
+
data: {
|
196
|
+
element_id: eltId,
|
197
|
+
section_id: sectionId,
|
198
|
+
entity: entity,
|
199
|
+
repeat: repeat,
|
200
|
+
content_type: contentType,
|
201
|
+
size: size,
|
202
|
+
children: children
|
203
|
+
}
|
204
|
+
})
|
205
|
+
}
|
206
|
+
|
207
|
+
function initInnerOverlays(section) {
|
208
|
+
var editables = section.find("[data-type]");
|
209
|
+
editables.off();
|
210
|
+
editables.hover(function(evt) {
|
211
|
+
evt.stopPropagation();
|
212
|
+
$(this).addClass("sb-editable");
|
213
|
+
}, function() {
|
214
|
+
$(this).removeClass("sb-editable");
|
215
|
+
});
|
216
|
+
editables.click(function(evt) {
|
217
|
+
evt.stopPropagation();
|
218
|
+
evt.preventDefault();
|
219
|
+
var elt = $(this), eltId = elt.data("id"), repeat = elt.data("repeat"), type = elt.data("type"),
|
220
|
+
size = elt.data("size"), children = elt.data("children");
|
221
|
+
var sectionId = section.data("sb-id"), entity = section.data("sb-entity");
|
222
|
+
editContent(eltId, sectionId, entity, repeat, type, size, children);
|
223
|
+
})
|
224
|
+
}
|
225
|
+
|
226
|
+
function initOverlays() {
|
227
|
+
var container = $("#edit_overlays");
|
228
|
+
container.html("");
|
229
|
+
$("[data-sb-id]").each(function() {
|
230
|
+
var section = $(this);
|
231
|
+
var offset = section.offset();
|
232
|
+
var yOffset = offset.top - $(".sibu_content_panel").offset().top;
|
233
|
+
var width = section.outerWidth(), height = (section.outerHeight() === 0 ? childrenHeight(section) : section.outerHeight());
|
234
|
+
var overlay = $("<div data-sb-overlay='" + section.attr("data-sb-id") + "'>Modifier</div>");
|
235
|
+
container.append(overlay);
|
236
|
+
overlay.css({top: yOffset, left: offset.left, width: width, height: height});
|
237
|
+
overlay.hover(function() {
|
238
|
+
$(this).css("opacity", 1);
|
239
|
+
}, function() {
|
240
|
+
$(this).css("opacity", 0);
|
241
|
+
});
|
242
|
+
overlay.click(function() {
|
243
|
+
setEditMode(section, $(this), offset.left, yOffset, width, height);
|
244
|
+
})
|
245
|
+
});
|
246
|
+
}
|
247
|
+
|
248
|
+
function childrenHeight(parentElt) {
|
249
|
+
var height = 0;
|
250
|
+
parentElt.find("*").each(function() {
|
251
|
+
var childHeight = $(this).height();
|
252
|
+
if(childHeight > height) {
|
253
|
+
height = childHeight;
|
254
|
+
}
|
255
|
+
});
|
256
|
+
return height;
|
257
|
+
}
|
258
|
+
</script>
|
259
|
+
<%= yield :site_scripts %>
|
260
|
+
<%= yield :page_scripts %>
|
261
|
+
</body>
|
262
|
+
</html>
|