effective_bootstrap 0.9.35 → 0.9.39

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 724c9c09be1863a089556b42c8569d61c0dc8c5a94efde7406bad1c2835fe359
4
- data.tar.gz: 8deca06ebd23e4ac4c572c82caf861847f8932c169e6f32ebe2c052f4634cc40
3
+ metadata.gz: ac9e0d6013b991db010ef717fe181ea041d2d9e756e0bb477d9ff7544248b718
4
+ data.tar.gz: f212aea0848dd0d7d50b0186b798ce9cb52d8c5e17bba7f4cfd63b69cc716861
5
5
  SHA512:
6
- metadata.gz: 3b7b872f2f83381421e3511b2b6401ccc672c68a8e550760e0e093002ec691f709f8ff39d936909ad9013125d8924bffe739309b6f30431488195d78600d7b1e
7
- data.tar.gz: 2ed3d029a6f61ba2100df032d078c9d93e51a062d9d97acc8aefea7ed951f5947749d9c875f580efde85eadc1e15b3c2795683f7f7b7decea5b4070bd84d0ac7
6
+ metadata.gz: a87134d9311b1837d06e9e37857c03930a52cb0c211a2bd1dd05276ecd7eca76d57615e71cea80b271b9f11a7469647ff4915f790330f19ddd8a2c185a0604c6
7
+ data.tar.gz: 35fca4a527a44b58237cc6e71ab8846aa4da76d0f1c7e82078d272323bfb90be12ca16c4f27574603b118a90f5831753fb0e010bc7e5586626c982cf8be33901
@@ -36,8 +36,27 @@ $(document).on 'click', '[data-effective-form-has-many-add]', (event) ->
36
36
  template = atob($obj.data('effective-form-has-many-template')).replace(/HASMANYINDEX/g, uid)
37
37
 
38
38
  $fields = $(template).hide().fadeIn('fast')
39
- EffectiveBootstrap.initialize($fields)
40
39
  $obj.closest('.has-many-links').before($fields)
40
+ EffectiveBootstrap.initialize($fields)
41
+
42
+ assignPositions($hasMany)
43
+ true
44
+
45
+ $(document).on 'click', '[data-effective-form-has-many-insert]', (event) ->
46
+ event.preventDefault()
47
+
48
+ $obj = $(event.currentTarget)
49
+ $hasMany = $obj.closest('.form-has-many')
50
+ return unless $hasMany.length > 0
51
+
52
+ $add = $hasMany.children('.has-many-links').find('[data-effective-form-has-many-template]')
53
+
54
+ uid = (new Date).valueOf()
55
+ template = atob($add.data('effective-form-has-many-template')).replace(/HASMANYINDEX/g, uid)
56
+
57
+ $fields = $(template).hide().fadeIn('fast')
58
+ $obj.closest('.has-many-fields').before($fields)
59
+ EffectiveBootstrap.initialize($fields)
41
60
 
42
61
  assignPositions($hasMany)
43
62
  true
@@ -3,12 +3,16 @@
3
3
  .has-many-move { display: none; }
4
4
  .has-many-remove-disabled { opacity: 0; cursor: default !important; }
5
5
 
6
+ .has-many-actions { margin-bottom: 0.75rem; }
6
7
  .has-many-remove { margin-top: 1rem; }
7
8
  .has-many-move { margin-top: 1.5rem; }
8
9
  }
9
10
 
10
11
  .form-has-many.reordering {
12
+ .has-many-actions { display: none; }
11
13
  .has-many-move { display: inline-block; cursor: grab; }
14
+
15
+ .form-has-many { display: none; }
12
16
  }
13
17
 
