]> git.gir.st - VimFx.git/blob - extension/packages/prefs.coffee
Closes #5. Created simple build script. The extension contents are moved into
[VimFx.git] / extension / packages / prefs.coffee
1 { classes: Cc, interfaces: Ci } = Components
2
3 PREF_BRANCH = "extension.VimFx.";
4
5 # Default values for the preference
6 # All used preferences should be mentioned here becuase
7 # preference type is derived from here
8 PREFS =
9 addon_id: 'VimFx@akhodakivskiy.github.com'
10 button_id: 'VimFx-toolbar-button'
11 hint_chars: 'asdfgercvhjkl;uinm'
12 disabled: false
13 scroll_step: 60
14 black_list: ''
15
16 # Get Firefox preference value of type specified in `PREFS`
17 getFFPref = do ->
18 branch = Services.prefs.getBranch PREF_BRANCH
19
20 return (key) ->
21 value = PREFS[key]
22
23 # Return default value if the preference value hasn't been set yet
24 if branch.getPrefType(key) == branch.PREF_INVALID
25 return value;
26
27 switch typeof value
28 when 'boolean'
29 return branch.getBoolPref key
30 when 'number'
31 return branch.getIntPref key
32 else
33 return branch.getCharPref key
34
35 # Assign and save Firefox preference value
36 setFFPref = do ->
37 branch = Services.prefs.getBranch PREF_BRANCH
38
39 return (key, value) ->
40 switch typeof value
41 when 'boolean'
42 branch.setBoolPref(key, value)
43 when 'number'
44 branch.setIntPref(key, value)
45 else
46 branch.setCharPref(key, String(value));
47
48 # Set default values and update previously stored values for the preferences
49 do ->
50 branch = Services.prefs.getBranch PREF_BRANCH
51 for key in Object.keys(PREFS)
52 if branch.getPrefType(key) == branch.PREF_INVALID
53 setFFPref key, PREFS[key]
54 else
55 PREFS[key] = getFFPref key
56
57 # Monitor preference changes and update values in local cache - PREFS
58 installPrefObserver = ->
59 branch = Services.prefs.getBranch(PREF_BRANCH)
60 .QueryInterface(Components.interfaces.nsIPrefBranch2)
61
62 observer =
63 observe: (subject, topic, data) ->
64 if topic == 'nsPref:changed' and data in Object.keys(PREFS)
65 PREFS[data] = getFFPref data
66
67 branch.addObserver "", observer, false
68 unload -> branch.removeObserver "", observer
69
70 # Get preference value from local cache - PREFS
71 getPref = (key) -> return PREFS[key]
72
73 # Set preference value
74 setPref = (key, value) -> setFFPref key, value
75
76 exports.getPref = getPref
77 exports.setPref = setPref
78 exports.installPrefObserver = installPrefObserver
Imprint / Impressum