]> git.gir.st - VimFx.git/blob - docs/utils.html
Merge branch 'key-event-handling' into develop
[VimFx.git] / docs / utils.html
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 &hellip; <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">&#182;</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">&#39;window-utils&#39;</span>
2
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>
4
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>
15
16 <span class="nv">_sss = </span><span class="nx">Cc</span><span class="p">[</span><span class="s">&quot;@mozilla.org/content/style-sheet-service;1&quot;</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">&quot;@mozilla.org/widget/clipboard;1&quot;</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>
18
19 <span class="k">class</span> <span class="nx">Bucket</span>
20 <span class="nv">constructor: </span><span class="nf">(@idFunc, @newFunc) -&gt;</span>
21 <span class="vi">@bucket = </span><span class="p">{}</span>
22
23 <span class="nv">get: </span><span class="nf">(obj) -&gt;</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>
29
30 <span class="nv">forget: </span><span class="nf">(obj) -&gt;</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>
32
33
34 <span class="k">class</span> <span class="nx">WindowEventTracker</span>
35 <span class="nv">constructor: </span><span class="nf">(events, eventFilter = null) -&gt;</span>
36
37 <span class="nv">handlerFilter = </span><span class="nf">(handler) -&gt;</span>
38 <span class="k">return</span> <span class="nf">(event) -&gt;</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>
41
42 <span class="nv">addEventListeners = </span><span class="nf">(window) -&gt;</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>
45
46 <span class="nv">removeEventListeners = </span><span class="nf">(window) -&gt;</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>
49
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) -&gt;</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>
54
55 <span class="nv">untrack: </span><span class="nf">(window) -&gt;</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>
58
59 <span class="nv">start: </span><span class="o">-&gt;</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">-&gt;</span> <span class="nx">@windowTracker</span><span class="p">.</span><span class="nx">stop</span><span class="p">()</span>
61
62 <span class="nv">isRootWindow = </span><span class="nf">(window) -&gt;</span>
63 <span class="nb">window</span><span class="p">.</span><span class="nx">location</span> <span class="o">==</span> <span class="s">&quot;chrome://browser/content/browser.xul&quot;</span>
64
65 <span class="nv">getEventWindow = </span><span class="nf">(event) -&gt;</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>
72
73 <span class="nv">getEventTabWindow = </span><span class="nf">(event) -&gt;</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>
79
80 <span class="nv">getEventRootWindow = </span><span class="nf">(event) -&gt;</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>
83
84 <span class="nv">getEventTabBrowser = </span><span class="nf">(event) -&gt;</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>
86
87 <span class="nv">getRootWindow = </span><span class="nf">(window) -&gt;</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>
94
95 <span class="nv">isElementEditable = </span><span class="nf">(element) -&gt;</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>
100
101 <span class="nv">getWindowId = </span><span class="nf">(window) -&gt;</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>
105
106 <span class="nv">getSessionStore = </span><span class="o">-&gt;</span>
107 <span class="nx">Cc</span><span class="p">[</span><span class="s">&quot;@mozilla.org/browser/sessionstore;1&quot;</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">&#182;</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">() -&gt;</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">&quot;resource://gre/modules/Services.jsm&quot;</span><span class="p">,</span> <span class="nx">tools</span>
110 <span class="nf">(name) -&gt;</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">&quot;resources/</span><span class="si">#{</span> <span class="nx">name</span> <span class="si">}</span><span class="s">.css&quot;</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">&#182;</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) -&gt;</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">&#182;</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) -&gt;</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">&#182;</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>
122
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) -&gt;</span>
124 <span class="k">if</span> <span class="nx">keyboardEvent</span><span class="p">.</span><span class="nx">charCode</span> <span class="o">&gt;</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">&#39;Esc&#39;</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">&#39;Backspace&#39;</span>
132 <span class="k">else</span> <span class="nv">char = </span><span class="kc">undefined</span>
133
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">&#182;</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) -&gt;</span>
136 <span class="nv">char = </span><span class="nx">keyboardEventChar</span> <span class="nx">keyboardEvent</span>
137
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>
144
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) -&gt;</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">&#39;&#39;</span>
147 <span class="k">return</span> <span class="s">&quot;&lt;</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">&#39;c&#39;</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">&#39;a&#39;</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">&#39;m&#39;</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">&gt;&quot;</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">&#182;</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) -&gt;</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>
154
155 <span class="nv">eventSequence = </span><span class="p">[</span><span class="s">&quot;mouseover&quot;</span><span class="p">,</span> <span class="s">&quot;mousedown&quot;</span><span class="p">,</span> <span class="s">&quot;mouseup&quot;</span><span class="p">,</span> <span class="s">&quot;click&quot;</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">&quot;MouseEvents&quot;</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">&#182;</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">&#182;</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) -&gt;</span>
161 <span class="nv">str = </span><span class="nx">Cc</span><span class="p">[</span><span class="s">&quot;@mozilla.org/supports-string;1&quot;</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>
163
164 <span class="nv">trans = </span><span class="nx">Cc</span><span class="p">[</span><span class="s">&quot;@mozilla.org/widget/transferable;1&quot;</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">&quot;text/unicode&quot;</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">&quot;text/unicode&quot;</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>
167
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">&#182;</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">() -&gt;</span>
169 <span class="nv">trans = </span><span class="nx">Cc</span><span class="p">[</span><span class="s">&quot;@mozilla.org/widget/transferable;1&quot;</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">&quot;text/unicode&quot;</span><span class="p">);</span>
171
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>
173
174 <span class="nv">str = </span><span class="p">{}</span>
175 <span class="nv">strLength = </span><span class="p">{}</span>
176
177 <span class="nx">trans</span><span class="p">.</span><span class="nx">getTransferData</span><span class="p">(</span><span class="s">&quot;text/unicode&quot;</span><span class="p">,</span> <span class="nx">str</span><span class="p">,</span> <span class="nx">strLength</span><span class="p">)</span>
178
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>
182
183 <span class="k">return</span> <span class="kc">undefined</span>
184
185
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>
193
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>
198
199 <span class="nv">exports.loadCss = </span><span class="nx">loadCss</span>
200 <span class="nv">exports.unloadCss = </span><span class="nx">unloadCss</span>
201
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>
206
207 </pre></div> </td> </tr> </tbody> </table> </div> </body> </html>
Imprint / Impressum