From 327ff11a595e736d820e26770fda2abd42c2d2e5 Mon Sep 17 00:00:00 2001 From: ShareVB Date: Sat, 21 Sep 2024 14:55:23 +0200 Subject: [PATCH] feat(List Converter): add remove prefix/suffix capability Fix #702 --- .../list-converter.models.test.ts | 35 +++++++++++++++++++ .../list-converter/list-converter.models.ts | 2 ++ .../list-converter/list-converter.types.ts | 2 ++ src/tools/list-converter/list-converter.vue | 15 ++++++++ 4 files changed, 54 insertions(+) diff --git a/src/tools/list-converter/list-converter.models.test.ts b/src/tools/list-converter/list-converter.models.test.ts index abbc43c2..d6c87773 100644 --- a/src/tools/list-converter/list-converter.models.test.ts +++ b/src/tools/list-converter/list-converter.models.test.ts @@ -11,6 +11,8 @@ describe('list-converter', () => { removeDuplicates: true, itemPrefix: '"', itemSuffix: '"', + removeItemPrefix: '', + removeItemSuffix: '', listPrefix: '', listSuffix: '', reverseList: false, @@ -36,6 +38,8 @@ describe('list-converter', () => { removeDuplicates: true, itemPrefix: '', itemSuffix: '', + removeItemPrefix: '', + removeItemSuffix: '', listPrefix: '', listSuffix: '', reverseList: false, @@ -52,6 +56,8 @@ describe('list-converter', () => { trimItems: true, itemPrefix: '
  • ', itemSuffix: '
  • ', + removeItemPrefix: '', + removeItemSuffix: '', listPrefix: '', keepLineBreaks: true, @@ -72,5 +78,34 @@ describe('list-converter', () => { `; expect(convert(input, options)).toEqual(expected); }); + + it('should remove prefix and suffix', () => { + const options: ConvertOptions = { + separator: '', + trimItems: true, + itemPrefix: '', + itemSuffix: '', + removeItemPrefix: '\', + removeItemSuffix: '\', + listPrefix: '', + listSuffix: '', + keepLineBreaks: true, + lowerCase: false, + removeDuplicates: false, + reverseList: false, + sortList: null, + }; + const input = ` +
  • 1
  • +
  • 2
  • +
  • 3
  • + `; + const expected = ` +1 +2 +3 +`; + expect(convert(input, options)).toEqual(expected); + }); }); }); diff --git a/src/tools/list-converter/list-converter.models.ts b/src/tools/list-converter/list-converter.models.ts index 548baa28..5c047293 100644 --- a/src/tools/list-converter/list-converter.models.ts +++ b/src/tools/list-converter/list-converter.models.ts @@ -20,6 +20,8 @@ function convert(list: string, options: ConvertOptions): string { .thru(whenever(!_.isNull(options.sortList), parts => parts.sort(byOrder({ order: options.sortList })))) .map(whenever(options.trimItems, _.trim)) .without('') + .map(p => options.removeItemPrefix ? p.replace(new RegExp(`^${options.removeItemPrefix}`, 'g'), '') : p) + .map(p => options.removeItemSuffix ? p.replace(new RegExp(`${options.removeItemSuffix}$`, 'g'), '') : p) .map(p => options.itemPrefix + p + options.itemSuffix) .join(options.separator + lineBreak) .thru(text => [options.listPrefix, text, options.listSuffix].join(lineBreak)) diff --git a/src/tools/list-converter/list-converter.types.ts b/src/tools/list-converter/list-converter.types.ts index 3f9ea3f8..448f1a5a 100644 --- a/src/tools/list-converter/list-converter.types.ts +++ b/src/tools/list-converter/list-converter.types.ts @@ -5,6 +5,8 @@ export interface ConvertOptions { trimItems: boolean itemPrefix: string itemSuffix: string + removeItemPrefix: string + removeItemSuffix: string listPrefix: string listSuffix: string reverseList: boolean diff --git a/src/tools/list-converter/list-converter.vue b/src/tools/list-converter/list-converter.vue index 19dd30e5..58c58188 100644 --- a/src/tools/list-converter/list-converter.vue +++ b/src/tools/list-converter/list-converter.vue @@ -23,6 +23,8 @@ const conversionConfig = useStorage('list-converter:conversionCo keepLineBreaks: false, itemPrefix: '', itemSuffix: '', + removeItemPrefix: '', + removeItemSuffix: '', listPrefix: '', listSuffix: '', reverseList: false, @@ -85,6 +87,19 @@ function transformer(value: string) { placeholder="," /> + + + + +