Skip to content

Commit

Permalink
Split off JS polyfill loading logic into its own file
Browse files Browse the repository at this point in the history
  • Loading branch information
bramus committed Jan 29, 2024
1 parent c956c8f commit 0dab2e7
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 56 deletions.
57 changes: 1 addition & 56 deletions src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,63 +12,8 @@
// See the License for the specific language governing permissions and
// limitations under the License.

import {
ScrollTimeline,
ViewTimeline,
} from "./scroll-timeline-base";
import {
animate,
elementGetAnimations,
documentGetAnimations,
ProxyAnimation
} from "./proxy-animation.js";

import { initCSSPolyfill } from "./scroll-timeline-css"

function initJSPolyfill() {
// Don’t load if the browser already has support
if ((typeof window.ScrollTimeline) !== 'undefined') {
return false;
}

if (
!Reflect.defineProperty(window, 'ScrollTimeline', { value: ScrollTimeline })
) {
throw Error(
'Error installing ScrollTimeline polyfill: could not attach ScrollTimeline to window'
);
}
if (
!Reflect.defineProperty(window, 'ViewTimeline', { value: ViewTimeline })
) {
throw Error(
'Error installing ViewTimeline polyfill: could not attach ViewTimeline to window'
);
}

if (
!Reflect.defineProperty(Element.prototype, 'animate', { value: animate })
) {
throw Error(
"Error installing ScrollTimeline polyfill: could not attach WAAPI's animate to DOM Element"
);
}
if (!Reflect.defineProperty(window, 'Animation', { value: ProxyAnimation })) {
throw Error('Error installing Animation constructor.');
}
if (!Reflect.defineProperty(Element.prototype, "getAnimations", { value: elementGetAnimations })) {
throw Error(
"Error installing ScrollTimeline polyfill: could not attach WAAPI's getAnimations to DOM Element"
);
}
if (!Reflect.defineProperty(document, "getAnimations", { value: documentGetAnimations })) {
throw Error(
"Error installing ScrollTimeline polyfill: could not attach WAAPI's getAnimations to document"
);
}

return true;
}
import { initJSPolyfill } from "./scroll-timeline-js"

function initPolyfill() {
const jsPolyfillLoaded = initJSPolyfill();
Expand Down
69 changes: 69 additions & 0 deletions src/scroll-timeline-js.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
// Copyright 2019 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the 'License');
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an 'AS IS' BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

import {
ScrollTimeline,
ViewTimeline,
} from './scroll-timeline-base';
import {
animate,
elementGetAnimations,
documentGetAnimations,
ProxyAnimation
} from './proxy-animation.js';

export function initJSPolyfill() {
// Don’t load if the browser already has support
if ((typeof window.ScrollTimeline) !== 'undefined') {
return false;
}

if (
!Reflect.defineProperty(window, 'ScrollTimeline', { value: ScrollTimeline })
) {
throw Error(
'Error installing ScrollTimeline polyfill: could not attach ScrollTimeline to window'
);
}
if (
!Reflect.defineProperty(window, 'ViewTimeline', { value: ViewTimeline })
) {
throw Error(
'Error installing ViewTimeline polyfill: could not attach ViewTimeline to window'
);
}

if (
!Reflect.defineProperty(Element.prototype, 'animate', { value: animate })
) {
throw Error(
'Error installing ScrollTimeline polyfill: could not attach WAAPI’s animate to DOM Element'
);
}
if (!Reflect.defineProperty(window, 'Animation', { value: ProxyAnimation })) {
throw Error('Error installing Animation constructor.');
}
if (!Reflect.defineProperty(Element.prototype, 'getAnimations', { value: elementGetAnimations })) {
throw Error(
'Error installing ScrollTimeline polyfill: could not attach WAAPI’s getAnimations to DOM Element'
);
}
if (!Reflect.defineProperty(document, 'getAnimations', { value: documentGetAnimations })) {
throw Error(
'Error installing ScrollTimeline polyfill: could not attach WAAPI’s getAnimations to document'
);
}

return true;
}

0 comments on commit 0dab2e7

Please sign in to comment.