mirror of
https://github.com/TriliumNext/Notes.git
synced 2025-08-10 10:22:29 +08:00
Merge pull request #874 from pano9000/refactor_sanitizeAttributeName
refactor(sanitizeAttributeName): simplify function and export
This commit is contained in:
commit
6a9c8ff8dd
43
spec-es6/sanitize_attribute_name.spec.ts
Normal file
43
spec-es6/sanitize_attribute_name.spec.ts
Normal file
@ -0,0 +1,43 @@
|
||||
import sanitizeAttributeName from "../src/services/sanitize_attribute_name"
|
||||
import { describe, it, execute, expect } from "./mini_test";
|
||||
|
||||
// fn value, expected value
|
||||
const testCases: [fnValue: string, expectedValue: string][] = [
|
||||
["testName", "testName"],
|
||||
["test_name", "test_name"],
|
||||
["test with space", "test_with_space"],
|
||||
["test:with:colon", "test:with:colon"],
|
||||
|
||||
// numbers
|
||||
["123456", "123456"],
|
||||
["123:456", "123:456"],
|
||||
["123456 abc", "123456_abc"],
|
||||
|
||||
// non-latin characters
|
||||
["ε", "ε"],
|
||||
["attribute ε", "attribute_ε"],
|
||||
|
||||
|
||||
// special characters
|
||||
["test/name", "test_name"],
|
||||
["test%name", "test_name"],
|
||||
["\/", "_"],
|
||||
|
||||
// empty string
|
||||
["", "unnamed"],
|
||||
]
|
||||
|
||||
|
||||
|
||||
describe("sanitizeAttributeName unit tests", () => {
|
||||
|
||||
testCases.forEach(testCase => {
|
||||
return it(`'${testCase[0]}' should return '${testCase[1]}'`, () => {
|
||||
const [value, expected] = testCase;
|
||||
const actual = sanitizeAttributeName(value);
|
||||
expect(actual).toEqual(expected);
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
execute()
|
@ -174,7 +174,7 @@ class BAttribute extends AbstractBeccaEntity<BAttribute> {
|
||||
this.validate();
|
||||
}
|
||||
|
||||
this.name = sanitizeAttributeName.sanitizeAttributeName(this.name);
|
||||
this.name = sanitizeAttributeName(this.name);
|
||||
|
||||
if (!this.value) {
|
||||
// null value isn't allowed
|
||||
|
@ -3,7 +3,7 @@
|
||||
import imageType from "image-type";
|
||||
import imageService from "../../services/image.js";
|
||||
import noteService from "../../services/notes.js";
|
||||
import sanitize_attribute_name from "../../services/sanitize_attribute_name.js";
|
||||
import sanitizeAttributeName from "../../services/sanitize_attribute_name.js";
|
||||
import specialNotesService from "../../services/special_notes.js";
|
||||
import { Request } from 'express';
|
||||
|
||||
@ -44,7 +44,7 @@ async function uploadImage(req: Request) {
|
||||
const labels = JSON.parse(labelsStr);
|
||||
|
||||
for (const { name, value } of labels) {
|
||||
note.setLabel(sanitize_attribute_name.sanitizeAttributeName(name), value);
|
||||
note.setLabel(sanitizeAttributeName(name), value);
|
||||
}
|
||||
}
|
||||
|
||||
@ -73,7 +73,7 @@ function saveNote(req: Request) {
|
||||
|
||||
if (req.body.labels) {
|
||||
for (const { name, value } of req.body.labels) {
|
||||
note.setLabel(sanitize_attribute_name.sanitizeAttributeName(name), value);
|
||||
note.setLabel(sanitizeAttributeName(name), value);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -754,7 +754,7 @@ class ConsistencyChecks {
|
||||
const attrNames = sql.getColumn<string>(`SELECT DISTINCT name FROM attributes`);
|
||||
|
||||
for (const origName of attrNames) {
|
||||
const fixedName = sanitizeAttributeName.sanitizeAttributeName(origName);
|
||||
const fixedName = sanitizeAttributeName(origName);
|
||||
|
||||
if (fixedName !== origName) {
|
||||
if (this.autoFix) {
|
||||
|
@ -151,7 +151,7 @@ function importEnex(taskContext: TaskContext, file: File, parentNote: BNote): Pr
|
||||
labelName = 'pageUrl';
|
||||
}
|
||||
|
||||
labelName = sanitizeAttributeName.sanitizeAttributeName(labelName || "");
|
||||
labelName = sanitizeAttributeName(labelName || "");
|
||||
|
||||
if (note.attributes) {
|
||||
note.attributes.push({
|
||||
@ -202,7 +202,7 @@ function importEnex(taskContext: TaskContext, file: File, parentNote: BNote): Pr
|
||||
} else if (currentTag === 'tag' && note.attributes) {
|
||||
note.attributes.push({
|
||||
type: 'label',
|
||||
name: sanitizeAttributeName.sanitizeAttributeName(text),
|
||||
name: sanitizeAttributeName(text),
|
||||
value: ''
|
||||
})
|
||||
}
|
||||
|
@ -1,18 +1,8 @@
|
||||
function sanitizeAttributeName(origName: string) {
|
||||
let fixedName: string;
|
||||
|
||||
if (origName === '') {
|
||||
fixedName = "unnamed";
|
||||
}
|
||||
else {
|
||||
export default function sanitizeAttributeName(origName: string) {
|
||||
const fixedName = (origName === '')
|
||||
? "unnamed"
|
||||
: origName.replace(/[^\p{L}\p{N}_:]/ug, "_");
|
||||
// any not allowed character should be replaced with underscore
|
||||
fixedName = origName.replace(/[^\p{L}\p{N}_:]/ug, "_");
|
||||
}
|
||||
|
||||
return fixedName;
|
||||
}
|
||||
|
||||
|
||||
export default {
|
||||
sanitizeAttributeName
|
||||
};
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user