1 <!DOCTYPE html
> <html> <head> <title>utils.coffee
</title> <meta http-equiv=
"content-type" content=
"text/html; charset=UTF-8"> <link rel=
"stylesheet" media=
"all" href=
"docco.css" /> </head> <body> <div id=
"container"> <div id=
"background"></div> <div id=
"jump_to"> Jump To
… <div id=
"jump_wrapper"> <div id=
"jump_page"> <a class=
"source" href=
"commands.html"> commands.coffee
</a> <a class=
"source" href=
"console.html"> console.coffee
</a> <a class=
"source" href=
"event-handlers.html"> event-handlers.coffee
</a> <a class=
"source" href=
"hints.html"> hints.coffee
</a> <a class=
"source" href=
"marker.html"> marker.coffee
</a> <a class=
"source" href=
"utils.html"> utils.coffee
</a> <a class=
"source" href=
"vim.html"> vim.coffee
</a> <a class=
"source" href=
"window-utils.html"> window-utils.coffee
</a> </div> </div> </div> <table cellpadding=
"0" cellspacing=
"0"> <thead> <tr> <th class=
"docs"> <h1> utils.coffee
</h1> </th> <th class=
"code"> </th> </tr> </thead> <tbody> <tr id=
"section-1"> <td class=
"docs"> <div class=
"pilwrap"> <a class=
"pilcrow" href=
"#section-1">¶</a> </div> </td> <td class=
"code"> <div class=
"highlight"><pre><span class=
"p">{
</span> <span class=
"nx">WindowTracker
</span><span class=
"p">,
</span> <span class=
"nx">isBrowserWindow
</span> <span class=
"p">}
</span> <span class=
"o">=
</span> <span class=
"nx">require
</span> <span class=
"s">'window-utils
'</span>
3 <span class=
"p">{
</span> <span class=
"nv">interfaces:
</span><span class=
"nx">Ci
</span><span class=
"p">,
</span> <span class=
"nv">classes:
</span><span class=
"nx">Cc
</span> <span class=
"p">}
</span> <span class=
"o">=
</span> <span class=
"nx">Components
</span>
5 <span class=
"nv">HTMLInputElement =
</span><span class=
"nx">Ci
</span><span class=
"p">.
</span><span class=
"nx">nsIDOMHTMLInputElement
</span>
6 <span class=
"nv">HTMLTextAreaElement =
</span><span class=
"nx">Ci
</span><span class=
"p">.
</span><span class=
"nx">nsIDOMHTMLTextAreaElement
</span>
7 <span class=
"nv">HTMLSelectElement =
</span><span class=
"nx">Ci
</span><span class=
"p">.
</span><span class=
"nx">nsIDOMHTMLSelectElement
</span>
8 <span class=
"nv">XULDocument =
</span><span class=
"nx">Ci
</span><span class=
"p">.
</span><span class=
"nx">nsIDOMXULDocument
</span>
9 <span class=
"nv">XULElement =
</span><span class=
"nx">Ci
</span><span class=
"p">.
</span><span class=
"nx">nsIDOMXULElement
</span>
10 <span class=
"nv">HTMLDocument =
</span><span class=
"nx">Ci
</span><span class=
"p">.
</span><span class=
"nx">nsIDOMHTMLDocument
</span>
11 <span class=
"nv">HTMLElement =
</span><span class=
"nx">Ci
</span><span class=
"p">.
</span><span class=
"nx">nsIDOMHTMLElement
</span>
12 <span class=
"nv">Window =
</span><span class=
"nx">Ci
</span><span class=
"p">.
</span><span class=
"nx">nsIDOMWindow
</span>
13 <span class=
"nv">ChromeWindow =
</span><span class=
"nx">Ci
</span><span class=
"p">.
</span><span class=
"nx">nsIDOMChromeWindow
</span>
14 <span class=
"nv">KeyboardEvent =
</span><span class=
"nx">Ci
</span><span class=
"p">.
</span><span class=
"nx">nsIDOMKeyEvent
</span>
16 <span class=
"nv">_sss =
</span><span class=
"nx">Cc
</span><span class=
"p">[
</span><span class=
"s">"@mozilla.org/content/style-sheet-service;
1"</span><span class=
"p">].
</span><span class=
"nx">getService
</span><span class=
"p">(
</span><span class=
"nx">Ci
</span><span class=
"p">.
</span><span class=
"nx">nsIStyleSheetService
</span><span class=
"p">)
</span>
17 <span class=
"nv">_clip =
</span><span class=
"nx">Cc
</span><span class=
"p">[
</span><span class=
"s">"@mozilla.org/widget/clipboard;
1"</span><span class=
"p">].
</span><span class=
"nx">getService
</span><span class=
"p">(
</span><span class=
"nx">Ci
</span><span class=
"p">.
</span><span class=
"nx">nsIClipboard
</span><span class=
"p">)
</span>
19 <span class=
"k">class
</span> <span class=
"nx">Bucket
</span>
20 <span class=
"nv">constructor:
</span><span class=
"nf">(@idFunc, @newFunc) -
></span>
21 <span class=
"vi">@bucket =
</span><span class=
"p">{}
</span>
23 <span class=
"nv">get:
</span><span class=
"nf">(obj) -
></span>
24 <span class=
"nv">id =
</span><span class=
"nx">@idFunc
</span> <span class=
"nx">obj
</span>
25 <span class=
"k">if
</span> <span class=
"nv">container =
</span><span class=
"nx">@bucket
</span><span class=
"p">[
</span><span class=
"nx">id
</span><span class=
"p">]
</span>
26 <span class=
"k">return
</span> <span class=
"nx">container
</span>
27 <span class=
"k">else
</span>
28 <span class=
"k">return
</span> <span class=
"nx">@bucket
</span><span class=
"p">[
</span><span class=
"nx">id
</span><span class=
"p">]
</span> <span class=
"o">=
</span> <span class=
"nx">@newFunc
</span> <span class=
"nx">obj
</span>
30 <span class=
"nv">forget:
</span><span class=
"nf">(obj) -
></span>
31 <span class=
"k">delete
</span> <span class=
"nx">@bucket
</span><span class=
"p">[
</span><span class=
"nx">id
</span><span class=
"p">]
</span> <span class=
"k">if
</span> <span class=
"nv">id =
</span><span class=
"nx">@idFunc
</span> <span class=
"nx">obj
</span>
34 <span class=
"k">class
</span> <span class=
"nx">WindowEventTracker
</span>
35 <span class=
"nv">constructor:
</span><span class=
"nf">(events, eventFilter = null) -
></span>
37 <span class=
"nv">handlerFilter =
</span><span class=
"nf">(handler) -
></span>
38 <span class=
"k">return
</span> <span class=
"nf">(event) -
></span>
39 <span class=
"k">if
</span> <span class=
"o">!
</span><span class=
"nx">eventFilter
</span> <span class=
"o">or
</span> <span class=
"nx">eventFilter
</span> <span class=
"nx">event
</span>
40 <span class=
"nx">handler
</span> <span class=
"nx">event
</span>
42 <span class=
"nv">addEventListeners =
</span><span class=
"nf">(window) -
></span>
43 <span class=
"k">for
</span> <span class=
"nx">name
</span><span class=
"p">,
</span> <span class=
"nx">handler
</span> <span class=
"k">of
</span> <span class=
"nx">events
</span>
44 <span class=
"nb">window
</span><span class=
"p">.
</span><span class=
"nx">addEventListener
</span> <span class=
"nx">name
</span><span class=
"p">,
</span> <span class=
"nx">handlerFilter
</span><span class=
"p">(
</span><span class=
"nx">handler
</span><span class=
"p">),
</span> <span class=
"kc">false
</span>
46 <span class=
"nv">removeEventListeners =
</span><span class=
"nf">(window) -
></span>
47 <span class=
"k">for
</span> <span class=
"nx">name
</span><span class=
"p">,
</span> <span class=
"nx">handler
</span> <span class=
"k">of
</span> <span class=
"nx">events
</span>
48 <span class=
"nb">window
</span><span class=
"p">.
</span><span class=
"nx">removeEventListener
</span> <span class=
"nx">name
</span><span class=
"p">,
</span> <span class=
"nx">handlerFilter
</span><span class=
"p">(
</span><span class=
"nx">handler
</span><span class=
"p">),
</span> <span class=
"kc">false
</span>
50 <span class=
"vi">@windowTracker =
</span><span class=
"k">new
</span> <span class=
"nx">WindowTracker
</span>
51 <span class=
"nv">track:
</span><span class=
"nf">(window) -
></span>
52 <span class=
"k">if
</span> <span class=
"nx">isBrowserWindow
</span> <span class=
"nb">window
</span>
53 <span class=
"nx">addEventListeners
</span> <span class=
"nb">window
</span>
55 <span class=
"nv">untrack:
</span><span class=
"nf">(window) -
></span>
56 <span class=
"k">if
</span> <span class=
"nx">isBrowserWindow
</span> <span class=
"nb">window
</span>
57 <span class=
"nx">removeEventListeners
</span> <span class=
"nb">window
</span>
59 <span class=
"nv">start:
</span><span class=
"o">-
></span> <span class=
"nx">@windowTracker
</span><span class=
"p">.
</span><span class=
"nx">start
</span><span class=
"p">()
</span>
60 <span class=
"nv">stop:
</span><span class=
"o">-
></span> <span class=
"nx">@windowTracker
</span><span class=
"p">.
</span><span class=
"nx">stop
</span><span class=
"p">()
</span>
62 <span class=
"nv">isRootWindow =
</span><span class=
"nf">(window) -
></span>
63 <span class=
"nb">window
</span><span class=
"p">.
</span><span class=
"nx">location
</span> <span class=
"o">==
</span> <span class=
"s">"chrome://browser/content/browser.xul
"</span>
65 <span class=
"nv">getEventWindow =
</span><span class=
"nf">(event) -
></span>
66 <span class=
"k">if
</span> <span class=
"nx">event
</span><span class=
"p">.
</span><span class=
"nx">originalTarget
</span> <span class=
"k">instanceof
</span> <span class=
"nx">Window
</span>
67 <span class=
"k">return
</span> <span class=
"nx">event
</span><span class=
"p">.
</span><span class=
"nx">originalTarget
</span>
68 <span class=
"k">else
</span>
69 <span class=
"nv">doc =
</span><span class=
"nx">event
</span><span class=
"p">.
</span><span class=
"nx">originalTarget
</span><span class=
"p">.
</span><span class=
"nx">ownerDocument
</span> <span class=
"o">or
</span> <span class=
"nx">event
</span><span class=
"p">.
</span><span class=
"nx">originalTarget
</span>
70 <span class=
"k">if
</span> <span class=
"nx">doc
</span> <span class=
"k">instanceof
</span> <span class=
"nx">HTMLDocument
</span> <span class=
"o">or
</span> <span class=
"nx">doc
</span> <span class=
"k">instanceof
</span> <span class=
"nx">XULDocument
</span>
71 <span class=
"k">return
</span> <span class=
"nx">doc
</span><span class=
"p">.
</span><span class=
"nx">defaultView
</span>
73 <span class=
"nv">getEventTabWindow =
</span><span class=
"nf">(event) -
></span>
74 <span class=
"k">if
</span> <span class=
"nb">window
</span> <span class=
"o">=
</span> <span class=
"nx">getEventWindow
</span> <span class=
"nx">event
</span>
75 <span class=
"k">if
</span> <span class=
"nx">isRootWindow
</span> <span class=
"nb">window
</span>
76 <span class=
"k">return
</span> <span class=
"nb">window
</span><span class=
"p">.
</span><span class=
"nx">gBrowser
</span><span class=
"p">.
</span><span class=
"nx">tabs
</span><span class=
"p">.
</span><span class=
"nx">selectedItem
</span><span class=
"o">?
</span><span class=
"p">.
</span><span class=
"nx">contentWindow
</span><span class=
"p">.
</span><span class=
"nx">wrappedJSObject
</span>
77 <span class=
"k">else
</span>
78 <span class=
"k">return
</span> <span class=
"nb">window
</span>
80 <span class=
"nv">getEventRootWindow =
</span><span class=
"nf">(event) -
></span>
81 <span class=
"k">if
</span> <span class=
"nb">window
</span> <span class=
"o">=
</span> <span class=
"nx">getEventWindow
</span> <span class=
"nx">event
</span>
82 <span class=
"k">return
</span> <span class=
"nx">getRootWindow
</span> <span class=
"nb">window
</span>
84 <span class=
"nv">getEventTabBrowser =
</span><span class=
"nf">(event) -
></span>
85 <span class=
"nx">cw
</span><span class=
"p">.
</span><span class=
"nx">gBrowser
</span> <span class=
"k">if
</span> <span class=
"nv">cw =
</span><span class=
"nx">getEventRootWindow
</span> <span class=
"nx">event
</span>
87 <span class=
"nv">getRootWindow =
</span><span class=
"nf">(window) -
></span>
88 <span class=
"k">return
</span> <span class=
"nb">window
</span><span class=
"p">.
</span><span class=
"nx">QueryInterface
</span><span class=
"p">(
</span><span class=
"nx">Ci
</span><span class=
"p">.
</span><span class=
"nx">nsIInterfaceRequestor
</span><span class=
"p">)
</span>
89 <span class=
"p">.
</span><span class=
"nx">getInterface
</span><span class=
"p">(
</span><span class=
"nx">Ci
</span><span class=
"p">.
</span><span class=
"nx">nsIWebNavigation
</span><span class=
"p">)
</span>
90 <span class=
"p">.
</span><span class=
"nx">QueryInterface
</span><span class=
"p">(
</span><span class=
"nx">Ci
</span><span class=
"p">.
</span><span class=
"nx">nsIDocShellTreeItem
</span><span class=
"p">)
</span>
91 <span class=
"p">.
</span><span class=
"nx">rootTreeItem
</span>
92 <span class=
"p">.
</span><span class=
"nx">QueryInterface
</span><span class=
"p">(
</span><span class=
"nx">Ci
</span><span class=
"p">.
</span><span class=
"nx">nsIInterfaceRequestor
</span><span class=
"p">)
</span>
93 <span class=
"p">.
</span><span class=
"nx">getInterface
</span><span class=
"p">(
</span><span class=
"nx">Window
</span><span class=
"p">);
</span>
95 <span class=
"nv">isElementEditable =
</span><span class=
"nf">(element) -
></span>
96 <span class=
"k">return
</span> <span class=
"nx">element
</span><span class=
"p">.
</span><span class=
"nx">isContentEditable
</span> <span class=
"o">or
</span> <span class=
"o">\
</span>
97 <span class=
"nx">element
</span> <span class=
"k">instanceof
</span> <span class=
"nx">HTMLInputElement
</span> <span class=
"o">or
</span> <span class=
"o">\
</span>
98 <span class=
"nx">element
</span> <span class=
"k">instanceof
</span> <span class=
"nx">HTMLTextAreaElement
</span> <span class=
"o">or
</span> <span class=
"o">\
</span>
99 <span class=
"nx">element
</span> <span class=
"k">instanceof
</span> <span class=
"nx">HTMLSelectElement
</span>
101 <span class=
"nv">getWindowId =
</span><span class=
"nf">(window) -
></span>
102 <span class=
"k">return
</span> <span class=
"nb">window
</span><span class=
"p">.
</span><span class=
"nx">QueryInterface
</span><span class=
"p">(
</span><span class=
"nx">Components
</span><span class=
"p">.
</span><span class=
"nx">interfaces
</span><span class=
"p">.
</span><span class=
"nx">nsIInterfaceRequestor
</span><span class=
"p">)
</span>
103 <span class=
"p">.
</span><span class=
"nx">getInterface
</span><span class=
"p">(
</span><span class=
"nx">Components
</span><span class=
"p">.
</span><span class=
"nx">interfaces
</span><span class=
"p">.
</span><span class=
"nx">nsIDOMWindowUtils
</span><span class=
"p">)
</span>
104 <span class=
"p">.
</span><span class=
"nx">outerWindowID
</span>
106 <span class=
"nv">getSessionStore =
</span><span class=
"o">-
></span>
107 <span class=
"nx">Cc
</span><span class=
"p">[
</span><span class=
"s">"@mozilla.org/browser/sessionstore;
1"</span><span class=
"p">].
</span><span class=
"nx">getService
</span><span class=
"p">(
</span><span class=
"nx">Ci
</span><span class=
"p">.
</span><span class=
"nx">nsISessionStore
</span><span class=
"p">);
</span></pre></div> </td> </tr> <tr id=
"section-2"> <td class=
"docs"> <div class=
"pilwrap"> <a class=
"pilcrow" href=
"#section-2">¶</a> </div> <p>Function that returns a URI to the css file that's part of the extension
</p> </td> <td class=
"code"> <div class=
"highlight"><pre><span class=
"nv">cssUri =
</span><span class=
"nx">do
</span> <span class=
"nf">() -
></span>
108 <span class=
"nv">tools =
</span><span class=
"p">{}
</span>
109 <span class=
"nx">Cu
</span><span class=
"p">.
</span><span class=
"nx">import
</span> <span class=
"s">"resource://gre/modules/Services.jsm
"</span><span class=
"p">,
</span> <span class=
"nx">tools
</span>
110 <span class=
"nf">(name) -
></span>
111 <span class=
"nv">baseURI =
</span><span class=
"nx">tools
</span><span class=
"p">.
</span><span class=
"nx">Services
</span><span class=
"p">.
</span><span class=
"nx">io
</span><span class=
"p">.
</span><span class=
"nx">newURI
</span> <span class=
"nx">__SCRIPT_URI_SPEC__
</span><span class=
"p">,
</span> <span class=
"kc">null
</span><span class=
"p">,
</span> <span class=
"kc">null
</span>
112 <span class=
"nv">uri =
</span><span class=
"nx">tools
</span><span class=
"p">.
</span><span class=
"nx">Services
</span><span class=
"p">.
</span><span class=
"nx">io
</span><span class=
"p">.
</span><span class=
"nx">newURI
</span> <span class=
"s">"resources/
</span><span class=
"si">#{
</span> <span class=
"nx">name
</span> <span class=
"si">}
</span><span class=
"s">.css
"</span><span class=
"p">,
</span> <span class=
"kc">null
</span><span class=
"p">,
</span> <span class=
"nx">baseURI
</span>
113 <span class=
"k">return
</span> <span class=
"nx">uri
</span></pre></div> </td> </tr> <tr id=
"section-3"> <td class=
"docs"> <div class=
"pilwrap"> <a class=
"pilcrow" href=
"#section-3">¶</a> </div> <p>Loads the css identified by the name in the StyleSheetService as User Stylesheet
114 The stylesheet is then appended to every document, but it can be overwritten by
115 any user css
</p> </td> <td class=
"code"> <div class=
"highlight"><pre><span class=
"nv">loadCss =
</span><span class=
"nf">(name) -
></span>
116 <span class=
"nx">_sss
</span><span class=
"p">.
</span><span class=
"nx">loadAndRegisterSheet
</span><span class=
"p">(
</span><span class=
"nx">cssUri
</span><span class=
"p">(
</span><span class=
"nx">name
</span><span class=
"p">),
</span> <span class=
"nx">_sss
</span><span class=
"p">.
</span><span class=
"nx">USER_SHEET
</span><span class=
"p">)
</span></pre></div> </td> </tr> <tr id=
"section-4"> <td class=
"docs"> <div class=
"pilwrap"> <a class=
"pilcrow" href=
"#section-4">¶</a> </div> <p>Unloads the css file that's been loaded earlier with
<code>loadCss
</code></p> </td> <td class=
"code"> <div class=
"highlight"><pre><span class=
"nv">unloadCss =
</span><span class=
"nf">(name) -
></span>
117 <span class=
"nv">uri =
</span><span class=
"nx">cssUri
</span><span class=
"p">(
</span><span class=
"nx">name
</span><span class=
"p">)
</span>
118 <span class=
"k">if
</span> <span class=
"nx">_sss
</span><span class=
"p">.
</span><span class=
"nx">sheetRegistered
</span><span class=
"p">(
</span><span class=
"nx">uri
</span><span class=
"p">,
</span> <span class=
"nx">_sss
</span><span class=
"p">.
</span><span class=
"nx">USER_SHEET
</span><span class=
"p">)
</span>
119 <span class=
"nx">_sss
</span><span class=
"p">.
</span><span class=
"nx">unregisterSheet
</span><span class=
"p">(
</span><span class=
"nx">uri
</span><span class=
"p">,
</span> <span class=
"nx">_sss
</span><span class=
"p">.
</span><span class=
"nx">USER_SHEET
</span><span class=
"p">)
</span></pre></div> </td> </tr> <tr id=
"section-5"> <td class=
"docs"> <div class=
"pilwrap"> <a class=
"pilcrow" href=
"#section-5">¶</a> </div> <p>processes the keyboard event and extracts string representation
120 of the key
<em>without modifiers
</em> in case this is the kind of a key
121 that can be handled by the extension
</p>
123 <p>Currently we handle letters, Escape and Tab keys
</p> </td> <td class=
"code"> <div class=
"highlight"><pre><span class=
"nv">keyboardEventChar =
</span><span class=
"nf">(keyboardEvent) -
></span>
124 <span class=
"k">if
</span> <span class=
"nx">keyboardEvent
</span><span class=
"p">.
</span><span class=
"nx">charCode
</span> <span class=
"o">></span> <span class=
"mi">0</span>
125 <span class=
"nv">char =
</span><span class=
"nb">String
</span><span class=
"p">.
</span><span class=
"nx">fromCharCode
</span><span class=
"p">(
</span><span class=
"nx">keyboardEvent
</span><span class=
"p">.
</span><span class=
"nx">charCode
</span><span class=
"p">)
</span>
126 <span class=
"k">if
</span> <span class=
"nx">char
</span><span class=
"p">.
</span><span class=
"nx">match
</span> <span class=
"sr">/\s/
</span>
127 <span class=
"nv">char =
</span><span class=
"kc">undefined
</span>
128 <span class=
"k">else
</span>
129 <span class=
"k">switch
</span> <span class=
"nx">keyboardEvent
</span><span class=
"p">.
</span><span class=
"nx">keyCode
</span>
130 <span class=
"k">when
</span> <span class=
"nx">KeyboardEvent
</span><span class=
"p">.
</span><span class=
"nx">DOM_VK_ESCAPE
</span> <span class=
"k">then
</span> <span class=
"nv">char =
</span><span class=
"s">'Esc
'</span>
131 <span class=
"k">when
</span> <span class=
"nx">KeyboardEvent
</span><span class=
"p">.
</span><span class=
"nx">DOM_VK_BACK_SPACE
</span> <span class=
"k">then
</span> <span class=
"nv">char =
</span><span class=
"s">'Backspace
'</span>
132 <span class=
"k">else
</span> <span class=
"nv">char =
</span><span class=
"kc">undefined
</span>
134 <span class=
"k">return
</span> <span class=
"nx">char
</span></pre></div> </td> </tr> <tr id=
"section-6"> <td class=
"docs"> <div class=
"pilwrap"> <a class=
"pilcrow" href=
"#section-6">¶</a> </div> <p>extracts string representation of the KeyboardEvent and adds
135 relevant modifiers (
<em>ctrl
</em>,
<em>alt
</em>,
<em>meta
</em>) in case they were pressed
</p> </td> <td class=
"code"> <div class=
"highlight"><pre><span class=
"nv">keyboardEventKey =
</span><span class=
"nf">(keyboardEvent) -
></span>
136 <span class=
"nv">char =
</span><span class=
"nx">keyboardEventChar
</span> <span class=
"nx">keyboardEvent
</span>
138 <span class=
"p">{
</span>
139 <span class=
"nv">shiftKey:
</span><span class=
"nx">shift
</span><span class=
"p">,
</span>
140 <span class=
"nv">altKey:
</span> <span class=
"nx">alt
</span><span class=
"p">,
</span>
141 <span class=
"nv">ctrlKey:
</span> <span class=
"nx">ctrl
</span><span class=
"p">,
</span>
142 <span class=
"nv">metaKey:
</span> <span class=
"nx">meta
</span><span class=
"p">,
</span>
143 <span class=
"p">}
</span> <span class=
"o">=
</span> <span class=
"nx">keyboardEvent
</span>
145 <span class=
"k">if
</span> <span class=
"nx">alt
</span> <span class=
"o">or
</span> <span class=
"nx">ctrl
</span> <span class=
"o">or
</span> <span class=
"nx">meta
</span>
146 <span class=
"nv">k =
</span><span class=
"nf">(a, b) -
></span> <span class=
"k">if
</span> <span class=
"nx">a
</span> <span class=
"k">then
</span> <span class=
"nx">b
</span> <span class=
"k">else
</span> <span class=
"s">''</span>
147 <span class=
"k">return
</span> <span class=
"s">"<</span><span class=
"si">#{
</span> <span class=
"nx">k
</span><span class=
"p">(
</span><span class=
"nx">ctrl
</span><span class=
"p">,
</span> <span class=
"s">'c
'</span><span class=
"p">)
</span> <span class=
"o">+
</span> <span class=
"nx">k
</span><span class=
"p">(
</span><span class=
"nx">alt
</span><span class=
"p">,
</span> <span class=
"s">'a
'</span><span class=
"p">)
</span> <span class=
"o">+
</span> <span class=
"nx">k
</span><span class=
"p">(
</span><span class=
"nx">meta
</span><span class=
"p">,
</span> <span class=
"s">'m
'</span><span class=
"p">)
</span> <span class=
"si">}
</span><span class=
"s">-
</span><span class=
"si">#{
</span> <span class=
"nx">char
</span> <span class=
"si">}
</span><span class=
"s">>"</span>
148 <span class=
"k">else
</span>
149 <span class=
"k">return
</span> <span class=
"nx">char
</span></pre></div> </td> </tr> <tr id=
"section-7"> <td class=
"docs"> <div class=
"pilwrap"> <a class=
"pilcrow" href=
"#section-7">¶</a> </div> <p>Simulate mouse click with full chain of event
150 Copied from Vimium codebase
</p> </td> <td class=
"code"> <div class=
"highlight"><pre><span class=
"nv">simulateClick =
</span><span class=
"nf">(element, modifiers) -
></span>
151 <span class=
"nb">document
</span> <span class=
"o">=
</span> <span class=
"nx">element
</span><span class=
"p">.
</span><span class=
"nx">ownerDocument
</span>
152 <span class=
"nb">window
</span> <span class=
"o">=
</span> <span class=
"nb">document
</span><span class=
"p">.
</span><span class=
"nx">defaultView
</span>
153 <span class=
"nx">modifiers
</span> <span class=
"o">||=
</span> <span class=
"p">{}
</span>
155 <span class=
"nv">eventSequence =
</span><span class=
"p">[
</span><span class=
"s">"mouseover
"</span><span class=
"p">,
</span> <span class=
"s">"mousedown
"</span><span class=
"p">,
</span> <span class=
"s">"mouseup
"</span><span class=
"p">,
</span> <span class=
"s">"click
"</span><span class=
"p">]
</span>
156 <span class=
"k">for
</span> <span class=
"nx">event
</span> <span class=
"k">in
</span> <span class=
"nx">eventSequence
</span>
157 <span class=
"nv">mouseEvent =
</span><span class=
"nb">document
</span><span class=
"p">.
</span><span class=
"nx">createEvent
</span><span class=
"p">(
</span><span class=
"s">"MouseEvents
"</span><span class=
"p">)
</span>
158 <span class=
"nx">mouseEvent
</span><span class=
"p">.
</span><span class=
"nx">initMouseEvent
</span><span class=
"p">(
</span><span class=
"nx">event
</span><span class=
"p">,
</span> <span class=
"kc">true
</span><span class=
"p">,
</span> <span class=
"kc">true
</span><span class=
"p">,
</span> <span class=
"nb">window
</span><span class=
"p">,
</span> <span class=
"mi">1</span><span class=
"p">,
</span> <span class=
"mi">0</span><span class=
"p">,
</span> <span class=
"mi">0</span><span class=
"p">,
</span> <span class=
"mi">0</span><span class=
"p">,
</span> <span class=
"mi">0</span><span class=
"p">,
</span> <span class=
"nx">modifiers
</span><span class=
"p">.
</span><span class=
"nx">ctrlKey
</span><span class=
"p">,
</span> <span class=
"kc">false
</span><span class=
"p">,
</span> <span class=
"kc">false
</span><span class=
"p">,
</span>
159 <span class=
"nx">modifiers
</span><span class=
"p">.
</span><span class=
"nx">metaKey
</span><span class=
"p">,
</span> <span class=
"mi">0</span><span class=
"p">,
</span> <span class=
"kc">null
</span><span class=
"p">)
</span></pre></div> </td> </tr> <tr id=
"section-8"> <td class=
"docs"> <div class=
"pilwrap"> <a class=
"pilcrow" href=
"#section-8">¶</a> </div> <p>Debugging note: Firefox will not execute the element's default action if we dispatch this click event,
160 but Webkit will. Dispatching a click on an input box does not seem to focus it; we do that separately
</p> </td> <td class=
"code"> <div class=
"highlight"><pre> <span class=
"nx">element
</span><span class=
"p">.
</span><span class=
"nx">dispatchEvent
</span><span class=
"p">(
</span><span class=
"nx">mouseEvent
</span><span class=
"p">)
</span></pre></div> </td> </tr> <tr id=
"section-9"> <td class=
"docs"> <div class=
"pilwrap"> <a class=
"pilcrow" href=
"#section-9">¶</a> </div> <p>Write a string into system clipboard
</p> </td> <td class=
"code"> <div class=
"highlight"><pre><span class=
"nv">writeToClipboard =
</span><span class=
"nf">(text) -
></span>
161 <span class=
"nv">str =
</span><span class=
"nx">Cc
</span><span class=
"p">[
</span><span class=
"s">"@mozilla.org/supports-string;
1"</span><span class=
"p">].
</span><span class=
"nx">createInstance
</span><span class=
"p">(
</span><span class=
"nx">Ci
</span><span class=
"p">.
</span><span class=
"nx">nsISupportsString
</span><span class=
"p">);
</span>
162 <span class=
"nv">str.data =
</span><span class=
"nx">text
</span>
164 <span class=
"nv">trans =
</span><span class=
"nx">Cc
</span><span class=
"p">[
</span><span class=
"s">"@mozilla.org/widget/transferable;
1"</span><span class=
"p">].
</span><span class=
"nx">createInstance
</span><span class=
"p">(
</span><span class=
"nx">Ci
</span><span class=
"p">.
</span><span class=
"nx">nsITransferable
</span><span class=
"p">);
</span>
165 <span class=
"nx">trans
</span><span class=
"p">.
</span><span class=
"nx">addDataFlavor
</span><span class=
"p">(
</span><span class=
"s">"text/unicode
"</span><span class=
"p">);
</span>
166 <span class=
"nx">trans
</span><span class=
"p">.
</span><span class=
"nx">setTransferData
</span><span class=
"p">(
</span><span class=
"s">"text/unicode
"</span><span class=
"p">,
</span> <span class=
"nx">str
</span><span class=
"p">,
</span> <span class=
"nx">text
</span><span class=
"p">.
</span><span class=
"nx">length
</span> <span class=
"o">*
</span> <span class=
"mi">2</span><span class=
"p">);
</span>
168 <span class=
"nx">_clip
</span><span class=
"p">.
</span><span class=
"nx">setData
</span> <span class=
"nx">trans
</span><span class=
"p">,
</span> <span class=
"kc">null
</span><span class=
"p">,
</span> <span class=
"nx">Ci
</span><span class=
"p">.
</span><span class=
"nx">nsIClipboard
</span><span class=
"p">.
</span><span class=
"nx">kGlobalClipboard
</span></pre></div> </td> </tr> <tr id=
"section-10"> <td class=
"docs"> <div class=
"pilwrap"> <a class=
"pilcrow" href=
"#section-10">¶</a> </div> <p>Write a string into system clipboard
</p> </td> <td class=
"code"> <div class=
"highlight"><pre><span class=
"nv">readFromClipboard =
</span><span class=
"nf">() -
></span>
169 <span class=
"nv">trans =
</span><span class=
"nx">Cc
</span><span class=
"p">[
</span><span class=
"s">"@mozilla.org/widget/transferable;
1"</span><span class=
"p">].
</span><span class=
"nx">createInstance
</span><span class=
"p">(
</span><span class=
"nx">Ci
</span><span class=
"p">.
</span><span class=
"nx">nsITransferable
</span><span class=
"p">);
</span>
170 <span class=
"nx">trans
</span><span class=
"p">.
</span><span class=
"nx">addDataFlavor
</span><span class=
"p">(
</span><span class=
"s">"text/unicode
"</span><span class=
"p">);
</span>
172 <span class=
"nx">_clip
</span><span class=
"p">.
</span><span class=
"nx">getData
</span> <span class=
"nx">trans
</span><span class=
"p">,
</span> <span class=
"nx">Ci
</span><span class=
"p">.
</span><span class=
"nx">nsIClipboard
</span><span class=
"p">.
</span><span class=
"nx">kGlobalClipboard
</span>
174 <span class=
"nv">str =
</span><span class=
"p">{}
</span>
175 <span class=
"nv">strLength =
</span><span class=
"p">{}
</span>
177 <span class=
"nx">trans
</span><span class=
"p">.
</span><span class=
"nx">getTransferData
</span><span class=
"p">(
</span><span class=
"s">"text/unicode
"</span><span class=
"p">,
</span> <span class=
"nx">str
</span><span class=
"p">,
</span> <span class=
"nx">strLength
</span><span class=
"p">)
</span>
179 <span class=
"k">if
</span> <span class=
"nx">str
</span>
180 <span class=
"nv">str =
</span><span class=
"nx">str
</span><span class=
"p">.
</span><span class=
"nx">value
</span><span class=
"p">.
</span><span class=
"nx">QueryInterface
</span><span class=
"p">(
</span><span class=
"nx">Ci
</span><span class=
"p">.
</span><span class=
"nx">nsISupportsString
</span><span class=
"p">);
</span>
181 <span class=
"k">return
</span> <span class=
"nx">str
</span><span class=
"p">.
</span><span class=
"nx">data
</span><span class=
"p">.
</span><span class=
"nx">substring
</span> <span class=
"mi">0</span><span class=
"p">,
</span> <span class=
"nx">strLength
</span><span class=
"p">.
</span><span class=
"nx">value
</span> <span class=
"o">/
</span> <span class=
"mi">2</span>
183 <span class=
"k">return
</span> <span class=
"kc">undefined
</span>
186 <span class=
"nv">exports.WindowEventTracker =
</span><span class=
"nx">WindowEventTracker
</span>
187 <span class=
"nv">exports.Bucket =
</span><span class=
"nx">Bucket
</span>
188 <span class=
"nv">exports.isRootWindow =
</span><span class=
"nx">isRootWindow
</span>
189 <span class=
"nv">exports.getEventWindow =
</span><span class=
"nx">getEventWindow
</span>
190 <span class=
"nv">exports.getEventTabWindow =
</span><span class=
"nx">getEventTabWindow
</span>
191 <span class=
"nv">exports.getEventRootWindow =
</span><span class=
"nx">getEventRootWindow
</span>
192 <span class=
"nv">exports.getEventTabBrowser =
</span><span class=
"nx">getEventTabBrowser
</span>
194 <span class=
"nv">exports.getWindowId =
</span><span class=
"nx">getWindowId
</span>
195 <span class=
"nv">exports.getRootWindow =
</span><span class=
"nx">getRootWindow
</span>
196 <span class=
"nv">exports.isElementEditable =
</span><span class=
"nx">isElementEditable
</span>
197 <span class=
"nv">exports.getSessionStore =
</span><span class=
"nx">getSessionStore
</span>
199 <span class=
"nv">exports.loadCss =
</span><span class=
"nx">loadCss
</span>
200 <span class=
"nv">exports.unloadCss =
</span><span class=
"nx">unloadCss
</span>
202 <span class=
"nv">exports.keyboardEventKey =
</span><span class=
"nx">keyboardEventKey
</span>
203 <span class=
"nv">exports.simulateClick =
</span><span class=
"nx">simulateClick
</span>
204 <span class=
"nv">exports.readFromClipboard =
</span><span class=
"nx">readFromClipboard
</span>
205 <span class=
"nv">exports.writeToClipboard =
</span><span class=
"nx">writeToClipboard
</span>
207 </pre></div> </td> </tr> </tbody> </table> </div> </body> </html>