/* * 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"); }});