binda 0.1.7 → 0.1.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +7 -0
- data/app/assets/javascripts/binda/components/fileupload.js +19 -0
- data/app/assets/javascripts/binda/dist/binda.bundle.js +161 -139
- data/app/controllers/binda/svgs_controller.rb +71 -0
- data/app/controllers/concerns/binda/fieldable_helpers.rb +48 -20
- data/app/models/binda/binda.rb +7 -0
- data/app/models/binda/field_setting.rb +8 -6
- data/app/models/binda/image.rb +2 -2
- data/app/models/binda/svg.rb +7 -0
- data/app/models/concerns/binda/fieldable_association_helpers.rb +10 -454
- data/app/models/concerns/binda/fieldable_association_helpers/fieldable_audio_helpers.rb +55 -0
- data/app/models/concerns/binda/fieldable_association_helpers/fieldable_date_helpers.rb +30 -0
- data/app/models/concerns/binda/fieldable_association_helpers/fieldable_image_helpers.rb +95 -0
- data/app/models/concerns/binda/fieldable_association_helpers/fieldable_relation_helpers.rb +68 -0
- data/app/models/concerns/binda/fieldable_association_helpers/fieldable_repeater_helpers.rb +32 -0
- data/app/models/concerns/binda/fieldable_association_helpers/fieldable_selection_helpers.rb +60 -0
- data/app/models/concerns/binda/fieldable_association_helpers/fieldable_string_helpers.rb +56 -0
- data/app/models/concerns/binda/fieldable_association_helpers/fieldable_svg_helpers.rb +74 -0
- data/app/models/concerns/binda/fieldable_association_helpers/fieldable_text_helpers.rb +59 -0
- data/app/models/concerns/binda/fieldable_association_helpers/fieldable_video_helpers.rb +56 -0
- data/app/models/concerns/binda/fieldable_associations.rb +4 -2
- data/app/uploaders/binda/svg_uploader.rb +62 -0
- data/app/views/binda/fieldable/_form_item_svg.html.erb +33 -0
- data/app/views/binda/fieldable/_form_item_video.html.erb +9 -8
- data/app/views/binda/fieldable/_form_section.html.erb +1 -1
- data/app/views/binda/structures/form_section/_form_section_header.html.erb +1 -1
- data/config/initializers/simple_form__fileupload.rb +14 -9
- data/config/initializers/simple_form_custom.rb +1 -1
- data/config/locales/en.yml +1 -0
- data/config/routes.rb +5 -0
- data/db/migrate/1_create_binda_tables.rb +1 -0
- data/lib/binda/version.rb +1 -1
- data/lib/generators/binda/setup/setup_generator.rb +5 -1
- data/lib/tasks/update_image_details_task.rake +1 -1
- metadata +17 -2
@@ -0,0 +1,59 @@
|
|
1
|
+
module Binda
|
2
|
+
module FieldableAssociationHelpers
|
3
|
+
module FieldableTextHelpers
|
4
|
+
|
5
|
+
extend ActiveSupport::Concern
|
6
|
+
# Get the object related to that field setting
|
7
|
+
# If the object doesn't exists yet it will return nil
|
8
|
+
#
|
9
|
+
# @param field_slug [string] The slug of the field setting
|
10
|
+
# @return [string] Returns the content of the text
|
11
|
+
# @return [error] Raise an error if no record is found
|
12
|
+
def get_text(field_slug)
|
13
|
+
obj = Text
|
14
|
+
.includes(:field_setting)
|
15
|
+
.where(fieldable_id: self.id, fieldable_type: self.class.name)
|
16
|
+
.where(binda_field_settings: { slug: field_slug })
|
17
|
+
.where.not(binda_field_settings: { field_type: "string" })
|
18
|
+
.first
|
19
|
+
unless obj.nil?
|
20
|
+
# to_s ensures the returned object is class String
|
21
|
+
obj.content.to_s
|
22
|
+
else
|
23
|
+
check_text_error field_slug
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
# Check why get_text doesn't return a value
|
28
|
+
# This method isn't supposed to be used by anything other than get_text method
|
29
|
+
def check_text_error(field_slug)
|
30
|
+
you_mean_string = !self.strings.find{ |t| t.field_setting_id == FieldSetting.get_id( field_slug ) && t.type == 'Binda::String' }.nil?
|
31
|
+
if you_mean_string
|
32
|
+
raise ArgumentError, "This slug (#{field_slug}) is associated to a string not a text. Use get_string() instead on instance (#{self.class.name} ##{self.id}).", caller
|
33
|
+
else
|
34
|
+
raise ArgumentError, "There isn't any text associated to the current slug (#{field_slug}) on instance (#{self.class.name} ##{self.id}).", caller
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
# Get the object related to that field setting
|
39
|
+
#
|
40
|
+
# @param field_slug [string] The slug of the field setting
|
41
|
+
# @return [boolean]
|
42
|
+
def has_text(field_slug)
|
43
|
+
obj = Text
|
44
|
+
.includes(:field_setting)
|
45
|
+
.where(fieldable_id: self.id, fieldable_type: self.class.name)
|
46
|
+
.where(binda_field_settings: { slug: field_slug })
|
47
|
+
.where.not(binda_field_settings: { field_type: "string" })
|
48
|
+
.first
|
49
|
+
raise ArgumentError, "There isn't any text associated to the current slug (#{field_slug}) on instance (#{self.class.name} ##{self.id}).", caller if obj.nil?
|
50
|
+
if obj.present?
|
51
|
+
return !obj.content.nil?
|
52
|
+
else
|
53
|
+
return false
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
module Binda
|
2
|
+
module FieldableAssociationHelpers
|
3
|
+
module FieldableVideoHelpers
|
4
|
+
|
5
|
+
# Check if the field has an attached video
|
6
|
+
#
|
7
|
+
# @param field_slug [string] The slug of the field setting
|
8
|
+
# @return [boolean]
|
9
|
+
def has_video(field_slug)
|
10
|
+
obj = self.videos.find{ |t| t.field_setting_id == FieldSetting.get_id( field_slug ) }
|
11
|
+
# Alternative query
|
12
|
+
# obj = Image.where(field_setting_id: FieldSetting.get_id( field_slug ), fieldable_id: self.id, fieldable_type: self.class.to_s ).first
|
13
|
+
raise ArgumentError, "There isn't any video associated to the current slug (#{field_slug}) on instance (#{self.class.name} ##{self.id}).", caller if obj.nil?
|
14
|
+
return obj.video.present?
|
15
|
+
end
|
16
|
+
|
17
|
+
# Get the video url based on the size provided,
|
18
|
+
# default is Carrierwave default (usually the real size)
|
19
|
+
#
|
20
|
+
# @param field_slug [string] The slug of the field setting
|
21
|
+
# @param size [string] The size. It can be 'thumb' 200x200 cropped,
|
22
|
+
# 'medium' 700x700 max size, 'large' 1400x1400 max size, or blank
|
23
|
+
# @return [string] The url of the video
|
24
|
+
def get_video_url(field_slug)
|
25
|
+
get_video_info( field_slug, 'url' )
|
26
|
+
end
|
27
|
+
|
28
|
+
# Get the video path based on the size provided,
|
29
|
+
# default is Carrierwave default (usually the real size)
|
30
|
+
#
|
31
|
+
# @param field_slug [string] The slug of the field setting
|
32
|
+
# @param size [string] The size. It can be 'thumb' 200x200 cropped,
|
33
|
+
# 'medium' 700x700 max size, 'large' 1400x1400 max size, or blank
|
34
|
+
# @return [string] The url of the video
|
35
|
+
def get_video_path(field_slug)
|
36
|
+
get_video_info( field_slug, 'path' )
|
37
|
+
end
|
38
|
+
|
39
|
+
# Get the object related to that field setting
|
40
|
+
#
|
41
|
+
# @param field_slug [string] The slug of the field setting
|
42
|
+
# @param info [string] String of the info to be retrieved
|
43
|
+
# @return [string] The info requested if present
|
44
|
+
# @return [boolean] Returns false if no info is found or if image isn't found
|
45
|
+
def get_video_info(field_slug, info)
|
46
|
+
obj = self.videos.find{ |t| t.field_setting_id == FieldSetting.get_id( field_slug ) }
|
47
|
+
# Alternative query
|
48
|
+
# obj = video.where(field_setting_id: FieldSetting.get_id( field_slug ), fieldable_id: self.id, fieldable_type: self.class.to_s ).first
|
49
|
+
raise ArgumentError, "There isn't any video associated to the current slug (#{field_slug}) on instance (#{self.class.name} ##{self.id}).", caller if obj.nil?
|
50
|
+
if obj.video.present?
|
51
|
+
obj.video.send(info)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -29,9 +29,10 @@ module Binda
|
|
29
29
|
has_many :radios, as: :fieldable, dependent: :delete_all
|
30
30
|
has_many :selections, as: :fieldable, dependent: :delete_all
|
31
31
|
has_many :checkboxes, as: :fieldable, dependent: :delete_all
|
32
|
+
has_many :svgs, as: :fieldable, dependent: :delete_all
|
32
33
|
# Repeaters need destroy_all, not delete_all
|
33
34
|
has_many :repeaters, as: :fieldable, dependent: :destroy
|
34
|
-
|
35
|
+
has_many :relations, as: :fieldable, dependent: :destroy
|
35
36
|
|
36
37
|
|
37
38
|
has_many :owner_relations, class_name: "RelationLink",
|
@@ -53,7 +54,7 @@ module Binda
|
|
53
54
|
source: :owner
|
54
55
|
|
55
56
|
|
56
|
-
accepts_nested_attributes_for :texts, :strings, :dates, :assets, :images, :videos, :audios, :galleries, :repeaters, :radios, :selections, :checkboxes, :relations, allow_destroy: true
|
57
|
+
accepts_nested_attributes_for :texts, :strings, :dates, :assets, :images, :videos, :audios, :galleries, :repeaters, :radios, :selections, :checkboxes, :relations, :svgs, allow_destroy: true
|
57
58
|
|
58
59
|
validates_associated :texts
|
59
60
|
validates_associated :strings
|
@@ -67,6 +68,7 @@ module Binda
|
|
67
68
|
validates_associated :selections
|
68
69
|
validates_associated :checkboxes
|
69
70
|
validates_associated :relations
|
71
|
+
validates_associated :svgs
|
70
72
|
|
71
73
|
after_save :generate_fields
|
72
74
|
|
@@ -0,0 +1,62 @@
|
|
1
|
+
module Binda
|
2
|
+
class SvgUploader < CarrierWave::Uploader::Base
|
3
|
+
# Include RMagick or MiniMagick support:
|
4
|
+
# include CarrierWave::RMagick
|
5
|
+
# include CarrierWave::MiniMagick
|
6
|
+
|
7
|
+
# Choose what kind of storage to use for this uploader:
|
8
|
+
# storage :file
|
9
|
+
# storage :fog
|
10
|
+
|
11
|
+
# Override the directory where uploaded files will be stored.
|
12
|
+
# This is a sensible default for uploaders that are meant to be mounted:
|
13
|
+
def store_dir
|
14
|
+
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
|
15
|
+
end
|
16
|
+
|
17
|
+
process :register_details
|
18
|
+
|
19
|
+
def register_details
|
20
|
+
if file && model
|
21
|
+
model.content_type = file.content_type if file.content_type
|
22
|
+
model.file_size = file.size
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
# Provide a default URL as a default if there hasn't been a file uploaded:
|
27
|
+
# def default_url(*args)
|
28
|
+
# # For Rails 3.1+ asset pipeline compatibility:
|
29
|
+
# # ActionController::Base.helpers.asset_path("fallback/" + [version_name, "default.png"].compact.join('_'))
|
30
|
+
#
|
31
|
+
# "/images/fallback/" + [version_name, "default.png"].compact.join('_')
|
32
|
+
# end
|
33
|
+
|
34
|
+
# Process files as they are uploaded:
|
35
|
+
# process scale: [200, 300]
|
36
|
+
#
|
37
|
+
# def scale(width, height)
|
38
|
+
# # do something
|
39
|
+
# end
|
40
|
+
|
41
|
+
# Create different versions of your uploaded files:
|
42
|
+
# version :thumb do
|
43
|
+
# process resize_to_fit: [50, 50]
|
44
|
+
# end
|
45
|
+
|
46
|
+
|
47
|
+
# Add a white list of extensions which are allowed to be uploaded.
|
48
|
+
# For images you might use something like this:
|
49
|
+
# def extension_whitelist
|
50
|
+
# %w(jpg jpeg gif png)
|
51
|
+
# end
|
52
|
+
def extension_whitelist
|
53
|
+
%w(svg)
|
54
|
+
end
|
55
|
+
|
56
|
+
# Override the filename of the uploaded files:
|
57
|
+
# Avoid using model.id or version_name here, see uploader/store.rb for details.
|
58
|
+
# def filename
|
59
|
+
# "something.jpg" if original_filename
|
60
|
+
# end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
<div id="standard-form--image-<%= field_setting.id %>" class="standard-form--image form-item">
|
2
|
+
<div id="fileupload-<%= ff.object.id %>"
|
3
|
+
class="fileupload form-group"
|
4
|
+
data-message="<%= t('binda.upload_loading_message') %>"
|
5
|
+
data-error="<%= t('binda.upload_error_message')%>">
|
6
|
+
<p class="control-label">
|
7
|
+
<%= field_setting.name %>
|
8
|
+
</p>
|
9
|
+
<% image = ff.object.image.thumb.url if ff.object.image.present? %>
|
10
|
+
<div class="fileupload--field">
|
11
|
+
<%= ff.input :svg,
|
12
|
+
label: "<i class=\"fa fa-upload\" aria-hidden=\"true\"></i> #{t('binda.choose_file_button')}".html_safe,
|
13
|
+
hint: field_setting.description.nil? ? false : field_setting.description.html_safe,
|
14
|
+
url: url_for([ff.object, action: :remove_svg]).html_safe,
|
15
|
+
object: ff.object,
|
16
|
+
wrapper: false,
|
17
|
+
input_html: {
|
18
|
+
'data-url': url_for([
|
19
|
+
@instance.structure,
|
20
|
+
@instance,
|
21
|
+
action: :upload,
|
22
|
+
repeater: { id: "#{field_setting.parent_id}" }]),
|
23
|
+
'data-id': ff.object.id
|
24
|
+
} %>
|
25
|
+
</div>
|
26
|
+
<%= ff.input :svg_cache, as: :hidden %>
|
27
|
+
<%= ff.input :field_setting_id, as: :hidden, input_html: { value: field_setting.id } %>
|
28
|
+
<%= ff.input :id, as: :hidden, input_html: { value: ff.object.id } %>
|
29
|
+
<%= ff.input :fieldable_id, as: :hidden %>
|
30
|
+
<%= ff.input :fieldable_type, as: :hidden %>
|
31
|
+
<div class="clearfix"></div>
|
32
|
+
</div>
|
33
|
+
</div>
|
@@ -7,19 +7,20 @@
|
|
7
7
|
<p class="control-label"><%= field_setting.name %></p>
|
8
8
|
|
9
9
|
<div class="fileupload--field">
|
10
|
-
|
11
|
-
<%= ff.input :video,
|
10
|
+
<%= ff.input :video,
|
12
11
|
label: "<i class=\"fa fa-upload\" aria-hidden=\"true\"></i> #{t('binda.choose_file_button')}".html_safe,
|
13
12
|
hint: field_setting.description.nil? ? false : field_setting.description.html_safe,
|
14
13
|
url: url_for([ff.object, action: :remove_video]).html_safe,
|
15
14
|
object: ff.object,
|
16
15
|
wrapper: false,
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
16
|
+
input_html: {
|
17
|
+
class: 'form-item--video--uploader',
|
18
|
+
'data-url': url_for([
|
19
|
+
@instance.structure,
|
20
|
+
@instance,
|
21
|
+
action: :upload]),
|
22
|
+
'data-id': ff.object.id,
|
23
|
+
} %>
|
23
24
|
</div>
|
24
25
|
|
25
26
|
<%= ff.input :video_cache, as: :hidden %>
|
@@ -1,4 +1,4 @@
|
|
1
|
-
<% if %w(text string date image video audio relation).include? field_setting.field_type %>
|
1
|
+
<% if %w(text string date image video audio relation svg).include? field_setting.field_type %>
|
2
2
|
<% current = @instance.find_or_create_a_field_by( field_setting.id, field_setting.field_type) %>
|
3
3
|
<%= f.simple_fields_for "#{field_setting.field_type}s_attributes[]", current do |ff| %>
|
4
4
|
<%= render "binda/fieldable/form_item_#{field_setting.field_type}", f: f, ff: ff, field_setting: field_setting %>
|
@@ -18,7 +18,7 @@
|
|
18
18
|
data-id="<%= f.object.id %>"
|
19
19
|
data-params="id=<%= f.object.id %>">
|
20
20
|
<i class="fa fa-plus" aria-hidden="true"></i>
|
21
|
-
<%= t('binda.
|
21
|
+
<%= t('binda.field_group.new') %>
|
22
22
|
</a>
|
23
23
|
<p class="control-label clearfix">
|
24
24
|
<%= f.object.name %> <%= t('binda.field_group.plural') %>
|
@@ -17,6 +17,8 @@ module SimpleForm
|
|
17
17
|
html << " fileupload--preview--uploaded"
|
18
18
|
elsif options[:object].audio.present?
|
19
19
|
html << " fileupload--preview--uploaded fileupload--preview--hidden"
|
20
|
+
elsif options[:object].svg.present?
|
21
|
+
html << " fileupload--preview--uploaded\" style=\"background-image: url(#{options[:object].svg.url})"
|
20
22
|
end
|
21
23
|
|
22
24
|
# Add no-preview text
|
@@ -54,7 +56,7 @@ module SimpleForm
|
|
54
56
|
obj = options[:object]
|
55
57
|
url = options[:url]
|
56
58
|
html = '<a class="b-btn b-btn-outline-danger fileupload--remove-image-btn'
|
57
|
-
html << ' fileupload--remove-image-btn--hidden' unless obj.image.present? || obj.video.present? || obj.audio.present?
|
59
|
+
html << ' fileupload--remove-image-btn--hidden' unless obj.image.present? || obj.video.present? || obj.audio.present? || obj.svg.present?
|
58
60
|
html << '" href="'
|
59
61
|
html << url
|
60
62
|
html << '" data-method="delete" data-remote="true" data-confirm="'
|
@@ -81,32 +83,35 @@ module SimpleForm
|
|
81
83
|
obj = options[:object]
|
82
84
|
|
83
85
|
html = '<div class="fileupload--details'
|
84
|
-
html << ' fileupload--details--hidden' unless obj.image.present? || obj.video.present? || obj.audio.present?
|
86
|
+
html << ' fileupload--details--hidden' unless obj.image.present? || obj.video.present? || obj.audio.present? || obj.svg.present?
|
85
87
|
html << '"><p class="fileupload--name">'
|
86
88
|
html << "<strong>#{t 'binda.filename'}:</strong> "
|
87
89
|
html << '<span class="fileupload--filename">'
|
88
90
|
html << File.basename(obj.image.path).to_s if obj.image.present?
|
89
91
|
html << File.basename(obj.video.path).to_s if obj.video.present?
|
90
92
|
html << File.basename(obj.audio.path).to_s if obj.audio.present?
|
93
|
+
html << File.basename(obj.svg.path).to_s if obj.svg.present?
|
91
94
|
html << '</span></p>'
|
92
95
|
html << '<p class="fileupload--size">'
|
93
96
|
html << "<strong>#{t 'binda.filesize'}:</strong> "
|
94
97
|
html << '<span class="fileupload--filesize">'
|
95
98
|
html << bytes_to_megabytes(obj.file_size).to_s unless obj.file_size.blank?
|
96
99
|
html << 'MB</span></p>'
|
97
|
-
html << '<p class="fileupload--dimension">'
|
98
|
-
html << "<strong>#{t 'binda.filedimension'}:</strong> "
|
99
|
-
html << '<span class="fileupload--width">'
|
100
|
-
html << obj.file_width.round.to_s unless obj.file_width.blank?
|
101
|
-
html << '</span> x <span class="fileupload--height">'
|
102
|
-
html << obj.file_height.round.to_s unless obj.file_height.blank?
|
103
|
-
html << '</span> px</p>'
|
100
|
+
html << '<p class="fileupload--dimension">' unless obj.svg.present?
|
101
|
+
html << "<strong>#{t 'binda.filedimension'}:</strong> " unless obj.svg.present?
|
102
|
+
html << '<span class="fileupload--width">' unless obj.svg.present?
|
103
|
+
html << obj.file_width.round.to_s unless obj.file_width.blank? unless obj.svg.present?
|
104
|
+
html << '</span> x <span class="fileupload--height">' unless obj.svg.present?
|
105
|
+
html << obj.file_height.round.to_s unless obj.file_height.blank? || obj.svg.present?
|
106
|
+
html << '</span> px</p>' unless obj.svg.present?
|
104
107
|
html << '<p class="fileupload--previewlink"><a href="'
|
105
108
|
html << obj.video.url if obj.video.present?
|
106
109
|
html << obj.audio.url if obj.audio.present?
|
110
|
+
html << obj.svg.url if obj.svg.present?
|
107
111
|
html << '" target="_blank"><i class="fas fa-external-link-alt"></i> <strong>'
|
108
112
|
html << t('binda.filevideolink') if obj.class.name.demodulize == 'Video'
|
109
113
|
html << t('binda.fileaudiolink') if obj.class.name.demodulize == 'Audio'
|
114
|
+
html << t('binda.filesvglink') if obj.class.name.demodulize == 'Svg'
|
110
115
|
html << '</strong></a></p>'
|
111
116
|
|
112
117
|
html << '</div>'
|
@@ -119,7 +119,7 @@ SimpleForm.setup do |config|
|
|
119
119
|
b.optional :maxlength
|
120
120
|
b.optional :readonly
|
121
121
|
|
122
|
-
b.use :preview
|
122
|
+
b.use :preview
|
123
123
|
b.wrapper tag: 'div', class: 'fileupload--dashboard' do |bb|
|
124
124
|
bb.use :label, class: 'control-label b-btn b-btn-primary', wrap_with: { tag: 'div', class: 'control-label-wrap' }
|
125
125
|
bb.use :delete_button
|
data/config/locales/en.yml
CHANGED
@@ -59,6 +59,7 @@ en:
|
|
59
59
|
filedimension: Dimension
|
60
60
|
filevideolink: Preview video
|
61
61
|
fileaudiolink: Preview audio
|
62
|
+
filesvglink: Preview svg
|
62
63
|
select_placeholder: Select a option
|
63
64
|
new_item_in_repeater: New %{arg1} item
|
64
65
|
null_is_not_allowed: You need to select at least one choice
|
data/config/routes.rb
CHANGED
data/lib/binda/version.rb
CHANGED
@@ -15,7 +15,11 @@ module Binda
|
|
15
15
|
puts "Implement Binda settings"
|
16
16
|
puts
|
17
17
|
|
18
|
-
|
18
|
+
if Structure.find_by(slug: 'dashboard').nil?
|
19
|
+
dashboard_structure = Structure.create!(name: 'dashboard', slug: 'dashboard', instance_type: 'board')
|
20
|
+
else
|
21
|
+
dashboard_structure = Structure.find_by(slug: 'dashboard')
|
22
|
+
end
|
19
23
|
@dashboard = dashboard_structure.board
|
20
24
|
|
21
25
|
# By default each structure has a field group which will be used to store the default field settings
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: binda
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alessandro Barbieri
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-03-
|
11
|
+
date: 2018-03-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -680,6 +680,7 @@ files:
|
|
680
680
|
- app/controllers/binda/manage/users_controller.rb
|
681
681
|
- app/controllers/binda/repeaters_controller.rb
|
682
682
|
- app/controllers/binda/structures_controller.rb
|
683
|
+
- app/controllers/binda/svgs_controller.rb
|
683
684
|
- app/controllers/binda/users/audios_controller.rb
|
684
685
|
- app/controllers/binda/users/confirmations_controller.rb
|
685
686
|
- app/controllers/binda/users/omniauth_callbacks_controller.rb
|
@@ -708,6 +709,7 @@ files:
|
|
708
709
|
- app/models/binda/asset.rb
|
709
710
|
- app/models/binda/audio.rb
|
710
711
|
- app/models/binda/b.rb
|
712
|
+
- app/models/binda/binda.rb
|
711
713
|
- app/models/binda/board.rb
|
712
714
|
- app/models/binda/category.rb
|
713
715
|
- app/models/binda/checkbox.rb
|
@@ -726,6 +728,7 @@ files:
|
|
726
728
|
- app/models/binda/selection.rb
|
727
729
|
- app/models/binda/string.rb
|
728
730
|
- app/models/binda/structure.rb
|
731
|
+
- app/models/binda/svg.rb
|
729
732
|
- app/models/binda/text.rb
|
730
733
|
- app/models/binda/user.rb
|
731
734
|
- app/models/binda/video.rb
|
@@ -733,10 +736,21 @@ files:
|
|
733
736
|
- app/models/concerns/binda/deprecations.rb
|
734
737
|
- app/models/concerns/binda/field_uniqueness.rb
|
735
738
|
- app/models/concerns/binda/fieldable_association_helpers.rb
|
739
|
+
- app/models/concerns/binda/fieldable_association_helpers/fieldable_audio_helpers.rb
|
740
|
+
- app/models/concerns/binda/fieldable_association_helpers/fieldable_date_helpers.rb
|
741
|
+
- app/models/concerns/binda/fieldable_association_helpers/fieldable_image_helpers.rb
|
742
|
+
- app/models/concerns/binda/fieldable_association_helpers/fieldable_relation_helpers.rb
|
743
|
+
- app/models/concerns/binda/fieldable_association_helpers/fieldable_repeater_helpers.rb
|
744
|
+
- app/models/concerns/binda/fieldable_association_helpers/fieldable_selection_helpers.rb
|
745
|
+
- app/models/concerns/binda/fieldable_association_helpers/fieldable_string_helpers.rb
|
746
|
+
- app/models/concerns/binda/fieldable_association_helpers/fieldable_svg_helpers.rb
|
747
|
+
- app/models/concerns/binda/fieldable_association_helpers/fieldable_text_helpers.rb
|
748
|
+
- app/models/concerns/binda/fieldable_association_helpers/fieldable_video_helpers.rb
|
736
749
|
- app/models/concerns/binda/fieldable_associations.rb
|
737
750
|
- app/models/concerns/binda/fields.rb
|
738
751
|
- app/uploaders/binda/audio/audio_uploader.rb
|
739
752
|
- app/uploaders/binda/image/image_uploader.rb
|
753
|
+
- app/uploaders/binda/svg_uploader.rb
|
740
754
|
- app/uploaders/binda/video/video_uploader.rb
|
741
755
|
- app/views/binda/assets/_form.html.erb
|
742
756
|
- app/views/binda/assets/edit.html.erb
|
@@ -787,6 +801,7 @@ files:
|
|
787
801
|
- app/views/binda/fieldable/_form_item_repeater.html.erb
|
788
802
|
- app/views/binda/fieldable/_form_item_selections.html.erb
|
789
803
|
- app/views/binda/fieldable/_form_item_string.html.erb
|
804
|
+
- app/views/binda/fieldable/_form_item_svg.html.erb
|
790
805
|
- app/views/binda/fieldable/_form_item_text.html.erb
|
791
806
|
- app/views/binda/fieldable/_form_item_video.html.erb
|
792
807
|
- app/views/binda/fieldable/_form_section.html.erb
|