123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268 |
- /**
- * Copyright (c) 2006-2015, JGraph Ltd
- * Copyright (c) 2006-2015, Gaudenz Alder
- */
- /**
- * Class: mxStylesheet
- *
- * Defines the appearance of the cells in a graph. See <putCellStyle> for an
- * example of creating a new cell style. It is recommended to use objects, not
- * arrays for holding cell styles. Existing styles can be cloned using
- * <mxUtils.clone> and turned into a string for debugging using
- * <mxUtils.toString>.
- *
- * Default Styles:
- *
- * The stylesheet contains two built-in styles, which are used if no style is
- * defined for a cell:
- *
- * defaultVertex - Default style for vertices
- * defaultEdge - Default style for edges
- *
- * Example:
- *
- * (code)
- * var vertexStyle = stylesheet.getDefaultVertexStyle();
- * vertexStyle[mxConstants.STYLE_ROUNDED] = true;
- * var edgeStyle = stylesheet.getDefaultEdgeStyle();
- * edgeStyle[mxConstants.STYLE_EDGE] = mxEdgeStyle.EntityRelation;
- * (end)
- *
- * Modifies the built-in default styles.
- *
- * To avoid the default style for a cell, add a leading semicolon
- * to the style definition, eg.
- *
- * (code)
- * ;shadow=1
- * (end)
- *
- * Removing keys:
- *
- * For removing a key in a cell style of the form [stylename;|key=value;] the
- * special value none can be used, eg. highlight;fillColor=none
- *
- * See also the helper methods in mxUtils to modify strings of this format,
- * namely <mxUtils.setStyle>, <mxUtils.indexOfStylename>,
- * <mxUtils.addStylename>, <mxUtils.removeStylename>,
- * <mxUtils.removeAllStylenames> and <mxUtils.setStyleFlag>.
- *
- * Constructor: mxStylesheet
- *
- * Constructs a new stylesheet and assigns default styles.
- */
- function mxStylesheet()
- {
- this.styles = new Object();
- this.putDefaultVertexStyle(this.createDefaultVertexStyle());
- this.putDefaultEdgeStyle(this.createDefaultEdgeStyle());
- };
- /**
- * Function: styles
- *
- * Maps from names to cell styles. Each cell style is a map of key,
- * value pairs.
- */
- mxStylesheet.prototype.styles;
- /**
- * Function: createDefaultVertexStyle
- *
- * Creates and returns the default vertex style.
- */
- mxStylesheet.prototype.createDefaultVertexStyle = function()
- {
- var style = new Object();
- style[mxConstants.STYLE_SHAPE] = mxConstants.SHAPE_RECTANGLE;
- style[mxConstants.STYLE_PERIMETER] = mxPerimeter.RectanglePerimeter;
- style[mxConstants.STYLE_VERTICAL_ALIGN] = mxConstants.ALIGN_MIDDLE;
- style[mxConstants.STYLE_ALIGN] = mxConstants.ALIGN_CENTER;
- style[mxConstants.STYLE_FILLCOLOR] = '#C3D9FF';
- style[mxConstants.STYLE_STROKECOLOR] = '#6482B9';
- style[mxConstants.STYLE_FONTCOLOR] = '#774400';
- return style;
- };
- /**
- * Function: createDefaultEdgeStyle
- *
- * Creates and returns the default edge style.
- */
- mxStylesheet.prototype.createDefaultEdgeStyle = function()
- {
- var style = new Object();
- style[mxConstants.STYLE_SHAPE] = mxConstants.SHAPE_CONNECTOR;
- style[mxConstants.STYLE_ENDARROW] = mxConstants.ARROW_CLASSIC;
- style[mxConstants.STYLE_VERTICAL_ALIGN] = mxConstants.ALIGN_MIDDLE;
- style[mxConstants.STYLE_ALIGN] = mxConstants.ALIGN_CENTER;
- style[mxConstants.STYLE_STROKECOLOR] = '#6482B9';
- style[mxConstants.STYLE_FONTCOLOR] = '#446299';
- return style;
- };
- /**
- * Function: putDefaultVertexStyle
- *
- * Sets the default style for vertices using defaultVertex as the
- * stylename.
- *
- * Parameters:
- * style - Key, value pairs that define the style.
- */
- mxStylesheet.prototype.putDefaultVertexStyle = function(style)
- {
- this.putCellStyle('defaultVertex', style);
- };
- /**
- * Function: putDefaultEdgeStyle
- *
- * Sets the default style for edges using defaultEdge as the stylename.
- */
- mxStylesheet.prototype.putDefaultEdgeStyle = function(style)
- {
- this.putCellStyle('defaultEdge', style);
- };
- /**
- * Function: getDefaultVertexStyle
- *
- * Returns the default style for vertices.
- */
- mxStylesheet.prototype.getDefaultVertexStyle = function()
- {
- return this.styles['defaultVertex'];
- };
- /**
- * Function: getDefaultEdgeStyle
- *
- * Sets the default style for edges.
- */
- mxStylesheet.prototype.getDefaultEdgeStyle = function()
- {
- return this.styles['defaultEdge'];
- };
- /**
- * Function: putCellStyle
- *
- * Stores the given map of key, value pairs under the given name in
- * <styles>.
- *
- * Example:
- *
- * The following example adds a new style called 'rounded' into an
- * existing stylesheet:
- *
- * (code)
- * var style = new Object();
- * style[mxConstants.STYLE_SHAPE] = mxConstants.SHAPE_RECTANGLE;
- * style[mxConstants.STYLE_PERIMETER] = mxPerimeter.RectanglePerimeter;
- * style[mxConstants.STYLE_ROUNDED] = true;
- * graph.getStylesheet().putCellStyle('rounded', style);
- * (end)
- *
- * In the above example, the new style is an object. The possible keys of
- * the object are all the constants in <mxConstants> that start with STYLE
- * and the values are either JavaScript objects, such as
- * <mxPerimeter.RightAngleRectanglePerimeter> (which is in fact a function)
- * or expressions, such as true. Note that not all keys will be
- * interpreted by all shapes (eg. the line shape ignores the fill color).
- * The final call to this method associates the style with a name in the
- * stylesheet. The style is used in a cell with the following code:
- *
- * (code)
- * model.setStyle(cell, 'rounded');
- * (end)
- *
- * Parameters:
- *
- * name - Name for the style to be stored.
- * style - Key, value pairs that define the style.
- */
- mxStylesheet.prototype.putCellStyle = function(name, style)
- {
- this.styles[name] = style;
- };
- /**
- * Function: getCellStyle
- *
- * Returns the cell style for the specified stylename or the given
- * defaultStyle if no style can be found for the given stylename.
- *
- * Parameters:
- *
- * name - String of the form [(stylename|key=value);] that represents the
- * style.
- * defaultStyle - Default style to be returned if no style can be found.
- */
- mxStylesheet.prototype.getCellStyle = function(name, defaultStyle)
- {
- var style = defaultStyle;
- if (name != null && name.length > 0)
- {
- var pairs = name.split(';');
- if (style != null &&
- name.charAt(0) != ';')
- {
- style = mxUtils.clone(style);
- }
- else
- {
- style = new Object();
- }
- // Parses each key, value pair into the existing style
- for (var i = 0; i < pairs.length; i++)
- {
- var tmp = pairs[i];
- var pos = tmp.indexOf('=');
- if (pos >= 0)
- {
- var key = tmp.substring(0, pos);
- var value = tmp.substring(pos + 1);
- if (value == mxConstants.NONE)
- {
- delete style[key];
- }
- else if (mxUtils.isNumeric(value))
- {
- style[key] = parseFloat(value);
- }
- else
- {
- style[key] = value;
- }
- }
- else
- {
- // Merges the entries from a named style
- var tmpStyle = this.styles[tmp];
- if (tmpStyle != null)
- {
- for (var key in tmpStyle)
- {
- style[key] = tmpStyle[key];
- }
- }
- }
- }
- }
- return style;
- };
- __mxOutput.mxStylesheet = typeof mxStylesheet !== 'undefined' ? mxStylesheet : undefined;
|