Migration to TS

This commit is contained in:
Paulo Gustavo Veiga 2022-02-26 16:43:25 -08:00
parent b09035e3b2
commit 413f33c9b3
13 changed files with 80 additions and 170 deletions

View File

@ -1,64 +0,0 @@
/*
* Copyright [2021] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the
* "powered by wisemapping" text requirement on every single page;
* you may not use this file except in compliance with the License.
* You may obtain a copy of the license at
*
* http://www.wisemapping.org/license
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import Icon from './Icon';
class ActionIcon extends Icon {
constructor(topic, url) {
super(url);
this._node = topic;
}
getNode() {
return this._node;
}
setPosition(x, y) {
const size = this.getSize();
this.getImage().setPosition(x - size.width / 2, y - size.height / 2);
}
addEvent(event, fn) {
this.getImage().addEvent(event, fn);
}
addToGroup(group) {
group.append(this.getImage());
}
setVisibility(visible) {
this.getImage().setVisibility(visible);
}
isVisible() {
return this.getImage().isVisible();
}
setCursor(cursor) {
return this.getImage().setCursor(cursor);
}
moveToBack(cursor) {
return this.getImage().moveToBack(cursor);
}
moveToFront(cursor) {
return this.getImage().moveToFront(cursor);
}
}
export default ActionIcon;

View File

@ -39,7 +39,7 @@ import Relationship from './Relationship';
import TopicEventDispatcher, { TopicEvent } from './TopicEventDispatcher'; import TopicEventDispatcher, { TopicEvent } from './TopicEventDispatcher';
import TopicFeatureFactory from './TopicFeature'; import TopicFeatureFactory from './TopicFeature';
import { create } from './NodeGraphUtils'; import TopicFactory from './TopicFactory';
import EventBus from './layout/EventBus'; import EventBus from './layout/EventBus';
import EventBusDispatcher from './layout/EventBusDispatcher'; import EventBusDispatcher from './layout/EventBusDispatcher';
@ -225,9 +225,9 @@ class Designer extends Events {
return dragManager; return dragManager;
} }
private _buildNodeGraph(model: NodeModel, readOnly: boolean): MainTopic { private _buildNodeGraph(model: NodeModel, readOnly: boolean): Topic {
// Create node graph ... // Create node graph ...
const topic = create(model, { readOnly }); const topic = TopicFactory.create(model, { readOnly });
this.getModel().addTopic(topic); this.getModel().addTopic(topic);
const me = this; const me = this;
// Add Topic events ... // Add Topic events ...

View File

@ -16,19 +16,28 @@
* limitations under the License. * limitations under the License.
*/ */
import { $assert } from '@wisemapping/core-js'; import { $assert } from '@wisemapping/core-js';
import ActionDispatcher from './ActionDispatcher';
import Command from './Command';
import CommandContext from './CommandContext';
import DesignerUndoManager from './DesignerUndoManager'; import DesignerUndoManager from './DesignerUndoManager';
import EventBus from './layout/EventBus'; import EventBus from './layout/EventBus';
class DesignerActionRunner { class DesignerActionRunner {
constructor(commandContext, notifier) { private _undoManager: DesignerUndoManager;
private _context: CommandContext;
private _actionDisplatcher: ActionDispatcher;
constructor(commandContext: CommandContext, notifier: ActionDispatcher) {
$assert(commandContext, 'commandContext can not be null'); $assert(commandContext, 'commandContext can not be null');
this._undoManager = new DesignerUndoManager(); this._undoManager = new DesignerUndoManager();
this._context = commandContext; this._context = commandContext;
this._notifier = notifier; this._actionDisplatcher = notifier;
} }
execute(command) { execute(command: Command): void {
$assert(command, 'command can not be null'); $assert(command, 'command can not be null');
command.execute(this._context); command.execute(this._context);
this._undoManager.enqueue(command); this._undoManager.enqueue(command);
@ -36,21 +45,21 @@ class DesignerActionRunner {
EventBus.instance.fireEvent(EventBus.events.DoLayout); EventBus.instance.fireEvent(EventBus.events.DoLayout);
} }
undo() { undo(): void {
this._undoManager.execUndo(this._context); this._undoManager.execUndo(this._context);
this.fireChangeEvent(); this.fireChangeEvent();
EventBus.instance.fireEvent(EventBus.events.DoLayout); EventBus.instance.fireEvent(EventBus.events.DoLayout);
} }
redo() { redo(): void {
this._undoManager.execRedo(this._context); this._undoManager.execRedo(this._context);
this.fireChangeEvent(); this.fireChangeEvent();
EventBus.instance.fireEvent(EventBus.events.DoLayout); EventBus.instance.fireEvent(EventBus.events.DoLayout);
} }
fireChangeEvent() { fireChangeEvent(): void {
const event = this._undoManager.buildEvent(); const event = this._undoManager.buildEvent();
this._notifier.fireEvent('modelUpdate', event); this._actionDisplatcher.fireEvent('modelUpdate', event);
} }
} }

View File

@ -18,7 +18,6 @@
import { $assert, $defined } from '@wisemapping/core-js'; import { $assert, $defined } from '@wisemapping/core-js';
import { Point, CurvedLine, Rect } from '@wisemapping/web2d'; import { Point, CurvedLine, Rect } from '@wisemapping/web2d';
import DragTopicConfig from './DragTopicConfig';
import SizeType from './SizeType'; import SizeType from './SizeType';
import Topic from './Topic'; import Topic from './Topic';
import Shape from './util/Shape'; import Shape from './util/Shape';
@ -43,7 +42,7 @@ class DragPivot {
constructor() { constructor() {
this._position = new Point(); this._position = new Point();
this._size = DragTopicConfig.PIVOT_SIZE; this._size = DragPivot.DEFAULT_PIVOT_SIZE;
this._straightLine = this._buildStraightLine(); this._straightLine = this._buildStraightLine();
this._curvedLine = this._buildCurvedLine(); this._curvedLine = this._buildCurvedLine();
@ -251,6 +250,8 @@ class DragPivot {
this.setVisibility(false); this.setVisibility(false);
this._targetTopic = null; this._targetTopic = null;
} }
static DEFAULT_PIVOT_SIZE = { width: 50, height: 6 };
} }
export default DragPivot; export default DragPivot;

View File

@ -1,5 +0,0 @@
const PIVOT_SIZE = { width: 50, height: 6 };
export default {
PIVOT_SIZE,
};

View File

@ -17,20 +17,21 @@
*/ */
class EditorProperties { class EditorProperties {
private _zoom: number;
constructor() { constructor() {
this._zoom = 0; this._zoom = 0;
this._position = 0;
} }
setZoom(zoom) { setZoom(zoom: number) {
this._zoom = zoom; this._zoom = zoom;
} }
getZoom() { getZoom(): number {
return this._zoom; return this._zoom;
} }
asProperties() { asProperties(): string {
return `zoom=${this._zoom}\n`; return `zoom=${this._zoom}\n`;
} }
} }

View File

@ -16,14 +16,14 @@
* limitations under the License. * limitations under the License.
*/ */
import { $assert } from '@wisemapping/core-js'; import { $assert } from '@wisemapping/core-js';
import { Image } from '@wisemapping/web2d'; import { Image, Point } from '@wisemapping/web2d';
import IconGroup from './IconGroup'; import IconGroup from './IconGroup';
import { Point } from '@wisemapping/web2d';
import SizeType from './SizeType'; import SizeType from './SizeType';
import FeatureModel from './model/FeatureModel'; import FeatureModel from './model/FeatureModel';
abstract class Icon { abstract class Icon {
protected _image: Image; protected _image: Image;
protected _group: IconGroup; protected _group: IconGroup;
constructor(url: string) { constructor(url: string) {

View File

@ -1,37 +0,0 @@
import { $assert } from '@wisemapping/core-js';
import CentralTopic from './CentralTopic';
import MainTopic from './MainTopic';
/**
* creates a new topic from the given node model
* @memberof mindplot.Nodegraph
* @param {mindplot.model.NodeModel} nodeModel
* @param {Object} options
* @throws will throw an error if nodeModel is null or undefined
* @throws will throw an error if the nodeModel's type is null or undefined
* @throws will throw an error if the node type cannot be recognized as either central or main
* topic type
* @return {mindplot.CentralTopic|mindplot.MainTopic} the new topic
*/
export const create = (nodeModel, options) => {
$assert(nodeModel, 'Model can not be null');
const type = nodeModel.getType();
$assert(type, 'Node model type can not be null');
let result;
if (type === 'CentralTopic') {
result = new CentralTopic(nodeModel, options);
} else if (type === 'MainTopic') {
result = new MainTopic(nodeModel, options);
} else {
$assert(false, `unsupported node type:${type}`);
}
return result;
};
export default {
create,
};

View File

@ -431,7 +431,6 @@ abstract class Topic extends NodeGraph {
this.adjustShapes(); this.adjustShapes();
} }
/** */
setFontSize(value: number, updateModel?: boolean) { setFontSize(value: number, updateModel?: boolean) {
const textShape = this.getTextShape(); const textShape = this.getTextShape();
textShape.setSize(value); textShape.setSize(value);
@ -443,8 +442,7 @@ abstract class Topic extends NodeGraph {
this.adjustShapes(); this.adjustShapes();
} }
/** */ setFontStyle(value: string, updateModel?: boolean) {
setFontStyle(value, updateModel) {
const textShape = this.getTextShape(); const textShape = this.getTextShape();
textShape.setStyle(value); textShape.setStyle(value);
if ($defined(updateModel) && updateModel) { if ($defined(updateModel) && updateModel) {
@ -454,8 +452,7 @@ abstract class Topic extends NodeGraph {
this.adjustShapes(); this.adjustShapes();
} }
/** */ setFontWeight(value: string, updateModel?: boolean) {
setFontWeight(value, updateModel) {
const textShape = this.getTextShape(); const textShape = this.getTextShape();
textShape.setWeight(value); textShape.setWeight(value);
if ($defined(updateModel) && updateModel) { if ($defined(updateModel) && updateModel) {
@ -465,7 +462,6 @@ abstract class Topic extends NodeGraph {
this.adjustShapes(); this.adjustShapes();
} }
/** */
getFontWeight() { getFontWeight() {
const model = this.getModel(); const model = this.getModel();
let result = model.getFontWeight(); let result = model.getFontWeight();
@ -476,8 +472,7 @@ abstract class Topic extends NodeGraph {
return result; return result;
} }
/** */ getFontFamily(): string {
getFontFamily() {
const model = this.getModel(); const model = this.getModel();
let result = model.getFontFamily(); let result = model.getFontFamily();
if (!$defined(result)) { if (!$defined(result)) {
@ -487,8 +482,7 @@ abstract class Topic extends NodeGraph {
return result; return result;
} }
/** */ getFontColor(): string {
getFontColor() {
const model = this.getModel(); const model = this.getModel();
let result = model.getFontColor(); let result = model.getFontColor();
if (!$defined(result)) { if (!$defined(result)) {
@ -498,8 +492,7 @@ abstract class Topic extends NodeGraph {
return result; return result;
} }
/** */ getFontStyle(): string {
getFontStyle() {
const model = this.getModel(); const model = this.getModel();
let result = model.getFontStyle(); let result = model.getFontStyle();
if (!$defined(result)) { if (!$defined(result)) {
@ -509,8 +502,7 @@ abstract class Topic extends NodeGraph {
return result; return result;
} }
/** */ getFontSize(): number {
getFontSize() {
const model = this.getModel(); const model = this.getModel();
let result = model.getFontSize(); let result = model.getFontSize();
if (!$defined(result)) { if (!$defined(result)) {
@ -520,8 +512,7 @@ abstract class Topic extends NodeGraph {
return result; return result;
} }
/** */ setFontColor(value: string, updateModel?: boolean) {
setFontColor(value, updateModel) {
const textShape = this.getTextShape(); const textShape = this.getTextShape();
textShape.setColor(value); textShape.setColor(value);
if ($defined(updateModel) && updateModel) { if ($defined(updateModel) && updateModel) {
@ -530,7 +521,7 @@ abstract class Topic extends NodeGraph {
} }
} }
_setText(text: string, updateModel: boolean) { private _setText(text: string, updateModel?: boolean) {
const textShape = this.getTextShape(); const textShape = this.getTextShape();
textShape.setText(text == null ? TopicStyle.defaultText(this) : text); textShape.setText(text == null ? TopicStyle.defaultText(this) : text);
@ -540,7 +531,6 @@ abstract class Topic extends NodeGraph {
} }
} }
/** */
setText(text: string) { setText(text: string) {
// Avoid empty nodes ... // Avoid empty nodes ...
if (!text || $.trim(text).length === 0) { if (!text || $.trim(text).length === 0) {
@ -552,7 +542,6 @@ abstract class Topic extends NodeGraph {
this.adjustShapes(); this.adjustShapes();
} }
/** */
getText(): string { getText(): string {
const model = this.getModel(); const model = this.getModel();
let result = model.getText(); let result = model.getText();
@ -562,12 +551,11 @@ abstract class Topic extends NodeGraph {
return result; return result;
} }
/** */
setBackgroundColor(color: string) { setBackgroundColor(color: string) {
this._setBackgroundColor(color, true); this._setBackgroundColor(color, true);
} }
_setBackgroundColor(color: string, updateModel: boolean) { private _setBackgroundColor(color: string, updateModel: boolean) {
const innerShape = this.getInnerShape(); const innerShape = this.getInnerShape();
innerShape.setFill(color); innerShape.setFill(color);
@ -593,11 +581,11 @@ abstract class Topic extends NodeGraph {
} }
/** */ /** */
setBorderColor(color: string) { setBorderColor(color: string): void {
this._setBorderColor(color, true); this._setBorderColor(color, true);
} }
_setBorderColor(color: string, updateModel: boolean) { private _setBorderColor(color: string, updateModel: boolean): void {
const innerShape = this.getInnerShape(); const innerShape = this.getInnerShape();
innerShape.setAttribute('strokeColor', color); innerShape.setAttribute('strokeColor', color);
@ -612,8 +600,7 @@ abstract class Topic extends NodeGraph {
} }
} }
/** */ getBorderColor(): string {
getBorderColor() {
const model = this.getModel(); const model = this.getModel();
let result = model.getBorderColor(); let result = model.getBorderColor();
if (!$defined(result)) { if (!$defined(result)) {
@ -622,7 +609,7 @@ abstract class Topic extends NodeGraph {
return result; return result;
} }
_buildTopicShape() { _buildTopicShape(): ElementClass {
const groupAttributes = { const groupAttributes = {
width: 100, width: 100,
height: 100, height: 100,
@ -660,17 +647,17 @@ abstract class Topic extends NodeGraph {
group.setTestId(model.getId()); group.setTestId(model.getId());
} }
_registerDefaultListenersToElement(elem, topic) { _registerDefaultListenersToElement(elem: ElementClass, topic: Topic) {
const mouseOver = function mouseOver(event) { const mouseOver = function mouseOver() {
if (topic.isMouseEventsEnabled()) { if (topic.isMouseEventsEnabled()) {
topic.handleMouseOver(event); topic.handleMouseOver();
} }
}; };
elem.addEvent('mouseover', mouseOver); elem.addEvent('mouseover', mouseOver);
const outout = function outout(event) { const outout = function outout() {
if (topic.isMouseEventsEnabled()) { if (topic.isMouseEventsEnabled()) {
topic.handleMouseOut(event); topic.handleMouseOut();
} }
}; };
elem.addEvent('mouseout', outout); elem.addEvent('mouseout', outout);
@ -697,13 +684,12 @@ abstract class Topic extends NodeGraph {
} }
/** */ /** */
areChildrenShrunken() { areChildrenShrunken(): boolean {
const model = this.getModel(); const model = this.getModel();
return model.areChildrenShrunken() && !this.isCentralTopic(); return model.areChildrenShrunken() && !this.isCentralTopic();
} }
/** */ isCollapsed(): boolean {
isCollapsed() {
let result = false; let result = false;
let current = this.getParent(); let current = this.getParent();
@ -714,8 +700,7 @@ abstract class Topic extends NodeGraph {
return result; return result;
} }
/** */ setChildrenShrunken(value: boolean) {
setChildrenShrunken(value) {
// Update Model ... // Update Model ...
const model = this.getModel(); const model = this.getModel();
model.setChildrenShrunken(value); model.setChildrenShrunken(value);

View File

@ -0,0 +1,27 @@
import { $assert } from '@wisemapping/core-js';
import CentralTopic from './CentralTopic';
import MainTopic from './MainTopic';
import NodeModel from './model/NodeModel';
import Topic from './Topic';
class TopicFactory {
static create(nodeModel: NodeModel, options: object): Topic {
$assert(nodeModel, 'Model can not be null');
const type = nodeModel.getType();
$assert(type, 'Node model type can not be null');
let result: Topic;
if (type === 'CentralTopic') {
result = new CentralTopic(nodeModel, options);
} else if (type === 'MainTopic') {
result = new MainTopic(nodeModel, options);
} else {
$assert(false, `unsupported node type:${type}`);
}
return result;
}
}
export default TopicFactory;

View File

@ -45,8 +45,8 @@ const TopicFeatureFactory = {
* @param {mindplot.model.FeatureModel} model * @param {mindplot.model.FeatureModel} model
* @param {Boolean} readOnly true if the editor is running in read-only mode * @param {Boolean} readOnly true if the editor is running in read-only mode
* @throws will throw an error if topic is null or undefined * @throws will throw an error if topic is null or undefined
* @throws will throw an error if model is null or undefined * @throws will throw v an error if model is null or undefined
* @return {mindplot.Icon} a new instance of the icon subclass matching the topic feature * @return {mindplot.n,nmn mn4 r be5qnwwddwsz5on} a new instance of the icon subclass matching the topic feature
*/ */
createIcon(topic, model, readOnly) { createIcon(topic, model, readOnly) {
$assert(topic, 'topic can not be null'); $assert(topic, 'topic can not be null');

View File

@ -287,7 +287,7 @@ abstract class INodeModel {
abstract getPropertiesKeys(): string[]; abstract getPropertiesKeys(): string[];
abstract getProperty(key: string): number | string | boolean; abstract getProperty(key: string): number | string | boolean | undefined;
abstract putProperty(key: string, value: number | string | boolean): void; abstract putProperty(key: string, value: number | string | boolean): void;

View File

@ -1,7 +0,0 @@
import fadeEffect from './FadeEffect';
import shape from './Shape';
export default {
FadeEffect: fadeEffect,
Shape: shape,
};