]> git.gir.st - VimFx.git/blob - extension/lib/prefs-bulk.coffee
Change license to MIT
[VimFx.git] / extension / lib / prefs-bulk.coffee
1 # This files deals with handling all, or many, of VimFx’s prefs in bulk.
2
3 defaults = require('./defaults')
4 prefs = require('./prefs')
5
6 resetAll = ->
7 prefs.set(pref, null) for pref of defaults.all_prefs
8 return
9
10 exportAll = ->
11 regular = (pref for pref of defaults.all_prefs)
12 custom = Services.prefs.getBranch(defaults.BRANCH).getChildList('custom.')
13 exported = {}
14 for pref in regular.concat(custom) when prefs.has(pref)
15 exported[pref] = prefs.get(pref)
16 return exported
17
18 importExported = (exportedString) ->
19 exported = null
20 try
21 exported = JSON.parse(exportedString)
22 catch error
23 return {
24 numSuccesses: -1
25 errors: [error.message]
26 }
27
28 unless Object::toString.call(exported) == '[object Object]' and
29 Object.keys(exported).length > 0
30 return {
31 numSuccesses: -1
32 errors: ["The input must be a non-empty object. Got: #{exportedString}"]
33 }
34
35 numSuccesses = 0
36 errors = []
37
38 for pref, value of exported
39 unless Object::hasOwnProperty.call(defaults.all_prefs, pref) or
40 pref.startsWith('custom.')
41 errors.push("#{pref}: Unknown pref.")
42 continue
43
44 try
45 # `prefs.set` handles validation of `value`.
46 prefs.set(pref, value)
47 catch error
48 errors.push("#{pref}: #{error.message.replace(/^VimFx: /, '')}")
49 continue
50
51 numSuccesses += 1
52
53 return {numSuccesses, errors}
54
55 createImportErrorReport = ({numSuccesses, errors}) ->
56 header =
57 if numSuccesses <= 0
58 'The stuff you entered is invalid:'
59 else
60 s1 = if numSuccesses == 1 then '' else 's'
61 s2 = if errors.length == 1 then '' else 's'
62 """
63 #{numSuccesses} option#{s1} imported successfully.
64
65 #{errors.length} error#{s2} also occurred:
66 """
67
68 return """
69 #{header}
70
71 #{errors.join('\n\n')}
72 """
73
74 module.exports = {
75 resetAll
76 exportAll
77 importExported
78 createImportErrorReport
79 }
Imprint / Impressum