effective_bootstrap 0.0.2 → 0.0.3

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: 45cba1fb03f24d07e64c2d042661ff15fbd05b12
4
- data.tar.gz: ce40e7151a4b92853b547d2e799dd4cc9f95a365
3
+ metadata.gz: eaaea45b1e57e497554feb12fc6f67c6a6baec1d
4
+ data.tar.gz: 58fcb83582beefb8df6f6156d9ddea639042db88
5
5
  SHA512:
6
- metadata.gz: 06a31a9005d368b42d51185e8bf6fa66f5807fdeacfe7264eef6369dd9fb33111600d228f1f3ee0ee19c881936538572a6a8405b20e8f6aa1e785093da771f7c
7
- data.tar.gz: e1571762f4706f6618c70e1e53a2c55b49da87d3b09092e86a96e1320d7e49876436b23e20bfd188c98b8af4172154d25f079db86e5a8f06020607a9e4dcf622
6
+ metadata.gz: 94603f7e4177c8055bf1a195a4cde0ba2e7e015c64cb50067b9d953c0926a0862ed1c5b4fc2fc611572f3afe159eb8296825a78c1be5e3618a988265d95062af
7
+ data.tar.gz: 99978bffcaceb1735181533e02f7dfc3b7010452371b540e660016170f317cca010e33b9b2d58e70578a3253a901ae43b019456e9710240ecf5e3ae2bb3f1f59
@@ -1,3 +1,4 @@
1
1
  @import './forms';
2
2
  @import './icons';
3
+ @import './overrides';
3
4
 
@@ -1,5 +1,5 @@
1
1
  // Submit buttons
2
- .form-actions {
2
+ .form-actions.form-group {
3
3
  border-top: solid 1px #eee;
4
4
  margin-top: 1rem;
5
5
 
@@ -7,7 +7,9 @@
7
7
  align-items: center;
8
8
  justify-content: flex-end;
9
9
 
10
- > * { margin-top: 1rem; }
10
+ > * {
11
+ margin: 1rem 0 0 0.5rem;
12
+ }
11
13
  }
12
14
 
13
15
  // Spinner
@@ -0,0 +1,6 @@
1
+ .btn-group {
2
+ button.dropdown-toggle-split:first-child {
3
+ border-bottom-right-radius: 0px;
4
+ border-top-right-radius: 0px;
5
+ }
6
+ }
@@ -1,6 +1,110 @@
1
1
  # Boostrap4 Helpers
2
2
 
3
3
  module EffectiveBootstrapHelper
4
+ # Button Dropdowns
5
+ # https://getbootstrap.com/docs/4.0/components/dropdowns/
6
+ #
7
+ # = dropdown do
8
+ # = dropdown_link_to 'Something', root_path
9
+ # = dropdown_divider
10
+ # = dropdown_link_to 'Another', root_path
11
+ #
12
+ # Button Dropdowns
13
+ # variations can be :dropup, :dropleft, :dropright
14
+ # split can be true, false
15
+ # right is to right align things
16
+ def dropdown(variation: nil, split: true, btn: 'btn-outline-primary', right: false, &block)
17
+ raise 'expected a block' unless block_given?
18
+
19
+ @_dropdown_link_tos = []; yield
20
+
21
+ return @_dropdown_link_tos.first if @_dropdown_link_tos.length <= 1
22
+
23
+ retval = if split
24
+ first = @_dropdown_link_tos.first
25
+ menu = content_tag(:div, @_dropdown_link_tos[1..-1].join.html_safe, class: ['dropdown-menu', ('dropdown-menu-right' if right)].compact.join(' '))
26
+ split = content_tag(:button, class: "btn #{btn} dropdown-toggle dropdown-toggle-split", type: 'button', 'data-toggle': 'dropdown', 'aria-haspopup': true, 'aria-expanded': false) do
27
+ content_tag(:span, 'Toggle Dropdown', class: 'sr-only')
28
+ end
29
+
30
+ content_tag(:div, class: 'btn-group') do
31
+ content_tag(:div, class: ['btn-group', variation.to_s.presence].compact.join(' '), role: 'group') do
32
+ [:dropleft].include?(variation) ? (split + menu + first) : (first + split + menu)
33
+ end
34
+ end
35
+ else
36
+ raise 'split false is unsupported'
37
+ end
38
+
39
+ @_dropdown_link_tos = nil
40
+
41
+ retval
42
+ end
43
+
44
+ # This is a special variant of dropdown
45
+ # dots do
46
+ # = dropdown_link_to 'Edit', edit_path(thing)
47
+ def dots(options = nil, &block)
48
+ (options ||= {})[:class] = "dropdown dropdown-dots #{options.delete(:class)}".strip
49
+
50
+ content_tag(:span, options) do
51
+ content_tag(:button, class: "btn btn-dots dropdown-toggle #{options.delete(:button_class)}", 'aria-expanded': true, 'aria-haspopup': true, 'data-toggle': 'dropdown', type: 'button') do
52
+ end + content_tag(:div, capture(&block), class: 'dropdown-menu')
53
+ end
54
+ end
55
+
56
+ def dots_link_to(label, path, options = {})
57
+ options[:class] = [options[:class], 'dropdown-item'].compact.join(' ')
58
+
59
+ concat link_to(label, path, options)
60
+ end
61
+
62
+ # # Works with dots do and dropdown do
63
+ def dropdown_link_to(label, path, options = {})
64
+ unless @_dropdown_link_tos
65
+ options[:class] = [options[:class], 'dropdown-item'].compact.join(' ')
66
+ return link_to(label, path, options)
67
+ end
68
+
69
+ if @_dropdown_link_tos.length == 0
70
+ options[:class] = [options[:class], 'btn btn-outline-primary'].compact.join(' ') unless options[:class].to_s.include?('btn-')
71
+ else
72
+ options[:class] = [options[:class], 'dropdown-item'].compact.join(' ')
73
+ end
74
+
75
+ @_dropdown_link_tos << link_to(label, path, options)
76
+
77
+ nil
78
+ end
79
+
80
+ # Works with dots ao and dropdown do
81
+ def dropdown_divider
82
+ unless @_dropdown_link_tos
83
+ content_tag(:div, '', class: 'dropdown-divider')
84
+ else
85
+ @_dropdown_link_tos << content_tag(:div, '', class: 'dropdown-divider')
86
+ nil
87
+ end
88
+ end
89
+
90
+ def list_group(&block)
91
+ content_tag(:div, yield, class: 'list-group')
92
+ end
93
+
94
+ # List group
95
+ # = list_group_link_to
96
+ # Automatically puts in the 'active' class based on request path
97
+ def list_group_link_to(label, path, opts = {})
98
+ # Regular link item
99
+ opts[:class] = if request.fullpath.include?(path)
100
+ [opts[:class], 'list-group-item active'].compact.join(' ')
101
+ else
102
+ [opts[:class], 'list-group-item'].compact.join(' ')
103
+ end
104
+
105
+ link_to(label.to_s, path, opts)
106
+ end
107
+
4
108
  # Nav links and dropdowns
5
109
  # Automatically puts in the 'active' class based on request path
6
110
 
@@ -13,6 +13,10 @@ module EffectiveIconsHelper
13
13
  link_to(icon(svg), url, options)
14
14
  end
15
15
 
16
+ def new_icon_to(path, options = {})
17
+ icon_to('plus', path, { title: 'New' }.merge(options))
18
+ end
19
+
16
20
  def show_icon_to(path, options = {})
17
21
  icon_to('eye', path, { title: 'Show' }.merge(options))
18
22
  end
@@ -79,6 +79,7 @@ module Effective
79
79
  end
80
80
 
81
81
  def static_field(name, options = {}, &block)
82
+ options = { value: options } if options.kind_of?(String)
82
83
  Effective::FormInputs::StaticField.new(name, options, builder: self).to_html(&block)
83
84
  end
84
85
 
@@ -17,6 +17,10 @@ module Effective
17
17
  { input_group: { class: 'input-group' }, prepend: content_tag(:span, icon('calendar'), class: 'input-group-text') }
18
18
  end
19
19
 
20
+ def datetime_to_s
21
+ value&.strftime('%F')
22
+ end
23
+
20
24
  end
21
25
  end
22
26
  end
@@ -18,7 +18,11 @@ module Effective
18
18
  end
19
19
 
20
20
  def build_input(&block)
21
- @builder.super_text_field(name, options[:input])
21
+ @builder.super_text_field(name, options[:input].merge(value: datetime_to_s))
22
+ end
23
+
24
+ def datetime_to_s
25
+ value&.strftime('%F %H:%M')
22
26
  end
23
27
 
24
28
  private
@@ -21,7 +21,7 @@ module Effective
21
21
 
22
22
  def build_button_group(&block)
23
23
  if buttons?
24
- content_tag(:div, yield, id: button_group_id, class: 'btn-group btn-group-toggle', 'data-toggle': 'buttons')
24
+ content_tag(:div, yield, id: button_group_id, class: 'btn-group btn-group-toggle effective-radios', 'data-toggle': 'buttons')
25
25
  else
26
26
  yield
27
27
  end
@@ -93,7 +93,7 @@ module Effective
93
93
 
94
94
  def item_label_options
95
95
  if buttons?
96
- { class: 'btn btn-secondary' }
96
+ { class: 'btn btn-outline-secondary' }
97
97
  elsif custom?
98
98
  { class: 'custom-control-label' }
99
99
  else
@@ -11,10 +11,33 @@ module Effective
11
11
  end
12
12
 
13
13
  def build_input(&block)
14
- content = block_given? ? capture(&block) : (options[:input].delete(:value) || value)
14
+ content = if block_given?
15
+ capture(&block)
16
+ elsif options[:input][:value]
17
+ options[:input].delete(:value)
18
+ elsif resource_path
19
+ link_to(value, resource_path, title: value.to_s)
20
+ else
21
+ value
22
+ end
23
+
15
24
  content_tag(:p, content, options[:input].except(:readonly, :required, :value).merge(id: tag_id))
16
25
  end
17
26
 
27
+ def resource_path
28
+ # I don't want to hardcode effective_resources as a dependency of this gem. But it's so useful...
29
+ return false unless defined?(EffectiveResources)
30
+
31
+ return false unless value.kind_of?(ActiveRecord::Base)
32
+
33
+ @_resource_path ||= (
34
+ Effective::Resource.new(value, namespace: @template.controller_path.split('/').first).action_path(:edit) ||
35
+ Effective::Resource.new(@template.controller_path).action_path(:edit, value) ||
36
+ Effective::Resource.new(value, namespace: @template.controller_path.split('/').first).action_path(:show) ||
37
+ Effective::Resource.new(@template.controller_path).action_path(:show, value)
38
+ )
39
+ end
40
+
18
41
  end
19
42
  end
20
43
  end
@@ -17,6 +17,10 @@ module Effective
17
17
  { input_group: { class: 'input-group' }, prepend: content_tag(:span, icon('clock'), class: 'input-group-text') }
18
18
  end
19
19
 
20
+ def datetime_to_s
21
+ value&.strftime('%H:%M')
22
+ end
23
+
20
24
  end
21
25
  end
22
26
  end
@@ -1,3 +1,3 @@
1
1
  module EffectiveBootstrap
2
- VERSION = '0.0.2'.freeze
2
+ VERSION = '0.0.3'.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.0.2
4
+ version: 0.0.3
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-03-07 00:00:00.000000000 Z
11
+ date: 2018-03-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -16,26 +16,26 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '5.1'
19
+ version: 4.0.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '5.1'
26
+ version: 4.0.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bootstrap
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: 4.0.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: 4.0.0
41
41
  - !ruby/object:Gem::Dependency
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: sass-rails
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
69
83
  description: Everything you need to get set up with bootstrap 4.
70
84
  email:
71
85
  - info@codeandeffect.com
@@ -365,6 +379,7 @@ files:
365
379
  - app/assets/stylesheets/effective_bootstrap/base.scss
366
380
  - app/assets/stylesheets/effective_bootstrap/forms.scss
367
381
  - app/assets/stylesheets/effective_bootstrap/icons.scss
382
+ - app/assets/stylesheets/effective_bootstrap/overrides.scss
368
383
  - app/assets/stylesheets/effective_date/input.scss
369
384
  - app/assets/stylesheets/effective_datetime/bootstrap-datetimepicker.scss
370
385
  - app/assets/stylesheets/effective_datetime/input.scss