272 lines
7.9 KiB
JavaScript
272 lines
7.9 KiB
JavaScript
/* Global Constants */
|
|
|
|
let canvas
|
|
let PROJECTS_SCHEMA
|
|
let SCHEMAS_BY_PROJECT = new Map()
|
|
/* New Root object*/
|
|
let UI = {
|
|
projects: {},
|
|
environment: {}
|
|
}
|
|
|
|
/* User Interface Colors */
|
|
const UI_COLOR = {
|
|
DARK: "48, 48, 54",
|
|
LIGHT: "234, 226, 222",
|
|
GREY: "150, 150, 150",
|
|
LIGHT_GREY: "247, 247, 247",
|
|
WHITE: "255, 255, 255",
|
|
BLACK: "0, 0, 0",
|
|
GOLDEN_ORANGE: "240, 162, 2",
|
|
RUSTED_RED: "204, 88, 53",
|
|
GREEN: "188, 214, 67",
|
|
RED: "223, 70, 60",
|
|
PATINATED_TURQUOISE: "27,153,139",
|
|
TITANIUM_YELLOW: "244,228,9",
|
|
MANGANESE_PURPLE: "91,80,122",
|
|
TURQUOISE: "74,207,217",
|
|
DARK_TURQUOISE: "2,149,170",
|
|
ORANGE_WEB: "252,163,17",
|
|
OXFORD_BLUE: "20,33,61",
|
|
BYZANTINE_PINK: "181,23,158",
|
|
TRUE_PURPLE: "114,9,183",
|
|
ULTRAMARINE_BLUE: "67,97,238",
|
|
OCEAN_GREEN: "116,198,157",
|
|
BOTTLE_GREEN: "45,106,79",
|
|
WINDSOR_TAN: "153,88,42",
|
|
CAMEL_TAN: "187,148,87",
|
|
PERSIAN_PLUM: "111,29,27",
|
|
APPLE_GREEN: "128,185,24",
|
|
MIDNIGHT_GREEN: "6,90,96",
|
|
RED_ORANGE: "255,72,0",
|
|
CARIBBEAN_GREEN: "59,206,172",
|
|
SILVER: "191,192,192",
|
|
NEON_GREEN: "15,252,31",
|
|
PINK: "255,77,78",
|
|
TENKAN_GREEN: "43,117,55",
|
|
TENKAN_ORANGE: "233,100,34",
|
|
SKY_BLUE: "133,206,255",
|
|
MDA_PURPLE: "126,71,255",
|
|
PERSIAN_GREEN: "27,153,139",
|
|
CYBER_GRAPE: "98,84,160",
|
|
TRUE_GREEN: "0,225,0",
|
|
TRUE_RED: "255,0,0",
|
|
TRUE_YELLOW: "255,255,0",
|
|
TRUE_BLUE: "0,0,255",
|
|
BROWN: "121,58,21",
|
|
JUNGLE_GREEN: "50,175,162",
|
|
LIGHT_PINK: "254,180,200",
|
|
JUNGLE_LIGHT: "165,223,210",
|
|
TRUE_ORANGE: "255,160,10"
|
|
};
|
|
|
|
/* User Interface Fonts */
|
|
const UI_FONT = {
|
|
PRIMARY: "Saira Condensed",
|
|
SECONDARY: "Source Code Pro"
|
|
};
|
|
|
|
const MAC_AMOUNT_FACTOR = 5
|
|
const IS_MAC = navigator.platform.toUpperCase().indexOf('MAC') >= 0
|
|
const MAC_ZOOM_SENSITIVITY = 5
|
|
const MAC_SCROLL_SENSITIVITY = 20
|
|
const MAC_MOUSE_WHEEL_INFINITE_SCROLL_THRESHOLD= 120
|
|
|
|
const DEBUG = {}
|
|
|
|
let FONT_ASPECT_RATIO = 0.32;
|
|
let ANIMATION_FRAME_PER_SECONDS
|
|
|
|
let DISABLE_BROWSER_RESIZE_EVENT = false
|
|
|
|
const GET_CONTAINER_PURPOSE = {
|
|
MOUSE_OVER: 1,
|
|
MOUSE_WHEEL: 2,
|
|
MOUSE_CLICK: 3,
|
|
DRAGGING: 4
|
|
}
|
|
|
|
const ANGLE_TO_PARENT = {
|
|
NOT_FIXED: 0,
|
|
RANGE_360: 1,
|
|
RANGE_180: 2,
|
|
RANGE_90: 3,
|
|
RANGE_45: 4
|
|
}
|
|
|
|
const DISTANCE_TO_PARENT = {
|
|
NOT_FIXED: 0,
|
|
PARENT_025X: 1,
|
|
PARENT_050X: 2,
|
|
PARENT_100X: 3,
|
|
PARENT_150X: 4,
|
|
PARENT_200X: 5
|
|
}
|
|
|
|
const ARRANGEMENT_STYLE = {
|
|
CONCAVE: 0,
|
|
CONVEX: 1,
|
|
VERTICAL_RIGHT: 2,
|
|
VERTICAL_LEFT: 3,
|
|
HORIZONTAL_BOTTOM: 4,
|
|
HORIZONTAL_TOP: 5
|
|
}
|
|
|
|
/* User Interface Panels */
|
|
|
|
const UI_PANEL = {
|
|
WIDTH: {
|
|
SMALL: 100,
|
|
NORMAL: 150,
|
|
MEDIUM: 200,
|
|
LARGE: 250,
|
|
X_LARGE: 350
|
|
},
|
|
HEIGHT: {
|
|
SMALL: 65,
|
|
MEDIUM: 90,
|
|
NORMAL: 300,
|
|
LARGE: 450
|
|
}
|
|
};
|
|
|
|
|
|
let marketTimeFramesArray =
|
|
'[' +
|
|
'[' + 24 * 60 * 60 * 1000 + ',' + '"24-hs"' + ']' + ',' +
|
|
'[' + 12 * 60 * 60 * 1000 + ',' + '"12-hs"' + ']' + ',' +
|
|
'[' + 8 * 60 * 60 * 1000 + ',' + '"08-hs"' + ']' + ',' +
|
|
'[' + 6 * 60 * 60 * 1000 + ',' + '"06-hs"' + ']' + ',' +
|
|
'[' + 4 * 60 * 60 * 1000 + ',' + '"04-hs"' + ']' + ',' +
|
|
'[' + 3 * 60 * 60 * 1000 + ',' + '"03-hs"' + ']' + ',' +
|
|
'[' + 2 * 60 * 60 * 1000 + ',' + '"02-hs"' + ']' + ',' +
|
|
'[' + 1 * 60 * 60 * 1000 + ',' + '"01-hs"' + ']' + ']';
|
|
|
|
marketTimeFramesArray = JSON.parse(marketTimeFramesArray);
|
|
|
|
let dailyTimeFramesArray =
|
|
'[' +
|
|
'[' + 45 * 60 * 1000 + ',' + '"45-min"' + ']' + ',' +
|
|
'[' + 40 * 60 * 1000 + ',' + '"40-min"' + ']' + ',' +
|
|
'[' + 30 * 60 * 1000 + ',' + '"30-min"' + ']' + ',' +
|
|
'[' + 20 * 60 * 1000 + ',' + '"20-min"' + ']' + ',' +
|
|
'[' + 15 * 60 * 1000 + ',' + '"15-min"' + ']' + ',' +
|
|
'[' + 10 * 60 * 1000 + ',' + '"10-min"' + ']' + ',' +
|
|
'[' + 05 * 60 * 1000 + ',' + '"05-min"' + ']' + ',' +
|
|
'[' + 04 * 60 * 1000 + ',' + '"04-min"' + ']' + ',' +
|
|
'[' + 03 * 60 * 1000 + ',' + '"03-min"' + ']' + ',' +
|
|
'[' + 02 * 60 * 1000 + ',' + '"02-min"' + ']' + ',' +
|
|
'[' + 01 * 60 * 1000 + ',' + '"01-min"' + ']' + ']';
|
|
|
|
dailyTimeFramesArray = JSON.parse(dailyTimeFramesArray);
|
|
|
|
let SHOW_ANIMATION_PERFORMACE = false;
|
|
let MENU_ITEM_ON_FOCUS
|
|
let EDITOR_ON_FOCUS
|
|
|
|
let testUser = window.localStorage.getItem("test_user")
|
|
let LOGGED_IN_USER_LOCAL_STORAGE_KEY
|
|
let LOGGED_IN_ACCESS_TOKEN_LOCAL_STORAGE_KEY
|
|
|
|
if (testUser !== null) {
|
|
LOGGED_IN_USER_LOCAL_STORAGE_KEY = "test_user"
|
|
LOGGED_IN_ACCESS_TOKEN_LOCAL_STORAGE_KEY = "test_access_token"
|
|
} else {
|
|
LOGGED_IN_USER_LOCAL_STORAGE_KEY = "user"
|
|
LOGGED_IN_ACCESS_TOKEN_LOCAL_STORAGE_KEY = "access_token"
|
|
}
|
|
|
|
const MAX_DEFAULT_RATE_SCALE_VALUE = 35000; // This is needed to know the scale of the market time line.
|
|
|
|
const WIDHTER_VOLUME_BAR_BASE_FACTOR = 2.5;
|
|
const LESS_WIDHTER_VOLUME_BAR_TOP_FACTOR = 1 / 4;
|
|
|
|
const ONE_DAY_IN_MILISECONDS = 24 * 60 * 60 * 1000;
|
|
const _12_HOURS_IN_MILISECONDS = 12 * 60 * 60 * 1000;
|
|
const _8_HOURS_IN_MILISECONDS = 8 * 60 * 60 * 1000;
|
|
const _6_HOURS_IN_MILISECONDS = 6 * 60 * 60 * 1000;
|
|
const _4_HOURS_IN_MILISECONDS = 4 * 60 * 60 * 1000;
|
|
const _3_HOURS_IN_MILISECONDS = 3 * 60 * 60 * 1000;
|
|
const _2_HOURS_IN_MILISECONDS = 2 * 60 * 60 * 1000;
|
|
const _1_HOUR_IN_MILISECONDS = 1 * 60 * 60 * 1000;
|
|
|
|
const _45_MINUTES_IN_MILISECONDS = 45 * 60 * 1000;
|
|
const _40_MINUTES_IN_MILISECONDS = 40 * 60 * 1000;
|
|
const _30_MINUTES_IN_MILISECONDS = 30 * 60 * 1000;
|
|
const _20_MINUTES_IN_MILISECONDS = 20 * 60 * 1000;
|
|
const _15_MINUTES_IN_MILISECONDS = 15 * 60 * 1000;
|
|
const _10_MINUTES_IN_MILISECONDS = 10 * 60 * 1000;
|
|
const _5_MINUTES_IN_MILISECONDS = 5 * 60 * 1000;
|
|
const _4_MINUTES_IN_MILISECONDS = 4 * 60 * 1000;
|
|
const _3_MINUTES_IN_MILISECONDS = 3 * 60 * 1000;
|
|
const _2_MINUTES_IN_MILISECONDS = 2 * 60 * 1000;
|
|
const _1_MINUTE_IN_MILISECONDS = 1 * 60 * 1000;
|
|
|
|
|
|
|
|
let NEW_SESSION_INITIAL_DATE = new Date(); // This value will be overwritten at the UI.projects.foundations.spaces.chartingSpace.viewport.initialize if the user had a previous session with this same browser.
|
|
let INITIAL_ZOOM_LEVEL = -28.25 // This is the zoom level at the view port in which the APP starts.
|
|
let INITIAL_TIME_PERIOD = ONE_DAY_IN_MILISECONDS // This value will be overwritten at the UI.projects.foundations.spaces.chartingSpace.viewport.initialize if the user had a previous session with this same browser.
|
|
let VERY_LARGE_NUMBER = 100000000000000
|
|
|
|
const TOP_MARGIN = 0
|
|
let CURRENT_TOP_MARGIN = TOP_MARGIN
|
|
let AT_FULL_SCREEN_MODE = false
|
|
|
|
let maxDate = new Date();
|
|
maxDate.setMilliseconds(0);
|
|
maxDate.setDate(maxDate.getDate() + 365 * 1); // We might have charts that projects data into the future.
|
|
|
|
const MIN_PLOTABLE_DATE = new Date(2015, 0, 1, 0, 0, 0);
|
|
const MAX_PLOTABLE_DATE = maxDate;
|
|
|
|
const TOP_SPACE_HEIGHT = 40
|
|
const COCKPIT_SPACE_HEIGHT = 40;
|
|
const SIDE_PANEL_WIDTH = 350
|
|
let COCKPIT_SPACE_POSITION = browserCanvas.height - COCKPIT_SPACE_HEIGHT
|
|
|
|
const LAYER_STATUS = {
|
|
ON: 'on',
|
|
LOADING: 'loading',
|
|
OFF: 'off'
|
|
};
|
|
|
|
let spawnPosition // this is used in several places.
|
|
|
|
/* Here we list the valid Time Frames: */
|
|
|
|
const PERIOD_24_HS = "24-hs";
|
|
const PERIOD_12_HS = "12-hs";
|
|
const PERIOD_06_HS = "06-hs";
|
|
const PERIOD_03_HS = "03-hs";
|
|
const PERIOD_01_HS = "01-hs";
|
|
const PERIOD_30_MIN = "30-min";
|
|
const PERIOD_10_MIN = "10-min";
|
|
const PERIOD_05_MIN = "05-min";
|
|
const PERIOD_01_MIN = "01-min";
|
|
|
|
/*
|
|
We define here the size of the chartingSpace. It has to bee enough big in order to accommodate all the charts we expect to display in this space.
|
|
*/
|
|
|
|
const TIME_MACHINE_WIDTH = 8;
|
|
const TIME_MACHINE_HEIGHT = 8;
|
|
|
|
let mediaRecorder // to downloadText canvas animation as a mediaRecorder
|
|
let marketPanoramaCanvas
|
|
let ARE_WE_RECORDING_A_VIDEO = false
|
|
let ARE_WE_RECORDING_A_MARKET_PANORAMA = false
|
|
let PANORAMA_WAS_PANNED = false
|
|
let CURRENT_PANORAMA_POSITION = 0
|
|
|
|
let CAN_SPACES_DRAW = false // This global variable regulates when spaces can or can not draw their contents.
|
|
|
|
const codeEditorType = {
|
|
CODE: "code",
|
|
CONFIG: "config"
|
|
}
|
|
|
|
function toRadians(angle) {
|
|
return angle * (Math.PI / 180);
|
|
}
|