diff --git a/swh/web/assets/src/bundles/origin/visits-reporting.js b/swh/web/assets/src/bundles/origin/visits-reporting.js
index 35885f40..46b42dea 100644
--- a/swh/web/assets/src/bundles/origin/visits-reporting.js
+++ b/swh/web/assets/src/bundles/origin/visits-reporting.js
@@ -1,128 +1,131 @@
/**
* Copyright (C) 2018 The Software Heritage developers
* See the AUTHORS file at the top-level directory of this distribution
* License: GNU Affero General Public License version 3, or any later version
* See top-level LICENSE file for more information
*/
import {createVisitsHistogram} from './visits-histogram';
import {updateCalendar} from './visits-calendar';
import './visits-reporting.css';
// will hold all visits
let allVisits;
// will hold filtered visits to display
let filteredVisits;
// will hold currently displayed year
let currentYear;
// function to gather full visits
function filterFullVisits(differentSnapshots) {
let filteredVisits = [];
for (let i = 0; i < allVisits.length; ++i) {
if (allVisits[i].status !== 'full') continue;
if (!differentSnapshots) {
filteredVisits.push(allVisits[i]);
} else if (filteredVisits.length === 0) {
filteredVisits.push(allVisits[i]);
} else {
let lastVisit = filteredVisits[filteredVisits.length - 1];
if (allVisits[i].snapshot !== lastVisit.snapshot) {
filteredVisits.push(allVisits[i]);
}
}
}
return filteredVisits;
}
// function to update the visits list view based on the selected year
function updateVisitsList(year) {
$('#swh-visits-list').children().remove();
let visitsByYear = [];
for (let i = 0; i < filteredVisits.length; ++i) {
if (filteredVisits[i].date.getUTCFullYear() === year) {
visitsByYear.push(filteredVisits[i]);
}
}
let visitsCpt = 0;
let nbVisitsByRow = 4;
let visitsListHtml = '
';
for (let i = 0; i < visitsByYear.length; ++i) {
if (visitsCpt > 0 && visitsCpt % nbVisitsByRow === 0) {
visitsListHtml += '
';
}
visitsListHtml += '
';
++visitsCpt;
}
visitsListHtml += '
';
$('#swh-visits-list').append($(visitsListHtml));
}
// callback when the user selects a year through the visits histogram
function yearClicked(year) {
currentYear = year;
updateCalendar(year, filteredVisits);
updateVisitsList(year);
}
// function to update the visits views (histogram, calendar, list)
function updateDisplayedVisits() {
if (filteredVisits.length === 0) {
return;
}
if (!currentYear) {
currentYear = filteredVisits[filteredVisits.length - 1].date.getUTCFullYear();
}
createVisitsHistogram('.d3-wrapper', filteredVisits, currentYear, yearClicked);
updateCalendar(currentYear, filteredVisits);
updateVisitsList(currentYear);
}
// callback when the user only wants to see full visits pointing
// to different snapshots (default)
export function showFullVisitsDifferentSnapshots(event) {
filteredVisits = filterFullVisits(true);
updateDisplayedVisits();
}
// callback when the user only wants to see full visits
export function showFullVisits(event) {
filteredVisits = filterFullVisits(false);
updateDisplayedVisits();
}
// callback when the user wants to see all visits (including partial, ongoing and failed ones)
export function showAllVisits(event) {
filteredVisits = allVisits;
updateDisplayedVisits();
}
export function initVisitsReporting(visits) {
allVisits = visits;
// process input visits
let firstFullVisit;
allVisits.forEach((v, i) => {
// Turn Unix epoch into Javascript Date object
v.date = new Date(Math.floor(v.date * 1000));
let visitLink = '' + v.fmt_date + '';
if (v.status === 'full') {
if (!firstFullVisit) {
firstFullVisit = v;
$('#swh-first-full-visit').append($(visitLink));
+ if (allVisits.length === 1) {
+ $('#swh-last-full-visit')[0].innerHTML = visitLink;
+ }
} else {
$('#swh-last-full-visit')[0].innerHTML = visitLink;
}
}
if (i === allVisits.length - 1) {
$('#swh-last-visit').append($(visitLink));
}
});
// display full visits pointing to different snapshots by default
showFullVisitsDifferentSnapshots();
}