release: v3.0 (v3.0.1 on Firefox)
This commit is contained in:
commit
f15173c122
16 changed files with 440 additions and 0 deletions
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
/local/
|
19
background.js
Normal file
19
background.js
Normal file
|
@ -0,0 +1,19 @@
|
|||
"use strict";
|
||||
|
||||
if (typeof hasPermissions == 'undefined')
|
||||
self.importScripts("permissions.js");
|
||||
|
||||
if (chrome)
|
||||
var browser = chrome;
|
||||
if (!browser)
|
||||
throw Error("wtf");
|
||||
|
||||
function checkPermissions() {
|
||||
hasPermissions(browser).then((hasPerm) => {
|
||||
if (!hasPerm)
|
||||
browser.tabs.create({url: "/missing_permissions/index.html", active: true});
|
||||
});
|
||||
}
|
||||
|
||||
checkPermissions();
|
||||
browser.permissions.onRemoved.addListener(checkPermissions);
|
130
content.js
Normal file
130
content.js
Normal file
|
@ -0,0 +1,130 @@
|
|||
"use strict";
|
||||
|
||||
if (chrome)
|
||||
window.browser = chrome;
|
||||
if (!browser)
|
||||
throw Error("wtf");
|
||||
|
||||
// REMOVE THE BUTTON IF IT ALREADY EXISTS
|
||||
{
|
||||
let buttonEl = document.getElementById("fdtransparentbutton");
|
||||
if(buttonEl)
|
||||
buttonEl.parentNode.removeChild(buttonEl);
|
||||
}
|
||||
|
||||
if([...document.getElementsByClassName("principal")].length > 0) {
|
||||
class FDTransparent {
|
||||
static createButton() {
|
||||
// STYLESHEET
|
||||
var styleText = `
|
||||
img#fdtransparentbutton {
|
||||
position: fixed;
|
||||
bottom: 20px;
|
||||
left: 20px;
|
||||
z-index: 9;
|
||||
width: 48px;
|
||||
height: 48px;
|
||||
|
||||
border-radius: 50%;
|
||||
filter: drop-shadow(0 0 6px rgba(0, 0, 0, 0.22));
|
||||
|
||||
background: #fff;
|
||||
|
||||
transition: background 0.5s;
|
||||
}
|
||||
|
||||
img#fdtransparentbutton.on {
|
||||
background: none;
|
||||
}
|
||||
|
||||
@media screen and (min-width: 1201px) {
|
||||
img#fdtransparentbutton {
|
||||
left: 325px;
|
||||
}
|
||||
}
|
||||
|
||||
.principal.post
|
||||
{
|
||||
box-shadow: none !important;
|
||||
}
|
||||
|
||||
.principal {
|
||||
transition: background-color 0.5s, box-shadow 0.5s;
|
||||
box-shadow: none !important;
|
||||
filter: drop-shadow(0 0 6px rgba(0, 0, 0, 0.22));
|
||||
}
|
||||
|
||||
.principal.transparent {
|
||||
background-color: #0000;
|
||||
}
|
||||
`;
|
||||
var styleEl = document.createElement("style");
|
||||
if (styleEl.styleSheet) {
|
||||
styleEl.styleSheet.cssText = styleText;
|
||||
} else {
|
||||
styleEl.appendChild(document.createTextNode(styleText));
|
||||
}
|
||||
document.head.appendChild(styleEl);
|
||||
// CREATE BUTTON
|
||||
FDTransparent.button = document.createElement('img');
|
||||
FDTransparent.button.id = "fdtransparentbutton";
|
||||
FDTransparent.button.src = browser.runtime.getURL('icon96.png');
|
||||
// button click
|
||||
FDTransparent.button.addEventListener("click", () => {
|
||||
FDTransparent.isOn = !FDTransparent.isOn;
|
||||
FDTransparent.setTransparent(FDTransparent.isOn);
|
||||
});
|
||||
// append button
|
||||
document.body.appendChild(FDTransparent.button);
|
||||
// SYNC TRANSPARENCY FROM STORAGE
|
||||
FDTransparent.isTransparent()
|
||||
.then((v) =>
|
||||
{
|
||||
FDTransparent.isOn = v;
|
||||
FDTransparent.setTransparent(FDTransparent.isOn);
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
static changeButtonDisplay(value) {
|
||||
if(value)
|
||||
FDTransparent.button.className = "on";
|
||||
else
|
||||
FDTransparent.button.className = "";
|
||||
}
|
||||
|
||||
static isOn = false;
|
||||
|
||||
static isTransparent() {
|
||||
return new Promise((resolve, reject) => {
|
||||
browser.storage.local.get("transparent")
|
||||
.then((v) => {
|
||||
resolve(Boolean(v.transparent));
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
static setTransparent(value) {
|
||||
// CHANGE SAVED VALUE
|
||||
browser.storage.local.set({"transparent": value });
|
||||
|
||||
// CHANGE TRANSPARENCY
|
||||
[...document.getElementsByClassName("principal")].forEach((el) => {
|
||||
if (value)
|
||||
el.classList.add("transparent");
|
||||
else
|
||||
el.classList.remove("transparent");
|
||||
});
|
||||
|
||||
// CHANGE BUTTON
|
||||
FDTransparent.changeButtonDisplay(value);
|
||||
}
|
||||
}
|
||||
|
||||
FDTransparent.createButton();
|
||||
|
||||
console.info('Extension FDTransparent chargée !');
|
||||
}
|
||||
else {
|
||||
console.info('L\'extension FDTransparent est inutile sur cette page.');
|
||||
}
|
BIN
icon48.png
Normal file
BIN
icon48.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.6 KiB |
BIN
icon96.png
Normal file
BIN
icon96.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 5.7 KiB |
32
manifest.chrome.json
Normal file
32
manifest.chrome.json
Normal file
|
@ -0,0 +1,32 @@
|
|||
{
|
||||
"manifest_version": 3,
|
||||
"name": "FD transparent",
|
||||
"version": "3.0",
|
||||
|
||||
"description": "Ajoute un bouton pour activer et désactiver la transparence des images sur le Forum Dessiné (https://forum-dessine.fr).",
|
||||
|
||||
"icons": {
|
||||
"48": "icon48.png",
|
||||
"96": "icon96.png"
|
||||
},
|
||||
|
||||
"content_scripts": [
|
||||
{
|
||||
"matches": ["*://*.forum-dessine.fr/*"],
|
||||
"js": ["content.js"]
|
||||
}
|
||||
],
|
||||
|
||||
"background": {
|
||||
"service_worker": "background.js"
|
||||
},
|
||||
|
||||
"permissions": [
|
||||
"storage"
|
||||
],
|
||||
|
||||
"web_accessible_resources": [{
|
||||
"resources": ["*"],
|
||||
"matches": ["*://*.forum-dessine.fr/*"]
|
||||
}]
|
||||
}
|
34
manifest.firefox.json
Normal file
34
manifest.firefox.json
Normal file
|
@ -0,0 +1,34 @@
|
|||
{
|
||||
"manifest_version": 2,
|
||||
"name": "FD transparent",
|
||||
"version": "3.0.1",
|
||||
|
||||
"description": "Ajoute un bouton pour activer et désactiver la transparence des images sur le Forum Dessiné (https://forum-dessine.fr).",
|
||||
|
||||
"icons": {
|
||||
"48": "icon48.png",
|
||||
"96": "icon96.png"
|
||||
},
|
||||
|
||||
"content_scripts": [
|
||||
{
|
||||
"matches": ["*://*.forum-dessine.fr/*"],
|
||||
"js": ["content.js"]
|
||||
}
|
||||
],
|
||||
|
||||
"background": {
|
||||
"scripts": ["permissions.js", "background.js"]
|
||||
},
|
||||
|
||||
"permissions": [
|
||||
"storage",
|
||||
"*://*.forum-dessine.fr/*"
|
||||
],
|
||||
|
||||
"browser_specific_settings": {
|
||||
"gecko": {
|
||||
"id": "{9bf41bb9-68ed-49b8-9866-5caf0725e153}"
|
||||
}
|
||||
}
|
||||
}
|
37
manifest.firefox.v3.json
Normal file
37
manifest.firefox.v3.json
Normal file
|
@ -0,0 +1,37 @@
|
|||
{
|
||||
"manifest_version": 3,
|
||||
"name": "FD transparent",
|
||||
"version": "3.0",
|
||||
|
||||
"description": "Ajoute un bouton pour activer et désactiver la transparence des images sur le Forum Dessiné (https://forum-dessine.fr).",
|
||||
|
||||
"icons": {
|
||||
"48": "icon48.png",
|
||||
"96": "icon96.png"
|
||||
},
|
||||
|
||||
"content_scripts": [
|
||||
{
|
||||
"matches": ["*://*.forum-dessine.fr/*"],
|
||||
"js": ["content.js"]
|
||||
}
|
||||
],
|
||||
|
||||
"background": {
|
||||
"scripts": ["permissions.js", "background.js"]
|
||||
},
|
||||
|
||||
"permissions": [
|
||||
"storage"
|
||||
],
|
||||
|
||||
"web_accessible_resources": [{
|
||||
"resources": ["*"],
|
||||
"matches": ["*://*.forum-dessine.fr/*"]
|
||||
}],
|
||||
"browser_specific_settings": {
|
||||
"gecko": {
|
||||
"id": "{9bf41bb9-68ed-49b8-9866-5caf0725e153}"
|
||||
}
|
||||
}
|
||||
}
|
34
manifest.json
Normal file
34
manifest.json
Normal file
|
@ -0,0 +1,34 @@
|
|||
{
|
||||
"manifest_version": 2,
|
||||
"name": "FD transparent",
|
||||
"version": "3.0.1",
|
||||
|
||||
"description": "Ajoute un bouton pour activer et désactiver la transparence des images sur le Forum Dessiné (https://forum-dessine.fr).",
|
||||
|
||||
"icons": {
|
||||
"48": "icon48.png",
|
||||
"96": "icon96.png"
|
||||
},
|
||||
|
||||
"content_scripts": [
|
||||
{
|
||||
"matches": ["*://*.forum-dessine.fr/*"],
|
||||
"js": ["content.js"]
|
||||
}
|
||||
],
|
||||
|
||||
"background": {
|
||||
"scripts": ["permissions.js", "background.js"]
|
||||
},
|
||||
|
||||
"permissions": [
|
||||
"storage",
|
||||
"*://*.forum-dessine.fr/*"
|
||||
],
|
||||
|
||||
"browser_specific_settings": {
|
||||
"gecko": {
|
||||
"id": "{9bf41bb9-68ed-49b8-9866-5caf0725e153}"
|
||||
}
|
||||
}
|
||||
}
|
57
missing_permissions/index.html
Normal file
57
missing_permissions/index.html
Normal file
|
@ -0,0 +1,57 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<title>FD Transparent - Permissions Manquantes</title>
|
||||
<style>
|
||||
body {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
p, button {
|
||||
font-family: "comic sans ms";
|
||||
font-weight: bold;
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
button {
|
||||
border-radius: 6px;
|
||||
border-width: 2px;
|
||||
padding: 6px;
|
||||
}
|
||||
|
||||
body > div {
|
||||
padding: 0 10px; /* ugly padding */
|
||||
border: solid 2px black; /* ugly borders */
|
||||
border-radius: 6px;
|
||||
}
|
||||
|
||||
p > img {
|
||||
display: inline-block;
|
||||
height: 1.5em;
|
||||
vertical-align: bottom;
|
||||
}
|
||||
|
||||
#boutonbox {
|
||||
display: none;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div>
|
||||
<p id="msg">
|
||||
...
|
||||
</p>
|
||||
<p id="boutonbox">
|
||||
<button id="bouton" style="display: inline-block; text-align: right;">
|
||||
Accorder la permission
|
||||
</button>
|
||||
<- bouton moche
|
||||
</p>
|
||||
</div>
|
||||
<script type="text/javascript" src="/permissions.js"></script>
|
||||
<script type="text/javascript" src="script.js"></script>
|
||||
</body>
|
||||
</html>
|
31
missing_permissions/script.js
Normal file
31
missing_permissions/script.js
Normal file
|
@ -0,0 +1,31 @@
|
|||
{
|
||||
function hideBouton() {
|
||||
document.getElementById('boutonbox').style.display = "none";
|
||||
}
|
||||
|
||||
function showBouton() {
|
||||
document.getElementById('boutonbox').style.display = "block";
|
||||
}
|
||||
|
||||
document.getElementById('bouton').addEventListener("click", () => {
|
||||
askPermissions(browser).then((hello) => {
|
||||
updateMsg();
|
||||
});
|
||||
});
|
||||
|
||||
function updateMsg() {
|
||||
hasPermissions(browser).then((hasPerm) => {
|
||||
let txt;
|
||||
if (hasPerm) {
|
||||
hideBouton();
|
||||
txt = "permission accordée ! <img src='zy_lezgo.png' />";
|
||||
}
|
||||
else {
|
||||
showBouton();
|
||||
txt = "<img src='zy_awaiting.png' /> pour que FD Transparent puisse fonctionner, il faut que vous permettiez à l'extension l'accès aux pages du Forum Dessiné en appuyant sur le bouton moche";
|
||||
}
|
||||
document.getElementById("msg").innerHTML = txt;
|
||||
});
|
||||
}
|
||||
updateMsg();
|
||||
}
|
BIN
missing_permissions/zy_awaiting.png
Normal file
BIN
missing_permissions/zy_awaiting.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 7.3 KiB |
BIN
missing_permissions/zy_lezgo.png
Normal file
BIN
missing_permissions/zy_lezgo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 7.9 KiB |
47
package-lock.json
generated
Normal file
47
package-lock.json
generated
Normal file
|
@ -0,0 +1,47 @@
|
|||
{
|
||||
"name": "fd_transparent",
|
||||
"lockfileVersion": 2,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"dependencies": {
|
||||
"node": "^22.1.0"
|
||||
}
|
||||
},
|
||||
"node_modules/node": {
|
||||
"version": "22.1.0",
|
||||
"resolved": "https://registry.npmjs.org/node/-/node-22.1.0.tgz",
|
||||
"integrity": "sha512-eeRKoLhxcx3DEzsdU1XxbJlDfVX2rvobe24YT9+jzXa5heKMCadyWjYwAEgevi1+r4WU/weKr5DUoNJbI5OKmw==",
|
||||
"hasInstallScript": true,
|
||||
"dependencies": {
|
||||
"node-bin-setup": "^1.0.0"
|
||||
},
|
||||
"bin": {
|
||||
"node": "bin/node"
|
||||
},
|
||||
"engines": {
|
||||
"npm": ">=5.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/node-bin-setup": {
|
||||
"version": "1.1.3",
|
||||
"resolved": "https://registry.npmjs.org/node-bin-setup/-/node-bin-setup-1.1.3.tgz",
|
||||
"integrity": "sha512-opgw9iSCAzT2+6wJOETCpeRYAQxSopqQ2z+N6BXwIMsQQ7Zj5M8MaafQY8JMlolRR6R1UXg2WmhKp0p9lSOivg=="
|
||||
}
|
||||
},
|
||||
"dependencies": {
|
||||
"node": {
|
||||
"version": "22.1.0",
|
||||
"resolved": "https://registry.npmjs.org/node/-/node-22.1.0.tgz",
|
||||
"integrity": "sha512-eeRKoLhxcx3DEzsdU1XxbJlDfVX2rvobe24YT9+jzXa5heKMCadyWjYwAEgevi1+r4WU/weKr5DUoNJbI5OKmw==",
|
||||
"requires": {
|
||||
"node-bin-setup": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"node-bin-setup": {
|
||||
"version": "1.1.3",
|
||||
"resolved": "https://registry.npmjs.org/node-bin-setup/-/node-bin-setup-1.1.3.tgz",
|
||||
"integrity": "sha512-opgw9iSCAzT2+6wJOETCpeRYAQxSopqQ2z+N6BXwIMsQQ7Zj5M8MaafQY8JMlolRR6R1UXg2WmhKp0p9lSOivg=="
|
||||
}
|
||||
}
|
||||
}
|
5
package.json
Normal file
5
package.json
Normal file
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"dependencies": {
|
||||
"node": "^22.1.0"
|
||||
}
|
||||
}
|
13
permissions.js
Normal file
13
permissions.js
Normal file
|
@ -0,0 +1,13 @@
|
|||
"use strict";
|
||||
|
||||
const REQUIRED_PERMISSIONS = {origins: ["*://*.forum-dessine.fr/*"]};
|
||||
|
||||
function hasPermissions(browser) {
|
||||
return new Promise((success) => {
|
||||
browser.permissions.contains(REQUIRED_PERMISSIONS, success);
|
||||
});
|
||||
}
|
||||
|
||||
function askPermissions(browser) {
|
||||
return browser.permissions.request(REQUIRED_PERMISSIONS);
|
||||
}
|
Loading…
Add table
Reference in a new issue