effective_bootstrap 0.9.27 → 0.9.32

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: e0eb3c57699c01f64fa4ea1f07fd6bca82b2e45a162990acec7d039deede2c71
4
- data.tar.gz: 95c371e51aa14ee0835a723f6382f4d10cf560fc19047b07e7edd68fec175e95
3
+ metadata.gz: 5e4006da022d1652bd4ca72bdc01f74262206efc1353d73b98e532b4c19c08b7
4
+ data.tar.gz: 2211cb0defef54a536616e3990f055454e09fb6344e9f612f014884122e76ad6
5
5
  SHA512:
6
- metadata.gz: 2cd4b274850c2ea38bf4a2a2ec258ff1cc6237a05a3b654e5932803dc7ccc835bad49dcb9f775b2484a8bfa7f16e813f5949241a511080c94afc0eba3fa9c4a1
7
- data.tar.gz: 3287932f062dff615f80b3e1ab821b10f726975cf57df3bd16df338c70233ddbeb8ff9133051e152e125f0fa2dc78ef30af35a28f38e039ef0871853d5f0576d
6
+ metadata.gz: 854a6a64b6df52e43acd1ea92657bf77b3772046e6b09f244077347f9d060d9642ee17793e0f80ded0b77606505d883b2ffc2af49a6c595e1ed1509ac2415244
7
+ data.tar.gz: bec57138a80b59d82faa2647682636ae054a6cffebfdb3a00d1f1eb13452e534195d1b36cbedd6471d28aaa2520ddd2b5b7792e32eb5193c8a1378cb266c65e2
data/MIT-LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright 2019 Code and Effect Inc.
1
+ Copyright 2021 Code and Effect Inc.
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
@@ -0,0 +1,10 @@
1
+ <svg width="24" height="21" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" class="feather feather-reorder">
2
+ <g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
3
+ <rect fill="currentColor" x="4" y="0" width="14" height="3"></rect>
4
+ <rect fill="currentColor" x="0" y="6" width="14" height="3"></rect>
5
+ <rect fill="currentColor" x="4" y="12" width="14" height="3"></rect>
6
+ <rect fill="currentColor" x="4" y="18" width="14" height="3"></rect>
7
+ <path d="M20,1.5 C20.4444444,1.5 20.9444444,1.5 21.5,1.5 C22.5,1.5 23,2.5 23,4.5 C23,6.5 22.5,7.5 21.5,7.5 C20.1111111,7.5 18.9444444,7.5 18,7.5" stroke="currentColor" stroke-width="1.5" stroke-linecap="square"></path>
8
+ <path d="M17,6.25929613 L19.3981159,9 L14.6018841,9 L17,6.25929613 Z" stroke="currentColor" fill="currentColor" transform="translate(17.000000, 7.500000) scale(-1, 1) rotate(90.000000) translate(-17.000000, -7.500000) "></path>
9
+ </g>
10
+ </svg>
@@ -0,0 +1,18 @@
1
+ # https://imperavi.com/article/
2
+
3
+ uploadActiveStorage = (editor, data) ->
4
+ for file in data.files
5
+ upload = new ActiveStorage.DirectUpload(file, '/rails/active_storage/direct_uploads')
6
+
7
+ upload.create (error, blob) =>
8
+ url = '/rails/active_storage/blobs/redirect/' + blob.signed_id + '/' + blob.filename
9
+ editor.complete({ file: { url: url }}, data.e)
10
+
11
+ (this.EffectiveBootstrap || {}).effective_article_editor = ($element, options) ->
12
+
13
+ if options['active_storage']
14
+ options['image'] = {
15
+ upload: (editor, data) -> uploadActiveStorage(editor, data)
16
+ }
17
+
18
+ ArticleEditor($element, options)
@@ -0,0 +1 @@
1
+ //= require ./initialize
@@ -10,6 +10,7 @@
10
10
  //= require ./effective_time/input
11
11
  //= require ./effective_time_zone_select/input
12
12
 
13
+ //= require ./effective_article_editor/input
13
14
  //= require ./effective_clear/input
14
15
  //= require ./effective_checks/input
15
16
  //= require ./effective_ck_editor/input
@@ -0,0 +1,3 @@
1
+ // Styles for the article editor iframe body content
2
+ // This file is included by the article editor iframe.
3
+ body { padding-top: 0px !important; }
@@ -0,0 +1,3 @@
1
+ // Styles for the article editor look and feel
2
+ // Use this to customize the textarea input, toolbar, etc
3
+ // Does not affect the article editor iframe contents
@@ -1,5 +1,6 @@
1
1
  @import 'effective_bootstrap/base';
2
2
 
3
+ @import 'effective_article_editor/input';
3
4
  @import 'effective_checks/input';
4
5
  @import 'effective_datetime/input';
5
6
  @import 'effective_file/input';
@@ -0,0 +1 @@
1
+ @import 'effective_article_editor/content';
@@ -22,6 +22,10 @@ module Effective
22
22
  alias_method :super_text_area, :text_area
23
23
  alias_method :super_hidden_field, :hidden_field
24
24
 
25
+ def article_editor(name, options = {}, &block)
26
+ Effective::FormInputs::ArticleEditor.new(name, options, builder: self).to_html(&block)
27
+ end
28
+
25
29
  def clear(name = 'Clear', options = {})
26
30
  (options = name; name = 'Clear') if name.kind_of?(Hash)
27
31
  Effective::FormInputs::Clear.new(name, options, builder: self).to_html
@@ -0,0 +1,82 @@
1
+ module Effective
2
+ module FormInputs
3
+ class ArticleEditor < Effective::FormInput
4
+
5
+ # https://imperavi.com/article/docs/settings/
6
+ def self.defaults
7
+ {
8
+ active_storage: nil,
9
+ css: '/assets/article_editor/',
10
+ custom: {
11
+ css: ['/assets/application.css', '/assets/effective_bootstrap_article_editor.css']
12
+ },
13
+ classes: {
14
+ body: 'article-editor-body',
15
+ table: 'table'
16
+ },
17
+ grid: {
18
+ classname: 'row',
19
+ columns: 12,
20
+ gutter: '1px',
21
+ offset: {
22
+ left: '15px',
23
+ right: '15px',
24
+ },
25
+ patterns: {
26
+ '6|6': 'col-sm-6|col-sm-6',
27
+ '4|4|4': 'col-sm-4|col-sm-4|col-sm-4',
28
+ '3|3|3|3': 'col-sm-3|col-sm-3|col-sm-3|col-sm-3',
29
+ '2|2|2|2|2|2': 'col-sm-2|col-sm-2|col-sm-2|col-sm-2|col-sm-2|col-sm-2',
30
+ '3|6|3': 'col-sm-3|col-sm-6|col-sm-3',
31
+ '2|8|2': 'col-sm-2|col-sm-8|col-sm-2',
32
+ '5|7': 'col-sm-5|col-sm-7',
33
+ '7|5': 'col-sm-7|col-sm-5',
34
+ '4|8': 'col-sm-4|col-sm-8',
35
+ '8|4': 'col-sm-8|col-sm-4',
36
+ '3|9': 'col-sm-3|col-sm-9',
37
+ '9|3': 'col-sm-9|col-sm-3',
38
+ '2|10': 'col-sm-2|col-sm-10',
39
+ '10|2': 'col-sm-10|col-sm-2',
40
+ '12': 'col-sm-12'
41
+ }
42
+ },
43
+ plugins: ['blockcode', 'imageposition', 'imageresize', 'inlineformat', 'removeformat', 'reorder', 'style'],
44
+ quote: {
45
+ template: '<blockquote><p></p></blockquote>'
46
+ },
47
+ styles: {
48
+ table: {
49
+ 'bordered': { title: 'Bordered', classname: 'table-bordered' },
50
+ 'responsive': { title: 'Responsive', classname: 'table-responsive' },
51
+ 'small': { title: 'Small', classname: 'table-sm' },
52
+ 'striped': { title: 'Striped', classname: 'table-striped' },
53
+ }
54
+ }
55
+ }
56
+ end
57
+
58
+ def build_input(&block)
59
+ @builder.super_text_area(name, options[:input])
60
+ end
61
+
62
+ def input_html_options
63
+ { class: 'effective_article_editor form-control', id: unique_id, autocomplete: 'off' }
64
+ end
65
+
66
+ def input_js_options
67
+ self.class.defaults.merge(active_storage: active_storage)
68
+ end
69
+
70
+ def active_storage
71
+ return @active_storage unless @active_storage.nil?
72
+
73
+ @active_storage = if options.key?(:active_storage)
74
+ options.delete(:active_storage)
75
+ else
76
+ defined?(ActiveStorage).present?
77
+ end
78
+ end
79
+
80
+ end
81
+ end
82
+ end
@@ -179,7 +179,7 @@ module Effective
179
179
  def link_to_reorder(block)
