| // Copyright 2015 The Vanadium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| var mercury = require('mercury'); |
| var h = mercury.h; |
| var debug = require('debug')('component:setting'); |
| |
| module.exports = create; |
| module.exports.render = render; |
| |
| function render(setting) { |
| debug('rendering', setting); |
| var id = 'setting-' + setting.key; |
| |
| return h('.input', [ |
| h('label', { for: id }, setting.key), |
| h('input', { |
| id: id, |
| name: 'value', |
| type: 'text', |
| value: setting.value, |
| 'ev-event': mercury.changeEvent(setting.events.update) |
| }), |
| h('input.button', { |
| id: id, |
| name: 'default', |
| type: 'button', |
| value: 'Restore\ndefault', |
| 'ev-event': mercury.event(setting.events.restoreDefault) |
| }) |
| ]); |
| } |
| |
| function create(key, value, defaultValue) { |
| debug('initializing', key, 'to', value, 'with default', defaultValue); |
| |
| var state = mercury.struct({ |
| key: mercury.value(key || null), |
| value: mercury.value(value || null), |
| defaultValue: mercury.value(defaultValue || null), |
| events: mercury.input([ 'update', 'restoreDefault' ]) |
| }); |
| |
| state.events.update = function(data) { |
| debug('updating', data); |
| state.value.set(data.value); |
| }; |
| |
| state.events.restoreDefault = function(){ |
| state.value.set(defaultValue); |
| }; |
| |
| return { state: state }; |
| } |