Files
praxis/content.js

278 lines
13 KiB
JavaScript

function createPraxisBanner(content) {
const banner = document.createElement('div');
banner.id = 'praxis-banner';
banner.innerHTML = content;
Object.assign(banner.style, {
position: 'sticky',
top: '0',
left: '0',
width: '100%',
padding: '12px',
backgroundColor: '#374151',
color: '#f3f4f6',
textAlign: 'center',
zIndex: '999999',
fontSize: '16px',
boxSizing: 'border-box',
borderBottom: '1px solid #4b5563'
});
document.body.prepend(banner);
return banner;
}
(async () => {
const headlineElement = document.querySelector("h1");
const headlineText = headlineElement ? headlineElement.textContent : null;
if (!headlineText) {
return;
}
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 issueTitlesMap = new Map(ISSUES.map(issue => [issue.value, issue.text]));
const donationLinks = {
"gun-control": [
{ "name": "Brady United", "url": "https://www.bradyunited.org/donate" },
{ "name": "Everytown for Gun Safety", "url": "https://www.everytown.org/donate/" },
{ "name": "Moms Demand Action", "url": "https://momsdemandaction.org/donate/"}
],
"gun-rights": [
{ "name": "Gun Owners of America", "url": "https://www.gunowners.org/donate/" },
{ "name": "National Rifle Association (NRA)", "url": "https://donate.nra.org/donate" },
{ "name": "Second Amendment Foundation (SAF)", "url": "https://www.saf.org/donate/"}
],
"privacy": [
{ "name": "Electronic Frontier Foundation (EFF)", "url": "https://www.eff.org/donate" },
{ "name": "ACLU", "url": "https://www.aclu.org/donate/join-aclu-renew-your-membership" },
{ "name": "Privacy Rights Clearinghouse", "url": "https://privacyrights.org/donate"}
],
"immigration": [
{ "name": "ACLU Immigrants' Rights Project", "url": "https://www.aclu.org/issues/immigrants-rights/donate" },
{ "name": "National Immigration Law Center (NILC)", "url": "https://www.nilc.org/donate/" },
{ "name": "Kids in Need of Defense (KIND)", "url": "https://supportkind.org/donate/"}
],
"climate-change": [
{ "name": "Earthjustice", "url": "https://www.earthjustice.org/donate" },
{ "name": "Natural Resources Defense Council (NRDC)", "url": "https://www.nrdc.org/donate" },
{ "name": "Environmental Defense Fund (EDF)", "url": "https://www.edf.org/donate"}
],
"healthcare": [
{ "name": "Families USA", "url": "https://www.familiesusa.org/donate/" },
{ "name": "Planned Parenthood", "url": "https://www.plannedparenthood.org/donate" },
{ "name": "Doctors Without Borders", "url": "https://give.doctorswithoutborders.org/campaign/675296/donate"}
],
"racial-justice": [
{ "name": "NAACP Legal Defense and Educational Fund (NAACP LDF)", "url": "https://www.naacpldf.org/donate/" },
{ "name": "Southern Poverty Law Center (SPLC)", "url": "https://www.splcenter.org/support-us" },
{ "name": "Black Lives Matter Global Network Foundation", "url": "https://blacklivesmatter.com/donate/"}
],
"lgbtq-rights": [
{ "name": "Lambda Legal", "url": "https://www.lambdalegal.org/donate" },
{ "name": "Human Rights Campaign (HRC)", "url": "https://www.hrc.org/donate" },
{ "name": "The Trevor Project", "url": "https://www.thetrevorproject.org/donate/"}
],
"economic-inequality": [
{ "name": "National Employment Law Project (NELP)", "url": "https://www.nelp.org/donate/" },
{ "name": "Economic Policy Institute (EPI)", "url": "https://www.epi.org/donate/" },
{ "name": "Oxfam America", "url": "https://www.oxfamamerica.org/donate/"}
],
"reproductive-rights": [
{ "name": "Reproductive Freedom for All", "url": "https://act.reprofreedomforall.org/a/donate" },
{ "name": "Planned Parenthood", "url": "https://www.plannedparenthood.org/donate" },
{ "name": "National Abortion Federation (NAF)", "url": "https://prochoice.org/donate/"}
],
"education-reform": [
{ "name": "The Education Trust", "url": "https://edtrust.org/donate/" },
{ "name": "DonorsChoose", "url": "https://www.donorschoose.org/donate" },
{ "name": "Teach for America", "url": "https://www.teachforamerica.org/donate"}
],
"criminal-justice": [
{ "name": "Justice in Aging", "url": "https://www.justiceinaging.org/donate/" },
{ "name": "The Sentencing Project", "url": "https://www.sentencingproject.org/donate/" },
{ "name": "Innocence Project", "url": "https://innocenceproject.org/donate/" },
{ "name": "Drug Policy Alliance", "url": "https://drugpolicy.org/donate" }
],
"voting-rights": [
{ "name": "Brennan Center for Justice", "url": "https://www.brennancenter.org/donate" },
{ "name": "Fair Fight", "url": "https://fairfight.com/invest/" },
{ "name": "League of Women Voters", "url": "https://www.lwv.org/donate"}
],
"campaign-finance": [
{ "name": "Campaign Legal Center", "url": "https://campaignlegal.org/donate" },
{ "name": "OpenSecrets (Center for Responsive Politics)", "url": "https://www.opensecrets.org/donate" },
{ "name": "Common Cause", "url": "https://www.commoncause.org/donate/"}
],
"foreign-policy": [
{ "name": "Council on Foreign Relations (CFR)", "url": "https://www.cfr.org/support-cfr" },
{ "name": "Carnegie Endowment for International Peace", "url": "https://carnegieendowment.org/donate/" },
{ "name": "United Nations Foundation", "url": "https://unfoundation.org/donate/"}
],
"national-security": [
{ "name": "Center for Strategic and International Studies (CSIS)", "url": "https://www.csis.org/donate" },
{ "name": "Atlantic Council", "url": "https://www.atlanticcouncil.org/support/" },
{ "name": "Union of Concerned Scientists (UCS)", "url": "https://www.ucsusa.org/donate"}
],
"free-speech": [
{ "name": "Foundation for Individual Rights and Expression (FIRE)", "url": "https://www.thefire.org/donate" },
{ "name": "ACLU", "url": "https://www.aclu.org/donate/join-aclu-renew-your-membership" },
{ "name": "PEN America", "url": "https://pen.org/donate/"}
],
"net-neutrality": [
{ "name": "Free Press", "url": "https://www.freepress.net/donate/" },
{ "name": "Electronic Frontier Foundation (EFF)", "url": "https://www.eff.org/donate" },
{ "name": "Demand Progress", "url": "https://demandprogress.org/donate/"}
],
"labor-rights": [
{ "name": "AFL-CIO", "url": "https://aflcio.org/about/ways-to-give" },
{ "name": "National Labor Law Project", "url": "https://www.nationallaborlawproject.org/donate/"},
{ "name": "United Farm Workers (UFW)", "url": "https://ufw.org/donate/"}
],
"affordable-housing": [
{ "name": "National Low Income Housing Coalition (NLIHC)", "url": "https://nlihc.org/donate" },
{ "name": "Habitat for Humanity", "url": "https://www.habitat.org/donate" },
{ "name": "Enterprise Community Partners", "url": "https://www.enterprisecommunity.org/donate"}
],
"environmental-protection": [
{ "name": "Natural Resources Defense Council (NRDC)", "url": "https://www.nrdc.org/donate" },
{ "name": "Sierra Club", "url": "https://www.sierraclub.org/donate" },
{ "name": "World Wildlife Fund (WWF)", "url": "https://www.worldwildlife.org/donate"}
],
"space-exploration": [
{ "name": "The Planetary Society", "url": "https://www.planetary.org/donate" },
{ "name": "National Space Society", "url": "https://space.nss.org/donate/" },
{ "name": "Space Foundation", "url": "https://www.spacefoundation.org/support-us/"}
],
"drug-policy-reform": [
{ "name": "Drug Policy Alliance", "url": "https://drugpolicy.org/donate" },
{ "name": "NORML", "url": "https://norml.org/donate/" },
{ "name": "Marijuana Policy Project (MPP)", "url": "https://www.mpp.org/donate/"}
],
"veterans-affairs": [
{ "name": "Iraq and Afghanistan Veterans of America (IAVA)", "url": "https://www.iava.org/donate/" },
{ "name": "Wounded Warrior Project", "url": "https://www.woundedwarrior.org/donate" },
{ "name": "Gary Sinise Foundation", "url": "https://www.garysinisefoundation.org/donate"}
],
"senior-citizen-rights": [
{ "name": "Justice in Aging", "url": "https://www.justiceinaging.org/donate/" },
{ "name": "AARP Foundation", "url": "https://www.aarp.org/giving/" },
{ "name": "National Council on Aging (NCOA)", "url": "https://www.ncoa.org/donate"}
],
"disability-rights": [
{ "name": "Disability Rights Education and Defense Fund (DREDF)", "url": "https://dredf.org/donate/" },
{ "name": "American Association of People with Disabilities (AAPD)", "url": "https://www.aapd.com/donate/" }
],
"animal-welfare": [
{ "name": "ASPCA (American Society for the Prevention of Cruelty to Animals)", "url": "https://www.aspca.org/donate" },
{ "name": "Humane Society of the United States (HSUS)", "url": "https://www.humanesociety.org/donate" }
],
"arts-culture": [
{ "name": "National Endowment for the Arts (NEA)", "url": "https://www.arts.gov/support-nea" },
{ "name": "Americans for the Arts", "url": "https://www.americansforthearts.org/donate" }
],
"child-welfare": [
{ "name": "Childhelp", "url": "https://www.childhelp.org/donate/" },
{ "name": " Prevent Child Abuse America", "url": "https://preventchildabuse.org/donate/" }
]
};
let praxisBanner = null;
const sendSentimentAnalysisRequest = async () => {
const response = await chrome.runtime.sendMessage({
type: "ANALYZE_SENTIMENT",
payload: { headline: headlineText }
});
if (response.type === "ANALYSIS_RESULT" && response.result && response.result.sentiment) {
const sentiment = response.result.sentiment;
if (sentiment === 'negative' || sentiment === 'depressing' || sentiment === 'worrying') {
sendCategoryAnalysisRequest();
} else {
return;
}
} else if (response.type === "LLM_ERROR") {
return;
} else {
return;
}
};
const sendCategoryAnalysisRequest = async () => {
const storageApi = typeof browser !== 'undefined' && browser.storage ? browser.storage.local : (typeof chrome !== 'undefined' && chrome.storage ? chrome.storage.sync : null);
let selectedIssues = [];
if (storageApi) {
try {
const data = await storageApi.get('selected_issues');
if (data && data.selected_issues) {
selectedIssues = data.selected_issues;
}
} catch (error) {
}
}
const response = await chrome.runtime.sendMessage({
type: "ANALYZE_HEADLINE_CATEGORY",
payload: {
headline: headlineText,
selectedIssues: selectedIssues
}
});
if (response.type === "ANALYSIS_RESULT" && response.result && response.result.categories && response.result.categories.length > 0) {
let donateLinksHtml = '';
response.result.categories.forEach(category => {
const organizations = donationLinks[category];
if (organizations && organizations.length > 0) {
const niceCategoryTitle = issueTitlesMap.get(category) || category.replace(/-/g, ' ');
donateLinksHtml += `<strong>${niceCategoryTitle}:</strong> `;
const categoryOrgLinks = organizations.map(org =>
`<a href="${org.url}" target="_blank" style="color: #60a5fa; text-decoration: underline;">${org.name}</a>`
).join(', ');
donateLinksHtml += `${categoryOrgLinks}<br>`;
} else {
}
});
if (donateLinksHtml) {
praxisBanner = createPraxisBanner(`Based on this news article, you can donate to the following impact organizations:<br>${donateLinksHtml}`);
} else {
}
} else if (response.type === "LLM_ERROR") {
return;
} else {
return;
}
};
sendSentimentAnalysisRequest();
})();