From e7beeaf7e2c609b55a1026eda6f11b878c381433 Mon Sep 17 00:00:00 2001 From: oscarotero Date: Thu, 20 Jul 2017 21:14:23 +0200 Subject: [PATCH] select elements on mouseover #1 --- demo/script.js | 8 +++++++- package.json | 2 +- src/Source.js | 18 ++++++++++++++++++ 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/demo/script.js b/demo/script.js index 11b7cd1..6d2915e 100644 --- a/demo/script.js +++ b/demo/script.js @@ -5,7 +5,13 @@ const datalistInput = document.getElementById('input-datalist'); const suggestions = new Suggestions( datalistInput, - new DatalistSource(datalistInput) + new DatalistSource(datalistInput, { + suggestions: { + render: option => { + return `${option.label}`; + } + } + }) ); suggestions.on('select', value => { diff --git a/package.json b/package.json index 46fd72f..1c4a209 100644 --- a/package.json +++ b/package.json @@ -36,6 +36,6 @@ "webpack": "^3.0.0" }, "dependencies": { - "d_js": "^1.9.0" + "d_js": "^1.10.0" } } diff --git a/src/Source.js b/src/Source.js index 45ae3e7..9489269 100644 --- a/src/Source.js +++ b/src/Source.js @@ -16,6 +16,12 @@ export default class Source { this.element = d.parse(''); (this.settings.parent || document.body).appendChild(this.element); + + var self = this; + + d.delegate('mouseenter', this.element, 'li', function(e, target) { + self.selectByElement(target); + }); } getSuggestion(item) { @@ -81,6 +87,18 @@ export default class Source { } } + selectByElement(element) { + if (this.result[this.current]) { + const key = this.result.findIndex(item => item.element === element); + + if (key !== -1) { + this.result[this.current].unselect(); + this.current = key; + this.result[this.current].select(this.element); + } + } + } + getByElement(element) { const item = this.result.find(item => item.element === element);