.getService(Components.interfaces.nsIConsoleService);
var consoleDump = true;
+var debugDump = true;
var arg_dump_full = false;
var sdump_levels = {
'D_TRACE' : true,
'D_TRACE_ENTER' : false,
'D_TRACE_EXIT' : false,
+ 'D_TIMEOUT' : true,
+ 'D_FILTER' : true,
'D_CLAM' : false,
'D_PAGED_TREE' : false,
};
+var sdump_last_time = new Date();
+
+function filter_console_init(p) {
+ sdump('D_FILTER',arg_dump(arguments,{0:true}));
+
+ var filterConsoleListener = {
+ observe: function( msg ) {
+ try {
+ p.observe_msg( msg );
+ } catch(E) {
+ alert(E);
+ }
+ },
+ QueryInterface: function (iid) {
+ if (!iid.equals(Components.interfaces.nsIConsoleListener) &&
+ !iid.equals(Components.interfaces.nsISupports)) {
+ throw Components.results.NS_ERROR_NO_INTERFACE;
+ }
+ return this;
+ }
+ };
+ try {
+ consoleService.registerListener(filterConsoleListener);
+ } catch(E) {
+ alert(E);
+ }
+
+ sdump('D_TRACE_EXIT',arg_dump(arguments));
+}
+
function sdump(level,msg) {
try {
+ var now = new Date();
+ var message = now.valueOf() + '\tdelta = ' + (now.valueOf() - sdump_last_time.valueOf()) + '\n' + level + '\n' + msg;
if (sdump_levels['D_NONE']) return;
if (sdump_levels[level]||sdump_levels['D_ALL']) {
- debug(level + ': ' + msg);
+ sdump_last_time = now;
+ if (debugDump)
+ debug(message);
if (consoleDump)
- consoleService.logStringMessage(level + ': ' + msg);
+ consoleService.logStringMessage(message);
}
} catch(E) {
dump('Calling sdump but ' + E + '\n');
--- /dev/null
+<?xml version="1.0"?>
+<!-- Application: Evergreen Staff Client -->
+<!-- Screen: About -->
+
+<!-- Stylesheets -->
+<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
+<?xml-stylesheet href="chrome://evergreen/skin/evergreen.css" type="text/css"?>
+
+<window id="filter_console_win"
+ onload="try { my_init(); } catch(E) { alert(E); }"
+ xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
+
+ <script>mw.sdump('D_TRACE','Loading filter_console.xul\n');</script>
+
+ <script>
+ <![CDATA[
+
+ var rows; var containing; var not_containing;
+
+ function my_init() {
+
+ rows = document.getElementById('filter_console_grid_rows');
+ containing = document.getElementById('filter_console_containing');
+ not_containing = document.getElementById('filter_console_not_containing');
+
+ mw.filter_console_init( {'observe_msg':observe_msg} );
+ build_sdump_menu();
+ }
+
+ function build_sdump_menu() {
+ try {
+ var mp = document.getElementById('fcmp');
+ for (var i in mw.sdump_levels) {
+ var m = document.createElement( 'menuitem' );
+ mp.appendChild(m);
+ m.setAttribute('type','checkbox');
+ m.setAttribute('label',i);
+ m.setAttribute('checked',mw.sdump_levels[i]);
+ m.setAttribute('oncommand',
+ "mw.sdump_levels."+i+"=!mw.sdump_levels."+i+
+ "; this.setAttribute('checked',mw.sdump_levels."+i+");");
+ }
+ } catch(E) {
+ alert(E);
+ }
+ }
+
+ function observe_msg(msg) {
+
+ try {
+ var row = document.createElement('row');
+ rows.appendChild(row);
+
+ var hbox = document.createElement('hbox');
+ row.appendChild(hbox);
+ hbox.flex = 1;
+
+ var tb = document.createElement('textbox');
+ hbox.appendChild(tb);
+ tb.setAttribute('multiline','true');
+ tb.setAttribute('rows','5');
+ tb.setAttribute('flex','1');
+ tb.setAttribute('value',msg.message);
+
+ } catch(E) { dump(E) }
+ }
+
+ function test_filter(msg) {
+ var pass = true;
+ var c_array = containing.value.split(' ');
+ var nc_array = not_containing.value.split(' ');
+ for (var i = 0; i < c_array.length; i++) {
+ var term = c_array[i];
+ if (term != '' && term != null && term != undefined)
+ if (! msg.match( term ) )
+ pass = false;
+ }
+ for (var i = 0; i < nc_array.length; i++) {
+ var term = nc_array[i];
+ if (term != '' && term != null && term != undefined)
+ if (msg.match( term ) )
+ pass = false;
+ }
+ return pass;
+ }
+
+ function clear_rows(prune) {
+ var delete_these = [];
+ for (var i = 0; i < rows.childNodes.length; i++) {
+ var row = rows.childNodes[i];
+ var tb = row.firstChild.firstChild;
+ var delete_me = ! test_filter(tb.value);
+ if (!prune) delete_me = true;
+ if (delete_me) delete_these.push( row );
+ }
+ var row; while (row = delete_these.pop()) { rows.removeChild(row); }
+ }
+
+ function hide_rows() {
+ for (var i = 0; i < rows.childNodes.length; i++) {
+ var row = rows.childNodes[i];
+ var tb = row.firstChild.firstChild;
+ row.hidden = ! test_filter(tb.value);
+ }
+ }
+
+ function calc_delta() {
+ var first;
+ var last;
+ for (var i = 0; i < rows.childNodes.length; i++) {
+ var row = rows.childNodes[i];
+ if (! row.hidden ) {
+ var tb = row.firstChild.firstChild;
+ if (!first) first = parseInt( tb.value.split(' ')[0] );
+ last = parseInt( tb.value.split(' ')[0] );
+ }
+ }
+ document.getElementById('fc_calc_delta_label').setAttribute('value',last-first);
+ }
+
+ ]]>
+ </script>
+
+ <popupset>
+ <menupopup id="fcmp" position="after_start">
+ </menupopup>
+ </popupset>
+
+ <vbox id="filter_console_vbox" flex="1">
+ <groupbox id="filter_console_groupbox" orient="vertical" flex="1">
+ <caption id="fcgbc" label="Filterable Javascript Console"/>
+ <grid id="filter_console_nav_grid">
+ <columns id="fcnvc"><column id="fcnvc1"/><column id="fcnvc2" flex="1"/></columns>
+ <rows id="fcnvr">
+ <row id="fcnvr1">
+ <label id="fcgbhb1l" value="Containing:" class="text_right" accesskey="o" control="filter_console_containing"/>
+ <textbox id="filter_console_containing" flex="1"/>
+ </row>
+ <row id="fcnvr2">
+ <label id="fcgbhb1l" value="Not Containing:" class="text_right" accesskey="N" control="filter_console_not_containing"/>
+ <textbox id="filter_console_not_containing" flex="1"/>
+ </row>
+ <row id="fcnvr3">
+ <spacer id="fcnvr3s1"/>
+ <hbox id="fcnvr3hb1" flex="1">
+ <button id="fc_sdump_levels" popup="fcmp" label="Set SDUMP Logging" accesskey="S"/>
+ <button id="fc_filter_view" label="View with Filters" accesskey="V" oncommand="hide_rows();"/>
+ <button id="fc_calc_delta" label="Delta (Last-1st sdump)" accesskey="D" oncommand="calc_delta();"/>
+ <label id="fc_calc_delta_label" />
+ <spacer id="fcnvr3hb1s1" flex="1"/>
+ <button id="fc_filter_prune" label="Prune Hidden" accesskey="P" oncommand="clear_rows(true);"/>
+ <button id="fc_clear" label="Clear" accesskey="C" oncommand="clear_rows(false);"/>
+ </hbox>
+ </row>
+ </rows>
+ </grid>
+ <grid id="filter_console_grid" flex="1" style="overflow: auto;">
+ <columns id="fcgc"><column id="fcgc1" flex="1"/></columns>
+ <rows id="filter_console_grid_rows"/>
+ </grid>
+ </groupbox>
+ </vbox>
+
+</window>
+