RetroZilla/extensions/venkman/resources/content/venkman-handlers.js
2015-10-20 23:03:22 -04:00

225 lines
6.4 KiB
JavaScript

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is The JavaScript Debugger.
*
* The Initial Developer of the Original Code is
* Netscape Communications Corporation.
* Portions created by the Initial Developer are Copyright (C) 1998
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
* Robert Ginda, <rginda@netscape.com>, original author
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the MPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
function initHandlers()
{
function wwObserve (subject, topic, data)
{
//dd ("wwObserver::Observe " + subject + ", " + topic);
if (topic == "domwindowopened")
console.onWindowOpen (subject);
else
console.onWindowClose (subject);
};
console.wwObserver = {observe: wwObserve};
console.windowWatcher.registerNotification (console.wwObserver);
console.hookedWindows = new Array();
var enumerator = console.windowWatcher.getWindowEnumerator();
while (enumerator.hasMoreElements())
{
var win = enumerator.getNext();
if (!isWindowFiltered(win))
{
console.onWindowOpen(win);
console.onWindowLoad();
}
}
}
function destroyHandlers()
{
console.windowWatcher.unregisterNotification (console.wwObserver);
while (console.hookedWindows.length)
{
var win = console.hookedWindows.pop();
win.removeEventListener ("load", console.onWindowLoad, false);
win.removeEventListener ("unload", console.onWindowUnload, false);
}
}
function isWindowFiltered (window)
{
var href = window.location.href;
var rv = ((href.search (/^chrome:\/\/venkman\//) != -1 &&
href.search (/test/) == -1) ||
(console.prefs["enableChromeFilter"] &&
href.search (/(navigator|browser).xul($|\?)/) == -1));
//dd ("isWindowFiltered " + window.location.href + ", returning " + rv);
return rv;
}
console.onWindowOpen =
function con_winopen (win)
{
if ("ChromeWindow" in win && win instanceof win.ChromeWindow &&
(win.location.href == "about:blank" || win.location.href == ""))
{
setTimeout (con_winopen, 0, win);
return;
}
if (isWindowFiltered(win))
return;
//dd ("window opened: " + win + " ``" + win.location + "''");
console.hookedWindows.push(win);
dispatch ("hook-window-opened", {window: win});
win.addEventListener ("load", console.onWindowLoad, false);
win.addEventListener ("unload", console.onWindowUnload, false);
//console.scriptsView.freeze();
}
console.onWindowLoad =
function con_winload (e)
{
dispatch ("hook-window-loaded", {event: e});
}
console.onWindowUnload =
function con_winunload (e)
{
dispatch ("hook-window-unloaded", {event: e});
// dd (dumpObjectTree(e));
}
console.onWindowClose =
function con_winclose (win)
{
if (isWindowFiltered(win))
return;
//dd ("window closed: " + win + " ``" + win.location + "''");
var i = arrayIndexOf(console.hookedWindows, win);
ASSERT (i != console.hookedWindows.length,
"WARNING: Can't find hook window for closed window " + i + ".");
arrayRemoveAt(console.hookedWindows, i);
dispatch ("hook-window-closed", {window: win});
//console.scriptsView.freeze();
}
console.onLoad =
function con_load (e)
{
var ex;
dd ("Application venkman, 'JavaScript Debugger' loaded.");
try
{
init();
}
catch (ex)
{
if ("bundleList" in console)
window.alert (getMsg (MSN_ERR_STARTUP, formatException(ex)));
else
window.alert (formatException(ex));
console.startupException = ex;
}
}
console.onClose =
function con_onclose (e)
{
dd ("onclose");
if (typeof console != "object" || "startupException" in console)
return true;
dd ("onclose: dispatching");
return dispatch ("hook-venkman-query-exit");
}
console.onUnload =
function con_unload (e)
{
dd ("Application venkman, 'JavaScript Debugger' unloading.");
if (typeof console != "object")
return;
dispatch ("hook-venkman-exit");
destroy();
}
console.onMouseOver =
function con_mouseover (e)
{
var element = e.originalTarget;
if (!("_lastElement" in console))
console._lastElement = null;
while (element)
{
if (element == console._lastElement)
return;
if ("getAttribute" in element)
{
var status = element.getAttribute ("venkmanstatustext");
if (status)
{
console.status = status;
console._lastElement = element;
return;
}
}
if ("localName" in element && element.localName == "floatingview")
{
console.status = console.viewManager.computeLocation (element);
console._lastElement = element;
return;
}
element = element.parentNode;
}
}
window.onresize =
function ()
{
dispatch ("hook-window-resized", { window: window });
// console.scrollDown();
}