Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
57cd9be637 | ||
|
|
84ad5d6b0a | ||
|
|
a85e001f1c |
@@ -1,3 +1,7 @@
|
|||||||
|
1.6.0 / 2024-??-??
|
||||||
|
|
||||||
|
- Добавлена возможность задавать префикс "%" для поискового значения. Данный префикс позволяет вести поиск по группе подстрок, разделенных пробелами
|
||||||
|
|
||||||
1.5.7 / 2024-04-04
|
1.5.7 / 2024-04-04
|
||||||
|
|
||||||
- В параметр bookReadLink конфига добавлен вариант замены DOWNLOAD_URI на uri из ссылки для скачивания книги (#29)
|
- В параметр bookReadLink конфига добавлен вариант замены DOWNLOAD_URI на uri из ссылки для скачивания книги (#29)
|
||||||
|
|||||||
@@ -61,6 +61,7 @@ module.exports = {
|
|||||||
new DefinePlugin({
|
new DefinePlugin({
|
||||||
__VUE_OPTIONS_API__: true,
|
__VUE_OPTIONS_API__: true,
|
||||||
__VUE_PROD_DEVTOOLS__: false,
|
__VUE_PROD_DEVTOOLS__: false,
|
||||||
|
__VUE_PROD_HYDRATION_MISMATCH_DETAILS__: true,
|
||||||
__QUASAR_SSR__: false,
|
__QUASAR_SSR__: false,
|
||||||
__QUASAR_SSR_SERVER__: false,
|
__QUASAR_SSR_SERVER__: false,
|
||||||
__QUASAR_SSR_CLIENT__: false,
|
__QUASAR_SSR_CLIENT__: false,
|
||||||
|
|||||||
@@ -387,21 +387,34 @@ export default class BaseList {
|
|||||||
searchValue = searchValue.toLowerCase();
|
searchValue = searchValue.toLowerCase();
|
||||||
|
|
||||||
//особая обработка префиксов
|
//особая обработка префиксов
|
||||||
if (searchValue[0] == '=') {
|
if (searchValue[0] === '=') {
|
||||||
|
|
||||||
searchValue = searchValue.substring(1);
|
searchValue = searchValue.substring(1);
|
||||||
return bookValue.localeCompare(searchValue) == 0;
|
return bookValue.localeCompare(searchValue) == 0;
|
||||||
} else if (searchValue[0] == '*') {
|
} else if (searchValue[0] === '%') {
|
||||||
|
|
||||||
|
searchValue = searchValue.substring(1);
|
||||||
|
|
||||||
|
const words = searchValue.split(' ').filter(a => a);
|
||||||
|
if (!words.length)
|
||||||
|
words.push('');
|
||||||
|
|
||||||
|
for (const w of words)
|
||||||
|
if (bookValue !== emptyFieldValue && bookValue.indexOf(w) >= 0)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
} else if (searchValue[0] === '*') {
|
||||||
|
|
||||||
searchValue = searchValue.substring(1);
|
searchValue = searchValue.substring(1);
|
||||||
return bookValue !== emptyFieldValue && bookValue.indexOf(searchValue) >= 0;
|
return bookValue !== emptyFieldValue && bookValue.indexOf(searchValue) >= 0;
|
||||||
} else if (searchValue[0] == '#') {
|
} else if (searchValue[0] === '#') {
|
||||||
|
|
||||||
searchValue = searchValue.substring(1);
|
searchValue = searchValue.substring(1);
|
||||||
if (!bookValue)
|
if (!bookValue)
|
||||||
return false;
|
return false;
|
||||||
return bookValue !== emptyFieldValue && !enru.has(bookValue[0]) && bookValue.indexOf(searchValue) >= 0;
|
return bookValue !== emptyFieldValue && !enru.has(bookValue[0]) && bookValue.indexOf(searchValue) >= 0;
|
||||||
} else if (searchValue[0] == '~') {//RegExp
|
} else if (searchValue[0] === '~') {//RegExp
|
||||||
|
|
||||||
searchValue = searchValue.substring(1);
|
searchValue = searchValue.substring(1);
|
||||||
const re = new RegExp(searchValue, 'i');
|
const re = new RegExp(searchValue, 'i');
|
||||||
|
|||||||
@@ -846,8 +846,13 @@ class Search {
|
|||||||
</li>
|
</li>
|
||||||
<br>
|
<br>
|
||||||
<li>
|
<li>
|
||||||
"*" поиск подстроки в строке. Например, для "*Александр" в поле автора, будут найдены
|
"%" поиск по группе подстрок, разделенных пробелами. Например, для "%Александр Пушкин" в поле автора, будут найдены
|
||||||
все авторы, имя которых содержит "Александр"
|
все авторы, имя которых содержит и "Александр", и "Пушкин" одновременно
|
||||||
|
</li>
|
||||||
|
<br>
|
||||||
|
<li>
|
||||||
|
"*" поиск подстроки в строке вместе с пробелами. Например, для "*Александр Сергеевич" в поле автора, будут найдены
|
||||||
|
все авторы, имя которых содержит "Александр Сергеевич"
|
||||||
</li>
|
</li>
|
||||||
<br>
|
<br>
|
||||||
<li>
|
<li>
|
||||||
|
|||||||
@@ -155,7 +155,10 @@ class SelectExtSearchDialog {
|
|||||||
префикс "=": поиск по точному совпадению
|
префикс "=": поиск по точному совпадению
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
префикс "*": поиск подстроки в строке
|
префикс "%": поиск по группе подстрок, разделенных пробелами
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
префикс "*": поиск подстроки в строке (вместе с пробелами)
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
префикс "#": поиск подстроки в строке, но только среди начинающихся не с латинского или кириллического символа
|
префикс "#": поиск подстроки в строке, но только среди начинающихся не с латинского или кириллического символа
|
||||||
|
|||||||
@@ -54,13 +54,24 @@ class DbSearcher {
|
|||||||
let where;
|
let where;
|
||||||
|
|
||||||
//особая обработка префиксов
|
//особая обработка префиксов
|
||||||
if (a[0] == '=') {
|
if (a[0] === '=') {
|
||||||
a = a.substring(1);
|
a = a.substring(1);
|
||||||
where = `@dirtyIndexLR('value', ${db.esc(a)}, ${db.esc(a)})`;
|
where = `@dirtyIndexLR('value', ${db.esc(a)}, ${db.esc(a)})`;
|
||||||
} else if (a[0] == '*') {
|
} else if (a[0] === '%') {
|
||||||
|
a = a.substring(1);
|
||||||
|
const ands = [];
|
||||||
|
const words = a.split(' ').filter(a => a);
|
||||||
|
if (!words.length)
|
||||||
|
words.push('');
|
||||||
|
|
||||||
|
for (const w of words)
|
||||||
|
ands.push(`v.indexOf(${db.esc(w)}) >= 0`);
|
||||||
|
|
||||||
|
where = `@indexIter('value', (v) => (v !== ${db.esc(emptyFieldValue)} && (${ands.join('&&')})) )`;
|
||||||
|
} else if (a[0] === '*') {
|
||||||
a = a.substring(1);
|
a = a.substring(1);
|
||||||
where = `@indexIter('value', (v) => (v !== ${db.esc(emptyFieldValue)} && v.indexOf(${db.esc(a)}) >= 0) )`;
|
where = `@indexIter('value', (v) => (v !== ${db.esc(emptyFieldValue)} && v.indexOf(${db.esc(a)}) >= 0) )`;
|
||||||
} else if (a[0] == '#') {
|
} else if (a[0] === '#') {
|
||||||
a = a.substring(1);
|
a = a.substring(1);
|
||||||
where = `@indexIter('value', (v) => {
|
where = `@indexIter('value', (v) => {
|
||||||
const enru = new Set(${db.esc(enruArr)});
|
const enru = new Set(${db.esc(enruArr)});
|
||||||
@@ -68,7 +79,7 @@ class DbSearcher {
|
|||||||
return false;
|
return false;
|
||||||
return v !== ${db.esc(emptyFieldValue)} && !enru.has(v[0]) && v.indexOf(${db.esc(a)}) >= 0;
|
return v !== ${db.esc(emptyFieldValue)} && !enru.has(v[0]) && v.indexOf(${db.esc(a)}) >= 0;
|
||||||
})`;
|
})`;
|
||||||
} else if (a[0] == '~') {//RegExp
|
} else if (a[0] === '~') {//RegExp
|
||||||
a = a.substring(1);
|
a = a.substring(1);
|
||||||
where = `
|
where = `
|
||||||
await (async() => {
|
await (async() => {
|
||||||
@@ -595,21 +606,32 @@ class DbSearcher {
|
|||||||
const filterBySearch = (bookField, searchValue) => {
|
const filterBySearch = (bookField, searchValue) => {
|
||||||
searchValue = searchValue.toLowerCase();
|
searchValue = searchValue.toLowerCase();
|
||||||
//особая обработка префиксов
|
//особая обработка префиксов
|
||||||
if (searchValue == emptyFieldValue) {
|
if (searchValue === emptyFieldValue) {
|
||||||
return `(row.${bookField} === '' || row.${bookField}.indexOf(${db.esc(emptyFieldValue)}) === 0)`;
|
return `(row.${bookField} === '' || row.${bookField}.indexOf(${db.esc(emptyFieldValue)}) === 0)`;
|
||||||
} else if (searchValue[0] == '=') {
|
} else if (searchValue[0] === '=') {
|
||||||
|
|
||||||
searchValue = searchValue.substring(1);
|
searchValue = searchValue.substring(1);
|
||||||
return `(row.${bookField}.toLowerCase().localeCompare(${db.esc(searchValue)}) === 0)`;
|
return `(row.${bookField}.toLowerCase().localeCompare(${db.esc(searchValue)}) === 0)`;
|
||||||
} else if (searchValue[0] == '*') {
|
} else if (searchValue[0] === '%') {
|
||||||
|
searchValue = searchValue.substring(1);
|
||||||
|
const ands = [];
|
||||||
|
const words = searchValue.split(' ').filter(a => a);
|
||||||
|
if (!words.length)
|
||||||
|
words.push('');
|
||||||
|
|
||||||
|
for (const w of words)
|
||||||
|
ands.push(`row.${bookField}.toLowerCase().indexOf(${db.esc(w)}) >= 0`);
|
||||||
|
|
||||||
|
return `(row.${bookField} && (${ands.join('&&')}))`;
|
||||||
|
} else if (searchValue[0] === '*') {
|
||||||
|
|
||||||
searchValue = searchValue.substring(1);
|
searchValue = searchValue.substring(1);
|
||||||
return `(row.${bookField} && row.${bookField}.toLowerCase().indexOf(${db.esc(searchValue)}) >= 0)`;
|
return `(row.${bookField} && row.${bookField}.toLowerCase().indexOf(${db.esc(searchValue)}) >= 0)`;
|
||||||
} else if (searchValue[0] == '#') {
|
} else if (searchValue[0] === '#') {
|
||||||
|
|
||||||
searchValue = searchValue.substring(1);
|
searchValue = searchValue.substring(1);
|
||||||
return `(row.${bookField} === '' || (!enru.has(row.${bookField}.toLowerCase()[0]) && row.${bookField}.toLowerCase().indexOf(${db.esc(searchValue)}) >= 0))`;
|
return `(row.${bookField} === '' || (!enru.has(row.${bookField}.toLowerCase()[0]) && row.${bookField}.toLowerCase().indexOf(${db.esc(searchValue)}) >= 0))`;
|
||||||
} else if (searchValue[0] == '~') {//RegExp
|
} else if (searchValue[0] === '~') {//RegExp
|
||||||
searchValue = searchValue.substring(1);
|
searchValue = searchValue.substring(1);
|
||||||
|
|
||||||
return `
|
return `
|
||||||
|
|||||||
@@ -247,21 +247,34 @@ class BasePage {
|
|||||||
searchValue = searchValue.toLowerCase();
|
searchValue = searchValue.toLowerCase();
|
||||||
|
|
||||||
//особая обработка префиксов
|
//особая обработка префиксов
|
||||||
if (searchValue[0] == '=') {
|
if (searchValue[0] === '=') {
|
||||||
|
|
||||||
searchValue = searchValue.substring(1);
|
searchValue = searchValue.substring(1);
|
||||||
return bookValue.localeCompare(searchValue) == 0;
|
return bookValue.localeCompare(searchValue) == 0;
|
||||||
} else if (searchValue[0] == '*') {
|
} else if (searchValue[0] === '%') {
|
||||||
|
|
||||||
|
searchValue = searchValue.substring(1);
|
||||||
|
|
||||||
|
const words = searchValue.split(' ').filter(a => a);
|
||||||
|
if (!words.length)
|
||||||
|
words.push('');
|
||||||
|
|
||||||
|
for (const w of words)
|
||||||
|
if (bookValue !== emptyFieldValue && bookValue.indexOf(w) >= 0)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
} else if (searchValue[0] === '*') {
|
||||||
|
|
||||||
searchValue = searchValue.substring(1);
|
searchValue = searchValue.substring(1);
|
||||||
return bookValue !== emptyFieldValue && bookValue.indexOf(searchValue) >= 0;
|
return bookValue !== emptyFieldValue && bookValue.indexOf(searchValue) >= 0;
|
||||||
} else if (searchValue[0] == '#') {
|
} else if (searchValue[0] === '#') {
|
||||||
|
|
||||||
searchValue = searchValue.substring(1);
|
searchValue = searchValue.substring(1);
|
||||||
if (!bookValue)
|
if (!bookValue)
|
||||||
return false;
|
return false;
|
||||||
return bookValue !== emptyFieldValue && !enru.has(bookValue[0]) && bookValue.indexOf(searchValue) >= 0;
|
return bookValue !== emptyFieldValue && !enru.has(bookValue[0]) && bookValue.indexOf(searchValue) >= 0;
|
||||||
} else if (searchValue[0] == '~') {//RegExp
|
} else if (searchValue[0] === '~') {//RegExp
|
||||||
|
|
||||||
searchValue = searchValue.substring(1);
|
searchValue = searchValue.substring(1);
|
||||||
const re = new RegExp(searchValue, 'i');
|
const re = new RegExp(searchValue, 'i');
|
||||||
|
|||||||
@@ -24,7 +24,10 @@ class SearchHelpPage extends BasePage {
|
|||||||
префикс "=": поиск по точному совпадению
|
префикс "=": поиск по точному совпадению
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
префикс "*": поиск подстроки в строке
|
префикс "%": поиск по группе подстрок, разделенных пробелами
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
префикс "*": поиск подстроки в строке (вместе с пробелами)
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
префикс "#": поиск подстроки в строке, но только среди значений, начинающихся не с латинского или кириллического символа
|
префикс "#": поиск подстроки в строке, но только среди значений, начинающихся не с латинского или кириллического символа
|
||||||
|
|||||||
Reference in New Issue
Block a user