devextreme
Version:
HTML5 JavaScript Component Suite for Responsive Web Development
554 lines (501 loc) • 18.5 kB
JavaScript
"use strict";
var baseIndicatorsModule = require("./base_indicators"),
BaseIndicator = baseIndicatorsModule.BaseIndicator,
BaseTextCloudMarker = baseIndicatorsModule.BaseTextCloudMarker,
BaseRangeBar = baseIndicatorsModule.BaseRangeBar,
_Number = Number,
_normalizeEnum = require("../core/utils").normalizeEnum;
var SimpleIndicator = BaseIndicator.inherit({
_move: function _move() {
var that = this,
delta = that._actualPosition - that._zeroPosition;
that._rootElement.move(that.vertical ? 0 : delta, that.vertical ? delta : 0);
that._trackerElement && that._trackerElement.move(that.vertical ? 0 : delta, that.vertical ? delta : 0);
},
_isEnabled: function _isEnabled() {
this.vertical = this._options.vertical;
return this._options.length > 0 && this._options.width > 0;
},
_isVisible: function _isVisible() {
return true;
},
_getTrackerSettings: function _getTrackerSettings() {
var options = this._options,
x1,
x2,
y1,
y2,
width = options.width / 2,
length = options.length / 2,
p = this._zeroPosition;
width > 10 || (width = 10);
length > 10 || (length = 10);
if (this.vertical) {
x1 = options.x - length;
x2 = options.x + length;
y1 = p + width;
y2 = p - width;
} else {
x1 = p - width;
x2 = p + width;
y1 = options.y + length;
y2 = options.y - length;
}
return { points: [x1, y1, x1, y2, x2, y2, x2, y1] };
},
_render: function _render() {
var that = this;
that._zeroPosition = that._translator.getCodomainStart();
},
_clear: function _clear() {
delete this._element;
},
measure: function measure(layout) {
var p = this.vertical ? layout.x : layout.y;
return {
min: p - this._options.length / 2,
max: p + this._options.length / 2
};
},
getTooltipParameters: function getTooltipParameters() {
var that = this,
options = that._options,
p = that._actualPosition,
parameters = { x: p, y: p, value: that._currentValue, color: options.color, offset: options.width / 2 };
that.vertical ? parameters.x = options.x : parameters.y = options.y;
return parameters;
}
});
var rectangle = SimpleIndicator.inherit({
_render: function _render() {
var that = this,
options = that._options,
p,
x1,
x2,
y1,
y2;
that.callBase();
p = that._zeroPosition;
if (that.vertical) {
x1 = options.x - options.length / 2;
x2 = options.x + options.length / 2;
y1 = p + options.width / 2;
y2 = p - options.width / 2;
} else {
x1 = p - options.width / 2;
x2 = p + options.width / 2;
y1 = options.y + options.length / 2;
y2 = options.y - options.length / 2;
}
that._element = that._element || that._renderer.path([], "area").append(that._rootElement);
that._element.attr({ points: [x1, y1, x1, y2, x2, y2, x2, y1] });
}
});
var rhombus = SimpleIndicator.inherit({
_render: function _render() {
var that = this,
options = that._options,
x,
y,
dx,
dy;
that.callBase();
if (that.vertical) {
x = options.x;
y = that._zeroPosition;
dx = options.length / 2 || 0;
dy = options.width / 2 || 0;
} else {
x = that._zeroPosition;
y = options.y;
dx = options.width / 2 || 0;
dy = options.length / 2 || 0;
}
that._element = that._element || that._renderer.path([], "area").append(that._rootElement);
that._element.attr({ points: [x - dx, y, x, y - dy, x + dx, y, x, y + dy] });
}
});
var circle = SimpleIndicator.inherit({
_render: function _render() {
var that = this,
options = that._options,
x,
y,
r;
that.callBase();
if (that.vertical) {
x = options.x;
y = that._zeroPosition;
} else {
x = that._zeroPosition;
y = options.y;
}
r = options.length / 2 || 0;
that._element = that._element || that._renderer.circle().append(that._rootElement);
that._element.attr({ cx: x, cy: y, r: r });
}
});
// The following is from linearMarker.js
var triangleMarker = SimpleIndicator.inherit({
_isEnabled: function _isEnabled() {
var that = this;
that.vertical = that._options.vertical;
that._inverted = that.vertical ? _normalizeEnum(that._options.horizontalOrientation) === 'right' : _normalizeEnum(that._options.verticalOrientation) === 'bottom';
return that._options.length > 0 && that._options.width > 0;
},
_isVisible: function _isVisible() {
return true;
},
_render: function _render() {
var that = this,
options = that._options,
x1,
x2,
y1,
y2,
settings = { stroke: 'none', "stroke-width": 0, "stroke-linecap": "square" };
that.callBase();
if (that.vertical) {
x1 = options.x;
y1 = that._zeroPosition;
x2 = x1 + _Number(that._inverted ? options.length : -options.length);
settings.points = [x1, y1, x2, y1 - options.width / 2, x2, y1 + options.width / 2];
} else {
y1 = options.y;
x1 = that._zeroPosition;
y2 = y1 + _Number(that._inverted ? options.length : -options.length);
settings.points = [x1, y1, x1 - options.width / 2, y2, x1 + options.width / 2, y2];
}
if (options.space > 0) {
settings["stroke-width"] = Math.min(options.space, options.width / 4) || 0;
settings.stroke = settings["stroke-width"] > 0 ? options.containerBackgroundColor || 'none' : 'none';
}
that._element = that._element || that._renderer.path([], "area").append(that._rootElement);
that._element.attr(settings).sharp();
},
_getTrackerSettings: function _getTrackerSettings() {
var that = this,
options = that._options,
width = options.width / 2,
length = _Number(options.length),
x1,
x2,
y1,
y2,
result;
width > 10 || (width = 10);
length > 20 || (length = 20);
if (that.vertical) {
x1 = x2 = options.x;
x2 = x1 + (that._inverted ? length : -length);
y1 = that._zeroPosition + width;
y2 = that._zeroPosition - width;
result = [x1, y1, x2, y1, x2, y2, x1, y2];
} else {
y1 = options.y;
y2 = y1 + (that._inverted ? length : -length);
x1 = that._zeroPosition - width;
x2 = that._zeroPosition + width;
result = [x1, y1, x1, y2, x2, y2, x2, y1];
}
return { points: result };
},
measure: function measure(layout) {
var that = this,
length = _Number(that._options.length),
minBound,
maxBound;
if (that.vertical) {
minBound = maxBound = layout.x;
if (that._inverted) {
maxBound = minBound + length;
} else {
minBound = maxBound - length;
}
} else {
minBound = maxBound = layout.y;
if (that._inverted) {
maxBound = minBound + length;
} else {
minBound = maxBound - length;
}
}
return { min: minBound, max: maxBound, indent: that._options.width / 2 };
},
getTooltipParameters: function getTooltipParameters() {
var that = this,
options = that._options,
s = (that._inverted ? options.length : -options.length) / 2,
parameters = that.callBase();
that.vertical ? parameters.x += s : parameters.y += s;
parameters.offset = options.length / 2;
return parameters;
}
});
var textCloud = BaseTextCloudMarker.inherit({
_isEnabled: function _isEnabled() {
var that = this;
that.vertical = that._options.vertical;
that._inverted = that.vertical ? _normalizeEnum(that._options.horizontalOrientation) === 'right' : _normalizeEnum(that._options.verticalOrientation) === 'bottom';
return true;
},
_isVisible: function _isVisible() {
return true;
},
_getTextCloudOptions: function _getTextCloudOptions() {
var that = this,
x = that._actualPosition,
y = that._actualPosition,
type;
if (that.vertical) {
x = that._options.x;
type = that._inverted ? 'top-left' : 'top-right';
} else {
y = that._options.y;
type = that._inverted ? 'right-top' : 'right-bottom';
}
return { x: x, y: y, type: type };
},
measure: function measure(layout) {
var that = this,
minBound,
maxBound,
arrowLength = _Number(that._options.arrowLength) || 0,
indent;
that._measureText();
if (that.vertical) {
indent = that._textFullHeight;
if (that._inverted) {
minBound = layout.x;
maxBound = layout.x + arrowLength + that._textFullWidth;
} else {
minBound = layout.x - arrowLength - that._textFullWidth;
maxBound = layout.x;
}
} else {
indent = that._textFullWidth;
if (that._inverted) {
minBound = layout.y;
maxBound = layout.y + arrowLength + that._textFullHeight;
} else {
minBound = layout.y - arrowLength - that._textFullHeight;
maxBound = layout.y;
}
}
return { min: minBound, max: maxBound, indent: indent };
}
});
// The following is from linearRangeBar.js
var rangeBar = BaseRangeBar.inherit({
_isEnabled: function _isEnabled() {
var that = this;
that.vertical = that._options.vertical;
that._inverted = that.vertical ? _normalizeEnum(that._options.horizontalOrientation) === 'right' : _normalizeEnum(that._options.verticalOrientation) === 'bottom';
return that._options.size > 0;
},
_isVisible: function _isVisible() {
return true;
},
_createBarItem: function _createBarItem() {
return this._renderer.path([], "area").append(this._rootElement);
},
_createTracker: function _createTracker() {
return this._renderer.path([], "area");
},
_setBarSides: function _setBarSides() {
var that = this,
options = that._options,
size = _Number(options.size),
minSide,
maxSide;
if (that.vertical) {
if (that._inverted) {
minSide = options.x;
maxSide = options.x + size;
} else {
minSide = options.x - size;
maxSide = options.x;
}
} else {
if (that._inverted) {
minSide = options.y;
maxSide = options.y + size;
} else {
minSide = options.y - size;
maxSide = options.y;
}
}
that._minSide = minSide;
that._maxSide = maxSide;
that._minBound = minSide;
that._maxBound = maxSide;
},
_getSpace: function _getSpace() {
var options = this._options;
return options.space > 0 ? _Number(options.space) : 0;
},
_isTextVisible: function _isTextVisible() {
var textOptions = this._options.text || {};
return textOptions.indent > 0 || textOptions.indent < 0;
},
_getTextAlign: function _getTextAlign() {
return this.vertical ? this._options.text.indent > 0 ? 'left' : 'right' : 'center';
},
_setTextItemsSides: function _setTextItemsSides() {
var that = this,
indent = _Number(that._options.text.indent);
if (indent > 0) {
that._lineStart = that._maxSide;
that._lineEnd = that._maxSide + indent;
that._textPosition = that._lineEnd + (that.vertical ? 2 : that._textHeight / 2);
that._maxBound = that._textPosition + (that.vertical ? that._textWidth : that._textHeight / 2);
} else if (indent < 0) {
that._lineStart = that._minSide;
that._lineEnd = that._minSide + indent;
that._textPosition = that._lineEnd - (that.vertical ? 2 : that._textHeight / 2);
that._minBound = that._textPosition - (that.vertical ? that._textWidth : that._textHeight / 2);
}
},
_getPositions: function _getPositions() {
var that = this,
startPosition = that._startPosition,
endPosition = that._endPosition,
space = that._space,
basePosition = that._basePosition,
actualPosition = that._actualPosition,
mainPosition1,
mainPosition2,
backPosition1,
backPosition2;
if (startPosition < endPosition) {
if (basePosition < actualPosition) {
mainPosition1 = basePosition;
mainPosition2 = actualPosition;
} else {
mainPosition1 = actualPosition;
mainPosition2 = basePosition;
}
backPosition1 = mainPosition1 - space;
backPosition2 = mainPosition2 + space;
} else {
if (basePosition > actualPosition) {
mainPosition1 = basePosition;
mainPosition2 = actualPosition;
} else {
mainPosition1 = actualPosition;
mainPosition2 = basePosition;
}
backPosition1 = mainPosition1 + space;
backPosition2 = mainPosition2 - space;
}
return {
start: startPosition,
end: endPosition,
main1: mainPosition1,
main2: mainPosition2,
back1: backPosition1,
back2: backPosition2
};
},
_buildItemSettings: function _buildItemSettings(from, to) {
var that = this,
side1 = that._minSide,
side2 = that._maxSide,
points = that.vertical ? [side1, from, side1, to, side2, to, side2, from] : [from, side1, from, side2, to, side2, to, side1];
return { points: points };
},
_updateTextPosition: function _updateTextPosition() {
var that = this;
that._text.attr(that.vertical ? {
x: that._textPosition,
y: that._actualPosition + that._textVerticalOffset
} : {
x: that._actualPosition,
y: that._textPosition + that._textVerticalOffset
});
},
_updateLinePosition: function _updateLinePosition() {
var that = this,
actualPosition = that._actualPosition,
side1,
side2,
points;
if (that.vertical) {
if (that._basePosition >= actualPosition) {
side1 = actualPosition;
side2 = actualPosition + 2;
} else {
side1 = actualPosition - 2;
side2 = actualPosition;
}
points = [that._lineStart, side1, that._lineStart, side2, that._lineEnd, side2, that._lineEnd, side1];
} else {
if (that._basePosition <= actualPosition) {
side1 = actualPosition - 2;
side2 = actualPosition;
} else {
side1 = actualPosition;
side2 = actualPosition + 2;
}
points = [side1, that._lineStart, side1, that._lineEnd, side2, that._lineEnd, side2, that._lineStart];
}
that._line.attr({ points: points }).sharp();
},
_getTooltipPosition: function _getTooltipPosition() {
var that = this,
crossCenter = (that._minSide + that._maxSide) / 2,
alongCenter = (that._basePosition + that._actualPosition) / 2;
return that.vertical ? { x: crossCenter, y: alongCenter } : { x: alongCenter, y: crossCenter };
},
measure: function measure(layout) {
var that = this,
size = _Number(that._options.size),
textIndent = _Number(that._options.text.indent),
minBound,
maxBound,
indent;
that._measureText();
if (that.vertical) {
minBound = maxBound = layout.x;
if (that._inverted) {
maxBound = maxBound + size;
} else {
minBound = minBound - size;
}
if (that._hasText) {
indent = that._textHeight / 2;
if (textIndent > 0) {
maxBound += textIndent + that._textWidth;
}
if (textIndent < 0) {
minBound += textIndent - that._textWidth;
}
}
} else {
minBound = maxBound = layout.y;
if (that._inverted) {
maxBound = maxBound + size;
} else {
minBound = minBound - size;
}
if (that._hasText) {
indent = that._textWidth / 2;
if (textIndent > 0) {
maxBound += textIndent + that._textHeight;
}
if (textIndent < 0) {
minBound += textIndent - that._textHeight;
}
}
}
return { min: minBound, max: maxBound, indent: indent };
}
});
exports._default = rangeBar;
exports["rectangle"] = rectangle;
exports["rhombus"] = rhombus;
exports["circle"] = circle;
exports["trianglemarker"] = triangleMarker;
exports["textcloud"] = textCloud;
exports["rangebar"] = rangeBar;