Skip to content

Commit add4776

Browse files
authored
1.0.0
1 parent 48b1019 commit add4776

File tree

2 files changed

+76
-0
lines changed

2 files changed

+76
-0
lines changed

selector.js

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
/*
2+
Package: Dom-Selector
3+
Version: 1.0.0
4+
Author: Shivam Dewangan [https://github.com/Shivamdevs]
5+
License: MIT License
6+
*/
7+
8+
(function () {
9+
function initCode() {
10+
const $ = window.Js;
11+
const selector = $.ce('dom-element-selector.hidden', $.ce('data-selector')).appendTo("body");
12+
const opter = $.ce('dom-element-selector-opter', `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" width="20" fill="currentColor" height="20"><path xmlns="http://www.w3.org/2000/svg" d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM288 176c0-44.2-35.8-80-80-80s-80 35.8-80 80c0 48.8 46.5 111.6 68.6 138.6c6 7.3 16.8 7.3 22.7 0c22.1-27 68.6-89.8 68.6-138.6zm-48 0c0 17.7-14.3 32-32 32s-32-14.3-32-32s14.3-32 32-32s32 14.3 32 32z"/></svg>`).appendTo("body").click(function (){
13+
$(this).toggleClass('opted');
14+
selector.toggleClass('hidden');
15+
});
16+
$(window).mouseover(function () {
17+
if (selector.hasClass('hidden')) return;
18+
selector.addClass('surfing');
19+
}).mouseout(function () {
20+
if (selector.hasClass('hidden')) return;
21+
selector.removeClass('surfing');
22+
}).mousemove(function (eve) {
23+
if (selector.hasClass('hidden')) return;
24+
selector.removeClass('surfing');
25+
selector.find('data-selector').removeClass('offset outset lowset stcset').empty();
26+
const doc = document.elementFromPoint(eve.clientX, eve.clientY);
27+
if (!doc) return;
28+
const rec = doc.getBoundingClientRect();
29+
selector.css({
30+
top: rec.top + 'px',
31+
left: rec.left + 'px',
32+
width: rec.width + 'px',
33+
height: rec.height + 'px',
34+
});
35+
let info = `<span class="node">${doc.nodeName.toLowerCase()}</span>`;
36+
if (doc.classList.value || doc.classList.length) info += doc.classList.value.replace(/ +/g, ' ').split(" ").reduce((acc, cls) => cls && (acc += '<span class="class">.' + cls +'</span>'),'');
37+
if (doc.id || doc.getAttribute("id")) info += `<span class="id">#${doc.id || doc.getAttribute("id")}</span>`;
38+
selector.find('data-selector').html(info);
39+
selector.addClass('surfing');
40+
if (selector.find('data-selector').height() + 100 > selector.height()) selector.find('data-selector').addClass('offset');
41+
let dta = selector.find('data-selector')[0].getBoundingClientRect();
42+
if ((dta.left + dta.width + 15) > window.innerWidth) selector.find('data-selector').addClass('outset');
43+
dta = selector.find('data-selector')[0].getBoundingClientRect();
44+
if ((dta.top - 6) < 0) selector.find('data-selector').addClass('lowset');
45+
dta = selector.find('data-selector')[0].getBoundingClientRect();
46+
console.log((dta.top + dta.height + 15) > window.innerHeight);
47+
if ((dta.top + dta.height + 15) > window.innerHeight) selector.find('data-selector').addClass('stcset');
48+
}).mousedown(function (eve) {
49+
if (selector.hasClass('hidden')) return;
50+
selector.toggleClass('surfing hidden');
51+
opter.removeClass('opted');
52+
console.log(document.elementFromPoint(eve.clientX, eve.clientY));
53+
}).mouseup(function () {
54+
if (selector.hasClass('hidden')) return;
55+
selector.addClass('surfing');
56+
});
57+
$.styleSheet(`dom-element-selector-opter{position:fixed;inset:auto 0 20px auto;background:#fff;padding:5px 10px;border-radius:20px 0 0 20px;box-shadow:-2px 2px 4px 2px #0002;border:1px solid #0004;z-index:9999999999999998;transition:all .2s ease;cursor:pointer;color:#000}dom-element-selector-opter:hover{color:#ff8c00}dom-element-selector-opter.opted{color:#00f;translate:calc(100% + 10px) 0}dom-element-selector,dom-element-selector *,dom-element-selector-opter{box-sizing:border-box;display:block;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Fira Sans','Droid Sans','Helvetica Neue',sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}dom-element-selector{z-index:9999999999999999;position:fixed;top:0;left:0;width:40px;height:40px;background:#2a52be77}dom-element-selector.hidden,dom-element-selector:not(.surfing){display:none}dom-element-selector data-selector:not(:empty){display:flex;align-items:center;flex-wrap:wrap;position:absolute;inset:0 auto auto 0;font-size:14px;font-weight:500;background:#fff;color:#000;padding:6px 18px;margin:6px;box-shadow:2px 2px 4px 2px #0002;user-select:none;border-radius:6px;max-width:calc(100vw - 12px)}dom-element-selector data-selector,dom-element-selector data-selector:not(:empty)>span{white-space:nowrap}dom-element-selector data-selector.lowset{top:100%}dom-element-selector data-selector.outset{right:0;left:auto}dom-element-selector data-selector.offset{translate:0 calc(-100% - 15px)}dom-element-selector data-selector.lowset{translate:0 5px}dom-element-selector data-selector.stcset{position:fixed;top:0;left:inherit;right:inherit}dom-element-selector data-selector span.node{color:purple}dom-element-selector data-selector span.class{color:#00f}dom-element-selector data-selector span.id{color:#ff8c00}`, "head", '[pass-test]');
58+
}
59+
60+
(function () {// load jscript for easier navigation
61+
if (window.Js) return initCode();
62+
const scr = document.createElement('script');
63+
scr.setAttribute('Pass-test', '');
64+
scr.onload = initCode;
65+
scr.src = "https://cdn.jsdelivr.net/gh/shivamdevs/[email protected]/jscript.js";
66+
document.head.appendChild(scr);
67+
}());
68+
}());

selector.min.js

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)