simple_form_extension 1.0.3 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/generators/simple_form_extension/templates/config/locales/simple_form_extension.en.yml +2 -0
- data/lib/generators/simple_form_extension/templates/config/locales/simple_form_extension.fr.yml +2 -0
- data/lib/simple_form_extension/inputs.rb +2 -0
- data/lib/simple_form_extension/inputs/air_redactor_input.rb +15 -0
- data/lib/simple_form_extension/inputs/image_input.rb +20 -1
- data/lib/simple_form_extension/inputs/selectize_input.rb +88 -0
- data/lib/simple_form_extension/version.rb +1 -1
- data/simple_form_extension.gemspec +1 -0
- data/vendor/assets/javascripts/simple_form_extension.coffee +3 -0
- data/vendor/assets/javascripts/simple_form_extension/redactor.coffee +35 -0
- data/vendor/assets/javascripts/simple_form_extension/selectize.coffee +55 -0
- data/vendor/assets/stylesheets/simple_form_extension.sass +2 -0
- metadata +19 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 946b7d8265779451e32f1032aa3b9ace6d8f02c4
|
4
|
+
data.tar.gz: 0bd6a400862b4f5fdea0b5fab2fd476c64ab0d27
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aee6e469e6e1fec674d2aae34dd90cf4b8f5a7337b7f1e479b504573082de14bd1ca43fe2990b99da422524accf9066ed96cb3d1274af8dd2d9dd051bb69f84c
|
7
|
+
data.tar.gz: 1e5f4de04288e9789a897d2cd4e338a9fcaf4fa7b8854b68bd2f8b3cb6314d6a602d60d550539b9b0c36e603d5c3e4f20ef402db74b8ab13d14aced69de85514
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module SimpleFormExtension
|
2
|
+
module Inputs
|
3
|
+
class AirRedactorInput < SimpleForm::Inputs::TextInput
|
4
|
+
def input(wrapper_options = nil)
|
5
|
+
@additional_classes ||= additional_classes
|
6
|
+
@additional_classes -= [input_type]
|
7
|
+
|
8
|
+
|
9
|
+
input_html_options[:"data-air-redactor"] = true
|
10
|
+
|
11
|
+
super
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -16,10 +16,29 @@ module SimpleFormExtension
|
|
16
16
|
<button class=\"btn btn-danger fileinput-exists pull-right\" data-dismiss=\"fileinput\" type=\"button\"><i class=\"fa fa-times\"></i></button>
|
17
17
|
</div>
|
18
18
|
<div class=\"fileinput-preview thumbnail\">
|
19
|
-
|
19
|
+
#{ image_tag }
|
20
20
|
</div>
|
21
21
|
</div>".html_safe
|
22
22
|
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def image_tag
|
27
|
+
if @builder.object.send(:"#{ attribute_name }?")
|
28
|
+
image_url = @builder.object.send(attribute_name).url(image_style)
|
29
|
+
"<img src=\"#{ image_url }\" style=\"height: 100%; width: 100%; display: block;\">"
|
30
|
+
else
|
31
|
+
"<div class=\"empty-thumbnail\"></div>"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def image_style
|
36
|
+
styles = @builder.object.send(attribute_name).styles.map(&:first)
|
37
|
+
# Check if there's a :thumb or :thumbnail style in attachment definition
|
38
|
+
thumb = styles.find { |s| %w(thumb thumbnail).include?(s.to_s) }
|
39
|
+
# Return the potentially smallest size !
|
40
|
+
thumb || styles.first || :original
|
41
|
+
end
|
23
42
|
end
|
24
43
|
end
|
25
44
|
end
|
@@ -0,0 +1,88 @@
|
|
1
|
+
module SimpleFormExtension
|
2
|
+
module Inputs
|
3
|
+
class SelectizeInput < SimpleForm::Inputs::Base
|
4
|
+
include SimpleFormExtension::Translations
|
5
|
+
|
6
|
+
# This field only allows local select options (serialized into JSON)
|
7
|
+
# Searching for remote ones will be implemented later.
|
8
|
+
#
|
9
|
+
# Data attributes that may be useful :
|
10
|
+
#
|
11
|
+
# :'search-url' => search_url,
|
12
|
+
# :'search-param' => search_param,
|
13
|
+
# :'preload' => preload,
|
14
|
+
#
|
15
|
+
def input(wrapper_options = {})
|
16
|
+
input_html_options[:data] ||= {}
|
17
|
+
|
18
|
+
input_html_options[:data].merge!(
|
19
|
+
:'selectize' => true,
|
20
|
+
:'value' => serialized_value,
|
21
|
+
:'creatable' => creatable?,
|
22
|
+
:'multi' => multi?,
|
23
|
+
:'add-translation' => _translate('selectize.add'),
|
24
|
+
:'collection' => collection
|
25
|
+
)
|
26
|
+
|
27
|
+
@builder.hidden_field attribute_name, input_html_options
|
28
|
+
end
|
29
|
+
|
30
|
+
def creatable?
|
31
|
+
!!options[:creatable]
|
32
|
+
end
|
33
|
+
|
34
|
+
def multi?
|
35
|
+
(options.key?(:multi) && !!options[:multi]) ||
|
36
|
+
value.class.include?(Enumerable)
|
37
|
+
end
|
38
|
+
|
39
|
+
def collection
|
40
|
+
if (collection = options[:collection])
|
41
|
+
if collection.class.include?(Enumerable)
|
42
|
+
collection.map(&method(:serialize_option))
|
43
|
+
else
|
44
|
+
(object.send(collection) || []).map(&method(:serialize_option))
|
45
|
+
end
|
46
|
+
else
|
47
|
+
[]
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def serialized_value
|
52
|
+
if multi?
|
53
|
+
value.map do |item|
|
54
|
+
{ text: item, value: item }
|
55
|
+
end
|
56
|
+
else
|
57
|
+
value && { text: value, value: value }
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def value
|
62
|
+
@value ||= options_fetch(:value) { object.send(attribute_name) }
|
63
|
+
end
|
64
|
+
|
65
|
+
private
|
66
|
+
|
67
|
+
def serialize_option(option)
|
68
|
+
if option.kind_of?(Hash) && options.key?(:text) && option.key?(:value)
|
69
|
+
option
|
70
|
+
elsif !option.kind_of?(Hash)
|
71
|
+
{ text: option.to_s, value: option }
|
72
|
+
else
|
73
|
+
raise ArgumentError.new "The individual collection items should " \
|
74
|
+
"either be single items or a hash with :text and :value fields"
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
def options_fetch(key, &block)
|
79
|
+
[options, input_html_options].each do |hash|
|
80
|
+
return hash[key] if hash.key?(key)
|
81
|
+
end
|
82
|
+
|
83
|
+
# Return default block value or nil if no block was given
|
84
|
+
block ? block.call : nil
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
@@ -22,6 +22,7 @@ Gem::Specification.new do |spec|
|
|
22
22
|
spec.add_dependency 'rails', '>= 3.1'
|
23
23
|
spec.add_dependency 'simple_form'
|
24
24
|
spec.add_dependency 'redactor-rails'
|
25
|
+
spec.add_dependency 'selectize-rails'
|
25
26
|
|
26
27
|
spec.add_development_dependency 'bundler', '~> 1.5'
|
27
28
|
spec.add_development_dependency 'rake'
|
@@ -10,8 +10,43 @@ onPageReady ->
|
|
10
10
|
# Avoid double initialization
|
11
11
|
unless $textArea.data('initialized.redactor')
|
12
12
|
$textArea.redactor
|
13
|
+
buttons: ['html', 'formatting', 'bold', 'italic', 'underline', 'deleted',
|
14
|
+
'unorderedlist', 'orderedlist', 'outdent', 'indent',
|
15
|
+
'image', 'video', 'file', 'table', 'link', 'alignment', 'horizontalrule']
|
16
|
+
minHeight: 400
|
13
17
|
imageUpload: ["/redactor_rails/pictures", params].join('?')
|
14
18
|
imageGetJson: "/redactor_rails/pictures"
|
19
|
+
fileUpload: ["/redactor_rails/documents", params].join('?')
|
20
|
+
fileGetJson: "/redactor_rails/documents"
|
21
|
+
plugins: [
|
22
|
+
"fontcolor"
|
23
|
+
"fontsize"
|
24
|
+
]
|
15
25
|
path: "/assets/redactor-rails"
|
16
26
|
css: "style.css"
|
27
|
+
lang: "fr"
|
17
28
|
$textArea.data('initialized.redactor', true)
|
29
|
+
|
30
|
+
$('[data-air-redactor]').each (i, el) ->
|
31
|
+
$textArea = $(el)
|
32
|
+
# Avoid double initialization
|
33
|
+
unless $textArea.data('initialized.redactor')
|
34
|
+
$textArea.redactor
|
35
|
+
air: true
|
36
|
+
plugins: [
|
37
|
+
"fontcolor"
|
38
|
+
"fontsize"
|
39
|
+
]
|
40
|
+
airButtons: [
|
41
|
+
"bold"
|
42
|
+
"italic"
|
43
|
+
"fontcolor"
|
44
|
+
"fontsize"
|
45
|
+
"underline"
|
46
|
+
"deleted"
|
47
|
+
"link"
|
48
|
+
]
|
49
|
+
lang: "fr"
|
50
|
+
|
51
|
+
$textArea.data('initialized.redactor', true)
|
52
|
+
|
@@ -0,0 +1,55 @@
|
|
1
|
+
class Selectize
|
2
|
+
constructor: (@$el) ->
|
3
|
+
@single = @$el.data('multi') is false
|
4
|
+
@el = @$el[0]
|
5
|
+
|
6
|
+
creatable = @$el.data('creatable')
|
7
|
+
addTranslation = @$el.data('add-translation')
|
8
|
+
|
9
|
+
@$el.val('')
|
10
|
+
|
11
|
+
@$el.selectize(
|
12
|
+
mode: if @single then 'single' else 'multi'
|
13
|
+
sortField: 'text'
|
14
|
+
plugins: ['remove_button']
|
15
|
+
create: creatable
|
16
|
+
render: @renderOptions()
|
17
|
+
options: @$el.data('collection')
|
18
|
+
)
|
19
|
+
|
20
|
+
if (value = @$el.data('value'))
|
21
|
+
@initializeValue(value)
|
22
|
+
|
23
|
+
initializeValue: (data) ->
|
24
|
+
if @single
|
25
|
+
@el.selectize.addOption(data)
|
26
|
+
else
|
27
|
+
$.each data, (i, item) => @el.selectize.addOption(item)
|
28
|
+
|
29
|
+
if @single
|
30
|
+
@el.selectize.addItem(data.value)
|
31
|
+
else
|
32
|
+
$.each data, (i, item) => @el.selectize.addItem(item.value)
|
33
|
+
|
34
|
+
addAndSelect: (data) ->
|
35
|
+
@el.selectize.addOption(data)
|
36
|
+
@el.selectize.addItem(data.value)
|
37
|
+
|
38
|
+
renderOptions: ->
|
39
|
+
option_create: (data) ->
|
40
|
+
"""
|
41
|
+
<div class="create" data-selectable="">
|
42
|
+
#{ @addTranslation } <strong>#{ data.input }</strong> ...
|
43
|
+
</div>
|
44
|
+
"""
|
45
|
+
|
46
|
+
onPageReady ->
|
47
|
+
$selectizes = $('[data-selectize]')
|
48
|
+
|
49
|
+
return unless $selectizes.length
|
50
|
+
|
51
|
+
$('[data-selectize]').each (i, el) ->
|
52
|
+
$select = $(el)
|
53
|
+
return if $select.data('simple-form:selectize')
|
54
|
+
instance = new Selectize($select)
|
55
|
+
$select.data('simple-form:selectize', instance)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: simple_form_extension
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alexandre Vasseur
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-12-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: selectize-rails
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: bundler
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -104,6 +118,7 @@ files:
|
|
104
118
|
- lib/simple_form_extension/components/popovers.rb
|
105
119
|
- lib/simple_form_extension/ext/form_builder.rb
|
106
120
|
- lib/simple_form_extension/inputs.rb
|
121
|
+
- lib/simple_form_extension/inputs/air_redactor_input.rb
|
107
122
|
- lib/simple_form_extension/inputs/boolean_input.rb
|
108
123
|
- lib/simple_form_extension/inputs/collection_check_boxes_input.rb
|
109
124
|
- lib/simple_form_extension/inputs/collection_radio_buttons_input.rb
|
@@ -113,6 +128,7 @@ files:
|
|
113
128
|
- lib/simple_form_extension/inputs/image_input.rb
|
114
129
|
- lib/simple_form_extension/inputs/numeric_input.rb
|
115
130
|
- lib/simple_form_extension/inputs/redactor_input.rb
|
131
|
+
- lib/simple_form_extension/inputs/selectize_input.rb
|
116
132
|
- lib/simple_form_extension/railtie.rb
|
117
133
|
- lib/simple_form_extension/translations.rb
|
118
134
|
- lib/simple_form_extension/version.rb
|
@@ -123,6 +139,7 @@ files:
|
|
123
139
|
- vendor/assets/javascripts/simple_form_extension/.DS_Store
|
124
140
|
- vendor/assets/javascripts/simple_form_extension/datetimepicker.coffee
|
125
141
|
- vendor/assets/javascripts/simple_form_extension/redactor.coffee
|
142
|
+
- vendor/assets/javascripts/simple_form_extension/selectize.coffee
|
126
143
|
- vendor/assets/stylesheets/jquery.datetimepicker.css
|
127
144
|
- vendor/assets/stylesheets/simple_form_extension.sass
|
128
145
|
homepage: http://www.glyph.fr
|