Compare commits
17 Commits
Author | SHA1 | Date |
---|---|---|
kkapsner | 4f366ed86c | |
kkapsner | 00e60074c3 | |
kkapsner | 3eedc7b7dc | |
kkapsner | bebcec2139 | |
kkapsner | 5181a55071 | |
kkapsner | a8e192fa9b | |
kkapsner | 0f3141ee12 | |
kkapsner | e9ce4668fe | |
kkapsner | acce01bfeb | |
kkapsner | d159769997 | |
kkapsner | 56401048d1 | |
kkapsner | 54c625cd26 | |
kkapsner | 7bb3f00b45 | |
kkapsner | b8c6115603 | |
kkapsner | dacc578e12 | |
kkapsner | 825fa42141 | |
kkapsner | 40a8012ab0 |
|
@ -46,7 +46,11 @@ async function getAlphaVersion(manifest){
|
|||
}
|
||||
const now = new Date();
|
||||
const date = `${now.getFullYear()}${f(now.getMonth() + 1)}${f(now.getDate())}`;
|
||||
const baseVersion = `${manifest.version}.${date}`;
|
||||
const versionParts = manifest.version.split(".");
|
||||
while (versionParts.length > 2){
|
||||
versionParts.pop();
|
||||
}
|
||||
const baseVersion = `${versionParts.join(".")}.${date}`;
|
||||
if (!fs.existsSync(path.join(versionsPath, getXPIFileName("canvasblocker_beta", baseVersion)))){
|
||||
return baseVersion;
|
||||
}
|
||||
|
|
|
@ -103,6 +103,10 @@
|
|||
"message": "Otevřít v samostatném panelu",
|
||||
"description": ""
|
||||
},
|
||||
"labelForDefaultOption": {
|
||||
"message": " (default)",
|
||||
"description": ""
|
||||
},
|
||||
"group_general": {
|
||||
"message": "Obecné",
|
||||
"description": ""
|
||||
|
@ -1556,7 +1560,7 @@
|
|||
"description": ""
|
||||
},
|
||||
"sanitation_resolution.switchToNonPersistentRng": {
|
||||
"message": "switch to \"non persistent\" rng",
|
||||
"message": "switch to \"nonpersistent\" rng",
|
||||
"description": ""
|
||||
},
|
||||
"sanitation_error.fakeEverythingInCanvas": {
|
||||
|
|
|
@ -103,6 +103,10 @@
|
|||
"message": "In separatem Tab öffnen",
|
||||
"description": ""
|
||||
},
|
||||
"labelForDefaultOption": {
|
||||
"message": " (Standard)",
|
||||
"description": ""
|
||||
},
|
||||
"group_general": {
|
||||
"message": "Allgemein",
|
||||
"description": ""
|
||||
|
@ -504,7 +508,7 @@
|
|||
"description": ""
|
||||
},
|
||||
"rng_description": {
|
||||
"message": "nichts (komplett weiß): es wird immer ein weißes Bild zurückgegeben. Hierbei sollte die Option \"Alpha-Kanal auch vortäuschen\" aktiviert werden. ACHTUNG: Nicht im Modus \"Bei Ausgabe vortäuschen\" verwenden.\n\nnicht persistent: die Zufallszahlen werden bei jeder Vortäuschaktion neu bestimmt. Beachten Sie, dass für viele APIs ein Zwischenspeicher verwendet wird, um eine Detektion zu verhindern.\n\nkonstant: Variante von nicht persistent. Wenn die Daten eines Canvas verändert werden, haben gleichfarbige Pixel danach auch die gleiche Farbe.\n\npersistent: für jede Domain werden die Zufallszahlen nur einmal bestimmt.",
|
||||
"message": "nichts (komplett weiß): es wird immer ein weißes Bild zurückgegeben. Hierbei sollte die Option \"Alpha-Kanal auch vortäuschen\" aktiviert werden. ACHTUNG: Nicht im Modus \"Bei Ausgabe vortäuschen\" verwenden.\n\nnichtpersistent: die Zufallszahlen werden bei jeder Vortäuschaktion neu bestimmt. Beachten Sie, dass für viele APIs ein Zwischenspeicher verwendet wird, um eine Detektion zu verhindern.\n\nkonstant: Variante von nichtpersistent. Wenn die Daten eines Canvas verändert werden, haben gleichfarbige Pixel danach auch die gleiche Farbe.\n\npersistent: für jede Domain werden die Zufallszahlen nur einmal bestimmt.",
|
||||
"description": ""
|
||||
},
|
||||
"rng_options.persistent": {
|
||||
|
@ -516,7 +520,7 @@
|
|||
"description": ""
|
||||
},
|
||||
"rng_options.nonPersistent": {
|
||||
"message": "nicht persistent",
|
||||
"message": "nichtpersistent",
|
||||
"description": ""
|
||||
},
|
||||
"rng_options.white": {
|
||||
|
@ -1556,7 +1560,7 @@
|
|||
"description": ""
|
||||
},
|
||||
"sanitation_resolution.switchToNonPersistentRng": {
|
||||
"message": "wechsle zu \"nicht persistent\"",
|
||||
"message": "wechsle zu \"nichtpersistent\"",
|
||||
"description": ""
|
||||
},
|
||||
"sanitation_error.fakeEverythingInCanvas": {
|
||||
|
|
|
@ -109,6 +109,11 @@
|
|||
"description": ""
|
||||
},
|
||||
|
||||
"labelForDefaultOption": {
|
||||
"message": " (default)",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"group_general": {
|
||||
"message": "General",
|
||||
"description": ""
|
||||
|
@ -495,7 +500,7 @@
|
|||
},
|
||||
|
||||
"urlSettings_title": {
|
||||
"message": "Site specific values",
|
||||
"message": "Site-specific values",
|
||||
"description": ""
|
||||
},
|
||||
"urlSettings_description": {
|
||||
|
@ -527,7 +532,7 @@
|
|||
},
|
||||
|
||||
"rng_description": {
|
||||
"message": "none (completely white): a completely white image is returned. The option \"Fake the alpha channel\" should be activated with this. CAUTION: Do not use this with the \"fake at input\" mode.\n\nnon persistent: the random numbers will be determined freshly for each faking action. Keep in mind that many API protections have caches in place to prevent detection.\n\nconstant: variation of non persistent. But when altering canvas data same colored pixels also share the same color afterwards.\n\npersistent: the random number will only be determined once for every domain.",
|
||||
"message": "none (completely white): a completely white image is returned. The option \"Fake the alpha channel\" should be activated with this. CAUTION: Do not use this with the \"fake at input\" mode.\n\nnonpersistent: the random numbers will be determined freshly for each faking action. Keep in mind that many API protections have caches in place to prevent detection.\n\nconstant: variation of nonpersistent. But when altering canvas data same colored pixels also share the same color afterwards.\n\npersistent: the random number will only be determined once for every domain.",
|
||||
"description": ""
|
||||
},
|
||||
"rng_options.persistent": {
|
||||
|
@ -539,7 +544,7 @@
|
|||
"description": ""
|
||||
},
|
||||
"rng_options.nonPersistent": {
|
||||
"message": "non persistent",
|
||||
"message": "nonpersistent",
|
||||
"description": ""
|
||||
},
|
||||
"rng_options.white": {
|
||||
|
@ -1621,7 +1626,7 @@
|
|||
"description": ""
|
||||
},
|
||||
"sanitation_resolution.switchToNonPersistentRng": {
|
||||
"message": "switch to \"non persistent\" rng",
|
||||
"message": "switch to \"nonpersistent\" rng",
|
||||
"description": ""
|
||||
},
|
||||
"sanitation_error.fakeEverythingInCanvas": {
|
||||
|
|
|
@ -103,6 +103,10 @@
|
|||
"message": "Abrir en una pestaña separada",
|
||||
"description": ""
|
||||
},
|
||||
"labelForDefaultOption": {
|
||||
"message": " (default)",
|
||||
"description": ""
|
||||
},
|
||||
"group_general": {
|
||||
"message": "General",
|
||||
"description": ""
|
||||
|
@ -504,7 +508,7 @@
|
|||
"description": ""
|
||||
},
|
||||
"rng_description": {
|
||||
"message": "none (completely white): a completely white image is returned. The option \"Fake the alpha channel\" should be activated with this. CAUTION: Do not use this with the \"fake at input\" mode.\n\nnon persistent: the random numbers will be determined freshly for each faking action. Keep in mind that many API protections have caches in place to prevent detection.\n\nconstant: variation of non persistent. But when altering canvas data same colored pixels also share the same color afterwards.\n\npersistent: the random number will only be determined once for every domain.",
|
||||
"message": "none (completely white): a completely white image is returned. The option \"Fake the alpha channel\" should be activated with this. CAUTION: Do not use this with the \"fake at input\" mode.\n\nnonpersistent: the random numbers will be determined freshly for each faking action. Keep in mind that many API protections have caches in place to prevent detection.\n\nconstant: variation of nonpersistent. But when altering canvas data same colored pixels also share the same color afterwards.\n\npersistent: the random number will only be determined once for every domain.",
|
||||
"description": ""
|
||||
},
|
||||
"rng_options.persistent": {
|
||||
|
|
|
@ -103,6 +103,10 @@
|
|||
"message": "Ouvrir dans un onglet séparé",
|
||||
"description": ""
|
||||
},
|
||||
"labelForDefaultOption": {
|
||||
"message": " (default)",
|
||||
"description": ""
|
||||
},
|
||||
"group_general": {
|
||||
"message": "Général",
|
||||
"description": ""
|
||||
|
@ -504,7 +508,7 @@
|
|||
"description": ""
|
||||
},
|
||||
"rng_description": {
|
||||
"message": "none (completely white): a completely white image is returned. The option \"Fake the alpha channel\" should be activated with this. CAUTION: Do not use this with the \"fake at input\" mode.\n\nnon persistent: the random numbers will be determined freshly for each faking action. Keep in mind that many API protections have caches in place to prevent detection.\n\nconstant: variation of non persistent. But when altering canvas data same colored pixels also share the same color afterwards.\n\npersistent: the random number will only be determined once for every domain.",
|
||||
"message": "none (completely white): a completely white image is returned. The option \"Fake the alpha channel\" should be activated with this. CAUTION: Do not use this with the \"fake at input\" mode.\n\nnonpersistent: the random numbers will be determined freshly for each faking action. Keep in mind that many API protections have caches in place to prevent detection.\n\nconstant: variation of nonpersistent. But when altering canvas data same colored pixels also share the same color afterwards.\n\npersistent: the random number will only be determined once for every domain.",
|
||||
"description": ""
|
||||
},
|
||||
"rng_options.persistent": {
|
||||
|
|
|
@ -103,6 +103,10 @@
|
|||
"message": "अलग टैब में खोलें",
|
||||
"description": ""
|
||||
},
|
||||
"labelForDefaultOption": {
|
||||
"message": " (default)",
|
||||
"description": ""
|
||||
},
|
||||
"group_general": {
|
||||
"message": "जनरल",
|
||||
"description": ""
|
||||
|
@ -476,7 +480,7 @@
|
|||
"description": ""
|
||||
},
|
||||
"urlSettings_title": {
|
||||
"message": "Site specific values",
|
||||
"message": "Site-specific values",
|
||||
"description": ""
|
||||
},
|
||||
"urlSettings_description": {
|
||||
|
@ -504,7 +508,7 @@
|
|||
"description": ""
|
||||
},
|
||||
"rng_description": {
|
||||
"message": "none (completely white): a completely white image is returned. The option \"Fake the alpha channel\" should be activated with this. CAUTION: Do not use this with the \"fake at input\" mode.\n\nnon persistent: the random numbers will be determined freshly for each faking action. Keep in mind that many API protections have caches in place to prevent detection.\n\nconstant: variation of non persistent. But when altering canvas data same colored pixels also share the same color afterwards.\n\npersistent: the random number will only be determined once for every domain.",
|
||||
"message": "none (completely white): a completely white image is returned. The option \"Fake the alpha channel\" should be activated with this. CAUTION: Do not use this with the \"fake at input\" mode.\n\nnonpersistent: the random numbers will be determined freshly for each faking action. Keep in mind that many API protections have caches in place to prevent detection.\n\nconstant: variation of nonpersistent. But when altering canvas data same colored pixels also share the same color afterwards.\n\npersistent: the random number will only be determined once for every domain.",
|
||||
"description": ""
|
||||
},
|
||||
"rng_options.persistent": {
|
||||
|
@ -516,7 +520,7 @@
|
|||
"description": ""
|
||||
},
|
||||
"rng_options.nonPersistent": {
|
||||
"message": "non persistent",
|
||||
"message": "nonpersistent",
|
||||
"description": ""
|
||||
},
|
||||
"rng_options.white": {
|
||||
|
@ -1556,7 +1560,7 @@
|
|||
"description": ""
|
||||
},
|
||||
"sanitation_resolution.switchToNonPersistentRng": {
|
||||
"message": "switch to \"non persistent\" rng",
|
||||
"message": "switch to \"nonpersistent\" rng",
|
||||
"description": ""
|
||||
},
|
||||
"sanitation_error.fakeEverythingInCanvas": {
|
||||
|
|
|
@ -103,6 +103,10 @@
|
|||
"message": "Apri in una nuova scheda",
|
||||
"description": ""
|
||||
},
|
||||
"labelForDefaultOption": {
|
||||
"message": " (default)",
|
||||
"description": ""
|
||||
},
|
||||
"group_general": {
|
||||
"message": "Generale",
|
||||
"description": ""
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -103,6 +103,10 @@
|
|||
"message": "별도의 탭에서 열기",
|
||||
"description": ""
|
||||
},
|
||||
"labelForDefaultOption": {
|
||||
"message": " (default)",
|
||||
"description": ""
|
||||
},
|
||||
"group_general": {
|
||||
"message": "일반 설정",
|
||||
"description": ""
|
||||
|
@ -476,7 +480,7 @@
|
|||
"description": ""
|
||||
},
|
||||
"urlSettings_title": {
|
||||
"message": "Site specific values",
|
||||
"message": "Site-specific values",
|
||||
"description": ""
|
||||
},
|
||||
"urlSettings_description": {
|
||||
|
@ -504,7 +508,7 @@
|
|||
"description": ""
|
||||
},
|
||||
"rng_description": {
|
||||
"message": "none (completely white): a completely white image is returned. The option \"Fake the alpha channel\" should be activated with this. CAUTION: Do not use this with the \"fake at input\" mode.\n\nnon persistent: the random numbers will be determined freshly for each faking action. Keep in mind that many API protections have caches in place to prevent detection.\n\nconstant: variation of non persistent. But when altering canvas data same colored pixels also share the same color afterwards.\n\npersistent: the random number will only be determined once for every domain.",
|
||||
"message": "none (completely white): a completely white image is returned. The option \"Fake the alpha channel\" should be activated with this. CAUTION: Do not use this with the \"fake at input\" mode.\n\nnonpersistent: the random numbers will be determined freshly for each faking action. Keep in mind that many API protections have caches in place to prevent detection.\n\nconstant: variation of nonpersistent. But when altering canvas data same colored pixels also share the same color afterwards.\n\npersistent: the random number will only be determined once for every domain.",
|
||||
"description": ""
|
||||
},
|
||||
"rng_options.persistent": {
|
||||
|
@ -516,7 +520,7 @@
|
|||
"description": ""
|
||||
},
|
||||
"rng_options.nonPersistent": {
|
||||
"message": "non persistent",
|
||||
"message": "nonpersistent",
|
||||
"description": ""
|
||||
},
|
||||
"rng_options.white": {
|
||||
|
@ -1556,7 +1560,7 @@
|
|||
"description": ""
|
||||
},
|
||||
"sanitation_resolution.switchToNonPersistentRng": {
|
||||
"message": "switch to \"non persistent\" rng",
|
||||
"message": "switch to \"nonpersistent\" rng",
|
||||
"description": ""
|
||||
},
|
||||
"sanitation_error.fakeEverythingInCanvas": {
|
||||
|
|
|
@ -103,6 +103,10 @@
|
|||
"message": "Open in separate tab",
|
||||
"description": ""
|
||||
},
|
||||
"labelForDefaultOption": {
|
||||
"message": " (default)",
|
||||
"description": ""
|
||||
},
|
||||
"group_general": {
|
||||
"message": "General",
|
||||
"description": ""
|
||||
|
@ -476,7 +480,7 @@
|
|||
"description": ""
|
||||
},
|
||||
"urlSettings_title": {
|
||||
"message": "Site specific values",
|
||||
"message": "Site-specific values",
|
||||
"description": ""
|
||||
},
|
||||
"urlSettings_description": {
|
||||
|
@ -504,7 +508,7 @@
|
|||
"description": ""
|
||||
},
|
||||
"rng_description": {
|
||||
"message": "none (completely white): a completely white image is returned. The option \"Fake the alpha channel\" should be activated with this. CAUTION: Do not use this with the \"fake at input\" mode.\n\nnon persistent: the random numbers will be determined freshly for each faking action. Keep in mind that many API protections have caches in place to prevent detection.\n\nconstant: variation of non persistent. But when altering canvas data same colored pixels also share the same color afterwards.\n\npersistent: the random number will only be determined once for every domain.",
|
||||
"message": "none (completely white): a completely white image is returned. The option \"Fake the alpha channel\" should be activated with this. CAUTION: Do not use this with the \"fake at input\" mode.\n\nnonpersistent: the random numbers will be determined freshly for each faking action. Keep in mind that many API protections have caches in place to prevent detection.\n\nconstant: variation of nonpersistent. But when altering canvas data same colored pixels also share the same color afterwards.\n\npersistent: the random number will only be determined once for every domain.",
|
||||
"description": ""
|
||||
},
|
||||
"rng_options.persistent": {
|
||||
|
@ -516,7 +520,7 @@
|
|||
"description": ""
|
||||
},
|
||||
"rng_options.nonPersistent": {
|
||||
"message": "non persistent",
|
||||
"message": "nonpersistent",
|
||||
"description": ""
|
||||
},
|
||||
"rng_options.white": {
|
||||
|
@ -1556,7 +1560,7 @@
|
|||
"description": ""
|
||||
},
|
||||
"sanitation_resolution.switchToNonPersistentRng": {
|
||||
"message": "switch to \"non persistent\" rng",
|
||||
"message": "switch to \"nonpersistent\" rng",
|
||||
"description": ""
|
||||
},
|
||||
"sanitation_error.fakeEverythingInCanvas": {
|
||||
|
|
|
@ -103,6 +103,10 @@
|
|||
"message": "Åpne i egen fane",
|
||||
"description": ""
|
||||
},
|
||||
"labelForDefaultOption": {
|
||||
"message": " (default)",
|
||||
"description": ""
|
||||
},
|
||||
"group_general": {
|
||||
"message": "Generelt",
|
||||
"description": ""
|
||||
|
@ -476,7 +480,7 @@
|
|||
"description": ""
|
||||
},
|
||||
"urlSettings_title": {
|
||||
"message": "Site specific values",
|
||||
"message": "Site-specific values",
|
||||
"description": ""
|
||||
},
|
||||
"urlSettings_description": {
|
||||
|
@ -504,7 +508,7 @@
|
|||
"description": ""
|
||||
},
|
||||
"rng_description": {
|
||||
"message": "none (completely white): a completely white image is returned. The option \"Fake the alpha channel\" should be activated with this. CAUTION: Do not use this with the \"fake at input\" mode.\n\nnon persistent: the random numbers will be determined freshly for each faking action. Keep in mind that many API protections have caches in place to prevent detection.\n\nconstant: variation of non persistent. But when altering canvas data same colored pixels also share the same color afterwards.\n\npersistent: the random number will only be determined once for every domain.",
|
||||
"message": "none (completely white): a completely white image is returned. The option \"Fake the alpha channel\" should be activated with this. CAUTION: Do not use this with the \"fake at input\" mode.\n\nnonpersistent: the random numbers will be determined freshly for each faking action. Keep in mind that many API protections have caches in place to prevent detection.\n\nconstant: variation of nonpersistent. But when altering canvas data same colored pixels also share the same color afterwards.\n\npersistent: the random number will only be determined once for every domain.",
|
||||
"description": ""
|
||||
},
|
||||
"rng_options.persistent": {
|
||||
|
@ -516,7 +520,7 @@
|
|||
"description": ""
|
||||
},
|
||||
"rng_options.nonPersistent": {
|
||||
"message": "non persistent",
|
||||
"message": "nonpersistent",
|
||||
"description": ""
|
||||
},
|
||||
"rng_options.white": {
|
||||
|
@ -1556,7 +1560,7 @@
|
|||
"description": ""
|
||||
},
|
||||
"sanitation_resolution.switchToNonPersistentRng": {
|
||||
"message": "switch to \"non persistent\" rng",
|
||||
"message": "switch to \"nonpersistent\" rng",
|
||||
"description": ""
|
||||
},
|
||||
"sanitation_error.fakeEverythingInCanvas": {
|
||||
|
|
|
@ -103,6 +103,10 @@
|
|||
"message": "Otwórz w nowej karcie",
|
||||
"description": ""
|
||||
},
|
||||
"labelForDefaultOption": {
|
||||
"message": " (default)",
|
||||
"description": ""
|
||||
},
|
||||
"group_general": {
|
||||
"message": "Ogólne",
|
||||
"description": ""
|
||||
|
@ -504,7 +508,7 @@
|
|||
"description": ""
|
||||
},
|
||||
"rng_description": {
|
||||
"message": "none (completely white): a completely white image is returned. The option \"Fake the alpha channel\" should be activated with this. CAUTION: Do not use this with the \"fake at input\" mode.\n\nnon persistent: the random numbers will be determined freshly for each faking action. Keep in mind that many API protections have caches in place to prevent detection.\n\nconstant: variation of non persistent. But when altering canvas data same colored pixels also share the same color afterwards.\n\npersistent: the random number will only be determined once for every domain.",
|
||||
"message": "none (completely white): a completely white image is returned. The option \"Fake the alpha channel\" should be activated with this. CAUTION: Do not use this with the \"fake at input\" mode.\n\nnonpersistent: the random numbers will be determined freshly for each faking action. Keep in mind that many API protections have caches in place to prevent detection.\n\nconstant: variation of nonpersistent. But when altering canvas data same colored pixels also share the same color afterwards.\n\npersistent: the random number will only be determined once for every domain.",
|
||||
"description": ""
|
||||
},
|
||||
"rng_options.persistent": {
|
||||
|
@ -1556,7 +1560,7 @@
|
|||
"description": ""
|
||||
},
|
||||
"sanitation_resolution.switchToNonPersistentRng": {
|
||||
"message": "switch to \"non persistent\" rng",
|
||||
"message": "switch to \"nonpersistent\" rng",
|
||||
"description": ""
|
||||
},
|
||||
"sanitation_error.fakeEverythingInCanvas": {
|
||||
|
|
|
@ -76,15 +76,15 @@
|
|||
"description": ""
|
||||
},
|
||||
"optionsIntroduction": {
|
||||
"message": "Nesta página você pode ajustar as configurações do CanvasBlocker.",
|
||||
"message": "Nesta página pode ajustar as configurações do CanvasBlocker.",
|
||||
"description": ""
|
||||
},
|
||||
"installNotice": {
|
||||
"message": "CanvasBlocker foi instalado. Se quiser aceder esta página futuramente, por favor, adicione-a aos marcadores.",
|
||||
"message": "CanvasBlocker foi instalado. Se quiser aceder esta página no futuro, por favor, adicione-a aos marcadores.",
|
||||
"description": ""
|
||||
},
|
||||
"updateNotice": {
|
||||
"message": "CanvasBlocker foi atualizado. Se quiser ser aceder esta página futuramente e ainda não a adicionou aos marcadores, por favor adicione-a.",
|
||||
"message": "CanvasBlocker foi atualizado. Se quiser aceder a esta página no futuro e ainda não a adicionou aos marcadores, por favor adicione-a.",
|
||||
"description": ""
|
||||
},
|
||||
"dontShowOptionsOnUpdate": {
|
||||
|
@ -100,7 +100,11 @@
|
|||
"description": ""
|
||||
},
|
||||
"openInTab": {
|
||||
"message": "Abrir num noutro separador",
|
||||
"message": "Abrir noutro separador",
|
||||
"description": ""
|
||||
},
|
||||
"labelForDefaultOption": {
|
||||
"message": " (padrão)",
|
||||
"description": ""
|
||||
},
|
||||
"group_general": {
|
||||
|
@ -312,11 +316,11 @@
|
|||
"description": ""
|
||||
},
|
||||
"askForSVGInputPermission": {
|
||||
"message": "Do you want to allow SVG API input?",
|
||||
"message": "Quer permitir a entrada da API de SVG?",
|
||||
"description": ""
|
||||
},
|
||||
"askForSVGReadoutPermission": {
|
||||
"message": "Do you want to allow SVG API readout?",
|
||||
"message": "Quer permitir a leitura da API de SVG?",
|
||||
"description": ""
|
||||
},
|
||||
"askForTextMetricsPermission": {
|
||||
|
@ -504,7 +508,7 @@
|
|||
"description": ""
|
||||
},
|
||||
"rng_description": {
|
||||
"message": "none (completely white): a completely white image is returned. The option \"Fake the alpha channel\" should be activated with this. CAUTION: Do not use this with the \"fake at input\" mode.\n\nnon persistent: the random numbers will be determined freshly for each faking action. Keep in mind that many API protections have caches in place to prevent detection.\n\nconstant: variation of non persistent. But when altering canvas data same colored pixels also share the same color afterwards.\n\npersistent: the random number will only be determined once for every domain.",
|
||||
"message": "nenhum (completamente branco): uma imagem completamente branca é devolvida. A opção “Falsifique o canal alfa” deve ser ativada com isso. CUIDADO: Não use isso com o modo \"falsificar na entrada\".\n\nnão persistente: os números aleatórios serão determinados no momento para cada ação de falsificação. Lembre-se de que muitas proteções de API possuem caches para evitar detecção.\n\nconstante: variação de não persistente. Mas ao alterar os dados do ecrã, os pixels da mesma cor também compartilham a mesma cor posteriormente.\n\npersistente: o número aleatório será determinado apenas uma vez para cada domínio.",
|
||||
"description": ""
|
||||
},
|
||||
"rng_options.persistent": {
|
||||
|
@ -640,7 +644,7 @@
|
|||
"description": ""
|
||||
},
|
||||
"webGLVendor_description": {
|
||||
"message": "Value to be reported in the webGL function \"getParameter\" for the \"vendor\". Special values:\nLeave empty to use the original value\n\n{undefined}: returns undefined (#508)\n\n{false}: returns the boolean value false (#508)\n\n{empty}: returns an empty string (#508)\n\n{disabled}: returns null (#508)\n\n{random vendor}: returns a random vendor from the built-in list (#493)\n\n{random renderer}: returns a random renderer from the built-in list (#493)\n\n<xxx|yyy|zzz>: picks one of the given options xxx, yyy or zzz at random (arbitrary number of options) (#493)",
|
||||
"message": "Valor a ser informado na função webGL \"getParameter\" para o \"fornecedor\". Valores especiais:\nDeixe em branco para usar o valor original\n\n{undefined}: devolve indefinido (#508)\n\n{false}: devolve o valor booleano falso (#508)\n\n{empty}: devolve uma string vazia (#508)\n\n{disabled}: devolve nulo (#508)\n\n{random vendor}: devolve um fornecedor aleatório da lista interna (#493)\n\n{random renderer}: devolve um renderizador aleatório da lista interna (#493)\n\n<xxx|yyy|zzz>: escolhe uma das opções fornecidas xxx, yyy ou zzz aleatoriamente (número arbitrário de opções) (#493)",
|
||||
"description": ""
|
||||
},
|
||||
"webGLRenderer_title": {
|
||||
|
@ -648,7 +652,7 @@
|
|||
"description": ""
|
||||
},
|
||||
"webGLRenderer_description": {
|
||||
"message": "Value to be reported in the webGL function \"getParameter\" for the \"renderer\". Special values:\nLeave empty to use the original value\n\n{undefined}: returns undefined (#508)\n\n{false}: returns the boolean value false (#508)\n\n{empty}: returns an empty string (#508)\n\n{disabled}: returns null (#508)\n\n{random vendor}: returns a random vendor from the built-in list (#493)\n\n{random renderer}: returns a random renderer from the built-in list (#493)\n\n<xxx|yyy|zzz>: picks one of the given options xxx, yyy or zzz at random (arbitrary number of options) (#493)",
|
||||
"message": "Valor a ser informado na função webGL \"getParameter\" para o \"renderer\". Valores especiais:\nDeixe em branco para usar o valor original\n\n{undefined}: devolve indefinido (#508)\n\n{false}: devolve o valor booleano falso (#508)\n\n{empty}: devolve uma string vazia (#508)\n\n{disabled}: devolve nulo (#508)\n\n{random vendor}: devolve um fornecedor aleatório da lista interna (#493)\n\n{random renderer}: devolve um renderizador aleatório da lista interna (#493)\n\n<xxx|yyy|zzz>: escolhe uma das opções fornecidas xxx, yyy ou zzz aleatoriamente (número arbitrário de opções) (#493)",
|
||||
"description": ""
|
||||
},
|
||||
"webGLUnmaskedVendor_title": {
|
||||
|
@ -656,7 +660,7 @@
|
|||
"description": ""
|
||||
},
|
||||
"webGLUnmaskedVendor_description": {
|
||||
"message": "Value to be reported in the webGL function \"getParameter\" for the \"unmasked vendor\". Special values:\nLeave empty to use the original value\n\n{undefined}: returns undefined (#508)\n\n{false}: returns the boolean value false (#508)\n\n{empty}: returns an empty string (#508)\n\n{disabled}: returns null (#508)\n\n{random vendor}: returns a random vendor from the built-in list (#493)\n\n{random renderer}: returns a random renderer from the built-in list (#493)\n\n<xxx|yyy|zzz>: picks one of the given options xxx, yyy or zzz at random (arbitrary number of options) (#493)",
|
||||
"message": "Valor a ser informado na função webGL \"getParameter\" para o \"fornecedor desmascarado\". Valores especiais:\nDeixe em branco para usar o valor original\n\n{undefined}: devolve indefinido (#508)\n\n{false}: devolve o valor booleano falso (#508)\n\n{empty}: devolve uma string vazia (#508)\n\n{disabled}: devolve nulo (#508)\n\n{random vendor}: devolve um fornecedor aleatório da lista interna (#493)\n\n{random renderer}: devolve um renderizador aleatório da lista interna (#493)\n\n<xxx|yyy|zzz>: escolhe uma das opções fornecidas xxx, yyy ou zzz aleatoriamente (número arbitrário de opções) (#493)",
|
||||
"description": ""
|
||||
},
|
||||
"webGLUnmaskedRenderer_title": {
|
||||
|
@ -664,7 +668,7 @@
|
|||
"description": ""
|
||||
},
|
||||
"webGLUnmaskedRenderer_description": {
|
||||
"message": "Value to be reported in the webGL function \"getParameter\" for the \"unmasked renderer\". Special values:\nLeave empty to use the original value\n\n{undefined}: returns undefined (#508)\n\n{false}: returns the boolean value false (#508)\n\n{empty}: returns an empty string (#508)\n\n{disabled}: returns null (#508)\n\n{random vendor}: returns a random vendor from the built-in list (#493)\n\n{random renderer}: returns a random renderer from the built-in list (#493)\n\n<xxx|yyy|zzz>: picks one of the given options xxx, yyy or zzz at random (arbitrary number of options) (#493)",
|
||||
"message": "Valor a ser informado na função webGL \"getParameter\" para o \"renderizador desmascarado\". Valores especiais:\nDeixe em branco para usar o valor original\n\n{undefined}: devolve indefinido (#508)\n\n{false}: devolve o valor booleano falso (#508)\n\n{empty}: devolve uma string vazia (#508)\n\n{disabled}: devolve nulo (#508)\n\n{random vendor}: devolve um fornecedor aleatório da lista interna (#493)\n\n{random renderer}: devolve um renderizador aleatório da lista interna (#493)\n\n<xxx|yyy|zzz>: escolhe uma das opções fornecidas xxx, yyy ou zzz aleatoriamente (número arbitrário de opções) (#493)",
|
||||
"description": ""
|
||||
},
|
||||
"useCanvasCache_title": {
|
||||
|
@ -736,7 +740,7 @@
|
|||
"description": ""
|
||||
},
|
||||
"fakedSVGReadout": {
|
||||
"message": "Faked SVG readout on {url}",
|
||||
"message": "Leitura falsa de SVG em {url}",
|
||||
"description": ""
|
||||
},
|
||||
"fakedTextMetricsReadout": {
|
||||
|
@ -836,7 +840,7 @@
|
|||
"description": ""
|
||||
},
|
||||
"selectWhitelistType": {
|
||||
"message": "What is the type of the whitelisting?",
|
||||
"message": "Qual é o tipo de lista branca?",
|
||||
"description": ""
|
||||
},
|
||||
"whitelistOnlyAPI": {
|
||||
|
@ -1184,15 +1188,15 @@
|
|||
"description": ""
|
||||
},
|
||||
"protectSVG_title": {
|
||||
"message": "Protect SVG API",
|
||||
"message": "Proteger a API de SVG",
|
||||
"description": ""
|
||||
},
|
||||
"protectSVG_description": {
|
||||
"message": "This protects against fingerprinting using SVGs.",
|
||||
"message": "Isso protege contra o fingerprinting usando SVGs.",
|
||||
"description": ""
|
||||
},
|
||||
"protectSVG_urlSpecific": {
|
||||
"message": "To exclude specific websites from this protection, click on the black arrow to open the menu, add the domain or URL by clicking on \"+\" and remove its checkmark.",
|
||||
"message": "Para excluir sites específicos desta proteção, clique na seta preta para abrir o menu, adicione o domínio ou URL clicando em \"+\" e remova sua caixa de seleção.",
|
||||
"description": ""
|
||||
},
|
||||
"protectTextMetrics_title": {
|
||||
|
@ -1600,7 +1604,7 @@
|
|||
"description": ""
|
||||
},
|
||||
"whitelist_inspection_description": {
|
||||
"message": "Shows which API protections are active for a given site. If you remove a checkmark for an API this API will be not protected for the selected site.",
|
||||
"message": "Mostra que proteções de API estão ativas para um determinado site. Se remover uma marca de seleção para uma API, esta API não será protegida para o site selecionado.",
|
||||
"description": ""
|
||||
},
|
||||
"whitelist_all_apis": {
|
||||
|
|
|
@ -103,6 +103,10 @@
|
|||
"message": "Abrir numa aba separada",
|
||||
"description": ""
|
||||
},
|
||||
"labelForDefaultOption": {
|
||||
"message": " (default)",
|
||||
"description": ""
|
||||
},
|
||||
"group_general": {
|
||||
"message": "Geral",
|
||||
"description": ""
|
||||
|
|
|
@ -103,6 +103,10 @@
|
|||
"message": "Открыть в отдельной вкладке",
|
||||
"description": ""
|
||||
},
|
||||
"labelForDefaultOption": {
|
||||
"message": " (default)",
|
||||
"description": ""
|
||||
},
|
||||
"group_general": {
|
||||
"message": "Основные",
|
||||
"description": ""
|
||||
|
|
|
@ -103,6 +103,10 @@
|
|||
"message": "在新标签页中打开",
|
||||
"description": ""
|
||||
},
|
||||
"labelForDefaultOption": {
|
||||
"message": " (default)",
|
||||
"description": ""
|
||||
},
|
||||
"group_general": {
|
||||
"message": "一般",
|
||||
"description": ""
|
||||
|
@ -504,7 +508,7 @@
|
|||
"description": ""
|
||||
},
|
||||
"rng_description": {
|
||||
"message": "none (completely white): a completely white image is returned. The option \"Fake the alpha channel\" should be activated with this. CAUTION: Do not use this with the \"fake at input\" mode.\n\nnon persistent: the random numbers will be determined freshly for each faking action. Keep in mind that many API protections have caches in place to prevent detection.\n\nconstant: variation of non persistent. But when altering canvas data same colored pixels also share the same color afterwards.\n\npersistent: the random number will only be determined once for every domain.",
|
||||
"message": "none (completely white): a completely white image is returned. The option \"Fake the alpha channel\" should be activated with this. CAUTION: Do not use this with the \"fake at input\" mode.\n\nnonpersistent: the random numbers will be determined freshly for each faking action. Keep in mind that many API protections have caches in place to prevent detection.\n\nconstant: variation of nonpersistent. But when altering canvas data same colored pixels also share the same color afterwards.\n\npersistent: the random number will only be determined once for every domain.",
|
||||
"description": ""
|
||||
},
|
||||
"rng_options.persistent": {
|
||||
|
|
|
@ -103,6 +103,10 @@
|
|||
"message": "在新的隱身標籤頁中打開",
|
||||
"description": ""
|
||||
},
|
||||
"labelForDefaultOption": {
|
||||
"message": " (default)",
|
||||
"description": ""
|
||||
},
|
||||
"group_general": {
|
||||
"message": "一般設定",
|
||||
"description": ""
|
||||
|
@ -504,7 +508,7 @@
|
|||
"description": ""
|
||||
},
|
||||
"rng_description": {
|
||||
"message": "none (completely white): a completely white image is returned. The option \"Fake the alpha channel\" should be activated with this. CAUTION: Do not use this with the \"fake at input\" mode.\n\nnon persistent: the random numbers will be determined freshly for each faking action. Keep in mind that many API protections have caches in place to prevent detection.\n\nconstant: variation of non persistent. But when altering canvas data same colored pixels also share the same color afterwards.\n\npersistent: the random number will only be determined once for every domain.",
|
||||
"message": "none (completely white): a completely white image is returned. The option \"Fake the alpha channel\" should be activated with this. CAUTION: Do not use this with the \"fake at input\" mode.\n\nnonpersistent: the random numbers will be determined freshly for each faking action. Keep in mind that many API protections have caches in place to prevent detection.\n\nconstant: variation of nonpersistent. But when altering canvas data same colored pixels also share the same color afterwards.\n\npersistent: the random number will only be determined once for every domain.",
|
||||
"description": ""
|
||||
},
|
||||
"rng_options.persistent": {
|
||||
|
@ -1556,7 +1560,7 @@
|
|||
"description": ""
|
||||
},
|
||||
"sanitation_resolution.switchToNonPersistentRng": {
|
||||
"message": "switch to \"non persistent\" rng",
|
||||
"message": "switch to \"nonpersistent\" rng",
|
||||
"description": ""
|
||||
},
|
||||
"sanitation_error.fakeEverythingInCanvas": {
|
||||
|
|
114
lib/extension.js
114
lib/extension.js
|
@ -141,41 +141,109 @@
|
|||
};
|
||||
|
||||
const proxies = new Map();
|
||||
const changedToStrings = new WeakMap();
|
||||
scope.createProxyFunction = function createProxyFunction(window, original, replacement){
|
||||
if (!changedToStrings.get(window)){
|
||||
const functionPrototype = scope.getWrapped(window).Function.prototype;
|
||||
const originalToString = functionPrototype.toString;
|
||||
changedToStrings.set(window, originalToString);
|
||||
const alteredToString = scope.exportFunctionWithName(function toString(){
|
||||
return proxies.get(this) || originalToString.call(this);
|
||||
}, window, "toString");
|
||||
proxies.set(alteredToString, originalToString.call(originalToString));
|
||||
scope.changeProperty(window, "toString", {
|
||||
object: functionPrototype,
|
||||
name: "toString",
|
||||
type: "value",
|
||||
changed: alteredToString
|
||||
});
|
||||
const changedWindowsForProxies = new WeakMap();
|
||||
function setupWindowForProxies(window){
|
||||
if (changedWindowsForProxies.get(window)){
|
||||
return;
|
||||
}
|
||||
const handler = scope.getWrapped(window).Object.create(null);
|
||||
handler.apply = scope.exportFunctionWithName(function(target, thisArgs, args){
|
||||
const wrappedWindow = scope.getWrapped(window);
|
||||
|
||||
const functionPrototype = wrappedWindow.Function.prototype;
|
||||
const originalToString = functionPrototype.toString;
|
||||
changedWindowsForProxies.set(window, originalToString);
|
||||
const alteredToString = scope.createProxyFunction(
|
||||
window,
|
||||
originalToString,
|
||||
function toString(){
|
||||
if (proxies.has(this)){
|
||||
return proxies.get(this).string;
|
||||
}
|
||||
return originalToString.call(scope.getWrapped(this));
|
||||
}
|
||||
);
|
||||
scope.changeProperty(window, "toString", {
|
||||
object: functionPrototype,
|
||||
name: "toString",
|
||||
type: "value",
|
||||
changed: alteredToString
|
||||
});
|
||||
|
||||
const wrappedReflect = wrappedWindow.Reflect;
|
||||
const originalReflectSetPrototypeOf = wrappedReflect.setPrototypeOf;
|
||||
const alteredReflectSetPrototypeOf = scope.exportFunctionWithName(
|
||||
function setPrototypeOf(target, prototype){
|
||||
target = scope.getWrapped(target);
|
||||
if (proxies.has(target)){
|
||||
target = proxies.get(target).wrappedOriginal;
|
||||
}
|
||||
if (proxies.has(prototype)){
|
||||
prototype = proxies.get(prototype).wrappedOriginal;
|
||||
}
|
||||
if (prototype){
|
||||
const grandPrototype = wrappedReflect.getPrototypeOf(prototype);
|
||||
if (proxies.has(grandPrototype)){
|
||||
const testPrototype = wrappedWindow.Object.create(proxies.get(grandPrototype).wrappedOriginal);
|
||||
const value = originalReflectSetPrototypeOf.call(wrappedReflect, target, testPrototype);
|
||||
if (!value){
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
const value = originalReflectSetPrototypeOf.call(wrappedReflect, target, scope.getWrapped(prototype));
|
||||
return value;
|
||||
}, window, "setPrototypeOf"
|
||||
);
|
||||
scope.changeProperty(window, "toString", {
|
||||
object: wrappedWindow.Reflect,
|
||||
name: "setPrototypeOf",
|
||||
type: "value",
|
||||
changed: alteredReflectSetPrototypeOf
|
||||
});
|
||||
}
|
||||
scope.createProxyFunction = function createProxyFunction(window, original, replacement){
|
||||
setupWindowForProxies(window);
|
||||
const wrappedObject = scope.getWrapped(window).Object;
|
||||
const handler = wrappedObject.create(null);
|
||||
handler.apply = scope.exportFunctionWithName(function(target, thisArg, args){
|
||||
try {
|
||||
return args.length?
|
||||
replacement.call(thisArgs, ...args):
|
||||
replacement.call(thisArgs);
|
||||
replacement.call(thisArg, ...args):
|
||||
replacement.call(thisArg);
|
||||
}
|
||||
catch (error){
|
||||
try {
|
||||
return original.apply(thisArgs, args);
|
||||
return original.apply(thisArg, args);
|
||||
}
|
||||
catch (error){
|
||||
return target.apply(thisArgs, args);
|
||||
return scope.getWrapped(target).apply(thisArg, args);
|
||||
}
|
||||
}
|
||||
}, window, "");
|
||||
handler.setPrototypeOf = scope.exportFunctionWithName(function(target, prototype){
|
||||
target = scope.getWrapped(target);
|
||||
if (proxies.has(target)){
|
||||
target = proxies.get(target).wrappedOriginal;
|
||||
}
|
||||
if (proxies.has(prototype)){
|
||||
prototype = proxies.get(prototype).wrappedOriginal;
|
||||
}
|
||||
if (prototype){
|
||||
const grandPrototype = wrappedObject.getPrototypeOf(prototype);
|
||||
if (proxies.has(grandPrototype)){
|
||||
const testPrototype = wrappedObject.create(proxies.get(grandPrototype).wrappedOriginal);
|
||||
wrappedObject.setPrototypeOf(target, testPrototype);
|
||||
}
|
||||
}
|
||||
return wrappedObject.setPrototypeOf(target, scope.getWrapped(prototype));
|
||||
}, window, "");
|
||||
const proxy = new window.Proxy(original, handler);
|
||||
proxies.set(proxy, changedToStrings.get(window).call(original));
|
||||
const proxyData = {
|
||||
original: original,
|
||||
wrappedOriginal: scope.getWrapped(original),
|
||||
string: changedWindowsForProxies.get(window).call(original),
|
||||
};
|
||||
proxies.set(proxy, proxyData);
|
||||
proxies.set(scope.getWrapped(proxy), proxyData);
|
||||
return scope.getWrapped(proxy);
|
||||
};
|
||||
|
||||
|
|
|
@ -427,7 +427,7 @@
|
|||
return getIsPointValue({
|
||||
func: (x, y) => original.call(this, x, y, args[2]),
|
||||
x, y,
|
||||
index: x + this.width * y,
|
||||
index: x + this.canvas.width * y,
|
||||
originalValue, window, prefs
|
||||
});
|
||||
}
|
||||
|
@ -462,7 +462,7 @@
|
|||
return getIsPointValue({
|
||||
func,
|
||||
x, y,
|
||||
index: x + this.width * y,
|
||||
index: x + this.canvas.width * y,
|
||||
originalValue, window, prefs
|
||||
});
|
||||
}
|
||||
|
|
|
@ -19,17 +19,26 @@
|
|||
texts.push({text: text.toLowerCase(), content});
|
||||
};
|
||||
scope.search = function(search){
|
||||
const resultSets = search.toLowerCase().split(/\s+/).filter(function(term){
|
||||
const resultSets = search.split(/\s+/).filter(function(term){
|
||||
return term.trim();
|
||||
}).map(function(term){
|
||||
return new RegExp(term);
|
||||
}).map(function(term){
|
||||
const matching = new Set();
|
||||
texts.forEach(function(text){
|
||||
if (term.test(text.text)){
|
||||
matching.add(text.content);
|
||||
}
|
||||
});
|
||||
if (term.match(/^:[a-z]+$/i)){
|
||||
const tag = term.substring(1);
|
||||
texts.forEach(function(text){
|
||||
if (text.content.querySelector(`.${tag}`)){
|
||||
matching.add(text.content);
|
||||
}
|
||||
});
|
||||
}
|
||||
else {
|
||||
term = new RegExp(term.toLowerCase());
|
||||
texts.forEach(function(text){
|
||||
if (term.test(text.text)){
|
||||
matching.add(text.content);
|
||||
}
|
||||
});
|
||||
}
|
||||
return matching;
|
||||
});
|
||||
if (resultSets.length){
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
{
|
||||
"name": "CanvasBlocker",
|
||||
"description": "__MSG_addon_description__",
|
||||
"version": "1.10",
|
||||
"version": "1.11",
|
||||
"icons": {
|
||||
"48": "icons/icon.svg",
|
||||
"96": "icons/icon.svg"
|
||||
|
|
|
@ -51,10 +51,12 @@
|
|||
const option = document.createElement("option");
|
||||
if (typeof value === typeof setting.defaultValue){
|
||||
option.value = value;
|
||||
option.text = extension.getTranslation(setting.name + "_options." + value) || value;
|
||||
if (setting.defaultValue === value){
|
||||
option.selected = true;
|
||||
option.selectedText = option.text;
|
||||
option.notSelectedText = option.text + extension.getTranslation("labelForDefaultOption");
|
||||
}
|
||||
option.text = extension.getTranslation(setting.name + "_options." + value) || value;
|
||||
}
|
||||
else {
|
||||
option.disabled = true;
|
||||
|
@ -62,10 +64,29 @@
|
|||
}
|
||||
select.appendChild(option);
|
||||
});
|
||||
select.update = function(){
|
||||
Array.from(select.options).forEach(function(option){
|
||||
if (option.notSelectedText){
|
||||
option.text = option.notSelectedText;
|
||||
}
|
||||
});
|
||||
const selectedOption = select.options[select.selectedIndex];
|
||||
if (selectedOption.selectedText){
|
||||
selectedOption.text = selectedOption.selectedText;
|
||||
}
|
||||
};
|
||||
return select;
|
||||
}
|
||||
|
||||
const inputTypes = {
|
||||
all: {
|
||||
updateCallback: function(input, value, defaultValue){
|
||||
if (input.update){
|
||||
input.update();
|
||||
}
|
||||
input.classList[value === defaultValue? "remove": "add"]("changed");
|
||||
}
|
||||
},
|
||||
number: {
|
||||
input: function(value){
|
||||
const input = document.createElement("input");
|
||||
|
@ -73,8 +94,9 @@
|
|||
input.value = value;
|
||||
return input;
|
||||
},
|
||||
updateCallback: function(input, value){
|
||||
updateCallback: function(input, value, defaultValue){
|
||||
input.value = value;
|
||||
inputTypes.all.updateCallback(input, value, defaultValue);
|
||||
return input.value;
|
||||
},
|
||||
getValue: function(input){
|
||||
|
@ -95,8 +117,9 @@
|
|||
input.value = value;
|
||||
return input;
|
||||
},
|
||||
updateCallback: function(input, value){
|
||||
updateCallback: function(input, value, defaultValue){
|
||||
input.value = value;
|
||||
inputTypes.all.updateCallback(input, value, defaultValue);
|
||||
return input.value;
|
||||
},
|
||||
getValue: function(input){
|
||||
|
@ -111,8 +134,9 @@
|
|||
input.style.display = "inline-block";
|
||||
return input;
|
||||
},
|
||||
updateCallback: function(input, value){
|
||||
updateCallback: function(input, value, defaultValue){
|
||||
input.checked = value;
|
||||
inputTypes.all.updateCallback(input, value, defaultValue);
|
||||
return input.checked;
|
||||
},
|
||||
getValue: function(input){
|
||||
|
@ -169,7 +193,7 @@
|
|||
container && container.hasOwnProperty(key)?
|
||||
container[key]:
|
||||
setting.defaultKeyValue,
|
||||
url
|
||||
setting.defaultKeyValue
|
||||
);
|
||||
});
|
||||
keyInput.addEventListener("change", function(){
|
||||
|
@ -189,7 +213,7 @@
|
|||
container && container.hasOwnProperty(key)?
|
||||
container[key]:
|
||||
setting.defaultKeyValue,
|
||||
url
|
||||
setting.defaultKeyValue
|
||||
);
|
||||
logging.message("setting", setting.name, "(", key, ") was not changed");
|
||||
}
|
||||
|
@ -232,7 +256,7 @@
|
|||
urlCell.textContent = entry.url;
|
||||
row.appendChild(urlCell);
|
||||
let input = createInput(setting, entry.url);
|
||||
type.updateCallback(input, setting.get(entry.url));
|
||||
type.updateCallback(input, setting.get(entry.url), setting.defaultValue);
|
||||
if (!entry.hasOwnProperty(setting.name)){
|
||||
input.classList.add("notSpecifiedForUrl");
|
||||
}
|
||||
|
@ -319,14 +343,17 @@
|
|||
}
|
||||
}
|
||||
if (type){
|
||||
setting.on(function(){type.updateCallback(input, setting.get(url));}, url);
|
||||
setting.on(function(){
|
||||
type.updateCallback(input, setting.get(url), setting.defaultValue);
|
||||
}, url);
|
||||
input.addEventListener("change", function(){
|
||||
const value = type.getValue(input);
|
||||
if (setting.set(value, url)){
|
||||
type.updateCallback(input, value, setting.defaultValue);
|
||||
logging.message("changed setting", setting.name, ":", value);
|
||||
}
|
||||
else {
|
||||
type.updateCallback(input, setting.get(url));
|
||||
type.updateCallback(input, setting.get(url), setting.defaultValue);
|
||||
logging.message("setting", setting.name, "was not changed");
|
||||
}
|
||||
});
|
||||
|
|
|
@ -1,3 +1,32 @@
|
|||
Version 1.11:
|
||||
changes:
|
||||
-
|
||||
|
||||
new features:
|
||||
-
|
||||
|
||||
fixes:
|
||||
-
|
||||
|
||||
known issues:
|
||||
- if a data URL is blocked the page action button does not appear
|
||||
- canvas and navigator APIs in workers are not protected
|
||||
|
||||
Version 1.10.1:
|
||||
new features:
|
||||
- added tag search
|
||||
- added :changed tag
|
||||
- mark default value in drop downs settings
|
||||
|
||||
fixes:
|
||||
- lag and functionality loss on google sites
|
||||
- fix function tampering detection via prototype
|
||||
- isPointInPath and isPointInStroke return undefined with persistent rng
|
||||
|
||||
known issues:
|
||||
- if a data URL is blocked the page action button does not appear
|
||||
- canvas and navigator APIs in workers are not protected
|
||||
|
||||
Version 1.10:
|
||||
changes:
|
||||
- added eBay to the convenience preset
|
||||
|
|
|
@ -261,6 +261,82 @@
|
|||
{
|
||||
"version": "1.10Alpha20230530",
|
||||
"update_link": "https://canvasblocker.kkapsner.de/versions/canvasblocker_beta-1.10Alpha20230530.xpi"
|
||||
},
|
||||
{
|
||||
"version": "1.10Alpha20230531",
|
||||
"update_link": "https://canvasblocker.kkapsner.de/versions/canvasblocker_beta-1.10Alpha20230531.xpi"
|
||||
},
|
||||
{
|
||||
"version": "1.10Alpha20240216",
|
||||
"update_link": "https://canvasblocker.kkapsner.de/versions/canvasblocker_beta-1.10Alpha20240216.xpi"
|
||||
},
|
||||
{
|
||||
"version": "1.10.20240217",
|
||||
"update_link": "https://canvasblocker.kkapsner.de/versions/canvasblocker_beta-1.10.20240217.xpi"
|
||||
},
|
||||
{
|
||||
"version": "1.10.20240217.1",
|
||||
"update_link": "https://canvasblocker.kkapsner.de/versions/canvasblocker_beta-1.10.20240217.1.xpi"
|
||||
},
|
||||
{
|
||||
"version": "1.10.20240217.2",
|
||||
"update_link": "https://canvasblocker.kkapsner.de/versions/canvasblocker_beta-1.10.20240217.2.xpi"
|
||||
},
|
||||
{
|
||||
"version": "1.10.20240217.3",
|
||||
"update_link": "https://canvasblocker.kkapsner.de/versions/canvasblocker_beta-1.10.20240217.3.xpi"
|
||||
},
|
||||
{
|
||||
"version": "1.10.20240217.4",
|
||||
"update_link": "https://canvasblocker.kkapsner.de/versions/canvasblocker_beta-1.10.20240217.4.xpi"
|
||||
},
|
||||
{
|
||||
"version": "1.10.20240217.5",
|
||||
"update_link": "https://canvasblocker.kkapsner.de/versions/canvasblocker_beta-1.10.20240217.5.xpi"
|
||||
},
|
||||
{
|
||||
"version": "1.10.20240218",
|
||||
"update_link": "https://canvasblocker.kkapsner.de/versions/canvasblocker_beta-1.10.20240218.xpi"
|
||||
},
|
||||
{
|
||||
"version": "1.10.20240218.1",
|
||||
"update_link": "https://canvasblocker.kkapsner.de/versions/canvasblocker_beta-1.10.20240218.1.xpi"
|
||||
},
|
||||
{
|
||||
"version": "1.10.20240218.2",
|
||||
"update_link": "https://canvasblocker.kkapsner.de/versions/canvasblocker_beta-1.10.20240218.2.xpi"
|
||||
},
|
||||
{
|
||||
"version": "1.10.20240218.3",
|
||||
"update_link": "https://canvasblocker.kkapsner.de/versions/canvasblocker_beta-1.10.20240218.3.xpi"
|
||||
},
|
||||
{
|
||||
"version": "1.10.20240328",
|
||||
"update_link": "https://canvasblocker.kkapsner.de/versions/canvasblocker_beta-1.10.20240328.xpi"
|
||||
},
|
||||
{
|
||||
"version": "1.10.20240330",
|
||||
"update_link": "https://canvasblocker.kkapsner.de/versions/canvasblocker_beta-1.10.20240330.xpi"
|
||||
},
|
||||
{
|
||||
"version": "1.10.1.20240405",
|
||||
"update_link": "https://canvasblocker.kkapsner.de/versions/canvasblocker_beta-1.10.1.20240405.xpi"
|
||||
},
|
||||
{
|
||||
"version": "1.10.20240407",
|
||||
"update_link": "https://canvasblocker.kkapsner.de/versions/canvasblocker_beta-1.10.20240407.xpi"
|
||||
},
|
||||
{
|
||||
"version": "1.10.20240407.1",
|
||||
"update_link": "https://canvasblocker.kkapsner.de/versions/canvasblocker_beta-1.10.20240407.1.xpi"
|
||||
},
|
||||
{
|
||||
"version": "1.10.20240408",
|
||||
"update_link": "https://canvasblocker.kkapsner.de/versions/canvasblocker_beta-1.10.20240408.xpi"
|
||||
},
|
||||
{
|
||||
"version": "1.11.20240417",
|
||||
"update_link": "https://canvasblocker.kkapsner.de/versions/canvasblocker_beta-1.11.20240417.xpi"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue