volt-fields 0.1.0 → 0.1.1
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/README.md +49 -2
- data/VERSION +1 -1
- data/app/fields/config/dependencies.rb +1 -1
- data/app/fields/config/routes.rb +1 -1
- data/app/fields/controllers/checkbox_controller.rb +24 -0
- data/app/fields/controllers/main_controller.rb +41 -0
- data/app/fields/controllers/radio_controller.rb +15 -0
- data/app/fields/controllers/select_controller.rb +18 -0
- data/app/fields/controllers/text_controller.rb +3 -36
- data/app/fields/controllers/textarea_controller.rb +3 -3
- data/app/fields/views/checkbox/index.html +13 -0
- data/app/fields/views/checkbox/inline.html +13 -0
- data/app/fields/views/radio/index.html +24 -0
- data/app/fields/views/radio/inline.html +24 -0
- data/app/fields/views/select/index.html +21 -0
- data/app/fields/views/text/index.html +1 -1
- data/app/fields/views/textarea/index.html +1 -1
- data/volt-fields.gemspec +0 -1
- metadata +12 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a8fbd4ca3326c03ca5fe299a8b9dbd51cbe68686
|
4
|
+
data.tar.gz: 1aecd87172a5df4526e934462c71bdc5ac066def
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b42b0d8240b4bb29a8b6b82f15f07de95ced62454b8c3863efa8cda3093342e09f20036e1736fe8bd3802753f28809c6b69a8b8adce9d99b2d8e9fabf4af3650
|
7
|
+
data.tar.gz: 7eba0115f8fd567281c3ad1f5ac6909e91e9eee25a094ff0355d6506d3560aa9d306d13338aaa6a438816f8d61abd501d6a124b09d0247c6b868dbbc8849f857
|
data/README.md
CHANGED
@@ -1,9 +1,56 @@
|
|
1
1
|
# Volt::Fields
|
2
2
|
|
3
|
-
Provides controls
|
3
|
+
Provides controls with the following:
|
4
4
|
|
5
5
|
1. the necessary html for bootstrap
|
6
6
|
2. mark the fields when the blur event happens
|
7
7
|
3. display any marked errors below the field
|
8
8
|
|
9
|
-
|
9
|
+
Currently supported control types:
|
10
|
+
* Text
|
11
|
+
* Textarea
|
12
|
+
* Select
|
13
|
+
* Radio
|
14
|
+
* Checkbox
|
15
|
+
|
16
|
+
## How to Use
|
17
|
+
### Setup
|
18
|
+
Include in your gemfile:
|
19
|
+
|
20
|
+
```
|
21
|
+
gem 'volt-fields'
|
22
|
+
```
|
23
|
+
|
24
|
+
Then use fields as tags in your views:
|
25
|
+
```
|
26
|
+
<:fields:text value="{{ model.first_name }}"/>
|
27
|
+
```
|
28
|
+
|
29
|
+
### Text and Textarea
|
30
|
+
```
|
31
|
+
<:fields:text value="{{ model.first_name }}"/>
|
32
|
+
```
|
33
|
+
|
34
|
+
### Select
|
35
|
+
Select fields accept either an array of options, or an array of {label: '', value: ''} hashes.
|
36
|
+
|
37
|
+
```
|
38
|
+
<:fields:select value="{{ model.role }}" options="{{ ['User', 'Admin', 'Something Else']}}"/>
|
39
|
+
```
|
40
|
+
|
41
|
+
### Radio
|
42
|
+
For radio buttons, pass an options array of {label: '', value: ''} hashes.
|
43
|
+
|
44
|
+
```
|
45
|
+
<:fields:radio value="{{ model.active }}" options="{{[{label: 'Active', value: true},{label:'Inactive', value: false}]}}"/>
|
46
|
+
```
|
47
|
+
|
48
|
+
For inline radio buttons, use ```:fields:radio:inline```.
|
49
|
+
|
50
|
+
### Checkbox
|
51
|
+
For checkboxes, use 'checked' instead of 'value' to bind the checkbox to a boolean field.
|
52
|
+
```
|
53
|
+
<:fields:checkbox checked="{{ model.active }}"/>
|
54
|
+
```
|
55
|
+
|
56
|
+
For inline radio buttons, use ```:fields:radio:inline```.
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.1
|
@@ -1 +1 @@
|
|
1
|
-
# Component dependencies
|
1
|
+
# Component dependencies
|
data/app/fields/config/routes.rb
CHANGED
@@ -1 +1 @@
|
|
1
|
-
# Component routes
|
1
|
+
# Component routes
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'fields/controllers/main_controller'
|
2
|
+
|
3
|
+
module Fields
|
4
|
+
class CheckboxController < MainController
|
5
|
+
before_action :setup_field
|
6
|
+
|
7
|
+
def setup_field
|
8
|
+
# Get the name of the field by looking at the method scope
|
9
|
+
@field_name = attrs.checked_last_method.gsub(/^[_]/, '')
|
10
|
+
end
|
11
|
+
|
12
|
+
def inline
|
13
|
+
# Get the name of the field by looking at the method scope
|
14
|
+
@field_name = attrs.checked_last_method.gsub(/^[_]/, '')
|
15
|
+
end
|
16
|
+
|
17
|
+
# Find the parent reactive value that produced the value
|
18
|
+
# (usually just model._field)
|
19
|
+
def model
|
20
|
+
attrs.checked_parent
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Fields
|
2
|
+
class MainController < Volt::ModelController
|
3
|
+
before_action :setup_field
|
4
|
+
|
5
|
+
def setup_field
|
6
|
+
# Default to text fields
|
7
|
+
if attrs.respond_to?(:type)
|
8
|
+
@type = attrs.type
|
9
|
+
else
|
10
|
+
@type = 'text'
|
11
|
+
end
|
12
|
+
|
13
|
+
# Get the name of the field by looking at the method scope
|
14
|
+
@field_name = attrs.value_last_method.gsub(/^[_]/, '')
|
15
|
+
end
|
16
|
+
|
17
|
+
# Find the parent reactive value that produced the value
|
18
|
+
# (usually just model._field)
|
19
|
+
def model
|
20
|
+
attrs.value_parent
|
21
|
+
end
|
22
|
+
|
23
|
+
def label
|
24
|
+
attrs.label || @field_name.titleize
|
25
|
+
end
|
26
|
+
|
27
|
+
# Find the errors for this field
|
28
|
+
def errors
|
29
|
+
model.marked_errors[@field_name]
|
30
|
+
end
|
31
|
+
|
32
|
+
# When a field goes out of focus, then we want to start checking a field
|
33
|
+
def blur
|
34
|
+
model.mark_field!(@field_name)
|
35
|
+
end
|
36
|
+
|
37
|
+
def marked
|
38
|
+
model.marked_fields[@field_name]
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'fields/controllers/main_controller'
|
2
|
+
|
3
|
+
module Fields
|
4
|
+
class RadioController < MainController
|
5
|
+
# When a radio button is clicked, set the value of the field and start checking the field
|
6
|
+
def set_field(value)
|
7
|
+
model.send("#{@field_name}=", value)
|
8
|
+
model.mark_field!(@field_name)
|
9
|
+
end
|
10
|
+
|
11
|
+
def checked?(value)
|
12
|
+
value == model.send(@field_name)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'fields/controllers/main_controller'
|
2
|
+
|
3
|
+
module Fields
|
4
|
+
class SelectController < MainController
|
5
|
+
def options
|
6
|
+
if attrs.options[0].is_a?(Hash)
|
7
|
+
options = attrs.options
|
8
|
+
else
|
9
|
+
options = attrs.options.collect { |option| { value: option, label: option } }
|
10
|
+
end
|
11
|
+
options
|
12
|
+
end
|
13
|
+
|
14
|
+
def selected?(value)
|
15
|
+
true if value == model.send(@field_name)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -1,39 +1,6 @@
|
|
1
|
-
|
2
|
-
class TextController < Volt::ModelController
|
3
|
-
def index
|
4
|
-
# Default to text fields
|
5
|
-
if attrs.respond_to?(:type)
|
6
|
-
@type = attrs.type
|
7
|
-
else
|
8
|
-
@type = 'text'
|
9
|
-
end
|
10
|
-
|
11
|
-
# Get the name of the field by looking at the method scope
|
12
|
-
@field_name = attrs.value_last_method.gsub(/^[_]/, '')
|
13
|
-
end
|
14
|
-
|
15
|
-
# Find the parent reactive value that produced the value
|
16
|
-
# (usually just model._field)
|
17
|
-
def model
|
18
|
-
attrs.value_parent
|
19
|
-
end
|
20
|
-
|
21
|
-
def label
|
22
|
-
return attrs.label || @field_name.titleize
|
23
|
-
end
|
1
|
+
require 'fields/controllers/main_controller'
|
24
2
|
|
25
|
-
|
26
|
-
|
27
|
-
model.marked_errors[@field_name]
|
28
|
-
end
|
29
|
-
|
30
|
-
# When a field goes out of focus, then we want to start checking a field
|
31
|
-
def blur
|
32
|
-
attrs.value_parent.mark_field!(@field_name)
|
33
|
-
end
|
34
|
-
|
35
|
-
def marked
|
36
|
-
model.marked_fields[@field_name]
|
37
|
-
end
|
3
|
+
module Fields
|
4
|
+
class TextController < MainController
|
38
5
|
end
|
39
6
|
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<:Body>
|
2
|
+
<div class="checkbox {{ if errors }}has-error{{ elsif marked }}has-success{{ end }}">
|
3
|
+
<label>
|
4
|
+
<input type="checkbox" checked="{{ attrs.checked }}" e-focusout="blur" />
|
5
|
+
{{ label }}
|
6
|
+
</label>
|
7
|
+
{{ if errors }}
|
8
|
+
<span class="glyphicon glyphicon-remove"></span>
|
9
|
+
<span class="control-label errors">{{ (errors || []).join(', ') }}</span>
|
10
|
+
{{ elsif marked }}
|
11
|
+
<span class="glyphicon glyphicon-ok"></span>
|
12
|
+
{{ end }}
|
13
|
+
</div>
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<:Body>
|
2
|
+
<div class="checkbox-inline {{ if errors }}has-error{{ elsif marked }}has-success{{ end }}">
|
3
|
+
<label class="checkbox-inline">
|
4
|
+
<input type="checkbox" checked="{{ attrs.checked }}" e-focusout="blur" />
|
5
|
+
{{ label }}
|
6
|
+
</label>
|
7
|
+
{{ if errors }}
|
8
|
+
<span class="glyphicon glyphicon-remove"></span>
|
9
|
+
<span class="control-label errors">{{ (errors || []).join(', ') }}</span>
|
10
|
+
{{ elsif marked }}
|
11
|
+
<span class="glyphicon glyphicon-ok"></span>
|
12
|
+
{{ end }}
|
13
|
+
</div>
|
@@ -0,0 +1,24 @@
|
|
1
|
+
<:Body>
|
2
|
+
<div class="{{ if errors }}has-error{{ elsif marked }}has-success{{ end }} has-feedback">
|
3
|
+
{{ attrs.options.each do |option| }}
|
4
|
+
<div class="radio">
|
5
|
+
{{ if checked?(option['value']) }}
|
6
|
+
<label>
|
7
|
+
<input type="radio" e-click="set_field(option['value'])" name="{{ @field_name }}_radio" value="{{option['value']}}" checked/>
|
8
|
+
{{ option['label'] }}
|
9
|
+
</label>
|
10
|
+
{{ if errors }}
|
11
|
+
<span class="glyphicon glyphicon-remove"></span>
|
12
|
+
<span class="control-label errors">{{ (errors || []).join(', ') }}</span>
|
13
|
+
{{ elsif marked }}
|
14
|
+
<span class="glyphicon glyphicon-ok"></span>
|
15
|
+
{{ end }}
|
16
|
+
{{ else }}
|
17
|
+
<label>
|
18
|
+
<input type="radio" e-click="set_field(option['value'])" name="{{ @field_name }}_radio" value="{{option['value']}}"/>
|
19
|
+
{{ option['label'] }}
|
20
|
+
</label>
|
21
|
+
{{ end }}
|
22
|
+
{{ end }}
|
23
|
+
</div>
|
24
|
+
</div>
|
@@ -0,0 +1,24 @@
|
|
1
|
+
<:Body>
|
2
|
+
<div class="{{ if errors }}has-error{{ elsif marked }}has-success{{ end }} has-feedback">
|
3
|
+
{{ attrs.options.each do |option| }}
|
4
|
+
<div class="radio-inline">
|
5
|
+
{{ if checked?(option['value']) }}
|
6
|
+
<label class="radio-inline">
|
7
|
+
<input type="radio" e-click="set_field(option['value'])" name="{{ @field_name }}_radio" value="{{option['value']}}" checked/>
|
8
|
+
{{ option['label'] }}
|
9
|
+
</label>
|
10
|
+
{{ if errors }}
|
11
|
+
<span class="glyphicon glyphicon-remove"></span>
|
12
|
+
<span class="control-label errors">{{ (errors || []).join(', ') }}</span>
|
13
|
+
{{ elsif marked }}
|
14
|
+
<span class="glyphicon glyphicon-ok"></span>
|
15
|
+
{{ end }}
|
16
|
+
{{ else }}
|
17
|
+
<label class="radio-inline">
|
18
|
+
<input type="radio" e-click="set_field(option['value'])" name="{{ @field_name }}_radio" value="{{option['value']}}"/>
|
19
|
+
{{ option['label'] }}
|
20
|
+
</label>
|
21
|
+
{{ end }}
|
22
|
+
{{ end }}
|
23
|
+
</div>
|
24
|
+
</div>
|
@@ -0,0 +1,21 @@
|
|
1
|
+
<:Body>
|
2
|
+
<div class="form-group {{ if errors }}has-error{{ elsif marked }}has-success{{ end }} has-feedback">
|
3
|
+
{{ if label }}
|
4
|
+
<label class="control-label">{{ label }}</label>
|
5
|
+
{{ end }}
|
6
|
+
<select value="{{ attrs.value }}" e-focusout="blur" class="form-control">
|
7
|
+
{{ options.each do |option| }}
|
8
|
+
{{ if selected?(option[:value]) }}
|
9
|
+
<option value="{{ option[:value] }}" selected> {{ option[:label] }}</option>
|
10
|
+
{{ else }}
|
11
|
+
<option value="{{ option[:value] }}"> {{ option[:label] }}</option>
|
12
|
+
{{ end }}
|
13
|
+
{{ end }}
|
14
|
+
</select>
|
15
|
+
{{ if errors }}
|
16
|
+
<span class="glyphicon glyphicon-remove form-control-feedback"></span>
|
17
|
+
<span class="control-label errors">{{ (errors || []).join(', ') }}</span>
|
18
|
+
{{ elsif marked }}
|
19
|
+
<span class="glyphicon glyphicon-ok form-control-feedback"></span>
|
20
|
+
{{ end }}
|
21
|
+
</div>
|
@@ -3,7 +3,7 @@
|
|
3
3
|
{{ if label }}
|
4
4
|
<label class="control-label">{{ label }}</label>
|
5
5
|
{{ end }}
|
6
|
-
<input type="{{ @type }}" value="{{ attrs.value }}" e-focusout="blur" class="form-control" />
|
6
|
+
<input type="{{ @type }}" value="{{ attrs.value }}" e-focusout="blur" class="form-control" placeholder="{{ attrs.placeholder }}" />
|
7
7
|
{{ if errors }}
|
8
8
|
<span class="glyphicon glyphicon-remove form-control-feedback"></span>
|
9
9
|
<span class="control-label errors">{{ (errors || []).join(', ') }}</span>
|
@@ -3,7 +3,7 @@
|
|
3
3
|
{{ if label }}
|
4
4
|
<label class="control-label">{{ label }}</label>
|
5
5
|
{{ end }}
|
6
|
-
<textarea e-focusout="blur" class="form-control">{{ attrs.value }}</textarea>
|
6
|
+
<textarea e-focusout="blur" class="form-control" placeholder="{{ attrs.placeholder }}">{{ attrs.value }}</textarea>
|
7
7
|
{{ if errors }}
|
8
8
|
<span class="glyphicon glyphicon-remove form-control-feedback"></span>
|
9
9
|
<span class="control-label errors">{{ (errors || []).join(', ') }}</span>
|
data/volt-fields.gemspec
CHANGED
metadata
CHANGED
@@ -1,29 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: volt-fields
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Stout
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-06-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: volt
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: 0.7.0
|
20
|
-
type: :development
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - "~>"
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: 0.7.0
|
27
13
|
- !ruby/object:Gem::Dependency
|
28
14
|
name: rake
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
@@ -52,8 +38,17 @@ files:
|
|
52
38
|
- VERSION
|
53
39
|
- app/fields/config/dependencies.rb
|
54
40
|
- app/fields/config/routes.rb
|
41
|
+
- app/fields/controllers/checkbox_controller.rb
|
42
|
+
- app/fields/controllers/main_controller.rb
|
43
|
+
- app/fields/controllers/radio_controller.rb
|
44
|
+
- app/fields/controllers/select_controller.rb
|
55
45
|
- app/fields/controllers/text_controller.rb
|
56
46
|
- app/fields/controllers/textarea_controller.rb
|
47
|
+
- app/fields/views/checkbox/index.html
|
48
|
+
- app/fields/views/checkbox/inline.html
|
49
|
+
- app/fields/views/radio/index.html
|
50
|
+
- app/fields/views/radio/inline.html
|
51
|
+
- app/fields/views/select/index.html
|
57
52
|
- app/fields/views/text/index.html
|
58
53
|
- app/fields/views/textarea/index.html
|
59
54
|
- lib/volt/fields.rb
|
@@ -78,7 +73,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
78
73
|
version: '0'
|
79
74
|
requirements: []
|
80
75
|
rubyforge_project:
|
81
|
-
rubygems_version: 2.
|
76
|
+
rubygems_version: 2.4.5
|
82
77
|
signing_key:
|
83
78
|
specification_version: 4
|
84
79
|
summary: Provides controls for text and textarea fields with built in error reporting
|