mirror of
https://github.com/sstent/node.git
synced 2026-01-27 15:41:43 +00:00
36 lines
991 B
JavaScript
36 lines
991 B
JavaScript
// self is a scoped model underneath _$component.{uid}
|
|
|
|
// Components must export a create function, which only runs
|
|
// in the browser
|
|
exports.create = function(model, self, dom, elements) {
|
|
var toggle = elements.toggle
|
|
, menu = elements.menu
|
|
, open = self.at('open')
|
|
|
|
// Listeners added inside of a component are removed when the
|
|
// page is re-rendered client side
|
|
dom.addListener(document.documentElement, 'click', function(e) {
|
|
if (e.target === toggle || menu.contains(e.target)) return
|
|
open.set(false)
|
|
})
|
|
|
|
exports.clickToggle = function() {
|
|
open.set(!open.get())
|
|
}
|
|
|
|
exports.clickMenu = function(e) {
|
|
var item = model.at(e.target)
|
|
, value = item.get().text
|
|
open.set(false)
|
|
if (value != null) {
|
|
self.set('value', value)
|
|
}
|
|
}
|
|
}
|
|
|
|
// Components may export an init function, which runs on both
|
|
// the server and browser before rendering
|
|
exports.init = function(model, self) {
|
|
self.setNull('value', self.get('items.0.text'))
|
|
}
|