// ==UserScript==
// @name Absolute Enable Right Click & Copy
// @namespace Absolute Right Click
// @description Force Enable right click & Copy & Highlight
// @author Absolute
// @version 1.2.3
// @include http*://*
// @icon https://cdn3.iconfinder.com/data/icons/communication-130/63/cursor-128.png
// @license BSD
// @copyright Absolute
// @grant GM_addStyle
// @Exclude /.*(JPG|PNG|GIF|JPEG|ico|bing|facebook|google|pixiv).*/
// ==/UserScript==
var Sites_List = ['163.com','www.site.com','www.site.com','www.site.com','www.site.com'];
(function GetSelection () {
var style = document.createElement('style');
var iStyle = '*{user-select: text !important;-webkit-user-select:text!important;}';
style.type = 'text/css';
if (style.styleSheet) { style.styleSheet.cssText = iStyle; }
else { style.appendChild(document.createTextNode(iStyle)); }
window.getSelection = null;
document.oncontextmenu = null;
document.body.setAttribute('oncopy','null');
document.body.setAttribute('oncut','null');
document.getElementsByTagName('head')[0].appendChild(style);
})();
function Check (event) {
if (event.stopPropagation) {
event.stopPropagation();
}}
var events = ['NO-contextmenu','selectstart'];
for (var i = 0; i < events.length; i++) {
document['on'+events[i]] = Check;
document.addEventListener(events[i], Check, true, true);
}
(function RightClickButton() {
function Mutation (callback) {
this.isCalled = false;
this.isUnbound = false;
this.callback = callback;
this.events = ['DOMAttrModified', 'DOMNodeInserted', 'DOMNodeRemoved', 'DOMCharacterDataModified', 'DOMSubtreeModified'];
this.bind();
}
Mutation.prototype.bind = function () {
this.events.forEach(function (name) {
document.addEventListener(name, this, true);
}.bind(this));
};
Mutation.prototype.handleEvent = function () {
this.isCalled = true;
this.unbind();
};
Mutation.prototype.unbind = function () {
if (this.isUnbound) {
return;
}
this.events.forEach(function (name) {
document.removeEventListener(name, this, true);
}.bind(this));
this.isUnbound = true;
};
function Synchronizetion () {
this._setTimeout = window.setTimeout;
this._requestAnimationFrame = window.requestAnimationFrame;
this._Promise = window.Promise;
this.isRestoration = false;
this.calledPromise = false;
window.requestAnimationFrame = window.setTimeout = function (callback) {
callback();
};
window.Promise = function () {
this._Promise.apply(this, arguments);
this.calledPromise = true;
window.Promise = this._Promise;
};}
Synchronizetion.prototype.restore = function () {
if (this.isRestoration) { return; }
window.setTimeout = this._setTimeout;
window.requestAnimationFrame = this._requestAnimationFrame;
if (!this.calledPromise) {
window.Promise = this._Promise;
}
this.isRestoration = true;
};
function EventHandler (event) {
this.event = event;
this.contextmenuEvent = this.createEvent(this.event.type);
this.mouseupEvent = this.createEvent('mouseup');
this.isCanceled = this.contextmenuEvent.defaultPrevented;
}
EventHandler.prototype.createEvent = function (type) {
var target = this.event.target;
var event = target.ownerDocument.createEvent('MouseEvents');
event.initMouseEvent(type, this.event.bubbles, this.event.cancelable,
target.ownerDocument.defaultView, this.event.detail,
this.event.screenX, this.event.screenY, this.event.clientX, this.event.clientY,
this.event.ctrlKey, this.event.altKey, this.event.shiftKey, this.event.metaKey,
this.event.button, this.event.relatedTarget
);return event;
};
EventHandler.prototype.fire = function () {
var target = this.event.target;
var contextmenuHandler = function (event) {
this.isCanceled = event.defaultPrevented;
event.preventDefault();
}.bind(this);
window.addEventListener(this.event.type, contextmenuHandler, false);
target.dispatchEvent(this.contextmenuEvent);
window.removeEventListener(this.event.type, contextmenuHandler, false);
this.isCanceled = this.contextmenuEvent.defaultPrevented;
target.dispatchEvent(this.mouseupEvent);
};
var disableRightClick = false;
window.addEventListener('message', function (event) {
if (event.data.type !== 'enable-right-click') { return; }
disableRightClick = !!event.data.disableRightClick;
event.stopPropagation();
event.stopImmediatePropagation();
}, true);
window.addEventListener('contextmenu', handleEvent, true);
function handleEvent (event) {
if (disableRightClick) { return; }
event.stopPropagation();
event.stopImmediatePropagation();
var handler = new EventHandler(event);
window.removeEventListener(event.type, handleEvent, true);
var sync = new Synchronizetion();
var mutation = new Mutation(function () {
sync.restore(); });
var _alert = window.alert;
window.alert = function () {};
handler.fire();
window.alert = _alert;
sync.restore();
mutation.unbind();
window.addEventListener(event.type, handleEvent, true);
if (handler.isCanceled && (mutation.isCalled || sync.calledPromise)) {
event.preventDefault();
}}})();
(function CheckSites () {
var Check = window.location.href;
var Match = RegExp(Sites_List.join('|')).exec(Check);
if (Match) { Absolute_Mod (); }})();
function KeyPress (e) {
if (e.altKey && e.ctrlKey) {
alert("Absolute Right Click Mod Activate !!!");
Absolute_Mod();}}
document.addEventListener("keydown", KeyPress);
function Absolute_Mod () {
document.addEventListener("copy",function(e){e.stopPropagation();},true);
document.addEventListener("keyup",function(e){e.stopPropagation();},true);
document.addEventListener("mouseup",function(e){e.stopPropagation();},true);
document.addEventListener("keydown",function(e){e.stopPropagation();},true);
document.addEventListener("mousedown",function(e){e.stopPropagation();},true);
document.addEventListener("dragstart",function(e){e.stopPropagation();},true);
document.addEventListener("mousedown",function(e) {e.stopPropagation();},true);
document.addEventListener("contextmenu",function(e){e.stopPropagation();},true);
document.addEventListener("selectstart",function(e){e.stopPropagation();},true);
}