migliori-alternative/contentscript.js

106 lines
4.0 KiB
JavaScript
Raw Normal View History

2020-07-31 22:57:32 +02:00
// document.body.style.border = "15px solid red";
/*
2020-08-02 19:34:43 +02:00
TODO
2020-08-05 22:33:22 +02:00
- Pop-up should be dismissable (per URL / per domain).
- Once dismissed, popup should not be shown on the same url/domain. Use cookies or localStorage for this.
2020-08-02 20:00:38 +02:00
- Fix and test the options UI
- Test and fix for Chrome, Brave & Firefox
2020-07-31 22:57:32 +02:00
*/
const fillTemplate = function(templateString, templateVars){
return new Function("return `"+templateString +"`;").call(templateVars);
}
2020-07-31 22:57:32 +02:00
const altTemplate = "\
2020-08-05 22:33:22 +02:00
<a href='${this.url}' target='_blank' \
style='display: block; border: 2px solid #222222; border-radius: 4px; margin-top: 12px; color:#222222; padding: 8px;'> \
<p style='margin: 0; font-size: 14px; font-weight: bold;'>${this.name} &rarr;</p> \
<p style='margin: 0; font-size: 12px;'>${this.desc}</p> \
</a>"
function createNonRecommendedAlts(alternatives) {
let nonRecommendedAlts = document.createElement("div");
nonRecommendedAlts.setAttribute("style", "text-align: left;");
nonRecommendedAlts.innerHTML = "<p style='font-size: 12px; text-align: center; margin-bottom: 4px;'>MORE ALTERNATIVES</p>";
alternatives.map(alternative => {
nonRecommendedAlts.innerHTML += fillTemplate(altTemplate, alternative);
})
return nonRecommendedAlts;
}
2020-08-05 22:20:46 +02:00
function createRecommendedAlt(recommendedAlternative) {
let recommendedAlt = document.createElement("div");
2020-08-04 17:09:13 +02:00
let betterBrandText = document.createElement("h1");
betterBrandText.innerHTML = "Better";
betterBrandText.setAttribute("style", "font-size: 32px; color: #222222; font-weight: bold; margin: 12px;");
2020-08-04 17:09:13 +02:00
let alternativeText = document.createElement("p");
alternativeText.innerHTML = recommendedAlternative.desc;
alternativeText.setAttribute("style", "font-size: 20px; color: #222222; font-weight: bold; margin-top: 24px;");
let alternativeCTA = document.createElement("a");
alternativeCTA.innerHTML = recommendedAlternative.name + " &rarr;";
alternativeCTA.setAttribute("href", recommendedAlternative.url);
2020-08-05 22:33:22 +02:00
alternativeCTA.setAttribute("target", "_blank");
alternativeCTA.setAttribute("style", "display: inline-block; padding: 12px 24px; background-color: #222222; color: #ffffff; border-radius: 4px;");
2020-08-04 17:09:13 +02:00
recommendedAlt.appendChild(betterBrandText);
recommendedAlt.appendChild(alternativeText);
recommendedAlt.appendChild(alternativeCTA);
return recommendedAlt;
}
2020-08-06 12:41:23 +02:00
function showBetter(match) {
if(!match || !match.alternatives) return;
let alternatives = match.alternatives;
let betterdiv = document.createElement("div");
betterdiv.setAttribute("style",
"background-color: #ffcc49; position: fixed; bottom: 10px; right: 10px; width: 300px; \
2020-08-05 22:33:22 +02:00
box-shadow: 0px 10px 30px #222222; padding: 12px; text-align: center; font-size: 20px; \
z-index: 20000;")
betterdiv.appendChild(createRecommendedAlt(alternatives[0]));
2020-08-04 17:09:13 +02:00
if(alternatives.length > 1) {
betterdiv.appendChild(createNonRecommendedAlts(alternatives.slice(1)));
}
2020-08-04 17:09:13 +02:00
let dismissButton = document.createElement("button");
dismissButton.innerHTML = "&cross; Dismiss suggestion for this URL";
dismissButton.setAttribute("style", "display: block; font-size: 14px; margin: 16px auto;");
2020-08-06 12:41:23 +02:00
dismissButton.addEventListener("click", () => {
document.body.removeChild(betterdiv);
dismissPermanently(match);
})
2020-08-04 17:09:13 +02:00
betterdiv.appendChild(dismissButton);
2020-07-31 22:57:32 +02:00
document.body.appendChild(betterdiv);
}
2020-08-06 12:41:23 +02:00
function dismissPermanently(match) {
let key = `dismiss@${match.urlPattern}`
chrome.storage.local.set({
[key]: true,
});
}
function ifNotDissmissed(match, callback) {
let key = `dismiss@${match.urlPattern}`
chrome.storage.local.get(key, (item) => {
if (item && item[key]) {
return;
} else {
callback(match);
}
})
}
2020-08-02 19:34:43 +02:00
chrome.runtime.sendMessage({type: 'getMatch', url: document.location.href}, (response) => {
if (response) {
2020-08-06 12:41:23 +02:00
ifNotDissmissed(response, showBetter);
2020-08-02 19:34:43 +02:00
}
});