NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name CSS Selectors Sandbox
// @namespace http://jorgecardoso.eu
// @version 0.45
// @description Shows a list of CSS selectors and allows you to test any selector on any site.
// @author jorgecardoso
// @match *://*/*
// @noframes
// @require https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js
// @require https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js
// @icon https://www.google.com/s2/favicons?sz=64&domain=github.com
// @resource style https://cssselectorsdemo.jorgecardoso.repl.co/selectorsmenu.css
// @resource html https://cssselectorsdemo.jorgecardoso.repl.co/selectorsmenu.html
// @grant GM_getResourceText
// @grant GM_addStyle
// @grant GM_registerMenuCommand
// @grant GM_unregisterMenuCommand
// @grant GM_log
// @license MIT
// @updateURL https://openuserjs.org/meta/jorgecardoso/CSS_Selectors_Sandbox.meta.js
// @downloadURL https://openuserjs.org/install/jorgecardoso/CSS_Selectors_Sandbox.user.js
// @copyright 2022, jorgecardoso (https://openuserjs.org/users/jorgecardoso)
// ==/UserScript==
(function() {
'use strict';
let open = false;
let injectedStyle = null;
let windowObjectReference = null;
let openMenuCommand = null;
let closeMenuCommand = null;
registerOpen();
function registerOpen() {
openMenuCommand = GM_registerMenuCommand("Open CSS Selectors Menu", openCSSSelectorsMenu, "o");
GM_log("registered open menu command: ", openMenuCommand);
}
function registerClose() {
closeMenuCommand = GM_registerMenuCommand("Close CSS Selectors Menu", closeCSSSelectorsMenu, "c");
GM_log("registered close menu command: ", closeMenuCommand);
}
function unregisterOpen() {
GM_unregisterMenuCommand(openMenuCommand);
}
function unregisterClose() {
GM_unregisterMenuCommand(closeMenuCommand);
}
function openCSSSelectorsMenu() {
if (open) return;
open = true;
GM_log("Opening CSS Selectors Menu");
injectedStyle = GM_addStyle(GM_getResourceText("style"));
let windowFeatures = "popup,width=300,height=600";
windowObjectReference = window.open("https://cssselectorsdemo.jorgecardoso.repl.co/selectorsmenu.html", "popup", windowFeatures);
GM_log(openMenuCommand);
unregisterOpen();
registerClose();
}
function closeCSSSelectorsMenu() {
if (!open) return;
open = false;
GM_log("Closing CSS Selectors Menu");
//GM_log(in
windowObjectReference.close();
$(injectedStyle).remove();
unregisterClose();
registerOpen();
}
function highlight(selection) {
console.log("Highlighting: " + selection);
var $jquerySelection;
if (! (selection instanceof jQuery) ) {
$jquerySelection = $(selection);
} else {
$jquerySelection = selection;
}
//console.log($jquerySelection);
$("*").removeClass("marching-ants marching");
$jquerySelection.addClass("marching-ants marching");
}
window.addEventListener("message", (event) => {
if (event.origin !== "https://cssselectorsdemo.jorgecardoso.repl.co")
return;
GM_log(event);
switch (event.data) {
case "window closing":
closeCSSSelectorsMenu();
break;
default:
highlight(event.data);
}
}, false);
})();