ckeditor5 1.23.0 → 1.23.1

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: a6209f7ab70666ad0c3e5c368f47832871d740429238bb62199c5956ca73fe77
4
- data.tar.gz: 3e3af0099b5150b6c2df7bb578a11cd63b81f88cb9ded596806e5ea980ebf90a
3
+ metadata.gz: 2de59df11814137ec61eddc70cdb6b8e2ad41a3ce36a1b05f1465bcc34f0e3cf
4
+ data.tar.gz: 6758a10a972ca02b7f004bc1829ddabf7b98f4200e05cd6006ee7ca4ecbb2a22
5
5
  SHA512:
6
- metadata.gz: 1d7f113a286468066aa941cba9d735c5312d8558ed83a1d3f9fa7e4a2959d7c58a843f6b0bf8fd4e296b0ab34dedc303f0a6533c5adf6af1c60a1a77dbe4c5e9
7
- data.tar.gz: c4304b80a54b9bf94629b9aa8c27d640e2ff0783e3d78d2a577400d3cd29df337aa1a8b40fc7bc8f050bc3ee3c528becfa0a12b68158fdb980df5ea2b897b6f8
6
+ metadata.gz: 119d9e0202d230327df5a5cd9feff5fde6777682c0a6578af70dcd4aeaf4ee1639cee87b38fa532ecebaa53b94a157299549fa7109cb127bf6c3f4f8426b05d9
7
+ data.tar.gz: 4576053427f4b2a464810dac8a14c23b90cdd64ae3e26368cd64154e71e1a63a35b9418ee062e33b65c987598e0f23ec5dd01e047ccc24a7b1fadeaf50966f23
data/Gemfile CHANGED
@@ -3,26 +3,30 @@
3
3
  source 'https://rubygems.org'
4
4
 
5
5
  gem 'bundler', '~> 2.5', '>= 2.5.21'
6
+ gem 'importmap-rails'
7
+ gem 'propshaft'
8
+ gem 'pry', '~> 0.15', '>= 0.15.0'
9
+ gem 'pry-rails', '~> 0.3', '>= 0.3.11'
10
+ gem 'rails', '~> 8.0', '>= 8.0.0'
11
+ gem 'rake', '~> 13.2', '>= 13.2.1'
12
+ gem 'simple_form', '~> 5.3', '>= 5.3.0'
13
+ gem 'slim', '~> 5.2', '>= 5.2.0'
14
+ gem 'sqlite3', '~> 2.4', '>= 2.4.1'
15
+ gem 'stimulus-rails'
16
+ gem 'terser', '~> 1.1', '>= 1.1.1'
17
+ gem 'turbo-rails'
18
+
19
+ group :production do
20
+ gem 'puma', '~> 6.5'
21
+ end
6
22
 
7
23
  group :development do
8
24
  gem 'brakeman', '~> 6.1', '>= 6.1.1', require: false
9
25
  gem 'guard', '~> 2.19', '>= 2.19.0'
10
26
  gem 'guard-process', '~> 1.2'
11
- gem 'importmap-rails'
12
- gem 'propshaft'
13
- gem 'pry', '~> 0.15', '>= 0.15.0'
14
- gem 'pry-rails', '~> 0.3', '>= 0.3.11'
15
- gem 'rails', '~> 8.0', '>= 8.0.0'
16
- gem 'rake', '~> 13.2', '>= 13.2.1'
17
27
  gem 'rubocop', '~> 1.66', require: false
18
28
  gem 'rubocop-rails', '~> 2.26', '>= 2.26.2', require: false
19
29
  gem 'rubocop-rails-omakase', '~> 1.0.0', require: false
20
- gem 'simple_form', '~> 5.3', '>= 5.3.0'
21
- gem 'slim', '~> 5.2', '>= 5.2.0'
22
- gem 'sqlite3', '>= 1.4'
23
- gem 'stimulus-rails'
24
- gem 'terser', '~> 1.1', '>= 1.1.1'
25
- gem 'turbo-rails'
26
30
  end
27
31
 
28
32
  group :test, :development do
data/README.md CHANGED
@@ -32,9 +32,8 @@ In your layout:
32
32
  <head>
33
33
  <!--
34
34
  ⚠️ **Important**: When using `importmap-rails`, make sure the importmap
35
- tags are rendered after `ckeditor5_assets` helper. The importmap must
36
- be included in the head section to ensure proper loading order.
37
- This is crucial for CKEditor 5 to work correctly.
35
+ tags are rendered after `ckeditor5_assets` helper. In this scenario,
36
+ content is yielded before rendering `javascript_importmap_tags`.
38
37
  -->
39
38
  <!-- javascript_importmap_tags -->
40
39
  <%= yield :head %>
@@ -131,6 +130,8 @@ For extending CKEditor's functionality, refer to the [plugins directory](https:/
131
130
  - [`ckbox` method](#ckbox-method)
132
131
  - [`type(type)` method](#typetype-method)
133
132
  - [`toolbar(*items, should_group_when_full: true, &block)` method](#toolbaritems-should_group_when_full-true-block-method)
133
+ - [`block_toolbar(*items, should_group_when_full: true, &block)` method](#block_toolbaritems-should_group_when_full-true-block-method)
134
+ - [`balloon_toolbar(*items, should_group_when_full: true, &block)` method](#balloon_toolbaritems-should_group_when_full-true-block-method)
134
135
  - [`menubar(visible: true)` method](#menubarvisible-true-method)
135
136
  - [`configure(name, value)` method](#configurename-value-method)
136
137
  - [`plugin(name, premium:, import_name:)` method](#pluginname-premium-import_name-method)
@@ -645,6 +646,52 @@ end
645
646
 
646
647
  </details>
647
648
 
649
+ #### `block_toolbar(*items, should_group_when_full: true, &block)` method
650
+
651
+ <details>
652
+ <summary>Define block toolbar items and their grouping behavior</summary>
653
+
654
+ <br />
655
+
656
+ API is identical to the `toolbar` method, but it's used for block toolbar items. The example below shows how to define block toolbar items:
657
+
658
+ ```rb
659
+ # config/initializers/ckeditor5.rb
660
+
661
+ CKEditor5::Rails.configure do
662
+ # ... other configuration
663
+
664
+ block_toolbar :paragraph, :heading, :blockQuote, :|, :bulletedList, :numberedList, :todoList
665
+ end
666
+ ```
667
+
668
+ It is useful when you want to use Block Balloon Editor or Block Toolbar features.
669
+
670
+ </details>
671
+
672
+ #### `balloon_toolbar(*items, should_group_when_full: true, &block)` method
673
+
674
+ <details>
675
+ <summary>Define balloon toolbar items and their grouping behavior</summary>
676
+
677
+ <br />
678
+
679
+ API is identical to the `toolbar` method, but it's used for balloon toolbar items. The example below shows how to define balloon toolbar items:
680
+
681
+ ```rb
682
+ # config/initializers/ckeditor5.rb
683
+
684
+ CKEditor5::Rails.configure do
685
+ # ... other configuration
686
+
687
+ balloon_toolbar :bold, :italic, :underline, :link, :insertImage, :mediaEmbed, :insertTable, :blockQuote
688
+ end
689
+ ```
690
+
691
+ It is useful when you want to use Balloon Editor or Balloon Toolbar features.
692
+
693
+ </details>
694
+
648
695
  #### `menubar(visible: true)` method
649
696
 
650
697
  <details>
@@ -407,6 +407,15 @@ class CKEditorComponent extends HTMLElement {
407
407
  return this.getAttribute('type') === 'ClassicEditor';
408
408
  }
409
409
 
410
+ /**
411
+ * Checks if current editor is balloon type
412
+ *
413
+ * @returns {boolean}
414
+ */
415
+ isBallon() {
416
+ return this.getAttribute('type') === 'BalloonEditor';
417
+ }
418
+
410
419
  /**
411
420
  * Checks if current editor is multiroot type
412
421
  *
@@ -542,7 +551,7 @@ class CKEditorComponent extends HTMLElement {
542
551
  * @private
543
552
  */
544
553
  #setupEditableHeight() {
545
- if (!this.isClassic()) {
554
+ if (!this.isClassic() && !this.isBallon()) {
546
555
  return;
547
556
  }
548
557
 
@@ -20,10 +20,10 @@ module CKEditor5::Rails::Editor
20
20
  attr_reader :editor_type
21
21
 
22
22
  def validate_editor_type!
23
- return if editor_type == :classic
23
+ return if %i[classic balloon].include?(editor_type)
24
24
 
25
25
  raise InvalidEditableHeightError,
26
- 'editable_height can be used only with ClassicEditor'
26
+ 'editable_height can be used only with ClassicEditor or BalloonEditor'
27
27
  end
28
28
 
29
29
  def convert_to_pixel_value(value)
@@ -263,19 +263,53 @@ module CKEditor5::Rails
263
263
  # remove :heading
264
264
  # end
265
265
  # @return [ToolbarBuilder] Toolbar configuration
266
- def toolbar(*items, should_group_when_full: true, &block)
267
- if @config[:toolbar].blank? || !items.empty?
268
- @config[:toolbar] = {
266
+ def toolbar(*items, should_group_when_full: true, type: :toolbar, &block)
267
+ if @config[type].blank? || !items.empty?
268
+ @config[type] = {
269
269
  items: items,
270
270
  shouldNotGroupWhenFull: !should_group_when_full
271
271
  }
272
272
  end
273
273
 
274
- builder = ToolbarBuilder.new(@config[:toolbar][:items])
274
+ builder = ToolbarBuilder.new(@config[type][:items])
275
275
  builder.instance_eval(&block) if block_given?
276
276
  builder
277
277
  end
278
278
 
279
+ # Configure block toolbar items and grouping
280
+ # @param items [Array<Symbol>] Toolbar items to include
281
+ # @param kwargs [Hash] Additional toolbar configuration options
282
+ # @option kwargs [Boolean] :should_group_when_full Enable/disable toolbar item grouping
283
+ # @yield Optional block for additional toolbar configuration
284
+ # @return [ToolbarBuilder] Toolbar configuration
285
+ # @example Configure block toolbar items
286
+ # block_toolbar :heading, :paragraph, :blockQuote
287
+ # @example Configure with block
288
+ # block_toolbar do
289
+ # append :table
290
+ # remove :paragraph
291
+ # end
292
+ def block_toolbar(*items, **kwargs, &block)
293
+ toolbar(*items, **kwargs, type: :blockToolbar, &block)
294
+ end
295
+
296
+ # Configure balloon toolbar items and grouping
297
+ # @param items [Array<Symbol>] Toolbar items to include
298
+ # @param kwargs [Hash] Additional toolbar configuration options
299
+ # @option kwargs [Boolean] :should_group_when_full Enable/disable toolbar item grouping
300
+ # @yield Optional block for additional toolbar configuration
301
+ # @return [ToolbarBuilder] Toolbar configuration
302
+ # @example Configure balloon toolbar items
303
+ # balloon_toolbar :bold, :italic, :link
304
+ # @example Configure with block
305
+ # balloon_toolbar do
306
+ # append :textColor
307
+ # remove :italic
308
+ # end
309
+ def balloon_toolbar(*items, **kwargs, &block)
310
+ toolbar(*items, **kwargs, type: :balloonToolbar, &block)
311
+ end
312
+
279
313
  # Check if language is configured
280
314
  # @return [Boolean]
281
315
  def language?
@@ -2,7 +2,7 @@
2
2
 
3
3
  module CKEditor5
4
4
  module Rails
5
- VERSION = '1.23.0'
5
+ VERSION = '1.23.1'
6
6
 
7
7
  DEFAULT_CKEDITOR_VERSION = '44.0.0'
8
8
  end
@@ -6,9 +6,7 @@ RSpec.describe CKEditor5::Rails::Editor::EditableHeightNormalizer do
6
6
  subject(:normalizer) { described_class.new(editor_type) }
7
7
 
8
8
  describe '#normalize' do
9
- context 'when editor type is classic' do
10
- let(:editor_type) { :classic }
11
-
9
+ shared_examples 'height normalization' do
12
10
  it 'returns nil when value is nil' do
13
11
  expect(normalizer.normalize(nil)).to be_nil
14
12
  end
@@ -36,13 +34,23 @@ RSpec.describe CKEditor5::Rails::Editor::EditableHeightNormalizer do
36
34
  end
37
35
  end
38
36
 
39
- context 'when editor type is not classic' do
37
+ context 'when editor type is classic' do
38
+ let(:editor_type) { :classic }
39
+ include_examples 'height normalization'
40
+ end
41
+
42
+ context 'when editor type is balloon' do
43
+ let(:editor_type) { :balloon }
44
+ include_examples 'height normalization'
45
+ end
46
+
47
+ context 'when editor type is not supported' do
40
48
  let(:editor_type) { :inline }
41
49
 
42
50
  it 'raises error' do
43
51
  expect { normalizer.normalize(500) }.to raise_error(
44
52
  CKEditor5::Rails::Editor::InvalidEditableHeightError,
45
- 'editable_height can be used only with ClassicEditor'
53
+ 'editable_height can be used only with ClassicEditor or BalloonEditor'
46
54
  )
47
55
  end
48
56
  end
@@ -194,6 +194,50 @@ RSpec.describe CKEditor5::Rails::Presets::PresetBuilder do
194
194
  expect(plugin_names).to include(:SimpleUploadAdapter)
195
195
  end
196
196
  end
197
+
198
+ describe '#block_toolbar' do
199
+ it 'configures block toolbar items' do
200
+ builder.block_toolbar(:heading, :paragraph, should_group_when_full: false)
201
+ expect(builder.config[:blockToolbar]).to eq({
202
+ items: %i[heading paragraph],
203
+ shouldNotGroupWhenFull: true
204
+ })
205
+ end
206
+
207
+ it 'accepts a configuration block' do
208
+ builder.block_toolbar do
209
+ append :table
210
+ remove :paragraph
211
+ end
212
+ expect(builder.config[:blockToolbar][:items]).to include(:table)
213
+ end
214
+
215
+ it 'returns ToolbarBuilder instance if no block provided' do
216
+ expect(builder.block_toolbar).to be_a(CKEditor5::Rails::Presets::ToolbarBuilder)
217
+ end
218
+ end
219
+
220
+ describe '#balloon_toolbar' do
221
+ it 'configures balloon toolbar items' do
222
+ builder.balloon_toolbar(:bold, :italic, should_group_when_full: false)
223
+ expect(builder.config[:balloonToolbar]).to eq({
224
+ items: %i[bold italic],
225
+ shouldNotGroupWhenFull: true
226
+ })
227
+ end
228
+
229
+ it 'accepts a configuration block' do
230
+ builder.balloon_toolbar do
231
+ append :textColor
232
+ remove :italic
233
+ end
234
+ expect(builder.config[:balloonToolbar][:items]).to include(:textColor)
235
+ end
236
+
237
+ it 'returns ToolbarBuilder instance if no block provided' do
238
+ expect(builder.balloon_toolbar).to be_a(CKEditor5::Rails::Presets::ToolbarBuilder)
239
+ end
240
+ end
197
241
  end
198
242
 
199
243
  describe '#inline_plugin' do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ckeditor5
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.23.0
4
+ version: 1.23.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mateusz Bagiński
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2024-12-04 00:00:00.000000000 Z
12
+ date: 2024-12-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails