- // ==UserScript==
- // @name Absolute Enable Right Click & Copy
- // @namespace Absolute Right Click
- // @description Force Enable Right Click & Copy & Highlight
- // @shortcutKeys [Ctrl + `] Activate Absolute Right Click Mode To Force Remove Any Type Of Protection
- // @author Absolute
- // @version 1.8.6
- // @include *://*
- // @icon https://i.imgur.com/AC7SyUr.png
- // @compatible Chrome Google Chrome + Tampermonkey
- // @grant GM_registerMenuCommand
- // @license BSD
- // @copyright Absolute, 2016-Oct-06
- // ==/UserScript==
-
- (function() {
- 'use strict';
-
- var css = document.createElement('style');
- var head = document.head;
-
- css.type = 'text/css';
-
- css.innerText = `* {
- -webkit-user-select: text !important;
- -moz-user-select: text !important;
- -ms-user-select: text !important;
- user-select: text !important;
- }`;
-
- var elements = document.querySelectorAll('*');
-
- for (var i = 0; i < elements.length; i++) {
- if (elements[i].style.userSelect == 'none') {
- elements[i].style.userSelect = 'auto';
- }
- }
-
- function main() {
-
- var doc = document;
- var body = document.body;
-
- var docEvents = [
- doc.oncontextmenu = null,
- doc.onselectstart = null,
- doc.ondragstart = null,
- doc.onmousedown = null
- ];
-
- var bodyEvents = [
- body.oncontextmenu = null,
- body.onselectstart = null,
- body.ondragstart = null,
- body.onmousedown = null,
- body.oncut = null,
- body.oncopy = null,
- body.onpaste = null
- ];
-
- [].forEach.call(
- ['copy', 'cut', 'paste', 'select', 'selectstart'],
- function(event) {
- document.addEventListener(event, function(e) { e.stopPropagation(); }, true);
- }
- );
-
- alwaysAbsoluteMod();
- enableCommandMenu();
- head.appendChild(css);
- document.addEventListener('keydown', keyPress);
-
- }
-
- function keyPress(event) {
- if (event.ctrlKey && event.keyCode == 192) {
- return confirm('Activate Absolute Right Click Mode!') == true ? absoluteMod() : null;
- }
- }
-
- function absoluteMod() {
- [].forEach.call(
- ['contextmenu', 'copy', 'cut', 'paste', 'mouseup', 'mousedown', 'keyup', 'keydown', 'drag', 'dragstart', 'select', 'selectstart'],
- function(event) {
- document.addEventListener(event, function(e) { e.stopPropagation(); }, true);
- }
- );
- }
-
- function alwaysAbsoluteMod() {
- let sites = ['example.com','www.example.com'];
- const list = RegExp(sites.join('|')).exec(location.hostname);
- return list ? absoluteMod() : null;
- }
-
- function enableCommandMenu() {
- var commandMenu = true;
- if (commandMenu == true) {
- GM_registerMenuCommand('Enable Absolute Right Click Mode', function() {
- return confirm('Activate Absolute Right Click Mode!') == true ? absoluteMod() : null;
- });
- }
- }
-
- var blackList = [
- 'youtube.com','.google.','.google.com','gf.qytechs.cn','twitter.com','instagram.com','facebook.com','translate.google.com','.amazon.','.ebay.','github.','stackoverflow.com',
- 'bing.com','live.com','dropbox.com','pcloud.com','box.com','sync.com','onedrive.com','mail.ru','deviantart.com','pastebin.com',
- 'dailymotion.com','twitch.tv','spotify.com','steam.com','steampowered.com','gitlab.com'
- ]
-
- var enabled = false;
- var url = window.location.hostname;
- var match = RegExp(blackList.join('|')).exec(url);
-
- if (window && typeof window != undefined && head != undefined) {
-
- if (!match && enabled != true) {
-
- main();
- enabled = true
-
- //console.log(location.hostname);
-
- window.addEventListener('contextmenu', function contextmenu(event) {
- event.stopPropagation();
- event.stopImmediatePropagation();
- var handler = new eventHandler(event);
- window.removeEventListener(event.type, contextmenu, true);
- var eventsCallBack = new eventsCall(function() {});
- handler.fire();
- window.addEventListener(event.type, contextmenu, true);
- if (handler.isCanceled && (eventsCallBack.isCalled)) {
- event.preventDefault();
- }
- }, true);
- }
-
- function eventsCall() {
- this.events = ['DOMAttrModified', 'DOMNodeInserted', 'DOMNodeRemoved', 'DOMCharacterDataModified', 'DOMSubtreeModified'];
- this.bind();
- }
-
- eventsCall.prototype.bind = function() {
- this.events.forEach(function (event) {
- document.addEventListener(event, this, true);
- }.bind(this));
- };
-
- eventsCall.prototype.handleEvent = function() {
- this.isCalled = true;
- };
-
- eventsCall.prototype.unbind = function() {
- this.events.forEach(function (event) {}.bind(this));
- };
-
- function eventHandler(event) {
- this.event = event;
- this.contextmenuEvent = this.createEvent(this.event.type);
- }
-
- 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) {
- event.preventDefault();
- }.bind(this);
- target.dispatchEvent(this.contextmenuEvent);
- this.isCanceled = this.contextmenuEvent.defaultPrevented;
- };
-
- }
-
- })();
-