@ckeditor/ckeditor5-ui 29.1.0 → 31.1.0
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/lang/contexts.json +0 -1
- package/lang/translations/ar.po +0 -4
- package/lang/translations/ast.po +0 -4
- package/lang/translations/az.po +0 -4
- package/lang/translations/cs.po +0 -4
- package/lang/translations/da.po +0 -4
- package/lang/translations/de-ch.po +0 -4
- package/lang/translations/de.po +0 -4
- package/lang/translations/el.po +0 -4
- package/lang/translations/en-au.po +0 -4
- package/lang/translations/en-gb.po +0 -4
- package/lang/translations/en.po +0 -4
- package/lang/translations/eo.po +0 -4
- package/lang/translations/es.po +0 -4
- package/lang/translations/et.po +0 -4
- package/lang/translations/eu.po +0 -4
- package/lang/translations/fa.po +0 -4
- package/lang/translations/fi.po +0 -4
- package/lang/translations/fr.po +0 -4
- package/lang/translations/gl.po +0 -4
- package/lang/translations/he.po +0 -4
- package/lang/translations/hi.po +0 -4
- package/lang/translations/hr.po +0 -4
- package/lang/translations/hu.po +0 -4
- package/lang/translations/id.po +0 -4
- package/lang/translations/it.po +0 -4
- package/lang/translations/ja.po +0 -4
- package/lang/translations/km.po +0 -4
- package/lang/translations/kn.po +0 -4
- package/lang/translations/ko.po +0 -4
- package/lang/translations/ku.po +0 -4
- package/lang/translations/lt.po +0 -4
- package/lang/translations/lv.po +0 -4
- package/lang/translations/nb.po +0 -4
- package/lang/translations/ne.po +0 -4
- package/lang/translations/nl.po +0 -4
- package/lang/translations/no.po +0 -4
- package/lang/translations/pl.po +0 -4
- package/lang/translations/pt-br.po +0 -4
- package/lang/translations/pt.po +0 -4
- package/lang/translations/ro.po +0 -4
- package/lang/translations/ru.po +0 -4
- package/lang/translations/sk.po +0 -4
- package/lang/translations/sl.po +0 -4
- package/lang/translations/sq.po +0 -4
- package/lang/translations/sr-latn.po +0 -4
- package/lang/translations/sr.po +0 -4
- package/lang/translations/sv.po +0 -4
- package/lang/translations/th.po +0 -4
- package/lang/translations/tk.po +0 -4
- package/lang/translations/tr.po +0 -4
- package/lang/translations/ug.po +0 -4
- package/lang/translations/uk.po +0 -4
- package/lang/translations/uz.po +105 -0
- package/lang/translations/vi.po +0 -4
- package/lang/translations/zh-cn.po +0 -4
- package/lang/translations/zh.po +0 -4
- package/package.json +19 -20
- package/src/button/buttonview.js +1 -1
- package/src/colorgrid/colorgridview.js +10 -0
- package/src/dropdown/button/splitbuttonview.js +10 -0
- package/src/inputtext/inputtextview.js +13 -1
- package/src/list/listview.js +10 -0
- package/src/notification/notification.js +1 -1
- package/src/panel/balloon/balloonpanelview.js +342 -216
- package/src/panel/balloon/contextualballoon.js +31 -4
- package/src/panel/sticky/stickypanelview.js +5 -1
- package/src/toolbar/balloon/balloontoolbar.js +48 -35
- package/src/toolbar/block/blocktoolbar.js +3 -2
- package/src/toolbar/toolbarview.js +4 -2
- package/CHANGELOG.md +0 -542
|
@@ -232,7 +232,8 @@ export default class BalloonPanelView extends View {
|
|
|
232
232
|
defaultPositions.northArrowSouthMiddleWest,
|
|
233
233
|
defaultPositions.northArrowSouthMiddleEast,
|
|
234
234
|
defaultPositions.northArrowSouthWest,
|
|
235
|
-
defaultPositions.northArrowSouthEast
|
|
235
|
+
defaultPositions.northArrowSouthEast,
|
|
236
|
+
defaultPositions.viewportStickyNorth
|
|
236
237
|
],
|
|
237
238
|
limiter: defaultLimiterElement,
|
|
238
239
|
fitInViewport: true
|
|
@@ -244,9 +245,11 @@ export default class BalloonPanelView extends View {
|
|
|
244
245
|
// so it is better to use int values.
|
|
245
246
|
const left = parseInt( optimalPosition.left );
|
|
246
247
|
const top = parseInt( optimalPosition.top );
|
|
247
|
-
const position = optimalPosition.name;
|
|
248
248
|
|
|
249
|
-
|
|
249
|
+
const { name: position, config = {} } = optimalPosition;
|
|
250
|
+
const { withArrow = true } = config;
|
|
251
|
+
|
|
252
|
+
Object.assign( this, { top, left, position, withArrow } );
|
|
250
253
|
}
|
|
251
254
|
|
|
252
255
|
/**
|
|
@@ -401,7 +404,7 @@ function getDomElement( object ) {
|
|
|
401
404
|
* \|/
|
|
402
405
|
* >|-----|<---------------- horizontal offset
|
|
403
406
|
*
|
|
404
|
-
* @default
|
|
407
|
+
* @default 25
|
|
405
408
|
* @member {Number} module:ui/panel/balloon/balloonpanelview~BalloonPanelView.arrowHorizontalOffset
|
|
406
409
|
*/
|
|
407
410
|
BalloonPanelView.arrowHorizontalOffset = 25;
|
|
@@ -420,11 +423,35 @@ BalloonPanelView.arrowHorizontalOffset = 25;
|
|
|
420
423
|
* -------------------------------
|
|
421
424
|
* ^
|
|
422
425
|
*
|
|
423
|
-
* @default
|
|
426
|
+
* @default 10
|
|
424
427
|
* @member {Number} module:ui/panel/balloon/balloonpanelview~BalloonPanelView.arrowVerticalOffset
|
|
425
428
|
*/
|
|
426
429
|
BalloonPanelView.arrowVerticalOffset = 10;
|
|
427
430
|
|
|
431
|
+
/**
|
|
432
|
+
* A vertical offset of the balloon panel from the edge of the viewport if sticky.
|
|
433
|
+
* It helps in accessing toolbar buttons underneath the balloon panel.
|
|
434
|
+
*
|
|
435
|
+
* +---------------------------------------------------+
|
|
436
|
+
* | Target |
|
|
437
|
+
* | |
|
|
438
|
+
* | /-- vertical offset |
|
|
439
|
+
* +-----------------------------V-------------------------+
|
|
440
|
+
* | Toolbar +-------------+ |
|
|
441
|
+
* +--------------------| Balloon |--------------------+
|
|
442
|
+
* | | +-------------+ | |
|
|
443
|
+
* | | | |
|
|
444
|
+
* | | | |
|
|
445
|
+
* | | | |
|
|
446
|
+
* | +---------------------------------------------------+ |
|
|
447
|
+
* | Viewport |
|
|
448
|
+
* +-------------------------------------------------------+
|
|
449
|
+
*
|
|
450
|
+
* @default 20
|
|
451
|
+
* @member {Number} module:ui/panel/balloon/balloonpanelview~BalloonPanelView.stickyVerticalOffset
|
|
452
|
+
*/
|
|
453
|
+
BalloonPanelView.stickyVerticalOffset = 20;
|
|
454
|
+
|
|
428
455
|
/**
|
|
429
456
|
* Function used to calculate the optimal position for the balloon.
|
|
430
457
|
*
|
|
@@ -702,225 +729,324 @@ BalloonPanelView._getOptimalPosition = getOptimalPosition;
|
|
|
702
729
|
* | Balloon |
|
|
703
730
|
* +-----------------+
|
|
704
731
|
*
|
|
732
|
+
* * `viewportStickyNorth`
|
|
733
|
+
*
|
|
734
|
+
* +---------------------------+
|
|
735
|
+
* | [ Target ] |
|
|
736
|
+
* | |
|
|
737
|
+
* +-----------------------------------+
|
|
738
|
+
* | | +-----------------+ | |
|
|
739
|
+
* | | | Balloon | | |
|
|
740
|
+
* | | +-----------------+ | |
|
|
741
|
+
* | | | |
|
|
742
|
+
* | | | |
|
|
743
|
+
* | | | |
|
|
744
|
+
* | | | |
|
|
745
|
+
* | +---------------------------+ |
|
|
746
|
+
* | Viewport |
|
|
747
|
+
* +-----------------------------------+
|
|
705
748
|
*
|
|
706
749
|
* See {@link module:ui/panel/balloon/balloonpanelview~BalloonPanelView#attachTo}.
|
|
707
750
|
*
|
|
708
751
|
* Positioning functions must be compatible with {@link module:utils/dom/position~Position}.
|
|
709
752
|
*
|
|
753
|
+
* Default positioning functions with customized offsets can be generated using
|
|
754
|
+
* {@link module:ui/panel/balloon/balloonpanelview~generatePositions}.
|
|
755
|
+
*
|
|
710
756
|
* The name that the position function returns will be reflected in the balloon panel's class that
|
|
711
757
|
* controls the placement of the "arrow". See {@link #position} to learn more.
|
|
712
758
|
*
|
|
713
|
-
* @member {Object
|
|
759
|
+
* @member {Object.<String,module:utils/dom/position~positioningFunction>}
|
|
760
|
+
* module:ui/panel/balloon/balloonpanelview~BalloonPanelView.defaultPositions
|
|
714
761
|
*/
|
|
715
|
-
BalloonPanelView.defaultPositions =
|
|
716
|
-
|
|
717
|
-
// ------- North west
|
|
718
|
-
|
|
719
|
-
northWestArrowSouthWest: ( targetRect, balloonRect ) => ( {
|
|
720
|
-
top: getNorthTop( targetRect, balloonRect ),
|
|
721
|
-
left: targetRect.left - BalloonPanelView.arrowHorizontalOffset,
|
|
722
|
-
name: 'arrow_sw'
|
|
723
|
-
} ),
|
|
724
|
-
|
|
725
|
-
northWestArrowSouthMiddleWest: ( targetRect, balloonRect ) => ( {
|
|
726
|
-
top: getNorthTop( targetRect, balloonRect ),
|
|
727
|
-
left: targetRect.left - ( balloonRect.width * .25 ) - BalloonPanelView.arrowHorizontalOffset,
|
|
728
|
-
name: 'arrow_smw'
|
|
729
|
-
} ),
|
|
730
|
-
|
|
731
|
-
northWestArrowSouth: ( targetRect, balloonRect ) => ( {
|
|
732
|
-
top: getNorthTop( targetRect, balloonRect ),
|
|
733
|
-
left: targetRect.left - balloonRect.width / 2,
|
|
734
|
-
name: 'arrow_s'
|
|
735
|
-
} ),
|
|
736
|
-
|
|
737
|
-
northWestArrowSouthMiddleEast: ( targetRect, balloonRect ) => ( {
|
|
738
|
-
top: getNorthTop( targetRect, balloonRect ),
|
|
739
|
-
left: targetRect.left - ( balloonRect.width * .75 ) + BalloonPanelView.arrowHorizontalOffset,
|
|
740
|
-
name: 'arrow_sme'
|
|
741
|
-
} ),
|
|
742
|
-
|
|
743
|
-
northWestArrowSouthEast: ( targetRect, balloonRect ) => ( {
|
|
744
|
-
top: getNorthTop( targetRect, balloonRect ),
|
|
745
|
-
left: targetRect.left - balloonRect.width + BalloonPanelView.arrowHorizontalOffset,
|
|
746
|
-
name: 'arrow_se'
|
|
747
|
-
} ),
|
|
748
|
-
|
|
749
|
-
// ------- North
|
|
750
|
-
|
|
751
|
-
northArrowSouthWest: ( targetRect, balloonRect ) => ( {
|
|
752
|
-
top: getNorthTop( targetRect, balloonRect ),
|
|
753
|
-
left: targetRect.left + targetRect.width / 2 - BalloonPanelView.arrowHorizontalOffset,
|
|
754
|
-
name: 'arrow_sw'
|
|
755
|
-
} ),
|
|
756
|
-
|
|
757
|
-
northArrowSouthMiddleWest: ( targetRect, balloonRect ) => ( {
|
|
758
|
-
top: getNorthTop( targetRect, balloonRect ),
|
|
759
|
-
left: targetRect.left + targetRect.width / 2 - ( balloonRect.width * .25 ) - BalloonPanelView.arrowHorizontalOffset,
|
|
760
|
-
name: 'arrow_smw'
|
|
761
|
-
} ),
|
|
762
|
-
|
|
763
|
-
northArrowSouth: ( targetRect, balloonRect ) => ( {
|
|
764
|
-
top: getNorthTop( targetRect, balloonRect ),
|
|
765
|
-
left: targetRect.left + targetRect.width / 2 - balloonRect.width / 2,
|
|
766
|
-
name: 'arrow_s'
|
|
767
|
-
} ),
|
|
768
|
-
|
|
769
|
-
northArrowSouthMiddleEast: ( targetRect, balloonRect ) => ( {
|
|
770
|
-
top: getNorthTop( targetRect, balloonRect ),
|
|
771
|
-
left: targetRect.left + targetRect.width / 2 - ( balloonRect.width * .75 ) + BalloonPanelView.arrowHorizontalOffset,
|
|
772
|
-
name: 'arrow_sme'
|
|
773
|
-
} ),
|
|
774
|
-
|
|
775
|
-
northArrowSouthEast: ( targetRect, balloonRect ) => ( {
|
|
776
|
-
top: getNorthTop( targetRect, balloonRect ),
|
|
777
|
-
left: targetRect.left + targetRect.width / 2 - balloonRect.width + BalloonPanelView.arrowHorizontalOffset,
|
|
778
|
-
name: 'arrow_se'
|
|
779
|
-
} ),
|
|
780
|
-
|
|
781
|
-
// ------- North east
|
|
782
|
-
|
|
783
|
-
northEastArrowSouthWest: ( targetRect, balloonRect ) => ( {
|
|
784
|
-
top: getNorthTop( targetRect, balloonRect ),
|
|
785
|
-
left: targetRect.right - BalloonPanelView.arrowHorizontalOffset,
|
|
786
|
-
name: 'arrow_sw'
|
|
787
|
-
} ),
|
|
788
|
-
|
|
789
|
-
northEastArrowSouthMiddleWest: ( targetRect, balloonRect ) => ( {
|
|
790
|
-
top: getNorthTop( targetRect, balloonRect ),
|
|
791
|
-
left: targetRect.right - ( balloonRect.width * .25 ) - BalloonPanelView.arrowHorizontalOffset,
|
|
792
|
-
name: 'arrow_smw'
|
|
793
|
-
} ),
|
|
794
|
-
northEastArrowSouth: ( targetRect, balloonRect ) => ( {
|
|
795
|
-
top: getNorthTop( targetRect, balloonRect ),
|
|
796
|
-
left: targetRect.right - balloonRect.width / 2,
|
|
797
|
-
name: 'arrow_s'
|
|
798
|
-
} ),
|
|
799
|
-
|
|
800
|
-
northEastArrowSouthMiddleEast: ( targetRect, balloonRect ) => ( {
|
|
801
|
-
top: getNorthTop( targetRect, balloonRect ),
|
|
802
|
-
left: targetRect.right - ( balloonRect.width * .75 ) + BalloonPanelView.arrowHorizontalOffset,
|
|
803
|
-
name: 'arrow_sme'
|
|
804
|
-
} ),
|
|
805
|
-
|
|
806
|
-
northEastArrowSouthEast: ( targetRect, balloonRect ) => ( {
|
|
807
|
-
top: getNorthTop( targetRect, balloonRect ),
|
|
808
|
-
left: targetRect.right - balloonRect.width + BalloonPanelView.arrowHorizontalOffset,
|
|
809
|
-
name: 'arrow_se'
|
|
810
|
-
} ),
|
|
811
|
-
// ------- South west
|
|
812
|
-
|
|
813
|
-
southWestArrowNorthWest: ( targetRect, balloonRect ) => ( {
|
|
814
|
-
top: getSouthTop( targetRect, balloonRect ),
|
|
815
|
-
left: targetRect.left - BalloonPanelView.arrowHorizontalOffset,
|
|
816
|
-
name: 'arrow_nw'
|
|
817
|
-
} ),
|
|
818
|
-
|
|
819
|
-
southWestArrowNorthMiddleWest: ( targetRect, balloonRect ) => ( {
|
|
820
|
-
top: getSouthTop( targetRect, balloonRect ),
|
|
821
|
-
left: targetRect.left - ( balloonRect.width * .25 ) - BalloonPanelView.arrowHorizontalOffset,
|
|
822
|
-
name: 'arrow_nmw'
|
|
823
|
-
} ),
|
|
824
|
-
|
|
825
|
-
southWestArrowNorth: ( targetRect, balloonRect ) => ( {
|
|
826
|
-
top: getSouthTop( targetRect, balloonRect ),
|
|
827
|
-
left: targetRect.left - balloonRect.width / 2,
|
|
828
|
-
name: 'arrow_n'
|
|
829
|
-
} ),
|
|
830
|
-
|
|
831
|
-
southWestArrowNorthMiddleEast: ( targetRect, balloonRect ) => ( {
|
|
832
|
-
top: getSouthTop( targetRect, balloonRect ),
|
|
833
|
-
left: targetRect.left - ( balloonRect.width * .75 ) + BalloonPanelView.arrowHorizontalOffset,
|
|
834
|
-
name: 'arrow_nme'
|
|
835
|
-
} ),
|
|
836
|
-
|
|
837
|
-
southWestArrowNorthEast: ( targetRect, balloonRect ) => ( {
|
|
838
|
-
top: getSouthTop( targetRect, balloonRect ),
|
|
839
|
-
left: targetRect.left - balloonRect.width + BalloonPanelView.arrowHorizontalOffset,
|
|
840
|
-
name: 'arrow_ne'
|
|
841
|
-
} ),
|
|
842
|
-
|
|
843
|
-
// ------- South
|
|
844
|
-
|
|
845
|
-
southArrowNorthWest: ( targetRect, balloonRect ) => ( {
|
|
846
|
-
top: getSouthTop( targetRect, balloonRect ),
|
|
847
|
-
left: targetRect.left + targetRect.width / 2 - BalloonPanelView.arrowHorizontalOffset,
|
|
848
|
-
name: 'arrow_nw'
|
|
849
|
-
} ),
|
|
850
|
-
southArrowNorthMiddleWest: ( targetRect, balloonRect ) => ( {
|
|
851
|
-
top: getSouthTop( targetRect, balloonRect ),
|
|
852
|
-
left: targetRect.left + targetRect.width / 2 - ( balloonRect.width * 0.25 ) - BalloonPanelView.arrowHorizontalOffset,
|
|
853
|
-
name: 'arrow_nmw'
|
|
854
|
-
} ),
|
|
855
|
-
|
|
856
|
-
southArrowNorth: ( targetRect, balloonRect ) => ( {
|
|
857
|
-
top: getSouthTop( targetRect, balloonRect ),
|
|
858
|
-
left: targetRect.left + targetRect.width / 2 - balloonRect.width / 2,
|
|
859
|
-
name: 'arrow_n'
|
|
860
|
-
} ),
|
|
861
|
-
|
|
862
|
-
southArrowNorthMiddleEast: ( targetRect, balloonRect ) => ( {
|
|
863
|
-
top: getSouthTop( targetRect, balloonRect ),
|
|
864
|
-
left: targetRect.left + targetRect.width / 2 - ( balloonRect.width * 0.75 ) + BalloonPanelView.arrowHorizontalOffset,
|
|
865
|
-
name: 'arrow_nme'
|
|
866
|
-
} ),
|
|
867
|
-
|
|
868
|
-
southArrowNorthEast: ( targetRect, balloonRect ) => ( {
|
|
869
|
-
top: getSouthTop( targetRect, balloonRect ),
|
|
870
|
-
left: targetRect.left + targetRect.width / 2 - balloonRect.width + BalloonPanelView.arrowHorizontalOffset,
|
|
871
|
-
name: 'arrow_ne'
|
|
872
|
-
} ),
|
|
873
|
-
|
|
874
|
-
// ------- South east
|
|
875
|
-
|
|
876
|
-
southEastArrowNorthWest: ( targetRect, balloonRect ) => ( {
|
|
877
|
-
top: getSouthTop( targetRect, balloonRect ),
|
|
878
|
-
left: targetRect.right - BalloonPanelView.arrowHorizontalOffset,
|
|
879
|
-
name: 'arrow_nw'
|
|
880
|
-
} ),
|
|
881
|
-
|
|
882
|
-
southEastArrowNorthMiddleWest: ( targetRect, balloonRect ) => ( {
|
|
883
|
-
top: getSouthTop( targetRect, balloonRect ),
|
|
884
|
-
left: targetRect.right - ( balloonRect.width * .25 ) - BalloonPanelView.arrowHorizontalOffset,
|
|
885
|
-
name: 'arrow_nmw'
|
|
886
|
-
} ),
|
|
887
|
-
|
|
888
|
-
southEastArrowNorth: ( targetRect, balloonRect ) => ( {
|
|
889
|
-
top: getSouthTop( targetRect, balloonRect ),
|
|
890
|
-
left: targetRect.right - balloonRect.width / 2,
|
|
891
|
-
name: 'arrow_n'
|
|
892
|
-
} ),
|
|
893
|
-
|
|
894
|
-
southEastArrowNorthMiddleEast: ( targetRect, balloonRect ) => ( {
|
|
895
|
-
top: getSouthTop( targetRect, balloonRect ),
|
|
896
|
-
left: targetRect.right - ( balloonRect.width * .75 ) + BalloonPanelView.arrowHorizontalOffset,
|
|
897
|
-
name: 'arrow_nme'
|
|
898
|
-
} ),
|
|
899
|
-
|
|
900
|
-
southEastArrowNorthEast: ( targetRect, balloonRect ) => ( {
|
|
901
|
-
top: getSouthTop( targetRect, balloonRect ),
|
|
902
|
-
left: targetRect.right - balloonRect.width + BalloonPanelView.arrowHorizontalOffset,
|
|
903
|
-
name: 'arrow_ne'
|
|
904
|
-
} )
|
|
905
|
-
|
|
906
|
-
};
|
|
907
|
-
|
|
908
|
-
// Returns the top coordinate for positions starting with `north*`.
|
|
909
|
-
//
|
|
910
|
-
// @private
|
|
911
|
-
// @param {utils/dom/rect~Rect} targetRect A rect of the target.
|
|
912
|
-
// @param {utils/dom/rect~Rect} elementRect A rect of the balloon.
|
|
913
|
-
// @returns {Number}
|
|
914
|
-
function getNorthTop( targetRect, balloonRect ) {
|
|
915
|
-
return targetRect.top - balloonRect.height - BalloonPanelView.arrowVerticalOffset;
|
|
916
|
-
}
|
|
762
|
+
BalloonPanelView.defaultPositions = generatePositions();
|
|
917
763
|
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
764
|
+
/**
|
|
765
|
+
* Returns available {@link module:ui/panel/balloon/balloonpanelview~BalloonPanelView}
|
|
766
|
+
* {@link module:utils/dom/position~positioningFunction positioning functions} adjusted by the specific offsets.
|
|
767
|
+
*
|
|
768
|
+
* @protected
|
|
769
|
+
* @param {Object} [options] Options to generate positions. If not specified, this helper will simply return
|
|
770
|
+
* {@link module:ui/panel/balloon/balloonpanelview~BalloonPanelView.defaultPositions}.
|
|
771
|
+
* @param {Number} [options.horizontalOffset] A custom horizontal offset (in pixels) of each position. If
|
|
772
|
+
* not specified, {@link module:ui/panel/balloon/balloonpanelview~BalloonPanelView.arrowHorizontalOffset the default value}
|
|
773
|
+
* will be used.
|
|
774
|
+
* @param {Number} [options.verticalOffset] A custom vertical offset (in pixels) of each position. If
|
|
775
|
+
* not specified, {@link module:ui/panel/balloon/balloonpanelview~BalloonPanelView.arrowVerticalOffset the default value}
|
|
776
|
+
* will be used.
|
|
777
|
+
* @param {Number} [options.stickyVerticalOffset] A custom offset (in pixels) of the `viewportStickyNorth` positioning function.
|
|
778
|
+
* If not specified, {@link module:ui/panel/balloon/balloonpanelview~BalloonPanelView.stickyVerticalOffset the default value}
|
|
779
|
+
* will be used.
|
|
780
|
+
* @param {Object} [options.config] Additional configuration of the balloon balloon panel view.
|
|
781
|
+
* Currently only {@link module:ui/panel/balloon/balloonpanelview~BalloonPanelView#withArrow} is supported. Learn more
|
|
782
|
+
* about {@link module:utils/dom/position~positioningFunction positioning functions}.
|
|
783
|
+
* @returns {Object.<String,module:utils/dom/position~positioningFunction>}
|
|
784
|
+
*/
|
|
785
|
+
export function generatePositions( {
|
|
786
|
+
horizontalOffset = BalloonPanelView.arrowHorizontalOffset,
|
|
787
|
+
verticalOffset = BalloonPanelView.arrowVerticalOffset,
|
|
788
|
+
stickyVerticalOffset = BalloonPanelView.stickyVerticalOffset,
|
|
789
|
+
config
|
|
790
|
+
} = {} ) {
|
|
791
|
+
return {
|
|
792
|
+
// ------- North west
|
|
793
|
+
|
|
794
|
+
northWestArrowSouthWest: ( targetRect, balloonRect ) => ( {
|
|
795
|
+
top: getNorthTop( targetRect, balloonRect ),
|
|
796
|
+
left: targetRect.left - horizontalOffset,
|
|
797
|
+
name: 'arrow_sw',
|
|
798
|
+
...( config && { config } )
|
|
799
|
+
} ),
|
|
800
|
+
|
|
801
|
+
northWestArrowSouthMiddleWest: ( targetRect, balloonRect ) => ( {
|
|
802
|
+
top: getNorthTop( targetRect, balloonRect ),
|
|
803
|
+
left: targetRect.left - ( balloonRect.width * .25 ) - horizontalOffset,
|
|
804
|
+
name: 'arrow_smw',
|
|
805
|
+
...( config && { config } )
|
|
806
|
+
} ),
|
|
807
|
+
|
|
808
|
+
northWestArrowSouth: ( targetRect, balloonRect ) => ( {
|
|
809
|
+
top: getNorthTop( targetRect, balloonRect ),
|
|
810
|
+
left: targetRect.left - balloonRect.width / 2,
|
|
811
|
+
name: 'arrow_s',
|
|
812
|
+
...( config && { config } )
|
|
813
|
+
} ),
|
|
814
|
+
|
|
815
|
+
northWestArrowSouthMiddleEast: ( targetRect, balloonRect ) => ( {
|
|
816
|
+
top: getNorthTop( targetRect, balloonRect ),
|
|
817
|
+
left: targetRect.left - ( balloonRect.width * .75 ) + horizontalOffset,
|
|
818
|
+
name: 'arrow_sme',
|
|
819
|
+
...( config && { config } )
|
|
820
|
+
} ),
|
|
821
|
+
|
|
822
|
+
northWestArrowSouthEast: ( targetRect, balloonRect ) => ( {
|
|
823
|
+
top: getNorthTop( targetRect, balloonRect ),
|
|
824
|
+
left: targetRect.left - balloonRect.width + horizontalOffset,
|
|
825
|
+
name: 'arrow_se',
|
|
826
|
+
...( config && { config } )
|
|
827
|
+
} ),
|
|
828
|
+
|
|
829
|
+
// ------- North
|
|
830
|
+
|
|
831
|
+
northArrowSouthWest: ( targetRect, balloonRect ) => ( {
|
|
832
|
+
top: getNorthTop( targetRect, balloonRect ),
|
|
833
|
+
left: targetRect.left + targetRect.width / 2 - horizontalOffset,
|
|
834
|
+
name: 'arrow_sw',
|
|
835
|
+
...( config && { config } )
|
|
836
|
+
} ),
|
|
837
|
+
|
|
838
|
+
northArrowSouthMiddleWest: ( targetRect, balloonRect ) => ( {
|
|
839
|
+
top: getNorthTop( targetRect, balloonRect ),
|
|
840
|
+
left: targetRect.left + targetRect.width / 2 - ( balloonRect.width * .25 ) - horizontalOffset,
|
|
841
|
+
name: 'arrow_smw',
|
|
842
|
+
...( config && { config } )
|
|
843
|
+
} ),
|
|
844
|
+
|
|
845
|
+
northArrowSouth: ( targetRect, balloonRect ) => ( {
|
|
846
|
+
top: getNorthTop( targetRect, balloonRect ),
|
|
847
|
+
left: targetRect.left + targetRect.width / 2 - balloonRect.width / 2,
|
|
848
|
+
name: 'arrow_s',
|
|
849
|
+
...( config && { config } )
|
|
850
|
+
} ),
|
|
851
|
+
|
|
852
|
+
northArrowSouthMiddleEast: ( targetRect, balloonRect ) => ( {
|
|
853
|
+
top: getNorthTop( targetRect, balloonRect ),
|
|
854
|
+
left: targetRect.left + targetRect.width / 2 - ( balloonRect.width * .75 ) + horizontalOffset,
|
|
855
|
+
name: 'arrow_sme',
|
|
856
|
+
...( config && { config } )
|
|
857
|
+
} ),
|
|
858
|
+
|
|
859
|
+
northArrowSouthEast: ( targetRect, balloonRect ) => ( {
|
|
860
|
+
top: getNorthTop( targetRect, balloonRect ),
|
|
861
|
+
left: targetRect.left + targetRect.width / 2 - balloonRect.width + horizontalOffset,
|
|
862
|
+
name: 'arrow_se',
|
|
863
|
+
...( config && { config } )
|
|
864
|
+
} ),
|
|
865
|
+
|
|
866
|
+
// ------- North east
|
|
867
|
+
|
|
868
|
+
northEastArrowSouthWest: ( targetRect, balloonRect ) => ( {
|
|
869
|
+
top: getNorthTop( targetRect, balloonRect ),
|
|
870
|
+
left: targetRect.right - horizontalOffset,
|
|
871
|
+
name: 'arrow_sw',
|
|
872
|
+
...( config && { config } )
|
|
873
|
+
} ),
|
|
874
|
+
|
|
875
|
+
northEastArrowSouthMiddleWest: ( targetRect, balloonRect ) => ( {
|
|
876
|
+
top: getNorthTop( targetRect, balloonRect ),
|
|
877
|
+
left: targetRect.right - ( balloonRect.width * .25 ) - horizontalOffset,
|
|
878
|
+
name: 'arrow_smw',
|
|
879
|
+
...( config && { config } )
|
|
880
|
+
} ),
|
|
881
|
+
|
|
882
|
+
northEastArrowSouth: ( targetRect, balloonRect ) => ( {
|
|
883
|
+
top: getNorthTop( targetRect, balloonRect ),
|
|
884
|
+
left: targetRect.right - balloonRect.width / 2,
|
|
885
|
+
name: 'arrow_s',
|
|
886
|
+
...( config && { config } )
|
|
887
|
+
} ),
|
|
888
|
+
|
|
889
|
+
northEastArrowSouthMiddleEast: ( targetRect, balloonRect ) => ( {
|
|
890
|
+
top: getNorthTop( targetRect, balloonRect ),
|
|
891
|
+
left: targetRect.right - ( balloonRect.width * .75 ) + horizontalOffset,
|
|
892
|
+
name: 'arrow_sme',
|
|
893
|
+
...( config && { config } )
|
|
894
|
+
} ),
|
|
895
|
+
|
|
896
|
+
northEastArrowSouthEast: ( targetRect, balloonRect ) => ( {
|
|
897
|
+
top: getNorthTop( targetRect, balloonRect ),
|
|
898
|
+
left: targetRect.right - balloonRect.width + horizontalOffset,
|
|
899
|
+
name: 'arrow_se',
|
|
900
|
+
...( config && { config } )
|
|
901
|
+
} ),
|
|
902
|
+
|
|
903
|
+
// ------- South west
|
|
904
|
+
|
|
905
|
+
southWestArrowNorthWest: ( targetRect, balloonRect ) => ( {
|
|
906
|
+
top: getSouthTop( targetRect, balloonRect ),
|
|
907
|
+
left: targetRect.left - horizontalOffset,
|
|
908
|
+
name: 'arrow_nw',
|
|
909
|
+
...( config && { config } )
|
|
910
|
+
} ),
|
|
911
|
+
|
|
912
|
+
southWestArrowNorthMiddleWest: ( targetRect, balloonRect ) => ( {
|
|
913
|
+
top: getSouthTop( targetRect, balloonRect ),
|
|
914
|
+
left: targetRect.left - ( balloonRect.width * .25 ) - horizontalOffset,
|
|
915
|
+
name: 'arrow_nmw',
|
|
916
|
+
...( config && { config } )
|
|
917
|
+
} ),
|
|
918
|
+
|
|
919
|
+
southWestArrowNorth: ( targetRect, balloonRect ) => ( {
|
|
920
|
+
top: getSouthTop( targetRect, balloonRect ),
|
|
921
|
+
left: targetRect.left - balloonRect.width / 2,
|
|
922
|
+
name: 'arrow_n',
|
|
923
|
+
...( config && { config } )
|
|
924
|
+
} ),
|
|
925
|
+
|
|
926
|
+
southWestArrowNorthMiddleEast: ( targetRect, balloonRect ) => ( {
|
|
927
|
+
top: getSouthTop( targetRect, balloonRect ),
|
|
928
|
+
left: targetRect.left - ( balloonRect.width * .75 ) + horizontalOffset,
|
|
929
|
+
name: 'arrow_nme',
|
|
930
|
+
...( config && { config } )
|
|
931
|
+
} ),
|
|
932
|
+
|
|
933
|
+
southWestArrowNorthEast: ( targetRect, balloonRect ) => ( {
|
|
934
|
+
top: getSouthTop( targetRect, balloonRect ),
|
|
935
|
+
left: targetRect.left - balloonRect.width + horizontalOffset,
|
|
936
|
+
name: 'arrow_ne',
|
|
937
|
+
...( config && { config } )
|
|
938
|
+
} ),
|
|
939
|
+
|
|
940
|
+
// ------- South
|
|
941
|
+
|
|
942
|
+
southArrowNorthWest: ( targetRect, balloonRect ) => ( {
|
|
943
|
+
top: getSouthTop( targetRect, balloonRect ),
|
|
944
|
+
left: targetRect.left + targetRect.width / 2 - horizontalOffset,
|
|
945
|
+
name: 'arrow_nw',
|
|
946
|
+
...( config && { config } )
|
|
947
|
+
} ),
|
|
948
|
+
|
|
949
|
+
southArrowNorthMiddleWest: ( targetRect, balloonRect ) => ( {
|
|
950
|
+
top: getSouthTop( targetRect, balloonRect ),
|
|
951
|
+
left: targetRect.left + targetRect.width / 2 - ( balloonRect.width * 0.25 ) - horizontalOffset,
|
|
952
|
+
name: 'arrow_nmw',
|
|
953
|
+
...( config && { config } )
|
|
954
|
+
} ),
|
|
955
|
+
|
|
956
|
+
southArrowNorth: ( targetRect, balloonRect ) => ( {
|
|
957
|
+
top: getSouthTop( targetRect, balloonRect ),
|
|
958
|
+
left: targetRect.left + targetRect.width / 2 - balloonRect.width / 2,
|
|
959
|
+
name: 'arrow_n',
|
|
960
|
+
...( config && { config } )
|
|
961
|
+
} ),
|
|
962
|
+
|
|
963
|
+
southArrowNorthMiddleEast: ( targetRect, balloonRect ) => ( {
|
|
964
|
+
top: getSouthTop( targetRect, balloonRect ),
|
|
965
|
+
left: targetRect.left + targetRect.width / 2 - ( balloonRect.width * 0.75 ) + horizontalOffset,
|
|
966
|
+
name: 'arrow_nme',
|
|
967
|
+
...( config && { config } )
|
|
968
|
+
} ),
|
|
969
|
+
|
|
970
|
+
southArrowNorthEast: ( targetRect, balloonRect ) => ( {
|
|
971
|
+
top: getSouthTop( targetRect, balloonRect ),
|
|
972
|
+
left: targetRect.left + targetRect.width / 2 - balloonRect.width + horizontalOffset,
|
|
973
|
+
name: 'arrow_ne',
|
|
974
|
+
...( config && { config } )
|
|
975
|
+
} ),
|
|
976
|
+
|
|
977
|
+
// ------- South east
|
|
978
|
+
|
|
979
|
+
southEastArrowNorthWest: ( targetRect, balloonRect ) => ( {
|
|
980
|
+
top: getSouthTop( targetRect, balloonRect ),
|
|
981
|
+
left: targetRect.right - horizontalOffset,
|
|
982
|
+
name: 'arrow_nw',
|
|
983
|
+
...( config && { config } )
|
|
984
|
+
} ),
|
|
985
|
+
|
|
986
|
+
southEastArrowNorthMiddleWest: ( targetRect, balloonRect ) => ( {
|
|
987
|
+
top: getSouthTop( targetRect, balloonRect ),
|
|
988
|
+
left: targetRect.right - ( balloonRect.width * .25 ) - horizontalOffset,
|
|
989
|
+
name: 'arrow_nmw',
|
|
990
|
+
...( config && { config } )
|
|
991
|
+
} ),
|
|
992
|
+
|
|
993
|
+
southEastArrowNorth: ( targetRect, balloonRect ) => ( {
|
|
994
|
+
top: getSouthTop( targetRect, balloonRect ),
|
|
995
|
+
left: targetRect.right - balloonRect.width / 2,
|
|
996
|
+
name: 'arrow_n',
|
|
997
|
+
...( config && { config } )
|
|
998
|
+
} ),
|
|
999
|
+
|
|
1000
|
+
southEastArrowNorthMiddleEast: ( targetRect, balloonRect ) => ( {
|
|
1001
|
+
top: getSouthTop( targetRect, balloonRect ),
|
|
1002
|
+
left: targetRect.right - ( balloonRect.width * .75 ) + horizontalOffset,
|
|
1003
|
+
name: 'arrow_nme',
|
|
1004
|
+
...( config && { config } )
|
|
1005
|
+
} ),
|
|
1006
|
+
|
|
1007
|
+
southEastArrowNorthEast: ( targetRect, balloonRect ) => ( {
|
|
1008
|
+
top: getSouthTop( targetRect, balloonRect ),
|
|
1009
|
+
left: targetRect.right - balloonRect.width + horizontalOffset,
|
|
1010
|
+
name: 'arrow_ne',
|
|
1011
|
+
...( config && { config } )
|
|
1012
|
+
} ),
|
|
1013
|
+
|
|
1014
|
+
// ------- Sticky
|
|
1015
|
+
|
|
1016
|
+
viewportStickyNorth: ( targetRect, balloonRect, viewportRect ) => {
|
|
1017
|
+
if ( !targetRect.getIntersection( viewportRect ) ) {
|
|
1018
|
+
return null;
|
|
1019
|
+
}
|
|
1020
|
+
|
|
1021
|
+
return {
|
|
1022
|
+
top: viewportRect.top + stickyVerticalOffset,
|
|
1023
|
+
left: targetRect.left + targetRect.width / 2 - balloonRect.width / 2,
|
|
1024
|
+
name: 'arrowless',
|
|
1025
|
+
config: {
|
|
1026
|
+
withArrow: false,
|
|
1027
|
+
...config
|
|
1028
|
+
}
|
|
1029
|
+
};
|
|
1030
|
+
}
|
|
1031
|
+
};
|
|
1032
|
+
|
|
1033
|
+
// Returns the top coordinate for positions starting with `north*`.
|
|
1034
|
+
//
|
|
1035
|
+
// @private
|
|
1036
|
+
// @param {utils/dom/rect~Rect} targetRect A rect of the target.
|
|
1037
|
+
// @param {utils/dom/rect~Rect} elementRect A rect of the balloon.
|
|
1038
|
+
// @returns {Number}
|
|
1039
|
+
function getNorthTop( targetRect, balloonRect ) {
|
|
1040
|
+
return targetRect.top - balloonRect.height - verticalOffset;
|
|
1041
|
+
}
|
|
1042
|
+
|
|
1043
|
+
// Returns the top coordinate for positions starting with `south*`.
|
|
1044
|
+
//
|
|
1045
|
+
// @private
|
|
1046
|
+
// @param {utils/dom/rect~Rect} targetRect A rect of the target.
|
|
1047
|
+
// @param {utils/dom/rect~Rect} elementRect A rect of the balloon.
|
|
1048
|
+
// @returns {Number}
|
|
1049
|
+
function getSouthTop( targetRect ) {
|
|
1050
|
+
return targetRect.bottom + verticalOffset;
|
|
1051
|
+
}
|
|
926
1052
|
}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* @module ui/panel/balloon/contextualballoon
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
-
import
|
|
10
|
+
import Plugin from '@ckeditor/ckeditor5-core/src/plugin';
|
|
11
11
|
import BalloonPanelView from './balloonpanelview';
|
|
12
12
|
import View from '../../view';
|
|
13
13
|
import ButtonView from '../../button/buttonview';
|
|
@@ -170,6 +170,17 @@ export default class ContextualBalloon extends Plugin {
|
|
|
170
170
|
this._fakePanelsView = this._createFakePanelsView();
|
|
171
171
|
}
|
|
172
172
|
|
|
173
|
+
/**
|
|
174
|
+
* @inheritDoc
|
|
175
|
+
*/
|
|
176
|
+
destroy() {
|
|
177
|
+
super.destroy();
|
|
178
|
+
|
|
179
|
+
this.view.destroy();
|
|
180
|
+
this._rotatorView.destroy();
|
|
181
|
+
this._fakePanelsView.destroy();
|
|
182
|
+
}
|
|
183
|
+
|
|
173
184
|
/**
|
|
174
185
|
* Returns `true` when the given view is in one of the stacks. Otherwise returns `false`.
|
|
175
186
|
*
|
|
@@ -498,11 +509,18 @@ export default class ContextualBalloon extends Plugin {
|
|
|
498
509
|
_getBalloonPosition() {
|
|
499
510
|
let position = Array.from( this._visibleStack.values() ).pop().position;
|
|
500
511
|
|
|
501
|
-
|
|
502
|
-
|
|
512
|
+
if ( position ) {
|
|
513
|
+
// Use the default limiter if none has been specified.
|
|
514
|
+
if ( !position.limiter ) {
|
|
515
|
+
// Don't modify the original options object.
|
|
516
|
+
position = Object.assign( {}, position, {
|
|
517
|
+
limiter: this.positionLimiter
|
|
518
|
+
} );
|
|
519
|
+
}
|
|
520
|
+
|
|
503
521
|
// Don't modify the original options object.
|
|
504
522
|
position = Object.assign( {}, position, {
|
|
505
|
-
|
|
523
|
+
viewportOffsetConfig: this.editor.ui.viewportOffset
|
|
506
524
|
} );
|
|
507
525
|
}
|
|
508
526
|
|
|
@@ -621,6 +639,15 @@ class RotatorView extends View {
|
|
|
621
639
|
this.focusTracker.add( this.element );
|
|
622
640
|
}
|
|
623
641
|
|
|
642
|
+
/**
|
|
643
|
+
* @inheritDoc
|
|
644
|
+
*/
|
|
645
|
+
destroy() {
|
|
646
|
+
super.destroy();
|
|
647
|
+
|
|
648
|
+
this.focusTracker.destroy();
|
|
649
|
+
}
|
|
650
|
+
|
|
624
651
|
/**
|
|
625
652
|
* Shows a given view.
|
|
626
653
|
*
|
|
@@ -80,7 +80,11 @@ export default class StickyPanelView extends View {
|
|
|
80
80
|
* either using `position: fixed` or `position: sticky`, which would cover the
|
|
81
81
|
* sticky panel or vice–versa (depending on the `z-index` hierarchy).
|
|
82
82
|
*
|
|
83
|
-
* @
|
|
83
|
+
* Bound to {@link module:core/editor/editorui~EditorUI#viewportOffset `EditorUI#viewportOffset`}.
|
|
84
|
+
*
|
|
85
|
+
* If {@link module:core/editor/editorconfig~EditorConfig#ui `EditorConfig#ui.viewportOffset.top`} is defined, then
|
|
86
|
+
* it will override the default value.
|
|
87
|
+
*
|
|
84
88
|
* @observable
|
|
85
89
|
* @default 0
|
|
86
90
|
* @member {Number} #viewportTopOffset
|