binja 0.4.6 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +26 -2
- package/dist/cli.js +254 -2
- package/dist/filters/index.d.ts +9 -0
- package/dist/filters/index.d.ts.map +1 -1
- package/dist/index.js +677 -3
- package/dist/parser/index.d.ts +10 -0
- package/dist/parser/index.d.ts.map +1 -1
- package/dist/parser/nodes.d.ts +49 -2
- package/dist/parser/nodes.d.ts.map +1 -1
- package/dist/runtime/index.d.ts +11 -0
- package/dist/runtime/index.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
| Django DTL Compatible | ✅ 100% | ❌ Partial |
|
|
31
31
|
| Jinja2 Compatible | ✅ Full | ⚠️ Limited |
|
|
32
32
|
| Template Inheritance | ✅ | ⚠️ |
|
|
33
|
-
|
|
|
33
|
+
| 80+ Built-in Filters | ✅ | ❌ |
|
|
34
34
|
| 28 Built-in Tests | ✅ | ❌ |
|
|
35
35
|
| Debug Panel | ✅ | ❌ |
|
|
36
36
|
| CLI Tool | ✅ | ⚠️ |
|
|
@@ -260,6 +260,8 @@ app.get('/user/:id', ({ params }) => templates.user({ id: params.id }))
|
|
|
260
260
|
| `ljust` | `{{ "hi"\|ljust:10 }}` | `hi ` |
|
|
261
261
|
| `rjust` | `{{ "hi"\|rjust:10 }}` | ` hi` |
|
|
262
262
|
| `cut` | `{{ "hello"\|cut:"l" }}` | `heo` |
|
|
263
|
+
| `addslashes` | `{{ "it's"\|addslashes }}` | `it\'s` |
|
|
264
|
+
| `stringformat` | `{{ 5\|stringformat:"03d" }}` | `005` |
|
|
263
265
|
|
|
264
266
|
### Number Filters
|
|
265
267
|
|
|
@@ -270,6 +272,8 @@ app.get('/user/:id', ({ params }) => templates.user({ id: params.id }))
|
|
|
270
272
|
| `floatformat` | `{{ 3.14159\|floatformat:2 }}` | `3.14` |
|
|
271
273
|
| `filesizeformat` | `{{ 1048576\|filesizeformat }}` | `1.0 MB` |
|
|
272
274
|
| `divisibleby` | `{{ 10\|divisibleby:2 }}` | `true` |
|
|
275
|
+
| `get_digit` | `{{ 12345\|get_digit:2 }}` | `4` |
|
|
276
|
+
| `widthratio` | `{% widthratio value max 100 %}` | Calculated ratio |
|
|
273
277
|
|
|
274
278
|
### List Filters
|
|
275
279
|
|
|
@@ -324,7 +328,12 @@ Common timezone values: `UTC`, `Europe/London`, `Europe/Rome`, `Europe/Paris`, `
|
|
|
324
328
|
| `escape` | `{{ html\|escape }}` | HTML escape |
|
|
325
329
|
| `safe` | `{{ html\|safe }}` | Mark as safe (no escape) |
|
|
326
330
|
| `urlencode` | `{{ url\|urlencode }}` | URL encode |
|
|
331
|
+
| `iriencode` | `{{ url\|iriencode }}` | IRI encode (unicode-safe) |
|
|
327
332
|
| `json` | `{{ data\|json }}` | JSON stringify |
|
|
333
|
+
| `json_script` | `{{ data\|json_script:"id" }}` | Safe JSON in script tag |
|
|
334
|
+
| `truncatechars_html` | `{{ html\|truncatechars_html:10 }}` | Truncate preserving HTML |
|
|
335
|
+
| `truncatewords_html` | `{{ html\|truncatewords_html:5 }}` | Truncate words in HTML |
|
|
336
|
+
| `urlizetrunc` | `{{ text\|urlizetrunc:15 }}` | URLs with truncated display |
|
|
328
337
|
|
|
329
338
|
### Default Values
|
|
330
339
|
|
|
@@ -389,13 +398,28 @@ binja is designed to be a drop-in replacement for Django templates:
|
|
|
389
398
|
{% url 'home' %}
|
|
390
399
|
{% static 'css/style.css' %}
|
|
391
400
|
|
|
392
|
-
{% csrf_token %}
|
|
401
|
+
{% csrf_token %}
|
|
393
402
|
|
|
394
403
|
{{ forloop.counter }}
|
|
395
404
|
{{ forloop.first }}
|
|
396
405
|
{{ forloop.parentloop.counter }}
|
|
397
406
|
```
|
|
398
407
|
|
|
408
|
+
### Django-Specific Tags
|
|
409
|
+
|
|
410
|
+
| Tag | Description | Example |
|
|
411
|
+
|-----|-------------|---------|
|
|
412
|
+
| `{% csrf_token %}` | CSRF token input | `<input type="hidden" ...>` |
|
|
413
|
+
| `{% cycle %}` | Cycle through values | `{% cycle 'odd' 'even' %}` |
|
|
414
|
+
| `{% firstof %}` | First truthy value | `{% firstof var1 var2 "default" %}` |
|
|
415
|
+
| `{% ifchanged %}` | Output on change | `{% ifchanged %}{{ item }}{% endifchanged %}` |
|
|
416
|
+
| `{% ifequal %}` | Equality check | `{% ifequal a b %}equal{% endifequal %}` |
|
|
417
|
+
| `{% lorem %}` | Lorem ipsum text | `{% lorem 3 p %}` |
|
|
418
|
+
| `{% regroup %}` | Group list by attr | `{% regroup list by attr as grouped %}` |
|
|
419
|
+
| `{% templatetag %}` | Literal tag chars | `{% templatetag openblock %}` → `{%` |
|
|
420
|
+
| `{% widthratio %}` | Calculate ratio | `{% widthratio value max 100 %}` |
|
|
421
|
+
| `{% debug %}` | Debug context | Outputs context as JSON |
|
|
422
|
+
|
|
399
423
|
---
|
|
400
424
|
|
|
401
425
|
## Configuration
|
package/dist/cli.js
CHANGED
|
@@ -624,6 +624,28 @@ class Parser {
|
|
|
624
624
|
case "autoescape":
|
|
625
625
|
case "verbatim":
|
|
626
626
|
return this.parseSimpleBlock(start, tagName.value);
|
|
627
|
+
case "cycle":
|
|
628
|
+
return this.parseCycle(start);
|
|
629
|
+
case "firstof":
|
|
630
|
+
return this.parseFirstof(start);
|
|
631
|
+
case "ifchanged":
|
|
632
|
+
return this.parseIfchanged(start);
|
|
633
|
+
case "regroup":
|
|
634
|
+
return this.parseRegroup(start);
|
|
635
|
+
case "widthratio":
|
|
636
|
+
return this.parseWidthratio(start);
|
|
637
|
+
case "lorem":
|
|
638
|
+
return this.parseLorem(start);
|
|
639
|
+
case "csrf_token":
|
|
640
|
+
return this.parseCsrfToken(start);
|
|
641
|
+
case "debug":
|
|
642
|
+
return this.parseDebug(start);
|
|
643
|
+
case "templatetag":
|
|
644
|
+
return this.parseTemplatetag(start);
|
|
645
|
+
case "ifequal":
|
|
646
|
+
return this.parseIfequal(start, false);
|
|
647
|
+
case "ifnotequal":
|
|
648
|
+
return this.parseIfequal(start, true);
|
|
627
649
|
default:
|
|
628
650
|
this.skipToBlockEnd();
|
|
629
651
|
return null;
|
|
@@ -927,7 +949,7 @@ class Parser {
|
|
|
927
949
|
column: start.column
|
|
928
950
|
};
|
|
929
951
|
}
|
|
930
|
-
parseComment(
|
|
952
|
+
parseComment(_start) {
|
|
931
953
|
this.expect("BLOCK_END" /* BLOCK_END */);
|
|
932
954
|
while (!this.isAtEnd()) {
|
|
933
955
|
if (this.checkBlockTag("endcomment"))
|
|
@@ -937,7 +959,7 @@ class Parser {
|
|
|
937
959
|
this.expectBlockTag("endcomment");
|
|
938
960
|
return null;
|
|
939
961
|
}
|
|
940
|
-
parseSimpleBlock(
|
|
962
|
+
parseSimpleBlock(_start, tagName) {
|
|
941
963
|
this.skipToBlockEnd();
|
|
942
964
|
const endTag = `end${tagName}`;
|
|
943
965
|
while (!this.isAtEnd()) {
|
|
@@ -952,6 +974,236 @@ class Parser {
|
|
|
952
974
|
}
|
|
953
975
|
return null;
|
|
954
976
|
}
|
|
977
|
+
parseCycle(start) {
|
|
978
|
+
const values = [];
|
|
979
|
+
let asVar = null;
|
|
980
|
+
let silent = false;
|
|
981
|
+
while (!this.check("BLOCK_END" /* BLOCK_END */)) {
|
|
982
|
+
if (this.check("NAME" /* NAME */) && this.peek().value === "as") {
|
|
983
|
+
this.advance();
|
|
984
|
+
asVar = this.expect("NAME" /* NAME */).value;
|
|
985
|
+
if (this.check("NAME" /* NAME */) && this.peek().value === "silent") {
|
|
986
|
+
this.advance();
|
|
987
|
+
silent = true;
|
|
988
|
+
}
|
|
989
|
+
break;
|
|
990
|
+
}
|
|
991
|
+
values.push(this.parseExpression());
|
|
992
|
+
}
|
|
993
|
+
this.expect("BLOCK_END" /* BLOCK_END */);
|
|
994
|
+
return {
|
|
995
|
+
type: "Cycle",
|
|
996
|
+
values,
|
|
997
|
+
asVar,
|
|
998
|
+
silent,
|
|
999
|
+
line: start.line,
|
|
1000
|
+
column: start.column
|
|
1001
|
+
};
|
|
1002
|
+
}
|
|
1003
|
+
parseFirstof(start) {
|
|
1004
|
+
const values = [];
|
|
1005
|
+
let fallback = null;
|
|
1006
|
+
let asVar = null;
|
|
1007
|
+
while (!this.check("BLOCK_END" /* BLOCK_END */)) {
|
|
1008
|
+
if (this.check("NAME" /* NAME */) && this.peek().value === "as") {
|
|
1009
|
+
this.advance();
|
|
1010
|
+
asVar = this.expect("NAME" /* NAME */).value;
|
|
1011
|
+
break;
|
|
1012
|
+
}
|
|
1013
|
+
values.push(this.parseExpression());
|
|
1014
|
+
}
|
|
1015
|
+
if (values.length > 0) {
|
|
1016
|
+
const last = values[values.length - 1];
|
|
1017
|
+
if (last.type === "Literal" && typeof last.value === "string") {
|
|
1018
|
+
fallback = values.pop();
|
|
1019
|
+
}
|
|
1020
|
+
}
|
|
1021
|
+
this.expect("BLOCK_END" /* BLOCK_END */);
|
|
1022
|
+
return {
|
|
1023
|
+
type: "Firstof",
|
|
1024
|
+
values,
|
|
1025
|
+
fallback,
|
|
1026
|
+
asVar,
|
|
1027
|
+
line: start.line,
|
|
1028
|
+
column: start.column
|
|
1029
|
+
};
|
|
1030
|
+
}
|
|
1031
|
+
parseIfchanged(start) {
|
|
1032
|
+
const values = [];
|
|
1033
|
+
while (!this.check("BLOCK_END" /* BLOCK_END */)) {
|
|
1034
|
+
values.push(this.parseExpression());
|
|
1035
|
+
}
|
|
1036
|
+
this.expect("BLOCK_END" /* BLOCK_END */);
|
|
1037
|
+
const body = [];
|
|
1038
|
+
let else_ = [];
|
|
1039
|
+
while (!this.isAtEnd()) {
|
|
1040
|
+
if (this.checkBlockTag("else") || this.checkBlockTag("endifchanged"))
|
|
1041
|
+
break;
|
|
1042
|
+
const node = this.parseStatement();
|
|
1043
|
+
if (node)
|
|
1044
|
+
body.push(node);
|
|
1045
|
+
}
|
|
1046
|
+
if (this.checkBlockTag("else")) {
|
|
1047
|
+
this.advance();
|
|
1048
|
+
this.advance();
|
|
1049
|
+
this.expect("BLOCK_END" /* BLOCK_END */);
|
|
1050
|
+
while (!this.isAtEnd()) {
|
|
1051
|
+
if (this.checkBlockTag("endifchanged"))
|
|
1052
|
+
break;
|
|
1053
|
+
const node = this.parseStatement();
|
|
1054
|
+
if (node)
|
|
1055
|
+
else_.push(node);
|
|
1056
|
+
}
|
|
1057
|
+
}
|
|
1058
|
+
this.expectBlockTag("endifchanged");
|
|
1059
|
+
return {
|
|
1060
|
+
type: "Ifchanged",
|
|
1061
|
+
values,
|
|
1062
|
+
body,
|
|
1063
|
+
else_,
|
|
1064
|
+
line: start.line,
|
|
1065
|
+
column: start.column
|
|
1066
|
+
};
|
|
1067
|
+
}
|
|
1068
|
+
parseRegroup(start) {
|
|
1069
|
+
const target = this.parseExpression();
|
|
1070
|
+
this.expectName("by");
|
|
1071
|
+
const key = this.expect("NAME" /* NAME */).value;
|
|
1072
|
+
this.expectName("as");
|
|
1073
|
+
const asVar = this.expect("NAME" /* NAME */).value;
|
|
1074
|
+
this.expect("BLOCK_END" /* BLOCK_END */);
|
|
1075
|
+
return {
|
|
1076
|
+
type: "Regroup",
|
|
1077
|
+
target,
|
|
1078
|
+
key,
|
|
1079
|
+
asVar,
|
|
1080
|
+
line: start.line,
|
|
1081
|
+
column: start.column
|
|
1082
|
+
};
|
|
1083
|
+
}
|
|
1084
|
+
parseWidthratio(start) {
|
|
1085
|
+
const value = this.parseExpression();
|
|
1086
|
+
const maxValue = this.parseExpression();
|
|
1087
|
+
const maxWidth = this.parseExpression();
|
|
1088
|
+
let asVar = null;
|
|
1089
|
+
if (this.check("NAME" /* NAME */) && this.peek().value === "as") {
|
|
1090
|
+
this.advance();
|
|
1091
|
+
asVar = this.expect("NAME" /* NAME */).value;
|
|
1092
|
+
}
|
|
1093
|
+
this.expect("BLOCK_END" /* BLOCK_END */);
|
|
1094
|
+
return {
|
|
1095
|
+
type: "Widthratio",
|
|
1096
|
+
value,
|
|
1097
|
+
maxValue,
|
|
1098
|
+
maxWidth,
|
|
1099
|
+
asVar,
|
|
1100
|
+
line: start.line,
|
|
1101
|
+
column: start.column
|
|
1102
|
+
};
|
|
1103
|
+
}
|
|
1104
|
+
parseLorem(start) {
|
|
1105
|
+
let count = null;
|
|
1106
|
+
let method = "p";
|
|
1107
|
+
let random = false;
|
|
1108
|
+
if (this.check("NUMBER" /* NUMBER */)) {
|
|
1109
|
+
count = {
|
|
1110
|
+
type: "Literal",
|
|
1111
|
+
value: parseInt(this.advance().value, 10),
|
|
1112
|
+
line: start.line,
|
|
1113
|
+
column: start.column
|
|
1114
|
+
};
|
|
1115
|
+
}
|
|
1116
|
+
if (this.check("NAME" /* NAME */)) {
|
|
1117
|
+
const m = this.peek().value.toLowerCase();
|
|
1118
|
+
if (m === "w" || m === "p" || m === "b") {
|
|
1119
|
+
method = m;
|
|
1120
|
+
this.advance();
|
|
1121
|
+
}
|
|
1122
|
+
}
|
|
1123
|
+
if (this.check("NAME" /* NAME */) && this.peek().value === "random") {
|
|
1124
|
+
random = true;
|
|
1125
|
+
this.advance();
|
|
1126
|
+
}
|
|
1127
|
+
this.expect("BLOCK_END" /* BLOCK_END */);
|
|
1128
|
+
return {
|
|
1129
|
+
type: "Lorem",
|
|
1130
|
+
count,
|
|
1131
|
+
method,
|
|
1132
|
+
random,
|
|
1133
|
+
line: start.line,
|
|
1134
|
+
column: start.column
|
|
1135
|
+
};
|
|
1136
|
+
}
|
|
1137
|
+
parseCsrfToken(start) {
|
|
1138
|
+
this.expect("BLOCK_END" /* BLOCK_END */);
|
|
1139
|
+
return {
|
|
1140
|
+
type: "CsrfToken",
|
|
1141
|
+
line: start.line,
|
|
1142
|
+
column: start.column
|
|
1143
|
+
};
|
|
1144
|
+
}
|
|
1145
|
+
parseDebug(start) {
|
|
1146
|
+
this.expect("BLOCK_END" /* BLOCK_END */);
|
|
1147
|
+
return {
|
|
1148
|
+
type: "Debug",
|
|
1149
|
+
line: start.line,
|
|
1150
|
+
column: start.column
|
|
1151
|
+
};
|
|
1152
|
+
}
|
|
1153
|
+
parseTemplatetag(start) {
|
|
1154
|
+
const tagType = this.expect("NAME" /* NAME */).value;
|
|
1155
|
+
this.expect("BLOCK_END" /* BLOCK_END */);
|
|
1156
|
+
return {
|
|
1157
|
+
type: "Templatetag",
|
|
1158
|
+
tagType,
|
|
1159
|
+
line: start.line,
|
|
1160
|
+
column: start.column
|
|
1161
|
+
};
|
|
1162
|
+
}
|
|
1163
|
+
parseIfequal(start, negated) {
|
|
1164
|
+
const left = this.parseExpression();
|
|
1165
|
+
const right = this.parseExpression();
|
|
1166
|
+
this.expect("BLOCK_END" /* BLOCK_END */);
|
|
1167
|
+
const test = {
|
|
1168
|
+
type: "Compare",
|
|
1169
|
+
left,
|
|
1170
|
+
ops: [{ operator: negated ? "!=" : "==", right }],
|
|
1171
|
+
line: start.line,
|
|
1172
|
+
column: start.column
|
|
1173
|
+
};
|
|
1174
|
+
const body = [];
|
|
1175
|
+
let else_ = [];
|
|
1176
|
+
const endTag = negated ? "endifnotequal" : "endifequal";
|
|
1177
|
+
while (!this.isAtEnd()) {
|
|
1178
|
+
if (this.checkBlockTag("else") || this.checkBlockTag(endTag))
|
|
1179
|
+
break;
|
|
1180
|
+
const node = this.parseStatement();
|
|
1181
|
+
if (node)
|
|
1182
|
+
body.push(node);
|
|
1183
|
+
}
|
|
1184
|
+
if (this.checkBlockTag("else")) {
|
|
1185
|
+
this.advance();
|
|
1186
|
+
this.advance();
|
|
1187
|
+
this.expect("BLOCK_END" /* BLOCK_END */);
|
|
1188
|
+
while (!this.isAtEnd()) {
|
|
1189
|
+
if (this.checkBlockTag(endTag))
|
|
1190
|
+
break;
|
|
1191
|
+
const node = this.parseStatement();
|
|
1192
|
+
if (node)
|
|
1193
|
+
else_.push(node);
|
|
1194
|
+
}
|
|
1195
|
+
}
|
|
1196
|
+
this.expectBlockTag(endTag);
|
|
1197
|
+
return {
|
|
1198
|
+
type: "If",
|
|
1199
|
+
test,
|
|
1200
|
+
body,
|
|
1201
|
+
elifs: [],
|
|
1202
|
+
else_,
|
|
1203
|
+
line: start.line,
|
|
1204
|
+
column: start.column
|
|
1205
|
+
};
|
|
1206
|
+
}
|
|
955
1207
|
parseExpression() {
|
|
956
1208
|
return this.parseConditional();
|
|
957
1209
|
}
|
package/dist/filters/index.d.ts
CHANGED
|
@@ -79,5 +79,14 @@ export declare const forceescape: FilterFunction;
|
|
|
79
79
|
export declare const phone2numeric: FilterFunction;
|
|
80
80
|
export declare const linenumbers: FilterFunction;
|
|
81
81
|
export declare const unordered_list: FilterFunction;
|
|
82
|
+
export declare const addslashes: FilterFunction;
|
|
83
|
+
export declare const get_digit: FilterFunction;
|
|
84
|
+
export declare const iriencode: FilterFunction;
|
|
85
|
+
export declare const json_script: FilterFunction;
|
|
86
|
+
export declare const safeseq: FilterFunction;
|
|
87
|
+
export declare const stringformat: FilterFunction;
|
|
88
|
+
export declare const truncatechars_html: FilterFunction;
|
|
89
|
+
export declare const truncatewords_html: FilterFunction;
|
|
90
|
+
export declare const urlizetrunc: FilterFunction;
|
|
82
91
|
export declare const builtinFilters: Record<string, FilterFunction>;
|
|
83
92
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/filters/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/filters/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -660,6 +660,28 @@ class Parser {
|
|
|
660
660
|
case "autoescape":
|
|
661
661
|
case "verbatim":
|
|
662
662
|
return this.parseSimpleBlock(start, tagName.value);
|
|
663
|
+
case "cycle":
|
|
664
|
+
return this.parseCycle(start);
|
|
665
|
+
case "firstof":
|
|
666
|
+
return this.parseFirstof(start);
|
|
667
|
+
case "ifchanged":
|
|
668
|
+
return this.parseIfchanged(start);
|
|
669
|
+
case "regroup":
|
|
670
|
+
return this.parseRegroup(start);
|
|
671
|
+
case "widthratio":
|
|
672
|
+
return this.parseWidthratio(start);
|
|
673
|
+
case "lorem":
|
|
674
|
+
return this.parseLorem(start);
|
|
675
|
+
case "csrf_token":
|
|
676
|
+
return this.parseCsrfToken(start);
|
|
677
|
+
case "debug":
|
|
678
|
+
return this.parseDebug(start);
|
|
679
|
+
case "templatetag":
|
|
680
|
+
return this.parseTemplatetag(start);
|
|
681
|
+
case "ifequal":
|
|
682
|
+
return this.parseIfequal(start, false);
|
|
683
|
+
case "ifnotequal":
|
|
684
|
+
return this.parseIfequal(start, true);
|
|
663
685
|
default:
|
|
664
686
|
this.skipToBlockEnd();
|
|
665
687
|
return null;
|
|
@@ -963,7 +985,7 @@ class Parser {
|
|
|
963
985
|
column: start.column
|
|
964
986
|
};
|
|
965
987
|
}
|
|
966
|
-
parseComment(
|
|
988
|
+
parseComment(_start) {
|
|
967
989
|
this.expect("BLOCK_END" /* BLOCK_END */);
|
|
968
990
|
while (!this.isAtEnd()) {
|
|
969
991
|
if (this.checkBlockTag("endcomment"))
|
|
@@ -973,7 +995,7 @@ class Parser {
|
|
|
973
995
|
this.expectBlockTag("endcomment");
|
|
974
996
|
return null;
|
|
975
997
|
}
|
|
976
|
-
parseSimpleBlock(
|
|
998
|
+
parseSimpleBlock(_start, tagName) {
|
|
977
999
|
this.skipToBlockEnd();
|
|
978
1000
|
const endTag = `end${tagName}`;
|
|
979
1001
|
while (!this.isAtEnd()) {
|
|
@@ -988,6 +1010,236 @@ class Parser {
|
|
|
988
1010
|
}
|
|
989
1011
|
return null;
|
|
990
1012
|
}
|
|
1013
|
+
parseCycle(start) {
|
|
1014
|
+
const values = [];
|
|
1015
|
+
let asVar = null;
|
|
1016
|
+
let silent = false;
|
|
1017
|
+
while (!this.check("BLOCK_END" /* BLOCK_END */)) {
|
|
1018
|
+
if (this.check("NAME" /* NAME */) && this.peek().value === "as") {
|
|
1019
|
+
this.advance();
|
|
1020
|
+
asVar = this.expect("NAME" /* NAME */).value;
|
|
1021
|
+
if (this.check("NAME" /* NAME */) && this.peek().value === "silent") {
|
|
1022
|
+
this.advance();
|
|
1023
|
+
silent = true;
|
|
1024
|
+
}
|
|
1025
|
+
break;
|
|
1026
|
+
}
|
|
1027
|
+
values.push(this.parseExpression());
|
|
1028
|
+
}
|
|
1029
|
+
this.expect("BLOCK_END" /* BLOCK_END */);
|
|
1030
|
+
return {
|
|
1031
|
+
type: "Cycle",
|
|
1032
|
+
values,
|
|
1033
|
+
asVar,
|
|
1034
|
+
silent,
|
|
1035
|
+
line: start.line,
|
|
1036
|
+
column: start.column
|
|
1037
|
+
};
|
|
1038
|
+
}
|
|
1039
|
+
parseFirstof(start) {
|
|
1040
|
+
const values = [];
|
|
1041
|
+
let fallback = null;
|
|
1042
|
+
let asVar = null;
|
|
1043
|
+
while (!this.check("BLOCK_END" /* BLOCK_END */)) {
|
|
1044
|
+
if (this.check("NAME" /* NAME */) && this.peek().value === "as") {
|
|
1045
|
+
this.advance();
|
|
1046
|
+
asVar = this.expect("NAME" /* NAME */).value;
|
|
1047
|
+
break;
|
|
1048
|
+
}
|
|
1049
|
+
values.push(this.parseExpression());
|
|
1050
|
+
}
|
|
1051
|
+
if (values.length > 0) {
|
|
1052
|
+
const last = values[values.length - 1];
|
|
1053
|
+
if (last.type === "Literal" && typeof last.value === "string") {
|
|
1054
|
+
fallback = values.pop();
|
|
1055
|
+
}
|
|
1056
|
+
}
|
|
1057
|
+
this.expect("BLOCK_END" /* BLOCK_END */);
|
|
1058
|
+
return {
|
|
1059
|
+
type: "Firstof",
|
|
1060
|
+
values,
|
|
1061
|
+
fallback,
|
|
1062
|
+
asVar,
|
|
1063
|
+
line: start.line,
|
|
1064
|
+
column: start.column
|
|
1065
|
+
};
|
|
1066
|
+
}
|
|
1067
|
+
parseIfchanged(start) {
|
|
1068
|
+
const values = [];
|
|
1069
|
+
while (!this.check("BLOCK_END" /* BLOCK_END */)) {
|
|
1070
|
+
values.push(this.parseExpression());
|
|
1071
|
+
}
|
|
1072
|
+
this.expect("BLOCK_END" /* BLOCK_END */);
|
|
1073
|
+
const body = [];
|
|
1074
|
+
let else_ = [];
|
|
1075
|
+
while (!this.isAtEnd()) {
|
|
1076
|
+
if (this.checkBlockTag("else") || this.checkBlockTag("endifchanged"))
|
|
1077
|
+
break;
|
|
1078
|
+
const node = this.parseStatement();
|
|
1079
|
+
if (node)
|
|
1080
|
+
body.push(node);
|
|
1081
|
+
}
|
|
1082
|
+
if (this.checkBlockTag("else")) {
|
|
1083
|
+
this.advance();
|
|
1084
|
+
this.advance();
|
|
1085
|
+
this.expect("BLOCK_END" /* BLOCK_END */);
|
|
1086
|
+
while (!this.isAtEnd()) {
|
|
1087
|
+
if (this.checkBlockTag("endifchanged"))
|
|
1088
|
+
break;
|
|
1089
|
+
const node = this.parseStatement();
|
|
1090
|
+
if (node)
|
|
1091
|
+
else_.push(node);
|
|
1092
|
+
}
|
|
1093
|
+
}
|
|
1094
|
+
this.expectBlockTag("endifchanged");
|
|
1095
|
+
return {
|
|
1096
|
+
type: "Ifchanged",
|
|
1097
|
+
values,
|
|
1098
|
+
body,
|
|
1099
|
+
else_,
|
|
1100
|
+
line: start.line,
|
|
1101
|
+
column: start.column
|
|
1102
|
+
};
|
|
1103
|
+
}
|
|
1104
|
+
parseRegroup(start) {
|
|
1105
|
+
const target = this.parseExpression();
|
|
1106
|
+
this.expectName("by");
|
|
1107
|
+
const key = this.expect("NAME" /* NAME */).value;
|
|
1108
|
+
this.expectName("as");
|
|
1109
|
+
const asVar = this.expect("NAME" /* NAME */).value;
|
|
1110
|
+
this.expect("BLOCK_END" /* BLOCK_END */);
|
|
1111
|
+
return {
|
|
1112
|
+
type: "Regroup",
|
|
1113
|
+
target,
|
|
1114
|
+
key,
|
|
1115
|
+
asVar,
|
|
1116
|
+
line: start.line,
|
|
1117
|
+
column: start.column
|
|
1118
|
+
};
|
|
1119
|
+
}
|
|
1120
|
+
parseWidthratio(start) {
|
|
1121
|
+
const value = this.parseExpression();
|
|
1122
|
+
const maxValue = this.parseExpression();
|
|
1123
|
+
const maxWidth = this.parseExpression();
|
|
1124
|
+
let asVar = null;
|
|
1125
|
+
if (this.check("NAME" /* NAME */) && this.peek().value === "as") {
|
|
1126
|
+
this.advance();
|
|
1127
|
+
asVar = this.expect("NAME" /* NAME */).value;
|
|
1128
|
+
}
|
|
1129
|
+
this.expect("BLOCK_END" /* BLOCK_END */);
|
|
1130
|
+
return {
|
|
1131
|
+
type: "Widthratio",
|
|
1132
|
+
value,
|
|
1133
|
+
maxValue,
|
|
1134
|
+
maxWidth,
|
|
1135
|
+
asVar,
|
|
1136
|
+
line: start.line,
|
|
1137
|
+
column: start.column
|
|
1138
|
+
};
|
|
1139
|
+
}
|
|
1140
|
+
parseLorem(start) {
|
|
1141
|
+
let count = null;
|
|
1142
|
+
let method = "p";
|
|
1143
|
+
let random = false;
|
|
1144
|
+
if (this.check("NUMBER" /* NUMBER */)) {
|
|
1145
|
+
count = {
|
|
1146
|
+
type: "Literal",
|
|
1147
|
+
value: parseInt(this.advance().value, 10),
|
|
1148
|
+
line: start.line,
|
|
1149
|
+
column: start.column
|
|
1150
|
+
};
|
|
1151
|
+
}
|
|
1152
|
+
if (this.check("NAME" /* NAME */)) {
|
|
1153
|
+
const m = this.peek().value.toLowerCase();
|
|
1154
|
+
if (m === "w" || m === "p" || m === "b") {
|
|
1155
|
+
method = m;
|
|
1156
|
+
this.advance();
|
|
1157
|
+
}
|
|
1158
|
+
}
|
|
1159
|
+
if (this.check("NAME" /* NAME */) && this.peek().value === "random") {
|
|
1160
|
+
random = true;
|
|
1161
|
+
this.advance();
|
|
1162
|
+
}
|
|
1163
|
+
this.expect("BLOCK_END" /* BLOCK_END */);
|
|
1164
|
+
return {
|
|
1165
|
+
type: "Lorem",
|
|
1166
|
+
count,
|
|
1167
|
+
method,
|
|
1168
|
+
random,
|
|
1169
|
+
line: start.line,
|
|
1170
|
+
column: start.column
|
|
1171
|
+
};
|
|
1172
|
+
}
|
|
1173
|
+
parseCsrfToken(start) {
|
|
1174
|
+
this.expect("BLOCK_END" /* BLOCK_END */);
|
|
1175
|
+
return {
|
|
1176
|
+
type: "CsrfToken",
|
|
1177
|
+
line: start.line,
|
|
1178
|
+
column: start.column
|
|
1179
|
+
};
|
|
1180
|
+
}
|
|
1181
|
+
parseDebug(start) {
|
|
1182
|
+
this.expect("BLOCK_END" /* BLOCK_END */);
|
|
1183
|
+
return {
|
|
1184
|
+
type: "Debug",
|
|
1185
|
+
line: start.line,
|
|
1186
|
+
column: start.column
|
|
1187
|
+
};
|
|
1188
|
+
}
|
|
1189
|
+
parseTemplatetag(start) {
|
|
1190
|
+
const tagType = this.expect("NAME" /* NAME */).value;
|
|
1191
|
+
this.expect("BLOCK_END" /* BLOCK_END */);
|
|
1192
|
+
return {
|
|
1193
|
+
type: "Templatetag",
|
|
1194
|
+
tagType,
|
|
1195
|
+
line: start.line,
|
|
1196
|
+
column: start.column
|
|
1197
|
+
};
|
|
1198
|
+
}
|
|
1199
|
+
parseIfequal(start, negated) {
|
|
1200
|
+
const left = this.parseExpression();
|
|
1201
|
+
const right = this.parseExpression();
|
|
1202
|
+
this.expect("BLOCK_END" /* BLOCK_END */);
|
|
1203
|
+
const test = {
|
|
1204
|
+
type: "Compare",
|
|
1205
|
+
left,
|
|
1206
|
+
ops: [{ operator: negated ? "!=" : "==", right }],
|
|
1207
|
+
line: start.line,
|
|
1208
|
+
column: start.column
|
|
1209
|
+
};
|
|
1210
|
+
const body = [];
|
|
1211
|
+
let else_ = [];
|
|
1212
|
+
const endTag = negated ? "endifnotequal" : "endifequal";
|
|
1213
|
+
while (!this.isAtEnd()) {
|
|
1214
|
+
if (this.checkBlockTag("else") || this.checkBlockTag(endTag))
|
|
1215
|
+
break;
|
|
1216
|
+
const node = this.parseStatement();
|
|
1217
|
+
if (node)
|
|
1218
|
+
body.push(node);
|
|
1219
|
+
}
|
|
1220
|
+
if (this.checkBlockTag("else")) {
|
|
1221
|
+
this.advance();
|
|
1222
|
+
this.advance();
|
|
1223
|
+
this.expect("BLOCK_END" /* BLOCK_END */);
|
|
1224
|
+
while (!this.isAtEnd()) {
|
|
1225
|
+
if (this.checkBlockTag(endTag))
|
|
1226
|
+
break;
|
|
1227
|
+
const node = this.parseStatement();
|
|
1228
|
+
if (node)
|
|
1229
|
+
else_.push(node);
|
|
1230
|
+
}
|
|
1231
|
+
}
|
|
1232
|
+
this.expectBlockTag(endTag);
|
|
1233
|
+
return {
|
|
1234
|
+
type: "If",
|
|
1235
|
+
test,
|
|
1236
|
+
body,
|
|
1237
|
+
elifs: [],
|
|
1238
|
+
else_,
|
|
1239
|
+
line: start.line,
|
|
1240
|
+
column: start.column
|
|
1241
|
+
};
|
|
1242
|
+
}
|
|
991
1243
|
parseExpression() {
|
|
992
1244
|
return this.parseConditional();
|
|
993
1245
|
}
|
|
@@ -2231,6 +2483,172 @@ ${indent2}`;
|
|
|
2231
2483
|
safeString.__safe__ = true;
|
|
2232
2484
|
return safeString;
|
|
2233
2485
|
};
|
|
2486
|
+
var addslashes = (value) => {
|
|
2487
|
+
const result = String(value).replace(/\\/g, "\\\\").replace(/'/g, "\\'").replace(/"/g, "\\\"");
|
|
2488
|
+
const safeString = new String(result);
|
|
2489
|
+
safeString.__safe__ = true;
|
|
2490
|
+
return safeString;
|
|
2491
|
+
};
|
|
2492
|
+
var get_digit = (value, digit) => {
|
|
2493
|
+
const num = parseInt(String(value), 10);
|
|
2494
|
+
if (isNaN(num))
|
|
2495
|
+
return value;
|
|
2496
|
+
const str = String(Math.abs(num));
|
|
2497
|
+
const pos = Number(digit) || 1;
|
|
2498
|
+
if (pos < 1 || pos > str.length)
|
|
2499
|
+
return value;
|
|
2500
|
+
return parseInt(str[str.length - pos], 10);
|
|
2501
|
+
};
|
|
2502
|
+
var iriencode = (value) => {
|
|
2503
|
+
return String(value).replace(/ /g, "%20").replace(/"/g, "%22").replace(/</g, "%3C").replace(/>/g, "%3E").replace(/\\/g, "%5C").replace(/\^/g, "%5E").replace(/`/g, "%60").replace(/\{/g, "%7B").replace(/\|/g, "%7C").replace(/\}/g, "%7D");
|
|
2504
|
+
};
|
|
2505
|
+
var json_script = (value, elementId) => {
|
|
2506
|
+
const jsonStr = JSON.stringify(value).replace(/</g, "\\u003C").replace(/>/g, "\\u003E").replace(/&/g, "\\u0026");
|
|
2507
|
+
const id = elementId ? ` id="${String(elementId)}"` : "";
|
|
2508
|
+
const html = `<script${id} type="application/json">${jsonStr}</script>`;
|
|
2509
|
+
const safeString = new String(html);
|
|
2510
|
+
safeString.__safe__ = true;
|
|
2511
|
+
return safeString;
|
|
2512
|
+
};
|
|
2513
|
+
var safeseq = (value) => {
|
|
2514
|
+
if (!Array.isArray(value))
|
|
2515
|
+
return value;
|
|
2516
|
+
return value.map((item) => {
|
|
2517
|
+
const safeString = new String(item);
|
|
2518
|
+
safeString.__safe__ = true;
|
|
2519
|
+
return safeString;
|
|
2520
|
+
});
|
|
2521
|
+
};
|
|
2522
|
+
var stringformat = (value, formatStr) => {
|
|
2523
|
+
const fmt = String(formatStr);
|
|
2524
|
+
const val = value;
|
|
2525
|
+
if (fmt === "s")
|
|
2526
|
+
return String(val);
|
|
2527
|
+
if (fmt === "d" || fmt === "i")
|
|
2528
|
+
return String(parseInt(String(val), 10) || 0);
|
|
2529
|
+
if (fmt === "f")
|
|
2530
|
+
return String(parseFloat(String(val)) || 0);
|
|
2531
|
+
if (fmt === "x")
|
|
2532
|
+
return (parseInt(String(val), 10) || 0).toString(16);
|
|
2533
|
+
if (fmt === "X")
|
|
2534
|
+
return (parseInt(String(val), 10) || 0).toString(16).toUpperCase();
|
|
2535
|
+
if (fmt === "o")
|
|
2536
|
+
return (parseInt(String(val), 10) || 0).toString(8);
|
|
2537
|
+
if (fmt === "b")
|
|
2538
|
+
return (parseInt(String(val), 10) || 0).toString(2);
|
|
2539
|
+
if (fmt === "e")
|
|
2540
|
+
return (parseFloat(String(val)) || 0).toExponential();
|
|
2541
|
+
const precisionMatch = fmt.match(/^\.?(\d+)f$/);
|
|
2542
|
+
if (precisionMatch) {
|
|
2543
|
+
const precision = parseInt(precisionMatch[1], 10);
|
|
2544
|
+
return (parseFloat(String(val)) || 0).toFixed(precision);
|
|
2545
|
+
}
|
|
2546
|
+
const widthMatch = fmt.match(/^(\d+)([sd])$/);
|
|
2547
|
+
if (widthMatch) {
|
|
2548
|
+
const width = parseInt(widthMatch[1], 10);
|
|
2549
|
+
const type = widthMatch[2];
|
|
2550
|
+
const strVal = type === "d" ? String(parseInt(String(val), 10) || 0) : String(val);
|
|
2551
|
+
return strVal.padStart(width, type === "d" ? "0" : " ");
|
|
2552
|
+
}
|
|
2553
|
+
return String(val);
|
|
2554
|
+
};
|
|
2555
|
+
var truncatechars_html = (value, length2 = 30) => {
|
|
2556
|
+
const str = String(value);
|
|
2557
|
+
const maxLen = Number(length2);
|
|
2558
|
+
let result = "";
|
|
2559
|
+
let textLen = 0;
|
|
2560
|
+
let inTag = false;
|
|
2561
|
+
const openTags = [];
|
|
2562
|
+
for (let i = 0;i < str.length && textLen < maxLen; i++) {
|
|
2563
|
+
const char = str[i];
|
|
2564
|
+
if (char === "<") {
|
|
2565
|
+
inTag = true;
|
|
2566
|
+
const closeMatch = str.slice(i).match(/^<\/(\w+)/);
|
|
2567
|
+
const openMatch = str.slice(i).match(/^<(\w+)/);
|
|
2568
|
+
if (closeMatch) {
|
|
2569
|
+
const tagName = closeMatch[1].toLowerCase();
|
|
2570
|
+
const lastOpen = openTags.lastIndexOf(tagName);
|
|
2571
|
+
if (lastOpen !== -1)
|
|
2572
|
+
openTags.splice(lastOpen, 1);
|
|
2573
|
+
} else if (openMatch && !str.slice(i).match(/^<\w+[^>]*\/>/)) {
|
|
2574
|
+
openTags.push(openMatch[1].toLowerCase());
|
|
2575
|
+
}
|
|
2576
|
+
}
|
|
2577
|
+
result += char;
|
|
2578
|
+
if (char === ">") {
|
|
2579
|
+
inTag = false;
|
|
2580
|
+
} else if (!inTag) {
|
|
2581
|
+
textLen++;
|
|
2582
|
+
}
|
|
2583
|
+
}
|
|
2584
|
+
if (textLen >= maxLen && str.length > result.length) {
|
|
2585
|
+
result += "...";
|
|
2586
|
+
}
|
|
2587
|
+
for (let i = openTags.length - 1;i >= 0; i--) {
|
|
2588
|
+
result += `</${openTags[i]}>`;
|
|
2589
|
+
}
|
|
2590
|
+
const safeString = new String(result);
|
|
2591
|
+
safeString.__safe__ = true;
|
|
2592
|
+
return safeString;
|
|
2593
|
+
};
|
|
2594
|
+
var truncatewords_html = (value, count = 15) => {
|
|
2595
|
+
const str = String(value);
|
|
2596
|
+
const maxWords = Number(count);
|
|
2597
|
+
let result = "";
|
|
2598
|
+
let wordCount = 0;
|
|
2599
|
+
let inTag = false;
|
|
2600
|
+
let inWord = false;
|
|
2601
|
+
const openTags = [];
|
|
2602
|
+
for (let i = 0;i < str.length && wordCount < maxWords; i++) {
|
|
2603
|
+
const char = str[i];
|
|
2604
|
+
if (char === "<") {
|
|
2605
|
+
inTag = true;
|
|
2606
|
+
const closeMatch = str.slice(i).match(/^<\/(\w+)/);
|
|
2607
|
+
const openMatch = str.slice(i).match(/^<(\w+)/);
|
|
2608
|
+
if (closeMatch) {
|
|
2609
|
+
const tagName = closeMatch[1].toLowerCase();
|
|
2610
|
+
const lastOpen = openTags.lastIndexOf(tagName);
|
|
2611
|
+
if (lastOpen !== -1)
|
|
2612
|
+
openTags.splice(lastOpen, 1);
|
|
2613
|
+
} else if (openMatch && !str.slice(i).match(/^<\w+[^>]*\/>/)) {
|
|
2614
|
+
openTags.push(openMatch[1].toLowerCase());
|
|
2615
|
+
}
|
|
2616
|
+
}
|
|
2617
|
+
result += char;
|
|
2618
|
+
if (char === ">") {
|
|
2619
|
+
inTag = false;
|
|
2620
|
+
} else if (!inTag) {
|
|
2621
|
+
const isSpace = /\s/.test(char);
|
|
2622
|
+
if (!isSpace && !inWord) {
|
|
2623
|
+
inWord = true;
|
|
2624
|
+
} else if (isSpace && inWord) {
|
|
2625
|
+
inWord = false;
|
|
2626
|
+
wordCount++;
|
|
2627
|
+
}
|
|
2628
|
+
}
|
|
2629
|
+
}
|
|
2630
|
+
if (inWord)
|
|
2631
|
+
wordCount++;
|
|
2632
|
+
if (wordCount >= maxWords) {
|
|
2633
|
+
result = result.trimEnd() + "...";
|
|
2634
|
+
}
|
|
2635
|
+
for (let i = openTags.length - 1;i >= 0; i--) {
|
|
2636
|
+
result += `</${openTags[i]}>`;
|
|
2637
|
+
}
|
|
2638
|
+
const safeString = new String(result);
|
|
2639
|
+
safeString.__safe__ = true;
|
|
2640
|
+
return safeString;
|
|
2641
|
+
};
|
|
2642
|
+
var urlizetrunc = (value, limit = 15) => {
|
|
2643
|
+
const maxLen = Number(limit);
|
|
2644
|
+
const html = String(value).replace(URLIZE_REGEX, (url) => {
|
|
2645
|
+
const displayUrl = url.length > maxLen ? url.slice(0, maxLen) + "..." : url;
|
|
2646
|
+
return `<a href="${url}">${displayUrl}</a>`;
|
|
2647
|
+
});
|
|
2648
|
+
const safeString = new String(html);
|
|
2649
|
+
safeString.__safe__ = true;
|
|
2650
|
+
return safeString;
|
|
2651
|
+
};
|
|
2234
2652
|
var builtinFilters = {
|
|
2235
2653
|
upper,
|
|
2236
2654
|
lower,
|
|
@@ -2309,7 +2727,16 @@ var builtinFilters = {
|
|
|
2309
2727
|
forceescape,
|
|
2310
2728
|
phone2numeric,
|
|
2311
2729
|
linenumbers,
|
|
2312
|
-
unordered_list
|
|
2730
|
+
unordered_list,
|
|
2731
|
+
addslashes,
|
|
2732
|
+
get_digit,
|
|
2733
|
+
iriencode,
|
|
2734
|
+
json_script,
|
|
2735
|
+
safeseq,
|
|
2736
|
+
stringformat,
|
|
2737
|
+
truncatechars_html,
|
|
2738
|
+
truncatewords_html,
|
|
2739
|
+
urlizetrunc
|
|
2313
2740
|
};
|
|
2314
2741
|
|
|
2315
2742
|
// src/tests/index.ts
|
|
@@ -2625,6 +3052,24 @@ class Runtime {
|
|
|
2625
3052
|
case "Load":
|
|
2626
3053
|
case "Extends":
|
|
2627
3054
|
return null;
|
|
3055
|
+
case "Cycle":
|
|
3056
|
+
return this.renderCycleSync(node, ctx);
|
|
3057
|
+
case "Firstof":
|
|
3058
|
+
return this.renderFirstofSync(node, ctx);
|
|
3059
|
+
case "Ifchanged":
|
|
3060
|
+
return this.renderIfchangedSync(node, ctx);
|
|
3061
|
+
case "Regroup":
|
|
3062
|
+
return this.renderRegroupSync(node, ctx);
|
|
3063
|
+
case "Widthratio":
|
|
3064
|
+
return this.renderWidthratioSync(node, ctx);
|
|
3065
|
+
case "Lorem":
|
|
3066
|
+
return this.renderLoremSync(node, ctx);
|
|
3067
|
+
case "CsrfToken":
|
|
3068
|
+
return this.renderCsrfTokenSync();
|
|
3069
|
+
case "Debug":
|
|
3070
|
+
return this.renderDebugSync(ctx);
|
|
3071
|
+
case "Templatetag":
|
|
3072
|
+
return this.renderTemplatetagSync(node);
|
|
2628
3073
|
default:
|
|
2629
3074
|
return null;
|
|
2630
3075
|
}
|
|
@@ -2770,6 +3215,217 @@ class Runtime {
|
|
|
2770
3215
|
}
|
|
2771
3216
|
return result;
|
|
2772
3217
|
}
|
|
3218
|
+
cycleState = new Map;
|
|
3219
|
+
renderCycleSync(node, ctx) {
|
|
3220
|
+
const key = node.values.map((v) => JSON.stringify(v)).join(",");
|
|
3221
|
+
const currentIndex = this.cycleState.get(key) ?? 0;
|
|
3222
|
+
const values = node.values.map((v) => this.eval(v, ctx));
|
|
3223
|
+
const value = values[currentIndex % values.length];
|
|
3224
|
+
this.cycleState.set(key, currentIndex + 1);
|
|
3225
|
+
if (node.asVar) {
|
|
3226
|
+
ctx.set(node.asVar, value);
|
|
3227
|
+
return node.silent ? "" : this.stringify(value);
|
|
3228
|
+
}
|
|
3229
|
+
return this.stringify(value);
|
|
3230
|
+
}
|
|
3231
|
+
renderFirstofSync(node, ctx) {
|
|
3232
|
+
for (const expr of node.values) {
|
|
3233
|
+
const value = this.eval(expr, ctx);
|
|
3234
|
+
if (this.isTruthy(value)) {
|
|
3235
|
+
if (node.asVar) {
|
|
3236
|
+
ctx.set(node.asVar, value);
|
|
3237
|
+
return "";
|
|
3238
|
+
}
|
|
3239
|
+
return this.stringify(value);
|
|
3240
|
+
}
|
|
3241
|
+
}
|
|
3242
|
+
const fallback = node.fallback ? this.eval(node.fallback, ctx) : "";
|
|
3243
|
+
if (node.asVar) {
|
|
3244
|
+
ctx.set(node.asVar, fallback);
|
|
3245
|
+
return "";
|
|
3246
|
+
}
|
|
3247
|
+
return this.stringify(fallback);
|
|
3248
|
+
}
|
|
3249
|
+
ifchangedState = new Map;
|
|
3250
|
+
renderIfchangedSync(node, ctx) {
|
|
3251
|
+
const key = `ifchanged_${node.line}_${node.column}`;
|
|
3252
|
+
let currentValue;
|
|
3253
|
+
if (node.values.length > 0) {
|
|
3254
|
+
currentValue = node.values.map((v) => this.eval(v, ctx));
|
|
3255
|
+
} else {
|
|
3256
|
+
currentValue = this.renderNodesSync(node.body, ctx);
|
|
3257
|
+
}
|
|
3258
|
+
const lastValue = this.ifchangedState.get(key);
|
|
3259
|
+
const changed = JSON.stringify(currentValue) !== JSON.stringify(lastValue);
|
|
3260
|
+
this.ifchangedState.set(key, currentValue);
|
|
3261
|
+
if (changed) {
|
|
3262
|
+
if (node.values.length > 0) {
|
|
3263
|
+
return this.renderNodesSync(node.body, ctx);
|
|
3264
|
+
}
|
|
3265
|
+
return currentValue;
|
|
3266
|
+
} else {
|
|
3267
|
+
return this.renderNodesSync(node.else_, ctx);
|
|
3268
|
+
}
|
|
3269
|
+
}
|
|
3270
|
+
renderRegroupSync(node, ctx) {
|
|
3271
|
+
const list2 = this.toIterable(this.eval(node.target, ctx));
|
|
3272
|
+
const groups = [];
|
|
3273
|
+
let currentGrouper = Symbol("initial");
|
|
3274
|
+
let currentList = [];
|
|
3275
|
+
for (const item of list2) {
|
|
3276
|
+
const grouper = item && typeof item === "object" ? item[node.key] : undefined;
|
|
3277
|
+
if (grouper !== currentGrouper) {
|
|
3278
|
+
if (currentList.length > 0) {
|
|
3279
|
+
groups.push({ grouper: currentGrouper, list: currentList });
|
|
3280
|
+
}
|
|
3281
|
+
currentGrouper = grouper;
|
|
3282
|
+
currentList = [item];
|
|
3283
|
+
} else {
|
|
3284
|
+
currentList.push(item);
|
|
3285
|
+
}
|
|
3286
|
+
}
|
|
3287
|
+
if (currentList.length > 0) {
|
|
3288
|
+
groups.push({ grouper: currentGrouper, list: currentList });
|
|
3289
|
+
}
|
|
3290
|
+
ctx.set(node.asVar, groups);
|
|
3291
|
+
return "";
|
|
3292
|
+
}
|
|
3293
|
+
renderWidthratioSync(node, ctx) {
|
|
3294
|
+
const value = Number(this.eval(node.value, ctx));
|
|
3295
|
+
const maxValue = Number(this.eval(node.maxValue, ctx));
|
|
3296
|
+
const maxWidth = Number(this.eval(node.maxWidth, ctx));
|
|
3297
|
+
const ratio = maxValue === 0 ? 0 : Math.round(value / maxValue * maxWidth);
|
|
3298
|
+
if (node.asVar) {
|
|
3299
|
+
ctx.set(node.asVar, ratio);
|
|
3300
|
+
return "";
|
|
3301
|
+
}
|
|
3302
|
+
return String(ratio);
|
|
3303
|
+
}
|
|
3304
|
+
renderLoremSync(node, ctx) {
|
|
3305
|
+
const count = node.count ? Number(this.eval(node.count, ctx)) : 1;
|
|
3306
|
+
const method = node.method;
|
|
3307
|
+
const words = [
|
|
3308
|
+
"lorem",
|
|
3309
|
+
"ipsum",
|
|
3310
|
+
"dolor",
|
|
3311
|
+
"sit",
|
|
3312
|
+
"amet",
|
|
3313
|
+
"consectetur",
|
|
3314
|
+
"adipiscing",
|
|
3315
|
+
"elit",
|
|
3316
|
+
"sed",
|
|
3317
|
+
"do",
|
|
3318
|
+
"eiusmod",
|
|
3319
|
+
"tempor",
|
|
3320
|
+
"incididunt",
|
|
3321
|
+
"ut",
|
|
3322
|
+
"labore",
|
|
3323
|
+
"et",
|
|
3324
|
+
"dolore",
|
|
3325
|
+
"magna",
|
|
3326
|
+
"aliqua",
|
|
3327
|
+
"enim",
|
|
3328
|
+
"ad",
|
|
3329
|
+
"minim",
|
|
3330
|
+
"veniam",
|
|
3331
|
+
"quis",
|
|
3332
|
+
"nostrud",
|
|
3333
|
+
"exercitation",
|
|
3334
|
+
"ullamco",
|
|
3335
|
+
"laboris",
|
|
3336
|
+
"nisi",
|
|
3337
|
+
"aliquip",
|
|
3338
|
+
"ex",
|
|
3339
|
+
"ea",
|
|
3340
|
+
"commodo",
|
|
3341
|
+
"consequat",
|
|
3342
|
+
"duis",
|
|
3343
|
+
"aute",
|
|
3344
|
+
"irure",
|
|
3345
|
+
"in",
|
|
3346
|
+
"reprehenderit",
|
|
3347
|
+
"voluptate",
|
|
3348
|
+
"velit",
|
|
3349
|
+
"esse",
|
|
3350
|
+
"cillum",
|
|
3351
|
+
"fugiat",
|
|
3352
|
+
"nulla",
|
|
3353
|
+
"pariatur",
|
|
3354
|
+
"excepteur",
|
|
3355
|
+
"sint",
|
|
3356
|
+
"occaecat",
|
|
3357
|
+
"cupidatat",
|
|
3358
|
+
"non",
|
|
3359
|
+
"proident",
|
|
3360
|
+
"sunt",
|
|
3361
|
+
"culpa",
|
|
3362
|
+
"qui",
|
|
3363
|
+
"officia",
|
|
3364
|
+
"deserunt",
|
|
3365
|
+
"mollit",
|
|
3366
|
+
"anim",
|
|
3367
|
+
"id",
|
|
3368
|
+
"est",
|
|
3369
|
+
"laborum"
|
|
3370
|
+
];
|
|
3371
|
+
const getWord = (index) => {
|
|
3372
|
+
if (node.random) {
|
|
3373
|
+
return words[Math.floor(Math.random() * words.length)];
|
|
3374
|
+
}
|
|
3375
|
+
return words[index % words.length];
|
|
3376
|
+
};
|
|
3377
|
+
if (method === "w") {
|
|
3378
|
+
const result = [];
|
|
3379
|
+
for (let i = 0;i < count; i++) {
|
|
3380
|
+
result.push(getWord(i));
|
|
3381
|
+
}
|
|
3382
|
+
return result.join(" ");
|
|
3383
|
+
} else if (method === "p" || method === "b") {
|
|
3384
|
+
const paragraphs = [];
|
|
3385
|
+
for (let p = 0;p < count; p++) {
|
|
3386
|
+
const sentenceCount = 3 + p % 3;
|
|
3387
|
+
const sentences = [];
|
|
3388
|
+
for (let s = 0;s < sentenceCount; s++) {
|
|
3389
|
+
const wordCount = 8 + s % 7;
|
|
3390
|
+
const sentenceWords = [];
|
|
3391
|
+
for (let w = 0;w < wordCount; w++) {
|
|
3392
|
+
sentenceWords.push(getWord(p * 100 + s * 20 + w));
|
|
3393
|
+
}
|
|
3394
|
+
sentenceWords[0] = sentenceWords[0].charAt(0).toUpperCase() + sentenceWords[0].slice(1);
|
|
3395
|
+
sentences.push(sentenceWords.join(" ") + ".");
|
|
3396
|
+
}
|
|
3397
|
+
paragraphs.push(sentences.join(" "));
|
|
3398
|
+
}
|
|
3399
|
+
if (method === "b") {
|
|
3400
|
+
return paragraphs.join(`
|
|
3401
|
+
|
|
3402
|
+
`);
|
|
3403
|
+
}
|
|
3404
|
+
return paragraphs.map((p) => `<p>${p}</p>`).join(`
|
|
3405
|
+
`);
|
|
3406
|
+
}
|
|
3407
|
+
return "";
|
|
3408
|
+
}
|
|
3409
|
+
renderCsrfTokenSync() {
|
|
3410
|
+
return '<input type="hidden" name="csrfmiddlewaretoken" value="CSRF_TOKEN_PLACEHOLDER">';
|
|
3411
|
+
}
|
|
3412
|
+
renderDebugSync(ctx) {
|
|
3413
|
+
const data = ctx.toObject?.() || {};
|
|
3414
|
+
return `<pre>${JSON.stringify(data, null, 2)}</pre>`;
|
|
3415
|
+
}
|
|
3416
|
+
renderTemplatetagSync(node) {
|
|
3417
|
+
const tagMap = {
|
|
3418
|
+
openblock: "{%",
|
|
3419
|
+
closeblock: "%}",
|
|
3420
|
+
openvariable: "{{",
|
|
3421
|
+
closevariable: "}}",
|
|
3422
|
+
openbrace: "{",
|
|
3423
|
+
closebrace: "}",
|
|
3424
|
+
opencomment: "{#",
|
|
3425
|
+
closecomment: "#}"
|
|
3426
|
+
};
|
|
3427
|
+
return tagMap[node.tagType] || "";
|
|
3428
|
+
}
|
|
2773
3429
|
getDateInTimezone(d, tz) {
|
|
2774
3430
|
if (!tz) {
|
|
2775
3431
|
return {
|
|
@@ -3192,6 +3848,24 @@ class Runtime {
|
|
|
3192
3848
|
return this.renderStaticSync(node, ctx);
|
|
3193
3849
|
case "Now":
|
|
3194
3850
|
return this.renderNowSync(node, ctx);
|
|
3851
|
+
case "Cycle":
|
|
3852
|
+
return this.renderCycleSync(node, ctx);
|
|
3853
|
+
case "Firstof":
|
|
3854
|
+
return this.renderFirstofSync(node, ctx);
|
|
3855
|
+
case "Ifchanged":
|
|
3856
|
+
return this.renderIfchangedSync(node, ctx);
|
|
3857
|
+
case "Regroup":
|
|
3858
|
+
return this.renderRegroupSync(node, ctx);
|
|
3859
|
+
case "Widthratio":
|
|
3860
|
+
return this.renderWidthratioSync(node, ctx);
|
|
3861
|
+
case "Lorem":
|
|
3862
|
+
return this.renderLoremSync(node, ctx);
|
|
3863
|
+
case "CsrfToken":
|
|
3864
|
+
return this.renderCsrfTokenSync();
|
|
3865
|
+
case "Debug":
|
|
3866
|
+
return this.renderDebugSync(ctx);
|
|
3867
|
+
case "Templatetag":
|
|
3868
|
+
return this.renderTemplatetagSync(node);
|
|
3195
3869
|
default:
|
|
3196
3870
|
return null;
|
|
3197
3871
|
}
|
package/dist/parser/index.d.ts
CHANGED
|
@@ -22,6 +22,16 @@ export declare class Parser {
|
|
|
22
22
|
private parseNow;
|
|
23
23
|
private parseComment;
|
|
24
24
|
private parseSimpleBlock;
|
|
25
|
+
private parseCycle;
|
|
26
|
+
private parseFirstof;
|
|
27
|
+
private parseIfchanged;
|
|
28
|
+
private parseRegroup;
|
|
29
|
+
private parseWidthratio;
|
|
30
|
+
private parseLorem;
|
|
31
|
+
private parseCsrfToken;
|
|
32
|
+
private parseDebug;
|
|
33
|
+
private parseTemplatetag;
|
|
34
|
+
private parseIfequal;
|
|
25
35
|
private parseExpression;
|
|
26
36
|
private parseConditional;
|
|
27
37
|
private parseOr;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/parser/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAA;AACrC,OAAO,KAAK,EAEV,YAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/parser/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAA;AACrC,OAAO,KAAK,EAEV,YAAY,EAsCb,MAAM,SAAS,CAAA;AAEhB,qBAAa,MAAM;IACjB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAY;gBAEf,MAAM,EAAE,KAAK,EAAE;IAI3B,KAAK,IAAI,YAAY;IAgBrB,OAAO,CAAC,cAAc;IAsBtB,OAAO,CAAC,SAAS;IAUjB,OAAO,CAAC,WAAW;IAanB,OAAO,CAAC,UAAU;IAkElB,OAAO,CAAC,OAAO;IA+Df,OAAO,CAAC,QAAQ;IAuEhB,OAAO,CAAC,aAAa;IA+BrB,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,YAAY;IA8CpB,OAAO,CAAC,QAAQ;IAehB,OAAO,CAAC,SAAS;IAiCjB,OAAO,CAAC,SAAS;IAiBjB,OAAO,CAAC,QAAQ;IAqChB,OAAO,CAAC,WAAW;IAoBnB,OAAO,CAAC,QAAQ;IAoBhB,OAAO,CAAC,YAAY;IAapB,OAAO,CAAC,gBAAgB;IAqBxB,OAAO,CAAC,UAAU;IAgClB,OAAO,CAAC,YAAY;IAkCpB,OAAO,CAAC,cAAc;IA2CtB,OAAO,CAAC,YAAY;IAmBpB,OAAO,CAAC,eAAe;IAwBvB,OAAO,CAAC,UAAU;IA0ClB,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,UAAU;IAUlB,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,YAAY;IAmDpB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,gBAAgB;IAwBxB,OAAO,CAAC,OAAO;IAmBf,OAAO,CAAC,QAAQ;IAmBhB,OAAO,CAAC,QAAQ;IAgBhB,OAAO,CAAC,YAAY;IAgFpB,OAAO,CAAC,WAAW;IAmBnB,OAAO,CAAC,WAAW;IAmBnB,OAAO,CAAC,UAAU;IAgBlB,OAAO,CAAC,WAAW;IA2DnB,OAAO,CAAC,YAAY;IAiEpB,OAAO,CAAC,YAAY;IAkFpB,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,IAAI;IAIZ,OAAO,CAAC,QAAQ;IAKhB,OAAO,CAAC,OAAO;IAKf,OAAO,CAAC,KAAK;IAKb,OAAO,CAAC,KAAK;IAQb,OAAO,CAAC,MAAM;IAMd,OAAO,CAAC,KAAK;CAId;AAED,cAAc,SAAS,CAAA"}
|
package/dist/parser/nodes.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* AST Node definitions for Jinja2/DTL templates
|
|
3
3
|
*/
|
|
4
|
-
export type NodeType = 'Template' | 'Text' | 'Output' | 'If' | 'For' | 'Block' | 'Extends' | 'Include' | 'Set' | 'With' | 'Macro' | 'Call' | 'Filter' | 'Comment' | 'Load' | 'Url' | 'Static' | 'Cache' | 'Now' | 'Name' | 'Literal' | 'Array' | 'Object' | 'BinaryOp' | 'UnaryOp' | 'Compare' | 'GetAttr' | 'GetItem' | 'FilterExpr' | 'TestExpr' | 'Conditional' | 'FunctionCall';
|
|
4
|
+
export type NodeType = 'Template' | 'Text' | 'Output' | 'If' | 'For' | 'Block' | 'Extends' | 'Include' | 'Set' | 'With' | 'Macro' | 'Call' | 'Filter' | 'Comment' | 'Load' | 'Url' | 'Static' | 'Cache' | 'Now' | 'Cycle' | 'Firstof' | 'Ifchanged' | 'Regroup' | 'Widthratio' | 'Lorem' | 'CsrfToken' | 'Debug' | 'Templatetag' | 'Name' | 'Literal' | 'Array' | 'Object' | 'BinaryOp' | 'UnaryOp' | 'Compare' | 'GetAttr' | 'GetItem' | 'FilterExpr' | 'TestExpr' | 'Conditional' | 'FunctionCall';
|
|
5
5
|
export interface BaseNode {
|
|
6
6
|
type: NodeType;
|
|
7
7
|
line: number;
|
|
@@ -95,6 +95,53 @@ export interface NowNode extends BaseNode {
|
|
|
95
95
|
format: ExpressionNode;
|
|
96
96
|
asVar: string | null;
|
|
97
97
|
}
|
|
98
|
+
export interface CycleNode extends BaseNode {
|
|
99
|
+
type: 'Cycle';
|
|
100
|
+
values: ExpressionNode[];
|
|
101
|
+
asVar: string | null;
|
|
102
|
+
silent: boolean;
|
|
103
|
+
}
|
|
104
|
+
export interface FirstofNode extends BaseNode {
|
|
105
|
+
type: 'Firstof';
|
|
106
|
+
values: ExpressionNode[];
|
|
107
|
+
fallback: ExpressionNode | null;
|
|
108
|
+
asVar: string | null;
|
|
109
|
+
}
|
|
110
|
+
export interface IfchangedNode extends BaseNode {
|
|
111
|
+
type: 'Ifchanged';
|
|
112
|
+
values: ExpressionNode[];
|
|
113
|
+
body: ASTNode[];
|
|
114
|
+
else_: ASTNode[];
|
|
115
|
+
}
|
|
116
|
+
export interface RegroupNode extends BaseNode {
|
|
117
|
+
type: 'Regroup';
|
|
118
|
+
target: ExpressionNode;
|
|
119
|
+
key: string;
|
|
120
|
+
asVar: string;
|
|
121
|
+
}
|
|
122
|
+
export interface WidthratioNode extends BaseNode {
|
|
123
|
+
type: 'Widthratio';
|
|
124
|
+
value: ExpressionNode;
|
|
125
|
+
maxValue: ExpressionNode;
|
|
126
|
+
maxWidth: ExpressionNode;
|
|
127
|
+
asVar: string | null;
|
|
128
|
+
}
|
|
129
|
+
export interface LoremNode extends BaseNode {
|
|
130
|
+
type: 'Lorem';
|
|
131
|
+
count: ExpressionNode | null;
|
|
132
|
+
method: 'w' | 'p' | 'b';
|
|
133
|
+
random: boolean;
|
|
134
|
+
}
|
|
135
|
+
export interface CsrfTokenNode extends BaseNode {
|
|
136
|
+
type: 'CsrfToken';
|
|
137
|
+
}
|
|
138
|
+
export interface DebugNode extends BaseNode {
|
|
139
|
+
type: 'Debug';
|
|
140
|
+
}
|
|
141
|
+
export interface TemplatetagNode extends BaseNode {
|
|
142
|
+
type: 'Templatetag';
|
|
143
|
+
tagType: 'openblock' | 'closeblock' | 'openvariable' | 'closevariable' | 'openbrace' | 'closebrace' | 'opencomment' | 'closecomment';
|
|
144
|
+
}
|
|
98
145
|
export interface NameNode extends BaseNode {
|
|
99
146
|
type: 'Name';
|
|
100
147
|
name: string;
|
|
@@ -193,6 +240,6 @@ export interface FilterNode extends BaseNode {
|
|
|
193
240
|
body: ASTNode[];
|
|
194
241
|
}
|
|
195
242
|
export type ExpressionNode = NameNode | LiteralNode | ArrayNode | ObjectNode | BinaryOpNode | UnaryOpNode | CompareNode | GetAttrNode | GetItemNode | FilterExprNode | TestExprNode | ConditionalNode | FunctionCallNode;
|
|
196
|
-
export type StatementNode = TextNode | OutputNode | IfNode | ForNode | BlockNode | ExtendsNode | IncludeNode | SetNode | WithNode | LoadNode | UrlNode | StaticNode | CacheNode | NowNode | CommentNode | MacroNode | CallNode | FilterNode;
|
|
243
|
+
export type StatementNode = TextNode | OutputNode | IfNode | ForNode | BlockNode | ExtendsNode | IncludeNode | SetNode | WithNode | LoadNode | UrlNode | StaticNode | CacheNode | NowNode | CommentNode | MacroNode | CallNode | FilterNode | CycleNode | FirstofNode | IfchangedNode | RegroupNode | WidthratioNode | LoremNode | CsrfTokenNode | DebugNode | TemplatetagNode;
|
|
197
244
|
export type ASTNode = StatementNode | ExpressionNode | TemplateNode;
|
|
198
245
|
//# sourceMappingURL=nodes.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nodes.d.ts","sourceRoot":"","sources":["../../src/parser/nodes.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"nodes.d.ts","sourceRoot":"","sources":["../../src/parser/nodes.ts"],"names":[],"mappings":"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"}
|
package/dist/runtime/index.d.ts
CHANGED
|
@@ -40,6 +40,17 @@ export declare class Runtime {
|
|
|
40
40
|
private renderUrlSync;
|
|
41
41
|
private renderStaticSync;
|
|
42
42
|
private renderNowSync;
|
|
43
|
+
private cycleState;
|
|
44
|
+
private renderCycleSync;
|
|
45
|
+
private renderFirstofSync;
|
|
46
|
+
private ifchangedState;
|
|
47
|
+
private renderIfchangedSync;
|
|
48
|
+
private renderRegroupSync;
|
|
49
|
+
private renderWidthratioSync;
|
|
50
|
+
private renderLoremSync;
|
|
51
|
+
private renderCsrfTokenSync;
|
|
52
|
+
private renderDebugSync;
|
|
53
|
+
private renderTemplatetagSync;
|
|
43
54
|
private getDateInTimezone;
|
|
44
55
|
private formatDate;
|
|
45
56
|
private renderNodesSync;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAkB,cAAc,EAAE,MAAM,YAAY,CAAA;AAC3D,OAAO,EAAgB,YAAY,EAAE,MAAM,UAAU,CAAA;AACrD,OAAO,KAAK,EAEV,YAAY,EAcZ,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"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"}
|