From db196a37ede289d718222432cf344d62f455bb6f Mon Sep 17 00:00:00 2001 From: Bramus Date: Sun, 28 Jan 2024 12:06:35 +0100 Subject: [PATCH] Split off JS polyfill into its own file --- src/index.js | 57 +------------------------------- src/scroll-timeline-js.js | 69 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+), 56 deletions(-) create mode 100644 src/scroll-timeline-js.js diff --git a/src/index.js b/src/index.js index c679b42..9f0f2be 100644 --- a/src/index.js +++ b/src/index.js @@ -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(); diff --git a/src/scroll-timeline-js.js b/src/scroll-timeline-js.js new file mode 100644 index 0000000..14ae62b --- /dev/null +++ b/src/scroll-timeline-js.js @@ -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; +} \ No newline at end of file