@eclipse-glsp/client 0.9.0-next.c5944e10
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/LICENSE +277 -0
- package/README.md +12 -0
- package/css/command-palette.css +58 -0
- package/css/decoration.css +37 -0
- package/css/glsp-sprotty.css +106 -0
- package/css/tool-palette.css +138 -0
- package/lib/base/action-dispatcher.d.ts +25 -0
- package/lib/base/action-dispatcher.d.ts.map +1 -0
- package/lib/base/action-dispatcher.js +110 -0
- package/lib/base/action-dispatcher.js.map +1 -0
- package/lib/base/actions/context-actions.d.ts +36 -0
- package/lib/base/actions/context-actions.d.ts.map +1 -0
- package/lib/base/actions/context-actions.js +45 -0
- package/lib/base/actions/context-actions.js.map +1 -0
- package/lib/base/actions/edit-mode-action.d.ts +13 -0
- package/lib/base/actions/edit-mode-action.d.ts.map +1 -0
- package/lib/base/actions/edit-mode-action.js +52 -0
- package/lib/base/actions/edit-mode-action.js.map +1 -0
- package/lib/base/actions/edit-validation-actions.d.ts +78 -0
- package/lib/base/actions/edit-validation-actions.d.ts.map +1 -0
- package/lib/base/actions/edit-validation-actions.js +77 -0
- package/lib/base/actions/edit-validation-actions.js.map +1 -0
- package/lib/base/actions/focus-change-action.d.ts +24 -0
- package/lib/base/actions/focus-change-action.d.ts.map +1 -0
- package/lib/base/actions/focus-change-action.js +16 -0
- package/lib/base/actions/focus-change-action.js.map +1 -0
- package/lib/base/args.d.ts +24 -0
- package/lib/base/args.d.ts.map +1 -0
- package/lib/base/args.js +8 -0
- package/lib/base/args.js.map +1 -0
- package/lib/base/auto-complete/auto-complete-actions.d.ts +21 -0
- package/lib/base/auto-complete/auto-complete-actions.d.ts.map +1 -0
- package/lib/base/auto-complete/auto-complete-actions.js +8 -0
- package/lib/base/auto-complete/auto-complete-actions.js.map +1 -0
- package/lib/base/auto-complete/auto-complete-widget.d.ts +88 -0
- package/lib/base/auto-complete/auto-complete-widget.d.ts.map +1 -0
- package/lib/base/auto-complete/auto-complete-widget.js +233 -0
- package/lib/base/auto-complete/auto-complete-widget.js.map +1 -0
- package/lib/base/auto-complete/validation-decorator.d.ts +47 -0
- package/lib/base/auto-complete/validation-decorator.d.ts.map +1 -0
- package/lib/base/auto-complete/validation-decorator.js +113 -0
- package/lib/base/auto-complete/validation-decorator.js.map +1 -0
- package/lib/base/command-stack.d.ts +7 -0
- package/lib/base/command-stack.d.ts.map +1 -0
- package/lib/base/command-stack.js +49 -0
- package/lib/base/command-stack.js.map +1 -0
- package/lib/base/di.config.d.ts +28 -0
- package/lib/base/di.config.d.ts.map +1 -0
- package/lib/base/di.config.js +81 -0
- package/lib/base/di.config.js.map +1 -0
- package/lib/base/drag-aware-mouse-listener.d.ts +36 -0
- package/lib/base/drag-aware-mouse-listener.d.ts.map +1 -0
- package/lib/base/drag-aware-mouse-listener.js +66 -0
- package/lib/base/drag-aware-mouse-listener.js.map +1 -0
- package/lib/base/editor-context.d.ts +46 -0
- package/lib/base/editor-context.d.ts.map +1 -0
- package/lib/base/editor-context.js +110 -0
- package/lib/base/editor-context.js.map +1 -0
- package/lib/base/focus-tracker.d.ts +9 -0
- package/lib/base/focus-tracker.d.ts.map +1 -0
- package/lib/base/focus-tracker.js +65 -0
- package/lib/base/focus-tracker.js.map +1 -0
- package/lib/base/model/model-registry.d.ts +5 -0
- package/lib/base/model/model-registry.d.ts.map +1 -0
- package/lib/base/model/model-registry.js +43 -0
- package/lib/base/model/model-registry.js.map +1 -0
- package/lib/base/model/update-model-command.d.ts +26 -0
- package/lib/base/model/update-model-command.d.ts.map +1 -0
- package/lib/base/model/update-model-command.js +132 -0
- package/lib/base/model/update-model-command.js.map +1 -0
- package/lib/base/model-initialization-constraint.d.ts +39 -0
- package/lib/base/model-initialization-constraint.d.ts.map +1 -0
- package/lib/base/model-initialization-constraint.js +106 -0
- package/lib/base/model-initialization-constraint.js.map +1 -0
- package/lib/base/operations/operation.d.ts +135 -0
- package/lib/base/operations/operation.d.ts.map +1 -0
- package/lib/base/operations/operation.js +182 -0
- package/lib/base/operations/operation.js.map +1 -0
- package/lib/base/selection-clearing-mouse-listener.d.ts +17 -0
- package/lib/base/selection-clearing-mouse-listener.d.ts.map +1 -0
- package/lib/base/selection-clearing-mouse-listener.js +55 -0
- package/lib/base/selection-clearing-mouse-listener.js.map +1 -0
- package/lib/base/source-uri-aware.d.ts +20 -0
- package/lib/base/source-uri-aware.d.ts.map +1 -0
- package/lib/base/source-uri-aware.js +26 -0
- package/lib/base/source-uri-aware.js.map +1 -0
- package/lib/base/tool-manager/glsp-tool-manager.d.ts +22 -0
- package/lib/base/tool-manager/glsp-tool-manager.d.ts.map +1 -0
- package/lib/base/tool-manager/glsp-tool-manager.js +110 -0
- package/lib/base/tool-manager/glsp-tool-manager.js.map +1 -0
- package/lib/base/types.d.ts +38 -0
- package/lib/base/types.d.ts.map +1 -0
- package/lib/base/types.js +41 -0
- package/lib/base/types.js.map +1 -0
- package/lib/base/view/view-registry.d.ts +5 -0
- package/lib/base/view/view-registry.d.ts.map +1 -0
- package/lib/base/view/view-registry.js +43 -0
- package/lib/base/view/view-registry.js.map +1 -0
- package/lib/features/change-bounds/model.d.ts +38 -0
- package/lib/features/change-bounds/model.d.ts.map +1 -0
- package/lib/features/change-bounds/model.js +61 -0
- package/lib/features/change-bounds/model.js.map +1 -0
- package/lib/features/change-bounds/movement-restrictor.d.ts +14 -0
- package/lib/features/change-bounds/movement-restrictor.d.ts.map +1 -0
- package/lib/features/change-bounds/movement-restrictor.js +90 -0
- package/lib/features/change-bounds/movement-restrictor.js.map +1 -0
- package/lib/features/change-bounds/snap.d.ts +7 -0
- package/lib/features/change-bounds/snap.d.ts.map +1 -0
- package/lib/features/change-bounds/snap.js +44 -0
- package/lib/features/change-bounds/snap.js.map +1 -0
- package/lib/features/command-palette/command-palette-tool.d.ts +12 -0
- package/lib/features/command-palette/command-palette-tool.d.ts.map +1 -0
- package/lib/features/command-palette/command-palette-tool.js +63 -0
- package/lib/features/command-palette/command-palette-tool.js.map +1 -0
- package/lib/features/command-palette/di.config.d.ts +20 -0
- package/lib/features/command-palette/di.config.d.ts.map +1 -0
- package/lib/features/command-palette/di.config.js +33 -0
- package/lib/features/command-palette/di.config.js.map +1 -0
- package/lib/features/command-palette/server-command-palette-provider.d.ts +15 -0
- package/lib/features/command-palette/server-command-palette-provider.d.ts.map +1 -0
- package/lib/features/command-palette/server-command-palette-provider.js +66 -0
- package/lib/features/command-palette/server-command-palette-provider.js.map +1 -0
- package/lib/features/context-menu/delete-element-context-menu.d.ts +8 -0
- package/lib/features/context-menu/delete-element-context-menu.d.ts.map +1 -0
- package/lib/features/context-menu/delete-element-context-menu.js +55 -0
- package/lib/features/context-menu/delete-element-context-menu.js.map +1 -0
- package/lib/features/context-menu/di.config.d.ts +19 -0
- package/lib/features/context-menu/di.config.d.ts.map +1 -0
- package/lib/features/context-menu/di.config.js +36 -0
- package/lib/features/context-menu/di.config.js.map +1 -0
- package/lib/features/context-menu/selection-service-aware-context-menu-mouse-listener.d.ts +9 -0
- package/lib/features/context-menu/selection-service-aware-context-menu-mouse-listener.d.ts.map +1 -0
- package/lib/features/context-menu/selection-service-aware-context-menu-mouse-listener.js +65 -0
- package/lib/features/context-menu/selection-service-aware-context-menu-mouse-listener.js.map +1 -0
- package/lib/features/context-menu/server-context-menu-provider.d.ts +13 -0
- package/lib/features/context-menu/server-context-menu-provider.d.ts.map +1 -0
- package/lib/features/context-menu/server-context-menu-provider.js +63 -0
- package/lib/features/context-menu/server-context-menu-provider.js.map +1 -0
- package/lib/features/copy-paste/copy-paste-actions.d.ts +50 -0
- package/lib/features/copy-paste/copy-paste-actions.d.ts.map +1 -0
- package/lib/features/copy-paste/copy-paste-actions.js +58 -0
- package/lib/features/copy-paste/copy-paste-actions.js.map +1 -0
- package/lib/features/copy-paste/copy-paste-context-menu.d.ts +32 -0
- package/lib/features/copy-paste/copy-paste-context-menu.d.ts.map +1 -0
- package/lib/features/copy-paste/copy-paste-context-menu.js +151 -0
- package/lib/features/copy-paste/copy-paste-context-menu.js.map +1 -0
- package/lib/features/copy-paste/copy-paste-handler.d.ts +50 -0
- package/lib/features/copy-paste/copy-paste-handler.d.ts.map +1 -0
- package/lib/features/copy-paste/copy-paste-handler.js +149 -0
- package/lib/features/copy-paste/copy-paste-handler.js.map +1 -0
- package/lib/features/copy-paste/di.config.d.ts +24 -0
- package/lib/features/copy-paste/di.config.d.ts.map +1 -0
- package/lib/features/copy-paste/di.config.js +40 -0
- package/lib/features/copy-paste/di.config.js.map +1 -0
- package/lib/features/decoration/decoration-placer.d.ts +6 -0
- package/lib/features/decoration/decoration-placer.d.ts.map +1 -0
- package/lib/features/decoration/decoration-placer.js +47 -0
- package/lib/features/decoration/decoration-placer.js.map +1 -0
- package/lib/features/decoration/di.config.d.ts +20 -0
- package/lib/features/decoration/di.config.d.ts.map +1 -0
- package/lib/features/decoration/di.config.js +27 -0
- package/lib/features/decoration/di.config.js.map +1 -0
- package/lib/features/edit-label/di.config.d.ts +19 -0
- package/lib/features/edit-label/di.config.d.ts.map +1 -0
- package/lib/features/edit-label/di.config.js +30 -0
- package/lib/features/edit-label/di.config.js.map +1 -0
- package/lib/features/edit-label/edit-label-tool.d.ts +13 -0
- package/lib/features/edit-label/edit-label-tool.d.ts.map +1 -0
- package/lib/features/edit-label/edit-label-tool.js +55 -0
- package/lib/features/edit-label/edit-label-tool.js.map +1 -0
- package/lib/features/edit-label/edit-label-validator.d.ts +20 -0
- package/lib/features/edit-label/edit-label-validator.d.ts.map +1 -0
- package/lib/features/edit-label/edit-label-validator.js +111 -0
- package/lib/features/edit-label/edit-label-validator.js.map +1 -0
- package/lib/features/hints/di.config.d.ts +19 -0
- package/lib/features/hints/di.config.d.ts.map +1 -0
- package/lib/features/hints/di.config.js +30 -0
- package/lib/features/hints/di.config.js.map +1 -0
- package/lib/features/hints/model.d.ts +26 -0
- package/lib/features/hints/model.d.ts.map +1 -0
- package/lib/features/hints/model.js +14 -0
- package/lib/features/hints/model.js.map +1 -0
- package/lib/features/hints/request-type-hints-action.d.ts +32 -0
- package/lib/features/hints/request-type-hints-action.d.ts.map +1 -0
- package/lib/features/hints/request-type-hints-action.js +26 -0
- package/lib/features/hints/request-type-hints-action.js.map +1 -0
- package/lib/features/hints/type-hints.d.ts +75 -0
- package/lib/features/hints/type-hints.d.ts.map +1 -0
- package/lib/features/hints/type-hints.js +199 -0
- package/lib/features/hints/type-hints.js.map +1 -0
- package/lib/features/hover/di.config.d.ts +19 -0
- package/lib/features/hover/di.config.d.ts.map +1 -0
- package/lib/features/hover/di.config.js +46 -0
- package/lib/features/hover/di.config.js.map +1 -0
- package/lib/features/hover/hover.d.ts +11 -0
- package/lib/features/hover/hover.d.ts.map +1 -0
- package/lib/features/hover/hover.js +88 -0
- package/lib/features/hover/hover.js.map +1 -0
- package/lib/features/layout/di.config.d.ts +19 -0
- package/lib/features/layout/di.config.d.ts.map +1 -0
- package/lib/features/layout/di.config.js +26 -0
- package/lib/features/layout/di.config.js.map +1 -0
- package/lib/features/layout/layout-commands.d.ts +137 -0
- package/lib/features/layout/layout-commands.d.ts.map +1 -0
- package/lib/features/layout/layout-commands.js +411 -0
- package/lib/features/layout/layout-commands.js.map +1 -0
- package/lib/features/layout/layout-commands.spec.d.ts +18 -0
- package/lib/features/layout/layout-commands.spec.d.ts.map +1 -0
- package/lib/features/layout/layout-commands.spec.js +297 -0
- package/lib/features/layout/layout-commands.spec.js.map +1 -0
- package/lib/features/model-source-watcher/di.config.d.ts +19 -0
- package/lib/features/model-source-watcher/di.config.d.ts.map +1 -0
- package/lib/features/model-source-watcher/di.config.js +26 -0
- package/lib/features/model-source-watcher/di.config.js.map +1 -0
- package/lib/features/model-source-watcher/model-source-changed-action-handler.d.ts +23 -0
- package/lib/features/model-source-watcher/model-source-changed-action-handler.d.ts.map +1 -0
- package/lib/features/model-source-watcher/model-source-changed-action-handler.js +83 -0
- package/lib/features/model-source-watcher/model-source-changed-action-handler.js.map +1 -0
- package/lib/features/model-source-watcher/model-source-changed-action.d.ts +24 -0
- package/lib/features/model-source-watcher/model-source-changed-action.d.ts.map +1 -0
- package/lib/features/model-source-watcher/model-source-changed-action.js +16 -0
- package/lib/features/model-source-watcher/model-source-changed-action.js.map +1 -0
- package/lib/features/mouse-tool/di.config.d.ts +19 -0
- package/lib/features/mouse-tool/di.config.d.ts.map +1 -0
- package/lib/features/mouse-tool/di.config.js +28 -0
- package/lib/features/mouse-tool/di.config.js.map +1 -0
- package/lib/features/mouse-tool/mouse-tool.d.ts +19 -0
- package/lib/features/mouse-tool/mouse-tool.d.ts.map +1 -0
- package/lib/features/mouse-tool/mouse-tool.js +140 -0
- package/lib/features/mouse-tool/mouse-tool.js.map +1 -0
- package/lib/features/navigation/di.config.d.ts +18 -0
- package/lib/features/navigation/di.config.d.ts.map +1 -0
- package/lib/features/navigation/di.config.js +31 -0
- package/lib/features/navigation/di.config.js.map +1 -0
- package/lib/features/navigation/navigation-action-handler.d.ts +117 -0
- package/lib/features/navigation/navigation-action-handler.d.ts.map +1 -0
- package/lib/features/navigation/navigation-action-handler.js +293 -0
- package/lib/features/navigation/navigation-action-handler.js.map +1 -0
- package/lib/features/navigation/navigation-target-resolver.d.ts +55 -0
- package/lib/features/navigation/navigation-target-resolver.d.ts.map +1 -0
- package/lib/features/navigation/navigation-target-resolver.js +157 -0
- package/lib/features/navigation/navigation-target-resolver.js.map +1 -0
- package/lib/features/navigation/navigation-target-resolver.spec.d.ts +18 -0
- package/lib/features/navigation/navigation-target-resolver.spec.d.ts.map +1 -0
- package/lib/features/navigation/navigation-target-resolver.spec.js +54 -0
- package/lib/features/navigation/navigation-target-resolver.spec.js.map +1 -0
- package/lib/features/rank/model.d.ts +22 -0
- package/lib/features/rank/model.d.ts.map +1 -0
- package/lib/features/rank/model.js +28 -0
- package/lib/features/rank/model.js.map +1 -0
- package/lib/features/reconnect/model.d.ts +30 -0
- package/lib/features/reconnect/model.d.ts.map +1 -0
- package/lib/features/reconnect/model.js +66 -0
- package/lib/features/reconnect/model.js.map +1 -0
- package/lib/features/save/di.config.d.ts +23 -0
- package/lib/features/save/di.config.d.ts.map +1 -0
- package/lib/features/save/di.config.js +29 -0
- package/lib/features/save/di.config.js.map +1 -0
- package/lib/features/save/model.d.ts +22 -0
- package/lib/features/save/model.d.ts.map +1 -0
- package/lib/features/save/model.js +9 -0
- package/lib/features/save/model.js.map +1 -0
- package/lib/features/save/save.d.ts +27 -0
- package/lib/features/save/save.d.ts.map +1 -0
- package/lib/features/save/save.js +42 -0
- package/lib/features/save/save.js.map +1 -0
- package/lib/features/select/di.config.d.ts +19 -0
- package/lib/features/select/di.config.d.ts.map +1 -0
- package/lib/features/select/di.config.js +35 -0
- package/lib/features/select/di.config.js.map +1 -0
- package/lib/features/select/select-feedback-action.d.ts +34 -0
- package/lib/features/select/select-feedback-action.d.ts.map +1 -0
- package/lib/features/select/select-feedback-action.js +97 -0
- package/lib/features/select/select-feedback-action.js.map +1 -0
- package/lib/features/select/select-mouse-listener.d.ts +25 -0
- package/lib/features/select/select-mouse-listener.d.ts.map +1 -0
- package/lib/features/select/select-mouse-listener.js +32 -0
- package/lib/features/select/select-mouse-listener.js.map +1 -0
- package/lib/features/select/selection-service.d.ts +52 -0
- package/lib/features/select/selection-service.d.ts.map +1 -0
- package/lib/features/select/selection-service.js +226 -0
- package/lib/features/select/selection-service.js.map +1 -0
- package/lib/features/select/selection-service.spec.d.ts +2 -0
- package/lib/features/select/selection-service.spec.d.ts.map +1 -0
- package/lib/features/select/selection-service.spec.js +360 -0
- package/lib/features/select/selection-service.spec.js.map +1 -0
- package/lib/features/tool-feedback/change-bounds-tool-feedback.d.ts +47 -0
- package/lib/features/tool-feedback/change-bounds-tool-feedback.d.ts.map +1 -0
- package/lib/features/tool-feedback/change-bounds-tool-feedback.js +236 -0
- package/lib/features/tool-feedback/change-bounds-tool-feedback.js.map +1 -0
- package/lib/features/tool-feedback/creation-tool-feedback.d.ts +43 -0
- package/lib/features/tool-feedback/creation-tool-feedback.d.ts.map +1 -0
- package/lib/features/tool-feedback/creation-tool-feedback.js +181 -0
- package/lib/features/tool-feedback/creation-tool-feedback.js.map +1 -0
- package/lib/features/tool-feedback/css-feedback.d.ts +32 -0
- package/lib/features/tool-feedback/css-feedback.d.ts.map +1 -0
- package/lib/features/tool-feedback/css-feedback.js +111 -0
- package/lib/features/tool-feedback/css-feedback.js.map +1 -0
- package/lib/features/tool-feedback/di.config.d.ts +19 -0
- package/lib/features/tool-feedback/di.config.d.ts.map +1 -0
- package/lib/features/tool-feedback/di.config.js +53 -0
- package/lib/features/tool-feedback/di.config.js.map +1 -0
- package/lib/features/tool-feedback/edge-edit-tool-feedback.d.ts +82 -0
- package/lib/features/tool-feedback/edge-edit-tool-feedback.d.ts.map +1 -0
- package/lib/features/tool-feedback/edge-edit-tool-feedback.js +315 -0
- package/lib/features/tool-feedback/edge-edit-tool-feedback.js.map +1 -0
- package/lib/features/tool-feedback/feedback-action-dispatcher.d.ts +50 -0
- package/lib/features/tool-feedback/feedback-action-dispatcher.d.ts.map +1 -0
- package/lib/features/tool-feedback/feedback-action-dispatcher.js +75 -0
- package/lib/features/tool-feedback/feedback-action-dispatcher.js.map +1 -0
- package/lib/features/tool-feedback/marquee-tool-feedback.d.ts +32 -0
- package/lib/features/tool-feedback/marquee-tool-feedback.d.ts.map +1 -0
- package/lib/features/tool-feedback/marquee-tool-feedback.js +111 -0
- package/lib/features/tool-feedback/marquee-tool-feedback.js.map +1 -0
- package/lib/features/tool-feedback/model.d.ts +23 -0
- package/lib/features/tool-feedback/model.d.ts.map +1 -0
- package/lib/features/tool-feedback/model.js +34 -0
- package/lib/features/tool-feedback/model.js.map +1 -0
- package/lib/features/tool-feedback/view.d.ts +16 -0
- package/lib/features/tool-feedback/view.d.ts.map +1 -0
- package/lib/features/tool-feedback/view.js +81 -0
- package/lib/features/tool-feedback/view.js.map +1 -0
- package/lib/features/tool-palette/di.config.d.ts +20 -0
- package/lib/features/tool-palette/di.config.d.ts.map +1 -0
- package/lib/features/tool-palette/di.config.js +29 -0
- package/lib/features/tool-palette/di.config.js.map +1 -0
- package/lib/features/tool-palette/palette-item.d.ts +27 -0
- package/lib/features/tool-palette/palette-item.d.ts.map +1 -0
- package/lib/features/tool-palette/palette-item.js +37 -0
- package/lib/features/tool-palette/palette-item.js.map +1 -0
- package/lib/features/tool-palette/tool-palette.d.ts +56 -0
- package/lib/features/tool-palette/tool-palette.d.ts.map +1 -0
- package/lib/features/tool-palette/tool-palette.js +401 -0
- package/lib/features/tool-palette/tool-palette.js.map +1 -0
- package/lib/features/tools/base-glsp-tool.d.ts +20 -0
- package/lib/features/tools/base-glsp-tool.d.ts.map +1 -0
- package/lib/features/tools/base-glsp-tool.js +70 -0
- package/lib/features/tools/base-glsp-tool.js.map +1 -0
- package/lib/features/tools/change-bounds-tool.d.ts +71 -0
- package/lib/features/tools/change-bounds-tool.d.ts.map +1 -0
- package/lib/features/tools/change-bounds-tool.js +371 -0
- package/lib/features/tools/change-bounds-tool.js.map +1 -0
- package/lib/features/tools/delete-tool.d.ts +36 -0
- package/lib/features/tools/delete-tool.d.ts.map +1 -0
- package/lib/features/tools/delete-tool.js +129 -0
- package/lib/features/tools/delete-tool.js.map +1 -0
- package/lib/features/tools/di.config.d.ts +23 -0
- package/lib/features/tools/di.config.d.ts.map +1 -0
- package/lib/features/tools/di.config.js +55 -0
- package/lib/features/tools/di.config.js.map +1 -0
- package/lib/features/tools/edge-creation-tool.d.ts +37 -0
- package/lib/features/tools/edge-creation-tool.d.ts.map +1 -0
- package/lib/features/tools/edge-creation-tool.js +158 -0
- package/lib/features/tools/edge-creation-tool.js.map +1 -0
- package/lib/features/tools/edge-edit-tool.d.ts +50 -0
- package/lib/features/tools/edge-edit-tool.d.ts.map +1 -0
- package/lib/features/tools/edge-edit-tool.js +281 -0
- package/lib/features/tools/edge-edit-tool.js.map +1 -0
- package/lib/features/tools/marquee-mouse-tool.d.ts +37 -0
- package/lib/features/tools/marquee-mouse-tool.d.ts.map +1 -0
- package/lib/features/tools/marquee-mouse-tool.js +226 -0
- package/lib/features/tools/marquee-mouse-tool.js.map +1 -0
- package/lib/features/tools/marquee-tool.d.ts +14 -0
- package/lib/features/tools/marquee-tool.d.ts.map +1 -0
- package/lib/features/tools/marquee-tool.js +69 -0
- package/lib/features/tools/marquee-tool.js.map +1 -0
- package/lib/features/tools/model.d.ts +22 -0
- package/lib/features/tools/model.d.ts.map +1 -0
- package/lib/features/tools/model.js +24 -0
- package/lib/features/tools/model.js.map +1 -0
- package/lib/features/tools/node-creation-tool.d.ts +26 -0
- package/lib/features/tools/node-creation-tool.d.ts.map +1 -0
- package/lib/features/tools/node-creation-tool.js +117 -0
- package/lib/features/tools/node-creation-tool.js.map +1 -0
- package/lib/features/tools/view.d.ts +7 -0
- package/lib/features/tools/view.d.ts.map +1 -0
- package/lib/features/tools/view.js +40 -0
- package/lib/features/tools/view.js.map +1 -0
- package/lib/features/undo-redo/model.d.ts +27 -0
- package/lib/features/undo-redo/model.d.ts.map +1 -0
- package/lib/features/undo-redo/model.js +18 -0
- package/lib/features/undo-redo/model.js.map +1 -0
- package/lib/features/validation/di.config.d.ts +25 -0
- package/lib/features/validation/di.config.d.ts.map +1 -0
- package/lib/features/validation/di.config.js +44 -0
- package/lib/features/validation/di.config.js.map +1 -0
- package/lib/features/validation/issue-marker.d.ts +43 -0
- package/lib/features/validation/issue-marker.d.ts.map +1 -0
- package/lib/features/validation/issue-marker.js +89 -0
- package/lib/features/validation/issue-marker.js.map +1 -0
- package/lib/features/validation/marker-navigator.d.ts +55 -0
- package/lib/features/validation/marker-navigator.d.ts.map +1 -0
- package/lib/features/validation/marker-navigator.js +247 -0
- package/lib/features/validation/marker-navigator.js.map +1 -0
- package/lib/features/validation/marker-navigator.spec.d.ts +18 -0
- package/lib/features/validation/marker-navigator.spec.d.ts.map +1 -0
- package/lib/features/validation/marker-navigator.spec.js +177 -0
- package/lib/features/validation/marker-navigator.spec.js.map +1 -0
- package/lib/features/validation/validate.d.ts +111 -0
- package/lib/features/validation/validate.d.ts.map +1 -0
- package/lib/features/validation/validate.js +290 -0
- package/lib/features/validation/validate.js.map +1 -0
- package/lib/features/viewport/di.config.d.ts +19 -0
- package/lib/features/viewport/di.config.d.ts.map +1 -0
- package/lib/features/viewport/di.config.js +34 -0
- package/lib/features/viewport/di.config.js.map +1 -0
- package/lib/features/viewport/glsp-scroll-mouse-listener.d.ts +7 -0
- package/lib/features/viewport/glsp-scroll-mouse-listener.d.ts.map +1 -0
- package/lib/features/viewport/glsp-scroll-mouse-listener.js +54 -0
- package/lib/features/viewport/glsp-scroll-mouse-listener.js.map +1 -0
- package/lib/index.d.ts +110 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +144 -0
- package/lib/index.js.map +1 -0
- package/lib/lib/model.d.ts +24 -0
- package/lib/lib/model.d.ts.map +1 -0
- package/lib/lib/model.js +33 -0
- package/lib/lib/model.js.map +1 -0
- package/lib/model-source/glsp-diagram-server.d.ts +38 -0
- package/lib/model-source/glsp-diagram-server.d.ts.map +1 -0
- package/lib/model-source/glsp-diagram-server.js +88 -0
- package/lib/model-source/glsp-diagram-server.js.map +1 -0
- package/lib/model-source/glsp-server-status.d.ts +30 -0
- package/lib/model-source/glsp-server-status.d.ts.map +1 -0
- package/lib/model-source/glsp-server-status.js +44 -0
- package/lib/model-source/glsp-server-status.js.map +1 -0
- package/lib/utils/argument-utils.d.ts +50 -0
- package/lib/utils/argument-utils.d.ts.map +1 -0
- package/lib/utils/argument-utils.js +112 -0
- package/lib/utils/argument-utils.js.map +1 -0
- package/lib/utils/array-utils.d.ts +28 -0
- package/lib/utils/array-utils.d.ts.map +1 -0
- package/lib/utils/array-utils.js +56 -0
- package/lib/utils/array-utils.js.map +1 -0
- package/lib/utils/html-utils.d.ts +17 -0
- package/lib/utils/html-utils.d.ts.map +1 -0
- package/lib/utils/html-utils.js +30 -0
- package/lib/utils/html-utils.js.map +1 -0
- package/lib/utils/layout-utils.d.ts +41 -0
- package/lib/utils/layout-utils.d.ts.map +1 -0
- package/lib/utils/layout-utils.js +61 -0
- package/lib/utils/layout-utils.js.map +1 -0
- package/lib/utils/marker.d.ts +48 -0
- package/lib/utils/marker.d.ts.map +1 -0
- package/lib/utils/marker.js +48 -0
- package/lib/utils/marker.js.map +1 -0
- package/lib/utils/smodel-util.d.ts +41 -0
- package/lib/utils/smodel-util.d.ts.map +1 -0
- package/lib/utils/smodel-util.js +134 -0
- package/lib/utils/smodel-util.js.map +1 -0
- package/lib/utils/viewpoint-util.d.ts +52 -0
- package/lib/utils/viewpoint-util.d.ts.map +1 -0
- package/lib/utils/viewpoint-util.js +89 -0
- package/lib/utils/viewpoint-util.js.map +1 -0
- package/lib/views/base-view-module.d.ts +24 -0
- package/lib/views/base-view-module.d.ts.map +1 -0
- package/lib/views/base-view-module.js +59 -0
- package/lib/views/base-view-module.js.map +1 -0
- package/lib/views/default-types.d.ts +37 -0
- package/lib/views/default-types.d.ts.map +1 -0
- package/lib/views/default-types.js +47 -0
- package/lib/views/default-types.js.map +1 -0
- package/lib/views/glsp-edge-view.d.ts +11 -0
- package/lib/views/glsp-edge-view.d.ts.map +1 -0
- package/lib/views/glsp-edge-view.js +70 -0
- package/lib/views/glsp-edge-view.js.map +1 -0
- package/lib/views/index.d.ts +22 -0
- package/lib/views/index.d.ts.map +1 -0
- package/lib/views/index.js +34 -0
- package/lib/views/index.js.map +1 -0
- package/lib/views/issue-marker-view.d.ts +8 -0
- package/lib/views/issue-marker-view.d.ts.map +1 -0
- package/lib/views/issue-marker-view.js +59 -0
- package/lib/views/issue-marker-view.js.map +1 -0
- package/lib/views/rounded-corner-view.d.ts +13 -0
- package/lib/views/rounded-corner-view.d.ts.map +1 -0
- package/lib/views/rounded-corner-view.js +82 -0
- package/lib/views/rounded-corner-view.js.map +1 -0
- package/lib/views/rounded-corner.d.ts +37 -0
- package/lib/views/rounded-corner.d.ts.map +1 -0
- package/lib/views/rounded-corner.js +62 -0
- package/lib/views/rounded-corner.js.map +1 -0
- package/package.json +68 -0
- package/src/base/action-dispatcher.ts +103 -0
- package/src/base/actions/context-actions.ts +43 -0
- package/src/base/actions/edit-mode-action.ts +33 -0
- package/src/base/actions/edit-validation-actions.ts +103 -0
- package/src/base/actions/focus-change-action.ts +26 -0
- package/src/base/args.ts +26 -0
- package/src/base/auto-complete/auto-complete-actions.ts +24 -0
- package/src/base/auto-complete/auto-complete-widget.ts +314 -0
- package/src/base/auto-complete/validation-decorator.ts +126 -0
- package/src/base/command-stack.ts +36 -0
- package/src/base/di.config.ts +96 -0
- package/src/base/drag-aware-mouse-listener.ts +69 -0
- package/src/base/editor-context.ts +124 -0
- package/src/base/focus-tracker.ts +50 -0
- package/src/base/model/model-registry.ts +31 -0
- package/src/base/model/update-model-command.ts +118 -0
- package/src/base/model-initialization-constraint.ts +94 -0
- package/src/base/operations/operation.ts +178 -0
- package/src/base/selection-clearing-mouse-listener.ts +43 -0
- package/src/base/source-uri-aware.ts +22 -0
- package/src/base/tool-manager/glsp-tool-manager.ts +97 -0
- package/src/base/types.ts +37 -0
- package/src/base/view/view-registry.ts +31 -0
- package/src/features/change-bounds/model.ts +74 -0
- package/src/features/change-bounds/movement-restrictor.ts +89 -0
- package/src/features/change-bounds/snap.ts +35 -0
- package/src/features/command-palette/command-palette-tool.ts +46 -0
- package/src/features/command-palette/di.config.ts +34 -0
- package/src/features/command-palette/server-command-palette-provider.ts +48 -0
- package/src/features/context-menu/delete-element-context-menu.ts +42 -0
- package/src/features/context-menu/di.config.ts +35 -0
- package/src/features/context-menu/selection-service-aware-context-menu-mouse-listener.ts +50 -0
- package/src/features/context-menu/server-context-menu-provider.ts +46 -0
- package/src/features/copy-paste/copy-paste-actions.ts +60 -0
- package/src/features/copy-paste/copy-paste-context-menu.ts +138 -0
- package/src/features/copy-paste/copy-paste-handler.ts +152 -0
- package/src/features/copy-paste/di.config.ts +45 -0
- package/src/features/decoration/decoration-placer.ts +46 -0
- package/src/features/decoration/di.config.ts +28 -0
- package/src/features/edit-label/di.config.ts +30 -0
- package/src/features/edit-label/edit-label-tool.ts +51 -0
- package/src/features/edit-label/edit-label-validator.ts +104 -0
- package/src/features/hints/di.config.ts +30 -0
- package/src/features/hints/model.ts +34 -0
- package/src/features/hints/request-type-hints-action.ts +36 -0
- package/src/features/hints/type-hints.ts +257 -0
- package/src/features/hover/di.config.ts +61 -0
- package/src/features/hover/hover.ts +95 -0
- package/src/features/layout/di.config.ts +26 -0
- package/src/features/layout/layout-commands.spec.ts +366 -0
- package/src/features/layout/layout-commands.ts +415 -0
- package/src/features/model-source-watcher/di.config.ts +26 -0
- package/src/features/model-source-watcher/model-source-changed-action-handler.ts +70 -0
- package/src/features/model-source-watcher/model-source-changed-action.ts +26 -0
- package/src/features/mouse-tool/di.config.ts +28 -0
- package/src/features/mouse-tool/mouse-tool.ts +139 -0
- package/src/features/navigation/di.config.ts +35 -0
- package/src/features/navigation/navigation-action-handler.ts +272 -0
- package/src/features/navigation/navigation-target-resolver.spec.ts +61 -0
- package/src/features/navigation/navigation-target-resolver.ts +146 -0
- package/src/features/rank/model.ts +29 -0
- package/src/features/reconnect/model.ts +76 -0
- package/src/features/save/di.config.ts +30 -0
- package/src/features/save/model.ts +26 -0
- package/src/features/save/save.ts +35 -0
- package/src/features/select/di.config.ts +35 -0
- package/src/features/select/select-feedback-action.ts +87 -0
- package/src/features/select/select-mouse-listener.ts +26 -0
- package/src/features/select/selection-service.spec.ts +372 -0
- package/src/features/select/selection-service.ts +239 -0
- package/src/features/tool-feedback/change-bounds-tool-feedback.ts +244 -0
- package/src/features/tool-feedback/creation-tool-feedback.ts +190 -0
- package/src/features/tool-feedback/css-feedback.ts +98 -0
- package/src/features/tool-feedback/di.config.ts +69 -0
- package/src/features/tool-feedback/edge-edit-tool-feedback.ts +327 -0
- package/src/features/tool-feedback/feedback-action-dispatcher.ts +101 -0
- package/src/features/tool-feedback/marquee-tool-feedback.ts +104 -0
- package/src/features/tool-feedback/model.ts +32 -0
- package/src/features/tool-feedback/view.tsx +70 -0
- package/src/features/tool-palette/di.config.ts +30 -0
- package/src/features/tool-palette/palette-item.ts +40 -0
- package/src/features/tool-palette/tool-palette.ts +416 -0
- package/src/features/tools/base-glsp-tool.ts +53 -0
- package/src/features/tools/change-bounds-tool.ts +445 -0
- package/src/features/tools/delete-tool.ts +120 -0
- package/src/features/tools/di.config.ts +56 -0
- package/src/features/tools/edge-creation-tool.ts +171 -0
- package/src/features/tools/edge-edit-tool.ts +325 -0
- package/src/features/tools/marquee-mouse-tool.ts +244 -0
- package/src/features/tools/marquee-tool.ts +52 -0
- package/src/features/tools/model.ts +22 -0
- package/src/features/tools/node-creation-tool.ts +123 -0
- package/src/features/tools/view.tsx +38 -0
- package/src/features/undo-redo/model.ts +26 -0
- package/src/features/validation/di.config.ts +51 -0
- package/src/features/validation/issue-marker.ts +93 -0
- package/src/features/validation/marker-navigator.spec.ts +207 -0
- package/src/features/validation/marker-navigator.ts +249 -0
- package/src/features/validation/validate.ts +274 -0
- package/src/features/viewport/di.config.ts +47 -0
- package/src/features/viewport/glsp-scroll-mouse-listener.ts +50 -0
- package/src/index.ts +115 -0
- package/src/lib/model.ts +27 -0
- package/src/model-source/glsp-diagram-server.ts +114 -0
- package/src/model-source/glsp-server-status.ts +38 -0
- package/src/utils/argument-utils.ts +127 -0
- package/src/utils/array-utils.ts +55 -0
- package/src/utils/html-utils.ts +25 -0
- package/src/utils/layout-utils.ts +97 -0
- package/src/utils/marker.ts +63 -0
- package/src/utils/smodel-util.ts +149 -0
- package/src/utils/viewpoint-util.ts +99 -0
- package/src/views/base-view-module.ts +98 -0
- package/src/views/default-types.ts +48 -0
- package/src/views/glsp-edge-view.tsx +70 -0
- package/src/views/index.ts +21 -0
- package/src/views/issue-marker-view.tsx +55 -0
- package/src/views/rounded-corner-view.tsx +88 -0
- package/src/views/rounded-corner.ts +88 -0
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/********************************************************************************
|
|
2
|
+
* Copyright (c) 2020 EclipseSource and others.
|
|
3
|
+
*
|
|
4
|
+
* This program and the accompanying materials are made available under the
|
|
5
|
+
* terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
+
* http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
+
*
|
|
8
|
+
* This Source Code may also be made available under the following Secondary
|
|
9
|
+
* Licenses when the conditions for such availability set forth in the Eclipse
|
|
10
|
+
* Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
11
|
+
* with the GNU Classpath Exception which is available at
|
|
12
|
+
* https://www.gnu.org/software/classpath/license.html.
|
|
13
|
+
*
|
|
14
|
+
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
|
|
15
|
+
********************************************************************************/
|
|
16
|
+
import { Action, generateRequestId, RequestAction, ResponseAction } from 'sprotty';
|
|
17
|
+
|
|
18
|
+
import { Args } from '../args';
|
|
19
|
+
|
|
20
|
+
export class RequestEditValidationAction implements RequestAction<SetEditValidationResultAction> {
|
|
21
|
+
static readonly KIND = 'requestEditValidation';
|
|
22
|
+
constructor(
|
|
23
|
+
public readonly contextId: string,
|
|
24
|
+
public readonly modelElementId: string,
|
|
25
|
+
public readonly text: string,
|
|
26
|
+
public readonly requestId: string = generateRequestId(),
|
|
27
|
+
public readonly kind: string = RequestEditValidationAction.KIND) { }
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export class SetEditValidationResultAction implements ResponseAction {
|
|
31
|
+
static readonly KIND = 'setEditValidationResult';
|
|
32
|
+
constructor(
|
|
33
|
+
public readonly status: ValidationStatus,
|
|
34
|
+
public readonly responseId: string = '',
|
|
35
|
+
public readonly args?: Args,
|
|
36
|
+
public readonly kind: string = SetEditValidationResultAction.KIND) { }
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export function isSetEditValidationResultAction(action: Action): action is SetEditValidationResultAction {
|
|
40
|
+
return action !== undefined && (action.kind === SetEditValidationResultAction.KIND)
|
|
41
|
+
&& (action as SetEditValidationResultAction).status !== undefined;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export interface ValidationStatus {
|
|
45
|
+
/**
|
|
46
|
+
* The severity of the validation returned by the server.
|
|
47
|
+
*/
|
|
48
|
+
readonly severity: ValidationStatus.Severity;
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* The validation status message which may be rendered in the view.
|
|
52
|
+
*/
|
|
53
|
+
readonly message?: string;
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* A potential error that encodes more details.
|
|
57
|
+
*/
|
|
58
|
+
readonly error?: ResponseError;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export interface ResponseError {
|
|
62
|
+
/**
|
|
63
|
+
* Code identifying the error kind.
|
|
64
|
+
*/
|
|
65
|
+
readonly code: number;
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Error message.
|
|
69
|
+
*/
|
|
70
|
+
readonly message: string;
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Additional custom data, e.g., a serialized stacktrace.
|
|
74
|
+
*/
|
|
75
|
+
readonly data: Record<string, any>;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export namespace ValidationStatus {
|
|
79
|
+
|
|
80
|
+
export enum Severity {
|
|
81
|
+
// eslint-disable-next-line no-shadow
|
|
82
|
+
FATAL, ERROR, WARNING, INFO, OK, NONE
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export const NONE: ValidationStatus = {
|
|
86
|
+
severity: Severity.NONE, message: '', error: { code: -1, message: '', data: {} }
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
export function isOk(validationStatus: ValidationStatus): boolean {
|
|
90
|
+
return validationStatus.severity === Severity.OK
|
|
91
|
+
|| validationStatus.severity === Severity.INFO
|
|
92
|
+
|| validationStatus.severity === Severity.NONE;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
export function isWarning(validationStatus: ValidationStatus): boolean {
|
|
96
|
+
return validationStatus.severity === Severity.WARNING;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
export function isError(validationStatus: ValidationStatus): boolean {
|
|
100
|
+
return validationStatus.severity === Severity.ERROR
|
|
101
|
+
|| validationStatus.severity === Severity.FATAL;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/********************************************************************************
|
|
2
|
+
* Copyright (c) 2021 EclipseSource and others.
|
|
3
|
+
*
|
|
4
|
+
* This program and the accompanying materials are made available under the
|
|
5
|
+
* terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
+
* http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
+
*
|
|
8
|
+
* This Source Code may also be made available under the following Secondary
|
|
9
|
+
* Licenses when the conditions for such availability set forth in the Eclipse
|
|
10
|
+
* Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
11
|
+
* with the GNU Classpath Exception which is available at
|
|
12
|
+
* https://www.gnu.org/software/classpath/license.html.
|
|
13
|
+
*
|
|
14
|
+
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
|
|
15
|
+
********************************************************************************/
|
|
16
|
+
import { Action } from 'sprotty';
|
|
17
|
+
|
|
18
|
+
export class FocusStateChangedAction implements Action {
|
|
19
|
+
static KIND = 'focusStateChanged';
|
|
20
|
+
readonly kind = FocusStateChangedAction.KIND;
|
|
21
|
+
constructor(public readonly hasFocus: boolean) { }
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export function isFocusStateChangedAction(action: Action): action is FocusStateChangedAction {
|
|
25
|
+
return action.kind === FocusStateChangedAction.KIND;
|
|
26
|
+
}
|
package/src/base/args.ts
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/********************************************************************************
|
|
2
|
+
* Copyright (c) 2020 EclipseSource and others.
|
|
3
|
+
*
|
|
4
|
+
* This program and the accompanying materials are made available under the
|
|
5
|
+
* terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
+
* http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
+
*
|
|
8
|
+
* This Source Code may also be made available under the following Secondary
|
|
9
|
+
* Licenses when the conditions for such availability set forth in the Eclipse
|
|
10
|
+
* Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
11
|
+
* with the GNU Classpath Exception which is available at
|
|
12
|
+
* https://www.gnu.org/software/classpath/license.html.
|
|
13
|
+
*
|
|
14
|
+
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
|
|
15
|
+
********************************************************************************/
|
|
16
|
+
import { SModelElement } from 'sprotty';
|
|
17
|
+
|
|
18
|
+
export interface Args { [key: string]: string | number | boolean }
|
|
19
|
+
|
|
20
|
+
export interface SArgumentable {
|
|
21
|
+
args: Args;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export function hasArguments(element?: SModelElement): element is SModelElement & SArgumentable {
|
|
25
|
+
return element !== undefined && 'args' in element;
|
|
26
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/********************************************************************************
|
|
2
|
+
* Copyright (c) 2020 EclipseSource and others.
|
|
3
|
+
*
|
|
4
|
+
* This program and the accompanying materials are made available under the
|
|
5
|
+
* terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
+
* http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
+
*
|
|
8
|
+
* This Source Code may also be made available under the following Secondary
|
|
9
|
+
* Licenses when the conditions for such availability set forth in the Eclipse
|
|
10
|
+
* Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
11
|
+
* with the GNU Classpath Exception which is available at
|
|
12
|
+
* https://www.gnu.org/software/classpath/license.html.
|
|
13
|
+
*
|
|
14
|
+
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
|
|
15
|
+
********************************************************************************/
|
|
16
|
+
import { LabeledAction } from 'sprotty/lib';
|
|
17
|
+
|
|
18
|
+
export interface SetAutoCompleteValueAction extends LabeledAction {
|
|
19
|
+
readonly text: string;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export function isSetAutoCompleteValueAction(action: LabeledAction): action is SetAutoCompleteValueAction {
|
|
23
|
+
return action !== undefined && (action as SetAutoCompleteValueAction).text !== undefined;
|
|
24
|
+
}
|
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
/********************************************************************************
|
|
2
|
+
* Copyright (c) 2020 EclipseSource and others.
|
|
3
|
+
*
|
|
4
|
+
* This program and the accompanying materials are made available under the
|
|
5
|
+
* terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
+
* http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
+
*
|
|
8
|
+
* This Source Code may also be made available under the following Secondary
|
|
9
|
+
* Licenses when the conditions for such availability set forth in the Eclipse
|
|
10
|
+
* Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
11
|
+
* with the GNU Classpath Exception which is available at
|
|
12
|
+
* https://www.gnu.org/software/classpath/license.html.
|
|
13
|
+
*
|
|
14
|
+
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
|
|
15
|
+
********************************************************************************/
|
|
16
|
+
import { AutocompleteResult, AutocompleteSettings } from 'autocompleter';
|
|
17
|
+
import { Action, ILogger, isAction, isLabeledAction, LabeledAction, SModelRoot } from 'sprotty/lib';
|
|
18
|
+
import { toArray } from 'sprotty/lib/utils/iterable';
|
|
19
|
+
import { matchesKeystroke } from 'sprotty/lib/utils/keyboard';
|
|
20
|
+
|
|
21
|
+
import { ValidationStatus } from '../actions/edit-validation-actions';
|
|
22
|
+
import { isSetAutoCompleteValueAction } from './auto-complete-actions';
|
|
23
|
+
import { IValidationDecorator } from './validation-decorator';
|
|
24
|
+
|
|
25
|
+
export interface AutoCompleteSettings {
|
|
26
|
+
readonly noSuggestionsMessage?: string;
|
|
27
|
+
readonly suggestionsClass?: string;
|
|
28
|
+
readonly debounceWaitMs?: number;
|
|
29
|
+
readonly showOnFocus?: boolean;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export interface InputValidator {
|
|
33
|
+
validate(input: string): Promise<ValidationStatus>;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export interface SuggestionProvider {
|
|
37
|
+
provideSuggestions(input: string): Promise<LabeledAction[]>;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export interface InputValueInitializer {
|
|
41
|
+
initializeValue(containerElement: HTMLElement, root: Readonly<SModelRoot>, ...contextElementIds: string[]): string;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export interface SuggestionSubmitHandler {
|
|
45
|
+
executeFromSuggestion(input: LabeledAction | Action | Action[]): void;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export interface TextSubmitHandler {
|
|
49
|
+
executeFromTextOnlyInput(input: string): void;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
53
|
+
const configureAutocomplete: (settings: AutocompleteSettings<LabeledAction>) => AutocompleteResult = require('autocompleter');
|
|
54
|
+
|
|
55
|
+
export class AutoCompleteWidget {
|
|
56
|
+
loadingIndicatorClasses = ['loading', 'fa', 'fa-spinner', 'fa-pulse', 'fa-3x', 'fa-fw'];
|
|
57
|
+
|
|
58
|
+
protected containerElement: HTMLElement;
|
|
59
|
+
protected inputElement: HTMLInputElement;
|
|
60
|
+
protected loadingIndicator: HTMLSpanElement;
|
|
61
|
+
protected autoCompleteResult: AutocompleteResult;
|
|
62
|
+
protected contextActions?: LabeledAction[];
|
|
63
|
+
protected previousContent?: string;
|
|
64
|
+
|
|
65
|
+
protected inputValidator?: InputValidator;
|
|
66
|
+
protected validationDecorator: IValidationDecorator = IValidationDecorator.NO_DECORATION;
|
|
67
|
+
|
|
68
|
+
protected textSubmitHandler?: TextSubmitHandler;
|
|
69
|
+
|
|
70
|
+
constructor(
|
|
71
|
+
public autoSuggestionSettings: AutoCompleteSettings,
|
|
72
|
+
public suggestionProvider: SuggestionProvider,
|
|
73
|
+
public suggestionSubmitHandler: SuggestionSubmitHandler,
|
|
74
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
75
|
+
protected notifyClose: () => void = () => { },
|
|
76
|
+
protected logger?: ILogger
|
|
77
|
+
) { }
|
|
78
|
+
|
|
79
|
+
configureValidation(inputValidator: InputValidator,
|
|
80
|
+
validationDecorator: IValidationDecorator = IValidationDecorator.NO_DECORATION): void {
|
|
81
|
+
this.inputValidator = inputValidator;
|
|
82
|
+
this.validationDecorator = validationDecorator;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
configureTextSubmitHandler(textSubmitHandler: TextSubmitHandler): void {
|
|
86
|
+
this.textSubmitHandler = textSubmitHandler;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
initialize(containerElement: HTMLElement): void {
|
|
90
|
+
this.containerElement = containerElement;
|
|
91
|
+
this.inputElement = this.createInputElement();
|
|
92
|
+
this.containerElement.appendChild(this.inputElement);
|
|
93
|
+
this.containerElement.style.position = 'absolute';
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
protected createInputElement(): HTMLInputElement {
|
|
97
|
+
const inputElement = document.createElement('input');
|
|
98
|
+
inputElement.style.position = 'absolute';
|
|
99
|
+
inputElement.spellcheck = false;
|
|
100
|
+
inputElement.autocapitalize = 'false';
|
|
101
|
+
inputElement.autocomplete = 'false';
|
|
102
|
+
inputElement.style.width = '100%';
|
|
103
|
+
inputElement.addEventListener('keydown', event => this.handleKeyDown(event));
|
|
104
|
+
inputElement.addEventListener('blur', () => window.setTimeout(() => this.notifyClose(), 200));
|
|
105
|
+
return inputElement;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
protected handleKeyDown(event: KeyboardEvent): void {
|
|
109
|
+
if (matchesKeystroke(event, 'Escape')) {
|
|
110
|
+
this.notifyClose();
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
if (matchesKeystroke(event, 'Enter') && !this.isInputElementChanged() && this.isSuggestionAvailable()) {
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
if (this.isInputElementChanged()) {
|
|
117
|
+
this.invalidateValidationResultAndContextActions();
|
|
118
|
+
}
|
|
119
|
+
if (!matchesKeystroke(event, 'Enter') || this.isSuggestionAvailable()) {
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
if (!this.validationDecorator.isValidatedOk()) {
|
|
123
|
+
event.stopImmediatePropagation();
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
if (this.textSubmitHandler) {
|
|
127
|
+
this.executeFromTextOnlyInput();
|
|
128
|
+
this.notifyClose();
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
protected isInputElementChanged(): boolean {
|
|
133
|
+
return this.inputElement.value !== this.previousContent;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
protected invalidateValidationResultAndContextActions(): void {
|
|
137
|
+
this.contextActions = undefined;
|
|
138
|
+
this.validationDecorator.invalidate();
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
open(root: Readonly<SModelRoot>, ...contextElementIds: string[]): void {
|
|
142
|
+
this.contextActions = undefined;
|
|
143
|
+
this.autoCompleteResult = configureAutocomplete(this.autocompleteSettings(root));
|
|
144
|
+
this.previousContent = this.inputElement.value;
|
|
145
|
+
this.inputElement.setSelectionRange(0, this.inputElement.value.length);
|
|
146
|
+
this.inputElement.focus();
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
protected autocompleteSettings(root: Readonly<SModelRoot>): AutocompleteSettings<LabeledAction> {
|
|
150
|
+
return {
|
|
151
|
+
input: this.inputElement,
|
|
152
|
+
emptyMsg: this.autoSuggestionSettings.noSuggestionsMessage,
|
|
153
|
+
className: this.autoSuggestionSettings.suggestionsClass,
|
|
154
|
+
showOnFocus: this.autoSuggestionSettings.showOnFocus,
|
|
155
|
+
debounceWaitMs: this.autoSuggestionSettings.debounceWaitMs,
|
|
156
|
+
minLength: -1,
|
|
157
|
+
fetch: (text: string, update: (items: LabeledAction[]) => void) =>
|
|
158
|
+
this.updateSuggestions(update, text, root),
|
|
159
|
+
onSelect: (item: LabeledAction) => this.onSelect(item),
|
|
160
|
+
render: (item: LabeledAction, currentValue: string): HTMLDivElement | undefined =>
|
|
161
|
+
this.renderSuggestions(item, currentValue),
|
|
162
|
+
customize: (input: HTMLInputElement, inputRect: ClientRect | DOMRect, container: HTMLDivElement, maxHeight: number) => {
|
|
163
|
+
this.customizeInputElement(input, inputRect, container, maxHeight);
|
|
164
|
+
}
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
protected customizeInputElement(input: HTMLInputElement, inputRect: ClientRect | DOMRect, container: HTMLDivElement, maxHeight: number): void {
|
|
169
|
+
// move container into our UIExtension container as this is already positioned correctly
|
|
170
|
+
if (this.containerElement) {
|
|
171
|
+
this.containerElement.appendChild(container);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
protected updateSuggestions(update: (items: LabeledAction[]) => void, text: string, root: Readonly<SModelRoot>, ...contextElementIds: string[]): void {
|
|
176
|
+
this.onLoading();
|
|
177
|
+
this.doUpdateSuggestions(text, root)
|
|
178
|
+
.then(actions => {
|
|
179
|
+
this.contextActions = this.filterActions(text, actions);
|
|
180
|
+
update(this.contextActions);
|
|
181
|
+
this.onLoaded('success');
|
|
182
|
+
})
|
|
183
|
+
.catch(reason => {
|
|
184
|
+
if (this.logger) {
|
|
185
|
+
this.logger.error(this, 'Failed to obtain suggestions', reason);
|
|
186
|
+
}
|
|
187
|
+
this.onLoaded('error');
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
protected onLoading(): void {
|
|
192
|
+
if (this.loadingIndicator && this.containerElement.contains(this.loadingIndicator)) {
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
this.loadingIndicator = document.createElement('span');
|
|
196
|
+
this.loadingIndicator.classList.add(...this.loadingIndicatorClasses);
|
|
197
|
+
this.containerElement.appendChild(this.loadingIndicator);
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
protected doUpdateSuggestions(text: string, root: Readonly<SModelRoot>, ...contextElementIds: string[]): Promise<LabeledAction[]> {
|
|
201
|
+
return this.suggestionProvider.provideSuggestions(text);
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
protected onLoaded(_success: 'success' | 'error'): void {
|
|
205
|
+
if (this.containerElement.contains(this.loadingIndicator)) {
|
|
206
|
+
this.containerElement.removeChild(this.loadingIndicator);
|
|
207
|
+
}
|
|
208
|
+
this.validationDecorator.invalidate();
|
|
209
|
+
this.validateInputIfNoContextActions();
|
|
210
|
+
this.previousContent = this.inputElement.value;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
protected renderSuggestions(item: LabeledAction, value: string): HTMLDivElement {
|
|
214
|
+
const itemElement = document.createElement('div');
|
|
215
|
+
const wordMatcher = this.espaceForRegExp(value).split(' ').join('|');
|
|
216
|
+
const regex = new RegExp(wordMatcher, 'gi');
|
|
217
|
+
if (item.icon) {
|
|
218
|
+
this.renderIcon(itemElement, item.icon);
|
|
219
|
+
}
|
|
220
|
+
itemElement.innerHTML += item.label.replace(regex, match => '<em>' + match + '</em>');
|
|
221
|
+
return itemElement;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
protected espaceForRegExp(value: string): string {
|
|
225
|
+
return value.replace(/([.?*+^$[\]\\(){}|-])/g, '\\$1');
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
protected renderIcon(itemElement: HTMLDivElement, icon: string): void {
|
|
229
|
+
itemElement.innerHTML += `<span class="icon ${icon}"></span>`;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
protected filterActions(filterText: string, actions: LabeledAction[]): LabeledAction[] {
|
|
233
|
+
return toArray(actions.filter(action => {
|
|
234
|
+
const label = action.label.toLowerCase();
|
|
235
|
+
const searchWords = filterText.split(' ');
|
|
236
|
+
return searchWords.every(word => label.indexOf(word.toLowerCase()) !== -1);
|
|
237
|
+
}));
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
protected onSelect(item: LabeledAction): void {
|
|
241
|
+
if (isSetAutoCompleteValueAction(item)) {
|
|
242
|
+
this.inputElement.value = item.text;
|
|
243
|
+
// trigger update of suggestions with an keyup event
|
|
244
|
+
window.setTimeout(() => this.inputElement.dispatchEvent(new Event('keyup')));
|
|
245
|
+
} else {
|
|
246
|
+
this.executeFromSuggestion(item);
|
|
247
|
+
this.notifyClose();
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
protected validateInputIfNoContextActions(): void {
|
|
252
|
+
if (this.isNoOrExactlyOneMatchingContextAction()) {
|
|
253
|
+
this.validateInput();
|
|
254
|
+
} else {
|
|
255
|
+
this.validationDecorator.dispose();
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
private isNoOrExactlyOneMatchingContextAction(): boolean | undefined {
|
|
260
|
+
return !this.isSuggestionAvailable()
|
|
261
|
+
|| (this.contextActions
|
|
262
|
+
&& this.contextActions.length === 1
|
|
263
|
+
&& this.inputElement.value.endsWith(this.contextActions[0].label));
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
protected isSuggestionAvailable(): boolean | undefined {
|
|
267
|
+
return this.contextActions && this.contextActions.length > 0;
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
validateInput(): void {
|
|
271
|
+
if (this.inputValidator) {
|
|
272
|
+
this.inputValidator.validate(this.inputElement.value)
|
|
273
|
+
.then(result => this.validationDecorator.decorateValidationResult(result))
|
|
274
|
+
.catch(error => this.handleErrorDuringValidation(error));
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
protected handleErrorDuringValidation(error: Error): void {
|
|
279
|
+
if (this.logger) {
|
|
280
|
+
this.logger.error(this, 'Failed to validate input', error);
|
|
281
|
+
}
|
|
282
|
+
this.validationDecorator.dispose();
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
protected executeFromSuggestion(input: LabeledAction | Action[] | Action): void {
|
|
286
|
+
this.suggestionSubmitHandler.executeFromSuggestion(input);
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
protected executeFromTextOnlyInput(): void {
|
|
290
|
+
if (this.textSubmitHandler) {
|
|
291
|
+
this.textSubmitHandler.executeFromTextOnlyInput(this.inputElement.value);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
get inputField(): HTMLInputElement {
|
|
296
|
+
return this.inputElement;
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
dispose(): void {
|
|
300
|
+
this.validationDecorator.dispose();
|
|
301
|
+
if (this.autoCompleteResult) {
|
|
302
|
+
this.autoCompleteResult.destroy();
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
export function toActionArray(input: LabeledAction | Action[] | Action): Action[] {
|
|
308
|
+
if (isLabeledAction(input)) {
|
|
309
|
+
return input.actions;
|
|
310
|
+
} else if (isAction(input)) {
|
|
311
|
+
return [input];
|
|
312
|
+
}
|
|
313
|
+
return [];
|
|
314
|
+
}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/********************************************************************************
|
|
2
|
+
* Copyright (c) 2020 EclipseSource and others.
|
|
3
|
+
*
|
|
4
|
+
* This program and the accompanying materials are made available under the
|
|
5
|
+
* terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
+
* http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
+
*
|
|
8
|
+
* This Source Code may also be made available under the following Secondary
|
|
9
|
+
* Licenses when the conditions for such availability set forth in the Eclipse
|
|
10
|
+
* Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
11
|
+
* with the GNU Classpath Exception which is available at
|
|
12
|
+
* https://www.gnu.org/software/classpath/license.html.
|
|
13
|
+
*
|
|
14
|
+
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
|
|
15
|
+
********************************************************************************/
|
|
16
|
+
import { ValidationStatus } from '../actions/edit-validation-actions';
|
|
17
|
+
|
|
18
|
+
export interface IValidationDecorator {
|
|
19
|
+
decorateValidationResult(status: ValidationStatus): void;
|
|
20
|
+
isValidatedOk(): boolean;
|
|
21
|
+
invalidate(): void;
|
|
22
|
+
dispose(): void;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export namespace IValidationDecorator {
|
|
26
|
+
export const NO_DECORATION: IValidationDecorator = {
|
|
27
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
28
|
+
decorateValidationResult(_status: ValidationStatus) { },
|
|
29
|
+
isValidatedOk(): boolean {
|
|
30
|
+
return false;
|
|
31
|
+
},
|
|
32
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
33
|
+
invalidate() { },
|
|
34
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
35
|
+
dispose() { }
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export class ValidationDecorator implements IValidationDecorator {
|
|
40
|
+
warningClasses = ['warning'];
|
|
41
|
+
warningIconClasses = ['fa', 'fa-question-circle'];
|
|
42
|
+
errorClasses = ['error'];
|
|
43
|
+
errorIconClasses = ['fa', 'fa-exclamation-circle'];
|
|
44
|
+
|
|
45
|
+
isValidated = false;
|
|
46
|
+
hasValidationError = false;
|
|
47
|
+
|
|
48
|
+
protected decorationDiv?: HTMLDivElement;
|
|
49
|
+
|
|
50
|
+
constructor(protected containerElement: HTMLElement) { }
|
|
51
|
+
|
|
52
|
+
decorateValidationResult(status: ValidationStatus): void {
|
|
53
|
+
if (ValidationStatus.isError(status)) {
|
|
54
|
+
this.hasValidationError = true;
|
|
55
|
+
this.decorateError(status.message ? status.message : 'Error');
|
|
56
|
+
} else if (ValidationStatus.isWarning(status)) {
|
|
57
|
+
this.hasValidationError = false;
|
|
58
|
+
this.decorateWarning(status.message ? status.message : 'Warning');
|
|
59
|
+
} else {
|
|
60
|
+
this.hasValidationError = false;
|
|
61
|
+
this.dispose();
|
|
62
|
+
}
|
|
63
|
+
this.isValidated = true;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
protected decorateError(message: string): void {
|
|
67
|
+
this.switchCssClasses(this.containerElement, this.errorClasses);
|
|
68
|
+
const div = this.createDecorationDiv();
|
|
69
|
+
this.switchCssClasses(div, this.errorClasses);
|
|
70
|
+
div.innerHTML = `<span class="${this.errorIconClasses.join(' ')}"></span> ${message}`;
|
|
71
|
+
this.adjustPosition();
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
protected decorateWarning(message: string): void {
|
|
75
|
+
this.switchCssClasses(this.containerElement, this.warningClasses);
|
|
76
|
+
const div = this.createDecorationDiv();
|
|
77
|
+
this.switchCssClasses(div, this.warningClasses);
|
|
78
|
+
div.innerHTML = `<span class="${this.warningIconClasses.join(' ')}"></span> ${message}`;
|
|
79
|
+
this.adjustPosition();
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
protected switchCssClasses(element: HTMLElement, cssClasses: string[]): void {
|
|
83
|
+
element.classList.remove(...this.errorClasses, ...this.warningClasses);
|
|
84
|
+
element.classList.add(...cssClasses);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
protected createDecorationDiv(): HTMLDivElement {
|
|
88
|
+
if (!this.decorationDiv) {
|
|
89
|
+
this.containerElement.classList.add('validation');
|
|
90
|
+
this.decorationDiv = document.createElement('div');
|
|
91
|
+
this.decorationDiv.style.width = `${this.decorationContainerWidth()}px`;
|
|
92
|
+
this.decorationDiv.classList.add('validation-decorator');
|
|
93
|
+
this.containerElement.appendChild(this.decorationDiv);
|
|
94
|
+
}
|
|
95
|
+
return this.decorationDiv;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
protected decorationContainerWidth(): number {
|
|
99
|
+
return this.containerElement.clientWidth - 22;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
protected adjustPosition(): void {
|
|
103
|
+
if (this.decorationDiv) {
|
|
104
|
+
const height = this.decorationDiv.clientHeight + 2;
|
|
105
|
+
this.decorationDiv.style.top = `-${height}px`;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
isValidatedOk(): boolean {
|
|
110
|
+
return this.isValidated && !this.hasValidationError;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
invalidate(): void {
|
|
114
|
+
this.isValidated = false;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
dispose(): void {
|
|
118
|
+
this.hasValidationError = false;
|
|
119
|
+
this.isValidated = false;
|
|
120
|
+
if (this.decorationDiv && this.containerElement && this.containerElement.contains(this.decorationDiv)) {
|
|
121
|
+
this.containerElement.removeChild(this.decorationDiv);
|
|
122
|
+
this.switchCssClasses(this.containerElement, []);
|
|
123
|
+
this.decorationDiv = undefined;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/********************************************************************************
|
|
2
|
+
* Copyright (c) 2019 EclipseSource and others.
|
|
3
|
+
*
|
|
4
|
+
* This program and the accompanying materials are made available under the
|
|
5
|
+
* terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
+
* http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
+
*
|
|
8
|
+
* This Source Code may also be made available under the following Secondary
|
|
9
|
+
* Licenses when the conditions for such availability set forth in the Eclipse
|
|
10
|
+
* Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
11
|
+
* with the GNU Classpath Exception which is available at
|
|
12
|
+
* https://www.gnu.org/software/classpath/license.html.
|
|
13
|
+
*
|
|
14
|
+
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
|
|
15
|
+
********************************************************************************/
|
|
16
|
+
import { inject, injectable } from 'inversify';
|
|
17
|
+
import { CommandStack, IActionDispatcher, SModelRoot, TYPES } from 'sprotty';
|
|
18
|
+
|
|
19
|
+
import { RedoOperation, UndoOperation } from '../features/undo-redo/model';
|
|
20
|
+
|
|
21
|
+
@injectable()
|
|
22
|
+
export class GLSPCommandStack extends CommandStack {
|
|
23
|
+
|
|
24
|
+
@inject(TYPES.IActionDispatcherProvider) protected actionDispatcher: () => Promise<IActionDispatcher>;
|
|
25
|
+
|
|
26
|
+
undo(): Promise<SModelRoot> {
|
|
27
|
+
this.actionDispatcher().then(dispatcher => dispatcher.dispatch(new UndoOperation()));
|
|
28
|
+
return this.thenUpdate();
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
redo(): Promise<SModelRoot> {
|
|
32
|
+
this.actionDispatcher().then(dispatcher => dispatcher.dispatch(new RedoOperation()));
|
|
33
|
+
return this.thenUpdate();
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|