]> git.gir.st - VimFx.git/blob - packages/window-utils.coffee
hints are finally showing up on the pages. currently they are displayed for all the...
[VimFx.git] / packages / window-utils.coffee
1 { classes: Cc, interfaces: Ci, utils: Cu } = Components
2
3 tools = {}
4 Cu.import "resource://gre/modules/Services.jsm", tools
5
6 ww = tools.Services.ww
7
8 runOnWindowLoad = (callback, window) ->
9 if window.document.readyState == 'complete'
10 callback window
11 else
12 onLoad = ->
13 window.removeEventListener 'load', arguments.callee, false
14 callback(window)
15
16 window.addEventListener 'load', onLoad, false
17
18 applyToWindows = (callback) ->
19 winEnum = ww.getWindowEnumerator()
20 while winEnum.hasMoreElements()
21 window = winEnum.getNext().QueryInterface(Ci.nsIDOMWindow)
22 runOnWindowLoad callback, window
23
24 isBrowserWindow = (window) ->
25 return window.document.documentElement.getAttribute("windowtype") == "navigator:browser"
26
27 class WindowObserver
28 constructor: (@delegate) ->
29
30 observe: (subject, topic, data) ->
31 window = subject.QueryInterface(Ci.nsIDOMWindow)
32 switch topic
33 when 'domwindowopened'
34 runOnWindowLoad @delegate.track, window
35 when 'domwindowclosed'
36 runOnWindowLoad @delegate.untrack, window
37
38 class WindowTracker
39
40 constructor: (@delegate) ->
41 @observer = new WindowObserver @delegate
42
43 start: ->
44 applyToWindows @delegate.track
45 ww.registerNotification @observer
46
47 stop: ->
48 ww.unregisterNotification @observer
49 applyToWindows @delegate.untrack
50
51
52 exports.runOnWindowLoad = runOnWindowLoad
53 exports.applyToWindows = applyToWindows
54 exports.WindowTracker = WindowTracker
55 exports.isBrowserWindow = isBrowserWindow
Imprint / Impressum