effective_bootstrap 0.9.28 → 0.9.33

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: f1fc4ca7c84ace7b7d118f7d0c2820192fd121c7e3dbc1f1a86a2018e91fb28d
4
- data.tar.gz: 5146c6f244c97a850c8d749e14b8171c6e453980e98a7ac1c18db16add6444dd
3
+ metadata.gz: 552e12e8fece400c8da24ef107725748d4713812251be90b0f3bb90706e69588
4
+ data.tar.gz: 6ffc0440fafb987b757e2327ac3062cdb648d8a2a9a7d782c6fabc7dda3f9636
5
5
  SHA512:
6
- metadata.gz: ea08f202b403d071b2188c28b8231a6e31c242bf474ed552fe9175413e3466953d2aaea5e28381f4c8a98b87a23c5a3b2b2c38a148e25e582c44e6548bd801d0
7
- data.tar.gz: 74b29d0657fae0f4362ab62fcad9fcf6c9093993c12081347f488467709263d85332f3e15f4832935b35e91792145b7c324030e20bc9b515862784af0c7bafde
6
+ metadata.gz: fa4606cb5a27d5eb075e36a9142b2d309d549d844c9c025af0203c18c748a652f69d56f704b9f26b4662952ff00a19980a77a6ad23a680619caa8c64a8fe091c
7
+ data.tar.gz: d26bef35b1425d849b355e5dbd501270936d56cc494be742e322b15ddea0dcdc2de6334fc3eadb958db6655940409628de967747e57de31f07555fa20328b83b
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,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,93 @@
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', 'cellcolor', '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
+ cellcolors: {
56
+ 'primary': { title: 'Primary', classname: 'table-primary' },
57
+ 'secondary': { title: 'Secondary', classname: 'table-secondary' },
58
+ 'active': { title: 'Active', classname: 'table-active' },
59
+ 'success': { title: 'Success', classname: 'table-success' },
60
+ 'danger': { title: 'Danger', classname: 'table-danger' },
61
+ 'warning': { title: 'Warning', classname: 'table-warning' },
62
+ 'info': { title: 'Info', classname: 'table-info' },
63
+ 'light': { title: 'Light', classname: 'table-light' },
64
+ 'dark': { title: 'Dark', classname: 'table-dark' }
65
+ }
66
+ }
67
+ end
68
+
69
+ def build_input(&block)
70
+ @builder.super_text_area(name, options[:input])
71
+ end
72
+
73
+ def input_html_options
74
+ { class: 'effective_article_editor form-control', id: unique_id, autocomplete: 'off' }
75
+ end
76
+
77
+ def input_js_options
78
+ self.class.defaults.merge(active_storage: active_storage)
79
+ end
80
+
81
+ def active_storage
82
+ return @active_storage unless @active_storage.nil?
83
+
84
+ @active_storage = if options.key?(:active_storage)
85
+ options.delete(:active_storage)
86
+ else
87
+ defined?(ActiveStorage).present?
88
+ end
89
+ end
90
+
91
+ end
92
+ end
93
+ end
@@ -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.28'.freeze
2
+ VERSION = '0.9.33'.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.28
4
+ version: 0.9.33
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-18 00:00:00.000000000 Z
11
+ date: 2021-06-16 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
@@ -406,6 +420,8 @@ files:
406
420
  - app/assets/images/icons/zap.svg
407
421
  - app/assets/images/icons/zoom-in.svg
408
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
409
425
  - app/assets/javascripts/effective_bootstrap.js
410
426
  - app/assets/javascripts/effective_bootstrap/base.js.coffee
411
427
  - app/assets/javascripts/effective_bootstrap/confirm.js.coffee.erb
@@ -595,11 +611,14 @@ files:
595
611
  - app/assets/javascripts/moment/locale/zh-hk.js
596
612
  - app/assets/javascripts/moment/locale/zh-tw.js
597
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
598
616
  - app/assets/stylesheets/effective_bootstrap.scss
599
617
  - app/assets/stylesheets/effective_bootstrap/base.scss
600
618
  - app/assets/stylesheets/effective_bootstrap/forms.scss
601
619
  - app/assets/stylesheets/effective_bootstrap/icons.scss
602
620
  - app/assets/stylesheets/effective_bootstrap/overrides.scss
621
+ - app/assets/stylesheets/effective_bootstrap_article_editor.scss
603
622
  - app/assets/stylesheets/effective_bootstrap_editor.scss
604
623
  - app/assets/stylesheets/effective_checks/input.scss
605
624
  - app/assets/stylesheets/effective_datetime/bootstrap-datetimepicker.scss
@@ -625,6 +644,7 @@ files:
625
644
  - app/helpers/effective_icons_helper.rb
626
645
  - app/models/effective/form_builder.rb
627
646
  - app/models/effective/form_input.rb
647
+ - app/models/effective/form_inputs/article_editor.rb
628
648
  - app/models/effective/form_inputs/check_box.rb
629
649
  - app/models/effective/form_inputs/checks.rb
630
650
  - app/models/effective/form_inputs/ck_editor.rb