@node-projects/web-component-designer 0.0.164 → 0.0.166
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/helper/contextMenu/ContextMenu.js +1 -0
- package/dist/elements/item/DesignItem.d.ts +2 -0
- package/dist/elements/item/DesignItem.js +1 -0
- package/dist/elements/item/IDesignItem.d.ts +2 -0
- package/dist/elements/services/DefaultServiceBootstrap.js +6 -6
- package/dist/elements/services/propertiesService/services/AbstractPropertiesService.js +16 -4
- package/dist/elements/services/propertiesService/services/CssPropertiesService.js +1 -1
- package/dist/elements/widgets/designerView/designerCanvas.js +1 -0
- package/dist/elements/widgets/designerView/extensions/ExtensionManager.d.ts +2 -0
- package/dist/elements/widgets/designerView/extensions/ExtensionManager.js +34 -0
- package/dist/elements/widgets/designerView/extensions/FlexboxExtensionDesignViewConfigButtons.js +1 -0
- package/dist/elements/widgets/designerView/extensions/FlexboxExtensionProvider.d.ts +2 -2
- package/dist/elements/widgets/designerView/extensions/FlexboxExtensionProvider.js +4 -4
- package/dist/elements/widgets/designerView/extensions/GridExtension.d.ts +3 -11
- package/dist/elements/widgets/designerView/extensions/GridExtension.js +50 -124
- package/dist/elements/widgets/designerView/extensions/GridExtensionDesignViewConfigButtons copy.d.ts +1 -1
- package/dist/elements/widgets/designerView/extensions/GridExtensionDesignViewConfigButtons.js +1 -0
- package/dist/elements/widgets/designerView/extensions/GridExtensionProvider.d.ts +2 -2
- package/dist/elements/widgets/designerView/extensions/GridExtensionProvider.js +5 -5
- package/dist/elements/widgets/designerView/extensions/HighlightElementExtension.d.ts +11 -0
- package/dist/elements/widgets/designerView/extensions/HighlightElementExtension.js +20 -0
- package/dist/elements/widgets/designerView/extensions/HighlightElementExtensionProvider.d.ts +10 -0
- package/dist/elements/widgets/designerView/extensions/HighlightElementExtensionProvider.js +13 -0
- package/dist/elements/widgets/designerView/extensions/IExtensionManger.d.ts +1 -0
- package/dist/elements/widgets/designerView/extensions/InvisibleDivExtensionDesignViewConfigButtons.d.ts +6 -0
- package/dist/elements/widgets/designerView/extensions/InvisibleDivExtensionDesignViewConfigButtons.js +22 -0
- package/dist/elements/widgets/designerView/extensions/InvisibleDivExtensionProvider.d.ts +1 -0
- package/dist/elements/widgets/designerView/extensions/InvisibleDivExtensionProvider.js +6 -3
- package/dist/elements/widgets/designerView/extensions/InvisibleElementExtension.d.ts +11 -0
- package/dist/elements/widgets/designerView/extensions/InvisibleElementExtension.js +19 -0
- package/dist/elements/widgets/designerView/extensions/InvisibleElementExtensionDesignViewConfigButtons.d.ts +6 -0
- package/dist/elements/widgets/designerView/extensions/InvisibleElementExtensionDesignViewConfigButtons.js +22 -0
- package/dist/elements/widgets/designerView/extensions/InvisibleElementExtensionProvider.d.ts +13 -0
- package/dist/elements/widgets/designerView/extensions/InvisibleElementExtensionProvider.js +24 -0
- package/dist/elements/widgets/designerView/extensions/TransformOriginExtensionProvider.d.ts +2 -0
- package/dist/elements/widgets/designerView/extensions/TransformOriginExtensionProvider.js +13 -2
- package/dist/index.d.ts +5 -4
- package/dist/index.js +5 -4
- package/package.json +1 -1
|
@@ -6,6 +6,7 @@ import { NodeType } from './NodeType.js';
|
|
|
6
6
|
import { ExtensionType } from '../widgets/designerView/extensions/ExtensionType.js';
|
|
7
7
|
import { IDesignerExtension } from '../widgets/designerView/extensions/IDesignerExtension.js';
|
|
8
8
|
import { ISize } from '../../interfaces/ISize.js';
|
|
9
|
+
import { IDesignerExtensionProvider } from '../widgets/designerView/extensions/IDesignerExtensionProvider.js';
|
|
9
10
|
export declare class DesignItem implements IDesignItem {
|
|
10
11
|
lastContainerSize: ISize;
|
|
11
12
|
parsedNode: any;
|
|
@@ -13,6 +14,7 @@ export declare class DesignItem implements IDesignItem {
|
|
|
13
14
|
serviceContainer: ServiceContainer;
|
|
14
15
|
instanceServiceContainer: InstanceServiceContainer;
|
|
15
16
|
appliedDesignerExtensions: Map<ExtensionType, IDesignerExtension[]>;
|
|
17
|
+
shouldAppliedDesignerExtensions: Map<ExtensionType, IDesignerExtensionProvider[]>;
|
|
16
18
|
clone(): Promise<IDesignItem>;
|
|
17
19
|
replaceNode(newNode: Node): void;
|
|
18
20
|
get nodeType(): NodeType;
|
|
@@ -17,6 +17,7 @@ export class DesignItem {
|
|
|
17
17
|
serviceContainer;
|
|
18
18
|
instanceServiceContainer;
|
|
19
19
|
appliedDesignerExtensions = new Map();
|
|
20
|
+
shouldAppliedDesignerExtensions = new Map();
|
|
20
21
|
async clone() {
|
|
21
22
|
const html = DomConverter.ConvertToString([this], null, false);
|
|
22
23
|
const parsed = await this.serviceContainer.htmlParserService.parse(html, this.serviceContainer, this.instanceServiceContainer);
|
|
@@ -5,6 +5,7 @@ import { NodeType } from './NodeType.js';
|
|
|
5
5
|
import { ExtensionType } from '../widgets/designerView/extensions/ExtensionType.js';
|
|
6
6
|
import { IDesignerExtension } from '../widgets/designerView/extensions/IDesignerExtension.js';
|
|
7
7
|
import { ISize } from "../../interfaces/ISize.js";
|
|
8
|
+
import { IDesignerExtensionProvider } from '../widgets/designerView/extensions/IDesignerExtensionProvider.js';
|
|
8
9
|
export interface IDesignItem {
|
|
9
10
|
lastContainerSize: ISize;
|
|
10
11
|
replaceNode(newNode: Node): any;
|
|
@@ -44,6 +45,7 @@ export interface IDesignItem {
|
|
|
44
45
|
serviceContainer: ServiceContainer;
|
|
45
46
|
instanceServiceContainer: InstanceServiceContainer;
|
|
46
47
|
appliedDesignerExtensions: Map<ExtensionType, IDesignerExtension[]>;
|
|
48
|
+
shouldAppliedDesignerExtensions: Map<ExtensionType, IDesignerExtensionProvider[]>;
|
|
47
49
|
getOrCreateDesignItem(node: Node): any;
|
|
48
50
|
openGroup(title: string): ChangeGroup;
|
|
49
51
|
styles(): Iterable<[name: string, value: string]>;
|
|
@@ -16,7 +16,7 @@ import { TransformOriginExtensionProvider } from '../widgets/designerView/extens
|
|
|
16
16
|
import { CanvasExtensionProvider } from '../widgets/designerView/extensions/CanvasExtensionProvider.js';
|
|
17
17
|
import { PositionExtensionProvider } from '../widgets/designerView/extensions/PositionExtensionProvider.js';
|
|
18
18
|
import { PathExtensionProvider } from '../widgets/designerView/extensions/svg/PathExtensionProvider.js';
|
|
19
|
-
import {
|
|
19
|
+
import { HighlightElementExtensionProvider } from '../widgets/designerView/extensions/HighlightElementExtensionProvider.js';
|
|
20
20
|
import { NamedTools } from '../widgets/designerView/tools/NamedTools.js';
|
|
21
21
|
import { PointerTool } from '../widgets/designerView/tools/PointerTool.js';
|
|
22
22
|
import { DrawPathTool } from '../widgets/designerView/tools/DrawPathTool.js';
|
|
@@ -34,7 +34,7 @@ import { PickColorTool } from '../widgets/designerView/tools/PickColorTool.js';
|
|
|
34
34
|
import { TextTool } from '../widgets/designerView/tools/TextTool.js';
|
|
35
35
|
import { GrayOutExtensionProvider } from '../widgets/designerView/extensions/GrayOutExtensionProvider.js';
|
|
36
36
|
import { AltToEnterContainerExtensionProvider } from '../widgets/designerView/extensions/AltToEnterContainerExtensionProvider.js';
|
|
37
|
-
import {
|
|
37
|
+
import { InvisibleElementExtensionProvider } from '../widgets/designerView/extensions/InvisibleElementExtensionProvider.js';
|
|
38
38
|
import { ItemsBelowContextMenu } from '../widgets/designerView/extensions/contextMenu/ItemsBelowContextMenu.js';
|
|
39
39
|
import { GridPlacementService } from './placementService/GridPlacementService.js';
|
|
40
40
|
import { ElementAtPointService } from './elementAtPointService/ElementAtPointService.js';
|
|
@@ -47,7 +47,6 @@ import { DefaultModelCommandService } from './modelCommandService/DefaultModelCo
|
|
|
47
47
|
import { ButtonSeperatorProvider } from '../widgets/designerView/ButtonSeperatorProvider.js';
|
|
48
48
|
import { GridExtensionDesignViewConfigButtons } from '../widgets/designerView/extensions/GridExtensionDesignViewConfigButtons.js';
|
|
49
49
|
import { DemoProviderService } from './demoProviderService/DemoProviderService.js';
|
|
50
|
-
//import { CursorLinePointerExtensionProvider } from '../widgets/designerView/extensions/pointerExtensions/CursorLinePointerExtensionProvider.js';
|
|
51
50
|
import { DrawRectTool } from '../widgets/designerView/tools/DrawRectTool.js';
|
|
52
51
|
import { DrawEllipsisTool } from '../widgets/designerView/tools/DrawEllipsisTool.js';
|
|
53
52
|
import { DrawLineTool } from '../widgets/designerView/tools/DrawLineTool.js';
|
|
@@ -72,6 +71,7 @@ import { PropertyGroupsService } from './propertiesService/PropertyGroupsService
|
|
|
72
71
|
import { PlacementExtensionProvider } from '../widgets/designerView/extensions/PlacementExtensionProvider.js';
|
|
73
72
|
import { FlexboxExtensionProvider } from '../widgets/designerView/extensions/FlexboxExtensionProvider.js';
|
|
74
73
|
import { FlexboxExtensionDesignViewConfigButtons } from '../widgets/designerView/extensions/FlexboxExtensionDesignViewConfigButtons.js';
|
|
74
|
+
import { InvisibleElementExtensionDesignViewConfigButtons } from '../widgets/designerView/extensions/InvisibleElementExtensionDesignViewConfigButtons.js';
|
|
75
75
|
export function createDefaultServiceContainer() {
|
|
76
76
|
let serviceContainer = new ServiceContainer();
|
|
77
77
|
serviceContainer.register("propertyService", new PolymerPropertiesService());
|
|
@@ -96,7 +96,7 @@ export function createDefaultServiceContainer() {
|
|
|
96
96
|
serviceContainer.register("demoProviderService", new DemoProviderService());
|
|
97
97
|
serviceContainer.designerExtensions.set(ExtensionType.Permanent, [
|
|
98
98
|
// new ResizeExtensionProvider(false),
|
|
99
|
-
new
|
|
99
|
+
new InvisibleElementExtensionProvider(),
|
|
100
100
|
// new ElementDragTitleExtensionProvider(),
|
|
101
101
|
]);
|
|
102
102
|
serviceContainer.designerExtensions.set(ExtensionType.PrimarySelection, [
|
|
@@ -121,7 +121,7 @@ export function createDefaultServiceContainer() {
|
|
|
121
121
|
new FlexboxExtensionProvider()
|
|
122
122
|
]);
|
|
123
123
|
serviceContainer.designerExtensions.set(ExtensionType.MouseOver, [
|
|
124
|
-
new
|
|
124
|
+
new HighlightElementExtensionProvider()
|
|
125
125
|
]);
|
|
126
126
|
serviceContainer.designerExtensions.set(ExtensionType.Placement, [
|
|
127
127
|
new PlacementExtensionProvider()
|
|
@@ -154,7 +154,7 @@ export function createDefaultServiceContainer() {
|
|
|
154
154
|
serviceContainer.designerPointerExtensions.push(
|
|
155
155
|
//new CursorLinePointerExtensionProvider()
|
|
156
156
|
);
|
|
157
|
-
serviceContainer.designViewConfigButtons.push(new ButtonSeperatorProvider(20), new GridExtensionDesignViewConfigButtons(), new FlexboxExtensionDesignViewConfigButtons());
|
|
157
|
+
serviceContainer.designViewConfigButtons.push(new ButtonSeperatorProvider(20), new GridExtensionDesignViewConfigButtons(), new FlexboxExtensionDesignViewConfigButtons(), new ButtonSeperatorProvider(10), new InvisibleElementExtensionDesignViewConfigButtons());
|
|
158
158
|
serviceContainer.designViewToolbarButtons.push(new PointerToolButtonProvider(), new SeperatorToolProvider(22), new SelectorToolButtonProvider(), new SeperatorToolProvider(22), new ZoomToolButtonProvider(), new SeperatorToolProvider(22), new DrawToolButtonProvider(), new SeperatorToolProvider(5), new TextToolButtonProvider());
|
|
159
159
|
serviceContainer.designerContextMenuExtensions = [
|
|
160
160
|
new CopyPasteContextMenu(),
|
|
@@ -29,16 +29,28 @@ export class AbstractPropertiesService {
|
|
|
29
29
|
attributeName = PropertiesHelper.camelToDashCase(property.name);
|
|
30
30
|
if (property.type === 'object') {
|
|
31
31
|
const json = JSON.stringify(value);
|
|
32
|
-
|
|
32
|
+
if (property.propertyType == PropertyType.attribute || property.propertyType == PropertyType.propertyAndAttribute)
|
|
33
|
+
d.setAttribute(attributeName, json);
|
|
34
|
+
if (property.propertyType == PropertyType.property || property.propertyType == PropertyType.propertyAndAttribute)
|
|
35
|
+
d.element[property.name] = value;
|
|
33
36
|
}
|
|
34
37
|
else if (property.type == 'boolean' && !value) {
|
|
35
|
-
|
|
38
|
+
if (property.propertyType == PropertyType.attribute || property.propertyType == PropertyType.propertyAndAttribute)
|
|
39
|
+
d.removeAttribute(attributeName);
|
|
40
|
+
if (property.propertyType == PropertyType.property || property.propertyType == PropertyType.propertyAndAttribute)
|
|
41
|
+
d.element[property.name] = false;
|
|
36
42
|
}
|
|
37
43
|
else if (property.type == 'boolean' && value) {
|
|
38
|
-
|
|
44
|
+
if (property.propertyType == PropertyType.attribute || property.propertyType == PropertyType.propertyAndAttribute)
|
|
45
|
+
d.setAttribute(attributeName, "");
|
|
46
|
+
if (property.propertyType == PropertyType.property || property.propertyType == PropertyType.propertyAndAttribute)
|
|
47
|
+
d.element[property.name] = true;
|
|
39
48
|
}
|
|
40
49
|
else {
|
|
41
|
-
|
|
50
|
+
if (property.propertyType == PropertyType.attribute || property.propertyType == PropertyType.propertyAndAttribute)
|
|
51
|
+
d.setAttribute(attributeName, value);
|
|
52
|
+
if (property.propertyType == PropertyType.property || property.propertyType == PropertyType.propertyAndAttribute)
|
|
53
|
+
d.element[property.name] = value;
|
|
42
54
|
}
|
|
43
55
|
}
|
|
44
56
|
this._notifyChangedProperty(d, property, value);
|
|
@@ -10,7 +10,7 @@ export class CssPropertiesService extends CommonPropertiesService {
|
|
|
10
10
|
{
|
|
11
11
|
name: "display",
|
|
12
12
|
type: "list",
|
|
13
|
-
values: ["block", "inline-block", "flex", "contents", "grid", "inherit", "initial", "none"],
|
|
13
|
+
values: ["block", "inline", "inline-block", "flex", "inline-flex", "contents", "grid", "inline-grid", "inherit", "initial", "none"],
|
|
14
14
|
service: this,
|
|
15
15
|
propertyType: PropertyType.cssValue
|
|
16
16
|
},
|
|
@@ -520,6 +520,7 @@ export class DesignerCanvas extends BaseCustomWebComponentLazyAppend {
|
|
|
520
520
|
this.addDesignItems(designItems);
|
|
521
521
|
this.instanceServiceContainer.contentService.onContentChanged.emit({ changeType: 'parsed' });
|
|
522
522
|
this.instanceServiceContainer.selectionService._withoutUndoSetSelectedElements(null);
|
|
523
|
+
setTimeout(() => this.extensionManager.refreshAllAppliedExtentions(), 50);
|
|
523
524
|
}
|
|
524
525
|
addDesignItems(designItems) {
|
|
525
526
|
if (designItems) {
|
|
@@ -17,4 +17,6 @@ export declare class ExtensionManager implements IExtensionManager {
|
|
|
17
17
|
refreshExtensions(designItems: IDesignItem[], extensionType?: ExtensionType, ignoredExtension?: any): void;
|
|
18
18
|
refreshAllExtensions(designItems: IDesignItem[], ignoredExtension?: any): void;
|
|
19
19
|
refreshAllAppliedExtentions(): void;
|
|
20
|
+
reapplyAllAppliedExtentions(): void;
|
|
21
|
+
private static getAllChildElements;
|
|
20
22
|
}
|
|
@@ -50,6 +50,11 @@ export class ExtensionManager {
|
|
|
50
50
|
let extensions = [];
|
|
51
51
|
if (extProv) {
|
|
52
52
|
for (let e of extProv) {
|
|
53
|
+
let shouldAppE = designItem.shouldAppliedDesignerExtensions.get(extensionType);
|
|
54
|
+
if (!shouldAppE)
|
|
55
|
+
shouldAppE = [];
|
|
56
|
+
shouldAppE.push(e);
|
|
57
|
+
designItem.shouldAppliedDesignerExtensions.set(extensionType, shouldAppE);
|
|
53
58
|
if (e.shouldExtend(this, this.designerCanvas, designItem)) {
|
|
54
59
|
let appE = designItem.appliedDesignerExtensions.get(extensionType);
|
|
55
60
|
if (!appE)
|
|
@@ -83,6 +88,11 @@ export class ExtensionManager {
|
|
|
83
88
|
if (extProv) {
|
|
84
89
|
for (let e of extProv) {
|
|
85
90
|
for (let i of designItems) {
|
|
91
|
+
let shouldAppE = i.shouldAppliedDesignerExtensions.get(extensionType);
|
|
92
|
+
if (!shouldAppE)
|
|
93
|
+
shouldAppE = [];
|
|
94
|
+
shouldAppE.push(e);
|
|
95
|
+
i.shouldAppliedDesignerExtensions.set(extensionType, shouldAppE);
|
|
86
96
|
if (i.nodeType == NodeType.Element && e.shouldExtend(this, this.designerCanvas, i)) {
|
|
87
97
|
let appE = i.appliedDesignerExtensions.get(extensionType);
|
|
88
98
|
if (!appE)
|
|
@@ -111,6 +121,7 @@ export class ExtensionManager {
|
|
|
111
121
|
removeExtension(designItem, extensionType) {
|
|
112
122
|
if (designItem) {
|
|
113
123
|
if (extensionType) {
|
|
124
|
+
designItem.shouldAppliedDesignerExtensions.delete(extensionType);
|
|
114
125
|
let exts = designItem.appliedDesignerExtensions.get(extensionType);
|
|
115
126
|
if (exts) {
|
|
116
127
|
for (let e of exts) {
|
|
@@ -127,6 +138,7 @@ export class ExtensionManager {
|
|
|
127
138
|
}
|
|
128
139
|
}
|
|
129
140
|
else {
|
|
141
|
+
designItem.shouldAppliedDesignerExtensions.clear();
|
|
130
142
|
for (let appE of designItem.appliedDesignerExtensions) {
|
|
131
143
|
for (let e of appE[1]) {
|
|
132
144
|
try {
|
|
@@ -146,6 +158,7 @@ export class ExtensionManager {
|
|
|
146
158
|
if (designItems) {
|
|
147
159
|
if (extensionType) {
|
|
148
160
|
for (let i of designItems) {
|
|
161
|
+
i.shouldAppliedDesignerExtensions.delete(extensionType);
|
|
149
162
|
let exts = i.appliedDesignerExtensions.get(extensionType);
|
|
150
163
|
if (exts) {
|
|
151
164
|
for (let e of exts) {
|
|
@@ -164,6 +177,7 @@ export class ExtensionManager {
|
|
|
164
177
|
}
|
|
165
178
|
else {
|
|
166
179
|
for (let i of designItems) {
|
|
180
|
+
i.shouldAppliedDesignerExtensions.clear();
|
|
167
181
|
for (let appE of i.appliedDesignerExtensions) {
|
|
168
182
|
for (let e of appE[1]) {
|
|
169
183
|
try {
|
|
@@ -262,4 +276,24 @@ export class ExtensionManager {
|
|
|
262
276
|
refreshAllAppliedExtentions() {
|
|
263
277
|
this.refreshAllExtensions([...this.designItemsWithExtentions]);
|
|
264
278
|
}
|
|
279
|
+
//todo does not work with permanant, when not applied... maybe we need to do in another way
|
|
280
|
+
//maybe store the "shouldAppliedExtensions??"
|
|
281
|
+
reapplyAllAppliedExtentions() {
|
|
282
|
+
for (let d of ExtensionManager.getAllChildElements(this.designerCanvas.rootDesignItem)) {
|
|
283
|
+
const keys = [...d.shouldAppliedDesignerExtensions.keys()];
|
|
284
|
+
for (let e of keys) {
|
|
285
|
+
this.removeExtension(d, e);
|
|
286
|
+
this.applyExtension(d, e);
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
static *getAllChildElements(designItem) {
|
|
291
|
+
if (designItem.nodeType == NodeType.Element)
|
|
292
|
+
yield designItem;
|
|
293
|
+
if (designItem.hasChildren) {
|
|
294
|
+
for (let c of designItem.children())
|
|
295
|
+
for (let di of ExtensionManager.getAllChildElements(c))
|
|
296
|
+
yield di;
|
|
297
|
+
}
|
|
298
|
+
}
|
|
265
299
|
}
|
|
@@ -5,7 +5,7 @@ import { IDesignerExtension } from './IDesignerExtension.js';
|
|
|
5
5
|
import { IExtensionManager } from './IExtensionManger.js';
|
|
6
6
|
export declare const flexboxExtensionShowOverlayOptionName = "flexboxExtensionShowOverlay";
|
|
7
7
|
export declare class FlexboxExtensionProvider implements IDesignerExtensionProvider {
|
|
8
|
-
shouldExtend(extensionManager: IExtensionManager,
|
|
9
|
-
getExtension(extensionManager: IExtensionManager,
|
|
8
|
+
shouldExtend(extensionManager: IExtensionManager, designerCanvas: IDesignerCanvas, designItem: IDesignItem): boolean;
|
|
9
|
+
getExtension(extensionManager: IExtensionManager, designerCanvas: IDesignerCanvas, designItem: IDesignItem): IDesignerExtension;
|
|
10
10
|
readonly style: CSSStyleSheet;
|
|
11
11
|
}
|
|
@@ -2,14 +2,14 @@ import { css } from "@node-projects/base-custom-webcomponent";
|
|
|
2
2
|
import { FlexboxExtension } from './FlexboxExtension.js';
|
|
3
3
|
export const flexboxExtensionShowOverlayOptionName = 'flexboxExtensionShowOverlay';
|
|
4
4
|
export class FlexboxExtensionProvider {
|
|
5
|
-
shouldExtend(extensionManager,
|
|
5
|
+
shouldExtend(extensionManager, designerCanvas, designItem) {
|
|
6
6
|
const display = getComputedStyle(designItem.element).display;
|
|
7
7
|
if (display == 'flex' || display == 'inline-flex')
|
|
8
|
-
return
|
|
8
|
+
return designerCanvas.instanceServiceContainer.designContext.extensionOptions[flexboxExtensionShowOverlayOptionName] !== false;
|
|
9
9
|
return false;
|
|
10
10
|
}
|
|
11
|
-
getExtension(extensionManager,
|
|
12
|
-
return new FlexboxExtension(extensionManager,
|
|
11
|
+
getExtension(extensionManager, designerCanvas, designItem) {
|
|
12
|
+
return new FlexboxExtension(extensionManager, designerCanvas, designItem);
|
|
13
13
|
}
|
|
14
14
|
style = css `
|
|
15
15
|
.svg-flexbox { stroke: orange; fill: #9a47ff22; }
|
|
@@ -8,21 +8,13 @@ export declare class GridExtension extends AbstractExtension {
|
|
|
8
8
|
private _rects;
|
|
9
9
|
private _gaps;
|
|
10
10
|
private _resizeCircles;
|
|
11
|
+
private minPixelSize;
|
|
11
12
|
constructor(extensionManager: IExtensionManager, designerView: IDesignerCanvas, extendedItem: IDesignItem);
|
|
12
13
|
extend(): void;
|
|
13
14
|
refresh(): void;
|
|
14
15
|
dispose(): void;
|
|
15
16
|
_drawResizeCircles(gap: any, oldCircle?: SVGCircleElement): SVGCircleElement;
|
|
16
17
|
_pointerActionTypeResize(event: PointerEvent, circle: SVGCircleElement, gapColumn: any, gapRow: any): void;
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
y: any[];
|
|
20
|
-
xUnit: any[];
|
|
21
|
-
yUnit: any[];
|
|
22
|
-
};
|
|
23
|
-
_parseInitValue(stringValue: string): {
|
|
24
|
-
value: number;
|
|
25
|
-
unit: string;
|
|
26
|
-
};
|
|
27
|
-
_calculateNewSize(iSizes: any, iUnits: any, diff: any, gapIndex: any, itemWidth?: number, itemHeight?: number): string;
|
|
18
|
+
_calculateNewSize(iSizes: any, diff: any, gapIndex: any, percentTarget: 'width' | 'heigth'): string;
|
|
19
|
+
_getCssUnit(cssValue: string): string;
|
|
28
20
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { EventNames } from "../../../../enums/EventNames.js";
|
|
2
|
+
import { convertCssUnit, convertCssUnitToPixel, getCssUnit } from "../../../helper/CssUnitConverter.js";
|
|
2
3
|
import { CalculateGridInformation } from "../../../helper/GridHelper.js";
|
|
3
4
|
import { AbstractExtension } from './AbstractExtension.js';
|
|
4
5
|
import { OverlayLayer } from "./OverlayLayer.js";
|
|
@@ -8,11 +9,12 @@ export class GridExtension extends AbstractExtension {
|
|
|
8
9
|
_rects;
|
|
9
10
|
_gaps;
|
|
10
11
|
_resizeCircles;
|
|
12
|
+
minPixelSize = 10;
|
|
11
13
|
constructor(extensionManager, designerView, extendedItem) {
|
|
12
14
|
super(extensionManager, designerView, extendedItem);
|
|
13
15
|
}
|
|
14
16
|
extend() {
|
|
15
|
-
|
|
17
|
+
let gridInformation = CalculateGridInformation(this.extendedItem);
|
|
16
18
|
this._rects = new Array(gridInformation.cells.length);
|
|
17
19
|
gridInformation.cells.forEach((cellRow, i) => {
|
|
18
20
|
this._rects[i] = new Array(cellRow.length);
|
|
@@ -22,7 +24,7 @@ export class GridExtension extends AbstractExtension {
|
|
|
22
24
|
this.refresh();
|
|
23
25
|
}
|
|
24
26
|
refresh() {
|
|
25
|
-
|
|
27
|
+
let gridInformation = CalculateGridInformation(this.extendedItem);
|
|
26
28
|
gridInformation.gaps.forEach((gap, i) => {
|
|
27
29
|
this._gaps[i] = this._drawRect(gap.x, gap.y, gap.width, gap.height, 'svg-grid-gap', this._gaps[i], OverlayLayer.Foregorund);
|
|
28
30
|
this._resizeCircles[i] = this._drawResizeCircles(gap, this._resizeCircles[i]);
|
|
@@ -41,7 +43,7 @@ export class GridExtension extends AbstractExtension {
|
|
|
41
43
|
this._removeAllOverlays();
|
|
42
44
|
}
|
|
43
45
|
_drawResizeCircles(gap, oldCircle) {
|
|
44
|
-
|
|
46
|
+
let resizeCircle = this._drawCircle((gap.x + (gap.width / 2)), (gap.y + (gap.height / 2)), 1.5, 'svg-grid-resizer', oldCircle, OverlayLayer.Foregorund);
|
|
45
47
|
resizeCircle.style.pointerEvents = "all";
|
|
46
48
|
resizeCircle.style.cursor = gap.width < gap.height ? "ew-resize" : "ns-resize";
|
|
47
49
|
if (!oldCircle) {
|
|
@@ -57,18 +59,18 @@ export class GridExtension extends AbstractExtension {
|
|
|
57
59
|
case EventNames.PointerDown:
|
|
58
60
|
circle.setPointerCapture(event.pointerId);
|
|
59
61
|
this._initialPoint = { x: event.clientX, y: event.clientY };
|
|
60
|
-
this._initialSizes = this.
|
|
62
|
+
this._initialSizes = { x: this.extendedItem.element.style.gridTemplateColumns.split(' '), y: this.extendedItem.element.style.gridTemplateRows.split(' ') };
|
|
61
63
|
break;
|
|
62
64
|
case EventNames.PointerMove:
|
|
63
65
|
if (this._initialPoint) {
|
|
64
|
-
|
|
66
|
+
let elementStyle = this.extendedItem.element.style;
|
|
65
67
|
this.extendedItem.element.getBoundingClientRect;
|
|
66
68
|
switch (circle.style.cursor) {
|
|
67
69
|
case "ew-resize":
|
|
68
|
-
elementStyle.gridTemplateColumns = this._calculateNewSize(this._initialSizes.x,
|
|
70
|
+
elementStyle.gridTemplateColumns = this._calculateNewSize(this._initialSizes.x, (event.clientX - this._initialPoint.x) / this.designerCanvas.zoomFactor, gapColumn, "width");
|
|
69
71
|
break;
|
|
70
72
|
case "ns-resize":
|
|
71
|
-
elementStyle.gridTemplateRows = this._calculateNewSize(this._initialSizes.y,
|
|
73
|
+
elementStyle.gridTemplateRows = this._calculateNewSize(this._initialSizes.y, (event.clientY - this._initialPoint.y) / this.designerCanvas.zoomFactor, gapRow, "heigth");
|
|
72
74
|
break;
|
|
73
75
|
}
|
|
74
76
|
this.refresh();
|
|
@@ -85,149 +87,73 @@ export class GridExtension extends AbstractExtension {
|
|
|
85
87
|
break;
|
|
86
88
|
}
|
|
87
89
|
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
var retYUnit = [];
|
|
93
|
-
var tmpX = style.gridTemplateColumns.split(' ');
|
|
94
|
-
tmpX.forEach(x => {
|
|
95
|
-
var r = this._parseInitValue(x);
|
|
96
|
-
retX.push(r.value);
|
|
97
|
-
retXUnit.push(r.unit);
|
|
98
|
-
});
|
|
99
|
-
var tmpY = style.gridTemplateRows.split(' ');
|
|
100
|
-
tmpY.forEach(y => {
|
|
101
|
-
var r = this._parseInitValue(y);
|
|
102
|
-
retY.push(r.value);
|
|
103
|
-
retYUnit.push(r.unit);
|
|
104
|
-
});
|
|
105
|
-
return { x: retX, y: retY, xUnit: retXUnit, yUnit: retYUnit };
|
|
106
|
-
}
|
|
107
|
-
_parseInitValue(stringValue) {
|
|
108
|
-
var i = stringValue.length;
|
|
109
|
-
while (isNaN(parseInt(stringValue.substring(i - 1, stringValue.length))))
|
|
110
|
-
i--;
|
|
111
|
-
return { value: parseFloat(stringValue.substring(0, i)), unit: stringValue.substring(i, stringValue.length) };
|
|
112
|
-
}
|
|
113
|
-
_calculateNewSize(iSizes, iUnits, diff, gapIndex, itemWidth, itemHeight) {
|
|
114
|
-
var newSizes = [];
|
|
115
|
-
var newUnits = [];
|
|
116
|
-
var unitFactors = [];
|
|
117
|
-
var edited = [];
|
|
118
|
-
for (var i = 0; i < iSizes.length; i++) {
|
|
90
|
+
_calculateNewSize(iSizes, diff, gapIndex, percentTarget) {
|
|
91
|
+
let newSizes = [];
|
|
92
|
+
let edited = [];
|
|
93
|
+
for (let i = 0; i < iSizes.length; i++) {
|
|
119
94
|
if (i + 1 == gapIndex || i == gapIndex) {
|
|
120
|
-
if (
|
|
121
|
-
var percentDiff = itemWidth ? (1 - ((itemWidth - diff) / itemWidth)) * 100 : itemHeight ? (1 - ((itemHeight - diff) / itemHeight)) * 100 : null;
|
|
122
|
-
newSizes.push(i + 1 == gapIndex ? iSizes[i] + percentDiff : i == gapIndex ? iSizes[i] - percentDiff : null);
|
|
123
|
-
unitFactors.push(null);
|
|
124
|
-
edited.push(true);
|
|
125
|
-
}
|
|
126
|
-
else if (iUnits[i] == "fr") {
|
|
95
|
+
if (this._getCssUnit(iSizes[i]) == "fr") {
|
|
127
96
|
newSizes.push(iSizes[i]);
|
|
128
|
-
unitFactors.push(null);
|
|
129
97
|
edited.push(true);
|
|
130
98
|
}
|
|
131
99
|
else {
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
case "mm":
|
|
135
|
-
unitFactor = 1 / 3.78;
|
|
136
|
-
break;
|
|
137
|
-
case "cm":
|
|
138
|
-
unitFactor = 1 / 37.8;
|
|
139
|
-
break;
|
|
140
|
-
case "in":
|
|
141
|
-
unitFactor = 1 / 96;
|
|
142
|
-
break;
|
|
143
|
-
case "px":
|
|
144
|
-
unitFactor = 1;
|
|
145
|
-
break;
|
|
146
|
-
case "pt":
|
|
147
|
-
unitFactor = 3;
|
|
148
|
-
break;
|
|
149
|
-
case "pc":
|
|
150
|
-
unitFactor = 16;
|
|
151
|
-
break;
|
|
152
|
-
}
|
|
153
|
-
newSizes.push(i + 1 == gapIndex ? iSizes[i] + diff * unitFactor : i == gapIndex ? iSizes[i] - diff * unitFactor : null);
|
|
154
|
-
unitFactors.push(unitFactor);
|
|
100
|
+
let convertedDiff = parseFloat(convertCssUnit(diff, this.extendedItem.element, percentTarget, this._getCssUnit(iSizes[i])).toString());
|
|
101
|
+
newSizes.push((i + 1 == gapIndex ? parseFloat(iSizes[i]) + convertedDiff : i == gapIndex ? parseFloat(iSizes[i]) - convertedDiff : null) + this._getCssUnit(iSizes[i]));
|
|
155
102
|
edited.push(true);
|
|
156
103
|
}
|
|
157
104
|
}
|
|
158
105
|
else {
|
|
159
106
|
newSizes.push(iSizes[i]);
|
|
160
|
-
unitFactors.push(null);
|
|
161
107
|
edited.push(false);
|
|
162
108
|
}
|
|
163
|
-
newUnits.push(iUnits[i]);
|
|
164
109
|
}
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
for (var i = 0; i < newSizes.length; i++) {
|
|
169
|
-
if (newUnits[i] == "%" && newSizes[i] < minPercentSize) {
|
|
170
|
-
if (edited[i + 1] && newUnits[i + 1] == "%") {
|
|
171
|
-
newSizes[i + 1] = iSizes[i] + iSizes[i + 1] - minPercentSize;
|
|
172
|
-
newSizes[i] = minPercentSize;
|
|
173
|
-
break;
|
|
174
|
-
}
|
|
175
|
-
else if (edited[i - 1] && newUnits[i - 1] == "%") {
|
|
176
|
-
newSizes[i - 1] = iSizes[i] + iSizes[i - 1] - minPercentSize;
|
|
177
|
-
newSizes[i] = minPercentSize;
|
|
178
|
-
break;
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
else if (newUnits[i] == "fr") {
|
|
182
|
-
var editedIndex;
|
|
110
|
+
for (let i = 0; i < newSizes.length; i++) {
|
|
111
|
+
if (this._getCssUnit(newSizes[i]) == "fr") {
|
|
112
|
+
let editedIndex;
|
|
183
113
|
if (edited[i + 1])
|
|
184
114
|
editedIndex = i + 1;
|
|
185
115
|
else if (edited[i - 1])
|
|
186
116
|
editedIndex = i - 1;
|
|
187
117
|
else
|
|
188
118
|
continue;
|
|
189
|
-
if
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
var totalSize = itemWidth ? itemWidth : itemHeight ? itemHeight : null;
|
|
193
|
-
var totalSizeExceptFr = 0;
|
|
194
|
-
newSizes.forEach(newSize => totalSizeExceptFr += newSize);
|
|
195
|
-
var totalSizeExceptEdited = 0;
|
|
196
|
-
newSizes.forEach((newSize, k) => { if (!edited[k])
|
|
197
|
-
totalSizeExceptEdited += newSize; });
|
|
198
|
-
if (totalSize - totalSizeExceptFr < minPixelSize)
|
|
199
|
-
newSizes[editedIndex] = totalSize - totalSizeExceptEdited - minPixelSize;
|
|
119
|
+
//check if newSize smaller than minimum
|
|
120
|
+
if (convertCssUnitToPixel(newSizes[editedIndex], this.extendedItem.element, percentTarget) < this.minPixelSize) {
|
|
121
|
+
newSizes[editedIndex] = convertCssUnit(this.minPixelSize, this.extendedItem.element, percentTarget, this._getCssUnit(newSizes[editedIndex]));
|
|
200
122
|
}
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
123
|
+
//check if fr is smaller than 10px
|
|
124
|
+
let totalSize = parseFloat(percentTarget == "width" ? this.extendedItem.element.style.width : this.extendedItem.element.style.height);
|
|
125
|
+
let totalGapSize = percentTarget == "width" ?
|
|
126
|
+
parseFloat(this.extendedItem.element.style.columnGap) * this.extendedItem.element.style.gridTemplateColumns.split(' ').length - 1 :
|
|
127
|
+
parseFloat(this.extendedItem.element.style.rowGap) * this.extendedItem.element.style.gridTemplateColumns.split(' ').length - 1;
|
|
128
|
+
let totalSizeExceptFr = 0;
|
|
129
|
+
newSizes.forEach(newSize => {
|
|
130
|
+
if (this._getCssUnit(newSize) != "fr")
|
|
131
|
+
totalSizeExceptFr += convertCssUnitToPixel(newSize, this.extendedItem.element, percentTarget);
|
|
132
|
+
});
|
|
133
|
+
let totalSizeExceptEdited = 0;
|
|
134
|
+
newSizes.forEach((newSize, k) => {
|
|
135
|
+
if (!edited[k])
|
|
136
|
+
totalSizeExceptEdited += convertCssUnitToPixel(newSize, this.extendedItem.element, percentTarget);
|
|
137
|
+
});
|
|
138
|
+
if (totalSize - totalSizeExceptFr - totalGapSize < this.minPixelSize) {
|
|
139
|
+
newSizes[editedIndex] = convertCssUnit(totalSize - totalSizeExceptEdited - totalGapSize - this.minPixelSize, this.extendedItem.element, percentTarget, this._getCssUnit(iSizes[editedIndex]));
|
|
212
140
|
}
|
|
213
141
|
}
|
|
214
142
|
else {
|
|
215
|
-
if (newSizes[i]
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
newSizes[
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
else if (edited[i - 1]) {
|
|
222
|
-
newSizes[i - 1] = iSizes[i] + iSizes[i - 1] - minPixelSize * unitFactors[i - 1];
|
|
223
|
-
newSizes[i] = minPixelSize * unitFactors[i];
|
|
224
|
-
break;
|
|
225
|
-
}
|
|
143
|
+
if (convertCssUnitToPixel(newSizes[i], this.extendedItem.element, percentTarget) < this.minPixelSize) {
|
|
144
|
+
let index = edited[i + 1] ? i + 1 : edited[i - 1] ? i - 1 : null;
|
|
145
|
+
if (this._getCssUnit(newSizes[index]) != "fr")
|
|
146
|
+
newSizes[index] = convertCssUnit(convertCssUnitToPixel(newSizes[i], this.extendedItem.element, percentTarget) + convertCssUnitToPixel(newSizes[index], this.extendedItem.element, percentTarget) - this.minPixelSize, this.extendedItem.element, percentTarget, this._getCssUnit(newSizes[index]));
|
|
147
|
+
newSizes[i] = convertCssUnit(this.minPixelSize, this.extendedItem.element, percentTarget, this._getCssUnit(newSizes[i]));
|
|
148
|
+
break;
|
|
226
149
|
}
|
|
227
150
|
}
|
|
228
151
|
}
|
|
229
|
-
|
|
230
|
-
|
|
152
|
+
let retVal = "";
|
|
153
|
+
newSizes.forEach(newSize => retVal += newSize + ' ');
|
|
231
154
|
return retVal;
|
|
232
155
|
}
|
|
156
|
+
_getCssUnit(cssValue) {
|
|
157
|
+
return cssValue.substring(cssValue.length - 2, cssValue.length) == "fr" ? "fr" : getCssUnit(cssValue);
|
|
158
|
+
}
|
|
233
159
|
}
|
package/dist/elements/widgets/designerView/extensions/GridExtensionDesignViewConfigButtons copy.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { DesignerView } from "../designerView.js";
|
|
2
|
-
import { IDesignerCanvas } from
|
|
2
|
+
import { IDesignerCanvas } from '../IDesignerCanvas.js';
|
|
3
3
|
import { IDesignViewConfigButtonsProvider } from "../IDesignViewConfigButtonsProvider.js";
|
|
4
4
|
export declare class GridExtensionDesignViewConfigButtons implements IDesignViewConfigButtonsProvider {
|
|
5
5
|
provideButtons(designerView: DesignerView, designerCanvas: IDesignerCanvas): HTMLElement[];
|
|
@@ -5,7 +5,7 @@ import { IDesignerExtension } from './IDesignerExtension.js';
|
|
|
5
5
|
import { IExtensionManager } from './IExtensionManger.js';
|
|
6
6
|
export declare const gridExtensionShowOverlayOptionName = "gridExtensionShowOverlay";
|
|
7
7
|
export declare class GridExtensionProvider implements IDesignerExtensionProvider {
|
|
8
|
-
shouldExtend(extensionManager: IExtensionManager,
|
|
9
|
-
getExtension(extensionManager: IExtensionManager,
|
|
8
|
+
shouldExtend(extensionManager: IExtensionManager, designerCanvas: IDesignerCanvas, designItem: IDesignItem): boolean;
|
|
9
|
+
getExtension(extensionManager: IExtensionManager, designerCanvas: IDesignerCanvas, designItem: IDesignItem): IDesignerExtension;
|
|
10
10
|
readonly style: CSSStyleSheet;
|
|
11
11
|
}
|
|
@@ -2,19 +2,19 @@ import { GridExtension } from './GridExtension.js';
|
|
|
2
2
|
import { css } from "@node-projects/base-custom-webcomponent";
|
|
3
3
|
export const gridExtensionShowOverlayOptionName = 'gridExtensionShowOverlay';
|
|
4
4
|
export class GridExtensionProvider {
|
|
5
|
-
shouldExtend(extensionManager,
|
|
5
|
+
shouldExtend(extensionManager, designerCanvas, designItem) {
|
|
6
6
|
const display = getComputedStyle(designItem.element).display;
|
|
7
7
|
if (display == 'grid' || display == 'inline-grid')
|
|
8
|
-
return
|
|
8
|
+
return designerCanvas.instanceServiceContainer.designContext.extensionOptions[gridExtensionShowOverlayOptionName] !== false;
|
|
9
9
|
return false;
|
|
10
10
|
}
|
|
11
|
-
getExtension(extensionManager,
|
|
12
|
-
return new GridExtension(extensionManager,
|
|
11
|
+
getExtension(extensionManager, designerCanvas, designItem) {
|
|
12
|
+
return new GridExtension(extensionManager, designerCanvas, designItem);
|
|
13
13
|
}
|
|
14
14
|
style = css `
|
|
15
15
|
.svg-grid { stroke: orange; stroke-dasharray: 5; fill: #ff944722; }
|
|
16
16
|
.svg-grid-area { font-size: 8px; }
|
|
17
17
|
.svg-grid-gap { stroke: orange; stroke-dasharray: 5; fill: #0000ff22; }
|
|
18
|
-
.svg-grid-
|
|
18
|
+
.svg-grid-resizer { fill: white; stroke: #3899ec }
|
|
19
19
|
`;
|
|
20
20
|
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { IDesignItem } from '../../../item/IDesignItem.js';
|
|
2
|
+
import { IDesignerCanvas } from '../IDesignerCanvas.js';
|
|
3
|
+
import { AbstractExtension } from './AbstractExtension.js';
|
|
4
|
+
import { IExtensionManager } from './IExtensionManger.js';
|
|
5
|
+
export declare class HighlightElementExtension 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,20 @@
|
|
|
1
|
+
import { getDesignerCanvasNormalizedTransformedCornerDOMPoints } from '../../../helper/TransformHelper.js';
|
|
2
|
+
import { AbstractExtension } from './AbstractExtension.js';
|
|
3
|
+
const offset = 3;
|
|
4
|
+
export class HighlightElementExtension extends AbstractExtension {
|
|
5
|
+
_rect;
|
|
6
|
+
constructor(extensionManager, designerView, extendedItem) {
|
|
7
|
+
super(extensionManager, designerView, extendedItem);
|
|
8
|
+
}
|
|
9
|
+
extend() {
|
|
10
|
+
this.refresh();
|
|
11
|
+
}
|
|
12
|
+
refresh() {
|
|
13
|
+
let transformedCornerPoints = getDesignerCanvasNormalizedTransformedCornerDOMPoints(this.extendedItem.element, { x: offset, y: offset }, this.designerCanvas);
|
|
14
|
+
this._rect = this._drawTransformedRect(transformedCornerPoints, 'svg-hover', this._rect);
|
|
15
|
+
this._rect.style.strokeWidth = (2 / this.designerCanvas.zoomFactor).toString();
|
|
16
|
+
}
|
|
17
|
+
dispose() {
|
|
18
|
+
this._removeAllOverlays();
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { IDesignerExtensionProvider } from './IDesignerExtensionProvider.js';
|
|
2
|
+
import { IDesignItem } from '../../../item/IDesignItem.js';
|
|
3
|
+
import { IDesignerCanvas } from '../IDesignerCanvas.js';
|
|
4
|
+
import { IDesignerExtension } from './IDesignerExtension.js';
|
|
5
|
+
import { IExtensionManager } from './IExtensionManger.js';
|
|
6
|
+
export declare class HighlightElementExtensionProvider 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
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { HighlightElementExtension } from './HighlightElementExtension.js';
|
|
2
|
+
import { css } from "@node-projects/base-custom-webcomponent";
|
|
3
|
+
export class HighlightElementExtensionProvider {
|
|
4
|
+
shouldExtend(extensionManager, designerView, designItem) {
|
|
5
|
+
return true;
|
|
6
|
+
}
|
|
7
|
+
getExtension(extensionManager, designerView, designItem) {
|
|
8
|
+
return new HighlightElementExtension(extensionManager, designerView, designItem);
|
|
9
|
+
}
|
|
10
|
+
style = css `
|
|
11
|
+
.svg-hover { stroke: #90caf9; fill: none; }
|
|
12
|
+
`;
|
|
13
|
+
}
|
|
@@ -10,4 +10,5 @@ export interface IExtensionManager {
|
|
|
10
10
|
refreshExtensions(designItems: IDesignItem[], extensionType?: ExtensionType): any;
|
|
11
11
|
refreshAllExtensions(designItems: IDesignItem[], ignoredExtension?: any): any;
|
|
12
12
|
refreshAllAppliedExtentions(): any;
|
|
13
|
+
reapplyAllAppliedExtentions(): any;
|
|
13
14
|
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { DesignerView } from "../designerView.js";
|
|
2
|
+
import { IDesignerCanvas } from '../IDesignerCanvas.js';
|
|
3
|
+
import { IDesignViewConfigButtonsProvider } from "../IDesignViewConfigButtonsProvider.js";
|
|
4
|
+
export declare class InvisibleDivExtensionDesignViewConfigButtons implements IDesignViewConfigButtonsProvider {
|
|
5
|
+
provideButtons(designerView: DesignerView, designerCanvas: IDesignerCanvas): HTMLElement[];
|
|
6
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { invisibleDivExtensionShowOverlayOptionName } from "./InvisibleElementExtensionProvider.js";
|
|
2
|
+
export class InvisibleDivExtensionDesignViewConfigButtons {
|
|
3
|
+
provideButtons(designerView, designerCanvas) {
|
|
4
|
+
const extensionOptions = designerCanvas.instanceServiceContainer.designContext.extensionOptions;
|
|
5
|
+
const btn = document.createElement('div');
|
|
6
|
+
btn.innerText = 'I';
|
|
7
|
+
btn.title = 'show invisible div overlay';
|
|
8
|
+
btn.className = 'toolbar-control';
|
|
9
|
+
if (extensionOptions[invisibleDivExtensionShowOverlayOptionName] !== false)
|
|
10
|
+
btn.classList.add('selected');
|
|
11
|
+
btn.onclick = () => {
|
|
12
|
+
const val = extensionOptions[invisibleDivExtensionShowOverlayOptionName];
|
|
13
|
+
extensionOptions[invisibleDivExtensionShowOverlayOptionName] = val === false ? true : false;
|
|
14
|
+
if (extensionOptions[invisibleDivExtensionShowOverlayOptionName] !== false)
|
|
15
|
+
btn.classList.add('selected');
|
|
16
|
+
else
|
|
17
|
+
btn.classList.remove('selected');
|
|
18
|
+
designerCanvas.extensionManager.reapplyAllAppliedExtentions();
|
|
19
|
+
};
|
|
20
|
+
return [btn];
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -3,6 +3,7 @@ import { IDesignItem } from '../../../item/IDesignItem.js';
|
|
|
3
3
|
import { IDesignerCanvas } from '../IDesignerCanvas.js';
|
|
4
4
|
import { IDesignerExtension } from './IDesignerExtension.js';
|
|
5
5
|
import { IExtensionManager } from './IExtensionManger.js';
|
|
6
|
+
export declare const invisibleDivExtensionShowOverlayOptionName = "invisibleDivExtensionShowOverlay";
|
|
6
7
|
export declare class InvisibleDivExtensionProvider implements IDesignerExtensionProvider {
|
|
7
8
|
shouldExtend(extensionManager: IExtensionManager, designerCanvas: IDesignerCanvas, designItem: IDesignItem): boolean;
|
|
8
9
|
getExtension(extensionManager: IExtensionManager, designerCanvas: IDesignerCanvas, designItem: IDesignItem): IDesignerExtension;
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import { InvisibleDivExtension } from './InvisibleDivExtension.js';
|
|
2
2
|
import { css } from "@node-projects/base-custom-webcomponent";
|
|
3
|
+
export const invisibleDivExtensionShowOverlayOptionName = 'invisibleDivExtensionShowOverlay';
|
|
3
4
|
export class InvisibleDivExtensionProvider {
|
|
4
5
|
shouldExtend(extensionManager, designerCanvas, designItem) {
|
|
5
|
-
if (
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
if (designerCanvas.instanceServiceContainer.designContext.extensionOptions[invisibleDivExtensionShowOverlayOptionName] !== false) {
|
|
7
|
+
if (designItem.name == 'div') {
|
|
8
|
+
const st = window.getComputedStyle(designItem.element);
|
|
9
|
+
return st.backgroundColor == 'rgba(0, 0, 0, 0)' && st.borderStyle == 'none';
|
|
10
|
+
}
|
|
8
11
|
}
|
|
9
12
|
return false;
|
|
10
13
|
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { IDesignItem } from '../../../item/IDesignItem.js';
|
|
2
|
+
import { IDesignerCanvas } from '../IDesignerCanvas.js';
|
|
3
|
+
import { AbstractExtension } from './AbstractExtension.js';
|
|
4
|
+
import { IExtensionManager } from './IExtensionManger.js';
|
|
5
|
+
export declare class InvisibleElementExtension extends AbstractExtension {
|
|
6
|
+
private _rect;
|
|
7
|
+
constructor(extensionManager: IExtensionManager, designerCanvas: IDesignerCanvas, extendedItem: IDesignItem);
|
|
8
|
+
extend(): void;
|
|
9
|
+
refresh(): void;
|
|
10
|
+
dispose(): void;
|
|
11
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { getDesignerCanvasNormalizedTransformedCornerDOMPoints } from '../../../helper/TransformHelper.js';
|
|
2
|
+
import { AbstractExtension } from './AbstractExtension.js';
|
|
3
|
+
import { OverlayLayer } from "./OverlayLayer.js";
|
|
4
|
+
export class InvisibleElementExtension extends AbstractExtension {
|
|
5
|
+
_rect;
|
|
6
|
+
constructor(extensionManager, designerCanvas, extendedItem) {
|
|
7
|
+
super(extensionManager, designerCanvas, extendedItem);
|
|
8
|
+
}
|
|
9
|
+
extend() {
|
|
10
|
+
this.refresh();
|
|
11
|
+
}
|
|
12
|
+
refresh() {
|
|
13
|
+
let transformedCornerPoints = getDesignerCanvasNormalizedTransformedCornerDOMPoints(this.extendedItem.element, null, this.designerCanvas);
|
|
14
|
+
this._rect = this._drawTransformedRect(transformedCornerPoints, 'svg-invisible-div', this._rect, OverlayLayer.Background);
|
|
15
|
+
}
|
|
16
|
+
dispose() {
|
|
17
|
+
this._removeAllOverlays();
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { DesignerView } from "../designerView.js";
|
|
2
|
+
import { IDesignerCanvas } from '../IDesignerCanvas.js';
|
|
3
|
+
import { IDesignViewConfigButtonsProvider } from "../IDesignViewConfigButtonsProvider.js";
|
|
4
|
+
export declare class InvisibleElementExtensionDesignViewConfigButtons implements IDesignViewConfigButtonsProvider {
|
|
5
|
+
provideButtons(designerView: DesignerView, designerCanvas: IDesignerCanvas): HTMLElement[];
|
|
6
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { invisibleElementExtensionShowOverlayOptionName } from "./InvisibleElementExtensionProvider.js";
|
|
2
|
+
export class InvisibleElementExtensionDesignViewConfigButtons {
|
|
3
|
+
provideButtons(designerView, designerCanvas) {
|
|
4
|
+
const extensionOptions = designerCanvas.instanceServiceContainer.designContext.extensionOptions;
|
|
5
|
+
const btn = document.createElement('div');
|
|
6
|
+
btn.innerText = 'I';
|
|
7
|
+
btn.title = 'show invisible div overlay';
|
|
8
|
+
btn.className = 'toolbar-control';
|
|
9
|
+
if (extensionOptions[invisibleElementExtensionShowOverlayOptionName] !== false)
|
|
10
|
+
btn.classList.add('selected');
|
|
11
|
+
btn.onclick = () => {
|
|
12
|
+
const val = extensionOptions[invisibleElementExtensionShowOverlayOptionName];
|
|
13
|
+
extensionOptions[invisibleElementExtensionShowOverlayOptionName] = val === false ? true : false;
|
|
14
|
+
if (extensionOptions[invisibleElementExtensionShowOverlayOptionName] !== false)
|
|
15
|
+
btn.classList.add('selected');
|
|
16
|
+
else
|
|
17
|
+
btn.classList.remove('selected');
|
|
18
|
+
designerCanvas.extensionManager.reapplyAllAppliedExtentions();
|
|
19
|
+
};
|
|
20
|
+
return [btn];
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { IDesignerExtensionProvider } from './IDesignerExtensionProvider.js';
|
|
2
|
+
import { IDesignItem } from '../../../item/IDesignItem.js';
|
|
3
|
+
import { IDesignerCanvas } from '../IDesignerCanvas.js';
|
|
4
|
+
import { IDesignerExtension } from './IDesignerExtension.js';
|
|
5
|
+
import { IExtensionManager } from './IExtensionManger.js';
|
|
6
|
+
export declare const invisibleElementExtensionShowOverlayOptionName = "invisibleElementExtensionShowOverlay";
|
|
7
|
+
export declare class InvisibleElementExtensionProvider implements IDesignerExtensionProvider {
|
|
8
|
+
elementFilter: (designItem: IDesignItem) => boolean;
|
|
9
|
+
constructor(elementFilter?: (designItem: IDesignItem) => boolean);
|
|
10
|
+
shouldExtend(extensionManager: IExtensionManager, designerCanvas: IDesignerCanvas, designItem: IDesignItem): boolean;
|
|
11
|
+
getExtension(extensionManager: IExtensionManager, designerCanvas: IDesignerCanvas, designItem: IDesignItem): IDesignerExtension;
|
|
12
|
+
readonly style: CSSStyleSheet;
|
|
13
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { InvisibleElementExtension as InvisibleElementExtension } from './InvisibleElementExtension.js';
|
|
2
|
+
import { css } from "@node-projects/base-custom-webcomponent";
|
|
3
|
+
export const invisibleElementExtensionShowOverlayOptionName = 'invisibleElementExtensionShowOverlay';
|
|
4
|
+
export class InvisibleElementExtensionProvider {
|
|
5
|
+
elementFilter;
|
|
6
|
+
constructor(elementFilter = (d) => d.name == 'div' && window.getComputedStyle(d.element).display != 'inline') {
|
|
7
|
+
this.elementFilter = elementFilter;
|
|
8
|
+
}
|
|
9
|
+
shouldExtend(extensionManager, designerCanvas, designItem) {
|
|
10
|
+
if (designerCanvas.instanceServiceContainer.designContext.extensionOptions[invisibleElementExtensionShowOverlayOptionName] !== false) {
|
|
11
|
+
if (this.elementFilter(designItem)) {
|
|
12
|
+
const st = window.getComputedStyle(designItem.element);
|
|
13
|
+
return st.backgroundColor == 'rgba(0, 0, 0, 0)' && st.borderStyle == 'none';
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
getExtension(extensionManager, designerCanvas, designItem) {
|
|
19
|
+
return new InvisibleElementExtension(extensionManager, designerCanvas, designItem);
|
|
20
|
+
}
|
|
21
|
+
style = css `
|
|
22
|
+
.svg-invisible-div { stroke: lightgray; fill: transparent; stroke-width: 1;
|
|
23
|
+
`;
|
|
24
|
+
}
|
|
@@ -4,6 +4,8 @@ import { IDesignerCanvas } from '../IDesignerCanvas.js';
|
|
|
4
4
|
import { IDesignerExtension } from './IDesignerExtension.js';
|
|
5
5
|
import { IExtensionManager } from './IExtensionManger.js';
|
|
6
6
|
export declare class TransformOriginExtensionProvider implements IDesignerExtensionProvider {
|
|
7
|
+
showOnlyWhenSet: boolean;
|
|
8
|
+
constructor(showOnlyWhenSet?: boolean);
|
|
7
9
|
shouldExtend(extensionManager: IExtensionManager, designerView: IDesignerCanvas, designItem: IDesignItem): boolean;
|
|
8
10
|
getExtension(extensionManager: IExtensionManager, designerView: IDesignerCanvas, designItem: IDesignItem): IDesignerExtension;
|
|
9
11
|
readonly style: CSSStyleSheet;
|
|
@@ -1,10 +1,21 @@
|
|
|
1
1
|
import { TransformOriginExtension } from './TransformOriginExtension.js';
|
|
2
2
|
import { css } from "@node-projects/base-custom-webcomponent";
|
|
3
3
|
export class TransformOriginExtensionProvider {
|
|
4
|
+
showOnlyWhenSet;
|
|
5
|
+
constructor(showOnlyWhenSet = true) {
|
|
6
|
+
this.showOnlyWhenSet = showOnlyWhenSet;
|
|
7
|
+
}
|
|
4
8
|
shouldExtend(extensionManager, designerView, designItem) {
|
|
5
9
|
if (designItem.node instanceof HTMLElement || (designItem.node instanceof SVGElement && designItem.node.localName === 'svg')) {
|
|
6
|
-
|
|
7
|
-
|
|
10
|
+
if (!this.showOnlyWhenSet)
|
|
11
|
+
return true;
|
|
12
|
+
if (designItem.hasStyle('transformOrigin'))
|
|
13
|
+
return true;
|
|
14
|
+
if (getComputedStyle(designItem.element).display != 'inline' && designItem.element.getBoundingClientRect) {
|
|
15
|
+
const r = designItem.element.getBoundingClientRect();
|
|
16
|
+
if (getComputedStyle(designItem.element).transformOrigin != r.width / 2 + 'px ' + r.height / 2 + 'px')
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
8
19
|
}
|
|
9
20
|
return false;
|
|
10
21
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -168,10 +168,11 @@ export * from "./elements/widgets/designerView/extensions/GrayOutDragOverContain
|
|
|
168
168
|
export * from "./elements/widgets/designerView/extensions/GrayOutDragOverContainerExtensionProvider.js";
|
|
169
169
|
export * from "./elements/widgets/designerView/extensions/GridExtension.js";
|
|
170
170
|
export * from "./elements/widgets/designerView/extensions/GridExtensionProvider.js";
|
|
171
|
-
export * from "./elements/widgets/designerView/extensions/
|
|
172
|
-
export * from "./elements/widgets/designerView/extensions/
|
|
173
|
-
export * from "./elements/widgets/designerView/extensions/
|
|
174
|
-
export * from "./elements/widgets/designerView/extensions/
|
|
171
|
+
export * from "./elements/widgets/designerView/extensions/InvisibleElementExtension.js";
|
|
172
|
+
export * from "./elements/widgets/designerView/extensions/InvisibleElementExtensionProvider.js";
|
|
173
|
+
export * from "./elements/widgets/designerView/extensions/InvisibleElementExtensionDesignViewConfigButtons.js";
|
|
174
|
+
export * from "./elements/widgets/designerView/extensions/HighlightElementExtension.js";
|
|
175
|
+
export * from "./elements/widgets/designerView/extensions/HighlightElementExtensionProvider.js";
|
|
175
176
|
export * from "./elements/widgets/designerView/extensions/svg/PathExtension.js";
|
|
176
177
|
export * from "./elements/widgets/designerView/extensions/svg/PathExtensionProvider.js";
|
|
177
178
|
export * from "./elements/widgets/designerView/extensions/PositionExtension.js";
|
package/dist/index.js
CHANGED
|
@@ -125,10 +125,11 @@ export * from "./elements/widgets/designerView/extensions/GrayOutDragOverContain
|
|
|
125
125
|
export * from "./elements/widgets/designerView/extensions/GrayOutDragOverContainerExtensionProvider.js";
|
|
126
126
|
export * from "./elements/widgets/designerView/extensions/GridExtension.js";
|
|
127
127
|
export * from "./elements/widgets/designerView/extensions/GridExtensionProvider.js";
|
|
128
|
-
export * from "./elements/widgets/designerView/extensions/
|
|
129
|
-
export * from "./elements/widgets/designerView/extensions/
|
|
130
|
-
export * from "./elements/widgets/designerView/extensions/
|
|
131
|
-
export * from "./elements/widgets/designerView/extensions/
|
|
128
|
+
export * from "./elements/widgets/designerView/extensions/InvisibleElementExtension.js";
|
|
129
|
+
export * from "./elements/widgets/designerView/extensions/InvisibleElementExtensionProvider.js";
|
|
130
|
+
export * from "./elements/widgets/designerView/extensions/InvisibleElementExtensionDesignViewConfigButtons.js";
|
|
131
|
+
export * from "./elements/widgets/designerView/extensions/HighlightElementExtension.js";
|
|
132
|
+
export * from "./elements/widgets/designerView/extensions/HighlightElementExtensionProvider.js";
|
|
132
133
|
export * from "./elements/widgets/designerView/extensions/svg/PathExtension.js";
|
|
133
134
|
export * from "./elements/widgets/designerView/extensions/svg/PathExtensionProvider.js";
|
|
134
135
|
export * from "./elements/widgets/designerView/extensions/PositionExtension.js";
|