Time-Saving Strategy Recommender

Time-Saving Strategy Recommender

Identify Your Challenge

All Time-Saving Strategies

My Action Plan

Actions you've decided to take based on strategies. Mark them as done as you complete them.

    No specific strategies found for this exact challenge in our current database. Try Browse all strategies or selecting a related challenge.

    "; }); // --- Browse All Strategies --- searchStrategiesInput.addEventListener('input', () => renderAllStrategies(searchStrategiesInput.value.trim().toLowerCase())); function renderAllStrategies(searchTerm = "") { const filteredStrategies = STRATEGIES.filter(strategy => strategy.name.toLowerCase().includes(searchTerm) || strategy.description.toLowerCase().includes(searchTerm) || (strategy.keywords && strategy.keywords.some(kw => kw.toLowerCase().includes(searchTerm))) ); renderStrategyList(allStrategiesListDiv, filteredStrategies, true); } // --- Render Strategy List (Helper) --- function renderStrategyList(parentElement, strategyArray, showActionButton) { parentElement.innerHTML = ''; if (strategyArray.length === 0) { parentElement.innerHTML = "

    No strategies match your criteria.

    "; return; } strategyArray.forEach(strategy => { const card = document.createElement('div'); card.className = 'strategy-card'; card.innerHTML = `

    ${strategy.name}

    ${strategy.description}

    ${showActionButton ? `` : ''} `; parentElement.appendChild(card); }); if (showActionButton) { parentElement.querySelectorAll('.add-to-action-plan-btn').forEach(btn => { btn.addEventListener('click', (e) => openActionItemModal(e.target.dataset.id, e.target.dataset.name)); }); } } // --- My Action Plan --- saveActionItemBtn.addEventListener('click', () => { const strategyId = actionModalStrategyIdInput.value; const strategyName = actionModalStrategyName.textContent; // Get from modal for context const actionText = actionItemTextInput.value.trim(); if (!actionText) { alert("Please describe your specific action."); return; } userActionPlan.push({ id: generateId(), strategyId, // Link to original strategy strategyName, // Store for easy display actionText, status: 'todo' // 'todo' or 'done' }); saveActionPlan(); renderActionPlan(); actionItemModal.style.display = 'none'; }); function renderActionPlan() { actionPlanListUL.innerHTML = ''; if (userActionPlan.length === 0) { actionPlanListUL.innerHTML = '
  • Your action plan is empty. Add actions from recommended or browsed strategies!
  • '; downloadActionPlanPdfBtn.style.display = 'none'; return; } downloadActionPlanPdfBtn.style.display = 'inline-block'; // Sort: todo first, then by original add order (implicit as array is pushed to) userActionPlan.sort((a,b) => (a.status === 'todo' && b.status === 'done') ? -1 : (a.status === 'done' && b.status === 'todo') ? 1 : 0); userActionPlan.forEach(item => { const li = document.createElement('li'); li.className = `action-plan-item ${item.status}`; li.innerHTML = ` ${item.strategyName}: ${item.actionText}
    `; actionPlanListUL.appendChild(li); }); actionPlanListUL.querySelectorAll('.mark-action-done-cb').forEach(cb => { cb.addEventListener('change', (e) => { const itemId = e.target.dataset.id; const itemIndex = userActionPlan.findIndex(ap => ap.id === itemId); if (itemIndex > -1) { userActionPlan[itemIndex].status = e.target.checked ? 'done' : 'todo'; saveActionPlan(); renderActionPlan(); // Re-render to update style and order } }); }); actionPlanListUL.querySelectorAll('.delete-action-btn').forEach(btn => { btn.addEventListener('click', (e) => { if (confirm("Delete this action item?")) { userActionPlan = userActionPlan.filter(ap => ap.id !== e.target.dataset.id); saveActionPlan(); renderActionPlan(); } }); }); } // --- PDF Downloads --- downloadRecommendationsPdfBtn.addEventListener('click', () => { const challengeName = selectedChallengeTextSpan.textContent; const recommendations = []; recommendedStrategiesListDiv.querySelectorAll('.strategy-card').forEach(card => { recommendations.push({ name: card.querySelector('h4').textContent, description: card.querySelector('p').textContent }); }); if (recommendations.length === 0) { alert("No recommendations to download."); return; } const { jsPDF } = window.jspdf; const doc = new jsPDF('p', 'pt', 'a4'); const margin = 40; let yPos = margin; const pageWidth = doc.internal.pageSize.getWidth(); doc.setFontSize(18); doc.text('Time-Saving Strategy Recommendations', pageWidth / 2, yPos, { align: 'center' }); yPos += 20; doc.setFontSize(12); doc.setTextColor(100); doc.text(`For Challenge: ${challengeName}`, pageWidth / 2, yPos, { align: 'center' }); yPos += 15; doc.setFontSize(10); doc.text(`Generated: ${new Date().toLocaleString()}`, pageWidth / 2, yPos, { align: 'center' }); yPos += 25; recommendations.forEach(strat => { if (yPos > doc.internal.pageSize.getHeight() - 80) { doc.addPage(); yPos = margin; } // Basic page break doc.setFontSize(12); doc.setTextColor(varToRGB('--primary-color').r,varToRGB('--primary-color').g,varToRGB('--primary-color').b); doc.text(strat.name, margin, yPos); yPos += 15; doc.setFontSize(10); doc.setTextColor(50); const descLines = doc.splitTextToSize(strat.description, pageWidth - 2 * margin); doc.text(descLines, margin, yPos); yPos += (descLines.length * 12) + 10; }); doc.save(`Recommended_Strategies_for_${challengeName.replace(/\s+/g,'_')}.pdf`); }); downloadActionPlanPdfBtn.addEventListener('click', () => { if(userActionPlan.length === 0) { alert("No action items to download."); return; } const { jsPDF } = window.jspdf; const doc = new jsPDF('p', 'pt', 'a4'); const margin = 40; let yPos = margin; doc.setFontSize(18); doc.text('My Time-Saving Action Plan', margin, yPos); yPos += 20; doc.setFontSize(10); doc.setTextColor(100); doc.text(`Generated: ${new Date().toLocaleString()}`, margin, yPos); yPos += 25; const body = userActionPlan.map(item => [ item.strategyName, item.actionText, item.status.charAt(0).toUpperCase() + item.status.slice(1) ]); doc.autoTable({ startY: yPos, head: [['Strategy', 'Specific Action', 'Status']], body: body, theme: 'grid', headStyles: { fillColor: varToRGB('--primary-color', true), textColor: varToRGB('--light-text', true) }, styles: { fontSize: 9 }, columnStyles: {1: {cellWidth: 'auto'}} }); doc.save('My_Time_Saving_Action_Plan.pdf'); }); function varToRGB(varName, asArray = false) { const colorHex = getComputedStyle(document.documentElement).getPropertyValue(varName).trim(); if (!colorHex.startsWith('#')) { return asArray ? [0,0,0] : {r:0,g:0,b:0}; } const r = parseInt(colorHex.slice(1, 3), 16); const g = parseInt(colorHex.slice(3, 5), 16); const b = parseInt(colorHex.slice(5, 7), 16); return asArray ? [r,g,b] : {r,g,b}; } // --- Initializations --- renderAllStrategies(); // Populate browse tab initially renderActionPlan(); // Populate action plan tab initially })();
    Scroll to Top