ckeditor_wave 2.0.7 → 2.0.8

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: 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