180
180
  content_tag(
181
181
  :button,
182
- icon('list') + 'Reorder',
182
+ icon('reorder') + 'Reorder',
183
183
  class: 'has-many-reorder btn btn-secondary',
184
184
  title: 'Reorder',
185
185
  data: {
@@ -1,26 +1,4 @@
1
1
  EffectiveBootstrap.setup do |config|
2
- # Authorization Method
3
- #
4
- # This method is called by all controller actions with the appropriate action and resource
5
- # If it raises an exception or returns false, an Effective::AccessDenied Error will be raised
6
- #
7
- # Use via Proc:
8
- # Proc.new { |controller, action, resource| authorize!(action, resource) } # CanCan
9
- # Proc.new { |controller, action, resource| can?(action, resource) } # CanCan with skip_authorization_check
10
- # Proc.new { |controller, action, resource| authorize "#{action}?", resource } # Pundit
11
- # Proc.new { |controller, action, resource| current_user.is?(:admin) } # Custom logic
12
- #
13
- # Use via Boolean:
14
- # config.authorization_method = true # Always authorized
15
- # config.authorization_method = false # Always unauthorized
16
- #
17
- # Use via Method (probably in your application_controller.rb):
18
- # config.authorization_method = :my_authorization_method
19
- # def my_authorization_method(resource, action)
20
- # true
21
- # end
22
- config.authorization_method = Proc.new { |controller, action, resource| authorize!(action, resource) }
23
-
24
2
  # Replaces rails_ujs data-confirm with a custom inline implementation.
25
3
  # You will need to recompile assets (or "rm -rf tmp/") if you change this.
26
4
  config.use_custom_data_confirm = true
@@ -1,33 +1,14 @@
1
1
  require 'inline_svg'
2
+ require 'effective_resources'
2
3
  require 'effective_bootstrap/engine'
3
4
  require 'effective_bootstrap/version'
4
5
 
5
6
  module EffectiveBootstrap
6
7
 
7
- # The following are all valid config keys
8
- mattr_accessor :authorization_method
9
-
10
- mattr_accessor :use_custom_data_confirm
11
-
12
- def self.setup
13
- yield self
8
+ def self.config_keys
9
+ [:use_custom_data_confirm]
14
10
  end
15
11
 
16
- def self.authorized?(controller, action, resource)
17
- @_exceptions ||= [Effective::AccessDenied, (CanCan::AccessDenied if defined?(CanCan)), (Pundit::NotAuthorizedError if defined?(Pundit))].compact
18
-
19
- return !!authorization_method unless authorization_method.respond_to?(:call)
20
- controller = controller.controller if controller.respond_to?(:controller)
21
-
22
- begin
23
- !!(controller || self).instance_exec((controller || self), action, resource, &authorization_method)
24
- rescue *@_exceptions
25
- false
26
- end
27
- end
28
-
29
- def self.authorize!(controller, action, resource)
30
- raise Effective::AccessDenied.new('Access Denied', action, resource) unless authorized?(controller, action, resource)
31
- end
12
+ include EffectiveGem
32
13
 
33
14
  end
@@ -8,7 +8,11 @@ module EffectiveBootstrap
8
8
  end
9
9
 
10
10
  initializer 'effective_bootstrap.assets' do |app|
11
- app.config.assets.precompile += ['effective_bootstrap_manifest.js', 'icons/*']
11
+ app.config.assets.precompile += [
12
+ 'effective_bootstrap_manifest.js',
13
+ 'effective_bootstrap_article_editor.css',
14
+ 'icons/*'
15
+ ]
12
16
  end
13
17
 
14
18
  initializer 'effective_bootstrap.action_text' do |app|
@@ -1,3 +1,3 @@
1
1
  module EffectiveBootstrap
2
- VERSION = '0.9.27'.freeze
2
+ VERSION = '0.9.32'.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.27
4
+ version: 0.9.32
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-05-14 00:00:00.000000000 Z
11
+ date: 2021-06-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -26,18 +26,32 @@ dependencies:
26
26
  version: 4.0.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bootstrap
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "<"
32
+ - !ruby/object:Gem::Version
33
+ version: '5'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "<"
39
+ - !ruby/object:Gem::Version
40
+ version: '5'
41
+ - !ruby/object:Gem::Dependency
42
+ name: effective_resources
29
43
  requirement: !ruby/object:Gem::Requirement
30
44
  requirements:
31
45
  - - ">="
32
46
  - !ruby/object:Gem::Version
33
- version: 4.0.0
47
+ version: '0'
34
48
  type: :runtime
35
49
  prerelease: false
36
50
  version_requirements: !ruby/object:Gem::Requirement
37
51
  requirements:
38
52
  - - ">="
39
53
  - !ruby/object:Gem::Version
40
- version: 4.0.0
54
+ version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: inline_svg
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -319,6 +333,7 @@ files:
319
333
  - app/assets/images/icons/radio.svg
320
334
  - app/assets/images/icons/refresh-ccw.svg
321
335
  - app/assets/images/icons/refresh-cw.svg
336
+ - app/assets/images/icons/reorder.svg
322
337
  - app/assets/images/icons/repeat.svg
323
338
  - app/assets/images/icons/rewind.svg
324
339
  - app/assets/images/icons/rotate-ccw.svg
@@ -405,6 +420,8 @@ files:
405
420
  - app/assets/images/icons/zap.svg
406
421
  - app/assets/images/icons/zoom-in.svg
407
422
  - app/assets/images/icons/zoom-out.svg
423
+ - app/assets/javascripts/effective_article_editor/initialize.js.coffee
424
+ - app/assets/javascripts/effective_article_editor/input.js
408
425
  - app/assets/javascripts/effective_bootstrap.js
409
426
  - app/assets/javascripts/effective_bootstrap/base.js.coffee
410
427
  - app/assets/javascripts/effective_bootstrap/confirm.js.coffee.erb
@@ -594,11 +611,14 @@ files:
594
611
  - app/assets/javascripts/moment/locale/zh-hk.js
595
612
  - app/assets/javascripts/moment/locale/zh-tw.js
596
613
  - app/assets/javascripts/moment/moment.js
614
+ - app/assets/stylesheets/effective_article_editor/content.scss
615
+ - app/assets/stylesheets/effective_article_editor/input.scss
597
616
  - app/assets/stylesheets/effective_bootstrap.scss
598
617
  - app/assets/stylesheets/effective_bootstrap/base.scss
599
618
  - app/assets/stylesheets/effective_bootstrap/forms.scss
600
619
  - app/assets/stylesheets/effective_bootstrap/icons.scss
601
620
  - app/assets/stylesheets/effective_bootstrap/overrides.scss
621
+ - app/assets/stylesheets/effective_bootstrap_article_editor.scss
602
622
  - app/assets/stylesheets/effective_bootstrap_editor.scss
603
623
  - app/assets/stylesheets/effective_checks/input.scss
604
624
  - app/assets/stylesheets/effective_datetime/bootstrap-datetimepicker.scss
@@ -624,6 +644,7 @@ files:
624
644
  - app/helpers/effective_icons_helper.rb
625
645
  - app/models/effective/form_builder.rb
626
646
  - app/models/effective/form_input.rb
647
+ - app/models/effective/form_inputs/article_editor.rb
627
648
  - app/models/effective/form_inputs/check_box.rb
628
649
  - app/models/effective/form_inputs/checks.rb
629
650
  - app/models/effective/form_inputs/ck_editor.rb