Compare commits
3 Commits
382d1b7c7a
...
0a5562243b
| Author | SHA1 | Date | |
|---|---|---|---|
| 0a5562243b | |||
| 2b41aaa6ce | |||
| cfe66e5342 |
@@ -118,7 +118,7 @@ class Post(Base):
|
|||||||
secondary="post_authors",
|
secondary="post_authors",
|
||||||
primaryjoin="Post.id==post_authors.c.post_id",
|
primaryjoin="Post.id==post_authors.c.post_id",
|
||||||
secondaryjoin="Author.id==post_authors.c.author_id",
|
secondaryjoin="Author.id==post_authors.c.author_id",
|
||||||
back_populates="authors",
|
back_populates="posts",
|
||||||
order_by="PostAuthor.sort_order",
|
order_by="PostAuthor.sort_order",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -808,18 +808,32 @@
|
|||||||
return renderDOM(fn.body, local);
|
return renderDOM(fn.body, local);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** True when the array expr is a render-only form (HTML tag, <>, raw!, ~comp). */
|
||||||
|
function _isRenderExpr(v) {
|
||||||
|
if (!Array.isArray(v) || !v.length) return false;
|
||||||
|
var h = v[0];
|
||||||
|
if (!isSym(h)) return false;
|
||||||
|
var n = h.name;
|
||||||
|
return !!(HTML_TAGS[n] || SVG_TAGS[n] || n === "<>" || n === "raw!" || n.charAt(0) === "~");
|
||||||
|
}
|
||||||
|
|
||||||
function renderComponentDOM(comp, args, env) {
|
function renderComponentDOM(comp, args, env) {
|
||||||
var kwargs = {}, children = [];
|
var kwargs = {}, children = [];
|
||||||
var i = 0;
|
var i = 0;
|
||||||
while (i < args.length) {
|
while (i < args.length) {
|
||||||
if (isKw(args[i]) && i + 1 < args.length) {
|
if (isKw(args[i]) && i + 1 < args.length) {
|
||||||
// Keep kwarg values as AST — renderDOM will handle them when the
|
// Evaluate kwarg values eagerly in the caller's env so expressions
|
||||||
// component body references the param symbol. Simple literals are
|
// like (get t "src") resolve while lambda params are still bound.
|
||||||
// eval'd so strings/numbers resolve immediately.
|
// Render-only forms (HTML tags, <>, ~comp) go through renderDOM instead.
|
||||||
var v = args[i + 1];
|
var v = args[i + 1];
|
||||||
kwargs[args[i].name] = (typeof v === "string" || typeof v === "number" ||
|
if (typeof v === "string" || typeof v === "number" ||
|
||||||
typeof v === "boolean" || isNil(v) || isKw(v))
|
typeof v === "boolean" || isNil(v)) {
|
||||||
? v : (isSym(v) ? sxEval(v, env) : v);
|
kwargs[args[i].name] = v;
|
||||||
|
} else if (_isRenderExpr(v)) {
|
||||||
|
kwargs[args[i].name] = renderDOM(v, env);
|
||||||
|
} else {
|
||||||
|
kwargs[args[i].name] = sxEval(v, env);
|
||||||
|
}
|
||||||
i += 2;
|
i += 2;
|
||||||
} else {
|
} else {
|
||||||
children.push(args[i]);
|
children.push(args[i]);
|
||||||
|
|||||||
Reference in New Issue
Block a user