effective_bootstrap 0.2.4 → 0.3.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: dbcd85ec412ee04f3a0cd56458b24a615c7bc0b7
4
- data.tar.gz: a4e5e7b632e4d5c486e68fd3acabf6f1e72bcd61
3
+ metadata.gz: 8ef5c490c21c811d0bab4b33f68d2b45a49e71e5
4
+ data.tar.gz: fd13c727e25be05f6dd021fa0fa3165562dcf7f8
5
5
  SHA512:
6
- metadata.gz: e808ddfb63187adf28e906b459e2387b38f69f5d47c9f0b9bece57b588c8d47559693f413b9fcbc2df3fb731bd11c329f9602b5591c852e0744907f04bbe04ba
7
- data.tar.gz: 132f566a29c1cb27b8bba080e8fa14c90dc15deb08d5df4c4ebb93f8e8933b814afd6b72f562d9dc8ccbb2af1c33096c5794084ad68130de1d8c00a9483baa97
6
+ metadata.gz: 365573317df114f67454c6331f58fdc869b89c7b5f13ced477098a2b87582395dbfca0d34683805162dfb49b4499cb9a8769fa9afd100ba905d69f2878942efd
7
+ data.tar.gz: c857d13f1b2e978f363eab1514c2a2936560b802d87418143da60a4d41e1f0f0446061c4dd151cd2fe50fdc92c1986d49834fbaf20a04ef3b9ec67b9cea3bbe4
@@ -1,5 +1,6 @@
1
1
  //= require ./effective_bootstrap/base
2
2
  //= require ./effective_bootstrap/form
3
+ //= require ./effective_bootstrap/logic
3
4
 
4
5
  //= require ./effective_datetime/input
5
6
  //= require ./effective_date/input
@@ -0,0 +1,20 @@
1
+ (this.EffectiveBootstrap || {}).effective_hide_if = ($element, options) ->
2
+
3
+ $affects = $element.closest('form').find("input[name='#{options.name}']")
4
+
5
+ $affects.on 'change', (event) ->
6
+ if $(event.target).val() == options.value
7
+ $element.hide()
8
+ else
9
+ $element.fadeIn()
10
+
11
+ (this.EffectiveBootstrap || {}).effective_show_if = ($element, options) ->
12
+
13
+ $affects = $element.closest('form').find("input[name='#{options.name}']")
14
+
15
+ $affects.on 'change', (event) ->
16
+ if $(event.target).val() == options.value
17
+ $element.fadeIn()
18
+ else
19
+ $element.hide()
20
+
@@ -132,6 +132,15 @@ module Effective
132
132
  Effective::FormInputs::UrlField.new(name, options, builder: self).to_html { super(name, options) }
133
133
  end
134
134
 
135
+ # Logics
136
+ def hide_if(*args, &block)
137
+ Effective::FormLogics::HideIf.new(*args, builder: self).to_html(&block)
138
+ end
139
+
140
+ def show_if(*args, &block)
141
+ Effective::FormLogics::ShowIf.new(*args, builder: self).to_html(&block)
142
+ end
143
+
135
144
  end
136
145
  end
137
146
 
@@ -82,6 +82,10 @@ module Effective
82
82
 
83
83
  grouped = collection.kind_of?(Hash) && collection.values.first.respond_to?(:to_a)
84
84
 
85
+ if collection.nil?
86
+ raise "Please include a collection"
87
+ end
88
+
85
89
  if grouped? && !grouped && collection.present?
86
90
  raise "Grouped collection expecting a Hash {'Posts' => Post.all, 'Events' => Event.all} or a Hash {'Posts' => [['Post A', 1], ['Post B', 2]], 'Events' => [['Event A', 1], ['Event B', 2]]}"
87
91
  end
