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 addon_id: 'VimFx@akhodakivskiy.github.com'
10 button_id: 'VimFx-toolbar-button'
11 hint_chars: 'asdfgercvhjkl;uinm'
17 # Get Firefox preference value of type specified in `PREFS`
19 branch = Services.prefs.getBranch PREF_BRANCH
24 # Return default value if the preference value hasn't been set yet
25 if branch.getPrefType(key) == branch.PREF_INVALID
30 return branch.getBoolPref key
32 return branch.getIntPref key
34 return branch.getCharPref key
36 # Assign and save Firefox preference value
38 branch = Services.prefs.getBranch PREF_BRANCH
40 return (key, value) ->
43 branch.setBoolPref(key, value)
45 branch.setIntPref(key, value)
47 branch.setCharPref(key, String(value));
49 # Set default values and update previously stored values for the preferences
51 branch = Services.prefs.getBranch PREF_BRANCH
52 for key in Object.keys(PREFS)
53 if branch.getPrefType(key) == branch.PREF_INVALID
54 setFFPref key, PREFS[key]
56 PREFS[key] = getFFPref key
58 # Monitor preference changes and update values in local cache - PREFS
59 installPrefObserver = ->
60 branch = Services.prefs.getBranch(PREF_BRANCH)
63 observe: (subject, topic, data) ->
64 if topic == 'nsPref:changed' and data in Object.keys(PREFS)
65 PREFS[data] = getFFPref data
67 branch.addObserver "", observer, false
68 unload -> branch.removeObserver "", observer
70 # Get preference value from local cache - PREFS
71 getPref = (key) -> return PREFS[key]
73 # Set preference value
74 setPref = (key, value) -> setFFPref key, value
76 exports.getPref = getPref
77 exports.setPref = setPref
78 exports.installPrefObserver = installPrefObserver