diff --git a/README.md b/README.md index 316bff7..e78a872 100644 --- a/README.md +++ b/README.md @@ -89,6 +89,11 @@ Options: // 0 - отключить таймаут, время доступа по паролю не ограничено "accessTimeout": 0, + // включить(true)/выключить(false) возможность расширенного поиска (раздел "") + // расширенный поиск не оптимизирован, поэтому может сильно нагружать сервер + // чтобы ускорить поиск, увеличьте параметр dbCacheSize + "extendedSearch": true, + // содержимое кнопки-ссылки "(читать)", если не задано - кнопка "(читать)" не показывается // пример: "https://omnireader.ru/#/reader?url=${DOWNLOAD_LINK}" // на место ${DOWNLOAD_LINK} будет подставлена ссылка на скачивание файла книги diff --git a/client/components/Search/SelectExtSearchDialog/SelectExtSearchDialog.vue b/client/components/Search/SelectExtSearchDialog/SelectExtSearchDialog.vue index 8f62229..7e263ee 100644 --- a/client/components/Search/SelectExtSearchDialog/SelectExtSearchDialog.vue +++ b/client/components/Search/SelectExtSearchDialog/SelectExtSearchDialog.vue @@ -17,6 +17,7 @@ class="q-mt-xs" style="width: 150px;" :label="`(${f.type}) ${f.field}`" :bg-color="bgColor[f.field] || 'white'" stack-label outlined dense clearable + @keypress="onKeyPress" > {{ search[f.field] }} @@ -125,6 +126,11 @@ class SelectExtSearchDialog { this.error = error.join('
'); } + onKeyPress(event) { + if (event.code == 'Enter') + this.apply(); + } + apply() { this.validate(); if (!this.error) { diff --git a/server/core/DbSearcher.js b/server/core/DbSearcher.js index 4e7b940..dc72b13 100644 --- a/server/core/DbSearcher.js +++ b/server/core/DbSearcher.js @@ -547,20 +547,22 @@ class DbSearcher { if (bookIds === null) { const db = this.db; const filterBySearch = (bookField, searchValue) => { + searchValue = searchValue.toLowerCase(); //особая обработка префиксов if (searchValue[0] == '=') { searchValue = searchValue.substring(1); - return `(row.${bookField}.localeCompare(${db.esc(searchValue)}) === 0)`; + return `(row.${bookField}.toLowerCase().localeCompare(${db.esc(searchValue)}) === 0)`; } else if (searchValue[0] == '*') { searchValue = searchValue.substring(1); - return `(row.${bookField} && row.${bookField}.indexOf(${db.esc(searchValue)}) >= 0)`; + return `(row.${bookField} && row.${bookField}.toLowerCase().indexOf(${db.esc(searchValue)}) >= 0)`; } else if (searchValue[0] == '#') { //searchValue = searchValue.substring(1); //return !bookValue || (bookValue !== emptyFieldValue && !enru.has(bookValue[0]) && bookValue.indexOf(searchValue) >= 0); return 'true'; } else { - return `(row.${bookField}.localeCompare(${db.esc(searchValue)}) >= 0 && row.${bookField}.localeCompare(${db.esc(searchValue)} + ${db.esc(maxUtf8Char)}) <= 0)`; + return `(row.${bookField}.toLowerCase().localeCompare(${db.esc(searchValue)}) >= 0 ` + + `&& row.${bookField}.toLowerCase().localeCompare(${db.esc(searchValue)} + ${db.esc(maxUtf8Char)}) <= 0)`; } };