1
0
Fork 0
mirror of https://github.com/kkapsner/CanvasBlocker synced 2025-07-04 20:46:39 +02:00

First implementation

This commit is contained in:
kkapsner 2014-12-04 23:34:41 +01:00
parent 7e0195818b
commit caba7e33d0
4 changed files with 70 additions and 8 deletions

View file

@ -1,11 +1,15 @@
/* global self, window, console, unsafeWindow, exportFunction */
/* global self, window, console, unsafeWindow, exportFunction, cloneInto */
(function(){
"use strict";
var blockMode = {
getContext: {
status: "block",
askText: "askForPermission",
askText: {
visible: "askForVisiblePermission",
invisible: "askForInvisiblePermission",
nocanvas: "askForPermission"
},
askStatus: {
askOnce: false,
alreadyAsked: false,
@ -14,7 +18,11 @@
},
readAPI: {
status: "allow",
askText: "askForReadoutPermission",
askText: {
visible: "askForVisibleReadoutPermission",
invisible: "askForInvisibleReadoutPermission",
nocanvas: "askForReadoutPermission"
},
askStatus: {
askOnce: false,
alreadyAsked: false,
@ -33,6 +41,44 @@
return bytes;
}());
// Check canvas appearance
function canvasAppearance(context){
var oldBorder = false;
var canvas = false;
var visible = false;
if (context){
if (context.nodeName === "CANVAS"){
canvas = context;
}
else if (
context instanceof CanvasRenderingContext2D ||
context instanceof WebGLRenderingContext
){
canvas = context.canvas;
}
}
if (canvas){
oldBorder = canvas.style.border;
canvas.style.border = "2px solid red";
if (canvas.ownerDocument.contains(canvas)){
canvas.scrollIntoView();
var rect = canvas.getBoundingClientRect();
var foundEl = document.elementFromPoint(rect.left + rect.width / 2, rect.top + rect.height / 2);
visible = (foundEl === canvas);
}
}
return {
canvas: canvas,
text: canvas? (visible? "visible": "invisible"): "nocanvas",
visible: visible,
reset: function(){
if (canvas){
canvas.style.border = oldBorder;
}
}
};
}
// changed functions
var changedFunctions = {
getContext: {
@ -101,10 +147,13 @@
status = askStatus.answer;
}
else {
var appearance = canvasAppearance(this);
// console.log("asking");
status = window.confirm(_(changedFunction.mode.askText))? "allow": "block";
status = window.confirm(_(changedFunction.mode.askText[appearance.text]))? "allow": "block";
askStatus.alreadyAsked = true;
askStatus.answer = status;
appearance.reset();
}
}
switch (status){