14
18
  .form-has-many.tight {
@@ -10,7 +10,7 @@ module EffectiveBootstrapHelper
10
10
  def accordion(options = nil, &block)
11
11
  (options ||= {})[:class] = "accordion #{options.delete(:class)}".strip
12
12
 
13
- id = "accordion-#{''.object_id}"
13
+ id = "accordion-#{effective_bootstrap_unique_id}"
14
14
 
15
15
  @_accordion_active = id
16
16
  content = content_tag(:div, capture(&block), options.merge(id: id))
@@ -62,7 +62,7 @@ module EffectiveBootstrapHelper
62
62
  def collapse(label, opts = {}, &block)
63
63
  raise 'expected a block' unless block_given?
64
64
 
65
- id = "collapse-#{String.new.object_id}"
65
+ id = "collapse-#{effective_bootstrap_unique_id}"
66
66
  show = (opts.delete(:show) == true)
67
67
 
68
68
  link_opts = { 'data-toggle': 'collapse', role: 'button', href: "##{id}", 'aria-controls': "##{id}", 'aria-expanded': show }
@@ -259,7 +259,7 @@ module EffectiveBootstrapHelper
259
259
  def nav_dropdown(label, right: false, link_class: [], list_class: [], &block)
260
260
  raise 'expected a block' unless block_given?
261
261
 
262
- id = "dropdown-#{''.object_id}"
262
+ id = "dropdown-#{effective_bootstrap_unique_id}"
263
263
 
264
264
  content_tag(:li, class: 'nav-item dropdown') do
265
265
  content_tag(:a, class: 'nav-link dropdown-toggle', href: '#', id: id, role: 'button', 'data-toggle': 'dropdown', 'aria-haspopup': true, 'aria-expanded': false) do
@@ -436,7 +436,7 @@ module EffectiveBootstrapHelper
436
436
 
437
437
  @_tab_mode = :tablist
438
438
  @_tab_active = (active || :first)
439
- @_tab_unique = ''.object_id if unique
439
+ @_tab_unique = effective_bootstrap_unique_id if unique
440
440
 
441
441
  content_tag(:ul, {class: 'nav nav-tabs', role: 'tablist'}.merge(list)) do
442
442
  yield # Yield to tab the first time
@@ -476,7 +476,7 @@ module EffectiveBootstrapHelper
476
476
 
477
477
  @_tab_mode = :tablist_vertical
478
478
  @_tab_active = (active || :first)
479
- @_tab_unique = ''.object_id if unique
479
+ @_tab_unique = effective_bootstrap_unique_id if unique
480
480
 
481
481
  content_tag(:div, class: 'row border') do
482
482
  content_tag(:div, class: 'col-3 border-right') do
@@ -504,4 +504,15 @@ module EffectiveBootstrapHelper
504
504
  end
505
505
  end
506
506
 
507
+ def effective_bootstrap_unique_id
508
+ # Set the first unique value
509
+ @_effective_bootstrap_unique_id ||= Time.zone.now.to_i
510
+
511
+ # Everytime we access this function make a new one
512
+ @_effective_bootstrap_unique_id = @_effective_bootstrap_unique_id + 1
513
+
514
+ # Return the updated value
515
+ @_effective_bootstrap_unique_id
516
+ end
517
+
507
518
  end
@@ -6,9 +6,9 @@ module Effective
6
6
  def self.defaults
7
7
  {
8
8
  active_storage: nil,
9
- css: '/assets/article_editor/',
9
+ css: ['/assets/article_editor/arx-frame.min.css'],
10
10
  custom: {
11
- css: ['/assets/application.css', '/assets/effective_bootstrap_article_editor.css']
11
+ css: ['/assets/effective_bootstrap_article_editor.css']
12
12
  },
13
13
  classes: {
14
14
  body: 'article-editor-body',
@@ -40,7 +40,7 @@ module Effective
40
40
  '12': 'col-sm-12'
41
41
  }
42
42
  },
43
- plugins: ['blockcode', 'cellcolor', 'imageposition', 'imageresize', 'inlineformat', 'removeformat', 'reorder', 'style'],
43
+ plugins: ['blockcode', 'cellcolor', 'imageposition', 'imageresize', 'inlineformat', 'listitem', 'removeformat', 'reorder', 'style'],
44
44
  quote: {
45
45
  template: '<blockquote><p></p></blockquote>'
46
46
  },
@@ -75,7 +75,15 @@ module Effective
75
75
  end
76
76
 
77
77
  def input_js_options
78
- self.class.defaults.merge(active_storage: active_storage)
78
+ self.class.defaults.merge(active_storage: active_storage, custom: { css: custom_css })
79
+ end
80
+
81
+ def custom_css
82
+ [
83
+ (@template.asset_pack_path('application.css') if @template.respond_to?(:asset_pack_path)),
84
+ (@template.asset_path('application.css') if @template.respond_to?(:asset_path)),
85
+ ('/assets/effective_bootstrap_article_editor.css')
86
+ ]
79
87
  end
80
88
 
81
89
  def active_storage
@@ -51,6 +51,20 @@ module Effective
51
51
  end
52
52
  end
53
53
 
54
+ # insert: false
55
+ def insert
56
+ return @insert unless @insert.nil?
57
+
58
+ @insert ||= begin
59
+ insert = options[:input].delete(:insert)
60
+ insert.nil? ? false : insert
61
+ end
62
+ end
63
+
64
+ def insert?
65
+ !!insert
66
+ end
67
+
54
68
  # errors: true
55
69
  def errors?
56
70
  return @errors unless @errors.nil?
@@ -62,7 +76,7 @@ module Effective
62
76
  end
63
77
 
64
78
  # remove: true
65
- def remove?
79
+ def remove
66
80
  return @remove unless @remove.nil?
67
81
 
68
82
  @remove ||= begin
@@ -77,6 +91,10 @@ module Effective
77
91
  end
78
92
  end
79
93
 
94
+ def remove?
95
+ !!remove
96
+ end
97
+
80
98
  def can_remove_method
81
99
  return @can_remove_method unless @can_remove_method.nil?
82
100
  @can_remove_method = (options[:input].delete(:can_remove_method) || false)
@@ -114,6 +132,7 @@ module Effective
114
132
  def render_resource(resource, block)
115
133
  remove = BLANK
116
134
  reorder = BLANK
135
+ insert = BLANK
117
136
  can_remove = (can_remove_method.blank? || !!resource.send(can_remove_method))
118
137
 
119
138
  content = @builder.fields_for(name, resource) do |form|
@@ -129,7 +148,11 @@ module Effective
129
148
  remove += (can_remove || resource.new_record?) ? link_to_remove(resource) : disabled_link_to_remove(resource)
130
149
  end
131
150
 
132
- content_tag(:div, render_fields(content, (remove + reorder)), class: 'has-many-fields')
151
+ if insert?
152
+ insert = render_insert() if add? && reorder?
153
+ end
154
+
155
+ content_tag(:div, insert + render_fields(content, remove + reorder), class: 'has-many-fields')
133
156
  end
134
157
 
135
158
  def render_fields(content, remove)
@@ -141,12 +164,25 @@ module Effective
141
164
  content_tag(:div, remove, class: 'col-auto')
142
165
  end
143
166
  when :cards
144
- raise('unsupported')
167
+ content_tag(:div, class: 'form-row mb-3') do
168
+ (reorder? ? content_tag(:div, has_many_move, class: 'col-auto') : BLANK) +
169
+ content_tag(:div, content, class: 'col mr-auto') do
170
+ content_tag(:div, class: 'card') do
171
+ content_tag(:div, class: 'card-body') do
172
+ content_tag(:div, remove, class: 'float-right') + content
173
+ end
174
+ end
175
+ end
176
+ end
145
177
  else
146
178
  content + remove
147
179
  end
148
180
  end
149
181
 
182
+ def render_insert()
183
+ content_tag(:div, link_to_insert(), class: 'has-many-actions')
184
+ end
185
+
150
186
  def render_template(block)
151
187
  resource = build_resource()
152
188
  index = collection.length
@@ -176,6 +212,27 @@ module Effective
176
212
  )
177
213
  end
178
214
 
215
+ # f.has_many :things, insert: { label: (icon('plus-circle') + 'Insert Article') }
216
+ # f.has_many :things, insert: (icon('plus-circle') + 'Insert Article')
217
+ def link_to_insert
218
+ tag = (insert[:tag] if insert.kind_of?(Hash))
219
+ title = (insert[:title] || insert[:label] if insert.kind_of?(Hash))
220
+ html_class = (insert[:class] if insert.kind_of?(Hash))
221
+
222
+ label = (insert[:label] if insert.kind_of?(Hash))
223
+ label = insert if insert.kind_of?(String)
224
+
225
+ content_tag(
226
+ (tag || :button),
227
+ (label || (icon('plus-circle') + 'Insert Another')),
228
+ class: 'has-many-insert ' + (html_class || 'btn btn-secondary'),
229
+ title: (title || 'Insert Another'),
230
+ data: {
231
+ 'effective-form-has-many-insert': true,
232
+ }
233
+ )
234
+ end
235
+
179
236
  def link_to_reorder(block)
180
237
  content_tag(
181
238
  :button,
@@ -189,11 +246,18 @@ module Effective
189
246
  end
190
247
 
191
248
  def link_to_remove(resource)
249
+ tag = (remove[:tag] if remove.kind_of?(Hash))
250
+ title = (remove[:title] || remove[:label] if remove.kind_of?(Hash))
251
+ html_class = (remove[:class] if remove.kind_of?(Hash))
252
+
253
+ label = (remove[:label] if remove.kind_of?(Hash))
254
+ label = remove if remove.kind_of?(String)
255
+
192
256
  content_tag(
193
- :button,
194
- icon('trash-2'),
195
- class: 'has-many-remove btn btn-danger',
196
- title: 'Remove',
257
+ (tag || :button),
258
+ (label || icon('trash-2')),
259
+ class: 'has-many-remove ' + (html_class || 'btn btn-danger'),
260
+ title: (title || 'Remove'),
197
261
  data: {
198
262
  'confirm': "Remove #{resource}?",
199
263
  'effective-form-has-many-remove': true,
@@ -1,3 +1,3 @@
1
1
  module EffectiveBootstrap
2
- VERSION = '0.9.35'.freeze
2
+ VERSION = '0.9.39'.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.9.35
4
+ version: 0.9.39
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: 2021-06-28 00:00:00.000000000 Z
11
+ date: 2021-07-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails