1 { classes: Cc, interfaces: Ci } = Components
3 PREF_BRANCH = "extension.VimFx.";
5 # Default values for the preference
6 # All used preferences should be mentioned here becuase
7 # preference type is derived from here
9 hint_chars: 'asdfgercvhjkl;uinm'
10 button_id: 'VimFx-toolbar-button'
13 # Get Firefox preference value of type specified in `PREFS`
15 branch = Services.prefs.getBranch PREF_BRANCH
20 # Return default value if the preference value hasn't been set yet
21 if branch.getPrefType(key) == branch.PREF_INVALID
26 return branch.getBoolPref key
28 return branch.getIntPref key
30 return branch.getCharPref key
32 # Set firefox preference value
34 branch = Services.prefs.getBranch PREF_BRANCH
36 return (key, value) ->
39 branch.setBoolPref(key, value)
41 branch.setIntPref(key, value)
43 branch.setCharPref(key, String(value));
45 # Set default values and update previously stored values for the preferences
47 branch = Services.prefs.getBranch PREF_BRANCH
48 for key in Object.keys(PREFS)
49 if branch.getPrefType(key) == branch.PREF_INVALID
50 setFFPref key, PREFS[key]
52 PREFS[key] = getFFPref key
54 # Monitor preference changes and update values in local cache - PREFS
55 installPrefObserver = ->
56 branch = Services.prefs.getBranch(PREF_BRANCH)
57 .QueryInterface(Components.interfaces.nsIPrefBranch2)
60 observe: (subject, topic, data) ->
61 if topic == 'nsPref:changed' and data in Object.keys(PREFS)
62 PREFS[data] = getFFPref data
64 branch.addObserver "", observer, false
65 unload -> branch.removeObserver "", observer
67 # Get preference value from local cache - PREFS
68 getPref = (key) -> return PREFS[key]
70 # Set preference value
71 setPref = (key, value) -> setFFPref key, value
73 exports.getPref = getPref
74 exports.setPref = setPref
75 exports.installPrefObserver = installPrefObserver