|
|
@@ -1901,13 +1901,29 @@ this.singlefile.lib.core = this.singlefile.lib.core || (() => {
|
|
|
}
|
|
|
|
|
|
static async evalTemplateVariable(template, variableName, valueGetter, dontReplaceSlash, replacementCharacter) {
|
|
|
- const replaceRegExp = new RegExp("{\\s*" + variableName.replace(/\W|_/g, "[$&]") + "\\s*}", "g");
|
|
|
- if (template && template.match(replaceRegExp)) {
|
|
|
- let value = await valueGetter();
|
|
|
- if (!dontReplaceSlash) {
|
|
|
- value = value.replace(/\/+/g, replacementCharacter);
|
|
|
+ let maxLength;
|
|
|
+ if (template) {
|
|
|
+ const regExpVariable = "{\\s*" + variableName.replace(/\W|_/g, "[$&]") + "\\s*}";
|
|
|
+ let replaceRegExp = new RegExp(regExpVariable + "\\[\\d+\\]", "g");
|
|
|
+ if (template.match(replaceRegExp)) {
|
|
|
+ const matchedLength = template.match(replaceRegExp)[0];
|
|
|
+ maxLength = Number(matchedLength.match(/\[(\d+)\]$/)[1]);
|
|
|
+ if (isNaN(maxLength) || maxLength <= 0) {
|
|
|
+ maxLength = null;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ replaceRegExp = new RegExp(regExpVariable, "g");
|
|
|
+ }
|
|
|
+ if (template.match(replaceRegExp)) {
|
|
|
+ let value = await valueGetter();
|
|
|
+ if (!dontReplaceSlash) {
|
|
|
+ value = value.replace(/\/+/g, replacementCharacter);
|
|
|
+ }
|
|
|
+ if (maxLength) {
|
|
|
+ value = await util.truncateText(value, maxLength);
|
|
|
+ }
|
|
|
+ return template.replace(replaceRegExp, value);
|
|
|
}
|
|
|
- return template.replace(replaceRegExp, value);
|
|
|
}
|
|
|
return template;
|
|
|
}
|