From 813d299c8c9fb3754d610d4c590a835a22f99050 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Wed, 14 Aug 2024 21:13:44 +0800 Subject: [PATCH 1/2] allow prefix and suffix with double braces --- client/src/pages/printing/printing.tsx | 29 +++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/client/src/pages/printing/printing.tsx b/client/src/pages/printing/printing.tsx index 297e4e4..ebf6276 100644 --- a/client/src/pages/printing/printing.tsx +++ b/client/src/pages/printing/printing.tsx @@ -95,12 +95,35 @@ function applyTextFormatting(text: string): JSX.Element[] { }); return elements; } + export function renderLabelContents(template: string, spool: ISpool): JSX.Element { // Find all {tags} in the template string and loop over them - let result = template.replace(/\{(.*?)\}/g, function (_, tag) { - return getTagValue(tag, spool); + // let matches = [...template.matchAll(/(?:{(.*?))?{(.*?)}(.*?)(?:}(.*?))?/gs)]; + let matches = [...template.matchAll(/{(?:[^}{]|{[^}{]*})*}/gs)]; +// console.log(matches){(?:[^}{]|{[^}{]*})*} + let label_text = template; + matches.forEach((match) => { + // console.log(match) + if ((match[0].match(/{/g)||[]).length == 1) { + let tag = match[0].replace(/[{}]/g, ""); + // console.log(tag) + let tagValue = getTagValue(tag, spool) + label_text = label_text.replace(match[0], tagValue); + } + else if ((match[0].match(/{/g)||[]).length == 2) { + let structure = match[0].match(/{(.*?){(.*?)}(.*?)}/); + if (structure != null) { + const tag = structure[2]; + let tagValue = getTagValue(tag, spool); + if (tagValue == "?") { + label_text = label_text.replace(match[0], ""); + } else { + label_text = label_text.replace(match[0], structure[1] + tagValue + structure[3]); + } + } + } }); // Split string on \n into individual lines - return <>{applyTextFormatting(result)}; + return <>{applyTextFormatting(label_text)}; } From 7b0e98827e22b39d10395709504a4a31c3c81b9a Mon Sep 17 00:00:00 2001 From: TomW1605 Date: Sat, 31 Aug 2024 08:16:02 +0800 Subject: [PATCH 2/2] add double {{}} explanation to help text and example --- client/public/locales/en/common.json | 2 +- client/src/pages/printing/spoolQrCodePrintingDialog.tsx | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/client/public/locales/en/common.json b/client/public/locales/en/common.json index f587379..e095925 100644 --- a/client/public/locales/en/common.json +++ b/client/public/locales/en/common.json @@ -106,7 +106,7 @@ "button": "Print Labels", "title": "Label Printing", "template": "Label Template", - "templateHelp": "Use {} to insert values of the spool object as text. For example {id} will be replaced with the spool id, or {filament.material} will be replaced with the material of the spool. Enclose text with double asterix ** to make it bold. Click the button to view a list of all available tags.", + "templateHelp": "Use {} to insert values of the spool object as text. For example, {id} will be replaced with the spool id, or {filament.material} will be replaced with the material of the spool. if a value is missing it will be replaced with \"?\". A second set of {} can be used to remove this. In addition, any text between the sets of {} will be removed if the value is missing. For example, {Lot Nr: {lot_nr}} will only show the label if the spool has a lot number. Enclose text with double asterix ** to make it bold. Click the button to view a list of all available tags.", "textSize": "Label Text Size", "showContent": "Print Label", "showQRCode": "Print QR Code", diff --git a/client/src/pages/printing/spoolQrCodePrintingDialog.tsx b/client/src/pages/printing/spoolQrCodePrintingDialog.tsx index f3e4e65..07784ba 100644 --- a/client/src/pages/printing/spoolQrCodePrintingDialog.tsx +++ b/client/src/pages/printing/spoolQrCodePrintingDialog.tsx @@ -150,10 +150,10 @@ const SpoolQRCodePrintingDialog: React.FC = ({ spoolI `**{filament.vendor.name} - {filament.name} #{id} - {filament.material}** Spool Weight: {filament.spool_weight} g -ET: {filament.settings_extruder_temp} °C -BT: {filament.settings_bed_temp} °C -Lot Nr: {lot_nr} -{comment} +{ET: {filament.settings_extruder_temp} °C} +{BT: {filament.settings_bed_temp} °C} +{Lot Nr: {lot_nr}} +{{comment}} {filament.comment} {filament.vendor.comment}`;