From 6bf0a5cb5034a7e684dcc3500e841785237ce2dd Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 19:32:43 +0200 Subject: Adding upstream version 1:115.7.0. Signed-off-by: Daniel Baumann --- .../inspector/animation/reducers/animations.js | 117 +++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 devtools/client/inspector/animation/reducers/animations.js (limited to 'devtools/client/inspector/animation/reducers/animations.js') diff --git a/devtools/client/inspector/animation/reducers/animations.js b/devtools/client/inspector/animation/reducers/animations.js new file mode 100644 index 0000000000..ead3e84147 --- /dev/null +++ b/devtools/client/inspector/animation/reducers/animations.js @@ -0,0 +1,117 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +"use strict"; + +const { + UPDATE_ANIMATIONS, + UPDATE_DETAIL_VISIBILITY, + UPDATE_ELEMENT_PICKER_ENABLED, + UPDATE_HIGHLIGHTED_NODE, + UPDATE_PLAYBACK_RATES, + UPDATE_SELECTED_ANIMATION, + UPDATE_SIDEBAR_SIZE, +} = require("resource://devtools/client/inspector/animation/actions/index.js"); + +loader.lazyRequireGetter( + this, + "TimeScale", + "resource://devtools/client/inspector/animation/utils/timescale.js" +); + +const INITIAL_STATE = { + animations: [], + detailVisibility: false, + elementPickerEnabled: false, + highlightedNode: null, + playbackRates: [], + selectedAnimation: null, + sidebarSize: { + height: 0, + width: 0, + }, + timeScale: null, +}; + +const reducers = { + [UPDATE_ANIMATIONS](state, { animations }) { + let detailVisibility = state.detailVisibility; + let selectedAnimation = state.selectedAnimation; + + if ( + !state.selectedAnimation || + !animations.find( + animation => animation.actorID === selectedAnimation.actorID + ) + ) { + selectedAnimation = animations.length === 1 ? animations[0] : null; + detailVisibility = !!selectedAnimation; + } + + const playbackRates = getPlaybackRates(state.playbackRates, animations); + + return Object.assign({}, state, { + animations, + detailVisibility, + playbackRates, + selectedAnimation, + timeScale: new TimeScale(animations), + }); + }, + + [UPDATE_DETAIL_VISIBILITY](state, { detailVisibility }) { + const selectedAnimation = detailVisibility ? state.selectedAnimation : null; + + return Object.assign({}, state, { + detailVisibility, + selectedAnimation, + }); + }, + + [UPDATE_ELEMENT_PICKER_ENABLED](state, { elementPickerEnabled }) { + return Object.assign({}, state, { + elementPickerEnabled, + }); + }, + + [UPDATE_HIGHLIGHTED_NODE](state, { highlightedNode }) { + return Object.assign({}, state, { + highlightedNode, + }); + }, + + [UPDATE_PLAYBACK_RATES](state) { + return Object.assign({}, state, { + playbackRates: getPlaybackRates([], state.animations), + }); + }, + + [UPDATE_SELECTED_ANIMATION](state, { selectedAnimation }) { + const detailVisibility = !!selectedAnimation; + + return Object.assign({}, state, { + detailVisibility, + selectedAnimation, + }); + }, + + [UPDATE_SIDEBAR_SIZE](state, { sidebarSize }) { + return Object.assign({}, state, { + sidebarSize, + }); + }, +}; + +function getPlaybackRates(basePlaybackRate, animations) { + return [ + ...new Set( + animations.map(a => a.state.playbackRate).concat(basePlaybackRate) + ), + ]; +} + +module.exports = function (state = INITIAL_STATE, action) { + const reducer = reducers[action.type]; + return reducer ? reducer(state, action) : state; +}; -- cgit v1.2.3