diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
commit | 36d22d82aa202bb199967e9512281e9a53db42c9 (patch) | |
tree | 105e8c98ddea1c1e4784a60a5a6410fa416be2de /devtools/client/inspector/grids/reducers | |
parent | Initial commit. (diff) | |
download | firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.tar.xz firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.zip |
Adding upstream version 115.7.0esr.upstream/115.7.0esrupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'devtools/client/inspector/grids/reducers')
3 files changed, 151 insertions, 0 deletions
diff --git a/devtools/client/inspector/grids/reducers/grids.js b/devtools/client/inspector/grids/reducers/grids.js new file mode 100644 index 0000000000..5ab8bb5060 --- /dev/null +++ b/devtools/client/inspector/grids/reducers/grids.js @@ -0,0 +1,87 @@ +/* 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_GRID_COLOR, + UPDATE_GRID_HIGHLIGHTED, + UPDATE_GRIDS, +} = require("resource://devtools/client/inspector/grids/actions/index.js"); + +const INITIAL_GRIDS = []; + +const reducers = { + [UPDATE_GRID_COLOR](grids, { nodeFront, color }) { + const newGrids = grids.map(g => { + if (g.nodeFront === nodeFront) { + g = Object.assign({}, g, { color }); + } + + return g; + }); + + return newGrids; + }, + + [UPDATE_GRID_HIGHLIGHTED](grids, { nodeFront, highlighted }) { + const maxHighlighters = Services.prefs.getIntPref( + "devtools.gridinspector.maxHighlighters" + ); + const highlightedNodeFronts = grids + .filter(g => g.highlighted) + .map(g => g.nodeFront); + let numHighlighted = highlightedNodeFronts.length; + + // Get the total number of highlighted grids including the one that will be + // highlighted/unhighlighted. + if (!highlightedNodeFronts.includes(nodeFront) && highlighted) { + numHighlighted += 1; + } else if (highlightedNodeFronts.includes(nodeFront) && !highlighted) { + numHighlighted -= 1; + } + + return grids.map(g => { + if (maxHighlighters === 1) { + // When there is only one grid highlighter available, only the given grid + // container nodeFront can be highlighted, and all the other grid containers + // are unhighlighted. + return Object.assign({}, g, { + highlighted: g.nodeFront === nodeFront && highlighted, + }); + } else if ( + numHighlighted === maxHighlighters && + g.nodeFront !== nodeFront + ) { + // The maximum number of highlighted grids have been reached. Disable all the + // other non-highlighted grids. + return Object.assign({}, g, { + disabled: !g.highlighted, + }); + } else if (g.nodeFront === nodeFront) { + // This is the provided grid nodeFront to highlight/unhighlight. + return Object.assign({}, g, { + disabled: false, + highlighted, + }); + } + + return Object.assign({}, g, { + disabled: false, + }); + }); + }, + + [UPDATE_GRIDS](_, { grids }) { + return grids; + }, +}; + +module.exports = function (grids = INITIAL_GRIDS, action) { + const reducer = reducers[action.type]; + if (!reducer) { + return grids; + } + return reducer(grids, action); +}; diff --git a/devtools/client/inspector/grids/reducers/highlighter-settings.js b/devtools/client/inspector/grids/reducers/highlighter-settings.js new file mode 100644 index 0000000000..3568390df6 --- /dev/null +++ b/devtools/client/inspector/grids/reducers/highlighter-settings.js @@ -0,0 +1,54 @@ +/* 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_SHOW_GRID_AREAS, + UPDATE_SHOW_GRID_LINE_NUMBERS, + UPDATE_SHOW_INFINITE_LINES, +} = require("resource://devtools/client/inspector/grids/actions/index.js"); + +const SHOW_GRID_AREAS = "devtools.gridinspector.showGridAreas"; +const SHOW_GRID_LINE_NUMBERS = "devtools.gridinspector.showGridLineNumbers"; +const SHOW_INFINITE_LINES = "devtools.gridinspector.showInfiniteLines"; + +const INITIAL_HIGHLIGHTER_SETTINGS = () => { + return { + showGridAreasOverlay: Services.prefs.getBoolPref(SHOW_GRID_AREAS), + showGridLineNumbers: Services.prefs.getBoolPref(SHOW_GRID_LINE_NUMBERS), + showInfiniteLines: Services.prefs.getBoolPref(SHOW_INFINITE_LINES), + }; +}; + +const reducers = { + [UPDATE_SHOW_GRID_AREAS](highlighterSettings, { enabled }) { + return Object.assign({}, highlighterSettings, { + showGridAreasOverlay: enabled, + }); + }, + + [UPDATE_SHOW_GRID_LINE_NUMBERS](highlighterSettings, { enabled }) { + return Object.assign({}, highlighterSettings, { + showGridLineNumbers: enabled, + }); + }, + + [UPDATE_SHOW_INFINITE_LINES](highlighterSettings, { enabled }) { + return Object.assign({}, highlighterSettings, { + showInfiniteLines: enabled, + }); + }, +}; + +module.exports = function ( + highlighterSettings = INITIAL_HIGHLIGHTER_SETTINGS(), + action +) { + const reducer = reducers[action.type]; + if (!reducer) { + return highlighterSettings; + } + return reducer(highlighterSettings, action); +}; diff --git a/devtools/client/inspector/grids/reducers/moz.build b/devtools/client/inspector/grids/reducers/moz.build new file mode 100644 index 0000000000..768e29b542 --- /dev/null +++ b/devtools/client/inspector/grids/reducers/moz.build @@ -0,0 +1,10 @@ +# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*- +# vim: set filetype=python: +# 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/. + +DevToolsModules( + "grids.js", + "highlighter-settings.js", +) |