dataForAnalysis = {}; function sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms)); } async function drawMap(id, points) { var container = L.DomUtil.get("map"); if (container != null) { container._leaflet_id = null; } document.getElementById(id).innerHTML = ""; var map = L.map(id, { center: [23, 0], crs: L.CRS.EPSG3857, zoom: 1.5, maxZoom: 4, zoomControl: true, preferCanvas: false, scrollWheelZoom: true, dragging: true, attributionControl: false, timeDimension: true, } ); L.tileLayer('https://{s}.basemaps.cartocdn.com/rastertiles/voyager_nolabels/{z}/{x}/{y}{r}.png', { maxZoom: 19, attribution: '© OpenStreetMap' }).addTo(map); var dates = Object.keys(points); var heat = L.heatLayer(points[dates[0]], {radius: 10}).addTo(map); L.Control.textbox = L.Control.extend({ onAdd: function(map) { var text = L.DomUtil.create('div'); text.id = "info_text"; text.innerHTML = ""+ dates[0] +"" return text; }, onRemove: function(map) { // Nothing to do here } }); L.control.textbox = function(opts) { return new L.Control.textbox(opts);} L.control.textbox({ position: 'bottomleft' }).addTo(map); for (let i = 1; i < dates.length-1; i++) { await sleep(500); heat.setLatLngs(points[dates[i]]); document.querySelector("#info_text").innerHTML = dates[i]; if (i == dates.length-2) { i = 0; } } } function makeVolumeChart(id, labels, series) { var data = { labels: labels, series: [series] }; var options = { fullWidth: true, axisX: {showLabel: false,}, axisY: {showLabel: false,}, chartPadding: { left: -35 }, showArea: true }; var chart = new Chartist.Line(id, data, options); chart.on('draw', function(data) { if (data.type === 'point') { var circle = new Chartist.Svg('circle', { cx: [data.x], cy: [data.y], r: [0], }, 'ct-circle'); data.element.replace(circle); }}) } function makeSentimentChart(id, labels, series) { var chart = new Chartist.Line(id, { labels: labels, series: [series] }, { showArea: true, fullWidth: true, chartPadding: { left: -20, bottom: -20, }, width: '100%', axisY: { showLabel: false, }, axisX: {showLabel: false,}, plugins: [ Chartist.plugins.ctThreshold({ threshold: .5 }) ] }); } function makeNarrativesChart(id, labels, series) { new Chartist.Line(id, { labels: labels, series: series }, { showPoint: false, fullWidth: true, axisX: { showLabel: false, showGrid: false }, axisY: { showLabel: false, showGrid: false }, chartPadding: { left: -20, bottom: -20 }, }); } function makeNarrativesTableLabel(headerData, percentageData) { const headerRow = document.getElementById('header-row'); headerRow.innerHTML = ''; for (let i = 0; i < headerData.length; i++) { const cell = document.createElement('div'); cell.className = 'cell'; cell.id = "cell" + (i+1).toString(); cell.innerHTML = "

"+ percentageData[i] +"%

" + "
" + headerData[i] + "
"; headerRow.appendChild(cell); } } //var id = Math.random().toString(36).slice(2, 7) var url = "https://atlas.infegy.com/lumen/siteData.json?randomID=" //var url = "siteData.json" //var url = "https://www.infegy.com/hubfs/Insight%20Briefs/RankingNarratives/siteData.json?randomID=" //fetch(url + id).then(response => {return response.json();}).then(data => { fetch(url).then(response => {return response.json();}).then(data => { dataForAnalysis = data; makeSentimentChart(".tiktok-chart3", data['tiktok']['sentiment']['1 day ago']['dates'], data['tiktok']['sentiment']['1 day ago']['data']); makeSentimentChart(".twitter-chart3", data['reddit']['sentiment']['1 day ago']['dates'], data['reddit']['sentiment']['1 day ago']['data']); makeSentimentChart(".instagram-chart3", data['instagram']['sentiment']['1 day ago']['dates'], data['instagram']['sentiment']['1 day ago']['data']); makeNarrativesChart(".narrativesChart", data['reddit']['entities']['1 day ago']['entities'], data['reddit']['entities']['1 day ago']['timelines']); makeNarrativesTableLabel(data['reddit']['entities']['1 day ago']['entities'], data['reddit']['entities']['1 day ago']['growth']); drawMap("map", data['postCoordinates']) }) .catch(function(error) { console.log(error); }); const platformButtons = document.querySelectorAll('.platform-button'); const timeframeButtons = document.querySelectorAll('.timeframe-button'); function deselectAllButtons(buttons) { buttons.forEach(button => { button.classList.remove('selected'); }); } function findSelectedButtons(buttons) { var buttonID; for (let i = 0; i < buttons.length; i++) { if (buttons[i].classList.contains('selected')) { buttonID = buttons[i].id; } } return buttonID; } function handlePlatformButtonClick(event) { var dataSource; var timeFrame; var button = findSelectedButtons(timeframeButtons); if (button == "48h-button") { timeFrame = '1 day ago'; } if (button == "7d-button") { timeFrame = '1 week ago'; } if (button == "30d-button") { timeFrame = '1 month ago'; } deselectAllButtons(platformButtons); event.target.classList.add('selected'); if (event.target.id == "twitter-button") { dataSource = 'reddit'; } if (event.target.id == "instagram-button") { dataSource = 'instagram'; } if (event.target.id == "tiktok-button") { dataSource = "tiktok"; } makeNarrativesChart(".narrativesChart", dataForAnalysis[dataSource]['entities'][timeFrame]['entities'], dataForAnalysis[dataSource]['entities'][timeFrame]['timelines']); makeNarrativesTableLabel(dataForAnalysis[dataSource]['entities'][timeFrame]['entities'], dataForAnalysis[dataSource]['entities'][timeFrame]['growth']); } function handleTimeframeButtonClick(event) { var dataSource; var timeFrame; var button = findSelectedButtons(platformButtons); if (button == "twitter-button") { dataSource = 'reddit'; } if (button == "instagram-button") { dataSource = 'instagram'; } if (button == "tiktok-button") { dataSource = 'tiktok'; } deselectAllButtons(timeframeButtons); event.target.classList.add('selected'); if (event.target.id == "48h-button") { timeFrame = '1 day ago'; } if (event.target.id == "7d-button") { timeFrame = '1 week ago'; } if (event.target.id == "30d-button") { timeFrame = "1 month ago"; } makeSentimentChart(".tiktok-chart3", dataForAnalysis['tiktok']['sentiment'][timeFrame]['dates'], dataForAnalysis['tiktok']['sentiment'][timeFrame]['data']); makeSentimentChart(".twitter-chart3", dataForAnalysis['reddit']['sentiment'][timeFrame]['dates'], dataForAnalysis['reddit']['sentiment'][timeFrame]['data']); makeSentimentChart(".instagram-chart3", dataForAnalysis['instagram']['sentiment'][timeFrame]['dates'], dataForAnalysis['instagram']['sentiment'][timeFrame]['data']); makeNarrativesChart(".narrativesChart", dataForAnalysis[dataSource]['entities'][timeFrame]['entities'], dataForAnalysis[dataSource]['entities'][timeFrame]['timelines']); makeNarrativesTableLabel(dataForAnalysis[dataSource]['entities'][timeFrame]['entities'], dataForAnalysis[dataSource]['entities'][timeFrame]['growth']); } platformButtons.forEach(button => { button.addEventListener('click', handlePlatformButtonClick); }); timeframeButtons.forEach(button => { button.addEventListener('click', handleTimeframeButtonClick); }); document.getElementById("twitter-button").classList.add('selected'); document.getElementById("48h-button").classList.add('selected');