|
1 | 1 | <script> |
2 | 2 | import { flip } from "svelte/animate" |
3 | 3 | import { fade } from "svelte/transition" |
4 | | - import {afterUpdate} from 'svelte' |
| 4 | + import { afterUpdate } from "svelte" |
5 | 5 |
|
6 | 6 | // the list of items the user can select from |
7 | 7 | export let items = [] |
|
51 | 51 | } |
52 | 52 |
|
53 | 53 | export const clearSelection = () => { |
54 | | - text = '' |
| 54 | + text = "" |
55 | 55 | selectedItem = multiple ? [] : undefined |
56 | 56 | items = [] |
57 | 57 | listItems = [] |
|
170 | 170 | export let html5autocomplete = undefined |
171 | 171 | // enable the html5 autocompletion value |
172 | 172 | export let autocompleteOffValue = "off" |
| 173 | +
|
| 174 | + // allow custom input attributes |
| 175 | + export let inputAttributes = { autocomplete: "new-password" } |
| 176 | +
|
173 | 177 | // make the input readonly |
174 | 178 | export let readonly = undefined |
175 | 179 | // apply a className to the dropdown div |
|
220 | 224 | // other state |
221 | 225 | let inputDelayTimeout |
222 | 226 |
|
223 | | - let setPositionOnNextUpdate = false; |
| 227 | + let setPositionOnNextUpdate = false |
224 | 228 |
|
225 | 229 | // --- Lifecycle events --- |
226 | 230 |
|
227 | 231 | afterUpdate(() => { |
228 | | - if(setPositionOnNextUpdate) { |
| 232 | + if (setPositionOnNextUpdate) { |
229 | 233 | setScrollAwareListPosition() |
230 | 234 | } |
231 | 235 | setPositionOnNextUpdate = false |
|
243 | 247 | result = theFunction(argument) |
244 | 248 | } catch (error) { |
245 | 249 | console.warn( |
246 | | - "Error executing Autocomplete function on value: " + argument + " function: " + theFunction |
| 250 | + "Error executing Autocomplete function on value: " + argument + " function: " + theFunction, |
247 | 251 | ) |
248 | 252 | } |
249 | 253 | return result |
|
508 | 512 | return numberOfMatches(obj2, searchWords) - numberOfMatches(obj1, searchWords) |
509 | 513 | } |
510 | 514 |
|
511 | | - function processListItems(textFiltered="") { |
| 515 | + function processListItems(textFiltered = "") { |
512 | 516 | // cleans, filters, orders, and highlights the list items |
513 | 517 | prepareListItems() |
514 | 518 |
|
|
520 | 524 | if (localFiltering) { |
521 | 525 | if (itemFilterFunction) { |
522 | 526 | tempfilteredListItems = listItems.filter((item) => |
523 | | - itemFilterFunction(item.item, searchWords) |
| 527 | + itemFilterFunction(item.item, searchWords), |
524 | 528 | ) |
525 | 529 | } else { |
526 | 530 | tempfilteredListItems = listItems.filter((item) => |
527 | | - defaultItemFilterFunction(item, searchWords) |
| 531 | + defaultItemFilterFunction(item, searchWords), |
528 | 532 | ) |
529 | 533 | } |
530 | 534 |
|
531 | 535 | if (localSorting) { |
532 | 536 | if (itemSortFunction) { |
533 | 537 | tempfilteredListItems = tempfilteredListItems.sort((item1, item2) => |
534 | | - itemSortFunction(item1.item, item2.item, searchWords) |
| 538 | + itemSortFunction(item1.item, item2.item, searchWords), |
535 | 539 | ) |
536 | 540 | } else { |
537 | 541 | if (sortByMatchedKeywords) { |
538 | 542 | tempfilteredListItems = tempfilteredListItems.sort((item1, item2) => |
539 | | - defaultItemSortFunction(item1, item2, searchWords) |
| 543 | + defaultItemSortFunction(item1, item2, searchWords), |
540 | 544 | ) |
541 | 545 | } |
542 | 546 | } |
|
712 | 716 | } else { |
713 | 717 | if (debug) { |
714 | 718 | console.warn( |
715 | | - "Could not scroll selected item into view, scrollIntoViewIfNeeded not supported" |
| 719 | + "Could not scroll selected item into view, scrollIntoViewIfNeeded not supported", |
716 | 720 | ) |
717 | 721 | } |
718 | 722 | } |
|
1122 | 1126 | } |
1123 | 1127 | } |
1124 | 1128 | </script> |
| 1129 | + |
1125 | 1130 | <div |
1126 | 1131 | class="{className ? className : ''} autocomplete select is-fullwidth {uniqueId}" |
1127 | 1132 | class:hide-arrow={hideArrow || !items.length} |
|
1161 | 1166 | <span |
1162 | 1167 | class="tag is-delete" |
1163 | 1168 | on:click|preventDefault={unselectItem(tagItem)} |
1164 | | - on:keypress|preventDefault={(e) => {e.key == "Enter" && unselectItem(tagItem)}} |
| 1169 | + on:keypress|preventDefault={(e) => { |
| 1170 | + e.key == "Enter" && unselectItem(tagItem) |
| 1171 | + }} |
1165 | 1172 | /> |
1166 | 1173 | </div> |
1167 | 1174 | </slot> |
|
1192 | 1199 | on:keypress={onKeyPress} |
1193 | 1200 | on:dragover={(event) => dragover(event, selectedItem.length - 1)} |
1194 | 1201 | on:drop={(event) => drop(event, selectedItem.length - 1)} |
| 1202 | + {inputAttributes} |
1195 | 1203 | {...$$restProps} |
1196 | 1204 | /> |
1197 | 1205 | {#if clearable} |
1198 | 1206 | <span |
1199 | 1207 | on:click={clear} |
1200 | | - on:keypress={(e) => {e.key == "Enter" && clear()}} |
1201 | | - class="autocomplete-clear-button" |
1202 | | - >{@html clearText}</span> |
| 1208 | + on:keypress={(e) => { |
| 1209 | + e.key == "Enter" && clear() |
| 1210 | + }} |
| 1211 | + class="autocomplete-clear-button">{@html clearText}</span |
| 1212 | + > |
1203 | 1213 | {/if} |
1204 | 1214 | </div> |
1205 | 1215 | <div |
|
1217 | 1227 | class:selected={i === highlightIndex} |
1218 | 1228 | class:confirmed={isConfirmed(listItem.item)} |
1219 | 1229 | on:click={() => onListItemClick(listItem)} |
1220 | | - on:keypress={(e) => {e.key == "Enter" && onListItemClick(listItem)}} |
| 1230 | + on:keypress={(e) => { |
| 1231 | + e.key == "Enter" && onListItemClick(listItem) |
| 1232 | + }} |
1221 | 1233 | on:pointerenter={() => { |
1222 | 1234 | highlightIndex = i |
1223 | 1235 | }} |
|
1255 | 1267 | <div |
1256 | 1268 | class="autocomplete-list-item-create" |
1257 | 1269 | on:click={selectItem} |
1258 | | - on:keypress={(e) => {e.key == "Enter" && selectItem()}} |
| 1270 | + on:keypress={(e) => { |
| 1271 | + e.key == "Enter" && selectItem() |
| 1272 | + }} |
1259 | 1273 | > |
1260 | 1274 | <slot name="create" {createText}>{createText}</slot> |
1261 | 1275 | </div> |
|
1267 | 1281 | </div> |
1268 | 1282 | </div> |
1269 | 1283 |
|
1270 | | -<svelte:window on:click={onDocumentClick} on:scroll={() => setPositionOnNextUpdate = true} /> |
| 1284 | +<svelte:window on:click={onDocumentClick} on:scroll={() => (setPositionOnNextUpdate = true)} /> |
1271 | 1285 |
|
1272 | 1286 | <style> |
1273 | 1287 | .autocomplete { |
|
0 commit comments