Files
Superalgos/Utilities.js
T

141 lines
3.8 KiB
JavaScript

function transformThisPoint(point, container) {
/* We make the point relative to the current frame */
point = container.frame.frameThisPoint(point);
/* We add the possible displacement */
point = container.displacement.displaceThisPoint(point);
/* We viewport Transformation. */
point = viewPort.zoomThisPoint(point);
return point;
}
function unTransformThisPoint(point, container) {
point = viewPort.unzoomThisPoint(point);
point = container.displacement.undisplaceThisPoint(point);
point = container.frame.unframeThisPoint(point);
return point;
}
function nextPorwerOf10(number) {
for (let i = -10; i <= 10; i++) {
if (number < Math.pow(10, i)) {
return Math.pow(10, i);
}
}
}
function pad(str, max) {
str = str.toString();
return str.length < max ? pad("0" + str, max) : str;
}
function getDateFromPoint(point, container, timeLineCoordinateSystem) {
point = unTransformThisPoint(point, container);
point = timeLineCoordinateSystem.unInverseTransform(point, container.frame.height);
let date = new Date(point.x);
return date;
}
function getRateFromPoint(point, container, timeLineCoordinateSystem) {
point = unTransformThisPoint(point, container);
point = timeLineCoordinateSystem.unInverseTransform(point, container.frame.height);
return point.y;
}
function getMilisecondsFromPoint(point, container, timeLineCoordinateSystem) {
point = unTransformThisPoint(point, container);
point = timeLineCoordinateSystem.unInverseTransform(point, container.frame.height);
return point.x;
}
function saveUserPosition(container, timeLineCoordinateSystem) {
let centerPoint = {
x: (viewPort.visibleArea.bottomRight.x - viewPort.visibleArea.topLeft.x) / 2,
y: (viewPort.visibleArea.bottomRight.y - viewPort.visibleArea.topLeft.y) / 2
};
let userPosition = {
date: getDateFromPoint(centerPoint, container, timeLineCoordinateSystem),
rate: getRateFromPoint(centerPoint, container, timeLineCoordinateSystem),
market: DEFAULT_MARKET,
zoom: viewPort.zoomTargetLevel
};
window.localStorage.setItem('userPosition', JSON.stringify(userPosition));
}
function moveToUserPosition(container, timeLineCoordinateSystem) {
let savedPosition = window.localStorage.getItem('userPosition');
let userPosition;
if (savedPosition === null) {
userPosition = {
date: (new Date()).toString(),
rate: timeLineCoordinateSystem.max.y / 2,
market: DEFAULT_MARKET,
zoom: INITIAL_ZOOM_LEVEL
};
} else {
userPosition = JSON.parse(savedPosition);
}
let centerPoint = {
x: (viewPort.visibleArea.bottomRight.x - viewPort.visibleArea.topLeft.x) / 2,
y: (viewPort.visibleArea.bottomRight.y - viewPort.visibleArea.topLeft.y) / 2
};
viewPort.newZoomLevel(userPosition.zoom);
INITIAL_TIME_PERIOD = recalculatePeriod(userPosition.zoom);
INITIAL_DATE = new Date (userPosition.date);
let targetPoint = {
x: (new Date(userPosition.date)).valueOf(),
y: userPosition.rate
};
/* Put this point in the coordinate system of the viewPort */
targetPoint = timeLineCoordinateSystem.transformThisPoint(targetPoint);
targetPoint = transformThisPoint(targetPoint, container);
/* Lets calculate the displace vector, from the point we want at the center, to the current center. */
let displaceVector = {
x: centerPoint.x - targetPoint.x,
y: centerPoint.y - targetPoint.y
};
viewPort.displace(displaceVector);
}
function removeTime(datetime) {
if (datetime === undefined) { return;}
let dateOnly = new Date(Math.trunc(datetime.valueOf() / ONE_DAY_IN_MILISECONDS) * ONE_DAY_IN_MILISECONDS);
return dateOnly;
}