]> git.gir.st - VimFx.git/blob - extension/packages/options.coffee
Merge branch 'develop' into better-hintmarkers
[VimFx.git] / extension / packages / options.coffee
1 utils = require 'utils'
2 { unloader } = require 'unloader'
3 { getPref } = require 'prefs'
4 help = require 'help'
5 { commands } = require 'commands'
6
7 observe = ->
8 Services.obs.addObserver(observer, 'addon-options-displayed', false)
9 Services.obs.addObserver(observer, 'addon-options-hidden', false)
10
11 observer =
12 observe: (document, topic, addon) ->
13 spec =
14 'setting[pref="extensions.VimFx.hint_chars"]':
15 change: filterChars
16 'setting[pref="extensions.VimFx.black_list"]':
17 change: utils.updateBlacklist
18 'setting[pref="extensions.VimFx.prev_patterns"]':
19 change: validatePatterns
20 'setting[pref="extensions.VimFx.next_patterns"]':
21 change: validatePatterns
22 '#customizeButton':
23 command: help.injectHelp.bind(undefined, document, commands)
24
25 switch topic
26 when 'addon-options-displayed'
27 applySpec(document, spec, true)
28 when 'addon-options-hidden'
29 applySpec(document, spec, false)
30
31 filterChars = (event) ->
32 input = event.target
33 input.value = utils.removeDuplicateCharacters(input.value).replace(/\s/g, '')
34 input.valueToPreference()
35
36 validatePatterns = (event) ->
37 input = event.target
38 input.value =
39 utils.removeDuplicates(utils.splitListString(input.value))
40 .filter((pattern) -> pattern != '')
41 .join(',')
42 input.valueToPreference()
43
44 applySpec = (document, spec, enable) ->
45 for selector, events of spec
46 element = document.querySelector(selector)
47 method = if enable then 'addEventListener' else 'removeEventListener'
48 for event, action of events
49 element[method](event, action, false)
50
51 unloader.add(->
52 Services.obs.removeObserver(observer, 'addon-options-displayed')
53 Services.obs.removeObserver(observer, 'addon-options-hidden')
54 )
55
56 exports.observe = observe
Imprint / Impressum