Skip to content

Instantly share code, notes, and snippets.

@leipreachan
Last active February 5, 2016 15:40
Show Gist options
  • Save leipreachan/6a63405bd5741d0a0f88 to your computer and use it in GitHub Desktop.
Save leipreachan/6a63405bd5741d0a0f88 to your computer and use it in GitHub Desktop.
javascript:(function(){
function attribute(e, t, n) {
e.setAttribute(t, n)
}
function highlight(r) {
for (var i = 0; i < r.length; i++) {
e = r[i];
try {
e.os = e.getAttribute('style');
attribute(e, 'style', e.os + ';border:2px dashed red;')
} catch (s) {
}
console.log(e);
t = draw_arrow(e);
body.appendChild(t)
}
return r
}
function side_menu(t) {
function r(t, r) {
clr = 'position:fixed;top:' + r + 'px;left:0;padding:5px;background-color:#00293E;color:#fff;z-index:10000;';
e = docu.createElement('span');
attribute(e, 'name', w + '-cmt');
attribute(e, 'style', clr);
e.innerHTML = t;
return e
}
sp = r(t, 0);
ht = r(['ESC / Q',
'close',
'R',
'redraw',
'C',
'clean',
'&rarr; / P',
'prev',
'&larr; / N',
'next',
'D',
'dump'].join('<br>'), 30);
body.appendChild(sp);
body.appendChild(ht)
}
function iterate_over_elements(e) {
var t = [
],
n = docu.evaluate(e, docu, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null);
var r = n.iterateNext();
while (r) {
t.push(r);
r = n.iterateNext()
}
return t
}
function get_cookies(e) {
p = docu.cookie.split(e + '=');
if (p.length == 2) return p.pop().split(';').shift()
}
function locate(e, t) {
switch (e) {
case 0:
case 'css':
return docu.querySelectorAll(t);
case 'xpath':
return iterate_over_elements(t);
case 'id':
return docu.getElementById(t)
}
}
function draw_arrow(e) {
try {
var t = docu.createElement('img'),
r = wndw.pageXOffset + e.getBoundingClientRect().left,
i = wndw.pageYOffset + e.getBoundingClientRect().top + (e.getBoundingClientRect().bottom - e.getBoundingClientRect().top) / 2;
t.name = w;
t.src = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEoAAAAXCAYAAACswNlYAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3QwMDAMRpdV9vQAAAp9JREFUWMPt2M1rXGUUx/HPc+eGBCuSauumC8G1GlxYSaHTpNEEhC660f+gvuDGv6C4cOtat25EdyIUMqFOnNgWrO+67KaSpmgtxtIY47wcFzNTb9PpUKRJZzIeuKtzeJ6HH+d8z7knRYSRtPRyifU3aY1jjewqjVUmroozN+4IH1mhIB3dz8QHOLzNs4Er7S9dYfzd0RYK0guPkX1ITPXwXie9Liqf56MnTErMPU02S8zgOWKsR+Qy8YZYuj46pZdmD1CaIc1iBgcK3ibxHZ4lZQi8x5PviPfre5tRafZhxo7TKpPKeOL2gPieVKNVY/Mi+6bwCXGN9JpY+mL7kfneKaeFZ2h2hMmfJ8ZJXWHWUSMtkS2LxV+3ceoE6SLZKVFZ63VFPsRZM0k+T7zI3DTNgx1RoNHOmKhRqvHIT+LjZu9z3s5Il2mcFtXGXa8bmtJLr45xaZqsTJRJT6FUiFgjzpLV2FwRK7/f1+sHWqg0d4jScWIBR7Cv4N3qlNMizZo4e3lHnzJQQvWHcBA//Avh1pei+teuPe2BCnUHhOMwJgoR68QSWYX8gjhz7YE9ddeFSicnudmBsGnSwULS1Mku3BOEd9l2vuvdFcLd1m2VqBIV8nNicWMgcbkjGXULwrdYM1nw3iQ+a3ennYfwYAmVXhpn6xhpvj+EsyX+/rrfvDKo9t9KryeEsyKEf2mXUlajfl5Ufxv64f+eMyqdnGSjTGuedAyPF7x1UgHC0z+K06299PuY95lpcrIjfSD8MxZpVXjoK/Hpn3t6AXFbRqUTh9jqQvgo9hdibxDLwwbh+yeUhUdpnmrvaWKqs5PpcvgSqdpeYm2cE+c3jajlNF/BWx3d/sAKaZl6VVRX/W9doUof0WgR39L6Zhhb927YP7XjHE2XKsCmAAAAAElFTkSuQmCC';
attribute(t, 'style', 'position:absolute;top:' + i + 'px;left:' + (r - 75) + 'px;z-index:10000;');
return t
} catch (s) {
}
}
function main() {
clean(1);
k = get_cookies('locator');
k = typeof k !== undef ? '' : k;
var e = prompt('Locator:', k),
t = 0,
n = 0;
if (!e || e == 'null') return;
e = e.trim();
dt = new Date;
dt.setDate(dt.getDate() + 10);
docu.cookie = 'path=/; locator=' + e + '; expires=' + dt.toUTCString();
s = e.split('=');
if (s[0] && s[1]) {
switch (s[0]) {
case 'xpath':
case 'css':
case 'id':
{
t = s[0];
n = s[1];
break
}
}
}
if (!t) {
if (e.substr(1, 1) == '/') {
t = 'xpath'
} else {
t = 'css'
}
n = e
}
var o = locate(t, n);
ell = o.length;
if (ell == 0) {
side_menu('element was not found');
return
}
side_menu('<b>' + ell + ' candidate' + (ell > 1 ? 's' : '') + '</b> for ' + t + ' locator ' + e);
highlight([o[0]]);
o.scrl = h();
return o
}
function clean(e) {
var t = locate(0, '*[name' + (e ? '*' : '') + '=' + w + ']');
for (n = 0; n < t.length; n++) {
try {
t[n].remove()
} catch (r) {
}
}
if (typeof y !== undef) for (n = 0; n < y.length; n++) {
if (typeof y[n] !== undef) y[n].style = y[n].os
}
}
function h() {
var e = 0;
return function (t) {
if (typeof y[e + t] !== undef) {
e += t;
clean(0);
highlight([y[e]]);
y[e].scrollIntoView(1);
}
}
}
function dump()
{
Array.prototype.slice.call(y).forEach(function(item){console.log(item)});
}
function keyboard(e) {
console.log(e.keyCode);
switch (e.keyCode) {
case 27: //esc
case 113: //q
case 81: //Q
clean(1);
wndw.onkeyup = old_keyup;
return true;
case 99: //c
clean(1);
return true;
case 82: // R
case 114: //r
y = main();
return true;
case 110: //n
case 78: //N
case 39: //→
if (y) {
y.scrl(1)
}
return true;
case 112: //p
case 80: //P
case 37: //←
if (y) {
y.scrl( - 1)
}
return true;
case 68: //D
dump();
return true;
}
}
var docu = document,
wndw = window,
body = docu.body,
y = [
],
undef = 'undefined';
var w = 'leipr-tst',
old_keyup = wndw.onkeyup;
wndw.onkeyup = keyboard;
y = main();
})()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment