@itrocks/autocomplete 0.1.5 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/autocomplete.css +1 -0
- package/autocomplete.d.ts +12 -3
- package/autocomplete.js +35 -8
- package/package.json +1 -1
package/autocomplete.css
CHANGED
package/autocomplete.d.ts
CHANGED
|
@@ -30,17 +30,26 @@ export declare class AutoComplete {
|
|
|
30
30
|
suggest(value?: string): void;
|
|
31
31
|
}
|
|
32
32
|
declare class Suggestions {
|
|
33
|
-
|
|
33
|
+
autoComplete: AutoComplete;
|
|
34
34
|
length: number;
|
|
35
35
|
list?: HTMLUListElement;
|
|
36
|
-
|
|
36
|
+
pointerStart?: {
|
|
37
|
+
id: number;
|
|
38
|
+
item: HTMLLIElement;
|
|
39
|
+
x: number;
|
|
40
|
+
y: number;
|
|
41
|
+
};
|
|
42
|
+
constructor(autoComplete: AutoComplete);
|
|
37
43
|
createList(): HTMLUListElement;
|
|
38
44
|
first(): Item | null;
|
|
39
45
|
hide(): void;
|
|
40
46
|
isFirstSelected(): boolean | null | undefined;
|
|
41
47
|
isLastSelected(): boolean | null | undefined;
|
|
42
48
|
isVisible(): boolean | undefined;
|
|
43
|
-
onPointerDown(event:
|
|
49
|
+
onPointerDown(event: PointerEvent): void;
|
|
50
|
+
onPointerCancel(_event: PointerEvent): void;
|
|
51
|
+
onPointerMove(event: PointerEvent): void;
|
|
52
|
+
onPointerUp(event: PointerEvent): void;
|
|
44
53
|
removeList(): void;
|
|
45
54
|
selected(item?: HTMLLIElement | null): Item | null;
|
|
46
55
|
selectFirst(): void;
|
package/autocomplete.js
CHANGED
|
@@ -137,6 +137,7 @@ export class AutoComplete {
|
|
|
137
137
|
return;
|
|
138
138
|
event.preventDefault();
|
|
139
139
|
this.select();
|
|
140
|
+
suggestions.hide();
|
|
140
141
|
}
|
|
141
142
|
keyEscape(event) {
|
|
142
143
|
if (DEBUG)
|
|
@@ -242,7 +243,6 @@ export class AutoComplete {
|
|
|
242
243
|
this.input.value = suggestion.caption;
|
|
243
244
|
this.onInputValueChange();
|
|
244
245
|
this.autoIdInputValue();
|
|
245
|
-
suggestions.hide();
|
|
246
246
|
}
|
|
247
247
|
suggest(value) {
|
|
248
248
|
if (DEBUG)
|
|
@@ -262,19 +262,23 @@ export class AutoComplete {
|
|
|
262
262
|
}
|
|
263
263
|
}
|
|
264
264
|
class Suggestions {
|
|
265
|
-
|
|
265
|
+
autoComplete;
|
|
266
266
|
length = 0;
|
|
267
267
|
list;
|
|
268
|
-
|
|
269
|
-
|
|
268
|
+
pointerStart;
|
|
269
|
+
constructor(autoComplete) {
|
|
270
|
+
this.autoComplete = autoComplete;
|
|
270
271
|
}
|
|
271
272
|
createList() {
|
|
272
273
|
if (DEBUG)
|
|
273
274
|
console.log('createList()');
|
|
274
275
|
const list = this.list = document.createElement('ul');
|
|
275
276
|
list.classList.add('suggestions');
|
|
276
|
-
this.
|
|
277
|
+
this.autoComplete.input.insertAdjacentElement('afterend', list);
|
|
277
278
|
list.addEventListener('pointerdown', event => this.onPointerDown(event));
|
|
279
|
+
list.addEventListener('pointercancel', event => this.onPointerCancel(event));
|
|
280
|
+
list.addEventListener('pointermove', event => this.onPointerMove(event));
|
|
281
|
+
list.addEventListener('pointerup', event => this.onPointerUp(event));
|
|
278
282
|
return list;
|
|
279
283
|
}
|
|
280
284
|
first() {
|
|
@@ -307,7 +311,7 @@ class Suggestions {
|
|
|
307
311
|
onPointerDown(event) {
|
|
308
312
|
if (DEBUG)
|
|
309
313
|
console.log('onPointerDown()', event.button);
|
|
310
|
-
if (event.button !== 0)
|
|
314
|
+
if ((event.pointerType === 'mouse') && (event.button !== 0))
|
|
311
315
|
return;
|
|
312
316
|
if (!(event.target instanceof Element))
|
|
313
317
|
return;
|
|
@@ -319,10 +323,33 @@ class Suggestions {
|
|
|
319
323
|
return;
|
|
320
324
|
if (DEBUG)
|
|
321
325
|
console.log(' select', item);
|
|
326
|
+
if (event.pointerType !== 'mouse') {
|
|
327
|
+
this.pointerStart = { id: event.pointerId, item, x: event.clientX, y: event.clientY };
|
|
328
|
+
return;
|
|
329
|
+
}
|
|
322
330
|
this.unselect();
|
|
323
331
|
item.classList.add('selected');
|
|
324
|
-
this.
|
|
325
|
-
|
|
332
|
+
this.autoComplete.select();
|
|
333
|
+
this.pointerStart = undefined;
|
|
334
|
+
}
|
|
335
|
+
onPointerCancel(_event) {
|
|
336
|
+
this.pointerStart = undefined;
|
|
337
|
+
}
|
|
338
|
+
onPointerMove(event) {
|
|
339
|
+
if (!this.pointerStart || (event.pointerId !== this.pointerStart.id))
|
|
340
|
+
return;
|
|
341
|
+
const distance = Math.abs(event.clientX - this.pointerStart.x) + Math.abs(event.clientY - this.pointerStart.y);
|
|
342
|
+
if (distance < 8)
|
|
343
|
+
return;
|
|
344
|
+
this.pointerStart = undefined;
|
|
345
|
+
}
|
|
346
|
+
onPointerUp(event) {
|
|
347
|
+
if (!this.pointerStart || (event.pointerId !== this.pointerStart.id))
|
|
348
|
+
return;
|
|
349
|
+
this.unselect();
|
|
350
|
+
this.pointerStart.item.classList.add('selected');
|
|
351
|
+
this.autoComplete.select();
|
|
352
|
+
this.pointerStart = undefined;
|
|
326
353
|
}
|
|
327
354
|
removeList() {
|
|
328
355
|
if (DEBUG)
|
package/package.json
CHANGED