From 09a406bb7ab6d807ccd50ac2b3a14722cd4a6dc4 Mon Sep 17 00:00:00 2001 From: retep998 Date: Thu, 7 Feb 2013 02:22:51 -0500 Subject: [PATCH] Dumping in stuff from Ian. Signed-off-by: retep998 --- chrome.manifest | 3 + chrome/content/firerecord.js | 197 ++++++++++++++++++++++++++++++ chrome/content/firerecord.xul | 6 + chrome/skin/classic/inspector.css | 34 ++++++ defaults/preferences/prefs.js | 1 + firerecord@qcc.mass.edu.xpi | Bin 0 -> 9893 bytes install.rdf | 25 ++++ 7 files changed, 266 insertions(+) create mode 100644 chrome.manifest create mode 100644 chrome/content/firerecord.js create mode 100644 chrome/content/firerecord.xul create mode 100644 chrome/skin/classic/inspector.css create mode 100644 defaults/preferences/prefs.js create mode 100644 firerecord@qcc.mass.edu.xpi create mode 100644 install.rdf diff --git a/chrome.manifest b/chrome.manifest new file mode 100644 index 0000000..03b5f23 --- /dev/null +++ b/chrome.manifest @@ -0,0 +1,3 @@ +content firerecord chrome/content/ +skin firerecord classic/1.0 chrome/skin/classic/ +overlay chrome://firebug/content/firebugOverlay.xul chrome://firerecord/content/firerecord.xul diff --git a/chrome/content/firerecord.js b/chrome/content/firerecord.js new file mode 100644 index 0000000..a3deeb0 --- /dev/null +++ b/chrome/content/firerecord.js @@ -0,0 +1,197 @@ +/* + * 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"); + + +}}); \ No newline at end of file diff --git a/chrome/content/firerecord.xul b/chrome/content/firerecord.xul new file mode 100644 index 0000000..065a674 --- /dev/null +++ b/chrome/content/firerecord.xul @@ -0,0 +1,6 @@ + + + +