@@ -0,0 +1,45 @@
1
+ module Effective
2
+ class FormLogic
3
+ attr_accessor :args, :options
4
+
5
+ delegate :object, to: :@builder
6
+ delegate :capture, :content_tag, :link_to, :icon, to: :@template
7
+
8
+ # So this takes in the options for an entire form group.
9
+ def initialize(*args, builder:)
10
+ @builder = builder
11
+ @template = builder.template
12
+ @options ||= {}
13
+
14
+ validate!(args)
15
+ @args = args
16
+ end
17
+
18
+ def validate!(args)
19
+ raise 'expected one or more argument' if args.blank?
20
+ end
21
+
22
+ # https://github.com/rails/rails/blob/master/actionview/lib/action_view/helpers/tags/base.rb#L108
23
+ def tag_name(name, multiple = false, index = nil)
24
+ sanitized_method_name = name.to_s.sub(/\?$/, "")
25
+
26
+ case
27
+ when @builder.object_name.empty?
28
+ "#{sanitized_method_name}#{multiple ? "[]" : ""}"
29
+ when index
30
+ "#{@builder.object_name}[#{index}][#{sanitized_method_name}]#{multiple ? "[]" : ""}"
31
+ else
32
+ "#{@builder.object_name}[#{sanitized_method_name}]#{multiple ? "[]" : ""}"
33
+ end
34
+ end
35
+
36
+ def input_js_options
37
+ { 'data-input-js-options' => JSON.generate({method_name: input_js_options_method_name}.merge(logic_options)) }
38
+ end
39
+
40
+ def input_js_options_method_name
41
+ "effective_#{self.class.name.split('::').last.underscore}"
42
+ end
43
+
44
+ end
45
+ end
@@ -0,0 +1,28 @@
1
+ module Effective
2
+ module FormLogics
3
+ class HideIf < Effective::FormLogic
4
+
5
+ def to_html(&block)
6
+ content_tag(:div, options.merge(input_js_options), &block)
7
+ end
8
+
9
+ def options
10
+ { style: ('display: none;' if hide?) }
11
+ end
12
+
13
+ def logic_options
14
+ { name: tag_name(args.first), value: args.second }
15
+ end
16
+
17
+ def validate!(args)
18
+ raise 'expected two arguments' unless args.length == 2
19
+ raise "expected object to respond to #{args.first}" unless object.respond_to?(args.first)
20
+ end
21
+
22
+ def hide?
23
+ object.send(args.first) == args.second
24
+ end
25
+
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,28 @@
1
+ module Effective
2
+ module FormLogics
3
+ class ShowIf < Effective::FormLogic
4
+
5
+ def to_html(&block)
6
+ content_tag(:div, options.merge(input_js_options), &block)
7
+ end
8
+
9
+ def options
10
+ { style: ('display: none;' unless show?) }
11
+ end
12
+
13
+ def logic_options
14
+ { name: tag_name(args.first), value: args.second }
15
+ end
16
+
17
+ def validate!(args)
18
+ raise 'expected two arguments' unless args.length == 2
19
+ raise "expected object to respond to #{args.first}" unless object.respond_to?(args.first)
20
+ end
21
+
22
+ def show?
23
+ object.send(args.first) == args.second
24
+ end
25
+
26
+ end
27
+ end
28
+ end
@@ -1,3 +1,3 @@
1
1
  module EffectiveBootstrap
2
- VERSION = '0.2.4'.freeze
2
+ VERSION = '0.3.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: effective_bootstrap
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Code and Effect
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-10-31 00:00:00.000000000 Z
11
+ date: 2018-11-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -372,6 +372,7 @@ files:
372
372
  - app/assets/javascripts/effective_bootstrap.js
373
373
  - app/assets/javascripts/effective_bootstrap/base.js.coffee
374
374
  - app/assets/javascripts/effective_bootstrap/form.js.coffee
375
+ - app/assets/javascripts/effective_bootstrap/logic.js.coffee
375
376
  - app/assets/javascripts/effective_checks/initialize.js.coffee
376
377
  - app/assets/javascripts/effective_checks/input.js
377
378
  - app/assets/javascripts/effective_date/initialize.js.coffee
@@ -455,6 +456,9 @@ files:
455
456
  - app/models/effective/form_inputs/text_field.rb
456
457
  - app/models/effective/form_inputs/time_field.rb
457
458
  - app/models/effective/form_inputs/url_field.rb
459
+ - app/models/effective/form_logic.rb
460
+ - app/models/effective/form_logics/hide_if.rb
461
+ - app/models/effective/form_logics/show_if.rb
458
462
  - app/views/effective/style_guide/__fields.html.haml
459
463
  - app/views/effective/style_guide/__inline_fields.html.haml
460
464
  - app/views/effective/style_guide/_effective_form_with.html.haml