ckeditor_wave 2.0.7 → 2.0.8

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
  SHA256:
3
- metadata.gz: 690d7e85ca4196310754a0719d770f6a40899e9432a8edc82a7034c73ad3ebc1
4
- data.tar.gz: 49c1016f4c625bf13a9b5926b21a328ca02c63956c5f0c403ad2e0df152cbb16
3
+ metadata.gz: ff96ab447af708dd508293df7242e11e754661a30f0e4fff9d8376d9974c2f2e
4
+ data.tar.gz: b521b5454254fe3ac9ef66d147396ca9838723a5f07ce68113ad16a93dca7c49
5
5
  SHA512:
6
- metadata.gz: 0f51f3356c18707d0f11a231fa7829468604baa4ae51df6d8b3a2df19257c4f017d9f82119a705ce71e889edf80197c13a694739e4812dede05e3a1112e54d85
7
- data.tar.gz: 3f3f252b44e1046ce29c50b7a7ae91cd3b213b6f316052bb18fbb79b2bdf706519cbee4d2bb4fdb1d55fac1debe7fa49f03419226c01d6307681b53d15603469
6
+ metadata.gz: 6269a1e18c2192c993a88d16c1b1a24a3b13292876efabf44ddfc49a3c13d886a258701dba5a1454eed26b4c8b547caddad40ac7c989208a7eb7803cf9207eab
7
+ data.tar.gz: 225bd23f48ff0809ef141c97dac765945cfcd97f3801f40d4c21edade51aed23ff9e8be374a35fbfb0732c32b2dece901069916d28dbb34e39c3a3badcab7996
data/README.md CHANGED
@@ -7,17 +7,13 @@ This gem integrates [CKEditor 5](https://docs.ckeditor.com/ckeditor5/) with [Car
7
7
  Add this line to your application's Gemfile:
8
8
 
9
9
  ```
10
- gem 'ckeditor_wave', '~> 2.0'
10
+ gem 'ckeditor_wave', '~> 2.1'
11
11
  ```
12
12
 
13
13
  And then execute:
14
14
 
15
15
  $ bundle
16
16
 
17
- Or install it yourself as:
18
-
19
- $ gem install ckeditor_wave
20
-
21
17
  To generate and execute the migration, run:
22
18
 
23
19
  $ rails g ckeditor_wave
@@ -29,12 +25,6 @@ Add the following at the bottom of your application.js:
29
25
  //= require ckeditor_wave
30
26
  ```
31
27
 
32
- Add the following to your routes.rb file:
33
-
34
- ```
35
- mount CkeditorWave::Engine => 'ckeditor_wave'
36
- ```
37
-
38
28
 
39
29
  To attach [CKEditor 5](https://docs.ckeditor.com/ckeditor5/) to HTML forms, call the initiateCkeditor() function inside your application.js by wrapping in in a DOMContentLoaded EventListener and giving it one or more CSS selectors as arguments. For example:
40
30
 
@@ -45,7 +35,7 @@ document.addEventListener('DOMContentLoaded', () => {
45
35
  ```
46
36
 
47
37
  ## Dependencies
48
- * [CKEditor 5](https://docs.ckeditor.com/ckeditor5/) - classic editor build 10.0.1
38
+ * [CKEditor 5](https://docs.ckeditor.com/ckeditor5/) - classic editor build 12.1.0
49
39
  * [CarrierWave](https://github.com/carrierwaveuploader/carrierwave) - version ~> 1.2
50
40
 
51
41
  To install [CKEditor 5](https://docs.ckeditor.com/ckeditor5/), download the 'classic editor build 10.0.1' ZIP package from [this link](https://ckeditor.com/ckeditor-5/download/) and insert the ckeditor.js file inside you app/assets/javascripts folder. Alternatively, you can use the CDN also available from the [same link](https://ckeditor.com/ckeditor-5/download/).
@@ -1 +1 @@
1
- 'use strict';var _createClass=function(){function a(b,c){for(var e,d=0;d<c.length;d++)e=c[d],e.enumerable=e.enumerable||!1,e.configurable=!0,'value'in e&&(e.writable=!0),Object.defineProperty(b,e.key,e)}return function(b,c,d){return c&&a(b.prototype,c),d&&a(b,d),b}}();function _classCallCheck(a,b){if(!(a instanceof b))throw new TypeError('Cannot call a class as a function')}function initiateCkeditor(){var a=Array.from(arguments);a.forEach(function(b){newEditor(b)})}function newEditor(a){var a=document.querySelector(a);if(null===a)return!1;try{ClassicEditor.create(a).then(function(b){b.plugins.get('FileRepository').createUploadAdapter=function(c){return new UploadAdapter(c)},a.nextSibling.querySelector('.ck-content').addEventListener('DOMNodeRemoved',function(c){var d=c.target,e=d.className.split(' ');e.includes('image')&&server.destroy(id(d.children[0]))})}).catch(function(b){console.error(b)})}catch(b){console.log(b),console.log('Is ckeditor.js included?','https://ckeditor.com/ckeditor-5/download/')}}var UploadAdapter=function(){function a(b){_classCallCheck(this,a),this.loader=b}return _createClass(a,[{key:'upload',value:function(){return server.upload(this.loader.file)}}]),a}(),server={upload:upload,destroy:destroy};function upload(a){return new Promise(function(b,c){var d=new XMLHttpRequest,e=new FormData;d.onreadystatechange=function(){4===d.readyState&&200!==d.status&&c('Image upload failed'),4===d.readyState&&200===d.status&&(b({default:d.responseText}),console.log('Image upload successful'))},e.set('ck_image',a),d.open('POST','/ckeditor_wave/ck_images'),d.send(e)})}function destroy(a){var b=new XMLHttpRequest,c=new FormData;b.onreadystatechange=function(){4===b.readyState&&200!==b.status&&console.log('Image deletion failed'),4===b.readyState&&200===b.status&&console.log(b.responseText)},c.set('method','delete'),b.open('DELETE','/ckeditor_wave/ck_images/'+a),b.send(c)}function id(a){var b=a.src.match(/[^\/]*.$/g).toString();return b.match(/[^.]*/)}
1
+ "use strict";function _instanceof(e,n){return null!=n&&"undefined"!=typeof Symbol&&n[Symbol.hasInstance]?n[Symbol.hasInstance](e):e instanceof n}function _classCallCheck(e,n){if(!_instanceof(e,n))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,n){for(var t=0;t<n.length;t++){var r=n[t];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function _createClass(e,n,t){return n&&_defineProperties(e.prototype,n),t&&_defineProperties(e,t),e}var initiateCkeditor=function(){for(var e=arguments.length,n=new Array(e),t=0;t<e;t++)n[t]=arguments[t];Array.from(n).forEach(function(e){newEditor(e)})},newEditor=function(e){var n=document.querySelector(e);if(null===n)return!1;try{ClassicEditor.create(n).then(function(e){e.plugins.get("FileRepository").createUploadAdapter=function(e){return new UploadAdapter(e)}}).catch(function(e){console.error(e)})}catch(e){console.log(e),console.log("Is ckeditor.js included?","https://ckeditor.com/ckeditor-5/download/")}},UploadAdapter=function(){function e(n){_classCallCheck(this,e),this.loader=n}return _createClass(e,[{key:"upload",value:function(){var e=this;return this.loader.file.then(function(n){return new Promise(function(t,r){e._initRequest(),e._initListeners(t,r,n),e._sendRequest(n)})})}},{key:"abort",value:function(){this.xhr&&this.xhr.abort()}},{key:"_initRequest",value:function(){var e=this.xhr=new XMLHttpRequest;e.open("POST","/ckeditor_wave/ck_images",!0),e.responseType="json"}},{key:"_initListeners",value:function(e,n,t){var r=this.xhr,o=this.loader,a="Couldn't upload file: ".concat(t.name,".");r.addEventListener("error",function(){return n(a)}),r.addEventListener("abort",function(){return n()}),r.addEventListener("load",function(){var t=r.response;if(!t||t.error)return n(t&&t.error?t.error.message:a);e({default:t.url})}),r.upload&&r.upload.addEventListener("progress",function(e){e.lengthComputable&&(o.uploadTotal=e.total,o.uploaded=e.loaded)})}},{key:"_sendRequest",value:function(e){var n=new FormData;n.append("ck_image",e),this.xhr.send(n)}}]),e}();
@@ -1,14 +1,17 @@
1
- function initiateCkeditor() {
2
- var editors = Array.from(arguments);
3
- editors.forEach(function(editor){
4
- newEditor(editor);
5
- });
1
+ const initiateCkeditor = (...args) => {
2
+ const editor_ids = Array.from(args);
3
+
4
+ editor_ids.forEach(function(editor_id){
5
+ newEditor(editor_id);
6
+ });
6
7
  }
7
8
 
8
- function newEditor(ck_editor) {
9
- var ck_editor = document.querySelector(ck_editor);
9
+ const newEditor = (editor_id) => {
10
+ const ck_editor = document.querySelector(editor_id);
11
+
12
+ if (ck_editor === null)
13
+ return false;
10
14
 
11
- if (ck_editor === null) return false;
12
15
  try{
13
16
  ClassicEditor
14
17
  .create(ck_editor)
@@ -16,14 +19,6 @@ function newEditor(ck_editor) {
16
19
  editor.plugins.get('FileRepository').createUploadAdapter = (loader) => {
17
20
  return new UploadAdapter(loader);
18
21
  };
19
-
20
- ck_editor.nextSibling.querySelector('.ck-content').addEventListener(
21
- 'DOMNodeRemoved', (event) => {
22
- var element = event.target;
23
- var classes = element.className.split(' ');
24
- if (classes.includes('image'))
25
- server.destroy(id(element.children[0]));
26
- });
27
22
  })
28
23
  .catch(error => {
29
24
  console.error(error);
@@ -35,54 +30,61 @@ function newEditor(ck_editor) {
35
30
  }
36
31
 
37
32
  class UploadAdapter {
38
- constructor(loader) {
33
+ constructor( loader ) {
39
34
  this.loader = loader;
40
35
  }
36
+
41
37
  upload() {
42
- return server.upload(this.loader.file);
38
+ return this.loader.file
39
+ .then(file => new Promise((resolve, reject) => {
40
+ this._initRequest();
41
+ this._initListeners(resolve, reject, file);
42
+ this._sendRequest(file);
43
+ }));
43
44
  }
44
- }
45
45
 
46
- var server = {
47
- upload: upload,
48
- destroy: destroy
49
- }
46
+ abort() {
47
+ if (this.xhr)
48
+ this.xhr.abort();
49
+ }
50
50
 
51
- function upload(file) {
52
- return new Promise((resolve, reject) => {
53
- var xhr = new XMLHttpRequest();
54
- var formData = new FormData();
55
- xhr.onreadystatechange = () => {
56
- if (xhr.readyState === 4 && xhr.status !== 200)
57
- reject('Image upload failed');
58
- if (xhr.readyState === 4 && xhr.status === 200) {
59
- resolve({
60
- default: xhr.responseText
61
- });
62
- console.log('Image upload successful');
63
- }
64
- };
65
- formData.set('ck_image', file);
66
- xhr.open('POST', '/ckeditor_wave/ck_images');
67
- xhr.send(formData);
68
- });
69
- }
51
+ _initRequest() {
52
+ const xhr = this.xhr = new XMLHttpRequest();
53
+ xhr.open('POST', '/ckeditor_wave/ck_images', true);
54
+ xhr.responseType = 'json';
55
+ }
70
56
 
71
- function destroy(id) {
72
- var xhr = new XMLHttpRequest();
73
- var formData = new FormData();
74
- xhr.onreadystatechange = () => {
75
- if (xhr.readyState === 4 && xhr.status !== 200)
76
- console.log('Image deletion failed');
77
- if (xhr.readyState === 4 && xhr.status === 200)
78
- console.log(xhr.responseText);
79
- };
80
- formData.set('method', 'delete');
81
- xhr.open('DELETE', '/ckeditor_wave/ck_images/' + id);
82
- xhr.send(formData);
83
- }
57
+ _initListeners(resolve, reject, file) {
58
+ const xhr = this.xhr;
59
+ const loader = this.loader;
60
+ const genericErrorText = `Couldn't upload file: ${file.name}.`;
61
+
62
+ xhr.addEventListener('error', () => reject(genericErrorText));
63
+ xhr.addEventListener('abort', () => reject());
64
+ xhr.addEventListener('load', () => {
65
+ const response = xhr.response;
66
+
67
+ if (!response || response.error)
68
+ return reject(response && response.error ? response.error.message : genericErrorText);
69
+
70
+ resolve({default: response.url});
71
+ });
84
72
 
85
- function id(element) {
86
- var filename = element.src.match(/[^\/]*.$/g).toString();
87
- return filename.match(/[^.]*/);
73
+ // progress not being displayed currently
74
+ if (xhr.upload) {
75
+ xhr.upload.addEventListener('progress', evt => {
76
+ if (evt.lengthComputable) {
77
+ loader.uploadTotal = evt.total;
78
+ loader.uploaded = evt.loaded;
79
+ }
80
+ });
81
+ }
82
+ }
83
+
84
+ _sendRequest(file) {
85
+ const data = new FormData();
86
+
87
+ data.append('ck_image', file);
88
+ this.xhr.send(data);
89
+ }
88
90
  }
@@ -4,20 +4,12 @@ module CkeditorWave
4
4
 
5
5
  def create
6
6
  ck_image = CkImage.new(ck_image: params[:ck_image], uuid: SecureRandom.uuid)
7
- if ck_image.save
8
- render plain: ck_image.url
9
- else
10
- render plain: 'Image upload failed'
11
- end
12
- end
13
7
 
14
- def destroy
15
- ck_image = CkImage.find_by_uuid(params[:id])
16
- if ck_image.destroy
17
- render plain: 'Image deletion successful'
8
+ if ck_image.save
9
+ render json: { url: ck_image.url }
18
10
  else
19
- render plain: 'Image deletion failed'
11
+ render head(500)
20
12
  end
21
13
  end
22
14
  end
23
- end
15
+ end
@@ -1,6 +1,7 @@
1
1
  module CkeditorWave
2
2
  class CkImage < ApplicationRecord
3
3
  mount_uploader :ck_image, CkImageUploader
4
+
4
5
  def url
5
6
  ck_image.url
6
7
  end
@@ -1,5 +1,5 @@
1
1
  module CkeditorWave
2
- class CkImageUploader < CarrierWave::Uploader::Base
2
+ class CkImageUploader < ::CarrierWave::Uploader::Base
3
3
  def store_dir
4
4
  "uploads/#{model.class.to_s.pluralize.underscore}"
5
5
  end
@@ -7,4 +7,4 @@ module CkeditorWave
7
7
  "#{model.uuid}.jpg"
8
8
  end
9
9
  end
10
- end
10
+ end
data/config/routes.rb CHANGED
@@ -1,5 +1,3 @@
1
- CkeditorWave::Engine.routes do
2
- scope module: 'ckeditor_wave' do
3
- resources :ck_images
4
- end
1
+ Rails.application.routes.draw do
2
+ post 'ckeditor_wave/ck_images', to: 'ckeditor_wave/ck_images#create'
5
3
  end
@@ -1,3 +1,3 @@
1
1
  module CkeditorWave
2
- VERSION = '2.0.7'
2
+ VERSION = '2.0.8'
3
3
  end
data/lib/ckeditor_wave.rb CHANGED
@@ -1,5 +1,3 @@
1
- require 'ckeditor_wave/version'
2
-
3
1
  module CkeditorWave
4
2
  class Engine < ::Rails::Engine
5
3
  config.generators do |g|
metadata CHANGED
@@ -1,57 +1,57 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ckeditor_wave
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.7
4
+ version: 2.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Evgeni Radev
8
8
  autorequire:
9
- bindir: exe
9
+ bindir: bin
10
10
  cert_chain: []
11
- date: 2019-03-31 00:00:00.000000000 Z
11
+ date: 2019-06-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: bundler
14
+ name: carrierwave
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.16'
20
- type: :development
19
+ version: '1.2'
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.16'
26
+ version: '1.2'
27
27
  - !ruby/object:Gem::Dependency
28
- name: rake
28
+ name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '10.0'
33
+ version: '1.16'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '10.0'
40
+ version: '1.16'
41
41
  - !ruby/object:Gem::Dependency
42
- name: carrierwave
42
+ name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '1.2'
47
+ version: '10.0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '1.2'
54
+ version: '10.0'
55
55
  description:
56
56
  email:
57
57
  - evgeniradev@gmail.com
@@ -59,8 +59,6 @@ executables: []
59
59
  extensions: []
60
60
  extra_rdoc_files: []
61
61
  files:
62
- - ".gitignore"
63
- - Gemfile
64
62
  - LICENSE
65
63
  - README.md
66
64
  - Rakefile
@@ -69,11 +67,7 @@ files:
69
67
  - app/controllers/ckeditor_wave/ck_images_controller.rb
70
68
  - app/models/ckeditor_wave/ck_image.rb
71
69
  - app/uploaders/ckeditor_wave/ck_image_uploader.rb
72
- - bin/console
73
- - bin/setup
74
- - ckeditor_wave.gemspec
75
70
  - config/routes.rb
76
- - db/migrate/migration.rb
77
71
  - lib/ckeditor_wave.rb
78
72
  - lib/ckeditor_wave/version.rb
79
73
  - lib/generators/ckeditor_wave_generator.rb
@@ -98,7 +92,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
98
92
  version: '0'
99
93
  requirements: []
100
94
  rubyforge_project:
101
- rubygems_version: 2.7.7
95
+ rubygems_version: 2.7.9
102
96
  signing_key:
103
97
  specification_version: 4
104
98
  summary: This gem integrates CKEditor 5 with CarrierWave to allow image upload.
data/.gitignore DELETED
@@ -1,9 +0,0 @@
1
- /.bundle/
2
- /.yardoc
3
- /_yardoc/
4
- /coverage/
5
- /doc/
6
- /pkg/
7
- /spec/reports/
8
- /tmp/
9
- /*.gem
data/Gemfile DELETED
@@ -1,6 +0,0 @@
1
- source "https://rubygems.org"
2
-
3
- git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
4
-
5
- # Specify your gem's dependencies in ckeditor_wave.gemspec
6
- gemspec
data/bin/console DELETED
@@ -1,14 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require "bundler/setup"
4
- require "ckeditor_wave"
5
-
6
- # You can add fixtures and/or initialization code here to make experimenting
7
- # with your gem easier. You can also use a different console, if you like.
8
-
9
- # (If you use this, don't forget to add pry to your Gemfile!)
10
- # require "pry"
11
- # Pry.start
12
-
13
- require "irb"
14
- IRB.start(__FILE__)
data/bin/setup DELETED
@@ -1,8 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
- IFS=$'\n\t'
4
- set -vx
5
-
6
- bundle install
7
-
8
- # Do any other automated setup that you need to do here
@@ -1,31 +0,0 @@
1
- lib = File.expand_path('../lib', __FILE__)
2
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
- require 'ckeditor_wave/version'
4
-
5
- Gem::Specification.new do |spec|
6
- spec.name = 'ckeditor_wave'
7
- spec.version = CkeditorWave::VERSION
8
- spec.authors = ['Evgeni Radev']
9
- spec.email = ['evgeniradev@gmail.com']
10
- spec.summary = %q{This gem integrates CKEditor 5 with CarrierWave to allow image upload.}
11
- spec.homepage = 'https://github.com/evgeniradev/ckeditor_wave'
12
- spec.license = 'GPL-3.0+'
13
-
14
- if spec.respond_to?(:metadata)
15
- spec.metadata['allowed_push_host'] = 'https://rubygems.org'
16
- else
17
- raise 'RubyGems 2.0 or newer is required to protect against ' \
18
- 'public gem pushes.'
19
- end
20
-
21
- spec.files = `git ls-files -z`.split("\x0").reject do |f|
22
- f.match(%r{^(test|spec|features)/})
23
- end
24
- spec.bindir = 'exe'
25
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
26
- spec.require_paths = ['lib']
27
-
28
- spec.add_development_dependency 'bundler', '~> 1.16'
29
- spec.add_development_dependency 'rake', '~> 10.0'
30
- spec.add_development_dependency 'carrierwave', '~> 1.2'
31
- end
@@ -1,9 +0,0 @@
1
- class CreateCkImagesTable < ActiveRecord::Migration[5.2]
2
- def change
3
- create_table :ck_images do |t|
4
- t.string :ck_image
5
- t.string :uuid, index: true
6
- t.timestamps
7
- end
8
- end
9
- end