@node-projects/web-component-designer 0.0.102 → 0.0.103
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/elements/services/DefaultServiceBootstrap.js +5 -0
- package/dist/elements/services/placementService/DefaultPlacementService.d.ts +1 -0
- package/dist/elements/services/placementService/DefaultPlacementService.js +7 -0
- package/dist/elements/services/placementService/FlexBoxPlacementService.d.ts +1 -0
- package/dist/elements/services/placementService/FlexBoxPlacementService.js +3 -0
- package/dist/elements/services/placementService/GridPlacementService.d.ts +1 -0
- package/dist/elements/services/placementService/GridPlacementService.js +3 -0
- package/dist/elements/services/placementService/IPlacementService.d.ts +1 -0
- package/dist/elements/widgets/designerView/designerCanvas.d.ts +2 -0
- package/dist/elements/widgets/designerView/designerCanvas.js +63 -9
- package/dist/elements/widgets/designerView/extensions/AltToEnterContainerExtension copy.d.ts +12 -0
- package/dist/elements/widgets/designerView/extensions/AltToEnterContainerExtension copy.js +20 -0
- package/dist/elements/widgets/designerView/extensions/AltToEnterContainerExtension.d.ts +0 -1
- package/dist/elements/widgets/designerView/extensions/AltToEnterContainerExtension.js +0 -2
- package/dist/elements/widgets/designerView/extensions/AltToEnterContainerExtensionProvider copy.d.ts +10 -0
- package/dist/elements/widgets/designerView/extensions/AltToEnterContainerExtensionProvider copy.js +14 -0
- package/dist/elements/widgets/designerView/extensions/AltToEnterContainerExtensionProvider.js +0 -1
- package/dist/elements/widgets/designerView/extensions/ExtensionType.d.ts +12 -8
- package/dist/elements/widgets/designerView/extensions/ExtensionType.js +12 -8
- package/dist/elements/widgets/designerView/extensions/GrayOutDragOverContainerExtension.d.ts +11 -0
- package/dist/elements/widgets/designerView/extensions/GrayOutDragOverContainerExtension.js +18 -0
- package/dist/elements/widgets/designerView/extensions/GrayOutDragOverContainerExtensionProvider.d.ts +10 -0
- package/dist/elements/widgets/designerView/extensions/GrayOutDragOverContainerExtensionProvider.js +13 -0
- package/dist/elements/widgets/designerView/extensions/GrayOutDragOverExtension.d.ts +11 -0
- package/dist/elements/widgets/designerView/extensions/GrayOutDragOverExtension.js +18 -0
- package/dist/elements/widgets/designerView/extensions/GrayOutExtension.js +5 -4
- package/dist/elements/widgets/designerView/tools/PointerTool.d.ts +4 -0
- package/dist/elements/widgets/designerView/tools/PointerTool.js +40 -33
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/package.json +1 -1
|
@@ -63,6 +63,7 @@ import { ZoomToolButtonProvider } from '../widgets/designerView/tools/toolBar/bu
|
|
|
63
63
|
import { DrawToolButtonProvider } from '../widgets/designerView/tools/toolBar/buttons/DrawToolButtonProvider.js';
|
|
64
64
|
import { TextToolButtonProvider } from '../widgets/designerView/tools/toolBar/buttons/TextToolButtonProvider.js';
|
|
65
65
|
import { SelectorToolButtonProvider } from '../widgets/designerView/tools/toolBar/buttons/SelectorToolButtonProvider.js';
|
|
66
|
+
import { GrayOutDragOverContainerExtensionProvider } from '../widgets/designerView/extensions/GrayOutDragOverContainerExtensionProvider.js';
|
|
66
67
|
export function createDefaultServiceContainer() {
|
|
67
68
|
let serviceContainer = new ServiceContainer();
|
|
68
69
|
serviceContainer.register("propertyService", new PolymerPropertiesService());
|
|
@@ -111,8 +112,12 @@ export function createDefaultServiceContainer() {
|
|
|
111
112
|
new GrayOutExtensionProvider()
|
|
112
113
|
]);
|
|
113
114
|
serviceContainer.designerExtensions.set(ExtensionType.ContainerDragOver, [
|
|
115
|
+
new GrayOutDragOverContainerExtensionProvider(),
|
|
114
116
|
new AltToEnterContainerExtensionProvider()
|
|
115
117
|
]);
|
|
118
|
+
serviceContainer.designerExtensions.set(ExtensionType.ContainerExternalDragOver, [
|
|
119
|
+
new GrayOutDragOverContainerExtensionProvider()
|
|
120
|
+
]);
|
|
116
121
|
serviceContainer.designerExtensions.set(ExtensionType.Doubleclick, [
|
|
117
122
|
new EditTextExtensionProvider()
|
|
118
123
|
]);
|
|
@@ -5,6 +5,7 @@ import { IPlacementView } from '../../widgets/designerView/IPlacementView.js';
|
|
|
5
5
|
export declare class DefaultPlacementService implements IPlacementService {
|
|
6
6
|
serviceForContainer(container: IDesignItem, containerStyle: CSSStyleDeclaration): boolean;
|
|
7
7
|
canEnter(container: IDesignItem, items: IDesignItem[]): boolean;
|
|
8
|
+
canEnterByDrop(container: IDesignItem): boolean;
|
|
8
9
|
canLeave(container: IDesignItem, items: IDesignItem[]): boolean;
|
|
9
10
|
getElementOffset(container: IDesignItem, designItem?: IDesignItem): IPoint;
|
|
10
11
|
private calculateTrack;
|
|
@@ -17,6 +17,13 @@ export class DefaultPlacementService {
|
|
|
17
17
|
return false;
|
|
18
18
|
return true;
|
|
19
19
|
}
|
|
20
|
+
canEnterByDrop(container) {
|
|
21
|
+
if (DomConverter.IsSelfClosingElement(container.element.localName))
|
|
22
|
+
return false;
|
|
23
|
+
if (container.element.shadowRoot && container.element.shadowRoot.querySelector('slot') == null)
|
|
24
|
+
return false;
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
20
27
|
canLeave(container, items) {
|
|
21
28
|
return true;
|
|
22
29
|
}
|
|
@@ -7,6 +7,7 @@ export declare class FlexBoxPlacementService implements IPlacementService {
|
|
|
7
7
|
leaveContainer(container: IDesignItem, items: IDesignItem[]): void;
|
|
8
8
|
serviceForContainer(container: IDesignItem, containerStyle: CSSStyleDeclaration): boolean;
|
|
9
9
|
canEnter(container: IDesignItem, items: IDesignItem[]): boolean;
|
|
10
|
+
canEnterByDrop(container: IDesignItem): boolean;
|
|
10
11
|
canLeave(container: IDesignItem, items: IDesignItem[]): boolean;
|
|
11
12
|
getElementOffset(container: IDesignItem, designItem?: IDesignItem): IPoint;
|
|
12
13
|
placePoint(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): IPoint;
|
|
@@ -7,6 +7,7 @@ export declare class GridPlacementService implements IPlacementService {
|
|
|
7
7
|
leaveContainer(container: IDesignItem, items: IDesignItem[]): void;
|
|
8
8
|
serviceForContainer(container: IDesignItem, containerStyle: CSSStyleDeclaration): boolean;
|
|
9
9
|
canEnter(container: IDesignItem, items: IDesignItem[]): boolean;
|
|
10
|
+
canEnterByDrop(container: IDesignItem): boolean;
|
|
10
11
|
canLeave(container: IDesignItem, items: IDesignItem[]): boolean;
|
|
11
12
|
getElementOffset(container: IDesignItem, designItem?: IDesignItem): IPoint;
|
|
12
13
|
placePoint(event: MouseEvent, placementView: IPlacementView, container: IDesignItem, startPoint: IPoint, offsetInControl: IPoint, newPoint: IPoint, items: IDesignItem[]): IPoint;
|
|
@@ -4,6 +4,7 @@ import { IPlacementView } from "../../widgets/designerView/IPlacementView";
|
|
|
4
4
|
import { IPoint } from "../../../interfaces/IPoint";
|
|
5
5
|
export interface IPlacementService extends IService {
|
|
6
6
|
serviceForContainer(container: IDesignItem, containerStyle: CSSStyleDeclaration): any;
|
|
7
|
+
canEnterByDrop(container: IDesignItem): any;
|
|
7
8
|
canEnter(container: IDesignItem, items: IDesignItem[]): any;
|
|
8
9
|
canLeave(container: IDesignItem, items: IDesignItem[]): any;
|
|
9
10
|
enterContainer(container: IDesignItem, items: IDesignItem[]): any;
|
|
@@ -77,9 +77,11 @@ export declare class DesignerCanvas extends BaseCustomWebComponentLazyAppend imp
|
|
|
77
77
|
_updateTransform(): void;
|
|
78
78
|
setDesignItems(designItems: IDesignItem[]): void;
|
|
79
79
|
addDesignItems(designItems: IDesignItem[]): void;
|
|
80
|
+
_dragOverExtensionItem: IDesignItem;
|
|
80
81
|
private _onDragEnter;
|
|
81
82
|
private _onDragLeave;
|
|
82
83
|
private _onDragOver;
|
|
84
|
+
private _getPossibleContainerForDrop;
|
|
83
85
|
private _onDrop;
|
|
84
86
|
showDesignItemContextMenu(designItem: IDesignItem, event: MouseEvent): ContextMenuHelper;
|
|
85
87
|
private _onDblClick;
|
|
@@ -422,6 +422,7 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
|
|
|
422
422
|
}
|
|
423
423
|
this.snapLines.clearSnaplines();
|
|
424
424
|
}
|
|
425
|
+
_dragOverExtensionItem;
|
|
425
426
|
_onDragEnter(event) {
|
|
426
427
|
this._fillCalculationrects();
|
|
427
428
|
event.preventDefault();
|
|
@@ -446,6 +447,10 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
|
|
|
446
447
|
event.dataTransfer.dropEffect = effect;
|
|
447
448
|
}
|
|
448
449
|
}
|
|
450
|
+
if (this._dragOverExtensionItem) {
|
|
451
|
+
this.extensionManager.removeExtension(this._dragOverExtensionItem, ExtensionType.ContainerExternalDragOver);
|
|
452
|
+
this._dragOverExtensionItem = null;
|
|
453
|
+
}
|
|
449
454
|
}
|
|
450
455
|
_onDragOver(event) {
|
|
451
456
|
event.preventDefault();
|
|
@@ -466,15 +471,57 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
|
|
|
466
471
|
this._canvas.classList.add('dragFileActive');
|
|
467
472
|
}
|
|
468
473
|
}
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
474
|
+
else {
|
|
475
|
+
const hasTransferDataBindingObject = event.dataTransfer.types.indexOf(dragDropFormatNameBindingObject) >= 0;
|
|
476
|
+
if (hasTransferDataBindingObject) {
|
|
477
|
+
const ddService = this.serviceContainer.bindableObjectDragDropService;
|
|
478
|
+
if (ddService) {
|
|
479
|
+
const effect = ddService.dragOver(this, event);
|
|
480
|
+
event.dataTransfer.dropEffect = effect;
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
else {
|
|
484
|
+
let [newContainer] = this._getPossibleContainerForDrop(event);
|
|
485
|
+
if (this._dragOverExtensionItem != newContainer) {
|
|
486
|
+
this.extensionManager.removeExtension(this._dragOverExtensionItem, ExtensionType.ContainerExternalDragOver);
|
|
487
|
+
this.extensionManager.applyExtension(newContainer, ExtensionType.ContainerExternalDragOver);
|
|
488
|
+
this._dragOverExtensionItem = newContainer;
|
|
489
|
+
}
|
|
475
490
|
}
|
|
476
491
|
}
|
|
477
492
|
}
|
|
493
|
+
_getPossibleContainerForDrop(event) {
|
|
494
|
+
let newContainerElementDesignItem = null;
|
|
495
|
+
let newContainerService = null;
|
|
496
|
+
const elementsFromPoint = this.elementsFromPoint(event.x, event.y);
|
|
497
|
+
for (let e of elementsFromPoint) {
|
|
498
|
+
if (e == this.rootDesignItem.element) {
|
|
499
|
+
newContainerElementDesignItem = this.rootDesignItem;
|
|
500
|
+
const containerStyle = getComputedStyle(newContainerElementDesignItem.element);
|
|
501
|
+
newContainerService = this.serviceContainer.getLastServiceWhere('containerService', x => x.serviceForContainer(newContainerElementDesignItem, containerStyle));
|
|
502
|
+
break;
|
|
503
|
+
}
|
|
504
|
+
else if (false) {
|
|
505
|
+
//check we don't try to move a item over one of its children..
|
|
506
|
+
}
|
|
507
|
+
else {
|
|
508
|
+
newContainerElementDesignItem = DesignItem.GetOrCreateDesignItem(e, this.serviceContainer, this.instanceServiceContainer);
|
|
509
|
+
const containerStyle = getComputedStyle(newContainerElementDesignItem.element);
|
|
510
|
+
newContainerService = this.serviceContainer.getLastServiceWhere('containerService', x => x.serviceForContainer(newContainerElementDesignItem, containerStyle));
|
|
511
|
+
if (newContainerService) {
|
|
512
|
+
if (newContainerService.canEnterByDrop(newContainerElementDesignItem)) {
|
|
513
|
+
break;
|
|
514
|
+
}
|
|
515
|
+
else {
|
|
516
|
+
newContainerElementDesignItem = null;
|
|
517
|
+
newContainerService = null;
|
|
518
|
+
continue;
|
|
519
|
+
}
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
return [newContainerElementDesignItem, newContainerService];
|
|
524
|
+
}
|
|
478
525
|
async _onDrop(event) {
|
|
479
526
|
event.preventDefault();
|
|
480
527
|
this._canvas.classList.remove('dragFileActive');
|
|
@@ -496,16 +543,23 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
|
|
|
496
543
|
}
|
|
497
544
|
}
|
|
498
545
|
else {
|
|
546
|
+
if (this._dragOverExtensionItem) {
|
|
547
|
+
this.extensionManager.removeExtension(this._dragOverExtensionItem, ExtensionType.ContainerExternalDragOver);
|
|
548
|
+
this._dragOverExtensionItem = null;
|
|
549
|
+
}
|
|
550
|
+
let [newContainer] = this._getPossibleContainerForDrop(event);
|
|
551
|
+
let pos = this.getNormalizedElementCoordinates(newContainer.element);
|
|
499
552
|
this._fillCalculationrects();
|
|
500
553
|
const position = this.getNormalizedEventCoordinates(event);
|
|
554
|
+
//TODO : we need to use container service for adding to element, so also grid and flexbox work correct
|
|
501
555
|
const transferData = event.dataTransfer.getData(dragDropFormatNameElementDefinition);
|
|
502
556
|
const elementDefinition = JSON.parse(transferData);
|
|
503
557
|
const di = await this.serviceContainer.forSomeServicesTillResult("instanceService", (service) => service.getElement(elementDefinition, this.serviceContainer, this.instanceServiceContainer));
|
|
504
558
|
const grp = di.openGroup("Insert");
|
|
505
559
|
di.setStyle('position', 'absolute');
|
|
506
|
-
di.setStyle('left', position.x + 'px');
|
|
507
|
-
di.setStyle('top', position.y + 'px');
|
|
508
|
-
this.instanceServiceContainer.undoService.execute(new InsertAction(
|
|
560
|
+
di.setStyle('left', (position.x - pos.x) + 'px');
|
|
561
|
+
di.setStyle('top', (position.y - pos.y) + 'px');
|
|
562
|
+
this.instanceServiceContainer.undoService.execute(new InsertAction(newContainer, newContainer.childCount, di));
|
|
509
563
|
grp.commit();
|
|
510
564
|
requestAnimationFrame(() => this.instanceServiceContainer.selectionService.setSelectedElements([di]));
|
|
511
565
|
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { IDesignItem } from "../../../item/IDesignItem";
|
|
2
|
+
import { IDesignerCanvas } from "../IDesignerCanvas";
|
|
3
|
+
import { AbstractExtension } from "./AbstractExtension";
|
|
4
|
+
import { IExtensionManager } from "./IExtensionManger";
|
|
5
|
+
export declare class AltToEnterContainerExtension extends AbstractExtension {
|
|
6
|
+
private _text;
|
|
7
|
+
private _rect;
|
|
8
|
+
constructor(extensionManager: IExtensionManager, designerView: IDesignerCanvas, extendedItem: IDesignItem);
|
|
9
|
+
extend(): void;
|
|
10
|
+
refresh(): void;
|
|
11
|
+
dispose(): void;
|
|
12
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { AbstractExtension } from "./AbstractExtension";
|
|
2
|
+
import { OverlayLayer } from "./OverlayLayer.js";
|
|
3
|
+
export class AltToEnterContainerExtension extends AbstractExtension {
|
|
4
|
+
_text;
|
|
5
|
+
_rect;
|
|
6
|
+
constructor(extensionManager, designerView, extendedItem) {
|
|
7
|
+
super(extensionManager, designerView, extendedItem);
|
|
8
|
+
}
|
|
9
|
+
extend() {
|
|
10
|
+
this.refresh();
|
|
11
|
+
}
|
|
12
|
+
refresh() {
|
|
13
|
+
let itemRect = this.designerCanvas.getNormalizedElementCoordinates(this.extendedItem.element);
|
|
14
|
+
this._text = this._drawText("Press ALT to enter container", itemRect.x + 5, itemRect.y + 12, 'svg-text-enter-container', this._text, OverlayLayer.Foregorund);
|
|
15
|
+
this._rect = this._drawRect(itemRect.x, itemRect.y, itemRect.width, itemRect.height, 'svg-rect-enter-container', this._rect, OverlayLayer.Foregorund);
|
|
16
|
+
}
|
|
17
|
+
dispose() {
|
|
18
|
+
this._removeAllOverlays();
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -4,7 +4,6 @@ import { AbstractExtension } from "./AbstractExtension";
|
|
|
4
4
|
import { IExtensionManager } from "./IExtensionManger";
|
|
5
5
|
export declare class AltToEnterContainerExtension extends AbstractExtension {
|
|
6
6
|
private _text;
|
|
7
|
-
private _rect;
|
|
8
7
|
constructor(extensionManager: IExtensionManager, designerView: IDesignerCanvas, extendedItem: IDesignItem);
|
|
9
8
|
extend(): void;
|
|
10
9
|
refresh(): void;
|
|
@@ -2,7 +2,6 @@ import { AbstractExtension } from "./AbstractExtension";
|
|
|
2
2
|
import { OverlayLayer } from "./OverlayLayer.js";
|
|
3
3
|
export class AltToEnterContainerExtension extends AbstractExtension {
|
|
4
4
|
_text;
|
|
5
|
-
_rect;
|
|
6
5
|
constructor(extensionManager, designerView, extendedItem) {
|
|
7
6
|
super(extensionManager, designerView, extendedItem);
|
|
8
7
|
}
|
|
@@ -12,7 +11,6 @@ export class AltToEnterContainerExtension extends AbstractExtension {
|
|
|
12
11
|
refresh() {
|
|
13
12
|
let itemRect = this.designerCanvas.getNormalizedElementCoordinates(this.extendedItem.element);
|
|
14
13
|
this._text = this._drawText("Press ALT to enter container", itemRect.x + 5, itemRect.y + 12, 'svg-text-enter-container', this._text, OverlayLayer.Foregorund);
|
|
15
|
-
this._rect = this._drawRect(itemRect.x, itemRect.y, itemRect.width, itemRect.height, 'svg-rect-enter-container', this._rect, OverlayLayer.Foregorund);
|
|
16
14
|
}
|
|
17
15
|
dispose() {
|
|
18
16
|
this._removeAllOverlays();
|
package/dist/elements/widgets/designerView/extensions/AltToEnterContainerExtensionProvider copy.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { IDesignerExtensionProvider } from "./IDesignerExtensionProvider";
|
|
2
|
+
import { IDesignItem } from "../../../item/IDesignItem";
|
|
3
|
+
import { IDesignerCanvas } from "../IDesignerCanvas";
|
|
4
|
+
import { IDesignerExtension } from "./IDesignerExtension";
|
|
5
|
+
import { IExtensionManager } from "./IExtensionManger";
|
|
6
|
+
export declare class AltToEnterContainerExtensionProvider implements IDesignerExtensionProvider {
|
|
7
|
+
shouldExtend(extensionManager: IExtensionManager, designerView: IDesignerCanvas, designItem: IDesignItem): boolean;
|
|
8
|
+
getExtension(extensionManager: IExtensionManager, designerView: IDesignerCanvas, designItem: IDesignItem): IDesignerExtension;
|
|
9
|
+
readonly style: CSSStyleSheet;
|
|
10
|
+
}
|
package/dist/elements/widgets/designerView/extensions/AltToEnterContainerExtensionProvider copy.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { AltToEnterContainerExtension } from './AltToEnterContainerExtension';
|
|
2
|
+
import { css } from "@node-projects/base-custom-webcomponent";
|
|
3
|
+
export class AltToEnterContainerExtensionProvider {
|
|
4
|
+
shouldExtend(extensionManager, designerView, designItem) {
|
|
5
|
+
return true;
|
|
6
|
+
}
|
|
7
|
+
getExtension(extensionManager, designerView, designItem) {
|
|
8
|
+
return new AltToEnterContainerExtension(extensionManager, designerView, designItem);
|
|
9
|
+
}
|
|
10
|
+
style = css `
|
|
11
|
+
.svg-text-enter-container { stroke: none; fill: black; stroke-width: 1; font-size: 14px; font-weight:800; font-family: monospace; }
|
|
12
|
+
.svg-rect-enter-container { stroke: none; fill: #aa00ff2e; }
|
|
13
|
+
`;
|
|
14
|
+
}
|
package/dist/elements/widgets/designerView/extensions/AltToEnterContainerExtensionProvider.js
CHANGED
|
@@ -9,6 +9,5 @@ export class AltToEnterContainerExtensionProvider {
|
|
|
9
9
|
}
|
|
10
10
|
style = css `
|
|
11
11
|
.svg-text-enter-container { stroke: none; fill: black; stroke-width: 1; font-size: 14px; font-weight:800; font-family: monospace; }
|
|
12
|
-
.svg-rect-enter-container { stroke: none; fill: #aa00ff2e; }
|
|
13
12
|
`;
|
|
14
13
|
}
|
|
@@ -1,18 +1,22 @@
|
|
|
1
1
|
export declare enum ExtensionType {
|
|
2
2
|
Permanent = 1,
|
|
3
3
|
Selection = 2,
|
|
4
|
-
PrimarySelection =
|
|
5
|
-
PrimarySelectionContainer =
|
|
6
|
-
MouseOver =
|
|
7
|
-
OnlyOneItemSelected =
|
|
8
|
-
MultipleItemsSelected =
|
|
4
|
+
PrimarySelection = 3,
|
|
5
|
+
PrimarySelectionContainer = 4,
|
|
6
|
+
MouseOver = 5,
|
|
7
|
+
OnlyOneItemSelected = 6,
|
|
8
|
+
MultipleItemsSelected = 7,
|
|
9
9
|
/**
|
|
10
10
|
* Extension for the Container wich the dragged element is draged over.
|
|
11
11
|
*/
|
|
12
|
-
ContainerDragOver =
|
|
12
|
+
ContainerDragOver = 8,
|
|
13
|
+
/**
|
|
14
|
+
* Extension for the Container on wich a new element is draged over.
|
|
15
|
+
*/
|
|
16
|
+
ContainerExternalDragOver = 9,
|
|
13
17
|
/**
|
|
14
18
|
* Extension for the Current Container wich the dragged element is contained.
|
|
15
19
|
*/
|
|
16
|
-
ContainerDrag =
|
|
17
|
-
Doubleclick =
|
|
20
|
+
ContainerDrag = 10,
|
|
21
|
+
Doubleclick = 11
|
|
18
22
|
}
|
|
@@ -2,18 +2,22 @@ export var ExtensionType;
|
|
|
2
2
|
(function (ExtensionType) {
|
|
3
3
|
ExtensionType[ExtensionType["Permanent"] = 1] = "Permanent";
|
|
4
4
|
ExtensionType[ExtensionType["Selection"] = 2] = "Selection";
|
|
5
|
-
ExtensionType[ExtensionType["PrimarySelection"] =
|
|
6
|
-
ExtensionType[ExtensionType["PrimarySelectionContainer"] =
|
|
7
|
-
ExtensionType[ExtensionType["MouseOver"] =
|
|
8
|
-
ExtensionType[ExtensionType["OnlyOneItemSelected"] =
|
|
9
|
-
ExtensionType[ExtensionType["MultipleItemsSelected"] =
|
|
5
|
+
ExtensionType[ExtensionType["PrimarySelection"] = 3] = "PrimarySelection";
|
|
6
|
+
ExtensionType[ExtensionType["PrimarySelectionContainer"] = 4] = "PrimarySelectionContainer";
|
|
7
|
+
ExtensionType[ExtensionType["MouseOver"] = 5] = "MouseOver";
|
|
8
|
+
ExtensionType[ExtensionType["OnlyOneItemSelected"] = 6] = "OnlyOneItemSelected";
|
|
9
|
+
ExtensionType[ExtensionType["MultipleItemsSelected"] = 7] = "MultipleItemsSelected";
|
|
10
10
|
/**
|
|
11
11
|
* Extension for the Container wich the dragged element is draged over.
|
|
12
12
|
*/
|
|
13
|
-
ExtensionType[ExtensionType["ContainerDragOver"] =
|
|
13
|
+
ExtensionType[ExtensionType["ContainerDragOver"] = 8] = "ContainerDragOver";
|
|
14
|
+
/**
|
|
15
|
+
* Extension for the Container on wich a new element is draged over.
|
|
16
|
+
*/
|
|
17
|
+
ExtensionType[ExtensionType["ContainerExternalDragOver"] = 9] = "ContainerExternalDragOver";
|
|
14
18
|
/**
|
|
15
19
|
* Extension for the Current Container wich the dragged element is contained.
|
|
16
20
|
*/
|
|
17
|
-
ExtensionType[ExtensionType["ContainerDrag"] =
|
|
18
|
-
ExtensionType[ExtensionType["Doubleclick"] =
|
|
21
|
+
ExtensionType[ExtensionType["ContainerDrag"] = 10] = "ContainerDrag";
|
|
22
|
+
ExtensionType[ExtensionType["Doubleclick"] = 11] = "Doubleclick";
|
|
19
23
|
})(ExtensionType || (ExtensionType = {}));
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { IDesignItem } from "../../../item/IDesignItem";
|
|
2
|
+
import { IDesignerCanvas } from "../IDesignerCanvas";
|
|
3
|
+
import { AbstractExtension } from "./AbstractExtension";
|
|
4
|
+
import { IExtensionManager } from "./IExtensionManger";
|
|
5
|
+
export declare class GrayOutDragOverContainerExtension extends AbstractExtension {
|
|
6
|
+
private _rect;
|
|
7
|
+
constructor(extensionManager: IExtensionManager, designerView: IDesignerCanvas, extendedItem: IDesignItem);
|
|
8
|
+
extend(): void;
|
|
9
|
+
refresh(): void;
|
|
10
|
+
dispose(): void;
|
|
11
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { AbstractExtension } from "./AbstractExtension";
|
|
2
|
+
import { OverlayLayer } from "./OverlayLayer.js";
|
|
3
|
+
export class GrayOutDragOverContainerExtension extends AbstractExtension {
|
|
4
|
+
_rect;
|
|
5
|
+
constructor(extensionManager, designerView, extendedItem) {
|
|
6
|
+
super(extensionManager, designerView, extendedItem);
|
|
7
|
+
}
|
|
8
|
+
extend() {
|
|
9
|
+
this.refresh();
|
|
10
|
+
}
|
|
11
|
+
refresh() {
|
|
12
|
+
let itemRect = this.designerCanvas.getNormalizedElementCoordinates(this.extendedItem.element);
|
|
13
|
+
this._rect = this._drawRect(itemRect.x, itemRect.y, itemRect.width, itemRect.height, 'svg-rect-enter-container', this._rect, OverlayLayer.Foregorund);
|
|
14
|
+
}
|
|
15
|
+
dispose() {
|
|
16
|
+
this._removeAllOverlays();
|
|
17
|
+
}
|
|
18
|
+
}
|
package/dist/elements/widgets/designerView/extensions/GrayOutDragOverContainerExtensionProvider.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { IDesignerExtensionProvider } from "./IDesignerExtensionProvider";
|
|
2
|
+
import { IDesignItem } from "../../../item/IDesignItem";
|
|
3
|
+
import { IDesignerCanvas } from "../IDesignerCanvas";
|
|
4
|
+
import { IDesignerExtension } from "./IDesignerExtension";
|
|
5
|
+
import { IExtensionManager } from "./IExtensionManger";
|
|
6
|
+
export declare class GrayOutDragOverContainerExtensionProvider implements IDesignerExtensionProvider {
|
|
7
|
+
shouldExtend(extensionManager: IExtensionManager, designerView: IDesignerCanvas, designItem: IDesignItem): boolean;
|
|
8
|
+
getExtension(extensionManager: IExtensionManager, designerView: IDesignerCanvas, designItem: IDesignItem): IDesignerExtension;
|
|
9
|
+
readonly style: CSSStyleSheet;
|
|
10
|
+
}
|
package/dist/elements/widgets/designerView/extensions/GrayOutDragOverContainerExtensionProvider.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { css } from "@node-projects/base-custom-webcomponent";
|
|
2
|
+
import { GrayOutDragOverContainerExtension } from "./GrayOutDragOverContainerExtension.js";
|
|
3
|
+
export class GrayOutDragOverContainerExtensionProvider {
|
|
4
|
+
shouldExtend(extensionManager, designerView, designItem) {
|
|
5
|
+
return true;
|
|
6
|
+
}
|
|
7
|
+
getExtension(extensionManager, designerView, designItem) {
|
|
8
|
+
return new GrayOutDragOverContainerExtension(extensionManager, designerView, designItem);
|
|
9
|
+
}
|
|
10
|
+
style = css `
|
|
11
|
+
.svg-rect-enter-container { stroke: none; fill: #aa00ff2e; }
|
|
12
|
+
`;
|
|
13
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { IDesignItem } from "../../../item/IDesignItem";
|
|
2
|
+
import { IDesignerCanvas } from "../IDesignerCanvas";
|
|
3
|
+
import { AbstractExtension } from "./AbstractExtension";
|
|
4
|
+
import { IExtensionManager } from "./IExtensionManger";
|
|
5
|
+
export declare class GrayOutDragOverExtension extends AbstractExtension {
|
|
6
|
+
private _rect;
|
|
7
|
+
constructor(extensionManager: IExtensionManager, designerView: IDesignerCanvas, extendedItem: IDesignItem);
|
|
8
|
+
extend(): void;
|
|
9
|
+
refresh(): void;
|
|
10
|
+
dispose(): void;
|
|
11
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { AbstractExtension } from "./AbstractExtension";
|
|
2
|
+
import { OverlayLayer } from "./OverlayLayer.js";
|
|
3
|
+
export class GrayOutDragOverExtension extends AbstractExtension {
|
|
4
|
+
_rect;
|
|
5
|
+
constructor(extensionManager, designerView, extendedItem) {
|
|
6
|
+
super(extensionManager, designerView, extendedItem);
|
|
7
|
+
}
|
|
8
|
+
extend() {
|
|
9
|
+
this.refresh();
|
|
10
|
+
}
|
|
11
|
+
refresh() {
|
|
12
|
+
let itemRect = this.designerCanvas.getNormalizedElementCoordinates(this.extendedItem.element);
|
|
13
|
+
this._rect = this._drawRect(itemRect.x, itemRect.y, itemRect.width, itemRect.height, 'svg-rect-enter-container', this._rect, OverlayLayer.Foregorund);
|
|
14
|
+
}
|
|
15
|
+
dispose() {
|
|
16
|
+
this._removeAllOverlays();
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -19,10 +19,11 @@ export class GrayOutExtension extends AbstractExtension {
|
|
|
19
19
|
this.drawGrayOut(normalizedRect);
|
|
20
20
|
}
|
|
21
21
|
drawGrayOut(r) {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
"M" + r.x + "
|
|
25
|
-
"M" +
|
|
22
|
+
let outsideRect = { width: this.designerCanvas.containerBoundingRect.width / this.designerCanvas.scaleFactor, height: this.designerCanvas.containerBoundingRect.height / this.designerCanvas.scaleFactor };
|
|
23
|
+
const pathPoints = "M0 0 L0 " + outsideRect.height + "L" + r.x + " " + outsideRect.height + "L" + r.x + " 0" + " L0 0" +
|
|
24
|
+
"M" + r.x + " 0 L" + r.x + " " + r.y + "L" + outsideRect.width + " " + r.y + "L" + outsideRect.width + " 0" + "L" + r.x + " 0" +
|
|
25
|
+
"M" + r.x + " " + (r.y + r.height) + "L" + r.x + " " + outsideRect.height + "L" + outsideRect.width + " " + outsideRect.height + "L" + outsideRect.width + " " + (r.y + r.height) + "L" + r.x + " " + (r.y + r.height) +
|
|
26
|
+
"M" + (r.x + r.width) + " " + r.y + "L" + (r.x + r.width) + " " + (r.y + r.height) + "L" + outsideRect.width + " " + (r.y + r.height) + "L" + outsideRect.width + " " + (r.y) + "L" + (r.x + r.width) + " " + r.y;
|
|
26
27
|
this._path.setAttribute("d", pathPoints);
|
|
27
28
|
}
|
|
28
29
|
dispose() {
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import { IPoint } from "../../../../interfaces/IPoint";
|
|
2
|
+
import { IDesignItem } from "../../../item/IDesignItem";
|
|
3
|
+
import { IPlacementService } from "../../../services/placementService/IPlacementService";
|
|
1
4
|
import { IDesignerCanvas } from "../IDesignerCanvas";
|
|
2
5
|
import { ITool } from "./ITool";
|
|
3
6
|
import { ServiceContainer } from "../../../services/ServiceContainer.js";
|
|
@@ -21,5 +24,6 @@ export declare class PointerTool implements ITool {
|
|
|
21
24
|
private _resetTool;
|
|
22
25
|
private _pointerActionTypeDrawSelection;
|
|
23
26
|
private _pointerActionTypeDragOrSelect;
|
|
27
|
+
static FindPossibleContainer(designItem: IDesignItem, designItems: IDesignItem[], event: IPoint): [newContainerElementDesignItem: IDesignItem, newContainerService: IPlacementService];
|
|
24
28
|
keyboardEventHandler(designerCanvas: IDesignerCanvas, event: KeyboardEvent, currentElement: Element): void;
|
|
25
29
|
}
|
|
@@ -185,39 +185,7 @@ export class PointerTool {
|
|
|
185
185
|
let newContainerElementDesignItem = null;
|
|
186
186
|
let newContainerService = null;
|
|
187
187
|
if (canLeave) {
|
|
188
|
-
|
|
189
|
-
for (let e of elementsFromPoint) {
|
|
190
|
-
if (e == this._actionStartedDesignItem.element) {
|
|
191
|
-
continue;
|
|
192
|
-
}
|
|
193
|
-
else if (e == this._actionStartedDesignItem.parent.element) {
|
|
194
|
-
break;
|
|
195
|
-
}
|
|
196
|
-
else if (e == designerCanvas.rootDesignItem.element) {
|
|
197
|
-
newContainerElementDesignItem = designerCanvas.rootDesignItem;
|
|
198
|
-
const containerStyle = getComputedStyle(newContainerElementDesignItem.element);
|
|
199
|
-
newContainerService = designerCanvas.serviceContainer.getLastServiceWhere('containerService', x => x.serviceForContainer(newContainerElementDesignItem, containerStyle));
|
|
200
|
-
break;
|
|
201
|
-
}
|
|
202
|
-
else if (false) {
|
|
203
|
-
//check we don't try to move a item over one of its children..
|
|
204
|
-
}
|
|
205
|
-
else {
|
|
206
|
-
newContainerElementDesignItem = DesignItem.GetOrCreateDesignItem(e, designerCanvas.serviceContainer, designerCanvas.instanceServiceContainer);
|
|
207
|
-
const containerStyle = getComputedStyle(newContainerElementDesignItem.element);
|
|
208
|
-
newContainerService = designerCanvas.serviceContainer.getLastServiceWhere('containerService', x => x.serviceForContainer(newContainerElementDesignItem, containerStyle));
|
|
209
|
-
if (newContainerService) {
|
|
210
|
-
if (newContainerService.canEnter(newContainerElementDesignItem, this._actionStartedDesignItems)) {
|
|
211
|
-
break;
|
|
212
|
-
}
|
|
213
|
-
else {
|
|
214
|
-
newContainerElementDesignItem = null;
|
|
215
|
-
newContainerService = null;
|
|
216
|
-
continue;
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
}
|
|
188
|
+
[newContainerElementDesignItem, newContainerService] = PointerTool.FindPossibleContainer(this._actionStartedDesignItem, this._actionStartedDesignItems, event);
|
|
221
189
|
//if we found a new enterable container create extensions
|
|
222
190
|
if (newContainerElementDesignItem != null) {
|
|
223
191
|
if (this._dragOverExtensionItem != newContainerElementDesignItem) {
|
|
@@ -284,5 +252,44 @@ export class PointerTool {
|
|
|
284
252
|
}
|
|
285
253
|
}
|
|
286
254
|
}
|
|
255
|
+
static FindPossibleContainer(designItem, designItems, event) {
|
|
256
|
+
let newContainerElementDesignItem = null;
|
|
257
|
+
let newContainerService = null;
|
|
258
|
+
const designerCanvas = designItem.instanceServiceContainer.designerCanvas;
|
|
259
|
+
const elementsFromPoint = designerCanvas.elementsFromPoint(event.x, event.y);
|
|
260
|
+
for (let e of elementsFromPoint) {
|
|
261
|
+
if (e == designItem.element) {
|
|
262
|
+
continue;
|
|
263
|
+
}
|
|
264
|
+
else if (e == designItem.parent.element) {
|
|
265
|
+
break;
|
|
266
|
+
}
|
|
267
|
+
else if (e == designerCanvas.rootDesignItem.element) {
|
|
268
|
+
newContainerElementDesignItem = designerCanvas.rootDesignItem;
|
|
269
|
+
const containerStyle = getComputedStyle(newContainerElementDesignItem.element);
|
|
270
|
+
newContainerService = designerCanvas.serviceContainer.getLastServiceWhere('containerService', x => x.serviceForContainer(newContainerElementDesignItem, containerStyle));
|
|
271
|
+
break;
|
|
272
|
+
}
|
|
273
|
+
else if (false) {
|
|
274
|
+
//check we don't try to move a item over one of its children..
|
|
275
|
+
}
|
|
276
|
+
else {
|
|
277
|
+
newContainerElementDesignItem = DesignItem.GetOrCreateDesignItem(e, designerCanvas.serviceContainer, designerCanvas.instanceServiceContainer);
|
|
278
|
+
const containerStyle = getComputedStyle(newContainerElementDesignItem.element);
|
|
279
|
+
newContainerService = designerCanvas.serviceContainer.getLastServiceWhere('containerService', x => x.serviceForContainer(newContainerElementDesignItem, containerStyle));
|
|
280
|
+
if (newContainerService) {
|
|
281
|
+
if (newContainerService.canEnter(newContainerElementDesignItem, designItems)) {
|
|
282
|
+
break;
|
|
283
|
+
}
|
|
284
|
+
else {
|
|
285
|
+
newContainerElementDesignItem = null;
|
|
286
|
+
newContainerService = null;
|
|
287
|
+
continue;
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
return [newContainerElementDesignItem, newContainerService];
|
|
293
|
+
}
|
|
287
294
|
keyboardEventHandler(designerCanvas, event, currentElement) { }
|
|
288
295
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -139,6 +139,8 @@ export * from "./elements/widgets/designerView/extensions/CanvasExtensionProvide
|
|
|
139
139
|
export * from "./elements/widgets/designerView/extensions/ExtensionManager.js";
|
|
140
140
|
export * from "./elements/widgets/designerView/extensions/GrayOutExtension.js";
|
|
141
141
|
export * from "./elements/widgets/designerView/extensions/GrayOutExtensionProvider.js";
|
|
142
|
+
export * from "./elements/widgets/designerView/extensions/GrayOutDragOverContainerExtension.js";
|
|
143
|
+
export * from "./elements/widgets/designerView/extensions/GrayOutDragOverContainerExtensionProvider.js";
|
|
142
144
|
export * from "./elements/widgets/designerView/extensions/GridExtension.js";
|
|
143
145
|
export * from "./elements/widgets/designerView/extensions/GridExtensionProvider.js";
|
|
144
146
|
export * from "./elements/widgets/designerView/extensions/InvisibleDivExtension.js";
|
package/dist/index.js
CHANGED
|
@@ -99,6 +99,8 @@ export * from "./elements/widgets/designerView/extensions/CanvasExtensionProvide
|
|
|
99
99
|
export * from "./elements/widgets/designerView/extensions/ExtensionManager.js";
|
|
100
100
|
export * from "./elements/widgets/designerView/extensions/GrayOutExtension.js";
|
|
101
101
|
export * from "./elements/widgets/designerView/extensions/GrayOutExtensionProvider.js";
|
|
102
|
+
export * from "./elements/widgets/designerView/extensions/GrayOutDragOverContainerExtension.js";
|
|
103
|
+
export * from "./elements/widgets/designerView/extensions/GrayOutDragOverContainerExtensionProvider.js";
|
|
102
104
|
export * from "./elements/widgets/designerView/extensions/GridExtension.js";
|
|
103
105
|
export * from "./elements/widgets/designerView/extensions/GridExtensionProvider.js";
|
|
104
106
|
export * from "./elements/widgets/designerView/extensions/InvisibleDivExtension.js";
|