summaryrefslogtreecommitdiff
path: root/searx/static/themes/simple/js/autocomplete.min.js.map
blob: 8c414549720c1a39738109aad6904196638c2f92 (plain)
1
{"version":3,"file":"autocomplete.min.js","names":["qInput: HTMLInputElement","query: string","res: Response","timeoutId: number","autocomplete: HTMLElement | null","autocompleteList: HTMLUListElement | null","event: KeyboardEvent"],"sources":["../../../../../client/simple/src/js/main/autocomplete.ts"],"sourcesContent":["// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { assertElement, http, listen, settings } from \"../core/toolkit.ts\";\n\nconst fetchResults = async (qInput: HTMLInputElement, query: string): Promise<void> => {\n  try {\n    let res: Response;\n\n    if (settings.method === \"GET\") {\n      res = await http(\"GET\", `./autocompleter?q=${query}`);\n    } else {\n      res = await http(\"POST\", \"./autocompleter\", { body: new URLSearchParams({ q: query }) });\n    }\n\n    const results = await res.json();\n\n    const autocomplete = document.querySelector<HTMLElement>(\".autocomplete\");\n    assertElement(autocomplete);\n\n    const autocompleteList = document.querySelector<HTMLUListElement>(\".autocomplete ul\");\n    assertElement(autocompleteList);\n\n    autocomplete.classList.add(\"open\");\n    autocompleteList.replaceChildren();\n\n    // show an error message that no result was found\n    if (results?.[1]?.length === 0) {\n      const noItemFoundMessage = Object.assign(document.createElement(\"li\"), {\n        className: \"no-item-found\",\n        textContent: settings.translations?.no_item_found ?? \"No results found\"\n      });\n      autocompleteList.append(noItemFoundMessage);\n      return;\n    }\n\n    const fragment = new DocumentFragment();\n\n    for (const result of results[1]) {\n      const li = Object.assign(document.createElement(\"li\"), { textContent: result });\n\n      listen(\"mousedown\", li, () => {\n        qInput.value = result;\n\n        const form = document.querySelector<HTMLFormElement>(\"#search\");\n        form?.submit();\n\n        autocomplete.classList.remove(\"open\");\n      });\n\n      fragment.append(li);\n    }\n\n    autocompleteList.append(fragment);\n  } catch (error) {\n    console.error(\"Error fetching autocomplete results:\", error);\n  }\n};\n\nconst qInput = document.getElementById(\"q\") as HTMLInputElement | null;\nassertElement(qInput);\n\nlet timeoutId: number;\n\nlisten(\"input\", qInput, () => {\n  clearTimeout(timeoutId);\n\n  const query = qInput.value;\n  const minLength = settings.autocomplete_min ?? 2;\n\n  if (query.length < minLength) return;\n\n  timeoutId = window.setTimeout(async () => {\n    if (query === qInput.value) {\n      await fetchResults(qInput, query);\n    }\n  }, 300);\n});\n\nconst autocomplete: HTMLElement | null = document.querySelector<HTMLElement>(\".autocomplete\");\nconst autocompleteList: HTMLUListElement | null = document.querySelector<HTMLUListElement>(\".autocomplete ul\");\nif (autocompleteList) {\n  listen(\"keyup\", qInput, (event: KeyboardEvent) => {\n    const listItems = [...autocompleteList.children] as HTMLElement[];\n\n    const currentIndex = listItems.findIndex((item) => item.classList.contains(\"active\"));\n    let newCurrentIndex = -1;\n\n    switch (event.key) {\n      case \"ArrowUp\": {\n        const currentItem = listItems[currentIndex];\n        if (currentItem && currentIndex >= 0) {\n          currentItem.classList.remove(\"active\");\n        }\n        // we need to add listItems.length to the index calculation here because the JavaScript modulos\n        // operator doesn't work with negative numbers\n        newCurrentIndex = (currentIndex - 1 + listItems.length) % listItems.length;\n        break;\n      }\n      case \"ArrowDown\": {\n        const currentItem = listItems[currentIndex];\n        if (currentItem && currentIndex >= 0) {\n          currentItem.classList.remove(\"active\");\n        }\n        newCurrentIndex = (currentIndex + 1) % listItems.length;\n        break;\n      }\n      case \"Tab\":\n      case \"Enter\":\n        if (autocomplete) {\n          autocomplete.classList.remove(\"open\");\n        }\n        break;\n      default:\n        break;\n    }\n\n    if (newCurrentIndex !== -1) {\n      const selectedItem = listItems[newCurrentIndex];\n      if (selectedItem) {\n        selectedItem.classList.add(\"active\");\n\n        if (!selectedItem.classList.contains(\"no-item-found\")) {\n          const qInput = document.getElementById(\"q\") as HTMLInputElement | null;\n          if (qInput) {\n            qInput.value = selectedItem.textContent ?? \"\";\n          }\n        }\n      }\n    }\n  });\n}\n"],"mappings":"+DAIA,MAAM,EAAe,MAAOA,EAA0BC,IAAiC,CACrF,GAAI,CACF,IAAIC,EAKF,EAHE,EAAS,SAAW,MAChB,MAAM,EAAK,MAAO,CAAC,kBAAkB,EAAE,GAAO,CAAC,CAE/C,MAAM,EAAK,OAAQ,kBAAmB,CAAE,KAAM,IAAI,gBAAgB,CAAE,EAAG,CAAO,EAAG,EAAC,CAG1F,IAAM,EAAU,MAAM,EAAI,MAAM,CAE1B,EAAe,SAAS,cAA2B,gBAAgB,CACzE,EAAc,EAAa,CAE3B,IAAM,EAAmB,SAAS,cAAgC,mBAAmB,CAOrF,GANA,EAAc,EAAiB,CAE/B,EAAa,UAAU,IAAI,OAAO,CAClC,EAAiB,iBAAiB,CAG9B,IAAU,IAAI,SAAW,EAAG,CAC9B,IAAM,EAAqB,OAAO,OAAO,SAAS,cAAc,KAAK,CAAE,CACrE,UAAW,gBACX,YAAa,EAAS,cAAc,eAAiB,kBACtD,EAAC,CACF,EAAiB,OAAO,EAAmB,CAC3C,MACD,CAED,IAAM,EAAW,IAAI,iBAErB,IAAK,IAAM,KAAU,EAAQ,GAAI,CAC/B,IAAM,EAAK,OAAO,OAAO,SAAS,cAAc,KAAK,CAAE,CAAE,YAAa,CAAQ,EAAC,CAE/E,EAAO,YAAa,EAAI,IAAM,CAC5B,EAAO,MAAQ,EAEf,IAAM,EAAO,SAAS,cAA+B,UAAU,CAC/D,GAAM,QAAQ,CAEd,EAAa,UAAU,OAAO,OAAO,AACtC,EAAC,CAEF,EAAS,OAAO,EAAG,AACpB,CAED,EAAiB,OAAO,EAAS,AAClC,OAAQ,EAAO,CACd,QAAQ,MAAM,uCAAwC,EAAM,AAC7D,CACF,EAEK,EAAS,SAAS,eAAe,IAAI,CAC3C,EAAc,EAAO,CAErB,IAAIC,EAEJ,EAAO,QAAS,EAAQ,IAAM,CAC5B,aAAa,EAAU,CAEvB,IAAM,EAAQ,EAAO,MACf,EAAY,EAAS,kBAAoB,EAE3C,EAAM,OAAS,IAEnB,EAAY,OAAO,WAAW,SAAY,CACpC,IAAU,EAAO,OACnB,MAAM,EAAa,EAAQ,EAAM,AAEpC,EAAE,IAAI,CACR,EAAC,CAEF,MAAMC,EAAmC,SAAS,cAA2B,gBAAgB,CACvFC,EAA4C,SAAS,cAAgC,mBAAmB,CAC1G,GACF,EAAO,QAAS,EAAQ,AAACC,GAAyB,CAChD,IAAM,EAAY,CAAC,GAAG,EAAiB,QAAS,EAE1C,EAAe,EAAU,UAAU,AAAC,GAAS,EAAK,UAAU,SAAS,SAAS,CAAC,CACjF,EAAkB,GAEtB,OAAQ,EAAM,IAAd,CACE,IAAK,UAAW,CACd,IAAM,EAAc,EAAU,GAC1B,GAAe,GAAgB,GACjC,EAAY,UAAU,OAAO,SAAS,CAIxC,GAAmB,EAAe,EAAI,EAAU,QAAU,EAAU,OACpE,KACD,CACD,IAAK,YAAa,CAChB,IAAM,EAAc,EAAU,GAC1B,GAAe,GAAgB,GACjC,EAAY,UAAU,OAAO,SAAS,CAExC,GAAmB,EAAe,GAAK,EAAU,OACjD,KACD,CACD,IAAK,MACL,IAAK,QACC,GACF,EAAa,UAAU,OAAO,OAAO,CAEvC,MACF,QACE,KACH,CAED,GAAI,IAAoB,GAAI,CAC1B,IAAM,EAAe,EAAU,GAC/B,GAAI,IACF,EAAa,UAAU,IAAI,SAAS,CAEhC,CAAC,EAAa,UAAU,SAAS,gBAAgB,EAAE,CACrD,IAAM,EAAS,SAAS,eAAe,IAAI,CACvC,IACF,EAAO,MAAQ,EAAa,aAAe,GAE9C,CAEJ,CACF,EAAC"}