Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
47888e3
Add files via upload
AYLARDJ Mar 16, 2025
4c2809d
Add files via upload
AYLARDJ Mar 17, 2025
9843837
Add files via upload
AYLARDJ Mar 17, 2025
e7b90e7
Add files via upload
AYLARDJ May 4, 2025
9dbae54
Delete GUI/tutorial/tutorial_step1.mp4
AYLARDJ May 4, 2025
1c9f6ad
Delete GUI/tutorial/tutorial_step2.mp4
AYLARDJ May 4, 2025
536230d
Delete GUI/tutorial/tutorial_step3.mp4
AYLARDJ May 4, 2025
a448a8e
Delete GUI/tutorial/tutorial_step4.mp4
AYLARDJ May 4, 2025
d30991a
Add files via upload
AYLARDJ May 4, 2025
ec32f66
Merge branch 'perfanalytics:main' into main
AYLARDJ Sep 28, 2025
b3b937a
Merge branch 'perfanalytics:main' into main
AYLARDJ Oct 3, 2025
dffe945
edit calibration instructions in Readme.md
davidpagnon Dec 10, 2025
151ee7e
Silence some warnings
davidpagnon Dec 31, 2025
deb5d4f
Filter out persons with all NaN keypoints in JSON pose file (#210)
ErwanBeurienne Jan 10, 2026
383f49f
clarified triangulation section in config
davidpagnon Jan 11, 2026
c102d5d
Merge branch 'main' of https://github.com/perfanalytics/Pose2Sim
davidpagnon Jan 11, 2026
75fd993
implemented zero-phase oneeuro filter, and removed some unused condit…
davidpagnon Jan 11, 2026
aadb4b6
solve n_cams_off > min_cams_triangulation (#203)
leadroletroy Jan 13, 2026
1b56114
removed res from read_qca, as resolution is computed later
davidpagnon Jan 14, 2026
4b19346
drop Unnamed columns
davidpagnon Jan 21, 2026
42a716e
clamp l5_S1 axial rotation to prevent 360° twists
davidpagnon Jan 29, 2026
495d79d
Handle pathlib in trc_rotate.py
davidpagnon Jan 29, 2026
33e3f45
Harmonized mediapipe keypoint names with other pose models
davidpagnon Jan 31, 2026
2d16f4c
Merge branch 'perfanalytics:main' into main
AYLARDJ Mar 4, 2026
fa29b4e
Add GUI deleted file, website content, config file, and installer
AYLARDJ Mar 4, 2026
bb52f08
Pose2Sim floder fixed
AYLARDJ Mar 9, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2,449 changes: 2,449 additions & 0 deletions Content/website/index.html

Large diffs are not rendered by default.

164 changes: 164 additions & 0 deletions Content/website/script.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,164 @@
// Global variables
let currentStep = 0;
const totalSteps = 16; // FIXED: Changed from 11 to 16 (steps 0-15)
let currentLanguage = 'en';
let viewAllMode = false;

// Initialize on page load
document.addEventListener('DOMContentLoaded', function() {
initializeNavigation();
updateNavButtons();
updateActiveNavItem();
});

// Navigation functions
function goToStep(stepNumber) {
if (viewAllMode) {
toggleViewAll(); // Exit view all mode
}

currentStep = stepNumber;
showStep(currentStep);
updateNavButtons();
updateActiveNavItem();
scrollToTop();
}

function nextStep() {
if (viewAllMode) {
toggleViewAll();
return;
}

if (currentStep < totalSteps - 1) {
currentStep++;
showStep(currentStep);
updateNavButtons();
updateActiveNavItem();
scrollToTop();
}
}

function previousStep() {
if (viewAllMode) {
toggleViewAll();
return;
}

if (currentStep > 0) {
currentStep--;
showStep(currentStep);
updateNavButtons();
updateActiveNavItem();
scrollToTop();
}
}

function showStep(stepNumber) {
// Hide all steps
document.querySelectorAll('.step').forEach(step => {
step.classList.remove('active');
});

// Show current step
const currentStepElement = document.getElementById(`step-${stepNumber}`);
if (currentStepElement) {
currentStepElement.classList.add('active');
}
}

function updateNavButtons() {
const prevBtn = document.getElementById('prevBtn');
const nextBtn = document.getElementById('nextBtn');

if (viewAllMode) {
prevBtn.style.display = 'none';
nextBtn.querySelector('span').textContent = 'Exit View All';
return;
}

// Show/hide previous button
prevBtn.style.display = currentStep === 0 ? 'none' : 'inline-flex';

// Update next button text
if (currentStep === totalSteps - 1) {
nextBtn.querySelector('span').textContent = 'Finish ✓';
} else {
nextBtn.querySelector('span').textContent = 'Next →';
}
}

function updateActiveNavItem() {
document.querySelectorAll('.nav-item').forEach(item => {
item.classList.remove('active');
});

const activeItem = document.querySelector(`a[href="#step-${currentStep}"]`);
if (activeItem) {
activeItem.classList.add('active');
}
}

function toggleViewAll() {
viewAllMode = !viewAllMode;

const steps = document.querySelectorAll('.step');
const viewAllBtn = document.querySelector('.view-all-btn');

if (viewAllMode) {
// Show all steps
steps.forEach(step => {
step.classList.add('view-all-mode');
step.classList.add('active');
});

viewAllBtn.querySelector('span').textContent = 'Back to Step View';

document.querySelector('.nav-buttons').style.display = 'flex';
} else {
// Return to single step view
steps.forEach(step => {
step.classList.remove('view-all-mode');
step.classList.remove('active');
});

showStep(currentStep);

viewAllBtn.querySelector('span').textContent = 'View All Steps';
}

updateNavButtons();
scrollToTop();
}

function initializeNavigation() {
// Add click handlers to nav items
document.querySelectorAll('.nav-item').forEach((item, index) => {
item.addEventListener('click', (e) => {
e.preventDefault();
goToStep(index);
});
});
}

function scrollToTop() {
window.scrollTo({
top: 0,
behavior: 'smooth'
});
}

// Keyboard navigation
document.addEventListener('keydown', function(e) {
if (viewAllMode) return;

if (e.key === 'ArrowLeft' || e.key === 'ArrowUp') {
if (currentStep > 0) {
previousStep();
}
} else if (e.key === 'ArrowRight' || e.key === 'ArrowDown') {
if (currentStep < totalSteps - 1) {
nextStep();
}
}
});
Loading