From b45eddcac894212a2fddeb3a33c4aa31c9dc5f6c Mon Sep 17 00:00:00 2001 From: pwnfan Date: Fri, 19 May 2023 16:29:51 +0800 Subject: [PATCH] code>new: implement NOT keyword in the filter --- README.md | 2 +- doc/filter.en.md | 1 + doc/filter.ja.md | 1 + doc/filter.zh_CN.md | 1 + js/tagmark.js | 5 ++++- 5 files changed, 8 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index bb7d8fb..9232dad 100644 --- a/README.md +++ b/README.md @@ -63,4 +63,4 @@ tagmark-ui has implemented the invocation of filters through pure frontend Javas ## TODO - [x] fix overlay doc `` style -- [ ] implement NOT keyword in the filter +- [x] implement NOT keyword in the filter diff --git a/doc/filter.en.md b/doc/filter.en.md index 3abd060..761ffe4 100644 --- a/doc/filter.en.md +++ b/doc/filter.en.md @@ -20,6 +20,7 @@ The following keywords (operators) are defined in Advanced Filter: - `AND`: Must be uppercase, indicating "and" operation, similar to the `&&` logical operator in Javascript. - `OR`: Must be uppercase, indicating "or" operation, similar to the `||` logical operator in Javascript. +- `NOT`: Must be uppercase, indicating "not" operation, similar to the `!` logical operator in Javascript. - `(` and `)`: Used to combine multiple expressions and control their priority, what is consistent with most programming languages. **No quotation marks (`"` or `'`) are required in the string entered in Advanced Filter.** diff --git a/doc/filter.ja.md b/doc/filter.ja.md index 93e5e88..6282e62 100644 --- a/doc/filter.ja.md +++ b/doc/filter.ja.md @@ -20,6 +20,7 @@ - `AND`:大文字でなければならず、「そして」操作を示し、Javascriptの`&&`論理演算子に似ています。 - `OR`:大文字でなければならず、「または」操作を示し、Javascriptの`||`論理演算子に似ています。 +- `NOT`:大文字でなければならず、「非」操作を示し、Javascriptの`!`論理演算子に似ています。 - `(` および `)`:複数の式を結合し、その優先順位を制御するために使用されます。ほとんどのプログラミング言語と一致します。 **アドバンストフィルターで入力する文字列に引用符(`"`または`'`)は必要ありません。** diff --git a/doc/filter.zh_CN.md b/doc/filter.zh_CN.md index c719357..5e766da 100644 --- a/doc/filter.zh_CN.md +++ b/doc/filter.zh_CN.md @@ -21,6 +21,7 @@ Advanced Filter 中定义了如下的关键字(运算符): - `AND`: 必须大写,表示 "与" 运算,它类似于Javascript 中的 `&&` 逻辑运算符。 - `OR`: 必须大写,表示 "或" 运算,它类似于Javascript 中的 `||` 逻辑运算符。 +- `NOT`: 必须大写,表示 "非" 运算,它类似于Javascript 中的 `!` 逻辑运算符。 - `(` 和 `)`: 用来组合多个表达式,并控制它们的优先级。它的用法与大多数编程语言中的用法一致。 **Advanced Filter 中输入的字符串不需要使用 `"` 或者 `'` 括起来。** diff --git a/js/tagmark.js b/js/tagmark.js index a89a4e0..ab8419e 100644 --- a/js/tagmark.js +++ b/js/tagmark.js @@ -108,7 +108,7 @@ function customHeaderFilter(headerValue, rowValue, rowData, filterParams) { if (!cellValue) return false; // case insensitive and trim - let headerValueParts = headerValue.trim().split(/\b(OR|AND)\b/); + let headerValueParts = headerValue.trim().split(/\b(OR|AND|NOT)\b/); let checkHeaderValueParts = Array(); headerValueParts.forEach((headerValuePart) => { headerValuePart = headerValuePart.trim(); @@ -116,8 +116,11 @@ function customHeaderFilter(headerValue, rowValue, rowData, filterParams) { checkHeaderValueParts.push("&&"); } else if (headerValuePart === "OR") { checkHeaderValueParts.push("||"); + } else if (headerValuePart === "NOT") { + checkHeaderValueParts.push("!"); } else { let keyword = extractKeyword(headerValuePart); + if (!keyword.trim()) return; if (Array.isArray(cellValue)) { if (cellValue.length === 0) return false; checkHeaderValueParts.push(