Pelvic Floor Strength Test

Pelvic Floor Strength Test

A self-guided test for muscle endurance and coordination.

Before You Begin

This tool guides you through a simple self-assessment of pelvic floor muscle endurance and control. It is not a medical diagnosis.

How to Perform a Kegel:

  • Find a comfortable position, either sitting or lying down.
  • Imagine you are trying to stop the flow of urine and hold back gas at the same time.
  • The lifting and squeezing sensation is a pelvic floor contraction (Kegel).
  • Breathe normally. Do not hold your breath or tighten your stomach, buttocks, or thigh muscles.

When you're ready, click the "Next" button to proceed to the test.

This tool is for informational purposes only and does not substitute for professional medical advice.

Quick Repetitions:

${quickReps} / 10 reps

Recommendation:

${recommendation}

`; } async function generatePdf() { const { jsPDF } = window.jspdf; const doc = new jsPDF({ orientation: 'portrait', unit: 'mm', format: 'a4' }); const { enduranceHold, quickReps, score, recommendation } = testResults; // --- PDF Styling & Content --- const primaryColor = '#0d9488'; const textColor = '#374151'; const lightTextColor = '#6b7280'; // Header doc.setFont('Inter', 'bold'); doc.setFontSize(24); doc.setTextColor(primaryColor); doc.text('Pelvic Floor Strength Assessment', 105, 25, { align: 'center' }); doc.setFont('Inter', 'normal'); doc.setFontSize(12); doc.setTextColor(lightTextColor); doc.text(`Date of Assessment: ${new Date().toLocaleDateString('en-US')}`, 105, 33, { align: 'center' }); doc.setLineWidth(0.5); doc.setDrawColor(primaryColor); doc.line(20, 42, 190, 42); // Results Section let startY = 60; doc.setFont('Inter', 'bold'); doc.setFontSize(18); doc.setTextColor(primaryColor); doc.text('Test Results', 20, startY); doc.line(20, startY + 3, 60, startY + 3); const resultsData = [ ['Endurance Hold:', `${enduranceHold} seconds (Goal: 10s)`], ['Quick Repetitions:', `${quickReps} reps (Goal: 10 reps)`] ]; startY += 15; doc.setFontSize(12); resultsData.forEach(([label, value]) => { doc.setFillColor(240, 253, 250); // teal-50 doc.rect(20, startY - 7, 170, 10, 'F'); doc.setFont('Inter', 'bold'); doc.setTextColor(textColor); doc.text(label, 25, startY); doc.setFont('Inter', 'normal'); doc.setTextColor(lightTextColor); doc.text(value, 90, startY); startY += 15; }); // Overall Assessment startY += 10; doc.setFont('Inter', 'bold'); doc.setFontSize(18); doc.setTextColor(primaryColor); doc.text('Overall Assessment', 20, startY); doc.line(20, startY + 3, 80, startY + 3); startY += 15; doc.setFont('Inter', 'bold'); doc.setFontSize(14); doc.setTextColor(textColor); doc.text('Assessed Level:', 25, startY); doc.setFont('Inter', 'normal'); doc.setFontSize(16); doc.setTextColor(primaryColor); doc.text(score, 70, startY); // Recommendation startY += 20; doc.setFont('Inter', 'bold'); doc.setFontSize(18); doc.setTextColor(primaryColor); doc.text('Recommendation', 20, startY); doc.line(20, startY + 3, 75, startY + 3); startY += 12; doc.setFont('Inter', 'normal'); doc.setFontSize(12); doc.setTextColor(textColor); doc.text(recommendation, 25, startY, { maxWidth: 160 }); // Footer doc.setLineWidth(0.2); doc.setDrawColor('#d1d5db'); // gray-300 doc.line(20, 270, 190, 270); doc.setFontSize(9); doc.setTextColor('#9ca3af'); // gray-400 doc.text('This self-assessment is for informational purposes and is not a substitute for a diagnosis or treatment plan from a qualified healthcare or physiotherapy professional.', 105, 278, { align: 'center', maxWidth: 170 }); // --- Save PDF --- doc.save('Pelvic_Floor_Assessment_Report.pdf'); } // --- Event Listeners --- Object.keys(tabs).forEach(tabName => { if (tabs[tabName]) { tabs[tabName].addEventListener('click', () => { // Prevent clicking to results if test not done if (tabName === 'results' && testResults.enduranceHold === 0) { alert("Please complete the test before viewing results."); return; } setActiveTab(tabName); }); } }); if (nav.next) nav.next.addEventListener('click', () => navigate(1)); if (nav.prev) nav.prev.addEventListener('click', () => navigate(-1)); if (testElements.startBtn) testElements.startBtn.addEventListener('click', handleTestButtonClick); if (downloadPdfBtn) downloadPdfBtn.addEventListener('click', generatePdf); // Initial setup setActiveTab('instructions'); });
Scroll to Top