From 6e57d93f747d4f2fbd590f9ee2f8108452bb766c Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Mon, 16 Nov 2020 11:30:59 +0100 Subject: [PATCH] :tada: Add polyfill to requestIdleCallback (not supported on safari). --- frontend/src/app/util/timers.cljs | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/frontend/src/app/util/timers.cljs b/frontend/src/app/util/timers.cljs index ef6f39e29..186161344 100644 --- a/frontend/src/app/util/timers.cljs +++ b/frontend/src/app/util/timers.cljs @@ -33,16 +33,28 @@ (-dispose [_] (js/clearInterval sem))))) +(if (and (exists? js/window) (.-requestIdleCallback js/window)) + (do + (def ^:private request-idle-callback #(js/requestIdleCallback %)) + (def ^:private cancel-idle-callback #(js/cancelIdleCallback %))) + (do + (def ^:private request-idle-callback #(js/setTimeout % 100)) + (def ^:private cancel-idle-callback #(js/cancelTimeout %)))) + (defn schedule-on-idle [func] - (let [sem (js/requestIdleCallback #(func))] + (let [sem (request-idle-callback #(func))] (reify rx/IDisposable (-dispose [_] - (js/cancelIdleCallback sem))))) + (cancel-idle-callback sem))))) + +(def ^:private request-animation-frame + (or (and (exists? js/window) (.-requestAnimationFrame js/window)) + #(js/setTimeout % 16))) (defn raf [f] - (js/window.requestAnimationFrame f)) + (request-animation-frame f)) (defn idle-then-raf [f]