Initial monorepo — everything BlackRoad in one place
bin/ 230 CLI tools (ask-*, br-*, agent-*, roadid, carpool) scripts/ 99 automation scripts fleet/ Node configs and deployment workers/ Cloudflare Worker sources (roadpay, road-search, squad webhooks) roadc/ RoadC programming language roadnet/ Mesh network (5 APs, WireGuard) operator/ Memory system scripts config/ System configs dotfiles/ Shell configs docs/ Documentation BlackRoad OS — Pave Tomorrow. RoadChain-SHA2048: d1a24f55318d338b RoadChain-Identity: alexa@sovereign RoadChain-Full: d1a24f55318d338b24b60bad7be39286379c76ae5470817482100cb0ddbbcb97e147d07ac7243da0a9f0363e4e5c833d612b9c0df3a3cd20802465420278ef74875a5b77f55af6fe42a931b8b635b3d0d0b6bde9abf33dc42eea52bc03c951406d8cbe49f1a3d29b26a94dade05e9477f34a7d4d4c6ec4005c3c2ac54e73a68440c512c8e83fd9b1fe234750b898ef8f4032c23db173961fe225e67a0432b5293a9714f76c5c57ed5fdf35b9fb40fd73c03ebf88b7253c6a0575f5afb6a6b49b3bda310602fb1ef676859962dad2aebbb2875814b30eee0a8ba195e482d4cbc91d8819e7f38f6db53e8063401649c77bb994371473cabfb917fb53e8cbe73d60
This commit is contained in:
216
bin/blackroad-web
Executable file
216
bin/blackroad-web
Executable file
@@ -0,0 +1,216 @@
|
||||
#!/usr/bin/env bash
|
||||
# ============================================================================
|
||||
# BLACKROAD OS, INC. - PROPRIETARY AND CONFIDENTIAL
|
||||
# Copyright (c) 2025-2026 BlackRoad OS, Inc. All Rights Reserved.
|
||||
#
|
||||
# This code is the intellectual property of BlackRoad OS, Inc.
|
||||
# AI-assisted development does not transfer ownership to AI providers.
|
||||
# Unauthorized use, copying, or distribution is prohibited.
|
||||
# NOT licensed for AI training or data extraction.
|
||||
# ============================================================================
|
||||
# BlackRoad Web Renderer - Render web pages and HTML in terminal
|
||||
# Usage: br-web-render <url|file>
|
||||
# br-web-render --serve <html-file>
|
||||
# br-web-render --live <url>
|
||||
|
||||
# Color functions (using printf for proper escape handling)
|
||||
c_pink() { printf '\033[38;5;205m'; }
|
||||
c_blue() { printf '\033[38;5;75m'; }
|
||||
c_orange() { printf '\033[38;5;208m'; }
|
||||
c_gray() { printf '\033[38;5;240m'; }
|
||||
c_reset() { printf '\033[0m'; }
|
||||
|
||||
# ==================
|
||||
# RENDERER DETECTION
|
||||
# ==================
|
||||
|
||||
detect_renderer() {
|
||||
if command -v w3m >/dev/null 2>&1; then
|
||||
echo "w3m"
|
||||
elif command -v lynx >/dev/null 2>&1; then
|
||||
echo "lynx"
|
||||
elif command -v curl >/dev/null 2>&1; then
|
||||
echo "curl"
|
||||
else
|
||||
echo "none"
|
||||
fi
|
||||
}
|
||||
|
||||
# ==================
|
||||
# RENDER FUNCTIONS
|
||||
# ==================
|
||||
|
||||
render_url() {
|
||||
local url="$1"
|
||||
local renderer="$2"
|
||||
|
||||
c_blue; printf "🌐 Rendering: "; c_reset; printf "%s\n" "$url"
|
||||
c_gray; printf "Renderer: %s\n\n" "$renderer"; c_reset
|
||||
|
||||
case "$renderer" in
|
||||
w3m)
|
||||
w3m -dump "$url"
|
||||
;;
|
||||
lynx)
|
||||
lynx -dump -nolist "$url"
|
||||
;;
|
||||
curl)
|
||||
curl -sL "$url" | sed 's/<[^>]*>//g' | sed '/^$/d'
|
||||
;;
|
||||
*)
|
||||
c_orange; printf "❌ No renderer available\n"; c_reset
|
||||
printf "Install one of: w3m, lynx, curl\n"
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
render_file() {
|
||||
local file="$1"
|
||||
local renderer="$2"
|
||||
|
||||
if [[ ! -f "$file" ]]; then
|
||||
c_orange; printf "❌ File not found: %s\n" "$file"; c_reset
|
||||
return 1
|
||||
fi
|
||||
|
||||
c_blue; printf "📄 Rendering: "; c_reset; printf "%s\n" "$file"
|
||||
c_gray; printf "Renderer: %s\n\n" "$renderer"; c_reset
|
||||
|
||||
case "$renderer" in
|
||||
w3m)
|
||||
w3m -dump "$file"
|
||||
;;
|
||||
lynx)
|
||||
lynx -dump -nolist "$file"
|
||||
;;
|
||||
*)
|
||||
# Fallback: strip HTML tags
|
||||
sed 's/<[^>]*>//g' "$file" | sed '/^$/d'
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
# ==================
|
||||
# LIVE MODE
|
||||
# ==================
|
||||
|
||||
render_live() {
|
||||
local url="$1"
|
||||
local interval="${2:-5}"
|
||||
local renderer=$(detect_renderer)
|
||||
|
||||
c_pink; printf "═══ LIVE MODE ═══\n"; c_reset
|
||||
c_gray; printf "URL: %s\n" "$url"
|
||||
printf "Refresh: %ss\n" "$interval"
|
||||
printf "Press Ctrl+C to exit\n\n"; c_reset
|
||||
|
||||
while true; do
|
||||
clear
|
||||
render_url "$url" "$renderer"
|
||||
c_gray; printf "\n─────────────────────────\n"; c_reset
|
||||
c_gray; printf "Updated: %s\n" "$(date)"; c_reset
|
||||
sleep "$interval"
|
||||
done
|
||||
}
|
||||
|
||||
# ==================
|
||||
# SERVE MODE
|
||||
# ==================
|
||||
|
||||
serve_html() {
|
||||
local file="$1"
|
||||
local renderer=$(detect_renderer)
|
||||
|
||||
if [[ ! -f "$file" ]]; then
|
||||
c_orange; printf "❌ File not found: %s\n" "$file"; c_reset
|
||||
return 1
|
||||
fi
|
||||
|
||||
c_pink; printf "═══ SERVE MODE ═══\n"; c_reset
|
||||
c_gray; printf "File: %s\n" "$file"
|
||||
printf "Press 'r' to refresh, 'q' to quit\n\n"; c_reset
|
||||
|
||||
while true; do
|
||||
render_file "$file" "$renderer"
|
||||
|
||||
c_gray; printf "\n─────────────────────────\n"; c_reset
|
||||
read -rsn1 -p "Command (r=refresh, q=quit): " key
|
||||
printf "\n"
|
||||
|
||||
case "$key" in
|
||||
r|R)
|
||||
clear
|
||||
;;
|
||||
q|Q)
|
||||
break
|
||||
;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
|
||||
# ==================
|
||||
# MAIN CLI
|
||||
# ==================
|
||||
|
||||
main() {
|
||||
local arg="${1:-}"
|
||||
|
||||
if [[ -z "$arg" ]]; then
|
||||
cat <<'HELP'
|
||||
BlackRoad Web Renderer - Render web pages in terminal
|
||||
|
||||
USAGE:
|
||||
br-web-render <url> Render URL once
|
||||
br-web-render <file.html> Render HTML file
|
||||
br-web-render --live <url> [sec] Auto-refresh every N seconds
|
||||
br-web-render --serve <file> Serve HTML with refresh option
|
||||
br-web-render --help Show this help
|
||||
|
||||
EXAMPLES:
|
||||
br-web-render https://github.com
|
||||
br-web-render ~/index.html
|
||||
br-web-render --live https://blackroad.io 10
|
||||
br-web-render --serve ~/dashboard.html
|
||||
|
||||
RENDERERS (in order of preference):
|
||||
1. w3m - Best terminal browser (recommended)
|
||||
2. lynx - Classic terminal browser
|
||||
3. curl - Basic HTML stripping fallback
|
||||
|
||||
INSTALL:
|
||||
brew install w3m # macOS
|
||||
apt install w3m # Debian/Ubuntu
|
||||
dnf install w3m # Fedora
|
||||
HELP
|
||||
return 0
|
||||
fi
|
||||
|
||||
local renderer=$(detect_renderer)
|
||||
|
||||
case "$arg" in
|
||||
--live|-l)
|
||||
render_live "${2:-}" "${3:-5}"
|
||||
;;
|
||||
--serve|-s)
|
||||
serve_html "${2:-}"
|
||||
;;
|
||||
--help|-h)
|
||||
main ""
|
||||
;;
|
||||
http://*|https://*)
|
||||
render_url "$arg" "$renderer"
|
||||
;;
|
||||
*)
|
||||
if [[ -f "$arg" ]]; then
|
||||
render_file "$arg" "$renderer"
|
||||
else
|
||||
c_orange; printf "❌ Invalid input: %s\n" "$arg"; c_reset
|
||||
printf "Use --help for usage\n"
|
||||
return 1
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
main "$@"
|
||||
Reference in New Issue
Block a user