@ckeditor/ckeditor5-widget 43.0.0 → 43.1.0-alpha.1
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.
- package/dist/index.js +49 -16
- package/dist/index.js.map +1 -1
- package/package.json +7 -7
- package/src/widget.js +52 -16
package/dist/index.js
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
import { Plugin } from '@ckeditor/ckeditor5-core/dist/index.js';
|
6
6
|
import { MouseObserver, TreeWalker } from '@ckeditor/ckeditor5-engine/dist/index.js';
|
7
7
|
import { Delete } from '@ckeditor/ckeditor5-typing/dist/index.js';
|
8
|
-
import { EmitterMixin, CKEditorError, Rect, toArray, isForwardArrowKeyCode, env, keyCodes, getLocalizedArrowKeyCodeDirection, logWarning, ObservableMixin, compareArrays, global, DomEmitterMixin } from '@ckeditor/ckeditor5-utils/dist/index.js';
|
8
|
+
import { EmitterMixin, CKEditorError, Rect, toArray, isForwardArrowKeyCode, env, keyCodes, getLocalizedArrowKeyCodeDirection, getRangeFromMouseEvent, logWarning, ObservableMixin, compareArrays, global, DomEmitterMixin } from '@ckeditor/ckeditor5-utils/dist/index.js';
|
9
9
|
import { IconView, Template, ContextualBalloon, ToolbarView, BalloonPanelView, View } from '@ckeditor/ckeditor5-ui/dist/index.js';
|
10
10
|
import { Enter } from '@ckeditor/ckeditor5-enter/dist/index.js';
|
11
11
|
import { throttle } from 'lodash-es';
|
@@ -1702,16 +1702,23 @@ function selectionWillShrink(selection, isForward) {
|
|
1702
1702
|
}
|
1703
1703
|
return;
|
1704
1704
|
}
|
1705
|
-
// Do nothing for single or double click inside nested editable.
|
1706
|
-
if (isInsideNestedEditable(element)) {
|
1707
|
-
return;
|
1708
|
-
}
|
1709
1705
|
// If target is not a widget element - check if one of the ancestors is.
|
1710
1706
|
if (!isWidget(element)) {
|
1711
|
-
|
1712
|
-
if (!
|
1707
|
+
const editableOrWidgetElement = findClosestEditableOrWidgetAncestor(element);
|
1708
|
+
if (!editableOrWidgetElement) {
|
1713
1709
|
return;
|
1714
1710
|
}
|
1711
|
+
if (isWidget(editableOrWidgetElement)) {
|
1712
|
+
element = editableOrWidgetElement;
|
1713
|
+
} else {
|
1714
|
+
// Pick view range from the point where the mouse was clicked.
|
1715
|
+
const clickTargetFromPoint = getElementFromMouseEvent(view, domEventData);
|
1716
|
+
if (clickTargetFromPoint && isWidget(clickTargetFromPoint)) {
|
1717
|
+
element = clickTargetFromPoint;
|
1718
|
+
} else {
|
1719
|
+
return;
|
1720
|
+
}
|
1721
|
+
}
|
1715
1722
|
}
|
1716
1723
|
// On Android selection would jump to the first table cell, on other devices
|
1717
1724
|
// we can't block it (and don't need to) because of drag and drop support.
|
@@ -1944,20 +1951,46 @@ function selectionWillShrink(selection, isForward) {
|
|
1944
1951
|
}
|
1945
1952
|
}
|
1946
1953
|
/**
|
1947
|
-
*
|
1948
|
-
|
1954
|
+
* Finds the closest ancestor element that is either an editable element or a widget.
|
1955
|
+
*
|
1956
|
+
* @param element The element from which to start searching.
|
1957
|
+
* @returns The closest ancestor element that is either an editable element or a widget, or null if none is found.
|
1958
|
+
*/ function findClosestEditableOrWidgetAncestor(element) {
|
1949
1959
|
let currentElement = element;
|
1950
1960
|
while(currentElement){
|
1951
|
-
if (currentElement.is('editableElement')
|
1952
|
-
return
|
1953
|
-
}
|
1954
|
-
// Click on nested widget should select it.
|
1955
|
-
if (isWidget(currentElement)) {
|
1956
|
-
return false;
|
1961
|
+
if (currentElement.is('editableElement') || isWidget(currentElement)) {
|
1962
|
+
return currentElement;
|
1957
1963
|
}
|
1958
1964
|
currentElement = currentElement.parent;
|
1959
1965
|
}
|
1960
|
-
return
|
1966
|
+
return null;
|
1967
|
+
}
|
1968
|
+
/**
|
1969
|
+
* Retrieves the ViewElement associated with a mouse event in the editing view.
|
1970
|
+
*
|
1971
|
+
* @param view The editing view.
|
1972
|
+
* @param domEventData The DOM event data containing the mouse event.
|
1973
|
+
* @returns The ViewElement associated with the mouse event, or null if not found.
|
1974
|
+
*/ function getElementFromMouseEvent(view, domEventData) {
|
1975
|
+
const domRange = getRangeFromMouseEvent(domEventData.domEvent);
|
1976
|
+
if (!domRange) {
|
1977
|
+
return null;
|
1978
|
+
}
|
1979
|
+
const viewRange = view.domConverter.domRangeToView(domRange);
|
1980
|
+
if (!viewRange) {
|
1981
|
+
return null;
|
1982
|
+
}
|
1983
|
+
const viewPosition = viewRange.start;
|
1984
|
+
if (!viewPosition.parent) {
|
1985
|
+
return null;
|
1986
|
+
}
|
1987
|
+
// Click after a widget tend to return position at the end of the editable element
|
1988
|
+
// so use the node before it if range is at the end of a parent.
|
1989
|
+
const viewNode = viewPosition.parent.is('editableElement') && viewPosition.isAtEnd && viewPosition.nodeBefore || viewPosition.parent;
|
1990
|
+
if (viewNode.is('$text')) {
|
1991
|
+
return viewNode.parent;
|
1992
|
+
}
|
1993
|
+
return viewNode;
|
1961
1994
|
}
|
1962
1995
|
/**
|
1963
1996
|
* Checks whether the specified `element` is a child of the `parent` element.
|