1 { classes: Cc, interfaces: Ci } = Components
3 PREF_BRANCH = "extensions.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 hint_chars: 'asdfgercvhjkl;uinm'
16 # Get Firefox preference value of type specified in `PREFS`
18 branch = Services.prefs.getBranch PREF_BRANCH
23 # Return default value if the preference value hasn't been set yet
24 if branch.getPrefType(key) == branch.PREF_INVALID
29 return branch.getBoolPref key
31 return branch.getIntPref key
33 return branch.getCharPref key
35 # Assign and save Firefox preference value
37 branch = Services.prefs.getBranch PREF_BRANCH
39 return (key, value) ->
42 branch.setBoolPref(key, value)
44 branch.setIntPref(key, value)
46 branch.setCharPref(key, String(value));
48 # Set default values and update previously stored values for the preferences
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]
55 PREFS[key] = getFFPref key
57 # Monitor preference changes and update values in local cache - PREFS
58 installPrefObserver = ->
59 branch = Services.prefs.getBranch(PREF_BRANCH)
62 observe: (subject, topic, data) ->
63 if topic == 'nsPref:changed' and data in Object.keys(PREFS)
64 PREFS[data] = getFFPref data
66 branch.addObserver "", observer, false
67 unload -> branch.removeObserver "", observer
69 # Get preference value from local cache - PREFS
70 getPref = (key) -> return PREFS[key]
72 # Set preference value
73 setPref = (key, value) -> setFFPref key, value
75 # Transfer all setting values from one branch to another
76 transferPrefs = (from, to) ->
77 fromBranch = Services.prefs.getBranch from
78 toBranch = Services.prefs.getBranch to
81 vals = fromBranch.getChildList("", count)
83 for i in [0...count.value]
85 switch fromBranch.getPrefType name
86 when fromBranch.PREF_STRING
87 toBranch.setCharPref name, fromBranch.getCharPref name
88 when fromBranch.PREF_INT
89 toBranch.setIntPref name, fromBranch.getIntPref name
90 when fromBranch.PREF_BOOL
91 toBranch.setBoolPref name, fromBranch.getBoolPref name
93 fromBranch.deleteBranch("")
96 exports.getPref = getPref
97 exports.setPref = setPref
98 exports.installPrefObserver = installPrefObserver
99 exports.transferPrefs = transferPrefs