197 lines
5.4 KiB
JavaScript
197 lines
5.4 KiB
JavaScript
/*
|
|
* To change this template, choose Tools | Templates
|
|
* and open the template in the editor.
|
|
*/
|
|
FBL.ns(function() { with (FBL) {
|
|
// Panel
|
|
var panelName = "firerecord";
|
|
|
|
/**
|
|
* @panel This panel integrates with Firebug Inspector API and provides own logic
|
|
* and display of custom information for links. This code serves as an example of
|
|
* how to properly use and implement Inspector.
|
|
*/
|
|
function FireRecordPanel() {}
|
|
FireRecordPanel.prototype = extend(Firebug.Panel,
|
|
/** @lends LinkInspectorPanel */
|
|
{
|
|
name: panelName,
|
|
title: "Trial by Fire",
|
|
inspectable: true,
|
|
inspectHighlightColor: "red",
|
|
|
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
// Initialization
|
|
|
|
initialize: function()
|
|
{
|
|
Firebug.Panel.initialize.apply(this, arguments);
|
|
|
|
Firebug.Inspector.addListener(this);
|
|
},
|
|
|
|
destroy: function(state)
|
|
{
|
|
Firebug.Panel.destroy.apply(this, arguments);
|
|
|
|
Firebug.Inspector.removeListener(this);
|
|
},
|
|
|
|
show: function(state)
|
|
{
|
|
Firebug.Panel.show.apply(this, arguments);
|
|
|
|
FireRecordPlate.defaultContent.replace({}, this.panelNode);
|
|
},
|
|
|
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
// Inspector API implementation
|
|
|
|
startInspecting: function()
|
|
{
|
|
if (FBTrace.DBG_FIRERECORD)
|
|
FBTrace.sysout("fire_record; startInspecting()");
|
|
},
|
|
|
|
inspectNode: function(node)
|
|
{
|
|
if (FBTrace.DBG_FIRERECORD)
|
|
FBTrace.sysout("fire_record; inspectNode(node: " + node.tagName + ")");
|
|
|
|
FireRecordPlate.tName.replace({object: node}, this.panelNode);
|
|
},
|
|
|
|
stopInspecting: function(node, canceled)
|
|
{
|
|
if (FBTrace.DBG_FIRERECORD)
|
|
FBTrace.sysout("fire_record; stopInspecting(node: " + node.tagName +
|
|
", canceled: " + canceled + ")");
|
|
|
|
if (canceled)
|
|
return;
|
|
|
|
if (node.href.indexOf("http") != 0)
|
|
return;
|
|
|
|
FireRecordPlate.linkPreview.replace({object: node}, this.panelNode);
|
|
},
|
|
|
|
supportsObject: function(object, type)
|
|
{
|
|
if (object instanceof Element)
|
|
{
|
|
if (object.tagName.toLowerCase() == "a"){
|
|
return 1;
|
|
}
|
|
if (object.tagName.toLowerCase() == "button"){
|
|
return 1;
|
|
}
|
|
if (object.tagName.toLowerCase() == "img"){
|
|
return 1;
|
|
}
|
|
if (object.tagName.toLowerCase() == "input"){
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
},
|
|
|
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
// Inspector Listener
|
|
|
|
onStartInspecting: function(context)
|
|
{
|
|
if (FBTrace.DBG_FIRERECORD)
|
|
FBTrace.sysout("fire_record; Listener.onStartInspecting(context: " +
|
|
context.getTitle() + ")");
|
|
},
|
|
|
|
onInspectNode: function(context, node)
|
|
{
|
|
if (FBTrace.DBG_FIRERECORD)
|
|
FBTrace.sysout("fire_record; Listener.onInspectNode(context: " +
|
|
context.getTitle() + ", node: " + node.tagName + ")");
|
|
},
|
|
|
|
onStopInspecting: function(context, node, canceled)
|
|
{
|
|
if (FBTrace.DBG_FIRERECORD)
|
|
FBTrace.sysout("fire_record; Listener.onStopInspecting(context: " +
|
|
context.getTitle() + ", node: " + node.tagName + ", canceled: " +
|
|
canceled + ")");
|
|
}
|
|
});
|
|
|
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
|
|
var FireRecordPlate = domplate(
|
|
{
|
|
tName:
|
|
DIV({"class": "tName"}, "$object.id" ),
|
|
|
|
linkPreview:
|
|
IFRAME({"class": "linkPreview", "src": "$object.href"}),
|
|
|
|
defaultContent:
|
|
DIV({"class": "defaultContent"},
|
|
"Use Trial by Fire to record DOM events for later playback."
|
|
)
|
|
});
|
|
|
|
// ********************************************************************************************* //
|
|
// Module & Customizing Tracing
|
|
|
|
/**
|
|
* @module The module object isn't really neccessary for the Inspector API. It serves
|
|
* only to support Firebug tracing console, which is useful when debugging inspector
|
|
* features.
|
|
*/
|
|
Firebug.FireRecordModule = extend(Firebug.Module,
|
|
/** @lends Firebug.FireRecordModule */
|
|
{
|
|
initialize: function()
|
|
{
|
|
Firebug.Module.initialize.apply(this, arguments);
|
|
|
|
if (Firebug.TraceModule)
|
|
Firebug.TraceModule.addListener(this);
|
|
},
|
|
|
|
shutdown: function()
|
|
{
|
|
Firebug.Module.shutdown.apply(this, arguments);
|
|
|
|
if (Firebug.TraceModule)
|
|
Firebug.TraceModule.removeListener(this);
|
|
},
|
|
|
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
// Trace Listener
|
|
|
|
onLoadConsole: function(win, rootNode)
|
|
{
|
|
appendStylesheet(rootNode.ownerDocument, "chrome://firerecord/skin/inspector.css");
|
|
},
|
|
|
|
onDump: function(message)
|
|
{
|
|
var index = message.text.indexOf("fire_record;");
|
|
if (index == 0)
|
|
{
|
|
message.text = message.text.substr("fire_record;".length);
|
|
message.text = trim(message.text);
|
|
message.type = "DBG_FIRERECORD";
|
|
}
|
|
}
|
|
});
|
|
|
|
|
|
// Registration
|
|
|
|
Firebug.registerPanel(FireRecordPanel);
|
|
Firebug.registerModule(Firebug.FireRecordModule);
|
|
Firebug.registerStylesheet("chrome://firerecord/skin/inspector.css");
|
|
|
|
|
|
}}); |