blob: 6169ec0b489d4e5200770b05a87e1b4aea8a0eb9 [file]
#!/usr/bin/env python3
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you 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
#
# http://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.
#
# /// script
# requires-python = ">=3.11"
# dependencies = [
# "rich>=14.0.0",
# ]
# ///
import shutil
import argparse
from pathlib import Path
from rich.console import Console
console = Console(width=200, color_system="standard")
CSS_TO_ADD = """
.td-main, .roadmap {
position: relative; /* Ensures the pseudo-element is positioned relative to the main content */
}
.td-main::before,
.roadmap::before {
content: "";
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: url(URL_PREFIX/staging.png) repeat center center fixed; /* Sets the background image */
opacity: 0.2; /* Makes the watermark semi-transparent */
pointer-events: none; /* Ensures the watermark doesn't interfere with user interactions */
z-index: -1; /* Places the pseudo-element behind all other elements */
}
/* Dark mode support - increases watermark visibility */
[data-theme="dark"] .td-main::before,
[data-theme="dark"] .roadmap::before,
[data-bs-theme="dark"] .td-main::before,
[data-bs-theme="dark"] .roadmap::before,
.dark .td-main::before,
.dark .roadmap::before,
.dark-mode .td-main::before {
.dark-mode .roadmap::before {
opacity: 0.2; /* Higher opacity for dark mode visibility */
filter: invert(1) brightness(2); /* Inverts colors for dark background */
z-index: 1;
}
"""
IMAGE_FILE=Path(__file__).parent / "images" / "staging.png"
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Add watermark")
parser.add_argument("--folder", required=True, help="Folder to look for css files for")
parser.add_argument("--pattern", required=True, help="Glob pattern to look for")
parser.add_argument("--url-prefix", required=True, help="URL prefix to use for the image")
parser.add_argument("--image-directory", required=True,
help="Image directory where image should be written-relative to folder path.")
console.print("[bright_blue]Adding watermark to the site's CSS")
args = parser.parse_args()
folder_path = Path(args.folder)
pattern = args.pattern
url_prefix = args.url_prefix
image_directory_path = Path(args.image_directory)
content_to_add = CSS_TO_ADD.replace("URL_PREFIX", url_prefix)
console.print(f"[bright_blue]Looking for css files following '{pattern}' pattern[/] in {folder_path}")
files = folder_path.rglob(pattern)
if not files:
console.print(f"[red]No files found with pattern {pattern} in {folder_path}")
else:
for file in files:
content = file.read_text()
if not "watermark semi-transparent" in content:
console.print(f"[yellow]Adding watermark to:[/] {file}")
content = content + content_to_add
file.write_text(content)
target_image_location = folder_path / image_directory_path
console.print(f"[yellow]Creating staging image at :[/]:{target_image_location}/staging.png")
target_image_location.mkdir(parents=True, exist_ok=True)
shutil.copy(IMAGE_FILE, target_image_location / "staging.png")