]> git.gir.st - VimFx.git/blob - packages/utils.coffee
files recovered from dead machine... from now on I will commit every day
[VimFx.git] / packages / utils.coffee
1 { WindowTracker, isBrowserWindow } = require 'window-utils'
2
3 class WindowEventTracker
4 constructor: (events, eventFilter = null) ->
5
6 handlerFilter = (handler) ->
7 return (event) ->
8 if !eventFilter or eventFilter event
9 handler event
10
11 addEventListeners = (window) ->
12 for name, handler of events
13 window.addEventListener name, handlerFilter(handler), true
14
15 removeEventListeners = (window) ->
16 for name, handler of events
17 window.removeEventListener name, handlerFilter(handler), true
18
19 @windowTracker = new WindowTracker
20 track: (window) ->
21 if isBrowserWindow window
22 addEventListeners window
23
24 untrack: (window) ->
25 if isBrowserWindow window
26 removeEventListeners window
27
28 start: -> @windowTracker.start()
29 stop: -> @windowTracker.stop()
30
31 { interfaces: Ci } = Components
32
33 HTMLInputElement = Ci.nsIDOMHTMLInputElement
34 HTMLTextAreaElement = Ci.nsIDOMHTMLTextAreaElement
35 HTMLSelectElement = Ci.nsIDOMHTMLSelectElement
36 XULDocument = Ci.nsIDOMXULDocument
37 XULElement = Ci.nsIDOMXULElement
38 HTMLDocument = Ci.nsIDOMHTMLDocument
39 HTMLElement = Ci.nsIDOMHTMLElement
40 Window = Ci.nsIDOMWindow
41 ChromeWindow = Ci.nsIDOMChromeWindow
42
43 isRootWindow = (window) ->
44 window.location == "chrome://browser/content/browser.xul"
45
46 getEventWindow = (event) ->
47 if event.originalTarget instanceof Window
48 return event.originalTarget
49 else
50 doc = event.originalTarget.ownerDocument or event.originalTarget
51 if doc instanceof HTMLDocument or doc instanceof XULDocument
52 return doc.defaultView
53
54 getEventTabWindow = (event) ->
55 if window = getEventWindow event
56 if isRootWindow window
57 return window.gBrowser.tabs.selectedItem?.contentWindow.wrappedJSObject
58 else
59 return window
60
61 getEventRootWindow = (event) ->
62 if window = getEventWindow event
63 return getRootWindow window
64
65 getEventTabBrowser = (event) ->
66 cw.gBrowser if cw = getEventRootWindow event
67
68
69 getRootWindow = (window) ->
70 return window.QueryInterface(Ci.nsIInterfaceRequestor)
71 .getInterface(Ci.nsIWebNavigation)
72 .QueryInterface(Ci.nsIDocShellTreeItem)
73 .rootTreeItem
74 .QueryInterface(Ci.nsIInterfaceRequestor)
75 .getInterface(Window);
76
77 isElementEditable = (element) ->
78 return element.isContentEditable or \
79 element instanceof HTMLInputElement or \
80 element instanceof HTMLTextAreaElement or \
81 element instanceof HTMLSelectElement
82
83 getWindowId = (window) ->
84 return window.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
85 .getInterface(Components.interfaces.nsIDOMWindowUtils)
86 .outerWindowID
87
88 getSessionStore = ->
89 Cc["@mozilla.org/browser/sessionstore;1"].getService(Ci.nsISessionStore);
90
91 exports.WindowEventTracker = WindowEventTracker
92 exports.isRootWindow = isRootWindow
93 exports.getEventWindow = getEventWindow
94 exports.getEventTabWindow = getEventTabWindow
95 exports.getEventRootWindow = getEventRootWindow
96 exports.getEventTabBrowser = getEventTabBrowser
97
98 exports.getWindowId = getWindowId
99 exports.getRootWindow = getRootWindow
100 exports.isElementEditable = isElementEditable
101 exports.getSessionStore = getSessionStore
Imprint / Impressum