1279 lines
43 KiB
JavaScript
1279 lines
43 KiB
JavaScript
/* http://keith-wood.name/gChart.html
|
|
Google Chart icons extension for jQuery v1.4.3.
|
|
See API details at http://code.google.com/apis/chart/.
|
|
Written by Keith Wood (kbwood{at}iinet.com.au) September 2008.
|
|
Dual licensed under the GPL (http://dev.jquery.com/browser/trunk/jquery/GPL-LICENSE.txt) and
|
|
MIT (http://dev.jquery.com/browser/trunk/jquery/MIT-LICENSE.txt) licenses.
|
|
Please attribute the author if you use it. */
|
|
|
|
(function($) { // Hide scope, no $ conflict
|
|
|
|
/* Mapping from marker placement names to chart drawing placement codes. */
|
|
var PLACEMENTS = {center: 'h', centre: 'h', left: 'l', right: 'r', h: 'h', l: 'l', r: 'r'};
|
|
/* Mapping from icon tail names to chart tail codes. */
|
|
var TAILS = {bottomLeft: 'bb', topLeft: 'bbtl', topRight: 'bbtr', bottomRight: 'bbbr', none: 'bbT',
|
|
bb: 'bb', bbtl: 'bbtl', bbtr: 'bbtr', bbbr: 'bbbr', bbT: 'bbT',
|
|
edgeBottomLeft: 'edge_bl', edgeBottomCenter: 'edge_bc', edgeBottomRight: 'edge_br',
|
|
edgeTopLeft: 'edge_tl', edgeTopCenter: 'edge_tc', edgeTopRight: 'edge_tr',
|
|
edgeLeftTop: 'edge_lt', edgeLeftCenter: 'edge_lc', edgeLeftBottom: 'edge_lb',
|
|
edgeRightTop: 'edge_rt', edgeRightCenter: 'edge_rc', edgeRightBottom: 'edge_rb',
|
|
edgeBL: 'edge_bl', edgeBC: 'edge_bc', edgeBR: 'edge_br',
|
|
edgeTL: 'edge_tl', edgeTC: 'edge_tc', edgeTR: 'edge_tr',
|
|
edgeLT: 'edge_lt', edgeLC: 'edge_lc', edgeLB: 'edge_lb',
|
|
edgeRT: 'edge_rt', edgeRC: 'edge_rc', edgeRB: 'edge_rb'};
|
|
/* Mapping from icon map pin style names to chart map pin style codes. */
|
|
var PIN_STYLES = {none: 'pin', star: 'pin_star', left: 'pin_sleft', right: 'pin_sright'};
|
|
/* Mapping from icon shadow names to chart icon shadow codes. */
|
|
var SHADOWS = {no: '', yes: '_withshadow', only: '_shadow'};
|
|
/* Mapping from icon note types to chart icon note codes. */
|
|
var NOTES = {arrow: 'arrow_d', balloon: 'balloon', pinned: 'pinned_c',
|
|
sticky: 'sticky_y', taped: 'taped_y', thought: 'thought'};
|
|
/* Mapping from contextual alignment names to chart drawing alignment codes. */
|
|
var ALIGNMENTS = {topLeft: 'lt', top: 'ht', topRight: 'rt', left: 'lv', center: 'hv', centre: 'hv',
|
|
right: 'rv', bottomLeft: 'lb', bottom: 'hb', bottomRight: 'rb',
|
|
tl: 'lt', lt: 'lt', t: 'ht', ht: 'ht', tr: 'rt', rt: 'rt', l: 'l', lv: 'lv', c: 'hv', hc: 'hv',
|
|
hv: 'hv', r: 'rv', rv: 'rv', bl: 'lb', lb: 'lb', b: 'hb', hb: 'hb', br: 'rb', rb: 'rb'};
|
|
/* Allowed sizes of icons. */
|
|
var SIZES = {12: 12, 16: 16, 24: 24};
|
|
/* Mapping from embedded chart alignment names to chart drawing alignment codes. */
|
|
var EMBEDDED_ALIGNMENTS = {topLeft: 'tl', top: 'ht', topRight: 'tr', left: 'vl', center: 'hv', centre: 'hv',
|
|
right: 'vr', bottomLeft: 'lb', bottom: 'hb', bottomRight: 'rb',
|
|
tl: 'tl', t: 'ht', ht: 'ht', tr: 'tr', l: 'vl', vl: 'vl', c: 'hv',
|
|
hv: 'hv', r: 'vr', vr: 'vr', bl: 'lb', lb: 'lb', b: 'hb', hb: 'hb', br: 'rb', rb: 'rb'};
|
|
|
|
$.extend($.gchart._defaults, {
|
|
icons: [] // Definitions of dynamic icons for the chart, each entry is an object with
|
|
// name (string), data (string), series (number), item (number), zIndex (number),
|
|
// position (number[2]), offsets (number[2])
|
|
});
|
|
|
|
$.gchart._chartOptions = $.gchart._chartOptions.join().replace(/Markers/, 'Markers,Icons').split(',');
|
|
|
|
$.extend($.gchart._prototype.prototype, {
|
|
|
|
/* Create a dynamic icon definition.
|
|
@param name (string) the name of the icon to use
|
|
@param data (string) the icon's encoded parameters
|
|
@param series (number, optional) the series to which the icon applies, -1 for freestanding
|
|
@param item (number or string or number[2 or 3], optional)
|
|
the item in the series to which it applies or 'all' (default)
|
|
or 'everyn' or [start, end, every]
|
|
@param zIndex (number, optional) the z-index (-1.0 to 1.0)
|
|
@param position (number[2], optional) an absolute chart position (0.0 to 1.0)
|
|
@param offsets (number[2], optional) pixel offsets
|
|
@return (object) the icon definition */
|
|
icon: function(name, data, series, item, zIndex, position, offsets) {
|
|
if ($.isArray(series)) {
|
|
offsets = item;
|
|
position = series;
|
|
zIndex = null;
|
|
item = null;
|
|
series = null;
|
|
}
|
|
if ($.isArray(zIndex)) {
|
|
offsets = position;
|
|
position = zIndex;
|
|
zIndex = null;
|
|
}
|
|
return {name: name, data: data, series: series || 0, item: (item || item == 0 ? item : 'all'),
|
|
zIndex: zIndex, position: position, offsets: offsets};
|
|
},
|
|
|
|
/* Create a bubble icon definition.
|
|
@param text (string) the text content, use '|' for line breaks
|
|
@param image (string, optional) the name of an inset image
|
|
@param tail (string, optional) the type of tail to use
|
|
@param large (boolean, optional) true if a large bubble is required
|
|
@param shadow (string, optional) 'no', 'yes', 'only'
|
|
@param bgColour (string, optional) the icon background's colour
|
|
@param colour (string, optional) the icon text's colour
|
|
@param series (number, optional) the series to which the icon applies
|
|
@param item (number or string or number[2 or 3], optional)
|
|
the item in the series to which it applies or 'all' (default)
|
|
or 'everyn' or [start, end, every]
|
|
@param zIndex (number, optional) the z-index (-1.0 to 1.0)
|
|
@param position (number[2], optional) an absolute chart position (0.0 to 1.0)
|
|
@param offsets (number[2], optional) pixel offsets
|
|
@return (object) the icon definition */
|
|
bubbleIcon: function(text, image, tail, large, shadow, bgColour, colour,
|
|
series, item, zIndex, position, offsets) {
|
|
if (typeof image == 'boolean') {
|
|
offsets = zIndex;
|
|
position = item;
|
|
zIndex = series;
|
|
item = colour;
|
|
series = bgColour;
|
|
colour = shadow;
|
|
bgColour = large;
|
|
shadow = tail;
|
|
large = image;
|
|
tail = null;
|
|
image = null;
|
|
}
|
|
else if (typeof image == 'number') {
|
|
offsets = bgColour;
|
|
position = shadow;
|
|
zIndex = large;
|
|
item = tail;
|
|
series = image;
|
|
colour = null;
|
|
bgColour = null;
|
|
shadow = null;
|
|
large = null;
|
|
tail = null;
|
|
image = null;
|
|
}
|
|
if (typeof tail == 'boolean') {
|
|
offsets = position;
|
|
position = zIndex;
|
|
zIndex = item;
|
|
item = series;
|
|
series = colour;
|
|
colour = bgColour;
|
|
bgColour = shadow;
|
|
shadow = large;
|
|
large = tail;
|
|
tail = null;
|
|
}
|
|
else if (typeof tail == 'number') {
|
|
offsets = colour;
|
|
position = bgColour;
|
|
zIndex = shadow;
|
|
item = large;
|
|
series = tail;
|
|
colour = null;
|
|
bgColour = null;
|
|
shadow = null;
|
|
large = null;
|
|
tail = null;
|
|
}
|
|
if (typeof large == 'number') {
|
|
offsets = series;
|
|
position = colour;
|
|
zIndex = bgColour;
|
|
item = shadow;
|
|
series = large;
|
|
colour = null;
|
|
bgColour = null;
|
|
shadow = null;
|
|
large = null;
|
|
}
|
|
if (typeof shadow == 'number') {
|
|
offsets = item;
|
|
position = series;
|
|
zIndex = colour;
|
|
item = bgColour;
|
|
series = shadow;
|
|
colour = null;
|
|
bgColour = null;
|
|
shadow = null;
|
|
}
|
|
if (typeof bgColour == 'number') {
|
|
offsets = zIndex;
|
|
position = item;
|
|
zIndex = series;
|
|
item = colour;
|
|
series = bgColour;
|
|
colour = null;
|
|
bgColour = null;
|
|
}
|
|
if (typeof colour == 'number') {
|
|
offsets = position;
|
|
position = zIndex;
|
|
zIndex = item;
|
|
item = series;
|
|
series = colour;
|
|
colour = null;
|
|
}
|
|
var multiline = text.match(/\|/);
|
|
var colours = this.color(bgColour || 'white') + ',' + this.color(colour || 'black');
|
|
var data = (image ? image + ',' : '') + (TAILS[tail] || 'bb') + ',' +
|
|
(multiline ? colours + ',' : '') + this._escapeIconText(text) +
|
|
(multiline ? '' : ',' + colours);
|
|
return this.icon('bubble' + (image ? '_icon' : '') +
|
|
(multiline || (!image && large) ? '_texts' : '_text') +
|
|
(large || multiline ? '_big' : '_small') + SHADOWS[shadow || 'yes'],
|
|
data, series, item, zIndex, position, offsets);
|
|
},
|
|
|
|
/* Create a map pin icon definition.
|
|
@param letter (string) the single letter to show
|
|
@param image (string, optional) the name of an inset image
|
|
@param style (string, optional) '' or 'none', 'star', 'left', 'right'
|
|
@param shadow (string, optional) 'no', 'yes', 'only'
|
|
@param bgColour (string, optional) the icon background's colour
|
|
@param colour (string, optional) the icon text's colour
|
|
@param series (number, optional) the series to which the icon applies
|
|
@param item (number or string or number[2 or 3], optional)
|
|
the item in the series to which it applies or 'all' (default)
|
|
or 'everyn' or [start, end, every]
|
|
@param zIndex (number, optional) the z-index (-1.0 to 1.0)
|
|
@param position (number[2], optional) an absolute chart position (0.0 to 1.0)
|
|
@param offsets (number[2], optional) pixel offsets
|
|
@return (object) the icon definition */
|
|
mapPinIcon: function(letter, image, style, shadow, bgColour, colour,
|
|
series, item, zIndex, position, offsets) {
|
|
if (typeof image == 'number') {
|
|
offsets = colour;
|
|
position = bgColour;
|
|
zIndex = shadow;
|
|
item = style;
|
|
series = image;
|
|
colour = null;
|
|
bgColour = null;
|
|
shadow = null;
|
|
style = null;
|
|
image = null;
|
|
}
|
|
if (typeof style == 'number') {
|
|
offsets = series;
|
|
position = colour;
|
|
zIndex = bgColour;
|
|
item = shadow;
|
|
series = style;
|
|
colour = null;
|
|
bgColour = null;
|
|
shadow = null;
|
|
style = null;
|
|
}
|
|
if (typeof shadow == 'number') {
|
|
offsets = item;
|
|
position = series;
|
|
zIndex = colour;
|
|
item = bgColour;
|
|
series = shadow;
|
|
colour = null;
|
|
bgColour = null;
|
|
shadow = null;
|
|
}
|
|
if (typeof bgColour == 'number') {
|
|
offsets = zIndex;
|
|
position = item;
|
|
zIndex = series;
|
|
item = colour;
|
|
series = bgColour;
|
|
colour = null;
|
|
bgColour = null;
|
|
}
|
|
if (typeof colour == 'number') {
|
|
offsets = position;
|
|
position = zIndex;
|
|
zIndex = item;
|
|
item = series;
|
|
series = colour;
|
|
colour = null;
|
|
}
|
|
var data = (style ? (PIN_STYLES[style] || 'pin') + ',' : '') +
|
|
(image ? image : this._escapeIconText(letter)) + ',' + this.color(bgColour || 'white') +
|
|
(image ? '' : ',' + this.color(colour || 'black'));
|
|
return this.icon('map_' + (style ? 'x' : '') + 'pin' + (image ? '_icon' : '_letter') +
|
|
SHADOWS[shadow || 'yes'], data, series, item, zIndex, position, offsets);
|
|
},
|
|
|
|
/* Create a fun note icon definition.
|
|
@param title (string) the note title
|
|
@param text (string, optional) the text content, use '|' for line breaks
|
|
@param type (string, optional) the type of note to display
|
|
@param large (boolean, optional) true if a large note is required
|
|
@param alignment (string, optional) 'left', 'right', 'center'
|
|
@param colour (string, optional) the icon text's colour
|
|
@param series (number, optional) the series to which the icon applies
|
|
@param item (number or string or number[2 or 3], optional)
|
|
the item in the series to which it applies or 'all' (default)
|
|
or 'everyn' or [start, end, every]
|
|
@param zIndex (number, optional) the z-index (-1.0 to 1.0)
|
|
@param position (number[2], optional) an absolute chart position (0.0 to 1.0)
|
|
@param offsets (number[2], optional) pixel offsets
|
|
@return (object) the icon definition */
|
|
noteIcon: function(title, text, type, large, alignment, colour,
|
|
series, item, zIndex, position, offsets) {
|
|
if (typeof text == 'boolean') {
|
|
offsets = zIndex;
|
|
position = item;
|
|
zIndex = series;
|
|
item = colour;
|
|
series = alignment;
|
|
colour = large;
|
|
alignment = type;
|
|
large = text;
|
|
type = null;
|
|
text = null;
|
|
}
|
|
else if (typeof text == 'number') {
|
|
offsets = colour;
|
|
position = alignment;
|
|
zIndex = large;
|
|
item = type;
|
|
series = text;
|
|
colour = null;
|
|
alignment = null;
|
|
large = null;
|
|
type = null;
|
|
text = null;
|
|
}
|
|
if (typeof type == 'boolean') {
|
|
offsets = position;
|
|
position = zIndex;
|
|
zIndex = item;
|
|
item = series;
|
|
series = colour;
|
|
colour = alignment;
|
|
alignment = large;
|
|
large = type;
|
|
type = null;
|
|
}
|
|
else if (typeof type == 'number') {
|
|
offsets = series;
|
|
position = colour;
|
|
zIndex = alignment;
|
|
item = large;
|
|
series = type;
|
|
colour = null;
|
|
alignment = null;
|
|
large = null;
|
|
type = null;
|
|
}
|
|
if (typeof large == 'number') {
|
|
offsets = item;
|
|
position = series;
|
|
zIndex = colour;
|
|
item = alignment;
|
|
series = large;
|
|
colour = null;
|
|
alignment = null;
|
|
large = null;
|
|
}
|
|
if (typeof alignment == 'number') {
|
|
offsets = zIndex;
|
|
position = item;
|
|
zIndex = series;
|
|
item = colour;
|
|
series = alignment;
|
|
colour = null;
|
|
alignment = null;
|
|
}
|
|
if (typeof colour == 'number') {
|
|
offsets = position;
|
|
position = zIndex;
|
|
zIndex = item;
|
|
item = series;
|
|
series = colour;
|
|
colour = null;
|
|
}
|
|
var data = (NOTES[type] || 'sticky_y') + ',' + (large ? '1' : '2') + ',' +
|
|
this.color(colour || 'black') + ',' + (PLACEMENTS[alignment] || 'h') + ',' +
|
|
(title ? this._escapeIconText(title) + ',' : '') + this._escapeIconText(text || '');
|
|
return this.icon('fnote' + (title ? '_title' : ''),
|
|
data, series, item, zIndex, position, offsets);
|
|
},
|
|
|
|
/* Create a weather icon definition.
|
|
@param title (string) the note title
|
|
@param text (string, optional) the text content, use '|' for line breaks
|
|
@param type (string, optional) the type of note to display
|
|
@param image (string, optional) the name of an inset image
|
|
@param series (number, optional) the series to which the icon applies
|
|
@param item (number or string or number[2 or 3], optional)
|
|
the item in the series to which it applies or 'all' (default)
|
|
or 'everyn' or [start, end, every]
|
|
@param zIndex (number, optional) the z-index (-1.0 to 1.0)
|
|
@param position (number[2], optional) an absolute chart position (0.0 to 1.0)
|
|
@param offsets (number[2], optional) pixel offsets
|
|
@return (object) the icon definition */
|
|
weatherIcon: function(title, text, type, image, series, item, zIndex, position, offsets) {
|
|
if (typeof text == 'number') {
|
|
offsets = item;
|
|
position = series;
|
|
zIndex = image;
|
|
item = type;
|
|
series = text;
|
|
image = null;
|
|
type = null;
|
|
text = null;
|
|
}
|
|
if (typeof type == 'number') {
|
|
offsets = zIndex;
|
|
position = item;
|
|
zIndex = series;
|
|
item = image;
|
|
series = type;
|
|
image = null;
|
|
type = null;
|
|
}
|
|
if (typeof image == 'number') {
|
|
offsets = position;
|
|
position = zIndex;
|
|
zIndex = item;
|
|
item = series;
|
|
series = image;
|
|
image = null;
|
|
}
|
|
var data = (NOTES[type] || 'sticky_y') + ',' + (image || 'sunny') + ',' +
|
|
this._escapeIconText(title || '') + (text ? ',' + this._escapeIconText(text) : '');
|
|
return this.icon('weather', data, series, item, zIndex, position, offsets);
|
|
},
|
|
|
|
/* Create a text outline icon definition.
|
|
@param text (string) the text content, use '|' for line breaks
|
|
@param size (number, optional) the text size in pixels
|
|
@param bold (boolean, optional) true for bold
|
|
@param alignment (string, optional) 'left', 'right', 'center'
|
|
@param colour (string, optional) the icon text's fill colour
|
|
@param outline (string, optional) the icon text's outline colour
|
|
@param series (number, optional) the series to which the icon applies
|
|
@param item (number or string or number[2 or 3], optional)
|
|
the item in the series to which it applies or 'all' (default)
|
|
or 'everyn' or [start, end, every]
|
|
@param zIndex (number, optional) the z-index (-1.0 to 1.0)
|
|
@param position (number[2], optional) an absolute chart position (0.0 to 1.0)
|
|
@param offsets (number[2], optional) pixel offsets
|
|
@return (object) the icon definition */
|
|
outlineIcon: function(text, size, bold, alignment, colour, outline,
|
|
series, item, zIndex, position, offsets) {
|
|
if (typeof size == 'boolean') {
|
|
offsets = position;
|
|
position = zIndex;
|
|
zIndex = item;
|
|
item = series;
|
|
series = outline;
|
|
outline = colour;
|
|
colour = alignment;
|
|
alignment = bold;
|
|
bold = size;
|
|
size = null;
|
|
}
|
|
if (typeof size == 'string') {
|
|
offsets = zIndex;
|
|
position = item;
|
|
zIndex = series;
|
|
item = outline;
|
|
series = colour;
|
|
outline = alignment;
|
|
colour = bold;
|
|
alignment = size;
|
|
bold = null;
|
|
size = null;
|
|
}
|
|
if (typeof bold == 'number') {
|
|
offsets = series;
|
|
position = outline;
|
|
zIndex = colour;
|
|
item = alignment;
|
|
series = bold;
|
|
outline = null;
|
|
colour = null;
|
|
alignment = null;
|
|
bold = null;
|
|
}
|
|
if (typeof alignment == 'number') {
|
|
offsets = item;
|
|
position = series;
|
|
zIndex = outline;
|
|
item = colour;
|
|
series = alignment;
|
|
outline = null;
|
|
colour = null;
|
|
alignment = null;
|
|
}
|
|
if (typeof colour == 'number') {
|
|
offsets = zIndex;
|
|
position = item;
|
|
zIndex = series;
|
|
item = outline;
|
|
series = colour;
|
|
outline = null;
|
|
colour = null;
|
|
}
|
|
if (typeof outline == 'number') {
|
|
offsets = position;
|
|
position = zIndex;
|
|
zIndex = item;
|
|
item = series;
|
|
series = outline;
|
|
outline = null;
|
|
}
|
|
var data = this.color(colour || 'white') + ',' + (size || 10) + ',' +
|
|
(PLACEMENTS[alignment] || 'h') + ',' + this.color(outline || 'black') + ',' +
|
|
(bold ? 'b' : '_') + ',' + this._escapeIconText(text);
|
|
return this.icon('text_outline', data, series, item, zIndex, position, offsets);
|
|
},
|
|
|
|
/* Create a colour varying icon definition.
|
|
@param image (string) the name of the icon to use
|
|
@param colourSeries (number) the series from which colour data is taken
|
|
@param colourLow (string[3] or string, optional) the icons' fill colour(s) (default 'green')
|
|
@param colourMiddle (string, optional) the icons' middle fill colour (default 'yellow')
|
|
@param colourHigh (string, optional) the icons' high fill colour (default 'red')
|
|
@param size (number, optional) the icon size in pixels - 12, 16, 24 (default 12)
|
|
@param outline (string, optional) the icons' outline colour (default 'black')
|
|
@param alignment (string, optional) result of contextualAlignment(...) (default 'hb')
|
|
@param series (number) the series to which the icon applies
|
|
@param item (number or string or number[2 or 3], optional)
|
|
the item in the series to which it applies or 'all' (default)
|
|
or 'everyn' or [start, end, every]
|
|
@param zIndex (number, optional) the z-index (-1.0 to 1.0)
|
|
@param position (number[2], optional) an absolute chart position (0.0 to 1.0)
|
|
@param offsets (number[2], optional) pixel offsets
|
|
@return (object) the icon definition */
|
|
colourVaryIcon: function(image, colourSeries, colourLow, colourMiddle, colourHigh, size, outline, alignment,
|
|
series, item, zIndex, position, offsets) {
|
|
if ($.isArray(colourLow)) {
|
|
offsets = zIndex;
|
|
position = item;
|
|
zIndex = series;
|
|
item = alignment;
|
|
series = outline;
|
|
alignment = size;
|
|
outline = colourHigh;
|
|
size = colourMiddle;
|
|
colourHigh = colourLow[2];
|
|
colourMiddle = colourLow[1];
|
|
colourLow = colourLow[0];
|
|
}
|
|
else if (typeof colourLow != 'string') {
|
|
offsets = position;
|
|
position = zIndex;
|
|
zIndex = item;
|
|
item = series;
|
|
series = alignment;
|
|
alignment = outline;
|
|
outline = size;
|
|
size = colourHigh;
|
|
colourHigh = colourMiddle;
|
|
colourMiddle = colourLow;
|
|
colourLow = null;
|
|
}
|
|
if (typeof colourMiddle != 'string') {
|
|
offsets = position;
|
|
position = zIndex;
|
|
zIndex = item;
|
|
item = series;
|
|
series = alignment;
|
|
alignment = outline;
|
|
outline = size;
|
|
size = colourHigh;
|
|
colourHigh = colourMiddle;
|
|
colourMiddle = null;
|
|
}
|
|
if (typeof colourHigh != 'string') {
|
|
offsets = position;
|
|
position = zIndex;
|
|
zIndex = item;
|
|
item = series;
|
|
series = alignment;
|
|
alignment = outline;
|
|
outline = size;
|
|
size = colourHigh;
|
|
colourHigh = null;
|
|
}
|
|
if (typeof size != 'number') {
|
|
offsets = position;
|
|
position = zIndex;
|
|
zIndex = item;
|
|
item = series;
|
|
series = alignment;
|
|
alignment = outline;
|
|
outline = size;
|
|
size = null;
|
|
}
|
|
if (typeof outline != 'string') {
|
|
offsets = position;
|
|
position = zIndex;
|
|
zIndex = item;
|
|
item = series;
|
|
series = alignment;
|
|
alignment = outline;
|
|
outline = null;
|
|
}
|
|
if (typeof alignment != 'string') {
|
|
offsets = position;
|
|
position = zIndex;
|
|
zIndex = item;
|
|
item = series;
|
|
series = alignment;
|
|
alignment = null;
|
|
}
|
|
var data = image + ',' + (colourSeries || 0) + ',' + this.color(colourLow || 'green') + ',' +
|
|
this.color(colourMiddle || 'yellow') + ',' + this.color(colourHigh || 'red') + ',' +
|
|
(SIZES[size] || 12) + ',' + this.color(outline || 'black') + ',' + (alignment || 'hb-0-0');
|
|
return this.icon('cm_color', data, series, item, zIndex, position, offsets);
|
|
},
|
|
|
|
/* Create a size varying icon definition.
|
|
@param image (string) the name of the icon to use
|
|
@param sizeSeries (number) the series from which size data is taken
|
|
@param zeroSize (number[3] or number, optional) the icons' size at minimum data value (default 4),
|
|
or array of this and next two values
|
|
@param sizeMultiplier (number, optional) the size scaling factor (default 10)
|
|
@param minSize (number, optional) the minimum size for any icon in pixels (default 4)
|
|
@param colour (string, optional) the icons' fill colour (default '#88ff88')
|
|
@param outline (string, optional) the icons' outline colour (default 'black')
|
|
@param alignment (string, optional) result of contextualAlignment(...) (default 'hb')
|
|
@param series (number) the series to which the icon applies
|
|
@param item (number or string or number[2 or 3], optional)
|
|
the item in the series to which it applies or 'all' (default)
|
|
or 'everyn' or [start, end, every]
|
|
@param zIndex (number, optional) the z-index (-1.0 to 1.0)
|
|
@param position (number[2], optional) an absolute chart position (0.0 to 1.0)
|
|
@param offsets (number[2], optional) pixel offsets
|
|
@return (object) the icon definition */
|
|
sizeVaryIcon: function(image, sizeSeries, zeroSize, sizeMultiplier, minSize, colour, outline, alignment,
|
|
series, item, zIndex, position, offsets) {
|
|
if ($.isArray(zeroSize)) {
|
|
offsets = zIndex;
|
|
position = item;
|
|
zIndex = series;
|
|
item = alignment;
|
|
series = outline;
|
|
alignment = colour;
|
|
outline = minSize;
|
|
colour = sizeMultiplier;
|
|
minSize = zeroSize[2];
|
|
sizeMultiplier = zeroSize[1];
|
|
zeroSize = zeroSize[0];
|
|
}
|
|
else if (typeof zeroSize != 'number') {
|
|
offsets = position;
|
|
position = zIndex;
|
|
zIndex = item;
|
|
item = series;
|
|
series = alignment;
|
|
alignment = outline;
|
|
outline = colour;
|
|
colour = minSize;
|
|
minSize = sizeMultiplier;
|
|
sizeMultiplier = zeroSize;
|
|
zeroSize = null;
|
|
}
|
|
if (typeof sizeMultiplier != 'number') {
|
|
offsets = position;
|
|
position = zIndex;
|
|
zIndex = item;
|
|
item = series;
|
|
series = alignment;
|
|
alignment = outline;
|
|
outline = colour;
|
|
colour = minSize;
|
|
minSize = sizeMultiplier;
|
|
sizeMultiplier = null;
|
|
}
|
|
if (typeof minSize != 'number') {
|
|
offsets = position;
|
|
position = zIndex;
|
|
zIndex = item;
|
|
item = series;
|
|
series = alignment;
|
|
alignment = outline;
|
|
outline = colour;
|
|
colour = minSize;
|
|
minSize = null;
|
|
}
|
|
if (typeof colour != 'string') {
|
|
offsets = position;
|
|
position = zIndex;
|
|
zIndex = item;
|
|
item = series;
|
|
series = alignment;
|
|
alignment = outline;
|
|
outline = colour;
|
|
colour = null;
|
|
}
|
|
if (typeof outline != 'string') {
|
|
offsets = position;
|
|
position = zIndex;
|
|
zIndex = item;
|
|
item = series;
|
|
series = alignment;
|
|
alignment = outline;
|
|
outline = null;
|
|
}
|
|
if (typeof alignment != 'string') {
|
|
offsets = position;
|
|
position = zIndex;
|
|
zIndex = item;
|
|
item = series;
|
|
series = alignment;
|
|
alignment = null;
|
|
}
|
|
var data = image + ',' + (sizeSeries || 0) + ',' + (zeroSize || 4) + ',' +
|
|
(sizeMultiplier || 10) + ',' + (minSize || 4) + ',' + this.color(outline || 'black') + ',' +
|
|
this.color(colour || '#88ff88') + ',' + (alignment || 'hb-0-0');
|
|
return this.icon('cm_size', data, series, item, zIndex, position, offsets);
|
|
},
|
|
|
|
/* Create a colour and size varying icon definition.
|
|
@param image (string) the name of the icon to use
|
|
@param colourSeries (number) the series from which colour data is taken
|
|
@param colourLow (string[3] or string, optional) the icons' fill colour(s) (default 'green')
|
|
@param colourMiddle (string, optional) the icons' middle fill colour (default 'yellow')
|
|
@param colourHigh (string, optional) the icons' high fill colour (default 'red')
|
|
@param sizeSeries (number) the series from which size data is taken
|
|
@param zeroSize (number[3] or number, optional) the icons' size at minimum data value (default 4),
|
|
or array of this and next two values
|
|
@param sizeMultiplier (number, optional) the size scaling factor (default 10)
|
|
@param minSize (number, optional) the minimum size for any icon in pixels (default 4)
|
|
@param outline (string, optional) the icons' outline colour (default 'black')
|
|
@param alignment (string, optional) result of contextualAlignment(...) (default 'hb')
|
|
@param series (number) the series to which the icon applies
|
|
@param item (number or string or number[2 or 3], optional)
|
|
the item in the series to which it applies or 'all' (default)
|
|
or 'everyn' or [start, end, every]
|
|
@param zIndex (number, optional) the z-index (-1.0 to 1.0)
|
|
@param position (number[2], optional) an absolute chart position (0.0 to 1.0)
|
|
@param offsets (number[2], optional) pixel offsets
|
|
@return (object) the icon definition */
|
|
colourSizeVaryIcon: function(image, colourSeries, colourLow, colourMiddle, colourHigh,
|
|
sizeSeries, zeroSize, sizeMultiplier, minSize, outline, alignment,
|
|
series, item, zIndex, position, offsets) {
|
|
if ($.isArray(colourLow)) {
|
|
offsets = zIndex;
|
|
position = item;
|
|
zIndex = series;
|
|
item = alignment;
|
|
series = outline;
|
|
alignment = minSize;
|
|
outline = sizeMultiplier;
|
|
minSize = zeroSize;
|
|
sizeMultiplier = sizeSeries;
|
|
zeroSize = colourHigh;
|
|
sizeSeries = colourMiddle;
|
|
colourHigh = colourLow[2];
|
|
colourMiddle = colourLow[1];
|
|
colourLow = colourLow[0];
|
|
}
|
|
else if (typeof colourLow != 'string') {
|
|
offsets = position;
|
|
position = zIndex;
|
|
zIndex = item;
|
|
item = series;
|
|
series = alignment;
|
|
alignment = outline;
|
|
outline = minSize;
|
|
minSize = sizeMultiplier;
|
|
sizeMultiplier = zeroSize;
|
|
zeroSize = sizeSeries;
|
|
sizeSeries = colourHigh;
|
|
colourHigh = colourMiddle;
|
|
colourMiddle = colourLow;
|
|
colourLow = null;
|
|
}
|
|
if (typeof colourMiddle != 'string') {
|
|
offsets = position;
|
|
position = zIndex;
|
|
zIndex = item;
|
|
item = series;
|
|
series = alignment;
|
|
alignment = outline;
|
|
outline = minSize;
|
|
minSize = sizeMultiplier;
|
|
sizeMultiplier = zeroSize;
|
|
zeroSize = sizeSeries;
|
|
sizeSeries = colourHigh;
|
|
colourHigh = colourMiddle;
|
|
colourMiddle = null;
|
|
}
|
|
if (typeof colourHigh != 'string') {
|
|
offsets = position;
|
|
position = zIndex;
|
|
zIndex = item;
|
|
item = series;
|
|
series = alignment;
|
|
alignment = outline;
|
|
outline = minSize;
|
|
minSize = sizeMultiplier;
|
|
sizeMultiplier = zeroSize;
|
|
zeroSize = sizeSeries;
|
|
sizeSeries = colourHigh;
|
|
colourHigh = null;
|
|
}
|
|
if ($.isArray(zeroSize)) {
|
|
offsets = zIndex;
|
|
position = item;
|
|
zIndex = series;
|
|
item = alignment;
|
|
series = outline;
|
|
alignment = minSize;
|
|
outline = sizeMultiplier;
|
|
minSize = zeroSize[2];
|
|
sizeMultiplier = zeroSize[1];
|
|
zeroSize = zeroSize[0];
|
|
}
|
|
else if (typeof zeroSize != 'number') {
|
|
offsets = position;
|
|
position = zIndex;
|
|
zIndex = item;
|
|
item = series;
|
|
series = alignment;
|
|
alignment = outline;
|
|
outline = minSize;
|
|
minSize = sizeMultiplier;
|
|
sizeMultiplier = zeroSize;
|
|
zeroSize = null;
|
|
}
|
|
if (typeof sizeMultiplier != 'number') {
|
|
offsets = position;
|
|
position = zIndex;
|
|
zIndex = item;
|
|
item = series;
|
|
series = alignment;
|
|
alignment = outline;
|
|
outline = minSize;
|
|
minSize = sizeMultiplier;
|
|
sizeMultiplier = null;
|
|
}
|
|
if (typeof minSize != 'number') {
|
|
offsets = position;
|
|
position = zIndex;
|
|
zIndex = item;
|
|
item = series;
|
|
series = alignment;
|
|
alignment = outline;
|
|
outline = minSize;
|
|
minSize = null;
|
|
}
|
|
if (typeof outline != 'string') {
|
|
offsets = position;
|
|
position = zIndex;
|
|
zIndex = item;
|
|
item = series;
|
|
series = alignment;
|
|
alignment = outline;
|
|
outline = null;
|
|
}
|
|
if (typeof alignment != 'string') {
|
|
offsets = position;
|
|
position = zIndex;
|
|
zIndex = item;
|
|
item = series;
|
|
series = alignment;
|
|
alignment = null;
|
|
}
|
|
var data = image + ',' + (colourSeries || 0) + ',' + this.color(colourLow || 'green') + ',' +
|
|
this.color(colourMiddle || 'yellow') + ',' + this.color(colourHigh || 'red') + ',' +
|
|
(sizeSeries || 0) + ',' + (zeroSize || 4) + ',' + (sizeMultiplier || 10) + ',' + (minSize || 4) + ',' +
|
|
this.color(outline || 'black') + ',' + (alignment || 'hb-0-0');
|
|
return this.icon('cm_color_size', data, series, item, zIndex, position, offsets);
|
|
},
|
|
|
|
/* Create a stacking icon definition.
|
|
@param image (string) the name of the icon to use
|
|
@param repeatSeries (number) the series from which repeat data is taken
|
|
@param scalingFactor (number, optional) the data value scaling factor (default 10)
|
|
@param horizontal (boolean, optional) true if stacking horizontally (default false)
|
|
@param size (number, optional) the icons' size - 12, 16, 24 (default 12)
|
|
@param colour (string, optional) the icons' fill colour (default '#88f88')
|
|
@param outline (string, optional) the icons' outline colour (default 'black')
|
|
@param spacing (number, optional) spacing between icons in pixels (default 0)
|
|
@param alignment (string, optional) result of contextualAlignment(...) (default 'hb')
|
|
@param series (number) the series to which the icon applies
|
|
@param item (number or string or number[2 or 3], optional)
|
|
the item in the series to which it applies or 'all' (default)
|
|
or 'everyn' or [start, end, every]
|
|
@param zIndex (number, optional) the z-index (-1.0 to 1.0)
|
|
@param position (number[2], optional) an absolute chart position (0.0 to 1.0)
|
|
@param offsets (number[2], optional) pixel offsets
|
|
@return (object) the icon definition */
|
|
stackingIcon: function(image, repeatSeries, scalingFactor, horizontal, size, colour, outline,
|
|
spacing, alignment, series, item, zIndex, position, offsets) {
|
|
if (typeof scalingFactor != 'number') {
|
|
offsets = position;
|
|
position = zIndex;
|
|
zIndex = item;
|
|
item = series;
|
|
series = alignment;
|
|
alignment = spacing;
|
|
spacing = outline;
|
|
outline = colour;
|
|
colour = size;
|
|
size = horizontal;
|
|
horizontal = scalingFactor;
|
|
scalingFactor = null;
|
|
}
|
|
if (typeof horizontal != 'boolean') {
|
|
offsets = position;
|
|
position = zIndex;
|
|
zIndex = item;
|
|
item = series;
|
|
series = alignment;
|
|
alignment = spacing;
|
|
spacing = outline;
|
|
outline = colour;
|
|
colour = size;
|
|
size = horizontal;
|
|
horizontal = null;
|
|
}
|
|
if (typeof size != 'number') {
|
|
offsets = position;
|
|
position = zIndex;
|
|
zIndex = item;
|
|
item = series;
|
|
series = alignment;
|
|
alignment = spacing;
|
|
spacing = outline;
|
|
outline = colour;
|
|
colour = size;
|
|
size = null;
|
|
}
|
|
if (typeof colour != 'string') {
|
|
offsets = position;
|
|
position = zIndex;
|
|
zIndex = item;
|
|
item = series;
|
|
series = alignment;
|
|
alignment = spacing;
|
|
spacing = outline;
|
|
outline = colour;
|
|
colour = null;
|
|
}
|
|
if (typeof outline != 'string') {
|
|
offsets = position;
|
|
position = zIndex;
|
|
zIndex = item;
|
|
item = series;
|
|
series = alignment;
|
|
alignment = spacing;
|
|
spacing = outline;
|
|
outline = null;
|
|
}
|
|
if (typeof spacing != 'number') {
|
|
offsets = position;
|
|
position = zIndex;
|
|
zIndex = item;
|
|
item = series;
|
|
series = alignment;
|
|
alignment = spacing;
|
|
spacing = null;
|
|
}
|
|
if (typeof alignment != 'string') {
|
|
offsets = position;
|
|
position = zIndex;
|
|
zIndex = item;
|
|
item = series;
|
|
series = alignment;
|
|
alignment = null;
|
|
}
|
|
var data = image + ',' + (repeatSeries || 0) + ',' + (scalingFactor || 10) + ',' +
|
|
(horizontal ? 'h' : 'V') + ',' + (SIZES[size] || 12) + ',' + this.color(colour || '#88ff88') + ',' +
|
|
this.color(outline || 'black') + ',' + (spacing || 0) + ',' + (alignment || 'hb-0-0');
|
|
return this.icon('cm_repeat', data, series, item, zIndex, position, offsets);
|
|
},
|
|
|
|
/* Create a stacking with colour varying icon definition.
|
|
@param image (string) the name of the icon to use
|
|
@param repeatSeries (number) the series from which repeat data is taken
|
|
@param scalingFactor (number, optional) the data value scaling factor (default 10)
|
|
@param horizontal (boolean, optional) true if stacking horizontally (default false)
|
|
@param size (number, optional) the icons' size - 12, 16, 24 (default 12)
|
|
@param colourSeries (number) the series from which colour data is taken
|
|
@param colourLow (string[3] or string) the icons' fill colour(s) (default 'green')
|
|
@param colourMiddle (string, optional) the icons' middle fill colour (default 'yellow')
|
|
@param colourHigh (string, optional) the icons' high fill colour (default 'red')
|
|
@param outline (string, optional) the icons' outline colour (default 'black')
|
|
@param spacing (number, optional) spacing between icons in pixels (default 0)
|
|
@param alignment (string, optional) result of contextualAlignment(...) (default 'hb')
|
|
@param series (number) the series to which the icon applies
|
|
@param item (number or string or number[2 or 3], optional)
|
|
the item in the series to which it applies or 'all' (default)
|
|
or 'everyn' or [start, end, every]
|
|
@param zIndex (number, optional) the z-index (-1.0 to 1.0)
|
|
@param position (number[2], optional) an absolute chart position (0.0 to 1.0)
|
|
@param offsets (number[2], optional) pixel offsets
|
|
@return (object) the icon definition */
|
|
stackingColourVaryIcon: function(image, repeatSeries, scalingFactor, horizontal, size,
|
|
colourSeries, colourLow, colourMiddle, colourHigh, outline,
|
|
spacing, alignment, series, item, zIndex, position, offsets) {
|
|
if (typeof scalingFactor != 'number') {
|
|
offsets = position;
|
|
position = zIndex;
|
|
zIndex = item;
|
|
item = series;
|
|
series = alignment;
|
|
alignment = spacing;
|
|
spacing = outline;
|
|
outline = colourHigh;
|
|
colourHigh = colourMiddle;
|
|
colourMiddle = colourLow;
|
|
colourLow = colourSeries;
|
|
colourSeries = size;
|
|
size = horizontal;
|
|
horizontal = scalingFactor;
|
|
scalingFactor = null;
|
|
}
|
|
if (typeof horizontal != 'boolean') {
|
|
offsets = position;
|
|
position = zIndex;
|
|
zIndex = item;
|
|
item = series;
|
|
series = alignment;
|
|
alignment = spacing;
|
|
spacing = outline;
|
|
outline = colourHigh;
|
|
colourHigh = colourMiddle;
|
|
colourMiddle = colourLow;
|
|
colourLow = colourSeries;
|
|
colourSeries = size;
|
|
size = horizontal;
|
|
horizontal = null;
|
|
}
|
|
if (typeof size != 'number') {
|
|
offsets = position;
|
|
position = zIndex;
|
|
zIndex = item;
|
|
item = series;
|
|
series = alignment;
|
|
alignment = spacing;
|
|
spacing = outline;
|
|
outline = colourHigh;
|
|
colourHigh = colourMiddle;
|
|
colourMiddle = colourLow;
|
|
colourLow = colourSeries;
|
|
colourSeries = size;
|
|
size = null;
|
|
}
|
|
if ($.isArray(colourLow)) {
|
|
offsets = zIndex;
|
|
position = item;
|
|
zIndex = series;
|
|
item = alignment;
|
|
series = spacing;
|
|
alignment = outline;
|
|
spacing = colourHigh;
|
|
outline = colourMiddle;
|
|
colourHigh = colourLow[2];
|
|
colourMiddle = colourLow[1];
|
|
colourLow = colourLow[0];
|
|
}
|
|
else if (typeof colourLow != 'string') {
|
|
offsets = position;
|
|
position = zIndex;
|
|
zIndex = item;
|
|
item = series;
|
|
series = alignment;
|
|
alignment = spacing;
|
|
spacing = outline;
|
|
outline = colourHigh;
|
|
colourHigh = colourMiddle;
|
|
colourMiddle = colourLow;
|
|
colourLow = null;
|
|
}
|
|
if (typeof colourMiddle != 'string') {
|
|
offsets = position;
|
|
position = zIndex;
|
|
zIndex = item;
|
|
item = series;
|
|
series = alignment;
|
|
alignment = spacing;
|
|
spacing = outline;
|
|
outline = colourHigh;
|
|
colourHigh = colourMiddle;
|
|
colourMiddle = null;
|
|
}
|
|
if (typeof colourHigh != 'string') {
|
|
offsets = position;
|
|
position = zIndex;
|
|
zIndex = item;
|
|
item = series;
|
|
series = alignment;
|
|
alignment = spacing;
|
|
spacing = outline;
|
|
outline = colourHigh;
|
|
colourHigh = null;
|
|
}
|
|
if (typeof outline != 'string') {
|
|
offsets = position;
|
|
position = zIndex;
|
|
zIndex = item;
|
|
item = series;
|
|
series = alignment;
|
|
alignment = spacing;
|
|
spacing = outline;
|
|
outline = null;
|
|
}
|
|
if (typeof spacing != 'number') {
|
|
offsets = position;
|
|
position = zIndex;
|
|
zIndex = item;
|
|
item = series;
|
|
series = alignment;
|
|
alignment = spacing;
|
|
spacing = null;
|
|
}
|
|
if (typeof alignment != 'string') {
|
|
offsets = position;
|
|
position = zIndex;
|
|
zIndex = item;
|
|
item = series;
|
|
series = alignment;
|
|
alignment = null;
|
|
}
|
|
var data = image + ',' + (repeatSeries || 0) + ',' + (scalingFactor || 10) + ',' +
|
|
(horizontal ? 'h' : 'V') + ',' + (SIZES[size] || 12) + ',' + (colourSeries || 0) + ',' +
|
|
this.color(colourLow || 'green') + ',' + this.color(colourMiddle || 'yellow') + ',' +
|
|
this.color(colourHigh || 'red') + ',' + this.color(outline || 'black') + ',' +
|
|
(spacing || 0) + ',' + (alignment || 'hb-0-0');
|
|
return this.icon('cm_repeat_color', data, series, item, zIndex, position, offsets);
|
|
},
|
|
|
|
/* Generate a contextual alignment value.
|
|
@param position (string) the anchor point, e.g. 'topLeft', 'center', ...
|
|
@param hOffset (number, optional) a horizontal offset (pixels)
|
|
@param vOffset (number, optional) a vertical offset (pixels)
|
|
@return (string) the alignment property */
|
|
contextualAlignment: function(position, hOffset, vOffset) {
|
|
hOffset = hOffset || 0;
|
|
vOffset = vOffset || 0;
|
|
return (ALIGNMENTS[position] || 'hv') +
|
|
(hOffset == 0 ? '-0' : (hOffset > 0 ? '%20' + hOffset : hOffset)) +
|
|
(vOffset == 0 ? '-0' : (vOffset > 0 ? '%20' + vOffset : vOffset));
|
|
},
|
|
|
|
/* Generate an embedded chart icon.
|
|
@param embeddedOptions (object) the options for the embedded chart
|
|
@param bubble (boolean, optional) true if embedded in a bubble (default false)
|
|
@param alignment (string, optional) the type of tail to use for a bubble (default 'bottomLeft'),
|
|
or the alignment of a non-bubble icon (default 'bottomLeft')
|
|
@param padding (number, optional) the padding inside the bubble in pixels (default 4)
|
|
@param frameColour (string, optional) the colour of the frame border (default #00d0d0)
|
|
@param fillColour (string, optional) the colour of the frame background (default #80ffff)
|
|
@param series (number, optional) the series to which the icon applies
|
|
@param item (number or string or number[2 or 3], optional)
|
|
the item in the series to which it applies or 'all' (default)
|
|
or 'everyn' or [start, end, every]
|
|
@param zIndex (number, optional) the z-index (-1.0 to 1.0)
|
|
@param position (number[2], optional) an absolute chart position (0.0 to 1.0)
|
|
@param offsets (number[2], optional) pixel offsets
|
|
@return (object) the icon definition */
|
|
embeddedChart: function(embeddedOptions, bubble, alignment, padding, frameColour, fillColour,
|
|
series, item, zIndex, position, offsets) {
|
|
if (typeof bubble != 'boolean') {
|
|
offsets = position;
|
|
position = zIndex;
|
|
zIndex = item;
|
|
item = series;
|
|
series = fillColour;
|
|
fillColour = frameColour;
|
|
frameColour = padding;
|
|
padding = alignment;
|
|
alignment = bubble;
|
|
bubble = false;
|
|
}
|
|
if (typeof alignment != 'string') {
|
|
offsets = position;
|
|
position = zIndex;
|
|
zIndex = item;
|
|
item = series;
|
|
series = fillColour;
|
|
fillColour = frameColour;
|
|
frameColour = padding;
|
|
padding = alignment;
|
|
alignment = null;
|
|
}
|
|
if (!bubble) {
|
|
offsets = item;
|
|
position = series;
|
|
zIndex = fillColour;
|
|
item = frameColour;
|
|
series = padding;
|
|
fillColour = null;
|
|
frameColour = null;
|
|
padding = null;
|
|
}
|
|
else {
|
|
if (typeof padding != 'number') {
|
|
offsets = position;
|
|
position = zIndex;
|
|
zIndex = item;
|
|
item = series;
|
|
series = fillColour;
|
|
fillColour = frameColour;
|
|
frameColour = padding;
|
|
padding = null;
|
|
}
|
|
if (typeof frameColour != 'string') {
|
|
offsets = zIndex;
|
|
position = item;
|
|
zIndex = series;
|
|
item = fillColour;
|
|
series = frameColour;
|
|
fillColour = null;
|
|
frameColour = null;
|
|
}
|
|
else if (typeof fillColour != 'string') {
|
|
offsets = position;
|
|
position = zIndex;
|
|
zIndex = item;
|
|
item = series;
|
|
series = fillColour;
|
|
fillColour = null;
|
|
}
|
|
}
|
|
var encodeEmbedded = function(value) {
|
|
return value.replace(/%7c/ig, '|').replace(/@/g, '@@').replace(/%/g, '%25').
|
|
replace(/,/g, '@,').replace(/\|/g, '@|').replace(/;/g, '@;').
|
|
replace(/&/g, '%26').replace(/=/g, '%3D');
|
|
};
|
|
var allOptions = $.extend({}, $.gchart._defaults, {width: 120, height: 60}, embeddedOptions);
|
|
var embedded = $.gchart._generateChart(allOptions);
|
|
embedded = embedded.replace(/^[^\?]+\?/, '').split('&');
|
|
embedded = $.map(embedded, function(value) {
|
|
value = value.split('=');
|
|
return encodeEmbedded(value[0]) + ',' + encodeEmbedded(value[1]);
|
|
});
|
|
var data = (bubble ? (TAILS[alignment] || 'bb') + ',' + (padding == null ? 4 : padding) + ',' +
|
|
this.color(frameColour || '#00d0d0') + ',' + this.color(fillColour || '#80ffff') :
|
|
(EMBEDDED_ALIGNMENTS[alignment] || 'lb')) + ',' + embedded.join(',');
|
|
return this.icon('ec' + (bubble ? 'b' : ''), data, series, item, zIndex, position, offsets);
|
|
},
|
|
|
|
/* Generate dynamic icon parameters.
|
|
@param type (string) the encoded chart type
|
|
@param options (object) the current instance settings
|
|
@return (string) the icons parameters */
|
|
addIcons: function(type, options) {
|
|
var decodeItem = function(item) {
|
|
if (item == 'all') {
|
|
return item;
|
|
}
|
|
if (typeof item == 'string') {
|
|
if (/^every(\d+)$/.exec(item)) {
|
|
return item.replace(/every/, 'every,');
|
|
}
|
|
}
|
|
if ($.isArray(item)) {
|
|
return 'range,' + item.join(',');
|
|
}
|
|
return item;
|
|
};
|
|
var icons = '';
|
|
var freeIcon = '';
|
|
for (var i = 0; i < options.icons.length; i++) {
|
|
var icon = options.icons[i];
|
|
if (icon.series == -1) {
|
|
freeIcon = '&chst=d_' + icon.name + '&chld=' + icon.data.replace(/,/g, '|');
|
|
}
|
|
else {
|
|
icons += '|y;s=' + icon.name + ';d=' + icon.data +
|
|
(icon.position ? '' : ';ds=' + icon.series + ';dp=' + decodeItem(icon.item)) +
|
|
(icon.zIndex ? ';py=' + icon.zIndex : '') +
|
|
(icon.position ? ';po=' + icon.position.join(',') : '') +
|
|
(icon.offsets ? ';of=' + icon.offsets.join(',') : '');
|
|
}
|
|
}
|
|
return (icons ? '&chem=' + icons.substr(1) : '') + freeIcon;
|
|
},
|
|
|
|
/* Escape reserved characters in icon text.
|
|
@param value (string) the text to escape
|
|
@return (string) the escaped text */
|
|
_escapeIconText: function(value) {
|
|
return value.replace(/([@=,;])/g, '@$1').replace(/\|/g, ',');
|
|
}
|
|
});
|
|
|
|
$.extend($.gchart._prototype.prototype, {
|
|
colorVaryIcon: $.gchart._prototype.prototype.colourVaryIcon,
|
|
colorSizeVaryIcon: $.gchart._prototype.prototype.colourSizeVaryIcon,
|
|
stackingColorVaryIcon: $.gchart._prototype.prototype.stackingColourVaryIcon
|
|
});
|
|
|
|
})(jQuery);
|