]> git.gir.st - VimFx.git/blob - packages/hints.coffee
hints are finally showing up on the pages. currently they are displayed for all the...
[VimFx.git] / packages / hints.coffee
1 HINTCHARS = 'asdfghjkl;'
2 CONTAINER_ID = 'vimffHintMarkerContainer'
3
4 { interfaces: Ci } = Components
5 HTMLDocument = Ci.nsIDOMHTMLDocument
6 { Marker, getElementRect } = require 'marker'
7
8 indexToHint = (i, chars) ->
9 return '' if i < 0
10
11 n = chars.length
12 l = Math.floor(i / n); k = i % n;
13
14 return indexToHint(l - 1, chars) + chars[k]
15
16 hintToIndex = (hint, chars) ->
17 return -1 if hint.length < 1
18
19 n = chars.length; m = hint.length
20
21 i = chars.indexOf(hint[m - 1])
22 if hint.length > 1
23 base = hintToIndex(hint.slice(0, m - 1), chars)
24 i += (base + 1) * n
25
26 return i
27
28 getHintsContainer = (document) ->
29 document.getElementById CONTAINER_ID
30
31 createHintsContainer = (document) ->
32 container = document.createElement 'div'
33 container.id = CONTAINER_ID
34 return container
35
36 hasHints = (document) ->
37 document.getUserData 'vimff.has_hints'
38
39 addHints = (document, cb) ->
40 if hasHints document
41 removeHints document
42
43 if document instanceof HTMLDocument
44 container = createHintsContainer document
45
46 start = new Date().getTime()
47
48 markers = {}; i = 0;
49 for link in document.links
50 if rect = getElementRect link
51 hint = indexToHint(i++, HINTCHARS)
52 marker = new Marker(link, container)
53 marker.setPosition rect
54 marker.setHint hint
55 markers[hint] = marker
56
57 console.log new Date().getTime() - start, 'aaaaa'
58
59 document.setUserData 'vimff.has_hints', true, null
60 document.setUserData 'vimff.markers', markers, null
61
62 document.body.appendChild container
63
64 removeHints = (document) ->
65 console.log hasHints document
66 if hasHints document
67 document.setUserData 'vimff.has_hints', undefined, null
68 document.setUserData 'vimff.markers', undefined, null
69
70 document.body.removeChild container if container = getHintsContainer document
71
72 exports.addHints = addHints
73 exports.removeHints = removeHints
74 exports.hasHints = removeHints
Imprint / Impressum