Clean repo/README.md, add option to disable extension and bump version to 2.

This commit is contained in:
天クマ 2026-04-25 17:22:46 -03:00
commit 9dc35139d6
7 changed files with 123 additions and 57 deletions

View file

@ -1,19 +1,20 @@
# Mango # Mango
Obliterates rounded corners... BECAUSE I HATE THEM I declare war to rouded corners!
<a href="https://addons.mozilla.org/en-US/firefox/addon/mangocorners/"><img src="Firefox-badges.jpg" alt="Firefox Addon Store Icon" width="200"/></a> <a href="https://addons.mozilla.org/en-US/firefox/addon/mangocorners/"><img src="./img/Firefox-badges.jpg" alt="Firefox Addon Store Icon" width="200"/></a>
<img src="https://addons.mozilla.org/user-media/previews/full/307/307501.png?modified=1729803414" alt="Mango configuration UI" width="200"/> ## Example
<img src="https://addons.mozilla.org/user-media/previews/full/307/307505.png?modified=1729803420" alt="Mango VS YouTube default design" width="400"/> <img src="https://addons.mozilla.org/user-media/previews/full/307/307505.png?modified=1729803420" alt="Mango VS YouTube default design"/>
## How it works ## How it works
``* { ```css
* {
border-radius: 0 !important; border-radius: 0 !important;
}`` }
That's everything we inject into your page, feel free to check the source code to be sure we're not doing anything malicious. ```
This CSS tells your browser that everything (`*`) should have the property `border-radius` (amount of rounded corner) to 0.
## Why 'Mango' The extension just injects this into your page after checking if the page is whitelisted. This extension is so tiny that you can review `mango.js` and `main.js` by yourself or with help of AI.
Mango is the codename of the first Windows Phone OS to have a codename (Windows Phone 7.5). I had a WP as a child and I always loved the "minimalist square" design of Windows Phone.
## Contributing ## Why Mango
Just do a pull request Mango is the codename of _Windows Phone 7.5_, the first version to adopt Microslop's "Metro UI". I grew up as a kid using Windows Phone and that shaped the way I see rounded corners—and I absolutely hate them.

View file

Before

Width:  |  Height:  |  Size: 8.7 KiB

After

Width:  |  Height:  |  Size: 8.7 KiB

Before After
Before After

View file

@ -1,17 +1,20 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>
<title>Mango</title> <title>Mango</title>
<script src="mangoui.js" defer></script> <script src="menu/main.js" defer></script>
<link rel="stylesheet" href="mangoUI.css"> <link rel="stylesheet" href="menu/main.css">
</head> </head>
<body> <body>
<h1 id="title">mango</h1> <h1 id="title">mango</h1>
<h2 id="source">whitelist</h2> <h2 id="source">whitelist</h2>
<textarea placeholder="Domain only, separated by new line, see the example: <textarea placeholder="Domain only, separated by new line, see the example:
example.com example.com
example2.com" id="whitelist" rows="10" cols="30"></textarea><br> example2.com" id="whitelist" rows="10" cols="30"></textarea><br>
<button id="whitelistSave">save</button> <button id="whitelistSave">save</button>
<p><a href="https://git.disroot.org/adrianvictor/mango">source-code</a></p> <button id="toggle">enabled</button>
<footer>
<p><span id="version">v2</span> Adrian Victor <a href="https://github.com/adrianvic/mango">(source-code)</a></p>
</footer>
</body> </body>
</html> </html>

View file

@ -1,26 +1,31 @@
console.log("[Mango] Let's get the business done.") const currentHostname = location.hostname;
let enabled = true;
browser.storage.local.get("enabled").then((result) => {
enabled = result.enabled ?? true;
}).catch((error) => {
console.error("Error retrieving enabled state:", error);
});
function checkWhitelist(url) { function checkWhitelist(url) {
return browser.storage.local.get("whitelist").then((result) => { return browser.storage.local.get("whitelist").then((result) => {
const whitelist = result.whitelist || []; const whitelist = result.whitelist || [];
return whitelist.includes(url); return whitelist.includes(url);
}); });
} }
const currentHostname = location.hostname; checkWhitelist(currentHostname).then((isWhitelisted) => {
if (!isWhitelisted && enabled) {
checkWhitelist(currentHostname).then((isWhitelisted) => { const styles = `
if (!isWhitelisted) {
const styles = `
* { * {
border-radius: 0 !important; border-radius: 0 !important;
} }
`; `;
const injectedStyle = document.createElement("style"); const injectedStyle = document.createElement("style");
injectedStyle.type = "text/css"; injectedStyle.type = "text/css";
injectedStyle.innerText = styles; injectedStyle.id = "mangoInjectedStyle";
document.head.appendChild(injectedStyle); injectedStyle.innerText = styles;
} else { document.head.appendChild(injectedStyle);
console.log("[Mango] Mercy! This page is whitelisted.") }
} });
});

