Class Editor
Hierarchy (View Summary)
- EventSource
- Editor
Index
Constructors
Properties
Methods
Properties
actions
ask Zoom Resource
Specifies the resource key for the zoom dialog. If the resource for this key does not exist then the value is used as the error message. Default is 'askZoom'.
current File Resource
Specifies the resource key for the current file info. If the resource for this key does not exist then the value is used as the error message. Default is 'currentFile'.
cycle Attribute Index
Index of the last consumed attribute index. If a new swimlane is inserted, then the cycleAttributeValues at this index will be used as the value for cycleAttributeName.
cycle Attribute Name
Name of the attribute to be assigned a cycleAttributeValues when inserting new swimlanes.
cycle Attribute Values
Specifies the attribute values to be cycled when inserting new swimlanes.
dbl Click Action
Specifies the name of the action to be executed when a cell is double-clicked. Default is 'edit'.
To handle a single-click, use the following code.
default Edge
Prototype edge cell that is used for creating new edges.
default Edge Style
Specifies the edge style to be returned in getEdgeStyle.
default Group
Prototype group cell that is used for creating new groups.
destroyed
diagram Layout
disable Context Menu
Specifies if the context menu should be disabled in the graph container.
escape Post Data
Specifies if the data in the post request for saving a diagram should be converted using encodeURIComponent.
event Listeners
Holds the event names and associated listeners in an array. The array contains the event name followed by the respective listener for each registered listener.
events Enabled
Specifies if events can be fired. Default is true.
event Source
Optional source for events.
filename
Contains the URL of the last opened file as a string.
forced Inserting
Specifies if a new cell should be inserted on a single click even using insertFunction if there is a cell under the mouse pointer, otherwise the cell under the mouse pointer is selected. Default is false.
graph
Holds a AbstractGraph for displaying the diagram. The graph is created in setGraphContainer.
graph Render Hint
Holds the render hint used for creating the graph in setGraphContainer.
group Border Size
Default size for the border of new groups. If null, then AbstractGraph.gridSize is used.
help
help Height
Specifies the height of the help window in pixels. Default is 260.
help Resource
Specifies the resource key for the help window title. If the resource for this key does not exist then the value is used as the error message. Default is 'help'.
help Width
Specifies the width of the help window in pixels. Default is 300.
help Window Image
Icon for the help window.
horizontal Flow
Specifies the direction of the flow in the diagram. This is used in the layout algorithms. Default is vertical flow.
ignored Changes
insert Function
Specifies the function to be used for inserting new cells into the graph. This is assigned from the EditorToolbar if a vertex-tool is clicked.
is Active
key Handler
Holds a EditorKeyHandler for handling keyboard events. The handler is created in setGraphContainer.
last Saved Resource
Specifies the resource key for the last saved info. If the resource for this key does not exist then the value is used as the error message. Default is 'lastSaved'.
last Snapshot
layout Diagram
Specifies if the top-level elements in the diagram should be layed out using a vertical or horizontal stack depending on the setting of horizontalFlow. The spacing between the swimlanes is specified by swimlaneSpacing. Default is false.
If the top-level elements are swimlanes, then the intra-swimlane layout is activated by the layoutSwimlanes switch.
layout Swimlanes
Specifies if the children of swimlanes should be layed out, either vertically or horizontally depending on horizontalFlow.
linefeed
Character to be used for encoding linefeed in save.
maintain Swimlanes
Specifies if the swimlanes should be kept at the same width or height depending on the setting of horizontalFlow. Default is false.
For horizontal flows, all swimlanes have the same height and for vertical flows, all swimlanes have the same width. Furthermore, the swimlanes are automatically "stacked" if layoutDiagram is true.
modified
True if the graph has been modified since it was last saved.
move Properties Dialog
Specifies if the properties dialog should be automatically moved near the cell it is displayed for, otherwise the dialog is not moved. This value is only taken into account if the dialog is already visible. Default is false.
on Init
outline
outline Resource
Specifies the resource key for the outline window title. If the resource for this key does not exist then the value is used as the error message. Default is 'outline'.
popup Handler
Holds a EditorPopupMenu for displaying popupmenus.
post Parameter Name
Specifies if the name of the post parameter that contains the diagram data in a post request to the server.
properties
properties Height
Specifies the height of the properties window in pixels. If no height is specified then the window will be automatically sized to fit its contents. Default is null.
properties Resource
Specifies the resource key for the properties window title. If the resource for this key does not exist then the value is used as the error message. Default is 'properties'.
properties Width
Specifies the width of the properties window in pixels. Default is 240.
rubberband
status
DOM container that holds the statusbar. Use setStatusContainer to set this value.
swimlane Layout
swimlane Required
Specifies if new cells must be inserted into an existing swimlane. Otherwise, cells that are not swimlanes can be inserted as top-level cells.
swimlane Spacing
Specifies the spacing between swimlanes if automatic layout is turned on in layoutDiagram. Default is 0.
tasks
tasks Resource
Specifies the resource key for the tasks window title. If the resource for this key does not exist then the value is used as the error message. Default is 'tasks'.
tasks Top
Specifies the top coordinate of the tasks window in pixels. Default is 20.
tasks Window Image
Icon for the tasks window.
templates
Maps from names to prototype cells to be used in the toolbar for inserting new cells into the diagram.
toolbar
Holds a EditorToolbar for displaying the toolbar. The toolbar is created in setToolbarContainer.
undo Manager
Holds an UndoManager for the command history.
url Help
Specifies the URL to be used for the contents of the Online Help window. This is usually specified in the resources file under urlHelp for language-specific online help support.
url Image
Specifies the URL to be used for creating a bitmap of the graph in the image action.
url Post
Specifies the URL to be used for posting the diagram to a backend in save.
validating
Specifies if AbstractGraph.validateGraph should automatically be invoked after each change. Default is false.
Methods
add Action
Binds the specified actionname to the specified function.
Parameters
- actionname: string
String that specifies the name of the action to be added.
- funct: Function
Function that implements the new action. The first argument of the function is the editor it is used with, the second argument is the cell it operates upon.
Returns void
- actionname: string
add Actions
Adds the built-in actions to the editor instance. save - Saves the graph using
. print - Shows the graph in a new print preview window. show - Shows the graph in a new window. exportImage - Shows the graph as a bitmap image using . refresh - Refreshes the graph's display. cut - Copies the current selection into the clipboard and removes it from the graph. copy - Copies the current selection into the clipboard. paste - Pastes the clipboard into the graph. delete - Removes the current selection from the graph. group - Puts the current selection into a new group. ungroup - Removes the selected groups and selects the children. undo - Undoes the last change on the graph model. redo - Redoes the last change on the graph model. zoom - Sets the zoom via a dialog. zoomIn - Zooms into the graph. zoomOut - Zooms out of the graph actualSize - Resets the scale and translation on the graph. fit - Changes the scale so that the graph fits into the window. showProperties - Shows the properties dialog. selectAll - Selects all cells. selectNone - Clears the selection. selectVertices - Selects all vertices. selectEdges = Selects all edges. edit - Starts editing the current selection cell. enterGroup - Drills down into the current selection cell. exitGroup - Moves up in the drilling hierachy home - Moves to the topmost parent in the drilling hierarchy selectPrevious - Selects the previous cell. selectNext - Selects the next cell. selectParent - Selects the parent of the selection cell. selectChild - Selects the first child of the selection cell. collapse - Collapses the currently selected cells. expand - Expands the currently selected cells. bold - Toggle bold text style. italic - Toggle italic text style. underline - Toggle underline text style. alignCellsLeft - Aligns the selection cells at the left. alignCellsCenter - Aligns the selection cells in the center. alignCellsRight - Aligns the selection cells at the right. alignCellsTop - Aligns the selection cells at the top. alignCellsMiddle - Aligns the selection cells in the middle. alignCellsBottom - Aligns the selection cells at the bottom. alignFontLeft - Sets the horizontal text alignment to left. alignFontCenter - Sets the horizontal text alignment to center. alignFontRight - Sets the horizontal text alignment to right. alignFontTop - Sets the vertical text alignment to top. alignFontMiddle - Sets the vertical text alignment to middle. alignFontBottom - Sets the vertical text alignment to bottom. toggleTasks - Shows or hides the tasks window. toggleHelp - Shows or hides the help window. toggleOutline - Shows or hides the outline window. toggleConsole - Shows or hides the console window. Returns void
add Listener
Binds the specified function to the given event name. If no event name is given, then the listener is registered for all events.
The parameters of the listener are the sender and an EventObject.
Parameters
- name: string
- funct: Function
Returns void
add Template
Adds the specified template under the given name in templates.
Parameters
- name: string
- template: any
Returns void
add Vertex
configure
consume Cycle Attribute
Returns the next attribute in cycleAttributeValues or null, if not attribute should be used in the specified cell.
Parameters
- cell: Cell
Returns any
create Diagram Layout
Creates the layout instance used to layout the swimlanes in the diagram.
Returns StackLayout
StackLayout instance
create Edge
Uses defaultEdge as the prototype for creating new edges in the connection handler of the graph. The style of the edge will be overridden with the value returned by getEdgeStyle.
Returns Cell
create Graph
Creates the AbstractGraph for the editor.
The AbstractGraph is created with no container and is initialized from setGraphContainer.
Returns AbstractGraph
the AbstractGraph instance used by the Editor
create Group
Creates and returns a clone of defaultGroup to be used as a new group cell in group.
Returns Cell
Cell
create Layout Manager
Creates a layout manager for the swimlane and diagram layouts, that is, the locally defined inter and intra swimlane layouts.
Parameters
- graph: AbstractGraph
Returns LayoutManager
LayoutManager instance
create Popup Menu
Uses popupHandler to create the menu in the graph's panning handler. The redirection is setup in setToolbarContainer.
Parameters
- menu: MaxPopupMenu
- cell: null | Cell
- evt: any
Returns void
create Properties
Creates and returns the DOM node that represents the contents of the properties dialog for the given cell. This implementation works for user objects that are XML nodes and display all the node attributes in a form.
Parameters
- cell: Cell
Returns null | HTMLTableElement
create Swimlane Layout
Creates the layout instance used to layout the children of each swimlane.
Returns CompactTreeLayout
CompactTreeLayout instance
create Swimlane Manager
Sets the graph's container using AbstractGraph.init.
Parameters
- graph: AbstractGraph
Returns SwimlaneManager
SwimlaneManager instance
create Tasks
Updates the contents of the given DOM node to display the tasks associated with the current editor state. This is invoked whenever there is a possible change of state in the editor. Default implementation is empty.
Parameters
- div: Element
Returns void
create Toolbar
cycle Attribute
Uses the returned value from consumeCycleAttribute as the value for the cycleAttributeName key in the given cell's style.
Parameters
- cell: Cell
Returns void
destroy
Removes the editor and all its associated resources. This does not normally need to be called, it is called automatically when the window unloads.
Returns void
execute
Executes the function with the given name in actions passing the editor instance and given cell as the first and second argument. All additional arguments are passed to the action as well. This method contains a try-catch block and displays an error message if an action causes an exception. The exception is re-thrown after the error message was displayed.
Parameters
- actionname: string
- cell: null | Cell = null
- evt: null | Event = null
Returns void
fire Event
Dispatches the given event to the listeners which are registered for the event. The sender argument is optional. The current execution scope ("this") is used for the listener invocation.
Example:
fireEvent(new EventObject("eventName", key1, val1, .., keyN, valN))Parameters
- evt: EventObject
EventObject that represents the event.
- sender: null | EventTarget = null
Optional sender to be passed to the listener. Default value is the return value of getEventSource.
Returns void
- evt: EventObject
get Edge Style
Returns a string identifying the style of new edges. The function is used in createEdge when new edges are created in the graph.
Returns any
get Event Source
Returns eventSource.
Returns null | EventTarget
get Root Title
Returns the string value of the root cell in AbstractGraph.model.
Returns string
get Template
Returns the template for the given name.
Parameters
- name: string
Returns any
get Title
Returns the string value for the current root of the diagram.
Returns string
get Url Image
Returns the URL to create the image width. This is typically the URL of a backend which accepts an XML representation of a graph view to create an image. The function is used in the image action to create an image. This implementation returns urlImage.
Returns null | string
get Url Post
group Cells
Invokes createGroup to create a new group cell and the invokes AbstractGraph.groupCells, using the grid size of the graph as the spacing in the group's content area.
Returns any
hide Properties
Hides the properties dialog.
Returns void
install Change Handler
Installs the listeners required to automatically validate the graph. On each change of the root, this implementation fires a root event.
Parameters
- graph: AbstractGraph
Returns void
install Dbl Click Handler
Overrides AbstractGraph.dblClick to invoke dblClickAction on a cell and reset the selection tool in the toolbar.
Parameters
- graph: AbstractGraph
Returns void
install Drill Handler
install Insert Handler
Installs the handler for invoking insertFunction if one is defined.
Parameters
- graph: AbstractGraph
Returns void
install Undo Handler
is Events Enabled
Returns eventsEnabled.
Returns boolean
is Modified
Returns modified.
Returns boolean
is Properties Visible
Returns true if the properties dialog is currently visible.
Returns boolean
open
Opens the specified file synchronously and parses it using readGraphModel. It updates filename and fires an
-event after the file has been opened. Exceptions should be handled as follows:
try {
editor.open(filename);
} catch (e) {
GlobalConfig.logger.error(`Cannot open ${filename}: ${e.message}`);
}Parameters
- filename: string
URL of the file to be opened.
Returns void
- filename: string
post Diagram
Hook for subclassers to override the posting of a diagram represented by the given node to the given URL. This fires an asynchronous post event if the diagram has been posted.
Example:
To replace the diagram with the diagram in the response, use the following code.
Parameters
- url: any
- data: any
Returns void
read Graph Model
Reads the specified XML node into the existing graph model and resets the command history and modified state.
Parameters
- node: Element
the XML node to be read into the graph model.
Returns void
- node: Element
redo
Redo the last change in graph.
Returns void
refresh Tasks
remove Listener
Removes all occurrences of the given listener from eventListeners.
Parameters
- funct: Function
Returns void
reset First Time
Resets the cookie that is used to remember if the editor has already been used.
Returns void
reset History
Resets the command history, modified state and counters.
Returns void
save
Posts the string returned by writeGraphModel to the given URL or the URL returned by getUrlPost.
The actual posting is carried out by postDiagram. If the URL is null then the resulting XML will be displayed using popup.
Exceptions should be handled as follows:
try {
editor.open(filename);
} catch (e) {
GlobalConfig.logger.error(`Cannot save: ${e.message}`);
}Parameters
- url: null | string = null
- linefeed: string = ...
Returns void
set Events Enabled
set Event Source
set Graph Container
Sets the graph's container using AbstractGraph.init.
Parameters
Optionalcontainer: null | HTMLElement
Returns void
set Mode
Puts the graph into the specified mode. The following mode names are supported:
- select - Selects using the left mouse button, new connections are disabled.
- connect - Selects using the left mouse button or creates new connections if mouse over cell hotspot. See ConnectionHandler.
- pan - Pans using the left mouse button, new connections are disabled.
Parameters
- modename: any
Returns void
set Modified
set Status
Display the specified message in the status bar.
Parameters
- message: string
String the specified the message to be displayed.
Returns void
- message: string
set Status Container
Creates the status using the specified container. This implementation adds listeners in the editor to display the last saved time and the current filename in the status bar.
Parameters
- container: null | HTMLElement
DOM node that will contain the statusbar.
Returns void
- container: null | HTMLElement
set Title Container
Creates a listener to update the inner HTML of the specified DOM node with the value of getTitle.
Parameters
- container: any
DOM node that will contain the title.
Returns void
- container: any
set Toolbar Container
Initializes the toolbar for the given container.
Parameters
- container: any
Returns void
show Help
Shows the help window. If the help window does not exist then it is created using an iframe pointing to the resource for the
urlHelpkey or urlHelp if the resource is undefined.Parameters
- tasks: any = null
Returns void
show Outline
Shows the outline window. If the window does not exist, then it is created using an outline.
Returns void
show Properties
Creates and shows the properties dialog for the given cell. The content area of the dialog is created using createProperties.
Parameters
- cell: null | Cell = null
Returns void
show Tasks
Shows the tasks window. The tasks window is created using createTasks. The default width of the window is 200 pixels, the y-coordinate of the location can be specified in tasksTop and the x-coordinate is right aligned with a 20 pixel offset from the right border. To change the location of the tasks window, the following code can be used:
Returns void
swap Styles
Swaps the styles for the given names in the graph's stylesheet and refreshes the graph.
Parameters
- first: string
the name of the first style to swap
- second: string
the name of the second style to swap
Returns void
- first: string
tree Layout
Executes a vertical or horizontal compact tree layout using the specified cell as an argument. The cell may either be a group or the root of a tree.
Parameters
Returns void
undo
Undo the last change in graph.
Returns void
write Graph Model
Hook to create the string representation of the diagram.
The default implementation uses ModelXmlSerializer to encode the graph model.
Parameters
Optionallinefeed: stringOptional character to be used as the linefeed. Default is linefeed.
Returns string

