activeadmin_quill_editor 0.2.0 → 1.0.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.
@@ -1,45 +1,91 @@
1
- window.onload = function() {
2
- initQuillEditors();
3
- }
4
-
5
- $(document).on('has_many_add:after', function() {
6
- initQuillEditors();
7
- });
8
-
9
- var initQuillEditors = function() {
10
- var editors = document.querySelectorAll('.quill-editor');
11
- var default_options = {
12
- modules: {
13
- toolbar: [
14
- ['bold', 'italic', 'underline'],
15
- ['link', 'blockquote', 'code-block'],
16
- [{ 'script': 'sub'}, { 'script': 'super' }],
17
- [{ 'align': [] }, { list: 'ordered' }, { list: 'bullet' }],
18
- [{ 'color': [] }, { 'background': [] }],
19
- ['clean'],
20
- ]
21
- },
22
- placeholder: '',
23
- theme: 'snow'
24
- };
25
-
26
- for(var i = 0; i < editors.length; i++) {
27
- var content = editors[i].querySelector('.quill-editor-content');
28
- var isActive = editors[i].classList.contains('quill-editor--active');
29
- if(content && !isActive) {
30
- var options = editors[i].getAttribute('data-options') ? JSON.parse(editors[i].getAttribute('data-options')) : default_options;
31
- editors[i]['_quill-editor'] = new Quill(content, options);
32
- editors[i].classList += ' quill-editor--active';
1
+ (function () {
2
+ 'use strict'
3
+
4
+ // --- functions ---------------------------------------------------------------
5
+ function initQuillEditors() {
6
+ let default_theme = 'snow'
7
+ let default_toolbar = [
8
+ ['bold', 'italic', 'underline'],
9
+ ['link', 'blockquote', 'code-block'],
10
+ [{ 'script': 'sub' }, { 'script': 'super' }],
11
+ [{ 'align': [] }, { list: 'ordered' }, { list: 'bullet' }],
12
+ [{ 'color': [] }, { 'background': [] }],
13
+ ['image'],
14
+ ['clean'],
15
+ ]
16
+ let editors = document.querySelectorAll('[data-aa-quill-editor]')
17
+ let registered_plugins = {}
18
+
19
+ for (let i = 0; i < editors.length; i++) {
20
+ let content = editors[i].querySelector('[data-aa-quill-content]')
21
+ let isActive = editors[i].classList.contains('quill-editor--active')
22
+ if (content && !isActive) {
23
+ // Setup editor options
24
+ let options = editors[i].getAttribute('data-options') ? JSON.parse(editors[i].getAttribute('data-options')) : {}
25
+ if (!options.theme) options.theme = default_theme
26
+ if (!options.modules) options.modules = {}
27
+ if (!options.modules.toolbar) options.modules.toolbar = default_toolbar
28
+
29
+ // Setup plugin options
30
+ let plugin_options = editors[i].getAttribute('data-plugins') ? JSON.parse(editors[i].getAttribute('data-plugins')) : {}
31
+ if (plugin_options.image_uploader && plugin_options.image_uploader.server_url) {
32
+ if (!registered_plugins.image_uploader) {
33
+ Quill.register('modules/imageUploader', ImageUploader)
34
+ registered_plugins.image_uploader = true
35
+ }
36
+ let opts = plugin_options.image_uploader
37
+ options.modules.imageUploader = setupImageUploader(opts.server_url, opts.field_name)
38
+ }
39
+
40
+ // Init editor
41
+ editors[i]['_quill-editor'] = new Quill(content, options)
42
+ editors[i].classList += ' quill-editor--active'
43
+ }
44
+ }
45
+
46
+ let formtastic = document.querySelector('form.formtastic')
47
+ if (formtastic) {
48
+ formtastic.onsubmit = () => {
49
+ for (let i = 0; i < editors.length; i++) {
50
+ let input = editors[i].querySelector('input[type="hidden"]')
51
+ if (editors[i]['_quill-editor'].editor.isBlank()) {
52
+ input.value = ''
53
+ } else {
54
+ input.value = editors[i]['_quill-editor'].root.innerHTML
55
+ }
56
+ }
57
+ };
33
58
  }
34
59
  }
35
60
 
36
- var formtastic = document.querySelector('form.formtastic');
37
- if(formtastic) {
38
- formtastic.onsubmit = function() {
39
- for(var i = 0; i < editors.length; i++) {
40
- var input = editors[i].querySelector('input[type="hidden"]');
41
- input.value = editors[i]['_quill-editor'].root.innerHTML;
61
+ function setupImageUploader(server_url, field_name) {
62
+ return {
63
+ upload: file => {
64
+ return new Promise((resolve, reject) => {
65
+ const formData = new FormData()
66
+ formData.append(field_name || 'file_upload', file)
67
+
68
+ fetch(server_url, {
69
+ body: formData,
70
+ headers: {
71
+ 'X-CSRF-Token': document.querySelector('meta[name="csrf-token"]').getAttribute('content')
72
+ },
73
+ method: 'POST'
74
+ }).then(response => response.json())
75
+ .then(result => {
76
+ resolve(result.url);
77
+ })
78
+ .catch(error => {
79
+ reject('Upload failed')
80
+ console.error('Error: ', error)
81
+ })
82
+ })
42
83
  }
43
- };
84
+ }
44
85
  }
45
- };
86
+
87
+ // --- events ------------------------------------------------------------------
88
+ $(document).ready(initQuillEditors)
89
+ $(document).on('has_many_add:after', '.has_many_container', initQuillEditors)
90
+ $(document).on('turbolinks:load', initQuillEditors)
91
+ })()
@@ -0,0 +1,56 @@
1
+ // reset internal elements
2
+ .ql-editor * {
3
+ margin: initial;
4
+ padding: initial;
5
+ text-align: initial;
6
+ }
7
+
8
+ body.active_admin [data-aa-quill-editor] {
9
+ display: inline-block;
10
+ width: calc(80% - 2px);
11
+
12
+ button {
13
+ text-shadow: none;
14
+ box-shadow: none;
15
+
16
+ &:hover {
17
+ background-image: none;
18
+ background-color: transparent;
19
+ }
20
+ }
21
+
22
+ .ql-container {
23
+ border: 1px solid #c9d0d6;
24
+ border-radius: 0 0 3px 3px;
25
+ }
26
+
27
+ .ql-editor {
28
+ background-color: #fff;
29
+ max-height: 300px;
30
+ min-height: 150px;
31
+ padding: 10px;
32
+ word-break: break-all;
33
+
34
+ ol {
35
+ list-style-type: decimal;
36
+ }
37
+
38
+ p {
39
+ margin-bottom: 1em;
40
+ }
41
+
42
+ ul {
43
+ list-style-type: disc;
44
+ }
45
+
46
+ ul, ol {
47
+ margin: 0 1.5em 1.5em 0;
48
+ padding-left: 1.5em;
49
+ }
50
+ }
51
+
52
+ .ql-toolbar {
53
+ border: 1px solid #c9d0d6;
54
+ border-radius: 3px 3px 0 0;
55
+ }
56
+ }
@@ -0,0 +1,33 @@
1
+ .image-uploading {
2
+ position: relative;
3
+ display: inline-block;
4
+ }
5
+
6
+ .image-uploading img {
7
+ max-width: 98% !important;
8
+ filter: blur(5px);
9
+ opacity: 0.3;
10
+ }
11
+
12
+ .image-uploading::before {
13
+ content: "";
14
+ box-sizing: border-box;
15
+ position: absolute;
16
+ top: 50%;
17
+ left: 50%;
18
+ width: 30px;
19
+ height: 30px;
20
+ margin-top: -15px;
21
+ margin-left: -15px;
22
+ border-radius: 50%;
23
+ border: 3px solid #ccc;
24
+ border-top-color: #1e986c;
25
+ z-index: 1;
26
+ animation: spinner 0.6s linear infinite;
27
+ }
28
+
29
+ @keyframes spinner {
30
+ to {
31
+ transform: rotate(360deg);
32
+ }
33
+ }
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Quill Editor v1.3.6
2
+ * Quill Editor v1.3.7
3
3
  * https://quilljs.com/
4
4
  * Copyright (c) 2014, Jason Chen
5
5
  * Copyright (c) 2013, salesforce.com
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Quill Editor v1.3.6
2
+ * Quill Editor v1.3.7
3
3
  * https://quilljs.com/
4
4
  * Copyright (c) 2014, Jason Chen
5
5
  * Copyright (c) 2013, salesforce.com
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Quill Editor v1.3.6
2
+ * Quill Editor v1.3.7
3
3
  * https://quilljs.com/
4
4
  * Copyright (c) 2014, Jason Chen
5
5
  * Copyright (c) 2013, salesforce.com
@@ -2,6 +2,7 @@
2
2
 
3
3
  module ActiveAdmin
4
4
  module QuillEditor
5
- VERSION = '0.2.0'
5
+ VERSION = '1.0.0'
6
+ QUILL_VERSION = '1.3.7'
6
7
  end
7
8
  end
@@ -6,9 +6,9 @@ module Formtastic
6
6
  def to_html
7
7
  input_wrapping do
8
8
  label_html <<
9
- template.content_tag(:div, input_html_options.merge(class: 'quill-editor')) do
9
+ template.content_tag(:div, input_html_options.merge('data-aa-quill-editor': '1')) do
10
10
  builder.hidden_field(input_name) <<
11
- template.content_tag(:div, class: 'quill-editor-content') do
11
+ template.content_tag(:div, 'data-aa-quill-content': '1') do
12
12
  object.send(method).try :html_safe
13
13
  end
14
14
  end
metadata CHANGED
@@ -1,47 +1,59 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activeadmin_quill_editor
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mattia Roccoberton
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-06-15 00:00:00.000000000 Z
11
+ date: 2022-04-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activeadmin
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.0'
19
+ version: '2.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: '1.0'
26
+ version: '2.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: appraisal
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '2.4'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '2.4'
27
41
  description: An Active Admin plugin to use Quill Rich Text Editor
28
42
  email: mat@blocknot.es
29
43
  executables: []
30
44
  extensions: []
31
45
  extra_rdoc_files: []
32
46
  files:
33
- - ".gitignore"
34
- - ".rubocop.yml"
35
- - Gemfile
36
47
  - LICENSE.txt
37
48
  - README.md
38
49
  - Rakefile
39
- - activeadmin_quill_editor.gemspec
50
+ - app/assets/javascripts/activeadmin/quill.imageUploader.min.js
40
51
  - app/assets/javascripts/activeadmin/quill_editor/quill.core.js
41
52
  - app/assets/javascripts/activeadmin/quill_editor/quill.js
42
53
  - app/assets/javascripts/activeadmin/quill_editor/quill.min.js
43
54
  - app/assets/javascripts/activeadmin/quill_editor_input.js
44
- - app/assets/stylesheets/activeadmin/_quill_editor_input.sass
55
+ - app/assets/stylesheets/activeadmin/_quill_editor_input.scss
56
+ - app/assets/stylesheets/activeadmin/quill.imageUploader.min.css
45
57
  - app/assets/stylesheets/activeadmin/quill_editor/quill.bubble.css
46
58
  - app/assets/stylesheets/activeadmin/quill_editor/quill.core.css
47
59
  - app/assets/stylesheets/activeadmin/quill_editor/quill.snow.css
@@ -50,12 +62,15 @@ files:
50
62
  - lib/activeadmin/quill_editor/version.rb
51
63
  - lib/activeadmin_quill_editor.rb
52
64
  - lib/formtastic/inputs/quill_editor_input.rb
53
- - screenshot.jpg
54
65
  homepage: https://github.com/blocknotes/activeadmin_quill_editor
55
66
  licenses:
56
67
  - MIT
57
- metadata: {}
58
- post_install_message:
68
+ metadata:
69
+ homepage_uri: https://github.com/blocknotes/activeadmin_quill_editor
70
+ changelog_uri: https://github.com/blocknotes/activeadmin_quill_editor/blob/master/CHANGELOG.md
71
+ source_code_uri: https://github.com/blocknotes/activeadmin_quill_editor
72
+ rubygems_mfa_required: 'true'
73
+ post_install_message:
59
74
  rdoc_options: []
60
75
  require_paths:
61
76
  - lib
@@ -63,15 +78,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
63
78
  requirements:
64
79
  - - ">="
65
80
  - !ruby/object:Gem::Version
66
- version: '0'
81
+ version: 2.6.0
67
82
  required_rubygems_version: !ruby/object:Gem::Requirement
68
83
  requirements:
69
84
  - - ">="
70
85
  - !ruby/object:Gem::Version
71
86
  version: '0'
72
87
  requirements: []
73
- rubygems_version: 3.0.2
74
- signing_key:
88
+ rubygems_version: 3.1.6
89
+ signing_key:
75
90
  specification_version: 4
76
91
  summary: Quill Editor for ActiveAdmin
77
92
  test_files: []
data/.gitignore DELETED
@@ -1,3 +0,0 @@
1
- _misc/
2
-
3
- *.orig
data/.rubocop.yml DELETED
@@ -1,73 +0,0 @@
1
- require:
2
- - rubocop-rspec
3
-
4
- Rails:
5
- Enabled: true
6
-
7
- AllCops:
8
- TargetRubyVersion: 2.3.8
9
- TargetRailsVersion: 5.2
10
- Exclude:
11
- - db/schema.rb
12
- - bin/*
13
- - node_modules/**/*
14
- # Temporary files
15
- - tmp/**/*
16
-
17
- Rails/InverseOf:
18
- Enabled: false
19
-
20
- Style/Documentation:
21
- Enabled: false
22
-
23
- Metrics/ClassLength:
24
- # Default value is 100
25
- Max: 150
26
-
27
- Metrics/LineLength:
28
- # Default is 80
29
- Max: 120
30
-
31
- Metrics/ModuleLength:
32
- # Default is 100
33
- Max: 150
34
-
35
- Metrics/ParameterLists:
36
- # Default is 5
37
- Max: 6
38
-
39
- RSpec/ExampleLength:
40
- # Default is 10
41
- Max: 20
42
-
43
- Style/FrozenStringLiteralComment:
44
- # Deface DOES edit strings in place
45
- Exclude:
46
- - 'app/overrides/**/*'
47
-
48
- RSpec/MultipleExpectations:
49
- # Default is 3
50
- Max: 5
51
-
52
- RSpec/NestedGroups:
53
- # Default is 3
54
- Max: 6
55
-
56
- Metrics/AbcSize:
57
- Max: 25
58
-
59
- Metrics/BlockLength:
60
- # This value double the rubocop default
61
- Max: 50
62
-
63
- Metrics/CyclomaticComplexity:
64
- # This value double the rubocop default
65
- Max: 12
66
-
67
- Metrics/MethodLength:
68
- # This value double the rubocop default
69
- Max: 20
70
-
71
- Metrics/PerceivedComplexity:
72
- # Default is 7
73
- Max: 10
data/Gemfile DELETED
@@ -1,3 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gemspec
@@ -1,21 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- lib = File.expand_path('lib', __dir__)
4
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
- require 'activeadmin/quill_editor/version'
6
-
7
- Gem::Specification.new do |spec|
8
- spec.name = 'activeadmin_quill_editor'
9
- spec.version = ActiveAdmin::QuillEditor::VERSION
10
- spec.summary = 'Quill Editor for ActiveAdmin'
11
- spec.description = 'An Active Admin plugin to use Quill Rich Text Editor'
12
- spec.license = 'MIT'
13
- spec.authors = ['Mattia Roccoberton']
14
- spec.email = 'mat@blocknot.es'
15
- spec.homepage = 'https://github.com/blocknotes/activeadmin_quill_editor'
16
-
17
- spec.files = `git ls-files -z`.split("\x0")
18
- spec.require_paths = ['lib']
19
-
20
- spec.add_runtime_dependency 'activeadmin', '>= 1.0'
21
- end
@@ -1,24 +0,0 @@
1
- @import 'activeadmin/quill_editor/quill.snow'
2
-
3
- body.active_admin form .quill-editor
4
- display: inline-block
5
- width: calc(80% - 22px)
6
- .ql-editor
7
- background-color: #fff
8
- max-height: 300px
9
- min-height: 150px
10
- padding: 10px
11
- // reset internal elements
12
- *
13
- margin: initial
14
- padding: initial
15
- text-align: initial
16
- p
17
- margin-bottom: 1em
18
- ol
19
- list-style-type: decimal
20
- ul
21
- list-style-type: disc
22
- ul, ol
23
- margin: 0 1.5em 1.5em 0
24
- padding-left: 1.5em
data/screenshot.jpg DELETED
Binary file