//############################################ FAKE TABLE FOR INITIAL LOADING THE PAGE #########
//############################################ FAKE TABLE FOR INITIAL LOADING THE PAGE #########
document.addEventListener('DOMContentLoaded', () => {
async function fetchFakeTable() {
try {
const response = await fetch("https://cdn.afterprime.com/jsons/symbols_all.json");
if (!response.ok) {
throw new Error('Network response was not ok ' + response.statusText);
}
const symbols = await response.json();
const filteredPop = symbols.filter(symbol => symbol.popular === true);
const tableBody = document.getElementById('fakeRows');
let htmlString = '';
filteredPop.forEach(symbol => {
console.log(symbol.instrument)
htmlString += `
${
symbol.instrument === 'forex' ? `
` : ``
}
${symbol.id}
${symbol.name}
|
|
|
|
Trade
|
`;
});
tableBody.innerHTML = htmlString;
} catch (error) {
console.error('Failed to fetch stock data:', error);
}
}
fetchFakeTable();
});
//############################################ FAKE TABLE FOR INITIAL LOADING THE PAGE #########
//############################################ FAKE TABLE FOR INITIAL LOADING THE PAGE #########
window.onload = function () {
let idsPopular = [];
let idsForex = [];
let idsCrypto = [];
let idsCommo = [];
let idsIndices = [];
let idsStocks = [];
let idsBonds = [];
const fakeTable = document.getElementById('fakeTable');
const firstTable = document.getElementById('instPopular');
async function fetchPopularData() {
try {
const response = await fetch("https://cdn.afterprime.com/jsons/symbols_all.json");
const symbols = await response.json();
if (!response.ok) {
throw new Error('Network response was not ok ' + response.statusText);
}
const filterPopular = symbols.filter(symbol => symbol.popular === true);
idsPopular = filterPopular.map(symbol => symbol.id);
const tableBody = document.getElementById('dynamicRowsPopular');
let htmlString = '';
filterPopular.forEach(symbol => {
console.log(symbol.instrument)
htmlString += `
${
symbol.instrument === 'forex' ? `
` : ``
}
${symbol.id}
${symbol.name}
|
|
|
|
Trade
|
`;
});
tableBody.innerHTML = htmlString;
} catch (error) {
console.error('Failed to fetch stock data:', error);
}
}
fetchPopularData();
async function fetchSymbols(instrumentName, tableBodyId) {
try {
const response = await fetch("https://cdn.afterprime.com/jsons/symbols_all.json");
if (!response.ok) {
throw new Error('Network response was not ok ' + response.statusText);
}
const symbols = await response.json();
// Filter symbols based on category
const filteredSymbols = symbols.filter(symbol => symbol.instrument === instrumentName);
const ids = filteredSymbols.map(symbol => symbol.id); // Collect IDs based on category
const tableBody = document.getElementById(tableBodyId);
let htmlString = '';
filteredSymbols.forEach(symbol => {
htmlString += `
${
symbol.instrument === 'forex' ? `
` : ``
}
${symbol.id}
${symbol.name}
|
|
|
|
Trade
|
`;
});
tableBody.innerHTML = htmlString;
return ids; // Return the IDs for WebSocket processing
} catch (error) {
console.error('Failed to fetch stock data:', error);
}
}
async function fetchAllCategories() {
idsForex = await fetchSymbols("forex", 'dynamicRows');
idsCrypto = await fetchSymbols("crypto", 'dynamicRowsCrypto');
idsCommo = await fetchSymbols("commodities", 'dynamicRowsCommo');
idsIndices = await fetchSymbols("indices", 'dynamicRowsIndices');
idsStocks = await fetchSymbols("stocks", 'dynamicRowsStocks');
idsBonds = await fetchSymbols("bonds", 'dynamicRowsBonds');
}
fetchAllCategories();
function getPrice(asset, ask, bid, as, bs) {
const bidPriceId = document.getElementById("" + asset + 'BID');
const askPriceId = document.getElementById("" + asset + 'ASK');
const spreadId = document.getElementById("" + asset + 'S');
const numToString = bid.toString();
const decimalPart = numToString.split('.')[1];
const lengthOfDecimal = decimalPart ? decimalPart.length : 0;
if (lengthOfDecimal <= 5) {
spreadId.innerHTML = ((ask - bid) * 10000).toFixed(2);
} else {
spreadId.innerHTML = ((ask - bid) * 10000).toFixed(2);
}
if (lengthOfDecimal < 4) {
spreadId.innerHTML = ((ask - bid)).toFixed(2);
}
if (lengthOfDecimal == 4) {
bidPriceId.innerHTML = formatAndWrapLastTwoDigits(bid, 5);
askPriceId.innerHTML = formatAndWrapLastTwoDigits(ask, 5);
} else if (lengthOfDecimal == 2) {
bidPriceId.innerHTML = formatAndWrapLastTwoDigits(bid, 3);
askPriceId.innerHTML = formatAndWrapLastTwoDigits(ask, 3);
} else {
bidPriceId.innerHTML = defaultWrap(bid);
askPriceId.innerHTML = defaultWrap(ask);
}
}
function getPopPrice(asset, ask, bid, as, bs) {
const bidPriceId = document.getElementById("pop_" + asset + 'BID');
const askPriceId = document.getElementById("pop_" + asset + 'ASK');
const spreadId = document.getElementById("pop_" + asset + 'S');
const numToString = bid.toString();
const decimalPart = numToString.split('.')[1];
const lengthOfDecimal = decimalPart ? decimalPart.length : 0;
if (lengthOfDecimal <= 5) {
spreadId.innerHTML = ((ask - bid) * 10000).toFixed(2);
} else {
spreadId.innerHTML = ((ask - bid) * 10000).toFixed(2);
}
if (lengthOfDecimal < 4) {
spreadId.innerHTML = ((ask - bid)).toFixed(2);
}
if (lengthOfDecimal == 4) {
bidPriceId.innerHTML = formatAndWrapLastTwoDigits(bid, 5);
askPriceId.innerHTML = formatAndWrapLastTwoDigits(ask, 5);
} else if (lengthOfDecimal == 2) {
bidPriceId.innerHTML = formatAndWrapLastTwoDigits(bid, 3);
askPriceId.innerHTML = formatAndWrapLastTwoDigits(ask, 3);
} else {
bidPriceId.innerHTML = defaultWrap(bid);
askPriceId.innerHTML = defaultWrap(ask);
}
}
function formatAndWrapLastTwoDigits(num, toFix) {
let formattedNumber = num.toFixed(toFix);
let integerPart = formattedNumber.slice(0, -2);
let lastTwoDigits = formattedNumber.slice(-2);
return `${integerPart}`;
}
function defaultWrap(num) {
let formattedNumber = num.toString();
let integerPart = formattedNumber.slice(0, -2);
let lastTwoDigits = formattedNumber.slice(-2);
return `${integerPart}`;
}
if ("WebSocket" in window) {
var ws = new ReconnectingWebSocket("wss://pricefeed.afterprime.com/price?symbol=all");
ws.timeoutInterval = 200;
ws.onopen = function () {
ws.send("Connect");
};
ws.onmessage = function (evt) {
setTimeout(() => {
fakeTable.style.display = 'none';
firstTable.classList.add('visible');
}, 1000);
var received_msg = evt.data;
const res = JSON.parse(received_msg);
const filteredInstruments = res.filter(item => item.id.includes('@Local_Execution'));
for (const obj of filteredInstruments) {
obj.id = obj.id.replace('@Local_Execution', '');
if (idsPopular.includes(obj.id)) {
getPopPrice(obj.id, obj.ap, obj.bp, obj.as, obj.bs);
}
if (idsForex.includes(obj.id)) {
getPrice(obj.id, obj.ap, obj.bp, obj.as, obj.bs);
}
if (idsCrypto.includes(obj.id)) {
getPrice(obj.id, obj.ap, obj.bp, obj.as, obj.bs);
}
if (idsCommo.includes(obj.id)) {
getPrice(obj.id, obj.ap, obj.bp, obj.as, obj.bs);
}
if (idsIndices.includes(obj.id)) {
getPrice(obj.id, obj.ap, obj.bp, obj.as, obj.bs);
}
if (idsStocks.includes(obj.id)) {
getPrice(obj.id, obj.ap, obj.bp, obj.as, obj.bs);
}
if (idsBonds.includes(obj.id)) {
getPrice(obj.id, obj.ap, obj.bp, obj.as, obj.bs);
}
}
};
ws.onclose = function () {
};
} else {
item.innerHTML = "Your browser does not support WebSockets.";
}
}