diff --git a/manifest-beta.json b/manifest-beta.json index e4dcfb4..ef569ca 100644 --- a/manifest-beta.json +++ b/manifest-beta.json @@ -1,7 +1,7 @@ { "id": "omnisearch", "name": "Omnisearch", - "version": "1.11.1", + "version": "1.12.2", "minAppVersion": "1.0.0", "description": "A search engine that just works", "author": "Simon Cambier", diff --git a/manifest.json b/manifest.json index 96adfa2..290aefc 100644 --- a/manifest.json +++ b/manifest.json @@ -1,7 +1,7 @@ { "id": "omnisearch", "name": "Omnisearch", - "version": "1.11.1", + "version": "1.12.2", "minAppVersion": "1.0.0", "description": "A search engine that just works", "author": "Simon Cambier", diff --git a/package.json b/package.json index 4d604b3..07d033e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "scambier.obsidian-search", - "version": "1.12.1-beta.1", + "version": "1.12.2", "description": "A search engine for Obsidian", "main": "dist/main.js", "scripts": { diff --git a/src/search/omnisearch.ts b/src/search/omnisearch.ts index a057604..902607d 100644 --- a/src/search/omnisearch.ts +++ b/src/search/omnisearch.ts @@ -190,9 +190,11 @@ export class Omnisearch { // Filter query results to only keep files that match query.extensions (if any) if (query.extensions.length) { - results = results.filter(r => - query.extensions.some(e => r.id.endsWith(e)) - ) + results = results.filter(r => { + // ".can" should match ".canvas" + const ext = '.' + r.id.split('.').pop() + return query.extensions.some(e => ext.startsWith(e)) + }) } // If the query does not return any result, diff --git a/src/tools/utils.ts b/src/tools/utils.ts index 66ee8d2..73eed56 100644 --- a/src/tools/utils.ts +++ b/src/tools/utils.ts @@ -27,7 +27,12 @@ export function highlighter(str: string): string { } export function highlighterGroups(...args: any[]) { - if (args[1] && args[2]) + if ( + args[1] !== null && + args[1] !== undefined && + args[2] !== null && + args[2] !== undefined + ) return `${args[1]}${args[2]}` return '<no content>' } @@ -63,8 +68,9 @@ export function wait(ms: number): Promise { } // https://stackoverflow.com/a/3561711 +// but we enclose special chars in brackets to avoid them being interpreted as regex export function escapeRegex(str: string): string { - return str.replace(/[-/\\^$*+?.()|[\]{}]/g, '\\$&') + return str.replace(/[-/\\^$*+?.()|[\]{}]/g, '[$&]') } /** @@ -88,7 +94,7 @@ export function stringsToRegex(strings: string[]): RegExp { // Default word split is not applied if the user uses the cm-chs-patch plugin const joined = '(' + - (getChsSegmenter() ? '' : SPACE_OR_PUNCTUATION.source) + + (getChsSegmenter() ? '' : `^|${SPACE_OR_PUNCTUATION.source}`) + ')' + '(' + strings.map(s => escapeRegex(s)).join('|') + diff --git a/versions.json b/versions.json index 83402db..31daaf8 100644 --- a/versions.json +++ b/versions.json @@ -95,5 +95,9 @@ "1.10.1": "1.0.0", "1.11.0-beta.1": "1.0.0", "1.11.0": "1.0.0", - "1.11.1": "1.0.0" + "1.11.1": "1.0.0", + "1.12.0": "1.0.0", + "1.12.1-beta.1": "1.0.0", + "1.12.1": "1.0.0", + "1.12.2": "1.0.0" } \ No newline at end of file