Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
57 changes: 39 additions & 18 deletions packages/core/src/compiler/__goldens__/pageBuild.preview.html
Original file line number Diff line number Diff line change
Expand Up @@ -530,15 +530,22 @@ <h1 data-hf-id="hf-bowk" class="title intro">Title</h1>
}
}) : window;
var __hfResolveGsapTarget = function(target) {
if (typeof target === "string") return __hfQueryAll(target);
if (!Array.isArray(target)) return target;
return target.reduce(function(resolved, item) {
if (typeof target !== "string" && !Array.isArray(target)) return target;
var resolved = typeof target === "string" ? __hfQueryAll(target) : target.reduce(function(resolved2, item) {
if (typeof item === "string") {
return resolved.concat(Array.prototype.slice.call(__hfQueryAll(item)));
return resolved2.concat(Array.prototype.slice.call(__hfQueryAll(item)));
}
resolved.push(item);
return resolved;
resolved2.push(item);
return resolved2;
}, []);
if (!resolved.length) {
var originalTarget = String(target);
resolved = [];
resolved.toString = function() {
return originalTarget;
};
}
return resolved;
};
var __hfScopeTimeline = function(timeline) {
if (!timeline || timeline.__hfScopedCompositionRoot === __hfFindRoot()) return timeline;
Expand Down Expand Up @@ -1067,15 +1074,22 @@ <h1 data-hf-id="hf-bowk" class="title intro">Title</h1>
}
}) : window;
var __hfResolveGsapTarget = function(target) {
if (typeof target === "string") return __hfQueryAll(target);
if (!Array.isArray(target)) return target;
return target.reduce(function(resolved, item) {
if (typeof target !== "string" && !Array.isArray(target)) return target;
var resolved = typeof target === "string" ? __hfQueryAll(target) : target.reduce(function(resolved2, item) {
if (typeof item === "string") {
return resolved.concat(Array.prototype.slice.call(__hfQueryAll(item)));
return resolved2.concat(Array.prototype.slice.call(__hfQueryAll(item)));
}
resolved.push(item);
return resolved;
resolved2.push(item);
return resolved2;
}, []);
if (!resolved.length) {
var originalTarget = String(target);
resolved = [];
resolved.toString = function() {
return originalTarget;
};
}
return resolved;
};
var __hfScopeTimeline = function(timeline) {
if (!timeline || timeline.__hfScopedCompositionRoot === __hfFindRoot()) return timeline;
Expand Down Expand Up @@ -1604,15 +1618,22 @@ <h1 data-hf-id="hf-bowk" class="title intro">Title</h1>
}
}) : window;
var __hfResolveGsapTarget = function(target) {
if (typeof target === "string") return __hfQueryAll(target);
if (!Array.isArray(target)) return target;
return target.reduce(function(resolved, item) {
if (typeof target !== "string" && !Array.isArray(target)) return target;
var resolved = typeof target === "string" ? __hfQueryAll(target) : target.reduce(function(resolved2, item) {
if (typeof item === "string") {
return resolved.concat(Array.prototype.slice.call(__hfQueryAll(item)));
return resolved2.concat(Array.prototype.slice.call(__hfQueryAll(item)));
}
resolved.push(item);
return resolved;
resolved2.push(item);
return resolved2;
}, []);
if (!resolved.length) {
var originalTarget = String(target);
resolved = [];
resolved.toString = function() {
return originalTarget;
};
}
return resolved;
};
var __hfScopeTimeline = function(timeline) {
if (!timeline || timeline.__hfScopedCompositionRoot === __hfFindRoot()) return timeline;
Expand Down
57 changes: 39 additions & 18 deletions packages/core/src/compiler/__goldens__/pageBuild.render.html
Original file line number Diff line number Diff line change
Expand Up @@ -557,15 +557,22 @@ <h1 class="title intro">Title</h1>
}
}) : window;
var __hfResolveGsapTarget = function(target) {
if (typeof target === "string") return __hfQueryAll(target);
if (!Array.isArray(target)) return target;
return target.reduce(function(resolved, item) {
if (typeof target !== "string" && !Array.isArray(target)) return target;
var resolved = typeof target === "string" ? __hfQueryAll(target) : target.reduce(function(resolved2, item) {
if (typeof item === "string") {
return resolved.concat(Array.prototype.slice.call(__hfQueryAll(item)));
return resolved2.concat(Array.prototype.slice.call(__hfQueryAll(item)));
}
resolved.push(item);
return resolved;
resolved2.push(item);
return resolved2;
}, []);
if (!resolved.length) {
var originalTarget = String(target);
resolved = [];
resolved.toString = function() {
return originalTarget;
};
}
return resolved;
};
var __hfScopeTimeline = function(timeline) {
if (!timeline || timeline.__hfScopedCompositionRoot === __hfFindRoot()) return timeline;
Expand Down Expand Up @@ -1095,15 +1102,22 @@ <h1 class="title intro">Title</h1>
}
}) : window;
var __hfResolveGsapTarget = function(target) {
if (typeof target === "string") return __hfQueryAll(target);
if (!Array.isArray(target)) return target;
return target.reduce(function(resolved, item) {
if (typeof target !== "string" && !Array.isArray(target)) return target;
var resolved = typeof target === "string" ? __hfQueryAll(target) : target.reduce(function(resolved2, item) {
if (typeof item === "string") {
return resolved.concat(Array.prototype.slice.call(__hfQueryAll(item)));
return resolved2.concat(Array.prototype.slice.call(__hfQueryAll(item)));
}
resolved.push(item);
return resolved;
resolved2.push(item);
return resolved2;
}, []);
if (!resolved.length) {
var originalTarget = String(target);
resolved = [];
resolved.toString = function() {
return originalTarget;
};
}
return resolved;
};
var __hfScopeTimeline = function(timeline) {
if (!timeline || timeline.__hfScopedCompositionRoot === __hfFindRoot()) return timeline;
Expand Down Expand Up @@ -1633,15 +1647,22 @@ <h1 class="title intro">Title</h1>
}
}) : window;
var __hfResolveGsapTarget = function(target) {
if (typeof target === "string") return __hfQueryAll(target);
if (!Array.isArray(target)) return target;
return target.reduce(function(resolved, item) {
if (typeof target !== "string" && !Array.isArray(target)) return target;
var resolved = typeof target === "string" ? __hfQueryAll(target) : target.reduce(function(resolved2, item) {
if (typeof item === "string") {
return resolved.concat(Array.prototype.slice.call(__hfQueryAll(item)));
return resolved2.concat(Array.prototype.slice.call(__hfQueryAll(item)));
}
resolved.push(item);
return resolved;
resolved2.push(item);
return resolved2;
}, []);
if (!resolved.length) {
var originalTarget = String(target);
resolved = [];
resolved.toString = function() {
return originalTarget;
};
}
return resolved;
};
var __hfScopeTimeline = function(timeline) {
if (!timeline || timeline.__hfScopedCompositionRoot === __hfFindRoot()) return timeline;
Expand Down
28 changes: 28 additions & 0 deletions packages/core/src/compiler/compositionScoping.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -631,6 +631,34 @@ globalThis.gsap.to("p", { x: 1 });
expect(targetCompositions).toEqual(["scene", "scene"]);
});

it("preserves missing GSAP selectors without targeting another composition", () => {
const { document } = parseHTML(`
<div data-composition-id="scene"></div>
<div data-composition-id="other"><span data-part="missing"></span></div>
`);
const targets: Element[][] = [];
const fakeWindow = {
document,
__timelines: {},
gsap: {
to(target: Element[]) {
targets.push(target);
},
},
};
const wrapped = wrapScopedCompositionScript(
`gsap.to('[data-part="missing"]', { opacity: 1 });`,
"scene",
);

new Function("window", "gsap", wrapped)(fakeWindow, fakeWindow.gsap);

expect(targets).toHaveLength(1);
expect(Array.isArray(targets[0])).toBe(true);
expect(targets[0]).toHaveLength(0);
expect(String(targets[0])).toBe('[data-part="missing"]');
});

it("scopes getElementById when duplicate IDs exist across composition roots", () => {
const { document } = parseHTML(`
<div data-composition-id="scene-a"><canvas id="gl-canvas"></canvas></div>
Expand Down
14 changes: 10 additions & 4 deletions packages/core/src/compiler/compositionScoping.ts
Original file line number Diff line number Diff line change
Expand Up @@ -579,16 +579,22 @@ export function wrapScopedCompositionScript(
})
: window;
var __hfResolveGsapTarget = function(target) {
if (typeof target === "string") return __hfQueryAll(target);
if (!Array.isArray(target)) return target;
return target.reduce(function(resolved, item) {
if (typeof target !== "string" && !Array.isArray(target)) return target;
var resolved = typeof target === "string" ? __hfQueryAll(target) : target.reduce(function(resolved, item) {
if (typeof item === "string") {
return resolved.concat(Array.prototype.slice.call(__hfQueryAll(item)));
}
resolved.push(item);
return resolved;
}, []);

if (!resolved.length) {
// GSAP warns "GSAP target " + targets + " not found"; a bare empty match list prints an
// empty name. Keep the authored selector as the text while still targeting nothing here.
var originalTarget = String(target);
resolved = [];
resolved.toString = function() { return originalTarget; };
}
return resolved;
};
var __hfScopeTimeline = function(timeline) {
if (!timeline || timeline.__hfScopedCompositionRoot === __hfFindRoot()) return timeline;
Expand Down
Loading