Professional Skillset Summary Generator
Preview your skill summary below. Use the "Skill Configuration" tab to edit data.
Professional Skills Summary
Comprehensive Overview of Competencies
No skills added yet.
Add New Skill
Your Skill List
No skills added yet.
'; return; } let html = ''; // 1. Technical Skills (Progress Bars) const techSkills = skills.filter(s => s.cat === 'tech'); if (techSkills.length > 0) { html += `${categories['tech'].label}
`;
html += ``;
techSkills.forEach(s => {
html += `
`;
});
html += `
`;
}
// 2. Soft Skills (Tags)
const softSkills = skills.filter(s => s.cat === 'soft');
if (softSkills.length > 0) {
html += `
${s.name}
${categories['soft'].label}
`;
html += ``;
softSkills.forEach(s => {
html += `${s.name}`;
});
html += `
`;
}
// 3. Tools (List)
const toolSkills = skills.filter(s => s.cat === 'tool');
if (toolSkills.length > 0) {
html += `${categories['tool'].label}
`;
html += ``;
html += toolSkills.map(s => s.name).join(', ');
html += `
`;
}
// 4. Languages (List with level)
const langSkills = skills.filter(s => s.cat === 'lang');
if (langSkills.length > 0) {
html += `${categories['lang'].label}
`;
html += ``;
html += langSkills.map(s => {
let lvlText = 'Basic';
if(s.level >= 100) lvlText = 'Native/Bilingual';
else if(s.level >= 85) lvlText = 'Fluent';
else if(s.level >= 70) lvlText = 'Proficient';
return `${s.name} (${lvlText})`;
}).join(' • ');
html += `
`;
}
previewContent.innerHTML = html;
}
// Expose remove function globally
window.removeSsgSkill = function(index) {
skills.splice(index, 1);
renderManageList();
renderPreview();
};
// --- Event Listeners ---
// Add Skill
document.getElementById('ssg-btn-add').addEventListener('click', () => {
const name = inputName.value.trim();
if (!name) {
alert("Please enter a skill name.");
return;
}
skills.push({
name: name,
cat: inputCat.value,
level: parseInt(inputLevel.value)
});
inputName.value = ''; // Reset input
renderManageList();
renderPreview();
});
// Clear All
document.getElementById('ssg-btn-clear').addEventListener('click', () => {
if(confirm("Delete all skills?")) {
skills = [];
renderManageList();
renderPreview();
}
});
// Load Sample Data (USA Context)
document.getElementById('ssg-btn-sample').addEventListener('click', () => {
skills = [
{ name: "Strategic Planning", cat: "tech", level: 100 },
{ name: "Data Analysis (SQL/Python)", cat: "tech", level: 85 },
{ name: "Financial Modeling", cat: "tech", level: 70 },
{ name: "Leadership & Mentoring", cat: "soft", level: 100 },
{ name: "Cross-Functional Collaboration", cat: "soft", level: 100 },
{ name: "Public Speaking", cat: "soft", level: 85 },
{ name: "Critical Thinking", cat: "soft", level: 100 },
{ name: "Jira / Confluence", cat: "tool", level: 85 },
{ name: "Salesforce CRM", cat: "tool", level: 70 },
{ name: "Microsoft Office 365", cat: "tool", level: 100 },
{ name: "Tableau", cat: "tool", level: 70 },
{ name: "English", cat: "lang", level: 100 },
{ name: "Spanish", cat: "lang", level: 70 }
];
renderManageList();
renderPreview();
// Switch to dashboard to show effect
showTab(0);
});
// PDF Download
document.getElementById('ssg-download-pdf').addEventListener('click', () => {
const { jsPDF } = window.jspdf;
const element = document.getElementById('ssg-preview-area');
html2canvas(element, {
scale: 2,
useCORS: true,
backgroundColor: '#ffffff' // Ensure white background
}).then(canvas => {
const imgData = canvas.toDataURL('image/png');
const pdf = new jsPDF('p', 'mm', 'a4');
const pdfWidth = pdf.internal.pageSize.getWidth();
const pdfHeight = pdf.internal.pageSize.getHeight();
const imgProps = pdf.getImageProperties(imgData);
const imgHeight = (imgProps.height * pdfWidth) / imgProps.width;
// Margin
const margin = 15;
const contentWidth = pdfWidth - (margin * 2);
const contentHeight = (imgProps.height * contentWidth) / imgProps.width;
pdf.addImage(imgData, 'PNG', margin, margin, contentWidth, contentHeight);
pdf.save('Professional_Skillset_Summary.pdf');
});
});
// --- Tab Logic ---
let currentTab = 0;
function showTab(index) {
tabs.forEach((t, i) => {
if (i === index) {
t.classList.add('active');
contents[i].classList.add('active');
} else {
t.classList.remove('active');
contents[i].classList.remove('active');
}
});
currentTab = index;
prevBtn.disabled = currentTab === 0;
nextBtn.disabled = currentTab === tabs.length - 1;
}
tabs.forEach((tab, index) => {
tab.addEventListener('click', () => showTab(index));
});
prevBtn.addEventListener('click', () => {
if (currentTab > 0) showTab(currentTab - 1);
});
nextBtn.addEventListener('click', () => {
if (currentTab < tabs.length - 1) showTab(currentTab + 1);
});
// Init
renderManageList();
renderPreview();
});
