// ==UserScript==
// @name ADictionary Blocker
// @namespace http://tampermonkey.net/
// @version 0.6
// @description A Ad-changer
// @author Thomas Thy Train
// @match *://dictionary.cambridge.org/*
// @match https://*/*
// @grant GM_addStyle
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js
// @require https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.9.1/underscore-min.js
// @grant GM.setValue
// @grant GM.getValue
// @icon data:image/png;base64,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
// @CrossOrigin("*")
// ==/UserScript==
// this is from https://dictionary.cambridge.org/external/scripts/dblclick.js?version=5.0.175
function setupExtDoubleClick(websiteUrl, dictionary, showFirstEntry, areaClass, maxAllowedWords, target) {
setupDoubleClick(websiteUrl, dictionary, areaClass, maxAllowedWords, target,
function(websiteUrl, dictionary, showFirstEntry, lookup) { return websiteUrl + "search/" + (dictionary ? dictionary + "/" : "") + (showFirstEntry ? "direct/" : "") + "?q=" + lookup; });
}
function setupDoubleClick(websiteUrl, dictionary, showFirstEntry, areaClass, maxAllowedWords, target, urlCallback) {
//warning message for developers
if (!websiteUrl || !dictionary) {
alert("Please specify required parameters (websiteUrl and dictionary) to setupDoubleClick()")
return;
}
//shows the definition layer
var showLayer = function(e) {
var translateDictionary = dictionary;
var node = e.target || e.srcElement;
while (node != null) {
var lang = node.getAttribute("dict");
if (lang) {
translateDictionary = lang;
break;
}
if (node.parentNode == node.ownerDocument) {
break;
}
node = node.parentNode;
}
e.preventDefault();
var lookup = getSelectedText();
// original space, but shitty api ont allow
lookup = lookup.replace(/[\.\*\?;!()\+,\[:\]<>^_`\[\]{}~\\\/\"\'=]/g, "");
lookup = lookup.replace(/\s+/g, "");
if (lookup != null && lookup.replace("/\s/g", "").length > 0) {
//disable the double-click feature if the lookup string
//exceeds the maximum number of allowable words
if (maxAllowedWords && lookup.split(/[ -]/).length > maxAllowedWords)
return;
// i give up on showing the meaning
//I DID IT!!!!!!!
let request = new XMLHttpRequest();
request.open("GET","https://api.dictionaryapi.dev/api/v2/entries/en/"+lookup);
request.responseType="json";
// add a popup to show define
// word is correct
// new,store things
let word="<h3 style='font-style:italic;font-weight:bold;'>power by Cambridge Dictionary</h3><h1 id='word_adb_explain'style='font-style:italic;font-weight:bold;'>"+lookup+"</h1>";
// test zone
if(!localStorage.getItem('wordlist')){
localStorage.setItem("wordlist","");
}
let cur_wl=localStorage.getItem('wordlist').split(":");
//unique
cur_wl=Array.from(new Set(cur_wl));
localStorage.setItem("wordlist",cur_wl.join(":"));
let color="grey";
if(cur_wl.includes(lookup)){
color="green"
}
request.onload=()=>{
//localStorage.clear();
request.response[0].meanings.forEach((e)=>{word+="<p>"+e.definitions[0].definition+"</p>";word+="<span style='font-style:italic;opacity:0.5;'>"+e.partOfSpeech+"</span>"});
$("#adb_explain").remove();
$("body").append("<div id='adb_explain'style='position:fixed;background-color:#fff;border:2px solid #000;width:450px;'><button id='delete_block' style='border-radius: 50%;border-width:0px;'>X</button><button id='adb_addword' style='border-radius: 50%;background-color:"+color+";border-width:0px;'>✔</button>"+word+"</div>");
// test end
let block=document.querySelector("#adb_explain");
const size=block.getBoundingClientRect();
block.style.left=(1420-size.width).toString()+"px";
block.style.top=(740-size.height).toString()+"px";
$("#delete_block").click(()=>{$("#adb_explain").remove()});
}
$("#adb_addword").click((e)=>{
lookup=$("#word_adb_explain").text();
if(cur_wl.includes(lookup)){
$("#adb_addword").css("background-color","grey");
const index=cur_wl.findIndex((e)=>e===lookup);
delete cur_wl[index];
localStorage.setItem('wordlist', cur_wl.join(":"));
}else{
$("#adb_addword").css("background-color","green");
localStorage.setItem('wordlist', cur_wl.join(":")+":"+lookup);
}
});
request.send();
//append the layer to the DOM only once
// modify this part
if ($("#definition_layer").length == 0) {
var imageUrl = websiteUrl + "external/images/doubleclick/definition-layer.gif";
$("body").append("<div id='definition_layer' style='position:absolute; cursor:pointer;'><img src='" + imageUrl + "' alt='' title=''/></div>");
//$("body").append("<div id='definition_layer' style='position:absolute; cursor:pointer;'>" + word + "</div>");
}
//move the layer at the cursor position
$("#definition_layer").map(function() {
$(this).css({'left' : e.pageX-30, 'top' : e.pageY-40});
});
//open the definition popup clicking on the layer
$("#definition_layer").mouseup(function(e) {
e.stopPropagation();
openPopup(lookup, translateDictionary);
});
} else {
$("#definition_layer").remove();
}
};
//opens the definition popup
var openPopup = function(lookup, translateDictionary) {
var searchUrl;
if (urlCallback)
searchUrl = urlCallback(websiteUrl, translateDictionary, showFirstEntry, lookup);
else
searchUrl = websiteUrl + "search/" + (translateDictionary ? translateDictionary + "/" : "") + (showFirstEntry ? "direct/" : "") + "?q=" + lookup;
if(lookup.replace(/[a-zA-Z0-9]/g, '')!=""){
searchUrl="https://www.collinsdictionary.com/dictionary/chinese-english/"+lookup;
}
if (target) {
if (target == "self") {
window.location.href = searchUrl;
return;
}
var popup = window.open(searchUrl, target, "toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=no,copyhistory=no,width=915,height=760,top=300,left=300");
if (popup)
popup.focus();
} else {
window.open(searchUrl, 'cup_lookup');
}
/*window.location.href = searchUrl;*/
};
var area = areaClass ? "." + areaClass : "body";
$(area).mouseup(showLayer);
}
/*
* Cross-browser function to get selected text
*/
function getSelectedText(){
if(window.getSelection)
return window.getSelection().toString();
else if(document.getSelection)
return document.getSelection();
else if(document.selection)
return document.selection.createRange().text;
return "";
}
(function() {
'use strict';
//setup clicker dictionary
// problem, it only give you the link
setupDoubleClick( 'https://dictionary.cambridge.org/', 'english-chinese-traditional', true, null, 5, 'popup' );
let adtype=["iframe","ytd-display-ad-renderer","ins","div"];
let adfinder=["google_ads","aswift","mys-wrapper","midcontentadcontainer"];
// let interval = null;
// let hostname = document.location.hostname;
//make this the explain page,but not every go ad
// new
function cleanup() {
//if(!localStorage.getItem('wordlist')){
// localStorage.setItem("wordlist",".");
//}
let request = new XMLHttpRequest();
let word="Loading"
try{
let cur_wl=localStorage.getItem('wordlist').split(":").slice(1);
let lookup= new String(_.sample(cur_wl));
//let lookup="cat";
request.open("GET","https://api.dictionaryapi.dev/api/v2/entries/en/"+lookup);
request.responseType="json";
word="<h6 style='font-style:italic;font-weight:bold;'>power by Dictionary API</h6><h5 style='font-style:italic;font-weight:bold;'>"+lookup+"</h5>";
}catch(err){
let lookup="Loading";
request.open("GET","https://api.dictionaryapi.dev/api/v2/entries/en/"+lookup);
request.responseType="json";
word="Loading";
}
request.onload=()=>{
request.response[0].meanings.forEach((e)=>{
word+="<p>"+e.definitions[0].definition+"</p>";
word+="<span style='font-style:italic;opacity:0.5;'>"+e.partOfSpeech+"</span>";
});
// clear ad
adtype.forEach((i)=>{
try{
document.querySelectorAll(i).forEach((elem)=>{
adfinder.forEach((adid)=>{
if(elem.id.slice(0,adid.length)==adid){
console.log(word);
elem.style.overflow="auto";
elem.innerHTML=word;
//elem.style.visibility = 'hidden';
//elem.style.width = '1px';
//elem.style.height = '1px';
//elem.style.overflow = 'hidden';
//elem.style.opacity = 0;
//elem.remove();
}
});
});}
catch(err){console.log(err);
}
}
);
}
request.send();
document.body.dispatchEvent(new MouseEvent('mousemove'));
// modify this part
// if(sites[hostname].background) {
// document.body.style.background = sites[hostname].background;
// document.body.style.overflow = 'scroll';
// document.body.style.position = 'static';
// }
}
let interval=null;
cleanup();
if(interval === null) {
interval = window.setInterval(function(){
cleanup();
}, 5000);
}
})();
//"ytd-display-ad-renderer"