NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name DGY Duckduckgo/Google Columns & YouTube Sort by date
// @version 2.2.7
// @updateURL https://openuserjs.org/meta/slow!/DGY_DuckduckgoGoogle_Columns_YouTube_Sort_by_date.meta.js
// @namespace DGY
// @run-at document-end
// @description Sort by date as default acout youtube & google-video. Duckduckgo and Google results also formatted to 2 columns. See GM menu to disable columns. Also makes links go directly to target and not via the search website's advertising department.
// @license GPL-3.0-only
// @copyright 2017, slow! (https://openuserjs.org/users/slow!)
// @include http*://duckduckgo.com/*
// @include http*://www.youtube.*
// @include http*://www.google.*
// @include https://encrypted.google.*
// @exclude http*://*.google.*/maps/*
// @exclude http*://*.google.*/imgres*
// @grant GM.getValue
// @grant GM.setValue
// @grant GM.deleteValue
// @grant GM.addStyle
// @grant GM.xmlHttpRequest
// @grant GM_registerMenuCommand
// @grant GM_getValue
// @grant GM_setValue
// @grant GM_deleteValue
// @grant GM_addStyle
// @grant GM_xmlhttpRequest
// @require https://code.jquery.com/jquery-3.2.1.js
// @require https://code.jquery.com/ui/1.12.1/jquery-ui.js
// @require https://raw.githubusercontent.com/SloaneFox/code/master/gm4-polyfill-1.0.1.js
// @require https://raw.githubusercontent.com/SloaneFox/code/master/gm-popup-menus-1.4.0.js
// ==/UserScript==
// @updated Spet 2020. Removed div.module blocking access to top of page links.
// @updated July 2018. Increased minimum height of result at DDG
// @updated Feb 2018. Updated for GM4 + performance.
// @updated Dec 2016. Updated for Chrome and other bugfixes.
// @updated July 2016. Bug when sort by relevance is clicked, was being ignored, &search_sort=relevance
// @updated May 2016. Exclude google image site, 'imgres?' address above.
// @updated Feb 2016. 2.0.7 Fixes bug handling google video search in date order. Adds submenu module.
// @updated Nov 2015. 2.0 Use of mutation observer since DOMNodeInserted is being removed.
// @updated 2015. 1.6 updated for google chrome/chromium
// @updated 2014. Youtube interface changed to use results in iframe, unable to change parent href.
// @updated 1st of May, 2013. Duckduckgo changed style, columns are now going left to right, so the format for Duck is now in row order (terraced);
// @updated 27th of May, 2010. Page layout changed.
// @updated 27th of April, 2010. GM menu option added to toggle columns. When selected search results are presented from then on in a three column layout.
//console.log("BEGIN readystatechange ====> ",document.readyState,"Typeof this",typeofObj(this), "head",document.head);
var iframe=window.parent!=window, ss=sessionStorage;
if (iframe) return; //!!
var gm4=typeof GM != "undefined", youtube;
if ( /\.youtube\./.test(location.host)) { youtube=true;}
if (/\/results/.test(location.pathname)) results_page=true;
if (/search_sort/.test(location.search)) sorted_page=true; // will progress to &sp=CAI%253D. %253D is hex indicator for CGI: %3D, an equals '='
if (/sp=CAI/.test(location.search)) sorted_page=true;
if (/zimyt/.test(location.search)) reflexive=true; // zimty=2 is the marker of DGY processed.
$("#search").on("keyup", x=>console.log(221199883344,x.key) );
function secsSinceEpoch() {
return ((new Date).getTime()/1000).toFixed(0);
}
var prev_tstamp;
if(ss.dgy_lsecs) {
console.log("have date",ss.dgy_lsecs);
prev_tstamp=ss.dgy_lsecs;
ss.dgy_lsecs=secsSinceEpoch();
} else {
console.log("no dgy_lsecs",);
ss.dgy_lsecs=secsSinceEpoch();
prev_tstamp=ss.dgy_lsecs - 5;
}
function seconds_diff() { return secsSinceEpoch() - prev_tstamp;}
console.log("ss.dgy_lsecs",ss.dgy_lsecs, "diff to prev load :",seconds_diff());
if (seconds_diff() < 5 ) {
console.log("diff < 5");
return;
}
if(youtube && results_page && !sorted_page && ! reflexive) {
console.log("Reload with correct URI:",location.href+" !! &search_sort=video_date_uploaded"+"&zimyt=2");
location=location.href+"&search_sort=video_date_uploaded"+"&zimyt=2"+"&sp=CAI%253D";
return;
} else if(youtube&&!results_page) return; //else console.log("Address ok",location);
var duck=false, ducklite=false, google=false, googlev=false, goo_images=false, goo_cse=false,
duckresultsclass="results_links_deep"; var vgoogle=false, aol=false;
if ( /^duckduckgo/.test(location.host)) { duck=true;youtube=false; }
if ( /\.google/.test(location.host)) { duck=false;youtube=false; google=true; if (/^cse/.test(host)) goo_cse=true;}
// Two key selectors, one for eaech list item and one for list container:
var indiv_res_selector, indiv_res_not_padded_out;
if (youtube) indiv_res_selector="ytd-video-renderer"; //.ytd-item-section-renderer"; //".item-section>li";
if (duck) indiv_res_selector="."+duckresultsclass;
if (goo_cse) { indiv_res_selector="div.gsc-result"; }
if (google) { indiv_res_selector=".g";indiv_res_not_padded_out=".g:not(.card-section,g-blk)";}
var results_list_selector="#contents #contents"; ////"#results"; // yt as default values
if(duck) results_list_selector="#links";
//console.log("Setup for site, indiv_res_selector:",indiv_res_selector,", yt:",youtube,"duck",duck,"goo_cse",goo_cse,"google",google,"results_list_selector:",results_list_selector);
collimate("preform",indiv_res_selector);
if (!iframe) ss.floglineindex=1;
String.prototype.justify = justify;
String.prototype.count=function(str) { return (this.match(str,"g")||[]).length;};
String.prototype.parse = function (r, nlimit_str) { var i=this.lastIndexOf(r);var end=this.lastIndexOf(nlimit_str);if (end==-1) end=this.length; if(i!=-1) return this.substring(i+r.length, end); }; //return string after last position of "r" in str and before "nlimit_str" or end of string.
this.unsafeWindow=unsafeWindow;
function log(t) {
console.log.apply(console,arguments);
};
log=function(){};
var flog=function(s) { //log to file ~/Dest./afile
s=ss.floglineindex+" - "+s+"\n";
ss.floglineindex=Number(ss.floglineindex)+s.count("\n");
ss.fmsg+=s;
}
var page_key=location.host+location.pathname, host=window.document.location.host;
var href=window.document.location.href, path=window.document.location.pathname;
var uwin=unsafeWindow;
var toolbelt=uwin.toggleToolbelt || ( uwin.yt && uwin.yt.www && uwin.yt.www.search ? uwin.yt.www.search.toggleToolbelt : function(){} );
var pageLoaded, pagelen, obs;
var results_page, sorted_page, reflexive, listening="";
var late_classes=[], fitting, already_done;
if ( /^duckduckgo/.test(location.host)) { duck=true;youtube=false }
if ( /\.google/.test(location.host)) { duck=false;youtube=false; google=true; if (/^cse/.test(host)) goo_cse=true;}
if ( /\.youtube\./.test(location.host)) { youtube=true;}
if (/tbm=isch/.test(location.search)) goo_images=true;
if (/tbm=vid/.test(location.search)) googlev=true;
if (/lite/.test(location.pathname)) ducklite=true;
if ( /^video.google/.test(location.host)) vgoogle=true;
else if (/^video.aol/.test(location.host)) aol=true;
if (iframe) try { log("Parent href:" + window.parent.location.href); }catch(e){}
log("matches:"+[duck,google,youtube,goo_cse,googlev,goo_images].map(Number).join("")); //parseInt("0111", 2) ==> 7 //closest to binary literal 0b111
//GM_platform_wrapper("DGY Duckduckgo/Google Cols, Youtube Sort by Date", 6, waitTillLoaded);
//////////////////////////////////////////////
if (! (duck||google||youtube)) { return;} //For chrome ////////////////////////////////////////////////
if(!chromeInit())
loader(); //in chrome, this is called instead after jquery is loaded via platform_wrapper loadScript().
if (google) {
inhibitGoogleTracker();
mkLinksDirect();
if (iframe) window.addEventListener("load", function(){
inhibitGoogleTracker();
});
}
var columns,no_of_cols,blocked_domains,ddgcrsfs_glob;
async function init_globs() {
if (init_globs.done) return; init_globs.done=true;
columns=await GM.getValue("columns", true);
no_of_cols=await GM.getValue("no_of_cols", 2);
// name: extensions.greasemonkey.scriptvals.userscripts.org/YouTube Sort by date.no_of_cols
blocked_domains=await GM.getValue("blocked_domains", []);
ddgcrsfs_glob=await GM.getValue("ddgcrsfs",false);
}
async function loader() { try{
//await dumptagdb();return;//!!
//if(!plat_chrome) await loadJsResources();
log("loader readystatechange ====> ",document.readyState,`, head is::${document.head}`); //," no.of ",indiv_res_selector,"=",$(indiv_res_selector).length);
await init_globs();
log("awaited globs, ",document.readyState,indiv_res_selector, "#:",$(indiv_res_selector).length);
if (/complete|interactive/.test(document.readyState)
&& ( $(indiv_res_selector).length || ducklite)) {
log("dlite or indiv_res_selector",indiv_res_selector);
mainline();}
else document.addEventListener("readystatechange",x=>{
log("loader() END. Event readystatechange ====> ",document.readyState);
// if(document.readyState=="interactive") mainline();// collimate("preform");
//if(document.readyState=="complete") mainline();
mainline();
});
} catch(e){console.log("Error in loader",e);}};
function mainline(){ try{
console.log("main this is",typeofObj(this), this==window); log("main is submenuModule",typeof submenuModule);
var scrollPos=$(window).scrollTop();
if (already_done) { log("Already_done"); return;}
already_done=true;
regMenu();
GM_addStyle2(".putToEnd {position:relative}", "putToEnd");
pagelen=$(document).height();
bodymsg();
if (google) handleGoogle();
else putAtEndAndCollimate("main"); // DDG and youtube
//noFlicker(); //clears blank no flicker div.
if (youtube) {
$(document).click(function(e){
var text=$(e.target).parents(".filter-col").find("h4").text();
if (/sort/i.test(text)) sorted_page=true;
});
$('[aria-label="Search filters"]').click(); //let filter=$("a.filter").get().find(ael=>/relevance/i.test(ael.textContent)); //if(filter) filter.href+="&search_sort=relevance";
setTimeout(x=> {
var as=$("a").get().find(el=>/relevan/i.test(el.textContent.trim()));
if(as) as.href+="&search_sort=relevance";
else console.log("At youtube no filters to fix.");
},0);
$('[aria-label="Search filters"]').click();
}
log("DGY main done.");
// },0);
blockDomains();
setTimeout(x=>$(window).scrollTop(scrollPos),250); //restores
} catch(e){console.log("Error in main",e,e.stack);}}
function bodymsg(msg) {
var b=$("body");
if(!msg) {
b.attr("dgy-msgs","[]");
console.log("insertPageFunc:",typeof insertPageFunc, typeof removeIdClass);
insertPageFunc(function bodymsg() {
console.log("DGY stored messages:");
JSON.parse($("body").attr("dgy-msgs")).forEach(el=>console.log(el));
});
}
else {
prev_msg_ar=JSON.parse(b.attr("dgy-msgs"));
prev_msg_ar.push(msg);
b.attr("dgy-msgs",JSON.stringify(prev_msg_ar));
}
}
function blockDomains() { // to specified: <span class="result__url__domain">experts-exchange.com</span>
// ancestor: <div data-nir="1" class="result results_links_deep highlight_d" id="r1-1"><div class="result__body links_main links_deep"><h2 style="margin: 0px;" class="result__title"><a href="http://www.experts-exchange.com/questions/21946163/Cisco-command-for-changing-subnet-mask.html" class="result__a"><b>Cisco</b> command for changing <b>subnet mask</b> - Experts-Exchange</a><a style="position: relative;" href="http://www.experts-exchange.com/questions/21946163/Cisco-command-for-changing-subnet-mask.html" class="result__check"><span class="result__check__tt">Your browser indicates if you've visited this link</span></a></h2><div class="result__snippet">Hi, I have a <b>Cisco</b> 1600 series <b>router</b> and I need to <b>change</b> the <b>subnet mask</b> from 25 to 24 bits. ie 172.24.224.1/25 to 172.24.224.1/24. Can someone show me the command ...</div><div class="result__extras"><div class="result__extras__url"><span class="result__icon"><a title="Search domain www.experts-exchange.com" href="/?q=cisco%20router%20change%20%22subnet%20mask%22+site:www.experts-exchange.com"><img src="//icons.duckduckgo.com/ip2/www.experts-exchange.com.ico" class="result__icon__img" title="Search domain www.experts-exchange.com" height="16" width="16"></a></span><a href="http://www.experts-exchange.com/questions/21946163/Cisco-command-for-changing-subnet-mask.html" class="result__url"><span class="result__url__domain">experts-exchange.com</span><span class="result__url__full">/questions/21946163/Cisco-command-for-chan...</span></a></div><a class="result__menu" title="Search domain www.experts-exchange.com" href="/?q=cisco%20router%20change%20%22subnet%20mask%22+site:www.experts-exchange.com">More results</a></div></div></div>
console.log("Blocking domains",blocked_domains);
blocked_domains.forEach(function(v, i, ar){
console.log("check for domain:",v); //var span=$("span.result__url__domain:contains("+v+")");
var jqincantation="[data-domain]:contains("+v+")";
var div=$(jqincantation);
console.log("Got div",div, "from jqincantation",jqincantation); //span.closest(".result").remove();
div.remove();
});
}
function putAtEndAndCollimate(from) {
//console.log("putAtEndAndCollimate from:"+from+", iframe: "+iframe,"indiv_res_selector",indiv_res_selector,"results_list_selector",results_list_selector);
pageLoaded=true;
if (duck) { //////duckduckgo putatend ids
snippetFontSize();
if (ducklite) {
//$("table").wrapAll("<div id="+results_list_selector.substring(1)+"></div>");
var c=$(".result-snippet:first").closest("table");
//c.attr("id",results_list_selector.substring(1)); //set tbody to #links id.
results_list_selector="table";
var tb=c.find("tbody:first");
var fourths=tb.find("> tr:nth-child(4n+1)"); //1st of each set of 4.
//f.find("+ tr + tr + tr").addClass("sib3")
fourths.addClass("fourthform");
fourths.each(function(){
var group4=$(this).add($(this).find("+ tr,+ + tr, + tr + tr + tr")); // add three next neighbours "+" is direct net sib, "~" is general next sib.
group4.wrapAll("<div class='"+duckresultsclass+" dgy'></div>");
});
$(".dgy>:nth-child(4)").remove();
}
if ($(results_list_selector).length==0) {
console.info("No #links for duckduckgo @"+location.href);
return;
}
fixCss(results_list_selector, "z-index","17");
fixCss(".result--more, .result--more__btn",null,"position: absolute;bottom:0;", true);//loads more
$(".result--more").addClass("DGYabs");
$(".result--more").click();
var zero="#zero_click_wrapper";
//zero.css({maxHeight: "unset",fontSize:"x-small"});
rm(zero);
//$(indiv_res_selector).eq(0).before(zero);
//putToEnd(".result--more");
fixCss("#zci-videos","display","none",true,"yt-guide");
putToEnd(".results--sidebar");
putToEnd(".module--news");
putToEnd(".results--ads");
putToEnd("div.module");
putToEnd(".related-searches");
fixCss("#links_wrapper","padding-left","20px");
fixCss(".result__check","position","relative");
fixCss(".results--sidebar",{top:50,right:50,zIndex:999});
fixCss($(".results--sidebar").parent(),{poistion:"static"});
fixCss(".link-text", "font-size","80%");
fixCss(".results__title","margin","0");
putAtEnd("ads");
putAtEnd("side");
rm("#side");
rm("#feedback");
$(".result-sponsored").closest("."+duckresultsclass).addClass("duckad");
fixCss(".result--sep","display","none", true);
putAtEnd("web-result-sponsored",0,0,true);
putToEnd(".duckad");
putToEnd(".sponsored");
putToEnd(".badge-link");
fixCss("#logo", "margin", "5px 10px -5px 10px");
fixCss("#search_form_homepage", "margin","10px 0px 14px 0px");
fixCss("#content",{padding:0});
fixCss("#content_wrapper",{margin: 0,padding:0}); //addEventListener("resize", function(){
fixCss(".large",{fontSize:"100%"});
fixCss(".snippet, .url",{fontSize:"80%"});
fixCss(".result__title","margin","0");
} //end if(duck)
if (youtube) {
log("put to end video-ads ytp-ad-module");
putToEnd(".module--images");
putToEnd(".video-ads .ytp-ad-module");
rm(".ytd-carousel-ad-renderer");
rm(".ytd-horizontal-card-list-renderer");
putToEnd("#guide");
putToEnd(".yt-consent");
rm("paper-dialog",0,true);
rm("iron-overlay-backdrop",0,true);
rm(".td-consent-bump-lightbox");
rm("#consent-bump");
//putToEnd("#guide-inner-content");
putToEnd("#subscribe-button","delete");
$("ytd-channel-renderer").remove();
putToEnd("#ticker"); putToEnd(".style-destructive");
putToEnd("ytd-movie-renderer");
if ($(results_list_selector)[0]) {
putAtEnd("feed-pyv-container");
putAtEnd("feed-item-dismissable");
//doubleAct();
setTimeout(doubleAct,2000);
function doubleAct() {
putAtEnd ("ytd-mini-guide-renderer");
//putAtEnd("ytd-item-section-renderer");
//putAtEnd("ytd-continuation-item-renderer");
window.scrollTo(1,0);
console.log("doubleAct");
}
putAtEnd("branded-page-v2-secondary-col"); //removes main promoted/popular vid.
putAtEnd("ticker");
putToEnd("#ticker-content");
putToEnd(".pyv-afc-ads-container");
putToEnd(".signin-container");
putToEnd("#yt-masthead-signin");
putToEnd(".alerts-wrapper");
putToEnd("#yt-consent-dialog");
fixCss("#content","width" ,"100%"); //rejigs shape
rm("#appbar-guide-menu"); // box on left col.
fixCss(".yt-lockup-badges","margin",-4);
fixCss(".search-pager",{width:"100%",float:"left"});
fixCss("#page-manager.ytd-app",{marginTop:25});
// fixCss("yt-next-continuation",{display:"inline-block"});
$("body").addClass("DGYbody");
fixPageLinks();
}
}//end if youtube
console.log("collimate cols, from:"+from+", cols:"+columns+", no of cols: "+no_of_cols+ ", list id: "+results_list_selector);
var list=$(results_list_selector); // #search-results, #center_col, or #links
//console.log("Container is ",list.length,$(results_list_selector),results_list_selector, "No. of results under it:",$(indiv_res_selector).length,indiv_res_selector,$(indiv_res_selector));
if (!list.length || !$(indiv_res_selector).length) {
console.info("DGY.js. No results/list for "+$(results_list_selector).length,$(indiv_res_selector).length);
//if (from != "frtout") setTimeout(collimate,200, "frtout");
//noFlicker();
return;
}
collimate("putAtEndAndCollimate");
var page=document.getElementById("page");
if (page) page.setAttribute("style", "margin-left: 5px ! important");
$("#page").css("padding-left", "10px");
rm("#slim_appbar > *:not(:first-child)",true,true); //.slice(1)
}//end putAtEndAndCollimate
function collimate(from) { try{
//console.log("collimate cols, from:"+from+", cols:"+columns+", no of cols: "+no_of_cols+ ", list id: "+results_list_selector+", indiv_res_selector:"+indiv_res_selector );
if(from=="preform") { // for the 'else' see DGYcolsort far below
console.log("preforming, width",window.innerWidth); //", list",list.length,$("#guide").length);
if(youtube) {
fixCss("#guide","display","none",true,"yt-guide");
//fixCss("ytd-movie-renderer","display","none !important",true,"yt-ytd");
//fixCss("ytd-movie-renderer","display","list-item !important",true,"yt-ytd");
//fixCss("ytd-movie-renderer","float","left !important",true,"yt-ytd2");
fixCss(results_list_selector,"column-count",no_of_cols||2,true,"dgy-colcnt"); // Is removed later.
return;
}
if(ducklite) { fixCss(".result--more",null,"position:absolute;bottom:0;",true);
return; } //indiv_res_selector+=",td"; //fixCss("#spinnerContainer","display","none",true); // if(youtube)
GM_addStyle2(indiv_res_selector+" { max-width:"+(0.4*window.innerWidth|0)+"px;} "
+"#page-manager {margin-left:0;} "
+"ytd-search[center-results] > #container.ytd-search { justify-content:left;"
+" -webkit-justify-content:left; margin-top:4px;} " // display-block
,"preform");
GM_addStyle2(indiv_res_selector
+"{ display: list-item;" //inline-block; //inline-table; " //table;inline "
+"float: left;"
+"text-overflow:ellipsis;overflow:hidden; "
+"clear:none !important;"
+"} ","iressel1");
GM_addStyle2(indiv_res_selector+" *:not(img) { " //+":nth-child(2n+1) * { "
+"text-overflow:ellipsis; " // overflow:hidden; "
+"vertical-align: top;"
+"} ","iresselnot1");
GM_addStyle2(results_list_selector+" { min-width:"+(window.innerWidth|0)+"px;} ","reslistsel");
return;
} //from preform
if (! columns || no_of_cols<2) {
return;
}
if(youtube) {
log("Collimate adter preform",$(indiv_res_selector),$(results_list_selector));
log("css id yt-ytd2",$("#yt-ytd2")[0], "BADges:",$("[id=badges]").length);
$("#dgy-colcnt").remove();
fixCss("[id=badges]","display","none", true, "bdg22");
fixCss(indiv_res_selector+" paper-button","display","none", true, "pb22");
//$("[id=badges]").remove();
log("head is ",$("head"), "bgg id",$("#bdg22"));
let isScrolling;
$(document).on("scroll keydown",function(e) {
//console.log("key",e.key);
if(e.type=="scroll")
allButLast();
return;
//clearTimeout( isScrolling ); isScrolling = setTimeout(()=>{ console.log("scrolled"); allButLast(); },50);
});
var inds=$(),lastOne=$();
var orig_indiv_sel=indiv_res_selector;
function allButLast() {
var diff=$(orig_indiv_sel).not(inds);
//console.log("#diff:"+diff.length+"\nLast one:",diff.last()[0]);
if(diff.length) {
//lastOne.removeClass("dgy-end-res").addClass("dgy-indiv-res");
lastOne.toggleClass("dgy-end-res dgy-indiv-res");
diff.addClass("dgy-indiv-res");
lastOne=diff.last();
//lastOne.removeClass("dgy-indiv-res").addClass("dgy-end-res");
lastOne.toggleClass("dgy-indiv-res dgy-end-res");
inds=inds.add(diff);
} else console.log("no diff");
//console.log("#.dgy at end",$(".dgy-end-res").length, "#inds",inds.length,"total #indivs",$(orig_indiv_sel).length);
}
allButLast();
indiv_res_selector=".dgy-indiv-res";
GM_addStyle2(".dgy-end-res { clear:both; bottom:0; }","endres");
}
var list=$(results_list_selector); // #search-results, #center_col, or #links
var full_reses=""+(indiv_res_not_padded_out||indiv_res_selector);
//console.log("Container is ",list.length,$(results_list_selector),results_list_selector, "No. of results under it:",$(indiv_res_selector).length,indiv_res_selector,$(indiv_res_selector));
var winWidth=window.innerWidth-(plat_chrome?0:100);
var msmargin=(duck ? "5px" : "1px");
list.addClass("DGYcolsort");
if (duck) { ////////////////////////////// duckduckgo cols \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
//indiv_res_selector="."+duckresultsclass;
//fixCss(indiv_res_selector, "padding","10px 0px 10px 5px"); //needs 'px'es
GM_addStyle2(".result__check { display:none;}","dcheck");
if (from && from[0]=="t"){
var numbered=document.getElementsByClassName("icon_fav2");
numbered=$(".icon_fav, .icon_fav2");
for(var i=0;i<numbered.length;i++) {
var el=numbered[i].firstElementChild;
if(el) el.innerHTML = "<font size=1 style='opacity:0.4'>"+(i+1)+")</font>" + el.innerHTML;
}
}
}//end if (duck) /////////////////////\\\\\\\\\\\\\\\\\\\\
var margin=20,padding=0, no_to_packin=0, minHeight=youtube?120 : duck? 120 : 30;
list.css({"left": 20, "box-sizing":"border-box"}); //, "padding":0, "border":0});//box-sizing is not inheritable.
fitting=calcFitting(list, no_of_cols, no_to_packin, margin, minHeight); //(youtube?120:30));
//fitting={"width":600, "height":300, "winwidth":window.innerWidth, "quantity":6, "margin":10 };
if(youtube) GM_addStyle2("#page-manager {margin-left:0;} ","ytpm"
// +"ytd-search[center-results] #container.ytd-search {display:block;}"
);
if (duck) { fitting.width-=2; fitting.height-=2;} // setTimeout(x=>$(indiv_res_selector).css({paddingTop:"5px"}),1000); }
GM_addStyle2(indiv_res_selector + "{ box-sizing:border-box;"
+"margin: 0px "+fitting.margin+"px "+fitting.margin+"px 0px !important;"
+"padding: "+(duck?0:0)+"px "+padding+"px "+padding+"px 0px;"
//+"border: 0 !important;"
//+"border: 1px solid red;" //transparent
+" }","irsbox");
list.css({"max-width":fitting.winwidth, "min-width": fitting.winwidth, "padding":0});
//list.css({margin: (fitting.margin||padding)+"px 0px 0px "+(fitting.margin||padding)+"px"}); // margin of a container pushes contents from its edge.
//list.css({fontSize:fitting.height/4|0});
//console.log("add styles els max width: ",fitting.width);
GM_addStyle2(indiv_res_selector
+"{ display: list-item;" //inline-block; //inline-table; " //table;inline "
+"float: left; max-width: "+(fitting.width)+"px;"
+"min-width: "+(fitting.width-5)+"px; "
+"width: "+(fitting.width-5)+"px; "
+"text-overflow:ellipsis;overflow:hidden; "
+"clear:none !important;"
+"} ","iressel");
GM_addStyle2(indiv_res_selector+" *:not(img) { " //+":nth-child(2n+1) * { "
+"max-width: "+(fitting.width)+"px;"
+"text-overflow:ellipsis; " // overflow:hidden; "
+(!duck?"vertical-align: top;":"")
+"} ","iresselnot");
GM_addStyle2(full_reses+"{"
//+"max-height: "+fitting.height+"px;" // no height makes gaps but with height cuts longer blurbs short.
+(!false?"min-height: "+fitting.height+"px;":"")
+"}", "fullres");
//console.log("Added col style for "+$(indiv_res_selector).length+" elements, width:"+fitting.width+", h: "+fitting.height+" indiv_res_selector:"+indiv_res_selector+", list ww:"+fitting.winwidth+", list: "+list+", results lists:"+list.length);
document.body.style.wordWrap="normal";
} catch(e){console.log("Error in collimate",e,e.stack);};
} //collimate()
function handleGoogle() {
log("handleGoogle start");
inhibitGoogleTracker();
var matched;
var change, dest1, dest=""+document.location;
dest1=dest;
$(".g a").removeAttr("onmousedown"); //Remove redirect to yt prior to going to href.
if (vgoogle) {
if (/so=[^1]/.test(dest)) change=true;
if ( ! /so=/.test(dest) ) change=true;
dest=dest.replace(/&so=\d/g, "");
if ( dest && ! /&so=/.test(dest)) dest=dest.replace(/\?/,"?so=1&");
if (columns) {
if ( /view=[^1]/.test(dest)) change=true;
if ( ! /view=/.test(dest) ) change=true;
dest=dest.replace(/&view=\d/g, "");
if ( dest && ! /&view=/.test(dest)) dest=dest.replace(/\?/,"?view=1&");
}
} else
if (google) {
if (goo_images) {
setTimeout(function(){
var links=$("a.rg_l, a.rg_fbl");
links.each(convertHref);
},1000);
} //else mkLinksDirect($(".g").find("a:first"));
if ( ! /resnum=0/.test(dest) ) {
dest=dest.replace(/&resnum=\d/g, "&resnum=1");
dest=dest.replace(/&tbs=(?!sbd)/g, "&tbs=sbd:1,");
if ( dest != dest1) change=true;
}
} //elseif(google)
else { //else if vgoogle
var sel=uwin.document.sFilter.maintab;//aol
if (sel.selectedIndex!=3) {
sel.selectedIndex=3;
sel.onchange();
}
} ///end if/elses block
if (change && ! /start=/.test(dest) )
document.location=dest;
$("#tads").remove();
$("#mbEnd").remove();
$("g-section-with-header").remove();
$("ytd-horizontal-card-list-renderer").remove();
results_list_selector="#center_col";
if (goo_cse) {
results_list_selector="div.gsc-results";
$("a[data-cturl]").each(function(){
var href=$(this).data("cturl");
//log("got href:"+href);
href=href.split(/url\?q=|&/)[1];
this.dataset.cturl=href; //cant use jquery on data.
//log("set to:"+this.dataset.cturl);
});
fixCss("div.gsc-result *:not(img)","padding-bottom",7);
}
if (google) { //not vgoogle
log("no vgoogle");
var tbpi=document.getElementById("tbpi");
if (tbpi && /^\W*Hide/.test(tbpi.textContent) && typeof unsafeWindow.google.Toolbelt == "function")
unsafeWindow.google.Toolbelt.toggle();
pagelen=$(document).height()/2;
putAtEnd("rhs");
putAtEnd("wmxmsg");
putToEnd("#bottomads");
putToEnd(".gb_Rb"); //gb_2c, gb_ac, gb_g
putToEnd("#gbw");
putToEnd("#taw");
rm("DIV#lb");
rm("#footer");
putToEnd(".kno-ftr");
putToEnd("iframe",null,2000);
fixCss("html","overflow","scroll");
// var d=$(document);
// d.on("keydown", function(e){
// var alpha=window.innerHeight, aswitch={PageDown:alpha,PageUp:-alpha,ArrowDown:alpha/50,ArrowUp:-alpha/50,End:99999};
// var top=d.scrollTop();
// console.log("Caught event type:",e.type,"key:",e.key,"top",top,"asw",aswitch[e.key]);
// d.scrollTop(top+aswitch[e.key]);
// });
rm("[role=dialog]");
rm("div._OKe");
rm("div._tN _fXg");
rm("#botstuff");
putToEnd(".gsc-adBlock");
putToEnd(".gsc-adBlockNoHeight");
rm("._cwc");
rm("#cnso, #cnsi, #taw",true, true); //rm("#cnsi",true,true);
$(".ads-ad").remove();
fixCss("#res",{margin: 0,padding:0});
fixCss("#rhs","margin-left",0);
putToEnd("#rhscol");
fixCss("g-flippy-carousel",{left:5, width:"95%"});
$(".g g-flippy-carousel").closest(".g").addClass("card-section");
$(".bl").remove();
fixCss("g-left-button", "left",-18);
fixCss("g-right-button", "margin-top",-40);
fixCss("#foot","float","left");
fixCss("#iur","display","inline-block");
fixCss("div.action-menu-panel", "top", "-20px", true); //action-menu-panel
fixCss("div.action-menu-panel", "max-height", "55px", true); //action-menu-panel
if (goo_images) return true;
collimate("handleGoogle"); /////////////// >>>>>>>>>>>>>>>>>>>>>>
if (fitting) fixCss("#imagebox_bigimages", {maxHeight:"100%"}) //fitting.height*1.5});
} //end if (google)
else if (vgoogle) {
var tbh=document.getElementById("tbt-hide");
if (tbh && ! invisible(tbh)) {
clickElem(tbh);
}
var putatend=document.getElementById("suggestion-bottom");
if (putatend) document.body.appendChild(putatend);
var putatend=document.getElementById("youtube-text-container");
if (putatend) document.body.appendChild(putatend);
putatend=document.getElementsByClassName("message");
for(var i=0; i < putatend.length; i++) document.body.appendChild(putatend[i]);
}
window.scrollBy(0,1); window.scrollBy(0,-1);
return true;
} //end handleGoogle;
function putAtEnd(idOrClassOrObj, class_name, obj, place) { //id parameter can also be a class name.
if (!idOrClassOrObj.charAt) { return putAtEnd("","",idOrClassOrObj, null, place);}
var putatend=$(idOrClassOrObj?"#"+idOrClassOrObj:"")[0]; // try as id
if (putatend)
append(putatend, place);
else {
if (idOrClassOrObj) putAtEnd("", idOrClassOrObj, null, place);// try it as a class name
var i=0;
if (class_name) {
putatend=$("."+class_name);
for(; i < putatend.length; i++) append(putatend[i],place);
if (i) return true;
}
if (obj) { append(obj, place); return true;}
}
function append(el) {
//log("putAtEnd #"+el.id+", class:"+el.className+", "+el+(place?" placed":""));
if ( ! place) {
document.body.appendChild(el);
el.style.setProperty("position","relative","important");
}
else {
var p=document.querySelectorAll(results_list_selector)[0];
if(p) p.appendChild(el);
}
$(el).addClass("putAtEnd");
} //append()
} //putAtEnd()
function putToEnd(selector,del,repeat) {
var jels=$(selector);
if(selector[0]=="#") jels=$("[id="+selector.substr(1)+"]");
log("putToEnd "+selector,jels.length);
if(del) jels.remove();
else jels.appendTo(document.body);
jels.addClass("putToEnd");
jels.css({position: "relative",opacity:0.23});
if (repeat) setTimeout(putToEnd,repeat,selector,del);
}
function fixPageLinks() { //Fix links to page 1,2 3...<next>, at bottom of page.
if (!sorted_page) return;
var pagers=$(".yt-uix-pager-button"), href=location.href;
pagers.each(function(){
var h=this.href, search_value;
if (/search_sort/.test(h)) return false;
search_value=href.split("search_sort=")[1].split("&")[0];
this.href=h.replace("&","&search_sort="+search_value+"&");
});
if (/search_sort/.test(href)) {
var search_value=href.split("search_sort=")[1].split("&")[0];
$("#masthead-search-term").after("<input id=dgymst type=hidden name=search_sort value="+search_value+">");
// window.addEventListener("click",function(e){
// if ($(e.target).is("span.yt-uix-button-content"))
// noFlicker(true);
// });
}
}//fixPageLinks()
// function noFlicker(start) {
// //log("noflick "+!!start+" parent len:"+$("#noFlicker").parent().length);
// if (noFlicker.disabled) return;
// if (start) {
// if (!noFlicker.el) {
// noFlicker.el=document.createElement("div");
// document.body.insertBefore(noFlicker.el,document.body.firstChild);
// noFlicker.el.id="noFlicker";
// noFlicker.el.style.cssText= "z-index:2999999999; padding-right:2000px;padding-bottom:2000px; position:absolute; background-color: white;";
// } else noFlicker.el.style.setProperty("display","block"); //$(noFlicker.el).prependTo("body");
// }
// else
// setTimeout(function(){$(noFlicker.el).css("display","none");},100); //put to end of exec queue.
// }
function GM_addStyle2(style, id) { //precedence: !important, as tag attribute, more specific selectors, <script> elements later in doc.
let el = document.createElement('style');
el.setAttribute('type', 'text/css');
el.textContent = style;
if (!document.body) {
console.log("No body, head?",document.head,"adding id:",id);
if(document.head)
document.head.insertBefore(el,document.head.firstChild);
else console.log("Cant add css ",style);
}
else document.body.appendChild(el);
if(id) el.id=id;
//console.log("added style",style,"id",id, "is",el.id);
}
function fixCss(sel, name_Or_obj, value, perm, id) { //allows logging.
//log("fixCss:"+sel+", "+name_Or_obj+", "+value+" #els:"+$(sel).length);
if (value !== null) {
if (perm)
if(name_Or_obj)
GM_addStyle2(sel + "{ "+name_Or_obj+":"+value +"}",id);
else GM_addStyle2(sel + "{ "+value +"}",id);
else
$(sel).css(name_Or_obj,value); // a name
}
else
$(sel).css(name_Or_obj); //an object;
}
function rm(sel, hide, perm){
//log("rm "+$(sel).length+" "+sel+" hide:"+hide);
if($(sel).length) bodymsg("rm'ed "+sel);
if (perm) GM_addStyle2(sel+" {display:none !important;}","selrm");
if (hide) $(sel).css("display","none");
else $(sel).remove();
}
function insertPageFunc(func) {
$("head").prepend("<script>"+func.toString()+"</script>");
}
function removeIdClass(id, class_name) {
var putatend;
if (id) {
putatend=document.getElementById(id);
if (putatend) putatend.parentNode.removeChild(putatend);
}
if (class_name) {
var el,i=0,els=document.body.getElementsByClassName(class_name);
while (els.length){
el=els[i];
el.parentNode.removeChild(el);
}
}
}
function regMenu() {
// if (!plat_chrome)
//console.log("regMenu this:",typeofObj(this));
submenuModule.register("DGY columns & Sort by Date");
//try { submenuModule.register("DGY columns & Sort by Date"); } catch(e) {}; // if site down and update needed?
// GM_registerMenuCommand( "========Sort By Date======", function(){});
registerMenuCommand("Youtube sort by date -- Toggle collimation ["+!!columns+"].", function() {
columns^=true;
GM_setValue("columns", columns);
alert("Collimation "+(columns?"on":"off")+", at "+location+", reload to see effect.");
});
registerMenuCommand("Set number of columns ["+no_of_cols+"]...", function() {
columns^=true;
var reply=prompt("Set number of columns to display ( >0 )",no_of_cols);
reply=parseInt(reply);
if (reply > 0) GM.setValue("no_of_cols", reply);
});
if (duck) registerMenuCommand( "Change result snippets' font size", function() {
var cv=snippetFontSize(null,true);
var res=prompt("Give below the new font size in percent, use zero to reset.",cv).replace(/\D*/g,"");
snippetFontSize(res);
});
registerMenuCommand( "Don't show results from...", function() {
sprompt("Enter name of server domain whose results\nyou no longer wish to see, eg, codeburst.io "
+"\n\t\tCurrent set of domains set to not show up in results:\n"+blocked_domains.join("\n")
+"\nIf domain entered is already on our list it will get removed.",
"", function(reply) {
console.log("Dont show resuklts from, reply:",reply);
if (!reply) return;
var already_domain_pos=blocked_domains.indexOf(reply);
if (already_domain_pos==-1)
blocked_domains.push(reply);
else
blocked_domains=blocked_domains.splice(already_domain_pos,1);
GM.setValue("blocked_domains",blocked_domains);
console.log("Saved blocked_domains:",blocked_domains);
blockDomains();
});
});
//GM_registerMenuCommand( "_____________________________________", function(){});
}
function convertHref(){ //from an $("a").each(), a has .rg_l , takes direct to image not via yt.
// .find("img").removeAttr("jsaction");
//console.log("convertHref ",this);
fixhref(this);
if (!convertHref.listener) {
//convertHref.listener=true;
// nodeMutationListener(document, "a.rg_l", function(nodes) { //document is target since lower ones get renewed.
// //log("New link(s) <a> at gooimg, mutated:"+nodes.length+" "+nodes[0].parentNode.dataset["ri"] +" th: "+nodeInfo(nodes[0]));
// for(var i=0; i<nodes.length;i++)
// fixhref(nodes[i]);
// });
}
function fixhref(el) {
$(el).removeAttr("jsaction"); //prevents http calls to google when hovering over image.
var ref=decodeURIComponent(el.href);
var pindex=ref.indexOf("&imgrefurl=",1);
if (pindex==-1) pindex=ref.indexOf("&imgurl=",1);
if (pindex==-1) return;
var ref2=ref.substring(pindex+11);
ref2=ref2.replace(/&.*/,"");
//console.log("fixhref, change ",el.href, "to",ref2);
$(el).addClass("dgy-href-direct");
el.href=ref2;
}
//that.attr("oldhref",ref);
//log(convertHref.count+" set to "+ref2+"\t.Was:"+ref);
//window.status="href fix:convertHref:"+convertHref.count;
};
function mkLinksDirect(links) { //capture events so google doesn't send them to google.com.
if (!mkLinksDirect.ev) { // && false) {
mkLinksDirect.ev=true;
function catchEvent(type,obj){
if (!obj) obj=window;
//log("Catch "+type+", on:"+obj);
obj.addEventListener(type, function(e){
var parent=""+e.target.parentNode, src=e.target.src||"", text=e.target.textContent||"";
if (src) src=src.substring(0,40);
if (text) text=text.substring(0,40);
// log(" Event: "+e.type+", currentTarget:"+e.currentTarget+", target:"+e.target+", parent:"+parent.substring(0,40)
// +", cancelable:"+e.cancelable+", eventPhase:"+e.eventPhase
// +", bubbles:"+e.bubbles+", listener:"+(obj||window)
// +", src:"+src+", text40:"+text+", href:"+e.target.href
// );
if (/click/.test(e.type))
if (e.target.href) {
var href=decodeURIComponent(e.target.href), dhref;
dhref=href.split("&url=")[1]||"";
dhref=dhref.split("&")[0];
if (dhref) href=dhref;
if (href && e.button==0) document.location=href;
else if (href && e.button==1) window.open(href, '_blank');
}// end if(href)
else return; //allow click through if not going to a href.
if (e.target.value===undefined) {
//log("Blocking "+e.type+" "+e.target+" "+typeof e.target.value);
e.preventDefault(); e.stopPropagation(); e.stopImmediatePropagation();
}
},true);
obj["on"+type]=function(e){
//log("--"+e.type);
};
}//catchEvent()
// ar=["click", "blur", "focus" , "unload","pagehide", "popstate",
// "pageshow","focus","mousedown","message","open","mouseup","toggle",
// "resize", "visibilitychange", "orientationchange", "touchstart", "mouseup",
// //"webkitvisibilitychange",
// "DOMFocusIn", "DOMFocusOut" ];
//
//clicks, focus, blur, visibilitychange and resize events: google sends marketing data etc. back to google.com. It also send a message every 30 secs to google.
var ar=["click","blur","focus", "visibilitychange", "resize"];
// for (i in ar) catchEvent(ar[i]);
// for (i in ar) catchEvent(ar[i], document);
//var html=document.documentElement; //also used by google.
}
}
function inhibitGoogleTracker() {
var i, end_id=setInterval(null), begin_id=inhibitGoogleTracker.si_begin;
if (!inhibitGoogleTracker.si_begin) {
inhibitGoogleTracker.si_begin=setInterval(null);
navigator.__proto__.sendBeacon=function(){ log("Attempt to sendbeacon");return true;};
}
else {
for (i=begin_id; i<=end_id;i++) setTimeout(function(){
clearInterval(i); //google sends back marketing messages with setInterval.
//console.log("Cleared intervals:"+begin_id+"-"+end_id);
},10000);
// $("form").each(function(){
// this.addEventListener("submit", function(){log("Submit or not?")});
// this.addEventListener("blur", function(){log("blur form or not?")});
// this.addEventListener("focus", function(){log("focus form or not?")});
// });
// var setint=window.setInterval;
// window.setInterval=function(f,t){
// //log("setInterval "+f+" "+t);
// setint(f,t);
// };
}
}
function invisible(elem){ return getComputedStyle(elem, null).display=="none"; }
function clickElem(elem) {
var pseudo_event = window.document.createEvent("MouseEvents");
// type, canBubble, cancelable, view, detail, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey, button, relatedTarget)
pseudo_event.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
elem.dispatchEvent(pseudo_event);
}
function getById(id) {
var el=window.document.getElementById(id);
return el;
}
function justify (max_line, char) {
if (this.length<=max_line) return this;
var res="", last_newline_pos=0;char=char||" ";
this.split(char).forEach(function(v, i, ar){
res+=v;
if (i==ar.length-1) return;
if (res.length-last_newline_pos >= max_line) {
res+=(/\s/.test(char)?"":char)+"\n"; last_newline_pos=res.length; }
else res+=char;
});
return res;
};
function vscroll(y) {
var factor=1;
if (y>0) for (; y >= 0; y--)
window.scrollByLines( 1);
else for (; y <= 0; y++)
window.scrollByLines( -1);
}
function childids(el) {
roll="";
if (el.children) {
for (var i=0;i<el.children.length;i++)
if (el.children[i].id)
roll+=el.children[i].id+" ";
}
if (roll) roll="childids:"+roll;
return roll;
}
function calcFitting(container, ncols, quantity, margin, minHeight) {
//console.log("calcFitting"+JSON.stringify(arguments));
var w, ww=$(window).width()-container.position().left, h, wh=$(window).height(), device_size,
total_margins, area, colmratio, nrows, rowmratio, new_margin=margin;
ww*=0.95; //prevent scrollbar
if (!quantity) {
quantity=device_fit()*0.8; // box sizing by default is content-box, padding, border and margin are excluded from width/height values (& their max'es), "box-sizing: border-box" includes all except margin.
new_margin=margin*(quantity/margin); //eg, m=20 & q=20 gives factor = 1, margin reduced smaller for q.
}
if (!minHeight) minHeight=10;
while (quantity>=2) {
setDims();
//log("Fitting "+(quantity|0)+" within container of WxH:"+(ww|0)+"x"+(wh|0)+", try width:"+(w|0)+", height:"+(h|0)+", margin:"+(new_margin|0)+", device:"+device_size); //a container, eg, table, despite 'box-sizing:' its size is affected in reverse by margin size and not by padding size (box-sizing: excludes only margin fro size)
if (h>=minHeight) break;
quantity=quantity*.8|0;
new_margin=margin*(quantity/margin);
}
function setDims() {
area=ww*wh; colmratio=(ncols+1)/ncols; nrows=quantity/ncols; rowmratio=(nrows+1)/nrows;
total_margins=(ncols+1)*new_margin;
w=(ww-total_margins)/ncols;
h=((area/quantity)/(w+colmratio*new_margin))-rowmratio*new_margin;
}//setDims()
function device_fit() {
var dw=innerWidth, dh=innerHeight;
device_size=dw*dh/100000;
return Math.exp(device_size*.0930525)*6.17212;
}
//console.log("fitting:", {"width":w|0, "height":h|0, "winwidth":ww|0, "quantity":quantity|0, "margin":new_margin|0 });
return {"width":w|0, "height":h|0, "winwidth":ww|0, "quantity":quantity|0, "margin":new_margin|0 };
} //calcFitting()
function snippetFontSize(res,currentvalue) {
if (currentvalue) return ddgcrsfs_glob||74; //GM_getValue("ddgcrsfs",74);
if (res==undefined ) {
var ddgcrsfs=ddgcrsfs_glob; //GM_getValue("ddgcrsfs",false);
if(ddgcrsfs) GM_addStyle2( ".result-snippet { font-size:"+ddgcrsfs+"%;}","ddgcrsfs");
} else if (res!=0) {
GM_addStyle2( ".result-snippet { font-size:"+res+"%;}","ddgcrsfs");
GM.setValue("ddgcrsfs",res);
} else if (res==0) { $("#ddgcrsfs").remove(); GM.deleteValue("ddgcrsfs"); }
}
function typeofObj(unknown_obj){ return ({}).toString.call(unknown_obj); }
function sprompt(pretext,initval,cb,cancelbtnText="Cancel",okbtnText="OK") { // "Cancel" has reply of false or null (if a prompt), "OK" gives reply of true or "", Escape key returns undefined reply. undefined==null is true. but not for ""
var input_tag, input_style="width:80%;font-size:small;";
var confirm_prompt=initval===undefined;
if (!confirm_prompt) input_tag=initval.length<50 ? "input" : (input_style="width:95%;height:100px;","textarea");
if (!cb) cb=x=>x;
var content=$("<div class=sfs-content tabindex=2 style='outline:none;white-space:pre-wrap;'>"
+"<div style='max-height:"+(window.innerHeight*0.72)+"px;'>"+pretext+"</div>"
+(initval!==undefined ? "<"+input_tag+" spellcheck='false' style='"+input_style+"' tabindex='1'></"+input_tag+">":"")+"</div>");
content.find("input:not(:checkbox),textarea").val(initval);
content.resizable();
var sp1=$(document).scrollTop();
var dfunc=content.dialog.bind(content);
var dialog=content.dialog({
modal: true, width:"60%", // position: { my: "center", at: "center center-25%", of: window }, // Greater percent further to top.
buttons: {
[cancelbtnText]: function(e) { if (confirm_prompt) cb(false); else cb(null, $(this).find("input,textarea").val()); dfunc("close"); return false;},
[okbtnText]: function(e) { if (confirm_prompt) cb(true); else cb( $(this).find("input,textarea").val() || ""); dfunc("close"); return false;}
},
close: function(e) { dialog.off("keydown"); $(document).scrollTop(sp1); if (e.key=="Escape") cb(undefined); dfunc("destroy");} // Called from jQ by Escape, trigger with Event("keydown")
}).parent();
if (cancelbtnText==-1) { dialog.find("button").each(function(){ if (this.textContent=="-1") $(this).remove(); }); }
dialog.wrap("<div class=sfs-sprompt></div>"); // allows css rules to exclude other jqueryUi css on webpage from own settings, a
dialog.keydown(function(e){ if (e.key == "Enter" && !/textarea/i.test(e.target.tagName)) $("button:contains("+okbtnText+")",this).click(); });
dialog.css({"z-index":2147483647, position:"fixed", top: "50px" });
dialog.find(".ui-dialog-titlebar").remove(); // No img in css for close 'x' at top right so remove. Title bar not in normal confirm anyhow.
dialog.draggable("option","handle", ".ui-dialog-buttonpane"); //
dialog.resizable();
setTimeout(function(){var ips=dialog.find("input,textarea");if (ips.length) ips.focus(); else content.focus();},100);
return dialog; //.ui-dialog
}
function sconfirm(msg,cb,cancelbtnText,okbtnText) { return sprompt(msg,undefined,cb,cancelbtnText,okbtnText); }
function salert(msg,cb) { return sprompt(msg,undefined,cb,-1,"OK"); }
function chromeInit() {
window.plat_chrome=false;
//if (!this.GM_getValue || "Barychelidae"!=GM_getValue("arachnoidal","Barychelidae")){ //chromium
//if (/Chrome/.test(navigator.userAgent)) {
if (GM=="undefined") {
console.info("DGY userscript in non GM_ mode for chrome/safari etc.",this);
window.plat_chrome=true; window.unsafeWindow=window;
this.GM_getValue=function(a,b) { return localStorage[a]||b; };
this.GM_setValue=function(a,b) { localStorage[a]=b; };
this.GM_registerMenuCommand=x=>null;
this.uneval=function(x) { return "("+JSON.stringify(x)+")"; }; //Diff is that uneval brackets string and json excludes code only data allowed in json.
var xhr_queue=[], xhr=new XMLHttpRequest(), next_inqueue;
xhr.onload=x=> { //arrow function means this remains window not xhr (as a function would).
//console.log("eval in this. this==window?",this==window);
eval.call(this,xhr.response);
if (next_inqueue=xhr_queue.shift()) { xhr.open('GET', next_inqueue); xhr.send(); }
else loader();
};
xhr.onerror=e=>console.log("XHR Error",e);
xhr_queue.push("https://raw.githubusercontent.com/SloaneFox/code/master/gm4-polyfill-1.0.1.js");
xhr_queue.push("https://code.jquery.com/jquery-3.2.1.js");
xhr_queue.push("https://code.jquery.com/ui/1.12.1/jquery-ui.js");
xhr_queue.push("https://raw.githubusercontent.com/SloaneFox/code/master/gm-popup-menus-1.3.6.js");
xhr.open('GET', xhr_queue.shift()); xhr.send();
return true;
} else
return false;
} // chromeInit()