From d5fcec5255e9473bcbd212dc35aacbdb4bfa4d6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rn=20Berkefeld?= Date: Fri, 17 Feb 2023 10:14:29 +0100 Subject: [PATCH 1/3] #748: fully resolve asset-template content --- lib/metadataTypes/Asset.js | 105 ++++++++++++++++++++++++++++++++----- 1 file changed, 91 insertions(+), 14 deletions(-) diff --git a/lib/metadataTypes/Asset.js b/lib/metadataTypes/Asset.js index 593560788..82b4f5167 100644 --- a/lib/metadataTypes/Asset.js +++ b/lib/metadataTypes/Asset.js @@ -859,6 +859,61 @@ class Asset extends MetadataType { } break; } + case 'template': { + // template-template + // this complex type always creates its own subdir per asset + subDirArr = [this.definition.type, subType]; + readDirArr = [deployDir, ...subDirArr, templateName || customerKey]; + + const fileExtArr = ['html']; // eslint-disable-line no-case-declarations + for (const ext of fileExtArr) { + if ( + await File.pathExists( + File.normalizePath([ + ...readDirArr, + `${templateName || customerKey}${subtypeExtension}.${ext}`, + ]) + ) + ) { + // the main content can be empty (=not set up yet) hence check if we did extract sth or else readFile() will print error msgs + if (!fileListOnly) { + metadata.content = await File.readFilteredFilename( + readDirArr, + (templateName || customerKey) + subtypeExtension, + ext + ); + } + if (templateName) { + // to use this method in templating, store a copy of the info in fileList + fileList.push({ + subFolder: subDirArr, + fileName: (templateName || customerKey) + subtypeExtension, + fileExt: ext, + content: metadata.content, + }); + } + // break loop when found + break; + } + } + + // metadata.slots.<>.blocks.<>.content (optional) + if (metadata?.slots) { + await this._mergeCode_slots( + 'slots', + metadata.slots, + readDirArr, + subtypeExtension, + subDirArr, + fileList, + customerKey, + templateName, + fileListOnly + ); + } + + break; + } case 'textonlyemail': { // message // metadata.views.text.content @@ -970,7 +1025,6 @@ class Asset extends MetadataType { break; } - case 'template': // template-template case 'buttonblock': // block - Button Block case 'freeformblock': // block case 'htmlblock': // block @@ -1117,9 +1171,9 @@ class Asset extends MetadataType { // unfortunately, asset's key can contain spaces at beginning/end which can break the file system when folders are created with it const customerKey = metadata.customerKey.trim(); switch (metadata.assetType.name) { - case 'templatebasedemail': // message + case 'templatebasedemail': // message-templatebasedemail case 'htmlemail': { - // message + // message-htmlemail // metadata.views.html.content (mandatory) if (metadata.views?.html?.content?.length) { codeArr.push({ @@ -1142,8 +1196,32 @@ class Asset extends MetadataType { subFolder: [customerKey], }; } + case 'template': { + // template-template + // metadata.content + const fileExt = 'html'; // eslint-disable-line no-case-declarations + if (metadata?.content?.length) { + codeArr.push({ + subFolder: null, + fileName: customerKey, + fileExt: fileExt, + content: metadata.content, + }); + delete metadata.content; + } + // metadata.slots.<>.blocks.<>.content (optional) + if (metadata.slots) { + this._extractCode_slots('slots', metadata.slots, codeArr); + } + + return { + json: metadata, + codeArr: codeArr, + subFolder: [customerKey], + }; + } case 'textonlyemail': { - // message + // message-textonlyemail // metadata.views.text.content if (metadata.views?.text?.content?.length) { codeArr.push({ @@ -1157,7 +1235,7 @@ class Asset extends MetadataType { return { json: metadata, codeArr: codeArr, subFolder: null }; } case 'webpage': { - // asset + // asset-webpage // metadata.views.html.content (pre & post 20222) if (metadata.views?.html?.content?.length) { codeArr.push({ @@ -1192,16 +1270,15 @@ class Asset extends MetadataType { subFolder: [customerKey], }; } - case 'template': // template-template - case 'buttonblock': // block - Button Block - case 'freeformblock': // block - case 'htmlblock': // block - case 'icemailformblock': // block - Interactive Content Email Form - case 'imageblock': // block - Image Block - case 'textblock': // block - case 'smartcaptureblock': // other + case 'buttonblock': // block-buttonblock + case 'freeformblock': // block-freeformblock + case 'htmlblock': // block-htmlblock + case 'icemailformblock': // block-icemailformblock - Interactive Content Email Form + case 'imageblock': // block-imageblock - Image Block + case 'textblock': // block-textblock + case 'smartcaptureblock': // other-smartcaptureblock case 'codesnippetblock': { - // other + // other-codesnippetblock // metadata.content let fileExt = 'html'; // eslint-disable-line no-case-declarations if ( From f7776e39bfa0569909bdb5d6279025fc46dee037 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rn=20Berkefeld?= Date: Fri, 17 Feb 2023 10:34:48 +0100 Subject: [PATCH 2/3] #748: standardize asset-message main content's file name index.asset-message-meta.html becomes views.html.content.asset-message-meta.html --- lib/metadataTypes/Asset.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/lib/metadataTypes/Asset.js b/lib/metadataTypes/Asset.js index 82b4f5167..57bdc26be 100644 --- a/lib/metadataTypes/Asset.js +++ b/lib/metadataTypes/Asset.js @@ -818,16 +818,17 @@ class Asset extends MetadataType { // metadata.views.html.content (mandatory) // the main content can be empty (=not set up yet) hence check if we did extract sth or else readFile() will print error msgs + const fileName = 'views.html.content' + subtypeExtension; if ( (await File.pathExists( - File.normalizePath([...readDirArr, `index${subtypeExtension}.html`]) + File.normalizePath([...readDirArr, `${fileName}.html`]) )) && metadata.views.html ) { if (!fileListOnly) { metadata.views.html.content = await File.readFilteredFilename( readDirArr, - 'index' + subtypeExtension, + fileName, 'html' ); } @@ -836,7 +837,7 @@ class Asset extends MetadataType { // to use this method in templating, store a copy of the info in fileList fileList.push({ subFolder: [...subDirArr, customerKey], - fileName: 'index' + subtypeExtension, + fileName: fileName, fileExt: 'html', content: metadata.views.html.content, }); @@ -1178,7 +1179,7 @@ class Asset extends MetadataType { if (metadata.views?.html?.content?.length) { codeArr.push({ subFolder: null, - fileName: 'index', + fileName: 'views.html.content', fileExt: 'html', content: metadata.views.html.content, }); From ba8b301905b3d4541a4a6a9d286a9f3b0a2f2ab2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rn=20Berkefeld?= Date: Fri, 17 Feb 2023 10:38:37 +0100 Subject: [PATCH 3/3] #748: standardize asset-template's main extract's file name content.asset-template-meta.html --- boilerplate/files/.vscode/settings.json | 1 + boilerplate/forcedUpdates.json | 4 ++++ lib/metadataTypes/Asset.js | 12 +++++------- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/boilerplate/files/.vscode/settings.json b/boilerplate/files/.vscode/settings.json index a1b0d83d1..4058d63cb 100644 --- a/boilerplate/files/.vscode/settings.json +++ b/boilerplate/files/.vscode/settings.json @@ -18,6 +18,7 @@ "*-meta.ssjs": "${capture}-meta.json", "*.asset-asset-meta.html": "${dirname}.asset-asset-meta.json", "*.asset-message-meta.html": "${dirname}.asset-message-meta.json", + "*.asset-template-meta.html": "${dirname}.asset-template-meta.json", "*.css": "${capture}.asset-code-meta.json", "*.docx": "${capture}.asset-document-meta.json", "*.eps": "${capture}.asset-image-meta.json", diff --git a/boilerplate/forcedUpdates.json b/boilerplate/forcedUpdates.json index 15b6f5655..dd44736f0 100644 --- a/boilerplate/forcedUpdates.json +++ b/boilerplate/forcedUpdates.json @@ -1,4 +1,8 @@ [ + { + "version": "4.3.4", + "files": [".vscode/settings.json"] + }, { "version": "4.1.12", "files": [".vscode/settings.json"] diff --git a/lib/metadataTypes/Asset.js b/lib/metadataTypes/Asset.js index 57bdc26be..54b19f01c 100644 --- a/lib/metadataTypes/Asset.js +++ b/lib/metadataTypes/Asset.js @@ -865,22 +865,20 @@ class Asset extends MetadataType { // this complex type always creates its own subdir per asset subDirArr = [this.definition.type, subType]; readDirArr = [deployDir, ...subDirArr, templateName || customerKey]; + const fileName = 'content' + subtypeExtension; const fileExtArr = ['html']; // eslint-disable-line no-case-declarations for (const ext of fileExtArr) { if ( await File.pathExists( - File.normalizePath([ - ...readDirArr, - `${templateName || customerKey}${subtypeExtension}.${ext}`, - ]) + File.normalizePath([...readDirArr, `${fileName}.${ext}`]) ) ) { // the main content can be empty (=not set up yet) hence check if we did extract sth or else readFile() will print error msgs if (!fileListOnly) { metadata.content = await File.readFilteredFilename( readDirArr, - (templateName || customerKey) + subtypeExtension, + fileName, ext ); } @@ -888,7 +886,7 @@ class Asset extends MetadataType { // to use this method in templating, store a copy of the info in fileList fileList.push({ subFolder: subDirArr, - fileName: (templateName || customerKey) + subtypeExtension, + fileName: fileName, fileExt: ext, content: metadata.content, }); @@ -1204,7 +1202,7 @@ class Asset extends MetadataType { if (metadata?.content?.length) { codeArr.push({ subFolder: null, - fileName: customerKey, + fileName: 'content', fileExt: fileExt, content: metadata.content, });