198 lines
7.4 KiB
JavaScript
198 lines
7.4 KiB
JavaScript
document.addEventListener('DOMContentLoaded', () => {
|
|
const onboardingFlow = document.getElementById('onboarding-flow');
|
|
const confirmationFlow = document.getElementById('confirmation-flow');
|
|
const onboardingIssuesContainer = document.getElementById('onboarding-issues-container');
|
|
let onboardingIssueButtons;
|
|
const saveOnboardingButton = document.getElementById('save-onboarding-issues');
|
|
const confirmationIssuesList = document.getElementById('confirmation-issues-list');
|
|
const confirmButton = document.getElementById('confirm-issues');
|
|
const reselectButton = document.getElementById('reselect-issues');
|
|
const statusParagraph = confirmationFlow.querySelector('.flow-header p:nth-of-type(1)');
|
|
|
|
const ISSUES = [
|
|
{ value: "gun-control", text: "Gun Control" },
|
|
{ value: "gun-rights", text: "Gun Rights" },
|
|
{ value: "privacy", text: "Electronic Privacy" },
|
|
{ value: "immigration", text: "Immigration" },
|
|
{ value: "climate-change", text: "Climate Change" },
|
|
{ value: "healthcare", text: "Healthcare" },
|
|
{ value: "racial-justice", text: "Racial Justice" },
|
|
{ value: "lgbtq-rights", text: "LGBTQ+ Rights" },
|
|
{ value: "economic-inequality", text: "Economic Inequality" },
|
|
{ value: "reproductive-rights", text: "Reproductive Rights" },
|
|
{ value: "education-reform", text: "Education Reform" },
|
|
{ value: "criminal-justice", text: "Criminal Justice" },
|
|
{ value: "voting-rights", text: "Voting Rights" },
|
|
{ value: "campaign-finance", text: "Campaign Finance" },
|
|
{ value: "foreign-policy", text: "Foreign Policy" },
|
|
{ value: "national-security", text: "National Security" },
|
|
{ value: "free-speech", text: "Free Speech" },
|
|
{ value: "net-neutrality", text: "Net Neutrality" },
|
|
{ value: "labor-rights", text: "Labor Rights" },
|
|
{ value: "affordable-housing", text: "Affordable Housing" },
|
|
{ value: "environmental-protection", text: "Environmental Protection" },
|
|
{ value: "space-exploration", text: "Space Exploration" },
|
|
{ value: "drug-policy-reform", text: "Drug Policy Reform" },
|
|
{ value: "veterans-affairs", text: "Veterans' Affairs" },
|
|
{ value: "senior-citizen-rights", text: "Senior Citizen Rights" },
|
|
];
|
|
|
|
const generateIssueButtons = () => {
|
|
ISSUES.forEach(issue => {
|
|
const button = document.createElement('button');
|
|
button.className = 'issue-button';
|
|
button.setAttribute('data-value', issue.value);
|
|
button.setAttribute('aria-pressed', 'false');
|
|
button.textContent = issue.text;
|
|
onboardingIssuesContainer.appendChild(button);
|
|
});
|
|
onboardingIssueButtons = onboardingIssuesContainer.querySelectorAll('.issue-button');
|
|
};
|
|
|
|
generateIssueButtons();
|
|
|
|
const getStorageApi = () => {
|
|
if (typeof browser !== 'undefined' && browser.storage) {
|
|
return browser.storage.local;
|
|
}
|
|
else if (typeof chrome !== 'undefined' && chrome.storage) {
|
|
return chrome.storage.sync;
|
|
}
|
|
return null;
|
|
};
|
|
const storageApi = getStorageApi();
|
|
|
|
const showFlow = (flow) => {
|
|
onboardingFlow.style.display = 'none';
|
|
confirmationFlow.style.display = 'none';
|
|
flow.style.display = 'block';
|
|
};
|
|
|
|
const populateConfirmationList = (issues) => {
|
|
confirmationIssuesList.innerHTML = '';
|
|
if (issues && issues.length > 0) {
|
|
issues.forEach(issueValue => {
|
|
const issueObj = ISSUES.find(issue => issue.value === issueValue);
|
|
const listItem = document.createElement('li');
|
|
listItem.textContent = issueObj.text;
|
|
confirmationIssuesList.appendChild(listItem);
|
|
});
|
|
} else {
|
|
const listItem = document.createElement('li');
|
|
listItem.textContent = 'No issues selected yet.';
|
|
confirmationIssuesList.appendChild(listItem);
|
|
}
|
|
};
|
|
|
|
const updateStatusDisplay = (isActive) => {
|
|
if (statusParagraph) {
|
|
statusParagraph.textContent = `Status: ${isActive ? 'Active' : 'Inactive'}`;
|
|
statusParagraph.style.color = isActive ? '#10B981' : '#EF4444';
|
|
statusParagraph.style.fontWeight = 'bold';
|
|
}
|
|
confirmButton.textContent = isActive ? 'Deactivate Praxis' : 'Activate Praxis';
|
|
confirmButton.style.backgroundColor = isActive ? '#EF4444' : '#10B981';
|
|
};
|
|
|
|
onboardingIssuesContainer.addEventListener('click', (event) => {
|
|
if (event.target.classList.contains('issue-button')) {
|
|
const button = event.target;
|
|
button.classList.toggle('selected');
|
|
const isSelected = button.classList.contains('selected');
|
|
button.setAttribute('aria-pressed', isSelected);
|
|
}
|
|
});
|
|
|
|
saveOnboardingButton.addEventListener('click', () => {
|
|
const selectedIssues = Array.from(onboardingIssuesContainer.querySelectorAll('.issue-button.selected'))
|
|
.map(button => button.dataset.value);
|
|
|
|
if (storageApi) {
|
|
storageApi.set({
|
|
selected_issues: selectedIssues,
|
|
onboarding_complete: true,
|
|
praxis_active: true
|
|
})
|
|
.then(() => {
|
|
populateConfirmationList(selectedIssues);
|
|
updateStatusDisplay(true);
|
|
showFlow(confirmationFlow);
|
|
})
|
|
.catch(error => {
|
|
alert('Error saving data. Please try again. See console for details.');
|
|
});
|
|
} else {
|
|
alert('Your browser does not support the necessary storage features.');
|
|
}
|
|
});
|
|
|
|
confirmButton.addEventListener('click', () => {
|
|
if (storageApi) {
|
|
storageApi.get('praxis_active')
|
|
.then(data => {
|
|
const newStatus = typeof data.praxis_active === 'boolean' ? !data.praxis_active : false;
|
|
storageApi.set({ praxis_active: newStatus })
|
|
.then(() => {
|
|
updateStatusDisplay(newStatus);
|
|
})
|
|
.catch(error => {});
|
|
})
|
|
.catch(error => {});
|
|
}
|
|
});
|
|
|
|
reselectButton.addEventListener('click', () => {
|
|
onboardingIssueButtons.forEach(button => {
|
|
button.classList.remove('selected');
|
|
button.setAttribute('aria-pressed', false);
|
|
});
|
|
|
|
if (storageApi) {
|
|
storageApi.get('selected_issues')
|
|
.then(data => {
|
|
if (data && data.selected_issues) {
|
|
data.selected_issues.forEach(savedIssue => {
|
|
const button = onboardingIssuesContainer.querySelector(`.issue-button[data-value="${savedIssue}"]`);
|
|
if (button) {
|
|
button.classList.add('selected');
|
|
button.setAttribute('aria-pressed', true);
|
|
}
|
|
});
|
|
}
|
|
})
|
|
.catch(error => {});
|
|
}
|
|
|
|
showFlow(onboardingFlow);
|
|
});
|
|
|
|
if (storageApi) {
|
|
storageApi.get(['selected_issues', 'onboarding_complete', 'praxis_active'])
|
|
.then(data => {
|
|
const isActive = typeof data.praxis_active === 'boolean' ? data.praxis_active : true;
|
|
if (data.onboarding_complete) {
|
|
populateConfirmationList(data.selected_issues || []);
|
|
updateStatusDisplay(isActive);
|
|
showFlow(confirmationFlow);
|
|
} else {
|
|
if (data.selected_issues) {
|
|
data.selected_issues.forEach(savedIssue => {
|
|
const button = onboardingIssuesContainer.querySelector(`.issue-button[data-value="${savedIssue}"]`);
|
|
if (button) {
|
|
button.classList.add('selected');
|
|
button.setAttribute('aria-pressed', true);
|
|
}
|
|
});
|
|
}
|
|
showFlow(onboardingFlow);
|
|
}
|
|
})
|
|
.catch(error => {
|
|
updateStatusDisplay(true);
|
|
showFlow(onboardingFlow);
|
|
});
|
|
} else {
|
|
updateStatusDisplay(true);
|
|
showFlow(onboardingFlow);
|
|
}
|
|
}); |