fancy-select
Advanced tools
Comparing version 0.6.0 to 0.7.0
14
index.js
var mercury = require('mercury') | ||
var document = require('global/document') | ||
var cloneDeep = require('lodash.clonedeep') | ||
var slice = Array.prototype.slice | ||
@@ -44,3 +45,3 @@ FancySelect.render = require('./view') | ||
backspace: mercury.input(), | ||
select: tree.select, | ||
select: mercury.input(), | ||
dropdown: mercury.input(), | ||
@@ -57,6 +58,8 @@ input: mercury.input(), | ||
events.select(function () { | ||
tree.select.apply(null, slice.call(arguments)) | ||
tree.setQuery('') | ||
}) | ||
events.backspace(function () { | ||
if (!state.query()) { | ||
tree.pop() | ||
} | ||
if (!state.query()) tree.pop() | ||
}) | ||
@@ -81,3 +84,4 @@ | ||
placeholder: mercury.value(data.placeholder || '') | ||
placeholder: mercury.value(data.placeholder || ''), | ||
separator: mercury.value(data.separator || ',') | ||
}) | ||
@@ -84,0 +88,0 @@ |
{ | ||
"name": "fancy-select", | ||
"description": "fancy select", | ||
"version": "0.6.0", | ||
"version": "0.7.0", | ||
"repository": { | ||
@@ -6,0 +6,0 @@ "url": "nrw/fancy-select" |
85
view.js
@@ -11,2 +11,3 @@ var mercury = require('mercury') | ||
var DOWN = 40 | ||
var COMMA = 188 | ||
@@ -43,48 +44,7 @@ module.exports = render | ||
className: styles.input.className, | ||
'ev-event': inputEvent.bind(null, state), | ||
'ev-input': mercury.valueEvent(state.events.input, { | ||
preventDefault: false | ||
}), | ||
}) | ||
'ev-event': function (e) { | ||
mutableFocus() | ||
switch (e.type) { | ||
case 'blur': | ||
var relatedTarget = e.relatedTarget | ||
// TODO: this will likely stop working until | ||
// https://github.com/Raynos/dom-delegator/pull/4 is fixed | ||
if ( | ||
!relatedTarget || | ||
!e.currentTarget.parentNode.parentNode.contains(relatedTarget) | ||
) { | ||
state.events.dropdown(false) | ||
} | ||
break | ||
case 'focus': | ||
state.events.dropdown(true) | ||
break | ||
case 'keydown': | ||
switch (e.keyCode) { | ||
case BACKSPACE: | ||
state.events.backspace() | ||
break | ||
case ENTER: | ||
state.events.select(state.active) | ||
e.preventDefault() | ||
break | ||
case DOWN: | ||
state.events.next() | ||
e.preventDefault() | ||
break | ||
case UP: | ||
state.events.prev() | ||
e.preventDefault() | ||
break | ||
} | ||
break | ||
} | ||
} | ||
}) | ||
@@ -99,5 +59,42 @@ ]), | ||
function inputEvent (state, e) { | ||
mutableFocus() | ||
if (e.type === 'blur') { | ||
var relatedTarget = e.relatedTarget | ||
// TODO: this will likely stop working until | ||
// https://github.com/Raynos/dom-delegator/pull/4 is fixed | ||
if ( | ||
!relatedTarget || | ||
!e.currentTarget.parentNode.parentNode.contains(relatedTarget) | ||
) { | ||
state.events.dropdown(false) | ||
} | ||
} else if (e.type === 'focus') { | ||
state.events.dropdown(true) | ||
} else if (e.type === 'keydown') { | ||
switch (e.keyCode) { | ||
case BACKSPACE: | ||
state.events.backspace() | ||
break | ||
case COMMA: | ||
case ENTER: | ||
state.events.select(state.active) | ||
e.preventDefault() | ||
break | ||
case DOWN: | ||
state.events.next() | ||
e.preventDefault() | ||
break | ||
case UP: | ||
state.events.prev() | ||
e.preventDefault() | ||
break | ||
} | ||
} | ||
} | ||
function renderGroup (state, data, path) { | ||
path = path || [] | ||
// console.log('obj', data, path) | ||
@@ -104,0 +101,0 @@ return data.map(function (opt, index) { |
277
9093