View file

@ -1,14 +0,0 @@
document.getElementById('whitelistSave').addEventListener('click', () => {
const whitelist = document.getElementById('whitelist').value.split('\n').map(line => line.trim()).filter(line => line);
browser.storage.local.set({ whitelist: whitelist });
console.log('Whitelist saved!');
});
browser.storage.local.get("whitelist").then((result) => {
const whitelist = result.whitelist || [];
document.getElementById('whitelist').value = whitelist.join('\n');
}).catch((error) => {
console.error("Error retrieving the whitelist:", error);
});

View file

@ -1,11 +1,22 @@
:root {
--accent: orangered;
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body { body {
background-color: black; background-color: black;
color: white; color: white;
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
padding: 1em;
} }
a { a {
color: orangered; color: var(--accent);
text-decoration: none; text-decoration: none;
} }
@ -26,26 +37,53 @@ body::before {
opacity: .25; opacity: .25;
} }
#whitelist { textarea {
outline: medium solid transparent;
transition: .4s;
background-color: black; background-color: black;
margin-bottom: 10px; margin-bottom: 10px;
color: white; color: white;
border: thin solid white;
padding: .4em;
} }
#title { textarea:focus {
outline-color: var(--accent);
}
h1 {
font-weight: 300; font-weight: 300;
font-size: 50px; font-size: 3em;
margin: 0; margin: 0;
} }
#whitelistSave { h2 {
margin-bottom: .4em;
}
button {
transition: .2s;
border: 1px solid white; border: 1px solid white;
background-color: black; background-color: black;
color: white; color: white;
font-size: large; font-size: large;
padding: .2em;
}
button:hover {
background-color: white;
color: black;
} }
h2 { h2 {
font-weight: 300; font-weight: 300;
margin-top: 0; margin-top: 0;
}
footer {
margin-top: 1em;
}
#version {
opacity: .6;
} }

33
menu/main.js Normal file
View file

@ -0,0 +1,33 @@
let enabled = true;
const toggleButton = document.getElementById("toggle");
updateButtonText();
function updateButtonText() {
toggleButton.textContent = enabled ? "disable" : "enable";
}
document.getElementById('whitelistSave').addEventListener('click', () => {
const whitelist = document.getElementById('whitelist').value.split('\n').map(line => line.trim()).filter(line => line);
browser.storage.local.set({ whitelist: whitelist });
});
browser.storage.local.get("enabled").then((result) => {
enabled = result.enabled ?? true;
updateButtonText();
}).catch((error) => {
console.error("Error retrieving enabled state:", error);
});
browser.storage.local.get("whitelist").then((result) => {
const whitelist = result.whitelist || [];
document.getElementById('whitelist').value = whitelist.join('\n');
}).catch((error) => {
console.error("Error retrieving the whitelist:", error);
});
toggleButton.addEventListener('click', () => {
enabled = !enabled;
updateButtonText();
browser.storage.local.set({enabled: enabled});
})