Extends EventSource to implement an application wrapper for a graph that adds actions, I/O using Codec, auto-layout using LayoutManager, command history using undoManager, and standard dialogs and widgets, e.g. properties, help, outline, toolbar, and popupmenu. It also adds templates to be used as cells in toolbars, auto-validation using the installChangeHandler flag, attribute cycling using cycleAttributeValues, higher-level events such as root, and backend integration using and urlImage.
Actions
Actions are functions stored in the array under their names. The
functions take the Editor as the first, and an optional Cell as the
second argument and are invoked using . Any additional arguments
passed to execute are passed on to the action as-is.
A list of built-in actions is available in the description.
Read/write Diagrams
To read a diagram from an XML string, for example from a text field within the page, the following code is used:
For reading a diagram from a remote location, use the open method.
To save diagrams in XML on a server, you can set the urlPost variable. This variable will be used in getUrlPost to construct a URL for the post request that is issued in the save method. The post request contains the XML representation of the diagram as returned by writeGraphModel in the xml parameter.
On the server side, the post request is processed using standard technologies such as Java Servlets, CGI, .NET or ASP.
Here are some examples of processing a post request in various languages.
Note that the linefeed should only be replaced if the XML is processed in Java, for example when creating an image, but not if the XML is passed back to the client-side.
Creating images
A backend (Java, PHP or C#) is required for creating images. The distribution contains an example for each backend (ImageHandler.java, ImageHandler.cs and graph.php). More information about using a backend to create images can be found in the readme.html files. Note that the preview is implemented using VML/SVG in the browser and does not require a backend. The backend is only required to creates images (bitmaps).
Special characters
Note There are five characters that should always appear in XML content as escapes, so that they do not interact with the syntax of the markup. These are part of the language for all documents based on XML and for HTML.
Although it is part of the XML language, ' is not defined in HTML. For this reason the XHTML specification recommends instead the use of ' if text may be passed to an HTML user agent.
If you are having problems with special characters on the server-side then you may want to try the escapePostData flag.
For converting decimal escape sequences inside strings, a user has provided us with the following function:
Otherwise, try using hex escape sequences and the built-in unescape function for converting such strings.
Local Files
For saving and opening local files, no standardized method exists that works across all browsers. The recommended way of dealing with local files is to create a backend that streams the XML data back to the browser (echo) as an attachment so that a Save-dialog is displayed on the client-side and the file can be saved to the local disk.
For example, in PHP the code that does this looks as follows.
To open a local file, the file should be uploaded via a form in the browser and then opened from the server in the editor.
Cell Properties
The properties displayed in the properties dialog are the attributes and values of the cell's user object, which is an XML node. The XML node is defined in the templates section of the config file.
The templates are stored in Editor.templates and contain cells which are cloned at insertion time to create new vertices by use of drag and drop from the toolbar. Each entry in the toolbar for adding a new vertex must refer to an existing template.
In the following example, the task node is a business object and only the Cell node and its Geometry child contain graph information:
The idea is that the XML representation is inverse from the in-memory representation: The outer XML node is the user object and the inner node is the cell. This means the user object of the cell is the Task node with no children for the above example:
The Task node can have any tag name, attributes and child nodes. The Codec will use the XML hierarchy as the user object, while removing the "known annotations", such as the Cell node. At save-time the cell data will be "merged" back into the user object. The user object is only modified via the properties dialog during the lifecycle of the cell.
In the default implementation of createProperties, the user object's attributes are put into a form for editing. Attributes are changed using the CellAttributeChange action in the model. The dialog can be replaced by overriding the createProperties hook or by replacing the showProperties action in action. Alternatively, the entry in the config file's popupmenu section can be modified to invoke a different action.
If you want to display the properties dialog on a double click, you can set Editor.dblClickAction to showProperties as follows:
Popupmenu and Toolbar
The toolbar and popupmenu are typically configured using the respective sections in the config file, that is, the popupmenu is defined as follows:
New entries can be added to the toolbar by inserting an add-node into the above configuration. Existing entries may be removed and changed by modifying or removing the respective entries in the configuration. The configuration is read by the EditorPopupMenuCodec, the format of the configuration is explained in EditorPopupMenu.decode.
The toolbar is defined in the EditorToolbar section. Items can be added and removed in this section.
The format of the configuration is described in EditorToolbarCodec.decode.
Ids:
For the IDs, there is an implicit behaviour in Codec: It moves the Id from the cell to the user object at encoding time and vice versa at decoding time. For example, if the Task node from above has an id attribute, then the Cell.id of the corresponding cell will have this value. If there is no Id collision in the model, then the cell may be retrieved using this Id with the GraphDataModel.getCell function. If there is a collision, a new Id will be created for the cell using GraphDataModel.createId. At encoding time, this new Id will replace the value previously stored under the id attribute in the Task node.
See EditorCodec, EditorToolbarCodec and EditorPopupMenuCodec for information about configuring the editor and user interface.
Programmatically inserting cells
For inserting a new cell, say, by clicking a button in the document, the following code can be used. This requires an reference to the editor.
If a template cell from the config file should be inserted, then a clone of the template can be created as follows. The clone is then inserted using the add function instead of addVertex.
Translations
resources/editor - Language resources for Editor
To load the resources for the Editor, the following code should be used:
Callback: onInit
Called from within the constructor. In the callback, "this" refers to the editor instance.
Cookie: mxgraph=seen
Set when the editor is started. Never expires. Use resetFirstTime to reset this cookie. This cookie only exists if onInit is implemented.
Events
Event: mxEvent.OPEN
Fires after a file was opened in open. The
filenameproperty contains the filename that was used. The same value is also available in filename.Event: mxEvent.SAVE
Fires after the current file was saved in save. The
urlproperty contains the URL that was used for saving.Event: mxEvent.POST
Fires if a successful response was received in postDiagram. The, the
requestproperty contains theurlanddataproperties contain the URL and the data that were used in the post request.Event: mxEvent.ROOT
Fires when the current root has changed, or when the title of the current root has changed. This event has no properties.
Event: mxEvent.BEFORE_ADD_VERTEX
Fires before a vertex is added in addVertex. The
vertexproperty contains the new vertex and theparentproperty contains its parent.Event: mxEvent.ADD_VERTEX
Fires between begin- and endUpdate in. The
vertexproperty contains the vertex that is being inserted.Event: mxEvent.AFTER_ADD_VERTEX
Fires after a vertex was inserted and selected in. The
vertexproperty contains the new vertex.Example
For starting an in-place edit after a new vertex has been added to the graph, the following code can be used.
Event: mxEvent.ESCAPE
Fires when the escape key is pressed. The
eventproperty contains the key event.