sibu 0.2.6 → 0.2.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/assets/javascripts/sibu/sibu.js.erb +5 -4
- data/app/controllers/sibu/documents_controller.rb +35 -0
- data/app/helpers/sibu/documents_helper.rb +4 -0
- data/app/helpers/sibu/pages_helper.rb +14 -4
- data/app/models/concerns/sibu/document_uploader.rb +8 -0
- data/app/models/sibu/document.rb +14 -0
- data/app/views/sibu/documents/_form.html.erb +15 -0
- data/app/views/sibu/documents/index.html.erb +37 -0
- data/app/views/sibu/documents/new.html.erb +13 -0
- data/app/views/sibu/images/index.html.erb +1 -1
- data/app/views/sibu/pages/_link_edit_panel.html.erb +13 -8
- data/app/views/sibu/pages/_media_edit_panel.html.erb +5 -1
- data/app/views/sibu/pages/edit_element.js.erb +20 -2
- data/app/views/sibu/sites/index.html.erb +1 -0
- data/config/initializers/shrine.rb +3 -1
- data/config/routes.rb +1 -2
- data/db/migrate/20180321144021_move_images_to_user_level.rb +1 -1
- data/db/migrate/20180405095448_create_sibu_documents.rb +10 -0
- data/lib/sibu/version.rb +1 -1
- metadata +10 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 12b8c61886eced3159e2e597e31fe83c3bac36ca
|
4
|
+
data.tar.gz: f0a8a11c80f92c1a39a254aef356b26dbc9efe4e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 941e6278c17d84a88897be0a055c416e0c28fce3679d7a003cd55fcb055b53ac3a87e7f8d7ea9095b1f88d104c01fe3589c289d90f5ee471d2945083e1505e84
|
7
|
+
data.tar.gz: b9d7b3e5c8ecb60bedf2fb51c2d9eb4fc11ba05733e27a37528272269dbcf535b2f58a479e2ee50f9fb8d4c642bab96a5b64fcc70c580afc0af9af342c8a8149
|
@@ -79,14 +79,14 @@ function initQuillEditor(container) {
|
|
79
79
|
return quill;
|
80
80
|
}
|
81
81
|
|
82
|
-
|
83
82
|
function initCropper(imgId) {
|
84
83
|
var wrapper = $(".sibu_crop").first();
|
85
84
|
var srcImg = $("#content_panel").find(".sb-editing img[data-id='" + imgId + "']").first();
|
86
85
|
var srcContainer = srcImg.parent();
|
87
86
|
var ratio = parseFloat(srcContainer.css("width")) / parseFloat(wrapper.css("width"));
|
88
|
-
|
89
|
-
|
87
|
+
var wrapperHeight = Math.min(320, parseFloat(srcContainer.css("height")) / ratio) + "px";
|
88
|
+
wrapper.css("height", wrapperHeight);
|
89
|
+
return new Cropper(wrapper.find("img")[0], {
|
90
90
|
crop: function(event) {
|
91
91
|
var data = event.detail;
|
92
92
|
var cropper = this.cropper;
|
@@ -97,7 +97,8 @@ function initCropper(imgId) {
|
|
97
97
|
var height = imageData.naturalHeight / imageScaledRatio + 'px';
|
98
98
|
var marginLeft = -data.x / imageScaledRatio + 'px';
|
99
99
|
var marginTop = -data.y / imageScaledRatio + 'px';
|
100
|
-
|
100
|
+
// console.log("crop detail : " + JSON.stringify(data));
|
101
|
+
// console.log('img data : ' + JSON.stringify(imageData));
|
101
102
|
$("#element_style").val("width: " + width + "; height: " + height + "; margin-left: " + marginLeft + "; margin-top: " + marginTop +"; max-width: none; max-height: none;");
|
102
103
|
}
|
103
104
|
});
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require_dependency "sibu/application_controller"
|
2
|
+
|
3
|
+
module Sibu
|
4
|
+
class DocumentsController < ApplicationController
|
5
|
+
def index
|
6
|
+
@documents = Sibu::Document.for_user(sibu_user)
|
7
|
+
end
|
8
|
+
|
9
|
+
def new
|
10
|
+
@document = Sibu::Document.new(user_id: send(Rails.application.config.sibu[:current_user]).id)
|
11
|
+
end
|
12
|
+
|
13
|
+
def create
|
14
|
+
@document = Sibu::Document.new(document_params)
|
15
|
+
if @document.save
|
16
|
+
redirect_to documents_url, notice: "Le document a bien été téléchargé."
|
17
|
+
else
|
18
|
+
flash.now[:alert] = "Une erreur s'est produite lors du téléchargement du document."
|
19
|
+
render :new
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def destroy
|
24
|
+
@document = @document.find(params[:id])
|
25
|
+
@document.destroy
|
26
|
+
redirect_to documents_url, notice: "Le document a bien été supprimé."
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def document_params
|
32
|
+
params.require(:document).permit!
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -16,11 +16,21 @@ module Sibu
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def available_links
|
19
|
-
options_from_collection_for_select(@site.pages, :id, :name, @element["value"])
|
19
|
+
options_from_collection_for_select(@site.pages.order(:name), :id, :name, @element["value"])
|
20
20
|
end
|
21
21
|
|
22
|
-
def
|
23
|
-
|
22
|
+
def available_docs
|
23
|
+
options_from_collection_for_select(Sibu::Document.for_user(sibu_user), :file_url, :file_name, @element["value"])
|
24
|
+
end
|
25
|
+
|
26
|
+
def link_type(val)
|
27
|
+
if val.blank? || val == '#' || /^\d{1,3}$/.match(val.to_s)
|
28
|
+
'internal'
|
29
|
+
elsif Sibu::Document.for_user(sibu_user).map {|d| d.file_url}.include?(val)
|
30
|
+
'document'
|
31
|
+
else
|
32
|
+
'external'
|
33
|
+
end
|
24
34
|
end
|
25
35
|
|
26
36
|
[:h1, :h2, :h3, :h4, :h5, :h6, :span].each do |t|
|
@@ -127,7 +137,7 @@ module Sibu
|
|
127
137
|
val = content.delete("value") || ""
|
128
138
|
text = content.delete("text");
|
129
139
|
html_opts.merge!({data: {id: elt_id(elt), type: "link", repeat: repeat, children: children}}) if action_name != 'show'
|
130
|
-
if val.to_s.include?('
|
140
|
+
if val.to_s.include?('/')
|
131
141
|
content["href"] = val
|
132
142
|
else
|
133
143
|
content["href"] = @links.keys.include?(val.to_s) ? (action_name == 'show' ? link_path(val) : site_page_edit_content_path(@site.id, val)) : '#'
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Sibu
|
2
|
+
class Document < ApplicationRecord
|
3
|
+
include DocumentUploader::Attachment.new(:file, cache: :documents_cache, store: :documents_store)
|
4
|
+
extend Sibu::UserConcern
|
5
|
+
|
6
|
+
validates_presence_of :file_data
|
7
|
+
|
8
|
+
store :file_data, accessors: [:metadata], coder: JSON
|
9
|
+
|
10
|
+
def file_name
|
11
|
+
metadata[:filename]
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
<%= form_for(@document) do |f| %>
|
2
|
+
<div class="sibu_field">
|
3
|
+
<%= f.label :file, "Sélection du document" %>
|
4
|
+
<div>
|
5
|
+
<%= f.hidden_field :file, value: @document.cached_file_data %>
|
6
|
+
<%= f.file_field :file %>
|
7
|
+
<small>Sélectionnez un document à télécharger depuis votre ordinateur</small>
|
8
|
+
</div>
|
9
|
+
</div>
|
10
|
+
<%= f.hidden_field :user_id %>
|
11
|
+
<div class="sibu_actions">
|
12
|
+
<%= f.submit 'Valider', data: {disable_with: "Téléchargement du document en cours..."} %>
|
13
|
+
<%= link_to 'Annuler', :back %>
|
14
|
+
</div>
|
15
|
+
<% end %>
|
@@ -0,0 +1,37 @@
|
|
1
|
+
<div class="sibu_view">
|
2
|
+
<div class="actions">
|
3
|
+
<%= link_to 'Télécharger un document', new_document_path %> <%= link_to 'Retour', :back %>
|
4
|
+
</div>
|
5
|
+
<h2>Documents téléchargés</h2>
|
6
|
+
<table class="sibu_documents">
|
7
|
+
<thead>
|
8
|
+
<tr>
|
9
|
+
<th>Nom</th>
|
10
|
+
<th>Taille</th>
|
11
|
+
<th>Mise à jour</th>
|
12
|
+
<th>Chemin d'accès (URL)</th>
|
13
|
+
<th></th>
|
14
|
+
</tr>
|
15
|
+
</thead>
|
16
|
+
<tbody>
|
17
|
+
<% @documents.each do |doc| %>
|
18
|
+
<tr>
|
19
|
+
<td><%= doc.metadata[:filename] %></td>
|
20
|
+
<td><%= doc.metadata[:size] > (1024 * 1024) ? "#{doc.metadata[:size] / (1024 * 1024)} Mo" : "#{doc.metadata[:size] / 1024} Ko" %></td>
|
21
|
+
<td><%= l doc.updated_at %></td>
|
22
|
+
<td><%= doc.file_url %></td>
|
23
|
+
<td>
|
24
|
+
<%= link_to 'Voir', doc.file_url, target: '_blank' %> |
|
25
|
+
<%= link_to 'Supprimer', document_path(doc), method: :delete, data: {confirm: "Supprimer le document \"#{doc.metadata[:filename]}\" ?"} %>
|
26
|
+
</td>
|
27
|
+
</tr>
|
28
|
+
<% end %>
|
29
|
+
<% if @documents.empty? %>
|
30
|
+
<tr>
|
31
|
+
<td colspan="4">Aucun document téléchargé pour le moment.</td>
|
32
|
+
</tr>
|
33
|
+
<% end %>
|
34
|
+
</tbody>
|
35
|
+
</table>
|
36
|
+
</div>
|
37
|
+
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<div class="sibu_view">
|
2
|
+
<div class="actions">
|
3
|
+
<%= link_to 'Retour', :back %>
|
4
|
+
</div>
|
5
|
+
<h2>Télécharger un document</h2>
|
6
|
+
<p>
|
7
|
+
Vous pouvez télécharger tous types de documents d'une taille inférieure à 10Mo.
|
8
|
+
Pour les documents textes, favorisez le format PDF pour une compatibilité optimale.
|
9
|
+
</p>
|
10
|
+
<div class="sibu_form">
|
11
|
+
<%= render 'form' %>
|
12
|
+
</div>
|
13
|
+
</div>
|
@@ -3,23 +3,28 @@
|
|
3
3
|
<%= render 'element_actions' %>
|
4
4
|
<div class="sibu_edit_form">
|
5
5
|
<%= form_tag(update_element_site_page_path(@site.id, @page.id), method: :patch, remote: true) do |f| %>
|
6
|
-
<%
|
6
|
+
<% current_type = link_type(@element["value"]) %>
|
7
7
|
<div class="sibu_field">
|
8
8
|
<%= label_tag 'element[text]', 'Libellé' %>
|
9
9
|
<%= text_field_tag 'element[text]', @element["text"] %>
|
10
10
|
</div>
|
11
11
|
<div id="link_internal" class="sibu_field">
|
12
|
-
<%= radio_button_tag :mode, 'internal', internal, class: 'radio' %>
|
12
|
+
<%= radio_button_tag :mode, 'internal', current_type == 'internal', class: 'radio' %>
|
13
13
|
<%= label_tag 'mode_internal', 'Lien vers une page du site' %>
|
14
|
-
<%= select_tag 'element[value]',
|
15
|
-
|
16
|
-
<%= hidden_field_tag 'element[target]', '_self', disabled: !internal %>
|
14
|
+
<%= select_tag 'element[value]', available_links, prompt: 'Sélectionnez une page', disabled: current_type != 'internal' %>
|
15
|
+
<%= hidden_field_tag 'element[target]', '_self', disabled: current_type != 'internal' %>
|
17
16
|
</div>
|
18
17
|
<div id="link_external" class="sibu_field">
|
19
|
-
<%= radio_button_tag :mode, 'external',
|
18
|
+
<%= radio_button_tag :mode, 'external', current_type == 'external', class: 'radio' %>
|
20
19
|
<%= label_tag 'mode_external', 'Lien vers un autre site' %>
|
21
|
-
<%= text_field_tag 'element[value]', (@element["value"]
|
22
|
-
<%= hidden_field_tag 'element[target]', '_blank', disabled:
|
20
|
+
<%= text_field_tag 'element[value]', (@element["value"] if current_type == 'external'), placeholder: 'Ex : http://www.un-site.com', disabled: current_type != 'external' %>
|
21
|
+
<%= hidden_field_tag 'element[target]', '_blank', disabled: current_type != 'external' %>
|
22
|
+
</div>
|
23
|
+
<div id="link_document" class="sibu_field">
|
24
|
+
<%= radio_button_tag :mode, 'document', current_type == 'document', class: 'radio' %>
|
25
|
+
<%= label_tag 'mode_document', 'Lien vers un document' %>
|
26
|
+
<%= select_tag 'element[value]', available_docs, prompt: 'Sélectionnez un document', disabled: current_type != 'document' %>
|
27
|
+
<%= hidden_field_tag 'element[target]', '_blank', disabled: current_type != 'document' %>
|
23
28
|
</div>
|
24
29
|
<%= hidden_field_tag 'element[id]', @element["id"] %>
|
25
30
|
<%= hidden_field_tag :element_id, @element_id %>
|
@@ -19,10 +19,14 @@
|
|
19
19
|
<% if @element["src"] == DEFAULT_IMG || @element["src"].blank? %>
|
20
20
|
<p>Veuillez sélectionner une image.</p>
|
21
21
|
<% end %>
|
22
|
+
<div class="sibu_is_cropped" style="display: <%= (@element["src"] == DEFAULT_IMG || @element["src"].blank?) ? 'none' : 'block' %>">
|
23
|
+
<%= check_box_tag('is_cropped', true, !@element["style"].blank?, id: 'is_cropped', class: 'checkbox') %>
|
24
|
+
<%= label_tag 'is_cropped', "Recadrer l'image" %>
|
25
|
+
</div>
|
22
26
|
<div class="sibu_crop">
|
23
27
|
<%= image_tag(@element["src"]) unless @element["src"] == DEFAULT_IMG || @element["src"].blank? %>
|
24
28
|
</div>
|
25
|
-
<div class="sibu_field">
|
29
|
+
<div class="sibu_field" style="display: <%= (@element["src"] == DEFAULT_IMG || @element["src"].blank?) ? 'none' : 'block' %>">
|
26
30
|
<%= label_tag 'element[alt]', 'Légende / texte alternatif' %>
|
27
31
|
<%= text_field_tag 'element[alt]', @element["alt"] %>
|
28
32
|
</div>
|
@@ -37,6 +37,7 @@ editPanel.slideDown("fast", function() {
|
|
37
37
|
});
|
38
38
|
<% when 'media' %>
|
39
39
|
var images = editPanel.find(".sibu_image img");
|
40
|
+
var isCropped = $("#is_cropped"), cropper;
|
40
41
|
images.click(function() {
|
41
42
|
if(!$(this).hasClass('selected')) {
|
42
43
|
images.removeClass('selected');
|
@@ -45,12 +46,29 @@ editPanel.slideDown("fast", function() {
|
|
45
46
|
$("#element_alt").val($(this).data("alt"));
|
46
47
|
editPanel.find(".sibu_crop").html('<img src="' + $("#element_src").val() + '"/>');
|
47
48
|
editPanel.find(".sibu_selected_image > p:first-child").hide();
|
48
|
-
|
49
|
+
editPanel.find(".sibu_selected_image").find(".sibu_is_cropped").show();
|
50
|
+
editPanel.find(".sibu_selected_image").find(".sibu_field").show();
|
51
|
+
if(isCropped.is(":checked")) {
|
52
|
+
cropper = initCropper("<%= @element_id %>");
|
53
|
+
}
|
49
54
|
}
|
50
55
|
});
|
51
56
|
if(editPanel.find(".sibu_crop img").size() > 0) {
|
52
|
-
|
57
|
+
if(isCropped.is(":checked")) {
|
58
|
+
cropper = initCropper("<%= @element_id %>");
|
59
|
+
}
|
53
60
|
}
|
61
|
+
isCropped.change(function() {
|
62
|
+
if($(this).is(":checked")) {
|
63
|
+
cropper = initCropper("<%= @element_id %>");
|
64
|
+
} else {
|
65
|
+
$("#element_style").val("");
|
66
|
+
$(".sibu_crop").attr("style", "");
|
67
|
+
if(cropper) {
|
68
|
+
cropper.destroy();
|
69
|
+
}
|
70
|
+
}
|
71
|
+
});
|
54
72
|
<% when 'link' %>
|
55
73
|
$("input[name='mode']").change(function() {
|
56
74
|
var selected = $(this).val();
|
@@ -5,7 +5,9 @@ Shrine.storages = {
|
|
5
5
|
cache: Shrine::Storage::FileSystem.new("public", prefix: "uploads/cache"),
|
6
6
|
store: Shrine::Storage::FileSystem.new("public", prefix: "uploads/store"),
|
7
7
|
styles_cache: Shrine::Storage::FileSystem.new("public", prefix: "stylesheets/cache"),
|
8
|
-
styles_store: Shrine::Storage::FileSystem.new("public", prefix: "stylesheets/store")
|
8
|
+
styles_store: Shrine::Storage::FileSystem.new("public", prefix: "stylesheets/store"),
|
9
|
+
documents_cache: Shrine::Storage::FileSystem.new("public", prefix: "documents/cache"),
|
10
|
+
documents_store: Shrine::Storage::FileSystem.new("public", prefix: "documents/store")
|
9
11
|
}
|
10
12
|
|
11
13
|
Shrine.plugin :activerecord
|
data/config/routes.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
class MoveImagesToUserLevel < ActiveRecord::Migration[5.1]
|
2
2
|
def change
|
3
3
|
add_column :sibu_images, :user_id, :integer
|
4
|
-
Sibu::Image.where("site_id IS NOT NULL").each {|img| img.update(user_id: img.
|
4
|
+
Sibu::Image.where("site_id IS NOT NULL").each {|img| img.update(user_id: Sibu::Site.find(img.site_id).user_id)}
|
5
5
|
remove_column :sibu_images, :site_id
|
6
6
|
end
|
7
7
|
end
|
data/lib/sibu/version.rb
CHANGED
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.2.
|
4
|
+
version: 0.2.7
|
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-
|
11
|
+
date: 2018-04-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -134,20 +134,24 @@ files:
|
|
134
134
|
- app/assets/stylesheets/sibu/icons.scss
|
135
135
|
- app/assets/stylesheets/sibu/sibu.css
|
136
136
|
- app/controllers/sibu/application_controller.rb
|
137
|
+
- app/controllers/sibu/documents_controller.rb
|
137
138
|
- app/controllers/sibu/images_controller.rb
|
138
139
|
- app/controllers/sibu/pages_controller.rb
|
139
140
|
- app/controllers/sibu/sites_controller.rb
|
140
141
|
- app/helpers/sibu/application_helper.rb
|
142
|
+
- app/helpers/sibu/documents_helper.rb
|
141
143
|
- app/helpers/sibu/images_helper.rb
|
142
144
|
- app/helpers/sibu/pages_helper.rb
|
143
145
|
- app/helpers/sibu/sites_helper.rb
|
144
146
|
- app/jobs/sibu/application_job.rb
|
145
147
|
- app/mailers/sibu/application_mailer.rb
|
148
|
+
- app/models/concerns/sibu/document_uploader.rb
|
146
149
|
- app/models/concerns/sibu/image_uploader.rb
|
147
150
|
- app/models/concerns/sibu/sections_concern.rb
|
148
151
|
- app/models/concerns/sibu/style_uploader.rb
|
149
152
|
- app/models/concerns/sibu/user_concern.rb
|
150
153
|
- app/models/sibu/application_record.rb
|
154
|
+
- app/models/sibu/document.rb
|
151
155
|
- app/models/sibu/dynamic_style.rb
|
152
156
|
- app/models/sibu/image.rb
|
153
157
|
- app/models/sibu/page.rb
|
@@ -156,6 +160,9 @@ files:
|
|
156
160
|
- app/views/layouts/sibu/application.html.erb
|
157
161
|
- app/views/layouts/sibu/edit_content.html.erb
|
158
162
|
- app/views/layouts/sibu/site.html.erb
|
163
|
+
- app/views/sibu/documents/_form.html.erb
|
164
|
+
- app/views/sibu/documents/index.html.erb
|
165
|
+
- app/views/sibu/documents/new.html.erb
|
159
166
|
- app/views/sibu/images/_edit_form.html.erb
|
160
167
|
- app/views/sibu/images/_form.html.erb
|
161
168
|
- app/views/sibu/images/edit.js.erb
|
@@ -215,6 +222,7 @@ files:
|
|
215
222
|
- db/migrate/20180301152101_add_default_styles_to_templates.rb
|
216
223
|
- db/migrate/20180321144021_move_images_to_user_level.rb
|
217
224
|
- db/migrate/20180321170310_add_version_to_sibu_sites.rb
|
225
|
+
- db/migrate/20180405095448_create_sibu_documents.rb
|
218
226
|
- lib/sibu.rb
|
219
227
|
- lib/sibu/engine.rb
|
220
228
|
- lib/sibu/utils.rb
|