Skip to content

Commit fbfd310

Browse files
committed
Merge branch 't/13118' into major
2 parents 2ad12d9 + b8660de commit fbfd310

File tree

3 files changed

+46
-14
lines changed

3 files changed

+46
-14
lines changed

CHANGES.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@ CKEditor 4 Changelog
33

44
## CKEditor 4.5
55

6+
Fixed Issues:
7+
8+
* [#13118](http://dev.ckeditor.com/ticket/13118): Fixed: The [`editor.getSelectedHtml()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-getSelectedHtml) method throws error when called in the source mode.
9+
610
## CKEditor 4.5 Beta
711

812
New Features:

core/editor.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1112,9 +1112,10 @@
11121112
*/
11131113
getSelectedHtml: function( toString ) {
11141114
var editable = this.editable(),
1115-
ranges = this.getSelection().getRanges();
1115+
selection = this.getSelection(),
1116+
ranges = selection && selection.getRanges();
11161117

1117-
if ( !editable || ranges.length === 0 ) {
1118+
if ( !editable || !ranges || ranges.length === 0 ) {
11181119
return null;
11191120
}
11201121

tests/core/editor/getextractselectedhtml.js

Lines changed: 39 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,20 @@
22

33
'use strict';
44

5-
bender.editor = {
6-
creator: 'inline',
7-
config: {
8-
allowedContent: true
5+
bender.editors = {
6+
editor: {
7+
name: 'editor',
8+
creator: 'inline',
9+
config: {
10+
allowedContent: true
11+
}
12+
},
13+
14+
editor2: {
15+
name: 'editor2',
16+
config: {
17+
extraPlugins: 'sourcearea'
18+
}
919
}
1020
};
1121

@@ -20,8 +30,25 @@ bender.test( {
2030
}
2131
},
2232

33+
'test getSelectedHtml in source mode (#13118)': function() {
34+
var editor = this.editors.editor2;
35+
36+
editor.setMode( 'source', function() {
37+
resume( function() {
38+
editor.getSelectedHtml();
39+
assert.isTrue( true, 'So far so good. Method "getSelectedHtml" shouldn\'t throw an error in a "source" mode.' );
40+
41+
// Clean up after the test.
42+
editor.setMode( 'wysiwyg', resume );
43+
wait();
44+
} );
45+
} );
46+
47+
wait();
48+
},
49+
2350
'test getSelectedHtml': function() {
24-
var editor = this.editor;
51+
var editor = this.editors.editor;
2552
bender.tools.selection.setWithHtml( editor, '<p>fo{ob}ar</p>' );
2653

2754
var frag = editor.getSelectedHtml();
@@ -31,7 +58,7 @@ bender.test( {
3158
},
3259

3360
'test getSelectedHtml with toString option': function() {
34-
var editor = this.editor;
61+
var editor = this.editors.editor;
3562
bender.tools.selection.setWithHtml( editor, '<p>fo{ob}ar</p>' );
3663

3764
assert.areSame( 'ob', editor.getSelectedHtml( true ) );
@@ -46,14 +73,14 @@ bender.test( {
4673
sinon.stub( CKEDITOR.dom.selection.prototype, 'getRanges' ).returns( [] );
4774
stubs.push( CKEDITOR.dom.selection.prototype.getRanges );
4875

49-
var editor = this.editor,
76+
var editor = this.editors.editor,
5077
selectedHtml = editor.getSelectedHtml();
5178

5279
assert.isNull( selectedHtml, 'There should be no error but null should be returns if selection contains no ranges' );
5380
},
5481

5582
'test extractSelectedHtml': function() {
56-
var editor = this.editor;
83+
var editor = this.editors.editor;
5784
bender.tools.selection.setWithHtml( editor, '<p>fo{ob}ar</p>' );
5885

5986
// We need to precisely check if selection was set, because
@@ -73,7 +100,7 @@ bender.test( {
73100
},
74101

75102
'test extractSelectedHtml with toString option': function() {
76-
var editor = this.editor;
103+
var editor = this.editors.editor;
77104
bender.tools.selection.setWithHtml( editor, '<p>fo{ob}ar</p>' );
78105

79106
assert.areSame( 'ob', editor.extractSelectedHtml( true ) );
@@ -85,14 +112,14 @@ bender.test( {
85112
sinon.stub( CKEDITOR.dom.selection.prototype, 'getRanges' ).returns( [] );
86113
stubs.push( CKEDITOR.dom.selection.prototype.getRanges );
87114

88-
var editor = this.editor,
115+
var editor = this.editors.editor,
89116
selectedHtml = editor.getSelectedHtml();
90117

91118
assert.isNull( selectedHtml, 'There should be no error but null should be returns if selection contains no ranges' );
92119
},
93120

94121
'test extractSelectedHtml with removeEmptyBlock': function() {
95-
var editor = this.editor;
122+
var editor = this.editors.editor;
96123
bender.tools.selection.setWithHtml( editor, '<p>{foo}</p><p>bar</p>' );
97124

98125
assert.areSame( 'foo', editor.extractSelectedHtml( true, true ) );
@@ -108,4 +135,4 @@ bender.test( {
108135
assert.isTrue( html == null || html === '', 'returned value should be null if selection does not exist or should be an empty string' );
109136
} );
110137
}
111-
} );
138+
} );

0 commit comments

Comments
 (0)