Skip to content

Commit c21b6fb

Browse files
authored
Merge pull request #58 from reedsy/image-fix
Fix image selection
2 parents c3c4153 + f0acfcc commit c21b6fb

File tree

3 files changed

+38
-7
lines changed

3 files changed

+38
-7
lines changed

CHANGELOG.md

+2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# Unreleased
22

3+
- Fix inline image selection
4+
35
# 3.0.0
46

57
- **BREAKING**: Remove most of the styling we'd previously applied to "core" Quill elements in order to stay as unopinionated as possible

src/quill-cursors/quill-cursors.spec.ts

+24-5
Original file line numberDiff line numberDiff line change
@@ -335,7 +335,9 @@ describe('QuillCursors', () => {
335335

336336
mockRange = {
337337
setStart: () => { },
338+
setStartBefore: () => { },
338339
setEnd: () => { },
340+
setEndAfter: () => { },
339341
getClientRects: () => {
340342
const rectangles: any[] = [];
341343
return rectangles;
@@ -482,6 +484,25 @@ describe('QuillCursors', () => {
482484
expect(mockRange.setStart).toHaveBeenCalledWith(line2Leaf[0].domNode, line2Leaf[1]);
483485
expect(mockRange.setEnd).toHaveBeenCalledWith(line1Leaf[0].domNode, line1Leaf[1]);
484486
});
487+
488+
it('sets the range on either side of an image', () => {
489+
const startIndex = 0;
490+
const endIndex = 1;
491+
const leaf = createLeaf('img');
492+
jest.spyOn(quill, 'getLeaf').mockImplementation(() => leaf);
493+
jest.spyOn(quill, 'getLines').mockReturnValue([{
494+
children: [],
495+
}]);
496+
jest.spyOn(mockRange, 'setStartBefore');
497+
jest.spyOn(mockRange, 'setEndAfter');
498+
499+
const range = {index: startIndex, length: endIndex - startIndex};
500+
501+
cursors.moveCursor(cursor.id, range);
502+
503+
expect(mockRange.setStartBefore).toHaveBeenCalledWith(leaf[0].domNode);
504+
expect(mockRange.setEndAfter).toHaveBeenCalledWith(leaf[0].domNode);
505+
});
485506
});
486507

487508
describe('flag', () => {
@@ -501,10 +522,8 @@ describe('QuillCursors', () => {
501522
});
502523
});
503524

504-
function createLeaf(): any[] {
505-
return [
506-
{domNode: document.createElement('DIV')},
507-
0,
508-
];
525+
function createLeaf(tag?: string): any[] {
526+
const domNode = tag ? document.createElement(tag) : document.createTextNode('');
527+
return [{domNode}, 0];
509528
}
510529
});

src/quill-cursors/quill-cursors.ts

+12-2
Original file line numberDiff line numberDiff line change
@@ -210,8 +210,18 @@ export default class QuillCursors {
210210
line.path(line.length() - 1).pop();
211211

212212
const range = document.createRange();
213-
range.setStart(rangeStart.domNode, startOffset);
214-
range.setEnd(rangeEnd.domNode, endOffset);
213+
214+
if (rangeStart.domNode.nodeType === Node.TEXT_NODE) {
215+
range.setStart(rangeStart.domNode, startOffset);
216+
} else {
217+
range.setStartBefore(rangeStart.domNode);
218+
}
219+
220+
if (rangeEnd.domNode.nodeType === Node.TEXT_NODE) {
221+
range.setEnd(rangeEnd.domNode, endOffset);
222+
} else {
223+
range.setEndAfter(rangeEnd.domNode);
224+
}
215225

216226
return ranges.concat(range);
217227
}, []);

0 commit comments

Comments
 (0)