UNPKG

coffeescript-ui

Version:
131 lines (102 loc) 3.06 kB
### * coffeescript-ui - Coffeescript User Interface System (CUI) * Copyright (c) 2013 - 2016 Programmfabrik GmbH * MIT Licence * https://github.com/programmfabrik/coffeescript-ui, http://www.coffeescript-ui.org ### class CUI.MultiInputControl extends CUI.Element constructor: (opts) -> super(opts) @__body = document.body @setKeys(@_keys) @setPreferredKey(@_preferred_key) initOpts: -> super() @addOpts preferred_key: check: String keys: check: (v) -> CUI.util.isArray(v) and v.length > 0 user_control: default: true check: Boolean setKeys: (keys) -> @__keys = [] if not keys return key_names = {} for key, idx in keys CUI.util.assert(CUI.util.isString(key.name) and not CUI.util.isEmpty(key.name), "new #{@__cls}", "opts.keys[#{idx}].name must be non-empty String.", key: key) CUI.util.assert(CUI.util.isString(key.tag) and not CUI.util.isEmpty(key.tag), "new #{@__cls}", "opts.keys[#{idx}].tag must be non-empty String.", key: key) CUI.util.assert(CUI.util.isUndef(key.enabled) or CUI.util.isBoolean(key.enabled), "new #{@__cls}", "opts.keys[#{idx}].enabled must be Boolean.", key: key) if not CUI.util.isUndef(key_names[key.name]) CUI.util.assert(false, "new #{@__cls}", "Duplicate opts.keys[#{idx}].name \"#{key.name}\", name already used in ##{idx}.", key: key) continue key_names[key.name] = idx @__keys.push name: key.name tag: key.tag enabled: key.enabled tooltip: key.tooltip __idx: idx @ setPreferredKey: (key_name) -> @__preferred_key = null if CUI.util.isNull(key_name) return @__preferred_key for key in @__keys if key.name == key_name @__preferred_key = key CUI.util.assert(@__preferred_key, "#{@__cls}.setPreferredKey", "key.name == \"#{key_name}\" not found in keys.", keys: @__keys) @__preferred_key getPreferredKey: -> @__preferred_key # avoid copying this copy: -> @ getKeys: -> @__keys isEnabled: (name) -> for k in @getKeys() if k.name == name return k.enabled return undefined getUserControlOptions: -> options = [] for key in @__keys do (key) -> options.push active: key.enabled onActivate: -> console.debug "control activate", key.tag key.enabled = true CUI.Events.trigger(type: "multi-input-control-update") onDeactivate: (cb) -> console.debug "control deactivate", key.tag key.enabled = false CUI.Events.trigger(type: "multi-input-control-update") text: key.tag options showUserControl: -> options = new CUI.Options min_checked: 1 options: @getUserControlOptions() .start() @popover = new CUI.Modal class: "cui-multi-input-control" onHide: => @popover = null pane: footer_right: new CUI.Button text: "Done" onClick: => @popover.destroy() header_left: new CUI.Label(text: "MultiInputControl") content: options .show() hasUserControl: -> @_user_control CUI.Events.registerEvent type: "multi-input-control-update" sink: true