electron-devtools-vendor
Version:
<div align="center"> <h2>electron-devtools-vendor</h2> <img alt="MIT" src="https://img.shields.io/github/license/BlackHole1/electron-devtools-vendor?color=9cf&style=flat-square"> <img alt="GitHub repo size" src="https://img.shields.io/github/r
263 lines (227 loc) • 8.66 kB
JavaScript
$(document).ready(function(){
$("#accordion").delegate(".expendable", "click", function (){
$(this).toggleClass("expend");
}).delegate(".delegator", "mouseenter", function (){
_.inspector.inspectDelegator($(this).data('index'));
}).delegate(".delegator", "mouseleave", function (){
_.inspector.clearInspectedDelegator();
}).delegate(".selector", "mouseenter", function (){
var selector = $(this).find('.red').text();
selector = selector.substring(1,selector.length-1);
_.inspector.inspectSelectorInDelegator($(this).data('index'),selector);
}).delegate(".selector", "mouseleave", function (){
_.inspector.clearInspectedDelegator();
}).delegate(".triggerBtn", "click", function (){
//report to analytics
var type = $(this).data("type");
_.analytics.setPageTitle();
_gaq.push(['_trackEvent', 'triggerBtn', 'click', type]);
//trigger
_.inspector.triggerEvent(type);
return false;
}).delegate(".code", "dblclick", function(){
alert($(this).find('.red').text());
});
_.analytics.init(true);
});
var page_getEvents = function() {
try{
var $ = window.jQuery;
if(!$)
return {error:"this site use no jQuery",__proto__: null};
var jqueryVersion = $.fn.jquery.split('.');
var is_1_8_or_newer = !(parseInt(jqueryVersion[0]) == 1 && parseInt(jqueryVersion[1]) < 8);
var is_less_than_1_4 = (parseInt(jqueryVersion[0]) == 1 && parseInt(jqueryVersion[1]) < 4);
if(is_less_than_1_4)
return {error:"this site use jquery "+$.fn.jquery+". please use jquery 1.4 or newer.",__proto__: null};
var createObject = function (name,srcObj) {
var x = function(){};
var code = "x = function "+name+"() {};";
eval(code);
x.prototype = {};
var res = new x();
for(var key in srcObj)
res[key] = srcObj[key];
res.__proto__ = null;
res.length = 0;
res.splice = function(){};
return res;
};
// Gets the event list of the selected element
// In version 1.8+, the events are registered under $._data function.
var data;
if(is_1_8_or_newer)
data = ($0 ? $._data($0, "events") : {}) || {};
else
data = ($0 ? $.data($0, "events") : {}) || {};
// Make a shallow copy with a null prototype, so that sidebar does not expose prototype.
var props = Object.getOwnPropertyNames(data);
var copy = { __proto__: null };
for (var i = 0; i < props.length; ++i)
{
var tmpHandlers = getHandlers(data[props[i]],$0);
if(tmpHandlers.length > 0)
copy[props[i]] = tmpHandlers;
}
//delegate and live events are registered on ancestor element
var currentElement;
/*switch(LiveDelegate)
{
case 'hide':
currentElement = null;//$0.parentNode;
break;
case 'liveOnly':
currentElement = document;//$0.parentNode;
break;
default:*/
currentElement = $0 ? $0.parentNode : null;
/*break;
}*/
while(currentElement)
{
// In version 1.8+, the events are registered under $._data function.
var liveData;
if(is_1_8_or_newer)
liveData = (($._data(currentElement, "events") || {}));
else
liveData = (($.data(currentElement, "events") || {}));
var liveProps = Object.getOwnPropertyNames(liveData);
//for each event
for (var i = 0; i < liveProps.length; ++i)
{
var curData = liveData[liveProps[i]];
for(var j = 0; j < curData.length; j++)
{
//get the current handler
var handleObj = curData[j];
//for jquery 1.6 and below
if(liveProps[i] === "live")
{
continue;
liveProps[i] = handleObj.origType;
}
//check if the curent element mathces the live's selector
if($($0).is(handleObj.selector))
{
//if this is the first live event in this event type
if(copy[liveProps[i]] == undefined)
copy[liveProps[i]] = getHandlers([handleObj],undefined,currentElement);
else
copy[liveProps[i]] = copy[liveProps[i]].concat(getHandlers([handleObj],undefined,currentElement));
}
}
}
currentElement = currentElement.parentNode;
}
return copy;
function getHandlers(obj, elem, delegator)
{
var res = [];
for(var i = 0; i < obj.length; i++)
if(elem == undefined || obj[i].selector == null || $(elem).is(obj[i].selector))
{
var handler = (obj[i].origHandler || obj[i].handler).toString();
if(!delegator)//regular event
res.push(new regular(handler,obj[i].namespace,obj[i].data));
else if(delegator.parentNode == null)
res.push(new live(handler,obj[i].namespace,obj[i].selector,obj[i].data));
else
res.push(new delegate(handler ,delegator,obj[i].namespace,obj[i].selector,obj[i].data));
}
return res;
}
function regular(code,namespace,data)
{
this.type = 'regular';
this.code = code;
if(namespace && namespace.length > 0)
this.namespace = namespace;
/*if(data)
this.data = data;*/
this.__proto__ = null;
}
function delegate(code, delegator, namespace, selector,data)
{
this.code = code;
this.type = 'delegate';
//save the delegator in the page and referance it by index.
window.jqueryDebugger = window.jqueryDebugger || [];
this.delegatorIndex = window.jqueryDebugger.length;
this.delegatorType = delegator.tagName + (delegator.id ? "#" + delegator.id : "");
window.jqueryDebugger.push(delegator);
if(namespace && namespace.length > 0)
this.namespace = namespace;
/*if(data)
this.data = data;*/
this.selector = selector;
this.__proto__ = null;
}
function live(code, namespace, selector,data)
{
this.type = 'live';
this.code = code;
if(namespace && namespace.length > 0)
this.namespace = namespace;
/*if(data)
this.data = data;*/
this.selector = selector;
this.__proto__ = null;
}
}
catch(err){/*console.error(err);*/ return {error:"General error",__proto__: null};}
};
//get the event from the $0.
chrome.devtools.inspectedWindow.eval(
"("+page_getEvents.toString()+")()",
function(result, isException) {
if (isException)
console.error("Exception: " + result);
else {
parseEventsToHTML(result);
}
}
);
function parseEventsToHTML(events)
{
if(events.error)
{
$("#accordion").html('<span>error<span class="saperator">: </span><span class="red">'+htmlEncode(events.error)+'</span></span>');
return;
}
var html = '<ol>';
for(var eventType in events)
{
var event = events[eventType];
html += ('<li class="expend expendable"><span><span class="triengle"></span>'+htmlEncode(eventType)+'<span class="saperator">: </span><span class="black">['+htmlEncode(event.length)+']</span><span class="triggerBtn" title="trigger this handler" data-type="' + htmlEncode(eventType) + '">trigger</span></span></li><ol>');
for(var i = 0; i < event.length; i++)
{
var cur = event[i];
var tmpHTML = '<li class="expendable"><span><span class="triengle"></span>'+i+'<span class="saperator">: </span><span class="black">'+cur.type+'</span></span></li><ol>';
if(cur.code)
tmpHTML += ('<li class="code"><span>code<span class="saperator">: </span><span class="red" title="' + titleEncode(cur.code) + '">"' + htmlEncode(cur.code.replace(/(\r\n|\n|\r)/gm," ").replace(/\s+/g," ")) + '"</span></span></li>');
if(cur.delegatorType)
tmpHTML += ('<li class="delegator" data-index="' + cur.delegatorIndex + '"><span>delegator<span class="saperator">: </span><span class="black">' + htmlEncode(cur.delegatorType) + '</span></span></li>');
if(cur.namespace)
tmpHTML += ('<li><span>namespace<span class="saperator">: </span><span class="red">"' + htmlEncode(cur.namespace) + '"</span></span></li>');
if(cur.selector) {//data-index is -1 if the event is live.
var delegatorIndex = cur.delegatorIndex;
if (delegatorIndex === undefined)
delegatorIndex = -1;
tmpHTML += ('<li class="selector" data-index="' + delegatorIndex + '"><span>selector<span class="saperator">: </span><span class="red">"' + htmlEncode(cur.selector) + '"</span></span></li>');
}
tmpHTML += '</ol>';
html += tmpHTML;
}
html+='</ol>';
}
html+='</ol>';
if(html.length == 0)//if there is no events
html = '<div class="noProperties">No Properties</div>';
$("#accordion").html(html);
}
function titleEncode(value){
return htmlEncode(value).replace(/"/g,'"');
}
function htmlEncode(value){
return $('<div/>').text(value).html();
}