]> git.gir.st - VimFx.git/blob - packages/button.coffee
closes #3: Implemented black list mechanism.
[VimFx.git] / packages / button.coffee
1 { getPref
2 , setPref } = require 'prefs'
3
4 positions = {}
5
6 persist = (document, toolbar, buttonID, beforeID) ->
7 currentset = tb.getAttribute('currentset').split(',')
8 idx = if beforeID then currentset.indexOf(beforeID) else -1;
9 if idx != -1
10 currentset.splice(idx, 0, buttonID);
11 else
12 currentset.push(buttonID);
13
14 toolbar.setAttribute "currentset", currentset.join(",")
15 document.persist toolbar.id, "currentset"
16 return [currentset, idx]
17
18 setButtonDefaultPosition = (buttonId, toolbarId, beforeId) ->
19 positions[buttonId] = [toolbarId, beforeId]
20
21 $ = (doc, sel, all) -> doc[if all then "querySelectorAll" else "getElementById"](sel)
22
23 restorePosition = (doc, button) ->
24
25 ($(doc, "navigator-toolbox") || $(doc, "mail-toolbox")).palette.appendChild(button)
26
27 for tb in $(doc, "toolbar", true)
28 currentset = tb.getAttribute('currentset').split(',')
29 idx = currentset.indexOf button.id
30 if idx > -1
31 toolbar = tb
32 break
33
34 # Saved position not found, using the default one, after persisting it
35 if !toolbar and (button.id in Object.keys(positions))
36 [tbID, beforeID] = positions[button.id];
37 toolbar = $(doc, tbID)
38 [currentset, idx] = persist(doc, toolbar, button.id, beforeID)
39
40 if toolbar
41 if idx > -1
42 # Inserting the button before the first item in `currentset`
43 # after `idx` that is present in the document
44 for i in [idx + 1 ... currentset.length]
45 if before = $(doc, currentset[i])
46 toolbar.insertItem button.id, before
47 return;
48
49 toolbar.insertItem button.id
50
51 iconUrl = do ->
52 kinds =
53 normal: getResourceURI('resources/icon16.png').spec
54 disabled: getResourceURI('resources/icon16-grey.png').spec
55 blacklisted: getResourceURI('resources/icon16-red.png').spec
56
57 return (kind) -> "url(#{ kinds[kind] })"
58
59 addToolbarButton = (window) ->
60 disabled = getPref 'disabled'
61
62 doc = window.document
63 button = doc.createElement 'toolbarbutton'
64 button.setAttribute 'id', getPref 'button_id'
65 button.setAttribute 'type', 'checkbox'
66 button.setAttribute 'label', getPref 'button_label'
67 button.setAttribute 'class', 'toolbarbutton-1 chromeclass-toolbar-additional'
68 button.setAttribute 'tooltiptext', getPref 'button_tooltip'
69 button.checked = disabled
70 button.style.listStyleImage = iconUrl(if disabled then 'disabled' else 'normal')
71
72 onButtonCommand = (event) ->
73 dis = button.checked
74 setPref 'disabled', dis
75 button.style.listStyleImage = iconUrl(if dis then 'disabled' else 'normal')
76
77 button.addEventListener 'command', onButtonCommand, false
78
79
80 restorePosition doc, button, 'nav-bar', 'bookmarks-menu-button-container'
81
82 unload -> button.parentNode.removeChild button
83
84 setToolbarButtonMark = (window, mark) ->
85 button = $(window.document, getPref 'button_id')
86 try
87 if mark == 'normal'
88 button.disabled = false
89 disabled = getPref 'disabled'
90 button.style.listStyleImage = iconUrl(if disabled then 'disabled' else 'normal')
91 button.setAttribute 'tooltiptext', getPref 'button_tooltip'
92 else if mark == 'blacklisted'
93 button.disabled = true
94 button.style.listStyleImage = iconUrl('blacklisted')
95 button.setAttribute 'tooltiptext', getPref 'button_blacklisted_tooltip'
96 catch err
97 console.log err
98
99
100 exports.addToolbarButton = addToolbarButton
101 exports.setToolbarButtonMark = setToolbarButtonMark
102 exports.setButtonDefaultPosition = setButtonDefaultPosition
Imprint / Impressum