OwlCyberSecurity - MANAGER
Edit File: ai-select.q.js
jQuery (document).ready (function ($) { function findParent (tagname, element) { while (element) { if ((element.nodeName || element.tagName).toLowerCase() === tagname.toLowerCase ()) { return element; } element = element.parentNode; } return null; } function interceptClick (e) { e = e || event; var element = findParent ('a', e.target || e.srcElement); if (element) { e.preventDefault (); if (!ctrl_pressed) { var param = { 'html_element_selection': block, 'selector': $('#ai-selector').val (), 'input': settings_input }; var form = document.createElement ("form"); form.setAttribute ("method", "post"); form.setAttribute ("action", element.href); form.setAttribute ("target", '_self'); for (var i in param) { if (param.hasOwnProperty (i)) { var input = document.createElement ('input'); input.type = 'hidden'; input.name = i; input.value = encodeURI (param [i]); form.appendChild (input); } } document.body.appendChild (form); form.submit(); document.body.removeChild (form); } } } function getElementSelector (el) { var selector = el.nodeName.toLowerCase (); if (el.hasAttribute ('id') && el.id != '') { selector = selector + '#' + el.id; } if (el.className) { classes = el.className.replace(/ai-selected|ai-highlighted/g, '').trim(); if (classes) { selector = selector + '.' + classes.replace(/\s{2,}/g, ' ').trim().replace (/ /g, '.'); } } return selector; } function getDomPath (el) { var stack = []; while (el.parentNode != null) { var sibCount = 0; var sibIndex = 0; for (var i = 0; i < el.parentNode.childNodes.length; i++) { var sib = el.parentNode.childNodes [i]; if (sib.nodeName == el.nodeName) { if (sib === el) { sibIndex = sibCount; } sibCount++; } } if (el.hasAttribute ('id') && el.id != '') { stack.unshift (el.nodeName.toLowerCase () + '#' + el.id); } else if (sibCount > 1) { stack.unshift (el.nodeName.toLowerCase () + ':eq(' + sibIndex + ')'); } else { stack.unshift (el.nodeName.toLowerCase ()); } el = el.parentNode; } return stack.slice (1); // removes the html element } function getShortestPath (elements) { var stack = []; var found = false; elements.reverse ().forEach (function (element) { if (!found) stack.unshift (element); found = element.indexOf ('#') != -1; }); return stack; } function cleanSelectors (selectors) { selectors = selectors.trim (); if (selectors.slice (0, 1) == ',') { selectors = selectors.slice (1, selectors.length); } if (selectors.slice (-1) == ',') { selectors = selectors.slice (0, selectors.length - 1); } return (selectors.trim ()); } function wrapElement (element) { return '<kbd class="ai-html-element">' + element + '</kbd>'; } function wrapElements (elements) { var html_elements = []; elements.forEach (function (element) { html_elements.push (wrapElement (element)); }); return html_elements; } function createClickableElements () { $(".ai-html-element").click (function () { var element_selector = $(this).text (); $('#ai-selector-element').html (wrapElement (element_selector)); $('.ai-highlighted').removeClass ('ai-highlighted'); $('.ai-selected').removeClass ('ai-selected'); $(element_selector).addClass ('ai-selected'); $('#ai-selector-data ' + element_selector).removeClass ('ai-selected'); $('#ai-selector').val (element_selector); }); } function loadFromSettings () { if (window.opener != null && !window.opener.closed) { $("#ai-selector").val (cleanSelectors (settings_selector)); $("#ai-selector").trigger ("input"); } } function applyToSettings (add) { if (window.opener != null && !window.opener.closed) { var settings = $(window.opener.document).contents (); var selector = $("#ai-selector").val (); if (add) { var existing_selectors = settings.find (settings_input).val ().trim (); existing_selectors = cleanSelectors (existing_selectors); if (existing_selectors != '') { existing_selectors = existing_selectors + ', '; } selector = existing_selectors + selector; } settings.find (settings_input).val (selector); } } function changeAction () { if (ctrl_pressed) { $("#ai-use-button").hide (); $("#ai-add-button").show (); } else { $("#ai-use-button").show (); $("#ai-add-button").hide (); } } var block = "AI_POST_HTML_ELEMENT_SELECTION"; var settings_selector = "AI_POST_SELECTOR"; var settings_input = "AI_POST_INPUT"; var ctrl_pressed = false; var selected_element = null; var current_element = null; document.onclick = interceptClick; // var elements = $("a"); // elements.click (function (event) { // console.log ('AI event', event); // interceptClick (event); // }); // console.log ('AI event', document.getElementsByTagName ("A")); // var a_elements = document.getElementsByTagName ("A"); // for (i = 0; i < a_elements.length; i++) { //// console.log ('AI event', a_elements [i], event); // a_elements [i].addEventListener ("click", function (event){ //// interceptClick (event); // var element = $(event.target); // console.log ('AI CLICK', element.prop ("tagName")); // }); // } $(document).keydown (function (event) { if (event.which == "17") { ctrl_pressed = true; changeAction (); if (current_element != null && current_element.prop ("tagName") == 'A') { $(current_element).trigger ('mouseover'); } } }); $(document).keyup (function() { ctrl_pressed = false; changeAction (); if (current_element != null && current_element.prop ("tagName") == 'A') { $(current_element).trigger ('mouseout'); } }); $('body').css ({'user-select': 'none', 'margin-top': '140px'}); $('body').prepend ('<section id="ai-selector-data">' + '<table>' + ' <tbody>' + ' <tr>' + ' <td class="data-name">' + ai_front.element + '</td>' + ' <td class="data-value"><section id="ai-selector-element"></section></td>' + ' <td><button type="button" id="ai-cancel-button" style="min-width: 110px;" title="' + ai_front.cancel_element_selection + '"> ' + ai_front.cancel + ' </button></td>' + ' </tr>' + ' <tr>' + ' <td>' + ai_front.path + '</td>' + ' <td><section id="ai-selector-path"></section></td>' + ' <td><button type="button" id="ai-parent-button" style="min-width: 110px;" title="' + ai_front.select_parent_element + '"> ' + ai_front.parent + ' </button></td>' + ' </tr>' + ' <tr>' + ' <td>' + ai_front.selector + '</td>' + ' <td style="width: 100%;"><input id="ai-selector" type="text" value="" maxlength="500" title="' + ai_front.css_selector + '" /></td>' + ' <td><button type="button" id="ai-use-button" style="min-width: 110px;" title="' + ai_front.use_current_selector + '"> ' + ai_front.use + ' </button>' + ' <button type="button" id="ai-add-button" style="min-width: 110px; display: none;" title="' + ai_front.add_current_selector + '"> ' + ai_front.add + ' </button></td>' + ' </tr>' + ' </tbody>' + '</table>' + '</section>'); $('body').bind ('mouseover mouseout click', function (event) { var element = $(event.target); var elements = getDomPath (element [0]); var path = elements.join (' > '); if (path.indexOf ('ai-selector-data') != -1) { return; } if (element.hasClass ('ai-html-element')) { return; } switch (event.type) { case 'click': if (element.prop ("tagName") != 'A' || ctrl_pressed) { selected_element = element; $('#ai-selector-element').html (wrapElement (getElementSelector (element [0]))); $('#ai-selector-path').html (wrapElements (elements).join (' > ')); createClickableElements (); $('.ai-highlighted').removeClass ('ai-highlighted'); $('.ai-selected').removeClass ('ai-selected'); element.addClass ('ai-selected'); $('#ai-selector').val (getShortestPath (elements).join (' > ')); } break; case 'mouseover': current_element = element; if (element.prop ("tagName") != 'A' || ctrl_pressed) { element.addClass ('ai-highlighted'); } break; case 'mouseout': element.removeClass ('ai-highlighted'); break; } }); $("#ai-selector").on ('input', function() { $('.ai-highlighted').removeClass ('ai-highlighted'); $('.ai-selected').removeClass ('ai-selected'); var selectors = cleanSelectors ($("#ai-selector").val ()); $(selectors).addClass ('ai-selected'); var elements = selectors.split (','); elements.forEach (function (element) { $('#ai-selector-data ' + element).removeClass ('ai-selected'); }); if (elements.length == 1 && $(selectors).length == 1) { selected_element = $(elements [0]); $('#ai-selector-element').html (wrapElement (getElementSelector (selected_element [0]))); $('#ai-selector-path').html (wrapElements (getDomPath (selected_element [0])).join (' > ')); createClickableElements (); } else { selected_element = null; $('#ai-selector-element').text (''); $('#ai-selector-path').text (''); } }); window.onkeydown = function (event) { if (event.keyCode === 27 ) { window.close(); } }; loadFromSettings (); $("#ai-cancel-button").button ({ }).click (function () { window.close(); }); $("#ai-parent-button").button ({ }).click (function () { if (selected_element.prop ("tagName") != 'BODY') { selected_element = selected_element.parent (); selected_element.click (); } }); $("#ai-use-button").button ({ }).click (function () { applyToSettings (false); window.close(); }); $("#ai-add-button").button ({ }).click (function () { applyToSettings (true); window.close(); }); });