2021-04-13 10:57:08 +02:00
|
|
|
// Copyright: Ankitects Pty Ltd and contributors
|
|
|
|
// License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
|
|
|
|
2021-03-24 23:35:51 +01:00
|
|
|
interface AllowPropertiesBlockValues {
|
|
|
|
[property: string]: string[];
|
|
|
|
}
|
|
|
|
|
|
|
|
type BlockProperties = string[];
|
|
|
|
|
|
|
|
type StylingPredicate = (property: string, value: string) => boolean;
|
|
|
|
|
|
|
|
const stylingNightMode: AllowPropertiesBlockValues = {
|
|
|
|
"font-weight": [],
|
|
|
|
"font-style": [],
|
|
|
|
"text-decoration-line": [],
|
|
|
|
};
|
|
|
|
|
|
|
|
const stylingLightMode: AllowPropertiesBlockValues = {
|
|
|
|
color: [],
|
|
|
|
"background-color": ["transparent"],
|
|
|
|
...stylingNightMode,
|
|
|
|
};
|
|
|
|
|
|
|
|
const stylingInternal: BlockProperties = [
|
|
|
|
"background-color",
|
|
|
|
"font-size",
|
|
|
|
"font-family",
|
|
|
|
];
|
|
|
|
|
|
|
|
const allowPropertiesBlockValues = (
|
|
|
|
allowBlock: AllowPropertiesBlockValues
|
|
|
|
): StylingPredicate => (property: string, value: string): boolean =>
|
2021-03-25 00:43:01 +01:00
|
|
|
Object.prototype.hasOwnProperty.call(allowBlock, property) &&
|
|
|
|
!allowBlock[property].includes(value);
|
2021-03-24 23:35:51 +01:00
|
|
|
|
|
|
|
const blockProperties = (block: BlockProperties): StylingPredicate => (
|
|
|
|
property: string
|
|
|
|
): boolean => !block.includes(property);
|
|
|
|
|
|
|
|
const filterStyling = (predicate: (property: string, value: string) => boolean) => (
|
|
|
|
element: HTMLElement
|
|
|
|
): void => {
|
|
|
|
for (const property of [...element.style]) {
|
2021-04-22 18:33:42 +02:00
|
|
|
const value = element.style.getPropertyValue(property);
|
2021-03-24 23:35:51 +01:00
|
|
|
|
|
|
|
if (!predicate(property, value)) {
|
|
|
|
element.style.removeProperty(property);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
export const filterStylingNightMode = filterStyling(
|
|
|
|
allowPropertiesBlockValues(stylingNightMode)
|
|
|
|
);
|
|
|
|
export const filterStylingLightMode = filterStyling(
|
|
|
|
allowPropertiesBlockValues(stylingLightMode)
|
|
|
|
);
|
|
|
|
export const filterStylingInternal = filterStyling(blockProperties(stylingInternal));
|