Skip to content

Commit 044bba2

Browse files
authored
Remove SModelExtension interface (#389)
Remove the empty `SModelExtension` interface and adapt type doc of feature extension interfaces. Fixes #387
1 parent 93bc791 commit 044bba2

File tree

16 files changed

+68
-59
lines changed

16 files changed

+68
-59
lines changed

packages/sprotty/src/base/model/smodel-extension.ts

Lines changed: 0 additions & 21 deletions
This file was deleted.

packages/sprotty/src/features/bounds/model.ts

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616

1717
import { Bounds, Dimension, isBounds, Point } from 'sprotty-protocol/lib/utils/geometry';
1818
import { SChildElementImpl, SModelElementImpl, SModelRootImpl, SParentElementImpl } from '../../base/model/smodel';
19-
import { SModelExtension } from '../../base/model/smodel-extension';
2019
import { findParentByFeature } from '../../base/model/smodel-utils';
2120
import { DOMHelper } from '../../base/views/dom-helper';
2221
import { ViewerOptions } from '../../base/views/viewer-options';
@@ -32,8 +31,10 @@ export const alignFeature = Symbol('alignFeature');
3231
* Model elements that implement this interface have a position and a size.
3332
* Note that this definition differs from the one in `sprotty-protocol` because this is
3433
* used in the _internal model_, while the other is used in the _external model_.
34+
*
35+
* Feature extension interface for {@link boundsFeature}.
3536
*/
36-
export interface BoundsAware extends SModelExtension {
37+
export interface BoundsAware {
3738
bounds: Bounds
3839
}
3940

@@ -46,15 +47,20 @@ export interface LayoutContainer extends LayoutableChild {
4647

4748
export type ModelLayoutOptions = { [key: string]: string | number | boolean };
4849

49-
export interface LayoutableChild extends SModelExtension, BoundsAware {
50+
/**
51+
* Feature extension interface for {@link layoutableChildFeature}.
52+
*/
53+
export interface LayoutableChild extends BoundsAware {
5054
layoutOptions?: ModelLayoutOptions
5155
}
5256

5357
/**
5458
* Used to adjust elements whose bounding box is not at the origin, e.g.
5559
* labels, or pre-rendered SVG figures.
60+
*
61+
* Feature extension interface for {@link alignFeature}.
5662
*/
57-
export interface Alignable extends SModelExtension {
63+
export interface Alignable {
5864
alignment: Point
5965
}
6066

packages/sprotty/src/features/decoration/model.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,16 @@
1414
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
1515
********************************************************************************/
1616

17-
import { SModelExtension } from '../../base/model/smodel-extension';
1817
import { SModelElementImpl } from '../../base/model/smodel';
1918
import { SShapeElementImpl, boundsFeature } from '../bounds/model';
2019
import { hoverFeedbackFeature, popupFeature } from '../hover/model';
2120

2221
export const decorationFeature = Symbol('decorationFeature');
2322

24-
export interface Decoration extends SModelExtension {
23+
/**
24+
* Feature extension interface for {@link decorationFeature}.
25+
*/
26+
export interface Decoration {
2527
}
2628

2729
export function isDecoration<T extends SModelElementImpl>(e: T): e is T & Decoration {

packages/sprotty/src/features/edge-layout/model.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,16 @@
1414
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
1515
********************************************************************************/
1616

17-
import { SModelExtension } from '../../base/model/smodel-extension';
1817
import { SModelElementImpl, SChildElementImpl } from '../../base/model/smodel';
1918
import { BoundsAware, isBoundsAware } from '../bounds/model';
2019
import { SRoutableElementImpl } from '../routing/model';
2120

2221
export const edgeLayoutFeature = Symbol('edgeLayout');
2322

24-
export interface EdgeLayoutable extends SModelExtension {
23+
/**
24+
* Feature extension interface for {@link edgeLayoutFeature}.
25+
*/
26+
export interface EdgeLayoutable {
2527
edgePlacement: EdgePlacement
2628
}
2729

@@ -33,7 +35,7 @@ export function isEdgeLayoutable<T extends SModelElementImpl>(element: T): eleme
3335
&& element.hasFeature(edgeLayoutFeature);
3436
}
3537

36-
function checkEdgeLayoutable(element: SChildElementImpl): element is SChildElementImpl & EdgeLayoutable{
38+
function checkEdgeLayoutable(element: SChildElementImpl): element is SChildElementImpl & EdgeLayoutable {
3739
return 'edgePlacement' in element;
3840
}
3941

packages/sprotty/src/features/edit/create-on-drag.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,13 @@
1616

1717
import { Action } from "sprotty-protocol/lib/actions";
1818
import { SModelElementImpl } from "../../base/model/smodel";
19-
import { SModelExtension } from "../../base/model/smodel-extension";
2019

2120
export const creatingOnDragFeature = Symbol('creatingOnDragFeature');
2221

23-
export interface CreatingOnDrag extends SModelExtension {
22+
/**
23+
* Feature extension interface for {@link creatingOnDragFeature}.
24+
*/
25+
export interface CreatingOnDrag {
2426
createAction(id: string): Action;
2527
}
2628

packages/sprotty/src/features/edit/delete.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,14 @@ import { inject, injectable } from 'inversify';
1818
import { DeleteElementAction } from 'sprotty-protocol/lib/actions';
1919
import { Command, CommandExecutionContext, CommandReturn } from '../../base/commands/command';
2020
import { SModelElementImpl, SParentElementImpl, SChildElementImpl } from '../../base/model/smodel';
21-
import { SModelExtension } from '../../base/model/smodel-extension';
2221
import { TYPES } from '../../base/types';
2322

2423
export const deletableFeature = Symbol('deletableFeature');
2524

26-
export interface Deletable extends SModelExtension {
25+
/**
26+
* Feature extension interface for {@link deletableFeature}.
27+
*/
28+
export interface Deletable {
2729
}
2830

2931
export function isDeletable<T extends SModelElementImpl>(element: T): element is T & Deletable & SChildElementImpl {

packages/sprotty/src/features/edit/model.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616

1717
import { Dimension, Point } from 'sprotty-protocol/lib/utils/geometry';
1818
import { SModelElementImpl } from '../../base/model/smodel';
19-
import { SModelExtension } from '../../base/model/smodel-extension';
2019
import { SRoutableElementImpl } from '../routing/model';
2120

2221
export const editFeature = Symbol('editFeature');
@@ -25,9 +24,13 @@ export function canEditRouting(element: SModelElementImpl): element is SRoutable
2524
return element instanceof SRoutableElementImpl && element.hasFeature(editFeature);
2625
}
2726

27+
2828
export const editLabelFeature = Symbol('editLabelFeature');
2929

30-
export interface EditableLabel extends SModelExtension {
30+
/**
31+
* Feature extension interface for {@link editLabelFeature}.
32+
*/
33+
export interface EditableLabel {
3134
text: string;
3235
readonly isMultiLine?: boolean;
3336
readonly editControlDimension?: Dimension;
@@ -40,7 +43,10 @@ export function isEditableLabel<T extends SModelElementImpl>(element: T): elemen
4043

4144
export const withEditLabelFeature = Symbol('withEditLabelFeature');
4245

43-
export interface WithEditableLabel extends SModelExtension {
46+
/**
47+
* Feature extension interface for {@link withEditLabelFeature}.
48+
*/
49+
export interface WithEditableLabel {
4450
readonly editableLabel?: EditableLabel & SModelElementImpl;
4551
}
4652

packages/sprotty/src/features/expand/model.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,15 @@
1515
********************************************************************************/
1616

1717
import { SModelElementImpl } from '../../base/model/smodel';
18-
import { SModelExtension } from '../../base/model/smodel-extension';
1918

2019
export const expandFeature = Symbol('expandFeature');
2120

2221
/**
2322
* Model elements that implement this interface can be expanded/collapsed
23+
*
24+
* Feature extension interface for {@link expandFeature}.
2425
*/
25-
export interface Expandable extends SModelExtension {
26+
export interface Expandable {
2627
expanded: boolean
2728
}
2829

packages/sprotty/src/features/fade/model.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,13 @@
1515
********************************************************************************/
1616

1717
import { SModelElementImpl } from '../../base/model/smodel';
18-
import { SModelExtension } from '../../base/model/smodel-extension';
1918

2019
export const fadeFeature = Symbol('fadeFeature');
2120

22-
export interface Fadeable extends SModelExtension {
21+
/**
22+
* Feature extension interface for {@link fadeFeature}.
23+
*/
24+
export interface Fadeable {
2325
opacity: number
2426
}
2527

packages/sprotty/src/features/hover/model.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,13 @@
1515
********************************************************************************/
1616

1717
import { SModelElementImpl } from '../../base/model/smodel';
18-
import { SModelExtension } from '../../base/model/smodel-extension';
1918

2019
export const hoverFeedbackFeature = Symbol('hoverFeedbackFeature');
2120

22-
export interface Hoverable extends SModelExtension {
21+
/**
22+
* Feature extension interface for {@link hoverFeedbackFeature}.
23+
*/
24+
export interface Hoverable {
2325
hoverFeedback: boolean
2426
}
2527

packages/sprotty/src/features/move/model.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,16 @@
1616

1717
import { Point } from 'sprotty-protocol/lib/utils/geometry';
1818
import { SModelElementImpl } from '../../base/model/smodel';
19-
import { SModelExtension } from '../../base/model/smodel-extension';
2019

2120
export const moveFeature = Symbol('moveFeature');
2221

2322
/**
2423
* An element that can be placed at a specific location using its position
2524
* property.
25+
*
26+
* Feature extension interface for {@link moveFeature}.
2627
*/
27-
export interface Locateable extends SModelExtension {
28+
export interface Locateable {
2829
position: Point
2930
}
3031

packages/sprotty/src/features/nameable/model.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,19 +15,21 @@
1515
********************************************************************************/
1616

1717
import { SModelElementImpl } from '../../base/model/smodel';
18-
import { SModelExtension } from '../../base/model/smodel-extension';
1918

2019
export const nameFeature = Symbol('nameableFeature');
2120

22-
export interface Nameable extends SModelExtension {
21+
/**
22+
* Feature extension interface for {@link nameableFeature}.
23+
*/
24+
export interface Nameable {
2325
name: string
2426
}
2527

2628
export function isNameable(element: SModelElementImpl): element is SModelElementImpl & Nameable {
2729
return element.hasFeature(nameFeature);
2830
}
2931

30-
export function name(element: SModelElementImpl): string|undefined {
32+
export function name(element: SModelElementImpl): string | undefined {
3133
if (isNameable(element)) {
3234
return element.name;
3335
} else {

packages/sprotty/src/features/projection/model.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ import { Viewport } from 'sprotty-protocol/lib/model';
1818
import { Bounds, Dimension } from 'sprotty-protocol/lib/utils/geometry';
1919
import { hasOwnProperty } from 'sprotty-protocol/lib/utils/object';
2020
import { SChildElementImpl, SModelRootImpl, SParentElementImpl } from '../../base/model/smodel';
21-
import { SModelExtension } from '../../base/model/smodel-extension';
2221
import { transformToRootBounds } from '../../base/model/smodel-utils';
2322
import { isBoundsAware } from '../bounds/model';
2423

@@ -27,7 +26,7 @@ import { isBoundsAware } from '../bounds/model';
2726
* _Note:_ If set, the projectedBounds property will be prefered over the model element bounds.
2827
* Otherwise model elements also have to be `BoundsAware` so their projections can be shown.
2928
*/
30-
export interface Projectable extends SModelExtension {
29+
export interface Projectable {
3130
projectionCssClasses: string[],
3231
projectedBounds?: Bounds,
3332
}

packages/sprotty/src/features/routing/model.ts

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616

1717
import { Bounds, Point } from 'sprotty-protocol/lib/utils/geometry';
1818
import { SChildElementImpl, SModelElementImpl } from '../../base/model/smodel';
19-
import { SModelExtension } from '../../base/model/smodel-extension';
2019
import { FluentIterable } from '../../utils/iterable';
2120
import { SShapeElementImpl } from '../bounds/model';
2221
import { deletableFeature } from '../edit/delete';
@@ -54,7 +53,10 @@ export abstract class SRoutableElementImpl extends SChildElementImpl {
5453

5554
export const connectableFeature = Symbol('connectableFeature');
5655

57-
export interface Connectable extends SModelExtension {
56+
/**
57+
* Feature extension interface for {@link connectableFeature}.
58+
*/
59+
export interface Connectable {
5860
canConnect(routable: SRoutableElementImpl, role: 'source' | 'target'): boolean;
5961
}
6062

@@ -74,7 +76,7 @@ export function getAbsoluteRouteBounds(model: Readonly<SRoutableElementImpl>, ro
7476
}
7577

7678
export function getRouteBounds(route: Point[]): Bounds {
77-
const bounds = { x: NaN, y: NaN, width: 0, height: 0};
79+
const bounds = { x: NaN, y: NaN, width: 0, height: 0 };
7880
for (const point of route) {
7981
if (isNaN(bounds.x)) {
8082
bounds.x = point.x;
@@ -104,9 +106,9 @@ export function getRouteBounds(route: Point[]): Bounds {
104106
*/
105107
export abstract class SConnectableElementImpl extends SShapeElementImpl implements Connectable {
106108

107-
get anchorKind(): string | undefined{
108-
return undefined;
109-
}
109+
get anchorKind(): string | undefined {
110+
return undefined;
111+
}
110112

111113
strokeWidth: number = 0;
112114

packages/sprotty/src/features/select/model.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,13 @@
1515
********************************************************************************/
1616

1717
import { SModelElementImpl } from '../../base/model/smodel';
18-
import { SModelExtension } from '../../base/model/smodel-extension';
1918

2019
export const selectFeature = Symbol('selectFeature');
2120

22-
export interface Selectable extends SModelExtension {
21+
/**
22+
* Feature extension interface for {@link selectFeature}.
23+
*/
24+
export interface Selectable {
2325
selected: boolean
2426
}
2527

packages/sprotty/src/index.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ export * from './base/commands/command-stack';
3333
export * from './base/features/initialize-canvas';
3434
export * from './base/features/set-model';
3535

36-
export * from './base/model/smodel-extension';
3736
export * from './base/model/smodel-factory';
3837
export * from './base/model/smodel-utils';
3938
export * from './base/model/smodel';

0 commit comments

Comments
 (0)